diff --git a/application/src/main/data/json/system/scada_symbols/crane-hp.svg b/application/src/main/data/json/system/scada_symbols/crane-hp.svg new file mode 100644 index 0000000000..7e7c64c99c --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/crane-hp.svg @@ -0,0 +1,346 @@ +{ + "title": "HP Crane", + "description": "Crane with various states.", + "searchTags": [ + "crane" + ], + "widgetSizeX": 5, + "widgetSizeY": 6, + "tags": [ + { + "tag": "background", + "stateRenderFunction": "var color = ctx.properties.stoppedColor;\nif (ctx.values.running) {\n color = ctx.properties.runningColor;\n}\nelement.attr({fill: color});", + "actions": null + }, + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "critical", + "stateRenderFunction": "element.attr({fill: ctx.properties.criticalColor});\nif (ctx.values.critical) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'criticalClick');" + } + } + }, + { + "tag": "warning", + "stateRenderFunction": "element.attr({fill: ctx.properties.warningColor});\nvar warning = ctx.values.warning && !(ctx.values.warning && ctx.values.critical)\nif (warning) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = warning && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'warningClick');" + } + } + } + ], + "behavior": [ + { + "id": "running", + "name": "{i18n:scada.symbol.running}", + "hint": "{i18n:scada.symbol.running-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.running}", + "defaultGetValueSettings": { + "action": "GET_ATTRIBUTE", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": "SHARED_SCOPE", + "key": "running" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": null, + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warning", + "name": "{i18n:scada.symbol.warning}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warningClick", + "name": "{i18n:scada.symbol.warning-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalClick", + "name": "{i18n:scada.symbol.critical-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.warning-critical-state-animation}", + "hint": "{i18n:scada.symbol.warning-critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "runningColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#FFFFFF", + "required": null, + "subLabel": "{i18n:scada.symbol.running}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "stoppedColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#666666", + "required": null, + "subLabel": "{i18n:scada.symbol.stopped}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "warningColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#FAA405", + "required": null, + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "criticalColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#D12730", + "required": null, + "subLabel": "{i18n:scada.symbol.critical}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + } + ] +} + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/drawwork-hp.svg b/application/src/main/data/json/system/scada_symbols/drawwork-hp.svg new file mode 100644 index 0000000000..bb98d8cb5e --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/drawwork-hp.svg @@ -0,0 +1,355 @@ +{ + "title": "HP Drawwork", + "description": "Drawwork with various states.", + "searchTags": [ + "drawwork" + ], + "widgetSizeX": 3, + "widgetSizeY": 2, + "tags": [ + { + "tag": "circle-background", + "stateRenderFunction": "var color = ctx.properties.stoppedColor;\nif (ctx.values.running) {\n color = '#dedede';\n}\nelement.attr({fill: color});", + "actions": null + }, + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "critical", + "stateRenderFunction": "element.attr({fill: ctx.properties.criticalColor});\nif (ctx.values.critical) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'criticalClick');" + } + } + }, + { + "tag": "drawwork-background", + "stateRenderFunction": "var color = ctx.properties.stoppedColor;\nif (ctx.values.running) {\n color = ctx.properties.runningColor;\n}\nelement.attr({fill: color});", + "actions": null + }, + { + "tag": "warning", + "stateRenderFunction": "element.attr({fill: ctx.properties.warningColor});\nvar warning = ctx.values.warning && !(ctx.values.warning && ctx.values.critical)\nif (warning) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = warning && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'warningClick');" + } + } + } + ], + "behavior": [ + { + "id": "running", + "name": "{i18n:scada.symbol.running}", + "hint": "{i18n:scada.symbol.running-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.running}", + "defaultGetValueSettings": { + "action": "GET_ATTRIBUTE", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": "SHARED_SCOPE", + "key": "running" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": null, + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warning", + "name": "{i18n:scada.symbol.warning}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warningClick", + "name": "{i18n:scada.symbol.warning-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalClick", + "name": "{i18n:scada.symbol.critical-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.warning-critical-state-animation}", + "hint": "{i18n:scada.symbol.warning-critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "runningColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#FFFFFF", + "required": null, + "subLabel": "{i18n:scada.symbol.running}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "stoppedColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#666666", + "required": null, + "subLabel": "{i18n:scada.symbol.stopped}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "warningColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#FAA405", + "required": null, + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "criticalColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#D12730", + "required": null, + "subLabel": "{i18n:scada.symbol.critical}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + } + ] +} + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/drill-hp.svg b/application/src/main/data/json/system/scada_symbols/drill-hp.svg new file mode 100644 index 0000000000..66e06398ed --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/drill-hp.svg @@ -0,0 +1,354 @@ +{ + "title": "HP Drill", + "description": "Drill with various states.", + "searchTags": [ + "drill", + "drilling" + ], + "widgetSizeX": 1, + "widgetSizeY": 1, + "tags": [ + { + "tag": "background", + "stateRenderFunction": "var color = ctx.properties.stoppedColor;\nif (ctx.values.running) {\n color = ctx.properties.runningColor;\n}\nelement.attr({fill: color});", + "actions": null + }, + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "critical", + "stateRenderFunction": "element.attr({fill: ctx.properties.criticalColor});\nif (ctx.values.critical) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'criticalClick');" + } + } + }, + { + "tag": "warning", + "stateRenderFunction": "element.attr({fill: ctx.properties.warningColor});\nvar warning = ctx.values.warning && !(ctx.values.warning && ctx.values.critical)\nif (warning) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = warning && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'warningClick');" + } + } + } + ], + "behavior": [ + { + "id": "running", + "name": "{i18n:scada.symbol.running}", + "hint": "{i18n:scada.symbol.running-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.running}", + "defaultGetValueSettings": { + "action": "GET_ATTRIBUTE", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": "SHARED_SCOPE", + "key": "running" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": null, + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warning", + "name": "{i18n:scada.symbol.warning}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warningClick", + "name": "{i18n:scada.symbol.warning-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalClick", + "name": "{i18n:scada.symbol.critical-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.warning-critical-state-animation}", + "hint": "{i18n:scada.symbol.warning-critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "runningColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#FFFFFF", + "required": null, + "subLabel": "{i18n:scada.symbol.running}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "stoppedColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#666666", + "required": null, + "subLabel": "{i18n:scada.symbol.stopped}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "warningColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#FAA405", + "required": null, + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "criticalColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#D12730", + "required": null, + "subLabel": "{i18n:scada.symbol.critical}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + } + ] +} + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/drilling-line-hp.svg b/application/src/main/data/json/system/scada_symbols/drilling-line-hp.svg new file mode 100644 index 0000000000..60bce1a645 --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/drilling-line-hp.svg @@ -0,0 +1,361 @@ +{ + "title": "HP Drilling line", + "description": "Drilling line with various states.", + "searchTags": [ + "drilling line" + ], + "widgetSizeX": 1, + "widgetSizeY": 2, + "tags": [ + { + "tag": "background", + "stateRenderFunction": "var color = ctx.properties.stoppedColor;\nif (ctx.values.running) {\n color = ctx.properties.runningColor;\n}\nelement.attr({fill: color});", + "actions": null + }, + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "critical", + "stateRenderFunction": "element.attr({fill: ctx.properties.criticalColor});\nif (ctx.values.critical) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'criticalClick');" + } + } + }, + { + "tag": "secondary-background", + "stateRenderFunction": "var color = ctx.properties.stoppedColor;\nif (ctx.values.running) {\n color = '#dedede';\n}\nelement.attr({fill: color});", + "actions": null + }, + { + "tag": "warning", + "stateRenderFunction": "element.attr({fill: ctx.properties.warningColor});\nvar warning = ctx.values.warning && !(ctx.values.warning && ctx.values.critical)\nif (warning) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = warning && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'warningClick');" + } + } + } + ], + "behavior": [ + { + "id": "running", + "name": "{i18n:scada.symbol.running}", + "hint": "{i18n:scada.symbol.running-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.running}", + "defaultGetValueSettings": { + "action": "GET_ATTRIBUTE", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": "SHARED_SCOPE", + "key": "running" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": null, + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warning", + "name": "{i18n:scada.symbol.warning}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warningClick", + "name": "{i18n:scada.symbol.warning-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalClick", + "name": "{i18n:scada.symbol.critical-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.warning-critical-state-animation}", + "hint": "{i18n:scada.symbol.warning-critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "runningColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#FFFFFF", + "required": null, + "subLabel": "{i18n:scada.symbol.running}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "stoppedColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#666666", + "required": null, + "subLabel": "{i18n:scada.symbol.stopped}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "warningColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#FAA405", + "required": null, + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "criticalColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#D12730", + "required": null, + "subLabel": "{i18n:scada.symbol.critical}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + } + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/drilling-rig-hp.svg b/application/src/main/data/json/system/scada_symbols/drilling-rig-hp.svg new file mode 100644 index 0000000000..76c9af6454 --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/drilling-rig-hp.svg @@ -0,0 +1,354 @@ +{ + "title": "HP Drilling rig", + "description": "Drilling rig with various states.", + "searchTags": [ + "drilling rig" + ], + "widgetSizeX": 4, + "widgetSizeY": 9, + "tags": [ + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "critical", + "stateRenderFunction": "element.attr({fill: ctx.properties.criticalColor});\nif (ctx.values.critical) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'criticalClick');" + } + } + }, + { + "tag": "drilling-ring", + "stateRenderFunction": "var color = ctx.properties.stoppedColor;\nif (ctx.values.running) {\n color = ctx.properties.runningColor;\n}\nelement.attr({fill: color});", + "actions": null + }, + { + "tag": "warning", + "stateRenderFunction": "element.attr({fill: ctx.properties.warningColor});\nvar warning = ctx.values.warning && !(ctx.values.warning && ctx.values.critical)\nif (warning) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = warning && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'warningClick');" + } + } + } + ], + "behavior": [ + { + "id": "running", + "name": "{i18n:scada.symbol.running}", + "hint": "{i18n:scada.symbol.running-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.running}", + "defaultGetValueSettings": { + "action": "GET_ATTRIBUTE", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": "SHARED_SCOPE", + "key": "running" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": null, + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warning", + "name": "{i18n:scada.symbol.warning}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warningClick", + "name": "{i18n:scada.symbol.warning-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalClick", + "name": "{i18n:scada.symbol.critical-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.warning-critical-state-animation}", + "hint": "{i18n:scada.symbol.warning-critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "runningColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#FFFFFF", + "required": null, + "subLabel": "{i18n:scada.symbol.running}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "stoppedColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#666666", + "required": null, + "subLabel": "{i18n:scada.symbol.stopped}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "warningColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#FAA405", + "required": null, + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "criticalColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#D12730", + "required": null, + "subLabel": "{i18n:scada.symbol.critical}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + } + ] +} + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/hook-hp.svg b/application/src/main/data/json/system/scada_symbols/hook-hp.svg new file mode 100644 index 0000000000..742d1fe811 --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/hook-hp.svg @@ -0,0 +1,293 @@ +{ + "title": "HP Hook", + "description": "Hook with various states.", + "searchTags": [ + "hook", + "drilling" + ], + "widgetSizeX": 1, + "widgetSizeY": 2, + "tags": [ + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "critical", + "stateRenderFunction": "element.attr({fill: ctx.properties.criticalColor});\nif (ctx.values.critical) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'criticalClick');" + } + } + }, + { + "tag": "hook", + "stateRenderFunction": "element.attr({fill: ctx.properties.hookColor});", + "actions": null + }, + { + "tag": "warning", + "stateRenderFunction": "element.attr({fill: ctx.properties.warningColor});\nvar warning = ctx.values.warning && !(ctx.values.warning && ctx.values.critical)\nif (warning) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = warning && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'warningClick');" + } + } + } + ], + "behavior": [ + { + "id": "warning", + "name": "{i18n:scada.symbol.warning}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warningClick", + "name": "{i18n:scada.symbol.warning-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalClick", + "name": "{i18n:scada.symbol.critical-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.warning-critical-state-animation}", + "hint": "{i18n:scada.symbol.warning-critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "hookColor", + "name": "{i18n:scada.symbol.hook-color}", + "type": "color", + "default": "#FFFFFF", + "required": null, + "subLabel": "", + "divider": false, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "warningColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#FAA405", + "required": null, + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "criticalColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#D12730", + "required": null, + "subLabel": "{i18n:scada.symbol.critical}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + } + ] +} + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/meter.svg b/application/src/main/data/json/system/scada_symbols/meter.svg new file mode 100644 index 0000000000..02b2833133 --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/meter.svg @@ -0,0 +1,743 @@ +{ + "title": "Meter", + "description": "Meter displays the current value with a moving pointer on the scale.", + "searchTags": [ + "scale", + "level", + "progress", + "thermometer" + ], + "widgetSizeX": 1, + "widgetSizeY": 4, + "tags": [ + { + "tag": "background", + "stateRenderFunction": "element.attr({fill: ctx.properties.backgroundColor});", + "actions": null + }, + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "progress-indicator", + "stateRenderFunction": "function calculateOffset(value, minValue, maxValue, initial) {\n var clampedValue = Math.max(Math.min(value, Math.max(minValue, maxValue)), Math.min(minValue, maxValue));\n var normalizedValue = minValue < maxValue\n ? (clampedValue - minValue) / (maxValue - minValue)\n : (minValue - clampedValue) / (minValue - maxValue);\n var offset = initial - (normalizedValue * initial);\n return offset;\n}\n\nvar valueSet = element.remember('valueSet');\n\nif (ctx.properties.progressArrow && !ctx.properties.progressBar) {\n element.show();\n var initial = ctx.properties.valueBox ? 329: 366;\n if (!valueSet) {\n element.remember('valueSet', true);\n element.transform({\n translateY: initial\n });\n }\n \n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n var value = ctx.values.value;\n \n var colorProcessor = ctx.properties.progressArrowColor;\n colorProcessor.update(value);\n var fill = colorProcessor.color;\n element.attr({fill: fill});\n \n var offset = calculateOffset(value, minValue, maxValue, initial);\n\n var elementOffset = element.remember('offset');\n if (offset !== elementOffset) {\n element.remember('offset', offset);\n ctx.api.cssAnimate(element, 500).transform({\n translateY: offset\n });\n }\n} else {\n element.hide();\n if (valueSet) {\n element.remember('valueSet', false);\n }\n}", + "actions": null + }, + { + "tag": "progressBar", + "stateRenderFunction": "if (ctx.properties.progressBar) {\n element.show();\n} else {\n element.hide();\n}", + "actions": null + }, + { + "tag": "progressBorder", + "stateRenderFunction": "if (!ctx.properties.valueBox) {\n element.attr({'height': 367})\n}", + "actions": null + }, + { + "tag": "progressCircle", + "stateRenderFunction": "if (!ctx.properties.valueBox) {\n element.attr({cy:383});\n}", + "actions": null + }, + { + "tag": "progressFill", + "stateRenderFunction": "if (!ctx.properties.valueBox) {\n element.attr({y:-378});\n}\n\nfunction calculateOffset(value, minValue, maxValue, initial) {\n var clampedValue = Math.max(Math.min(value, Math.max(minValue, maxValue)), Math.min(minValue, maxValue));\n var normalizedValue = minValue < maxValue\n ? (clampedValue - minValue) / (maxValue - minValue)\n : (minValue - clampedValue) / (minValue - maxValue);\n var offset = normalizedValue * initial;\n return offset;\n}\n\nvar valueSet = element.remember('valueSet');\nif (ctx.properties.progressBar) {\n var initial = ctx.properties.valueBox ? 329: 366;\n if (!valueSet) {\n element.remember('valueSet', true);\n element.attr({height: 2});\n }\n \n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n var value = ctx.values.value;\n \n var colorProcessor = ctx.properties.progressBarColor;\n colorProcessor.update(value);\n var fill = colorProcessor.color;\n element.attr({fill: fill, stroke: fill});\n ctx.tags.progressCircle[0].fill(fill);\n \n var height = calculateOffset(value, minValue, maxValue, initial);\n\n var elementHeight = element.remember('height');\n if (height !== elementHeight) {\n element.remember('height', height);\n ctx.api.cssAnimate(element, 500).attr({height: height+2});\n }\n} else {\n if (valueSet) {\n element.remember('valueSet', false);\n }\n}", + "actions": null + }, + { + "tag": "scale", + "stateRenderFunction": "var scaleSet = element.remember('scaleSet');\nif (!scaleSet) {\n element.remember('scaleSet', true);\n element.clear();\n \n var majorIntervals = ctx.properties.majorIntervals;\n var minorIntervals = ctx.properties.minorIntervals;\n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n \n var start = 11;\n var end = ctx.properties.valueBox ? 328 : 365;\n var majorIntervalLength = end / majorIntervals;\n var minorIntervalLength = majorIntervalLength / minorIntervals;\n element.add(ctx.svg.line(63, end+11, 63, 11).stroke({ width: 1 }).attr({class: 'majorTick'}));\n for (var i = 0; i < majorIntervals+1; i++) {\n var y = start + i * majorIntervalLength;\n var line = ctx.svg.line(51, y, 63, y).stroke({ width: 1 }).attr({class: 'majorTick'});\n element.add(line);\n var majorText = (maxValue - ((maxValue - (minValue)) / (majorIntervals) * i)).toFixed(0);\n var majorTickText = ctx.svg.text(majorText);\n majorTickText.attr({x: 45, y: y + 2, 'text-anchor': 'end', class: 'majorTickText'});\n majorTickText.first().attr({'dominant-baseline': 'middle'});\n element.add(majorTickText);\n if (i < majorIntervals) {\n drawMinorTicks(y, minorIntervals, minorIntervalLength);\n }\n }\n}\n\nvar majorFont = ctx.properties.majorFont;\nvar majorColor = ctx.properties.majorColor;\nvar minorColor = ctx.properties.minorColor;\nif (ctx.values.critical) {\n majorColor = ctx.properties.majorCriticalColor;\n minorColor = ctx.properties.minorCriticalColor;\n} else if (ctx.values.warning) {\n majorColor = ctx.properties.minorWarningColor;\n minorColor = ctx.properties.minorWarningColor;\n}\n\nvar majorTicks = element.find('line.majorTick');\nmajorTicks.forEach(t => t.attr({stroke: majorColor}));\n\nvar majorTicksText = element.find('text.majorTickText');\nctx.api.font(majorTicksText, majorFont, majorColor);\n\nvar minorTicks = element.find('line.minorTick');\nminorTicks.forEach(t => t.attr({stroke: minorColor}));\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\nfunction drawMinorTicks(start, minorIntervals, minorIntervalLength) {\n for (var i = 1; i < minorIntervals; i++) {\n var minorY = start + i * minorIntervalLength;\n var minorLine = ctx.svg.line(57, minorY, 63, minorY).stroke({ width: 1 }).attr({class: 'minorTick'});\n element.add(minorLine);\n }\n}", + "actions": null + }, + { + "tag": "value-box", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n element.show();\n} else {\n element.hide();\n}", + "actions": null + }, + { + "tag": "value-box-background", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n var colorProcessor = ctx.properties.valueBoxColor;\n colorProcessor.update(ctx.values.value);\n element.attr({fill: colorProcessor.color});\n}", + "actions": null + }, + { + "tag": "value-text", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n var valueTextFont = ctx.properties.valueTextFont;\n var valueTextColor = ctx.properties.valueTextColor;\n var currentVolume = ctx.values.value;\n var valueText = ctx.api.formatValue(currentVolume, 0, ctx.properties.valueUnits, false);\n var colorProcessor = ctx.properties.valueTextColor;\n colorProcessor.update(ctx.values.value);\n ctx.api.font(element, valueTextFont, colorProcessor.color);\n ctx.api.text(element, valueText);\n}", + "actions": null + } + ], + "behavior": [ + { + "id": "value", + "name": "{i18n:scada.symbol.value}", + "hint": null, + "group": null, + "type": "value", + "valueType": "DOUBLE", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": { + "action": "GET_TIME_SERIES", + "defaultValue": null, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "waterLevel" + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warning", + "name": "{i18n:scada.symbol.warning-state}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical-state}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.critical-state-animation}", + "hint": "{i18n:scada.symbol.critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "minValue", + "name": "{i18n:scada.symbol.min-max-value}", + "type": "number", + "default": 0, + "required": true, + "subLabel": "{i18n:scada.symbol.min-value}", + "divider": true, + "min": -1000, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "maxValue", + "name": "{i18n:scada.symbol.min-max-value}", + "type": "number", + "default": 100, + "required": true, + "subLabel": "{i18n:scada.symbol.max-value}", + "max": 1000, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "backgroundColor", + "name": "{i18n:scada.symbol.background-color}", + "type": "color", + "default": "#FFFFFF", + "disabled": false, + "visible": true + }, + { + "id": "progressBar", + "name": "{i18n:scada.symbol.progress-bar}", + "type": "switch", + "default": true, + "disabled": false, + "visible": true + }, + { + "id": "progressBarColor", + "name": "{i18n:scada.symbol.progress-bar}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#4D94E1", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "progressBar", + "disabled": false, + "visible": true + }, + { + "id": "progressArrow", + "name": "{i18n:scada.symbol.progress-arrow}", + "type": "switch", + "default": false, + "disabled": false, + "visible": true + }, + { + "id": "progressArrowColor", + "name": "{i18n:scada.symbol.progress-arrow}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#1C943E", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "progressArrow", + "disabled": true, + "visible": true + }, + { + "id": "valueBox", + "name": "{i18n:scada.symbol.value-box}", + "type": "switch", + "default": true, + "disabled": false, + "visible": true + }, + { + "id": "valueBoxColor", + "name": "{i18n:scada.symbol.value-box}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#F3F3F3", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "valueBox", + "disabled": false, + "visible": true + }, + { + "id": "valueUnits", + "name": "{i18n:scada.symbol.value-text}", + "type": "units", + "default": "%", + "subLabel": "{i18n:scada.symbol.units}", + "disableOnProperty": "valueBox", + "disabled": false, + "visible": true + }, + { + "id": "valueTextFont", + "name": "{i18n:scada.symbol.value-text}", + "type": "font", + "default": { + "size": 14, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal" + }, + "disableOnProperty": "valueBox", + "disabled": false, + "visible": true + }, + { + "id": "valueTextColor", + "name": "{i18n:scada.symbol.value-text}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#0000008A", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "valueBox", + "disabled": false, + "visible": true + }, + { + "id": "majorIntervals", + "name": "{i18n:scada.symbol.major-ticks}", + "type": "number", + "default": 10, + "subLabel": "{i18n:scada.symbol.intervals}", + "divider": true, + "min": 1, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "majorFont", + "name": "{i18n:scada.symbol.major-ticks}", + "type": "font", + "default": { + "size": 12, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal" + }, + "disabled": false, + "visible": true + }, + { + "id": "majorColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#747474", + "subLabel": "{i18n:scada.symbol.normal}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "majorWarningColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#FAA405", + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "majorCriticalColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#D12730", + "subLabel": "{i18n:scada.symbol.critical}", + "disabled": false, + "visible": true + }, + { + "id": "minorIntervals", + "name": "{i18n:scada.symbol.minor-ticks}", + "type": "number", + "default": 10, + "subLabel": "{i18n:scada.symbol.intervals}", + "min": 1, + "disabled": false, + "visible": true + }, + { + "id": "minorColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#747474", + "subLabel": "{i18n:scada.symbol.normal}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "minorWarningColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#FAA405", + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "minorCriticalColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#D12730", + "subLabel": "{i18n:scada.symbol.critical}", + "disabled": false, + "visible": true + } + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 37% + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/platform-hp.svg b/application/src/main/data/json/system/scada_symbols/platform-hp.svg new file mode 100644 index 0000000000..af9b72a2e5 --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/platform-hp.svg @@ -0,0 +1,267 @@ +{ + "title": "HP Platform", + "description": "Platform with various states.", + "searchTags": [ + "platform", + "drilling" + ], + "widgetSizeX": 6, + "widgetSizeY": 3, + "tags": [ + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "critical", + "stateRenderFunction": "element.attr({fill: ctx.properties.criticalColor});\nif (ctx.values.critical) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'criticalClick');" + } + } + }, + { + "tag": "warning", + "stateRenderFunction": "element.attr({fill: ctx.properties.warningColor});\nvar warning = ctx.values.warning && !(ctx.values.warning && ctx.values.critical)\nif (warning) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = warning && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'warningClick');" + } + } + } + ], + "behavior": [ + { + "id": "warning", + "name": "{i18n:scada.symbol.warning}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warningClick", + "name": "{i18n:scada.symbol.warning-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalClick", + "name": "{i18n:scada.symbol.critical-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.warning-critical-state-animation}", + "hint": "{i18n:scada.symbol.warning-critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "warningColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#FAA405", + "required": null, + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "criticalColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#D12730", + "required": null, + "subLabel": "{i18n:scada.symbol.critical}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + } + ] +} + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/preventer-hp.svg b/application/src/main/data/json/system/scada_symbols/preventer-hp.svg new file mode 100644 index 0000000000..0b193a5665 --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/preventer-hp.svg @@ -0,0 +1,343 @@ +{ + "title": "HP Preventer", + "description": "Preventer with various states.", + "searchTags": [ + "preventer", + "drilling" + ], + "widgetSizeX": 2, + "widgetSizeY": 1, + "tags": [ + { + "tag": "background", + "stateRenderFunction": "var color = ctx.properties.stoppedColor;\nif (ctx.values.running) {\n color = ctx.properties.runningColor;\n}\nelement.attr({fill: color});", + "actions": null + }, + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "critical", + "stateRenderFunction": "element.attr({fill: ctx.properties.criticalColor});\nif (ctx.values.critical) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'criticalClick');" + } + } + }, + { + "tag": "warning", + "stateRenderFunction": "element.attr({fill: ctx.properties.warningColor});\nvar warning = ctx.values.warning && !(ctx.values.warning && ctx.values.critical)\nif (warning) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = warning && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'warningClick');" + } + } + } + ], + "behavior": [ + { + "id": "running", + "name": "{i18n:scada.symbol.running}", + "hint": "{i18n:scada.symbol.running-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.running}", + "defaultGetValueSettings": { + "action": "GET_ATTRIBUTE", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": "SHARED_SCOPE", + "key": "running" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": null, + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warning", + "name": "{i18n:scada.symbol.warning}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warningClick", + "name": "{i18n:scada.symbol.warning-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalClick", + "name": "{i18n:scada.symbol.critical-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.warning-critical-state-animation}", + "hint": "{i18n:scada.symbol.warning-critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "runningColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#FFFFFF", + "required": null, + "subLabel": "{i18n:scada.symbol.running}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "stoppedColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#666666", + "required": null, + "subLabel": "{i18n:scada.symbol.stopped}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "warningColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#FAA405", + "required": null, + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "criticalColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#D12730", + "required": null, + "subLabel": "{i18n:scada.symbol.critical}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + } + ] +} + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/rotor-hp.svg b/application/src/main/data/json/system/scada_symbols/rotor-hp.svg new file mode 100644 index 0000000000..729e85eac1 --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/rotor-hp.svg @@ -0,0 +1,346 @@ +{ + "title": "HP Rotor", + "description": "Rotor with various states.", + "searchTags": [ + "rotor", + "drilling" + ], + "widgetSizeX": 2, + "widgetSizeY": 1, + "tags": [ + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "critical", + "stateRenderFunction": "element.attr({fill: ctx.properties.criticalColor});\nif (ctx.values.critical) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'criticalClick');" + } + } + }, + { + "tag": "rotor-background", + "stateRenderFunction": "var color = ctx.properties.stoppedColor;\nif (ctx.values.running) {\n color = ctx.properties.runningColor;\n}\nelement.attr({fill: color});", + "actions": null + }, + { + "tag": "warning", + "stateRenderFunction": "element.attr({fill: ctx.properties.warningColor});\nvar warning = ctx.values.warning && !(ctx.values.warning && ctx.values.critical)\nif (warning) {\n element.show();\n} else {\n element.hide();\n}\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = warning && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n", + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'warningClick');" + } + } + } + ], + "behavior": [ + { + "id": "running", + "name": "{i18n:scada.symbol.running}", + "hint": "{i18n:scada.symbol.running-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.running}", + "defaultGetValueSettings": { + "action": "GET_ATTRIBUTE", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": "SHARED_SCOPE", + "key": "running" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": null, + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warning", + "name": "{i18n:scada.symbol.warning}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warningClick", + "name": "{i18n:scada.symbol.warning-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.warning-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalClick", + "name": "{i18n:scada.symbol.critical-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": "{i18n:scada.symbol.critical-state}", + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.warning-critical-state-animation}", + "hint": "{i18n:scada.symbol.warning-critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "runningColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#FFFFFF", + "required": null, + "subLabel": "{i18n:scada.symbol.running}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "stoppedColor", + "name": "{i18n:scada.symbol.colors}", + "type": "color", + "default": "#666666", + "required": null, + "subLabel": "{i18n:scada.symbol.stopped}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "warningColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#FAA405", + "required": null, + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + }, + { + "id": "criticalColor", + "name": "{i18n:scada.symbol.alarm-colors}", + "type": "color", + "default": "#D12730", + "required": null, + "subLabel": "{i18n:scada.symbol.critical}", + "divider": null, + "fieldSuffix": null, + "disableOnProperty": null, + "rowClass": "", + "fieldClass": "", + "min": null, + "max": null, + "step": null + } + ] +} + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/small-left-meter.svg b/application/src/main/data/json/system/scada_symbols/small-left-meter.svg new file mode 100644 index 0000000000..a480412366 --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/small-left-meter.svg @@ -0,0 +1,717 @@ +{ + "title": "Small left meter", + "description": "Small left meter displays the current value with a moving pointer on the scale.", + "searchTags": [ + "scale", + "level", + "progress", + "thermometer" + ], + "widgetSizeX": 1, + "widgetSizeY": 2, + "tags": [ + { + "tag": "background", + "stateRenderFunction": "element.attr({fill: ctx.properties.backgroundColor});", + "actions": null + }, + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "progress-indicator", + "stateRenderFunction": "function calculateOffset(value, minValue, maxValue, initial) {\n var clampedValue = Math.max(Math.min(value, Math.max(minValue, maxValue)), Math.min(minValue, maxValue));\n var normalizedValue = minValue < maxValue\n ? (clampedValue - minValue) / (maxValue - minValue)\n : (minValue - clampedValue) / (minValue - maxValue);\n var offset = initial - (normalizedValue * initial);\n return offset;\n}\n\nvar valueSet = element.remember('valueSet');\n\nif (ctx.properties.progressArrow && !ctx.properties.progressBar) {\n element.show();\n var initial = ctx.properties.valueBox ? 135 : 168;\n if (!valueSet) {\n element.remember('valueSet', true);\n element.transform({\n translateY: initial\n });\n }\n \n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n var value = ctx.values.value;\n \n var colorProcessor = ctx.properties.progressArrowColor;\n colorProcessor.update(value);\n var fill = colorProcessor.color;\n element.attr({fill: fill});\n \n var offset = calculateOffset(value, minValue, maxValue, initial);\n\n var elementOffset = element.remember('offset');\n if (offset !== elementOffset) {\n element.remember('offset', offset);\n ctx.api.cssAnimate(element, 500).transform({\n translateY: offset\n });\n }\n} else {\n element.hide();\n if (valueSet) {\n element.remember('valueSet', false);\n }\n}", + "actions": null + }, + { + "tag": "progressBar", + "stateRenderFunction": "if (ctx.properties.progressBar) {\n element.show();\n} else {\n element.hide();\n}", + "actions": null + }, + { + "tag": "progressBorder", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n element.attr({'height': 137})\n}", + "actions": null + }, + { + "tag": "progressCircle", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n element.attr({cy:152});\n}", + "actions": null + }, + { + "tag": "progressFill", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n element.attr({y:-147});\n}\n\nfunction calculateOffset(value, minValue, maxValue, initial) {\n var clampedValue = Math.max(Math.min(value, Math.max(minValue, maxValue)), Math.min(minValue, maxValue));\n var normalizedValue = minValue < maxValue\n ? (clampedValue - minValue) / (maxValue - minValue)\n : (minValue - clampedValue) / (minValue - maxValue);\n var offset = normalizedValue * initial;\n return offset;\n}\n\nvar valueSet = element.remember('valueSet');\nif (ctx.properties.progressBar) {\n var initial = ctx.properties.valueBox ? 135: 168;\n if (!valueSet) {\n element.remember('valueSet', true);\n element.attr({height: 2});\n }\n \n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n var value = ctx.values.value;\n \n var colorProcessor = ctx.properties.progressBarColor;\n colorProcessor.update(value);\n var fill = colorProcessor.color;\n element.attr({fill: fill, stroke: fill});\n ctx.tags.progressCircle[0].fill(fill);\n \n var height = calculateOffset(value, minValue, maxValue, initial);\n\n var elementHeight = element.remember('height');\n if (height !== elementHeight) {\n element.remember('height', height);\n ctx.api.cssAnimate(element, 500).attr({height: height+2});\n }\n} else {\n if (valueSet) {\n element.remember('valueSet', false);\n }\n}", + "actions": null + }, + { + "tag": "scale", + "stateRenderFunction": "var scaleSet = element.remember('scaleSet');\nif (!scaleSet) {\n element.remember('scaleSet', true);\n element.clear();\n \n var majorIntervals = ctx.properties.majorIntervals;\n var minorIntervals = ctx.properties.minorIntervals;\n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n \n var start = 11;\n var end = ctx.properties.valueBox ? 134 : 167;\n var majorIntervalLength = end / majorIntervals;\n var minorIntervalLength = majorIntervalLength / minorIntervals;\n element.add(ctx.svg.line(50, end+11, 50, 11).stroke({ width: 1 }).attr({class: 'majorTick'}));\n for (var i = 0; i < majorIntervals+1; i++) {\n var y = start + i * majorIntervalLength;\n var line = ctx.svg.line(38, y, 50, y).stroke({ width: 1 }).attr({class: 'majorTick'});\n element.add(line);\n var majorText = (maxValue - ((maxValue - (minValue)) / (majorIntervals) * i)).toFixed(0);\n var majorTickText = ctx.svg.text(majorText);\n majorTickText.attr({x: 32, y: y + 2, 'text-anchor': 'end', class: 'majorTickText'});\n majorTickText.first().attr({'dominant-baseline': 'middle'});\n element.add(majorTickText);\n if (i < majorIntervals) {\n drawMinorTicks(y, minorIntervals, minorIntervalLength);\n }\n }\n}\n\nvar majorFont = ctx.properties.majorFont;\nvar majorColor = ctx.properties.majorColor;\nvar minorColor = ctx.properties.minorColor;\nif (ctx.values.critical) {\n majorColor = ctx.properties.majorCriticalColor;\n minorColor = ctx.properties.minorCriticalColor;\n} else if (ctx.values.warning) {\n majorColor = ctx.properties.minorWarningColor;\n minorColor = ctx.properties.minorWarningColor;\n}\n\nvar majorTicks = element.find('line.majorTick');\nmajorTicks.forEach(t => t.attr({stroke: majorColor}));\n\nvar majorTicksText = element.find('text.majorTickText');\nctx.api.font(majorTicksText, majorFont, majorColor);\n\nvar minorTicks = element.find('line.minorTick');\nminorTicks.forEach(t => t.attr({stroke: minorColor}));\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\nfunction drawMinorTicks(start, minorIntervals, minorIntervalLength) {\n for (var i = 1; i < minorIntervals; i++) {\n var minorY = start + i * minorIntervalLength;\n var minorLine = ctx.svg.line(44, minorY, 50, minorY).stroke({ width: 1 }).attr({class: 'minorTick'});\n element.add(minorLine);\n }\n}", + "actions": null + }, + { + "tag": "value-box", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n element.show();\n} else {\n element.hide();\n}", + "actions": null + }, + { + "tag": "value-box-background", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n var colorProcessor = ctx.properties.valueBoxColor;\n colorProcessor.update(ctx.values.value);\n element.attr({fill: colorProcessor.color});\n}", + "actions": null + }, + { + "tag": "value-text", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n var valueTextFont = ctx.properties.valueTextFont;\n var valueTextColor = ctx.properties.valueTextColor;\n var currentVolume = ctx.values.value;\n var valueText = ctx.api.formatValue(currentVolume, 0, ctx.properties.valueUnits, false);\n var colorProcessor = ctx.properties.valueTextColor;\n colorProcessor.update(ctx.values.value);\n ctx.api.font(element, valueTextFont, colorProcessor.color);\n ctx.api.text(element, valueText);\n}", + "actions": null + } + ], + "behavior": [ + { + "id": "value", + "name": "{i18n:scada.symbol.value}", + "hint": null, + "group": null, + "type": "value", + "valueType": "DOUBLE", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": { + "action": "GET_TIME_SERIES", + "defaultValue": null, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "waterLevel" + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warning", + "name": "{i18n:scada.symbol.warning-state}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical-state}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.critical-state-animation}", + "hint": "{i18n:scada.symbol.critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "minValue", + "name": "{i18n:scada.symbol.min-max-value}", + "type": "number", + "default": 0, + "required": true, + "subLabel": "{i18n:scada.symbol.min-value}", + "divider": true, + "min": -1000, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "maxValue", + "name": "{i18n:scada.symbol.min-max-value}", + "type": "number", + "default": 100, + "required": true, + "subLabel": "{i18n:scada.symbol.max-value}", + "max": 1000, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "backgroundColor", + "name": "{i18n:scada.symbol.background-color}", + "type": "color", + "default": "#FFFFFF", + "disabled": false, + "visible": true + }, + { + "id": "progressBar", + "name": "{i18n:scada.symbol.progress-bar}", + "type": "switch", + "default": true, + "disabled": false, + "visible": true + }, + { + "id": "progressBarColor", + "name": "{i18n:scada.symbol.progress-bar}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#4D94E1", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "progressBar", + "disabled": false, + "visible": true + }, + { + "id": "progressArrow", + "name": "{i18n:scada.symbol.progress-arrow}", + "type": "switch", + "default": false, + "disabled": false, + "visible": true + }, + { + "id": "progressArrowColor", + "name": "{i18n:scada.symbol.progress-arrow}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#1C943E", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "progressArrow", + "disabled": true, + "visible": true + }, + { + "id": "valueBox", + "name": "{i18n:scada.symbol.value-box}", + "type": "switch", + "default": false, + "disabled": false, + "visible": true + }, + { + "id": "valueBoxColor", + "name": "{i18n:scada.symbol.value-box}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#F3F3F3", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "valueBox", + "disabled": false, + "visible": true + }, + { + "id": "valueUnits", + "name": "{i18n:scada.symbol.value-text}", + "type": "units", + "default": "%", + "subLabel": "{i18n:scada.symbol.units}", + "disableOnProperty": "valueBox", + "disabled": false, + "visible": true + }, + { + "id": "valueTextFont", + "name": "{i18n:scada.symbol.value-text}", + "type": "font", + "default": { + "size": 14, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal" + }, + "disableOnProperty": "valueBox", + "disabled": false, + "visible": true + }, + { + "id": "valueTextColor", + "name": "{i18n:scada.symbol.value-text}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#0000008A", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "valueBox", + "disabled": false, + "visible": true + }, + { + "id": "majorIntervals", + "name": "{i18n:scada.symbol.major-ticks}", + "type": "number", + "default": 5, + "subLabel": "{i18n:scada.symbol.intervals}", + "divider": true, + "min": 1, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "majorFont", + "name": "{i18n:scada.symbol.major-ticks}", + "type": "font", + "default": { + "size": 12, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal" + }, + "disabled": false, + "visible": true + }, + { + "id": "majorColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#747474", + "subLabel": "{i18n:scada.symbol.normal}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "majorWarningColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#FAA405", + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "majorCriticalColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#D12730", + "subLabel": "{i18n:scada.symbol.critical}", + "disabled": false, + "visible": true + }, + { + "id": "minorIntervals", + "name": "{i18n:scada.symbol.minor-ticks}", + "type": "number", + "default": 10, + "subLabel": "{i18n:scada.symbol.intervals}", + "min": 1, + "disabled": false, + "visible": true + }, + { + "id": "minorColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#747474", + "subLabel": "{i18n:scada.symbol.normal}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "minorWarningColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#FAA405", + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "minorCriticalColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#D12730", + "subLabel": "{i18n:scada.symbol.critical}", + "disabled": false, + "visible": true + } + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 37% + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/small-meter.svg b/application/src/main/data/json/system/scada_symbols/small-meter.svg new file mode 100644 index 0000000000..551c8d520a --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/small-meter.svg @@ -0,0 +1,688 @@ +{ + "title": "Small meter", + "description": "Small meter displays the current value with a moving pointer on the scale.", + "searchTags": [ + "scale", + "level", + "progress", + "thermometer" + ], + "widgetSizeX": 1, + "widgetSizeY": 2, + "tags": [ + { + "tag": "background", + "stateRenderFunction": "element.attr({fill: ctx.properties.backgroundColor});", + "actions": null + }, + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "progress-indicator", + "stateRenderFunction": "function calculateOffset(value, minValue, maxValue, initial) {\n var clampedValue = Math.max(Math.min(value, Math.max(minValue, maxValue)), Math.min(minValue, maxValue));\n var normalizedValue = minValue < maxValue\n ? (clampedValue - minValue) / (maxValue - minValue)\n : (minValue - clampedValue) / (minValue - maxValue);\n var offset = initial - (normalizedValue * initial);\n return offset;\n}\n\nvar valueSet = element.remember('valueSet');\n\nif (ctx.properties.progressArrow && !ctx.properties.progressBar) {\n element.show();\n var initial = ctx.properties.valueBox ? 132 : 167;\n if (!valueSet) {\n element.remember('valueSet', true);\n element.transform({\n translateY: initial\n });\n }\n \n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n var value = ctx.values.value;\n \n var colorProcessor = ctx.properties.progressArrowColor;\n colorProcessor.update(value);\n var fill = colorProcessor.color;\n element.attr({fill: fill});\n \n var offset = calculateOffset(value, minValue, maxValue, initial);\n\n var elementOffset = element.remember('offset');\n if (offset !== elementOffset) {\n element.remember('offset', offset);\n ctx.api.cssAnimate(element, 500).transform({\n translateY: offset\n });\n }\n} else {\n element.hide();\n if (valueSet) {\n element.remember('valueSet', false);\n }\n}", + "actions": null + }, + { + "tag": "progressBar", + "stateRenderFunction": "if (ctx.properties.progressBar) {\n element.show();\n} else {\n element.hide();\n}", + "actions": null + }, + { + "tag": "progressBorder", + "stateRenderFunction": "if (!ctx.properties.valueBox) {\n element.attr({'height': 168})\n}", + "actions": null + }, + { + "tag": "progressCircle", + "stateRenderFunction": "if (!ctx.properties.valueBox) {\n element.attr({cy:185});\n}", + "actions": null + }, + { + "tag": "progressFill", + "stateRenderFunction": "if (!ctx.properties.valueBox) {\n element.attr({y:-180});\n}\n\nfunction calculateOffset(value, minValue, maxValue, initial) {\n var clampedValue = Math.max(Math.min(value, Math.max(minValue, maxValue)), Math.min(minValue, maxValue));\n var normalizedValue = minValue < maxValue\n ? (clampedValue - minValue) / (maxValue - minValue)\n : (minValue - clampedValue) / (minValue - maxValue);\n var offset = normalizedValue * initial;\n return offset;\n}\n\nvar valueSet = element.remember('valueSet');\nif (ctx.properties.progressBar) {\n var initial = ctx.properties.valueBox ? 132: 168;\n if (!valueSet) {\n element.remember('valueSet', true);\n element.attr({height: 2});\n }\n \n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n var value = ctx.values.value;\n \n var colorProcessor = ctx.properties.progressBarColor;\n colorProcessor.update(value);\n var fill = colorProcessor.color;\n element.attr({fill: fill, stroke: fill});\n ctx.tags.progressCircle[0].fill(fill);\n \n var height = calculateOffset(value, minValue, maxValue, initial);\n\n var elementHeight = element.remember('height');\n if (height !== elementHeight) {\n element.remember('height', height);\n ctx.api.cssAnimate(element, 500).attr({height: height+2});\n }\n} else {\n if (valueSet) {\n element.remember('valueSet', false);\n }\n}", + "actions": null + }, + { + "tag": "scale", + "stateRenderFunction": "var scaleSet = element.remember('scaleSet');\nif (!scaleSet) {\n element.remember('scaleSet', true);\n element.clear();\n \n var majorIntervals = ctx.properties.majorIntervals;\n var minorIntervals = ctx.properties.minorIntervals;\n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n \n var start = 11;\n var end = ctx.properties.valueBox ? 132 : 167;\n var majorIntervalLength = end / majorIntervals;\n var minorIntervalLength = majorIntervalLength / minorIntervals;\n element.add(ctx.svg.line(63, end+11, 63, 11).stroke({ width: 1 }).attr({class: 'majorTick'}));\n for (var i = 0; i < majorIntervals+1; i++) {\n var y = start + i * majorIntervalLength;\n var line = ctx.svg.line(51, y, 63, y).stroke({ width: 1 }).attr({class: 'majorTick'});\n element.add(line);\n var majorText = (maxValue - ((maxValue - (minValue)) / (majorIntervals) * i)).toFixed(0);\n var majorTickText = ctx.svg.text(majorText);\n majorTickText.attr({x: 45, y: y + 2, 'text-anchor': 'end', class: 'majorTickText'});\n majorTickText.first().attr({'dominant-baseline': 'middle'});\n element.add(majorTickText);\n if (i < majorIntervals) {\n drawMinorTicks(y, minorIntervals, minorIntervalLength);\n }\n }\n}\n\nvar majorFont = ctx.properties.majorFont;\nvar majorColor = ctx.properties.majorColor;\nvar minorColor = ctx.properties.minorColor;\nif (ctx.values.critical) {\n majorColor = ctx.properties.majorCriticalColor;\n minorColor = ctx.properties.minorCriticalColor;\n} else if (ctx.values.warning) {\n majorColor = ctx.properties.minorWarningColor;\n minorColor = ctx.properties.minorWarningColor;\n}\n\nvar majorTicks = element.find('line.majorTick');\nmajorTicks.forEach(t => t.attr({stroke: majorColor}));\n\nvar majorTicksText = element.find('text.majorTickText');\nctx.api.font(majorTicksText, majorFont, majorColor);\n\nvar minorTicks = element.find('line.minorTick');\nminorTicks.forEach(t => t.attr({stroke: minorColor}));\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\nfunction drawMinorTicks(start, minorIntervals, minorIntervalLength) {\n for (var i = 1; i < minorIntervals; i++) {\n var minorY = start + i * minorIntervalLength;\n var minorLine = ctx.svg.line(57, minorY, 63, minorY).stroke({ width: 1 }).attr({class: 'minorTick'});\n element.add(minorLine);\n }\n}", + "actions": null + }, + { + "tag": "value-box", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n element.show();\n} else {\n element.hide();\n}", + "actions": null + }, + { + "tag": "value-box-background", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n var colorProcessor = ctx.properties.valueBoxColor;\n colorProcessor.update(ctx.values.value);\n element.attr({fill: colorProcessor.color});\n}", + "actions": null + }, + { + "tag": "value-text", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n var valueTextFont = ctx.properties.valueTextFont;\n var valueTextColor = ctx.properties.valueTextColor;\n var currentVolume = ctx.values.value;\n var valueText = ctx.api.formatValue(currentVolume, 0, ctx.properties.valueUnits, false);\n var colorProcessor = ctx.properties.valueTextColor;\n colorProcessor.update(ctx.values.value);\n ctx.api.font(element, valueTextFont, colorProcessor.color);\n ctx.api.text(element, valueText);\n}", + "actions": null + } + ], + "behavior": [ + { + "id": "value", + "name": "{i18n:scada.symbol.value}", + "hint": null, + "group": null, + "type": "value", + "valueType": "DOUBLE", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": { + "action": "GET_TIME_SERIES", + "defaultValue": null, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "waterLevel" + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warning", + "name": "{i18n:scada.symbol.warning-state}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical-state}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.critical-state-animation}", + "hint": "{i18n:scada.symbol.critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "minValue", + "name": "{i18n:scada.symbol.min-max-value}", + "type": "number", + "default": 0, + "required": true, + "subLabel": "{i18n:scada.symbol.min-value}", + "divider": true, + "min": -1000, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "maxValue", + "name": "{i18n:scada.symbol.min-max-value}", + "type": "number", + "default": 100, + "required": true, + "subLabel": "{i18n:scada.symbol.max-value}", + "max": 1000, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "backgroundColor", + "name": "{i18n:scada.symbol.background-color}", + "type": "color", + "default": "#FFFFFF", + "disabled": false, + "visible": true + }, + { + "id": "progressBar", + "name": "{i18n:scada.symbol.progress-bar}", + "type": "switch", + "default": true, + "disabled": false, + "visible": true + }, + { + "id": "progressBarColor", + "name": "{i18n:scada.symbol.progress-bar}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#4D94E1", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "progressBar", + "disabled": false, + "visible": true + }, + { + "id": "progressArrow", + "name": "{i18n:scada.symbol.progress-arrow}", + "type": "switch", + "default": false, + "disabled": false, + "visible": true + }, + { + "id": "progressArrowColor", + "name": "{i18n:scada.symbol.progress-arrow}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#1C943E", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "progressArrow", + "disabled": true, + "visible": true + }, + { + "id": "valueBox", + "name": "{i18n:scada.symbol.value-box}", + "type": "switch", + "default": true, + "disabled": false, + "visible": true + }, + { + "id": "valueBoxColor", + "name": "{i18n:scada.symbol.value-box}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#F3F3F3", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "valueBox", + "disabled": true, + "visible": true + }, + { + "id": "valueUnits", + "name": "{i18n:scada.symbol.value-text}", + "type": "units", + "default": "%", + "subLabel": "{i18n:scada.symbol.units}", + "disableOnProperty": "valueBox", + "disabled": true, + "visible": true + }, + { + "id": "valueTextFont", + "name": "{i18n:scada.symbol.value-text}", + "type": "font", + "default": { + "size": 14, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal" + }, + "disableOnProperty": "valueBox", + "disabled": true, + "visible": true + }, + { + "id": "valueTextColor", + "name": "{i18n:scada.symbol.value-text}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#0000008A", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "valueBox", + "disabled": true, + "visible": true + }, + { + "id": "majorIntervals", + "name": "{i18n:scada.symbol.major-ticks}", + "type": "number", + "default": 5, + "subLabel": "{i18n:scada.symbol.intervals}", + "divider": true, + "min": 1, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "majorFont", + "name": "{i18n:scada.symbol.major-ticks}", + "type": "font", + "default": { + "size": 12, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal" + }, + "disabled": false, + "visible": true + }, + { + "id": "majorColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#747474", + "subLabel": "{i18n:scada.symbol.normal}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "majorWarningColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#FAA405", + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "majorCriticalColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#D12730", + "subLabel": "{i18n:scada.symbol.critical}", + "disabled": false, + "visible": true + }, + { + "id": "minorIntervals", + "name": "{i18n:scada.symbol.minor-ticks}", + "type": "number", + "default": 10, + "subLabel": "{i18n:scada.symbol.intervals}", + "min": 1, + "disabled": false, + "visible": true + }, + { + "id": "minorColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#747474", + "subLabel": "{i18n:scada.symbol.normal}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "minorWarningColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#FAA405", + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "minorCriticalColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#D12730", + "subLabel": "{i18n:scada.symbol.critical}", + "disabled": false, + "visible": true + } + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 37% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/scada_symbols/small-right-center.svg b/application/src/main/data/json/system/scada_symbols/small-right-center.svg new file mode 100644 index 0000000000..de1bee5acd --- /dev/null +++ b/application/src/main/data/json/system/scada_symbols/small-right-center.svg @@ -0,0 +1,717 @@ +{ + "title": "Small right meter", + "description": "Small right meter displays the current value with a moving pointer on the scale.", + "searchTags": [ + "scale", + "level", + "progress", + "thermometer" + ], + "widgetSizeX": 1, + "widgetSizeY": 2, + "tags": [ + { + "tag": "background", + "stateRenderFunction": "element.attr({fill: ctx.properties.backgroundColor});", + "actions": null + }, + { + "tag": "clickArea", + "stateRenderFunction": null, + "actions": { + "click": { + "actionFunction": "ctx.api.callAction(event, 'click');" + } + } + }, + { + "tag": "progress-indicator", + "stateRenderFunction": "function calculateOffset(value, minValue, maxValue, initial) {\n var clampedValue = Math.max(Math.min(value, Math.max(minValue, maxValue)), Math.min(minValue, maxValue));\n var normalizedValue = minValue < maxValue\n ? (clampedValue - minValue) / (maxValue - minValue)\n : (minValue - clampedValue) / (minValue - maxValue);\n var offset = initial - (normalizedValue * initial);\n return offset;\n}\n\nvar valueSet = element.remember('valueSet');\n\nif (ctx.properties.progressArrow && !ctx.properties.progressBar) {\n element.show();\n var initial = ctx.properties.valueBox ? 135 : 168;\n if (!valueSet) {\n element.remember('valueSet', true);\n element.transform({\n translateY: initial\n });\n }\n \n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n var value = ctx.values.value;\n \n var colorProcessor = ctx.properties.progressArrowColor;\n colorProcessor.update(value);\n var fill = colorProcessor.color;\n element.attr({fill: fill});\n \n var offset = calculateOffset(value, minValue, maxValue, initial);\n\n var elementOffset = element.remember('offset');\n if (offset !== elementOffset) {\n element.remember('offset', offset);\n ctx.api.cssAnimate(element, 500).transform({\n translateY: offset\n });\n }\n} else {\n element.hide();\n if (valueSet) {\n element.remember('valueSet', false);\n }\n}", + "actions": null + }, + { + "tag": "progressBar", + "stateRenderFunction": "if (ctx.properties.progressBar) {\n element.show();\n} else {\n element.hide();\n}", + "actions": null + }, + { + "tag": "progressBorder", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n element.attr({'height': 137})\n}", + "actions": null + }, + { + "tag": "progressCircle", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n element.attr({cy:152});\n}", + "actions": null + }, + { + "tag": "progressFill", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n element.attr({y:-147});\n}\n\nfunction calculateOffset(value, minValue, maxValue, initial) {\n var clampedValue = Math.max(Math.min(value, Math.max(minValue, maxValue)), Math.min(minValue, maxValue));\n var normalizedValue = minValue < maxValue\n ? (clampedValue - minValue) / (maxValue - minValue)\n : (minValue - clampedValue) / (minValue - maxValue);\n var offset = normalizedValue * initial;\n return offset;\n}\n\nvar valueSet = element.remember('valueSet');\nif (ctx.properties.progressBar) {\n var initial = ctx.properties.valueBox ? 135: 168;\n if (!valueSet) {\n element.remember('valueSet', true);\n element.attr({height: 2});\n }\n \n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n var value = ctx.values.value;\n \n var colorProcessor = ctx.properties.progressBarColor;\n colorProcessor.update(value);\n var fill = colorProcessor.color;\n element.attr({fill: fill, stroke: fill});\n ctx.tags.progressCircle[0].fill(fill);\n \n var height = calculateOffset(value, minValue, maxValue, initial);\n\n var elementHeight = element.remember('height');\n if (height !== elementHeight) {\n element.remember('height', height);\n ctx.api.cssAnimate(element, 500).attr({height: height+2});\n }\n} else {\n if (valueSet) {\n element.remember('valueSet', false);\n }\n}", + "actions": null + }, + { + "tag": "scale", + "stateRenderFunction": "var scaleSet = element.remember('scaleSet');\nif (!scaleSet) {\n element.remember('scaleSet', true);\n element.clear();\n \n var majorIntervals = ctx.properties.majorIntervals;\n var minorIntervals = ctx.properties.minorIntervals;\n var minValue = ctx.properties.minValue;\n var maxValue = ctx.properties.maxValue;\n \n var start = 11;\n var end = ctx.properties.valueBox ? 134 : 167;\n var majorIntervalLength = end / majorIntervals;\n var minorIntervalLength = majorIntervalLength / minorIntervals;\n element.add(ctx.svg.line(73, end+11, 73, 11).stroke({ width: 1 }).attr({class: 'majorTick'}));\n for (var i = 0; i < majorIntervals+1; i++) {\n var y = start + i * majorIntervalLength;\n var line = ctx.svg.line(61, y, 73, y).stroke({ width: 1 }).attr({class: 'majorTick'});\n element.add(line);\n var majorText = (maxValue - ((maxValue - (minValue)) / (majorIntervals) * i)).toFixed(0);\n var majorTickText = ctx.svg.text(majorText);\n majorTickText.attr({x: 55, y: y + 2, 'text-anchor': 'end', class: 'majorTickText'});\n majorTickText.first().attr({'dominant-baseline': 'middle'});\n element.add(majorTickText);\n if (i < majorIntervals) {\n drawMinorTicks(y, minorIntervals, minorIntervalLength);\n }\n }\n}\n\nvar majorFont = ctx.properties.majorFont;\nvar majorColor = ctx.properties.majorColor;\nvar minorColor = ctx.properties.minorColor;\nif (ctx.values.critical) {\n majorColor = ctx.properties.majorCriticalColor;\n minorColor = ctx.properties.minorCriticalColor;\n} else if (ctx.values.warning) {\n majorColor = ctx.properties.minorWarningColor;\n minorColor = ctx.properties.minorWarningColor;\n}\n\nvar majorTicks = element.find('line.majorTick');\nmajorTicks.forEach(t => t.attr({stroke: majorColor}));\n\nvar majorTicksText = element.find('text.majorTickText');\nctx.api.font(majorTicksText, majorFont, majorColor);\n\nvar minorTicks = element.find('line.minorTick');\nminorTicks.forEach(t => t.attr({stroke: minorColor}));\n\nvar elementCriticalAnimation = element.remember('criticalAnimation');\nvar criticalAnimation = ctx.values.critical && ctx.values.criticalAnimation;\n\nif (elementCriticalAnimation !== criticalAnimation) {\n element.remember('criticalAnimation', criticalAnimation);\n if (criticalAnimation) {\n ctx.api.cssAnimate(element, 500).attr({opacity: 0.15}).loop(0, true);\n } else {\n ctx.api.resetCssAnimation(element);\n }\n}\n\nfunction drawMinorTicks(start, minorIntervals, minorIntervalLength) {\n for (var i = 1; i < minorIntervals; i++) {\n var minorY = start + i * minorIntervalLength;\n var minorLine = ctx.svg.line(67, minorY, 73, minorY).stroke({ width: 1 }).attr({class: 'minorTick'});\n element.add(minorLine);\n }\n}", + "actions": null + }, + { + "tag": "value-box", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n element.show();\n} else {\n element.hide();\n}", + "actions": null + }, + { + "tag": "value-box-background", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n var colorProcessor = ctx.properties.valueBoxColor;\n colorProcessor.update(ctx.values.value);\n element.attr({fill: colorProcessor.color});\n}", + "actions": null + }, + { + "tag": "value-text", + "stateRenderFunction": "if (ctx.properties.valueBox) {\n var valueTextFont = ctx.properties.valueTextFont;\n var valueTextColor = ctx.properties.valueTextColor;\n var currentVolume = ctx.values.value;\n var valueText = ctx.api.formatValue(currentVolume, 0, ctx.properties.valueUnits, false);\n var colorProcessor = ctx.properties.valueTextColor;\n colorProcessor.update(ctx.values.value);\n ctx.api.font(element, valueTextFont, colorProcessor.color);\n ctx.api.text(element, valueText);\n}", + "actions": null + } + ], + "behavior": [ + { + "id": "value", + "name": "{i18n:scada.symbol.value}", + "hint": null, + "group": null, + "type": "value", + "valueType": "DOUBLE", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": { + "action": "GET_TIME_SERIES", + "defaultValue": null, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "waterLevel" + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "warning", + "name": "{i18n:scada.symbol.warning-state}", + "hint": "{i18n:scada.symbol.warning-state-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.warning}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "critical", + "name": "{i18n:scada.symbol.critical-state}", + "hint": "{i18n:scada.symbol.critical-state-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.critical}", + "defaultGetValueSettings": { + "action": "GET_ALARM_STATUS", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "scope": null, + "key": "state" + }, + "getTimeSeries": { + "key": "state" + }, + "getAlarmStatus": { + "severityList": [ + "CRITICAL" + ], + "typeList": null + }, + "dataToValue": { + "type": "NONE", + "dataToValueFunction": "/* Should return boolean value */\nreturn data;", + "compareToValue": true + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "criticalAnimation", + "name": "{i18n:scada.symbol.critical-state-animation}", + "hint": "{i18n:scada.symbol.critical-state-animation-hint}", + "group": null, + "type": "value", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": "{i18n:scada.symbol.animation}", + "defaultGetValueSettings": { + "action": "DO_NOTHING", + "defaultValue": false, + "executeRpc": { + "method": "getState", + "requestTimeout": 5000, + "requestPersistent": false, + "persistentPollingInterval": 1000 + }, + "getAttribute": { + "key": "state", + "scope": null + }, + "getTimeSeries": { + "key": "state" + }, + "dataToValue": { + "type": "NONE", + "compareToValue": true, + "dataToValueFunction": "/* Should return boolean value */\nreturn data;" + } + }, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": null + }, + { + "id": "click", + "name": "{i18n:scada.symbol.on-click}", + "hint": "{i18n:scada.symbol.on-click-hint}", + "group": null, + "type": "widgetAction", + "valueType": "BOOLEAN", + "trueLabel": null, + "falseLabel": null, + "stateLabel": null, + "defaultGetValueSettings": null, + "defaultSetValueSettings": null, + "defaultWidgetActionSettings": { + "type": "doNothing", + "targetDashboardStateId": null, + "openRightLayout": false, + "setEntityId": false, + "stateEntityParamName": null + } + } + ], + "properties": [ + { + "id": "minValue", + "name": "{i18n:scada.symbol.min-max-value}", + "type": "number", + "default": 0, + "required": true, + "subLabel": "{i18n:scada.symbol.min-value}", + "divider": true, + "min": -1000, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "maxValue", + "name": "{i18n:scada.symbol.min-max-value}", + "type": "number", + "default": 100, + "required": true, + "subLabel": "{i18n:scada.symbol.max-value}", + "max": 1000, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "backgroundColor", + "name": "{i18n:scada.symbol.background-color}", + "type": "color", + "default": "#FFFFFF", + "disabled": false, + "visible": true + }, + { + "id": "progressBar", + "name": "{i18n:scada.symbol.progress-bar}", + "type": "switch", + "default": true, + "disabled": false, + "visible": true + }, + { + "id": "progressBarColor", + "name": "{i18n:scada.symbol.progress-bar}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#4D94E1", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "progressBar", + "disabled": false, + "visible": true + }, + { + "id": "progressArrow", + "name": "{i18n:scada.symbol.progress-arrow}", + "type": "switch", + "default": false, + "disabled": false, + "visible": true + }, + { + "id": "progressArrowColor", + "name": "{i18n:scada.symbol.progress-arrow}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#1C943E", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "progressArrow", + "disabled": false, + "visible": true + }, + { + "id": "valueBox", + "name": "{i18n:scada.symbol.value-box}", + "type": "switch", + "default": false, + "disabled": false, + "visible": true + }, + { + "id": "valueBoxColor", + "name": "{i18n:scada.symbol.value-box}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#F3F3F3", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "valueBox", + "disabled": true, + "visible": true + }, + { + "id": "valueUnits", + "name": "{i18n:scada.symbol.value-text}", + "type": "units", + "default": "%", + "subLabel": "{i18n:scada.symbol.units}", + "disableOnProperty": "valueBox", + "disabled": true, + "visible": true + }, + { + "id": "valueTextFont", + "name": "{i18n:scada.symbol.value-text}", + "type": "font", + "default": { + "size": 14, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal" + }, + "disableOnProperty": "valueBox", + "disabled": true, + "visible": true + }, + { + "id": "valueTextColor", + "name": "{i18n:scada.symbol.value-text}", + "type": "color_settings", + "default": { + "type": "constant", + "color": "#0000008A", + "gradient": { + "advancedMode": false, + "gradient": [ + "rgba(0, 255, 0, 1)", + "rgba(255, 0, 0, 1)" + ], + "gradientAdvanced": [ + { + "source": { + "type": "constant" + }, + "color": "rgba(0, 255, 0, 1)" + }, + { + "source": { + "type": "constant" + }, + "color": "rgba(255, 0, 0, 1)" + } + ], + "minValue": 0, + "maxValue": 100 + }, + "rangeList": { + "advancedMode": false, + "range": [], + "rangeAdvanced": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "disableOnProperty": "valueBox", + "disabled": true, + "visible": true + }, + { + "id": "majorIntervals", + "name": "{i18n:scada.symbol.major-ticks}", + "type": "number", + "default": 5, + "subLabel": "{i18n:scada.symbol.intervals}", + "divider": true, + "min": 1, + "step": 1, + "disabled": false, + "visible": true + }, + { + "id": "majorFont", + "name": "{i18n:scada.symbol.major-ticks}", + "type": "font", + "default": { + "size": 12, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal" + }, + "disabled": false, + "visible": true + }, + { + "id": "majorColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#747474", + "subLabel": "{i18n:scada.symbol.normal}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "majorWarningColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#FAA405", + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "majorCriticalColor", + "name": "{i18n:scada.symbol.major-ticks-color}", + "type": "color", + "default": "#D12730", + "subLabel": "{i18n:scada.symbol.critical}", + "disabled": false, + "visible": true + }, + { + "id": "minorIntervals", + "name": "{i18n:scada.symbol.minor-ticks}", + "type": "number", + "default": 10, + "subLabel": "{i18n:scada.symbol.intervals}", + "min": 1, + "disabled": false, + "visible": true + }, + { + "id": "minorColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#747474", + "subLabel": "{i18n:scada.symbol.normal}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "minorWarningColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#FAA405", + "subLabel": "{i18n:scada.symbol.warning}", + "divider": true, + "disabled": false, + "visible": true + }, + { + "id": "minorCriticalColor", + "name": "{i18n:scada.symbol.minor-ticks-color}", + "type": "color", + "default": "#D12730", + "subLabel": "{i18n:scada.symbol.critical}", + "disabled": false, + "visible": true + } + ] +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 37% + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_bundles/general_high_performance_scada_symbols.json b/application/src/main/data/json/system/widget_bundles/general_high_performance_scada_symbols.json index ffb0fee835..5083384432 100644 --- a/application/src/main/data/json/system/widget_bundles/general_high_performance_scada_symbols.json +++ b/application/src/main/data/json/system/widget_bundles/general_high_performance_scada_symbols.json @@ -26,6 +26,8 @@ "hp_bottom_tee_connector", "hp_right_tee_connector", "hp_left_tee_connector", - "hp_top_tee_connector" + "hp_top_tee_connector", + "hp_drawwork", + "hp_crane" ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_bundles/high_performance_scada_oil_gas.json b/application/src/main/data/json/system/widget_bundles/high_performance_scada_oil_gas.json new file mode 100644 index 0000000000..87b778be21 --- /dev/null +++ b/application/src/main/data/json/system/widget_bundles/high_performance_scada_oil_gas.json @@ -0,0 +1,20 @@ +{ + "widgetsBundle": { + "alias": "high_performance_scada_oil_gas", + "title": "High-performance SCADA oil & gas", + "image": "tb-image:aHBfc2NhZGFfb2lsX2dhc19zeXN0ZW1fYnVuZGxlX2ltYWdlLnBuZw==:IkhpZ2gtcGVyZm9ybWFuY2UgU0NBREEgb2lsICYgZ2FzIiBzeXN0ZW0gYnVuZGxlIGltYWdl:SU1BR0U=;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAAflBMVEXe3t7b29vf398AAADf39/e3t7e3t7////Gxsapqam5ubnR0NDj4+Otra2hoaHS0tLi4uK4uLjx8fGYmJikpKSdnZ2VlZWWlpbU1NS1tbWnp6eKioqysrLLy8uampra2tqvr6/X19eRkZF+fn7Dw8N1dXW/vr6FhYViYmJwcHCzXr36AAAABnRSTlPvIK8Av79l/pT7AAAI0UlEQVR42uza23LaMBSF4Z5msbyFpOFMAXcg0HT6/i/YGqvdNhBiYXtipf0v7CRX+UaSbWQ+fP745QNS79PHzx8+ps8A8JvxCe+idzCtwpC8Fwj+Q4bWvw0R7oQiJIbTAxAvwOmAIsFgiodYXxxPODecMYmGeD4fAOQoGtCYxEIMgcMQJbEQD5wlCvEYRLEQoig/wCBkMIgiIYKyE+claTBzKxJClO0AegDI8x0GUTREz5NTbvJUR0RwzjjAn1GpQlgcDif4nfiDAZAqBAIc8nBjNyY3ef6MQRR/HzlI7ZI7lCfHaIg5oA5Bu5bZzZaIKh6Cha9BHFq2HN2sb4gjra84rHAreCDKcjUr+n4b8n1WtHKW0LqDSGGwyFFmaOBMLGRv57uM4+moSWNONvuF7RrC8vhsBTBSEJwBEdfXUXRfux+RADIiJM4OSIIQVs8sHUmOiKlBSgd8pGS/2M8zrhutkemY2XyZ7TuGeKlBXHAJ4qN1q9mP+4ofs5WTXq5agipkqePzYLP7kBkiioIQIRrAifouSggCOsN0IaIQxyorJiOrb4uy5StrZFG2WVnTF8QZkAh5NjW4ebbKxqPo1pPdk2paQ7xHaGsAWMTMreXW7ibTUYum3DxtXBcQHRA5H6PmVjbqpKxLCEE9FUliEP49Uc9FNjGIBIdCwHSnFm8cwKQg9PqPXxgEr3ZkB4zp+tgBxNSWif7cDAJx3542nLa4+NrtkugAItefR3TxN4x2tthN1uPQ6G7jP01W2dyxszu7BXELAkIQk7Gh433I0ZaJ6fZZi8RtCEiPagN/aHS4hNSN2rAhwpch1qLasCEEX4JYCuIy4lbfXn+M36ycGHQMEby02K0aG27QbSbjadM7Bzfzhe0YAtYg6oAASGU7iLi8IaoD9OlAJBAUog5AkoHI1cBQHVEQu3nabyacNlsi2W6ebdkhRBe6QtQBIjKxDV4rzB0NtE4goiSFSI131SBf9ChEP+qKwV3IIF+9GWgsIRUHPNFDPUC8oJItDq7iePvX7U0hgmokIALt7b9L9yAEFENo6YwIL34TIk2IQPu796ulOrXC3q/29pethhDvoYV3PBzU3GoIEVRypr73W/TmcysaUjiqe7+hVCBE6OwIkPrfLTqvzxEpHApRSSojEiDBcXv/2qPv2kPoURQcNYhKBH3XHmJQFhw1COSsTAMixUEddQhcKSH6rj3EAlDHBaSUpDEiBCqOS0iQ0KPbeppa6riGBAn6rD3kynENKSWCfmsP4YXjGlJIHoYcs4t+ekQUARF1XENUQjyUrEcXrYmIYiDquIao5Fd797rcJgxEAbjX1UogBBRfErupm16mff8XbO2RWYuDqyCBx+30/EiMmTb6ugtSgYwtJcW2Q0hbUSSJkJ04ECJZO0rJRkE2hJkF4l4EYUMp0Qh5IswMEEPGvQDClAZ5RoglzAwQJpFch3DqRLK/WWsZEslVCFMqRE+4H5ILCSWWDf+OYQu0hDhGCDNh8iEFhRIbvhCCS5HYEiG1IUguRIZn+Cok55crqwm3R/IgRlrq/J3ZXLZW1u2exwnPCmRDROJj4PGB5Io8T3i+LA/CNJQUXFBRyf4syGEM0hFkvoqIpCJyFhxzttaeILNBRGKJ2BEVFsbupktcMwZpHEFyIc7RQGL8Y4GOxZHUW7KIjy3k8yE4NsvGT/bE4kjuraoFBS7kF4GQXR/fNcaRYcqGbJSKH+05EBwbnoUr3EVToxUGF/JLVETmePcCdco0ggv5hSDM67Wxds1MEEcTs79VaxkcWsU+6yg7sbVwIZ8PKQhi5UU2hFmpCeffnIpMg0z9+bYch9SWJEtBmC3z6UtuRar1D30lP9YVQXIgfPXNEcfEK9mdL0ezC868jS+KSJaoiBDYMmX1Fu/9iJvgiNeN9z06yoLEHb4iZPN6a3UugWpacbSstN98pvkgPPqWh4gkBdKVZ4falgKpWbXavzzQghXBhzNRPqWxjo1UbwXCx+1GmmshCD4uC39gSmP5MdccQI46aa5lWotDDUqcm9pYYxClW2muBSoy/kh5Ukm+6VO++Hm8d/jjpf3p9ydD4g6BiGQ6pPPnWqmCHOyyQ3UzQRi3QghKOAHSBPPIEhBLkqIigIhkIoR3/ajbAeTpEvKFZ28tcQhEJNMghWbuIY0uw5m91rqHMAslB1KEDoSgxMV/sOmUuoAoHa61tuoColTH+RDH6BBIIBayiToeVAhRtRaHLlUIUQ8mG2LAARCQRHuLH9UAIlO5nwp1K5CjhLMh4AAISKIV2akAwuW5DnLyrTmAqEMuhMEBEJDEIPsygPgRw7cA0la5FQEHQFDCsStyoxBuL9cqTQhRXT5EHAhBSfy0ZcsBpJHp4wgYh9Q2C+IcOBCCEhO/iyCQmi8ndN2vHEOI+pAFMehACEpc/MqiQJp2DNI2A4jNg6ADISjh+JVFgWjlcxKx8tEDSJcFYXQgBCU2slgEiPzPkHvWrBCDDoSghJMgzWnzGuSQBbEVRSDTJXoA2fbNFKzn6wFklQMxa0qBUGGi04hAlEBgc67WKigNQuYFV60bfcpOha3V9mtgfUrjPZxVkVQIT3xkQ2b2VqvRVHRzSHRGtFuFkUVWG7k2nwLhFEj8SvbTHxyqHd27o2UrktZbrhtxlP0/fqMgmyILYigJEl/JM0iai3bbNuBgyoLwUhByq1JdpNXBZv3UBpvPUo+bV4QpkvWu7BkffsAh8bWntN2B6I4hRHa1b5ibx9WmYK/qx87UrR6ZWW+0JclNWivpSjaz75oPD+L4+sFPxzIJ3q4i+Xepv5yXJKuCIFkQHAtLrP9yTpEKkXBX6YfDLsJIgcBf+bG8mo9YstTMD4HD7JO6mk80iKGFkt9aUyD3VRForSkQlyiZHYJn0EmQxN5aAIIjmQi5n4oMIX9tRUaer66vZkunfCafe4LISKAU8cLcU2tV3Odj+cJ85z7mBpL/H+x41/kPubf8Mx+s++od/RN58+98iPbb13//x2i/ev/67S8YXTU9MiU8PgAAAABJRU5ErkJggg==", + "scada": true, + "description": "Bundle with high-performance SCADA symbols for oil and gas system", + "order": 9405, + "name": "High-performance SCADA oil & gas" + }, + "widgetTypeFqns": [ + "hp_drilling_rig", + "hp_hook", + "hp_rotor", + "hp_preventer", + "hp_drill", + "hp_drilling_line", + "hp_platform" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_bundles/scada_fluid_system.json b/application/src/main/data/json/system/widget_bundles/scada_fluid_system.json index 9aa3b299a8..e6f1e6a876 100644 --- a/application/src/main/data/json/system/widget_bundles/scada_fluid_system.json +++ b/application/src/main/data/json/system/widget_bundles/scada_fluid_system.json @@ -42,6 +42,10 @@ "vertical_inline_flow_meter", "left_analog_water_level_meter", "right_analog_water_level_meter", + "meter", + "small_meter", + "small_right_meter", + "small_left_meter", "leak_sensor", "centrifugal_pump", "small_right_motor_pump", diff --git a/application/src/main/data/json/system/widget_types/gateway_configuration.json b/application/src/main/data/json/system/widget_types/gateway_configuration.json index 0c6df390d6..9eb9ab816b 100644 --- a/application/src/main/data/json/system/widget_types/gateway_configuration.json +++ b/application/src/main/data/json/system/widget_types/gateway_configuration.json @@ -22,6 +22,7 @@ "settingsDirective": "tb-gateway-config-widget-settings", "defaultConfig": "{\"datasources\":[{\"type\":\"static\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"widgetTitle\":\"Gateway Configuration\",\"archiveFileName\":\"configurationGateway\"},\"title\":\"Gateway Configuration\",\"dropShadow\":true,\"showTitleIcon\":false,\"titleIcon\":\"more_horiz\",\"iconColor\":\"rgba(0, 0, 0, 0.87)\",\"iconSize\":\"24px\",\"titleTooltip\":\"\",\"enableFullscreen\":true,\"widgetStyle\":{},\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":400},\"useDashboardTimewindow\":true,\"displayTimewindow\":true,\"showLegend\":false,\"actions\":{}}" }, + "externalId": null, "tags": [ "router", "bridge", @@ -40,28 +41,5 @@ "ocpp", "ble", "bluetooth" - ], - "resources": [ - { - "link": "/api/resource/js_module/system/gateway-management-extension.js", - "title": "gateway-management-extension.js", - "type": "JS_MODULE", - "resourceKey": "gateway-management-extension.js", - "fileName": "gateway-management-extension.js", - "mediaType": "application/javascript", - "data": "U3lzdGVtLnJlZ2lzdGVyKFsiQGFuZ3VsYXIvY29yZSIsIkBhbmd1bGFyL21hdGVyaWFsL3NvcnQiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZSIsIkBhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvciIsIkBzaGFyZWQvcHVibGljLWFwaSIsIkBhbmd1bGFyL2NvbW1vbiIsIkBhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXIiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJzIiwiQGFuZ3VsYXIvZmxleC1sYXlvdXQvZmxleCIsIkBhbmd1bGFyL2ZsZXgtbGF5b3V0L2V4dGVuZGVkIiwiQG5neC10cmFuc2xhdGUvY29yZSIsIkBjb3JlL3B1YmxpYy1hcGkiLCJAYW5ndWxhci9mb3JtcyIsIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2NhcmQiLCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCIsIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQiLCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QiLCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlIiwicnhqcyIsInJ4anMvb3BlcmF0b3JzIiwidHNsaWIiLCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwIiwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbiIsIkBzaGFyZWQvZGlyZWN0aXZlcy90cnVuY2F0ZS13aXRoLXRvb2x0aXAuZGlyZWN0aXZlIiwiQHNoYXJlZC9jb21wb25lbnRzL2RpYWxvZy9qc29uLW9iamVjdC1lZGl0LWRpYWxvZy5jb21wb25lbnQiLCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2ciLCJAc2hhcmVkL2NvbXBvbmVudHMvZGlyZWN0aXZlcy90Yi1qc29uLXRvLXN0cmluZy5kaXJlY3RpdmUiLCJAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUiLCJAc2hhcmVkL2NvbXBvbmVudHMvYnV0dG9uL3RvZ2dsZS1wYXNzd29yZC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLWhlYWRlci5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLXNlbGVjdC5jb21wb25lbnQiLCJAbmdyeC9zdG9yZSIsIkBhbmd1bGFyL3JvdXRlciIsIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXIiLCJAc2hhcmVkL2NvbXBvbmVudHMvanNvbi1jb250ZW50LmNvbXBvbmVudCIsIkBzaGFyZWQvaW1wb3J0LWV4cG9ydC9pbXBvcnQtZXhwb3J0LnNlcnZpY2UiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9hc3QuZGlyZWN0aXZlIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3giLCJAc2hhcmVkL2NvbXBvbmVudHMvZW50aXR5L2VudGl0eS1nYXRld2F5LXNlbGVjdC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGVscC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGludC10b29sdGlwLWljb24uY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2hlbHAtcG9wdXAuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL3BvcG92ZXIuc2VydmljZSIsIkBhbmd1bGFyL21hdGVyaWFsL2NoaXBzIiwiQHNoYXJlZC9jb21wb25lbnRzL2ljb24uY29tcG9uZW50IiwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSIsIkBzaGFyZWQvZGVjb3JhdG9ycy9jb2VyY2lvbiIsIkBzaGFyZWQvY29tcG9uZW50cy9qc29uLW9iamVjdC1lZGl0LmNvbXBvbmVudCIsIkBzaGFyZWQvY29tcG9uZW50cy9tYXJrZG93bi5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdGItZXJyb3IuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2ZpbGUtaW5wdXQuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2J1dHRvbi9jb3B5LWJ1dHRvbi5jb21wb25lbnQiXSwoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0LG4sYSxvLGkscixzLGwsYyxwLG0sZCx1LGcsZix5LGIsaCx4LHYsdyxDLFQsUyxrLEwsRixJLEEsTixNLEUscSxELFAsRyxPLFIsVixCLFUsXyxILHosVyxqLEssWSxRLEosWCxaLGVlLHRlLG5lLGFlLG9lLGllLHJlLHNlLGxlLGNlLHBlLG1lLGRlLHVlLGdlLGZlLHllLGJlLGhlLHhlLHZlLHdlLENlLFRlLFNlLGtlLExlLEZlLEllLEFlLE5lLE1lLEVlLHFlLERlLFBlLEdlLE9lLFJlLFZlLEJlLFVlLF9lLEhlLHplLFdlLGplLEtlLCRlLFllLFFlLEplLFhlLFplLGV0LHR0LG50LGF0LG90LGl0LHJ0LHN0LGx0LGN0LHB0LG10LGR0LHV0LGd0LGZ0LHl0LGJ0LGh0LHh0LHZ0LHd0LEN0LFR0LFN0O3JldHVybntzZXR0ZXJzOltmdW5jdGlvbihlKXt0PWUsbj1lLkNvbXBvbmVudCxhPWUuSW5wdXQsbz1lLlZpZXdDaGlsZCxpPWUuRXZlbnRFbWl0dGVyLHI9ZS5pbmplY3Qscz1lLkRpcmVjdGl2ZSxsPWUuT3V0cHV0LGM9ZS5QaXBlLHA9ZS5JbmplY3QsbT1lLmZvcndhcmRSZWYsZD1lLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5LHU9ZS5OZ01vZHVsZX0sZnVuY3Rpb24oZSl7Zz1lLk1hdFNvcnQsZj1lfSxmdW5jdGlvbihlKXt5PWUuTWF0VGFibGVEYXRhU291cmNlLGI9ZX0sZnVuY3Rpb24oZSl7aD1lLk1hdFBhZ2luYXRvcix4PWV9LGZ1bmN0aW9uKGUpe3Y9ZS5oZWxwQmFzZVVybCx3PWUuRGlyZWN0aW9uLEM9ZS5QYWdlTGluayxUPWUuRGF0YUtleVR5cGUsUz1lLkxlZ2VuZFBvc2l0aW9uLGs9ZS5OVUxMX1VVSUQsTD1lLkF0dHJpYnV0ZVNjb3BlLEY9ZS5EYXRhc291cmNlVHlwZSxJPWUuRW50aXR5VHlwZSxBPWUud2lkZ2V0VHlwZSxOPWUuY29lcmNlQm9vbGVhbixNPWUuZW1wdHlQYWdlRGF0YSxFPWUuaXNDbGllbnRTaWRlVGVsZW1ldHJ5VHlwZSxxPWUuVGVsZW1ldHJ5U3Vic2NyaWJlcixEPWUuU2hhcmVkTW9kdWxlLFA9ZS5EaWFsb2dDb21wb25lbnQsRz1lLkNvbnRlbnRUeXBlLE89ZS5QYWdlQ29tcG9uZW50LFI9ZS5UYlRhYmxlRGF0YXNvdXJjZSxWPWUuSE9VUixCPWUuY29lcmNlTnVtYmVyLFU9ZS5EZXZpY2VDcmVkZW50aWFsc1R5cGV9LGZ1bmN0aW9uKGUpe189ZSxIPWUuQ29tbW9uTW9kdWxlfSxmdW5jdGlvbihlKXt6PWV9LGZ1bmN0aW9uKGUpe1c9ZX0sZnVuY3Rpb24oZSl7aj1lfSxmdW5jdGlvbihlKXtLPWV9LGZ1bmN0aW9uKGUpe1k9ZSxRPWUuVHJhbnNsYXRlTW9kdWxlfSxmdW5jdGlvbihlKXtKPWUuZGVlcENsb25lLFg9ZSxaPWUuZGVsZXRlTnVsbFByb3BlcnRpZXMsZWU9ZS5pc0VxdWFsLHRlPWUuaXNOdW1iZXIsbmU9ZS5pc1N0cmluZyxhZT1lLldJTkRPVyxvZT1lLmlzTGl0ZXJhbE9iamVjdCxpZT1lLmlzRGVmaW5lZEFuZE5vdE51bGwscmU9ZS5pc1VuZGVmaW5lZE9yTnVsbCxzZT1lLmdlbmVyYXRlU2VjcmV0LGxlPWUuaXNPYmplY3QsY2U9ZS5jYW1lbENhc2UscGU9ZS5kZWVwVHJpbX0sZnVuY3Rpb24oZSl7bWU9ZSxkZT1lLkZvcm1CdWlsZGVyLHVlPWUuVmFsaWRhdG9ycyxnZT1lLk5HX1ZBTFVFX0FDQ0VTU09SLGZlPWUuTkdfVkFMSURBVE9SUyx5ZT1lLkZvcm1Db250cm9sfSxmdW5jdGlvbihlKXtiZT1lfSxmdW5jdGlvbihlKXtoZT1lfSxmdW5jdGlvbihlKXt4ZT1lfSxmdW5jdGlvbihlKXt2ZT1lfSxmdW5jdGlvbihlKXt3ZT1lfSxmdW5jdGlvbihlKXtDZT1lLFRlPWUuRXJyb3JTdGF0ZU1hdGNoZXJ9LGZ1bmN0aW9uKGUpe1NlPWUuU3ViamVjdCxrZT1lLmZyb21FdmVudCxMZT1lLkJlaGF2aW9yU3ViamVjdCxGZT1lLlJlcGxheVN1YmplY3QsSWU9ZS5vZixBZT1lLmZvcmtKb2lufSxmdW5jdGlvbihlKXtOZT1lLnRha2VVbnRpbCxNZT1lLmZpbHRlcixFZT1lLnRhcCxxZT1lLmNhdGNoRXJyb3IsRGU9ZS5tYXAsUGU9ZS5wdWJsaXNoUmVwbGF5LEdlPWUucmVmQ291bnQsT2U9ZS50YWtlLFJlPWUuc3RhcnRXaXRoLFZlPWUuZGVib3VuY2VUaW1lLEJlPWUuZGlzdGluY3RVbnRpbENoYW5nZWQsVWU9ZS5zd2l0Y2hNYXAsX2U9ZS5tZXJnZU1hcH0sZnVuY3Rpb24oZSl7SGU9ZS5fX2RlY29yYXRlfSxmdW5jdGlvbihlKXt6ZT1lLFdlPWUuTWF0VG9vbHRpcH0sZnVuY3Rpb24oZSl7amU9ZS5TZWxlY3Rpb25Nb2RlbH0sZnVuY3Rpb24oZSl7S2U9ZX0sZnVuY3Rpb24oZSl7JGU9ZX0sZnVuY3Rpb24oZSl7WWU9ZX0sZnVuY3Rpb24oZSl7UWU9ZS5Kc29uT2JqZWN0RWRpdERpYWxvZ0NvbXBvbmVudH0sZnVuY3Rpb24oZSl7SmU9ZSxYZT1lLk1BVF9ESUFMT0dfREFUQX0sZnVuY3Rpb24oZSl7WmU9ZX0sZnVuY3Rpb24oZSl7ZXQ9ZX0sZnVuY3Rpb24oZSl7dHQ9ZX0sZnVuY3Rpb24oZSl7bnQ9ZX0sZnVuY3Rpb24oZSl7YXQ9ZX0sZnVuY3Rpb24oZSl7b3Q9ZX0sZnVuY3Rpb24oZSl7aXQ9ZX0sZnVuY3Rpb24oZSl7cnQ9ZX0sZnVuY3Rpb24oZSl7c3Q9ZX0sZnVuY3Rpb24oZSl7bHQ9ZX0sZnVuY3Rpb24oZSl7Y3Q9ZX0sZnVuY3Rpb24oZSl7cHQ9ZX0sZnVuY3Rpb24oZSl7bXQ9ZX0sZnVuY3Rpb24oZSl7ZHQ9ZX0sZnVuY3Rpb24oZSl7dXQ9ZX0sZnVuY3Rpb24oZSl7Z3Q9ZX0sZnVuY3Rpb24oZSl7ZnQ9ZX0sZnVuY3Rpb24oZSl7eXQ9ZX0sZnVuY3Rpb24oZSl7YnQ9ZX0sZnVuY3Rpb24oZSl7aHQ9ZX0sZnVuY3Rpb24oZSl7eHQ9ZS5jb2VyY2VCb29sZWFufSxmdW5jdGlvbihlKXt2dD1lfSxmdW5jdGlvbihlKXt3dD1lfSxmdW5jdGlvbihlKXtDdD1lfSxmdW5jdGlvbihlKXtUdD1lfSxmdW5jdGlvbihlKXtTdD1lfV0sZXhlY3V0ZTpmdW5jdGlvbigpe2NvbnN0IGt0PWUoIm5vTGVhZFRyYWlsU3BhY2VzUmVnZXgiLC9eXFMrKD86IFxTKykqJC8pLEx0PWUoImludGVnZXJSZWdleCIsL15bLStdP1xkKyQvKSxGdD1lKCJub25aZXJvRmxvYXQiLC9eLT8oPyEwKFwuMCspPyQpXGQrKFwuXGQrKT8kLyksSXQ9ZSgianNvblJlcXVpcmVkIiwoZT0+ZS52YWx1ZT9udWxsOntyZXF1aXJlZDohMH0pKTt2YXIgQXQsTnQsTXQsRXQ7ZSgiU3RvcmFnZVR5cGVzIixBdCksZnVuY3Rpb24oZSl7ZS5NRU1PUlk9Im1lbW9yeSIsZS5GSUxFPSJmaWxlIixlLlNRTElURT0ic3FsaXRlIn0oQXR8fGUoIlN0b3JhZ2VUeXBlcyIsQXQ9e30pKSxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdCksZnVuY3Rpb24oZSl7ZS5FWENFUFRJT049IkVYQ0VQVElPTiJ9KE50fHxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdD17fSkpLGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQpLGZ1bmN0aW9uKGUpe2UuTk9ORT0iTk9ORSIsZS5DUklUSUNBTD0iQ1JJVElDQUwiLGUuRVJST1I9IkVSUk9SIixlLldBUk5JTkc9IldBUk5JTkciLGUuSU5GTz0iSU5GTyIsZS5ERUJVRz0iREVCVUciLGUuVFJBQ0U9IlRSQUNFIn0oTXR8fGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQ9e30pKSxlKCJQb3J0TGltaXRzIixFdCksZnVuY3Rpb24oZSl7ZVtlLk1JTj0xXT0iTUlOIixlW2UuTUFYPTY1NTM1XT0iTUFYIn0oRXR8fGUoIlBvcnRMaW1pdHMiLEV0PXt9KSk7Y29uc3QgcXQ9ZSgiR2F0ZXdheVN0YXR1cyIsey4uLk10LC4uLk50fSk7dmFyIER0LFB0O2UoIkxvZ1NhdmluZ1BlcmlvZCIsRHQpLGZ1bmN0aW9uKGUpe2UuZGF5cz0iRCIsZS5ob3Vycz0iSCIsZS5taW51dGVzPSJNIixlLnNlY29uZHM9IlMifShEdHx8ZSgiTG9nU2F2aW5nUGVyaW9kIixEdD17fSkpLGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0KSxmdW5jdGlvbihlKXtlLnNlcnZpY2U9InNlcnZpY2UiLGUuY29ubmVjdG9yPSJjb25uZWN0b3IiLGUuY29udmVydGVyPSJjb252ZXJ0ZXIiLGUudGJfY29ubmVjdGlvbj0idGJfY29ubmVjdGlvbiIsZS5zdG9yYWdlPSJzdG9yYWdlIixlLmV4dGVuc2lvbj0iZXh0ZW5zaW9uIn0oUHR8fGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0PXt9KSk7Y29uc3QgR3Q9ZSgiTG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwIixuZXcgTWFwKFtbUHQuc2VydmljZSwiU2VydmljZSJdLFtQdC5jb25uZWN0b3IsIkNvbm5lY3RvciJdLFtQdC5jb252ZXJ0ZXIsIkNvbnZlcnRlciJdLFtQdC50Yl9jb25uZWN0aW9uLCJUQiBDb25uZWN0aW9uIl0sW1B0LnN0b3JhZ2UsIlN0b3JhZ2UiXSxbUHQuZXh0ZW5zaW9uLCJFeHRlbnNpb24iXV0pKSxPdD1lKCJMb2dTYXZpbmdQZXJpb2RUcmFuc2xhdGlvbnMiLG5ldyBNYXAoW1tEdC5kYXlzLCJnYXRld2F5LmxvZ3MuZGF5cyJdLFtEdC5ob3VycywiZ2F0ZXdheS5sb2dzLmhvdXJzIl0sW0R0Lm1pbnV0ZXMsImdhdGV3YXkubG9ncy5taW51dGVzIl0sW0R0LnNlY29uZHMsImdhdGV3YXkubG9ncy5zZWNvbmRzIl1dKSksUnQ9ZSgiU3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAiLG5ldyBNYXAoW1tBdC5NRU1PUlksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtBdC5GSUxFLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl0sW0F0LlNRTElURSwiZ2F0ZXdheS5zdG9yYWdlLXR5cGVzLnNxbGl0ZSJdXSkpO3ZhciBWdDtlKCJTZWN1cml0eVR5cGVzIixWdCksZnVuY3Rpb24oZSl7ZS5BQ0NFU1NfVE9LRU49ImFjY2Vzc1Rva2VuIixlLlVTRVJOQU1FX1BBU1NXT1JEPSJ1c2VybmFtZVBhc3N3b3JkIixlLlRMU19BQ0NFU1NfVE9LRU49InRsc0FjY2Vzc1Rva2VuIixlLlRMU19QUklWQVRFX0tFWT0idGxzUHJpdmF0ZUtleSJ9KFZ0fHxlKCJTZWN1cml0eVR5cGVzIixWdD17fSkpO2NvbnN0IEJ0PWUoIkdlY3VyaXR5VHlwZXNUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tWdC5BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl0sW1Z0LlVTRVJOQU1FX1BBU1NXT1JELCJnYXRld2F5LnNlY3VyaXR5LXR5cGVzLnVzZXJuYW1lLXBhc3N3b3JkIl0sW1Z0LlRMU19BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMudGxzLWFjY2Vzcy10b2tlbiJdXSkpO3ZhciBVdCxfdDtlKCJHYXRld2F5VmVyc2lvbiIsVXQpLGZ1bmN0aW9uKGUpe2UuQ3VycmVudD0iMy41LjIiLGUuTGVnYWN5PSJsZWdhY3kifShVdHx8ZSgiR2F0ZXdheVZlcnNpb24iLFV0PXt9KSksZSgiQ29ubmVjdG9yVHlwZSIsX3QpLGZ1bmN0aW9uKGUpe2UuTVFUVD0ibXF0dCIsZS5NT0RCVVM9Im1vZGJ1cyIsZS5HUlBDPSJncnBjIixlLk9QQ1VBPSJvcGN1YSIsZS5CTEU9ImJsZSIsZS5SRVFVRVNUPSJyZXF1ZXN0IixlLkNBTj0iY2FuIixlLkJBQ05FVD0iYmFjbmV0IixlLk9EQkM9Im9kYmMiLGUuUkVTVD0icmVzdCIsZS5TTk1QPSJzbm1wIixlLkZUUD0iZnRwIixlLlNPQ0tFVD0ic29ja2V0IixlLlhNUFA9InhtcHAiLGUuT0NQUD0ib2NwcCIsZS5DVVNUT009ImN1c3RvbSJ9KF90fHxlKCJDb25uZWN0b3JUeXBlIixfdD17fSkpO2NvbnN0IEh0PWUoIkdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIixuZXcgTWFwKFtbX3QuTVFUVCwiTVFUVCJdLFtfdC5NT0RCVVMsIk1PREJVUyJdLFtfdC5HUlBDLCJHUlBDIl0sW190Lk9QQ1VBLCJPUENVQSJdLFtfdC5CTEUsIkJMRSJdLFtfdC5SRVFVRVNULCJSRVFVRVNUIl0sW190LkNBTiwiQ0FOIl0sW190LkJBQ05FVCwiQkFDTkVUIl0sW190Lk9EQkMsIk9EQkMiXSxbX3QuUkVTVCwiUkVTVCJdLFtfdC5TTk1QLCJTTk1QIl0sW190LkZUUCwiRlRQIl0sW190LlNPQ0tFVCwiU09DS0VUIl0sW190LlhNUFAsIlhNUFAiXSxbX3QuT0NQUCwiT0NQUCJdLFtfdC5DVVNUT00sIkNVU1RPTSJdXSkpLHp0PWUoIk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzEsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1jb2lscyJdLFsyLCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtZGlzY3JldGUtaW5wdXRzIl0sWzMsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdLFs0LCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtaW5wdXQtcmVnaXN0ZXJzIl0sWzUsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMud3JpdGUtc2luZ2xlLWNvaWwiXSxbNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1zaW5nbGUtaG9sZGluZy1yZWdpc3RlciJdLFsxNSwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1jb2lscyJdLFsxNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdXSkpO3ZhciBXdDtlKCJCQUNuZXRSZXF1ZXN0VHlwZXMiLFd0KSxmdW5jdGlvbihlKXtlLldyaXRlUHJvcGVydHk9IndyaXRlUHJvcGVydHkiLGUuUmVhZFByb3BlcnR5PSJyZWFkUHJvcGVydHkifShXdHx8ZSgiQkFDbmV0UmVxdWVzdFR5cGVzIixXdD17fSkpO2NvbnN0IGp0PWUoIkJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tXdC5Xcml0ZVByb3BlcnR5LCJnYXRld2F5LnJwYy53cml0ZS1wcm9wZXJ0eSJdLFtXdC5SZWFkUHJvcGVydHksImdhdGV3YXkucnBjLnJlYWQtcHJvcGVydHkiXV0pKTt2YXIgS3Q7ZSgiQkFDbmV0T2JqZWN0VHlwZXMiLEt0KSxmdW5jdGlvbihlKXtlLkJpbmFyeUlucHV0PSJiaW5hcnlJbnB1dCIsZS5CaW5hcnlPdXRwdXQ9ImJpbmFyeU91dHB1dCIsZS5BbmFsb2dJbnB1dD0iYW5hbG9nSW5wdXQiLGUuQW5hbG9nT3V0cHV0PSJhbmFsb2dPdXRwdXQiLGUuQmluYXJ5VmFsdWU9ImJpbmFyeVZhbHVlIixlLkFuYWxvZ1ZhbHVlPSJhbmFsb2dWYWx1ZSJ9KEt0fHxlKCJCQUNuZXRPYmplY3RUeXBlcyIsS3Q9e30pKTtjb25zdCAkdD1lKCJCQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tLdC5BbmFsb2dPdXRwdXQsImdhdGV3YXkucnBjLmFuYWxvZy1vdXRwdXQiXSxbS3QuQW5hbG9nSW5wdXQsImdhdGV3YXkucnBjLmFuYWxvZy1pbnB1dCJdLFtLdC5CaW5hcnlPdXRwdXQsImdhdGV3YXkucnBjLmJpbmFyeS1vdXRwdXQiXSxbS3QuQmluYXJ5SW5wdXQsImdhdGV3YXkucnBjLmJpbmFyeS1pbnB1dCJdLFtLdC5CaW5hcnlWYWx1ZSwiZ2F0ZXdheS5ycGMuYmluYXJ5LXZhbHVlIl0sW0t0LkFuYWxvZ1ZhbHVlLCJnYXRld2F5LnJwYy5hbmFsb2ctdmFsdWUiXV0pKTt2YXIgWXQ7ZSgiQkxFTWV0aG9kcyIsWXQpLGZ1bmN0aW9uKGUpe2UuV1JJVEU9IndyaXRlIixlLlJFQUQ9InJlYWQiLGUuU0NBTj0ic2NhbiJ9KFl0fHxlKCJCTEVNZXRob2RzIixZdD17fSkpO2NvbnN0IFF0PWUoIkJMRU1ldGhvZHNUcmFuc2xhdGVzIixuZXcgTWFwKFtbWXQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl0sW1l0LlJFQUQsImdhdGV3YXkucnBjLnJlYWQiXSxbWXQuU0NBTiwiZ2F0ZXdheS5ycGMuc2NhbiJdXSkpO3ZhciBKdCxYdDtlKCJDQU5CeXRlT3JkZXJzIixKdCksZnVuY3Rpb24oZSl7ZS5MSVRUTEU9IkxJVFRMRSIsZS5CSUc9IkJJRyJ9KEp0fHxlKCJDQU5CeXRlT3JkZXJzIixKdD17fSkpLGUoIlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzIixYdCksZnVuY3Rpb24oZSl7ZS5XUklURT0id3JpdGUifShYdHx8ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3MiLFh0PXt9KSk7Y29uc3QgWnQ9ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzIixuZXcgTWFwKFtbWHQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl1dKSk7dmFyIGVuO2UoIlNOTVBNZXRob2RzIixlbiksZnVuY3Rpb24oZSl7ZS5TRVQ9InNldCIsZS5NVUxUSVNFVD0ibXVsdGlzZXQiLGUuR0VUPSJnZXQiLGUuQlVMS1dBTEs9ImJ1bGt3YWxrIixlLlRBQkxFPSJ0YWJsZSIsZS5NVUxUSUdFVD0ibXVsdGlnZXQiLGUuR0VUTkVYVD0iZ2V0bmV4dCIsZS5CVUxLR0VUPSJidWxrZ2V0IixlLldBTEtTPSJ3YWxrIn0oZW58fGUoIlNOTVBNZXRob2RzIixlbj17fSkpO2NvbnN0IHRuPWUoIlNOTVBNZXRob2RzVHJhbnNsYXRpb25zIixuZXcgTWFwKFtbZW4uU0VULCJnYXRld2F5LnJwYy5zZXQiXSxbZW4uTVVMVElTRVQsImdhdGV3YXkucnBjLm11bHRpc2V0Il0sW2VuLkdFVCwiZ2F0ZXdheS5ycGMuZ2V0Il0sW2VuLkJVTEtXQUxLLCJnYXRld2F5LnJwYy5idWxrLXdhbGsiXSxbZW4uVEFCTEUsImdhdGV3YXkucnBjLnRhYmxlIl0sW2VuLk1VTFRJR0VULCJnYXRld2F5LnJwYy5tdWx0aS1nZXQiXSxbZW4uR0VUTkVYVCwiZ2F0ZXdheS5ycGMuZ2V0LW5leHQiXSxbZW4uQlVMS0dFVCwiZ2F0ZXdheS5ycGMuYnVsay1nZXQiXSxbZW4uV0FMS1MsImdhdGV3YXkucnBjLndhbGsiXV0pKTt2YXIgbm4sYW4sb24scm4sc24sbG47ZSgiSFRUUE1ldGhvZHMiLG5uKSxmdW5jdGlvbihlKXtlLkNPTk5FQ1Q9IkNPTk5FQ1QiLGUuREVMRVRFPSJERUxFVEUiLGUuR0VUPSJHRVQiLGUuSEVBRD0iSEVBRCIsZS5PUFRJT05TPSJPUFRJT05TIixlLlBBVENIPSJQQVRDSCIsZS5QT1NUPSJQT1NUIixlLlBVVD0iUFVUIixlLlRSQUNFPSJUUkFDRSJ9KG5ufHxlKCJIVFRQTWV0aG9kcyIsbm49e30pKSxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuKSxmdW5jdGlvbihlKXtlLlVURl84PSJ1dGYtOCJ9KGFufHxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuPXt9KSksZSgiQ29uZmlndXJhdGlvbk1vZGVzIixvbiksZnVuY3Rpb24oZSl7ZS5CQVNJQz0iYmFzaWMiLGUuQURWQU5DRUQ9ImFkdmFuY2VkIn0ob258fGUoIkNvbmZpZ3VyYXRpb25Nb2RlcyIsb249e30pKSxlKCJTZWN1cml0eVR5cGUiLHJuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyIsZS5DRVJUSUZJQ0FURVM9ImNlcnRpZmljYXRlcyJ9KHJufHxlKCJTZWN1cml0eVR5cGUiLHJuPXt9KSksZSgiUmVwb3J0U3RyYXRlZ3lUeXBlIixzbiksZnVuY3Rpb24oZSl7ZS5PbkNoYW5nZT0iT05fQ0hBTkdFIixlLk9uUmVwb3J0UGVyaW9kPSJPTl9SRVBPUlRfUEVSSU9EIixlLk9uQ2hhbmdlT3JSZXBvcnRQZXJpb2Q9Ik9OX0NIQU5HRV9PUl9SRVBPUlRfUEVSSU9EIn0oc258fGUoIlJlcG9ydFN0cmF0ZWd5VHlwZSIsc249e30pKSxlKCJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZSIsbG4pLGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0b3I9NmU0XT0iQ29ubmVjdG9yIixlW2UuRGV2aWNlPTNlNF09IkRldmljZSIsZVtlLktleT0xNWUzXT0iS2V5In0obG58fGUoIlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlIixsbj17fSkpO2NvbnN0IGNuPWUoIlJlcG9ydFN0cmF0ZWd5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW3NuLk9uQ2hhbmdlLCJnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5vbi1jaGFuZ2UiXSxbc24uT25SZXBvcnRQZXJpb2QsImdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5Lm9uLXJlcG9ydC1wZXJpb2QiXSxbc24uT25DaGFuZ2VPclJlcG9ydFBlcmlvZCwiZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kub24tY2hhbmdlLW9yLXJlcG9ydC1wZXJpb2QiXV0pKTt2YXIgcG47ZSgiTW9kZVR5cGUiLHBuKSxmdW5jdGlvbihlKXtlLk5PTkU9Ik5vbmUiLGUuU0lHTj0iU2lnbiIsZS5TSUdOQU5ERU5DUllQVD0iU2lnbkFuZEVuY3J5cHQifShwbnx8ZSgiTW9kZVR5cGUiLHBuPXt9KSk7Y29uc3QgbW49ZSgiU2VjdXJpdHlUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbcm4uQU5PTllNT1VTLCJnYXRld2F5LmJyb2tlci5zZWN1cml0eS10eXBlcy5hbm9ueW1vdXMiXSxbcm4uQkFTSUMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmJhc2ljIl0sW3JuLkNFUlRJRklDQVRFUywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuY2VydGlmaWNhdGVzIl1dKSk7dmFyIGRuO2UoIlJlc3RTZWN1cml0eVR5cGUiLGRuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyJ9KGRufHxlKCJSZXN0U2VjdXJpdHlUeXBlIixkbj17fSkpO2NvbnN0IHVuPWUoIlJlc3RTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tkbi5BTk9OWU1PVVMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmFub255bW91cyJdLFtkbi5CQVNJQywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuYmFzaWMiXV0pKSxnbj1lKCJNcXR0VmVyc2lvbnMiLFt7bmFtZTozLjEsdmFsdWU6M30se25hbWU6My4xMSx2YWx1ZTo0fSx7bmFtZTo1LHZhbHVlOjV9XSk7dmFyIGZuO2UoIk1hcHBpbmdUeXBlIixmbiksZnVuY3Rpb24oZSl7ZS5EQVRBPSJkYXRhIixlLlJFUVVFU1RTPSJyZXF1ZXN0cyIsZS5PUENVQT0iT1BDdWEifShmbnx8ZSgiTWFwcGluZ1R5cGUiLGZuPXt9KSk7Y29uc3QgeW49ZSgiTWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nIl0sW2ZuLk9QQ1VBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdXSkpLGJuPWUoIk1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbZm4uREFUQSwiZ2F0ZXdheS5kYXRhLW1hcHBpbmctaGludCJdLFtmbi5PUENVQSwiZ2F0ZXdheS5vcGN1YS1kYXRhLW1hcHBpbmctaGludCJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nLWhpbnQiXV0pKSxobj1lKCJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNzZWN0aW9uLW1hcHBpbmciXSxbZm4uT1BDVUEsdisiL2RvY3MvaW90LWdhdGV3YXkvY29uZmlnL29wYy11YS8jc2VjdGlvbi1tYXBwaW5nIl0sW2ZuLlJFUVVFU1RTLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNyZXF1ZXN0cy1tYXBwaW5nIl1dKSkseG49ZSgiUXVhbGl0eVR5cGVzIixbMCwxLDJdKSx2bj1lKCJRdWFsaXR5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzAsImdhdGV3YXkucW9zLmF0LW1vc3Qtb25jZSJdLFsxLCJnYXRld2F5LnFvcy5hdC1sZWFzdC1vbmNlIl0sWzIsImdhdGV3YXkucW9zLmV4YWN0bHktb25jZSJdXSkpO3ZhciB3bjtlKCJDb252ZXJ0b3JUeXBlIix3biksZnVuY3Rpb24oZSl7ZS5KU09OPSJqc29uIixlLkJZVEVTPSJieXRlcyIsZS5DVVNUT009ImN1c3RvbSJ9KHdufHxlKCJDb252ZXJ0b3JUeXBlIix3bj17fSkpO2NvbnN0IENuPWUoIkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1t3bi5KU09OLCJnYXRld2F5LkpTT04iXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMiXSxbd24uQ1VTVE9NLCJnYXRld2F5LmN1c3RvbSJdXSkpO3ZhciBUbixTbixrbjtlKCJTb3VyY2VUeXBlIixUbiksZnVuY3Rpb24oZSl7ZS5NU0c9Im1lc3NhZ2UiLGUuVE9QSUM9InRvcGljIixlLkNPTlNUPSJjb25zdGFudCJ9KFRufHxlKCJTb3VyY2VUeXBlIixUbj17fSkpLGUoIk9QQ1VhU291cmNlVHlwZSIsU24pLGZ1bmN0aW9uKGUpe2UuUEFUSD0icGF0aCIsZS5JREVOVElGSUVSPSJpZGVudGlmaWVyIixlLkNPTlNUPSJjb25zdGFudCJ9KFNufHxlKCJPUENVYVNvdXJjZVR5cGUiLFNuPXt9KSksZSgiRGV2aWNlSW5mb1R5cGUiLGtuKSxmdW5jdGlvbihlKXtlLkZVTEw9ImZ1bGwiLGUuUEFSVElBTD0icGFydGlhbCJ9KGtufHxlKCJEZXZpY2VJbmZvVHlwZSIsa249e30pKTtjb25zdCBMbj1lKCJTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbVG4uTVNHLCJnYXRld2F5LnNvdXJjZS10eXBlLm1zZyJdLFtUbi5UT1BJQywiZ2F0ZXdheS5zb3VyY2UtdHlwZS50b3BpYyJdLFtUbi5DT05TVCwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5jb25zdCJdLFtTbi5QQVRILCJnYXRld2F5LnNvdXJjZS10eXBlLnBhdGgiXSxbU24uSURFTlRJRklFUiwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5pZGVudGlmaWVyIl0sW1NuLkNPTlNULCJnYXRld2F5LnNvdXJjZS10eXBlLmNvbnN0Il1dKSk7dmFyIEZuLEluO2UoIlNlcnZlclNpZGVScGNUeXBlIixGbiksZnVuY3Rpb24oZSl7ZS5XaXRoUmVzcG9uc2U9InR3b1dheSIsZS5XaXRob3V0UmVzcG9uc2U9Im9uZVdheSJ9KEZufHxlKCJTZXJ2ZXJTaWRlUnBjVHlwZSIsRm49e30pKSxlKCJSZXF1ZXN0VHlwZSIsSW4pLGZ1bmN0aW9uKGUpe2UuQ09OTkVDVF9SRVFVRVNUPSJjb25uZWN0UmVxdWVzdHMiLGUuRElTQ09OTkVDVF9SRVFVRVNUPSJkaXNjb25uZWN0UmVxdWVzdHMiLGUuQVRUUklCVVRFX1JFUVVFU1Q9ImF0dHJpYnV0ZVJlcXVlc3RzIixlLkFUVFJJQlVURV9VUERBVEU9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuU0VSVkVSX1NJREVfUlBDPSJzZXJ2ZXJTaWRlUnBjIn0oSW58fGUoIlJlcXVlc3RUeXBlIixJbj17fSkpO2NvbnN0IEFuPWUoIlJlcXVlc3RUeXBlc1RyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW0luLkNPTk5FQ1RfUkVRVUVTVCwiZ2F0ZXdheS5yZXF1ZXN0LmNvbm5lY3QtcmVxdWVzdCJdLFtJbi5ESVNDT05ORUNUX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5kaXNjb25uZWN0LXJlcXVlc3QiXSxbSW4uQVRUUklCVVRFX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5hdHRyaWJ1dGUtcmVxdWVzdCJdLFtJbi5BVFRSSUJVVEVfVVBEQVRFLCJnYXRld2F5LnJlcXVlc3QuYXR0cmlidXRlLXVwZGF0ZSJdLFtJbi5TRVJWRVJfU0lERV9SUEMsImdhdGV3YXkucmVxdWVzdC5ycGMtY29ubmVjdGlvbiJdXSkpO3ZhciBObjtlKCJNYXBwaW5nS2V5c1R5cGUiLE5uKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5DVVNUT009ImV4dGVuc2lvbkNvbmZpZyIsZS5SUENfTUVUSE9EUz0icnBjX21ldGhvZHMiLGUuQVRUUklCVVRFU19VUERBVEVTPSJhdHRyaWJ1dGVzX3VwZGF0ZXMifShObnx8ZSgiTWFwcGluZ0tleXNUeXBlIixObj17fSkpO2NvbnN0IE1uPWUoIk1hcHBpbmdLZXlzUGFuZWxUaXRsZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LnRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5LmtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5LnJwYy1tZXRob2RzIl1dKSksRW49ZSgiTWFwcGluZ0tleXNBZGRLZXlUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tObi5BVFRSSUJVVEVTLCJnYXRld2F5LmFkZC1hdHRyaWJ1dGUiXSxbTm4uVElNRVNFUklFUywiZ2F0ZXdheS5hZGQtdGltZXNlcmllcyJdLFtObi5DVVNUT00sImdhdGV3YXkuYWRkLWtleSJdLFtObi5BVFRSSUJVVEVTX1VQREFURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZS11cGRhdGUiXSxbTm4uUlBDX01FVEhPRFMsImdhdGV3YXkuYWRkLXJwYy1tZXRob2QiXV0pKSxxbj1lKCJNYXBwaW5nS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW05uLkNVU1RPTSwiZ2F0ZXdheS5kZWxldGUta2V5Il0sW05uLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFtObi5SUENfTUVUSE9EUywiZ2F0ZXdheS5kZWxldGUtcnBjLW1ldGhvZCJdXSkpLERuPWUoIk1hcHBpbmdLZXlzTm9LZXlzVGV4dFRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkubm8tYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5Lm5vLXRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5Lm5vLWtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5Lm5vLXJwYy1tZXRob2RzIl1dKSk7dmFyIFBuLEduLE9uO2UoIlNlcnZlclNpZGVSUENUeXBlIixQbiksZnVuY3Rpb24oZSl7ZS5PTkVfV0FZPSJvbmVXYXkiLGUuVFdPX1dBWT0idHdvV2F5In0oUG58fGUoIlNlcnZlclNpZGVSUENUeXBlIixQbj17fSkpLGUoIk1hcHBpbmdWYWx1ZVR5cGUiLEduKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLklOVEVHRVI9ImludGVnZXIiLGUuRE9VQkxFPSJkb3VibGUiLGUuQk9PTEVBTj0iYm9vbGVhbiJ9KEdufHxlKCJNYXBwaW5nVmFsdWVUeXBlIixHbj17fSkpLGUoIk1vZGlmaWVyVHlwZSIsT24pLGZ1bmN0aW9uKGUpe2UuRElWSURFUj0iZGl2aWRlciIsZS5NVUxUSVBMSUVSPSJtdWx0aXBsaWVyIn0oT258fGUoIk1vZGlmaWVyVHlwZSIsT249e30pKTtjb25zdCBSbj1lKCJNb2RpZmllclR5cGVzTWFwIixuZXcgTWFwKFtbT24uRElWSURFUix7bmFtZToiZ2F0ZXdheS5kaXZpZGVyIixpY29uOiJtZGk6ZGl2aXNpb24ifV0sW09uLk1VTFRJUExJRVIse25hbWU6ImdhdGV3YXkubXVsdGlwbGllciIsaWNvbjoibWRpOm11bHRpcGxpY2F0aW9uIn1dXSkpLFZuPWUoIm1hcHBpbmdWYWx1ZVR5cGVzTWFwIixuZXcgTWFwKFtbR24uU1RSSU5HLHtuYW1lOiJ2YWx1ZS5zdHJpbmciLGljb246Im1kaTpmb3JtYXQtdGV4dCJ9XSxbR24uSU5URUdFUix7bmFtZToidmFsdWUuaW50ZWdlciIsaWNvbjoibWRpOm51bWVyaWMifV0sW0duLkRPVUJMRSx7bmFtZToidmFsdWUuZG91YmxlIixpY29uOiJtZGk6bnVtZXJpYyJ9XSxbR24uQk9PTEVBTix7bmFtZToidmFsdWUuYm9vbGVhbiIsaWNvbjoibWRpOmNoZWNrYm94LW1hcmtlZC1vdXRsaW5lIn1dXSkpLEJuPWUoIkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbd24uSlNPTiwiZ2F0ZXdheS5KU09OLWhpbnQiXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMtaGludCJdLFt3bi5DVVNUT00sImdhdGV3YXkuY3VzdG9tLWhpbnQiXV0pKTt2YXIgVW47ZSgiU2VjdXJpdHlQb2xpY3kiLFVuKSxmdW5jdGlvbihlKXtlLkJBU0lDMTI4PSJCYXNpYzEyOFJzYTE1IixlLkJBU0lDMjU2PSJCYXNpYzI1NiIsZS5CQVNJQzI1NlNIQT0iQmFzaWMyNTZTaGEyNTYifShVbnx8ZSgiU2VjdXJpdHlQb2xpY3kiLFVuPXt9KSk7Y29uc3QgX249ZSgiU2VjdXJpdHlQb2xpY3lUeXBlcyIsW3t2YWx1ZTpVbi5CQVNJQzEyOCxuYW1lOiJCYXNpYzEyOFJTQTE1In0se3ZhbHVlOlVuLkJBU0lDMjU2LG5hbWU6IkJhc2ljMjU2In0se3ZhbHVlOlVuLkJBU0lDMjU2U0hBLG5hbWU6IkJhc2ljMjU2U0hBMjU2In1dKTt2YXIgSG47ZSgiTW9kYnVzUHJvdG9jb2xUeXBlIixIbiksZnVuY3Rpb24oZSl7ZS5UQ1A9InRjcCIsZS5VRFA9InVkcCIsZS5TZXJpYWw9InNlcmlhbCJ9KEhufHxlKCJNb2RidXNQcm90b2NvbFR5cGUiLEhuPXt9KSk7Y29uc3Qgem49ZSgiTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAiLG5ldyBNYXAoW1tIbi5UQ1AsIlRDUCJdLFtIbi5VRFAsIlVEUCJdLFtIbi5TZXJpYWwsIlNlcmlhbCJdXSkpO3ZhciBXbixqbjtlKCJNb2RidXNNZXRob2RUeXBlIixXbiksZnVuY3Rpb24oZSl7ZS5TT0NLRVQ9InNvY2tldCIsZS5SVFU9InJ0dSJ9KFdufHxlKCJNb2RidXNNZXRob2RUeXBlIixXbj17fSkpLGUoIk1vZGJ1c1NlcmlhbE1ldGhvZFR5cGUiLGpuKSxmdW5jdGlvbihlKXtlLlJUVT0icnR1IixlLkFTQ0lJPSJhc2NpaSJ9KGpufHxlKCJNb2RidXNTZXJpYWxNZXRob2RUeXBlIixqbj17fSkpO2NvbnN0IEtuPWUoIk1vZGJ1c01ldGhvZExhYmVsc01hcCIsbmV3IE1hcChbW1duLlNPQ0tFVCwiU29ja2V0Il0sW1duLlJUVSwiUlRVIl0sW2puLkFTQ0lJLCJBU0NJSSJdXSkpLCRuPWUoIk1vZGJ1c0J5dGVTaXplcyIsWzUsNiw3LDhdKTt2YXIgWW47ZSgiTW9kYnVzUGFyaXR5IixZbiksZnVuY3Rpb24oZSl7ZS5FdmVuPSJFIixlLk9kZD0iTyIsZS5Ob25lPSJOIn0oWW58fGUoIk1vZGJ1c1Bhcml0eSIsWW49e30pKTtjb25zdCBRbj1lKCJNb2RidXNQYXJpdHlMYWJlbHNNYXAiLG5ldyBNYXAoW1tZbi5FdmVuLCJFdmVuIl0sW1luLk9kZCwiT2RkIl0sW1luLk5vbmUsIk5vbmUiXV0pKTt2YXIgSm4sWG47ZSgiTW9kYnVzT3JkZXJUeXBlIixKbiksZnVuY3Rpb24oZSl7ZS5CSUc9IkJJRyIsZS5MSVRUTEU9IkxJVFRMRSJ9KEpufHxlKCJNb2RidXNPcmRlclR5cGUiLEpuPXt9KSksZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbiksZnVuY3Rpb24oZSl7ZS5Ib2xkaW5nUmVnaXN0ZXJzPSJob2xkaW5nX3JlZ2lzdGVycyIsZS5Db2lsc0luaXRpYWxpemVyPSJjb2lsc19pbml0aWFsaXplciIsZS5JbnB1dFJlZ2lzdGVycz0iaW5wdXRfcmVnaXN0ZXJzIixlLkRpc2NyZXRlSW5wdXRzPSJkaXNjcmV0ZV9pbnB1dHMifShYbnx8ZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbj17fSkpO2NvbnN0IFpuPWUoIk1vZGJ1c1JlZ2lzdGVyVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbWG4uSG9sZGluZ1JlZ2lzdGVycywiZ2F0ZXdheS5ob2xkaW5nX3JlZ2lzdGVycyJdLFtYbi5Db2lsc0luaXRpYWxpemVyLCJnYXRld2F5LmNvaWxzX2luaXRpYWxpemVyIl0sW1huLklucHV0UmVnaXN0ZXJzLCJnYXRld2F5LmlucHV0X3JlZ2lzdGVycyJdLFtYbi5EaXNjcmV0ZUlucHV0cywiZ2F0ZXdheS5kaXNjcmV0ZV9pbnB1dHMiXV0pKTt2YXIgZWE7ZSgiTW9kYnVzRGF0YVR5cGUiLGVhKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLkJZVEVTPSJieXRlcyIsZS5CSVRTPSJiaXRzIixlLklOVDg9IjhpbnQiLGUuVUlOVDg9Ijh1aW50IixlLkZMT0FUOD0iOGZsb2F0IixlLklOVDE2PSIxNmludCIsZS5VSU5UMTY9IjE2dWludCIsZS5GTE9BVDE2PSIxNmZsb2F0IixlLklOVDMyPSIzMmludCIsZS5VSU5UMzI9IjMydWludCIsZS5GTE9BVDMyPSIzMmZsb2F0IixlLklOVDY0PSI2NGludCIsZS5VSU5UNjQ9IjY0dWludCIsZS5GTE9BVDY0PSI2NGZsb2F0In0oZWF8fGUoIk1vZGJ1c0RhdGFUeXBlIixlYT17fSkpO2NvbnN0IHRhPWUoIk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzIixbZWEuQllURVMsZWEuQklUUyxlYS5TVFJJTkddKTt2YXIgbmEsYWE7ZSgiTW9kYnVzT2JqZWN0Q291bnRCeURhdGFUeXBlIixuYSksZnVuY3Rpb24oZSl7ZVtlWyI4aW50Il09MV09IjhpbnQiLGVbZVsiOHVpbnQiXT0xXT0iOHVpbnQiLGVbZVsiOGZsb2F0Il09MV09IjhmbG9hdCIsZVtlWyIxNmludCJdPTFdPSIxNmludCIsZVtlWyIxNnVpbnQiXT0xXT0iMTZ1aW50IixlW2VbIjE2ZmxvYXQiXT0xXT0iMTZmbG9hdCIsZVtlWyIzMmludCJdPTJdPSIzMmludCIsZVtlWyIzMnVpbnQiXT0yXT0iMzJ1aW50IixlW2VbIjMyZmxvYXQiXT0yXT0iMzJmbG9hdCIsZVtlWyI2NGludCJdPTRdPSI2NGludCIsZVtlWyI2NHVpbnQiXT00XT0iNjR1aW50IixlW2VbIjY0ZmxvYXQiXT00XT0iNjRmbG9hdCJ9KG5hfHxlKCJNb2RidXNPYmplY3RDb3VudEJ5RGF0YVR5cGUiLG5hPXt9KSksZSgiTW9kYnVzVmFsdWVLZXkiLGFhKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5BVFRSSUJVVEVTX1VQREFURVM9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuUlBDX1JFUVVFU1RTPSJycGMifShhYXx8ZSgiTW9kYnVzVmFsdWVLZXkiLGFhPXt9KSk7Y29uc3Qgb2E9ZSgiTW9kYnVzS2V5c1BhbmVsVGl0bGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5LmF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS50aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkucnBjLXJlcXVlc3RzIl1dKSksaWE9ZSgiTW9kYnVzS2V5c0FkZEtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmFkZC10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hZGQtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuYWRkLXJwYy1yZXF1ZXN0Il1dKSkscmE9ZSgiTW9kYnVzS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuZGVsZXRlLXJwYy1yZXF1ZXN0Il1dKSksc2E9ZSgiTW9kYnVzS2V5c05vS2V5c1RleHRUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS5uby10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5uby1hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkubm8tcnBjLXJlcXVlc3RzIl1dKSksbGE9ZSgiTW9kYnVzQmF1ZHJhdGVzIixbNDgwMCw5NjAwLDE5MjAwLDM4NDAwLDU3NjAwLDExNTIwMCwyMzA0MDAsNDYwODAwLDkyMTYwMF0pO2NsYXNzIGNhe2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsidHMiLCJzdGF0dXMiLCJtZXNzYWdlIl0sdGhpcy5nYXRld2F5TG9nTGlua3M9W3tuYW1lOiJHZW5lcmFsIixrZXk6IkxPR1MifSx7bmFtZToiU2VydmljZSIsa2V5OiJTRVJWSUNFX0xPR1MifSx7bmFtZToiQ29ubmVjdGlvbiIsa2V5OiJDT05ORUNUSU9OX0xPR1MifSx7bmFtZToiU3RvcmFnZSIsa2V5OiJTVE9SQUdFX0xPR1MifSx7a2V5OiJFWFRFTlNJT05TX0xPR1MiLG5hbWU6IkV4dGVuc2lvbiJ9XTtjb25zdCBlPXtwcm9wZXJ0eToidHMiLGRpcmVjdGlvbjp3LkRFU0N9O3RoaXMucGFnZUxpbms9bmV3IEMoMTAsMCxudWxsLGUpLHRoaXMuZGF0YVNvdXJjZT1uZXcgeShbXSl9bmdPbkluaXQoKXt0aGlzLnVwZGF0ZVdpZGdldFRpdGxlKCl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3I9dGhpcy5wYWdpbmF0b3IsdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vblRpbWV3aW5kb3dDaGFuZ2VGdW5jdGlvbj1lPT4odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vcHRpb25zLnRpbWVXaW5kb3dDb25maWc9ZSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksZSksdGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmxvZ0xpbmtzPVt7a2V5OmAke2Uua2V5fV9MT0dTYCxuYW1lOiJDb25uZWN0b3IiLGZpbHRlckZuOmU9PiFlLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX0se2tleTpgJHtlLmtleX1fTE9HU2AsbmFtZToiQ29udmVydGVyIixmaWx0ZXJGbjplPT5lLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX1dfWVsc2UgdGhpcy5sb2dMaW5rcz10aGlzLmdhdGV3YXlMb2dMaW5rczt0aGlzLmFjdGl2ZUxpbms9dGhpcy5sb2dMaW5rc1swXSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXVwZGF0ZVdpZGdldFRpdGxlKCl7aWYodGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LndpZGdldENvbmZpZy50aXRsZSx0PSIke2Nvbm5lY3Rvck5hbWV9IjtpZihlLmluY2x1ZGVzKHQpKXtjb25zdCBuPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmN0eC53aWRnZXRUaXRsZT1lLnJlcGxhY2UodCxuLmtleSl9fX11cGRhdGVEYXRhKCl7aWYodGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhLmxlbmd0aCYmdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhWzBdKXtsZXQgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGFbMF0uZGF0YS5tYXAoKGU9Pntjb25zdCB0PXt0czplWzBdLGtleTp0aGlzLmFjdGl2ZUxpbmsua2V5LG1lc3NhZ2U6ZVsxXSxzdGF0dXM6IklOVkFMSUQgTE9HIEZPUk1BVCJ9O3RyeXt0Lm1lc3NhZ2U9L1xbKC4qKS8uZXhlYyhlWzFdKVswXX1jYXRjaChuKXt0Lm1lc3NhZ2U9ZVsxXX10cnl7dC5zdGF0dXM9ZVsxXS5tYXRjaCgvXHwoXHcrKVx8LylbMV19Y2F0Y2goZSl7dC5zdGF0dXM9IklOVkFMSUQgTE9HIEZPUk1BVCJ9cmV0dXJuIHR9KSk7dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuJiYoZT1lLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuKGUpKSkpLHRoaXMuZGF0YVNvdXJjZS5kYXRhPWV9fW9uVGFiQ2hhbmdlZChlKXt0aGlzLmFjdGl2ZUxpbms9ZSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXN0YXR1c0NsYXNzKGUpe3N3aXRjaChlKXtjYXNlIHF0LkRFQlVHOnJldHVybiJzdGF0dXMgc3RhdHVzLWRlYnVnIjtjYXNlIHF0LldBUk5JTkc6cmV0dXJuInN0YXR1cyBzdGF0dXMtd2FybmluZyI7Y2FzZSBxdC5FUlJPUjpjYXNlIHF0LkVYQ0VQVElPTjpyZXR1cm4ic3RhdHVzIHN0YXR1cy1lcnJvciI7ZGVmYXVsdDpyZXR1cm4ic3RhdHVzIHN0YXR1cy1pbmZvIn19c3RhdHVzQ2xhc3NNc2coZSl7aWYoZT09PXF0LkVYQ0VQVElPTilyZXR1cm4ibXNnLXN0YXR1cy1leGNlcHRpb24ifXRyYWNrQnlMb2dUcyhlLHQpe3JldHVybiB0LnRzfWNoYW5nZVN1YnNjcmlwdGlvbigpe3RoaXMuY3R4LmRhdGFzb3VyY2VzJiZ0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlcyYmKHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlc1swXS5kYXRhS2V5cz1be25hbWU6dGhpcy5hY3RpdmVMaW5rLmtleSx0eXBlOlQudGltZXNlcmllcyxzZXR0aW5nczp7fX1dLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5jYWxsYmFja3Mub25EYXRhVXBkYXRlZD0oKT0+e3RoaXMudXBkYXRlRGF0YSgpfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjYSxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Y2Esc2VsZWN0b3I6InRiLWdhdGV3YXktbG9ncyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToic2VhcmNoSW5wdXRGaWVsZCIsZmlyc3Q6ITAscHJlZGljYXRlOlsic2VhcmNoSW5wdXQiXSxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic29ydCIsZmlyc3Q6ITAscHJlZGljYXRlOmcsZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InBhZ2luYXRvciIsZmlyc3Q6ITAscHJlZGljYXRlOmgsZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRUYWJsZSxzZWxlY3RvcjoibWF0LXRhYmxlLCB0YWJsZVttYXQtdGFibGVdIixleHBvcnRBczpbIm1hdFRhYmxlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsRGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyQ2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyUm93RGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyUm93RGVmXSIsaW5wdXRzOlsibWF0SGVhZGVyUm93RGVmIiwibWF0SGVhZGVyUm93RGVmU3RpY2t5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDb2x1bW5EZWYsc2VsZWN0b3I6IlttYXRDb2x1bW5EZWZdIixpbnB1dHM6WyJtYXRDb2x1bW5EZWYiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGxEZWYsc2VsZWN0b3I6IlttYXRDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRSb3dEZWYsc2VsZWN0b3I6IlttYXRSb3dEZWZdIixpbnB1dHM6WyJtYXRSb3dEZWZDb2x1bW5zIiwibWF0Um93RGVmV2hlbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbCxzZWxlY3RvcjoibWF0LWhlYWRlci1jZWxsLCB0aFttYXQtaGVhZGVyLWNlbGxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGwsc2VsZWN0b3I6Im1hdC1jZWxsLCB0ZFttYXQtY2VsbF0ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0SGVhZGVyUm93LHNlbGVjdG9yOiJtYXQtaGVhZGVyLXJvdywgdHJbbWF0LWhlYWRlci1yb3ddIixleHBvcnRBczpbIm1hdEhlYWRlclJvdyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0Um93LHNlbGVjdG9yOiJtYXQtcm93LCB0clttYXQtcm93XSIsZXhwb3J0QXM6WyJtYXRSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp4Lk1hdFBhZ2luYXRvcixzZWxlY3RvcjoibWF0LXBhZ2luYXRvciIsaW5wdXRzOlsiY29sb3IiLCJwYWdlSW5kZXgiLCJsZW5ndGgiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImhpZGVQYWdlU2l6ZSIsInNob3dGaXJzdExhc3RCdXR0b25zIiwic2VsZWN0Q29uZmlnIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsicGFnZSJdLGV4cG9ydEFzOlsibWF0UGFnaW5hdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp6Lk1hdERpdmlkZXIsc2VsZWN0b3I6Im1hdC1kaXZpZGVyIixpbnB1dHM6WyJ2ZXJ0aWNhbCIsImluc2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXYsc2VsZWN0b3I6IlttYXQtdGFiLW5hdi1iYXJdIixpbnB1dHM6WyJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJkaXNhYmxlUmlwcGxlIiwiY29sb3IiLCJ0YWJQYW5lbCJdLGV4cG9ydEFzOlsibWF0VGFiTmF2QmFyIiwibWF0VGFiTmF2Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXZQYW5lbCxzZWxlY3RvcjoibWF0LXRhYi1uYXYtcGFuZWwiLGlucHV0czpbImlkIl0sZXhwb3J0QXM6WyJtYXRUYWJOYXZQYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiTGluayxzZWxlY3RvcjoiW21hdC10YWItbGlua10sIFttYXRUYWJMaW5rXSIsaW5wdXRzOlsiYWN0aXZlIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJpZCJdLGV4cG9ydEFzOlsibWF0VGFiTGluayJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUxvZ3NDb21wb25lbnQiLGNhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmNhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWxvZ3MiLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2N0eDpbe3R5cGU6YX1dLGRpYWxvZ1JlZjpbe3R5cGU6YX1dLHNlYXJjaElucHV0RmllbGQ6W3t0eXBlOm8sYXJnczpbInNlYXJjaElucHV0Il19XSxzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0scGFnaW5hdG9yOlt7dHlwZTpvLGFyZ3M6W2hdfV19fSk7Y2xhc3MgcGF7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLnV0aWxzPW4sdGhpcy5pc051bWVyaWNEYXRhPSExLHRoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3RhdGlzdGljc0tleXM9W10sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnM9e2NhbGxiYWNrczp7b25EYXRhVXBkYXRlZDooKT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfSx1c2VEYXNoYm9hcmRUaW1ld2luZG93OiExLGxlZ2VuZENvbmZpZzp7cG9zaXRpb246Uy5ib3R0b219fSx0aGlzLmluaXQ9KCk9Pnt0aGlzLmZsb3RDdHg9eyRzY29wZTp0aGlzLmN0eC4kc2NvcGUsJGluamVjdG9yOnRoaXMuY3R4LiRpbmplY3Rvcix1dGlsczp0aGlzLmN0eC51dGlscyxpc01vYmlsZTp0aGlzLmN0eC5pc01vYmlsZSxpc0VkaXQ6dGhpcy5jdHguaXNFZGl0LHN1YnNjcmlwdGlvbkFwaTp0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGksZGV0ZWN0Q2hhbmdlczp0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzLHNldHRpbmdzOnRoaXMuY3R4LnNldHRpbmdzfX0sdGhpcy51cGRhdGVDaGFydD0oKT0+e30sdGhpcy5yZXNpemU9KCk9Pnt9O2NvbnN0IGE9e3Byb3BlcnR5OiIwIixkaXJlY3Rpb246dy5ERVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwwLG51bGwsYSksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiMCIsIjEiXSx0aGlzLmRhdGFTb3VyY2U9bmV3IHkoW10pLHRoaXMuc3RhdGlzdGljRm9ybT10aGlzLmZiLmdyb3VwKHtzdGF0aXN0aWNLZXk6W251bGwsW11dfSksdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e3RoaXMuY29tbWFuZE9iaj1udWxsLHRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5jb21tYW5kT2JqPXRoaXMuY29tbWFuZHMuZmluZCgodD0+dC5hdHRyaWJ1dGVPbkdhdGV3YXk9PT1lKSkpLHRoaXMuc3Vic2NyaXB0aW9uSW5mbyYmdGhpcy5jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhc291cmNlc1swXS5lbnRpdHksZSl9KSl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKCk9PnRoaXMuc29ydERhdGEoKSkpLHRoaXMuaW5pdCgpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXMubGVuZ3RoKXtjb25zdCBlPXRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZW50aXR5O2lmKGUuaWQuaWQ9PT1rKXJldHVybjt0aGlzLmdlbmVyYWw/dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eVRpbWVzZXJpZXNMYXRlc3QoZS5pZCkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGU9PmUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1Byb2R1Y2VkIil8fGUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1NlbnQiKSkpO3RoaXMuY3JlYXRlR2VuZXJhbENoYXJ0c1N1YnNjcmlwdGlvbihlLG4pfSkpOnRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKGUuaWQsTC5TSEFSRURfU0NPUEUsWyJnZW5lcmFsX2NvbmZpZ3VyYXRpb24iXSkuc3Vic2NyaWJlKCh0PT57dCYmdC5sZW5ndGgmJih0aGlzLmNvbW1hbmRzPXRbMF0udmFsdWUuc3RhdGlzdGljcy5jb21tYW5kcywhdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWUmJnRoaXMuY29tbWFuZHMmJnRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5Iikuc2V0VmFsdWUodGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpLHRoaXMuY3JlYXRlQ2hhcnRzU3Vic2NyaXB0aW9uKGUsdGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpKSl9KSl9fW5hdmlnYXRlVG9TdGF0aXN0aWNzKCl7Y29uc3QgZT1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTt0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIub3BlblN0YXRlKCJjb25maWd1cmF0aW9uIixlKX1zb3J0RGF0YSgpe3RoaXMuZGF0YVNvdXJjZS5zb3J0RGF0YSh0aGlzLmRhdGFTb3VyY2UuZGF0YSx0aGlzLnNvcnQpfW9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGUpe3RoaXMubGVnZW5kRGF0YS5rZXlzW2VdLmRhdGFLZXkuaGlkZGVuPSF0aGlzLmxlZ2VuZERhdGEua2V5c1tlXS5kYXRhS2V5LmhpZGRlbix0aGlzLnN1YnNjcmlwdGlvbi51cGRhdGVEYXRhVmlzaWJpbGl0eShlKX1jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1be25hbWU6dCxsYWJlbDp0fV0sdGhpcy5zdWJzY3JpcHRpb25JbmZvPW4sdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWNyZWF0ZUdlbmVyYWxDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1bXSx0Py5sZW5ndGgmJnQuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUsbGFiZWw6ZX0pfSkpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZGF0YUtleXMuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUubmFtZSxsYWJlbDplLmxhYmVsfSl9KSksdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0KCl7dGhpcy5yZXNpemUkJiZ0aGlzLnJlc2l6ZSQuZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uRGF0YVVwZGF0ZUVycm9yKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5wYXJzZUV4Y2VwdGlvbihlKTtsZXQgbj10Lm5hbWU7dC5tZXNzYWdlJiYobis9IjogIit0Lm1lc3NhZ2UpLGNvbnNvbGUuZXJyb3Iobil9b25EYXRhVXBkYXRlZCgpe3RoaXMuaXNEYXRhT25seU51bWJlcnMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJih0aGlzLmNoYXJ0SW5pdGVkfHx0aGlzLmluaXRDaGFydCgpKX1pbml0Q2hhcnQoKXt0aGlzLmNoYXJ0SW5pdGVkPSEwLHRoaXMuZmxvdEN0eC4kY29udGFpbmVyPSQodGhpcy5zdGF0aXN0aWNDaGFydC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc2l6ZSQub2JzZXJ2ZSh0aGlzLnN0YXRpc3RpY0NoYXJ0Lm5hdGl2ZUVsZW1lbnQpfWlzRGF0YU9ubHlOdW1iZXJzKCl7dGhpcy5nZW5lcmFsP3RoaXMuaXNOdW1lcmljRGF0YT0hMDoodGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5zdWJzY3JpcHRpb24uZGF0YS5sZW5ndGg/dGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhOltdLHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCYmIXRoaXMuZGF0YVR5cGVEZWZpbmVkJiYodGhpcy5kYXRhVHlwZURlZmluZWQ9ITAsdGhpcy5pc051bWVyaWNEYXRhPXRoaXMuZGF0YVNvdXJjZS5kYXRhLmV2ZXJ5KChlPT4haXNOYU4oK2VbMV0pKSkpKX1jaGFuZ2VTdWJzY3JpcHRpb24oZSl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMucmVzZXQoKSx0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LnN1YnNjcmlwdGlvbkFwaS5jcmVhdGVTdWJzY3JpcHRpb25Gcm9tSW5mbyhBLnRpbWVzZXJpZXMsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3Vic2NyaXB0aW9uPWUsdGhpcy5pc0RhdGFPbmx5TnVtYmVycygpLHRoaXMubGVnZW5kRGF0YT10aGlzLnN1YnNjcmlwdGlvbi5sZWdlbmREYXRhLHRoaXMuZmxvdEN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uPWUsdGhpcy5yZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuY3R4LmRldGVjdENoYW5nZXMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJnRoaXMuaW5pdENoYXJ0KCl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpYLlV0aWxzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cGEsc2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsaW5wdXRzOntjdHg6ImN0eCIsZ2VuZXJhbDoiZ2VuZXJhbCJ9LHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzb3J0IixmaXJzdDohMCxwcmVkaWNhdGU6ZyxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic3RhdGlzdGljQ2hhcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInN0YXRpc3RpY0NoYXJ0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0Lmx0LW1kPSJjb2x1bW4iPlxuICA8bWF0LWNhcmQgW2Zvcm1Hcm91cF09InN0YXRpc3RpY0Zvcm0iICpuZ0lmPSIhZ2VuZXJhbCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0YXRpc3RpY0tleSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGtleSBvZiBzdGF0aXN0aWNzS2V5cyIgW3ZhbHVlXT0ia2V5Ij5cbiAgICAgICAgICB7eyBrZXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb21tYW5kIG9mIGNvbW1hbmRzIiBbdmFsdWVdPSJjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSI+XG4gICAgICAgICAge3sgY29tbWFuZC5hdHRyaWJ1dGVPbkdhdGV3YXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1lcnJvclxuICAgICAgKm5nSWY9IiFzdGF0aXN0aWNzS2V5cy5sZW5ndGggJiYgIWNvbW1hbmRzLmxlbmd0aCI+XG4gICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWMtY29tbWFuZHMtZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0ibmF2aWdhdGVUb1N0YXRpc3RpY3MoKSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3MtYnV0dG9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIiAqbmdJZj0iY29tbWFuZE9iaiI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IFt2YWx1ZV09ImNvbW1hbmRPYmouY29tbWFuZCIgZGlzYWJsZWQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9tYXQtY2FyZD5cbiAgPGRpdiBjbGFzcz0iY2hhcnQtYm94IiBmeExheW91dD0iY29sdW1uIj5cbiAgICA8ZGl2IGNsYXNzPSJjaGFydC1jb250YWluZXIiICNzdGF0aXN0aWNDaGFydCBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+PC9kaXY+XG4gICAgPHRhYmxlIFtmeFNob3ddPSIhaXNOdW1lcmljRGF0YSIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgICAgIG1hdFNvcnREaXNhYmxlQ2xlYXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMCI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7IFwnd2lkZ2V0cy5nYXRld2F5LmNyZWF0ZWQtdGltZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCByb3c7IGxldCByb3dJbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICB7eyByb3dbMF18IGRhdGU6XCd5eXl5LU1NLWRkIEhIOm1tOnNzXCcgfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9IjEiPlxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdyI+XG4gICAgICAgICAge3sgcm93WzFdIH19XG4gICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj0iZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IlxuICAgICAgICAgICAgICAgKm1hdFJvd0RlZj0ibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uczsiPjwvbWF0LXJvdz5cbiAgICA8L3RhYmxlPlxuICAgIDxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwICYmICFpc051bWVyaWNEYXRhIlxuICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7IFwnYXR0cmlidXRlLm5vLXRlbGVtZXRyeS10ZXh0XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGRpdiBmeEZsZXggY2xhc3M9ImxlZ2VuZCIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgW2Z4U2hvd109ImlzTnVtZXJpY0RhdGEiPlxuICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWtleXMiICpuZ0Zvcj0ibGV0IGxlZ2VuZEtleSBvZiBsZWdlbmREYXRhPy5rZXlzIiBmeExheW91dD0icm93IlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZ2VuZC1saW5lIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09ImxlZ2VuZEtleS5kYXRhS2V5LmNvbG9yIj48L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1sYWJlbCJcbiAgICAgICAgICAgICAoY2xpY2spPSJvbkxlZ2VuZEtleUhpZGRlbkNoYW5nZShsZWdlbmRLZXkuZGF0YUluZGV4KSJcbiAgICAgICAgICAgICBbY2xhc3NdPSJ7IFwnaGlkZGVuLWxhYmVsXCc6IGxlZ2VuZERhdGEua2V5c1tsZWdlbmRLZXkuZGF0YUluZGV4XS5kYXRhS2V5LmhpZGRlbiB9IlxuICAgICAgICAgICAgIFtpbm5lckhUTUxdPSJsZWdlbmRLZXkuZGF0YUtleS5sYWJlbCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BhZGRpbmc6MH06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXJ7aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDo0MCU7aGVpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OjM1cHg7cGFkZGluZzoxNXB4O2dhcDoyMnB4fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzUwcHgpezpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDoxMDAlfX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveCw6aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtmbGV4LWdyb3c6MX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveHtvdmVyZmxvdzphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcj4qe2hlaWdodDoxMDAlfTpob3N0IC5sZWdlbmR7ZmxleC13cmFwOndyYXA7d2lkdGg6MTAwJTtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206NHB4O21hcmdpbi10b3A6MTVweH06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVse3BhZGRpbmc6MnB4IDIwcHggMnB4IDEwcHg7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWwuaGlkZGVuLWxhYmVse3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7b3BhY2l0eTouNn06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTVweDtoZWlnaHQ6M3B4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7b3V0bGluZTpub25lfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmhlLk1hdENhcmQsc2VsZWN0b3I6Im1hdC1jYXJkIixpbnB1dHM6WyJhcHBlYXJhbmNlIl0sZXhwb3J0QXM6WyJtYXRDYXJkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5EYXRlUGlwZSxuYW1lOiJkYXRlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U3RhdGlzdGljc0NvbXBvbmVudCIscGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtbWQ9ImNvbHVtbiI+XG4gIDxtYXQtY2FyZCBbZm9ybUdyb3VwXT0ic3RhdGlzdGljRm9ybSIgKm5nSWY9IiFnZW5lcmFsIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3RhdGlzdGljS2V5Ij5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQga2V5IG9mIHN0YXRpc3RpY3NLZXlzIiBbdmFsdWVdPSJrZXkiPlxuICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgY29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQuYXR0cmlidXRlT25HYXRld2F5Ij5cbiAgICAgICAgICB7eyBjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iIXN0YXRpc3RpY3NLZXlzLmxlbmd0aCAmJiAhY29tbWFuZHMubGVuZ3RoIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpYy1jb21tYW5kcy1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPGRpdj5cbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJuYXZpZ2F0ZVRvU3RhdGlzdGljcygpIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljcy1idXR0b25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siICpuZ0lmPSJjb21tYW5kT2JqIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW3ZhbHVlXT0iY29tbWFuZE9iai5jb21tYW5kIiBkaXNhYmxlZD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L21hdC1jYXJkPlxuICA8ZGl2IGNsYXNzPSJjaGFydC1ib3giIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgI3N0YXRpc3RpY0NoYXJ0IFtmeFNob3ddPSJpc051bWVyaWNEYXRhIj48L2Rpdj5cbiAgICA8dGFibGUgW2Z4U2hvd109IiFpc051bWVyaWNEYXRhIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIlxuICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSIwIj5cbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdzsgbGV0IHJvd0luZGV4ID0gaW5kZXgiPlxuICAgICAgICAgIHt7IHJvd1swXXwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMSI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiA3MCUiPnt7IFwnd2lkZ2V0cy5nYXRld2F5Lm1lc3NhZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgcm93Ij5cbiAgICAgICAgICB7eyByb3dbMV0gfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG1hdC1oZWFkZXItcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCJcbiAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICA8bWF0LXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgIDwvdGFibGU+XG4gICAgPHNwYW4gW2Z4U2hvd109ImRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDAgJiYgIWlzTnVtZXJpY0RhdGEiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8ZGl2IGZ4RmxleCBjbGFzcz0ibGVnZW5kIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIiBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+XG4gICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQta2V5cyIgKm5nRm9yPSJsZXQgbGVnZW5kS2V5IG9mIGxlZ2VuZERhdGE/LmtleXMiIGZ4TGF5b3V0PSJyb3ciXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiPlxuICAgICAgICA8c3BhbiBjbGFzcz0ibGVnZW5kLWxpbmUiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ibGVnZW5kS2V5LmRhdGFLZXkuY29sb3IiPjwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWxhYmVsIlxuICAgICAgICAgICAgIChjbGljayk9Im9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGxlZ2VuZEtleS5kYXRhSW5kZXgpIlxuICAgICAgICAgICAgIFtjbGFzc109InsgXCdoaWRkZW4tbGFiZWxcJzogbGVnZW5kRGF0YS5rZXlzW2xlZ2VuZEtleS5kYXRhSW5kZXhdLmRhdGFLZXkuaGlkZGVuIH0iXG4gICAgICAgICAgICAgW2lubmVySFRNTF09ImxlZ2VuZEtleS5kYXRhS2V5LmxhYmVsIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzowfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtvdmVyZmxvdy15OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjQwJTtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6MzVweDtwYWRkaW5nOjE1cHg7Z2FwOjIycHh9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NTBweCl7Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjEwMCV9fTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94LDpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtY29udGFpbmVye2hlaWdodDoxMDAlO2ZsZXgtZ3JvdzoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94e292ZXJmbG93OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyPip7aGVpZ2h0OjEwMCV9Omhvc3QgLmxlZ2VuZHtmbGV4LXdyYXA6d3JhcDt3aWR0aDoxMDAlO3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo0cHg7bWFyZ2luLXRvcDoxNXB4fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWx7cGFkZGluZzoycHggMjBweCAycHggMTBweDt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLmxlZ2VuZCAubGVnZW5kLWtleXMgLmxlZ2VuZC1sYWJlbC5oaWRkZW4tbGFiZWx7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtvcGFjaXR5Oi42fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGluZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNXB4O2hlaWdodDozcHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtvdXRsaW5lOm5vbmV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpYLlV0aWxzU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0sc3RhdGlzdGljQ2hhcnQ6W3t0eXBlOm8sYXJnczpbInN0YXRpc3RpY0NoYXJ0Il19XSxjdHg6W3t0eXBlOmF9XSxnZW5lcmFsOlt7dHlwZTphfV19fSk7Y2xhc3MgbWF7c3RhdGlje3RoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1zdGF0aWN7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdPbGRGaWVsZHM9WyJhdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uIiwiZXh0ZW5zaW9uLWNvbmZpZyJdfXN0YXRpY3t0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ05ld0ZpZWxkcz1bImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIiwicmVzcG9uc2VUb3BpY1FvUyIsImV4dGVuc2lvbkNvbmZpZyJdfXN0YXRpYyBtYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGU/Lm1hcCgoKHtjb252ZXJ0ZXI6ZSx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpuPTF9KT0+e2NvbnN0IGE9ZS5kZXZpY2VJbmZvPz90aGlzLmV4dHJhY3RDb252ZXJ0ZXJEZXZpY2VJbmZvKGUpLG89ey4uLmUsZGV2aWNlSW5mbzphLGV4dGVuc2lvbkNvbmZpZzplLmV4dGVuc2lvbkNvbmZpZ3x8ZVsiZXh0ZW5zaW9uLWNvbmZpZyJdfHxudWxsfTtyZXR1cm4gdGhpcy5jbGVhblVwT2xkRmllbGRzKG8pLHtjb252ZXJ0ZXI6byx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpufX0pKX1zdGF0aWMgbWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbihlKXtyZXR1cm4gdGhpcy5tcXR0UmVxdWVzdFR5cGVLZXlzLnJlZHVjZSgoKHQsbik9PmVbbl0/KHRbbl09ZVtuXS5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwUmVxdWVzdFRvVXBncmFkZWRWZXJzaW9uKGUsbik7cmV0dXJuIHRoaXMuY2xlYW5VcE9sZEZpZWxkcyh0KSx0fSkpLHQpOnQpLHt9KX1zdGF0aWMgbWFwUmVxdWVzdHNUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMucmVkdWNlKCgodCxuKT0+ZVtuXT8odFtuXT1lW25dLm1hcCgoZT0+e249PT1Jbi5TRVJWRVJfU0lERV9SUEMmJmRlbGV0ZSBlLnR5cGU7Y29uc3R7YXR0cmlidXRlTmFtZUV4cHJlc3Npb246dCxkZXZpY2VJbmZvOmEsLi4ub309ZSxpPXsuLi5vLGF0dHJpYnV0ZU5hbWVKc29uRXhwcmVzc2lvbjp0fHxudWxsLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZSE9PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGx9O3JldHVybiB0aGlzLmNsZWFuVXBOZXdGaWVsZHMoaSksaX0pKSx0KTp0KSx7fSl9c3RhdGljIG1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlPy5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwQ29udmVydGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLmNvbnZlcnRlcik7cmV0dXJuIHRoaXMuY2xlYW5VcE5ld0ZpZWxkcyh0KSx7Y29udmVydGVyOnQsdG9waWNGaWx0ZXI6ZS50b3BpY0ZpbHRlcn19KSl9c3RhdGljIG1hcENvbnZlcnRlclRvRG93bmdyYWRlZFZlcnNpb24oZSl7Y29uc3R7ZGV2aWNlSW5mbzp0LC4uLm59PWU7cmV0dXJuIGUudHlwZSE9PXduLkJZVEVTP3suLi5uLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjp0Py5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLk1TRz90LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZUpzb25FeHByZXNzaW9uOnQ/LmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlPT09VG4uTVNHP3QuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246bnVsbCxkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uOnQ/LmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIT09VG4uTVNHP3Q/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbjp0Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSE9PVRuLk1TRz90Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbjpudWxsfTp7Li4ubixkZXZpY2VOYW1lRXhwcmVzc2lvbjp0LmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVFeHByZXNzaW9uOnQuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb24sImV4dGVuc2lvbi1jb25maWciOmUuZXh0ZW5zaW9uQ29uZmlnfX1zdGF0aWMgY2xlYW5VcE9sZEZpZWxkcyhlKXt0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ09sZEZpZWxkcy5mb3JFYWNoKCh0PT5kZWxldGUgZVt0XSkpLFooZSl9c3RhdGljIGNsZWFuVXBOZXdGaWVsZHMoZSl7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdOZXdGaWVsZHMuZm9yRWFjaCgodD0+ZGVsZXRlIGVbdF0pKSxaKGUpfXN0YXRpYyBnZXRUeXBlU291cmNlQnlWYWx1ZShlKXtyZXR1cm4gZS5pbmNsdWRlcygiJHsiKT9Ubi5NU0c6ZS5pbmNsdWRlcygiLyIpP1RuLlRPUElDOlRuLkNPTlNUfXN0YXRpYyBleHRyYWN0Q29udmVydGVyRGV2aWNlSW5mbyhlKXtjb25zdCB0PWUuZGV2aWNlTmFtZUV4cHJlc3Npb258fGUuZGV2aWNlTmFtZUpzb25FeHByZXNzaW9ufHxlLmRldmljZU5hbWVUb3BpY0V4cHJlc3Npb258fG51bGwsbj1lLmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6dD90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKHQpOm51bGwsYT1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9ufHxlLmRldmljZVR5cGVUb3BpY0V4cHJlc3Npb258fGUuZGV2aWNlVHlwZUpzb25FeHByZXNzaW9ufHwiZGVmYXVsdCIsbz1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6YT90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKGEpOm51bGw7cmV0dXJuIHR8fGE/e2RldmljZU5hbWVFeHByZXNzaW9uOnQsZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6bixkZXZpY2VQcm9maWxlRXhwcmVzc2lvbjphLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOm99Om51bGx9c3RhdGljIG1hcFJlcXVlc3RUb1VwZ3JhZGVkVmVyc2lvbihlLHQpe2NvbnN0IG49ZS5kZXZpY2VOYW1lSnNvbkV4cHJlc3Npb258fGUuZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbnx8bnVsbCxhPWUuZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbnx8ZS5kZXZpY2VUeXBlSnNvbkV4cHJlc3Npb258fCJkZWZhdWx0IixvPWE/dGhpcy5nZXRUeXBlU291cmNlQnlWYWx1ZShhKTpudWxsLGk9ZS5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZXx8ZS5hdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb258fG51bGwscj10PT09SW4uU0VSVkVSX1NJREVfUlBDPzE6bnVsbCxzPXQ9PT1Jbi5TRVJWRVJfU0lERV9SUEM/ZS5yZXNwb25zZVRvcGljRXhwcmVzc2lvbj9Gbi5XaXRoUmVzcG9uc2U6Rm4uV2l0aG91dFJlc3BvbnNlOm51bGw7cmV0dXJuey4uLmUsYXR0cmlidXRlTmFtZUV4cHJlc3Npb246aSxhdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZTppP3RoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoaSk6bnVsbCxkZXZpY2VJbmZvOmUuZGV2aWNlSW5mbz9lLmRldmljZUluZm86bj97ZGV2aWNlTmFtZUV4cHJlc3Npb246bixkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZTp0aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKG4pLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOmEsZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6b306bnVsbCxyZXNwb25zZVRvcGljUW9TOnIsdHlwZTpzfX19ZSgiTXF0dFZlcnNpb25NYXBwaW5nVXRpbCIsbWEpO2NsYXNzIGRhe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dCx0aGlzLmdhdGV3YXlWZXJzaW9uPWJhLnBhcnNlVmVyc2lvbih0aGlzLmdhdGV3YXlWZXJzaW9uSW4pLHRoaXMuY29uZmlnVmVyc2lvbj1iYS5wYXJzZVZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlnVmVyc2lvbil9Z2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBkYXRlTmVlZGVkKCk/dGhpcy5wcm9jZXNzVmVyc2lvblVwZGF0ZSgpOnRoaXMuY29ubmVjdG9yfXByb2Nlc3NWZXJzaW9uVXBkYXRlKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBncmFkZU5lZWRlZCgpP3RoaXMuZ2V0VXBncmFkZWRWZXJzaW9uKCk6dGhpcy5pc1ZlcnNpb25Eb3duZ3JhZGVOZWVkZWQoKT90aGlzLmdldERvd25ncmFkZWRWZXJzaW9uKCk6dGhpcy5jb25uZWN0b3J9aXNWZXJzaW9uVXBkYXRlTmVlZGVkKCl7cmV0dXJuISF0aGlzLmdhdGV3YXlWZXJzaW9uJiZ0aGlzLmNvbmZpZ1ZlcnNpb24hPT10aGlzLmdhdGV3YXlWZXJzaW9ufWlzVmVyc2lvblVwZ3JhZGVOZWVkZWQoKXtyZXR1cm4gdGhpcy5nYXRld2F5VmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiYoIXRoaXMuY29uZmlnVmVyc2lvbnx8dGhpcy5jb25maWdWZXJzaW9uPHRoaXMuZ2F0ZXdheVZlcnNpb24pfWlzVmVyc2lvbkRvd25ncmFkZU5lZWRlZCgpe3JldHVybiB0aGlzLmNvbmZpZ1ZlcnNpb24mJnRoaXMuY29uZmlnVmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiZ0aGlzLmNvbmZpZ1ZlcnNpb24+dGhpcy5nYXRld2F5VmVyc2lvbn19ZSgiR2F0ZXdheUNvbm5lY3RvclZlcnNpb25Qcm9jZXNzb3IiLGRhKTtjbGFzcyB1YSBleHRlbmRzIGRhe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLmdhdGV3YXlWZXJzaW9uSW49ZSx0aGlzLmNvbm5lY3Rvcj10LHRoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdHtjb25uZWN0UmVxdWVzdHM6ZSxkaXNjb25uZWN0UmVxdWVzdHM6dCxhdHRyaWJ1dGVSZXF1ZXN0czpuLGF0dHJpYnV0ZVVwZGF0ZXM6YSxzZXJ2ZXJTaWRlUnBjOm99PXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO2xldCBpPXsuLi50aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbixyZXF1ZXN0c01hcHBpbmc6bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmUsZGlzY29ubmVjdFJlcXVlc3RzOnQsYXR0cmlidXRlUmVxdWVzdHM6bixhdHRyaWJ1dGVVcGRhdGVzOmEsc2VydmVyU2lkZVJwYzpvfSksbWFwcGluZzptYS5tYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24ubWFwcGluZyl9O3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMuZm9yRWFjaCgoZT0+e2NvbnN0e1tlXTp0LC4uLm59PWk7aT17Li4ubn19KSksdGhpcy5jbGVhblVwQ29uZmlnSnNvbihpKSx7Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246aSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19Z2V0RG93bmdyYWRlZFZlcnNpb24oKXtjb25zdHtyZXF1ZXN0c01hcHBpbmc6ZSxtYXBwaW5nOnQsLi4ubn09dGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24sYT1lP21hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihlKTp7fSxvPW1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7Li4ubiwuLi5hLG1hcHBpbmc6b30sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWNsZWFuVXBDb25maWdKc29uKGUpe2VlKGUucmVxdWVzdHNNYXBwaW5nLHt9KSYmZGVsZXRlIGUucmVxdWVzdHNNYXBwaW5nLGVlKGUubWFwcGluZyxbXSkmJmRlbGV0ZSBlLm1hcHBpbmd9fWUoIk1xdHRWZXJzaW9uUHJvY2Vzc29yIix1YSk7Y2xhc3MgZ2EgZXh0ZW5kcyBkYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dH1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdCBlPXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7bWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZS5tYXN0ZXIpOntzbGF2ZXM6W119LHNsYXZlOmUuc2xhdmU/aGEubWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlLnNsYXZlKTp7fX0sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWdldERvd25ncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbjtyZXR1cm57Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246ey4uLmUsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e30sbWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLm1hc3Rlcik6e3NsYXZlczpbXX19LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX19ZSgiTW9kYnVzVmVyc2lvblByb2Nlc3NvciIsZ2EpO2NsYXNzIGZhIGV4dGVuZHMgZGF7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMuZ2F0ZXdheVZlcnNpb25Jbj1lLHRoaXMuY29ubmVjdG9yPXR9Z2V0VXBncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbi5zZXJ2ZXI7cmV0dXJuey4uLnRoaXMuY29ubmVjdG9yLGNvbmZpZ3VyYXRpb25Kc29uOntzZXJ2ZXI6ZT94YS5tYXBTZXJ2ZXJUb1VwZ3JhZGVkVmVyc2lvbihlKTp7fSxtYXBwaW5nOmU/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUubWFwcGluZyk6W119LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX1nZXREb3duZ3JhZGVkVmVyc2lvbigpe3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24pfSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19fWUoIk9wY1ZlcnNpb25Qcm9jZXNzb3IiLGZhKTtjbGFzcyB5YXtjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9bmV3IGksdGhpcy5mYj1yKGRlKSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmJhc2ljRm9ybUdyb3VwPXRoaXMuaW5pdEJhc2ljRm9ybUdyb3VwKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLm9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVkLmVtaXQoKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnNldFZhbHVlKHRoaXMubWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSkse2VtaXRFdmVudDohMX0pfW9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZSh0aGlzLmdldE1hcHBlZFZhbHVlKGUpKSx0aGlzLm9uVG91Y2hlZCgpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eWEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnlhLGlucHV0czp7Z2VuZXJhbFRhYkNvbnRlbnQ6ImdlbmVyYWxUYWJDb250ZW50In0sb3V0cHV0czp7aW5pdGlhbGl6ZWQ6ImluaXRpYWxpemVkIn0sbmdJbXBvcnQ6dH0pfX1lKCJHYXRld2F5Q29ubmVjdG9yQmFzaWNDb25maWdEaXJlY3RpdmUiLHlhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnlhLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2dlbmVyYWxUYWJDb250ZW50Olt7dHlwZTphfV0saW5pdGlhbGl6ZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBiYXtzdGF0aWMgZ2V0Q29uZmlnKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSBfdC5NUVRUOnJldHVybiBuZXcgdWEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk9QQ1VBOnJldHVybiBuZXcgZmEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk1PREJVUzpyZXR1cm4gbmV3IGdhKHQsZSkuZ2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCk7ZGVmYXVsdDpyZXR1cm4gZX19c3RhdGljIHBhcnNlVmVyc2lvbihlKXtyZXR1cm4gdGUoZSk/ZTpuZShlKT9wYXJzZUZsb2F0KGUucmVwbGFjZSgvXC4vZywiIikuc2xpY2UoMCwzKSkvMTAwOjB9fWUoIkdhdGV3YXlDb25uZWN0b3JWZXJzaW9uTWFwcGluZ1V0aWwiLGJhKTtjbGFzcyBoYXtzdGF0aWMgbWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJue3NsYXZlczplLnNsYXZlcy5tYXAoKGU9Pntjb25zdHtzZW5kRGF0YU9ubHlPbkNoYW5nZTp0LC4uLm59PWU7cmV0dXJuey4uLm4sZGV2aWNlVHlwZTplLmRldmljZVR5cGU/PyJkZWZhdWx0IixyZXBvcnRTdHJhdGVneTp0P3t0eXBlOnNuLk9uQ2hhbmdlfTp7dHlwZTpzbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6ZS5wb2xsUGVyaW9kfX19KSl9fXN0YXRpYyBtYXBNYXN0ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybntzbGF2ZXM6ZS5zbGF2ZXMubWFwKChlPT57Y29uc3R7cmVwb3J0U3RyYXRlZ3k6dCwuLi5ufT1lO3JldHVybnsuLi5uLHNlbmREYXRhT25seU9uQ2hhbmdlOnQ/LnR5cGUhPT1zbi5PblJlcG9ydFBlcmlvZH19KSl9fXN0YXRpYyBtYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZSl7aWYoIWU/LnZhbHVlcylyZXR1cm4gZTtjb25zdCB0PU9iamVjdC5rZXlzKGUudmFsdWVzKS5yZWR1Y2UoKCh0LG4pPT50PXsuLi50LFtuXTpbZS52YWx1ZXNbbl1dfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlKXtpZighZT8udmFsdWVzKXJldHVybiBlO2NvbnN0IHQ9T2JqZWN0LmtleXMoZS52YWx1ZXMpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOnRoaXMubWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZS52YWx1ZXNbbl1bMF0pfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOmVbbl0ubWFwKChlPT4oey4uLmUsdHlwZToiaW50Ij09PWUudHlwZT9lYS5JTlQxNjplLnR5cGV9KSkpfSkse30pfX1lKCJNb2RidXNWZXJzaW9uTWFwcGluZ1V0aWwiLGhhKTtjbGFzcyB4YXtzdGF0aWMgbWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZSl7Y29uc3R7bWFwcGluZzp0LGRpc2FibGVTdWJzY3JpcHRpb25zOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsLi4ub309ZTtyZXR1cm57Li4ubyxwb2xsUGVyaW9kSW5NaWxsaXM6YT8/NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6IW59fXN0YXRpYyBtYXBTZXJ2ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe2NvbnN0e21hcHBpbmc6dCxzZXJ2ZXI6bn09ZSx7ZW5hYmxlU3Vic2NyaXB0aW9uczphLC4uLm99PW4/P3t9O3JldHVybnsuLi5vLG1hcHBpbmc6dD90aGlzLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpOltdLGRpc2FibGVTdWJzY3JpcHRpb25zOiFhfX1zdGF0aWMgbWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlLm1hcCgoZT0+KHsuLi5lLGRldmljZU5vZGVTb3VyY2U6dGhpcy5nZXREZXZpY2VOb2RlU291cmNlQnlWYWx1ZShlLmRldmljZU5vZGVQYXR0ZXJuKSxkZXZpY2VJbmZvOntkZXZpY2VOYW1lRXhwcmVzc2lvbjplLmRldmljZU5hbWVQYXR0ZXJuLGRldmljZU5hbWVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VOYW1lUGF0dGVybiksZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246ZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiKX0sYXR0cmlidXRlczplLmF0dHJpYnV0ZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLGF0dHJpYnV0ZXNfdXBkYXRlczplLmF0dHJpYnV0ZXNfdXBkYXRlcy5tYXAoKGU9Pih7a2V5OmUuYXR0cmlidXRlT25UaGluZ3NCb2FyZCx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5hdHRyaWJ1dGVPbkRldmljZSksdmFsdWU6ZS5hdHRyaWJ1dGVPbkRldmljZX0pKSksdGltZXNlcmllczplLnRpbWVzZXJpZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLHJwY19tZXRob2RzOmUucnBjX21ldGhvZHMubWFwKChlPT4oe21ldGhvZDplLm1ldGhvZCxhcmd1bWVudHM6ZS5hcmd1bWVudHMubWFwKChlPT4oe3ZhbHVlOmUsdHlwZTp0aGlzLmdldEFyZ3VtZW50VHlwZShlKX0pKSl9KSkpfSkpKX1zdGF0aWMgbWFwTWFwcGluZ1RvRG93bmdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGUubWFwKChlPT4oey4uLmUsZGV2aWNlTmFtZVBhdHRlcm46ZS5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVQYXR0ZXJuOmUuZGV2aWNlSW5mby5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbixhdHRyaWJ1dGVzOmUuYXR0cmlidXRlcy5tYXAoKGU9Pih7a2V5OmUua2V5LHBhdGg6ZS52YWx1ZX0pKSksYXR0cmlidXRlc191cGRhdGVzOmUuYXR0cmlidXRlc191cGRhdGVzLm1hcCgoZT0+KHthdHRyaWJ1dGVPblRoaW5nc0JvYXJkOmUua2V5LGF0dHJpYnV0ZU9uRGV2aWNlOmUudmFsdWV9KSkpLHRpbWVzZXJpZXM6ZS50aW1lc2VyaWVzLm1hcCgoZT0+KHtrZXk6ZS5rZXkscGF0aDplLnZhbHVlfSkpKSxycGNfbWV0aG9kczplLnJwY19tZXRob2RzLm1hcCgoZT0+KHttZXRob2Q6ZS5tZXRob2QsYXJndW1lbnRzOmUuYXJndW1lbnRzLm1hcCgoZT0+ZS52YWx1ZSkpfSkpKX0pKSl9c3RhdGljIGdldFR5cGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6ZS5pbmNsdWRlcygiLyIpfHxlLmluY2x1ZGVzKCJcXCIpP1NuLlBBVEg6U24uQ09OU1R9c3RhdGljIGdldERldmljZU5vZGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6U24uUEFUSH1zdGF0aWMgZ2V0QXJndW1lbnRUeXBlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpPyJpbnRlZ2VyIjoiZmxvYXQiO2RlZmF1bHQ6cmV0dXJuInN0cmluZyJ9fX1lKCJPcGNWZXJzaW9uTWFwcGluZ1V0aWwiLHhhKTtjbGFzcyB2YXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGJhLnBhcnNlVmVyc2lvbihlKT49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5QaXBlfSl9c3RhdGlje3RoaXMuybVwaXBlPXQuybXJtW5nRGVjbGFyZVBpcGUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsaXNTdGFuZGFsb25lOiEwLG5hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyJ9KX19ZSgiTGF0ZXN0VmVyc2lvbkNvbmZpZ1BpcGUiLHZhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyB3YXtjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lfXRyYW5zZm9ybShlKXtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnBvcnQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKXx8ZS5oYXNFcnJvcigibWF4Iik/dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5wb3J0LWxpbWl0cy1lcnJvciIse21pbjpFdC5NSU4sbWF4OkV0Lk1BWH0pOiIifXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d2EsZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LlBpcGV9KX1zdGF0aWN7dGhpcy7JtXBpcGU9dC7Jtcm1bmdEZWNsYXJlUGlwZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxpc1N0YW5kYWxvbmU6ITAsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0pfX1lKCJHYXRld2F5UG9ydFRvb2x0aXBQaXBlIix3YSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAiLHN0YW5kYWxvbmU6ITB9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WS5UcmFuc2xhdGVTZXJ2aWNlfV19KTtjbGFzcyBDYXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGUubWFwKCgoe3ZhbHVlOmV9KT0+ZS50b1N0cmluZygpKSkuam9pbigiLCAiKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyJ9KX19ZSgiUnBjVGVtcGxhdGVBcnJheVZpZXdQaXBlIixDYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpDYSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBUYXt0cmFuc2Zvcm0oZSx0LG4pe3JldHVybiFufHxuPy5pbmNsdWRlcyhTbi5QQVRIKT90IT09U24uQ09OU1Q/YHdpZGdldC9saWIvZ2F0ZXdheS8ke2V9LSR7dH1fZm5gOnZvaWQgMDoiYXR0cmlidXRlcyI9PT1lfHwidGltZXNlcmllcyI9PT1lPyJ3aWRnZXQvbGliL2dhdGV3YXkvYXR0cmlidXRlc190aW1lc2VyaWVzX2V4cHJlc3Npb25zX2ZuIjoid2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifSl9fWUoIkdhdGV3YXlIZWxwTGlua1BpcGUiLFRhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImdldEdhdGV3YXlIZWxwTGluayIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBTYXtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbGVtZW50UmVmPWUsdGhpcy5yZW5kZXJlcj10LHRoaXMudG9vbHRpcD1uLHRoaXMudG9vbHRpcEVuYWJsZWQ9ITAsdGhpcy5wb3NpdGlvbj0iYWJvdmUiLHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5vYnNlcnZlTW91c2VFdmVudHMoKSx0aGlzLmFwcGx5VHJ1bmNhdGlvblN0eWxlcygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudG9vbHRpcC5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy50b29sdGlwLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJnRoaXMuaGlkZVRvb2x0aXAoKSx0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9b2JzZXJ2ZU1vdXNlRXZlbnRzKCl7a2UodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiKS5waXBlKE1lKCgoKT0+dGhpcy50b29sdGlwRW5hYmxlZCkpLE1lKCgoKT0+dGhpcy5pc092ZXJmbG93bih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpKSxFZSgoKCk9PnRoaXMuc2hvd1Rvb2x0aXAoKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKSxrZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUoTWUoKCgpPT50aGlzLnRvb2x0aXBFbmFibGVkKSksTWUoKCgpPT50aGlzLnRvb2x0aXAuX2lzVG9vbHRpcFZpc2libGUoKSkpLEVlKCgoKT0+dGhpcy5oaWRlVG9vbHRpcCgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWFwcGx5VHJ1bmNhdGlvblN0eWxlcygpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIndoaXRlLXNwYWNlIiwibm93cmFwIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKX1pc092ZXJmbG93bihlKXtyZXR1cm4gZS5jbGllbnRXaWR0aDxlLnNjcm9sbFdpZHRofXNob3dUb29sdGlwKCl7dGhpcy50b29sdGlwLm1lc3NhZ2U9dGhpcy50ZXh0fHx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lclRleHQsdGhpcy50b29sdGlwLnNob3coKX1oaWRlVG9vbHRpcCgpe3RoaXMudG9vbHRpcC5oaWRlKCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpTYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp6ZS5NYXRUb29sdGlwfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9c3RhdGlje3RoaXMuybVkaXI9dC7Jtcm1bmdEZWNsYXJlRGlyZWN0aXZlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6e3RleHQ6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0ZXh0Il0sdG9vbHRpcEVuYWJsZWQ6InRvb2x0aXBFbmFibGVkIixwb3NpdGlvbjoicG9zaXRpb24ifSxwcm92aWRlcnM6W1dlXSxuZ0ltcG9ydDp0fSl9fWUoIlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUiLFNhKSxIZShbTigpXSxTYS5wcm90b3R5cGUsInRvb2x0aXBFbmFibGVkIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixwcm92aWRlcnM6W1dlXSxzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOnplLk1hdFRvb2x0aXB9XSxwcm9wRGVjb3JhdG9yczp7dGV4dDpbe3R5cGU6YSxhcmdzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIl19XSx0b29sdGlwRW5hYmxlZDpbe3R5cGU6YX1dLHBvc2l0aW9uOlt7dHlwZTphfV19fSk7Y2xhc3Mga2F7c2V0IGNoaXBzKGUpe2VlKHRoaXMuY2hpcHNWYWx1ZSxlKXx8KHRoaXMuY2hpcHNWYWx1ZT1lLHNldFRpbWVvdXQoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSksMCkpfWNvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZWw9ZSx0aGlzLnJlbmRlcmVyPXQsdGhpcy50cmFuc2xhdGU9bix0aGlzLndpbmRvdz1hLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJtYXgtaGVpZ2h0IiwiNDhweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJvdmVyZmxvdyIsImF1dG8iKSxrZShhLCJyZXNpemUiKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSkpLHRoaXMub2JzZXJ2ZUludGVyc2VjdGlvbigpfW9ic2VydmVJbnRlcnNlY3Rpb24oKXt0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZT0+e2UuZm9yRWFjaCgoZT0+e2UuaXNJbnRlcnNlY3RpbmcmJnRoaXMuYWRqdXN0Q2hpcHMoKX0pKX0pKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1hZGp1c3RDaGlwcygpe2NvbnN0IGU9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy1jaGlwIiksbj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUodCkubWFyZ2luTGVmdCl8fDAsYT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIm1hdC1jaGlwOm5vdCguZWxsaXBzaXMtY2hpcCkiKTtpZih0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPjEpe2NvbnN0IG89dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy10ZXh0Iik7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5IiwiaW5saW5lLWZsZXgiKSxvLmlubmVySFRNTD10aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmVsbGlwc2lzLWNoaXBzLXRleHQiLHtjb3VudDp0aGlzLmNoaXBzVmFsdWUubGVuZ3RofSk7Y29uc3QgaT1lLm9mZnNldFdpZHRoLSh0Lm9mZnNldFdpZHRoK24pO2xldCByPTAscz0wO2EuZm9yRWFjaCgoZT0+e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUoZSwiZGlzcGxheSIsImlubGluZS1mbGV4Iik7Y29uc3QgdD1lLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX3RleHQtbGFiZWwiKTt0aGlzLmFwcGx5TWF4Q2hpcFRleHRXaWR0aCh0LGkvMykscisoZS5vZmZzZXRXaWR0aCtuKTw9aSYmczx0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPyhzKysscis9ZS5vZmZzZXRXaWR0aCtuKTp0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsImRpc3BsYXkiLCJub25lIil9KSksby5pbm5lckhUTUw9dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5lbGxpcHNpcy1jaGlwcy10ZXh0Iix7Y291bnQ6dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aC1zfSkscz09PXRoaXMuY2hpcHNWYWx1ZT8ubGVuZ3RoJiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHQsImRpc3BsYXkiLCJub25lIil9ZWxzZSBpZigxPT09dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aCl7Y29uc3Qgbz1hWzBdLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbiIpLGk9by5xdWVyeVNlbGVjdG9yKCIubWRjLWV2b2x1dGlvbi1jaGlwX190ZXh0LWxhYmVsIikscj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUobykucGFkZGluZ0xlZnQpfHwwLHM9cGFyc2VGbG9hdCh0aGlzLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG8pLnBhZGRpbmdSaWdodCl8fDAsbD1lLm9mZnNldFdpZHRoLW4tKHIrcyk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYVswXSwiZGlzcGxheSIsImlubGluZS1mbGV4IiksdGhpcy5hcHBseU1heENoaXBUZXh0V2lkdGgoaSxsKX1lbHNlIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodCwiZGlzcGxheSIsIm5vbmUiKX1hcHBseU1heENoaXBUZXh0V2lkdGgoZSx0KXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm1heC13aWR0aCIsdCsicHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm92ZXJmbG93IiwiaGlkZGVuIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlLCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIndoaXRlLXNwYWNlIiwibm93cmFwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjphZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6a2EsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJbdGItZWxsaXBzaXMtY2hpcC1saXN0XSIsaW5wdXRzOntjaGlwczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCIsImNoaXBzIl19LG5nSW1wb3J0OnR9KX19ZSgiRWxsaXBzaXNDaGlwTGlzdERpcmVjdGl2ZSIsa2EpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6a2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX0se3R5cGU6V2luZG93LGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbYWVdfV19XSxwcm9wRGVjb3JhdG9yczp7Y2hpcHM6W3t0eXBlOmEsYXJnczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfV19fSk7Y2xhc3MgTGF7Y29uc3RydWN0b3IoZSx0LG4sYSl7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWUsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2U9dCx0aGlzLnpvbmU9bix0aGlzLnRyYW5zbGF0ZT1hLHRoaXMuYXR0cmlidXRlc1N1YmplY3Q9bmV3IExlKFtdKSx0aGlzLnBhZ2VEYXRhU3ViamVjdD1uZXcgTGUoTSgpKSx0aGlzLnBhZ2VEYXRhJD10aGlzLnBhZ2VEYXRhU3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlzLnNlbGVjdGlvbj1uZXcgamUoITAsW10pfWNvbm5lY3QoZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCl9ZGlzY29ubmVjdChlKXt0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5wYWdlRGF0YVN1YmplY3QuY29tcGxldGUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXImJih0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIudW5zdWJzY3JpYmUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXI9bnVsbCl9bG9hZEF0dHJpYnV0ZXMoZSx0LG4sYT0hMSl7YSYmKHRoaXMuYWxsQXR0cmlidXRlcz1udWxsLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlciYmKHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlci51bnN1YnNjcmliZSgpLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlcj1udWxsKSksdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtjb25zdCBvPW5ldyBGZTtyZXR1cm4gdGhpcy5mZXRjaEF0dHJpYnV0ZXMoZSx0LG4pLnBpcGUocWUoKCgpPT5JZShNKCkpKSkpLnN1YnNjcmliZSgoZT0+e3RoaXMuYXR0cmlidXRlc1N1YmplY3QubmV4dChlLmRhdGEpLHRoaXMucGFnZURhdGFTdWJqZWN0Lm5leHQoZSksby5uZXh0KGUpfSkpLG99ZmV0Y2hBdHRyaWJ1dGVzKGUsdCxuKXtyZXR1cm4gdGhpcy5nZXRBbGxBdHRyaWJ1dGVzKGUsdCkucGlwZShEZSgoZT0+e2NvbnN0IHQ9ZS5maWx0ZXIoKGU9PjAhPT1lLmxhc3RVcGRhdGVUcykpO3JldHVybiBuLmZpbHRlckRhdGEodCl9KSkpfWdldEFsbEF0dHJpYnV0ZXMoZSx0KXtpZighdGhpcy5hbGxBdHRyaWJ1dGVzKXtsZXQgbjtFLmdldCh0KT8odGhpcy50ZWxlbWV0cnlTdWJzY3JpYmVyPXEuY3JlYXRlRW50aXR5QXR0cmlidXRlc1N1YnNjcmlwdGlvbih0aGlzLnRlbGVtZXRyeVdzU2VydmljZSxlLHQsdGhpcy56b25lKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuc3Vic2NyaWJlKCksbj10aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuYXR0cmlidXRlRGF0YSQoKSk6bj10aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyhlLHQpLHRoaXMuYWxsQXR0cmlidXRlcz1uLnBpcGUoUGUoMSksR2UoKSl9cmV0dXJuIHRoaXMuYWxsQXR0cmlidXRlc31pc0FsbFNlbGVjdGVkKCl7Y29uc3QgZT10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShEZSgodD0+ZT09PXQubGVuZ3RoKSkpfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5waXBlKERlKChlPT4hZS5sZW5ndGgpKSl9dG90YWwoKXtyZXR1cm4gdGhpcy5wYWdlRGF0YVN1YmplY3QucGlwZShEZSgoZT0+ZS50b3RhbEVsZW1lbnRzKSkpfW1hc3RlclRvZ2dsZSgpe3RoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShFZSgoZT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aD09PWUubGVuZ3RoP3RoaXMuc2VsZWN0aW9uLmNsZWFyKCk6ZS5mb3JFYWNoKChlPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0KGUpfSkpfSkpLE9lKDEpKS5zdWJzY3JpYmUoKX19ZSgiQXR0cmlidXRlRGF0YXNvdXJjZSIsTGEpO2NsYXNzIEZhe2NvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlU2VydmljZT1lLHRoaXMuc2F2ZVRlbXBsYXRlPW5ldyBpLHRoaXMudXNlVGVtcGxhdGU9bmV3IGksdGhpcy5vcmlnaW5hbE9yZGVyPSgpPT4wLHRoaXMuaXNPYmplY3Q9ZT0+b2UoZSksdGhpcy5pc0FycmF5PWU9PkFycmF5LmlzQXJyYXkoZSksdGhpcy5TTk1QTWV0aG9kc1RyYW5zbGF0aW9ucz10bn1uZ09uSW5pdCgpe31hcHBseVRlbXBsYXRlKGUsdCl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnVzZVRlbXBsYXRlLmVtaXQodCl9ZGVsZXRlVGVtcGxhdGUoZSx0KXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49dGhpcy5ycGNUZW1wbGF0ZXMuZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO3RoaXMucnBjVGVtcGxhdGVzLnNwbGljZShuLDEpO2NvbnN0IGE9YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5OmEsdmFsdWU6dGhpcy5ycGNUZW1wbGF0ZXN9XSkuc3Vic2NyaWJlKCgoKT0+e30pKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZhLGRlcHM6W3t0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkZhLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXMiLGlucHV0czp7Y29ubmVjdG9yVHlwZToiY29ubmVjdG9yVHlwZSIsY3R4OiJjdHgiLHJwY1RlbXBsYXRlczoicnBjVGVtcGxhdGVzIn0sb3V0cHV0czp7c2F2ZVRlbXBsYXRlOiJzYXZlVGVtcGxhdGUiLHVzZVRlbXBsYXRlOiJ1c2VUZW1wbGF0ZSJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZXMtdGl0bGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuPG1hdC1leHBhbnNpb24tcGFuZWwgaGlkZVRvZ2dsZSAqbmdGb3I9ImxldCB0ZW1wbGF0ZSBvZiBycGNUZW1wbGF0ZXMiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz0idGVtcGxhdGUtbmFtZSI+XG4gICAgICA8c3BhbiBtYXRUb29sdGlwPSJ7e3RlbXBsYXRlLm5hbWV9fSIgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+e3t0ZW1wbGF0ZS5uYW1lfX08L3NwYW4+XG4gICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IkRlbGV0ZSIgKGNsaWNrKT0iZGVsZXRlVGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPSJVc2UiIChjbGljayk9ImFwcGx5VGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9ImxldCBjb25maWcgb2YgdGVtcGxhdGUuY29uZmlnIHwga2V5VmFsdWVJc05vdEVtcHR5IlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IGNvbmZpZywgaW5uZXJWYWx1ZTogZmFsc2UgfSI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI1JQQ1RlbXBsYXRlUmVmIGxldC1jb25maWcgbGV0LWlubmVyVmFsdWU9XCdpbm5lclZhbHVlXCc+XG4gICAgPGRpdiBbZnhMYXlvdXRdPSJpc09iamVjdChjb25maWcudmFsdWUpID8gXCdjb2x1bW5cJzogXCdyb3dcJyJcbiAgICAgICAgIFtmeExheW91dEFsaWduXT0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ3NwYWNlLWJldHdlZW4gY2VudGVyXCcgOiBcJ1wnIlxuICAgICAgICAgW25nU3R5bGVdPSJ7XCdwYWRkaW5nLWxlZnRcJzogaW5uZXJWYWx1ZSA/IFwnMTZweFwnOiBcJzBcJ30iXG4gICAgICAgICBjbGFzcz0icnBjLXBhcmFtcy1yb3ciPlxuICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUta2V5Ij5cbiAgICAgICAge3shaW5uZXJWYWx1ZSA/IChcJ2dhdGV3YXkucnBjLlwnICsgY29uZmlnLmtleSB8IHRyYW5zbGF0ZSkgOiBjb25maWcua2V5fX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iaXNBcnJheShjb25maWcudmFsdWUpIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9ImFycmF5LXZhbHVlIj5cbiAgICAgICAge3sgY29uZmlnLnZhbHVlIHwgZ2V0UnBjVGVtcGxhdGVBcnJheVZpZXcgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iaXNPYmplY3QoY29uZmlnLnZhbHVlKSIgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENPYmplY3RSb3ciPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiAqbmdJZj0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgJiYgIWlzQXJyYXkoY29uZmlnLnZhbHVlKSJcbiAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdib29sZWFuLXRydWVcJzogY29uZmlnLnZhbHVlID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgIFwnYm9vbGVhbi1mYWxzZVwnOiBjb25maWcudmFsdWUgPT09IGZhbHNlICB9Ij5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29uZmlnLmtleSA9PT0gXCdtZXRob2RcJyBlbHNlIHZhbHVlIiBbbmdUZW1wbGF0ZU91dGxldF09IlNOTVBNZXRob2QiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZhbHVlPnt7IGNvbmZpZy52YWx1ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1NOTVBNZXRob2Q+e3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KGNvbmZpZy52YWx1ZSkgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNSUENPYmplY3RSb3c+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9ImxldCBzdWJDb25maWcgb2YgY29uZmlnLnZhbHVlIHwga2V5dmFsdWUgOiBvcmlnaW5hbE9yZGVyIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IHN1YkNvbmZpZywgaW5uZXJWYWx1ZTogdHJ1ZSB9Ij5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjB9Omhvc3QgLnRpdGxle2ZvbnQtd2VpZ2h0OjUwMH06aG9zdCAudGVtcGxhdGUta2V5e2NvbG9yOiMwMDAwMDA2MTtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4fTpob3N0IC5ib29sZWFuLXRydWUsOmhvc3QgLmJvb2xlYW4tZmFsc2V7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDtwYWRkaW5nOjAgMTJweDt3aWR0aDpmaXQtY29udGVudDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfTpob3N0IC5ib29sZWFuLWZhbHNle2NvbG9yOiNkMTI3MzA7YmFja2dyb3VuZC1jb2xvcjojZDEyNzMwMTR9Omhvc3QgLmJvb2xlYW4tdHJ1ZXtjb2xvcjojMTk4MDM4O2JhY2tncm91bmQtY29sb3I6IzE5ODAzODE0fTpob3N0IG1hdC1leHBhbnNpb24tcGFuZWx7bWFyZ2luLXRvcDoxMHB4O292ZXJmbG93OnZpc2libGV9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MDtmbGV4OjB9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uPm1hdC1pY29ue21hcmdpbi1sZWZ0OjE1cHg7Y29sb3I6IzAwMDAwMDYxfTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntwYWRkaW5nOjAgMCAwIDEycHh9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NDhweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgLm1hdC1jb250ZW50Lm1hdC1jb250ZW50LWhpZGUtdG9nZ2xle21hcmdpbi1yaWdodDowfTpob3N0IC5ycGMtcGFyYW1zLXJvd3tvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5ycGMtcGFyYW1zLXJvdyA6bm90KDpmaXJzdC1jaGlsZCl7d2hpdGUtc3BhY2U6cHJlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50ZW1wbGF0ZS1uYW1le292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2t9Omhvc3QgOjpuZy1kZWVwIC5tYXQtY29udGVudHthbGlnbi1pdGVtczpjZW50ZXJ9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2ZsZXg6MTttYXJnaW46MH06aG9zdCAuYXJyYXktdmFsdWV7bWFyZ2luLWxlZnQ6MTBweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3R5bGUsc2VsZWN0b3I6IltuZ1N0eWxlXSIsaW5wdXRzOlsibmdTdHlsZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsRGVzY3JpcHRpb24sc2VsZWN0b3I6Im1hdC1wYW5lbC1kZXNjcmlwdGlvbiJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOkNhLG5hbWU6ImdldFJwY1RlbXBsYXRlQXJyYXlWaWV3In1dfSl9fWUoIkdhdGV3YXlTZXJ2aWNlUlBDQ29ubmVjdG9yVGVtcGxhdGVzQ29tcG9uZW50IixGYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpGYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9Im1hdC1zdWJ0aXRsZS0xIHRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlcy10aXRsZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG48bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlICpuZ0Zvcj0ibGV0IHRlbXBsYXRlIG9mIHJwY1RlbXBsYXRlcyI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8bWF0LXBhbmVsLXRpdGxlIGNsYXNzPSJ0ZW1wbGF0ZS1uYW1lIj5cbiAgICAgIDxzcGFuIG1hdFRvb2x0aXA9Int7dGVtcGxhdGUubmFtZX19IiBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj57e3RlbXBsYXRlLm5hbWV9fTwvc3Bhbj5cbiAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD0iRGVsZXRlIiAoY2xpY2spPSJkZWxldGVUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IlVzZSIgKGNsaWNrKT0iYXBwbHlUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnBsYXlfYXJyb3c8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj0ibGV0IGNvbmZpZyBvZiB0ZW1wbGF0ZS5jb25maWcgfCBrZXlWYWx1ZUlzTm90RW1wdHkiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogY29uZmlnLCBpbm5lclZhbHVlOiBmYWxzZSB9Ij5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjUlBDVGVtcGxhdGVSZWYgbGV0LWNvbmZpZyBsZXQtaW5uZXJWYWx1ZT1cJ2lubmVyVmFsdWVcJz5cbiAgICA8ZGl2IFtmeExheW91dF09ImlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ2NvbHVtblwnOiBcJ3Jvd1wnIlxuICAgICAgICAgW2Z4TGF5b3V0QWxpZ25dPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSA/IFwnc3BhY2UtYmV0d2VlbiBjZW50ZXJcJyA6IFwnXCciXG4gICAgICAgICBbbmdTdHlsZV09IntcJ3BhZGRpbmctbGVmdFwnOiBpbm5lclZhbHVlID8gXCcxNnB4XCc6IFwnMFwnfSJcbiAgICAgICAgIGNsYXNzPSJycGMtcGFyYW1zLXJvdyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1rZXkiPlxuICAgICAgICB7eyFpbm5lclZhbHVlID8gKFwnZ2F0ZXdheS5ycGMuXCcgKyBjb25maWcua2V5IHwgdHJhbnNsYXRlKSA6IGNvbmZpZy5rZXl9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJpc0FycmF5KGNvbmZpZy52YWx1ZSkiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0iYXJyYXktdmFsdWUiPlxuICAgICAgICB7eyBjb25maWcudmFsdWUgfCBnZXRScGNUZW1wbGF0ZUFycmF5VmlldyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJpc09iamVjdChjb25maWcudmFsdWUpIiBbbmdUZW1wbGF0ZU91dGxldF09IlJQQ09iamVjdFJvdyI+PC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2ICpuZ0lmPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSAmJiAhaXNBcnJheShjb25maWcudmFsdWUpIlxuICAgICAgICAgICBbbmdDbGFzc109IntcJ2Jvb2xlYW4tdHJ1ZVwnOiBjb25maWcudmFsdWUgPT09IHRydWUsXG4gICAgICAgICAgICAgICAgICAgXCdib29sZWFuLWZhbHNlXCc6IGNvbmZpZy52YWx1ZSA9PT0gZmFsc2UgIH0iPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJjb25maWcua2V5ID09PSBcJ21ldGhvZFwnIGVsc2UgdmFsdWUiIFtuZ1RlbXBsYXRlT3V0bGV0XT0iU05NUE1ldGhvZCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdmFsdWU+e3sgY29uZmlnLnZhbHVlIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjU05NUE1ldGhvZD57eyBTTk1QTWV0aG9kc1RyYW5zbGF0aW9ucy5nZXQoY29uZmlnLnZhbHVlKSB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1JQQ09iamVjdFJvdz5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj0ibGV0IHN1YkNvbmZpZyBvZiBjb25maWcudmFsdWUgfCBrZXl2YWx1ZSA6IG9yaWdpbmFsT3JkZXIiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogc3ViQ29uZmlnLCBpbm5lclZhbHVlOiB0cnVlIH0iPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1leHBhbnNpb24tcGFuZWw+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC50ZW1wbGF0ZS1rZXl7Y29sb3I6IzAwMDAwMDYxO2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHh9Omhvc3QgLmJvb2xlYW4tdHJ1ZSw6aG9zdCAuYm9vbGVhbi1mYWxzZXtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4O3BhZGRpbmc6MCAxMnB4O3dpZHRoOmZpdC1jb250ZW50O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgLmJvb2xlYW4tZmFsc2V7Y29sb3I6I2QxMjczMDtiYWNrZ3JvdW5kLWNvbG9yOiNkMTI3MzAxNH06aG9zdCAuYm9vbGVhbi10cnVle2NvbG9yOiMxOTgwMzg7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4MTR9Omhvc3QgbWF0LWV4cGFuc2lvbi1wYW5lbHttYXJnaW4tdG9wOjEwcHg7b3ZlcmZsb3c6dmlzaWJsZX06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDowO2ZsZXg6MH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24+bWF0LWljb257bWFyZ2luLWxlZnQ6MTVweDtjb2xvcjojMDAwMDAwNjF9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye3BhZGRpbmc6MCAwIDAgMTJweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo0OHB4fTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAubWF0LWNvbnRlbnQubWF0LWNvbnRlbnQtaGlkZS10b2dnbGV7bWFyZ2luLXJpZ2h0OjB9Omhvc3QgLnJwYy1wYXJhbXMtcm93e292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLnJwYy1wYXJhbXMtcm93IDpub3QoOmZpcnN0LWNoaWxkKXt3aGl0ZS1zcGFjZTpwcmU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRlbXBsYXRlLW5hbWV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9ja306aG9zdCA6Om5nLWRlZXAgLm1hdC1jb250ZW50e2FsaWduLWl0ZW1zOmNlbnRlcn06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZmxleDoxO21hcmdpbjowfTpob3N0IC5hcnJheS12YWx1ZXttYXJnaW4tbGVmdDoxMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Nvbm5lY3RvclR5cGU6W3t0eXBlOmF9XSxjdHg6W3t0eXBlOmF9XSxzYXZlVGVtcGxhdGU6W3t0eXBlOmx9XSx1c2VUZW1wbGF0ZTpbe3R5cGU6bH1dLHJwY1RlbXBsYXRlczpbe3R5cGU6YX1dfX0pO2NsYXNzIElhe2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLkJyb2tlclNlY3VyaXR5VHlwZT1kbix0aGlzLnNlY3VyaXR5VHlwZXM9T2JqZWN0LnZhbHVlcyhkbiksdGhpcy5TZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXA9dW4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e30sdGhpcy5zZWN1cml0eUZvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltkbi5BTk9OWU1PVVMsW11dLHVzZXJuYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV19KSx0aGlzLm9ic2VydmVTZWN1cml0eUZvcm0oKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7ZS50eXBlfHwoZS50eXBlPWRuLkFOT05ZTU9VUyksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlKSx0aGlzLnVwZGF0ZVZpZXcoZSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUZvcm06e3ZhbGlkOiExfX19dXBkYXRlVmlldyhlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZShlKX11cGRhdGVWYWxpZGF0b3JzKGUpe2U9PT1kbi5CQVNJQz8odGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGFzc3dvcmQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfW9ic2VydmVTZWN1cml0eUZvcm0oKXt0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlVmlldyhlKSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PklhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+SWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbRCxIXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBBYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMuc2VuZENvbW1hbmQ9bmV3IGksdGhpcy5zYXZlVGVtcGxhdGU9bmV3IGksdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuYkFDbmV0UmVxdWVzdFR5cGVzPU9iamVjdC52YWx1ZXMoV3QpLHRoaXMuYkFDbmV0T2JqZWN0VHlwZXM9T2JqZWN0LnZhbHVlcyhLdCksdGhpcy5iTEVNZXRob2RzPU9iamVjdC52YWx1ZXMoWXQpLHRoaXMuY0FOQnl0ZU9yZGVycz1PYmplY3QudmFsdWVzKEp0KSx0aGlzLnNvY2tldE1ldGhvZFByb2Nlc3NpbmdzPU9iamVjdC52YWx1ZXMoWHQpLHRoaXMuc29ja2V0RW5jb2RpbmdzPU9iamVjdC52YWx1ZXMoYW4pLHRoaXMuc05NUE1ldGhvZHM9T2JqZWN0LnZhbHVlcyhlbiksdGhpcy5oVFRQTWV0aG9kcz1PYmplY3QudmFsdWVzKG5uKSx0aGlzLmJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXM9anQsdGhpcy5iQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXM9JHQsdGhpcy5iTEVNZXRob2RzVHJhbnNsYXRlcz1RdCx0aGlzLlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzVHJhbnNsYXRlcz1adCx0aGlzLlNOTVBNZXRob2RzVHJhbnNsYXRpb25zPXRuLHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy51cmxQYXR0ZXJuPS9eWy1hLXpBLVpkXyQ6e30/fis9XC8uMC05LV0qJC8sdGhpcy5udW1iZXJzT25seVBhdHRlcm49L15bMC05XSokLyx0aGlzLmhleE9ubHlQYXR0ZXJuPS9eWzAtOUEtRmEtZiBdKyQvLHRoaXMucHJvcGFnYXRlQ2hhbmdlPWU9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5jb21tYW5kRm9ybT10aGlzLmNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZSh0aGlzLmNvbm5lY3RvclR5cGUpLHRoaXMuY29tbWFuZEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9e307c3dpdGNoKHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5SRVNUOmNhc2UgX3QuUkVRVUVTVDplLmh0dHBIZWFkZXJzLmZvckVhY2goKGU9Pnt0W2UuaGVhZGVyTmFtZV09ZS52YWx1ZX0pKSxlLmh0dHBIZWFkZXJzPXR9dGhpcy5jb21tYW5kRm9ybS52YWxpZCYmdGhpcy5wcm9wYWdhdGVDaGFuZ2Uoey4uLnRoaXMuY29tbWFuZEZvcm0udmFsdWUsLi4uZX0pfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZShlKXtsZXQgdDtzd2l0Y2goZSl7Y2FzZSBfdC5CQUNORVQ6dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFR5cGU6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxvYmplY3RUeXBlOltudWxsLFtdXSxpZGVudGlmaWVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxwcm9wZXJ0eUlkOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7YnJlYWs7Y2FzZSBfdC5CTEU6dD10aGlzLmZiLmdyb3VwKHttZXRob2RSUEM6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sY2hhcmFjdGVyaXN0aWNVVUlEOlsiMDAwMDJBMDAtMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIzNEZCIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLHdpdGhSZXNwb25zZTpbITEsW11dfSk7YnJlYWs7Y2FzZSBfdC5DQU46dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbm9kZUlEOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxpc0V4dGVuZGVkSUQ6WyExLFtdXSxpc0ZEOlshMSxbXV0sYml0cmF0ZVN3aXRjaDpbITEsW11dLGRhdGFMZW5ndGg6W251bGwsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLGRhdGFCeXRlb3JkZXI6W251bGwsW11dLGRhdGFCZWZvcmU6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhQWZ0ZXI6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhSW5IRVg6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhRXhwcmVzc2lvbjpbbnVsbCxbdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuRlRQOnQ9dGhpcy5mYi5ncm91cCh7bWV0aG9kRmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuT0NQUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNPQ0tFVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLGVuY29kaW5nOlthbi5VVEZfOCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx3aXRoUmVzcG9uc2U6WyExLFtdXX0pO2JyZWFrO2Nhc2UgX3QuWE1QUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNOTVA6dD10aGlzLmZiLmdyb3VwKHtyZXF1ZXN0RmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx3aXRoUmVzcG9uc2U6WyExLFtdXSxvaWQ6dGhpcy5mYi5hcnJheShbXSxbdWUucmVxdWlyZWRdKX0pO2JyZWFrO2Nhc2UgX3QuUkVTVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwTWV0aG9kOltudWxsLFt1ZS5yZXF1aXJlZF1dLHJlcXVlc3RVcmxFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKHRoaXMudXJsUGF0dGVybildXSxyZXNwb25zZVRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSx0aW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdHJpZXM6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwSGVhZGVyczp0aGlzLmZiLmFycmF5KFtdKSxzZWN1cml0eTpbe30sW3VlLnJlcXVpcmVkXV19KTticmVhaztjYXNlIF90LlJFUVVFU1Q6dD10aGlzLmZiLmdyb3VwKHttZXRob2RGaWx0ZXI6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saHR0cE1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxyZXF1ZXN0VXJsRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybih0aGlzLnVybFBhdHRlcm4pXV0scmVzcG9uc2VUaW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdGltZW91dDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKDEwKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHRyaWVzOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxyZXF1ZXN0VmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5wYXR0ZXJuKGt0KV1dLGh0dHBIZWFkZXJzOnRoaXMuZmIuYXJyYXkoW10pfSk7YnJlYWs7ZGVmYXVsdDp0PXRoaXMuZmIuZ3JvdXAoe2NvbW1hbmQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFyYW1zOlt7fSxbSXRdXX0pfXJldHVybiB0fWFkZFNOTVBvaWQoZT1udWxsKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJvaWQiKTt0JiZ0LnB1c2godGhpcy5mYi5jb250cm9sKGUsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXSkse2VtaXRFdmVudDohMX0pfXJlbW92ZVNOTVBvaWQoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoIm9pZCIpLnJlbW92ZUF0KGUpfWFkZEhUVFBIZWFkZXIoZT17aGVhZGVyTmFtZTpudWxsLHZhbHVlOm51bGx9KXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJodHRwSGVhZGVycyIpLG49dGhpcy5mYi5ncm91cCh7aGVhZGVyTmFtZTpbZS5oZWFkZXJOYW1lLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlOltlLnZhbHVlLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7dCYmdC5wdXNoKG4se2VtaXRFdmVudDohMX0pfXJlbW92ZUhUVFBIZWFkZXIoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoImh0dHBIZWFkZXJzIikucmVtb3ZlQXQoZSl9Z2V0Rm9ybUFycmF5Q29udHJvbHMoZSl7cmV0dXJuIHRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpLmNvbnRyb2xzfW9wZW5FZGl0SlNPTkRpYWxvZyhlKXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlhbG9nLm9wZW4oUWUse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntqc29uVmFsdWU6dGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnZhbHVlLHJlcXVpcmVkOiEwfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnNldFZhbHVlKGUpfSkpfXNhdmUoKXt0aGlzLnNhdmVUZW1wbGF0ZS5lbWl0KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe31jbGVhckZyb21BcnJheUJ5TmFtZShlKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpO2Zvcig7MCE9PXQubGVuZ3RoOyl0LnJlbW92ZUF0KDApfXdyaXRlVmFsdWUoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtzd2l0Y2goZT1KKGUpLHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5TTk1QOnRoaXMuY2xlYXJGcm9tQXJyYXlCeU5hbWUoIm9pZCIpLGUub2lkLmZvckVhY2goKGU9Pnt0aGlzLmFkZFNOTVBvaWQoZSl9KSksZGVsZXRlIGUub2lkO2JyZWFrO2Nhc2UgX3QuUkVRVUVTVDpjYXNlIF90LlJFU1Q6dGhpcy5jbGVhckZyb21BcnJheUJ5TmFtZSgiaHR0cEhlYWRlcnMiKSxlLmh0dHBIZWFkZXJzJiZPYmplY3QuZW50cmllcyhlLmh0dHBIZWFkZXJzKS5mb3JFYWNoKChlPT57dGhpcy5hZGRIVFRQSGVhZGVyKHtoZWFkZXJOYW1lOmVbMF0sdmFsdWU6ZVsxXX0pfSkpLGRlbGV0ZSBlLmh0dHBIZWFkZXJzfXRoaXMuY29tbWFuZEZvcm0ucGF0Y2hWYWx1ZShlLHtvbmx5U2VsZjohMX0pfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6e2Nvbm5lY3RvclR5cGU6ImNvbm5lY3RvclR5cGUifSxvdXRwdXRzOntzZW5kQ29tbWFuZDoic2VuZENvbW1hbmQiLHNhdmVUZW1wbGF0ZToic2F2ZVRlbXBsYXRlIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hEZWZhdWx0LHNlbGVjdG9yOiJbbmdTd2l0Y2hEZWZhdWx0XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WmUuVGJKc29uVG9TdHJpbmdEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi1qc29uLXRvLXN0cmluZ10ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnouTWF0RGl2aWRlcixzZWxlY3RvcjoibWF0LWRpdmlkZXIiLGlucHV0czpbInZlcnRpY2FsIiwiaW5zZXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4QWxpZ25dLCBbZnhGbGV4QWxpZ24ueHNdLCBbZnhGbGV4QWxpZ24uc21dLCBbZnhGbGV4QWxpZ24ubWRdLCAgW2Z4RmxleEFsaWduLmxnXSwgW2Z4RmxleEFsaWduLnhsXSwgW2Z4RmxleEFsaWduLmx0LXNtXSwgW2Z4RmxleEFsaWduLmx0LW1kXSwgIFtmeEZsZXhBbGlnbi5sdC1sZ10sIFtmeEZsZXhBbGlnbi5sdC14bF0sIFtmeEZsZXhBbGlnbi5ndC14c10sIFtmeEZsZXhBbGlnbi5ndC1zbV0sICBbZnhGbGV4QWxpZ24uZ3QtbWRdLCBbZnhGbGV4QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeEZsZXhBbGlnbiIsImZ4RmxleEFsaWduLnhzIiwiZnhGbGV4QWxpZ24uc20iLCJmeEZsZXhBbGlnbi5tZCIsImZ4RmxleEFsaWduLmxnIiwiZnhGbGV4QWxpZ24ueGwiLCJmeEZsZXhBbGlnbi5sdC1zbSIsImZ4RmxleEFsaWduLmx0LW1kIiwiZnhGbGV4QWxpZ24ubHQtbGciLCJmeEZsZXhBbGlnbi5sdC14bCIsImZ4RmxleEFsaWduLmd0LXhzIiwiZnhGbGV4QWxpZ24uZ3Qtc20iLCJmeEZsZXhBbGlnbi5ndC1tZCIsImZ4RmxleEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUFycmF5TmFtZSxzZWxlY3RvcjoiW2Zvcm1BcnJheU5hbWVdIixpbnB1dHM6WyJmb3JtQXJyYXlOYW1lIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6SWEsc2VsZWN0b3I6InRiLXJlc3QtY29ubmVjdG9yLXNlY3VyaXR5In0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U2VydmljZVJQQ0Nvbm5lY3RvckNvbXBvbmVudCIsQWEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6QWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5BYSkpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpKZS5NYXREaWFsb2d9XSxwcm9wRGVjb3JhdG9yczp7Y29ubmVjdG9yVHlwZTpbe3R5cGU6YX1dLHNlbmRDb21tYW5kOlt7dHlwZTpsfV0sc2F2ZVRlbXBsYXRlOlt7dHlwZTpsfV19fSk7Y2xhc3MgTmEgZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LGEpLHRoaXMuc3RvcmU9ZSx0aGlzLnJvdXRlcj10LHRoaXMuZGF0YT1uLHRoaXMuZGlhbG9nUmVmPWEsdGhpcy5mYj1vLHRoaXMuY29uZmlnPXRoaXMuZGF0YS5jb25maWcsdGhpcy50ZW1wbGF0ZXM9dGhpcy5kYXRhLnRlbXBsYXRlcyx0aGlzLnRlbXBsYXRlTmFtZUN0cmw9dGhpcy5mYi5jb250cm9sKCIiLFt1ZS5yZXF1aXJlZF0pfXZhbGlkYXRlRHVwbGljYXRlTmFtZShlKXtjb25zdCB0PWUudmFsdWUudHJpbSgpO3JldHVybiEhdGhpcy50ZW1wbGF0ZXMuZmluZCgoZT0+ZS5uYW1lPT09dCkpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1zYXZlKCl7dGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnNldFZhbHVlKHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWx1ZS50cmltKCkpLHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnZhbHVlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5hLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOk5hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10b29sYmFyIGNvbG9yPSJwcmltYXJ5Ij5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy5zYXZlLXRlbXBsYXRlPC9oMj5cbiAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbWF0LXRvb2xiYXI+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0id2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayB0Yi12YWx1ZS10eXBlIiBzdHlsZT0iZmxleC1ncm93OiAwIj5cbiAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lPC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09InRlbXBsYXRlTmFtZUN0cmwiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0idGVtcGxhdGVOYW1lQ3RybC5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxkaXYgY2xhc3M9Im1hdC1tZGMtZm9ybS1maWVsZC1lcnJvciJcbiAgICAgICBzdHlsZT0ibWFyZ2luLXRvcDogLTE1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgZm9udC1zaXplOiAxNHB4OyJcbiAgICAgICAqbmdJZj0idmFsaWRhdGVEdXBsaWNhdGVOYW1lKHRlbXBsYXRlTmFtZUN0cmwpIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWUtZHVwbGljYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICA8YnV0dG9uIG1hdC1idXR0b25cbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICBbZGlzYWJsZWRdPSIhdGVtcGxhdGVOYW1lQ3RybC52YWxpZCJcbiAgICAgICAgICAoY2xpY2spPSJzYXZlKCkiPlxuICAgIHt7IFwnYWN0aW9uLnNhdmVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0FjdGlvbnMsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWFjdGlvbnNdLCBtYXQtZGlhbG9nLWFjdGlvbnMsIFttYXREaWFsb2dBY3Rpb25zXSIsaW5wdXRzOlsiYWxpZ24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dDb250ZW50LHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1jb250ZW50XSwgbWF0LWRpYWxvZy1jb250ZW50LCBbbWF0RGlhbG9nQ29udGVudF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb25uZWN0b3JUZW1wbGF0ZURpYWxvZ0NvbXBvbmVudCIsTmEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TmEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlLWRpYWxvZyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICA8aDIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnNhdmUtdGVtcGxhdGU8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJ3aWR0aDogNjAwcHgiIGNsYXNzPSJtYXQtY29udGVudCIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIHRiLXZhbHVlLXR5cGUiIHN0eWxlPSJmbGV4LWdyb3c6IDAiPlxuICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0idGVtcGxhdGVOYW1lQ3RybCIgcmVxdWlyZWQvPlxuICAgIDxtYXQtZXJyb3JcbiAgICAgICpuZ0lmPSJ0ZW1wbGF0ZU5hbWVDdHJsLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPGRpdiBjbGFzcz0ibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yIlxuICAgICAgIHN0eWxlPSJtYXJnaW4tdG9wOiAtMTVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDE0cHg7IlxuICAgICAgICpuZ0lmPSJ2YWxpZGF0ZUR1cGxpY2F0ZU5hbWUodGVtcGxhdGVOYW1lQ3RybCkiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1kdXBsaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIj5cbiAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgIFtkaXNhYmxlZF09IiF0ZW1wbGF0ZU5hbWVDdHJsLnZhbGlkIlxuICAgICAgICAgIChjbGljayk9InNhdmUoKSI+XG4gICAge3sgXCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBNYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKEduKSx0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy52YWx1ZVR5cGVzPVZuLHRoaXMub25DaGFuZ2U9ZT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXJndW1lbnRzOnRoaXMuZmIuYXJyYXkoW10pfSksdGhpcy5vYnNlcnZlVmFsdWVDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuY2xlYXJBcmd1bWVudHMoKSxlLmFyZ3VtZW50cz8ubWFwKCgoe3R5cGU6ZSx2YWx1ZTp0fSk9Pih7dHlwZTplLFtlXTp0fSkpKS5mb3JFYWNoKChlPT50aGlzLmFkZEFyZ3VtZW50KGUpKSksdGhpcy5jZHIubWFya0ZvckNoZWNrKCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlLm1ldGhvZCl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmFyZ3VtZW50cy5tYXAoKCh7dHlwZTplLC4uLnR9KT0+KHt0eXBlOmUsdmFsdWU6dFtlXX0pKSk7dGhpcy5vbkNoYW5nZSh7bWV0aG9kOmUubWV0aG9kLGFyZ3VtZW50czp0fSksdGhpcy5vblRvdWNoZWQoKX0pKX1yZW1vdmVBcmd1bWVudChlKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJhcmd1bWVudHMiKS5yZW1vdmVBdChlKX1hZGRBcmd1bWVudChlPXt9KXtjb25zdCB0PXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2UudHlwZT8/R24uU1RSSU5HXSxzdHJpbmc6W2Uuc3RyaW5nPz97dmFsdWU6IiIsZGlzYWJsZWQ6IShlZShlLHt9KXx8ZS5zdHJpbmcpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6ZS5pbnRlZ2VyPz8wLGRpc2FibGVkOiFpZShlLmludGVnZXIpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihMdCldXSxkb3VibGU6W3t2YWx1ZTplLmRvdWJsZT8/MCxkaXNhYmxlZDohaWUoZS5kb3VibGUpfSxbdWUucmVxdWlyZWRdXSxib29sZWFuOlt7dmFsdWU6ZS5ib29sZWFuPz8hMSxkaXNhYmxlZDohaWUoZS5ib29sZWFuKX0sW3VlLnJlcXVpcmVkXV19KTt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKHQpLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpLnB1c2godCx7ZW1pdEV2ZW50OiExfSl9Y2xlYXJBcmd1bWVudHMoKXtjb25zdCBlPXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpO2Zvcig7MCE9PWUubGVuZ3RoOyllLnJlbW92ZUF0KDApfW9ic2VydmVUeXBlQ2hhbmdlKGUpe2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e2UuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoInR5cGUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KHQpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpNYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpNYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+TWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCB0Yi1mbGV4IG5vLXBhZGRpbmctdG9wIGhpbnQtY29udGFpbmVyIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLmhpbnQub3BjLW1ldGhvZFwnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Im11bHRpcGx5Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxmaWVsZHNldCBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIGFyZ3VtZW50cy1jb250YWluZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZvcm1BcnJheU5hbWU9ImFyZ3VtZW50cyI+XG4gICAgPHN0cm9uZz5cbiAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9zdHJvbmc+XG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAqbmdGb3I9ImxldCBhcmd1bWVudEZvcm1Hcm91cCBvZiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FyZ3VtZW50c1wnKVtcJ2NvbnRyb2xzXCddOyBsZXQgaSA9IGluZGV4IiBbZm9ybUdyb3VwXT0iYXJndW1lbnRGb3JtR3JvdXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIHR5cGUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTE4IiBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHZhbHVlVHlwZSBvZiB2YWx1ZVR5cGVLZXlzIiBbdmFsdWVdPSJ2YWx1ZVR5cGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB2YWx1ZS1jb250YWluZXIiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuU1RSSU5HIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9InN0cmluZyJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLkRPVUJMRSIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJkb3VibGUiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5CT09MRUFOIiBmb3JtQ29udHJvbE5hbWU9ImJvb2xlYW4iPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJ0cnVlIj50cnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVBcmd1bWVudChpKSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgIChjbGljayk9ImFkZEFyZ3VtZW50KCkiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy5hZGQtYXJndW1lbnRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2ZpZWxkc2V0PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuYXJndW1lbnRzLWNvbnRhaW5lcnttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnR5cGUtY29udGFpbmVye3dpZHRoOjQwJX06aG9zdCAudmFsdWUtY29udGFpbmVye3dpZHRoOjUwJX06aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp3ZS5NYXRTZWxlY3RUcmlnZ2VyLHNlbGVjdG9yOiJtYXQtc2VsZWN0LXRyaWdnZXIifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEdhcERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRHYXBdLCBbZnhMYXlvdXRHYXAueHNdLCBbZnhMYXlvdXRHYXAuc21dLCBbZnhMYXlvdXRHYXAubWRdLCAgW2Z4TGF5b3V0R2FwLmxnXSwgW2Z4TGF5b3V0R2FwLnhsXSwgW2Z4TGF5b3V0R2FwLmx0LXNtXSwgW2Z4TGF5b3V0R2FwLmx0LW1kXSwgIFtmeExheW91dEdhcC5sdC1sZ10sIFtmeExheW91dEdhcC5sdC14bF0sIFtmeExheW91dEdhcC5ndC14c10sIFtmeExheW91dEdhcC5ndC1zbV0sICBbZnhMYXlvdXRHYXAuZ3QtbWRdLCBbZnhMYXlvdXRHYXAuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEdhcCIsImZ4TGF5b3V0R2FwLnhzIiwiZnhMYXlvdXRHYXAuc20iLCJmeExheW91dEdhcC5tZCIsImZ4TGF5b3V0R2FwLmxnIiwiZnhMYXlvdXRHYXAueGwiLCJmeExheW91dEdhcC5sdC1zbSIsImZ4TGF5b3V0R2FwLmx0LW1kIiwiZnhMYXlvdXRHYXAubHQtbGciLCJmeExheW91dEdhcC5sdC14bCIsImZ4TGF5b3V0R2FwLmd0LXhzIiwiZnhMYXlvdXRHYXAuZ3Qtc20iLCJmeExheW91dEdhcC5ndC1tZCIsImZ4TGF5b3V0R2FwLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhBbGlnbl0sIFtmeEZsZXhBbGlnbi54c10sIFtmeEZsZXhBbGlnbi5zbV0sIFtmeEZsZXhBbGlnbi5tZF0sICBbZnhGbGV4QWxpZ24ubGddLCBbZnhGbGV4QWxpZ24ueGxdLCBbZnhGbGV4QWxpZ24ubHQtc21dLCBbZnhGbGV4QWxpZ24ubHQtbWRdLCAgW2Z4RmxleEFsaWduLmx0LWxnXSwgW2Z4RmxleEFsaWduLmx0LXhsXSwgW2Z4RmxleEFsaWduLmd0LXhzXSwgW2Z4RmxleEFsaWduLmd0LXNtXSwgIFtmeEZsZXhBbGlnbi5ndC1tZF0sIFtmeEZsZXhBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4RmxleEFsaWduIiwiZnhGbGV4QWxpZ24ueHMiLCJmeEZsZXhBbGlnbi5zbSIsImZ4RmxleEFsaWduLm1kIiwiZnhGbGV4QWxpZ24ubGciLCJmeEZsZXhBbGlnbi54bCIsImZ4RmxleEFsaWduLmx0LXNtIiwiZnhGbGV4QWxpZ24ubHQtbWQiLCJmeEZsZXhBbGlnbi5sdC1sZyIsImZ4RmxleEFsaWduLmx0LXhsIiwiZnhGbGV4QWxpZ24uZ3QteHMiLCJmeEZsZXhBbGlnbi5ndC1zbSIsImZ4RmxleEFsaWduLmd0LW1kIiwiZnhGbGV4QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1BcnJheU5hbWUsc2VsZWN0b3I6Iltmb3JtQXJyYXlOYW1lXSIsaW5wdXRzOlsiZm9ybUFycmF5TmFtZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk1hLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk1hKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm9wYy1tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJtdWx0aXBseSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8ZmllbGRzZXQgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBhcmd1bWVudHMtY29udGFpbmVyIiBmeExheW91dD0iY29sdW1uIiBmb3JtQXJyYXlOYW1lPSJhcmd1bWVudHMiPlxuICAgIDxzdHJvbmc+XG4gICAgICA8c3BhbiBjbGFzcz0iZmllbGRzLWxhYmVsIj57eyBcJ2dhdGV3YXkucnBjLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvc3Ryb25nPlxuICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgKm5nRm9yPSJsZXQgYXJndW1lbnRGb3JtR3JvdXAgb2YgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhcmd1bWVudHNcJylbXCdjb250cm9sc1wnXTsgbGV0IGkgPSBpbmRleCIgW2Zvcm1Hcm91cF09ImFyZ3VtZW50Rm9ybUdyb3VwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB0eXBlLWNvbnRhaW5lciIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdmFsdWUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLklOVEVHRVIiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iaW50ZWdlciIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5ET1VCTEUiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iZG91YmxlIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0idHJ1ZSI+dHJ1ZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iZmFsc2UiPmZhbHNlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXJndW1lbnRGb3JtR3JvdXAuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQXJndW1lbnQoaSkiXG4gICAgICAgICAgICAgIGNsYXNzPSJ0Yi1ib3gtYnV0dG9uIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICBmeEZsZXhBbGlnbj0ic3RhcnQiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGRBcmd1bWVudCgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWFyZ3VtZW50XCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9maWVsZHNldD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFyZ3VtZW50cy1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC50eXBlLWNvbnRhaW5lcnt3aWR0aDo0MCV9Omhvc3QgLnZhbHVlLWNvbnRhaW5lcnt3aWR0aDo1MCV9Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyBFYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5vbkNoYW5nZT1lPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXF1ZXN0VG9waWNFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVG9waWNFeHByZXNzaW9uOlt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUaW1lb3V0Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLm1pbigxMCksdWUucGF0dGVybihMdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVXaXRoUmVzcG9uc2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWxpZD9udWxsOntycGNQYXJhbWV0ZXJzRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlLndpdGhSZXNwb25zZSl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW9ic2VydmVXaXRoUmVzcG9uc2UoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ3aXRoUmVzcG9uc2UiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+dGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX10b2dnbGVSZXNwb25zZUZpZWxkcyhlKXtjb25zdCB0PXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInJlc3BvbnNlVG9waWNFeHByZXNzaW9uIiksbj10aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKTtlPyh0LmVuYWJsZSgpLG4uZW5hYmxlKCkpOih0LmRpc2FibGUoKSxuLmRpc2FibGUoKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+RWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXF1ZXN0LyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXJnaW4iIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSIgZm9ybUNvbnRyb2xOYW1lPSJ3aXRoUmVzcG9uc2UiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMud2l0aFJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9InNlbnNvci8ke2RldmljZU5hbWV9L3Jlc3BvbnNlLyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd3aXRoUmVzcG9uc2VcJyk/LnZhbHVlIj5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VUaW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9IjEwMDAwIiBtaW49IjEwIiBzdGVwPSIxIi8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAubWF0LW1kYy1zbGlkZS10b2dnbGUubWFyZ2lue21hcmdpbi1ib3R0b206MTBweDttYXJnaW4tbGVmdDoxMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkVhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9ImVjaG8iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0ic2Vuc29yLyR7ZGV2aWNlTmFtZX0vcmVxdWVzdC8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWFyZ2luIiAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3dpdGhSZXNwb25zZVwnKT8udmFsdWUiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXNwb25zZS8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIxMDAwMCIgbWluPSIxMCIgc3RlcD0iMSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L25nLWNvbnRhaW5lcj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBxYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNFZGl0YWJsZURhdGFUeXBlcz10YSx0aGlzLk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcD16dCx0aGlzLm1vZGJ1c0RhdGFUeXBlcz1PYmplY3QudmFsdWVzKGVhKSx0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcz1bNSw2LDE1LDE2XSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVszLDQsNiwxNl0sdGhpcy5yZWFkRnVuY3Rpb25Db2Rlcz1bMSwyLDMsNF0sdGhpcy5iaXRzRnVuY3Rpb25Db2Rlcz1bLi4udGhpcy5yZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLndyaXRlRnVuY3Rpb25Db2Rlc10sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2VhLkJZVEVTLFt1ZS5yZXF1aXJlZF1dLGZ1bmN0aW9uQ29kZTpbdGhpcy5kZWZhdWx0RnVuY3Rpb25Db2Rlc1swXSxbdWUucmVxdWlyZWRdXSx2YWx1ZTpbe3ZhbHVlOiIiLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxhZGRyZXNzOltudWxsLFt1ZS5yZXF1aXJlZF1dLG9iamVjdHNDb3VudDpbMSxbdWUucmVxdWlyZWRdXX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2Rlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWUpLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpLHRoaXMub2JzZXJ2ZUtleURhdGFUeXBlKCksdGhpcy5vYnNlcnZlRnVuY3Rpb25Db2RlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlS2V5RGF0YVR5cGUoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoIm9iamVjdHNDb3VudCIpLnBhdGNoVmFsdWUobmFbZV0se2VtaXRFdmVudDohMX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlKX0pKX1vYnNlcnZlRnVuY3Rpb25Db2RlKCl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgiZnVuY3Rpb25Db2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWx1ZUVuYWJsaW5nKGUpKSl9dXBkYXRlVmFsdWVFbmFibGluZyhlKXt0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyhlKT90aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ2YWx1ZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6KHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInZhbHVlIikuc2V0VmFsdWUobnVsbCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgidmFsdWUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSl9dXBkYXRlRnVuY3Rpb25Db2RlcyhlKXt0aGlzLmZ1bmN0aW9uQ29kZXM9ZT09PWVhLkJJVFM/dGhpcy5iaXRzRnVuY3Rpb25Db2Rlczp0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzLHRoaXMuZnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJmdW5jdGlvbkNvZGUiKS52YWx1ZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUodGhpcy5mdW5jdGlvbkNvZGVzWzBdLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cWEsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnFhKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy1yZXNwb25zZS1yZWFkaW5nXCcgfCB0cmFuc2xhdGUgfX08YnI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9uc1wnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNEYXRhVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IHR5cGUgfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZnVuY3Rpb25Db2RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29kZSBvZiBmdW5jdGlvbkNvZGVzIiBbdmFsdWVdPSJjb2RlIj57eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iNTAwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImFkZHJlc3MiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYWRkcmVzcy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FkZHJlc3NcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm9iamVjdHNDb3VudFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICBtaW49IjEiXG4gICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJ3cml0ZUZ1bmN0aW9uQ29kZXMuaW5jbHVkZXMocnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdmdW5jdGlvbkNvZGVcJykudmFsdWUpIiBmeEZsZXggZnhMYXlvdXQ9InJvdyI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMTAwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndmFsdWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIlxuICAgICAgPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5xYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggbm8tcGFkZGluZy10b3AgaGludC1jb250YWluZXIiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtcmVzcG9uc2UtcmVhZGluZ1wnIHwgdHJhbnNsYXRlIH19PGJyPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtd3JpdGluZy1mdW5jdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzRGF0YVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyB0eXBlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmZ1bmN0aW9uQ29kZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImZ1bmN0aW9uQ29kZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvZGUgb2YgZnVuY3Rpb25Db2RlcyIgW3ZhbHVlXT0iY29kZSI+e3sgTW9kYnVzRnVuY3Rpb25Db2RlVHJhbnNsYXRpb25zTWFwLmdldChjb2RlKSB8IHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjUwMDAwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJhZGRyZXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmFkZHJlc3MtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnYWRkcmVzc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5vYmplY3RzQ291bnRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9Im51bWJlciJcbiAgICAgICAgbWluPSIxIlxuICAgICAgICBtYXg9IjUwMDAwIlxuICAgICAgICBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJvYmplY3RzQ291bnQiXG4gICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgIFtyZWFkb25seV09IiFNb2RidXNFZGl0YWJsZURhdGFUeXBlcy5pbmNsdWRlcyhycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpIlxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0id3JpdGVGdW5jdGlvbkNvZGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnZnVuY3Rpb25Db2RlXCcpLnZhbHVlKSIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjEwMCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciJcbiAgICAgID5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBEYXtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMudXRpbHM9bix0aGlzLmNkPWEsdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPW8sdGhpcy5jb250ZW50VHlwZXM9Ryx0aGlzLlJQQ0NvbW1hbmRzPVsiUGluZyIsIlN0YXRzIiwiRGV2aWNlcyIsIlVwZGF0ZSIsIlZlcnNpb24iLCJSZXN0YXJ0IiwiUmVib290Il0sdGhpcy50ZW1wbGF0ZXM9W10sdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy50eXBlc1dpdGhVcGRhdGVkUGFyYW1zPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVUZW1wbGF0ZXMoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpLGRhdGFMb2FkaW5nOigpPT57fX19LHRoaXMuY29tbWFuZEZvcm09dGhpcy5mYi5ncm91cCh7Y29tbWFuZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx0aW1lOls2MCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV0scGFyYW1zOlsie30iLFtJdF1dLHJlc3VsdDpbbnVsbF19KX1uZ09uSW5pdCgpe2lmKHRoaXMuaXNDb25uZWN0b3I9dGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3IsdGhpcy5pc0Nvbm5lY3Rvcil7dGhpcy5jb25uZWN0b3JUeXBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpLmNvbm5lY3Rvcl9ycGMudmFsdWUudHlwZTtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udGFyZ2V0RGV2aWNlSWQsZW50aXR5TmFtZToiQ29ubmVjdG9yIixhdHRyaWJ1dGVzOlt7bmFtZTpgJHt0aGlzLmNvbm5lY3RvclR5cGV9X3RlbXBsYXRlYH1dfV07dGhpcy5jdHguc3Vic2NyaXB0aW9uQXBpLmNyZWF0ZVN1YnNjcmlwdGlvbkZyb21JbmZvKEEubGF0ZXN0LGUsdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zLCExLCEwKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnN1YnNjcmlwdGlvbj1lfSkpfWVsc2UgdGhpcy5jb21tYW5kRm9ybS5nZXQoImNvbW1hbmQiKS5zZXRWYWx1ZSh0aGlzLlJQQ0NvbW1hbmRzWzBdKX1zZW5kQ29tbWFuZChlKXt0aGlzLnJlc3VsdFRpbWU9bnVsbDtjb25zdCB0PWV8fHRoaXMuY29tbWFuZEZvcm0udmFsdWUsbj10aGlzLmlzQ29ubmVjdG9yP2Ake3RoaXMuY29ubmVjdG9yVHlwZX1fYDoiZ2F0ZXdheV8iLGE9dGhpcy5pc0Nvbm5lY3Rvcj90aGlzLmdldENvbW1hbmRGcm9tUGFyYW1zQnlUeXBlKHQucGFyYW1zKTp0LmNvbW1hbmQudG9Mb3dlckNhc2UoKSxvPXQucGFyYW1zO3RoaXMuY3R4LmNvbnRyb2xBcGkuc2VuZFR3b1dheUNvbW1hbmQobithLG8sdC50aW1lKS5zdWJzY3JpYmUoe25leHQ6ZT0+e3RoaXMucmVzdWx0VGltZT0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLmNvbW1hbmRGb3JtLmdldCgicmVzdWx0Iikuc2V0VmFsdWUoSlNPTi5zdHJpbmdpZnkoZSkpfSxlcnJvcjplPT57dGhpcy5yZXN1bHRUaW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGNvbnNvbGUuZXJyb3IoZSksdGhpcy5jb21tYW5kRm9ybS5nZXQoInJlc3VsdCIpLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGUuZXJyb3IpKX19KX1nZXRDb21tYW5kRnJvbVBhcmFtc0J5VHlwZShlKXtzd2l0Y2godGhpcy5jb25uZWN0b3JUeXBlKXtjYXNlIF90Lk1RVFQ6Y2FzZSBfdC5GVFA6Y2FzZSBfdC5TTk1QOmNhc2UgX3QuUkVTVDpjYXNlIF90LlJFUVVFU1Q6cmV0dXJuIGUubWV0aG9kRmlsdGVyO2Nhc2UgX3QuTU9EQlVTOnJldHVybiBlLnRhZztjYXNlIF90LkJBQ05FVDpjYXNlIF90LkNBTjpjYXNlIF90Lk9QQ1VBOnJldHVybiBlLm1ldGhvZDtjYXNlIF90LkJMRTpjYXNlIF90Lk9DUFA6Y2FzZSBfdC5TT0NLRVQ6Y2FzZSBfdC5YTVBQOnJldHVybiBlLm1ldGhvZFJQQztkZWZhdWx0OnJldHVybiBlLmNvbW1hbmR9fXNhdmVUZW1wbGF0ZSgpe3RoaXMuZGlhbG9nLm9wZW4oTmEse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntjb25maWc6dGhpcy5jb21tYW5kRm9ybS52YWx1ZS5wYXJhbXMsdGVtcGxhdGVzOnRoaXMudGVtcGxhdGVzfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57aWYoZSl7Y29uc3QgdD17bmFtZTplLGNvbmZpZzp0aGlzLmNvbW1hbmRGb3JtLnZhbHVlLnBhcmFtc30sbj10aGlzLnRlbXBsYXRlcyxhPW4uZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO2E+LTEmJm4uc3BsaWNlKGEsMSksbi5wdXNoKHQpO2NvbnN0IG89YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5Om8sdmFsdWU6bn1dKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9fSkpfXVzZVRlbXBsYXRlKGUpe3RoaXMuY29tbWFuZEZvcm0uZ2V0KCJwYXJhbXMiKS5wYXRjaFZhbHVlKGUuY29uZmlnKX11cGRhdGVUZW1wbGF0ZXMoKXt0aGlzLnRlbXBsYXRlcz10aGlzLnN1YnNjcmlwdGlvbi5kYXRhWzBdLmRhdGFbMF1bMV0ubGVuZ3RoP0pTT04ucGFyc2UodGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhWzBdWzFdKTpbXSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVFcnJvcihlKXtjb25zdCB0PXRoaXMudXRpbHMucGFyc2VFeGNlcHRpb24oZSk7bGV0IG49dC5uYW1lO3QubWVzc2FnZSYmKG4rPSI6ICIrdC5tZXNzYWdlKSxjb25zb2xlLmVycm9yKG4pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RGEsZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpEYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBmeExheW91dD0iY29sdW1uIiBmeEZsZXggW25nQ2xhc3NdPSJ7XCdib3JkZXJcJzogaXNDb25uZWN0b3J9Ij5cbiAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dC5sdC1zbT0iY29sdW1uIiBjbGFzcz0iY29tbWFuZC1mb3JtIiBmeExheW91dEdhcD0iMTBweCIgW2Zvcm1Hcm91cF09ImNvbW1hbmRGb3JtIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSIhaXNDb25uZWN0b3I7IGVsc2UgY29ubmVjdG9yRm9ybSI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29tbWFuZCBvZiBSUENDb21tYW5kcyIgW3ZhbHVlXT0iY29tbWFuZCI+XG4gICAgICAgICAgICB7eyBjb21tYW5kIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LW1zXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiLz5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZEZvcm0uZ2V0KFwndGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5pbnZhbGlkIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNlbmRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb25uZWN0b3JGb3JtPlxuICAgICAgPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yXG4gICAgICAgICpuZ0lmPSIhdHlwZXNXaXRoVXBkYXRlZFBhcmFtcy5oYXMoY29ubmVjdG9yVHlwZSkgZWxzZSB1cGRhdGVkUGFyYW1ldGVycyJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiXG4gICAgICAgIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSJcbiAgICAgICAgKHNlbmRDb21tYW5kKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgKHNhdmVUZW1wbGF0ZSk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgLz5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlZFBhcmFtZXRlcnM+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InJwYy1wYXJhbWV0ZXJzIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0Yi1mb3JtLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRpdGxlXCcgfCB0cmFuc2xhdGU6IHt0eXBlOiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlcy5nZXQoY29ubmVjdG9yVHlwZSl9IH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1xdHQtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NUVRUIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgICAgPHRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuT1BDVUEiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUtYWN0aW9ucyIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2F2ZVRlbXBsYXRlKCkiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmdldChcJ3BhcmFtc1wnKS5pbnZhbGlkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxzZWN0aW9uIGNsYXNzPSJyZXN1bHQtYmxvY2siIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPHNwYW4+e3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXJlc3VsdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8ZGl2ICpuZ0lmPSJyZXN1bHRUaW1lIiBjbGFzcz0icmVzdWx0LXRpbWUiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+c2NoZWR1bGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyByZXN1bHRUaW1lIHwgZGF0ZTogXCd5eXl5L01NL2RkIEhIOm1tOnNzXCcgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG4gICAgPHRiLWpzb24tY29udGVudCBbY29udGVudFR5cGVdPSJjb250ZW50VHlwZXMuSlNPTiIgcmVhZG9ubHk9InRydWUiIGZvcm1Db250cm9sTmFtZT0icmVzdWx0Ij48L3RiLWpzb24tY29udGVudD5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG48dGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIGZ4RmxleD0iMzAiICpuZ0lmPSJpc0Nvbm5lY3RvciIgY2xhc3M9ImJvcmRlciIgW3JwY1RlbXBsYXRlc109InRlbXBsYXRlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N0eF09ImN0eCIgW2Nvbm5lY3RvclR5cGVdPSJjb25uZWN0b3JUeXBlIiAodXNlVGVtcGxhdGUpPSJ1c2VUZW1wbGF0ZSgkZXZlbnQpIj5cbjwvdGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3BhZGRpbmc6MCA1cHh9Omhvc3Q+KntoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfTpob3N0PnRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlczpsYXN0LWNoaWxke21hcmdpbi1sZWZ0OjEwcHh9Omhvc3QgLmNvbW1hbmQtZm9ybXtmbGV4LXdyYXA6bm93cmFwO3BhZGRpbmc6MCA1cHggNXB4fTpob3N0IC5jb21tYW5kLWZvcm0+YnV0dG9ue21hcmdpbi10b3A6MTBweH06aG9zdCAucnBjLXBhcmFtZXRlcnN7d2lkdGg6MTAwJX06aG9zdCAucmVzdWx0LWJsb2Nre3BhZGRpbmc6MCA1cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFue2ZvbnQtd2VpZ2h0OjYwMDtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjI1cHg7ei1pbmRleDo1O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAucmVzdWx0LWJsb2NrPnNwYW4gLnJlc3VsdC10aW1lIHNwYW57cGFkZGluZy1sZWZ0OjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jayB0Yi1qc29uLWNvbnRlbnR7ZmxleDoxfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0NsYXNzLHNlbGVjdG9yOiJbbmdDbGFzc10iLGlucHV0czpbImNsYXNzIiwibmdDbGFzcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6c3QuSnNvbkNvbnRlbnRDb21wb25lbnQsc2VsZWN0b3I6InRiLWpzb24tY29udGVudCIsaW5wdXRzOlsibGFiZWwiLCJjb250ZW50VHlwZSIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwidGJQbGFjZWhvbGRlciIsImhpZGVUb29sYmFyIiwicmVhZG9ubHkiLCJ2YWxpZGF0ZUNvbnRlbnQiLCJ2YWxpZGF0ZU9uQ2hhbmdlIiwicmVxdWlyZWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOk1hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbW9kYnVzLXJwYy1wYXJhbWV0ZXJzIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIiwiY3R4IiwicnBjVGVtcGxhdGVzIl0sb3V0cHV0czpbInNhdmVUZW1wbGF0ZSIsInVzZVRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIl0sb3V0cHV0czpbInNlbmRDb21tYW5kIiwic2F2ZVRlbXBsYXRlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb21wb25lbnQiLERhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkRhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgZnhGbGV4IFtuZ0NsYXNzXT0ie1wnYm9yZGVyXCc6IGlzQ29ubmVjdG9yfSI+XG4gIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtc209ImNvbHVtbiIgY2xhc3M9ImNvbW1hbmQtZm9ybSIgZnhMYXlvdXRHYXA9IjEwcHgiIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIWlzQ29ubmVjdG9yOyBlbHNlIGNvbm5lY3RvckZvcm0iPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgUlBDQ29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQiPlxuICAgICAgICAgICAge3sgY29tbWFuZCB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1tc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InRpbWUiIHR5cGU9Im51bWJlciIgbWluPSIxIi8+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRGb3JtLmdldChcJ3RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29ubmVjdG9yRm9ybT5cbiAgICAgIDx0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3RvclxuICAgICAgICAqbmdJZj0iIXR5cGVzV2l0aFVwZGF0ZWRQYXJhbXMuaGFzKGNvbm5lY3RvclR5cGUpIGVsc2UgdXBkYXRlZFBhcmFtZXRlcnMiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIlxuICAgICAgICBbY29ubmVjdG9yVHlwZV09ImNvbm5lY3RvclR5cGUiXG4gICAgICAgIChzZW5kQ29tbWFuZCk9InNlbmRDb21tYW5kKCkiXG4gICAgICAgIChzYXZlVGVtcGxhdGUpPSJzYXZlVGVtcGxhdGUoKSJcbiAgICAgIC8+XG4gICAgICA8bmctdGVtcGxhdGUgI3VwZGF0ZWRQYXJhbWV0ZXJzPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJycGMtcGFyYW1ldGVycyI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGItZm9ybS1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50aXRsZVwnIHwgdHJhbnNsYXRlOiB7dHlwZTogZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXMuZ2V0KGNvbm5lY3RvclR5cGUpfSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NT0RCVVMiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRlbXBsYXRlLWFjdGlvbnMiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zYXZlLXRlbXBsYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uZ2V0KFwncGFyYW1zXCcpLmludmFsaWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8c2VjdGlvbiBjbGFzcz0icmVzdWx0LWJsb2NrIiBbZm9ybUdyb3VwXT0iY29tbWFuZEZvcm0iPlxuICAgIDxzcGFuPnt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1yZXN1bHRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPGRpdiAqbmdJZj0icmVzdWx0VGltZSIgY2xhc3M9InJlc3VsdC10aW1lIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnNjaGVkdWxlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgcmVzdWx0VGltZSB8IGRhdGU6IFwneXl5eS9NTS9kZCBISDptbTpzc1wnIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9zcGFuPlxuICAgIDx0Yi1qc29uLWNvbnRlbnQgW2NvbnRlbnRUeXBlXT0iY29udGVudFR5cGVzLkpTT04iIHJlYWRvbmx5PSJ0cnVlIiBmb3JtQ29udHJvbE5hbWU9InJlc3VsdCI+PC90Yi1qc29uLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcyBmeEZsZXg9IjMwIiAqbmdJZj0iaXNDb25uZWN0b3IiIGNsYXNzPSJib3JkZXIiIFtycGNUZW1wbGF0ZXNdPSJ0ZW1wbGF0ZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdHhdPSJjdHgiIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSIgKHVzZVRlbXBsYXRlKT0idXNlVGVtcGxhdGUoJGV2ZW50KSI+XG48L3RiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcz5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztwYWRkaW5nOjAgNXB4fTpob3N0Pip7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b306aG9zdD50Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXM6bGFzdC1jaGlsZHttYXJnaW4tbGVmdDoxMHB4fTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcDtwYWRkaW5nOjAgNXB4IDVweH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLnJwYy1wYXJhbWV0ZXJze3dpZHRoOjEwMCV9Omhvc3QgLnJlc3VsdC1ibG9ja3twYWRkaW5nOjAgNXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxfTpob3N0IC5yZXN1bHQtYmxvY2s+c3Bhbntmb250LXdlaWdodDo2MDA7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2s+c3BhbiAucmVzdWx0LXRpbWV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDoyNXB4O3otaW5kZXg6NTtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZSBzcGFue3BhZGRpbmctbGVmdDoxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2sgdGItanNvbi1jb250ZW50e2ZsZXg6MX06aG9zdCAuYm9yZGVye3BhZGRpbmc6MTZweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5VdGlsc1NlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTtjbGFzcyBQYSBleHRlbmRzIFB7Y29uc3RydWN0b3IoZSx0LG4sYSxvKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5nYXRld2F5TmFtZT10aGlzLmRhdGEuZ2F0ZXdheU5hbWUsdGhpcy5nYXRld2F5Q29udHJvbD10aGlzLmZiLmNvbnRyb2woIiIpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX10dXJuT2ZmKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoITApfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6UGEsc2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbicsZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fXZhciBHYTtlKCJHYXRld2F5UmVtb3RlQ29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCIsUGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pLGZ1bmN0aW9uKGUpe2UudGxzPSJ0bHMiLGUuYWNjZXNzVG9rZW49ImFjY2Vzc1Rva2VuIn0oR2F8fChHYT17fSkpO2NvbnN0IE9hPSJjb25maWd1cmF0aW9uX2RyYWZ0cyIsUmE9IlJlbW90ZUxvZ2dpbmdMZXZlbCIsVmE9bmV3IE1hcChbW0dhLnRscywiZ2F0ZXdheS5zZWN1cml0eS10eXBlcy50bHMiXSxbR2EuYWNjZXNzVG9rZW4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl1dKTt2YXIgQmEsVWE7IWZ1bmN0aW9uKGUpe2Uubm9uZT0iTk9ORSIsZS5jcml0aWNhbD0iQ1JJVElDQUwiLGUuZXJyb3I9IkVSUk9SIixlLndhcm5pbmc9IldBUk5JTkciLGUuaW5mbz0iSU5GTyIsZS5kZWJ1Zz0iREVCVUcifShCYXx8KEJhPXt9KSksZnVuY3Rpb24oZSl7ZS5tZW1vcnk9Im1lbW9yeSIsZS5maWxlPSJmaWxlIn0oVWF8fChVYT17fSkpO2NvbnN0IF9hPW5ldyBNYXAoW1tVYS5tZW1vcnksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtVYS5maWxlLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl1dKTt2YXIgSGE7IWZ1bmN0aW9uKGUpe2UubXF0dD0iTVFUVCIsZS5tb2RidXM9Ik1vZGJ1cyIsZS5vcGN1YT0iT1BDLVVBIixlLmJsZT0iQkxFIixlLnJlcXVlc3Q9IlJlcXVlc3QiLGUuY2FuPSJDQU4iLGUuYmFjbmV0PSJCQUNuZXQiLGUuY3VzdG9tPSJDdXN0b20ifShIYXx8KEhhPXt9KSk7Y29uc3QgemE9e2NvbmZpZzp7fSxuYW1lOiIiLGNvbmZpZ1R5cGU6bnVsbCxlbmFibGVkOiExfTtmdW5jdGlvbiBXYShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZS52YWx1ZSk9PT1KU09OLnN0cmluZ2lmeSh7fSk/e3ZhbGlkSlNPTjohMH06bnVsbH1jb25zdCBqYT0nW2xvZ2dlcnNdfX1rZXlzPXJvb3QsIHNlcnZpY2UsIGNvbm5lY3RvciwgY29udmVydGVyLCB0Yl9jb25uZWN0aW9uLCBzdG9yYWdlLCBleHRlbnNpb259fVtoYW5kbGVyc119fWtleXM9Y29uc29sZUhhbmRsZXIsIHNlcnZpY2VIYW5kbGVyLCBjb25uZWN0b3JIYW5kbGVyLCBjb252ZXJ0ZXJIYW5kbGVyLCB0Yl9jb25uZWN0aW9uSGFuZGxlciwgc3RvcmFnZUhhbmRsZXIsIGV4dGVuc2lvbkhhbmRsZXJ9fVtmb3JtYXR0ZXJzXX19a2V5cz1Mb2dGb3JtYXR0ZXJ9fVtsb2dnZXJfcm9vdF19fWxldmVsPUVSUk9SfX1oYW5kbGVycz1jb25zb2xlSGFuZGxlcn19W2xvZ2dlcl9jb25uZWN0b3JdfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz1jb25uZWN0b3JIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1jb25uZWN0b3J9fVtsb2dnZXJfc3RvcmFnZV19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPXN0b3JhZ2VIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1zdG9yYWdlfX1bbG9nZ2VyX3RiX2Nvbm5lY3Rpb25dfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz10Yl9jb25uZWN0aW9uSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9dGJfY29ubmVjdGlvbn19W2xvZ2dlcl9zZXJ2aWNlXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9c2VydmljZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPXNlcnZpY2V9fVtsb2dnZXJfY29udmVydGVyXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9Y29udmVydGVySGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9Y29udmVydGVyfX1bbG9nZ2VyX2V4dGVuc2lvbl19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPWNvbm5lY3RvckhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPWV4dGVuc2lvbn19W2hhbmRsZXJfY29uc29sZUhhbmRsZXJdfX1jbGFzcz1TdHJlYW1IYW5kbGVyfX1sZXZlbD17RVJST1J9fX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1hcmdzPShzeXMuc3Rkb3V0LCl9fVtoYW5kbGVyX2Nvbm5lY3RvckhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWNvbm5lY3Rvci5sb2ciLCAiZCIsIDEsIDcsKX19W2hhbmRsZXJfc3RvcmFnZUhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXN0b3JhZ2UubG9nIiwgImQiLCAxLCA3LCl9fVtoYW5kbGVyX3NlcnZpY2VIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31zZXJ2aWNlLmxvZyIsICJkIiwgMSwgNywpfX1baGFuZGxlcl9jb252ZXJ0ZXJIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31jb252ZXJ0ZXIubG9nIiwgImQiLCAxLCAzLCl9fVtoYW5kbGVyX2V4dGVuc2lvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWV4dGVuc2lvbi5sb2ciLCAiZCIsIDEsIDMsKX19W2hhbmRsZXJfdGJfY29ubmVjdGlvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXRiX2Nvbm5lY3Rpb24ubG9nIiwgImQiLCAxLCAzLCl9fVtmb3JtYXR0ZXJfTG9nRm9ybWF0dGVyXX19Zm9ybWF0PSIlKGFzY3RpbWUpcyAtICUobGV2ZWxuYW1lKXMgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiIH19ZGF0ZWZtdD0iJVktJW0tJWQgJUg6JU06JVMiJztmdW5jdGlvbiBLYShlKXtyZXR1cm4gZS5yZXBsYWNlKCJfIiwiIikucmVwbGFjZSgiLSIsIiIpLnJlcGxhY2UoL15ccyt8XHMrL2csIiIpLnRvTG93ZXJDYXNlKCkrIi5qc29uIn1mdW5jdGlvbiAkYShlLHQpe3JldHVybiBqYS5yZXBsYWNlKC97RVJST1J9L2csZSkucmVwbGFjZSgvey5cL2xvZ3NcL30vZyx0KX1mdW5jdGlvbiBZYShlKXtyZXR1cm57aWQ6ZSxlbnRpdHlUeXBlOkkuREVWSUNFfX1mdW5jdGlvbiBRYShlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwidGhpbmdzYm9hcmQiKSYmKHQuaG9zdD1lLnRoaW5nc2JvYXJkLmhvc3QsdC5wb3J0PWUudGhpbmdzYm9hcmQucG9ydCx0LnJlbW90ZUNvbmZpZ3VyYXRpb249ZS50aGluZ3Nib2FyZC5yZW1vdGVDb25maWd1cmF0aW9uLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnRoaW5nc2JvYXJkLnNlY3VyaXR5LEdhLmFjY2Vzc1Rva2VuKT8odC5zZWN1cml0eVR5cGU9R2EuYWNjZXNzVG9rZW4sdC5hY2Nlc3NUb2tlbj1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuKToodC5zZWN1cml0eVR5cGU9R2EudGxzLHQuY2FDZXJ0UGF0aD1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmNhQ2VydCx0LnByaXZhdGVLZXlQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkucHJpdmF0ZUtleSx0LmNlcnRQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkuY2VydCkpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJzdG9yYWdlIikmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnN0b3JhZ2UsInR5cGUiKSYmKGUuc3RvcmFnZS50eXBlPT09VWEubWVtb3J5Pyh0LnN0b3JhZ2VUeXBlPVVhLm1lbW9yeSx0LnJlYWRSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudCx0Lm1heFJlY29yZHNDb3VudD1lLnN0b3JhZ2UubWF4X3JlY29yZHNfY291bnQpOmUuc3RvcmFnZS50eXBlPT09VWEuZmlsZSYmKHQuc3RvcmFnZVR5cGU9VWEuZmlsZSx0LmRhdGFGb2xkZXJQYXRoPWUuc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoLHQubWF4RmlsZXNDb3VudD1lLnN0b3JhZ2UubWF4X2ZpbGVfY291bnQsdC5yZWFkUmVjb3Jkc0NvdW50PWUuc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnQsdC5tYXhSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50KSksdH1mdW5jdGlvbiBKYShlKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpbi5lbmFibGVkfHwodFtuLm5hbWVdPXtjb25uZWN0b3I6bi5jb25maWdUeXBlLGNvbmZpZzpuLmNvbmZpZ30pO3JldHVybiB0fWZ1bmN0aW9uIFhhKGUpe2NvbnN0IHQ9e3RoaW5nc2JvYXJkOlphKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KWlmKG4uZW5hYmxlZCl7Y29uc3QgdD1uLmNvbmZpZ1R5cGU7QXJyYXkuaXNBcnJheShlW3RdKXx8KGVbdF09W10pO2NvbnN0IGE9e25hbWU6bi5uYW1lLGNvbmZpZzpuLmNvbmZpZ307ZVt0XS5wdXNoKGEpfX0odCxlLmNvbm5lY3RvcnMpLHR9ZnVuY3Rpb24gWmEoZSl7bGV0IHQ7dD1lLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3thY2Nlc3NUb2tlbjplLmFjY2Vzc1Rva2VufTp7Y2FDZXJ0OmUuY2FDZXJ0UGF0aCxwcml2YXRlS2V5OmUucHJpdmF0ZUtleVBhdGgsY2VydDplLmNlcnRQYXRofTtjb25zdCBuPXtob3N0OmUuaG9zdCxyZW1vdGVDb25maWd1cmF0aW9uOmUucmVtb3RlQ29uZmlndXJhdGlvbixwb3J0OmUucG9ydCxzZWN1cml0eTp0fTtsZXQgYTthPWUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/e3R5cGU6VWEubWVtb3J5LHJlYWRfcmVjb3Jkc19jb3VudDplLnJlYWRSZWNvcmRzQ291bnQsbWF4X3JlY29yZHNfY291bnQ6ZS5tYXhSZWNvcmRzQ291bnR9Ont0eXBlOlVhLmZpbGUsZGF0YV9mb2xkZXJfcGF0aDplLmRhdGFGb2xkZXJQYXRoLG1heF9maWxlX2NvdW50OmUubWF4RmlsZXNDb3VudCxtYXhfcmVhZF9yZWNvcmRzX2NvdW50OmUucmVhZFJlY29yZHNDb3VudCxtYXhfcmVjb3Jkc19wZXJfZmlsZTplLm1heFJlY29yZHNDb3VudH07Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBvZiBlLmNvbm5lY3RvcnMpaWYodC5lbmFibGVkKXtjb25zdCBlPXtjb25maWd1cmF0aW9uOkthKHQubmFtZSksbmFtZTp0Lm5hbWUsdHlwZTp0LmNvbmZpZ1R5cGV9O28ucHVzaChlKX1yZXR1cm57dGhpbmdzYm9hcmQ6bixjb25uZWN0b3JzOm8sc3RvcmFnZTphLGxvZ3M6d2luZG93LmJ0b2EoJGEoZS5yZW1vdGVMb2dnaW5nTGV2ZWwsZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncykpfX1jbGFzcyBlbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5lbGVtZW50UmVmPXQsdGhpcy51dGlscz1uLHRoaXMubmdab25lPWEsdGhpcy5mYj1vLHRoaXMud2luZG93PWksdGhpcy5kaWFsb2c9cix0aGlzLnRyYW5zbGF0ZT1zLHRoaXMuZGV2aWNlU2VydmljZT1sLHRoaXMuYXR0cmlidXRlU2VydmljZT1jLHRoaXMuaW1wb3J0RXhwb3J0PXAsdGhpcy5hbGlnbm1lbnQ9InJvdyIsdGhpcy5sYXlvdXRHYXA9IjVweCIsdGhpcy5zZWN1cml0eVR5cGVzPVZhLHRoaXMuZ2F0ZXdheUxvZ0xldmVscz1PYmplY3Qua2V5cyhCYSkubWFwKChlPT5CYVtlXSkpLHRoaXMuY29ubmVjdG9yVHlwZXM9T2JqZWN0LmtleXMoSGEpLHRoaXMuc3RvcmFnZVR5cGVzPV9hLHRoaXMudG9hc3RUYXJnZXRJZD0iZ2F0ZXdheS1jb25maWd1cmF0aW9uLXdpZGdldCIrdGhpcy51dGlscy5ndWlkKCksdGhpcy5pc1JlYWRPbmx5Rm9ybT0hMX1nZXQgY29ubmVjdG9ycygpe3JldHVybiB0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KCJjb25uZWN0b3JzIil9bmdPbkluaXQoKXt0aGlzLmluaXRXaWRnZXRTZXR0aW5ncyh0aGlzLmN0eC5zZXR0aW5ncyksdGhpcy5jdHguZGF0YXNvdXJjZXMmJnRoaXMuY3R4LmRhdGFzb3VyY2VzLmxlbmd0aCYmKHRoaXMuZGV2aWNlTmFtZUZvcm09dGhpcy5jdHguZGF0YXNvdXJjZXNbMF0ubmFtZSksdGhpcy5idWlsZEZvcm0oKSx0aGlzLmN0eC51cGRhdGVXaWRnZXRQYXJhbXMoKSx0aGlzLmZvcm1SZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuZm9ybVJlc2l6ZSQub2JzZXJ2ZSh0aGlzLmZvcm1Db250YWluZXJSZWYubmF0aXZlRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1SZXNpemUkJiZ0aGlzLmZvcm1SZXNpemUkLmRpc2Nvbm5lY3QoKSx0aGlzLnN1YnNjcmliZUdhdGV3YXkkLnVuc3Vic2NyaWJlKCksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQudW5zdWJzY3JpYmUoKX1pbml0V2lkZ2V0U2V0dGluZ3MoZSl7bGV0IHQ7dD1lLmdhdGV3YXlUaXRsZSYmZS5nYXRld2F5VGl0bGUubGVuZ3RoP3RoaXMudXRpbHMuY3VzdG9tVHJhbnNsYXRpb24oZS5nYXRld2F5VGl0bGUsZS5nYXRld2F5VGl0bGUpOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuZ2F0ZXdheSIpLHRoaXMuY3R4LndpZGdldFRpdGxlPXQsdGhpcy5pc1JlYWRPbmx5Rm9ybT0hIWUucmVhZE9ubHkmJmUucmVhZE9ubHksdGhpcy5hcmNoaXZlRmlsZU5hbWU9ZS5hcmNoaXZlRmlsZU5hbWU/Lmxlbmd0aD9lLmFyY2hpdmVGaWxlTmFtZToiZ2F0ZXdheUNvbmZpZ3VyYXRpb24iLHRoaXMuZ2F0ZXdheVR5cGU9ZS5nYXRld2F5VHlwZT8ubGVuZ3RoP2UuZ2F0ZXdheVR5cGU6IkdhdGV3YXkiLHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHM9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLmdhdGV3YXlOYW1lRXhpc3RzLGUuZ2F0ZXdheU5hbWVFeGlzdHMpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktZXhpc3RzIiksdGhpcy5zdWNjZXNzZnVsU2F2ZWQ9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLnN1Y2Nlc3NmdWxTYXZlLGUuc3VjY2Vzc2Z1bFNhdmUpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktc2F2ZWQiKSx0aGlzLnVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKX1yZXNpemUoKXt0aGlzLm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVXaWRnZXREaXNwbGF5aW5nKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpfXVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKXt0aGlzLmN0eC4kY29udGFpbmVyJiZ0aGlzLmN0eC4kY29udGFpbmVyWzBdLm9mZnNldFdpZHRoPD00MjU/KHRoaXMubGF5b3V0R2FwPSIwIix0aGlzLmFsaWdubWVudD0iY29sdW1uIik6KHRoaXMubGF5b3V0R2FwPSI1cHgiLHRoaXMuYWxpZ25tZW50PSJyb3ciKX1zYXZlQXR0cmlidXRlKGUsdCxuKXtjb25zdCBhPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoImdhdGV3YXkiKS52YWx1ZSxvPXtrZXk6ZSx2YWx1ZTp0fTtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKFlhKGEpLG4sW29dKX1jcmVhdGVDb25uZWN0b3IoZT16YSl7dGhpcy5jb25uZWN0b3JzLnB1c2godGhpcy5mYi5ncm91cCh7ZW5hYmxlZDpbZS5lbmFibGVkXSxjb25maWdUeXBlOltlLmNvbmZpZ1R5cGUsW3VlLnJlcXVpcmVkXV0sbmFtZTpbZS5uYW1lLFt1ZS5yZXF1aXJlZF1dLGNvbmZpZzpbZS5jb25maWcsW3VlLm51bGxWYWxpZGF0b3IsV2FdXX0pKX1nZXRGb3JtRmllbGQoZSl7cmV0dXJuIHRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoZSl9YnVpbGRGb3JtKCl7dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwPXRoaXMuZmIuZ3JvdXAoe2dhdGV3YXk6W251bGwsW11dLGFjY2Vzc1Rva2VuOltudWxsLFt1ZS5yZXF1aXJlZF1dLHNlY3VyaXR5VHlwZTpbR2EuYWNjZXNzVG9rZW5dLGhvc3Q6W3RoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFt1ZS5yZXF1aXJlZF1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZUNvbmZpZ3VyYXRpb246WyEwXSxjYUNlcnRQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L2NhLnBlbSJdLHByaXZhdGVLZXlQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L3ByaXZhdGVLZXkucGVtIl0sY2VydFBhdGg6WyIvZXRjL3RoaW5nc2JvYXJkLWdhdGV3YXkvY2VydGlmaWNhdGUucGVtIl0scmVtb3RlTG9nZ2luZ0xldmVsOltCYS5kZWJ1Z10scmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3M6WyIuL2xvZ3MvIixbdWUucmVxdWlyZWRdXSxzdG9yYWdlVHlwZTpbVWEubWVtb3J5XSxyZWFkUmVjb3Jkc0NvdW50OlsxMDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhSZWNvcmRzQ291bnQ6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heEZpbGVzQ291bnQ6WzUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhRm9sZGVyUGF0aDpbIi4vZGF0YS8iLFt1ZS5yZXF1aXJlZF1dLGNvbm5lY3RvcnM6dGhpcy5mYi5hcnJheShbXSl9KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQ9dGhpcy5nZXRGb3JtRmllbGQoInN0b3JhZ2VUeXBlIikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2U9PT1VYS5tZW1vcnk/KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZGlzYWJsZSgpLHRoaXMuZ2V0Rm9ybUZpZWxkKCJkYXRhRm9sZGVyUGF0aCIpLmRpc2FibGUoKSk6KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZW5hYmxlKCksdGhpcy5nZXRGb3JtRmllbGQoImRhdGFGb2xkZXJQYXRoIikuZW5hYmxlKCkpfSkpLHRoaXMuc3Vic2NyaWJlR2F0ZXdheSQ9dGhpcy5nZXRGb3JtRmllbGQoImdhdGV3YXkiKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57bnVsbCE9PWU/QWUoW3RoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyhlKS5waXBlKEVlKChlPT57dGhpcy5nZXRGb3JtRmllbGQoImFjY2Vzc1Rva2VuIikucGF0Y2hWYWx1ZShlLmNyZWRlbnRpYWxzSWQpfSkpKSwuLi50aGlzLmdldEF0dHJpYnV0ZXMoZSldKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLm1hcmtBc1ByaXN0aW5lKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpOnRoaXMuZ2V0Rm9ybUZpZWxkKCJhY2Nlc3NUb2tlbiIpLnBhdGNoVmFsdWUoIiIpfSkpfWdhdGV3YXlFeGlzdCgpe3RoaXMuY3R4LnNob3dFcnJvclRvYXN0KHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHMsInRvcCIsImxlZnQiLHRoaXMudG9hc3RUYXJnZXRJZCl9ZXhwb3J0Q29uZmlnKCl7Y29uc3QgZT10aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUsdD17fTt2YXIgbixhLG87dFsidGJfZ2F0ZXdheS55YW1sIl09ZnVuY3Rpb24oZSl7bGV0IHQ7dD0idGhpbmdzYm9hcmQ6XG4iLHQrPSIgIGhvc3Q6ICIrZS5ob3N0KyJcbiIsdCs9IiAgcmVtb3RlQ29uZmlndXJhdGlvbjogIitlLnJlbW90ZUNvbmZpZ3VyYXRpb24rIlxuIix0Kz0iICBwb3J0OiAiK2UucG9ydCsiXG4iLHQrPSIgIHNlY3VyaXR5OlxuIixlLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3QrPSIgICAgYWNjZXNzLXRva2VuOiAiK2UuYWNjZXNzVG9rZW4rIlxuIjoodCs9IiAgICBjYV9jZXJ0OiAiK2UuY2FDZXJ0UGF0aCsiXG4iLHQrPSIgICAgcHJpdmF0ZUtleTogIitlLnByaXZhdGVLZXlQYXRoKyJcbiIsdCs9IiAgICBjZXJ0OiAiK2UuY2VydFBhdGgrIlxuIiksdCs9InN0b3JhZ2U6XG4iLGUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/KHQrPSIgIHR5cGU6IG1lbW9yeVxuIix0Kz0iICByZWFkX3JlY29yZHNfY291bnQ6ICIrZS5yZWFkUmVjb3Jkc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlY29yZHNfY291bnQ6ICIrZS5tYXhSZWNvcmRzQ291bnQrIlxuIik6KHQrPSIgIHR5cGU6IGZpbGVcbiIsdCs9IiAgZGF0YV9mb2xkZXJfcGF0aDogIitlLmRhdGFGb2xkZXJQYXRoKyJcbiIsdCs9IiAgbWF4X2ZpbGVfY291bnQ6ICIrZS5tYXhGaWxlc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlYWRfcmVjb3Jkc19jb3VudDogIitlLnJlYWRSZWNvcmRzQ291bnQrIlxuIix0Kz0iICBtYXhfcmVjb3Jkc19wZXJfZmlsZTogIitlLm1heFJlY29yZHNDb3VudCsiXG4iKSx0Kz0iY29ubmVjdG9yczpcbiI7Zm9yKGNvbnN0IG4gb2YgZS5jb25uZWN0b3JzKW4uZW5hYmxlZCYmKHQrPSIgIC1cbiIsdCs9IiAgICBuYW1lOiAiK24ubmFtZSsiXG4iLHQrPSIgICAgdHlwZTogIituLmNvbmZpZ1R5cGUrIlxuIix0Kz0iICAgIGNvbmZpZ3VyYXRpb246ICIrS2Eobi5uYW1lKSsiXG4iKTtyZXR1cm4gdH0oZSksZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KW4uZW5hYmxlZCYmKGVbS2Eobi5uYW1lKV09SlNPTi5zdHJpbmdpZnkobi5jb25maWcpKX0odCxlLmNvbm5lY3RvcnMpLG49dCxhPWUucmVtb3RlTG9nZ2luZ0xldmVsLG89ZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncyxuWyJsb2dzLmNvbmYiXT0kYShhLG8pLHRoaXMuaW1wb3J0RXhwb3J0LmV4cG9ydEpTWmlwKHQsdGhpcy5hcmNoaXZlRmlsZU5hbWUpLHRoaXMuc2F2ZUF0dHJpYnV0ZShSYSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUucmVtb3RlTG9nZ2luZ0xldmVsLnRvVXBwZXJDYXNlKCksTC5TSEFSRURfU0NPUEUpfWFkZE5ld0Nvbm5lY3Rvcigpe3RoaXMuY3JlYXRlQ29ubmVjdG9yKCl9cmVtb3ZlQ29ubmVjdG9yKGUpe2U+LTEmJih0aGlzLmNvbm5lY3RvcnMucmVtb3ZlQXQoZSksdGhpcy5jb25uZWN0b3JzLm1hcmtBc0RpcnR5KCkpfW9wZW5Db25maWdEaWFsb2coZSx0LG4sYSl7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpKSx0aGlzLmRpYWxvZy5vcGVuKFFlLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7anNvblZhbHVlOm4scmVxdWlyZWQ6ITAsdGl0bGU6dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS50aXRsZS1jb25uZWN0b3JzLWpzb24iLHt0eXBlTmFtZTphfSl9fSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGU9PntlJiYodGhpcy5jb25uZWN0b3JzLmF0KHQpLmdldCgiY29uZmlnIikucGF0Y2hWYWx1ZShlKSx0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzKCkpfSkpfWNyZWF0ZUNvbm5lY3Rvck5hbWUoZSx0LG49MCl7Y29uc3QgYT1uP3Qrbjp0O3JldHVybi0xPT09ZS5maW5kSW5kZXgoKGU9PmUubmFtZT09PWEpKT9hOnRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShlLHQsKytuKX12YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sYT0wKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3QgaT0wPT09YT90OnQrYTtvIT09biYmZVtvXS5uYW1lPT09aSYmdGhpcy52YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sKythKX1yZXR1cm4gMD09PWE/dDp0K2F9Y2hhbmdlQ29ubmVjdG9yVHlwZShlKXtpZighZS5nZXQoIm5hbWUiKS52YWx1ZSl7Y29uc3QgdD1lLmdldCgiY29uZmlnVHlwZSIpLnZhbHVlLG49dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLmNvbm5lY3RvcnM7ZS5nZXQoIm5hbWUiKS5wYXRjaFZhbHVlKHRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShuLEhhW3RdKSl9fWNoYW5nZUNvbm5lY3Rvck5hbWUoZSx0KXtjb25zdCBuPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZS5jb25uZWN0b3JzO2UuZ2V0KCJuYW1lIikucGF0Y2hWYWx1ZSh0aGlzLnZhbGlkYXRlQ29ubmVjdG9yTmFtZShuLGUuZ2V0KCJuYW1lIikudmFsdWUsdCkpfXNhdmUoKXtjb25zdCBlPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZTtBZShbdGhpcy5zYXZlQXR0cmlidXRlKCJjb25maWd1cmF0aW9uIix3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShYYShlKSkpLEwuU0hBUkVEX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoT2Esd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoSmEoZS5jb25uZWN0b3JzKSkpLEwuU0VSVkVSX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoUmEsdGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLnJlbW90ZUxvZ2dpbmdMZXZlbC50b1VwcGVyQ2FzZSgpLEwuU0hBUkVEX1NDT1BFKV0pLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmN0eC5zaG93U3VjY2Vzc1RvYXN0KHRoaXMuc3VjY2Vzc2Z1bFNhdmVkLDJlMywidG9wIiwibGVmdCIsdGhpcy50b2FzdFRhcmdldElkKSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAubWFya0FzUHJpc3RpbmUoKX0pKX1nZXRBdHRyaWJ1dGVzKGUpe2NvbnN0IHQ9W107cmV0dXJuIHQucHVzaChBZShbdGhpcy5nZXRBdHRyaWJ1dGUoImN1cnJlbnRfY29uZmlndXJhdGlvbiIsTC5DTElFTlRfU0NPUEUsZSksdGhpcy5nZXRBdHRyaWJ1dGUoT2EsTC5TRVJWRVJfU0NPUEUsZSldKS5waXBlKEVlKCgoW2UsdF0pPT57dGhpcy5zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpLHRoaXMuc2V0Rm9ybUNvbm5lY3RvcnNEcmFmdCh0KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSkpKSx0LnB1c2godGhpcy5nZXRBdHRyaWJ1dGUoUmEsTC5TSEFSRURfU0NPUEUsZSkucGlwZShFZSgoZT0+dGhpcy5wcm9jZXNzTG9nZ2luZ0xldmVsKGUpKSkpKSx0fWdldEF0dHJpYnV0ZShlLHQsbil7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKFlhKG4pLHQsW2VdKX1zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpe2lmKHRoaXMuY29ubmVjdG9ycy5jbGVhcigpLGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49dFtlXTtpZigidGhpbmdzYm9hcmQiPT09ZSludWxsIT09biYmT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJnRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5wYXRjaFZhbHVlKFFhKG4pKTtlbHNlIGZvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgYT0iTm8gbmFtZSI7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5bdF0sIm5hbWUiKSYmKGE9blt0XS5uYW1lKTtjb25zdCBvPXtlbmFibGVkOiEwLGNvbmZpZ1R5cGU6ZSxjb25maWc6blt0XS5jb25maWcsbmFtZTphfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihvKX19fX1zZXRGb3JtQ29ubmVjdG9yc0RyYWZ0KGUpe2lmKGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49e2VuYWJsZWQ6ITEsY29uZmlnVHlwZTp0W2VdLmNvbm5lY3Rvcixjb25maWc6dFtlXS5jb25maWcsbmFtZTplfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihuKX19fXByb2Nlc3NMb2dnaW5nTGV2ZWwoZSl7bGV0IHQ9QmEuZGVidWc7ZS5sZW5ndGg+MCYmQmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSYmKHQ9QmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSksdGhpcy5nZXRGb3JtRmllbGQoInJlbW90ZUxvZ2dpbmdMZXZlbCIpLnBhdGNoVmFsdWUodCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjp0LkVsZW1lbnRSZWZ9LHt0b2tlbjpYLlV0aWxzU2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dG9rZW46YWV9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpYLkRldmljZVNlcnZpY2V9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTplbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIixpbnB1dHM6e2N0eDoiY3R4Iixpc1N0YXRlRm9ybToiaXNTdGF0ZUZvcm0ifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToiZm9ybUNvbnRhaW5lclJlZiIsZmlyc3Q6ITAscHJlZGljYXRlOlsiZm9ybUNvbnRhaW5lciJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH0se3Byb3BlcnR5TmFtZToibXVsdGlwbGVJbnB1dEZvcm0iLGZpcnN0OiEwLHByZWRpY2F0ZTpbImdhdGV3YXlDb25maWd1cmF0aW9uRm9ybSJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGZvcm0gI2Zvcm1Db250YWluZXIgY2xhc3M9ImdhdGV3YXktZm9ybSJcbiAgICAgIFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwIlxuICAgICAgdGItdG9hc3QgdG9hc3RUYXJnZXQ9Int7IHRvYXN0VGFyZ2V0SWQgfX0iXG4gICAgICAobmdTdWJtaXQpPSJzYXZlKCkiPlxuICA8bWF0LWFjY29yZGlvbiBtdWx0aT0idHJ1ZSIgY2xhc3M9Im1hdC1ib2R5LTIiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmRcJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDx0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3RcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImdhdGV3YXkiXG4gICAgICAgICAgW2RldmljZU5hbWVdPSJkZXZpY2VOYW1lRm9ybSJcbiAgICAgICAgICBbaXNTdGF0ZUZvcm1dPSJpc1N0YXRlRm9ybSJcbiAgICAgICAgICBbbmV3R2F0ZXdheVR5cGVdPSJnYXRld2F5VHlwZSJcbiAgICAgICAgICAoZ2F0ZXdheU5hbWVFeGlzdCk9ImdhdGV3YXlFeGlzdCgpIlxuICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgID5cbiAgICAgIDwvdGItZW50aXR5LWdhdGV3YXktc2VsZWN0PlxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnNlY3VyaXR5LXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHlUeXBlIiA+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc2VjdXJpdHlUeXBlLnZhbHVlLnRvU3RyaW5nKCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblxuICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc2VjdXJpdHlUeXBlXCcpLnZhbHVlID09IFwndGxzXCciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNhLWNlcnRpZmljYXRlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1wcml2YXRlLWtleVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icHJpdmF0ZUtleVBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2VydFBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj57eyBcJ2dhdGV3YXkucmVtb3RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1jaGVja2JveD5cblxuICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVMb2dnaW5nTGV2ZWwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVscyIgW3ZhbHVlXT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICB7eyBsb2dMZXZlbCB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnBhdGgtbG9nc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3MiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS5wYXRoLWxvZ3MtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zdG9yYWdlXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuc3RvcmFnZS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzdG9yYWdlVHlwZS5rZXkiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0icmVhZFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVhZFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1wYWNrLXNpemUtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsID5cbiAgICAgICAgICAgICAge3sgKGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgIT09IFwnZmlsZVwnID8gXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHNcJyA6IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHNcJykgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4UmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgPT0gXCdmaWxlXCciPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heEZpbGVzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heEZpbGVzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1wYXRoXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImRhdGFGb2xkZXJQYXRoIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnZGF0YUZvbGRlclBhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtY29uZmlnXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJnYXRld2F5LWNvbmZpZyI+XG4gICAgICAgIDxzZWN0aW9uIGZvcm1BcnJheU5hbWU9ImNvbm5lY3RvcnMiICpuZ0Zvcj0ibGV0IGNvbm5lY3RvciBvZiBjb25uZWN0b3JzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4OyI+XG4gICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09ImkiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gc3RyZXRjaCIgZnhMYXlvdXRHYXA9IjhweCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBzdGFydCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIiBmeEZsZXg+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5jb25uZWN0b3ItdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJjb25maWdUeXBlIiAoc2VsZWN0aW9uQ2hhbmdlKT0iY2hhbmdlQ29ubmVjdG9yVHlwZShjb25uZWN0b3IpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbm5lY3RvclR5cGUgb2YgY29ubmVjdG9yVHlwZXMiIFt2YWx1ZV09ImNvbm5lY3RvclR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb25uZWN0b3JUeXBlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCdjb25maWdUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLXR5cGUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LmNvbm5lY3Rvci1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiAoYmx1cik9ImNoYW5nZUNvbm5lY3Rvck5hbWUoY29ubmVjdG9yLCBpKSI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29ubmVjdG9yLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5jb25uZWN0b3ItbmFtZS1yZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIlxuICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJ7e2FsaWdubWVudCA9PSBcJ3Jvd1wnID8gXCdlbmQgY2VudGVyXCcgOiBcJ3NwYWNlLWV2ZW5seSBjZW50ZXJcJ319IiBjbGFzcz0iYWN0aW9uLWJ1dHRvbnMiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0ib3BlbkNvbmZpZ0RpYWxvZygkZXZlbnQsIGksIGNvbm5lY3Rvci5nZXQoXCdjb25maWdcJykudmFsdWUsIGNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLnZhbHVlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkudXBkYXRlLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdtYXQtd2FyblwnOiBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLmludmFsaWR9Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV9ob3JpejwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb25uZWN0b3IoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPHNwYW4gW2Z4U2hvd109IiFjb25uZWN0b3JzLmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7XCdnYXRld2F5Lm5vLWNvbm5lY3RvcnNcJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT0iYnV0dG9uIiAoY2xpY2spPSJhZGROZXdDb25uZWN0b3IoKSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5jb25uZWN0b3ItYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXYgPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPC9tYXQtYWNjb3JkaW9uPlxuICA8c2VjdGlvbiBbZnhTaG93XT0iIWlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBjbGFzcz0iZm9ybS1hY3Rpb24tYnV0dG9ucyI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iZXhwb3J0Q29uZmlnKCkiXG4gICAgICAgICAgICAqbmdJZj0iIWdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LmRvd25sb2FkLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0ic3VibWl0IlxuICAgICAgICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LnNhdmUtdGlwXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAge3tcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9zZWN0aW9uPlxuPC9mb3JtPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5nYXRld2F5LWZvcm17aGVpZ2h0OjEwMCU7cGFkZGluZzo1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW59Omhvc3QgLmdhdGV3YXktZm9ybSAuZm9ybS1hY3Rpb24tYnV0dG9uc3twYWRkaW5nLXRvcDo4cHh9Omhvc3QgLmdhdGV3YXktZm9ybSAuZ2F0ZXdheS1jb25maWcgLm5vLWRhdGEtZm91bmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2hlaWdodDo0MHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Y3QuVG9hc3REaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi10b2FzdF0iLGlucHV0czpbInRvYXN0VGFyZ2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpwdC5NYXRDaGVja2JveCxzZWxlY3RvcjoibWF0LWNoZWNrYm94IixpbnB1dHM6WyJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsImlkIiwicmVxdWlyZWQiLCJsYWJlbFBvc2l0aW9uIiwibmFtZSIsInZhbHVlIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY29sb3IiLCJkaXNhYmxlZEludGVyYWN0aXZlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiaW5kZXRlcm1pbmF0ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJpbmRldGVybWluYXRlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEFjY29yZGlvbixzZWxlY3RvcjoibWF0LWFjY29yZGlvbiIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsImRpc3BsYXlNb2RlIiwidG9nZ2xlUG9zaXRpb24iXSxleHBvcnRBczpbIm1hdEFjY29yZGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0Q2xhc3NEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nQ2xhc3NdLCBbbmdDbGFzcy54c10sIFtuZ0NsYXNzLnNtXSwgW25nQ2xhc3MubWRdLCBbbmdDbGFzcy5sZ10sIFtuZ0NsYXNzLnhsXSwgIFtuZ0NsYXNzLmx0LXNtXSwgW25nQ2xhc3MubHQtbWRdLCBbbmdDbGFzcy5sdC1sZ10sIFtuZ0NsYXNzLmx0LXhsXSwgIFtuZ0NsYXNzLmd0LXhzXSwgW25nQ2xhc3MuZ3Qtc21dLCBbbmdDbGFzcy5ndC1tZF0sIFtuZ0NsYXNzLmd0LWxnXSIsaW5wdXRzOlsibmdDbGFzcyIsIm5nQ2xhc3MueHMiLCJuZ0NsYXNzLnNtIiwibmdDbGFzcy5tZCIsIm5nQ2xhc3MubGciLCJuZ0NsYXNzLnhsIiwibmdDbGFzcy5sdC1zbSIsIm5nQ2xhc3MubHQtbWQiLCJuZ0NsYXNzLmx0LWxnIiwibmdDbGFzcy5sdC14bCIsIm5nQ2xhc3MuZ3QteHMiLCJuZ0NsYXNzLmd0LXNtIiwibmdDbGFzcy5ndC1tZCIsIm5nQ2xhc3MuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS7JtU5nTm9WYWxpZGF0ZSxzZWxlY3RvcjoiZm9ybTpub3QoW25nTm9Gb3JtXSk6bm90KFtuZ05hdGl2ZVZhbGlkYXRlXSkifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTptdC5FbnRpdHlHYXRld2F5U2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3QiLGlucHV0czpbInJlcXVpcmVkIiwibmV3R2F0ZXdheVR5cGUiLCJkZXZpY2VOYW1lIiwiaXNTdGF0ZUZvcm0iXSxvdXRwdXRzOlsiZ2F0ZXdheU5hbWVFeGlzdCJdfSx7a2luZDoicGlwZSIsdHlwZTpfLlVwcGVyQ2FzZVBpcGUsbmFtZToidXBwZXJjYXNlIn0se2tpbmQ6InBpcGUiLHR5cGU6Xy5LZXlWYWx1ZVBpcGUsbmFtZToia2V5dmFsdWUifSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fWUoIkdhdGV3YXlGb3JtQ29tcG9uZW50IixlbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2Vcbjxmb3JtICNmb3JtQ29udGFpbmVyIGNsYXNzPSJnYXRld2F5LWZvcm0iXG4gICAgICBbZm9ybUdyb3VwXT0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cCJcbiAgICAgIHRiLXRvYXN0IHRvYXN0VGFyZ2V0PSJ7eyB0b2FzdFRhcmdldElkIH19IlxuICAgICAgKG5nU3VibWl0KT0ic2F2ZSgpIj5cbiAgPG1hdC1hY2NvcmRpb24gbXVsdGk9InRydWUiIGNsYXNzPSJtYXQtYm9keS0yIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8dGItZW50aXR5LWdhdGV3YXktc2VsZWN0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJnYXRld2F5IlxuICAgICAgICAgIFtkZXZpY2VOYW1lXT0iZGV2aWNlTmFtZUZvcm0iXG4gICAgICAgICAgW2lzU3RhdGVGb3JtXT0iaXNTdGF0ZUZvcm0iXG4gICAgICAgICAgW25ld0dhdGV3YXlUeXBlXT0iZ2F0ZXdheVR5cGUiXG4gICAgICAgICAgKGdhdGV3YXlOYW1lRXhpc3QpPSJnYXRld2F5RXhpc3QoKSJcbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICA+XG4gICAgICA8L3RiLWVudGl0eS1nYXRld2F5LXNlbGVjdD5cbiAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5zZWN1cml0eS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5VHlwZSIgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2VjdXJpdHlUeXBlIG9mIHNlY3VyaXR5VHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic2VjdXJpdHlUeXBlLmtleSI+XG4gICAgICAgICAgICAgIHt7IHNlY3VyaXR5VHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWluXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3NlY3VyaXR5VHlwZVwnKS52YWx1ZSA9PSBcJ3Rsc1wnIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2FDZXJ0UGF0aCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGxzLXBhdGgtcHJpdmF0ZS1rZXlcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InByaXZhdGVLZXlQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT0icmVtb3RlQ29uZmlndXJhdGlvbiI+e3sgXCdnYXRld2F5LnJlbW90ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtY2hlY2tib3g+XG5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ0xldmVsIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbHMiIFt2YWx1ZV09ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAge3sgbG9nTGV2ZWwgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5wYXRoLWxvZ3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzIj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkucGF0aC1sb2dzLXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnN0b3JhZ2UtdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdG9yYWdlVHlwZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGUudmFsdWUudG9TdHJpbmcoKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InJlYWRSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbCA+XG4gICAgICAgICAgICAgIHt7IChnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlICE9PSBcJ2ZpbGVcJyA/IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzXCcgOiBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzXCcpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlID09IFwnZmlsZVwnIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhGaWxlc0NvdW50Ij5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJkYXRhRm9sZGVyUGF0aCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2RhdGFGb2xkZXJQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBjbGFzcz0iZ2F0ZXdheS1jb25maWciPlxuICAgICAgICA8c2VjdGlvbiBmb3JtQXJyYXlOYW1lPSJjb25uZWN0b3JzIiAqbmdGb3I9ImxldCBjb25uZWN0b3Igb2YgY29ubmVjdG9ycy5jb250cm9sczsgbGV0IGkgPSBpbmRleDsiPlxuICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPSJpIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIHN0cmV0Y2giIGZ4TGF5b3V0R2FwPSI4cHgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEFsaWduPSJjZW50ZXIgc3RhcnQiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgZnhGbGV4PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuY29ubmVjdG9yLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29uZmlnVHlwZSIgKHNlbGVjdGlvbkNoYW5nZSk9ImNoYW5nZUNvbm5lY3RvclR5cGUoY29ubmVjdG9yKSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb25uZWN0b3JUeXBlIG9mIGNvbm5lY3RvclR5cGVzIiBbdmFsdWVdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29ubmVjdG9yVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb25uZWN0b3IuZ2V0KFwnY29uZmlnVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rvci10eXBlLXJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3ItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgKGJsdXIpPSJjaGFuZ2VDb25uZWN0b3JOYW1lKGNvbm5lY3RvciwgaSkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLW5hbWUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCJcbiAgICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ie3thbGlnbm1lbnQgPT0gXCdyb3dcJyA/IFwnZW5kIGNlbnRlclwnIDogXCdzcGFjZS1ldmVubHkgY2VudGVyXCd9fSIgY2xhc3M9ImFjdGlvbi1idXR0b25zIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSIgbWF0LWljb24tYnV0dG9uIChjbGljayk9Im9wZW5Db25maWdEaWFsb2coJGV2ZW50LCBpLCBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLnZhbHVlLCBjb25uZWN0b3IuZ2V0KFwnbmFtZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnVwZGF0ZS1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ie1wnbWF0LXdhcm5cJzogY29ubmVjdG9yLmdldChcJ2NvbmZpZ1wnKS5pbnZhbGlkfSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfaG9yaXo8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQ29ubmVjdG9yKGkpIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5kZWxldGVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxzcGFuIFtmeFNob3ddPSIhY29ubmVjdG9ycy5sZW5ndGgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiIGNsYXNzPSJuby1kYXRhLWZvdW5kIj57e1wnZ2F0ZXdheS5uby1jb25uZWN0b3JzXCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uIFtmeFNob3ddPSIhaXNSZWFkT25seUZvcm0iIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9ImJ1dHRvbiIgKGNsaWNrKT0iYWRkTmV3Q29ubmVjdG9yKCkiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuY29ubmVjdG9yLWFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2ID5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gIDwvbWF0LWFjY29yZGlvbj5cbiAgPHNlY3Rpb24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgY2xhc3M9ImZvcm0tYWN0aW9uLWJ1dHRvbnMiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImV4cG9ydENvbmZpZygpIlxuICAgICAgICAgICAgKm5nSWY9IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5kb3dubG9hZC10aXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICB7e1wnYWN0aW9uLmRvd25sb2FkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9InN1Ym1pdCJcbiAgICAgICAgICAgICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5zYXZlLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvc2VjdGlvbj5cbjwvZm9ybT5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuZ2F0ZXdheS1mb3Jte2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufTpob3N0IC5nYXRld2F5LWZvcm0gLmZvcm0tYWN0aW9uLWJ1dHRvbnN7cGFkZGluZy10b3A6OHB4fTpob3N0IC5nYXRld2F5LWZvcm0gLmdhdGV3YXktY29uZmlnIC5uby1kYXRhLWZvdW5ke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTp0LkVsZW1lbnRSZWZ9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp0Lk5nWm9uZX0se3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dHlwZTpXaW5kb3csZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOlthZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Zvcm1Db250YWluZXJSZWY6W3t0eXBlOm8sYXJnczpbImZvcm1Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLG11bHRpcGxlSW5wdXRGb3JtOlt7dHlwZTpvLGFyZ3M6WyJnYXRld2F5Q29uZmlndXJhdGlvbkZvcm0iLHtzdGF0aWM6ITB9XX1dLGN0eDpbe3R5cGU6YX1dLGlzU3RhdGVGb3JtOlt7dHlwZTphfV19fSk7Y2xhc3MgdG8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIpe3N1cGVyKGUsdCxhKSx0aGlzLnN0b3JlPWUsdGhpcy5yb3V0ZXI9dCx0aGlzLmRhdGE9bix0aGlzLmRpYWxvZ1JlZj1hLHRoaXMuZmI9byx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1pLHRoaXMucmVzb3VyY2VzU2VydmljZT1yLHRoaXMuY29ubmVjdG9yVHlwZT1fdCx0aGlzLmdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwPUh0LHRoaXMuZ2F0ZXdheUxvZ0xldmVsPU9iamVjdC52YWx1ZXMoTXQpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHt0eXBlOltfdC5NUVRULFtdXSxuYW1lOlsiIixbdWUucmVxdWlyZWQsdGhpcy51bmlxTmFtZVJlcXVpcmVkKCksdWUucGF0dGVybihrdCldXSxsb2dMZXZlbDpbTXQuSU5GTyxbXV0sdXNlRGVmYXVsdHM6WyEwLFtdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITEsW11dLGNsYXNzOlsiIixbXV0sa2V5OlsiYXV0byIsW11dfSl9bmdPbkluaXQoKXt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1oZWxwTGlua0lkKCl7cmV0dXJuIHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZ3VyYXRpb24vIn1jYW5jZWwoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKX1hZGQoKXt0aGlzLnN1Ym1pdHRlZD0hMDtjb25zdCBlPXRoaXMuY29ubmVjdG9yRm9ybS5nZXRSYXdWYWx1ZSgpO2UudXNlRGVmYXVsdHM/dGhpcy5nZXREZWZhdWx0Q29uZmlnKGUudHlwZSkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj10aGlzLmRhdGEuZ2F0ZXdheVZlcnNpb247biYmKGUuY29uZmlnVmVyc2lvbj1uKSxlLmNvbmZpZ3VyYXRpb25Kc29uPSh0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0obik/dFtVdC5DdXJyZW50XTp0W1V0LkxlZ2FjeV0pPz90LHRoaXMuY29ubmVjdG9yRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UoZSl9KSk6dGhpcy5jb25uZWN0b3JGb3JtLnZhbGlkJiZ0aGlzLmRpYWxvZ1JlZi5jbG9zZShlKX11bmlxTmFtZVJlcXVpcmVkKCl7cmV0dXJuIGU9Pntjb25zdCB0PWUudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHRoaXMuZGF0YS5kYXRhU291cmNlRGF0YS5zb21lKCgoe3ZhbHVlOntuYW1lOmV9fSk9PmUudG9Mb3dlckNhc2UoKT09PXQpKT97ZHVwbGljYXRlTmFtZTp7dmFsaWQ6ITF9fTpudWxsfX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgidXNlRGVmYXVsdHMiKTtlPT09X3QuR1JQQ3x8ZT09PV90LkNVU1RPTT90LnNldFZhbHVlKCExKTp0LnZhbHVlfHx0LnNldFZhbHVlKCEwKX0pKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCl9Z2V0RGVmYXVsdENvbmZpZyhlKXtyZXR1cm4gdGhpcy5yZXNvdXJjZXNTZXJ2aWNlLmxvYWRKc29uUmVzb3VyY2UoYC9hc3NldHMvbWV0YWRhdGEvY29ubmVjdG9yLWRlZmF1bHQtY29uZmlncy8ke2V9Lmpzb25gKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp2YX0se3Rva2VuOlguUmVzb3VyY2VzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6dG8sc2VsZWN0b3I6InRiLWFkZC1jb25uZWN0b3ItZGlhbG9nIixwcm92aWRlcnM6W10sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJjb25uZWN0b3JGb3JtIiBjbGFzcz0iYWRkLWNvbm5lY3RvciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7ICJnYXRld2F5LmFkZC1jb25uZWN0b3IiIHwgdHJhbnNsYXRlfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09ImhlbHBMaW5rSWQoKSI+PC9kaXY+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtdG9vbGJhcj5cbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnR5cGU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIHwga2V5dmFsdWUiIFt2YWx1ZV09InR5cGUua2V5Ij5cbiAgICAgICAgICAgICAgICB7eyB0eXBlLnZhbHVlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJ2dhdGV3YXkuY29ubmVjdG9yLWR1cGxpY2F0ZS1uYW1lXCcgOlwnZ2F0ZXdheS5uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWNsYXNzPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNsYXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5HUlBDIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkdSUEMgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkNVU1RPTSJcbiAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIGZpeGVkLXRpdGxlLXdpZHRoIiBmb3JtQ29udHJvbE5hbWU9InVzZURlZmF1bHRzIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5maWxsLWNvbm5lY3Rvci1kZWZhdWx0c1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLk1RVFQiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGEtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIChjbGljayk9ImFkZCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29ubmVjdG9yRm9ybS5pbnZhbGlkIHx8ICFjb25uZWN0b3JGb3JtLmRpcnR5Ij5cbiAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFkZC1jb25uZWN0b3J7bWluLXdpZHRoOjQwMHB4O3dpZHRoOjUwMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpkdC5IZWxwQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGVscF0iLGlucHV0czpbInRiLWhlbHAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cnQuTWF0VG9vbGJhcixzZWxlY3RvcjoibWF0LXRvb2xiYXIiLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQWN0aW9ucyxzZWxlY3RvcjoiW21hdC1kaWFsb2ctYWN0aW9uc10sIG1hdC1kaWFsb2ctYWN0aW9ucywgW21hdERpYWxvZ0FjdGlvbnNdIixpbnB1dHM6WyJhbGlnbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0NvbnRlbnQsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWNvbnRlbnRdLCBtYXQtZGlhbG9nLWNvbnRlbnQsIFttYXREaWFsb2dDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJBZGRDb25uZWN0b3JEaWFsb2dDb21wb25lbnQiLHRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1hZGQtY29ubmVjdG9yLWRpYWxvZyIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9ImFkZC1jb25uZWN0b3IiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyAiZ2F0ZXdheS5hZGQtY29ubmVjdG9yIiB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJoZWxwTGlua0lkKCkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlc01hcCB8IGtleXZhbHVlIiBbdmFsdWVdPSJ0eXBlLmtleSI+XG4gICAgICAgICAgICAgICAge3sgdHlwZS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkubmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9Im9mZiIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDpcJ2dhdGV3YXkubmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS50b3VjaGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLkNVU1RPTSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuR1JQQyIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1rZXk8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5HUlBDICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5DVVNUT00iXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VEZWZhdWx0cyI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmZpbGwtY29ubmVjdG9yLWRlZmF1bHRzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5NUVRUIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc2VuZC1jaGFuZ2UtZGF0YVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbm5lY3RvckZvcm0uaW52YWxpZCB8fCAhY29ubmVjdG9yRm9ybS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5hZGQtY29ubmVjdG9ye21pbi13aWR0aDo0MDBweDt3aWR0aDo1MDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp2YX0se3R5cGU6WC5SZXNvdXJjZXNTZXJ2aWNlfV19KTtjbGFzcyBub3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy52YWx1ZVR5cGVLZXlzPU9iamVjdC52YWx1ZXMoR24pLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLnZhbHVlTGlzdEZvcm1BcnJheT10aGlzLmZiLmFycmF5KFtdKSx0aGlzLnZhbHVlTGlzdEZvcm1BcnJheS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXRyYWNrQnlLZXkoZSx0KXtyZXR1cm4gdH1hZGRLZXkoKXtjb25zdCBlPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0duLlNUUklOR10sc3RyaW5nOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oTHQpXV0sZG91YmxlOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV0sYm9vbGVhbjpbe3ZhbHVlOiExLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UoZSksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChlKX1vYnNlcnZlVHlwZUNoYW5nZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntlLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KCJ0eXBlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSxlLmdldCh0KS5lbmFibGUoe2VtaXRFdmVudDohMX0pfSkpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkubWFya0FzRGlydHkoKX12YWx1ZVRpdGxlKGUpe3JldHVybiBpZShlKT8ib2JqZWN0Ij09dHlwZW9mIGU/SlNPTi5zdHJpbmdpZnkoZSk6ZToiIn1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT17dHlwZTpbdC50eXBlXSxzdHJpbmc6W3t2YWx1ZToiIixkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saW50ZWdlcjpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKEx0KV1dLGRvdWJsZTpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZF1dLGJvb2xlYW46W3t2YWx1ZTohMSxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV19O2VbdC50eXBlXVswXT17dmFsdWU6dC52YWx1ZSxkaXNhYmxlZDohMX07Y29uc3Qgbj10aGlzLmZiLmdyb3VwKGUpO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UobiksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChuKX19dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkudmFsaWQ/bnVsbDp7dmFsdWVMaXN0Rm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUubWFwKCgoe3R5cGU6ZSwuLi50fSk9Pih7dHlwZTplLHZhbHVlOnRbZV19KSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOm5vLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bm8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJUeXBlVmFsdWVQYW5lbENvbXBvbmVudCIsbm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXR5cGUtdmFsdWUtcGFuZWwiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dfSk7Y2xhc3MgYW8gZXh0ZW5kcyBPe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnZhbHVlVHlwZUtleXM9T2JqZWN0LnZhbHVlcyhHbiksdGhpcy52YWx1ZVR5cGVFbnVtPUduLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLnJhd0RhdGE9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5NYXBwaW5nS2V5c1R5cGU9Tm4sdGhpcy5lcnJvclRleHQ9IiJ9bmdPbkluaXQoKXt0aGlzLmtleXNMaXN0Rm9ybUFycmF5PXRoaXMucHJlcGFyZUtleXNGb3JtQXJyYXkodGhpcy5rZXlzKX10cmFja0J5S2V5KGUsdCl7cmV0dXJuIHR9YWRkS2V5KCl7bGV0IGU7aWYoZT10aGlzLmtleXNUeXBlPT09Tm4uUlBDX01FVEhPRFM/dGhpcy5mYi5ncm91cCh7bWV0aG9kOlsiIixbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1tdLFtdXX0pOnRoaXMuZmIuZ3JvdXAoe2tleTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSksdGhpcy5rZXlzVHlwZSE9PU5uLkNVU1RPTSYmdGhpcy5rZXlzVHlwZSE9PU5uLlJQQ19NRVRIT0RTKXtjb25zdCB0PXRoaXMucmF3RGF0YT8icmF3Ijp0aGlzLnZhbHVlVHlwZUtleXNbMF07ZS5hZGRDb250cm9sKCJ0eXBlIix0aGlzLmZiLmNvbnRyb2wodCkpfXRoaXMua2V5c0xpc3RGb3JtQXJyYXkucHVzaChlKX1kZWxldGVLZXkoZSx0KXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMua2V5c0xpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpfWNhbmNlbCgpe3RoaXMucG9wb3Zlcj8uaGlkZSgpfWFwcGx5S2V5c0RhdGEoKXtsZXQgZT10aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlO2lmKHRoaXMua2V5c1R5cGU9PT1Obi5DVVNUT00pe2U9e307Zm9yKGxldCB0IG9mIHRoaXMua2V5c0xpc3RGb3JtQXJyYXkudmFsdWUpZVt0LmtleV09dC52YWx1ZX10aGlzLmtleXNEYXRhQXBwbGllZC5lbWl0KGUpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJih0aGlzLmtleXNUeXBlPT09Tm4uQ1VTVE9NJiYoZT1PYmplY3Qua2V5cyhlKS5tYXAoKHQ9Pih7a2V5OnQsdmFsdWU6ZVt0XSx0eXBlOiIifSkpKSksZS5mb3JFYWNoKChlPT57bGV0IG47aWYodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTKW49dGhpcy5mYi5ncm91cCh7bWV0aG9kOltlLm1ldGhvZCxbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1suLi5lLmFyZ3VtZW50c10sW11dfSk7ZWxzZXtjb25zdHtrZXk6dCx2YWx1ZTphLHR5cGU6b309ZTtuPXRoaXMuZmIuZ3JvdXAoe2tleTpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbYSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0eXBlOltvLFtdXX0pfXQucHVzaChuKX0pKSksdGhpcy5mYi5hcnJheSh0KX12YWx1ZVRpdGxlKGUpe2NvbnN0IHQ9ZS5nZXQodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTPyJtZXRob2QiOiJ2YWx1ZSIpLnZhbHVlO3JldHVybiBpZSh0KT8ib2JqZWN0Ij09dHlwZW9mIHQ/SlNPTi5zdHJpbmdpZnkodCk6dDoiIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6YW8sc2VsZWN0b3I6InRiLW1hcHBpbmctZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e3BhbmVsVGl0bGU6InBhbmVsVGl0bGUiLGFkZEtleVRpdGxlOiJhZGRLZXlUaXRsZSIsZGVsZXRlS2V5VGl0bGU6ImRlbGV0ZUtleVRpdGxlIixub0tleXNUZXh0OiJub0tleXNUZXh0IixrZXlzOiJrZXlzIixrZXlzVHlwZToia2V5c1R5cGUiLHZhbHVlVHlwZUtleXM6InZhbHVlVHlwZUtleXMiLHZhbHVlVHlwZUVudW06InZhbHVlVHlwZUVudW0iLHZhbHVlVHlwZXM6InZhbHVlVHlwZXMiLHJhd0RhdGE6InJhd0RhdGEiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LHByb3ZpZGVyczpbXSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmcta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUtleTsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImtleXNUeXBlICE9PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ2tleVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCctXCcgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgdmFsdWVUaXRsZShrZXlDb250cm9sKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5DVVNUT00gJiYga2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5KU09OUGF0aC1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmtleVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmtleS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rvci1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAgZmlsbC13aWR0aCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG5hbWU9InZhbHVlVHlwZSIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj0iIXJhd0RhdGEiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiIgY2xhc3M9InRiLW1hdC0xOCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lmljb24iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPSIhcmF3RGF0YTsgZWxzZSByYXdUZXh0Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKHZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd09wdGlvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9InZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiIgY2xhc3M9InRiLW1hdC0yMCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3T3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09IlwncmF3XCciPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJrZXlzVHlwZSA9PT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmtleTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ21ldGhvZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleUNvbnRyb2wuZ2V0KFwnYXJndW1lbnRzXCcpLnZhbHVlPy5sZW5ndGggKyBcJylcJ319XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLXR5cGUtdmFsdWUtcGFuZWwgZm9ybUNvbnRyb2xOYW1lPSJhcmd1bWVudHMiPjwvdGItdHlwZS12YWx1ZS1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUtleSgkZXZlbnQsICRpbmRleCkiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJkZWxldGVLZXlUaXRsZSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0iYWRkS2V5KCkiPlxuICAgICAgICB7eyBhZGRLZXlUaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI25vS2V5cz5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWZsZXggY2VudGVyIGFsaWduLWNlbnRlciBrZXktcGFuZWwiPlxuICAgICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IG5vS2V5c1RleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggZmxleC1lbmQiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iYXBwbHlLZXlzRGF0YSgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0ia2V5c0xpc3RGb3JtQXJyYXkuaW52YWxpZCB8fCAha2V5c0xpc3RGb3JtQXJyYXkuZGlydHkiPlxuICAgICAge3sgXCdhY3Rpb24uYXBwbHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWx7d2lkdGg6Nzd2dzttYXgtd2lkdGg6NzAwcHh9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye21heC13aWR0aDoxMXZ3O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC5rZXktcGFuZWx7aGVpZ2h0OjUwMHB4O292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCB0Yi12YWx1ZS1pbnB1dHt3aWR0aDoxMDAlfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlRhLG5hbWU6ImdldEdhdGV3YXlIZWxwTGluayJ9XX0pfX1lKCJNYXBwaW5nRGF0YUtleXNQYW5lbENvbXBvbmVudCIsYW8pLEhlKFtOKCldLGFvLnByb3RvdHlwZSwicmF3RGF0YSIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRhdGEta2V5cy1wYW5lbCIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy1rZXlzLXBhbmVsIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+e3sgcGFuZWxUaXRsZSAgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCArIFwnKVwnfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIGtleS1wYW5lbCIgKm5nSWY9ImtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aDsgZWxzZSBub0tleXMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgICAqbmdGb3I9ImxldCBrZXlDb250cm9sIG9mIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzOyB0cmFja0J5OiB0cmFja0J5S2V5OyBsZXQgJGluZGV4ID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDsiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ia2V5Q29udHJvbCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiIFtleHBhbmRlZF09Imxhc3QiPlxuICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7eyBcJy1cJyB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSAmJiBrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLlJQQ19NRVRIT0RTIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnBsYXRmb3JtLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ2tleVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgbmFtZT0idmFsdWVUeXBlIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPSIhcmF3RGF0YSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIiBjbGFzcz0idGItbWF0LTE4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdJY29uXT0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd1RleHQiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAodmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8fCB2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIXJhd0RhdGE7IGVsc2UgcmF3T3B0aW9uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIiBjbGFzcz0idGItbWF0LTIwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Z0ljb249Int7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8fCB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdPcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iXCdyYXdcJyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuSlNPTlBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS52YWx1ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkua2V5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0ia2V5c1R5cGUgPT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tZXRob2QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdtZXRob2RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hcmd1bWVudHNcJyB8IHRyYW5zbGF0ZSB9fXt7XCcgKFwnICsga2V5Q29udHJvbC5nZXQoXCdhcmd1bWVudHNcJykudmFsdWU/Lmxlbmd0aCArIFwnKVwnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGItdHlwZS12YWx1ZS1wYW5lbCBmb3JtQ29udHJvbE5hbWU9ImFyZ3VtZW50cyI+PC90Yi10eXBlLXZhbHVlLXBhbmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbHt3aWR0aDo3N3Z3O21heC13aWR0aDo3MDBweH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC50aXRsZS1jb250YWluZXJ7bWF4LXdpZHRoOjExdnc7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIHRiLXZhbHVlLWlucHV0e3dpZHRoOjEwMCV9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGItZm9ybS1wYW5lbCAubWF0LW1kYy1pY29uLWJ1dHRvbnt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MTZweDtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9XSxwcm9wRGVjb3JhdG9yczp7cGFuZWxUaXRsZTpbe3R5cGU6YX1dLGFkZEtleVRpdGxlOlt7dHlwZTphfV0sZGVsZXRlS2V5VGl0bGU6W3t0eXBlOmF9XSxub0tleXNUZXh0Olt7dHlwZTphfV0sa2V5czpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVUeXBlS2V5czpbe3R5cGU6YX1dLHZhbHVlVHlwZUVudW06W3t0eXBlOmF9XSx2YWx1ZVR5cGVzOlt7dHlwZTphfV0scmF3RGF0YTpbe3R5cGU6YX1dLHBvcG92ZXI6W3t0eXBlOmF9XSxrZXlzRGF0YUFwcGxpZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBvbyBleHRlbmRzIE97Z2V0IGRldmljZUluZm9UeXBlKCl7cmV0dXJuIHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZX1zZXQgZGV2aWNlSW5mb1R5cGUoZSl7dGhpcy5kZXZpY2VJbmZvVHlwZVZhbHVlIT09ZSYmKHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZT1lKX1jb25zdHJ1Y3RvcihlLHQsbixhKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy50cmFuc2xhdGU9dCx0aGlzLmRpYWxvZz1uLHRoaXMuZmI9YSx0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLnVzZVNvdXJjZT0hMCx0aGlzLnJlcXVpcmVkPSExLHRoaXMuc291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhUbiksdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLm1hcHBpbmdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldXX0pLHRoaXMudXNlU291cmNlJiZ0aGlzLm1hcHBpbmdGb3JtR3JvdXAuYWRkQ29udHJvbCgiZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiLHRoaXMuZmIuY29udHJvbCh0aGlzLnNvdXJjZVR5cGVzWzBdLFtdKSksdGhpcy5kZXZpY2VJbmZvVHlwZT09PWtuLkZVTEwmJih0aGlzLnVzZVNvdXJjZSYmdGhpcy5tYXBwaW5nRm9ybUdyb3VwLmFkZENvbnRyb2woImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIix0aGlzLmZiLmNvbnRyb2wodGhpcy5zb3VyY2VUeXBlc1swXSxbXSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5hZGRDb250cm9sKCJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGhpcy5mYi5jb250cm9sKCIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldKSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe313cml0ZVZhbHVlKGUpe3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnttYXBwaW5nRm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6b28sZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46WS5UcmFuc2xhdGVTZXJ2aWNlfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOnt1c2VTb3VyY2U6InVzZVNvdXJjZSIscmVxdWlyZWQ6InJlcXVpcmVkIixzb3VyY2VUeXBlczoic291cmNlVHlwZXMiLGRldmljZUluZm9UeXBlOiJkZXZpY2VJbmZvVHlwZSJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm9vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCIgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiBbY2xhc3MudGItcmVxdWlyZWRdPSJyZXF1aXJlZCIgdHJhbnNsYXRlPmRldmljZS5kZXZpY2U8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZSBuby1wYWRkaW5nIG5vLWdhcCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1uYW1lLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uZW50aXR5LWZpZWxkPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJ1c2VTb3VyY2UiIGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uc291cmNlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPlxuICAgICAgICBnYXRld2F5LmRldmljZS1pbmZvLmV4cHJlc3Npb25cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtYm9keSBuby1nYXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyB0b3Atc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICBbY2xhc3MuYm90dG9tLXNhbWUtcGFkZGluZ109ImRldmljZUluZm9UeXBlICE9PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLm5hbWU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgcmF3LXZhbHVlLW9wdGlvbiIgKm5nSWY9InVzZVNvdXJjZSI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93LWNlbGwgdGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLWluZm8uZGV2aWNlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyBib3R0b20tc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICAqbmdJZj0iZGV2aWNlSW5mb1R5cGUgPT09IERldmljZUluZm9UeXBlLkZVTEwiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8ucHJvZmlsZS1uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1wcm9maWxlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwncHJvZmlsZS1uYW1lXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2VcJykudmFsdWUgOiBzb3VyY2VUeXBlcyJcbiAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja306aG9zdCAudGItZm9ybS1yb3cuYm90dG9tLXNhbWUtcGFkZGluZ3twYWRkaW5nLWJvdHRvbToxNnB4fTpob3N0IC50Yi1mb3JtLXJvdy50b3Atc2FtZS1wYWRkaW5ne3BhZGRpbmctdG9wOjE2cHh9Omhvc3QgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHt3aWR0aDoxOSV9Omhvc3QgLnRhYmxlLWNvbHVtbnt3aWR0aDo0MCV9Omhvc3QgLnRhYmxlLW5hbWUtY29sdW1ue3dpZHRoOjIwJX06aG9zdCAucmF3LW5hbWV7d2lkdGg6MTklfTpob3N0IC5yYXctdmFsdWUtb3B0aW9ue21heC13aWR0aDo0MCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7ZGlzcGxheTpmbGV4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpndC5IZWxwUG9wdXBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwLXBvcHVwXSwgW3RiLWhlbHAtcG9wdXAtY29udGVudF0iLGlucHV0czpbInRiLWhlbHAtcG9wdXAiLCJ0Yi1oZWxwLXBvcHVwLWNvbnRlbnQiLCJ0cmlnZ2VyLXRleHQiLCJ0cmlnZ2VyLXN0eWxlIiwidGItaGVscC1wb3B1cC1wbGFjZW1lbnQiLCJ0Yi1oZWxwLXBvcHVwLXN0eWxlIiwiaGludE1vZGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIkRldmljZUluZm9UYWJsZUNvbXBvbmVudCIsb28pLEhlKFtOKCldLG9vLnByb3RvdHlwZSwidXNlU291cmNlIix2b2lkIDApLEhlKFtOKCldLG9vLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpvbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZGV2aWNlLWluZm8tdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+b28pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgW2NsYXNzLnRiLXJlcXVpcmVkXT0icmVxdWlyZWQiIHRyYW5zbGF0ZT5kZXZpY2UuZGV2aWNlPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUgbm8tcGFkZGluZyBuby1nYXAiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyLWNlbGwgdGFibGUtbmFtZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmVudGl0eS1maWVsZDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0idXNlU291cmNlIiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnNvdXJjZTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5cbiAgICAgICAgZ2F0ZXdheS5kZXZpY2UtaW5mby5leHByZXNzaW9uXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWJvZHkgbm8tZ2FwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgdG9wLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgW2NsYXNzLmJvdHRvbS1zYW1lLXBhZGRpbmddPSJkZXZpY2VJbmZvVHlwZSAhPT0gRGV2aWNlSW5mb1R5cGUuRlVMTCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgYm90dG9tLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgKm5nSWY9ImRldmljZUluZm9UeXBlID09PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnByb2ZpbGUtbmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCByYXctdmFsdWUtb3B0aW9uIiAqbmdJZj0idXNlU291cmNlIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3ctY2VsbCB0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdwcm9maWxlLW5hbWVcJyB8IGdldEdhdGV3YXlIZWxwTGluazogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLWZvcm0tcm93LmJvdHRvbS1zYW1lLXBhZGRpbmd7cGFkZGluZy1ib3R0b206MTZweH06aG9zdCAudGItZm9ybS1yb3cudG9wLXNhbWUtcGFkZGluZ3twYWRkaW5nLXRvcDoxNnB4fTpob3N0IC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7d2lkdGg6MTklfTpob3N0IC50YWJsZS1jb2x1bW57d2lkdGg6NDAlfTpob3N0IC50YWJsZS1uYW1lLWNvbHVtbnt3aWR0aDoyMCV9Omhvc3QgLnJhdy1uYW1le3dpZHRoOjE5JX06aG9zdCAucmF3LXZhbHVlLW9wdGlvbnttYXgtd2lkdGg6NDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7dXNlU291cmNlOlt7dHlwZTphfV0scmVxdWlyZWQ6W3t0eXBlOmF9XSxzb3VyY2VUeXBlczpbe3R5cGU6YX1dLGRldmljZUluZm9UeXBlOlt7dHlwZTphfV19fSk7Y2xhc3MgaW8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIscyxsKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5wb3BvdmVyU2VydmljZT1pLHRoaXMucmVuZGVyZXI9cix0aGlzLnZpZXdDb250YWluZXJSZWY9cyx0aGlzLnRyYW5zbGF0ZT1sLHRoaXMuTWFwcGluZ1R5cGU9Zm4sdGhpcy5xdWFsaXR5VHlwZXM9eG4sdGhpcy5RdWFsaXR5VHJhbnNsYXRpb25zTWFwPXZuLHRoaXMuY29udmVydG9yVHlwZXM9T2JqZWN0LnZhbHVlcyh3biksdGhpcy5Db252ZXJ0b3JUeXBlRW51bT13bix0aGlzLkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXA9Q24sdGhpcy5zb3VyY2VUeXBlcz1PYmplY3QudmFsdWVzKFRuKSx0aGlzLk9QQ1VhU291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhTbiksdGhpcy5PUENVYVNvdXJjZVR5cGVzRW51bT1Tbix0aGlzLnNvdXJjZVR5cGVzRW51bT1Ubix0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5yZXF1ZXN0VHlwZXM9T2JqZWN0LnZhbHVlcyhJbiksdGhpcy5SZXF1ZXN0VHlwZUVudW09SW4sdGhpcy5SZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXA9QW4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLlNlcnZlclNpZGVSUENUeXBlPVBuLHRoaXMuTWFwcGluZ0tleXNUeXBlPU5uLHRoaXMuTWFwcGluZ0hpbnRUcmFuc2xhdGlvbnNNYXA9Ym4sdGhpcy5NYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwPUJuLHRoaXMuSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwPWhuLHRoaXMua2V5c1BvcHVwQ2xvc2VkPSEwLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY3JlYXRlTWFwcGluZ0Zvcm0oKX1nZXQgY29udmVydGVyQXR0cmlidXRlcygpe2lmKHRoaXMuY29udmVydGVyVHlwZSlyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCh0aGlzLmNvbnZlcnRlclR5cGUpLnZhbHVlLmF0dHJpYnV0ZXMubWFwKChlPT5lLmtleSkpfWdldCBjb252ZXJ0ZXJUZWxlbWV0cnkoKXtpZih0aGlzLmNvbnZlcnRlclR5cGUpcmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKS52YWx1ZS50aW1lc2VyaWVzLm1hcCgoZT0+ZS5rZXkpKX1nZXQgb3BjQXR0cmlidXRlcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiYXR0cmlidXRlcyIpLnZhbHVlPy5tYXAoKGU9PmUua2V5KSl8fFtdfWdldCBvcGNUZWxlbWV0cnkoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoInRpbWVzZXJpZXMiKS52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgb3BjUnBjTWV0aG9kcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgicnBjX21ldGhvZHMiKS52YWx1ZT8ubWFwKChlPT5lLm1ldGhvZCkpfHxbXX1nZXQgb3BjQXR0cmlidXRlc1VwZGF0ZXMoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImF0dHJpYnV0ZXNfdXBkYXRlcyIpPy52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgY29udmVydGVyVHlwZSgpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyIikuZ2V0KCJ0eXBlIikudmFsdWV9Z2V0IGN1c3RvbUtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCgiY3VzdG9tIikudmFsdWUuZXh0ZW5zaW9uQ29uZmlnKX1nZXQgcmVxdWVzdE1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VHlwZSIpLnZhbHVlfWdldCByZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXQiKTtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtbGltaXRzLWVycm9yIix7bWluOjF9KToiIn1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWNyZWF0ZU1hcHBpbmdGb3JtKCl7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVEYXRhTWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVSZXF1ZXN0TWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMuY3JlYXRlT1BDVUFNYXBwaW5nRm9ybSgpfX1jYW5jZWwoKXt0aGlzLmtleXNQb3B1cENsb3NlZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5tYXBwaW5nRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5wcmVwYXJlTWFwcGluZ0RhdGEoKSl9bWFuYWdlS2V5cyhlLHQsbil7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBhPXQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZih0aGlzLnBvcG92ZXJTZXJ2aWNlLmhhc1BvcG92ZXIoYSkpdGhpcy5wb3BvdmVyU2VydmljZS5oaWRlUG9wb3ZlcihhKTtlbHNle2NvbnN0IGU9KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSE9PWZuLk9QQ1VBP3RoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKTp0aGlzLm1hcHBpbmdGb3JtKS5nZXQobiksdD17a2V5czplLnZhbHVlLGtleXNUeXBlOm4scmF3RGF0YTp0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKT8udmFsdWU9PT13bi5CWVRFUyxwYW5lbFRpdGxlOk1uLmdldChuKSxhZGRLZXlUaXRsZTpFbi5nZXQobiksZGVsZXRlS2V5VGl0bGU6cW4uZ2V0KG4pLG5vS2V5c1RleHQ6RG4uZ2V0KG4pfTt0aGlzLmRhdGEubWFwcGluZ1R5cGU9PT1mbi5PUENVQSYmKHQudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKFNuKSx0LnZhbHVlVHlwZUVudW09U24sdC52YWx1ZVR5cGVzPUxuKSx0aGlzLmtleXNQb3B1cENsb3NlZD0hMTtjb25zdCBvPXRoaXMucG9wb3ZlclNlcnZpY2UuZGlzcGxheVBvcG92ZXIoYSx0aGlzLnJlbmRlcmVyLHRoaXMudmlld0NvbnRhaW5lclJlZixhbywibGVmdEJvdHRvbSIsITEsbnVsbCx0LHt9LHt9LHt9LCEwKTtvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLnBvcG92ZXI9byxvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLmtleXNEYXRhQXBwbGllZC5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntvLmhpZGUoKSxlLnBhdGNoVmFsdWUodCksZS5tYXJrQXNEaXJ0eSgpfSkpLG8udGJIaWRlU3RhcnQucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMua2V5c1BvcHVwQ2xvc2VkPSEwfSkpfX1wcmVwYXJlTWFwcGluZ0RhdGEoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0udmFsdWU7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjp0LHRvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmF9PWU7cmV0dXJue3RvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmEsY29udmVydGVyOnt0eXBlOnQudHlwZSwuLi50W3QudHlwZV19fTtjYXNlIGZuLlJFUVVFU1RTOnJldHVybntyZXF1ZXN0VHlwZTplLnJlcXVlc3RUeXBlLHJlcXVlc3RWYWx1ZTplLnJlcXVlc3RWYWx1ZVtlLnJlcXVlc3RUeXBlXX07ZGVmYXVsdDpyZXR1cm4gZX19Z2V0Rm9ybVZhbHVlRGF0YSgpe2lmKHRoaXMuZGF0YS52YWx1ZSYmT2JqZWN0LmtleXModGhpcy5kYXRhLnZhbHVlKS5sZW5ndGgpc3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjplLHRvcGljRmlsdGVyOnQsc3Vic2NyaXB0aW9uUW9zOm59PXRoaXMuZGF0YS52YWx1ZTtyZXR1cm57dG9waWNGaWx0ZXI6dCxzdWJzY3JpcHRpb25Rb3M6bixjb252ZXJ0ZXI6e3R5cGU6ZS50eXBlLFtlLnR5cGVdOnsuLi5lfX19O2Nhc2UgZm4uUkVRVUVTVFM6cmV0dXJue3JlcXVlc3RUeXBlOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VHlwZSxyZXF1ZXN0VmFsdWU6e1t0aGlzLmRhdGEudmFsdWUucmVxdWVzdFR5cGVdOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VmFsdWV9fTtkZWZhdWx0OnJldHVybiB0aGlzLmRhdGEudmFsdWV9fWNyZWF0ZURhdGFNYXBwaW5nRm9ybSgpe3RoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgidG9waWNGaWx0ZXIiLHRoaXMuZmIuY29udHJvbCgiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJzdWJzY3JpcHRpb25Rb3MiLHRoaXMuZmIuY29udHJvbCgwKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJjb252ZXJ0ZXIiLHRoaXMuZmIuZ3JvdXAoe3R5cGU6W3duLkpTT04sW11dLGpzb246dGhpcy5mYi5ncm91cCh7ZGV2aWNlSW5mbzpbe30sW11dLGF0dHJpYnV0ZXM6W1tdLFtdXSx0aW1lc2VyaWVzOltbXSxbXV19KSxieXRlczp0aGlzLmZiLmdyb3VwKHtkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXX0pLGN1c3RvbTp0aGlzLmZiLmdyb3VwKHtleHRlbnNpb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGV4dGVuc2lvbkNvbmZpZzpbe30sW11dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShSZSh0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpO3QuZ2V0KCJqc29uIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImJ5dGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImN1c3RvbSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KGUpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9Y3JlYXRlUmVxdWVzdE1hcHBpbmdGb3JtKCl7dGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJyZXF1ZXN0VHlwZSIsdGhpcy5mYi5jb250cm9sKEluLkNPTk5FQ1RfUkVRVUVTVCxbXSkpLHRoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgicmVxdWVzdFZhbHVlIix0aGlzLmZiLmdyb3VwKHtjb25uZWN0UmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86W3t9LFtdXX0pLGRpc2Nvbm5lY3RSZXF1ZXN0czp0aGlzLmZiLmdyb3VwKHt0b3BpY0ZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlSW5mbzpbe30sW11dfSksYXR0cmlidXRlUmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZF1dfSksYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sYXR0cmlidXRlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWVFeHByZXNzaW9uOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXRhaW46WyExLFtdXX0pLGF0dHJpYnV0ZVVwZGF0ZXM6dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXR0cmlidXRlRmlsdGVyOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0b3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmV0YWluOlshMCxbXV19KSxzZXJ2ZXJTaWRlUnBjOnRoaXMuZmIuZ3JvdXAoe3R5cGU6W1BuLlRXT19XQVksW11dLGRldmljZU5hbWVGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZEZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY1FvUzpbMCxbXV0scmVzcG9uc2VUaW1lb3V0OlsxZTQsW3VlLnJlcXVpcmVkLHVlLm1pbigxKV1dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoUmUodGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWUpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUiKTt0LmdldCgiY29ubmVjdFJlcXVlc3RzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImRpc2Nvbm5lY3RSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVVcGRhdGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInNlcnZlclNpZGVScGMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldChlKS5lbmFibGUoKX0pKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgicmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYyIpO2U9PT1Qbi5PTkVfV0FZPyh0LmdldCgicmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgicmVzcG9uc2VUb3BpY1FvUyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSk6KHQuZ2V0KCJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInJlc3BvbnNlVG9waWNRb1MiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKX0pKSx0aGlzLm1hcHBpbmdGb3JtLnBhdGNoVmFsdWUodGhpcy5nZXRGb3JtVmFsdWVEYXRhKCkpfWNyZWF0ZU9QQ1VBTWFwcGluZ0Zvcm0oKXt0aGlzLm1hcHBpbmdGb3JtPXRoaXMuZmIuZ3JvdXAoe2RldmljZU5vZGVTb3VyY2U6W1NuLlBBVEgsW11dLGRldmljZU5vZGVQYXR0ZXJuOlsiIixbdWUucmVxdWlyZWRdXSxkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXSxycGNfbWV0aG9kczpbW10sW11dLGF0dHJpYnV0ZXNfdXBkYXRlczpbW10sW11dfSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmlvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmlvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRpYWxvZyIsdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtIiBjbGFzcz0ia2V5LW1hcHBpbmciPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBNYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0iSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwLmdldCh0aGlzLmRhdGEubWFwcGluZ1R5cGUpIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPlxuICAgICAgICB7eyBNYXBwaW5nSGludFRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJkYXRhLm1hcHBpbmdUeXBlIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5EQVRBIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50b3BpYy1maWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZDsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS90b3BpYy1maWx0ZXJfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1Rb3MtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1xdHQtcW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3Vic2NyaXB0aW9uUW9zIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcXVhbGl0eVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9ImNvbnZlcnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGF5bG9hZC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBjb252ZXJ0b3JUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyBDb252ZXJ0b3JUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5kYXRhLWNvbnZlcnNpb248L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgICAgICAgICAge3sgRGF0YUNvbnZlcnNpb25UcmFuc2xhdGlvbnNNYXAuZ2V0KGNvbnZlcnRlclR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iY29udmVydGVyVHlwZSIgW25nU3dpdGNoXT0iY29udmVydGVyVHlwZSI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb252ZXJ0b3JUeXBlRW51bS5KU09OIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkJZVEVTIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvdXJjZVR5cGVzXT0iW3NvdXJjZVR5cGVzRW51bS5NU0csIHNvdXJjZVR5cGVzRW51bS5DT05TVF0iIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkJZVEVTIHx8IGNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJjb252ZXJ0ZXJBdHRyaWJ1dGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2YgY29udmVydGVyQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHRlbGVtZXRyeUJ1dHRvbiwgTWFwcGluZ0tleXNUeXBlLlRJTUVTRVJJRVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmV4dGVuc2lvbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5leHRlbnNpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZXh0ZW5zaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmV4dGVuc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwnY29udmVydGVyLmN1c3RvbS5leHRlbnNpb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5rZXlzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImN1c3RvbUtleXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBjdXN0b21LZXlzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAja2V5c0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwga2V5c0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkNVU1RPTSkiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdHlwZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcXVlc3RUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgUmVxdWVzdFR5cGVzVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0icmVxdWVzdFZhbHVlIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpIiBbbmdTd2l0Y2hdPSJyZXF1ZXN0TWFwcGluZ1R5cGUiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0icmVxdWVzdE1hcHBpbmdUeXBlID09PSBSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5ESVNDT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgW2Zvcm1Db250cm9sXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS50b3BpYy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5QQVJUSUFMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZnJvbS1kZXZpY2UtcmVxdWVzdC1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnRcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiIGZvcm1Hcm91cE5hbWU9ImRldmljZUluZm8iPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMuYXR0cmlidXRlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUgdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS50by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJldGFpbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkFUVFJJQlVURV9VUERBVEUiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmRldmljZU5hbWVGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuYXR0cmlidXRlLWZpbHRlci1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZUZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5hdHRyaWJ1dGVGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0icmV0YWluIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5TRVJWRVJfU0lERV9SUEMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgY2VudGVyIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuVFdPX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IlNlcnZlclNpZGVSUENUeXBlLk9ORV9XQVkiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LndpdGhvdXQtcmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tZXRob2QtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLm1ldGhvZEZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy50eXBlXCcpLnZhbHVlID09PSBTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljUW9TIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFF1YWxpdHlUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVGltZW91dCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0icmVzcG9uc2VUaW1lb3V0RXJyb3JUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iTWFwcGluZ1R5cGUuT1BDVUEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBkZXZpY2UtY29uZmlnIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVTb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBbT1BDVWFTb3VyY2VUeXBlc0VudW0uUEFUSCwgT1BDVWFTb3VyY2VUeXBlc0VudW0uSURFTlRJRklFUl0iIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBkZXZpY2Utbm9kZS1wYXR0ZXJuLWZpZWxkIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOb2RlUGF0dGVybiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVQYXR0ZXJuXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdkZXZpY2Utbm9kZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlU291cmNlXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbc291cmNlVHlwZXNdPSJPUENVYVNvdXJjZVR5cGVzIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY0F0dHJpYnV0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNBdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIG9wY0F0dHJpYnV0ZXNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5BVFRSSUJVVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudGltZXNlcmllczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBvcGNUZWxlbWV0cnkiPlxuICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNUZWxlbWV0cnlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjVGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNBdHRyaWJ1dGVzVXBkYXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlc1VwZGF0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVNfVVBEQVRFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy1tZXRob2RzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNScGNNZXRob2RzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNScGNNZXRob2RzIj5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dHJpYnV0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAjcnBjTWV0aG9kc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBycGNNZXRob2RzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJtYXBwaW5nRm9ybS5pbnZhbGlkIHx8ICFtYXBwaW5nRm9ybS5kaXJ0eSB8fCAha2V5c1BvcHVwQ2xvc2VkIj5cbiAgICAgIHt7IHRoaXMuZGF0YS5idXR0b25UaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJX06aG9zdCAua2V5LW1hcHBpbmd7bWF4LXdpZHRoOjkwMHB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLmtleS1tYXBwaW5nIC5tYXQtdG9vbGJhcnttaW4taGVpZ2h0OjY0cHh9Omhvc3QgLmtleS1tYXBwaW5nIHRiLXRvZ2dsZS1zZWxlY3R7cGFkZGluZzo0cHggMH06aG9zdCAubWF0LW1kYy1kaWFsb2ctY29udGVudHtoZWlnaHQ6NjcwcHh9Omhvc3QgLmVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lcnttYXgtd2lkdGg6NzAlfTpob3N0IDo6bmctZGVlcCAua2V5LW1hcHBpbmcgLm1hdC1tZGMtY2hpcC1saXN0Ym94IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDpub3dyYXB9Omhvc3QgOjpuZy1kZWVwIC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjQwcHg7d2lkdGg6MzUlO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5tYXQtbWRjLWZvcm0tZmllbGR7d2lkdGg6MH06aG9zdCA6Om5nLWRlZXAgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9Omhvc3QgOjpuZy1kZWVwIC5kZXZpY2UtY29uZmlne2dhcDoxMnB4O3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1ub2RlLXBhdHRlcm4tZmllbGR7ZmxleC1iYXNpczozJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcCxzZWxlY3RvcjoibWF0LWJhc2ljLWNoaXAsIFttYXQtYmFzaWMtY2hpcF0sIG1hdC1jaGlwLCBbbWF0LWNoaXBdIixpbnB1dHM6WyJyb2xlIiwiaWQiLCJhcmlhLWxhYmVsIiwiYXJpYS1kZXNjcmlwdGlvbiIsInZhbHVlIiwiY29sb3IiLCJyZW1vdmFibGUiLCJoaWdobGlnaHRlZCIsImRpc2FibGVSaXBwbGUiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJyZW1vdmVkIiwiZGVzdHJveWVkIl0sZXhwb3J0QXM6WyJtYXRDaGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcExpc3Rib3gsc2VsZWN0b3I6Im1hdC1jaGlwLWxpc3Rib3giLGlucHV0czpbIm11bHRpcGxlIiwiYXJpYS1vcmllbnRhdGlvbiIsInNlbGVjdGFibGUiLCJjb21wYXJlV2l0aCIsInJlcXVpcmVkIiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInZhbHVlIl0sb3V0cHV0czpbImNoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTprYSxzZWxlY3RvcjoiW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF0iLGlucHV0czpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOlsidXNlU291cmNlIiwicmVxdWlyZWQiLCJzb3VyY2VUeXBlcyIsImRldmljZUluZm9UeXBlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV19KX19ZSgiTWFwcGluZ0RpYWxvZ0NvbXBvbmVudCIsaW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6aW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1hcHBpbmctZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPGRpdiBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0iIGNsYXNzPSJrZXktbWFwcGluZyI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IE1hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAuZ2V0KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgIHt7IE1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImRhdGEubWFwcGluZ1R5cGUiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLkRBVEEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0ZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudG9waWMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3NcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdWJzY3JpcHRpb25Rb3MiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBRdWFsaXR5VHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0iY29udmVydGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXlsb2FkLXR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGNvbnZlcnRvclR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgIHt7IENvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmRhdGEtY29udmVyc2lvbjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj5cbiAgICAgICAgICAgICAgICB7eyBEYXRhQ29udmVyc2lvblRyYW5zbGF0aW9uc01hcC5nZXQoY29udmVydGVyVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cE5hbWVdPSJjb252ZXJ0ZXJUeXBlIiBbbmdTd2l0Y2hdPSJjb252ZXJ0ZXJUeXBlIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29udmVydG9yVHlwZUVudW0uQllURVMiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc291cmNlVHlwZXNdPSJbc291cmNlVHlwZXNFbnVtLk1TRywgc291cmNlVHlwZXNFbnVtLkNPTlNUXSIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQllURVMgfHwgY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uSlNPTiI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlckF0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBjb252ZXJ0ZXJBdHRyaWJ1dGVzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnRpbWVzZXJpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGVsZW1ldHJ5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJjb252ZXJ0ZXJUeXBlID09PSBDb252ZXJ0b3JUeXBlRW51bS5DVVNUT00iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmV4dGVuc2lvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJleHRlbnNpb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZXh0ZW5zaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2NvbnZlcnRlci5jdXN0b20uZXh0ZW5zaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiBzYW1lLXBhZGRpbmcgdGItZmxleCBjb2x1bW4iPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5leHRlbnNpb24tY29uZmlndXJhdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj57eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24taGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmtleXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY3VzdG9tS2V5cyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGN1c3RvbUtleXMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNrZXlzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBrZXlzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVxdWVzdC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcmVxdWVzdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBSZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJyZXF1ZXN0VmFsdWUiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkiIFtuZ1N3aXRjaF09InJlcXVlc3RNYXBwaW5nVHlwZSI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJyZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG9waWMtZmlsdGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBbZm9ybUNvbnRyb2xdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvdG9waWMtZmlsdGVyX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uRElTQ09OTkVDVF9SRVFVRVNUIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLlBBUlRJQUwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LmZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciIgZm9ybUdyb3VwTmFtZT0iZGV2aWNlSW5mbyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5ncy1oaW50XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldGFpbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1VQREFURSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuYXR0cmlidXRlRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXRhaW4taGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLlNFUlZFUl9TSURFX1JQQyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBjZW50ZXIgYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS53aXRoLXJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuT05FX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aG91dC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWV0aG9kLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5tZXRob2RGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnR5cGVcJykudmFsdWUgPT09IFNlcnZlclNpZGVSUENUeXBlLlRXT19XQVkiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVG9waWNRb1MiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHF1YWxpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJyZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUaW1lb3V0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5PUENVQSI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGRldmljZS1jb25maWciPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTm9kZVNvdXJjZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIFtPUENVYVNvdXJjZVR5cGVzRW51bS5QQVRILCBPUENVYVNvdXJjZVR5cGVzRW51bS5JREVOVElGSUVSXSIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGRldmljZS1ub2RlLXBhdHRlcm4tZmllbGQiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVQYXR0ZXJuIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlUGF0dGVyblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ2RldmljZS1ub2RlXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVTb3VyY2VcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtzb3VyY2VUeXBlc109Ik9QQ1VhU291cmNlVHlwZXMiIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjQXR0cmlidXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY0F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjQXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIG9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY1RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBvcGNUZWxlbWV0cnlCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5USU1FU0VSSUVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlLXVwZGF0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXNVcGRhdGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNBdHRyaWJ1dGVzVXBkYXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIGF0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFU19VUERBVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLW1ldGhvZHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1JwY01ldGhvZHMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY1JwY01ldGhvZHMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNycGNNZXRob2RzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY01ldGhvZHNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09Im1hcHBpbmdGb3JtLmludmFsaWQgfHwgIW1hcHBpbmdGb3JtLmRpcnR5IHx8ICFrZXlzUG9wdXBDbG9zZWQiPlxuICAgICAge3sgdGhpcy5kYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpncmlkO2hlaWdodDoxMDAlfTpob3N0IC5rZXktbWFwcGluZ3ttYXgtd2lkdGg6OTAwcHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAua2V5LW1hcHBpbmcgLm1hdC10b29sYmFye21pbi1oZWlnaHQ6NjRweH06aG9zdCAua2V5LW1hcHBpbmcgdGItdG9nZ2xlLXNlbGVjdHtwYWRkaW5nOjRweCAwfTpob3N0IC5tYXQtbWRjLWRpYWxvZy1jb250ZW50e2hlaWdodDo2NzBweH06aG9zdCAuZWxsaXBzaXMtY2hpcHMtY29udGFpbmVye21heC13aWR0aDo3MCV9Omhvc3QgOjpuZy1kZWVwIC5rZXktbWFwcGluZyAubWF0LW1kYy1jaGlwLWxpc3Rib3ggLm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBze2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOm5vd3JhcH06aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6NDBweDt3aWR0aDozNSU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAudGItZm9ybS1yb3cgLm1hdC1tZGMtZm9ybS1maWVsZHt3aWR0aDowfTpob3N0IDo6bmctZGVlcCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1jb25maWd7Z2FwOjEycHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fTpob3N0IDo6bmctZGVlcCAuZGV2aWNlLW5vZGUtcGF0dGVybi1maWVsZHtmbGV4LWJhc2lzOjMlfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSk7Y2xhc3Mgcm97c2V0IG1hcHBpbmdUeXBlKGUpe3RoaXMubWFwcGluZ1R5cGVWYWx1ZSE9PWUmJih0aGlzLm1hcHBpbmdUeXBlVmFsdWU9ZSl9Z2V0IG1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ1R5cGVWYWx1ZX1jb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLnRyYW5zbGF0ZT1lLHRoaXMuZGlhbG9nPXQsdGhpcy5kaWFsb2dTZXJ2aWNlPW4sdGhpcy5mYj1hLHRoaXMucmVxdWlyZWQ9ITEsdGhpcy5tYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLm1hcHBpbmdUeXBlRW51bT1mbix0aGlzLmRpc3BsYXllZENvbHVtbnM9W10sdGhpcy5tYXBwaW5nQ29sdW1ucz1bXSx0aGlzLnRleHRTZWFyY2hNb2RlPSExLHRoaXMuaGlkZVBhZ2VTaXplPSExLHRoaXMuYWN0aXZlVmFsdWU9ITEsdGhpcy5kaXJ0eVZhbHVlPSExLHRoaXMudGV4dFNlYXJjaD10aGlzLmZiLmNvbnRyb2woIiIse25vbk51bGxhYmxlOiEwfSksdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFwcGluZ0Zvcm1Hcm91cD10aGlzLmZiLmFycmF5KFtdKSx0aGlzLmRpcnR5VmFsdWU9IXRoaXMuYWN0aXZlVmFsdWUsdGhpcy5kYXRhU291cmNlPW5ldyBzb31uZ09uSW5pdCgpe3RoaXMuc2V0TWFwcGluZ0NvbHVtbnMoKSx0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCguLi50aGlzLm1hcHBpbmdDb2x1bW5zLm1hcCgoZT0+ZS5kZWYpKSwiYWN0aW9ucyIpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVUYWJsZURhdGEoZSksdGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGV4dFNlYXJjaC52YWx1ZUNoYW5nZXMucGlwZShWZSgxNTApLEJlKCgoZSx0KT0+KGU/PyIiKT09PXQudHJpbSgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9ZS50cmltKCk7dGhpcy51cGRhdGVUYWJsZURhdGEodGhpcy5tYXBwaW5nRm9ybUdyb3VwLnZhbHVlLHQudHJpbSgpKX0pKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5tYXBwaW5nRm9ybUdyb3VwLmNsZWFyKCksdGhpcy5wdXNoRGF0YUFzRm9ybUFycmF5cyhlKX12YWxpZGF0ZSgpe3JldHVybiF0aGlzLnJlcXVpcmVkfHx0aGlzLm1hcHBpbmdGb3JtR3JvdXAuY29udHJvbHMubGVuZ3RoP251bGw6e21hcHBpbmdGb3JtR3JvdXA6e3ZhbGlkOiExfX19ZW50ZXJGaWx0ZXJNb2RlKCl7dGhpcy50ZXh0U2VhcmNoTW9kZT0hMCxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5zZWFyY2hJbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKX0pLDEwKX1leGl0RmlsdGVyTW9kZSgpe3RoaXMudXBkYXRlVGFibGVEYXRhKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VNYXBwaW5nKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPWllKHQpP3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5hdCh0KS52YWx1ZTp7fTt0aGlzLmRpYWxvZy5vcGVuKGlvLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7bWFwcGluZ1R5cGU6dGhpcy5tYXBwaW5nVHlwZSx2YWx1ZTpuLGJ1dHRvblRpdGxlOnJlKHQpPyJhY3Rpb24uYWRkIjoiYWN0aW9uLmFwcGx5In19KS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihpZSh0KT90aGlzLm1hcHBpbmdGb3JtR3JvdXAuYXQodCkucGF0Y2hWYWx1ZShlKTp0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKFtlXSksdGhpcy5tYXBwaW5nRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfXVwZGF0ZVRhYmxlRGF0YShlLHQpe2xldCBuPWUubWFwKChlPT50aGlzLmdldE1hcHBpbmdWYWx1ZShlKSkpO3QmJihuPW4uZmlsdGVyKChlPT5PYmplY3QudmFsdWVzKGUpLnNvbWUoKGU9PmUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSkpKSkpKSx0aGlzLmRhdGFTb3VyY2UubG9hZERhdGEobil9ZGVsZXRlTWFwcGluZyhlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtbWFwcGluZy10aXRsZSIpLCIiLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi5ubyIpLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi55ZXMiKSwhMCkuc3Vic2NyaWJlKChlPT57ZSYmKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5yZW1vdmVBdCh0KSx0aGlzLm1hcHBpbmdGb3JtR3JvdXAubWFya0FzRGlydHkoKSl9KSl9cHVzaERhdGFBc0Zvcm1BcnJheXMoZSl7ZT8ubGVuZ3RoJiZlLmZvckVhY2goKGU9PnRoaXMubWFwcGluZ0Zvcm1Hcm91cC5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1nZXRNYXBwaW5nVmFsdWUoZSl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTpjb25zdCB0PUNuLmdldChlLmNvbnZlcnRlcj8udHlwZSk7cmV0dXJue3RvcGljRmlsdGVyOmUudG9waWNGaWx0ZXIsUW9TOmUuc3Vic2NyaXB0aW9uUW9zLGNvbnZlcnRlcjp0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQodCk6IiJ9O2Nhc2UgZm4uUkVRVUVTVFM6bGV0IG47Y29uc3QgYT1lO3JldHVybiBuPWEucmVxdWVzdFR5cGU9PT1Jbi5BVFRSSUJVVEVfVVBEQVRFP2EucmVxdWVzdFZhbHVlLmF0dHJpYnV0ZUZpbHRlcjphLnJlcXVlc3RUeXBlPT09SW4uU0VSVkVSX1NJREVfUlBDP2EucmVxdWVzdFZhbHVlLm1ldGhvZEZpbHRlcjphLnJlcXVlc3RWYWx1ZS50b3BpY0ZpbHRlcix7cmVxdWVzdFR5cGU6ZS5yZXF1ZXN0VHlwZSx0eXBlOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoQW4uZ2V0KGUucmVxdWVzdFR5cGUpKSxkZXRhaWxzOm59O2Nhc2UgZm4uT1BDVUE6Y29uc3Qgbz1lLmRldmljZUluZm8/LmRldmljZU5hbWVFeHByZXNzaW9uLGk9ZS5kZXZpY2VJbmZvPy5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbix7ZGV2aWNlTm9kZVBhdHRlcm46cn09ZTtyZXR1cm57ZGV2aWNlTm9kZVBhdHRlcm46cixkZXZpY2VOYW1lUGF0dGVybjpvLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOml9O2RlZmF1bHQ6cmV0dXJue319fXNldE1hcHBpbmdDb2x1bW5zKCl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTp0aGlzLm1hcHBpbmdDb2x1bW5zLnB1c2goe2RlZjoidG9waWNGaWx0ZXIiLHRpdGxlOiJnYXRld2F5LnRvcGljLWZpbHRlciJ9LHtkZWY6IlFvUyIsdGl0bGU6ImdhdGV3YXkubXF0dC1xb3MifSx7ZGVmOiJjb252ZXJ0ZXIiLHRpdGxlOiJnYXRld2F5LnBheWxvYWQtdHlwZSJ9KTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJ0eXBlIix0aXRsZToiZ2F0ZXdheS50eXBlIn0se2RlZjoiZGV0YWlscyIsdGl0bGU6ImdhdGV3YXkuZGV0YWlscyJ9KTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJkZXZpY2VOb2RlUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5vZGUifSx7ZGVmOiJkZXZpY2VOYW1lUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5hbWUifSx7ZGVmOiJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLXByb2ZpbGUifSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cm8sZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpybyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIixtYXBwaW5nVHlwZToibWFwcGluZ1R5cGUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cm8pKSxtdWx0aTohMH1dLHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzZWFyY2hJbnB1dEZpZWxkIixmaXJzdDohMCxwcmVkaWNhdGU6WyJzZWFyY2hJbnB1dCJdLGRlc2NlbmRhbnRzOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmctdGFibGUgdGItYWJzb2x1dGUtZmlsbCI+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLXRpdGxlIj57e21hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldChtYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJlbnRlckZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5zZWFyY2hcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0idGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPiZuYnNwOzwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0idGV4dFNlYXJjaCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnY29tbW9uLmVudGVyLXNlYXJjaFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9ImV4aXRGaWx0ZXJNb2RlKCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uY2xvc2VcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPGRpdiBjbGFzcz0idGFibGUtY29udGFpbmVyIj5cbiAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iY29sdW1uLmRlZiIgKm5nRm9yPSJsZXQgY29sdW1uIG9mIG1hcHBpbmdDb2x1bW5zOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCB0YlRydW5jYXRlV2l0aFRvb2x0aXAgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IG1hcHBpbmdbY29sdW1uLmRlZl0gfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImFjdGlvbnMiIHN0aWNreUVuZD5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJywgdGV4dEFsaWduOiBcJ2NlbnRlclwnfSI+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgbWFwcGluZzsgbGV0IGkgPSBpbmRleCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCd9Ij5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcm93QWN0aW9ucz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlTWFwcGluZygkZXZlbnQsIGkpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbj5kZWxldGU8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cubHQtbGcgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09ImNlbGxBY3Rpb25zTWVudSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjY2VsbEFjdGlvbnNNZW51PSJtYXRNZW51IiB4UG9zaXRpb249ImJlZm9yZSI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBbbmdDbGFzc109IntcJ21hdC1yb3ctc2VsZWN0XCc6IHRydWV9IiAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9ImxldCBtYXBwaW5nOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDxzZWN0aW9uIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUgJiYgKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpIiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1oZWFkbGluZS01IHRiLWFic29sdXRlLWZpbGwgdGItYWRkLW5ldyI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz0iY29ubmVjdG9yIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnR7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQudGItb3V0bGluZWQtYm9yZGVye2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRpdGxlLWNvbnRhaW5lcntvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGItbWFwcGluZy10YWJsZS10aXRsZXtwYWRkaW5nLXJpZ2h0OjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1ue3BhZGRpbmc6MCAxMnB4O3dpZHRoOjIzJX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbi5yZXF1ZXN0LWNvbHVtbnt3aWR0aDozOCV9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAuZWxsaXBzaXN7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctYm90dG9tOjVweDt3aWR0aDoxMDAlfX06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbHtjdXJzb3I6cG9pbnRlcn06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbCAubWF0LWljb257aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtmb250LXNpemU6MjRweDtjb2xvcjojNzU3NTc1fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5Bc3luY1BpcGUsbmFtZToiYXN5bmMifSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdENsYXNzRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ0NsYXNzXSwgW25nQ2xhc3MueHNdLCBbbmdDbGFzcy5zbV0sIFtuZ0NsYXNzLm1kXSwgW25nQ2xhc3MubGddLCBbbmdDbGFzcy54bF0sICBbbmdDbGFzcy5sdC1zbV0sIFtuZ0NsYXNzLmx0LW1kXSwgW25nQ2xhc3MubHQtbGddLCBbbmdDbGFzcy5sdC14bF0sICBbbmdDbGFzcy5ndC14c10sIFtuZ0NsYXNzLmd0LXNtXSwgW25nQ2xhc3MuZ3QtbWRdLCBbbmdDbGFzcy5ndC1sZ10iLGlucHV0czpbIm5nQ2xhc3MiLCJuZ0NsYXNzLnhzIiwibmdDbGFzcy5zbSIsIm5nQ2xhc3MubWQiLCJuZ0NsYXNzLmxnIiwibmdDbGFzcy54bCIsIm5nQ2xhc3MubHQtc20iLCJuZ0NsYXNzLmx0LW1kIiwibmdDbGFzcy5sdC1sZyIsIm5nQ2xhc3MubHQteGwiLCJuZ0NsYXNzLmd0LXhzIiwibmdDbGFzcy5ndC1zbSIsIm5nQ2xhc3MuZ3QtbWQiLCJuZ0NsYXNzLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U3R5bGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nU3R5bGVdLCAgW25nU3R5bGUueHNdLCBbbmdTdHlsZS5zbV0sIFtuZ1N0eWxlLm1kXSwgW25nU3R5bGUubGddLCBbbmdTdHlsZS54bF0sICBbbmdTdHlsZS5sdC1zbV0sIFtuZ1N0eWxlLmx0LW1kXSwgW25nU3R5bGUubHQtbGddLCBbbmdTdHlsZS5sdC14bF0sICBbbmdTdHlsZS5ndC14c10sIFtuZ1N0eWxlLmd0LXNtXSwgW25nU3R5bGUuZ3QtbWRdLCBbbmdTdHlsZS5ndC1sZ10iLGlucHV0czpbIm5nU3R5bGUiLCJuZ1N0eWxlLnhzIiwibmdTdHlsZS5zbSIsIm5nU3R5bGUubWQiLCJuZ1N0eWxlLmxnIiwibmdTdHlsZS54bCIsIm5nU3R5bGUubHQtc20iLCJuZ1N0eWxlLmx0LW1kIiwibmdTdHlsZS5sdC1sZyIsIm5nU3R5bGUubHQteGwiLCJuZ1N0eWxlLmd0LXhzIiwibmdTdHlsZS5ndC1zbSIsIm5nU3R5bGUuZ3QtbWQiLCJuZ1N0eWxlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJ0LlRiSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItaWNvbiIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbInRiSWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIk1hcHBpbmdUYWJsZUNvbXBvbmVudCIscm8pLEhlKFtOKCldLHJvLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpybyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbWFwcGluZy10YWJsZSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy10YWJsZSB0Yi1hYnNvbHV0ZS1maWxsIj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InRiLW1hcHBpbmctdGFibGUtY29udGVudCI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiICpuZ0lmPSIoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykgPT09IGZhbHNlIj5cbiAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzdGFydCBjZW50ZXIiIGZ4TGF5b3V0LnhzPSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ24ueHM9ImNlbnRlciBzdGFydCIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9InRiLW1hcHBpbmctdGFibGUtdGl0bGUiPnt7bWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KG1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJjb2x1bW4uZGVmIiAqbmdGb3I9ImxldCBjb2x1bW4gb2YgbWFwcGluZ0NvbHVtbnM7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgY29sdW1uLnRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCAqbWF0Q2VsbERlZj0ibGV0IG1hcHBpbmciIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgbWFwcGluZ1tjb2x1bW4uZGVmXSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCc5NnB4XCcsIG1heFdpZHRoOiBcJzk2cHhcJywgd2lkdGg6IFwnOTZweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZGVsZXRlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmRlbGV0ZTwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmd0LW1kIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5sdC1sZyBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT0iY2VsbEFjdGlvbnNNZW51Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNjZWxsQWN0aW9uc01lbnU9Im1hdE1lbnUiIHhQb3NpdGlvbj0iYmVmb3JlIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG1hdC1oZWFkZXItcm93IFtuZ0NsYXNzXT0ie1wnbWF0LXJvdy1zZWxlY3RcJzogdHJ1ZX0iICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj0ibGV0IG1hcHBpbmc7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7Ij48L21hdC1yb3c+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPHNlY3Rpb24gW2Z4U2hvd109IiF0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgICAgICBjbGFzcz0ibWF0LWhlYWRsaW5lLTUgdGItYWJzb2x1dGUtZmlsbCB0Yi1hZGQtbmV3Ij5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPSJjb25uZWN0b3IiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gW2Z4U2hvd109InRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSJcbiAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgIGNsYXNzPSJuby1kYXRhLWZvdW5kIiB0cmFuc2xhdGU+XG4gICAgICB3aWRnZXQubm8tZGF0YS1mb3VuZFxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudC50Yi1vdXRsaW5lZC1ib3JkZXJ7Ym94LXNoYWRvdzowIDAgIzAwMDMsMCAwICMwMDAwMDAyNCwwIDAgIzAwMDAwMDFmO2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMDtib3JkZXItcmFkaXVzOjRweH06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5tYXQtdG9vbGJhci10b29sc3ttaW4taGVpZ2h0OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGl0bGUtY29udGFpbmVye292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctcmlnaHQ6MjBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxle3RhYmxlLWxheW91dDpmaXhlZDttaW4td2lkdGg6NDUwcHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxlIC50YWJsZS12YWx1ZS1jb2x1bW57cGFkZGluZzowIDEycHg7d2lkdGg6MjMlfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1uLnJlcXVlc3QtY29sdW1ue3dpZHRoOjM4JX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5lbGxpcHNpc3tvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAubm8tZGF0YS1mb3VuZHtoZWlnaHQ6Y2FsYygxMDAlIC0gMTIwcHgpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5OXB4KXs6aG9zdCAubWF0LXRvb2xiYXJ7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxMDBweH06aG9zdCAubWF0LXRvb2xiYXIgLnRiLW1hcHBpbmctdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntyZXF1aXJlZDpbe3R5cGU6YX1dLG1hcHBpbmdUeXBlOlt7dHlwZTphfV0sc2VhcmNoSW5wdXRGaWVsZDpbe3R5cGU6byxhcmdzOlsic2VhcmNoSW5wdXQiXX1dfX0pO2NsYXNzIHNvIGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9fWUoIk1hcHBpbmdEYXRhc291cmNlIixzbyk7Y2xhc3MgbG97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLnRpdGxlPSJnYXRld2F5LnNlY3VyaXR5Iix0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsPSExLHRoaXMuQnJva2VyU2VjdXJpdHlUeXBlPXJuLHRoaXMuc2VjdXJpdHlUeXBlcz1PYmplY3QudmFsdWVzKHJuKSx0aGlzLm1vZGVUeXBlcz1PYmplY3QudmFsdWVzKHBuKSx0aGlzLlNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcD1tbix0aGlzLmRlc3Ryb3kkPW5ldyBTZX1uZ09uSW5pdCgpe3RoaXMuc2VjdXJpdHlGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dHlwZTpbcm4uQU5PTllNT1VTLFtdXSx1c2VybmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFzc3dvcmQ6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHBhdGhUb0NBQ2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvUHJpdmF0ZUtleTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvQ2xpZW50Q2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsJiZ0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmFkZENvbnRyb2woIm1vZGUiLHRoaXMuZmIuY29udHJvbChwbi5OT05FLFtdKSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXtpZihlKWUudHlwZXx8KGUudHlwZT1ybi5BTk9OWU1PVVMpLHRoaXMudXBkYXRlVmFsaWRhdG9ycyhlLnR5cGUpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAucmVzZXQoZSx7ZW1pdEV2ZW50OiExfSk7ZWxzZXtjb25zdCBlPXt0eXBlOnJuLkFOT05ZTU9VU307dGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlLHtlbWl0RXZlbnQ6ITF9KX10aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlIT09cm4uQkFTSUN8fHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VjdXJpdHlGb3JtOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dXBkYXRlVmFsaWRhdG9ycyhlKXtpZihlKWlmKHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DQUNlcnQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DbGllbnRDZXJ0IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoIm1vZGUiKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZT09PXJuLkJBU0lDKXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTtlbHNlIGlmKGU9PT1ybi5DRVJUSUZJQ0FURVMmJih0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvQ0FDZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhdGhUb0NsaWVudENlcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwpKXtjb25zdCBlPXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJtb2RlIik7ZSYmIWUudmFsdWUmJmUuc2V0VmFsdWUocG4uTk9ORSx7ZW1pdEV2ZW50OiExfSksZT8uZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidXNlcm5hbWUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6bG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czp7dGl0bGU6InRpdGxlIixleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDoiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHNhbWUtcGFkZGluZyB0Yi1mbGV4IGNvbHVtbiIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Rm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5CQVNJQyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJCcm9rZXJTZWN1cml0eVR5cGUuQ0VSVElGSUNBVEVTIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5wYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuQ0EtY2VydGlmaWNhdGUtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DQUNlcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9Qcml2YXRlS2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGF0aFRvQ2xpZW50Q2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibW9kZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAge3sgdHlwZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja31cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2gsc2VsZWN0b3I6IltuZ1N3aXRjaF0iLGlucHV0czpbIm5nU3dpdGNoIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaENhc2Usc2VsZWN0b3I6IltuZ1N3aXRjaENhc2VdIixpbnB1dHM6WyJuZ1N3aXRjaENhc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIlNlY3VyaXR5Q29uZmlnQ29tcG9uZW50IixsbyksSGUoW04oKV0sbG8ucHJvdG90eXBlLCJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmxvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc2VjdXJpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgIHt7IFNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnVzZXJuYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5DRVJUSUZJQ0FURVMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LnBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5DQS1jZXJ0aWZpY2F0ZS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb0NBQ2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb1ByaXZhdGVLZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DbGllbnRDZXJ0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImV4dGVuZENlcnRpZmljYXRlc01vZGVsIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5tb2RlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGVUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyB0eXBlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7dGl0bGU6W3t0eXBlOmF9XSxleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDpbe3R5cGU6YX1dfX0pO2NsYXNzIGNve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5zZWN1cml0eVBvbGljeVR5cGVzPV9uLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3VybDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdGltZW91dEluTWlsbGlzOlsxZTMsW3VlLnJlcXVpcmVkLHVlLm1pbigxZTMpXV0sc2NhblBlcmlvZEluTWlsbGlzOltWLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMWUzKV1dLHBvbGxQZXJpb2RJbk1pbGxpczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oNTApXV0sZW5hYmxlU3Vic2NyaXB0aW9uczpbITAsW11dLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEwMCldXSxzaG93TWFwOlshMSxbXV0sc2VjdXJpdHk6W1VuLkJBU0lDMTI4LFtdXSxpZGVudGl0eTpbXX0pLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5oaWRlTmV3RmllbGRzJiZ0aGlzLnNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoInBvbGxQZXJpb2RJbk1pbGxpcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VydmVyQ29uZmlnRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7Y29uc3R7dGltZW91dEluTWlsbGlzOnQ9MWUzLHNjYW5QZXJpb2RJbk1pbGxpczpuPVYscG9sbFBlcmlvZEluTWlsbGlzOmE9NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6bz0hMCxzdWJDaGVja1BlcmlvZEluTWlsbGlzOmk9MTAwLHNob3dNYXA6cj0hMSxzZWN1cml0eTpzPVVuLkJBU0lDMTI4LGlkZW50aXR5Omw9e319PWU7dGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAucmVzZXQoey4uLmUsdGltZW91dEluTWlsbGlzOnQsc2NhblBlcmlvZEluTWlsbGlzOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsZW5hYmxlU3Vic2NyaXB0aW9uczpvLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6aSxzaG93TWFwOnIsc2VjdXJpdHk6cyxpZGVudGl0eTpsfSx7ZW1pdEV2ZW50OiExfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmNvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czp7aGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmxvLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czpbInRpdGxlIiwiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNTZXJ2ZXJDb25maWdDb21wb25lbnQiLGNvKSxIZShbTigpXSxjby5wcm90b3R5cGUsImhpZGVOZXdGaWVsZHMiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Y28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7aGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dfX0pO2NsYXNzIHBvIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWFwcGluZ1R5cGVzPWZuLHRoaXMuaXNMZWdhY3k9ITF9aW5pdEJhc2ljRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe21hcHBpbmc6W10sc2VydmVyOltdfSl9bWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSl7cmV0dXJue3NlcnZlcjplLnNlcnZlcj8/e30sbWFwcGluZzplLm1hcHBpbmc/P1tdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOmUuc2VydmVyLG1hcHBpbmc6ZS5tYXBwaW5nfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnBvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnBvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNVYUJhc2ljQ29uZmlnQ29tcG9uZW50IixwbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5wbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgbW97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLm1xdHRWZXJzaW9ucz1nbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5icm9rZXJDb25maWdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7aG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSx2ZXJzaW9uOls1LFtdXSxjbGllbnRJZDpbInRiX2d3XyIrc2UoNSksW3VlLnBhdHRlcm4oa3QpXV0sc2VjdXJpdHk6W119KSx0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWdlbmVyYXRlKGUpe3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLmdldChlKT8ucGF0Y2hWYWx1ZSgidGJfZ3dfIitzZSg1KSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2NvbnN0e3ZlcnNpb246dD01LGNsaWVudElkOm49YHRiX2d3XyR7c2UoNSl9YCxzZWN1cml0eTphPXt9fT1lO3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLnJlc2V0KHsuLi5lLHZlcnNpb246dCxjbGllbnRJZDpuLHNlY3VyaXR5OmF9LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnticm9rZXJDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTptbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTptbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9Pm1vKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpsbyxzZWxlY3RvcjoidGItc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJ0aXRsZSIsImV4dGVuZENlcnRpZmljYXRlc01vZGVsIl19LHtraW5kOiJwaXBlIix0eXBlOndhLG5hbWU6ImdldEdhdGV3YXlQb3J0VG9vbHRpcCJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiQnJva2VyQ29uZmlnQ29udHJvbENvbXBvbmVudCIsbW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLHdhXSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5tbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyB1b3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21heE51bWJlck9mV29ya2VyczpbMTAwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSldXSxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOlsxMCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV19KSx0aGlzLndvcmtlcnNDb25maWdGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7Y29uc3R7bWF4TnVtYmVyT2ZXb3JrZXJzOnQsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjpufT1lO3RoaXMud29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5yZXNldCh7bWF4TnVtYmVyT2ZXb3JrZXJzOnR8fDEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOm58fDEwfSx7ZW1pdEV2ZW50OiExfSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwLnZhbGlkP251bGw6e3dvcmtlcnNDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp1byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnVvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+dW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09IndvcmtlcnNDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9Im1heE51bWJlck9mV29ya2VycyJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TnVtYmVyT2ZXb3JrZXJzXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIFtzdHlsZS53aWR0aC4lXT0iNTAiXG4gICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXJcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TWVzc2FnZU51bWJlclBlcldvcmtlciJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiV29ya2Vyc0NvbmZpZ0NvbnRyb2xDb21wb25lbnQiLHVvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnVvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT51bykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBbZm9ybUdyb3VwXT0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiBbc3R5bGUud2lkdGguJV09IjUwIlxuICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TnVtYmVyT2ZXb3JrZXJzIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1udW1iZXItb2Ytd29ya2Vycy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiB0eXBlPSJudW1iZXIiIG1pbj0iMSIgZm9ybUNvbnRyb2xOYW1lPSJtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IndvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS50b3VjaGVkKSJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIGdve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmlzRXhwYW5zaW9uTW9kZT0hMSx0aGlzLmRlZmF1bHRWYWx1ZT1sbi5LZXksdGhpcy5yZXBvcnRTdHJhdGVneVR5cGVzPU9iamVjdC52YWx1ZXMoc24pLHRoaXMuUmVwb3J0VHlwZVRyYW5zbGF0ZU1hcD1jbix0aGlzLlJlcG9ydFN0cmF0ZWd5VHlwZT1zbix0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTdHJhdGVneUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W3t2YWx1ZTpzbi5PblJlcG9ydFBlcmlvZCxkaXNhYmxlZDohMH0sW11dLHJlcG9ydFBlcmlvZDpbe3ZhbHVlOnRoaXMuZGVmYXVsdFZhbHVlLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5Rm9ybUNoYW5nZSgpLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5VG9nZ2xlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmlzRXhwYW5zaW9uTW9kZSYmdGhpcy5zaG93U3RyYXRlZ3lDb250cm9sLnNldFZhbHVlKCEhZSx7ZW1pdEV2ZW50OiExfSksZSYmdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pO2NvbnN0e3R5cGU6dD1zbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6bj10aGlzLmRlZmF1bHRWYWx1ZX09ZT8/e307dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5zZXRWYWx1ZSh7dHlwZTp0LHJlcG9ydFBlcmlvZDpufSx7ZW1pdEV2ZW50OiExfSksdGhpcy5vblR5cGVDaGFuZ2UodCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWxpZHx8dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5kaXNhYmxlZD9udWxsOntyZXBvcnRTdHJhdGVneUZvcm06e3ZhbGlkOiExfX19cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX1vYnNlcnZlU3RyYXRlZ3lGb3JtQ2hhbmdlKCl7dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy5vblR5cGVDaGFuZ2UoZSkpKX1vYnNlcnZlU3RyYXRlZ3lUb2dnbGUoKXt0aGlzLnNob3dTdHJhdGVneUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCksTWUoKCgpPT50aGlzLmlzRXhwYW5zaW9uTW9kZSkpKS5zdWJzY3JpYmUoKGU9PntlPyh0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoInJlcG9ydFBlcmlvZCIpLmFkZFZhbGlkYXRvcnModWUucmVxdWlyZWQpLHRoaXMub25DaGFuZ2UodGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZSkpOih0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKS5yZW1vdmVWYWxpZGF0b3JzKHVlLnJlcXVpcmVkKSx0aGlzLm9uQ2hhbmdlKG51bGwpKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfW9uVHlwZUNoYW5nZShlKXtjb25zdCB0PXRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKTtlPT09c24uT25DaGFuZ2U/dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmlzRXhwYW5zaW9uTW9kZSYmIXRoaXMuc2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZXx8dC5lbmFibGUoe2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpnbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsaW5wdXRzOntpc0V4cGFuc2lvbk1vZGU6ImlzRXhwYW5zaW9uTW9kZSIsZGVmYXVsdFZhbHVlOiJkZWZhdWx0VmFsdWUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Z28pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0lmPSJpc0V4cGFuc2lvbk1vZGUgZWxzZSBkZWZhdWx0TW9kZSIgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U3RyYXRlZ3lDb250cm9sLnZhbHVlIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1N0cmF0ZWd5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InN0cmF0ZWd5RmllbGRzIj48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNb2RlPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjc3RyYXRlZ3lGaWVsZHM+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcG9ydFN0cmF0ZWd5VHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IFJlcG9ydFR5cGVUcmFuc2xhdGVNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUgIT09IFJlcG9ydFN0cmF0ZWd5VHlwZS5PbkNoYW5nZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPlxuICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgIGdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5LnJlcG9ydC1wZXJpb2RcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJSZXBvcnRTdHJhdGVneUNvbXBvbmVudCIsZ28pLEhlKFtOKCldLGdvLnByb3RvdHlwZSwiaXNFeHBhbnNpb25Nb2RlIix2b2lkIDApLEhlKFtCKCldLGdvLnByb3RvdHlwZSwiZGVmYXVsdFZhbHVlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmdvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0icmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdJZj0iaXNFeHBhbnNpb25Nb2RlIGVsc2UgZGVmYXVsdE1vZGUiIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZSI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTdHJhdGVneUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TW9kZT5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWw8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0ic3RyYXRlZ3lGaWVsZHMiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3N0cmF0ZWd5RmllbGRzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiPnt7IFwnZ2F0ZXdheS50eXBlXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiByZXBvcnRTdHJhdGVneVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBSZXBvcnRUeXBlVHJhbnNsYXRlTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBSZXBvcnRTdHJhdGVneVR5cGUuT25DaGFuZ2UiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj5cbiAgICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5cbiAgICAgICAgICBnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5yZXBvcnQtcGVyaW9kXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0UGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntpc0V4cGFuc2lvbk1vZGU6W3t0eXBlOmF9XSxkZWZhdWx0VmFsdWU6W3t0eXBlOmF9XX19KTtjbGFzcyBmb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5pc01hc3Rlcj0hMSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5tb2RidXNEYXRhVHlwZXM9T2JqZWN0LnZhbHVlcyhlYSksdGhpcy5tb2RpZmllclR5cGVzPU9iamVjdC52YWx1ZXMoT24pLHRoaXMud2l0aEZ1bmN0aW9uQ29kZT0hMCx0aGlzLndpdGhSZXBvcnRTdHJhdGVneT0hMCx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXA9bmV3IE1hcCx0aGlzLnNob3dNb2RpZmllcnNNYXA9bmV3IE1hcCx0aGlzLmZ1bmN0aW9uQ29kZXNNYXA9bmV3IE1hcCx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVtdLHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXM9dGEsdGhpcy5Nb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXA9enQsdGhpcy5Nb2RpZmllclR5cGVzTWFwPVJuLHRoaXMuUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWU9bG4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5kZWZhdWx0UmVhZEZ1bmN0aW9uQ29kZXM9WzMsNF0sdGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXM9WzEsMl0sdGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzPVs2LDE2XSx0aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM9WzUsMTVdfW5nT25Jbml0KCl7dGhpcy53aXRoRnVuY3Rpb25Db2RlPSF0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVMsdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3k9ISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuaGlkZU5ld0ZpZWxkcyksdGhpcy5rZXlzTGlzdEZvcm1BcnJheT10aGlzLnByZXBhcmVLZXlzRm9ybUFycmF5KHRoaXMudmFsdWVzKSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPXRoaXMuZ2V0RGVmYXVsdEZ1bmN0aW9uQ29kZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX10cmFja0J5Q29udHJvbElkKGUsdCl7cmV0dXJuIHQudmFsdWUuaWR9YWRkS2V5KCl7Y29uc3QgZT1zZSg1KSx0PXRoaXMuZmIuZ3JvdXAoe3RhZzpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6W3t2YWx1ZToiIixkaXNhYmxlZDohdGhpcy5pc01hc3Rlcn0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbZWEuQllURVMsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbnVsbCxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6WzEsW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6dGhpcy5nZXREZWZhdWx0RnVuY3Rpb25Db2RlcygpWzBdLGRpc2FibGVkOiF0aGlzLndpdGhGdW5jdGlvbkNvZGV9LFt1ZS5yZXF1aXJlZF1dLHJlcG9ydFN0cmF0ZWd5Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3l9XSxtb2RpZmllclR5cGU6W3t2YWx1ZTpPbi5NVUxUSVBMSUVSLGRpc2FibGVkOiEwfV0sbW9kaWZpZXJWYWx1ZTpbe3ZhbHVlOjEsZGlzYWJsZWQ6ITB9LFt1ZS5wYXR0ZXJuKEZ0KV1dLGlkOlt7dmFsdWU6ZSxkaXNhYmxlZDohMH1dfSk7dGhpcy5zaG93TW9kaWZpZXJzTWFwLnNldChlLCExKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KGUsdGhpcy5mYi5jb250cm9sKCExKSksdGhpcy5vYnNlcnZlS2V5RGF0YVR5cGUodCksdGhpcy5vYnNlcnZlRW5hYmxlTW9kaWZpZXIodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5wdXNoKHQpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5yZW1vdmVBdCh0KSx0aGlzLmtleXNMaXN0Rm9ybUFycmF5Lm1hcmtBc0RpcnR5KCl9Y2FuY2VsKCl7dGhpcy5wb3BvdmVyLmhpZGUoKX1hcHBseUtleXNEYXRhKCl7dGhpcy5rZXlzRGF0YUFwcGxpZWQuZW1pdCh0aGlzLmdldEZvcm1WYWx1ZSgpKX1nZXRGb3JtVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXBLZXlzV2l0aE1vZGlmaWVyKHRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5P3RoaXMuY2xlYW5VcEVtcHR5U3RyYXRlZ2llcyh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKTp0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKX1jbGVhblVwRW1wdHlTdHJhdGVnaWVzKGUpe3JldHVybiBlLm1hcCgoZT0+e2NvbnN0e3JlcG9ydFN0cmF0ZWd5OnQsLi4ubn09ZTtyZXR1cm4gdD9lOm59KSl9bWFwS2V5c1dpdGhNb2RpZmllcihlKXtyZXR1cm4gZS5tYXAoKChlLHQpPT57aWYodGhpcy5zaG93TW9kaWZpZXJzTWFwLmdldCh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzW3RdLmdldCgiaWQiKS52YWx1ZSkpe2NvbnN0e21vZGlmaWVyVHlwZTp0LG1vZGlmaWVyVmFsdWU6biwuLi5hfT1lO3JldHVybiB0P3suLi5hLFt0XTpufTphfXJldHVybiBlfSkpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJmUuZm9yRWFjaCgoZT0+e2NvbnN0IG49dGhpcy5jcmVhdGVEYXRhS2V5Rm9ybUdyb3VwKGUpO3RoaXMub2JzZXJ2ZUtleURhdGFUeXBlKG4pLHRoaXMub2JzZXJ2ZUVuYWJsZU1vZGlmaWVyKG4pLHRoaXMuZnVuY3Rpb25Db2Rlc01hcC5zZXQobi5nZXQoImlkIikudmFsdWUsdGhpcy5nZXRGdW5jdGlvbkNvZGVzKGUudHlwZSkpLHQucHVzaChuKX0pKSx0aGlzLmZiLmFycmF5KHQpfWNyZWF0ZURhdGFLZXlGb3JtR3JvdXAoZSl7Y29uc3R7dGFnOnQsdmFsdWU6bix0eXBlOmEsYWRkcmVzczpvLG9iamVjdHNDb3VudDppLGZ1bmN0aW9uQ29kZTpyLG11bHRpcGxpZXI6cyxkaXZpZGVyOmwscmVwb3J0U3RyYXRlZ3k6Y309ZSxwPXNlKDUpLG09dGhpcy5zaG91bGRTaG93TW9kaWZpZXIoYSk7cmV0dXJuIHRoaXMuc2hvd01vZGlmaWVyc01hcC5zZXQocCxtKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KHAsdGhpcy5mYi5jb250cm9sKChzfHxsKSYmbSkpLHRoaXMuZmIuZ3JvdXAoe3RhZzpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbe3ZhbHVlOm4sZGlzYWJsZWQ6IXRoaXMuaXNNYXN0ZXJ9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHR5cGU6W2EsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbyxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6W2ksW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6cixkaXNhYmxlZDohdGhpcy53aXRoRnVuY3Rpb25Db2RlfSxbdWUucmVxdWlyZWRdXSxtb2RpZmllclR5cGU6W3t2YWx1ZTpsP09uLkRJVklERVI6T24uTVVMVElQTElFUixkaXNhYmxlZDohdGhpcy5lbmFibGVNb2RpZmllcnNDb250cm9sTWFwLmdldChwKS52YWx1ZX1dLG1vZGlmaWVyVmFsdWU6W3t2YWx1ZTpzPz9sPz8xLGRpc2FibGVkOiF0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KHApLnZhbHVlfSxbdWUucGF0dGVybihGdCldXSxpZDpbe3ZhbHVlOnAsZGlzYWJsZWQ6ITB9XSxyZXBvcnRTdHJhdGVneTpbe3ZhbHVlOmMsZGlzYWJsZWQ6IXRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5fV19KX1zaG91bGRTaG93TW9kaWZpZXIoZSl7cmV0dXJuISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSkpfW9ic2VydmVLZXlEYXRhVHlwZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHQpfHxlLmdldCgib2JqZWN0c0NvdW50IikucGF0Y2hWYWx1ZShuYVt0XSx7ZW1pdEV2ZW50OiExfSk7Y29uc3Qgbj10aGlzLnNob3VsZFNob3dNb2RpZmllcih0KTt0aGlzLnNob3dNb2RpZmllcnNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlLHQpfSkpfW9ic2VydmVFbmFibGVNb2RpZmllcihlKXt0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KGUuZ2V0KCJpZCIpLnZhbHVlKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT50aGlzLnRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KSkpfXRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KXtjb25zdCBuPWUuZ2V0KCJtb2RpZmllclR5cGUiKSxhPWUuZ2V0KCJtb2RpZmllclZhbHVlIik7dD8obi5lbmFibGUoKSxhLmVuYWJsZSgpKToobi5kaXNhYmxlKCksYS5kaXNhYmxlKCkpfXVwZGF0ZUZ1bmN0aW9uQ29kZXMoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RnVuY3Rpb25Db2Rlcyh0KTt0aGlzLmZ1bmN0aW9uQ29kZXNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLG4uaW5jbHVkZXMoZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnZhbHVlKXx8ZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUoblswXSx7ZW1pdEV2ZW50OiExfSl9Z2V0RnVuY3Rpb25Db2RlcyhlKXtjb25zdCB0PVsuLi5lPT09ZWEuQklUUz90aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM6W10sLi4udGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzXTtpZih0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTKXJldHVybiB0LnNvcnQoKChlLHQpPT5lLXQpKTtjb25zdCBuPVsuLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2Rlc107cmV0dXJuIGU9PT1lYS5CSVRTJiZuLnB1c2goLi4udGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXMpLHRoaXMua2V5c1R5cGU9PT1hYS5SUENfUkVRVUVTVFMmJm4ucHVzaCguLi50KSxuLnNvcnQoKChlLHQpPT5lLXQpKX1nZXREZWZhdWx0RnVuY3Rpb25Db2Rlcygpe3JldHVybiB0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTP3RoaXMuZGVmYXVsdFdyaXRlRnVuY3Rpb25Db2Rlczp0aGlzLmtleXNUeXBlPT09YWEuUlBDX1JFUVVFU1RTP1suLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLmRlZmF1bHRXcml0ZUZ1bmN0aW9uQ29kZXNdOnRoaXMuZGVmYXVsdFJlYWRGdW5jdGlvbkNvZGVzfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Zm8sZGVwczpbe3Rva2VuOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Zm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyIscGFuZWxUaXRsZToicGFuZWxUaXRsZSIsYWRkS2V5VGl0bGU6ImFkZEtleVRpdGxlIixkZWxldGVLZXlUaXRsZToiZGVsZXRlS2V5VGl0bGUiLG5vS2V5c1RleHQ6Im5vS2V5c1RleHQiLGtleXNUeXBlOiJrZXlzVHlwZSIsdmFsdWVzOiJ2YWx1ZXMiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmV0Lk1hdFNsaWRlVG9nZ2xlLHNlbGVjdG9yOiJtYXQtc2xpZGUtdG9nZ2xlIixpbnB1dHM6WyJuYW1lIiwiaWQiLCJsYWJlbFBvc2l0aW9uIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJyZXF1aXJlZCIsImNvbG9yIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJjaGVja2VkIiwiaGlkZUljb24iLCJkaXNhYmxlZEludGVyYWN0aXZlIl0sb3V0cHV0czpbImNoYW5nZSIsInRvZ2dsZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2xpZGVUb2dnbGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsQ29udGVudCxzZWxlY3RvcjoibmctdGVtcGxhdGVbbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dfSl9fWUoIk1vZGJ1c0RhdGFLZXlzUGFuZWxDb21wb25lbnQiLGZvKSxIZShbTigpXSxmby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLEhlKFtOKCldLGZvLnByb3RvdHlwZSwiaGlkZU5ld0ZpZWxkcyIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxUYSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfV0scHJvcERlY29yYXRvcnM6e2lzTWFzdGVyOlt7dHlwZTphfV0saGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dLHBhbmVsVGl0bGU6W3t0eXBlOmF9XSxhZGRLZXlUaXRsZTpbe3R5cGU6YX1dLGRlbGV0ZUtleVRpdGxlOlt7dHlwZTphfV0sbm9LZXlzVGV4dDpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVzOlt7dHlwZTphfV0scG9wb3Zlcjpbe3R5cGU6YX1dLGtleXNEYXRhQXBwbGllZDpbe3R5cGU6bH1dfX0pO2NsYXNzIHlve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy5mYj1lLHRoaXMucG9wb3ZlclNlcnZpY2U9dCx0aGlzLnJlbmRlcmVyPW4sdGhpcy52aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5jZHI9byx0aGlzLnNpbmdsZU1vZGU9ITEsdGhpcy5oaWRlTmV3RmllbGRzPSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5tb2RidXNSZWdpc3RlclR5cGVzPU9iamVjdC52YWx1ZXMoWG4pLHRoaXMubW9kYnVzVmFsdWVLZXlzPU9iamVjdC52YWx1ZXMoYWEpLHRoaXMuTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwPVpuLHRoaXMuTW9kYnVzVmFsdWVLZXk9YWEsdGhpcy5kZXN0cm95JD1uZXcgU2V9bmdPbkluaXQoKXt0aGlzLmluaXRpYWxpemVWYWx1ZXNGb3JtR3JvdXAoKSx0aGlzLm9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2lmKHRoaXMuc2luZ2xlTW9kZSl0aGlzLnZhbHVlc0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoZSkse2VtaXRFdmVudDohMX0pO2Vsc2V7Y29uc3R7aG9sZGluZ19yZWdpc3RlcnM6dCxjb2lsc19pbml0aWFsaXplcjpuLGlucHV0X3JlZ2lzdGVyczphLGRpc2NyZXRlX2lucHV0czpvfT1lO3RoaXMudmFsdWVzRm9ybUdyb3VwLnNldFZhbHVlKHtob2xkaW5nX3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUodCksY29pbHNfaW5pdGlhbGl6ZXI6dGhpcy5nZXRTaW5nbGVSZWdpc3RlclN0YXRlKG4pLGlucHV0X3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoYSksZGlzY3JldGVfaW5wdXRzOnRoaXMuZ2V0U2luZ2xlUmVnaXN0ZXJTdGF0ZShvKX0se2VtaXRFdmVudDohMX0pfXRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMudmFsdWVzRm9ybUdyb3VwLnZhbGlkP251bGw6e3ZhbHVlc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX1nZXRWYWx1ZUdyb3VwKGUsdCl7cmV0dXJuIHQ/dGhpcy52YWx1ZXNGb3JtR3JvdXAuZ2V0KHQpLmdldChlKTp0aGlzLnZhbHVlc0Zvcm1Hcm91cC5nZXQoZSl9bWFuYWdlS2V5cyhlLHQsbixhKXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG89dC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKHRoaXMucG9wb3ZlclNlcnZpY2UuaGFzUG9wb3ZlcihvKSlyZXR1cm4gdm9pZCB0aGlzLnBvcG92ZXJTZXJ2aWNlLmhpZGVQb3BvdmVyKG8pO2NvbnN0IGk9dGhpcy5nZXRWYWx1ZUdyb3VwKG4sYSkscj17dmFsdWVzOmkudmFsdWUsaXNNYXN0ZXI6IXRoaXMuc2luZ2xlTW9kZSxrZXlzVHlwZTpuLHBhbmVsVGl0bGU6b2EuZ2V0KG4pLGFkZEtleVRpdGxlOmlhLmdldChuKSxkZWxldGVLZXlUaXRsZTpyYS5nZXQobiksbm9LZXlzVGV4dDpzYS5nZXQobiksaGlkZU5ld0ZpZWxkczp0aGlzLmhpZGVOZXdGaWVsZHN9LHM9dGhpcy5wb3BvdmVyU2VydmljZS5kaXNwbGF5UG9wb3ZlcihvLHRoaXMucmVuZGVyZXIsdGhpcy52aWV3Q29udGFpbmVyUmVmLGZvLCJsZWZ0Qm90dG9tIiwhMSxudWxsLHIse30se30se30sITApO3MudGJDb21wb25lbnRSZWYuaW5zdGFuY2UucG9wb3Zlcj1zLHMudGJDb21wb25lbnRSZWYuaW5zdGFuY2Uua2V5c0RhdGFBcHBsaWVkLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3MuaGlkZSgpLGkucGF0Y2hWYWx1ZShlKSxpLm1hcmtBc0RpcnR5KCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9KSl9aW5pdGlhbGl6ZVZhbHVlc0Zvcm1Hcm91cCgpe2NvbnN0IGU9KCk9PnRoaXMuZmIuZ3JvdXAodGhpcy5tb2RidXNWYWx1ZUtleXMucmVkdWNlKCgoZSx0KT0+KGVbdF09dGhpcy5mYi5jb250cm9sKFtbXSxbXV0pLGUpKSx7fSkpO3RoaXMuc2luZ2xlTW9kZT90aGlzLnZhbHVlc0Zvcm1Hcm91cD1lKCk6dGhpcy52YWx1ZXNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh0aGlzLm1vZGJ1c1JlZ2lzdGVyVHlwZXMucmVkdWNlKCgodCxuKT0+KHRbbl09ZSgpLHQpKSx7fSkpfW9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl7dGhpcy52YWx1ZXNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1nZXRTaW5nbGVSZWdpc3RlclN0YXRlKGUpe3JldHVybnthdHRyaWJ1dGVzOmU/LmF0dHJpYnV0ZXM/P1tdLHRpbWVzZXJpZXM6ZT8udGltZXNlcmllcz8/W10sYXR0cmlidXRlVXBkYXRlczplPy5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6ZT8ucnBjPz9bXX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp5byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp5byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGlucHV0czp7c2luZ2xlTW9kZToic2luZ2xlTW9kZSIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnlvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwLHNlbGVjdG9yOiJtYXQtYmFzaWMtY2hpcCwgW21hdC1iYXNpYy1jaGlwXSwgbWF0LWNoaXAsIFttYXQtY2hpcF0iLGlucHV0czpbInJvbGUiLCJpZCIsImFyaWEtbGFiZWwiLCJhcmlhLWRlc2NyaXB0aW9uIiwidmFsdWUiLCJjb2xvciIsInJlbW92YWJsZSIsImhpZ2hsaWdodGVkIiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVkIl0sb3V0cHV0czpbInJlbW92ZWQiLCJkZXN0cm95ZWQiXSxleHBvcnRBczpbIm1hdENoaXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwTGlzdGJveCxzZWxlY3RvcjoibWF0LWNoaXAtbGlzdGJveCIsaW5wdXRzOlsibXVsdGlwbGUiLCJhcmlhLW9yaWVudGF0aW9uIiwic2VsZWN0YWJsZSIsImNvbXBhcmVXaXRoIiwicmVxdWlyZWQiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwidmFsdWUiXSxvdXRwdXRzOlsiY2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YnQuVGJJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1pY29uIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsidGJJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6a2Esc2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixpbnB1dHM6WyJ0Yi1lbGxpcHNpcy1jaGlwLWxpc3QiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNWYWx1ZXNDb21wb25lbnQiLHlvKSxIZShbTigpXSx5by5wcm90b3R5cGUsInNpbmdsZU1vZGUiLHZvaWQgMCksSGUoW04oKV0seW8ucHJvdG90eXBlLCJoaWRlTmV3RmllbGRzIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+eW8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGthXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7c2luZ2xlTW9kZTpbe3R5cGU6YX1dLGhpZGVOZXdGaWVsZHM6W3t0eXBlOmF9XX19KTtjbGFzcyBib3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMuaXNNYXN0ZXI9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe2NlcnRmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxrZXlmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0sc2VydmVyX2hvc3RuYW1lOlsiIixbdWUucGF0dGVybihrdCldXSxyZXFjbGljZXJ0Olt7dmFsdWU6ITEsZGlzYWJsZWQ6ITB9XX0pLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVNYXN0ZXJFbmFibGluZygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWUsdGhpcy5kaXNhYmxlZD90aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pOnRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnVwZGF0ZU1hc3RlckVuYWJsaW5nKCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe2NvbnN0e2NlcnRmaWxlOnQscGFzc3dvcmQ6bixrZXlmaWxlOmEsc2VydmVyX2hvc3RuYW1lOm99PWUsaT17Y2VydGZpbGU6dD8/IiIscGFzc3dvcmQ6bj8/IiIsa2V5ZmlsZTphPz8iIixzZXJ2ZXJfaG9zdG5hbWU6bz8/IiIscmVxY2xpY2VydDohIWUucmVxY2xpY2VydH07dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC5yZXNldChpLHtlbWl0RXZlbnQ6ITF9KX11cGRhdGVNYXN0ZXJFbmFibGluZygpe3RoaXMuaXNNYXN0ZXI/KHRoaXMuZGlzYWJsZWR8fHRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZ2V0KCJyZXFjbGljZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0aGlzLmRpc2FibGVkfHx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgicmVxY2xpY2VydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pKX1vYnNlcnZlVmFsdWVDaGFuZ2VzKCl7dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Ym8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfV0sdXNlc09uQ2hhbmdlczohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmhpbnRzLnBhdGgtaW4tb3NcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2VydGZpbGUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucHJpdmF0ZS1rZXktcGF0aFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXlmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSIhaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1ob3N0bmFtZTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJfaG9zdG5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJpc01hc3RlciIgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXFjbGljZXJ0Ij5cbiAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5yZXF1ZXN0LWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1IZShbTigpXSxiby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Ym8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIFtmb3JtR3JvdXBdPSJzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5oaW50cy5wYXRoLWluLW9zXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jYS1jZXJ0XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNlcnRmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnByaXZhdGUta2V5LXBhdGhcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5ZmlsZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iIWlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItaG9zdG5hbWU8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ic2VydmVyX2hvc3RuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmVxY2xpY2VydCI+XG4gICAgICA8bWF0LWxhYmVsPlxuICAgICAgICB7eyBcJ2dhdGV3YXkucmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtbGFiZWw+XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntpc01hc3Rlcjpbe3R5cGU6YX1dfX0pO2NsYXNzIGhvIGV4dGVuZHMgUHtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKHQsbixvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9byx0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c1Bhcml0aWVzPU9iamVjdC52YWx1ZXMoWW4pLHRoaXMubW9kYnVzQnl0ZVNpemVzPSRuLHRoaXMubW9kYnVzQmF1ZHJhdGVzPWxhLHRoaXMubW9kYnVzT3JkZXJUeXBlPU9iamVjdC52YWx1ZXMoSm4pLHRoaXMuTW9kYnVzUHJvdG9jb2xUeXBlPUhuLHRoaXMuTW9kYnVzUGFyaXR5TGFiZWxzTWFwPVFuLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5Nb2RidXNNZXRob2RMYWJlbHNNYXA9S24sdGhpcy5SZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZT1sbix0aGlzLm1vZGJ1c0hlbHBMaW5rPXYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tb2RidXMvI3NlY3Rpb24tbWFzdGVyLWRlc2NyaXB0aW9uLWFuZC1jb25maWd1cmF0aW9uLXBhcmFtZXRlcnMiLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSIsInN0b3BiaXRzIiwiYnl0ZXNpemUiLCJwYXJpdHkiLCJzdHJpY3QiXSx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXM9WyJwb3J0Iiwic2VjdXJpdHkiLCJob3N0Il0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5zaG93U2VjdXJpdHlDb250cm9sPXRoaXMuZmIuY29udHJvbCghMSksdGhpcy5pbml0aWFsaXplU2xhdmVGb3JtR3JvdXAoKSx0aGlzLnVwZGF0ZVNsYXZlRm9ybUdyb3VwKCksdGhpcy51cGRhdGVDb250cm9sc0VuYWJsaW5nKHRoaXMuZGF0YS52YWx1ZS50eXBlKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCksdGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnBhdGNoVmFsdWUoISF0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkmJiFlZSh0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkse30pKX1nZXQgcHJvdG9jb2xUeXBlKCl7cmV0dXJuIHRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5nZXRTbGF2ZVJlc3VsdERhdGEoKSl9aW5pdGlhbGl6ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltIbi5UQ1BdLGhvc3Q6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHBvcnQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbihFdC5NSU4pLHVlLm1heChFdC5NQVgpXV0sc2VyaWFsUG9ydDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbWV0aG9kOltXbi5TT0NLRVQsW3VlLnJlcXVpcmVkXV0sYmF1ZHJhdGU6W3RoaXMubW9kYnVzQmF1ZHJhdGVzWzBdXSxzdG9wYml0czpbMV0sYnl0ZXNpemU6WyRuWzBdXSxwYXJpdHk6W1luLk5vbmVdLHN0cmljdDpbITBdLHVuaXRJZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxkZXZpY2VOYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxkZXZpY2VUeXBlOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0aW1lb3V0OlszNV0sYnl0ZU9yZGVyOltKbi5CSUddLHdvcmRPcmRlcjpbSm4uQklHXSxyZXRyaWVzOlshMF0scmV0cnlPbkVtcHR5OlshMF0scmV0cnlPbkludmFsaWQ6WyEwXSxwb2xsUGVyaW9kOls1ZTMsW3VlLnJlcXVpcmVkXV0sY29ubmVjdEF0dGVtcHRUaW1lTXM6WzVlMyxbdWUucmVxdWlyZWRdXSxjb25uZWN0QXR0ZW1wdENvdW50Ols1LFt1ZS5yZXF1aXJlZF1dLHdhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXM6WzNlNSxbdWUucmVxdWlyZWRdXSx2YWx1ZXM6W3t9XSxzZWN1cml0eTpbe31dfSksdGhpcy5hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpfXVwZGF0ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKHsuLi50aGlzLmRhdGEudmFsdWUscG9ydDp0aGlzLmRhdGEudmFsdWUudHlwZT09PUhuLlNlcmlhbD9udWxsOnRoaXMuZGF0YS52YWx1ZS5wb3J0LHNlcmlhbFBvcnQ6dGhpcy5kYXRhLnZhbHVlLnR5cGU9PT1Ibi5TZXJpYWw/dGhpcy5kYXRhLnZhbHVlLnBvcnQ6IiIsdmFsdWVzOnthdHRyaWJ1dGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVzPz9bXSx0aW1lc2VyaWVzOnRoaXMuZGF0YS52YWx1ZS50aW1lc2VyaWVzPz9bXSxhdHRyaWJ1dGVVcGRhdGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6dGhpcy5kYXRhLnZhbHVlLnJwYz8/W119fSl9b2JzZXJ2ZVR5cGVDaGFuZ2UoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbnRyb2xzRW5hYmxpbmcoZSksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlQ29udHJvbHNFbmFibGluZyhlKXtjb25zdFt0LG5dPWU9PT1Ibi5TZXJpYWw/W3RoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cyx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXNdOlt0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXMsdGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzXTt0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKSx0aGlzLnVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcodGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlKX1vYnNlcnZlU2hvd1NlY3VyaXR5KCl7dGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlU2VjdXJpdHlFbmFibGluZyhlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcoZSl7ZSYmdGhpcy5wcm90b2NvbFR5cGUhPT1Ibi5TZXJpYWw/dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgic2VjdXJpdHkiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmhvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fWUoIk1vZGJ1c1NsYXZlRGlhbG9nQWJzdHJhY3QiLGhvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpvdC5TdG9yZX0se3R5cGU6aXQuUm91dGVyfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOltYZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nUmVmfV19KTtjbGFzcyB4byBleHRlbmRzIGhve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LG4sYSxvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9b31nZXRTbGF2ZVJlc3VsdERhdGEoKXtjb25zdHt2YWx1ZXM6ZSx0eXBlOnQsc2VyaWFsUG9ydDpuLC4uLmF9PXRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAudmFsdWUsbz17Li4uYSx0eXBlOnQsLi4uZX07cmV0dXJuIHQ9PT1Ibi5TZXJpYWwmJihvLnBvcnQ9biksby5yZXBvcnRTdHJhdGVneXx8ZGVsZXRlIG8ucmVwb3J0U3RyYXRlZ3ksb31hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuYWRkQ29udHJvbCgicmVwb3J0U3RyYXRlZ3kiLHRoaXMuZmIuY29udHJvbChudWxsKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp4byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp4byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNTbGF2ZURpYWxvZ0NvbXBvbmVudCIseG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCx5byxibyx3YSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzbGF2ZXMtY29uZmlnLWNvbnRhaW5lciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IFwnZ2F0ZXdheS5zZXJ2ZXItc2xhdmVcJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0ibW9kYnVzSGVscExpbmsiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IFtmb3JtR3JvdXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgIDxkaXYgY2xhc3M9InN0cm9rZWQgdGItZm9ybS1wYW5lbCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItY29ubmVjdGlvbjwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c1Byb3RvY29sVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldCh0eXBlKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgZWxzZSBzZXJpYWxQb3J0IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zZXJpYWwtcG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InNlcmlhbFBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3NlcmlhbFBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZnJhbWVyLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5Lm1ldGhvZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIHByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCA/IG1vZGJ1c1NlcmlhbE1ldGhvZFR5cGVzIDogbW9kYnVzTWV0aG9kVHlwZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJtZXRob2QiPnt7IE1vZGJ1c01ldGhvZExhYmVsc01hcC5nZXQobWV0aG9kKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYmF1ZHJhdGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYmF1ZHJhdGU8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJhdWRyYXRlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHJhdGUgb2YgbW9kYnVzQmF1ZHJhdGVzIiBbdmFsdWVdPSJyYXRlIj57eyByYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGVzaXplXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGVzaXplPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlc2l6ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzaXplIG9mIG1vZGJ1c0J5dGVTaXplcyIgW3ZhbHVlXT0ic2l6ZSI+e3sgc2l6ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdG9wYml0c1wnIHwgdHJhbnNsYXRlIH19IiAgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcGJpdHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InN0b3BiaXRzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wYXJpdHlcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucGFyaXR5PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJwYXJpdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgcGFyaXR5IG9mIG1vZGJ1c1Bhcml0aWVzIiBbdmFsdWVdPSJwYXJpdHkiPnt7IE1vZGJ1c1Bhcml0eUxhYmVsc01hcC5nZXQocGFyaXR5KSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzdHJpY3QiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnN0cmljdFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RyaWN0XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMudW5pdC1pZFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS51bml0LWlkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1bml0SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51bml0LWlkLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwndW5pdElkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtcHJvZmlsZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VUeXBlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0iZGF0YS5oaWRlTmV3RmllbGRzIGVsc2UgcmVwb3J0U3RyYXRlZ3kiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtZGF0YS1vbi1jaGFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZXBvcnRTdHJhdGVneT5cbiAgICAgICAgICA8dGItcmVwb3J0LXN0cmF0ZWd5IFtkZWZhdWx0VmFsdWVdPSJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZS5EZXZpY2UiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0U3RyYXRlZ3kiIFtpc0V4cGFuc2lvbk1vZGVdPSJ0cnVlIi8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdGlvbi10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rpb24tdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlLW9yZGVyXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGUtb3JkZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJ5dGVPcmRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgb3JkZXIgb2YgbW9kYnVzT3JkZXJUeXBlIiBbdmFsdWVdPSJvcmRlciI+e3sgb3JkZXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud29yZC1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS53b3JkLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ3b3JkT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50bHMtY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIGNsYXNzPSJzZWN1cml0eS1jb25maWciIGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHkiPjwvdGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZz5cbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cmllcyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnJldHJpZXNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRyeU9uRW1wdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWVtcHR5XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkludmFsaWQiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb2xsLXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXkucG9sbC1wZXJpb2RcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC10aW1lXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC10aW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjb25uZWN0QXR0ZW1wdFRpbWVNcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdC1hdHRlbXB0LWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC1jb3VudDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRDb3VudCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHNcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9IndhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICA8dGItbW9kYnVzLXZhbHVlcyBbc2luZ2xlTW9kZV09InRydWUiIFtoaWRlTmV3RmllbGRzXT0iZGF0YS5oaWRlTmV3RmllbGRzIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmludmFsaWQgfHwgIXNsYXZlQ29uZmlnRm9ybUdyb3VwLmRpcnR5Ij5cbiAgICAgIHt7IGRhdGEuYnV0dG9uVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuc2xhdmVzLWNvbmZpZy1jb250YWluZXJ7d2lkdGg6ODB2dzttYXgtd2lkdGg6OTAwcHh9Omhvc3QgLnNsYXZlLW5hbWUtbGFiZWx7bWFyZ2luLXJpZ2h0OjE2cHg7Y29sb3I6IzAwMDAwMGRlfTpob3N0IC5maXhlZC10aXRsZS13aWR0aC0yNjB7bWluLXdpZHRoOjI2MHB4fTpob3N0IDo6bmctZGVlcCAuc2VjdXJpdHktY29uZmlnIC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6MjMwcHh9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn1dfSk7Y2xhc3Mgdm8gZXh0ZW5kcyBob3tjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKGUsdCxuLGEsbyksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnJvdXRlcj1uLHRoaXMuZGF0YT1hLHRoaXMuZGlhbG9nUmVmPW99Z2V0U2xhdmVSZXN1bHREYXRhKCl7Y29uc3R7dmFsdWVzOmUsdHlwZTp0LHNlcmlhbFBvcnQ6biwuLi5hfT10aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlLG89ey4uLmEsdHlwZTp0LC4uLmV9O3JldHVybiB0PT09SG4uU2VyaWFsJiYoby5wb3J0PW4pLG99YWRkRmllbGRzVG9Gb3JtR3JvdXAoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmFkZENvbnRyb2woInNlbmREYXRhT25seU9uQ2hhbmdlIix0aGlzLmZiLmNvbnRyb2woITEpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnZvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lTbGF2ZURpYWxvZ0NvbXBvbmVudCIsdm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktc2xhdmUtZGlhbG9nIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQseW8sYm8sd2EsZ29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9XX0pO2NsYXNzIHdve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy50cmFuc2xhdGU9ZSx0aGlzLmRpYWxvZz10LHRoaXMuZGlhbG9nU2VydmljZT1uLHRoaXMuZmI9YSx0aGlzLmNkcj1vLHRoaXMuaXNMZWdhY3k9ITEsdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2g9dGhpcy5mYi5jb250cm9sKCIiLHtub25OdWxsYWJsZTohMH0pLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFzdGVyRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3NsYXZlczp0aGlzLmZiLmFycmF5KFtdKX0pLHRoaXMuZGF0YVNvdXJjZT1uZXcgQ299Z2V0IHNsYXZlcygpe3JldHVybiB0aGlzLm1hc3RlckZvcm1Hcm91cC5nZXQoInNsYXZlcyIpfW5nT25Jbml0KCl7dGhpcy5tYXN0ZXJGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlVGFibGVEYXRhKGUuc2xhdmVzKSx0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50ZXh0U2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFZlKDE1MCksQmUoKChlLHQpPT4oZT8/IiIpPT09dC50cmltKCkpKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSxlLnRyaW0oKSkpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5zbGF2ZXMuY2xlYXIoKSx0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKGUuc2xhdmVzKX1lbnRlckZpbHRlck1vZGUoKXt0aGlzLnRleHRTZWFyY2hNb2RlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtjb25zdCBlPXRoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50O2UuZm9jdXMoKSxlLnNldFNlbGVjdGlvblJhbmdlKDAsMCl9ZXhpdEZpbHRlck1vZGUoKXt0aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1pZSh0KSxhPW4/dGhpcy5zbGF2ZXMuYXQodCkudmFsdWU6e307dGhpcy5nZXRTbGF2ZURpYWxvZyhhLG4/ImFjdGlvbi5hcHBseSI6ImFjdGlvbi5hZGQiKS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihuP3RoaXMuc2xhdmVzLmF0KHQpLnBhdGNoVmFsdWUoZSk6dGhpcy5zbGF2ZXMucHVzaCh0aGlzLmZiLmNvbnRyb2woZSkpLHRoaXMubWFzdGVyRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfWdldFNsYXZlRGlhbG9nKGUsdCl7cmV0dXJuIHRoaXMuaXNMZWdhY3k/dGhpcy5kaWFsb2cub3Blbih2byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e3ZhbHVlOmUsaGlkZU5ld0ZpZWxkczohMCxidXR0b25UaXRsZTp0fX0pOnRoaXMuZGlhbG9nLm9wZW4oeG8se2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOnt2YWx1ZTplLGJ1dHRvblRpdGxlOnQsaGlkZU5ld0ZpZWxkczohMX19KX1kZWxldGVTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtc2xhdmUtdGl0bGUiKSwiIix0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJih0aGlzLnNsYXZlcy5yZW1vdmVBdCh0KSx0aGlzLm1hc3RlckZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpKX0pKX11cGRhdGVUYWJsZURhdGEoZSx0KXt0JiYoZT1lLmZpbHRlcigoZT0+T2JqZWN0LnZhbHVlcyhlKS5zb21lKChlPT5lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpKSkpKSksdGhpcy5kYXRhU291cmNlLmxvYWREYXRhKGUpfXB1c2hEYXRhQXNGb3JtQXJyYXlzKGUpe2U/Lmxlbmd0aCYmZS5mb3JFYWNoKChlPT50aGlzLnNsYXZlcy5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOndvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpYLkRpYWxvZ1NlcnZpY2V9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOndvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOntpc0xlZ2FjeToiaXNMZWdhY3kifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6InNlYXJjaElucHV0RmllbGQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInNlYXJjaElucHV0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJwaXBlIix0eXBlOl8uQXN5bmNQaXBlLG5hbWU6ImFzeW5jIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpodC5NYXRNZW51LHNlbGVjdG9yOiJtYXQtbWVudSIsaW5wdXRzOlsiYmFja2Ryb3BDbGFzcyIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwieFBvc2l0aW9uIiwieVBvc2l0aW9uIiwib3ZlcmxhcFRyaWdnZXIiLCJoYXNCYWNrZHJvcCIsImNsYXNzIiwiY2xhc3NMaXN0Il0sb3V0cHV0czpbImNsb3NlZCIsImNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6aHQuTWF0TWVudVRyaWdnZXIsc2VsZWN0b3I6IlttYXQtbWVudS10cmlnZ2VyLWZvcl0sIFttYXRNZW51VHJpZ2dlckZvcl0iLGlucHV0czpbIm1hdC1tZW51LXRyaWdnZXItZm9yIiwibWF0TWVudVRyaWdnZXJGb3IiLCJtYXRNZW51VHJpZ2dlckRhdGEiLCJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyJdLG91dHB1dHM6WyJtZW51T3BlbmVkIiwib25NZW51T3BlbiIsIm1lbnVDbG9zZWQiLCJvbk1lbnVDbG9zZSJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFRhYmxlLHNlbGVjdG9yOiJtYXQtdGFibGUsIHRhYmxlW21hdC10YWJsZV0iLGV4cG9ydEFzOlsibWF0VGFibGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGxEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJSb3dEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJSb3dEZWZdIixpbnB1dHM6WyJtYXRIZWFkZXJSb3dEZWYiLCJtYXRIZWFkZXJSb3dEZWZTdGlja3kiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENvbHVtbkRlZixzZWxlY3RvcjoiW21hdENvbHVtbkRlZl0iLGlucHV0czpbIm1hdENvbHVtbkRlZiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbERlZixzZWxlY3RvcjoiW21hdENlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdFJvd0RlZixzZWxlY3RvcjoiW21hdFJvd0RlZl0iLGlucHV0czpbIm1hdFJvd0RlZkNvbHVtbnMiLCJtYXRSb3dEZWZXaGVuIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsLHNlbGVjdG9yOiJtYXQtaGVhZGVyLWNlbGwsIHRoW21hdC1oZWFkZXItY2VsbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbCxzZWxlY3RvcjoibWF0LWNlbGwsIHRkW21hdC1jZWxsXSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRIZWFkZXJSb3csc2VsZWN0b3I6Im1hdC1oZWFkZXItcm93LCB0clttYXQtaGVhZGVyLXJvd10iLGV4cG9ydEFzOlsibWF0SGVhZGVyUm93Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRSb3csc2VsZWN0b3I6Im1hdC1yb3csIHRyW21hdC1yb3ddIixleHBvcnRBczpbIm1hdFJvdyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFNob3dIaWRlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeFNob3ddLCBbZnhTaG93LnByaW50XSwgIFtmeFNob3cueHNdLCBbZnhTaG93LnNtXSwgW2Z4U2hvdy5tZF0sIFtmeFNob3cubGddLCBbZnhTaG93LnhsXSwgIFtmeFNob3cubHQtc21dLCBbZnhTaG93Lmx0LW1kXSwgW2Z4U2hvdy5sdC1sZ10sIFtmeFNob3cubHQteGxdLCAgW2Z4U2hvdy5ndC14c10sIFtmeFNob3cuZ3Qtc21dLCBbZnhTaG93Lmd0LW1kXSwgW2Z4U2hvdy5ndC1sZ10sICBbZnhIaWRlXSwgW2Z4SGlkZS5wcmludF0sICBbZnhIaWRlLnhzXSwgW2Z4SGlkZS5zbV0sIFtmeEhpZGUubWRdLCBbZnhIaWRlLmxnXSwgW2Z4SGlkZS54bF0sICBbZnhIaWRlLmx0LXNtXSwgW2Z4SGlkZS5sdC1tZF0sIFtmeEhpZGUubHQtbGddLCBbZnhIaWRlLmx0LXhsXSwgIFtmeEhpZGUuZ3QteHNdLCBbZnhIaWRlLmd0LXNtXSwgW2Z4SGlkZS5ndC1tZF0sIFtmeEhpZGUuZ3QtbGddIixpbnB1dHM6WyJmeFNob3ciLCJmeFNob3cucHJpbnQiLCJmeFNob3cueHMiLCJmeFNob3cuc20iLCJmeFNob3cubWQiLCJmeFNob3cubGciLCJmeFNob3cueGwiLCJmeFNob3cubHQtc20iLCJmeFNob3cubHQtbWQiLCJmeFNob3cubHQtbGciLCJmeFNob3cubHQteGwiLCJmeFNob3cuZ3QteHMiLCJmeFNob3cuZ3Qtc20iLCJmeFNob3cuZ3QtbWQiLCJmeFNob3cuZ3QtbGciLCJmeEhpZGUiLCJmeEhpZGUucHJpbnQiLCJmeEhpZGUueHMiLCJmeEhpZGUuc20iLCJmeEhpZGUubWQiLCJmeEhpZGUubGciLCJmeEhpZGUueGwiLCJmeEhpZGUubHQtc20iLCJmeEhpZGUubHQtbWQiLCJmeEhpZGUubHQtbGciLCJmeEhpZGUubHQteGwiLCJmeEhpZGUuZ3QteHMiLCJmeEhpZGUuZ3Qtc20iLCJmeEhpZGUuZ3QtbWQiLCJmeEhpZGUuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNNYXN0ZXJUYWJsZUNvbXBvbmVudCIsd28pLEhlKFt4dCgpXSx3by5wcm90b3R5cGUsImlzTGVnYWN5Iix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntzZWFyY2hJbnB1dEZpZWxkOlt7dHlwZTpvLGFyZ3M6WyJzZWFyY2hJbnB1dCJdfV0saXNMZWdhY3k6W3t0eXBlOmF9XX19KTtjbGFzcyBDbyBleHRlbmRzIFJ7Y29uc3RydWN0b3IoKXtzdXBlcigpfX1lKCJTbGF2ZXNEYXRhc291cmNlIixDbyk7Y2xhc3MgVG8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5lbmFibGVTbGF2ZUNvbnRyb2w9bmV3IHllKCExKSx0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVTbGF2ZUVuYWJsaW5nKGUpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzbGF2ZSIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohIXRoaXMub25DaGFuZ2V9KX0pKX13cml0ZVZhbHVlKGUpe3N1cGVyLndyaXRlVmFsdWUoZSksdGhpcy5vbkVuYWJsZVNsYXZlQ29udHJvbChlKX12YWxpZGF0ZSgpe2NvbnN0e21hc3RlcjplLHNsYXZlOnR9PXRoaXMuYmFzaWNGb3JtR3JvdXAudmFsdWUsbj0hZT8uc2xhdmVzPy5sZW5ndGgmJihlZSh0LHt9KXx8IXQpO3JldHVybiF0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkfHxuP3tiYXNpY0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fTpudWxsfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXN0ZXI6W10sc2xhdmU6W119KX11cGRhdGVTbGF2ZUVuYWJsaW5nKGUpe2U/dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInNsYXZlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgic2xhdmUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1vbkVuYWJsZVNsYXZlQ29udHJvbChlKXt0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC5zZXRWYWx1ZSghIWUuc2xhdmUmJiFlZShlLnNsYXZlLHt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpUbyxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6VG8sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnR9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdEaXJlY3RpdmUiLFRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W119KTtjbGFzcyBTb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNQcm90b2NvbExhYmVsc01hcD16bix0aGlzLk1vZGJ1c01ldGhvZExhYmVsc01hcD1Lbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c09yZGVyVHlwZT1PYmplY3QudmFsdWVzKEpuKSx0aGlzLk1vZGJ1c1Byb3RvY29sVHlwZT1Ibix0aGlzLm1vZGJ1c0JhdWRyYXRlcz1sYSx0aGlzLmlzU2xhdmVFbmFibGVkPSExLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSJdLHRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cz1bInBvcnQiLCJzZWN1cml0eSIsImhvc3QiXSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0huLlRDUF0saG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSxzZXJpYWxQb3J0OlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2Q6W1duLlNPQ0tFVF0sdW5pdElkOltudWxsLFt1ZS5yZXF1aXJlZF1dLGJhdWRyYXRlOlt0aGlzLm1vZGJ1c0JhdWRyYXRlc1swXV0sZGV2aWNlTmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlVHlwZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9sbFBlcmlvZDpbNWUzLFt1ZS5yZXF1aXJlZF1dLHNlbmREYXRhVG9UaGluZ3NCb2FyZDpbITFdLGJ5dGVPcmRlcjpbSm4uQklHXSx3b3JkT3JkZXI6W0puLkJJR10sc2VjdXJpdHk6W10saWRlbnRpdHk6dGhpcy5mYi5ncm91cCh7dmVuZG9yTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdENvZGU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHZlbmRvclVybDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdE5hbWU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLG1vZGVsTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx2YWx1ZXM6W119KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCl9Z2V0IHByb3RvY29sVHlwZSgpe3JldHVybiB0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzbGF2ZUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5wYXRjaFZhbHVlKCEhZS5zZWN1cml0eSYmIWVlKGUuc2VjdXJpdHkse30pKSx0aGlzLnVwZGF0ZVNsYXZlQ29uZmlnKGUpfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5pc1NsYXZlRW5hYmxlZD0hZSx0aGlzLnVwZGF0ZUZvcm1FbmFibGVTdGF0ZSgpfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PntlLnR5cGU9PT1Ibi5TZXJpYWwmJihlLnBvcnQ9ZS5zZXJpYWxQb3J0LGRlbGV0ZSBlLnNlcmlhbFBvcnQpLHRoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlRm9ybUVuYWJsZVN0YXRlKCksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUVuYWJsZVN0YXRlKCl7dGhpcy5pc1NsYXZlRW5hYmxlZD8odGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpLHRoaXMudXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCksdGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZSh0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWUpfW9ic2VydmVTaG93U2VjdXJpdHkoKXt0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZShlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxlKGUpe2UmJnRoaXMuaXNTbGF2ZUVuYWJsZWQmJnRoaXMucHJvdG9jb2xUeXBlIT09SG4uU2VyaWFsP3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJzZWN1cml0eSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCl7Y29uc3QgZT10aGlzLnByb3RvY29sVHlwZT09PUhuLlNlcmlhbCx0PWU/dGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cyxuPWU/dGhpcy50Y3BVZHBTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5czt0aGlzLmlzU2xhdmVFbmFibGVkJiZ0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKX11cGRhdGVTbGF2ZUNvbmZpZyhlKXtjb25zdHt0eXBlOnQ9SG4uVENQLG1ldGhvZDpuPVduLlJUVSx1bml0SWQ6YT0wLGRldmljZU5hbWU6bz0iIixkZXZpY2VUeXBlOmk9IiIscG9sbFBlcmlvZDpyPTVlMyxzZW5kRGF0YVRvVGhpbmdzQm9hcmQ6cz0hMSxieXRlT3JkZXI6bD1Kbi5CSUcsd29yZE9yZGVyOmM9Sm4uQklHLHNlY3VyaXR5OnA9e30saWRlbnRpdHk6bT17dmVuZG9yTmFtZToiIixwcm9kdWN0Q29kZToiIix2ZW5kb3JVcmw6IiIscHJvZHVjdE5hbWU6IiIsbW9kZWxOYW1lOiIifSx2YWx1ZXM6ZD17fSxiYXVkcmF0ZTp1PXRoaXMubW9kYnVzQmF1ZHJhdGVzWzBdLGhvc3Q6Zz0iIixwb3J0OmY9bnVsbH09ZSx5PXt0eXBlOnQsbWV0aG9kOm4sdW5pdElkOmEsZGV2aWNlTmFtZTpvLGRldmljZVR5cGU6aSxwb2xsUGVyaW9kOnIsc2VuZERhdGFUb1RoaW5nc0JvYXJkOiEhcyxieXRlT3JkZXI6bCx3b3JkT3JkZXI6YyxzZWN1cml0eTpwLGlkZW50aXR5Om0sdmFsdWVzOmQsYmF1ZHJhdGU6dSxob3N0OnQ9PT1Ibi5TZXJpYWw/IiI6Zyxwb3J0OnQ9PT1Ibi5TZXJpYWw/bnVsbDpmLHNlcmlhbFBvcnQ6dD09PUhuLlNlcmlhbD9mOiIifTt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnNldFZhbHVlKHkse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnlvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtdmFsdWVzIixpbnB1dHM6WyJzaW5nbGVNb2RlIiwiaGlkZU5ld0ZpZWxkcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJpc01hc3RlciJdfSx7a2luZDoicGlwZSIsdHlwZTp3YSxuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+U28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELHlvLGJvLHdhLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dfSk7Y2xhc3Mga28gZXh0ZW5kcyBUb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc0xlZ2FjeT0hMX1tYXBDb25maWdUb0Zvcm1WYWx1ZSh7bWFzdGVyOmUsc2xhdmU6dH0pe3JldHVybnttYXN0ZXI6ZT8uc2xhdmVzP2U6e3NsYXZlczpbXX0sc2xhdmU6dD8/e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTprbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1iYXNpYy1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5rbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpTbyxzZWxlY3RvcjoidGItbW9kYnVzLXNsYXZlLWNvbmZpZyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d28sc2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGlucHV0czpbImlzTGVnYWN5Il19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdDb21wb25lbnQiLGtvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmtvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+a28pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBMbyBleHRlbmRzIFRve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzTGVnYWN5PSEwfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXI/LnNsYXZlcz9lLm1hc3Rlcjp7c2xhdmVzOltdfSxzbGF2ZTplLnNsYXZlP2hhLm1hcFNsYXZlVG9VcGdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6TG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubWFzdGVyLWNvbm5lY3Rpb25zXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDx0Yi1tb2RidXMtbWFzdGVyLXRhYmxlIFtpc0xlZ2FjeV09ImlzTGVnYWN5IiBmb3JtQ29udHJvbE5hbWU9Im1hc3RlciI+PC90Yi1tb2RidXMtbWFzdGVyLXRhYmxlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIiPnt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMtc2VydmVyXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIFtmb3JtQ29udHJvbF09ImVuYWJsZVNsYXZlQ29udHJvbCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8dGItbW9kYnVzLXNsYXZlLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNsYXZlIj48L3RiLW1vZGJ1cy1zbGF2ZS1jb25maWc+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlNvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2xhdmUtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3byxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOlsiaXNMZWdhY3kiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lCYXNpY0NvbmZpZ0NvbXBvbmVudCIsTG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBGbyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm1hcHBpbmdUeXBlcz1mbix0aGlzLmlzTGVnYWN5PSEwfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXBwaW5nOltdLHNlcnZlcjpbXX0pfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybntzZXJ2ZXI6ZS5zZXJ2ZXI/eGEubWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZS5zZXJ2ZXIpOnt9LG1hcHBpbmc6ZS5zZXJ2ZXI/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUuc2VydmVyLm1hcHBpbmcpOltdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24oZSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Rm8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Rm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+Rm8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5GbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgSW8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5NYXBwaW5nVHlwZT1mbn1pbml0QmFzaWNGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7bWFwcGluZzpbXSxyZXF1ZXN0c01hcHBpbmc6W10sYnJva2VyOltdLHdvcmtlcnM6W119KX1nZXRSZXF1ZXN0RGF0YUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGxlKGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChuPT57Zm9yKGNvbnN0IGEgb2YgZVtuXSl0LnB1c2goe3JlcXVlc3RUeXBlOm4scmVxdWVzdFZhbHVlOmF9KX0pKSx0fWdldFJlcXVlc3REYXRhT2JqZWN0KGUpe3JldHVybiBlLnJlZHVjZSgoKGUse3JlcXVlc3RUeXBlOnQscmVxdWVzdFZhbHVlOm59KT0+KGVbdF0ucHVzaChuKSxlKSkse2Nvbm5lY3RSZXF1ZXN0czpbXSxkaXNjb25uZWN0UmVxdWVzdHM6W10sYXR0cmlidXRlUmVxdWVzdHM6W10sYXR0cmlidXRlVXBkYXRlczpbXSxzZXJ2ZXJTaWRlUnBjOltdfSl9Z2V0QnJva2VyTWFwcGVkVmFsdWUoZSx0KXtyZXR1cm57Li4uZSxtYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnM/PzEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcj8/MTB9fXdyaXRlVmFsdWUoZSl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLm1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOklvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6SW8sZGVjb3JhdG9yczpbe3R5cGU6c31dfSk7Y2xhc3MgQW8gZXh0ZW5kcyBJb3ttYXBDb25maWdUb0Zvcm1WYWx1ZShlKXtjb25zdHticm9rZXI6dCxtYXBwaW5nOm49W10sY29ubmVjdFJlcXVlc3RzOmE9W10sZGlzY29ubmVjdFJlcXVlc3RzOm89W10sYXR0cmlidXRlUmVxdWVzdHM6aT1bXSxhdHRyaWJ1dGVVcGRhdGVzOnI9W10sc2VydmVyU2lkZVJwYzpzPVtdfT1lLGw9bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmEsZGlzY29ubmVjdFJlcXVlc3RzOm8sYXR0cmlidXRlUmVxdWVzdHM6aSxhdHRyaWJ1dGVVcGRhdGVzOnIsc2VydmVyU2lkZVJwYzpzfSk7cmV0dXJue3dvcmtlcnM6dCYmKHQubWF4TnVtYmVyT2ZXb3JrZXJzfHx0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXIpP3ttYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnMsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjp0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJ9Ont9LG1hcHBpbmc6bWEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKG4pfHxbXSxicm9rZXI6dHx8e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShsKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e30saT1vPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fTtyZXR1cm57YnJva2VyOnRoaXMuZ2V0QnJva2VyTWFwcGVkVmFsdWUodCxuKSxtYXBwaW5nOm1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGEpLC4uLm1hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihpKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpBbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuYnJva2VyLmNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJicm9rZXIiPjwvdGItYnJva2VyLWNvbmZpZy1jb250cm9sPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZGF0YS1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJtYXBwaW5nIiBbcmVxdWlyZWRdPSJ0cnVlIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5EQVRBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RzTWFwcGluZyIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuUkVRVUVTVFMiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LndvcmtlcnMtc2V0dGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICA8dGItd29ya2Vycy1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9IndvcmtlcnMiPjwvdGItd29ya2Vycy1jb25maWctY29udHJvbD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuPC9tYXQtdGFiLWdyb3VwPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dW8sc2VsZWN0b3I6InRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm1vLHNlbGVjdG9yOiJ0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLXRhYmxlIixpbnB1dHM6WyJyZXF1aXJlZCIsIm1hcHBpbmdUeXBlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxsbyx1byxtbyxyb10sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmJyb2tlci5jb25uZWN0aW9uXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItYnJva2VyLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0iYnJva2VyIj48L3RiLWJyb2tlci1jb25maWctY29udHJvbD5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuREFUQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkucmVxdWVzdHMtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0c01hcHBpbmciIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS53b3JrZXJzLXNldHRpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgPHRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJ3b3JrZXJzIj48L3RiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2w+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2hlaWdodDoxMDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBObyBleHRlbmRzIElve21hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe2NvbnN0e2Jyb2tlcjp0LG1hcHBpbmc6bj1bXSxyZXF1ZXN0c01hcHBpbmc6YX09ZTtyZXR1cm57d29ya2Vyczp0JiYodC5tYXhOdW1iZXJPZldvcmtlcnN8fHQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcik/e21heE51bWJlck9mV29ya2Vyczp0Lm1heE51bWJlck9mV29ya2VycyxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcn06e30sbWFwcGluZzpuPz9bXSxicm9rZXI6dD8/e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShhKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e307cmV0dXJue2Jyb2tlcjp0aGlzLmdldEJyb2tlck1hcHBlZFZhbHVlKHQsbiksbWFwcGluZzphLHJlcXVlc3RzTWFwcGluZzpvPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpObyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpObyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtYmFzaWMtY29uZmlnIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Tm8pKSxtdWx0aTohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiLHNlbGVjdG9yOiJtYXQtdGFiIixpbnB1dHM6WyJkaXNhYmxlZCIsImxhYmVsIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImxhYmVsQ2xhc3MiLCJib2R5Q2xhc3MiXSxleHBvcnRBczpbIm1hdFRhYiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiR3JvdXAsc2VsZWN0b3I6Im1hdC10YWItZ3JvdXAiLGlucHV0czpbImNvbG9yIiwiZml0SW5rQmFyVG9Db250ZW50IiwibWF0LXN0cmV0Y2gtdGFicyIsImR5bmFtaWNIZWlnaHQiLCJzZWxlY3RlZEluZGV4IiwiaGVhZGVyUG9zaXRpb24iLCJhbmltYXRpb25EdXJhdGlvbiIsImNvbnRlbnRUYWJJbmRleCIsImRpc2FibGVQYWdpbmF0aW9uIiwiZGlzYWJsZVJpcHBsZSIsInByZXNlcnZlQ29udGVudCIsImJhY2tncm91bmRDb2xvciIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiXSxvdXRwdXRzOlsic2VsZWN0ZWRJbmRleENoYW5nZSIsImZvY3VzQ2hhbmdlIiwiYW5pbWF0aW9uRG9uZSIsInNlbGVjdGVkVGFiQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1byxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6bW8sc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5vLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tcXR0LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8sdW8sbW8scm9dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgTW97aXNFcnJvclN0YXRlKGUpe3JldHVybiBlJiZlLmludmFsaWR9fWUoIkZvcmNlRXJyb3JTdGF0ZU1hdGNoZXIiLE1vKTtjbGFzcyBFbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5mYj10LHRoaXMudHJhbnNsYXRlPW4sdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWEsdGhpcy5kaWFsb2dTZXJ2aWNlPW8sdGhpcy5kaWFsb2c9aSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZT1yLHRoaXMuem9uZT1zLHRoaXMudXRpbHM9bCx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1jLHRoaXMuY2Q9cCx0aGlzLkNvbm5lY3RvclR5cGU9X3QsdGhpcy5hbGxvd0Jhc2ljQ29uZmlnPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5nYXRld2F5TG9nTGV2ZWw9T2JqZWN0LnZhbHVlcyhNdCksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiZW5hYmxlZCIsImtleSIsInR5cGUiLCJzeW5jU3RhdHVzIiwiZXJyb3JzIiwiYWN0aW9ucyJdLHRoaXMuR2F0ZXdheUNvbm5lY3RvclR5cGVzVHJhbnNsYXRlc01hcD1IdCx0aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcz1vbix0aGlzLlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlPWxuLHRoaXMubW9kZT10aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyx0aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3Q9bmV3IFNlLHRoaXMuYWN0aXZlRGF0YT1bXSx0aGlzLmluYWN0aXZlRGF0YT1bXSx0aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGE9W10sdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy5vbkVycm9yc1VwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfX0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0PW5ldyBTZSx0aGlzLmluaXREYXRhU291cmNlcygpLHRoaXMuaW5pdENvbm5lY3RvckZvcm0oKSx0aGlzLm9ic2VydmVBdHRyaWJ1dGVDaGFuZ2UoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGFTb3VyY2Uuc29ydD10aGlzLnNvcnQsdGhpcy5kYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3I9dGhpcy5nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCksdGhpcy5jdHguJHNjb3BlLmdhdGV3YXlDb25uZWN0b3JzPXRoaXMsdGhpcy5sb2FkQ29ubmVjdG9ycygpLHRoaXMubG9hZEdhdGV3YXlTdGF0ZSgpLHRoaXMub2JzZXJ2ZU1vZGVDaGFuZ2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfW9uU2F2ZUNvbm5lY3Rvcigpe3RoaXMuc2F2ZUNvbm5lY3Rvcih0aGlzLmdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKHRoaXMuY29ubmVjdG9yRm9ybS52YWx1ZSksITEpfXNhdmVDb25uZWN0b3IoZSx0PSEwKXtjb25zdCBuPXR8fHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyh0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSk/TC5TSEFSRURfU0NPUEU6TC5TRVJWRVJfU0NPUEU7QWUodGhpcy5nZXRFbnRpdHlBdHRyaWJ1dGVUYXNrcyhlLG4pKS5waXBlKE9lKDEpKS5zdWJzY3JpYmUoKG49Pnt0aGlzLnNob3dUb2FzdCh0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuY29ubmVjdG9yLWNyZWF0ZWQiKTp0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmNvbm5lY3Rvci11cGRhdGVkIikpLHRoaXMuaW5pdGlhbENvbm5lY3Rvcj1lLHRoaXMudXBkYXRlRGF0YSghMCksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9KSl9Z2V0RW50aXR5QXR0cmlidXRlVGFza3MoZSx0KXtjb25zdCBuPVtdLGE9W3trZXk6ZS5uYW1lLHZhbHVlOmV9XSxvPVtdLGk9IXRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TSEFSRURfU0NPUEV8fCF0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TRVJWRVJfU0NPUEUscj10aGlzLmluaXRpYWxDb25uZWN0b3ImJnRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lIT09ZS5uYW1lO3JldHVybiByJiYoby5wdXNoKHtrZXk6dGhpcy5pbml0aWFsQ29ubmVjdG9yLm5hbWV9KSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCExKSksaSYmKHQ9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnMucHVzaChlLm5hbWUpOnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLnB1c2goZS5uYW1lKSksKHJ8fGkpJiZuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2sodCkpLG4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsdCxhKSksby5sZW5ndGgmJm4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSx0LG8pKSxufWdldFNhdmVFbnRpdHlBdHRyaWJ1dGVzVGFzayhlKXtjb25zdCB0PWU9PT1MLlNIQVJFRF9TQ09QRT8iYWN0aXZlX2Nvbm5lY3RvcnMiOiJpbmFjdGl2ZV9jb25uZWN0b3JzIixuPWU9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5zYXZlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxlLFt7a2V5OnQsdmFsdWU6bn1dKX1yZW1vdmVDb25uZWN0b3JGcm9tTGlzdChlLHQpe2NvbnN0IG49dD90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMsYT1uLmluZGV4T2YoZSk7LTEhPT1hJiZuLnNwbGljZShhLDEpfWdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKGUpe2NvbnN0IHQ9ey4uLmV9O3JldHVybiB0LmNvbmZpZ3VyYXRpb249YCR7Y2UodC5uYW1lKX0uanNvbmAsZGVsZXRlIHQuYmFzaWNDb25maWcsdC50eXBlIT09X3QuR1JQQyYmZGVsZXRlIHQua2V5LHQudHlwZSE9PV90LkNVU1RPTSYmZGVsZXRlIHQuY2xhc3MsdC50eXBlPT09X3QuTU9EQlVTJiZ0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0odC5jb25maWdWZXJzaW9uKSYmKHQucmVwb3J0U3RyYXRlZ3l8fCh0LnJlcG9ydFN0cmF0ZWd5PXt0eXBlOnNuLk9uUmVwb3J0UGVyaW9kLHJlcG9ydFBlcmlvZDpsbi5Db25uZWN0b3J9LGRlbGV0ZSB0LnNlbmREYXRhT25seU9uQ2hhbmdlKSksdGhpcy5nYXRld2F5VmVyc2lvbiYmIXQuY29uZmlnVmVyc2lvbiYmKHQuY29uZmlnVmVyc2lvbj10aGlzLmdhdGV3YXlWZXJzaW9uKSx0LnRzPURhdGUubm93KCksdH11cGRhdGVEYXRhKGU9ITEpe3RoaXMucGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5PXRoaXMuc29ydC5hY3RpdmUsdGhpcy5wYWdlTGluay5zb3J0T3JkZXIuZGlyZWN0aW9uPXdbdGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpXSx0aGlzLmF0dHJpYnV0ZURhdGFTb3VyY2UubG9hZEF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5DTElFTlRfU0NPUEUsdGhpcy5wYWdlTGluayxlKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZURhdGE9ZS5kYXRhLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKSx0aGlzLmdlbmVyYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5zZXRDbGllbnREYXRhKGUpfSkpLHRoaXMuaW5hY3RpdmVDb25uZWN0b3JzRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuc2hhcmVkQXR0cmlidXRlRGF0YT1lLmRhdGEuZmlsdGVyKChlPT50aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5jbHVkZXMoZS5rZXkpKSksdGhpcy5jb21iaW5lRGF0YSgpfSkpLHRoaXMuc2VydmVyRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuaW5hY3RpdmVEYXRhPWUuZGF0YS5maWx0ZXIoKGU9PnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKX0pKX1pc0Nvbm5lY3RvclN5bmNlZChlKXtjb25zdCB0PWUudmFsdWU7aWYoIXQudHN8fGUuc2tpcFN5bmN8fCF0aGlzLmlzR2F0ZXdheUFjdGl2ZSlyZXR1cm4hMTtpZigtMT09PXRoaXMuYWN0aXZlRGF0YS5maW5kSW5kZXgoKGU9Pigic3RyaW5nIj09dHlwZW9mIGUudmFsdWU/SlNPTi5wYXJzZShlLnZhbHVlKTplLnZhbHVlKS5uYW1lPT09dC5uYW1lKSkpcmV0dXJuITE7cmV0dXJuLTEhPT10aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGEuZmluZEluZGV4KChlPT57Y29uc3Qgbj1lLnZhbHVlLGE9bi5uYW1lPT09dC5uYW1lLG89ZWUobi5jb25maWd1cmF0aW9uSnNvbix7fSkmJmEsaT10aGlzLmhhc1NhbWVDb25maWcobi5jb25maWd1cmF0aW9uSnNvbix0LmNvbmZpZ3VyYXRpb25Kc29uKSxyPW4udHMmJm4udHM8PXQudHM7cmV0dXJuIGEmJnImJihpfHxvKX0pKX1oYXNTYW1lQ29uZmlnKGUsdCl7Y29uc3R7bmFtZTpuLGlkOmEsZW5hYmxlUmVtb3RlTG9nZ2luZzpvLGxvZ0xldmVsOmkscmVwb3J0U3RyYXRlZ3k6cixjb25maWdWZXJzaW9uOnMsLi4ubH09ZSx7bmFtZTpjLGlkOnAsZW5hYmxlUmVtb3RlTG9nZ2luZzptLGxvZ0xldmVsOmQscmVwb3J0U3RyYXRlZ3k6dSxjb25maWdWZXJzaW9uOmcsLi4uZn09dDtyZXR1cm4gZWUobCxmKX1jb21iaW5lRGF0YSgpe2NvbnN0IGU9Wy4uLnRoaXMuYWN0aXZlRGF0YSwuLi50aGlzLmluYWN0aXZlRGF0YSwuLi50aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGFdLnJlZHVjZSgoKGUsdCk9Pntjb25zdCBuPWUuZmluZEluZGV4KChlPT5lLmtleT09PXQua2V5KSk7cmV0dXJuLTE9PT1uP2UucHVzaCh0KTp0Lmxhc3RVcGRhdGVUcz5lW25dLmxhc3RVcGRhdGVUcyYmIXRoaXMuaXNDb25uZWN0b3JTeW5jZWQoZVtuXSkmJihlW25dPXsuLi50LHNraXBTeW5jOiEwfSksZX0pLFtdKTt0aGlzLmRhdGFTb3VyY2UuZGF0YT1lLm1hcCgoZT0+KHsuLi5lLHZhbHVlOiJzdHJpbmciPT10eXBlb2YgZS52YWx1ZT9KU09OLnBhcnNlKGUudmFsdWUpOmUudmFsdWV9KSkpfWNsZWFyT3V0Q29ubmVjdG9yRm9ybSgpe3RoaXMuaW5pdGlhbENvbm5lY3Rvcj1udWxsLHRoaXMuY29ubmVjdG9yRm9ybS5zZXRWYWx1ZSh7bW9kZTpvbi5CQVNJQyxuYW1lOiIiLHR5cGU6X3QuTVFUVCxzZW5kRGF0YU9ubHlPbkNoYW5nZTohMSxlbmFibGVSZW1vdGVMb2dnaW5nOiExLGxvZ0xldmVsOk10LklORk8sa2V5OiJhdXRvIixjbGFzczoiIixjb25maWd1cmF0aW9uOiIiLGNvbmZpZ3VyYXRpb25Kc29uOnt9LGJhc2ljQ29uZmlnOnt9LGNvbmZpZ1ZlcnNpb246IiIscmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9c2VsZWN0Q29ubmVjdG9yKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPXQudmFsdWU7bj8ubmFtZSE9PXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZSYmdGhpcy5jb25maXJtQ29ubmVjdG9yQ2hhbmdlKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5zZXRGb3JtVmFsdWUobil9KSl9aXNTYW1lQ29ubmVjdG9yKGUpe2lmKCF0aGlzLmluaXRpYWxDb25uZWN0b3IpcmV0dXJuITE7Y29uc3QgdD1lLnZhbHVlO3JldHVybiB0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZT09PXQubmFtZX1zaG93VG9hc3QoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh7dHlwZToiW05vdGlmaWNhdGlvbl0gU2hvdyIsbm90aWZpY2F0aW9uOnttZXNzYWdlOmUsdHlwZToic3VjY2VzcyIsZHVyYXRpb246MWUzLHZlcnRpY2FsUG9zaXRpb246InRvcCIsaG9yaXpvbnRhbFBvc2l0aW9uOiJsZWZ0Iix0YXJnZXQ6ImRhc2hib2FyZFJvb3QiLGZvcmNlRGlzbWlzczohMH19KX1yZXR1cm5UeXBlKGUpe2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4gdGhpcy5HYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldCh0LnR5cGUpfWRlbGV0ZUNvbm5lY3RvcihlLHQpe3Q/LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49YERlbGV0ZSBjb25uZWN0b3IgIiR7ZS5rZXl9Ij9gO3RoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG4sIkFsbCBjb25uZWN0b3IgZGF0YSB3aWxsIGJlIGRlbGV0ZWQuIiwiQ2FuY2VsIiwiRGVsZXRlIikucGlwZShPZSgxKSxVZSgodD0+e2lmKCF0KXJldHVybjtjb25zdCBuPVtdLGE9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUudmFsdWU/Lm5hbWUpP0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVybiBuLnB1c2godGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmRlbGV0ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsYSxbZV0pKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCExKSxuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2soYSkpLEFlKG4pfSkpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSE9PWUua2V5fHwodGhpcy5jbGVhck91dENvbm5lY3RvckZvcm0oKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSx0aGlzLmNvbm5lY3RvckZvcm0uZGlzYWJsZSgpKSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWNvbm5lY3RvckxvZ3MoZSx0KXt0JiZ0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49Sih0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIuZ2V0U3RhdGVQYXJhbXMoKSk7bi5jb25uZWN0b3JfbG9ncz1lLG4udGFyZ2V0RW50aXR5UGFyYW1OYW1lPSJjb25uZWN0b3JfbG9ncyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX2xvZ3MiLG4pfWNvbm5lY3RvclJwYyhlLHQpe3QmJnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTtuLmNvbm5lY3Rvcl9ycGM9ZSxuLnRhcmdldEVudGl0eVBhcmFtTmFtZT0iY29ubmVjdG9yX3JwYyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX3JwYyIsbil9b25FbmFibGVDb25uZWN0b3IoZSl7ZS52YWx1ZS50cz0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLnVwZGF0ZUFjdGl2ZUNvbm5lY3RvcktleXMoZS5rZXkpLHRoaXMuYXR0cmlidXRlVXBkYXRlU3ViamVjdC5uZXh0KGUpfWdldEVycm9yc0NvdW50KGUpe2NvbnN0IHQ9ZS5rZXksbj10aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24uZGF0YS5maW5kKChlPT5lJiZlLmRhdGFLZXkubmFtZT09PWAke3R9X0VSUk9SU19DT1VOVGApKTtyZXR1cm4gbiYmdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKHQpP24uZGF0YVswXVsxXXx8MDoiSW5hY3RpdmUifW9uQWRkQ29ubmVjdG9yKGUpe2U/LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29uZmlybUNvbm5lY3RvckNoYW5nZSgpLnBpcGUoT2UoMSksTWUoQm9vbGVhbiksVWUoKCgpPT50aGlzLm9wZW5BZGRDb25uZWN0b3JEaWFsb2coKSkpLE1lKEJvb2xlYW4pKS5zdWJzY3JpYmUoKGU9PnRoaXMuYWRkQ29ubmVjdG9yKGUpKSl9YWRkQ29ubmVjdG9yKGUpe3RoaXMuY29ubmVjdG9yRm9ybS5kaXNhYmxlZCYmdGhpcy5jb25uZWN0b3JGb3JtLmVuYWJsZSgpLGUuY29uZmlndXJhdGlvbkpzb258fChlLmNvbmZpZ3VyYXRpb25Kc29uPXt9KSx0aGlzLmdhdGV3YXlWZXJzaW9uJiYhZS5jb25maWdWZXJzaW9uJiYoZS5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLGUuYmFzaWNDb25maWc9ZS5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9ZTtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZTt0aGlzLnNldEluaXRpYWxDb25uZWN0b3JWYWx1ZXMoZSksdGhpcy5zYXZlQ29ubmVjdG9yKHRoaXMuZ2V0VXBkYXRlZENvbm5lY3RvckRhdGEoZSkpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9c2V0SW5pdGlhbENvbm5lY3RvclZhbHVlcyhlKXtjb25zdHtiYXNpY0NvbmZpZzp0LG1vZGU6biwuLi5hfT1lO3RoaXMudG9nZ2xlUmVwb3J0U3RyYXRlZ3koZS50eXBlKSx0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikuc2V0VmFsdWUodGhpcy5hbGxvd0Jhc2ljQ29uZmlnLmhhcyhlLnR5cGUpP2UubW9kZT8/b24uQkFTSUM6bnVsbCx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLnBhdGNoVmFsdWUoYSx7ZW1pdEV2ZW50OiExfSl9b3BlbkFkZENvbm5lY3RvckRpYWxvZygpe3JldHVybiB0aGlzLmN0eC5uZ1pvbmUucnVuKCgoKT0+dGhpcy5kaWFsb2cub3Blbih0byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e2RhdGFTb3VyY2VEYXRhOnRoaXMuZGF0YVNvdXJjZS5kYXRhLGdhdGV3YXlWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb259fSkuYWZ0ZXJDbG9zZWQoKSkpfXVuaXFOYW1lUmVxdWlyZWQoKXtyZXR1cm4gZT0+e2NvbnN0IHQ9ZS52YWx1ZT8udHJpbSgpLnRvTG93ZXJDYXNlKCksbj10aGlzLmRhdGFTb3VyY2UuZGF0YS5zb21lKChlPT5lLnZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKT09PXQpKSxhPXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZS50b0xvd2VyQ2FzZSgpPT09dDtyZXR1cm4gbiYmIWE/e2R1cGxpY2F0ZU5hbWU6e3ZhbGlkOiExfX06bnVsbH19aW5pdERhdGFTb3VyY2VzKCl7Y29uc3QgZT17cHJvcGVydHk6ImtleSIsZGlyZWN0aW9uOncuQVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKDFlMywwLG51bGwsZSksdGhpcy5hdHRyaWJ1dGVEYXRhU291cmNlPW5ldyBMYSh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2UsdGhpcy56b25lLHRoaXMudHJhbnNsYXRlKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9yc0RhdGFTb3VyY2U9bmV3IExhKHRoaXMuYXR0cmlidXRlU2VydmljZSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZSx0aGlzLnpvbmUsdGhpcy50cmFuc2xhdGUpLHRoaXMuc2VydmVyRGF0YVNvdXJjZT1uZXcgTGEodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLHRoaXMudGVsZW1ldHJ5V3NTZXJ2aWNlLHRoaXMuem9uZSx0aGlzLnRyYW5zbGF0ZSksdGhpcy5kYXRhU291cmNlPW5ldyB5KFtdKX1pbml0Q29ubmVjdG9yRm9ybSgpe3RoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHttb2RlOltvbi5CQVNJQ10sbmFtZTpbIiIsW3VlLnJlcXVpcmVkLHRoaXMudW5pcU5hbWVSZXF1aXJlZCgpLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbIiIsW3VlLnJlcXVpcmVkXV0sZW5hYmxlUmVtb3RlTG9nZ2luZzpbITFdLGxvZ0xldmVsOlsiIixbdWUucmVxdWlyZWRdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITFdLGtleTpbImF1dG8iXSxjbGFzczpbIiJdLGNvbmZpZ3VyYXRpb246WyIiXSxjb25maWd1cmF0aW9uSnNvbjpbe30sW3VlLnJlcXVpcmVkXV0sYmFzaWNDb25maWc6W3t9XSxjb25maWdWZXJzaW9uOlsiIl0scmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSksdGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGUoKX1nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCl7cmV0dXJuKGUsdCk9Pntzd2l0Y2godCl7Y2FzZSJzeW5jU3RhdHVzIjpyZXR1cm4gdGhpcy5pc0Nvbm5lY3RvclN5bmNlZChlKT8xOjA7Y2FzZSJlbmFibGVkIjpyZXR1cm4gdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KT8xOjA7Y2FzZSJlcnJvcnMiOmNvbnN0IG49dGhpcy5nZXRFcnJvcnNDb3VudChlKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpPT09dy5ERVNDPy0xOjEvMDpuO2RlZmF1bHQ6cmV0dXJuIGVbdF18fGUudmFsdWVbdF19fX1sb2FkQ29ubmVjdG9ycygpe3RoaXMuZGV2aWNlJiZ0aGlzLmRldmljZS5pZCE9PWsmJkFlKFt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSxbImFjdGl2ZV9jb25uZWN0b3JzIl0pLHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFsiaW5hY3RpdmVfY29ubmVjdG9ycyJdKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLkNMSUVOVF9TQ09QRSxbIlZlcnNpb24iXSldKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVswXSksdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVsxXSksdGhpcy5nYXRld2F5VmVyc2lvbj1lWzJdWzBdPy52YWx1ZSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWxvYWRHYXRld2F5U3RhdGUoKXt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5rZXkpKS52YWx1ZSxuPWUuZmluZCgoZT0+Imxhc3REaXNjb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZTt0aGlzLmlzR2F0ZXdheUFjdGl2ZT10aGlzLmdldEdhdGV3YXlTdGF0dXModCxhLG4pfSkpfXBhcnNlQ29ubmVjdG9ycyhlKXtjb25zdCB0PWU/LlswXT8udmFsdWV8fFtdO3JldHVybiBuZSh0KT9KU09OLnBhcnNlKHQpOnR9b2JzZXJ2ZU1vZGVDaGFuZ2UoKXt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikubWFya0FzUHJpc3RpbmUoKX0pKX1vYnNlcnZlQXR0cmlidXRlQ2hhbmdlKCl7dGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0LnBpcGUoVmUoMzAwKSxFZSgoZT0+dGhpcy5leGVjdXRlQXR0cmlidXRlVXBkYXRlcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX11cGRhdGVBY3RpdmVDb25uZWN0b3JLZXlzKGUpe2lmKHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlKSl7Y29uc3QgdD10aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuYWN0aXZlQ29ubmVjdG9ycy5zcGxpY2UodCwxKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5wdXNoKGUpfWVsc2V7Y29uc3QgdD10aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMuc3BsaWNlKHQsMSksdGhpcy5hY3RpdmVDb25uZWN0b3JzLnB1c2goZSl9fWV4ZWN1dGVBdHRyaWJ1dGVVcGRhdGVzKGUpe0FlKHRoaXMuZ2V0QXR0cmlidXRlRXhlY3V0aW9uVGFza3MoZSkpLnBpcGUoT2UoMSksRWUoKCgpPT50aGlzLnVwZGF0ZURhdGEoITApKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWdldEF0dHJpYnV0ZUV4ZWN1dGlvblRhc2tzKGUpe2NvbnN0IHQ9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSxuPXQ/TC5TRVJWRVJfU0NPUEU6TC5TSEFSRURfU0NPUEUsYT10P0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVyblt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsW3trZXk6ImFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmFjdGl2ZUNvbm5lY3RvcnN9XSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFt7a2V5OiJpbmFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmluYWN0aXZlQ29ubmVjdG9yc31dKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxuLFtlXSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLGEsW2VdKV19b25EYXRhVXBkYXRlRXJyb3IoZSl7Y29uc3QgdD10aGlzLnV0aWxzLnBhcnNlRXhjZXB0aW9uKGUpO2xldCBuPXQubmFtZTt0Lm1lc3NhZ2UmJihuKz0iOiAiK3QubWVzc2FnZSksY29uc29sZS5lcnJvcihuKX1vbkVycm9yc1VwZGF0ZWQoKXt0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVkKCl7Y29uc3QgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGEsdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5kYXRhS2V5Lm5hbWUpKS5kYXRhWzBdWzFdLG49ZS5maW5kKChlPT4ibGFzdERpc2Nvbm5lY3RUaW1lIj09PWUuZGF0YUtleS5uYW1lKSkuZGF0YVswXVsxXSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmRhdGFLZXkubmFtZSkpLmRhdGFbMF1bMV07dGhpcy5pc0dhdGV3YXlBY3RpdmU9dGhpcy5nZXRHYXRld2F5U3RhdHVzKHQsYSxuKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1nZXRHYXRld2F5U3RhdHVzKGUsdCxuKXtyZXR1cm4hIWUmJighbnx8dD5uKX1nZW5lcmF0ZVN1YnNjcmlwdGlvbigpe2lmKHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuZGV2aWNlKXtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuZGV2aWNlLmlkLGVudGl0eU5hbWU6IkdhdGV3YXkiLHRpbWVzZXJpZXM6W119XTt0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKCh0PT57ZVswXS50aW1lc2VyaWVzLnB1c2goe25hbWU6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGAsbGFiZWw6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGB9KX0pKSx0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGkuY3JlYXRlU3Vic2NyaXB0aW9uRnJvbUluZm8oQS5sYXRlc3QsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuc3Vic2NyaXB0aW9uPWV9KSl9fWNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpe3RoaXMuYmFzaWNDb25maWdTdWImJnRoaXMuYmFzaWNDb25maWdTdWIudW5zdWJzY3JpYmUoKSx0aGlzLmJhc2ljQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImJhc2ljQ29uZmlnIikudmFsdWVDaGFuZ2VzLnBpcGUoTWUoKCgpPT4hIXRoaXMuaW5pdGlhbENvbm5lY3RvcikpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIiksbj10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWUsYT10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU7aWYoIWVlKGUsdD8udmFsdWUpJiZ0aGlzLmFsbG93QmFzaWNDb25maWcuaGFzKG4pJiZhPT09b24uQkFTSUMpe2NvbnN0IG49ey4uLnQudmFsdWUsLi4uZX07dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiY29uZmlndXJhdGlvbkpzb24iKS5wYXRjaFZhbHVlKG4se2VtaXRFdmVudDohMX0pfX0pKX1jcmVhdGVKc29uQ29uZmlnV2F0Y2hlcigpe3RoaXMuanNvbkNvbmZpZ1N1YiYmdGhpcy5qc29uQ29uZmlnU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5qc29uQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKSxuPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZSxhPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoIm1vZGUiKS52YWx1ZTshZWUoZSx0Py52YWx1ZSkmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMobikmJmE9PT1vbi5BRFZBTkNFRCYmdGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKS5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWNvbmZpcm1Db25uZWN0b3JDaGFuZ2UoKXtyZXR1cm4gdGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmNvbm5lY3RvckZvcm0uZGlydHk/dGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRpdGxlIiksdGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRleHQiKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApOkllKCEwKX1zZXRGb3JtVmFsdWUoZSl7dGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGVkJiZ0aGlzLmNvbm5lY3RvckZvcm0uZW5hYmxlKCk7Y29uc3QgdD1iYS5nZXRDb25maWcoe2NvbmZpZ3VyYXRpb246IiIsa2V5OiJhdXRvIixjb25maWd1cmF0aW9uSnNvbjp7fSwuLi5lfSx0aGlzLmdhdGV3YXlWZXJzaW9uKTt0aGlzLmdhdGV3YXlWZXJzaW9uJiYhdC5jb25maWdWZXJzaW9uJiYodC5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLHQuYmFzaWNDb25maWc9dC5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9dCx0aGlzLnVwZGF0ZUNvbm5lY3Rvcih0KX11cGRhdGVDb25uZWN0b3IoZSl7c3dpdGNoKHRoaXMuanNvbkNvbmZpZ1N1Yj8udW5zdWJzY3JpYmUoKSxlLnR5cGUpe2Nhc2UgX3QuTVFUVDpjYXNlIF90Lk9QQ1VBOmNhc2UgX3QuTU9EQlVTOnRoaXMudXBkYXRlQmFzaWNDb25maWdDb25uZWN0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZSh7Li4uZSxtb2RlOm51bGx9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUpzb25Db25maWdXYXRjaGVyKCl9fXVwZGF0ZUJhc2ljQ29uZmlnQ29ubmVjdG9yKGUpe3RoaXMuYmFzaWNDb25maWdTdWI/LnVuc3Vic2NyaWJlKCk7Y29uc3QgdD10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWU7dGhpcy5zZXRJbml0aWFsQ29ubmVjdG9yVmFsdWVzKGUpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9cGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKXt0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZShlLHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpLHRoaXMuY3JlYXRlSnNvbkNvbmZpZ1dhdGNoZXIoKX10b2dnbGVSZXBvcnRTdHJhdGVneShlKXtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInJlcG9ydFN0cmF0ZWd5Iik7ZT09PV90Lk1PREJVUz90LmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zZXRDbGllbnREYXRhKGUpe2lmKHRoaXMuaW5pdGlhbENvbm5lY3Rvcil7Y29uc3QgdD1lLmRhdGEuZmluZCgoZT0+ZS5rZXk9PT10aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSkpO3QmJih0LnZhbHVlPSJzdHJpbmciPT10eXBlb2YgdC52YWx1ZT9KU09OLnBhcnNlKHQudmFsdWUpOnQudmFsdWUsdGhpcy5pc0Nvbm5lY3RvclN5bmNlZCh0KSYmdC52YWx1ZS5jb25maWd1cmF0aW9uSnNvbiYmdGhpcy5zZXRGb3JtVmFsdWUoey4uLnQudmFsdWUsbW9kZTp0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU/P3QudmFsdWUubW9kZX0pKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOlguQXR0cmlidXRlU2VydmljZX0se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp2YX0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVvLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbm5lY3RvciIsaW5wdXRzOntjdHg6ImN0eCIsZGV2aWNlOiJkZXZpY2UifSxwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6Im5hbWVJbnB1dCIsZmlyc3Q6ITAscHJlZGljYXRlOlsibmFtZUlucHV0Il0sZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InNvcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpnLGRlc2NlbmRhbnRzOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpMbyxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmtvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGbyxzZWxlY3RvcjoidGItb3BjLXVhLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnBvLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpBbyxzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpObyxzZWxlY3RvcjoidGItbXF0dC1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmdvLHNlbGVjdG9yOiJ0Yi1yZXBvcnQtc3RyYXRlZ3kiLGlucHV0czpbImlzRXhwYW5zaW9uTW9kZSIsImRlZmF1bHRWYWx1ZSJdfSx7a2luZDoicGlwZSIsdHlwZTpfLkFzeW5jUGlwZSxuYW1lOiJhc3luYyJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTp2YSxuYW1lOiJpc0xhdGVzdFZlcnNpb25Db25maWcifV19KX19ZSgiR2F0ZXdheUNvbm5lY3RvckNvbXBvbmVudCIsRW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX0se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTpKZS5NYXREaWFsb2d9LHt0eXBlOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3R5cGU6dC5OZ1pvbmV9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp2YX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkZXZpY2U6W3t0eXBlOmF9XSxuYW1lSW5wdXQ6W3t0eXBlOm8sYXJnczpbIm5hbWVJbnB1dCJdfV0sc29ydDpbe3R5cGU6byxhcmdzOltnLHtzdGF0aWM6ITF9XX1dfX0pO2NsYXNzIHFve2NvbnN0cnVjdG9yKGUpe3RoaXMuZGV2aWNlU2VydmljZT1lfWRvd25sb2FkKGUpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kZXZpY2VJZCYmdGhpcy5kZXZpY2VTZXJ2aWNlLmRvd25sb2FkR2F0ZXdheURvY2tlckNvbXBvc2VGaWxlKHRoaXMuZGV2aWNlSWQpLnN1YnNjcmliZSgoKCk9Pnt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxbyxkZXBzOlt7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpxbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1jb21tYW5kIixpbnB1dHM6e2RldmljZUlkOiJkZXZpY2VJZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJjb21wb25lbnQiLHR5cGU6d3QuVGJNYXJrZG93bkNvbXBvbmVudCxzZWxlY3RvcjoidGItbWFya2Rvd24iLGlucHV0czpbImRhdGEiLCJjb250ZXh0IiwiYWRkaXRpb25hbENvbXBpbGVNb2R1bGVzIiwibWFya2Rvd25DbGFzcyIsImNvbnRhaW5lckNsYXNzIiwic3R5bGUiLCJhcHBseURlZmF1bHRNYXJrZG93blN0eWxlIiwiYWRkaXRpb25hbFN0eWxlcyIsImxpbmVOdW1iZXJzIiwiZmFsbGJhY2tUb1BsYWluTWFya2Rvd24iLCJ1c2VQbGFpbk1hcmtkb3duIl0sb3V0cHV0czpbInJlYWR5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QW5jaG9yLHNlbGVjdG9yOiJhW21hdC1idXR0b25dLCBhW21hdC1yYWlzZWQtYnV0dG9uXSwgYVttYXQtZmxhdC1idXR0b25dLCBhW21hdC1zdHJva2VkLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJEZXZpY2VHYXRld2F5Q29tbWFuZENvbXBvbmVudCIscW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29tbWFuZCIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpYLkRldmljZVNlcnZpY2V9XSxwcm9wRGVjb3JhdG9yczp7ZGV2aWNlSWQ6W3t0eXBlOmF9XX19KTtjbGFzcyBEb3tjb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLmZiPWUsdGhpcy5kZXZpY2VTZXJ2aWNlPXQsdGhpcy5jZD1uLHRoaXMuZGlhbG9nPWEsdGhpcy5kaWFsb2dNb2RlPSExLHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZD1uZXcgaSx0aGlzLlN0b3JhZ2VUeXBlcz1BdCx0aGlzLnN0b3JhZ2VUeXBlcz1PYmplY3QudmFsdWVzKEF0KSx0aGlzLnN0b3JhZ2VUeXBlc1RyYW5zbGF0aW9uTWFwPVJ0LHRoaXMubG9nU2F2aW5nUGVyaW9kcz1PdCx0aGlzLmxvY2FsTG9nc0NvbmZpZ3M9T2JqZWN0LmtleXMoUHQpLHRoaXMubG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwPUd0LHRoaXMuc2VjdXJpdHlUeXBlcz1CdCx0aGlzLmdhdGV3YXlMb2dMZXZlbD1PYmplY3QudmFsdWVzKE10KSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmluaXRCYXNpY0Zvcm1Hcm91cCgpLHRoaXMub2JzZXJ2ZUZvcm1DaGFuZ2VzKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jaGVja0FuZEZldGNoQ3JlZGVudGlhbHMoZT8udGhpbmdzYm9hcmQ/LnNlY3VyaXR5Pz97fSksZT8uZ3JwYyYmdGhpcy50b2dnbGVScGNGaWVsZHMoZS5ncnBjLmVuYWJsZWQpOyhlPy50aGluZ3Nib2FyZD8uc3RhdGlzdGljcz8uY29tbWFuZHM/P1tdKS5mb3JFYWNoKChlPT50aGlzLmFkZENvbW1hbmQoZSwhMSkpKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fWF0TGVhc3RPbmVSZXF1aXJlZChlLHQ9bnVsbCl7cmV0dXJuIG49Pnt0fHwodD1PYmplY3Qua2V5cyhuLmNvbnRyb2xzKSk7cmV0dXJuIG4/LmNvbnRyb2xzJiZ0LnNvbWUoKHQ9PiFlKG4uY29udHJvbHNbdF0pKSk/bnVsbDp7YXRMZWFzdE9uZTohMH19fXRvZ2dsZVJwY0ZpZWxkcyhlKXtjb25zdCB0PXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjIik7ZT8odC5nZXQoInNlcnZlclBvcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lb3V0TXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluVGltZUJldHdlZW5QaW5nc01zIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNcyIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0LmdldCgic2VydmVyUG9ydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgia2VlcEFsaXZlVGltZW91dE1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoIm1pblRpbWVCZXR3ZWVuUGluZ3NNcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfWFkZExvY2FsTG9nQ29uZmlnKGUsdCl7Y29uc3Qgbj10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgibG9ncy5sb2NhbCIpLGE9dGhpcy5mYi5ncm91cCh7bG9nTGV2ZWw6W3QubG9nTGV2ZWx8fE10LklORk8sW3VlLnJlcXVpcmVkXV0sZmlsZVBhdGg6W3QuZmlsZVBhdGh8fCIuL2xvZ3MiLFt1ZS5yZXF1aXJlZF1dLGJhY2t1cENvdW50Olt0LmJhY2t1cENvdW50fHw3LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCldXSxzYXZpbmdUaW1lOlt0LnNhdmluZ1RpbWV8fDMsW3VlLnJlcXVpcmVkLHVlLm1pbigwKV1dLHNhdmluZ1BlcmlvZDpbdC5zYXZpbmdQZXJpb2R8fER0LmRheXMsW3VlLnJlcXVpcmVkXV19KTtuLmFkZENvbnRyb2woZSxhKX1nZXRMb2dGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KGBsb2dzLmxvY2FsLiR7ZX1gKX1jb21tYW5kRm9ybUFycmF5KCl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzIil9cmVtb3ZlQ29tbWFuZENvbnRyb2woZSx0KXsiIiE9PXQucG9pbnRlclR5cGUmJih0aGlzLmNvbW1hbmRGb3JtQXJyYXkoKS5yZW1vdmVBdChlKSx0aGlzLmJhc2ljRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfXJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5Iik7ZS5jbGVhclZhbGlkYXRvcnMoKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1yZW1vdmVBbGxTdG9yYWdlVmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInN0b3JhZ2UiKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKXt0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGV2aWNlKHRoaXMuZGV2aWNlLmlkKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmRpYWxvZy5vcGVuKFBhLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7Z2F0ZXdheU5hbWU6ZS5uYW1lfX0pLmFmdGVyQ2xvc2VkKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS5zZXRWYWx1ZSghMCx7ZW1pdEV2ZW50OiExfSl9KSl9KSl9YWRkQ29tbWFuZChlLHQ9ITApe2NvbnN0e2F0dHJpYnV0ZU9uR2F0ZXdheTpuPW51bGwsY29tbWFuZDphPW51bGwsdGltZW91dDpvPW51bGx9PWV8fHt9LGk9dGhpcy5mYi5ncm91cCh7YXR0cmlidXRlT25HYXRld2F5OltuLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dLGNvbW1hbmQ6W2EsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14oPz1cUykuKlxTJC8pXV0sdGltZW91dDpbbyxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKSx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dfSk7dGhpcy5jb21tYW5kRm9ybUFycmF5KCkucHVzaChpLHtlbWl0RXZlbnQ6dH0pfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3RoaXMuYmFzaWNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dGhpbmdzYm9hcmQ6dGhpcy5pbml0VGhpbmdzYm9hcmRGb3JtR3JvdXAoKSxzdG9yYWdlOnRoaXMuaW5pdFN0b3JhZ2VGb3JtR3JvdXAoKSxncnBjOnRoaXMuaW5pdEdycGNGb3JtR3JvdXAoKSxjb25uZWN0b3JzOnRoaXMuZmIuYXJyYXkoW10pLGxvZ3M6dGhpcy5pbml0TG9nc0Zvcm1Hcm91cCgpfSl9aW5pdFRoaW5nc2JvYXJkRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2hvc3Q6W3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteXHNdKyQvKV1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZVNoZWxsOlshMV0scmVtb3RlQ29uZmlndXJhdGlvbjpbITBdLGNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHM6WzYwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sc3RhdGlzdGljczp0aGlzLmZiLmdyb3VwKHtlbmFibGU6WyEwXSxzdGF0c1NlbmRQZXJpb2RJblNlY29uZHM6WzM2MDAsW3VlLnJlcXVpcmVkLHVlLm1pbig2MCksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sY29tbWFuZHM6dGhpcy5mYi5hcnJheShbXSl9KSxtYXhQYXlsb2FkU2l6ZUJ5dGVzOls4MTk2LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTAwKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtaW5QYWNrU2VuZERlbGF5TVM6WzUwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblBhY2tTaXplVG9TZW5kOls1MDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxMDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGhhbmRsZURldmljZVJlbmFtaW5nOlshMF0sY2hlY2tpbmdEZXZpY2VBY3Rpdml0eTp0aGlzLmluaXRDaGVja2luZ0RldmljZUFjdGl2aXR5Rm9ybUdyb3VwKCksc2VjdXJpdHk6dGhpcy5pbml0U2VjdXJpdHlGb3JtR3JvdXAoKSxxb3M6WzEsW3VlLnJlcXVpcmVkLHVlLm1pbigwKSx1ZS5tYXgoMSksdWUucGF0dGVybigvXlteLlxzXSskLyldXX0pfWluaXRTdG9yYWdlRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe3R5cGU6W0F0Lk1FTU9SWSxbdWUucmVxdWlyZWRdXSxyZWFkX3JlY29yZHNfY291bnQ6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heF9yZWNvcmRzX2NvdW50OlsxZTUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhX2ZvbGRlcl9wYXRoOlsiLi9kYXRhLyIsW3VlLnJlcXVpcmVkXV0sbWF4X2ZpbGVfY291bnQ6WzEwLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWF4X3JlYWRfcmVjb3Jkc19jb3VudDpbMTAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhfcmVjb3Jkc19wZXJfZmlsZTpbMWU0LFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sZGF0YV9maWxlX3BhdGg6WyIuL2RhdGEvZGF0YS5kYiIsW3VlLnJlcXVpcmVkXV0sbWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzOlsxLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWVzc2FnZXNfdHRsX2luX2RheXM6WzcsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRHcnBjRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxzZXJ2ZXJQb3J0Ols5NTk1LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUubWF4KDY1NTM1KSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxrZWVwQWxpdmVUaW1lTXM6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGtlZXBBbGl2ZVRpbWVvdXRNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sa2VlcGFsaXZlUGVybWl0V2l0aG91dENhbGxzOlshMF0sbWF4UGluZ3NXaXRob3V0RGF0YTpbMCxbdWUucmVxdWlyZWQsdWUubWluKDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblRpbWVCZXR3ZWVuUGluZ3NNczpbMWU0LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV19KX1pbml0TG9nc0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHtkYXRlRm9ybWF0OlsiJVktJW0tJWQgJUg6JU06JVMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sbG9nRm9ybWF0OlsiJShhc2N0aW1lKXMgLSB8JShsZXZlbG5hbWUpc3wgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGZ1bmNOYW1lKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sdHlwZTpbInJlbW90ZSIsW3VlLnJlcXVpcmVkXV0scmVtb3RlOnRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxsb2dMZXZlbDpbTXQuSU5GTyxbdWUucmVxdWlyZWRdXX0pLGxvY2FsOnRoaXMuZmIuZ3JvdXAoe30pfSl9aW5pdENoZWNraW5nRGV2aWNlQWN0aXZpdHlGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7Y2hlY2tEZXZpY2VJbmFjdGl2aXR5OlshMV0saW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzOlsyMDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzOls1MDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRTZWN1cml0eUZvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHt0eXBlOltWdC5BQ0NFU1NfVE9LRU4sW3VlLnJlcXVpcmVkXV0sYWNjZXNzVG9rZW46W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2xpZW50SWQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sdXNlcm5hbWU6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0scGFzc3dvcmQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2FDZXJ0OltudWxsXSxjZXJ0OltudWxsXSxwcml2YXRlS2V5OltudWxsXX0pfW9ic2VydmVGb3JtQ2hhbmdlcygpe3RoaXMub2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCksdGhpcy5vYnNlcnZlUmVtb3RlQ29uZmlndXJhdGlvbkNoYW5nZXMoKSx0aGlzLm9ic2VydmVEZXZpY2VBY3Rpdml0eUNoYW5nZXMoKSx0aGlzLm9ic2VydmVTZWN1cml0eVR5cGVDaGFuZ2VzKCksdGhpcy5vYnNlcnZlU3RvcmFnZVR5cGVDaGFuZ2VzKCl9b2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWUiKTt0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dCYmIiIhPT10P2Uuc2V0VmFsaWRhdG9ycyhbdWUucmVxdWlyZWRdKTplLmNsZWFyVmFsaWRhdG9ycygpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9b2JzZXJ2ZVJlbW90ZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKX0pKSx0aGlzLmxvZ1NlbGVjdG9yPXRoaXMuZmIuY29udHJvbChQdC5zZXJ2aWNlKTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhQdCkpdGhpcy5hZGRMb2NhbExvZ0NvbmZpZyhlLHt9KX1vYnNlcnZlRGV2aWNlQWN0aXZpdHlDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSIpO2UuZ2V0KCJjaGVja0RldmljZUluYWN0aXZpdHkiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7Y29uc3Qgbj1bdWUubWluKDEpLHVlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV07dD8oZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLnNldFZhbGlkYXRvcnMobiksZS5nZXQoImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiKS5zZXRWYWxpZGF0b3JzKG4pKTooZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLmNsZWFyVmFsaWRhdG9ycygpLGUuZ2V0KCJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIikuY2xlYXJWYWxpZGF0b3JzKCkpLGUuZ2V0KCJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSxlLmdldCgiaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kcyIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjLmVuYWJsZWQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy50b2dnbGVScGNGaWVsZHMoZSl9KSl9b2JzZXJ2ZVNlY3VyaXR5VHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eSIpO2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e3N3aXRjaCh0aGlzLnJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpLHQpe2Nhc2UgVnQuQUNDRVNTX1RPS0VOOnRoaXMuYWRkQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVExTX1BSSVZBVEVfS0VZOnRoaXMuYWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSk7YnJlYWs7Y2FzZSBWdC5UTFNfQUNDRVNTX1RPS0VOOnRoaXMuYWRkVGxzQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVVNFUk5BTUVfUEFTU1dPUkQ6ZS5hZGRWYWxpZGF0b3JzKFt0aGlzLmF0TGVhc3RPbmVSZXF1aXJlZCh1ZS5yZXF1aXJlZCxbImNsaWVudElkIiwidXNlcm5hbWUiXSldKX1lLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKSxbImNhQ2VydCIsInByaXZhdGVLZXkiLCJjZXJ0Il0uZm9yRWFjaCgodD0+e2UuZ2V0KHQpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT50aGlzLmNkLmRldGVjdENoYW5nZXMoKSkpfSkpfW9ic2VydmVTdG9yYWdlVHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzdG9yYWdlIik7ZS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57c3dpdGNoKHRoaXMucmVtb3ZlQWxsU3RvcmFnZVZhbGlkYXRvcnMoKSx0KXtjYXNlIEF0Lk1FTU9SWTp0aGlzLmFkZE1lbW9yeVN0b3JhZ2VWYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgQXQuRklMRTp0aGlzLmFkZEZpbGVTdG9yYWdlVmFsaWRhdG9ycyhlKTticmVhaztjYXNlIEF0LlNRTElURTp0aGlzLmFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpfX0pKX1hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7ZS5nZXQoImFjY2Vzc1Rva2VuIikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteLlxzXSskLyldKSxlLmdldCgiYWNjZXNzVG9rZW4iKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9YWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSl7WyJjYUNlcnQiLCJwcml2YXRlS2V5IiwiY2VydCJdLmZvckVhY2goKHQ9PntlLmdldCh0KS5hZGRWYWxpZGF0b3JzKFt1ZS5yZXF1aXJlZF0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKX1hZGRUbHNBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7dGhpcy5hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSksZS5nZXQoImNhQ2VydCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkXSksZS5nZXQoImNhQ2VydCIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1hZGRNZW1vcnlTdG9yYWdlVmFsaWRhdG9ycyhlKXtlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KCJtYXhfcmVjb3Jkc19jb3VudCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldKSxlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoIm1heF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9YWRkRmlsZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWF4X2ZpbGVfY291bnQiLCJtYXhfcmVhZF9yZWNvcmRzX2NvdW50IiwibWF4X3JlY29yZHNfcGVyX2ZpbGUiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIiwibWVzc2FnZXNfdHRsX2luX2RheXMiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWNoZWNrQW5kRmV0Y2hDcmVkZW50aWFscyhlKXtlLnR5cGUhPT1WdC5UTFNfUFJJVkFURV9LRVkmJnRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyh0aGlzLmRldmljZS5pZCkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5pbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkLmVtaXQodCksdGhpcy51cGRhdGVTZWN1cml0eVR5cGUoZSx0KSx0aGlzLnVwZGF0ZUNyZWRlbnRpYWxzKHQsZSl9KSl9dXBkYXRlU2VjdXJpdHlUeXBlKGUsdCl7Y29uc3Qgbj10LmNyZWRlbnRpYWxzVHlwZT09PVUuQUNDRVNTX1RPS0VOfHxlLnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOP2UudHlwZT09PVZ0LlRMU19BQ0NFU1NfVE9LRU4/VnQuVExTX0FDQ0VTU19UT0tFTjpWdC5BQ0NFU1NfVE9LRU46dC5jcmVkZW50aWFsc1R5cGU9PT1VLk1RVFRfQkFTSUM/VnQuVVNFUk5BTUVfUEFTU1dPUkQ6bnVsbDtuJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZSIpLnNldFZhbHVlKG4se2VtaXRFdmVudDohMX0pfXVwZGF0ZUNyZWRlbnRpYWxzKGUsdCl7c3dpdGNoKGUuY3JlZGVudGlhbHNUeXBlKXtjYXNlIFUuQUNDRVNTX1RPS0VOOnRoaXMudXBkYXRlQWNjZXNzVG9rZW5DcmVkZW50aWFscyhlLHQpO2JyZWFrO2Nhc2UgVS5NUVRUX0JBU0lDOnRoaXMudXBkYXRlTXF0dEJhc2ljQ3JlZGVudGlhbHMoZSk7Y2FzZSBVLlg1MDlfQ0VSVElGSUNBVEU6fX11cGRhdGVBY2Nlc3NUb2tlbkNyZWRlbnRpYWxzKGUsdCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuIikuc2V0VmFsdWUoZS5jcmVkZW50aWFsc0lkLHtlbWl0RXZlbnQ6ITF9KSx0LnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkuY2FDZXJ0Iikuc2V0VmFsdWUodC5jYUNlcnQse2VtaXRFdmVudDohMX0pfXVwZGF0ZU1xdHRCYXNpY0NyZWRlbnRpYWxzKGUpe2NvbnN0IHQ9SlNPTi5wYXJzZShlLmNyZWRlbnRpYWxzVmFsdWUpO3RoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZCIpLnNldFZhbHVlKHQuY2xpZW50SWQse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZSIpLnNldFZhbHVlKHQudXNlck5hbWUse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZCIpLnNldFZhbHVlKHQucGFzc3dvcmQse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6RG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWJhc2ljLWNvbmZpZ3VyYXRpb24iLGlucHV0czp7ZGV2aWNlOiJkZXZpY2UiLGRpYWxvZ01vZGU6ImRpYWxvZ01vZGUifSxvdXRwdXRzOntpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkOiJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+RG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgY2xhc3M9InRhYi1ncm91cC1ibG9jayIgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIiBbY2xhc3MuZGlhbG9nLW1vZGVdPSJkaWFsb2dNb2RlIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1jb25maWd1cmF0aW9uXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZVNoZWxsIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtaG9zdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaG9zdFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmhvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnNlY3VyaXR5LnNlY3VyaXR5PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzZWN1cml0eSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij57eyBzZWN1cml0eVR5cGUudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ2FjY2Vzc3Rva2VuXCcpIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuYWNjZXNzLXRva2VuPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImFjY2Vzc1Rva2VuIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkuYWNjZXNzLXRva2VuLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdkZXZpY2UuY29weS1hY2Nlc3MtdG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuY2xpZW50SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNsaWVudElkIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5jbGllbnRJZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgW2NvcHlUZXh0XT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuY2xpZW50SWRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS51c2VybmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LnVzZXJuYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZVwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXVzZXJuYW1lXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgc3R5bGU9IndpZHRoOiAxMDAlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiLz5cbiAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucGFzc3dvcmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8dGItZXJyb3Igc3R5bGU9Im1hcmdpbi10b3A6IC0xMnB4OyBkaXNwbGF5OiBibG9jazsiIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS50eXBlXCcpLnZhbHVlID09PSBcJ3VzZXJuYW1lUGFzc3dvcmRcJyJcbiAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eVwnKS5oYXNFcnJvcihcJ2F0TGVhc3RPbmVcJykgP1xuICAgICAgICAgIChcJ2RldmljZS5jbGllbnQtaWQtb3ItdXNlci1uYW1lLW5lY2Vzc2FyeVwnIHwgdHJhbnNsYXRlKSA6IFwnXCciPjwvdGItZXJyb3I+XG4gICAgICAgICAgICA8dGItZmlsZS1pbnB1dFxuICAgICAgICAgICAgICBmeEZsZXg9IjEwMCJcbiAgICAgICAgICAgICAgaGludD0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ3Rsc1wnKSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnQiXG4gICAgICAgICAgICAgIGxhYmVsPSJ7eyBcJ3NlY3VyaXR5LmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgW2FsbG93ZWRFeHRlbnNpb25zXT0iXCdwZW0sIGNlcnQsIGtleVwnIlxuICAgICAgICAgICAgICBbYWNjZXB0XT0iXCcucGVtLCBhcHBsaWNhdGlvbi9wZW0sLmNlcnQsIGFwcGxpY2F0aW9uL2NlcnQsIC5rZXksYXBwbGljYXRpb24va2V5XCciXG4gICAgICAgICAgICAgIGRyb3BMYWJlbD0ie3sgXCdnYXRld2F5LmRyb3AtZmlsZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIDwvdGItZmlsZS1pbnB1dD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubG9ncy5sb2dzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJsb2dzIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5kYXRlLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRlRm9ybWF0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MuZGF0ZUZvcm1hdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5kYXRlLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGUtZm9ybVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubG9nLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJsb2dGb3JtYXQiIHJvd3M9IjIiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9nRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmxvZy1mb3JtYXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5sb2ctZm9ybWF0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJyZW1vdGUiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MucmVtb3RlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1sb2dcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MucmVtb3RlLWxvZ3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ibG9jYWwiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MubG9jYWw8L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBbZm9ybUNvbnRyb2xdPSJsb2dTZWxlY3RvciI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBsb2dDb25maWcgb2YgbG9jYWxMb2dzQ29uZmlncyIgW3ZhbHVlXT0ibG9nQ29uZmlnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZpcnN0LWNhcGl0YWwiPnt7IGxvY2FsTG9nc0NvbmZpZ1RyYW5zbGF0ZU1hcC5nZXQobG9nQ29uZmlnKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0iZ2V0TG9nRm9ybUdyb3VwKGxvZ1NlbGVjdG9yLnZhbHVlKSI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MuZmlsZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZmlsZVBhdGgiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5maWxlUGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmZpbGUtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgc2F2aW5nLXBlcmlvZCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdUaW1lIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3Muc2F2aW5nLXBlcmlvZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLnNhdmluZ1RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBoaWRlUmVxdWlyZWRNYXJrZXIgc3R5bGU9Im1pbi13aWR0aDogMTEwcHg7IHdpZHRoOiAzMCUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdQZXJpb2QiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBwZXJpb2Qgb2YgbG9nU2F2aW5nUGVyaW9kcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJwZXJpb2Qua2V5Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwZXJpb2QudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5iYWNrdXAtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJiYWNrdXBDb3VudCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuYmFja3VwQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYmFja3VwLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0b3JhZ2VcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InN0b3JhZ2UiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPmdhdGV3YXkuaGludHMuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMiIFt2YWx1ZV09InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAuZ2V0KHN0b3JhZ2VUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPnt7IFwnZ2F0ZXdheS5oaW50cy5cJyArIGJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UudHlwZVwnKS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxzZWN0aW9uICpuZ1N3aXRjaENhc2U9IlN0b3JhZ2VUeXBlcy5NRU1PUlkiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlYWRfcmVjb3Jkc19jb3VudCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5yZWFkLXJlY29yZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLkZJTEUiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFfZm9sZGVyX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9mb2xkZXJfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtaW5maXggcG9pbnRlci1ldmVudCBzdWZmaXgtaWNvbiIgYXJpYS1oaWRkZW49ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9ImhlbHAtaWNvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0YS1mb2xkZXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9maWxlX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtZmlsZS1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhfcmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVhZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX3Blcl9maWxlIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVjb3Jkc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLlNRTElURSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9maWxlX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9maWxlX3BhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3VycyIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLWNoZWNrLWhvdXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9pbl9kYXlzIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnR0bC1tZXNzYWdlcy1kYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdycGNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImdycGMiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwY1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucGVybWl0LXdpdGhvdXQtY2FsbHNcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucGVybWl0LXdpdGhvdXQtY2FsbHNcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1wb3J0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ic2VydmVyUG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2VydmVyLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVvdXRNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJrZWVwQWxpdmVUaW1lTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMta2VlcC1hbGl2ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5nczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblRpbWVCZXR3ZWVuUGluZ3NNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGluZ3NXaXRob3V0RGF0YSIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY29sb3I9InByaW1hcnkiIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzdGF0c1NlbmRQZXJpb2RJblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSI2MCIvPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5oaW50cy5jb21tYW5kczwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZvcm1BcnJheU5hbWU9ImNvbW1hbmRzIiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiXG4gICAgICAgICAgICAgICAgICpuZ0Zvcj0ibGV0IGNvbW1hbmRDb250cm9sIG9mIGNvbW1hbmRGb3JtQXJyYXkoKS5jb250cm9sczsgbGV0ICRpbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gW2Zvcm1Hcm91cE5hbWVdPSIkaW5kZXgiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgbm8tcGFkZGluZy1ib3R0b20gbm8tZ2FwIGNvbW1hbmQtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuYXR0cmlidXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlT25HYXRld2F5Ii8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2F0dHJpYnV0ZU9uR2F0ZXdheVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmF0dHJpYnV0ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjb21tYW5kIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnY29tbWFuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jb21tYW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb21tYW5kQ29udHJvbCgkaW5kZXgsICRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3MucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiBmaXQtY29udGVudDsiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZENvbW1hbmQoKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkub3RoZXJcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiIGZvcm1Hcm91cE5hbWU9ImNoZWNraW5nRGV2aWNlQWN0aXZpdHkiXG4gICAgICAgICAgICAgW2NsYXNzLm5vLXBhZGRpbmctYm90dG9tXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jaGVjay1kZXZpY2UtYWN0aXZpdHlcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0RldmljZUluYWN0aXZpdHkiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5XCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuY2hlY2tEZXZpY2VJbmFjdGl2aXR5XCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmluYWN0aXZpdHktdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QYWNrU2VuZERlbGF5TVMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2VuZERlbGF5TVNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5taW5pbWFsLXBhY2stZGVsYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubXF0dC1xb3M8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icW9zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSIxIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnFvc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5xb3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heFBheWxvYWRTaXplQnl0ZXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXBheWxvYWQtc2l6ZS1ieXRlc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTaXplVG9TZW5kIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbi1wYWNrLXNpemUtdG8tc2VuZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1yb3dzOm1pbi1jb250ZW50IG1pbm1heChhdXRvLDFmcikgbWluLWNvbnRlbnR9Omhvc3QgLmNvbmZpZ3VyYXRpb24tYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTZweDttYXgtaGVpZ2h0Ojcwdmh9Omhvc3QgLmRpYWxvZy1tb2RlIC5jb25maWd1cmF0aW9uLWJsb2Nre21heC1oZWlnaHQ6NjB2aH06aG9zdCAubWF0LXRvb2xiYXJ7Z3JpZC1yb3c6MTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLnRhYi1ncm91cC1ibG9ja3ttaW4td2lkdGg6MDtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OjA7Z3JpZC1yb3c6Mn06aG9zdCAudG9nZ2xlLWdyb3Vwe21hcmdpbi1yaWdodDphdXRvfTpob3N0IC5maXJzdC1jYXBpdGFse3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgdGV4dGFyZWF7cmVzaXplOm5vbmV9Omhvc3QgLnNhdmluZy1wZXJpb2R7ZmxleDoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY29tbWFuZC1jb250YWluZXJ7d2lkdGg6MTAwJX06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3J7ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3I6Zmlyc3QtY2hpbGR7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QgOjpuZy1kZWVwIC5wb2ludGVyLWV2ZW50e3BvaW50ZXItZXZlbnRzOmFsbH06aG9zdCA6Om5nLWRlZXAgLnRvZ2dsZS1ncm91cCBzcGFue3BhZGRpbmc6MCAyNXB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2NvbG9yOiNlMGUwZTB9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXg6aG92ZXJ7Y29sb3I6IzllOWU5ZX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q3QuVGJFcnJvckNvbXBvbmVudCxzZWxlY3RvcjoidGItZXJyb3IiLGlucHV0czpbIm5vTWFyZ2luIiwiZXJyb3IiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpXLk1hdFRhYkNvbnRlbnQsc2VsZWN0b3I6IlttYXRUYWJDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpUdC5GaWxlSW5wdXRDb21wb25lbnQsc2VsZWN0b3I6InRiLWZpbGUtaW5wdXQiLGlucHV0czpbImxhYmVsIiwiaGludCIsImFjY2VwdCIsIm5vRmlsZVRleHQiLCJpbnB1dElkIiwiYWxsb3dlZEV4dGVuc2lvbnMiLCJkcm9wTGFiZWwiLCJtYXhTaXplQnl0ZSIsImNvbnRlbnRDb252ZXJ0RnVuY3Rpb24iLCJyZXF1aXJlZCIsInJlcXVpcmVkQXNFcnJvciIsImRpc2FibGVkIiwiZXhpc3RpbmdGaWxlTmFtZSIsInJlYWRBc0JpbmFyeSIsIndvcmtGcm9tRmlsZU9iaiIsIm11bHRpcGxlRmlsZSJdLG91dHB1dHM6WyJmaWxlTmFtZUNoYW5nZWQiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6U3QuQ29weUJ1dHRvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItY29weS1idXR0b24iLGlucHV0czpbImNvcHlUZXh0IiwiZGlzYWJsZWQiLCJtZGlJY29uIiwiaWNvbiIsInRvb2x0aXBUZXh0IiwidG9vbHRpcFBvc2l0aW9uIiwic3R5bGUiLCJjb2xvciIsIm1pbmlCdXR0b24iXSxvdXRwdXRzOlsic3VjY2Vzc0NvcGllZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19XX0pfX1lKCJHYXRld2F5QmFzaWNDb25maWd1cmF0aW9uQ29tcG9uZW50IixEbyksSGUoW04oKV0sRG8ucHJvdG90eXBlLCJkaWFsb2dNb2RlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5EbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBjbGFzcz0idGFiLWdyb3VwLWJsb2NrIiBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiIFtjbGFzcy5kaWFsb2ctbW9kZV09ImRpYWxvZ01vZGUiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5yZW1vdGUtY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUNvbmZpZ3VyYXRpb24iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlU2hlbGwiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Imhvc3QiLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+c2VjdXJpdHkuc2VjdXJpdHk8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHNlY3VyaXR5VHlwZSBvZiBzZWN1cml0eVR5cGVzIHwga2V5dmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09InNlY3VyaXR5VHlwZS5rZXkiPnt7IHNlY3VyaXR5VHlwZS52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwnYWNjZXNzdG9rZW5cJykiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5hY2Nlc3MtdG9rZW48L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYWNjZXNzVG9rZW4iLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuYWNjZXNzVG9rZW5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5hY2Nlc3MtdG9rZW4tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2RldmljZS5jb3B5LWFjY2Vzcy10b2tlblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50b2tlblwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPHNlY3Rpb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5jbGllbnRJZDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LmNsaWVudElkLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBpY29uPSJjb250ZW50X2NvcHkiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPnNlY3VyaXR5LnVzZXJuYW1lPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkudXNlcm5hbWUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdnYXRld2F5LmNvcHktdXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy51c2VybmFtZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBzdHlsZT0id2lkdGg6IDEwMCUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIvPlxuICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnBhc3N3b3JkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXBhc3N3b3JkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDx0Yi1lcnJvciBzdHlsZT0ibWFyZ2luLXRvcDogLTEycHg7IGRpc3BsYXk6IGJsb2NrOyIgZnhGbGV4PSIxMDAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIlxuICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5XCcpLmhhc0Vycm9yKFwnYXRMZWFzdE9uZVwnKSA/XG4gICAgICAgICAgKFwnZGV2aWNlLmNsaWVudC1pZC1vci11c2VyLW5hbWUtbmVjZXNzYXJ5XCcgfCB0cmFuc2xhdGUpIDogXCdcJyI+PC90Yi1lcnJvcj5cbiAgICAgICAgICAgIDx0Yi1maWxlLWlucHV0XG4gICAgICAgICAgICAgIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICBoaW50PSJ7eyBcJ2dhdGV3YXkuaGludHMuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwndGxzXCcpIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImNhQ2VydCJcbiAgICAgICAgICAgICAgbGFiZWw9Int7IFwnc2VjdXJpdHkuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBbYWxsb3dlZEV4dGVuc2lvbnNdPSJcJ3BlbSwgY2VydCwga2V5XCciXG4gICAgICAgICAgICAgIFthY2NlcHRdPSJcJy5wZW0sIGFwcGxpY2F0aW9uL3BlbSwuY2VydCwgYXBwbGljYXRpb24vY2VydCwgLmtleSxhcHBsaWNhdGlvbi9rZXlcJyJcbiAgICAgICAgICAgICAgZHJvcExhYmVsPSJ7eyBcJ2dhdGV3YXkuZHJvcC1maWxlXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgPC90Yi1maWxlLWlucHV0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5sb2dzLmxvZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImxvZ3MiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGVGb3JtYXQiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5kYXRlRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0ZS1mb3JtXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sb2ctZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImxvZ0Zvcm1hdCIgcm93cz0iMiI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2dGb3JtYXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MubG9nLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmxvZy1mb3JtYXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iIGZvcm1Hcm91cE5hbWU9InJlbW90ZSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5yZW1vdGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWxvZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5yZW1vdGUtbG9nc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJsb2dMZXZlbCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJsb2NhbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5sb2NhbDwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIFtmb3JtQ29udHJvbF09ImxvZ1NlbGVjdG9yIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0NvbmZpZyBvZiBsb2NhbExvZ3NDb25maWdzIiBbdmFsdWVdPSJsb2dDb25maWciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmlyc3QtY2FwaXRhbCI+e3sgbG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwLmdldChsb2dDb25maWcpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJnZXRMb2dGb3JtR3JvdXAobG9nU2VsZWN0b3IudmFsdWUpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5maWxlLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaWxlUGF0aCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmZpbGVQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MuZmlsZS1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBzYXZpbmctcGVyaW9kIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1RpbWUiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5zYXZpbmdUaW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2QtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGhpZGVSZXF1aXJlZE1hcmtlciBzdHlsZT0ibWluLXdpZHRoOiAxMTBweDsgd2lkdGg6IDMwJSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1BlcmlvZCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBlcmlvZCBvZiBsb2dTYXZpbmdQZXJpb2RzIHwga2V5dmFsdWUiIFt2YWx1ZV09InBlcmlvZC5rZXkiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBlcmlvZC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImJhY2t1cENvdW50IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmJhY2t1cENvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5iYWNrdXAtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0ic3RvcmFnZSIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+Z2F0ZXdheS5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+Z2F0ZXdheS5oaW50cy5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgY2xhc3M9InRvZ2dsZS1ncm91cCIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZXNUcmFuc2xhdGlvbk1hcC5nZXQoc3RvcmFnZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+e3sgXCdnYXRld2F5LmhpbnRzLlwnICsgYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnR5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLk1FTU9SWSIgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnJlYWQtcmVjb3JkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3JkczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXJlY29yZHMtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuRklMRSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9mb2xkZXJfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXQtZm9ybS1maWVsZC1pbmZpeCBwb2ludGVyLWV2ZW50IHN1ZmZpeC1pY29uIiBhcmlhLWhpZGRlbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iaGVscC1pY29uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X2ZpbGVfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfZmlsZV9jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1maWxlLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWFkX3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWFkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfcGVyX2ZpbGUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19wZXJfZmlsZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuU1FMSVRFIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRhX2ZpbGVfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZpbGVfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGEtZm9sZGVyXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50dGwtY2hlY2staG91clwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5czwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2luX2RheXMiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2luX2RheXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLW1lc3NhZ2VzLWRheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ3JwY1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0iZ3JwYyIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5wZXJtaXQtd2l0aG91dC1jYWxsc1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5wZXJtaXQtd2l0aG91dC1jYWxsc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJQb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5zZXJ2ZXItcG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLnNlcnZlclBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1heFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ia2VlcEFsaXZlVGltZW91dE1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLWtlZXAtYWxpdmUtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVvdXRNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluVGltZUJldHdlZW5QaW5nc01zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblRpbWVCZXR3ZWVuUGluZ3NNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtYXhQaW5nc1dpdGhvdXREYXRhIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGFcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1heFBpbmdzV2l0aG91dERhdGFcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWNzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj0icHJpbWFyeSIgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InN0YXRzU2VuZFBlcmlvZEluU2Vjb25kcyIgdHlwZT0ibnVtYmVyIiBtaW49IjYwIi8+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnN0YXRpc3RpY3Muc3RhdHNTZW5kUGVyaW9kSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZHM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiIHRyYW5zbGF0ZT5nYXRld2F5LmhpbnRzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZm9ybUFycmF5TmFtZT0iY29tbWFuZHMiIGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29tbWFuZENvbnRyb2wgb2YgY29tbWFuZEZvcm1BcnJheSgpLmNvbnRyb2xzOyBsZXQgJGluZGV4ID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8c2VjdGlvbiBbZm9ybUdyb3VwTmFtZV09IiRpbmRleCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBuby1wYWRkaW5nLWJvdHRvbSBuby1nYXAgY29tbWFuZC1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJhdHRyaWJ1dGVPbkdhdGV3YXkiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnYXR0cmlidXRlT25HYXRld2F5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXR0cmlidXRlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MudGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCd0aW1lb3V0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2NvbW1hbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9InJlbW92ZUNvbW1hbmRDb250cm9sKCRpbmRleCwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItYm94LWJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IGZpdC1jb250ZW50OyJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkQ29tbWFuZCgpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuYWRkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5vdGhlclwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCIgZm9ybUdyb3VwTmFtZT0iY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSJcbiAgICAgICAgICAgICBbY2xhc3Mubm8tcGFkZGluZy1ib3R0b21dPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmNoZWNrRGV2aWNlSW5hY3Rpdml0eVwnKS52YWx1ZSI+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNoZWNrLWRldmljZS1hY3Rpdml0eVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImNoZWNrRGV2aWNlSW5hY3Rpdml0eSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jaGVja2luZy1kZXZpY2UtYWN0aXZpdHlcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlUaW1lb3V0U2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBmb3JtQ29udHJvbE5hbWU9ImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5pbmFjdGl2aXR5LXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmFkdmFuY2VkPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTZW5kRGVsYXlNUyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbmltYWwtcGFjay1kZWxheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tcXR0LXFvczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJxb3MiIHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjEiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtYXhcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnFvc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGF5bG9hZFNpemVCeXRlcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1heFBheWxvYWRTaXplQnl0ZXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluUGFja1NpemVUb1NlbmQiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2l6ZVRvU2VuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWluLXBhY2stc2l6ZS10by1zZW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLXJvd3M6bWluLWNvbnRlbnQgbWlubWF4KGF1dG8sMWZyKSBtaW4tY29udGVudH06aG9zdCAuY29uZmlndXJhdGlvbi1ibG9ja3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxNnB4O21heC1oZWlnaHQ6NzB2aH06aG9zdCAuZGlhbG9nLW1vZGUgLmNvbmZpZ3VyYXRpb24tYmxvY2t7bWF4LWhlaWdodDo2MHZofTpob3N0IC5tYXQtdG9vbGJhcntncmlkLXJvdzoxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzAwMDAwMGRlIWltcG9ydGFudH06aG9zdCAudGFiLWdyb3VwLWJsb2Nre21pbi13aWR0aDowO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6MDtncmlkLXJvdzoyfTpob3N0IC50b2dnbGUtZ3JvdXB7bWFyZ2luLXJpZ2h0OmF1dG99Omhvc3QgLmZpcnN0LWNhcGl0YWx7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZX06aG9zdCB0ZXh0YXJlYXtyZXNpemU6bm9uZX06aG9zdCAuc2F2aW5nLXBlcmlvZHtmbGV4OjF9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVye3dpZHRoOjEwMCV9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIC5jb21tYW5kLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcjpmaXJzdC1jaGlsZHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH06aG9zdCA6Om5nLWRlZXAgLnBvaW50ZXItZXZlbnR7cG9pbnRlci1ldmVudHM6YWxsfTpob3N0IDo6bmctZGVlcCAudG9nZ2xlLWdyb3VwIHNwYW57cGFkZGluZzowIDI1cHh9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7Y29sb3I6I2UwZTBlMH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeDpob3Zlcntjb2xvcjojOWU5ZTllfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkRldmljZVNlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOkplLk1hdERpYWxvZ31dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dNb2RlOlt7dHlwZTphfV0saW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZDpbe3R5cGU6bH1dfX0pO2NsYXNzIFBve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCIiKSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5hZHZhbmNlZEZvcm1Db250cm9sLnJlc2V0KGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMuYWR2YW5jZWRGb3JtQ29udHJvbC52YWxpZD9udWxsOnthZHZhbmNlZEZvcm1Db250cm9sOnt2YWxpZDohMX19fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpQbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+UG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48dGItanNvbi1vYmplY3QtZWRpdFxuICBmaWxsSGVpZ2h0PSJ0cnVlIlxuICBjbGFzcz0idGItZmxleCBjb25maWctY29udGFpbmVyIlxuICBmeExheW91dD0iY29sdW1uIlxuICBqc29uUmVxdWlyZWRcbiAgbGFiZWw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX0iXG4gIFtmb3JtQ29udHJvbF09ImFkdmFuY2VkRm9ybUNvbnRyb2wiXG4vPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5jb25maWctY29udGFpbmVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KTtwYWRkaW5nOjhweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUFkdmFuY2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudCIsUG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5QbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjx0Yi1qc29uLW9iamVjdC1lZGl0XG4gIGZpbGxIZWlnaHQ9InRydWUiXG4gIGNsYXNzPSJ0Yi1mbGV4IGNvbmZpZy1jb250YWluZXIiXG4gIGZ4TGF5b3V0PSJjb2x1bW4iXG4gIGpzb25SZXF1aXJlZFxuICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgW2Zvcm1Db250cm9sXT0iYWR2YW5jZWRGb3JtQ29udHJvbCJcbi8+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmNvbmZpZy1jb250YWluZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpO3BhZGRpbmc6OHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIEdve2NvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLmRldmljZVNlcnZpY2U9bix0aGlzLmNkPWEsdGhpcy5Db25maWd1cmF0aW9uTW9kZXM9b24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5nYXRld2F5Q29uZmlnQXR0cmlidXRlS2V5cz1bImdlbmVyYWxfY29uZmlndXJhdGlvbiIsImdycGNfY29uZmlndXJhdGlvbiIsImxvZ3NfY29uZmlndXJhdGlvbiIsInN0b3JhZ2VfY29uZmlndXJhdGlvbiIsIlJlbW90ZUxvZ2dpbmdMZXZlbCIsIm1vZGUiXSx0aGlzLmdhdGV3YXlDb25maWdHcm91cD10aGlzLmZiLmdyb3VwKHtiYXNpY0NvbmZpZzpbXSxhZHZhbmNlZENvbmZpZzpbXSxtb2RlOltvbi5CQVNJQ119KSx0aGlzLm9ic2VydmVBbGlnbkNvbmZpZ3MoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmZldGNoQ29uZmlnQXR0cmlidXRlKHRoaXMuZGV2aWNlKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1zYXZlQ29uZmlnKCl7Y29uc3R7bW9kZTplLGFkdmFuY2VkQ29uZmlnOnR9PXBlKHRoaXMucmVtb3ZlRW1wdHkodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAudmFsdWUpKSxuPXttb2RlOmUsLi4udH07bi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPU9iamVjdC52YWx1ZXMobi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPz9bXSk7Y29uc3QgYT10aGlzLmdlbmVyYXRlQXR0cmlidXRlcyhuKTt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsYSkucGlwZShVZSgoZT0+dGhpcy51cGRhdGVDcmVkZW50aWFscyhuLnRoaW5nc2JvYXJkLnNlY3VyaXR5KSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5kaWFsb2dSZWY/dGhpcy5kaWFsb2dSZWYuY2xvc2UoKToodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSl9KSl9b2JzZXJ2ZUFsaWduQ29uZmlncygpe3RoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5CQVNJQ3x8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYWR2YW5jZWRDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImJhc2ljQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5BRFZBTkNFRHx8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWdlbmVyYXRlQXR0cmlidXRlcyhlKXtjb25zdCB0PVtdLG49KGUsbik9Pnt0LnB1c2goe2tleTplLHZhbHVlOm59KX0sYT0oZSx0KT0+e3Q9ey4uLnQsdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LG4oZSx0KX07cmV0dXJuIG4oIlJlbW90ZUxvZ2dpbmdMZXZlbCIsZS5sb2dzPy5yZW1vdGU/LmVuYWJsZWQ/ZS5sb2dzLnJlbW90ZS5sb2dMZXZlbDpNdC5OT05FKSxkZWxldGUgZS5jb25uZWN0b3JzLG4oImxvZ3NfY29uZmlndXJhdGlvbiIsdGhpcy5nZW5lcmF0ZUxvZ3NGaWxlKGUubG9ncykpLGEoImdycGNfY29uZmlndXJhdGlvbiIsZS5ncnBjKSxhKCJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iLGUuc3RvcmFnZSksYSgiZ2VuZXJhbF9jb25maWd1cmF0aW9uIixlLnRoaW5nc2JvYXJkKSxuKCJtb2RlIixlLm1vZGUpLHR9dXBkYXRlQ3JlZGVudGlhbHMoZSl7bGV0IHQ9e307c3dpdGNoKGUudHlwZSl7Y2FzZSBWdC5VU0VSTkFNRV9QQVNTV09SRDp0aGlzLnNob3VsZFVwZGF0ZUNyZWRlbnRpYWxzKGUpJiYodD10aGlzLmdlbmVyYXRlTXF0dENyZWRlbnRpYWxzKGUpKTticmVhaztjYXNlIFZ0LkFDQ0VTU19UT0tFTjpjYXNlIFZ0LlRMU19BQ0NFU1NfVE9LRU46dGhpcy5zaG91bGRVcGRhdGVBY2Nlc3NUb2tlbihlKSYmKHQ9e2NyZWRlbnRpYWxzVHlwZTpVLkFDQ0VTU19UT0tFTixjcmVkZW50aWFsc0lkOmUuYWNjZXNzVG9rZW59KX1yZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoP3RoaXMuZGV2aWNlU2VydmljZS5zYXZlRGV2aWNlQ3JlZGVudGlhbHMoey4uLnRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLC4uLnR9KTpJZShudWxsKX1zaG91bGRVcGRhdGVDcmVkZW50aWFscyhlKXtpZih0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLk1RVFRfQkFTSUMpcmV0dXJuITA7Y29uc3QgdD1KU09OLnBhcnNlKHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLmNyZWRlbnRpYWxzVmFsdWUpO3JldHVybiEodC5jbGllbnRJZD09PWUuY2xpZW50SWQmJnQudXNlck5hbWU9PT1lLnVzZXJuYW1lJiZ0LnBhc3N3b3JkPT09ZS5wYXNzd29yZCl9Z2VuZXJhdGVNcXR0Q3JlZGVudGlhbHMoZSl7Y29uc3R7Y2xpZW50SWQ6dCx1c2VybmFtZTpuLHBhc3N3b3JkOmF9PWUsbz17Li4udCYme2NsaWVudElkOnR9LC4uLm4mJnt1c2VyTmFtZTpufSwuLi5hJiZ7cGFzc3dvcmQ6YX19O3JldHVybntjcmVkZW50aWFsc1R5cGU6VS5NUVRUX0JBU0lDLGNyZWRlbnRpYWxzVmFsdWU6SlNPTi5zdHJpbmdpZnkobyl9fXNob3VsZFVwZGF0ZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLkFDQ0VTU19UT0tFTnx8dGhpcy5pbml0aWFsQ3JlZGVudGlhbHMuY3JlZGVudGlhbHNJZCE9PWUuYWNjZXNzVG9rZW59Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYmJnRoaXMuZGlhbG9nUmVmLmNsb3NlKCl9cmVtb3ZlRW1wdHkoZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKChbZSx0XSk9Pm51bGwhPXQpKS5tYXAoKChbZSx0XSk9PltlLHQ9PT1PYmplY3QodCk/dGhpcy5yZW1vdmVFbXB0eSh0KTp0XSkpKX1nZW5lcmF0ZUxvZ3NGaWxlKGUpe2NvbnN0IHQ9e3ZlcnNpb246MSxkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM6ITEsZm9ybWF0dGVyczp7TG9nRm9ybWF0dGVyOntjbGFzczoibG9nZ2luZy5Gb3JtYXR0ZXIiLGZvcm1hdDplLmxvZ0Zvcm1hdCxkYXRlZm10OmUuZGF0ZUZvcm1hdH19LGhhbmRsZXJzOntjb25zb2xlSGFuZGxlcjp7Y2xhc3M6ImxvZ2dpbmcuU3RyZWFtSGFuZGxlciIsZm9ybWF0dGVyOiJMb2dGb3JtYXR0ZXIiLGxldmVsOjAsc3RyZWFtOiJleHQ6Ly9zeXMuc3Rkb3V0In0sZGF0YWJhc2VIYW5kbGVyOntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6Ii4vbG9ncy9kYXRhYmFzZS5sb2ciLGJhY2t1cENvdW50OjEsZW5jb2Rpbmc6InV0Zi04In19LGxvZ2dlcnM6e2RhdGFiYXNlOntoYW5kbGVyczpbImRhdGFiYXNlSGFuZGxlciIsImNvbnNvbGVIYW5kbGVyIl0sbGV2ZWw6IkRFQlVHIixwcm9wYWdhdGU6ITF9fSxyb290OntsZXZlbDoiRVJST1IiLGhhbmRsZXJzOlsiY29uc29sZUhhbmRsZXIiXX0sdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9O3JldHVybiB0aGlzLmFkZExvY2FsTG9nZ2Vycyh0LGUubG9jYWwpLHR9YWRkTG9jYWxMb2dnZXJzKGUsdCl7Zm9yKGNvbnN0IG4gb2YgT2JqZWN0LmtleXModCkpZS5oYW5kbGVyc1tuKyJIYW5kbGVyIl09dGhpcy5jcmVhdGVIYW5kbGVyT2JqKHRbbl0sbiksZS5sb2dnZXJzW25dPXRoaXMuY3JlYXRlTG9nZ2VyT2JqKHRbbl0sbil9Y3JlYXRlSGFuZGxlck9iaihlLHQpe3JldHVybntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6YCR7ZS5maWxlUGF0aH0vJHt0fS5sb2dgLGJhY2t1cENvdW50OmUuYmFja3VwQ291bnQsaW50ZXJ2YWw6ZS5zYXZpbmdUaW1lLHdoZW46ZS5zYXZpbmdQZXJpb2QsZW5jb2Rpbmc6InV0Zi04In19Y3JlYXRlTG9nZ2VyT2JqKGUsdCl7cmV0dXJue2hhbmRsZXJzOltgJHt0fUhhbmRsZXJgLCJjb25zb2xlSGFuZGxlciJdLGxldmVsOmUubG9nTGV2ZWwscHJvcGFnYXRlOiExfX1mZXRjaENvbmZpZ0F0dHJpYnV0ZShlKXtlLmlkIT09ayYmdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLkNMSUVOVF9TQ09QRSkucGlwZShfZSgodD0+dC5sZW5ndGg/SWUodCk6dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLlNIQVJFRF9TQ09QRSx0aGlzLmdhdGV3YXlDb25maWdBdHRyaWJ1dGVLZXlzKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbmZpZ3MoZSksdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9dXBkYXRlQ29uZmlncyhlKXtjb25zdCB0PXt0aGluZ3Nib2FyZDp7fSxncnBjOnt9LGxvZ3M6e30sc3RvcmFnZTp7fSxtb2RlOm9uLkJBU0lDfTtlLmZvckVhY2goKGU9Pntzd2l0Y2goZS5rZXkpe2Nhc2UiZ2VuZXJhbF9jb25maWd1cmF0aW9uIjp0LnRoaW5nc2JvYXJkPWUudmFsdWUsdGhpcy51cGRhdGVGb3JtQ29udHJvbHMoZS52YWx1ZSk7YnJlYWs7Y2FzZSJncnBjX2NvbmZpZ3VyYXRpb24iOnQuZ3JwYz1lLnZhbHVlO2JyZWFrO2Nhc2UibG9nc19jb25maWd1cmF0aW9uIjp0LmxvZ3M9dGhpcy5sb2dzVG9PYmooZS52YWx1ZSk7YnJlYWs7Y2FzZSJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iOnQuc3RvcmFnZT1lLnZhbHVlO2JyZWFrO2Nhc2UibW9kZSI6dC5tb2RlPWUudmFsdWU7YnJlYWs7Y2FzZSJSZW1vdGVMb2dnaW5nTGV2ZWwiOnQubG9ncz17Li4udC5sb2dzLHJlbW90ZTp7ZW5hYmxlZDplLnZhbHVlIT09TXQuTk9ORSxsb2dMZXZlbDplLnZhbHVlfX19fSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS5zZXRWYWx1ZSh0LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIikuc2V0VmFsdWUodCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUNvbnRyb2xzKGUpe2NvbnN0e3R5cGU6dCxhY2Nlc3NUb2tlbjpuLC4uLmF9PWUuc2VjdXJpdHk/P3t9O3RoaXMuaW5pdGlhbENyZWRlbnRpYWxzPXtkZXZpY2VJZDp0aGlzLmRldmljZSxjcmVkZW50aWFsc1R5cGU6dCxjcmVkZW50aWFsc0lkOm4sY3JlZGVudGlhbHNWYWx1ZTpKU09OLnN0cmluZ2lmeShhKX19bG9nc1RvT2JqKGUpe2NvbnN0e2Zvcm1hdDp0LGRhdGVmbXQ6bn09ZS5mb3JtYXR0ZXJzLkxvZ0Zvcm1hdHRlcjtyZXR1cm57bG9jYWw6T2JqZWN0LmtleXMoUHQpLnJlZHVjZSgoKHQsbik9Pntjb25zdCBhPWUuaGFuZGxlcnNbYCR7bn1IYW5kbGVyYF18fHt9LG89ZS5sb2dnZXJzW25dfHx7fTtyZXR1cm4gdFtuXT17bG9nTGV2ZWw6by5sZXZlbHx8TXQuSU5GTyxmaWxlUGF0aDphLmZpbGVuYW1lPy5zcGxpdChgLyR7bn1gKVswXXx8Ii4vbG9ncyIsYmFja3VwQ291bnQ6YS5iYWNrdXBDb3VudHx8NyxzYXZpbmdUaW1lOmEuaW50ZXJ2YWx8fDMsc2F2aW5nUGVyaW9kOmEud2hlbnx8RHQuZGF5c30sdH0pLHt9KSxsb2dGb3JtYXQ6dCxkYXRlRm9ybWF0Om59fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6R28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6R28sc2VsZWN0b3I6InRiLWdhdGV3YXktY29uZmlndXJhdGlvbiIsaW5wdXRzOntkZXZpY2U6ImRldmljZSIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsaW5wdXRzOlsiZGV2aWNlIiwiZGlhbG9nTW9kZSJdLG91dHB1dHM6WyJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6UG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUNvbmZpZ3VyYXRpb25Db21wb25lbnQiLEdvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkdvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbmZpZ3VyYXRpb24iLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTt2YXIgT289e2dhdGV3YXk6e2FkZHJlc3M6IkFkZHJlc3MiLCJhZGRyZXNzLXJlcXVpcmVkIjoiQWRkcmVzcyByZXF1aXJlZCIsImFkZC1lbnRyeSI6IkFkZCBjb25maWd1cmF0aW9uIiwiYWRkLWF0dHJpYnV0ZSI6IkFkZCBhdHRyaWJ1dGUiLCJhZGQtYXR0cmlidXRlLXVwZGF0ZSI6IkFkZCBhdHRyaWJ1dGUgdXBkYXRlIiwiYWRkLWtleSI6IkFkZCBrZXkiLCJhZGQtdGltZXNlcmllcyI6IkFkZCB0aW1lIHNlcmllcyIsImFkZC1tYXBwaW5nIjoiQWRkIG1hcHBpbmciLCJhZGQtc2xhdmUiOiJBZGQgU2xhdmUiLGFyZ3VtZW50czoiQXJndW1lbnRzIiwiYWRkLXJwYy1tZXRob2QiOiJBZGQgbWV0aG9kIiwiYWRkLXJwYy1yZXF1ZXN0IjoiQWRkIHJlcXVlc3QiLCJhZGQtdmFsdWUiOiJBZGQgYXJndW1lbnQiLGJhdWRyYXRlOiJCYXVkcmF0ZSIsYnl0ZXNpemU6IkJ5dGVzaXplIiwiZGVsZXRlLXZhbHVlIjoiRGVsZXRlIHZhbHVlIiwiZGVsZXRlLXJwYy1tZXRob2QiOiJEZWxldGUgbWV0aG9kIiwiZGVsZXRlLXJwYy1yZXF1ZXN0IjoiRGVsZXRlIHJlcXVlc3QiLCJkZWxldGUtYXR0cmlidXRlLXVwZGF0ZSI6IkRlbGV0ZSBhdHRyaWJ1dGUgdXBkYXRlIixhZHZhbmNlZDoiQWR2YW5jZWQiLCJhZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzIjoiQWR2YW5jZWQgY29ubmVjdGlvbiBzZXR0aW5ncyIsYXR0cmlidXRlczoiQXR0cmlidXRlcyIsImF0dHJpYnV0ZS11cGRhdGVzIjoiQXR0cmlidXRlIHVwZGF0ZXMiLCJhdHRyaWJ1dGUtZmlsdGVyIjoiQXR0cmlidXRlIGZpbHRlciIsImF0dHJpYnV0ZS1maWx0ZXItaGludCI6IkZpbHRlciBmb3IgaW5jb21pbmcgYXR0cmlidXRlIG5hbWUgZnJvbSBwbGF0Zm9ybSwgc3VwcG9ydHMgcmVndWxhciBleHByZXNzaW9uLiIsImF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWQiOiJBdHRyaWJ1dGUgZmlsdGVyIHJlcXVpcmVkLiIsImF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb24iOiJBdHRyaWJ1dGUgbmFtZSBleHByZXNzaW9uIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGV4cHJlc3Npb24gcmVxdWlyZWQuIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1oaW50IjoiSGludCBmb3IgQXR0cmlidXRlIG5hbWUgZXhwcmVzc2lvbiIsYmFzaWM6IkJhc2ljIiwiYnl0ZS1vcmRlciI6IkJ5dGUgb3JkZXIiLCJ3b3JkLW9yZGVyIjoiV29yZCBvcmRlciIsYnJva2VyOntjb25uZWN0aW9uOiJDb25uZWN0aW9uIHRvIGJyb2tlciIsbmFtZToiQnJva2VyIG5hbWUiLCJuYW1lLXJlcXVpcmVkIjoiQnJva2VyIG5hbWUgcmVxdWlyZWQuIiwic2VjdXJpdHktdHlwZXMiOnthbm9ueW1vdXM6IkFub255bW91cyIsYmFzaWM6IkJhc2ljIixjZXJ0aWZpY2F0ZXM6IkNlcnRpZmljYXRlcyJ9fSwiQ0EtY2VydGlmaWNhdGUtcGF0aCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsInBhdGgtdG8tQ0EtY2VydC1yZXF1aXJlZCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjaGFuZ2UtY29ubmVjdG9yLXRpdGxlIjoiQ29uZmlybSBjb25uZWN0b3IgY2hhbmdlIiwiY2hhbmdlLWNvbm5lY3Rvci10ZXh0IjoiU3dpdGNoaW5nIGNvbm5lY3RvcnMgd2lsbCBkaXNjYXJkIGFueSB1bnNhdmVkIGNoYW5nZXMuIENvbnRpbnVlPyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IkNoZWNraW5nIGRldmljZSBhY3Rpdml0eSIsY29tbWFuZDoiRG9ja2VyIGNvbW1hbmRzIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlciBjb21tYW5kIGhhcyBiZWVuIGNvcGllZCB0byBjbGlwYm9hcmQiLGNvbmZpZ3VyYXRpb246IkNvbmZpZ3VyYXRpb24iLCJhZGQtY29ubmVjdG9yIjoiQWRkIGNvbm5lY3RvciIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKHMpIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJDb25uZWN0IGF0dGVtcHQgdGltZSAobXMpIiwiY29ubmVjdC1hdHRlbXB0LWNvdW50IjoiQ29ubmVjdCBhdHRlbXB0IGNvdW50IiwiY29weS11c2VybmFtZSI6IkNvcHkgdXNlcm5hbWUiLCJjb3B5LXBhc3N3b3JkIjoiQ29weSBwYXNzd29yZCIsImNvcHktY2xpZW50LWlkIjoiQ29weSBjbGllbnQgSUQiLCJjb25uZWN0b3ItY3JlYXRlZCI6IkNvbm5lY3RvciBjcmVhdGVkIiwiY29ubmVjdG9yLXVwZGF0ZWQiOiJDb25uZWN0b3IgdXBkYXRlZCIsInJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGUiOiJTYXZlIFRlbXBsYXRlIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXNwb25zZSIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiVXNlIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gdG8gcnVuIElvVCBHYXRld2F5IGluIERvY2tlciBjb21wb3NlIHdpdGggY3JlZGVudGlhbHMgZm9yIHNlbGVjdGVkIGRldmljZSIsImluc3RhbGwtZG9ja2VyLWNvbXBvc2UiOiJVc2UgdGhlIGluc3RydWN0aW9ucyB0byBkb3dubG9hZCwgaW5zdGFsbCBhbmQgc2V0dXAgZG9ja2VyIGNvbXBvc2UiLCJkZXZpY2UtaW5mby1zZXR0aW5ncyI6IkRldmljZSBpbmZvIHNldHRpbmdzIiwiZGV2aWNlLWluZm8iOnsiZW50aXR5LWZpZWxkIjoiRW50aXR5IGZpZWxkIixzb3VyY2U6IlNvdXJjZSIsZXhwcmVzc2lvbjoiVmFsdWUgLyBFeHByZXNzaW9uIiwiZXhwcmVzc2lvbi1oaW50IjoiU2hvdyBoZWxwIixuYW1lOiJOYW1lIiwicHJvZmlsZS1uYW1lIjoiUHJvZmlsZSBuYW1lIiwiZGV2aWNlLW5hbWUtZXhwcmVzc2lvbiI6IkRldmljZSBuYW1lIGV4cHJlc3Npb24iLCJkZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJkZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIHByb2ZpbGUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4ifSwiZGV2aWNlLW5hbWUtZmlsdGVyIjoiRGV2aWNlIG5hbWUgZmlsdGVyIiwiZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZmlsdGVyIGluY29taW5nIGRhdGEgYnkgZGV2aWNlIG5hbWUuIiwiZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZmlsdGVyIGlzIHJlcXVpcmVkLiIsZGV0YWlsczoiRGV0YWlscyIsImRlbGV0ZS1tYXBwaW5nLXRpdGxlIjoiRGVsZXRlIG1hcHBpbmc/IiwiZGVsZXRlLXNsYXZlLXRpdGxlIjoiRGVsZXRlIHNsYXZlPyIsZGl2aWRlcjoiRGl2aWRlciIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6IkRvd25sb2FkIGNvbmZpZ3VyYXRpb24gZmlsZSIsImRvd25sb2FkLWRvY2tlci1jb21wb3NlIjoiRG93bmxvYWQgZG9ja2VyLWNvbXBvc2UueW1sIGZvciB5b3VyIGdhdGV3YXkiLCJlbmFibGUtcmVtb3RlLWxvZ2dpbmciOiJFbmFibGUgcmVtb3RlIGxvZ2dpbmciLCJlbGxpcHNpcy1jaGlwcy10ZXh0IjoiKyB7e2NvdW50fX0gbW9yZSIsImxhdW5jaC1nYXRld2F5IjoiTGF1bmNoIGdhdGV3YXkiLCJsYXVuY2gtY29tbWFuZCI6IkxhdW5jaCBjb21tYW5kIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoiU3RhcnQgdGhlIGdhdGV3YXkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSB0ZXJtaW5hbCBmcm9tIGZvbGRlciB3aXRoIGRvY2tlci1jb21wb3NlLnltbCBmaWxlIiwibG9ncy1jb25maWd1cmF0aW9uIjoiTG9ncyBjb25maWd1cmF0aW9uIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXRlIGEgbmV3IGdhdGV3YXkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgZ2F0ZXdheSB3aXRoIG5hbWU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkNyZWF0ZWQgdGltZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXIiOiJDb25maWd1cmF0aW9ucyB3aWxsIGJlIGRlbGV0ZWQiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6IlR1cm5pbmcgb2ZmIFJlbW90ZSBDb25maWd1cmF0aW9uIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgaXMgcGh5c2ljYWwgYWNjZXNzIHRvIHRoZSBHYXRld2F5LiBBbGwgcHJldmlvdXMgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkLjxicj48YnI+IFxuVG8gdHVybiBvZmYgY29uZmlndXJhdGlvbiwgZW50ZXIgZ2F0ZXdheSBuYW1lIGJlbG93IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0IjoiR2F0ZXdheSBuYW1lIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIG1hbmRhdG9yeSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtIjoiVHVybiBPZmYiLCJjb25uZWN0b3ItZHVwbGljYXRlLW5hbWUiOiJDb25uZWN0b3Igd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMuIiwiY29ubmVjdG9yLXNpZGUiOiJDb25uZWN0b3Igc2lkZSIsInBheWxvYWQtdHlwZSI6IlBheWxvYWQgdHlwZSIsInBsYXRmb3JtLXNpZGUiOiJQbGF0Zm9ybSBzaWRlIixKU09OOiJKU09OIiwiSlNPTi1oaW50IjoiQ29udmVydGVyIGZvciB0aGlzIHBheWxvYWQgdHlwZSBwcm9jZXNzZXMgTVFUVCBtZXNzYWdlcyBpbiBKU09OIGZvcm1hdC4gSXQgdXNlcyBKU09OIFBhdGggZXhwcmVzc2lvbnMgdG8gZXh0cmFjdCB2aXRhbCBkZXRhaWxzIHN1Y2ggYXMgZGV2aWNlIG5hbWVzLCBkZXZpY2UgcHJvZmlsZSBuYW1lcywgYXR0cmlidXRlcywgYW5kIHRpbWUgc2VyaWVzIGZyb20gdGhlIG1lc3NhZ2UuIEFuZCByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGdldCBkZXZpY2UgZGV0YWlscyBmcm9tIHRvcGljcy4iLGJ5dGVzOiJCeXRlcyIsImJ5dGVzLWhpbnQiOiJDb252ZXJ0ZXIgZm9yIHRoaXMgcGF5bG9hZCB0eXBlIGRlc2lnbmVkIGZvciBiaW5hcnkgTVFUVCBwYXlsb2FkcywgdGhpcyBjb252ZXJ0ZXIgZGlyZWN0bHkgaW50ZXJwcmV0cyBiaW5hcnkgZGF0YSB0byByZXRyaWV2ZSBkZXZpY2UgbmFtZXMgYW5kIGRldmljZSBwcm9maWxlIG5hbWVzLCBhbG9uZyB3aXRoIGF0dHJpYnV0ZXMgYW5kIHRpbWUgc2VyaWVzLCB1c2luZyBzcGVjaWZpYyBieXRlIHBvc2l0aW9ucyBmb3IgZGF0YSBleHRyYWN0aW9uLiIsY3VzdG9tOiJDdXN0b20iLCJjdXN0b20taGludCI6IlRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gdXNlIGEgY3VzdG9tIGNvbnZlcnRlciBmb3Igc3BlY2lmaWMgZGF0YSB0YXNrcy4gWW91IG5lZWQgdG8gYWRkIHlvdXIgY3VzdG9tIGNvbnZlcnRlciB0byB0aGUgZXh0ZW5zaW9uIGZvbGRlciBhbmQgZW50ZXIgaXRzIGNsYXNzIG5hbWUgaW4gdGhlIFVJIHNldHRpbmdzLiBBbnkga2V5cyB5b3UgcHJvdmlkZSB3aWxsIGJlIHNlbnQgYXMgY29uZmlndXJhdGlvbiB0byB5b3VyIGN1c3RvbSBjb252ZXJ0ZXIuIiwiY2xpZW50LWNlcnQtcGF0aCI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIGZpbGUiLCJwYXRoLXRvLWNsaWVudC1jZXJ0LXJlcXVpcmVkIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjbGllbnQtaWQiOiJDbGllbnQgSUQiLCJkYXRhLWNvbnZlcnNpb24iOiJEYXRhIGNvbnZlcnNpb24iLCJkYXRhLW1hcHBpbmciOiJEYXRhIG1hcHBpbmciLCJkYXRhLW1hcHBpbmctaGludCI6IkRhdGEgbWFwcGluZyBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSB0byBwYXJzZSBhbmQgY29udmVydCB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIGEgTVFUVCBjbGllbnQgaW4gaW5jb21pbmcgbWVzc2FnZXMgaW50byBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBkYXRhIGtleXMuIiwib3BjdWEtZGF0YS1tYXBwaW5nLWhpbnQiOiJEYXRhIG1hcHBpbmcgcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgdG8gcGFyc2UgYW5kIGNvbnZlcnQgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBhIE9QQ1VBIHNlcnZlciBpbnRvIHNwZWNpZmljIGRhdGEga2V5cy4iLGRlbGV0ZToiRGVsZXRlIGNvbmZpZ3VyYXRpb24iLCJkZWxldGUtYXR0cmlidXRlIjoiRGVsZXRlIGF0dHJpYnV0ZSIsImRlbGV0ZS1rZXkiOiJEZWxldGUga2V5IiwiZGVsZXRlLXRpbWVzZXJpZXMiOiJEZWxldGUgdGltZSBzZXJpZXMiLGRlZmF1bHQ6IkRlZmF1bHQiLCJkZXZpY2Utbm9kZSI6IkRldmljZSBub2RlIiwiZGV2aWNlLW5vZGUtcmVxdWlyZWQiOiJEZXZpY2Ugbm9kZSByZXF1aXJlZC4iLCJkZXZpY2Utbm9kZS1oaW50IjoiUGF0aCBvciBpZGVudGlmaWVyIGZvciBkZXZpY2Ugbm9kZSBvbiBPUEMgVUEgc2VydmVyLiBSZWxhdGl2ZSBwYXRocyBmcm9tIGl0IGZvciBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBjYW4gYmUgdXNlZC4iLCJkZXZpY2UtbmFtZSI6IkRldmljZSBuYW1lIiwiZGV2aWNlLXByb2ZpbGUtbGFiZWwiOiJEZXZpY2UgcHJvZmlsZSIsImRldmljZS1uYW1lLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgcmVxdWlyZWQiLCJkZXZpY2UtcHJvZmlsZS1yZXF1aXJlZCI6IkRldmljZSBwcm9maWxlIHJlcXVpcmVkIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGVuYWJsZToiRW5hYmxlIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IkVuYWJsZSBzdWJzY3JpcHRpb24iLGV4dGVuc2lvbjoiRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uLWhpbnQiOiJQdXQgeW91ciBjb252ZXJ0ZXIgY2xhc3NuYW1lIGluIHRoZSBmaWVsZC4gQ3VzdG9tIGNvbnZlcnRlciB3aXRoIHN1Y2ggY2xhc3Mgc2hvdWxkIGJlIGluIGV4dGVuc2lvbi9tcXR0IGZvbGRlci4iLCJleHRlbnNpb24tcmVxdWlyZWQiOiJFeHRlbnNpb24gaXMgcmVxdWlyZWQuIiwiZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24iOiJFeHRlbnNpb24gY29uZmlndXJhdGlvbiIsImV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnQiOiJDb25maWd1cmF0aW9uIGZvciBjb252ZXJ0b3IiLCJmaWxsLWNvbm5lY3Rvci1kZWZhdWx0cyI6IkZpbGwgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHQgdmFsdWVzIiwiZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludCI6IlRoaXMgcHJvcGVydHkgYWxsb3dzIHRvIGZpbGwgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0IHZhbHVlcyBvbiBpdCdzIGNyZWF0aW9uLiIsImZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MiOiJJbnB1dCByZXF1ZXN0IHBhcnNpbmciLCJmcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnQiOiJUaGVzZSBmaWVsZHMgc3VwcG9ydCBKU09OUGF0aCBleHByZXNzaW9ucyB0byBleHRyYWN0IGEgbmFtZSBmcm9tIGluY29taW5nIG1lc3NhZ2UuIiwiZnVuY3Rpb24tY29kZSI6IkZ1bmN0aW9uIGNvZGUiLCJmdW5jdGlvbi1jb2RlcyI6eyJyZWFkLWNvaWxzIjoiMDEgLSBSZWFkIENvaWxzIiwicmVhZC1kaXNjcmV0ZS1pbnB1dHMiOiIwMiAtIFJlYWQgRGlzY3JldGUgSW5wdXRzIiwicmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyI6IjAzIC0gUmVhZCBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyIsInJlYWQtaW5wdXQtcmVnaXN0ZXJzIjoiMDQgLSBSZWFkIElucHV0IFJlZ2lzdGVycyIsIndyaXRlLXNpbmdsZS1jb2lsIjoiMDUgLSBXcml0ZSBTaW5nbGUgQ29pbCIsIndyaXRlLXNpbmdsZS1ob2xkaW5nLXJlZ2lzdGVyIjoiMDYgLSBXcml0ZSBTaW5nbGUgSG9sZGluZyBSZWdpc3RlciIsIndyaXRlLW11bHRpcGxlLWNvaWxzIjoiMTUgLSBXcml0ZSBNdWx0aXBsZSBDb2lscyIsIndyaXRlLW11bHRpcGxlLWhvbGRpbmctcmVnaXN0ZXJzIjoiMTYgLSBXcml0ZSBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyJ9LCJ0by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MiOiJPdXRwdXQgcmVxdWVzdCBwcm9jZXNzaW5nIiwidG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzLWhpbnQiOiJGb3IgdGhlc2UgZmllbGRzIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFuZCB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhY3R1YWwgdmFsdWVzOiAke2RldmljZU5hbWV9LCAke2F0dHJpYnV0ZUtleX0sICR7YXR0cmlidXRlVmFsdWV9IixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImdlbmVyYXRlLWNsaWVudC1pZCI6IkdlbmVyYXRlIENsaWVudCBJRCIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsaW5mbzoiSW5mbyIsaWRlbnRpdHk6IklkZW50aXR5IiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJ1bml0LWlkIjoiVW5pdCBJRCIsaG9zdDoiSG9zdCIsImhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsaG9sZGluZ19yZWdpc3RlcnM6IkhvbGRpbmcgcmVnaXN0ZXJzIixjb2lsc19pbml0aWFsaXplcjoiQ29pbHMgaW5pdGlhbGl6ZXIiLGlucHV0X3JlZ2lzdGVyczoiSW5wdXQgcmVnaXN0ZXJzIixkaXNjcmV0ZV9pbnB1dHM6IkRpc2NyZXRlIGlucHV0cyIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIkpTT05QYXRoLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIGNvbnN0YW50cyBhbmQgSlNPTlBhdGggZXhwcmVzc2lvbnMuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWF4LW51bWJlci1vZi13b3JrZXJzIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIiwibWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnQiOiJNYXhpbWFsIG51bWJlciBvZiB3b3JrZXJzIHRocmVhZHMgZm9yIGNvbnZlcnRlcnMgXG4oVGhlIGFtb3VudCBvZiB3b3JrZXJzIGNoYW5nZXMgZHluYW1pY2FsbHksIGRlcGVuZGluZyBvbiBsb2FkKSBcblJlY29tbWVuZGVkIGFtb3VudCA1MC0xNTAuIiwibWF4LW51bWJlci1vZi13b3JrZXJzLXJlcXVpcmVkIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIGlzIHJlcXVpcmVkLiIsIm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyIjoiTWF4IG1lc3NhZ2VzIHF1ZXVlIHBlciB3b3JrZXIiLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1oaW50IjoiTWF4aW1hbCBtZXNzYWdlcyBjb3VudCB0aGF0IHdpbGwgYmUgaW4gdGhlIHF1ZXVlIFxuZm9yIGVhY2ggY29udmVydGVyIHdvcmtlci4iLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZCI6Ik1heCBtZXNzYWdlcyBxdWV1ZSBwZXIgd29ya2VyIGlzIHJlcXVpcmVkLiIsbWV0aG9kOiJNZXRob2QiLCJtZXRob2QtbmFtZSI6Ik1ldGhvZCBuYW1lIiwibWV0aG9kLXJlcXVpcmVkIjoiTWV0aG9kIG5hbWUgaXMgcmVxdWlyZWQuIiwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwIiwibWluLXBhY2stc2VuZC1kZWxheS1wYXR0ZXJuIjoiTWluIHBhY2sgc2VuZCBkZWxheSBpcyBub3QgdmFsaWQiLG11bHRpcGxpZXI6Ik11bHRpcGxpZXIiLG1vZGU6Ik1vZGUiLCJtb2RlbC1uYW1lIjoiTW9kZWwgbmFtZSIsbW9kaWZpZXI6Ik1vZGlmaWVyIiwibW9kaWZpZXItaW52YWxpZCI6Ik1vZGlmaWVyIGlzIG5vdCB2YWxpZCIsIm1xdHQtdmVyc2lvbiI6Ik1RVFQgdmVyc2lvbiIsbmFtZToiTmFtZSIsIm5hbWUtcmVxdWlyZWQiOiJOYW1lIGlzIHJlcXVpcmVkLiIsIm5vLWF0dHJpYnV0ZXMiOiJObyBhdHRyaWJ1dGVzIiwibm8tYXR0cmlidXRlLXVwZGF0ZXMiOiJObyBhdHRyaWJ1dGUgdXBkYXRlcyIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJuby10aW1lc2VyaWVzIjoiTm8gdGltZSBzZXJpZXMiLCJuby1rZXlzIjoiTm8ga2V5cyIsIm5vLXZhbHVlIjoiTm8gYXJndW1lbnRzIiwibm8tcnBjLW1ldGhvZHMiOiJObyBSUEMgbWV0aG9kcyIsIm5vLXJwYy1yZXF1ZXN0cyI6Ik5vIFJQQyByZXF1ZXN0cyIsInBhdGgtaGludCI6IlRoZSBwYXRoIGlzIGxvY2FsIHRvIHRoZSBnYXRld2F5IGZpbGUgc3lzdGVtIiwicGF0aC1sb2dzIjoiUGF0aCB0byBsb2cgZmlsZXMiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYXRoIGlzIHJlcXVpcmVkLiIscGFzc3dvcmQ6IlBhc3N3b3JkIiwicGFzc3dvcmQtcmVxdWlyZWQiOiJQYXNzd29yZCBpcyByZXF1aXJlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IktlZXAgYWxpdmUgcGVybWl0IHdpdGhvdXQgY2FsbHMiLCJwb2xsLXBlcmlvZCI6IlBvbGwgcGVyaW9kIChtcykiLCJwb2xsLXBlcmlvZC1lcnJvciI6IlBvbGwgcGVyaW9kIHNob3VsZCBiZSBhdCBsZWFzdCB7e21pbn19IChtcykuIixwb3J0OiJQb3J0IiwicG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIiwicG9ydC1saW1pdHMtZXJyb3IiOiJQb3J0IHNob3VsZCBiZSBudW1iZXIgZnJvbSB7e21pbn19IHRvIHt7bWF4fX0uIiwicHJpdmF0ZS1rZXktcGF0aCI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgZmlsZSIsInBhdGgtdG8tcHJpdmF0ZS1rZXktcmVxdWlyZWQiOiJQYXRoIHRvIHByaXZhdGUga2V5IGZpbGUgaXMgcmVxdWlyZWQuIixwYXJpdHk6IlBhcml0eSIsInByb2R1Y3QtY29kZSI6IlByb2R1Y3QgY29kZSIsInByb2R1Y3QtbmFtZSI6IlByb2R1Y3QgbmFtZSIscmF3OiJSYXciLHJldGFpbjoiUmV0YWluIiwicmV0YWluLWhpbnQiOiJUaGlzIGZsYWcgdGVsbHMgdGhlIGJyb2tlciB0byBzdG9yZSB0aGUgbWVzc2FnZSBmb3IgYSB0b3BpY1xuYW5kIGVuc3VyZXMgYW55IG5ldyBjbGllbnQgc3Vic2NyaWJpbmcgdG8gdGhhdCB0b3BpY1xud2lsbCByZWNlaXZlIHRoZSBzdG9yZWQgbWVzc2FnZS4iLHJlbW90ZToiUmVtb3RlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IkxvZ2dpbmcgbGV2ZWwiLCJyZW1vdmUtZW50cnkiOiJSZW1vdmUgY29uZmlndXJhdGlvbiIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLHJldHJpZXM6IlJldHJpZXMiLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cmllcyBvbiBlbXB0eSIsInJldHJpZXMtb24taW52YWxpZCI6IlJldHJpZXMgb24gaW52YWxpZCIscnBjOnt0aXRsZToie3t0eXBlfX0gQ29ubmVjdG9yIFJQQyBwYXJhbWV0ZXJzIiwidGVtcGxhdGVzLXRpdGxlIjoiQ29ubmVjdG9yIFJQQyBUZW1wbGF0ZXMiLG1ldGhvZEZpbHRlcjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1uYW1lIjoiTWV0aG9kIG5hbWUiLHJlcXVlc3RUb3BpY0V4cHJlc3Npb246IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiIscmVzcG9uc2VUb3BpY0V4cHJlc3Npb246IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLHJlc3BvbnNlVGltZW91dDoiUmVzcG9uc2UgdGltZW91dCIsdmFsdWVFeHByZXNzaW9uOiJWYWx1ZSBleHByZXNzaW9uIix0YWc6IlRhZyIsdHlwZToiVHlwZSIsZnVuY3Rpb25Db2RlOiJGdW5jdGlvbiBDb2RlIixvYmplY3RzQ291bnQ6Ik9iamVjdHMgQ291bnQiLGFkZHJlc3M6IkFkZHJlc3MiLG1ldGhvZDoiTWV0aG9kIixyZXF1ZXN0VHlwZToiUmVxdWVzdCBUeXBlIixyZXF1ZXN0VGltZW91dDoiUmVxdWVzdCBUaW1lb3V0IixvYmplY3RUeXBlOiJPYmplY3QgdHlwZSIsaWRlbnRpZmllcjoiSWRlbnRpZmllciIscHJvcGVydHlJZDoiUHJvcGVydHkgSUQiLG1ldGhvZFJQQzoiTWV0aG9kIFJQQyBuYW1lIix3aXRoUmVzcG9uc2U6IldpdGggUmVzcG9uc2UiLGNoYXJhY3RlcmlzdGljVVVJRDoiQ2hhcmFjdGVyaXN0aWMgVVVJRCIsbWV0aG9kUHJvY2Vzc2luZzoiTWV0aG9kIFByb2Nlc3NpbmciLG5vZGVJRDoiTm9kZSBJRCIsaXNFeHRlbmRlZElEOiJJcyBFeHRlbmRlZCBJRCIsaXNGRDoiSXMgRkQiLGJpdHJhdGVTd2l0Y2g6IkJpdHJhdGUgU3dpdGNoIixkYXRhSW5IRVg6IkRhdGEgSW4gSEVYIixkYXRhTGVuZ3RoOiJEYXRhIExlbmd0aCIsZGF0YUJ5dGVvcmRlcjoiRGF0YSBCeXRlIE9yZGVyIixkYXRhQmVmb3JlOiJEYXRhIEJlZm9yZSIsZGF0YUFmdGVyOiJEYXRhIEFmdGVyIixkYXRhRXhwcmVzc2lvbjoiRGF0YSBFeHByZXNzaW9uIixlbmNvZGluZzoiRW5jb2RpbmciLG9pZDoiT0lEIiwiYWRkLW9pZCI6IkFkZCBPSUQiLCJhZGQtaGVhZGVyIjoiQWRkIGhlYWRlciIsImFkZC1zZWN1cml0eSI6IkFkZCBzZWN1cml0eSIscmVtb3ZlOiJSZW1vdmUiLHJlcXVlc3RGaWx0ZXI6IlJlcXVlc3QgRmlsdGVyIixyZXF1ZXN0VXJsRXhwcmVzc2lvbjoiUmVxdWVzdCBVUkwgRXhwcmVzc2lvbiIsaHR0cE1ldGhvZDoiSFRUUCBNZXRob2QiLHRpbWVvdXQ6IlRpbWVvdXQiLHRyaWVzOiJUcmllcyIsaHR0cEhlYWRlcnM6IkhUVFAgSGVhZGVycyIsImhlYWRlci1uYW1lIjoiSGVhZGVyIG5hbWUiLGhpbnQ6eyJtb2RidXMtcmVzcG9uc2UtcmVhZGluZyI6IlJQQyByZXNwb25zZSB3aWxsIHJldHVybiBhbGwgc3VidHJhY3RlZCB2YWx1ZXMgZnJvbSBhbGwgY29ubmVjdGVkIGRldmljZXMgd2hlbiB0aGUgcmVhZGluZyBmdW5jdGlvbnMgYXJlIHNlbGVjdGVkLiIsIm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9ucyI6IlJQQyB3aWxsIHdyaXRlIGEgZmlsbGVkIHZhbHVlIHRvIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyB3aGVuIHRoZSB3cml0aW5nIGZ1bmN0aW9ucyBhcmUgc2VsZWN0ZWQuIiwib3BjLW1ldGhvZCI6IkEgZmlsbGVkIG1ldGhvZCBuYW1lIGlzIHRoZSBPUEMtVUEgbWV0aG9kIHRoYXQgd2lsbCBwcm9jZXNzZWQgb24gdGhlIHNlcnZlciBzaWRlIChtYWtlIHN1cmUgeW91ciBub2RlIGhhcyB0aGUgcmVxdWVzdGVkIG1ldGhvZCkuIn0sInNlY3VyaXR5LW5hbWUiOiJTZWN1cml0eSBuYW1lIix2YWx1ZToiVmFsdWUiLHNlY3VyaXR5OiJTZWN1cml0eSIscmVzcG9uc2VWYWx1ZUV4cHJlc3Npb246IlJlc3BvbnNlIFZhbHVlIEV4cHJlc3Npb24iLHJlcXVlc3RWYWx1ZUV4cHJlc3Npb246IlJlcXVlc3QgVmFsdWUgRXhwcmVzc2lvbiIsYXJndW1lbnRzOiJBcmd1bWVudHMiLCJhZGQtYXJndW1lbnQiOiJBZGQgYXJndW1lbnQiLCJ3cml0ZS1wcm9wZXJ0eSI6IldyaXRlIHByb3BlcnR5IiwicmVhZC1wcm9wZXJ0eSI6IlJlYWQgcHJvcGVydHkiLCJhbmFsb2ctb3V0cHV0IjoiQW5hbG9nIG91dHB1dCIsImFuYWxvZy1pbnB1dCI6IkFuYWxvZyBpbnB1dCIsImJpbmFyeS1vdXRwdXQiOiJCaW5hcnkgb3V0cHV0IiwiYmluYXJ5LWlucHV0IjoiQmluYXJ5IGlucHV0IiwiYmluYXJ5LXZhbHVlIjoiQmluYXJ5IHZhbHVlIiwiYW5hbG9nLXZhbHVlIjoiQW5hbG9nIHZhbHVlIix3cml0ZToiV3JpdGUiLHJlYWQ6IlJlYWQiLHNjYW46IlNjYW4iLG9pZHM6Ik9JRFMiLHNldDoiU2V0IixtdWx0aXNldDoiTXVsdGlzZXQiLGdldDoiR2V0IiwiYnVsay13YWxrIjoiQnVsayB3YWxrIix0YWJsZToiVGFibGUiLCJtdWx0aS1nZXQiOiJNdWx0aWdldCIsImdldC1uZXh0IjoiR2V0IG5leHQiLCJidWxrLWdldCI6IkJ1bGsgZ2V0Iix3YWxrOiJXYWxrIiwic2F2ZS10ZW1wbGF0ZSI6IlNhdmUgdGVtcGxhdGUiLCJ0ZW1wbGF0ZS1uYW1lIjoiVGVtcGxhdGUgbmFtZSIsInRlbXBsYXRlLW5hbWUtcmVxdWlyZWQiOiJUZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLiIsInRlbXBsYXRlLW5hbWUtZHVwbGljYXRlIjoiVGVtcGxhdGUgd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgdXBkYXRlZC4iLGNvbW1hbmQ6IkNvbW1hbmQiLHBhcmFtczoiUGFyYW1zIiwianNvbi12YWx1ZS1pbnZhbGlkIjoiSlNPTiB2YWx1ZSBoYXMgYW4gaW52YWxpZCBmb3JtYXQifSwicnBjLW1ldGhvZHMiOiJSUEMgbWV0aG9kcyIsInJwYy1yZXF1ZXN0cyI6IlJQQyByZXF1ZXN0cyIscmVxdWVzdDp7ImNvbm5lY3QtcmVxdWVzdCI6IkNvbm5lY3QgcmVxdWVzdCIsImRpc2Nvbm5lY3QtcmVxdWVzdCI6IkRpc2Nvbm5lY3QgcmVxdWVzdCIsImF0dHJpYnV0ZS1yZXF1ZXN0IjoiQXR0cmlidXRlIHJlcXVlc3QiLCJhdHRyaWJ1dGUtdXBkYXRlIjoiQXR0cmlidXRlIHVwZGF0ZSIsInJwYy1jb25uZWN0aW9uIjoiUlBDIGNvbW1hbmQifSwicmVxdWVzdC10eXBlIjoiUmVxdWVzdCB0eXBlIiwicmVxdWVzdHMtbWFwcGluZyI6IlJlcXVlc3RzIG1hcHBpbmciLCJyZXF1ZXN0cy1tYXBwaW5nLWhpbnQiOiJNUVRUIENvbm5lY3RvciByZXF1ZXN0cyBhbGxvd3MgeW91IHRvIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHByb2Nlc3MgYXR0cmlidXRlIHJlcXVlc3RzIGZyb20gdGhlIGRldmljZSwgaGFuZGxlIGF0dHJpYnV0ZSB1cGRhdGVzIG9uIHRoZSBzZXJ2ZXIgYW5kIFJQQyBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24uIiwicmVxdWVzdC10b3BpYy1leHByZXNzaW9uIjoiUmVxdWVzdCB0b3BpYyBleHByZXNzaW9uIiwicmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGUiOiJSZXF1ZXN0IGNsaWVudCBjZXJ0aWZpY2F0ZSIsInJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS10aW1lb3V0IjoiUmVzcG9uc2UgdGltZW91dCAobXMpIiwicmVzcG9uc2UtdGltZW91dC1yZXF1aXJlZCI6IlJlc3BvbnNlIHRpbWVvdXQgaXMgcmVxdWlyZWQuIiwicmVzcG9uc2UtdGltZW91dC1saW1pdHMtZXJyb3IiOiJUaW1lb3V0IG11c3QgYmUgbW9yZSB0aGVuIHt7bWlufX0gbXMuIiwicmVzcG9uc2UtdG9waWMtUW9zIjoiUmVzcG9uc2UgdG9waWMgUW9TIiwicmVzcG9uc2UtdG9waWMtUW9zLWhpbnQiOiJNUVRUIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBpcyBhbiBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgbWVzc2FnZSBzZW5kZXIgYW5kIHJlY2VpdmVyIHRoYXQgZGVmaW5lcyB0aGUgbGV2ZWwgb2YgZGVsaXZlcnkgZ3VhcmFudGVlIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UuIiwicmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbiI6IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLCJyZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkIjoiUmVzcG9uc2UgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS12YWx1ZS1leHByZXNzaW9uIjoiUmVzcG9uc2UgdmFsdWUgZXhwcmVzc2lvbiIsInJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWQiOiJSZXNwb25zZSB2YWx1ZSBleHByZXNzaW9uIGlzIHJlcXVpcmVkLiIsInZlbmRvci1uYW1lIjoiVmVuZG9yIG5hbWUiLCJ2ZW5kb3ItdXJsIjoiVmVuZG9yIFVSTCIsdmFsdWU6IlZhbHVlIix2YWx1ZXM6IlZhbHVlcyIsInZhbHVlLXJlcXVpcmVkIjoiVmFsdWUgaXMgcmVxdWlyZWQuIiwidmFsdWUtZXhwcmVzc2lvbiI6IlZhbHVlIGV4cHJlc3Npb24iLCJ2YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiVmFsdWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJ3aXRoLXJlc3BvbnNlIjoiV2l0aCByZXNwb25zZSIsIndpdGhvdXQtcmVzcG9uc2UiOiJXaXRob3V0IHJlc3BvbnNlIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2Nhbi1wZXJpb2QiOiJTY2FuIHBlcmlvZCAobXMpIiwic2Nhbi1wZXJpb2QtZXJyb3IiOiJTY2FuIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJTdWJzY3JpcHRpb24gY2hlY2sgcGVyaW9kIChtcykiLCJzdWItY2hlY2stcGVyaW9kLWVycm9yIjoiU3Vic2NyaXB0aW9uIGNoZWNrIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInNlY3VyaXR5LWxhYmVsIjoiU2VjdXJpdHkiLCJzZWN1cml0eS1wb2xpY3kiOiJTZWN1cml0eSBwb2xpY3kiLCJzZWN1cml0eS10eXBlIjoiU2VjdXJpdHkgdHlwZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkFjY2VzcyBUb2tlbiIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXNlcm5hbWUgYW5kIFBhc3N3b3JkIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBBY2Nlc3MgVG9rZW4iLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyBQcml2YXRlIEtleSJ9LCJzZWxlY3QtY29ubmVjdG9yIjoiU2VsZWN0IGNvbm5lY3RvciB0byBkaXNwbGF5IGNvbmZpZyIsInNlbmQtY2hhbmdlLWRhdGEiOiJTZW5kIGRhdGEgb25seSBvbiBjaGFuZ2UiLCJzZW5kLWRhdGEtdG8tcGxhdGZvcm0iOiJTZW5kIGRhdGEgdG8gcGxhdGZvcm0iLCJzZW5kLWRhdGEtb24tY2hhbmdlIjoiU2VuZCBkYXRhIG9ubHkgb24gY2hhbmdlIiwic2VuZC1jaGFuZ2UtZGF0YS1oaW50IjoiVGhlIHZhbHVlcyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBkYXRhYmFzZSBvbmx5IGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgcHJldmlvdXMgY29udmVydGVkIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb25hbGl0eSBhcHBsaWVzIHRvIGJvdGggYXR0cmlidXRlcyBhbmQgdGltZSBzZXJpZXMgaW4gdGhlIGNvbnZlcnRlciBvdXRwdXQuIixzZXJ2ZXI6IlNlcnZlciIsInNlcnZlci1ob3N0bmFtZSI6IlNlcnZlciBob3N0bmFtZSIsInNlcnZlci1zbGF2ZSI6IlNlcnZlciAoU2xhdmUpIiwic2VydmVycy1zbGF2ZXMiOiJTZXJ2ZXJzIChTbGF2ZXMpIiwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsInNlcnZlci11cmwiOiJTZXJ2ZXIgZW5kcG9pbnQgdXJsIiwic2VydmVyLWNvbm5lY3Rpb24iOiJTZXJ2ZXIgQ29ubmVjdGlvbiIsInNlcnZlci1jb25maWciOiJTZXJ2ZXIgY29uZmlndXJhdGlvbiIsInNlcnZlci1zbGF2ZS1jb25maWciOiJTZXJ2ZXIgKFNsYXZlKSBjb25maWd1cmF0aW9uIiwic2VydmVyLXVybC1yZXF1aXJlZCI6IlNlcnZlciBlbmRwb2ludCB1cmwgaXMgcmVxdWlyZWQuIixzdG9wYml0czoiU3RvcGJpdHMiLHN0cmljdDoiU3RyaWN0IixzZXQ6IlNldCIsInNob3ctbWFwIjoiU2hvdyBtYXAiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiU3RhdGlzdGljIixzdGF0aXN0aWNzOiJTdGF0aXN0aWNzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjonTm8gY29uZmlndXJlZCBzdGF0aXN0aWMga2V5cyBmb3VuZC4gWW91IGNhbiBjb25maWd1cmUgdGhlbSBpbiAiU3RhdGlzdGljcyIgdGFiIGluIGdlbmVyYWwgY29uZmlndXJhdGlvbi4nLCJzdGF0aXN0aWNzLWJ1dHRvbiI6IkdvIHRvIGNvbmZpZ3VyYXRpb24iLGNvbW1hbmRzOiJDb21tYW5kcyIsInNlbmQtcGVyaW9kIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIChpbiBzZWMpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgcmVxdWlyZWQiLCJzZW5kLXBlcmlvZC1taW4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gNjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiAoaW4gc2VjKSIsIm1heC1wYXlsb2FkLXNpemUtYnl0ZXMiOiJNYXggcGF5bG9hZCBzaXplIGluIGJ5dGVzIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1yZXF1aXJlZCI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgaXMgcmVxdWlyZWQiLCJtYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pbiI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMTAwIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuIjoiTWF4IHBheWxvYWQgc2l6ZSBpbiBieXRlcyBpcyBub3QgdmFsaWQiLCJtaW4tcGFjay1zaXplLXRvLXNlbmQiOiJNaW4gcGFja2V0IHNpemUgdG8gc2VuZCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZCI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2l6ZS10by1zZW5kLW1pbiI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwMCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuIjoiTWluIHBhY2tldCBzaXplIHRvIHNlbmQgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IChpbiBzZWMpIiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLCJjb21tYW5kLXBhdHRlcm4iOiJDb21tYW5kIGlzIG5vdCB2YWxpZCIscmVtb3ZlOiJSZW1vdmUgY29tbWFuZCJ9LHN0b3JhZ2U6IlN0b3JhZ2UiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gZmlsZSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWF4aW11bSBudW1iZXIgb2YgZmlsZXMiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtYmVyIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1heGltdW0gcmVjb3JkcyBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiUmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50IjoiTWF4IHJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJNYXggUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiRGF0YSBmb2xkZXIgcGF0aCIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZCI6IkRhdGEgZm9sZGVyIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhdGgiOiJTdG9yYWdlIHBhdGgiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJTdG9yYWdlIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS10eXBlIjoiU3RvcmFnZSB0eXBlIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJGaWxlIHN0b3JhZ2UiLCJtZW1vcnktc3RvcmFnZSI6Ik1lbW9yeSBzdG9yYWdlIixzcWxpdGU6IlNRTElURSJ9LCJyZXBvcnQtc3RyYXRlZ3kiOntsYWJlbDoiUmVwb3J0IHN0cmF0ZWd5Iiwib24tY2hhbmdlIjoiT24gdmFsdWUgY2hhbmdlIiwib24tcmVwb3J0LXBlcmlvZCI6Ik9uIHJlcG9ydCBwZXJpb2QiLCJvbi1jaGFuZ2Utb3ItcmVwb3J0LXBlcmlvZCI6Ik9uIHZhbHVlIGNoYW5nZSBvciByZXBvcnQgcGVyaW9kIiwicmVwb3J0LXBlcmlvZCI6IlJlcG9ydCBwZXJpb2QifSwic291cmNlLXR5cGUiOnttc2c6IkV4dHJhY3QgZnJvbSBtZXNzYWdlIix0b3BpYzoiRXh0cmFjdCBmcm9tIHRvcGljIixjb25zdDoiQ29uc3RhbnQiLGlkZW50aWZpZXI6IklkZW50aWZpZXIiLHBhdGg6IlBhdGgifSwid29ya2Vycy1zZXR0aW5ncyI6IldvcmtlcnMgc2V0dGluZ3MiLHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsZ2VuZXJhbDoiR2VuZXJhbCIsdGltZXNlcmllczoiVGltZSBzZXJpZXMiLGtleToiS2V5IixrZXlzOiJLZXlzIiwia2V5LXJlcXVpcmVkIjoiS2V5IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLWhvc3QiOiJQbGF0Zm9ybSBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBsYXRmb3JtIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIix0aW1lb3V0OiJUaW1lb3V0IChtcykiLCJ0aW1lb3V0LWVycm9yIjoiVGltZW91dCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsdHlwZToiVHlwZSIsInRvcGljLWZpbHRlciI6IlRvcGljIGZpbHRlciIsInRvcGljLXJlcXVpcmVkIjoiVG9waWMgZmlsdGVyIGlzIHJlcXVpcmVkLiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1jb25uZWN0aW9uIjoiVExTIENvbm5lY3Rpb24iLCJtYXN0ZXItY29ubmVjdGlvbnMiOiJNYXN0ZXIgQ29ubmVjdGlvbnMiLCJtZXRob2QtZmlsdGVyIjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1maWx0ZXItaGludCI6IlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgaW5jb21pbmcgUlBDIG1ldGhvZCBmcm9tIHBsYXRmb3JtLiIsIm1ldGhvZC1maWx0ZXItcmVxdWlyZWQiOiJNZXRob2QgZmlsdGVyIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIscW9zOnsiYXQtbW9zdC1vbmNlIjoiMCAtIEF0IG1vc3Qgb25jZSIsImF0LWxlYXN0LW9uY2UiOiIxIC0gQXQgbGVhc3Qgb25jZSIsImV4YWN0bHktb25jZSI6IjIgLSBFeGFjdGx5IG9uY2UifSwib2JqZWN0cy1jb3VudCI6Ik9iamVjdHMgY291bnQiLCJvYmplY3RzLWNvdW50LXJlcXVpcmVkIjoiT2JqZWN0cyBjb3VudCBpcyByZXF1aXJlZCIsIndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzIjoiV2FpdCBhZnRlciBmYWlsZWQgYXR0ZW1wdHMgKG1zKSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsdXNlcm5hbWU6IlVzZXJuYW1lIiwidXNlcm5hbWUtcmVxdWlyZWQiOiJVc2VybmFtZSBpcyByZXF1aXJlZC4iLCJ1bml0LWlkLXJlcXVpcmVkIjoiVW5pdCBJRCBpcyByZXF1aXJlZC4iLCJ3cml0ZS1jb2lsIjoiV3JpdGUgQ29pbCIsIndyaXRlLWNvaWxzIjoiV3JpdGUgQ29pbHMiLCJ3cml0ZS1yZWdpc3RlciI6IldyaXRlIFJlZ2lzdGVyIiwid3JpdGUtcmVnaXN0ZXJzIjoiV3JpdGUgUmVnaXN0ZXJzIixoaW50czp7Im1vZGJ1cy1tYXN0ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb25zIGZvciBjb25uZWN0aW5nIHRvIE1vZGJ1cyBzZXJ2ZXJzIGFuZCByZWFkaW5nIGRhdGEgZnJvbSB0aGVtLiIsIm1vZGJ1cy1zZXJ2ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yIHRoZSBNb2RidXMgc2VydmVyLCBzdG9yaW5nIGRhdGEgYW5kIHNlbmRpbmcgdXBkYXRlcyB0byB0aGUgcGxhdGZvcm0gd2hlbiBjaGFuZ2VzIG9jY3VyIG9yIGF0IGZpeGVkIGludGVydmFscy4iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBwbGF0Zm9ybSBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIHBsYXRmb3JtIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBwbGF0Zm9ybSBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBwbGF0Zm9ybSBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIHBsYXRmb3JtIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gcGxhdGZvcm0gc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIHRoZSBmb2xkZXIgdGhhdCB3aWxsIGNvbnRhaW4gZGF0YSAoUmVsYXRpdmUgb3IgQWJzb2x1dGUpIiwibG9nLWZvcm1hdCI6IkxvZyBtZXNzYWdlIGZvcm1hdCIsInJlbW90ZS1sb2ciOiJFbmFibGVzIHJlbW90ZSBsb2dnaW5nIGFuZCBsb2dzIHJlYWRpbmcgZnJvbSB0aGUgZ2F0ZXdheSIsImJhY2t1cC1jb3VudCI6IklmIGJhY2t1cCBjb3VudCBpcyA+IDAsIHdoZW4gYSByb2xsb3ZlciBpcyBkb25lLCBubyBtb3JlIHRoYW4gYmFja3VwIGNvdW50IGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkIixzdG9yYWdlOiJQcm92aWRlcyBjb25maWd1cmF0aW9uIGZvciBzYXZpbmcgaW5jb21pbmcgZGF0YSBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgcGxhdGZvcm0iLCJtYXgtZmlsZS1jb3VudCI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJOdW1iZXIgb2YgbWVzc2FnZXMgdG8gcmV0cmlldmUgZnJvbSB0aGUgc3RvcmFnZSBhbmQgc2VuZCB0byBwbGF0Zm9ybSIsIm1heC1yZWNvcmRzIjoiTWF4aW11bSBjb3VudCBvZiByZWNvcmRzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gb25lIGZpbGUiLCJyZWFkLXJlY29yZC1jb3VudCI6Ik51bWJlciBvZiBtZXNzYWdlcyB0byByZXRyaWV2ZSBmcm9tIHRoZSBzdG9yYWdlIGFuZCBzZW5kIHRvIHBsYXRmb3JtIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIG51bWJlciBvZiBkYXRhIGVudHJpZXMgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZGluZyB0byBwbGF0Zm9ybSIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgdGhlIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gbnVtYmVyIG9mIGRheXMgdGhhdCB0aGUgc3RvcmFnZSB3aWxsIHJldGFpbiBkYXRhIixjb21tYW5kczoiQ29tbWFuZHMgZm9yIGNvbGxlY3RpbmcgYWRkaXRpb25hbCBzdGF0aXN0aWMiLGF0dHJpYnV0ZToiU3RhdGlzdGljIHRlbGVtZXRyeSBrZXkiLHRpbWVvdXQ6IlRpbWVvdXQgZm9yIGNvbW1hbmQgZXhlY3V0aW5nIixjb21tYW5kOiJUaGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kIGV4ZWN1dGlvbiwgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGVsZW1ldHJ5IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiRW5hYmxlcyBtb25pdG9yIHRoZSBhY3Rpdml0eSBvZiBlYWNoIGNvbm5lY3RlZCBkZXZpY2UiLCJpbmFjdGl2aXR5LXRpbWVvdXQiOiJUaW1lIGFmdGVyIHdob3NlIHRoZSBnYXRld2F5IHdpbGwgZGlzY29ubmVjdCBkZXZpY2UiLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZGljaXR5IG9mIGRldmljZSBhY3Rpdml0eSBjaGVjayIsIm1pbmltYWwtcGFjay1kZWxheSI6IkRlbGF5IGJldHdlZW4gc2VuZGluZyBwYWNrcyBvZiBtZXNzYWdlcyAoRGVjcmVhc2luZyB0aGlzIHNldHRpbmcgcmVzdWx0cyBpbiBpbmNyZWFzZWQgQ1BVIHVzYWdlKSIscW9zOiJRdWFsaXR5IG9mIFNlcnZpY2UgaW4gTVFUVCBtZXNzYWdpbmcgKDAgLSBhdCBtb3N0IG9uY2UsIDEgLSBhdCBsZWFzdCBvbmNlKSIsInNlcnZlci1wb3J0IjoiTmV0d29yayBwb3J0IG9uIHdoaWNoIEdSUEMgc2VydmVyIHdpbGwgbGlzdGVuIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Ik1heGltdW0gdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGZvciBhIGtlZXBhbGl2ZSBwaW5nIHJlc3BvbnNlIGJlZm9yZSBjb25zaWRlcmluZyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMta2VlcC1hbGl2ZSI6IkR1cmF0aW9uIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgUlBDIGNhbGwuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6Ik1heGltdW0gbnVtYmVyIG9mIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHRoYXQgdGhlIHNlcnZlciBjYW4gc2VuZCB3aXRob3V0IHJlY2VpdmluZyBhbnkgZGF0YSBiZWZvcmUgaXQgY29uc2lkZXJzIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gZGF0YSBiZWluZyBzZW50IG9yIHJlY2VpdmVkLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiQWxsb3cgc2VydmVyIHRvIGtlZXAgdGhlIEdSUEMgY29ubmVjdGlvbiBhbGl2ZSBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSBSUEMgY2FsbHMuIiwicGF0aC1pbi1vcyI6IlBhdGggaW4gZ2F0ZXdheSBvcy4iLG1lbW9yeToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBpbi1tZW1vcnkgcXVldWUsIGl0IGlzIGEgZmFzdGVzdCBidXQgbm8gcGVyc2lzdGVuY2UgZ3VhcmFudGVlLiIsZmlsZToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHNlcGFyYXRlZCBmaWxlcyBhbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIixzcWxpdGU6IllvdXIgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBmaWxlIGJhc2VkIGRhdGFiYXNlLiBBbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIiwib3BjLXRpbWVvdXQiOiJUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgY29ubmVjdGluZyB0byBPUEMtVUEgc2VydmVyLiIsInNlY3VyaXR5LXBvbGljeSI6IlNlY3VyaXR5IFBvbGljeSBkZWZpbmVzIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHRvIGJlIGFwcGxpZWQuIiwic2Nhbi1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlc2NhbiB0aGUgc2VydmVyLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJQZXJpb2QgdG8gY2hlY2sgdGhlIHN1YnNjcmlwdGlvbnMgaW4gdGhlIE9QQy1VQSBzZXJ2ZXIuIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IklmIHRydWUgLSB0aGUgZ2F0ZXdheSB3aWxsIHN1YnNjcmliZSB0byBpbnRlcmVzdGluZyBub2RlcyBhbmQgd2FpdCBmb3IgZGF0YSB1cGRhdGUgYW5kIGlmIGZhbHNlIC0gdGhlIGdhdGV3YXkgd2lsbCByZXNjYW4gT1BDLVVBIHNlcnZlciBldmVyeSBzY2FuUGVyaW9kSW5NaWxsaXMuIiwic2hvdy1tYXAiOiJTaG93IG5vZGVzIG9uIHNjYW5uaW5nLiIsIm1ldGhvZC1uYW1lIjoiTmFtZSBvZiBtZXRob2Qgb24gT1BDLVVBIHNlcnZlci4iLGFyZ3VtZW50czoiQXJndW1lbnRzIGZvciB0aGUgbWV0aG9kICh3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGFyZ3VtZW50cyBmcm9tIHRoZSBSUEMgcmVxdWVzdCkuIiwibWluLXBhY2stc2l6ZS10by1zZW5kIjoiTWluaW11bSBwYWNrYWdlIHNpemUgZm9yIHNlbmRpbmcuIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcyI6Ik1heGltdW0gcGFja2FnZSBzaXplIGluIGJ5dGVzIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlYWQgZGF0YSBmcm9tIG5vZGVzLiIsbW9kYnVzOnsiZnJhbWVyLXR5cGUiOiJUeXBlIG9mIGEgZnJhbWVyIChTb2NrZXQsIFJUVSwgb3IgQVNDSUkpLCBpZiBuZWVkZWQuIixob3N0OiJIb3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIE1vZGJ1cyBzZXJ2ZXIuIixwb3J0OiJNb2RidXMgc2VydmVyIHBvcnQgZm9yIGNvbm5lY3Rpb24uIiwidW5pdC1pZCI6Ik1vZGJ1cyBzbGF2ZSBJRC4iLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKGluIHNlY29uZHMpIGZvciB0aGUgTW9kYnVzIHNlcnZlci4iLCJieXRlLW9yZGVyIjoiQnl0ZSBvcmRlciBmb3IgcmVhZGluZyBkYXRhLiIsIndvcmQtb3JkZXIiOiJXb3JkIG9yZGVyIHdoZW4gcmVhZGluZyBtdWx0aXBsZSByZWdpc3RlcnMuIixyZXRyaWVzOiJSZXRyeWluZyBkYXRhIHRyYW5zbWlzc2lvbiB0byB0aGUgbWFzdGVyLiBBY2NlcHRhYmxlIHZhbHVlczogdHJ1ZSBvciBmYWxzZS4iLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgdGhlIGRhdGEgaXMgZW1wdHkuIiwicmV0cmllcy1vbi1pbnZhbGlkIjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgaXQgZmFpbHMuIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIGNoZWNrIGF0dHJpYnV0ZXMgYW5kIHRlbGVtZXRyeSBvbiB0aGUgc2xhdmUuIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgbWFzdGVyLiIsImNvbm5lY3QtYXR0ZW1wdC1jb3VudCI6IlRoZSBudW1iZXIgb2YgY29ubmVjdGlvbiBhdHRlbXB0cyBtYWRlIHRocm91Z2ggdGhlIGdhdGV3YXkuIiwid2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHMiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIGRhdGEgdG8gdGhlIG1hc3Rlci4iLCJzZXJpYWwtcG9ydCI6IlNlcmlhbCBwb3J0IGZvciBjb25uZWN0aW9uLiIsYmF1ZHJhdGU6IkJhdWQgcmF0ZSBmb3IgdGhlIHNlcmlhbCBkZXZpY2UuIixzdG9wYml0czoiVGhlIG51bWJlciBvZiBzdG9wIGJpdHMgc2VudCBhZnRlciBlYWNoIGNoYXJhY3RlciBpbiBhIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgYnl0ZS4iLGJ5dGVzaXplOiJUaGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBieXRlIG9mIHNlcmlhbCBkYXRhLiBUaGlzIGNhbiBiZSBvbmUgb2YgNSwgNiwgNywgb3IgOC4iLHBhcml0eToiVGhlIHR5cGUgb2YgY2hlY2tzdW0gdXNlZCB0byB2ZXJpZnkgZGF0YSBpbnRlZ3JpdHkuIE9wdGlvbnM6IChFKXZlbiwgKE8pZGQsIChOKW9uZS4iLHN0cmljdDoiVXNlIGludGVyLWNoYXJhY3RlciB0aW1lb3V0IGZvciBiYXVkcmF0ZXMg4omkIDE5MjAwLiIsIm9iamVjdHMtY291bnQiOiJEZXBlbmRzIG9uIHRoZSBzZWxlY3RlZCB0eXBlLiIsYWRkcmVzczoiUmVnaXN0ZXIgYWRkcmVzcyB0byB2ZXJpZnkuIixrZXk6IktleSB0byBiZSB1c2VkIGFzIHRoZSBhdHRyaWJ1dGUga2V5IGZvciB0aGUgcGxhdGZvcm0gaW5zdGFuY2UuIiwiZGF0YS1rZXlzIjoiRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZnVuY3Rpb24gY29kZXMgYW5kIGRhdGEgdHlwZXMgY2xpY2sgb24gaGVscCBpY29uIixtb2RpZmllcjoiVGhlIHJldHJpZXZlZCB2YWx1ZSB3aWxsIGJlIGFkanVzdGVkIChieSBtdWx0aXBseWluZyBvciBkaXZpZGluZyBpdCkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtb2RpZmllciB2YWx1ZS4ifX19fSxSbz17ImFkZC1lbnRyeSI6Itil2LbYp9mB2Kkg2KrZg9mI2YrZhiIsYWR2YW5jZWQ6ItmF2KrZgtiv2YUiLCJjaGVja2luZy1kZXZpY2UtYWN0aXZpdHkiOiLZgdit2LUg2YbYtNin2Lcg2KfZhNis2YfYp9iyIixjb21tYW5kOiLYo9mI2KfZhdixIERvY2tlciIsImNvbW1hbmQtY29waWVkLW1lc3NhZ2UiOiLYqtmFINmG2LPYriDYo9mF2LEgRG9ja2VyINil2YTZiSDYp9mE2K3Yp9mB2LjYqSIsY29uZmlndXJhdGlvbjoi2KfZhNiq2YPZiNmK2YYiLCJjb25uZWN0b3ItYWRkIjoi2KXYttin2YHYqSDZhdmI2LXZhCDYrNiv2YrYryIsImNvbm5lY3Rvci1lbmFibGVkIjoi2KrZhdmD2YrZhiDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZSI6Itin2LPZhSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLCJjb25uZWN0b3ItdHlwZSI6ItmG2YjYuSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6ItmG2YjYuSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLGNvbm5lY3RvcnM6Itin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLWNvbmZpZyI6Itiq2YPZiNmK2YbYp9iqINin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLXRhYmxlLWVuYWJsZWQiOiLZhdmF2YPZkdmGIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi2KfZhNin2LPZhSIsImNvbm5lY3RvcnMtdGFibGUtdHlwZSI6Itin2YTZhtmI2LkiLCJjb25uZWN0b3JzLXRhYmxlLXN0YXR1cyI6Itin2YTYrdin2YTYqSIsImNvbm5lY3RvcnMtdGFibGUtYWN0aW9ucyI6Itin2YTYpdis2LHYp9ih2KfYqiIsImNvbm5lY3RvcnMtdGFibGUta2V5Ijoi2KfZhNmF2YHYqtin2K0iLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoi2KfZhNmB2KbYqSIsInJwYy1jb21tYW5kLXNlbmQiOiLYpdix2LPYp9mEIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi2KfZhNin2LPYqtis2KfYqNipIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLYqtit2LHZitixINin2YTZhdi52YTZhdin2KoiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLYqtmD2YjZitmGINi52KfZhSIsImRvY2tlci1sYWJlbCI6Itin2LPYqtiu2K/ZhSDYp9mE2KrYudmE2YrZhdin2Kog2KfZhNiq2KfZhNmK2Kkg2YTYqti02LrZitmEIElvVCBHYXRld2F5INmB2YogRG9ja2VyIGNvbXBvc2Ug2YXYuSDYqNmK2KfZhtin2Kog2KfYudiq2YXYp9ivINmE2YTYrNmH2KfYsiDYp9mE2YXYrdiv2K8iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi2KfYs9iq2K7Yr9mFINin2YTYqti52YTZitmF2KfYqiDZhNiq2YbYstmK2YQg2YjYqtir2KjZitiqINmI2KXYudiv2KfYryBkb2NrZXIgY29tcG9zZSIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLYqtmG2LLZitmEIGRvY2tlci1jb21wb3NlLnltbCDZhNio2YjYp9io2KrZgyIsImxhdW5jaC1nYXRld2F5Ijoi2KrYtNi62YrZhCDYp9mE2KjZiNin2KjYqSIsImxhdW5jaC1kb2NrZXItY29tcG9zZSI6Itio2K/YoSDYqti02LrZitmEINin2YTYqNmI2KfYqNipINio2KfYs9iq2K7Yr9in2YUg2KfZhNij2YXYsSDYp9mE2KrYp9mE2Yog2YHZiiDYp9mE2LfYsdmB2YrYqSDZhdmGINin2YTZhdis2YTYryDYp9mE2LDZiiDZitit2KrZiNmKINi52YTZiSDZhdmE2YEgZG9ja2VyLWNvbXBvc2UueW1sIiwiY3JlYXRlLW5ldy1nYXRld2F5Ijoi2KXZhti02KfYoSDYqNmI2KfYqNipINis2K/Zitiv2KkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6ItmH2YQg2KPZhtiqINmF2KrYo9mD2K8g2KPZhtmDINiq2LHZitivINil2YbYtNin2KEg2KjZiNin2KjYqSDYrNiv2YrYr9ipINio2KfYs9mFOiAne3tnYXRld2F5TmFtZX19J9ifIiwiY3JlYXRlZC10aW1lIjoi2YjZgtiqINin2YTYpdmG2LTYp9ihIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6Itiz2YrYqtmFINit2LDZgSDYp9mE2KrZg9mI2YrZhtin2KoiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6ItmK2YXZg9mGINiq2LnYt9mK2YQg2KfZhNiq2YPZiNmK2YYg2LnZhiDYqNmP2LnYryDZgdmC2Lcg2KXYsNinINmD2KfZhiDZh9mG2KfZgyDZiNi12YjZhCDYrNiz2K/ZiiDYpdmE2Ykg2KfZhNio2YjYp9io2KkuINiz2KrYqtmFINit2LDZgSDYrNmF2YrYuSDYp9mE2KrZg9mI2YrZhtin2Kog2KfZhNiz2KfYqNmC2KkuPGJyPjxicj4gXG4g2YTYqti52LfZitmEINin2YTYqtmD2YjZitmG2Iwg2KPYr9iu2YQg2KfYs9mFINin2YTYqNmI2KfYqNipINij2K/Zhtin2YciLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQiOiLYp9iz2YUg2KfZhNio2YjYp9io2KkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNio2YjYp9io2Kkg2KXZhNiy2KfZhdmKIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLYpdmK2YLYp9mBINin2YTYqti02LrZitmEIixkZWxldGU6Itit2LDZgSDYp9mE2KrZg9mI2YrZhiIsImRvd25sb2FkLXRpcCI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZHJvcC1maWxlIjoi2KPZgdmE2YIg2KfZhNmF2YTZgSDZh9mG2Kcg2KPZiCIsZ2F0ZXdheToi2KfZhNio2YjYp9io2KkiLCJnYXRld2F5LWV4aXN0cyI6Itin2YTYrNmH2KfYsiDYqNmG2YHYsyDYp9mE2KfYs9mFINmF2YjYrNmI2K8g2KjYp9mE2YHYudmELiIsImdhdGV3YXktbmFtZSI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSDZhdi32YTZiNioLiIsImdhdGV3YXktc2F2ZWQiOiLYqtmFINit2YHYuCDYqtmD2YjZitmGINin2YTYqNmI2KfYqNipINio2YbYrNin2K0uIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqNipIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi2YXZh9mE2Kkg2KfZhNio2YLYp9ihINi52YTZiSDZgtmK2K8g2KfZhNit2YrYp9ipINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6ItmF2YfZhNipINin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K3YqSIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqCIsImdycGMta2VlcC1hbGl2ZS1taW4iOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINij2YLZhCDZhdmGIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDZhdi32YTZiNioIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmE2YjZgtiqINio2YrZhiDYp9mE2KjZitmG2LrYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2KogKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNio2YrZhti62KfYqiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQgKNio2KfZhNir2YjYp9mG2YopIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQg2YXYt9mE2YjYqNipIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiLZgdiq2LHYqSDZgdit2LUg2KfZhNiu2YXZiNmEINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoi2YHYqtix2Kkg2YHYrdi1INin2YTYrtmF2YjZhCDYutmK2LEg2LXYp9mE2K3YqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEICjYqNin2YTYq9mI2KfZhtmKKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEINmF2LfZhNmI2KjYqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6ItmB2KrYsdipINin2YTYrtmF2YjZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiLZgdiq2LHYqSDYp9mE2K7ZhdmI2YQg2LrZitixINi12KfZhNit2KkiLCJqc29uLXBhcnNlIjoiSlNPTiDYutmK2LEg2LXYp9mE2K0uIiwianNvbi1yZXF1aXJlZCI6Itin2YTYrdmC2YQg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINmB2KfYsdi62YvYpy4iLGxvZ3M6e2xvZ3M6Itin2YTYs9is2YTYp9iqIixkYXlzOiLYo9mK2KfZhSIsaG91cnM6Itiz2KfYudin2KoiLG1pbnV0ZXM6Itiv2YLYp9im2YIiLHNlY29uZHM6Itir2YjYp9mG2YoiLCJkYXRlLWZvcm1hdCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4g2YXYt9mE2YjYqCIsImxvZy1mb3JtYXQiOiLYqtmG2LPZitmCINin2YTYs9is2YQiLCJsb2ctdHlwZSI6ItmG2YjYuSDYp9mE2LPYrNmEIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiz2KzZhCDZhdi32YTZiNioIixyZW1vdGU6Itin2YTYqtiz2KzZitmEINi52YYg2KjZj9i52K8iLCJyZW1vdGUtbG9ncyI6Itin2YTYs9is2YTYp9iqINi52YYg2KjZj9i52K8iLGxvY2FsOiLYp9mE2KrYs9is2YrZhCDYp9mE2YXYrdmE2YoiLGxldmVsOiLZhdiz2KrZiNmJINin2YTYs9is2YQiLCJmaWxlLXBhdGgiOiLZhdiz2KfYsSDYp9mE2YXZhNmBIiwiZmlsZS1wYXRoLXJlcXVpcmVkIjoi2YXYs9in2LEg2KfZhNmF2YTZgSDZhdi32YTZiNioIiwic2F2aW5nLXBlcmlvZCI6ItmB2KrYsdipINit2YHYuCDYp9mE2LPYrNmEIiwic2F2aW5nLXBlcmlvZC1taW4iOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhdi32YTZiNio2KkiLCJiYWNrdXAtY291bnQiOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSIsImJhY2t1cC1jb3VudC1taW4iOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDZhNinINmK2YXZg9mGINij2YYg2YrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6Iti52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipINmF2LfZhNmI2KgifSwibWluLXBhY2stc2VuZC1kZWxheSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2YXYt9mE2YjYqCIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoi2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2KPZgtmEINmF2YYgMCIsIm5vLWNvbm5lY3RvcnMiOiLZhNinINiq2YjYrNivINmF2YjYtdmE2KfYqiIsIm5vLWRhdGEiOiLZhNinINiq2YjYrNivINiq2YPZiNmK2YbYp9iqIiwibm8tZ2F0ZXdheS1mb3VuZCI6ItmE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KjZiNin2KjYqS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiJ3t7aXRlbX19JyDYutmK2LEg2YXZiNis2YjYry4iLCJwYXRoLWxvZ3MiOiLZhdiz2KfYsSDYpdmE2Ykg2YXZhNmB2KfYqiDYp9mE2LPYrNmEIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi2KfZhNmF2LPYp9ixINmF2LfZhNmI2KguIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2KjZgtin2KEg2LnZhNmJINin2YTYrdmK2KfYqSDZitiz2YXYrSDYqNiv2YjZhiDZhdmD2KfZhNmF2KfYqiIscmVtb3RlOiLYp9mE2KrZg9mI2YrZhiDYudmGINio2Y/YudivIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiLZhdiz2KrZiNmJINin2YTYqtiz2KzZitmEIiwicmVtb3ZlLWVudHJ5Ijoi2KXYstin2YTYqSDYp9mE2KrZg9mI2YrZhiIsInJlbW90ZS1zaGVsbCI6ItmC2LTYsdipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Itin2YTYqtmD2YjZitmGINi52YYg2KjZj9i52K8iLG90aGVyOiLYotiu2LEiLCJzYXZlLXRpcCI6Itit2YHYuCDZhdmE2YEg2KfZhNiq2YPZiNmK2YYiLCJzZWN1cml0eS10eXBlIjoi2YbZiNi5INin2YTYo9mF2KfZhiIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Itix2YXYsiDYp9mE2YjYtdmI2YQiLCJ1c2VybmFtZS1wYXNzd29yZCI6Itin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINmI2YPZhNmF2Kkg2KfZhNmF2LHZiNixIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDYsdmF2LIg2KfZhNmI2LXZiNmEIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsg2KfZhNmF2YHYqtin2K0g2KfZhNiu2KfYtSJ9LCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYrtin2K/ZhSIsc3RhdGlzdGljczp7c3RhdGlzdGljOiLYpdit2LXYp9im2YrYqSIsc3RhdGlzdGljczoi2KfZhNil2K3Ytdin2KbZitin2KoiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLZhNinINiq2KrZiNmB2LEg2KXYrdi12KfYptmK2KfYqiIsY29tbWFuZHM6Itin2YTYo9mI2KfZhdixIiwic2VuZC1wZXJpb2QiOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqICjYqNin2YTYq9mI2KfZhtmKKSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDZhdi32YTZiNio2KkiLCJzZW5kLXBlcmlvZC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDYo9mC2YQg2YXZhiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqINi62YrYsSDYtdin2YTYrdipIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiAo2KjYp9mE2KvZiNin2YbZiikiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINmF2LfZhNmI2KjYqSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiDYo9mC2YQg2YXZhiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINi62YrYsSDYtdin2YTYrdipIixhZGQ6Itil2LbYp9mB2Kkg2KPZhdixIix0aW1lb3V0OiLYp9mE2YXZh9mE2KkiLCJ0aW1lb3V0LW1zIjoi2KfZhNmF2YfZhNipICjYqNin2YTZhdmE2YTZiiDYq9in2YbZitipKSIsInRpbWVvdXQtcmVxdWlyZWQiOiLYp9mE2YXZh9mE2Kkg2YXYt9mE2YjYqNipIiwidGltZW91dC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KfZhNmF2YfZhNipINij2YLZhCDZhdmGIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiLYp9mE2YXZh9mE2Kkg2LrZitixINi12KfZhNit2KkiLCJhdHRyaWJ1dGUtbmFtZSI6Itin2LPZhSDYp9mE2LPZhdipIiwiYXR0cmlidXRlLW5hbWUtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNiz2YXYqSDZhdi32YTZiNioIixjb21tYW5kOiLYp9mE2KPZhdixIiwiY29tbWFuZC1yZXF1aXJlZCI6Itin2YTYo9mF2LEg2YXYt9mE2YjYqCIsImNvbW1hbmQtcGF0dGVybiI6Itin2YTYo9mF2LEg2LrZitixINi12KfZhNitIixyZW1vdmU6Itil2LLYp9mE2Kkg2KfZhNij2YXYsSJ9LHN0b3JhZ2U6Itin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi2KfZhNiz2KzZhNin2Kog2KfZhNmC2LXZiNmJINmB2Yog2KfZhNmF2YTZgSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTZhdmE2YHYp9iqIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmH2YggMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi2KfZhNi52K/YryDYutmK2LEg2LXYp9mE2K0uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLYp9mE2LnYr9ivINmF2LfZhNmI2KguIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Itin2YTYs9is2YTYp9iqINin2YTZgti12YjZiSDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLYp9mE2LPYrNmE2KfYqiDYp9mE2YLYtdmI2Ykg2YXYt9mE2YjYqNipLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZhdi32YTZiNioLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50Ijoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINmC2LHYp9ih2Kkg2KfZhNiz2KzZhNin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNi52K/YryDYp9mE2LPYrNmE2KfYqiDZh9mIIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi2LnYr9ivINin2YTZgtix2KfYodipINin2YTZgti12YjZiSDZhdi32YTZiNioLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6ItmF2LPYp9ixINmF2KzZhNivINin2YTYqNmK2KfZhtin2KoiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDZhdis2YTYryDYp9mE2KjZitin2YbYp9iqINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYWNrLXNpemUiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYrdis2YUg2K3YstmF2Kkg2KfZhNit2K/YqyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZh9mIIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi2KfZhNit2KzZhSDYp9mE2KPZgti12Ykg2YTYrdiy2YXYqSDYp9mE2K3Yr9irINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYXRoIjoi2YXYs9in2LEg2KfZhNiq2K7YstmK2YYiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDYp9mE2KrYrtiy2YrZhiDZhdi32YTZiNioLiIsInN0b3JhZ2UtdHlwZSI6ItmG2YjYuSDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2YXZhNmB2KfYqiIsIm1lbW9yeS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2LDYp9mD2LHYqSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoi2KvZitmG2LrYstio2YjYsdivIixnZW5lcmFsOiLYudin2YUiLCJ0aGluZ3Nib2FyZC1ob3N0Ijoi2YXYttmK2YEg2KvZitmG2LrYstio2YjYsdivIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Itin2YTZhdi22YrZgSDZhdi32YTZiNioLiIsInRoaW5nc2JvYXJkLXBvcnQiOiLZhdmG2YHYsCDYq9mK2YbYutiy2KjZiNix2K8iLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6Itin2YTZhdmG2YHYsCDYutmK2LEg2LXYp9mE2K0uIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Itin2YTZhdmG2YHYsCDZhdi32YTZiNioLiIsdGlkeToi2KrYsdiq2YrYqCIsInRpZHktdGlwIjoi2KrYsdiq2YrYqCDYqtmD2YjZitmGIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiLYqtmD2YjZitmGINmF2YjYtdmEIHt7dHlwZU5hbWV9fSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoi2KfZhNmF2LPYp9ixINil2YTZiSDYtNmH2KfYr9ipIENBINi52YTZiSDYp9mE2KjZiNin2KjYqSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2LTZh9in2K/YqSDYp9mE2LnZhdmK2YQg2LnZhNmJINin2YTYqNmI2KfYqNipIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi2YrYrNioINiq2K3Yr9mK2K8g2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoi2KfZhNix2YLZhSDYutmK2LEg2LXYp9mE2K0uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwg2KfZhNix2LPYp9im2YQg2KjYp9mE2KPZitin2YUiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6ItmK2KzYqCDYqtit2K/ZitivIFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYo9mK2KfZhS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXBhdHRlcm4iOiLYp9mE2LHZgtmFINi62YrYsSDYtdin2YTYrS4iLCJtcXR0LXFvcyI6Itis2YjYr9ipINin2YTYrtiv2YXYqSAoUW9TKSIsIm1xdHQtcW9zLXJlcXVpcmVkIjoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipIChRb1MpINmF2LfZhNmI2KjYqSIsIm1xdHQtcW9zLXJhbmdlIjoi2KrYqtix2KfZiNitINmC2YrZhSDYrNmI2K/YqSDYp9mE2K7Yr9mF2KkgKFFvUykg2YXZhiAwINil2YTZiSAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdmB2KrYp9itINin2YTYrtin2LUg2LnZhNmJINin2YTYqNmI2KfYqNipIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLYqtio2K/ZitmEINmI2LbYuSDZhdmE2KEg2KfZhNi02KfYtNipIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiLYqtmD2YjZitmGIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6Itil2LbYp9mB2Kkv2KrYrdiv2YrYqyDYqtmD2YjZitmGIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2YPZiNmK2YYg2YjYpdiv2KfYsdipINin2YTYqNmI2KfYqNipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtc2hlbGwiOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2K3Zg9mFINin2YTYqNi52YrYryDZgdmKINmG2LjYp9mFINin2YTYqti02LrZitmEINmF2Lkg2KfZhNio2YjYp9io2Kkg2YXZhiDYudmG2LXYsSDZiNin2KzZh9ipINin2YTZhdiz2KrYrtiv2YUg2YLYtNix2Kkg2LnZhiDYqNmP2LnYryIsaG9zdDoi2KfYs9mFINin2YTZhdi22YrZgSDYo9mIINi52YbZiNin2YYgSVAg2YTYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLHBvcnQ6ItmF2YbZgdiwINiu2K/ZhdipIE1RVFQg2LnZhNmJINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIsdG9rZW46Itix2YXYsiDYp9mE2YjYtdmI2YQg2YTZhNio2YjYp9io2Kkg2YXZhiDYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLCJjbGllbnQtaWQiOiLZhdi52LHZgSDYudmF2YrZhCBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIix1c2VybmFtZToi2KfYs9mFINin2YTZhdiz2KrYrtiv2YUgTVFUVCDZhNmE2KjZiNin2KjYqSDZhdmGINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIscGFzc3dvcmQ6ItmD2YTZhdipINin2YTZhdix2YjYsSBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIiwiY2EtY2VydCI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2YXZhNmBINi02YfYp9iv2KkgQ0EiLCJkYXRlLWZvcm0iOiLYqtmG2LPZitmCINin2YTYqtin2LHZitiuINmB2Yog2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwiZGF0YS1mb2xkZXIiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdis2YTYryDYp9mE2LDZiiDYs9mK2K3YqtmI2Yog2LnZhNmJINin2YTYqNmK2KfZhtin2KogKNmG2LPYqNmKINij2Ygg2YXYt9mE2YIpIiwibG9nLWZvcm1hdCI6Itiq2YbYs9mK2YIg2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwicmVtb3RlLWxvZyI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDYp9mE2KrYs9is2YrZhCDYp9mE2KjYudmK2K8g2YjZgtix2KfYodipINin2YTYs9is2YTYp9iqINmF2YYg2KfZhNio2YjYp9io2KkiLCJiYWNrdXAtY291bnQiOiLYpdiw2Kcg2YPYp9mGINi52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipID4gMNiMINi52YbYryDYudmF2YTZitipINiq2K/ZiNmK2LHYjCDZhNinINmK2KrZhSDYp9mE2KfYrdiq2YHYp9i4INio2KPZg9ir2LEg2YXZhiDYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDYp9mE2YXYrdiv2K/YqSAtINmK2KrZhSDYrdiw2YEg2KfZhNij2YLYr9mFIixzdG9yYWdlOiLZitmI2YHYsSDYqtmD2YjZitmG2YvYpyDZhNit2YHYuCDYp9mE2KjZitin2YbYp9iqINin2YTZiNin2LHYr9ipINmC2KjZhCDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KfZhNmF2YbYtdipIiwibWF4LWZpbGUtY291bnQiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNi52K/YryDYp9mE2YXZhNmB2KfYqiDYp9mE2KrZiiDYs9mK2KrZhSDYpdmG2LTYp9ik2YfYpyIsIm1heC1yZWFkLWNvdW50Ijoi2LnYr9ivINin2YTYsdiz2KfYptmEINmE2YTYrdi12YjZhCDYudmE2YrZh9inINmF2YYg2KfZhNiq2K7YstmK2YYg2YjYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KvZitmG2LrYstio2YjYsdivIiwibWF4LXJlY29yZHMiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNmE2LPYrNmE2KfYqiDYp9mE2KrZiiDYs9iq2K7YstmGINmB2Yog2YXZhNmBINmI2KfYrdivIiwicmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2KfZhNix2LPYp9im2YQg2YTZhNit2LXZiNmEINi52YTZitmH2Kcg2YXZhiDYp9mE2KrYrtiy2YrZhiDZiNil2LHYs9in2YTZh9inINil2YTZiSDYq9mK2YbYutiy2KjZiNix2K8iLCJtYXgtcmVjb3Jkcy1jb3VudCI6Itin2YTYudiv2K8g2KfZhNij2YLYtdmJINmE2YTYqNmK2KfZhtin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiDZgtio2YQg2KXYsdiz2KfZhNmH2Kcg2KXZhNmJINir2YrZhti62LLYqNmI2LHYryIsInR0bC1jaGVjay1ob3VyIjoi2YPZhSDZhdix2Kkg2LPZitiq2K3ZgtmCINin2YTYqNmI2KfYqNipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDYp9mE2YLYr9mK2YXYqSIsInR0bC1tZXNzYWdlcy1kYXkiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNij2YrYp9mFINin2YTYqtmKINiz2KrYrdiq2YHYuCDZgdmK2YfYpyDYp9mE2KrYrtiy2YrZhiDYqNin2YTYqNmK2KfZhtin2KoiLGNvbW1hbmRzOiLYp9mE2KPZiNin2YXYsSDZhNis2YXYuSDYp9mE2KXYrdi12KfYptmK2KfYqiDYp9mE2KXYttin2YHZitipIixhdHRyaWJ1dGU6ItmF2YHYqtin2K0g2KrZhNmC2Yog2KfZhNil2K3Ytdin2KbZitin2KoiLHRpbWVvdXQ6ItmF2YfZhNipINiy2YXZhtmK2Kkg2YTYqtmG2YHZitiwINin2YTYo9mF2LEiLGNvbW1hbmQ6Itiz2YrYqtmFINin2LPYqtiu2K/Yp9mFINmG2KrZitis2Kkg2KrZhtmB2YrYsCDYp9mE2KPZhdixINmD2YLZitmF2Kkg2YTYqtmE2YLZiiDYp9mE2KXYrdi12KfYptmK2KfYqiIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDZhdix2KfZgtio2Kkg2YbYtNin2Lcg2YPZhCDYrNmH2KfYsiDZhdiq2LXZhCIsImluYWN0aXZpdHktdGltZW91dCI6Itin2YTZiNmC2Kog2KjYudivINin2YTYsNmKINiz2KrZgdi12YQg2KfZhNio2YjYp9io2Kkg2KfZhNis2YfYp9iyIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLYqtmD2LHYp9ixINmB2K3YtSDZhti02KfYtyDYp9mE2KzZh9in2LIiLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLYp9mE2KrYo9iu2YrYsSDYqNmK2YYg2KXYsdiz2KfZhCDYrdiy2YUg2KfZhNix2LPYp9im2YQgKNmK2KTYr9mKINiq2YLZhNmK2YQg2YfYsNinINin2YTYpdi52K/Yp9ivINil2YTZiSDYstmK2KfYr9ipINin2LPYqtiu2K/Yp9mFINmI2K3Yr9ipINin2YTZhdi52KfZhNis2Kkg2KfZhNmF2LHZg9iy2YrYqSkiLHFvczoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipINmB2Yog2LHYs9in2KbZhCBNUVRUICgwIC0g2LnZhNmJINin2YTYo9mD2KvYsSDZhdix2Kkg2YjYp9it2K/YqdiMIDEgLSDYudmE2Ykg2KfZhNij2YLZhCDZhdix2Kkg2YjYp9it2K/YqSkiLCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYtNio2YPYqSDYp9mE2LDZiiDYs9mK2LPYqtmF2Lkg2YHZitmHINiu2KfYr9mFIEdSUEMg2YTZhNin2LPYqtmB2LPYp9ix2KfYqiDYp9mE2YjYp9ix2K/YqS4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNmE2YjZgtiqINin2YTYsNmKINmK2KzYqCDYo9mGINmK2YbYqti42LHZhyDYp9mE2K7Yp9iv2YUg2YTYp9iz2KrYrNin2KjYqSDYsdiz2KfZhNipINin2YTYrdmB2KfYuCDYudmE2Ykg2KfZhNin2KrYtdin2YQg2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTZhdiv2Kkg2KjZitmGINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTZhdiq2LnYp9mC2KjYqSDYudmG2K8g2LnYr9mFINmI2KzZiNivINin2LPYqtiv2LnYp9ihIFJQQyDZhti02LcuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTYqtmKINmK2YXZg9mGINmE2YTYrtin2K/ZhSDYpdix2LPYp9mE2YfYpyDYr9mI2YYg2KrZhNmC2Yog2KPZiiDYqNmK2KfZhtin2Kog2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINi52YbYryDYudiv2YUg2KXYsdiz2KfZhCDYo9mIINin2LPYqtmE2KfZhSDYqNmK2KfZhtin2KouIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2LPZhdin2K0g2YTZhNiu2KfYr9mFINio2KXYqNmC2KfYoSDYp9iq2LXYp9mEIEdSUEMg2K3ZitmL2Kcg2K3YqtmJINi52YbYr9mF2Kcg2YTYpyDYqtmD2YjZhiDZh9mG2KfZgyDYp9iz2KrYr9i52KfYodin2KogUlBDINmG2LTYt9ipLiJ9fSxWbz17ImFkZC1lbnRyeSI6IkFmZWdpciBjb25maWd1cmFjacOzIiwiY29ubmVjdG9yLWFkZCI6IkFmZWdpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJDYWwgbm9tIGNvbmVjdG9yLiIsImNvbm5lY3Rvci10eXBlIjoiVGlwdXMgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNhbCB0aXB1cyBjb25lY3Rvci4iLGNvbm5lY3RvcnM6IkNvbmZpZ3VyYWNpw7MgZGUgY29uZWN0b3JzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXIgdW4gZ2F0ZXdheSBub3UiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkNyZWFyIHVuIG5vdSBnYXRld2F5IGFtYiBlbCBub206ICd7e2dhdGV3YXlOYW1lfX0nPyIsZGVsZXRlOiJFc2JvcnJhciBjb25maWd1cmFjacOzIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FycmVnYXIgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkphIGV4aXN0ZWl4IHVuIGRpc3Bvc2l0aXUgYW1iIGVsIG1hdGVpeCBub20uIiwiZ2F0ZXdheS1uYW1lIjoiTm9tIGRlIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJDYWwgdW4gbm9tIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7MgZGUgZ2F0ZXdheSBncmF2YWRhIHNhdGlzZmFjdMOycmlhbWVudC4iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6BsaWQuIiwianNvbi1yZXF1aXJlZCI6IkVsIGNhbXAgbm8gcG90IHNlciBidWl0LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBoaSBoYSBjb25lY3RvcnMiLCJuby1kYXRhIjoiTm8gaGkgaGEgY29uZmlndXJhY2lvbnMiLCJuby1nYXRld2F5LWZvdW5kIjoiTm8gcydoYSB0cm9iYXQgY2FwIGdhdGV3YXkuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vIHRyb2JhdC4iLCJwYXRoLWxvZ3MiOiJSdXRhIGFscyBmaXR4ZXJzIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IkNhbCBydXRhLiIscmVtb3RlOiJDb25maWd1cmFjacOzIHJlbW90YSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTml2ZWwgZGUgbG9nZ2luZyIsInJlbW92ZS1lbnRyeSI6IkVzYm9ycmFyIGNvbmZpZ3VyYWNpw7MiLCJzYXZlLXRpcCI6IkdyYXZhciBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIsInNlY3VyaXR5LXR5cGUiOiJUaXB1cyBkZSBzZWd1cmV0YXQiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkJ2FjY8OpcyIsdGxzOiJUTFMifSxzdG9yYWdlOiJHcmFiYWNpw7MiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJOw7ptZXJvIG3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZml0eGVyIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoHhpbSBkZSBmaXR4ZXJzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiRWwgbsO6bWVybyBtw61uaW0gw6lzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiQ2FsIG7Dum1lcm8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZWwgbWFnYXR6ZW0iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltIMOpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1pZGEgbcOgeGltIGRlIGVzZGV2ZW5pbWVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbSDDqXMgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6BsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhdGgiOiJSdXRhIGRlIG1hZ2F0emVtIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiQ2FsIHJ1dGEgZGUgbWFnYXR6ZW0uIiwic3RvcmFnZS10eXBlIjoiVGlwdXMgZGUgbWFnYXR6ZW0iLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik1hZ2F0emVtIGZpdHhlciIsIm1lbW9yeS1zdG9yYWdlIjoiTWFnYXR6ZW0gZW4gbWVtb3JpYSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IkNhbCBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQb3J0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJFbCBwb3J0IG3DoHhpbSDDqXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJFbCBwb3J0IG3DrW5pbSDDqXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQb3J0IG5vIHbDoGxpZC4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiQ2FsIHBvcnQuIix0aWR5OiJFbmRyZcOnYXQiLCJ0aWR5LXRpcCI6IkVuZHJlw6dhdCBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDsyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlJ1dGEgYWwgY2VydGlmaWNhdCBDQSBhbCBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUnV0YSBhbCBjZXJ0aWZpY2F0IGNsaWVudCBhbCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJSdXRhIGEgbGEgY2xhdSBwcml2YWRhIGFsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7MgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWZlZ2lyL2FjdHVhbGl6YXIgY29uZmlndXJhY2nDsyBKU09OIn0sQm89eyJhZGQtZW50cnkiOiJQxZlpZGF0IGtvbmZpZ3VyYWNpIiwiY29ubmVjdG9yLWFkZCI6IlDFmWlkYXQgbm92w70ga29uZWt0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IlBvdm9saXQga29uZWt0b3IiLCJjb25uZWN0b3ItbmFtZSI6Ik7DoXpldiBrb25la3RvcnUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Ik7DoXpldiBrb25la3RvcnUgamUgcG92aW5uw70uIiwiY29ubmVjdG9yLXR5cGUiOiJUeXAga29uZWt0b3J1IiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJUeXAga29uZWt0b3J1IGplIHBvdmlubsO9LiIsY29ubmVjdG9yczoiS29uZmlndXJhY2Uga29uZWt0b3J1IiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiVnl0dm/FmWl0IG5vdm91IGJyw6FudSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiSnN0ZSBzaSBqaXN0aSwgxb5lIGNoY2V0ZSB2eXR2b8WZaXQgbm92b3UgYnLDoW51IHMgbsOhenZlbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IlNtYXphdCBrb25maWd1cmFjaSIsImRvd25sb2FkLXRpcCI6IlN0w6Fobm91dCBzb3Vib3Iga29uZmlndXJhY2UiLGdhdGV3YXk6IkJyw6FuYSIsImdhdGV3YXktZXhpc3RzIjoiWmHFmcOtemVuw60gc2Ugc2hvZG7DvW0gbsOhenZlbSBqacW+IGV4aXN0dWplLiIsImdhdGV3YXktbmFtZSI6Ik7DoXpldiBicsOhbnkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOw6F6ZXYgYnLDoW55IGplIHBvdmlubsO9LiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjZSBicsOhbnkgYnlsYSDDunNwxJvFoW7EmyB1bG/FvmVuYS4iLCJqc29uLXBhcnNlIjoiTmVwbGF0bsO9IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmVtxa/FvmUgYsO9dCBwcsOhemRuw6kuIiwibm8tY29ubmVjdG9ycyI6IsW9w6FkbsOpIGtvbmVrdG9yeSIsIm5vLWRhdGEiOiLFvcOhZG7DqSBrb25maWd1cmFjZSIsIm5vLWdhdGV3YXktZm91bmQiOiLFvcOhZG7DqSBicsOhbnkgbmVieWx5IG5hbGV6ZW55LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIgJ3t7aXRlbX19JyBuZW5hbGV6ZW5hLiIsInBhdGgtbG9ncyI6IkNlc3RhIGsgc291Ym9yxa9tIGxvZ3UiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJDZXN0YSBqZSBwb3Zpbm7DoS4iLHJlbW90ZToiVnpkw6FsZW7DoSBrb25maWd1cmFjZSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiw5pyb3ZlxYggbG9nb3bDoW7DrSIsInJlbW92ZS1lbnRyeSI6Ik9kc3RyYW5pdCBrb25maWd1cmFjaSIsInNhdmUtdGlwIjoiVWxvxb5pdCBzb3Vib3Iga29uZmlndXJhY2UiLCJzZWN1cml0eS10eXBlIjoiVHlwIHphYmV6cGXEjWVuw60iLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJQxZnDrXN0dXBvdsO9IHRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IsOabG/FvmnFoXTEmyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiBzb3Vib3J1Iiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbcOhbG7DrSBwb8SNZXQgc291Ym9yxa8iLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbcOhbG7DrSBwb8SNZXQgamUgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiUG/EjWV0IG5lbsOtIHBsYXRuw70uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJQb8SNZXQgamUgcG92aW5uw70uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiDDumxvxb5pxaF0aSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IHrDoXpuYW3FryBqZSAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbcOhbG7DrSBwb8SNZXQgesOhem5hbcWvIGplIHBvdmlubsO9LiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IGplIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtcGF0aCI6IkNlc3RhIGsgw7psb8W+acWhdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJDZXN0YSBrIMO6bG/FvmnFoXRpIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCDDumxvxb5pxaF0xJsiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IlNvdWJvciIsIm1lbW9yeS1zdG9yYWdlIjoiUGFtxJvFpSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamUgcG92aW5uw70uIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBvcnQgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltw6FsbsOtIMSNw61zbG8gcG9ydHUgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbcOhbG7DrSDEjcOtc2xvIHBvcnR1IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBuZW7DrSBwbGF0bsO9LiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGplIHBvdmlubsO9LiIsdGlkeToiVXNwb8WZw6FkYXQiLCJ0aWR5LXRpcCI6IlVzcG/FmcOhZGF0IEpTT04ga29uZmlndXJhY2kiLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJLb25maWd1cmFjZSB7e3R5cGVOYW1lfX0ga29uZWt0b3J1IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBDQSBicsOhbnkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBrbGllbnRhIGJyw6FueSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiQ2VzdGEgayBwcml2w6F0bsOtbXUga2zDrcSNaSBicsOhbnkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlDFmWVwbm91dCBkbyByZcW+aW11IGNlbMOpIG9icmF6b3ZreSIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiSlNPTioga29uZmlndXJhY2UiLCJ1cGRhdGUtY29uZmlnIjoiUMWZaWRhdC9lZGl0b3ZhdCBKU09OIGtvbmZpZ3VyYWNpIn0sVW89eyJhZGQtZW50cnkiOiJUaWxmw7hqIGtvbmZpZ3VyYXRpb24iLCJjb25uZWN0b3ItYWRkIjoiVGlsZsO4aiBueSBzdGlrZm9yYmluZGVsc2UiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkFrdGl2w6lyIHN0aWtmb3JiaW5kZWxzZSIsImNvbm5lY3Rvci1uYW1lIjoiTmF2biBww6Ugc3Rpa2ZvcmJpbmRlbHNlIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJOYXZuIHDDpSBzdGlrZm9yYmluZGVsc2UgZXIgcMOla3LDpnZldC4iLCJjb25uZWN0b3ItdHlwZSI6IlN0aWtmb3JiaW5kZWxzZXN0eXBlIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTdGlrZm9yYmluZGVsc2VzdHlwZSBlciBww6VrcsOmdmV0LiIsY29ubmVjdG9yczoiS29uZmlndXJhdGlvbiBhZiBzdGlrZm9yYmluZGVsc2VyIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiT3ByZXQgZW4gbnkgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiIixkZWxldGU6IlNsZXQga29uZmlndXJhdGlvbiIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGtvbmZpZ3VyYXRpb25zZmlsIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJFbmhlZCBtZWQgc2FtbWUgbmF2biBmaW5kZXMgYWxsZXJlZGUuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheS1uYXZuIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheS1uYXZuIGVyIHDDpWtyw6Z2ZXQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkta29uZmlndXJhdGlvbmVuIGJsZXYgZ2VtdC4iLCJqc29uLXBhcnNlIjoiSWtrZSBneWxkaWcgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmVsdGV0IG3DpSBpa2tlIHbDpnJlIHRvbXQuIiwibm8tY29ubmVjdG9ycyI6IkluZ2VuIHN0aWtmb3JiaW5kZWxzZXIiLCJuby1kYXRhIjoiSW5nZW4ga29uZmlndXJhdGlvbmVyIiwibm8tZ2F0ZXdheS1mb3VuZCI6IkluZ2VuIGdhdGV3YXkgZnVuZGV0LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIiLCJwYXRoLWxvZ3MiOiJTdGkgdGlsIGxvZ2ZpbGVyIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiU3RpIGVyIHDDpWtyw6Z2ZXQuIixyZW1vdGU6IkZqZXJua29uZmlndXJhdGlvbiIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nZsO4cmluZ3NuaXZlYXUiLCJyZW1vdmUtZW50cnkiOiJGamVybiBrb25maWd1cmF0aW9uIiwic2F2ZS10aXAiOiJHZW0ga29uZmlndXJhdGlvbnNmaWwiLCJzZWN1cml0eS10eXBlIjoiU2lra2VyaGVkc3R5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBZGdhbmdzdG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiTGFncmluZyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGZpbCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrcy4gYW50YWwgZmlsZXIiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW4uIGFudGFsIGVyIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IkFudGFsIGVyIGlra2UgZ3lsZGlndC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6IkFudGFsIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGxhZ3JpbmciLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbi4gYW50YWwgcG9zdGVyIGVyIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYWtzLiBhbnRhbCBwb3N0ZXIgZXIgcMOla3LDpnZldC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3MuIGFudGFsIHBha2tlc3TDuHJyZWxzZSBmb3IgYmVnaXZlbmhlZCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbi4gYW50YWwgZXIgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrcy4gYW50YWwgcGFra2VzdMO4cnJlbHNlIGZvciBiZWdpdmVuaGVkIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1wYXRoIjoiTGFncmluZ3NzdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJMYWdyaW5nc3N0aSBlciBww6VrcsOmdmV0LiIsInN0b3JhZ2UtdHlwZSI6IkxhZ3JpbmdzdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiTGFncmluZyBhZiBmaWx0ZXIiLCJtZW1vcnktc3RvcmFnZSI6IkxhZ3JpbmcgYWYgaHVrb21tZWxzZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZC12w6ZydCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJWw6ZydCBlciBww6VrcsOmdmV0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZC1wb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzLiBwb3J0bnVtbWVyIGVyIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluLiBwb3J0bnVtbWVyIGVyIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBlciBpa2tlIGd5bGRpZy4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBlciBww6VrcsOmdmV0LiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBrb25maWcuIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiIiLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwgQ0EtY2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwga2xpZW50Y2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiU3RpIHRpbCBwcml2YXQgbsO4Z2xlIHDDpSBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJTa2lmdCB0aWwgZnVsZCBza8Omcm0iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiVGlsZsO4ai9vcGRhdGVyIGtvbmZpZ3VyYXRpb24gSlNPTiJ9LF9vPXsiYWRkLWVudHJ5IjoiQcOxYWRpciBjb25maWd1cmFjacOzbiIsYWR2YW5jZWQ6IkF2YW56YWRvIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiUHJvYmFuZG8gYWN0aXZpZGFkIGRlIGRpc3Bvc2l0aXZvIixjb21tYW5kOiJDb21hbmRvcyBEb2NrZXIiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiU2UgaGFuIGNvcGlhZG8gbG9zIGNvbWFuZG9zIGFsIHBvcnRhcGFwZWxlcyIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhY2nDs24iLCJjb25uZWN0b3ItYWRkIjoiQcOxYWRpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tYnJlIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBub21icmUgY29uZWN0b3IuIiwiY29ubmVjdG9yLXR5cGUiOiJUaXBvIGNvbmVjdG9yIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aXBvIGNvbmVjdG9yLiIsY29ubmVjdG9yczoiQ29uZWN0b3JlcyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29uZmlndXJhY2nDs24gZGUgY29uZWN0b3JlcyIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOb21icmUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUaXBvIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJFc3RhZG8iLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY2Npb25lcyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiQ2xhdmUiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc2UiLCJycGMtY29tbWFuZC1zZW5kIjoiRW52aWFyIiwicnBjLWNvbW1hbmQtcmVzdWx0IjoiUmVzdWx0YWRvIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiJFZGl0YXIgcGFyYW1ldHJvcyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkNvbmZpZ3VyYWNpw7NuIEdlbmVyYWwiLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhciB1biBnYXRld2F5IG51ZXZvIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJDcmVhciB1biBudWV2byBnYXRld2F5IGNvbiBlbCBub21icmU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkhvcmEgZGUgY3JlYWNpw7NuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6IkxhcyBjb25maWd1cmFjaW9uZXMgc2UgYm9ycmFyw6FuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJTw7NsbyBlcyBwb3NpYmxlIGRlc2FjdGl2YXIgbGEgY29uZmlndXJhY2nDs24gcmVtb3RhLCBzaSBoYXkgYWNjZXNvIGbDrXNpY28gYWwgZ2F0ZXdheS4gU2UgYm9ycmFyw6FuIHRvZGFzIGxhcyBjb25maWd1cmFjaW9uZXMgcHJldmlhcy48YnI+PGJyPiBcblBhcmEgZGVzYWN0aXZhciBsYSBjb25maWd1cmFjacOzbiwgaW50cm9kdWNlIGVsIG5vbWJyZSBkZWwgZ2F0ZXdheSBhcXXDrSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6Ik5vbWJyZSBHYXRld2F5IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGdhdGV3YXkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IkRlc2FjdGl2YXIiLGRlbGV0ZToiQm9ycmFyIGNvbmZpZ3VyYWNpw7NuIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FyZ2FyIGZpY2hlcm8gZGUgY29uZmlndXJhY2nDs24iLCJkcm9wLWZpbGUiOiJBcnJhc3RyYSB1biBmaWNoZXJvIG8iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IllhIGV4aXN0ZSB1biBkaXNwb3NpdGl2byBjb24gZWwgbWlzbW8gbm9tYnJlLiIsImdhdGV3YXktbmFtZSI6Ik5vbWJyZSBkZSBHYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdW4gbm9tYnJlIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7NuIGRlIGdhdGV3YXkgZ3JhYmFkYSBzYXRpc2ZhY3RvcmlhbWVudGUuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaW1lb3V0IEtlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgVGltZW91dCBLZWVwIGFsaXZlIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiRWwgdmFsb3Igbm8gZXMgdsOhbGlkbyIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGtlZXAgYWxpdmUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6IkVsIHZhbG9yIGtlZXAgYWxpdmUgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6IlRpZW1wbyBtw61uaW1vIGVudHJlIHBpbmdzIChlbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aWVtcG8gbcOtbmltbyBlbnRyZSBwaW5ncyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiRWwgdmFsb3IgZGUgdGllbXBvIG3DrW5pbW8gZW50cmUgcGluZ3Mgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DrW5pbW8gc2luIGRhdG9zIChlbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGludGVydmFsbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGludGVydmFsbyBubyBlcyB2w6FsaWRvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DoXhpbW8gc2luIGRhdG9zIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgaW50ZXJ2YWxvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJFbCB2YWxvciBkZSBpbnRlcnZhbG8gbm8gZXMgdsOhbGlkbyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJQZXJpb2RvIGRlIGNvbnRyb2wgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlbCBwZXJpb2RvIG5vIGVzIHbDoWxpZG8iLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcyI6IlRpbWVvdXQgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGltZW91dCBkZSBpbmFjdGl2aWRhZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGluYWN0aXZpZGFkIG5vIGVzIHbDoWxpZG8iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6FsaWRvLiIsImpzb24tcmVxdWlyZWQiOiJFbCBjYW1wbyBubyBwdWVkZSBlc3RhciB2YWPDrW8uIixsb2dzOntsb2dzOiJSZWdpc3Ryb3MiLGRheXM6ImTDrWFzIixob3VyczoiaG9yYXMiLG1pbnV0ZXM6Im1pbnV0b3MiLHNlY29uZHM6InNlZ3VuZG9zIiwiZGF0ZS1mb3JtYXQiOiJGb3JtYXRvIGRlIGZlY2hhIiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBmb3JtYXRvIGRlIGZlY2hhIiwibG9nLWZvcm1hdCI6IkZvcm1hdG8gZGUgcmVnaXN0cm8iLCJsb2ctdHlwZSI6IlRpcG8gZGUgcmVnaXN0cm8iLCJsb2ctZm9ybWF0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGlwbyBkZSByZWdpc3RybyIscmVtb3RlOiJSZWdpc3RybyByZW1vdG8iLCJyZW1vdGUtbG9ncyI6IlJlZ2lzdHJvIHJlbW90byIsbG9jYWw6IlJlZ2lzdHJvIGxvY2FsIixsZXZlbDoiTml2ZWwgZGUgcmVnaXN0cm8iLCJmaWxlLXBhdGgiOiJSdXRhIGRlIGZpY2hlcm8iLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBydXRhIGRlIGZpY2hlcm8iLCJzYXZpbmctcGVyaW9kIjoiUGVyaW9kbyBkZSBndWFyZGFkbyBkZSByZWdpc3Ryb3MiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gbm8gcHVlZGUgc2VyIG1lbm9yIHF1ZSAxIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHBlcmlvZG8gZGUgZ3VhcmRhZG8iLCJiYWNrdXAtY291bnQiOiJOw7ptZXJvIGRlIGJhY2t1cHMiLCJiYWNrdXAtY291bnQtbWluIjoiRWwgbsO6bWVybyBkZSBiYWNrdXBzIG5vIHB1ZWRlIHNlciBtZW5vciBxdWUgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgYmFja3VwcyJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiVGllbXBvIGRlIGVzcGVyYSwgZW52w61vIGRlIHBhcXVldGVzIChlbiBtcykiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGllbXBvIGRlIGVzcGVyYSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoiRWwgdGllbXBvIGRlIGVzcGVyYSBubyBwdWVkZSBzZXIgbWVub3IgcXVlIDAiLCJuby1jb25uZWN0b3JzIjoiTm8gaGF5IGNvbmVjdG9yZXMiLCJuby1kYXRhIjoiTm8gaGF5IGNvbmZpZ3VyYWNpb25lcyIsIm5vLWdhdGV3YXktZm91bmQiOiJObyBzZSBoYSBlbmNvbnRyYWRvIG5pbmfDum4gZ2F0ZXdheS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiICd7e2l0ZW19fScgbm8gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJSdXRhIGEgbG9zIGFyY2hpdm9zIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlJ1dGEgcmVxdWVyaWRhLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiUGVybWl0aXIgS2VlcCBhbGl2ZSBzaSBsbGFtYWRhcyIscmVtb3RlOiJDb25maWd1cmFjacOzbiByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik5pdmVsIGRlIGxvZ2dpbmciLCJyZW1vdmUtZW50cnkiOiJCb3JyYXIgY29uZmlndXJhY2nDs24iLCJyZW1vdGUtc2hlbGwiOiJDb25zb2xhIHJlbW90YSIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiQ29uZmlndXJhY2nDs24gcmVtb3RhIixvdGhlcjoib3Ryb3MiLCJzYXZlLXRpcCI6IkdyYWJhciBmaWNoZXJvIGRlIGNvbmZpZ3VyYWNpw7NuIiwic2VjdXJpdHktdHlwZSI6IlRpcG8gZGUgc2VndXJpZGFkIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVMOza2VuIGRlIGFjY2VzbyIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXN1YXJpbyB5IGNvbnRyYXNlw7FhIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBUw7NrZW4gZGUgYWNjZXNvIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgQ2xhdmUgcHJpdmFkYSJ9LCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZWwgc2Vydmlkb3IiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiRXN0YWTDrXN0aWNhIixzdGF0aXN0aWNzOiJFc3RhZMOtc3RpY2FzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjoiTm8gaGF5IGVzdGFkw61zdGljYXMiLGNvbW1hbmRzOiJDb21hbmRvcyIsInNlbmQtcGVyaW9kIjoiUGVyaW9kbyBkZSBlbnbDrW8gZGUgZXN0YWTDrXN0aWNhcyAoZW4gc2VndW5kb3MpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIGRlIGVudsOtbyIsInNlbmQtcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gZGUgZW52w61vIG5vIHB1ZWRlIHNlciBtZW5vciBkZSA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJFbCBwZXJpb2RvIGRlIGVudsOtbyBubyBlcyB2w6FsaWRvIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiUmV2aXNhciBjb25maWd1cmFjacOzbiBkZSBjb25lY3RvcmVzIChlbiBzZWd1bmRvcykiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB1biB2YWxvciIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuIjoiTGEgY29uZmlndXJhY2nDs24gbm8gZXMgdsOhbGlkYSIsYWRkOiJBw7FhZGlyIGNvbWFuZG8iLHRpbWVvdXQ6IlRpbWVvdXQiLCJ0aW1lb3V0LW1zIjoiVGltZW91dCAoZW4gbXMpIiwidGltZW91dC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHRpbWVvdXQiLCJ0aW1lb3V0LW1pbiI6IkVsIHRpbWVvdXQgbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJFbCB0aW1lb3V0IG5vIGVzIHbDoWxpZG8iLCJhdHRyaWJ1dGUtbmFtZSI6Ik5vbWJyZSBkZSBhdHJpYnV0byIsImF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGF0cmlidXRvIixjb21tYW5kOiJDb21hbmRvIiwiY29tbWFuZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGNvbWFuZG8iLHJlbW92ZToiQm9ycmFyIGNvbWFuZG8ifSxzdG9yYWdlOiJHcmFiYWNpw7NuIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTsO6bWVybyBtw6F4aW1vIGRlIHJlZ2lzdHJvcyBlbiBmaWNoZXJvIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZmljaGVyb3MiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6FsaWRvLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTcOheGltbyBkZSByZWdpc3Ryb3MgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltbyBlcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiTGVlciBuw7ptZXJvIGRlIGVudHJhZGFzIGVuIGFsbWFjw6luIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgZW50cmFkYXMgZXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBuw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiUnV0YSBkZSBjYXJwZXRhIGRlIGRhdG9zIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcnV0YS4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWHDsW8gbcOheGltbyBkZSBldmVudG9zIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiRWwgbsO6bWVybyBtw61uaW1vIGVzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8uIiwic3RvcmFnZS1wYXRoIjoiUnV0YSBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHJ1dGEgZGUgYWxtYWPDqW4uIiwic3RvcmFnZS10eXBlIjoiVGlwbyBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gZmljaGVybyIsIm1lbW9yeS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gbWVtb3JpYSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiSG9zdCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQdWVydG8gVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkVsIHB1ZXJ0byBtw6F4aW1vIGVzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiRWwgcHVlcnRvIG3DrW5pbW8gZXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQdWVydG8gbm8gdsOhbGlkby4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcHVlcnRvLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDs24gY29uZWN0b3Ige3t0eXBlTmFtZX19IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIENBIGVuIGVsIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIGNsaWVudGUgZW4gZWwgZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6IkNvbXByb2JhY2nDs24gZGUgVFRMIGRlIG1lbnNhamVzIGVuIGhvcmFzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiQ2FtcG8gcmVxdWVyaWRvLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJFbCBtw61uaW1vIGVzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwgKFRpbWUgdG8gbGl2ZSkgZGUgbWVuc2FnZXMgZW4gZMOtYXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIFRUTCBkZSBtZW5zYWplcy4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvLiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IkVsIHJhbmdvIGRlIHZhbG9yZXMgZXMgZGVzZGUgMCBhIDEiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlJ1dGEgYSBsYSBjbGF2ZSBwcml2YWRhIGVuIGVsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7NuIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkHDsWFkaXIvYWN0dWFsaXphciBjb25maWd1cmFjacOzbiBKU09OIixoaW50czp7InJlbW90ZS1jb25maWd1cmF0aW9uIjoiSGFiaWxpdGEgbGEgYWRtaW5pc3RyYWNpw7NuIHkgY29uZmlndXJhY2nDs24gcmVtb3RhIGRlbCBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiSGFiaWxpdGEgZWwgY29udHJvbCByZW1vdG8gZGVsIHNpc3RlbWEgb3BlcmF0aXZvIGRlbCBnYXRld2F5IGRlc2RlIGVsIHdpZGdldCB0ZXJtaW5hbCByZW1vdG8iLGhvc3Q6Ikhvc3RuYW1lIG8gZGlyZWNjacOzbiBJUCBkZWwgc2Vydmlkb3IgVGhpbmdzYm9hcmQiLHBvcnQ6IlB1ZXJ0byBkZWwgc2VydmljaW8gTVFUVCBlbiBlbCBzZXJ2aWRvciBUaGluZ3Nib2FyZCIsdG9rZW46IkFjY2VzcyB0b2tlbiBwYXJhIGVsIGdhdGV3YXkiLCJjbGllbnQtaWQiOiJJRCBkZSBjbGllbnRlIE1RVFQgcGFyYSBlbCBnYXRld2F5Iix1c2VybmFtZToiVXN1YXJpbyBNUVRUIHBhcmEgZWwgZ2F0ZXdheSIscGFzc3dvcmQ6IkNvbnRyYXNlw7FhIE1RVFQgcGFyYSBlbCBnYXRld2F5IiwiY2EtY2VydCI6IlJ1dGEgYWwgZmljaGVybyBkZWwgY2VydGlmaWNhZG8gQ0EiLCJkYXRlLWZvcm0iOiJGb3JtYXRvIGRlIGZlY2hhIGVuIGxvcyBtZW5zYWplcyBkZSByZWdpc3RybyIsImRhdGEtZm9sZGVyIjoiUnV0YSBhIGxhIGNhcnBldGEgcXVlIGNvbnRlbmRyw6EgbG9zIGRhdG9zIChSZWxhdGl2YSBvIGFic29sdXRhKSIsImxvZy1mb3JtYXQiOiJGb3JtYXRvIGRlIG1lbnNhamVzIGVuIHJlZ2lzdHJvIiwicmVtb3RlLWxvZyI6IkhhYmlsaXRhIGVsIHJlZ2lzdHJvIHJlbW90byB5IGxhIHBvc3RlcmlvciBsZWN0dXJhIGRlc2RlIGVsIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJTaSBlbCBjb250YWplIGRlIGNvcGlhcyBkZSBzZWd1cmlkYWQgZXMgbWF5b3IgcXVlIDAsIGN1YW5kbyBzZSByZWFsaWNlIHVuYSByZW5vdmFjacOzbiwgbm8gc2UgY29uc2VydmFuIG3DoXMgcXVlIGxvcyBhcmNoaXZvcyBkZSByZWN1ZW50byBkZSBjb3BpYXMgZGUgc2VndXJpZGFkLCBsb3MgbcOhcyBhbnTDrWd1b3Mgc2UgZWxpbWluYXLDoW4iLHN0b3JhZ2U6IlByb3ZlZSBsYSBjb25maWd1cmFjacOzbiBwYXJhIGVsIGdyYWJhZG8gZGUgZGF0b3MgZW50cmFudGVzIGFudGVzIGRlIHF1ZSBzZSBlbnbDrWVuIGEgbGEgcGxhdGFmb3JtYSIsIm1heC1maWxlLWNvdW50IjoiTsO6bWVybyBtw6F4aW1vIGRlIGZpY2hlcm9zIHF1ZSBzZSBjcmVhcsOhbiIsIm1heC1yZWFkLWNvdW50IjoiTsO6bWVvIG3DoXhpbW8gZGUgbWVuc2FqZXMgYSBvYnRlbmVyIGRlc2RlIGVsIGRpc2NvIHkgZW52aWFkb3MgYSBsYSBwbGF0YWZvcm1hIiwibWF4LXJlY29yZHMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIHF1ZSBzZSBndWFyZGFyw6FuIGVuIHVuIHNvbG8gZmljaGVybyIsInJlYWQtcmVjb3JkLWNvdW50IjoiTsO6bWVybyBkZSBtZW5zYWdlcyBhIG9idGVuZXIgZGVzZGUgZWwgYWxtYWNlbmFtaWVudG8geSBlbnZpYWRvcyBhIGxhIHBsYXRhZm9ybWEiLCJtYXgtcmVjb3Jkcy1jb3VudCI6Ik7Dum1lcm8gbcOheGltbyBkZSBkYXRvcyBlbiBhbG1hY2VuYW1pZW50byBhbnRlcyBkZSBlbnZpYXIgYSBsYSBwbGF0YWZvcm1hIiwidHRsLWNoZWNrLWhvdXIiOiJDb24gcXXDqSBmcmVjdWVuY2lhIGVsIGdhdGV3YXkgY29tcHJvYmFyw6Egc2kgbG9zIGRhdG9zIGVzdMOhbiBvYnNvbGV0b3MiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTsO6bWVybyBtw6F4aW1vIGRlIGTDrWFzIHBhcmEgbGEgcmV0ZW5jacOzbiBkZSBkYXRvcyBlbiBlbCBhbG1hY8OpbiIsY29tbWFuZHM6IkNvbWFuZG9zIHBhcmEgcmVjb2dlciBlc3RhZMOtc3RpY2FzIGFkaWNpb25hbGVzIixhdHRyaWJ1dGU6IkNsYXZlIGRlIHRlbGVtZXRyw61hIHBhcmEgZXN0YWTDrXN0aWNhcyIsdGltZW91dDoiVGltZW91dCBwYXJhIGxhIGVqZWN1Y2nDs24gZGUgY29tYW5kb3MiLGNvbW1hbmQ6IkVsIHJlc3VsdGFkbyBkZSBsYSBlamVjdWNpw7NuIGRlbCBjb21hbmRvLCBzZSB1c2Fyw6EgY29tbyB2YWxvciBwYXJhIGxhIHRlbGVtZXRyw61hIiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiSGFiaWxpdGEgbGEgbW9uaXRvcml6YWNpw7NuIGRlIGNhZGEgdW5vIGRlIGxvcyBkaXNwb3NpdGl2b3MgY29uZWN0YWRvcyIsImluYWN0aXZpdHktdGltZW91dCI6IlRpZW1wbyB0cmFzIHF1ZSBlbCBnYXRld2F5IGRlc2NvbmVjdGFyw6EgZWwgZGlzcG9zaXRpdm8iLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZG8gZGUgbW9uaXRvcml6YWNpw7NuIGRlIGFjdGl2aWRhZCBlbiBlbCBkaXNwb3NpdGl2byIsIm1pbmltYWwtcGFjay1kZWxheSI6IlRpZW1wbyBkZSBlc3BlcmEgZW50cmUgZW52w61vIGRlIHBhcXVldGVzIGRlIG1lbnNhamVzIChVbiB2YWxvciBtdXkgYmFqbywgcmVzdWx0YXLDoSBlbiB1biBhdW1lbnRvIGRlIHVzbyBkZSBsYSBDUFUgZW4gZWwgZ2F0ZXdheSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGVuIGxvcyBtZW5zYWplcyBNUVRUICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZSByZWQgZW4gZWwgY3VhbCBlbCBzZXJ2aWRvciBHUlBDIGVzY3VjaGFyw6EgY29uZXhpb25lcyBlbnRyYW50ZXMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaWVtcG8gbcOheGltbywgZWwgY3VhbCBlbCBzZXJ2aWRvciBlc3BlcmFyYSB1biBwaW5nIGtlZXBhbGl2ZSBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYWNpw7NuIGVudHJlIGRvcyBwaW5ncyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbGxhbWFkYSBSUEMgYWN0aXZhLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik3DrW5pbW8gdGllbXBvIHF1ZSBlbCBzZXJ2aWRvciBkZWJlIGVzcGVyYXIgZW50cmUgZW52w61vcyBkZSBtZW5zYWplcyBkZSBwaW5nIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTsO6bWVybyBtw6F4aW1vIGRlIHBpbmdzIGtlZXBhbGl2ZSBxdWUgZWwgc2Vydmlkb3IgcHVlZGUgZW52aWFyIHNpbiByZWNpYmlyIG5pbmfDum4gZGF0byBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNw61uaW1vIHRpZW1wbyBxdWUgZWwgc2Vydmlkb3IgZGViZSBlc3BlcmFyIGVudHJlIGVudsOtb3MgZGUgcGluZyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbmluZ8O6biBkYXRvIGVuIGVudsOtbyBvIHJlY2VwY2nDs24uIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJQZXJtaXRpciBhbCBzZXJ2aWRvciBtYW50ZW5lciBsYSBjb25leGnDs24gR1JQQyBhYmllcnRhLCBjdWFuZG8gbm8gaGF5YSBsbGFtYWRhcyBSUEMgYWN0aXZhcy4ifX0sSG89eyJhZGQtZW50cnkiOiLshKTsoJUg7LaU6rCAIiwiY29ubmVjdG9yLWFkZCI6IuyDiOuhnOyatCDsl7DqsrDsnpAg7LaU6rCAIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJFbmFibGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUiOiJDb25uZWN0b3IgbmFtZSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiQ29ubmVjdG9yIG5hbWUgaXMgcmVxdWlyZWQuIiwiY29ubmVjdG9yLXR5cGUiOiJDb25uZWN0b3IgdHlwZSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiQ29ubmVjdG9yIHR5cGUgaXMgcmVxdWlyZWQuIixjb25uZWN0b3JzOiJDb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhdGUgYSBuZXcgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQXJlIHlvdSBzdXJlIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBnYXRld2F5IHdpdGggbmFtZTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiU3RvcmFnZSIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBmaWxlIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbXVtIG51bWJlciBvZiBmaWxlcyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJOdW1iZXIgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWF4aW11bSByZWNvcmRzIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZCBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlRoaW5nc0JvYXJkIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29ubmVjdG9yIHt7dHlwZU5hbWV9fSBjb25maWd1cmF0aW9uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYXRoIHRvIHByaXZhdGUga2V5IG9uIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlRvZ2dsZSBmdWxsc2NyZWVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aW9uIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkZC91cGRhdGUgY29uZmlndXJhdGlvbiBKU09OIn0sem89eyJhZGQtZW50cnkiOiJBZGQgY29uZmlndXJhdGlvbiIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJycGMtY29tbWFuZC1zZW5kIjoiU2VuZCIsInJwYy1jb21tYW5kLXJlc3VsdCI6IlJlc3VsdCIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiSW4gb3JkZXIgdG8gcnVuIFRoaW5nc0JvYXJkIElvVCBnYXRld2F5IGluIGRvY2tlciB3aXRoIGNyZWRlbnRpYWxzIGZvciB0aGlzIGRldmljZSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkNyZWF0ZSBhIG5ldyBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJBcmUgeW91IHN1cmUgeW91IHdhbnQgY3JlYXRlIGEgbmV3IGdhdGV3YXkgd2l0aCBuYW1lOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkRldmljZSB3aXRoIHNhbWUgbmFtZSBpcyBhbHJlYWR5IGV4aXN0cy4iLCJnYXRld2F5LW5hbWUiOiJHYXRld2F5IG5hbWUiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJHYXRld2F5IG5hbWUgaXMgcmVxdWlyZWQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHkgc2F2ZWQuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJLZWVwIGFsaXZlIHRpbWVvdXQgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIG5vdCB2YWxpZCIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IktlZXAgYWxpdmUgaXMgcmVxdWlyZWQiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiS2VlcCBhbGl2ZSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm4iOiJLZWVwIGFsaXZlIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgKGluIG1zKSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluIHBpbmcgaW50ZXJ2YWwgd2l0aG91dCBkYXRhIChpbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyBub3QgdmFsaWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1taW4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJqc29uLXBhcnNlIjoiTm90IHZhbGlkIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IkZpZWxkIGNhbm5vdCBiZSBlbXB0eS4iLGxvZ3M6e2xvZ3M6IkxvZ3MiLGRheXM6ImRheXMiLGhvdXJzOiJob3VycyIsbWludXRlczoibWludXRlcyIsc2Vjb25kczoic2Vjb25kcyIsImRhdGUtZm9ybWF0IjoiRGF0ZSBmb3JtYXQiLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IkRhdGUgZm9ybWF0IHJlcXVpcmVkIiwibG9nLWZvcm1hdCI6IkxvZyBmb3JtYXQiLCJsb2ctdHlwZSI6IkxvZyB0eXBlIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6IkxvZyBmb3JtYXQgcmVxdWlyZWQiLHJlbW90ZToiUmVtb3RlIGxvZ2dpbmciLCJyZW1vdGUtbG9ncyI6IlJlbW90ZSBsb2dzIixsb2NhbDoiTG9jYWwgbG9nZ2luZyIsbGV2ZWw6IkxvZyBsZXZlbCIsImZpbGUtcGF0aCI6IkZpbGUgcGF0aCIsImZpbGUtcGF0aC1yZXF1aXJlZCI6IkZpbGUgcGF0aCByZXF1aXJlZCIsInNhdmluZy1wZXJpb2QiOiJMb2cgc2F2aW5nIHBlcmlvZCIsInNhdmluZy1wZXJpb2QtbWluIjoiTG9nIHNhdmluZyBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiJMb2cgc2F2aW5nIHBlcmlvZCByZXF1aXJlZCIsImJhY2t1cC1jb3VudCI6IkJhY2t1cCBjb3VudCIsImJhY2t1cC1jb3VudC1taW4iOiJCYWNrdXAgY291bnQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IkJhY2t1cCBjb3VudCByZXF1aXJlZCJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiTWluIHBhY2sgc2VuZCBkZWxheSAoaW4gbXMpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgaXMgcmVxdWlyZWQiLCJtaW4tcGFjay1zZW5kLWRlbGF5LW1pbiI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMCIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJLZWVwIGFsaXZlIHBlcm1pdCB3aXRob3V0IGNhbGxzIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtc2hlbGwiOiJSZW1vdGUgc2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IlJlbW90ZSBDb25maWd1cmF0aW9uIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTdG9yYWdlIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIGZpbGUiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBudW1iZXIgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWJlciBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbXVtIHJlY29yZHMgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudCI6IlJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudCI6Ik1heCByZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiTWF4IFJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6IkRhdGEgZm9sZGVyIHBhdGgiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiJEYXRhIGZvbGRlciBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQgaG9zdCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYXhpbXVtIHBvcnQgbnVtYmVyIGlzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluaW11bSBwb3J0IG51bWJlciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgaXMgbm90IHZhbGlkLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGlzIHJlcXVpcmVkLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBjb25maWcgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsaGludHM6eyJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIFRoaW5nc0JvYXJkIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIGZvbGRlciwgdGhhdCB3aWxsIGNvbnRhaW5zIGRhdGEgKFJlbGF0aXZlIG9yIEFic29sdXRlKSIsImxvZy1mb3JtYXQiOiJMb2cgbWVzc2FnZSBmb3JtYXQiLCJyZW1vdGUtbG9nIjoiRW5hYmxlcyByZW1vdGUgbG9nZ2luZyBhbmQgbG9ncyByZWFkaW5nIGZyb20gdGhlIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJJZiBiYWNrdXAgY291bnQgaXMgPiAwLCB3aGVuIGEgcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cCBjb3VudCBmaWxlcyBhcmUga2VwdCAtIHRoZSBvbGRlc3Qgb25lcyBhcmUgZGVsZXRlZCIsc3RvcmFnZToiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3Igc2F2aW5nIGluY29taW5nIGRhdGEgYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIHBsYXRmb3JtIiwibWF4LWZpbGUtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGZpbGUgdGhhdCB3aWxsIGJlIGNyZWF0ZWQiLCJtYXgtcmVhZC1jb3VudCI6IkNvdW50IG9mIG1lc3NhZ2VzIHRvIGdldCBmcm9tIHN0b3JhZ2UgYW5kIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJtYXgtcmVjb3JkcyI6Ik1heGltdW0gY291bnQgb2YgcmVjb3JkcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIG9uZSBmaWxlIiwicmVhZC1yZWNvcmQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGRhdGEgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZCB0byBUaGluZ3NCb2FyZCIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgR2F0ZXdheSBjaGVjayBkYXRhIGZvciBvYnNvbGVzY2VuY2UiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTWF4aW11bSBkYXlzIHRoYXQgc3RvcmFnZSB3aWxsIHNhdmUgZGF0YSIsY29tbWFuZHM6IkNvbW1hbmRzIGZvciBjb2xsZWN0aW5nIGFkZGl0aW9uYWwgc3RhdGlzdGljIixhdHRyaWJ1dGU6IlN0YXRpc3RpYyB0ZWxlbWV0cnkga2V5Iix0aW1lb3V0OiJUaW1lb3V0IGZvciBjb21tYW5kIGV4ZWN1dGluZyIsY29tbWFuZDoiVGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24sIHdpbGwgYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRlbGVtZXRyeSIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6IkVuYWJsZXMgbW9uaXRvciB0aGUgYWN0aXZpdHkgb2YgZWFjaCBjb25uZWN0ZWQgZGV2aWNlIiwiaW5hY3Rpdml0eS10aW1lb3V0IjoiVGltZSBhZnRlciB3aG9zZSB0aGUgZ2F0ZXdheSB3aWxsIGRpc2Nvbm5lY3QgZGV2aWNlIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiJQZXJpb2RpY2l0eSBvZiBkZXZpY2UgYWN0aXZpdHkgY2hlY2siLCJtaW5pbWFsLXBhY2stZGVsYXkiOiJEZWxheSBiZXR3ZWVuIHNlbmRpbmcgcGFja3Mgb2YgbWVzc2FnZXMgKERlY3JlYXNpbmcgdGhpcyBzZXR0aW5nIHJlc3VsdHMgaW4gaW5jcmVhc2VkIENQVSB1c2FnZSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGluIE1RVFQgbWVzc2FnaW5nICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6Ik5ldHdvcmsgcG9ydCBvbiB3aGljaCBHUlBDIHNlcnZlciB3aWxsIGxpc3RlbiBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJNYXhpbXVtIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBmb3IgYSBrZWVwYWxpdmUgcGluZyByZXNwb25zZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLWtlZXAtYWxpdmUiOiJEdXJhdGlvbiBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIFJQQyBjYWxsLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXhpbXVtIG51bWJlciBvZiBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB0aGF0IHRoZSBzZXJ2ZXIgY2FuIHNlbmQgd2l0aG91dCByZWNlaXZpbmcgYW55IGRhdGEgYmVmb3JlIGl0IGNvbnNpZGVycyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgYmVpbmcgc2VudCBvciByZWNlaXZlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IkFsbG93IHNlcnZlciB0byBrZWVwIHRoZSBHUlBDIGNvbm5lY3Rpb24gYWxpdmUgZXZlbiB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgUlBDIGNhbGxzLiJ9fSxXbz17ImFkZC1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB0b2V2b2VnZW4iLCJjb25uZWN0b3ItYWRkIjoiTmlldXdlIGNvbm5lY3RvciB0b2V2b2VnZW4iLCJjb25uZWN0b3ItZW5hYmxlZCI6IkNvbm5lY3RvciBpbnNjaGFrZWxlbiIsImNvbm5lY3Rvci1uYW1lIjoiTmFhbSB2YW4gZGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJEZSBuYWFtIHZhbiBkZSBjb25uZWN0b3IgaXMgdmVyZWlzdC4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cGUgYWFuc2x1aXRpbmciLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkhldCB0eXBlIGNvbm5lY3RvciBpcyB2ZXJlaXN0LiIsY29ubmVjdG9yczoiQ29uZmlndXJhdGllIHZhbiBjb25uZWN0b3JlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkVlbiBuaWV1d2UgZ2F0ZXdheSBtYWtlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiV2VldCB1IHpla2VyIGRhdCB1IGVlbiBuaWV1d2UgZ2F0ZXdheSB3aWx0IG1ha2VuIG1ldCBkZSBuYWFtOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiQ29uZmlndXJhdGllIHZlcndpamRlcmVuIiwiZG93bmxvYWQtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBkb3dubG9hZGVuIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2UgbWV0IGRlemVsZmRlIG5hYW0gYmVzdGFhdCBhbC4iLCJnYXRld2F5LW5hbWUiOiJOYWFtIHZhbiBkZSBnYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiRGUgbmFhbSB2YW4gZGUgZ2F0ZXdheSBpcyB2ZXJlaXN0LiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5Y29uZmlndXJhdGllIHN1Y2Nlc3ZvbCBvcGdlc2xhZ2VuLiIsImpzb24tcGFyc2UiOiJPbmdlbGRpZ2UgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiSGV0IHZlbGQgbWFnIG5pZXQgbGVlZyB6aWpuLiIsIm5vLWNvbm5lY3RvcnMiOiJHZWVuIGNvbm5lY3RvcmVuIiwibm8tZGF0YSI6IkdlZW4gY29uZmlndXJhdGllcyIsIm5vLWdhdGV3YXktZm91bmQiOiJHZWVuIGdhdGV3YXkgZ2V2b25kZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6Iid7e2l0ZW19fScgbmlldCBnZXZvbmRlbi4iLCJwYXRoLWxvZ3MiOiJQYWQgbmFhciBsb2diZXN0YW5kZW4iLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYWQgaXMgdmVyZWlzdC4iLHJlbW90ZToiQ29uZmlndXJhdGllIG9wIGFmc3RhbmQiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJlZ2lzdHJhdGllIG5pdmVhdSIsInJlbW92ZS1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB2ZXJ3aWpkZXJlbiIsInNhdmUtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBvcHNsYWFuIiwic2VjdXJpdHktdHlwZSI6IlNvb3J0IGJldmVpbGlnaW5nIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9lZ2FuZyB0b3QgdG9rZW4iLHRsczoiVExTIChUTFMpIn0sc3RvcmFnZToiT3BzbGFnIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSBhYW50YWwgcmVjb3JkcyBpbiBiZXN0YW5kIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbWFhbCBhYW50YWwgYmVzdGFuZGVuIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBhYW50YWwgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtbWVyIGlzIHZlcmVpc3QuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gYWFudGFsIHJlY29yZHMgaW4gb3BzbGFnIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIGFhbnRhbCByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbWFsZSByZWNvcmRzIHppam4gdmVyZWlzdC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1heGltYWxlIHBha2tldGdyb290dGUgdm9vciBldmVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIGFhbnRhbCBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1tZXIgaXMgbmlldCBnZWxkaWcuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJEZSBtYXhpbWFsZSBwYWtrZXRncm9vdHRlIHZhbiBoZXQgZXZlbnQgaXMgdmVyZWlzdC4iLCJzdG9yYWdlLXBhdGgiOiJPcHNsYWcgcGFkIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiT3BzbGFncGFkIGlzIHZlcmVpc3QuIiwic3RvcmFnZS10eXBlIjoiVHlwZSBvcHNsYWciLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik9wc2xhZyB2YW4gYmVzdGFuZGVuIiwibWVtb3J5LXN0b3JhZ2UiOiJHZWhldWdlbiBvcHNsYWcifSx0aGluZ3Nib2FyZDoiRGluZ2VuIEJvcmQiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQtZ2FzdGhlZXIiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiU2VydmVyIGhvc3QgaXMgdmVyZWlzdC4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmQtcG9vcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkhldCBtYXhpbWFsZSBwb29ydG51bW1lciBpcyA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6IkhldCBtaW5pbWFsZSBwb29ydG51bW1lciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvb3J0IGlzIG5pZXQgZ2VsZGlnLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb29ydCBpcyB2ZXJlaXN0LiIsdGlkeToiT3JkZWxpamsiLCJ0aWR5LXRpcCI6Ik9wZ2VydWltZGUgY29uZmlndXJhdGllIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmF0aWUgdmFuIGNvbm5lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhZCBuYWFyIENBLWNlcnRpZmljYWF0IG9wIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYWQgbmFhciBjbGllbnRjZXJ0aWZpY2FhdCBvcCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYWQgbmFhciBwcml2w6lzbGV1dGVsIG9wIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlZvbGxlZGlnIHNjaGVybSBpbi0gZW4gdWl0c2NoYWtlbGVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aWUgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQ29uZmlndXJhdGllIEpTT04gdG9ldm9lZ2VuL2JpandlcmtlbiJ9LGpvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2rEmSIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3dlIHrFgsSFY3plIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJXxYLEhWN6IHrFgsSFY3plIiwiY29ubmVjdG9yLW5hbWUiOiJOYXp3YSB6xYLEhWN6YSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTmF6d2EgesWCxIVjemEgamVzdCB3eW1hZ2FuYS4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cCB6xYLEhWN6YSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiVHlwIHrFgsSFY3phIGplc3Qgd3ltYWdhbnkuIixjb25uZWN0b3JzOiJLb25maWd1cmFjamEgesWCxIVjenkiLCJjb25uZWN0b3JzLWNvbmZpZyI6IkNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOYW1lIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoiVHlwZSIsImNvbm5lY3RvcnMtdGFibGUtc3RhdHVzIjoiU3RhdHVzIiwiY29ubmVjdG9ycy10YWJsZS1hY3Rpb25zIjoiQWN0aW9ucyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiS2V5IiwiY29ubmVjdG9ycy10YWJsZS1jbGFzcyI6IkNsYXNzIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXN1bHQiLCJycGMtY29tbWFuZC1lZGl0LXBhcmFtcyI6IkVkaXQgcGFyYW1ldGVycyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkdlbmVyYWwgQ29uZmlndXJhdGlvbiIsImRvY2tlci1sYWJlbCI6IkluIG9yZGVyIHRvIHJ1biBUaGluZ3NCb2FyZCBJb1QgZ2F0ZXdheSBpbiBkb2NrZXIgd2l0aCBjcmVkZW50aWFscyBmb3IgdGhpcyBkZXZpY2UgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcy4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJVdHfDs3J6IG5vd3kgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQ3p5IG5hIHBld25vIGNoY2VzeiB1dHdvcnp5xIcgbm93eSBnYXRld2F5IG8gbmF6d2llOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IlVzdcWEIGtvbmZpZ3VyYWNqxJkiLCJkb3dubG9hZC10aXAiOiJQb2JpZXJ6IHBsaWsga29uZmlndXJhY3lqbnkiLCJkcm9wLWZpbGUiOiJEcm9wIGZpbGUgaGVyZSBvciIsZ2F0ZXdheToiV2VqxZtjaWUiLCJnYXRld2F5LWV4aXN0cyI6IlVyesSFZHplbmllIG8gdGVqIHNhbWVqIG5hendpZSBqdcW8IGlzdG5pZWplLiIsImdhdGV3YXktbmFtZSI6Ik5hendhIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOYXp3YSBHYXRld2F5J2EgamVzdCB3eW1hZ2FuYS4iLCJnYXRld2F5LXNhdmVkIjoiS29uZmlndXJhY2phIEdhdGV3ZXknYSB6b3N0YcWCYSBwb215xZtsbmllIHphcGlzYW5hLiIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCAoaW4gc2VjKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoiSW5hY3Rpdml0eSB0aW1lb3V0IChpbiBzZWMpIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgcmVxdWlyZWQiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgbm90IHZhbGlkIiwianNvbi1wYXJzZSI6Ik5pZXByYXdpZMWCb3d5IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmllIG1vxbxlIGJ5xIcgcHVzdGUuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDAiLCJuby1jb25uZWN0b3JzIjoiQnJhayB6xYLEhWN6eSIsIm5vLWRhdGEiOiJCcmFrIGtvbmZpZ3VyYWNqaSIsIm5vLWdhdGV3YXktZm91bmQiOiJOaWUgem5hbGV6aW9ubyBnYXRld2F5J2EuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pZSB6bmFsZXppb25vLiIsInBhdGgtbG9ncyI6IsWaY2llxbxrYSBkbyBwbGlrw7N3IGR6aWVubmlrYSIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IsWaY2llxbxrYSBqZXN0IHd5bWFnYW5hLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiS2VlcCBhbGl2ZSBwZXJtaXQgd2l0aG91dCBjYWxscyIscmVtb3RlOiJaZGFsbmEga29uZmlndXJhY2phIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJQb3ppb20gbG9nb3dhbmlhIiwicmVtb3ZlLWVudHJ5IjoiVXN1xYQga29uZmlndXJhY2rEmSIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLG90aGVyOiJPdGhlciIsInNhdmUtdGlwIjoiWmFwaXN6IHBsaWsga29uZmlndXJhY3lqbnkiLCJzZWN1cml0eS10eXBlIjoiUm9kemFqIHphYmV6cGllY3plbmlhIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9rZW4gZG9zdMSZcHUiLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTa8WCYWRvd2FuaWUiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYWtzeW1hbG5hIGxpY3piYSByZWtvcmTDs3cgdyBwbGlrdSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc3ltYWxuYSBsaWN6YmEgcGxpa8OzdyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWVyIGplc3Qgd3ltYWdhbnkuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyB3IHBhbWnEmWNpIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbWFsbmEgbGljemJhIHJla29yZMOzdyB0byAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWVyIGplc3QgbmllcHJhd2lkxYJvd3kuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiJSZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJNYXggcmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6Ik1heCBSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgiOiJEYXRhIGZvbGRlciBwYXRoIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiRGF0YSBmb2xkZXIgcGF0aCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCBqZXN0IHd5bWFnYW55LiIsInN0b3JhZ2UtcGF0aCI6IsWaY2llxbxrYSBwcnplY2hvd3l3YW5pYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IsWaY2llxbxrYSBkbyBwcnplY2hvd3l3YW5pYSBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCBza8WCYWRvd2FuaWEiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik5vxZtuaWsgZGFueWNoIiwibWVtb3J5LXN0b3JhZ2UiOiJQcnplY2hvd3l3YW5pZSBwYW1pxJljaSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiR29zcG9kYXJ6IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamVzdCB3eW1hZ2FueS4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4IjoiTWFrc3ltYWxueSBudW1lciBwb3J0dSB0byA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltYWxueSBudW1lciBwb3J0dSB0byAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBqZXN0IHd5bWFnYW55LiIsdGlkeToiVXBvcnrEhWRrdWoiLCJ0aWR5LXRpcCI6IlVwb3J6xIVka293YW5hIGtvbmZpZ3VyYWNqYSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiWsWCxIVjemUge3t0eXBlTmFtZX19IGtvbmZpZ3VyYWNqYSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoixZpjaWXFvGthIGRvIGNlcnR5ZmlrYXR1IENBIG5hIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiLFmmNpZcW8a2EgZG8gY2VydHlmaWthdHUga2xpZW50YSBuYSBnYXRld2F5IiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoiTWVzc2FnZXMgVFRMIGluIGRheXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLW1pbiI6Ik1pbiBudW1iZXIgaXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtcXR0LXFvcyI6IlFvUyIsIm1xdHQtcW9zLXJlcXVpcmVkIjoiUW9TIGlzIHJlcXVpcmVkIiwibXF0dC1xb3MtcmFuZ2UiOiJRb1MgdmFsdWVzIHJhbmdlIGlzIGZyb20gMCB0byAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLFmmNpZcW8a2EgZG8ga2x1Y3phIHByeXdhdG5lZ28gbmEgYnJhbWNlIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJQcnplxYLEhWN6IHRyeWIgcGXFgm5vZWtyYW5vd3kiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNqYSBKU09OKiIsInVwZGF0ZS1jb25maWciOiJEb2Rhai96YWt0dWFsaXp1aiBrb25maWd1cmFjasSZIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiJFbmFibGVzIHJlbW90ZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiRW5hYmxlcyByZW1vdGUgY29udHJvbCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIHRoZSBnYXRld2F5IGZyb20gdGhlIFJlbW90ZSBTaGVsbCB3aWRnZXQiLGhvc3Q6Ikhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgVGhpbmdzQm9hcmQgc2VydmVyIixwb3J0OiJQb3J0IG9mIE1RVFQgc2VydmljZSBvbiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHRva2VuOiJBY2Nlc3MgdG9rZW4gZm9yIHRoZSBnYXRld2F5IGZyb20gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2xpZW50LWlkIjoiTVFUVCBjbGllbnQgaWQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIix1c2VybmFtZToiTVFUVCB1c2VybmFtZSBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBhc3N3b3JkOiJNUVRUIHBhc3N3b3JkIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIsImNhLWNlcnQiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUiLCJkYXRlLWZvcm0iOiJEYXRlIGZvcm1hdCBpbiBsb2cgbWVzc2FnZSIsImRhdGEtZm9sZGVyIjoiUGF0aCB0byBmb2xkZXIsIHRoYXQgd2lsbCBjb250YWlucyBkYXRhIChSZWxhdGl2ZSBvciBBYnNvbHV0ZSkiLCJsb2ctZm9ybWF0IjoiTG9nIG1lc3NhZ2UgZm9ybWF0IiwicmVtb3RlLWxvZyI6IkVuYWJsZXMgcmVtb3RlIGxvZ2dpbmcgYW5kIGxvZ3MgcmVhZGluZyBmcm9tIHRoZSBnYXRld2F5IiwiYmFja3VwLWNvdW50IjoiSWYgYmFja3VwIGNvdW50IGlzID4gMCwgd2hlbiBhIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXAgY291bnQgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQiLHN0b3JhZ2U6IlByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gZm9yIHNhdmluZyBpbmNvbWluZyBkYXRhIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBwbGF0Zm9ybSIsIm1heC1maWxlLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBmaWxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiJNYXhpbXVtIGNvdW50IG9mIHJlY29yZHMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiBvbmUgZmlsZSIsInJlYWQtcmVjb3JkLWNvdW50IjoiQ291bnQgb2YgbWVzc2FnZXMgdG8gZ2V0IGZyb20gc3RvcmFnZSBhbmQgc2VuZCB0byBUaGluZ3NCb2FyZCIsIm1heC1yZWNvcmRzLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBkYXRhIGluIHN0b3JhZ2UgYmVmb3JlIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJ0dGwtY2hlY2staG91ciI6IkhvdyBvZnRlbiB3aWxsIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gZGF5cyB0aGF0IHN0b3JhZ2Ugd2lsbCBzYXZlIGRhdGEiLGNvbW1hbmRzOiJDb21tYW5kcyBmb3IgY29sbGVjdGluZyBhZGRpdGlvbmFsIHN0YXRpc3RpYyIsYXR0cmlidXRlOiJTdGF0aXN0aWMgdGVsZW1ldHJ5IGtleSIsdGltZW91dDoiVGltZW91dCBmb3IgY29tbWFuZCBleGVjdXRpbmciLGNvbW1hbmQ6IlRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLCB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciB0ZWxlbWV0cnkiLCJjaGVjay1kZXZpY2UtYWN0aXZpdHkiOiJFbmFibGVzIG1vbml0b3IgdGhlIGFjdGl2aXR5IG9mIGVhY2ggY29ubmVjdGVkIGRldmljZSIsImluYWN0aXZpdHktdGltZW91dCI6IlRpbWUgYWZ0ZXIgd2hvc2UgdGhlIGdhdGV3YXkgd2lsbCBkaXNjb25uZWN0IGRldmljZSIsImluYWN0aXZpdHktcGVyaW9kIjoiUGVyaW9kaWNpdHkgb2YgZGV2aWNlIGFjdGl2aXR5IGNoZWNrIiwibWluaW1hbC1wYWNrLWRlbGF5IjoiRGVsYXkgYmV0d2VlbiBzZW5kaW5nIHBhY2tzIG9mIG1lc3NhZ2VzIChEZWNyZWFzaW5nIHRoaXMgc2V0dGluZyByZXN1bHRzIGluIGluY3JlYXNlZCBDUFUgdXNhZ2UpIixxb3M6IlF1YWxpdHkgb2YgU2VydmljZSBpbiBNUVRUIG1lc3NhZ2luZyAoMCAtIGF0IG1vc3Qgb25jZSwgMSAtIGF0IGxlYXN0IG9uY2UpIiwic2VydmVyLXBvcnQiOiJOZXR3b3JrIHBvcnQgb24gd2hpY2ggR1JQQyBzZXJ2ZXIgd2lsbCBsaXN0ZW4gZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLiIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiTWF4aW11bSB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgZm9yIGEga2VlcGFsaXZlIHBpbmcgcmVzcG9uc2UgYmVmb3JlIGNvbnNpZGVyaW5nIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYXRpb24gYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBSUEMgY2FsbC4iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4aW11bSBudW1iZXIgb2Yga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgdGhhdCB0aGUgc2VydmVyIGNhbiBzZW5kIHdpdGhvdXQgcmVjZWl2aW5nIGFueSBkYXRhIGJlZm9yZSBpdCBjb25zaWRlcnMgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGJlaW5nIHNlbnQgb3IgcmVjZWl2ZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJBbGxvdyBzZXJ2ZXIgdG8ga2VlcCB0aGUgR1JQQyBjb25uZWN0aW9uIGFsaXZlIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIFJQQyBjYWxscy4ifX0sS289eyJhZGQtZW50cnkiOiJBZGljaW9uYXIgY29uZmlndXJhw6fDo28iLCJjb25uZWN0b3ItYWRkIjoiQWRpY2lvbmFyIG5vdm8gY29uZWN0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkhhYmlsaXRhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tZSBkbyBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTyBub21lIGRvIGNvbmVjdG9yIMOpIG9icmlnYXTDs3Jpby4iLCJjb25uZWN0b3ItdHlwZSI6IlRpcG8gZGUgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6Ik8gdGlwbyBkZSBjb25lY3RvciDDqSBvYnJpZ2F0w7NyaW8uIixjb25uZWN0b3JzOiJDb25maWd1cmHDp8OjbyBkZSBjb25lY3RvcmVzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JpYXIgdW0gbm92byBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJUZW0gY2VydGV6YSBkZSBxdWUgZGVzZWphIGNyaWFyIHVtIG5vdm8gZ2F0ZXdheSBjb20gbyBub21lOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiRXhjbHVpciBjb25maWd1cmHDp8OjbyIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGRlIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkrDoSBleGlzdGUgdW0gZGlzcG9zaXRpdm8gY29tIG8gbWVzbW8gbm9tZS4iLCJnYXRld2F5LW5hbWUiOiJOb21lIGRvIGdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJPIG5vbWUgZG8gZ2F0ZXdheSDDqSBvYnJpZ2F0w7NyaW8uIiwiZ2F0ZXdheS1zYXZlZCI6IkEgY29uZmlndXJhw6fDo28gZG8gZ2F0ZXdheSBmb2kgc2FsdmEgY29ycmV0YW1lbnRlLiIsImpzb24tcGFyc2UiOiJKU09OIGludsOhbGlkby4iLCJqc29uLXJlcXVpcmVkIjoiTyBjYW1wbyBuw6NvIHBvZGUgZXN0YXIgZW0gYnJhbmNvLiIsIm5vLWNvbm5lY3RvcnMiOiJTZW0gY29uZWN0b3JlcyIsIm5vLWRhdGEiOiJTZW0gY29uZmlndXJhw6fDtWVzIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5lbmh1bSBnYXRld2F5IGVuY29udHJhZG8uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG7Do28gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJDYW1pbmhvIHBhcmEgYXJxdWl2b3MgZGUgbG9nIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiTyBjYW1pbmhvIMOpIG9icmlnYXTDs3JpbyIscmVtb3RlOiJDb25maWd1cmHDp8OjbyByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik7DrXZlbCBkZSByZWdpc3RybyBlbSBsb2ciLCJyZW1vdmUtZW50cnkiOiJSZW1vdmVyIGNvbmZpZ3VyYcOnw6NvIiwic2F2ZS10aXAiOiJTYWx2YXIgYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyIsInNlY3VyaXR5LXR5cGUiOiJUaXBvIGRlIHNlZ3VyYW7Dp2EiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkZSBBY2Vzc28iLHRsczoiVExTIn0sc3RvcmFnZToiQXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJxdWl2byIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTsO6bWVybyBtw6F4aW1vIGRlIGFycXVpdm9zIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gw6kgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik8gbsO6bWVybyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gZGUgcmVnaXN0cm9zIMOpIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTyBuw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIMOpIG9icmlnYXTDs3Jpby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIMOpIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik8gbsO6bWVybyBuw6NvIMOpIHbDoWxpZG8uIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJPIHRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1wYXRoIjoiQ2FtaW5obyBkZSBhcm1hemVuYW1lbnRvIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiTyBjYW1pbmhvIGRlIGFybWF6ZW5hbWVudG8gw6kgb2JyaWdhdMOzcmlvLiIsInN0b3JhZ2UtdHlwZSI6IlRpcG8gZGUgYXJtYXplbmFtZW50byIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQXJtYXplbmFtZW50byBkZSBhcnF1aXZvIiwibWVtb3J5LXN0b3JhZ2UiOiJBcm1hemVuYW1lbnRvIGRlIG1lbcOzcmlhIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikhvc3QgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiTyBob3N0IMOpIG9icmlnYXTDs3Jpby4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydGEgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik8gbsO6bWVybyBtw6F4aW1vIGRlIHBvcnRhcyDDqSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIGRlIHBvcnRhcyDDqSAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IkEgcG9ydGEgbsOjbyDDqSB2w6FsaWRhLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJBIHBvcnRhIMOpIG9icmlnYXTDs3JpYS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IkNvbmZpZyBUaWR5IEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmHDp8OjbyBkbyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IkNhbWluaG8gcGFyYSBjZXJ0aWZpY2FkbyBkZSBBdXRvcmlkYWRlIGRlIENlcnRpZmljYcOnw6NvIG5vIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDYW1pbmhvIHBhcmEgY2VydGlmaWNhZG8gZGUgY2xpZW50ZSBubyBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJDYW1pbmhvIHBhcmEgY2hhdmUgcHJpdmFkYSBubyBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJBbHRlcm5hciB0ZWxhIGludGVpcmEiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYcOnw6NvIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkaWNpb25hci9hdHVhbGl6YXIgY29uZmlndXJhw6fDo28gZGUgSlNPTiJ9LCRvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2lqbyIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3YgcHJpa2xqdcSNZWsiLCJjb25uZWN0b3ItZW5hYmxlZCI6Ik9tb2dvxI1pIHByaWtsanXEjWVrIiwiY29ubmVjdG9yLW5hbWUiOiJJbWUgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkltZSBwcmlrbGp1xI1rYSBqZSBvYnZlem5vLiIsImNvbm5lY3Rvci10eXBlIjoiVnJzdGEgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IlphaHRldmEgc2UgdnJzdGEgcHJpa2xqdcSNa2EuIixjb25uZWN0b3JzOiJLb25maWd1cmFjaWphIHByaWtsanXEjWtvdiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlVzdHZhcmkgbm92IHByZWhvZCIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQWxpIHN0ZSBwcmVwcmnEjWFuaSwgZGEgxb5lbGl0ZSB1c3R2YXJpdGkgbm92IHByZWhvZCB6IGltZW5vbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6Ikl6YnJpxaFpIGtvbmZpZ3VyYWNpam8iLCJkb3dubG9hZC10aXAiOiJQcmVub3Mga29uZmlndXJhY2lqc2tlIGRhdG90ZWtlIixnYXRld2F5OiJQcmVob2QiLCJnYXRld2F5LWV4aXN0cyI6Ik5hcHJhdmEgeiBpc3RpbSBpbWVub20gxb5lIG9ic3RhamEuIiwiZ2F0ZXdheS1uYW1lIjoiSW1lIHByZWhvZGEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJJbWUgcHJlaG9kYSBqZSBvYnZlem5vLiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjaWphIHByZWhvZGEgamUgdXNwZcWhbm8gc2hyYW5qZW5hLiIsImpzb24tcGFyc2UiOiJOZXZlbGphdmVuIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGplIG5lIHNtZSBiaXRpIHByYXpuby4iLCJuby1jb25uZWN0b3JzIjoiTmkgcHJpa2xqdcSNa292Iiwibm8tZGF0YSI6IkJyZXoga29uZmlndXJhY2lqIiwibm8tZ2F0ZXdheS1mb3VuZCI6IlByZWhvZCBuaSBuYWpkZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pIG1vZ2/EjWUgbmFqdGkuIiwicGF0aC1sb2dzIjoiUG90IGRvIGRuZXZuacWha2loIGRhdG90ZWsiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQb3QgamUgb2J2ZXpuYS4iLHJlbW90ZToiT2RkYWxqZW5hIGtvbmZpZ3VyYWNpamEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJhdmVuIGJlbGXFvmVuamEiLCJyZW1vdmUtZW50cnkiOiJPZHN0cmFuaSBrb25maWd1cmFjaWpvIiwic2F2ZS10aXAiOiJTaHJhbmkga29uZmlndXJhY2lqc2tvIGRhdG90ZWtvIiwic2VjdXJpdHktdHlwZSI6IlZyc3RhIHphxaHEjWl0ZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkRvc3RvcG5pIMW+ZXRvbiIsdGxzOiJUTFMifSxzdG9yYWdlOiJTaHJhbWJhIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgZGF0b3Rla2kiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik5hanZlxI1qZSDFoXRldmlsbyBkYXRvdGVrIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLFoHRldmlsa2EgamUgb2J2ZXpuYS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgcG9tbmlsbmlrdSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyB6YXBpc292IGplIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoixaB0ZXZpbGthIG5pIHZlbGphdm5hLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJaYWh0ZXZhbiBqZSBuYWp2ZcSNIHphcGlzb3YuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJOYWp2ZcSNamEgdmVsaWtvc3QgcGFrZXRhIGRvZ29ka292Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJaYWh0ZXZhbmEgamUgbmFqdmXEjWphIHZlbGlrb3N0IHBha2V0YSBkb2dvZGtvdi4iLCJzdG9yYWdlLXBhdGgiOiJQb3QgcG9tbmlsbmlrYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlphaHRldmFuYSBqZSBwb3QgZG8gcG9tbmlsbmlrYS4iLCJzdG9yYWdlLXR5cGUiOiJWcnN0YSBwb21uaWxuaWthIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJTaHJhbWJhIGRhdG90ZWsiLCJtZW1vcnktc3RvcmFnZSI6IlNwb21pbiBwb21uaWxuaWthIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikdvc3RpdGVsaiBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJQb3RyZWJlbiBqZSBnb3N0aXRlbGouIiwidGhpbmdzYm9hcmQtcG9ydCI6IlZyYXRhIFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJOYWp2ZcSNamEgxaF0ZXZpbGthIHZyYXQgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJOYWptYW5qxaFhIMWhdGV2aWxrYSB2cmF0IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiVnJhdGEgbmlzbyB2ZWxqYXZuYS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG90cmVibmEgc28gdnJhdGEuIix0aWR5OiJVcmVqZW5vIiwidGlkeS10aXAiOiJVcmVqZW5hIGtvbmZpZ3VyYWNpamEgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IktvbmZpZ3VyYWNpamEga29uZWt0b3JqYSB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBvdCBkbyBwb3RyZGlsYSBDQSBuYSBwcmVob2R1IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUG90IGRvIHBvdHJkaWxhIHN0cmFua2UgbmEgcHJlaG9kdSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUG90IGRvIHphc2VibmVnYSBrbGp1xI1hIG5hIHByZWhvZHUiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlByZWtsb3AgbmEgY2Vsb3phc2xvbnNraSBuYcSNaW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNpamEgSlNPTiAqIiwidXBkYXRlLWNvbmZpZyI6IkRvZGFqIC8gcG9zb2RvYmkga29uZmlndXJhY2lqbyBKU09OIn0sWW89eyJhZGQtZW50cnkiOiJZYXDEsWxhbmTEsXJtYSBla2xlIiwiY29ubmVjdG9yLWFkZCI6IlllbmkgYmHEn2xhecSxY8SxIGVrbGUiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkJhxJ9sYXnEsWPEsXnEsSBldGtpbmxlxZ90aXIiLCJjb25uZWN0b3ItbmFtZSI6IkJhxJ9sYXnEsWPEsSBhZMSxIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJCYcSfbGF5xLFjxLEgYWTEsSBnZXJla2xpLiIsImNvbm5lY3Rvci10eXBlIjoiQmHEn2xhecSxY8SxIHRpcGkiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkJhxJ9sYXnEsWPEsSB0w7xyw7wgZ2VyZWtsaS4iLGNvbm5lY3RvcnM6IkJhxJ9sYXnEsWPEsWxhcsSxbiB5YXDEsWxhbmTEsXJtYXPEsSIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVyIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiIne3tnYXRld2F5TmFtZX19JyBhZMSxbmRhIHllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo/IixkZWxldGU6IllhcMSxbGFuZMSxcm1hecSxIHNpbCIsImRvd25sb2FkLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGluZGlyaW4iLGdhdGV3YXk6IkHEnyBnZcOnaWRpIiwiZ2F0ZXdheS1leGlzdHMiOiJBeW7EsSBhZGEgc2FoaXAgY2loYXogemF0ZW4gdmFyLiIsImdhdGV3YXktbmFtZSI6IkHEnyBnZcOnaWRpIGFkxLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJBxJ8gZ2XDp2lkaSBhZMSxIGdlcmVrbGkuIiwiZ2F0ZXdheS1zYXZlZCI6IkHEnyBnZcOnaWRpIHlhcMSxbGFuZMSxcm1hc8SxIGJhxZ9hcsSxeWxhIGtheWRlZGlsZGkuIiwianNvbi1wYXJzZSI6Ikdlw6dlcmxpIGJpciBKU09OIGRlxJ9pbC4iLCJqc29uLXJlcXVpcmVkIjoiQWxhbiBib8WfIG9sYW1hei4iLCJuby1jb25uZWN0b3JzIjoiQmHEn2xhecSxY8SxIHlvayIsIm5vLWRhdGEiOiJZYXDEsWxhbmTEsXJtYSB5b2siLCJuby1nYXRld2F5LWZvdW5kIjoiQcSfIGdlw6dpZGkgYnVsdW5hbWFkxLEuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIGJ1bHVuYW1hZMSxLiIsInBhdGgtbG9ncyI6IkxvZyBkb3N5YWxhcsSxIHlvbHUiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJMb2cgZG9zeWFsYXLEsSBkaXppbmkgZ2VyZWtsaS4iLHJlbW90ZToiVXpha3RhbiB5YXDEsWxhbmTEsXJtYSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nbGFtYSBzZXZpeWVzaSIsInJlbW92ZS1lbnRyeSI6IllhcMSxbGFuZMSxcm1hecSxIGthbGTEsXIiLCJzYXZlLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGtheWRldCIsInNlY3VyaXR5LXR5cGUiOiJHw7x2ZW5saWsgdMO8csO8Iiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiQWNjZXNzIFRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IkRlcG9sYW1hIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiRG9zeWFkYWtpIG1ha3NpbXVtIGthecSxdCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc2ltdW0gZG9zeWEgc2F5xLFzxLEiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIHNhecSxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJTYXnEsSBnZcOnZXJsaSBkZcSfaWwuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJTYXnEsSBnZXJla2xpLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJEZXBvZGFraSBtYWtzaW11bSBrYXnEsXQiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0ga2F5xLF0IHNhecSxc8SxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlNhecSxIGdlw6dlcmxpIGRlxJ9pbC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWFrc2ltdW0ga2F5xLF0IGdlcmVrbGkuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYWtzaW11bSBldGtpbmxpayBwYWtldGkgYm95dXR1Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW11bSBzYXnEsSAxJ2Rpci4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiU2F5xLEgZ2XDp2VybGkgZGXEn2lsLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrc2ltdW0gZXRraW5saWsgcGFrZXRpIGJveXV0dSBnZXJla2xpLiIsInN0b3JhZ2UtcGF0aCI6IkRlcG9sYW1hIHlvbHUiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJEZXBvbGFtYSB5b2x1IGdlcmVrbGkuIiwic3RvcmFnZS10eXBlIjoiRGVwb2xhbWEgdMO8csO8Iiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJEb3N5YSBkZXBvbGFtYSIsIm1lbW9yeS1zdG9yYWdlIjoiQmVsbGVrIGRlcG9sYW1hIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJkIGhvc3QiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiSG9zdCBnZXJla2xpLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzaW11bSBwb3J0IG51bWFyYXPEsSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltdW0gcG9ydCBudW1hcmFzxLEgMSdkaXIuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBnZcOnZXJsaSBkZcSfaWwuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgZ2VyZWtsaS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IlRpZHkgY29uZmlnIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25uZWN0b3Ige3t0eXBlTmFtZX19IGNvbmZpZ3VyYXRpb24iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgb24gZ2F0ZXdheSIsInRvZ2dsZS1mdWxsc2NyZWVuIjoiVG9nZ2xlIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWRkL3VwZGF0ZSBjb25maWd1cmF0aW9uIEpTT04ifSxRbz17ImFkZC1lbnRyeSI6Iua3u+WKoOmFjee9riIsYWR2YW5jZWQ6IumrmOe6pyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IuajgOafpeiuvuWkh+a0u+WKqCIsY29tbWFuZDoiRG9ja2Vy5ZG95LukIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlcuWRveS7pOW3suWkjeWItuWIsOWJqui0tOadvyIsY29uZmlndXJhdGlvbjoi6YWN572uIiwiY29ubmVjdG9yLWFkZCI6Iua3u+WKoOi/nuaOpeWZqCIsImNvbm5lY3Rvci1lbmFibGVkIjoi5ZCv55So6L+e5o6l5ZmoIiwiY29ubmVjdG9yLW5hbWUiOiLov57mjqXlmajlkI3np7AiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Iui/nuaOpeWZqOWQjeensOW/heWhq+OAgiIsImNvbm5lY3Rvci10eXBlIjoi6L+e5o6l5Zmo57G75Z6LIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiLov57mjqXlmajnsbvlnovlv4XloavjgIIiLGNvbm5lY3RvcnM6Iui/nuaOpeWZqOmFjee9riIsImNvbm5lY3RvcnMtY29uZmlnIjoi6L+e5o6l5Zmo6YWN572uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoi5bey5ZCv55SoIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi5ZCN56ewIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoi57G75Z6LIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiLnirbmgIEiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiLmk43kvZwiLCJjb25uZWN0b3JzLXRhYmxlLWtleSI6IumUriIsImNvbm5lY3RvcnMtdGFibGUtY2xhc3MiOiLnsbsiLCJycGMtY29tbWFuZC1zZW5kIjoi5Y+R6YCBIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi57uT5p6cIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLnvJbovpHlj4LmlbAiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLpgJrnlKjphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLliJvlu7rnvZHlhbMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuehruWumuimgeWIm+W7uuWQjeS4uiAne3tnYXRld2F5TmFtZX19JyDnmoTmlrDnvZHlhbPvvJ8iLCJjcmVhdGVkLXRpbWUiOiLliJvlu7rml7bpl7QiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoi6YWN572u5bCG6KKr5Yig6ZmkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiLlj6rmnInlr7nnvZHlhbPov5vooYzniannkIborr/pl67ml7bvvIzmiY3mnInlj6/og73lhbPpl63ov5znqIvphY3nva7jgILmiYDmnInlhYjliY3nmoTphY3nva7pg73lsIbooqvliKDpmaTjgII8YnI+PGJyPlxu6KaB5YWz6Zet6YWN572u77yM6K+35Zyo5LiL6Z2i6L6T5YWl572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0Ijoi572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoi572R5YWz5ZCN56ew5piv5b+F6ZyA55qEIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLlhbPpl60iLGRlbGV0ZToi5Yig6Zmk6YWN572uIiwiZG93bmxvYWQtdGlwIjoi5LiL6L296YWN572uIiwiZHJvcC1maWxlIjoi5bCG5paH5Lu25ouW5pS+5Yiw5q2k5aSE5oiWIixnYXRld2F5OiLnvZHlhbMiLCJnYXRld2F5LWV4aXN0cyI6IuWQjOWQjeiuvuWkh+W3suWtmOWcqOOAgiIsImdhdGV3YXktbmFtZSI6Iue9keWFs+WQjeensCIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Iue9keWFs+WQjeensOW/heWhq+OAgiIsImdhdGV3YXktc2F2ZWQiOiLlt7LmiJDlip/kv53lrZjnvZHlhbPphY3nva7jgIIiLGdycGM6IkdSUEMiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuS/neaMgei/nuaOpei2heaXtu+8iOavq+enku+8iSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoi6ZyA6KaB5L+d5oyB6L+e5o6l6LaF5pe2IiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi5L+d5oyB6L+e5o6l6LaF5pe25LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXBhdHRlcm4iOiLkv53mjIHov57mjqXotoXml7bml6DmlYgiLCJncnBjLWtlZXAtYWxpdmUiOiLkv53mjIHov57mjqXvvIjmr6vnp5LvvIkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLpnIDopoHkv53mjIHov57mjqUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoi5L+d5oyB6L+e5o6l5LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoi5L+d5oyB6L+e5o6l5peg5pWIIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi5pyA5bCPUGluZ+mXtOmalO+8iOavq+enku+8iSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6IumcgOimgeacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoi5pyA5bCPUGluZ+mXtOmalOS4jeiDveWwj+S6jjEiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVybiI6IuacgOWwj1Bpbmfpl7TpmpTml6DmlYgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6IuaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpTvvIjmr6vnp5LvvIkiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5LiN6IO95bCP5LqOMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5peg5pWIIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbAiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsOS4jeiDveWwj+S6jjEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6IuaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbDml6DmlYgiLCJpbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzIjoi5LiN5rS76LeD5qOA5p+l5pyf77yI56eS77yJIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IumcgOimgeS4jea0u+i3g+ajgOafpeacnyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoi5LiN5rS76LeD5qOA5p+l5pyf5LiN6IO95bCP5LqOMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+ajgOafpeacn+aXoOaViCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi5LiN5rS76LeD6LaF5pe277yI56eS77yJIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiLpnIDopoHkuI3mtLvot4PotoXml7YiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiLkuI3mtLvot4PotoXml7bkuI3og73lsI/kuo4xIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+i2heaXtuaXoOaViCIsImpzb24tcGFyc2UiOiLml6DmlYjnmoRKU09O44CCIiwianNvbi1yZXF1aXJlZCI6IuWtl+auteS4jeiDveS4uuepuuOAgiIsbG9nczp7bG9nczoi5pel5b+XIixkYXlzOiLlpKkiLGhvdXJzOiLlsI/ml7YiLG1pbnV0ZXM6IuWIhumSnyIsc2Vjb25kczoi56eSIiwiZGF0ZS1mb3JtYXQiOiLml6XmnJ/moLzlvI8iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IumcgOimgeaXpeacn+agvOW8jyIsImxvZy1mb3JtYXQiOiLml6Xlv5fmoLzlvI8iLCJsb2ctdHlwZSI6IuaXpeW/l+exu+WeiyIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiLpnIDopoHml6Xlv5fmoLzlvI8iLHJlbW90ZToi6L+c56iL5pel5b+X6K6w5b2VIiwicmVtb3RlLWxvZ3MiOiLov5znqIvml6Xlv5ciLGxvY2FsOiLmnKzlnLDml6Xlv5forrDlvZUiLGxldmVsOiLml6Xlv5fnuqfliKsiLCJmaWxlLXBhdGgiOiLmlofku7bot6/lvoQiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHmlofku7bot6/lvoQiLCJzYXZpbmctcGVyaW9kIjoi5pel5b+X5L+d5a2Y5pyf6ZmQIiwic2F2aW5nLXBlcmlvZC1taW4iOiLml6Xlv5fkv53lrZjmnJ/pmZDkuI3og73lsI/kuo4xIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IumcgOimgeaXpeW/l+S/neWtmOacn+mZkCIsImJhY2t1cC1jb3VudCI6IuWkh+S7veaVsOmHjyIsImJhY2t1cC1jb3VudC1taW4iOiLlpIfku73mlbDph4/kuI3og73lsI/kuo4xIiwiYmFja3VwLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB5aSH5Lu95pWw6YePIn0sIm1pbi1wYWNrLXNlbmQtZGVsYXkiOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/vvIjmr6vnp5LvvIkiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoi5pyA5bCP5YyF5Y+R6YCB5bu26L+f5piv5b+F6ZyA55qEIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/kuI3og73lsI/kuo4wIiwibm8tY29ubmVjdG9ycyI6IuaXoOi/nuaOpeWZqCIsIm5vLWRhdGEiOiLmsqHmnInphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw572R5YWz44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IuacquaJvuWIsCAne3tpdGVtfX0nIOOAgiIsInBhdGgtbG9ncyI6IuaXpeW/l+aWh+S7tueahOi3r+W+hCIsInBhdGgtbG9ncy1yZXF1aXJlZCI6Iui3r+W+hOaYr+W/hemcgOeahOOAgiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5L+d5oyB6L+e5o6l6K645Y+v77yM5peg6ZyA5ZON5bqUIixyZW1vdGU6Iui/nOeoi+mFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel5b+X6K6w5b2V57qn5YirIiwicmVtb3ZlLWVudHJ5Ijoi5Yig6Zmk6YWN572uIiwicmVtb3RlLXNoZWxsIjoi6L+c56iLU2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Iui/nOeoi+mFjee9riIsb3RoZXI6IuWFtuS7liIsInNhdmUtdGlwIjoi5L+d5a2Y6YWN572uIiwic2VjdXJpdHktdHlwZSI6IuWuieWFqOexu+WeiyIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Iuiuv+mXruS7pOeJjCIsInVzZXJuYW1lLXBhc3N3b3JkIjoi55So5oi35ZCN5ZKM5a+G56CBIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDorr/pl67ku6TniYwiLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyDnp4HpkqUifSwic2VydmVyLXBvcnQiOiLmnI3liqHlmajnq6/lj6MiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoi57uf6K6h5L+h5oGvIixzdGF0aXN0aWNzOiLnu5/orqHkv6Hmga8iLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLml6Dlj6/nlKjnu5/orqHkv6Hmga8iLGNvbW1hbmRzOiLlkb3ku6QiLCJzZW5kLXBlcmlvZCI6Iue7n+iuoeS/oeaBr+WPkemAgeWRqOacn++8iOenku+8iSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5piv5b+F6ZyA55qEIiwic2VuZC1wZXJpb2QtbWluIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5LiN6IO95bCP5LqONjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5peg5pWIIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u77yI56eS77yJIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u5piv5b+F6ZyA55qEIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IuajgOafpei/nuaOpeWZqOmFjee9ruS4jeiDveWwj+S6jjEiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVybiI6IuajgOafpei/nuaOpeWZqOmFjee9ruaXoOaViCIsYWRkOiLmt7vliqDlkb3ku6QiLHRpbWVvdXQ6Iui2heaXtuaXtumXtCIsInRpbWVvdXQtbXMiOiLotoXml7bml7bpl7TvvIjmr6vnp5LvvIkiLCJ0aW1lb3V0LXJlcXVpcmVkIjoi6LaF5pe25pe26Ze05piv5b+F6ZyA55qEIiwidGltZW91dC1taW4iOiLotoXml7bml7bpl7TkuI3og73lsI/kuo4xIiwidGltZW91dC1wYXR0ZXJuIjoi6LaF5pe25pe26Ze05peg5pWIIiwiYXR0cmlidXRlLW5hbWUiOiLlsZ7mgKflkI3np7AiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IuWxnuaAp+WQjeensOaYr+W/hemcgOeahCIsY29tbWFuZDoi5ZG95LukIiwiY29tbWFuZC1yZXF1aXJlZCI6IuWRveS7pOaYr+W/hemcgOeahCIsImNvbW1hbmQtcGF0dGVybiI6IuWRveS7pOaXoOaViCIscmVtb3ZlOiLliKDpmaTlkb3ku6QifSxzdG9yYWdlOiLlrZjlgqgiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiLmlofku7bkuK3nmoTmnIDlpKforrDlvZXmlbAiLCJzdG9yYWdlLW1heC1maWxlcyI6IuacgOWkp+aWh+S7tuaVsCIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLmlbDlrZfmmK/lv4XpnIDnmoTjgIIiLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoi5a2Y5YKo5Lit55qE5pyA5aSn6K6w5b2V5pWwIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6IuacgOWkp+iusOW9lemhueW/heWhq+OAgiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6IuacgOWwj+iusOW9leaVsOS4ujHjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiLmlbDlrZfkuI3lkIjms5XjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB6K+75Y+W6K6w5b2V5pWw44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTmnIDlpKfor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6IuaVsOWtl+S4jeWQiOazleOAgiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi5pyA5aSn6K+75Y+W6K6w5b2V5pWw5b+F6ZyA44CCIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoi5pWw5o2u5paH5Lu25aS56Lev5b6EIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoi6ZyA6KaB5pWw5o2u5paH5Lu25aS56Lev5b6E44CCIiwic3RvcmFnZS1wYWNrLXNpemUiOiLmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi5pyA5aSn5LqL5Lu25YyF5aSn5bCP5b+F5aGr44CCIiwic3RvcmFnZS1wYXRoIjoi5a2Y5YKo6Lev5b6EIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoi5a2Y5YKo6Lev5b6E5b+F5aGr44CCIiwic3RvcmFnZS10eXBlIjoi5a2Y5YKo57G75Z6LIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiLmlofku7blrZjlgqgiLCJtZW1vcnktc3RvcmFnZSI6IuWGheWtmOWtmOWCqCIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IuW4uOinhCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZOS4u+acuiIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiLkuLvmnLrlv4XloavjgIIiLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmTnq6/lj6MiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IuacgOWkp+err+WPo+WPt+S4ujY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/nq6/lj6Plj7fkuLox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi56uv5Y+j5peg5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Iuerr+WPo+W/heWhq+OAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6L+e5o6l5ZmoIHt7dHlwZU5hbWV9fSDphY3nva4iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6Iue9keWFs+S4ikNB6K+B5Lmm55qE6Lev5b6EIiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoi572R5YWz5LiK5a6i5oi356uv6K+B5Lmm55qE6Lev5b6EIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi5raI5oGvVFRM5qOA5p+l5bCP5pe25pWwIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi6ZyA6KaB5o+Q5L6b5raI5oGvVFRM5qOA5p+l5bCP5pe25pWw44CCIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoi5raI5oGvVFRM5aSp5pWwIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiLpnIDopoHmj5Dkvpvmtojmga9UVEzlpKnmlbDjgIIiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiLpnIDopoHmj5DkvptRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IlFvU+WAvOeahOiMg+WbtOaYr+S7jjDliLAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLnvZHlhbPkuIrnp4HpkqXnmoTot6/lvoQiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IuWIh+aNouWFqOWxjyIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoi6YWN572uSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoi5re75YqgL+abtOaWsOmFjee9rkpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvphY3nva7lkoznrqHnkIYiLCJyZW1vdGUtc2hlbGwiOiLpgJrov4fov5znqItTaGVsbOWwj+mDqOS7tuWQr+eUqOWvuee9keWFs+aTjeS9nOezu+e7n+eahOi/nOeoi+aOp+WItiIsaG9zdDoiVGhpbmdzQm9hcmQg5Li75py65ZCN5oiWSVDlnLDlnYAiLHBvcnQ6IlRoaW5nc0JvYXJkIE1RVFTmnI3liqHnq6/lj6MiLHRva2VuOiJUaGluZ3NCb2FyZCDnvZHlhbPorr/pl67ku6TniYwiLCJjbGllbnQtaWQiOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU5a6i5oi356uvSUQiLHVzZXJuYW1lOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU55So5oi35ZCNIixwYXNzd29yZDoiVGhpbmdzQm9hcmQg572R5YWzTVFUVOWvhueggSIsImNhLWNlcnQiOiJDQeivgeS5puaWh+S7tueahOi3r+W+hCIsImRhdGUtZm9ybSI6IuaXpeW/l+a2iOaBr+S4reeahOaXpeacn+agvOW8jyIsImRhdGEtZm9sZGVyIjoi5YyF5ZCr5pWw5o2u55qE5paH5Lu25aS555qE6Lev5b6E77yI55u45a+55oiW57ud5a+56Lev5b6E77yJIiwibG9nLWZvcm1hdCI6IuaXpeW/l+a2iOaBr+agvOW8jyIsInJlbW90ZS1sb2ciOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvml6Xlv5forrDlvZXlkozml6Xlv5for7vlj5YiLCJiYWNrdXAtY291bnQiOiLlpoLmnpzlpIfku73orqHmlbDlpKfkuo4w77yM5YiZ5Zyo5omn6KGM6L2u5o2i5pe277yM5pyA5aSa5L+d55WZ5aSH5Lu96K6h5pWw5Liq5paH5Lu2LeacgOaXp+eahOaWh+S7tuWwhuiiq+WIoOmZpCIsc3RvcmFnZToi5o+Q5L6b5bCG5pWw5o2u5Y+R6YCB5Yiw5bmz5Y+w5LmL5YmN5L+d5a2Y5Lyg5YWl5pWw5o2u55qE6YWN572uIiwibWF4LWZpbGUtY291bnQiOiLlsIbliJvlu7rnmoTmlofku7bnmoTmnIDlpKfmlbDph48iLCJtYXgtcmVhZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiLkuIDkuKrmlofku7bkuK3lrZjlgqjnmoTmnIDlpKforrDlvZXmlbAiLCJyZWFkLXJlY29yZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiLlnKjlsIbmlbDmja7lj5HpgIHliLBUaGluZ3NCb2FyZOS5i+WJje+8jOWtmOWCqOS4reeahOacgOWkp+aVsOaNruiuoeaVsCIsInR0bC1jaGVjay1ob3VyIjoi572R5YWz5aSa5LmF5qOA5p+l5LiA5qyh5pWw5o2u5piv5ZCm6L+H5pe2IiwidHRsLW1lc3NhZ2VzLWRheSI6IuWtmOWCqOWwhuS/neWtmOaVsOaNrueahOacgOWkp+WkqeaVsCIsY29tbWFuZHM6IueUqOS6juaUtumbhumZhOWKoOe7n+iuoeS/oeaBr+eahOWRveS7pCIsYXR0cmlidXRlOiLnu5/orqHpgaXmtYvplK4iLHRpbWVvdXQ6IuWRveS7pOaJp+ihjOeahOi2heaXtuaXtumXtCIsY29tbWFuZDoi5ZG95Luk5omn6KGM55qE57uT5p6c77yM5bCG55So5L2c6YGl5rWL55qE5YC8IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5Ijoi5ZCv55So55uR6KeG5q+P5Liq6L+e5o6l6K6+5aSH55qE5rS75YqoIiwiaW5hY3Rpdml0eS10aW1lb3V0Ijoi5Zyo5q2k5pe26Ze05ZCO77yM572R5YWz5bCG5pat5byA6K6+5aSH55qE6L+e5o6lIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLorr7lpIfmtLvliqjmo4Dmn6XnmoTlkajmnJ8iLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLlj5HpgIHmtojmga/ljIXkuYvpl7TnmoTlu7bov5/vvIjlh4/lsI/mraTorr7nva7kvJrlr7zoh7Tlop7liqBDUFXkvb/nlKjnjofvvIkiLHFvczoiTVFUVOa2iOaBr+S8oOmAkueahOacjeWKoei0qOmHj++8iDAt6Iez5aSa5LiA5qyh77yMMS3oh7PlsJHkuIDmrKHvvIkiLCJzZXJ2ZXItcG9ydCI6IkdSUEPmnI3liqHlmajkvqblkKzkvKDlhaXov57mjqXnmoTnvZHnu5znq6/lj6MiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuWcqOiAg+iZkei/nuaOpeatu+S6oeS5i+WJje+8jOacjeWKoeWZqOetieW+hWtlZXBhbGl2ZSBwaW5n5ZON5bqU55qE5pyA6ZW/5pe26Ze0IiwiZ3JwYy1rZWVwLWFsaXZlIjoi5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25Lik5Liq6L+e57uta2VlcGFsaXZlIHBpbmfmtojmga/kuYvpl7TnmoTmjIHnu63ml7bpl7QiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6IuWcqOayoeacieaOpeaUtuWIsOS7u+S9leaVsOaNruS5i+WJje+8jOacjeWKoeWZqOWPr+S7peWPkemAgeeahGtlZXBhbGl2ZSBwaW5n5raI5oGv55qE5pyA5aSn5pWw6YeP77yM54S25ZCO5bCG6L+e5o6l6KeG5Li65q275LqhIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiLlnKjmsqHmnInlj5HpgIHmiJbmjqXmlLbmlbDmja7ml7bvvIzmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5YWB6K645pyN5Yqh5Zmo5Zyo5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25L+d5oyBR1JQQ+i/nuaOpea0u+WKqCJ9LCJkb2NrZXItbGFiZWwiOiLkvb/nlKjku6XkuIvmjIfku6TlnKggRG9ja2VyIGNvbXBvc2Ug5Lit6L+Q6KGMIElvVCDnvZHlhbPvvIzlubbkuLrpgInlrprnmoTorr7lpIfmj5Dkvpvlh63mja4iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi5L2/55So5Lul5LiL6K+05piO5LiL6L2944CB5a6J6KOF5ZKM6K6+572uIERvY2tlciBDb21wb3NlIiwiZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlIjoi5LiL6L296YWN572u5paH5Lu2IiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLkuIvovb3mgqjnmoTnvZHlhbPnmoQgZG9ja2VyLWNvbXBvc2UueW1sIOaWh+S7tiIsImxhdW5jaC1nYXRld2F5Ijoi5ZCv5Yqo572R5YWzIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoi5Zyo5YyF5ZCrIGRvY2tlci1jb21wb3NlLnltbCDmlofku7bnmoTmlofku7blpLnkuK3vvIzkvb/nlKjku6XkuIvlkb3ku6TlnKjnu4jnq6/kuK3lkK/liqjnvZHlhbMifSxKbz17ImFkZC1lbnRyeSI6IuWinuWKoOmFjee9riIsImNvbm5lY3Rvci1hZGQiOiLlop7liqDmlrDpgKPmjqXlmagiLCJjb25uZWN0b3ItZW5hYmxlZCI6IuWVn+eUqOmAo+aOpeWZqCIsImNvbm5lY3Rvci1uYW1lIjoi6YCj5o6l5Zmo5ZCN56ixIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiLpnIDopoHpgKPmjqXlmajlkI3nqLHjgIIiLCJjb25uZWN0b3ItdHlwZSI6IumAo+aOpeWZqOmhnuWeiyIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoi6ZyA6KaB6YCj5o6l5Zmo6aGe5Z6L44CCIixjb25uZWN0b3JzOiLpgKPmjqXlmajphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLlu7rnq4vmlrDplpjpgZMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuaCqOeiuuWumuimgeW7uueri+S4gOWAi+WQjeeoseeCuu+8mid7e2dhdGV3YXlOYW1lfX0n55qE5paw6ZaY6YGT5ZeO77yfIixkZWxldGU6IuWIqumZpOmFjee9riIsImRvd25sb2FkLXRpcCI6IuS4i+i8iemFjee9ruaWh+S7tiIsZ2F0ZXdheToi6ZaY6YGTIiwiZ2F0ZXdheS1leGlzdHMiOiLlkIzlkI3oqK3lgpnlt7LlrZjlnKjjgIIiLCJnYXRld2F5LW5hbWUiOiLplpjpgZPlkI3nqLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiLpnIDopoHplpjpgZPlkI3nqLHjgIIiLCJnYXRld2F5LXNhdmVkIjoi6ZaY6YGT6YWN572u5bey5oiQ5Yqf5L+d5a2Y44CCIiwianNvbi1wYXJzZSI6IueEoeaViOeahEpTT04iLCJqc29uLXJlcXVpcmVkIjoi5qyE5L2N5LiN6IO954K656m644CCIiwibm8tY29ubmVjdG9ycyI6IueEoemAo+aOpeWZqCIsIm5vLWRhdGEiOiLnhKHphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw6ZaY6YGT44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiDmnKrmib7liLAne3tpdGVtfX0n44CCIiwicGF0aC1sb2dzIjoi5pel6KqM5paH5Lu255qE6Lev5b6RIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi6ZyA6KaB6Lev5b6R44CCIixyZW1vdGU6Iuenu+mZpOmFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel6KqM6KiY6YyE57Sa5YilIiwicmVtb3ZlLWVudHJ5Ijoi56e76Zmk6YWN572uIiwic2F2ZS10aXAiOiLkv53lrZjphY3nva7mlofku7YiLCJzZWN1cml0eS10eXBlIjoi5a6J5YWo6aGe5Z6LIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoi6Kiq5ZWPVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToi6LKv5a2YIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi5paH5Lu25Lit55qE5pyA5aSn57SA6YyEIiwic3RvcmFnZS1tYXgtZmlsZXMiOiLmnIDlpKfmlofku7bmlbgiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiLmnIDlsI/mlbjph4/ngrox44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoi6ZyA6KaB6Jmf56K844CCIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6IuWtmOWEsuS4reeahOacgOWkp+e0gOmMhCIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoi5pyA5bCP57SA6YyE5pW454K6MeOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfntIDpjITmlbgiLCJzdG9yYWdlLXBhY2stc2l6ZSI6IuacgOWkp+S6i+S7tuWMheWkp+WwjyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6IuacgOWwj+aVuOmHj+eCujHjgIIiLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoi6Jmf56K854Sh5pWI77yOIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhdGgiOiLlrZjlhLLot6/lvpEiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHlrZjlhLLot6/lvpHjgIIiLCJzdG9yYWdlLXR5cGUiOiLlrZjlhLLpoZ7lnosiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IuaWh+S7tuWtmOWEsiIsIm1lbW9yeS1zdG9yYWdlIjoi6KiY5oa26auU5a2Y5YSyIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJk5Li75qmfIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IumcgOimgeS4u+apn+OAgiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZOmAo+aOpeWfoCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4Ijoi5pyA5aSn5Z+g6Jmf54K6IDY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/ln6DomZ/ngrox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi6YCj5o6l5Z+g54Sh5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IumcgOimgemAo+aOpeWfoOOAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6YCj5o6l5Zmoe3t0eXBlTmFtZX196YWN572uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiLplpjpgZPkuIpDQeitieabuOeahOi3r+W+kSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IumWmOmBk+S4iueUqOaItuerr+aGkeaTmueahOi3r+W+kSIsInRscy1wYXRoLXByaXZhdGUta2V5Ijoi6ZaY6YGT5LiK55qE56eB6ZGw6Lev5b6RIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLliIfmj5vlhajonqLluZUiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IumFjee9rkpTT04qIiwidXBkYXRlLWNvbmZpZyI6IuWinuWKoC/mm7TmlrDphY3nva5KU09OIn07Y29uc3QgWG89W2NhLHBhLEZhLERhLEFhLE5hLFBhLGVvLEVvLGlvLGFvLG9vLHFvLHRvLEdvLG5vXTtjbGFzcyBab3tjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lLGZ1bmN0aW9uKGUpe2Uuc2V0VHJhbnNsYXRpb24oImVuX1VTIixPbywhMCksZS5zZXRUcmFuc2xhdGlvbigiYXJfQUUiLFJvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJjYV9FUyIsVm8sITApLGUuc2V0VHJhbnNsYXRpb24oImNzX0NaIixCbywhMCksZS5zZXRUcmFuc2xhdGlvbigiZGFfREsiLFVvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJlc19FUyIsX28sITApLGUuc2V0VHJhbnNsYXRpb24oImtvX0tSIixIbywhMCksZS5zZXRUcmFuc2xhdGlvbigibHRfTFQiLHpvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJubF9CRSIsV28sITApLGUuc2V0VHJhbnNsYXRpb24oInBsX1BMIixqbywhMCksZS5zZXRUcmFuc2xhdGlvbigicHRfQlIiLEtvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJzbF9TSSIsJG8sITApLGUuc2V0VHJhbnNsYXRpb24oInRyX1RSIixZbywhMCksZS5zZXRUcmFuc2xhdGlvbigiemhfQ04iLFFvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJ6aF9UVyIsSm8sITApfShlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5OZ01vZHVsZX0pfXN0YXRpY3t0aGlzLsm1bW9kPXQuybXJtW5nRGVjbGFyZU5nTW9kdWxlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlY2xhcmF0aW9uczpbY2EscGEsRmEsRGEsQWEsTmEsUGEsZW8sRW8saW8sYW8sb28scW8sdG8sR28sbm9dLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOltjYSxwYSxGYSxEYSxBYSxOYSxQYSxlbyxFbyxpbyxhbyxvbyxxbyx0byxHbyxub119KX1zdGF0aWN7dGhpcy7JtWluaj10Lsm1ybVuZ0RlY2xhcmVJbmplY3Rvcih7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpabyxwcm92aWRlcnM6W3ZhXSxpbXBvcnRzOltILEQsUSxNYSxFYSxxYSxJYSxMbyxrbyxGbyxwbyxBbyxObyxnbyxEbyxQb119KX19ZSgiR2F0ZXdheUV4dGVuc2lvbk1vZHVsZSIsWm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Wm8sZGVjb3JhdG9yczpbe3R5cGU6dSxhcmdzOlt7ZGVjbGFyYXRpb25zOlhvLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOlhvLHByb3ZpZGVyczpbdmFdfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSl9fX0pKTsvLyMgc291cmNlTWFwcGluZ1VSTD1nYXRld2F5LW1hbmFnZW1lbnQtZXh0ZW5zaW9uLmpzLm1hcAo=", - "public": false - }, - { - "link": "/api/images/system/gateway_configuration_system_widget_image.png", - "title": "\"Gateway Configuration\" system widget image", - "type": "IMAGE", - "subType": "IMAGE", - "fileName": "gateway_configuration_system_widget_image.png", - "publicResourceKey": "HLrySB6jG2CRgGO5uLimJc2zrTeFN1Fu", - "mediaType": "image/png", - "data": "iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAIAAADGnbT+AAAABmJLR0QA/wD/AP+gvaeTAAAR50lEQVR42u2dh3MURxaH9SedfXcuXwJjsg1lwMacoeBIJicTTDIgEBlEEDknk7NBJoPIGYQAkRFCRJEFGElg733sM13D7Gq1rNZY4fcrFdXTM9PT0/3t69c9w7yEQCDw8uXL3Nzc69evX5OkEgiEAKmwsBCoEqAqJyfnyZMnr169CkhSCQRCgAROQJUAYmyoUaR4CZyAKgHzJVslxdduAVUCQ6PaQoqvgEpgSX8qWL9JUlBxA8uK+1WSgooGr2LAcki9CuplUIVShZT1vpFQLF7Fg2VUUWJBQUF+fv6LN/pFqjBynQ4AYGB4GVuxgOWoglZDinSUQ6xU/kTXA4DhBRKR2SoeLPCkILAlocaVwAAYQIJELGA5c4Xpe/78OQupalPJdOfOHZAAjAhGqxiwzFyxQm+PFSUJAQNIRDZaxYPFmPrw4UO1puQVSABG7GDBpsCSigILPEoE1oMHD9SUklcgUVKwmAIILCkULMAQWJLAkgSWJLAEliSwJIElCSyBJQksSWBJAuv9gXXy5MmfihAPxnnpggT/X9Z31pYtW9LT010J27ZtszRHcvy9e/e8B1MxMvn/a97M06dPL168eN68edu3b+cAX/m3b9/mlLlz565bt85bGme56u3cuTMzM5N7951LnX/++WfOXbt2bVEvEVEO1/Vl3rp1yxW+efPmU6dOeSt26dIl27Vx48aDBw+WlceyfxpY06dP/+8bVa5c+bPPPnOb2dnZN2/erFSpEq3sO6tBgwajRo2y9MiRI7/66itLcyTH9+rVy3swbwWRSWfbJlX94YcfuFbjxo27dOlSp06devXq0dPueGCqWrUqFejWrVvDhg2rV6/uzp08eTInWvWoA+nmzZt76Tl69Ojnn39erVq1li1b1q5du0qVKqtXrw5tsSZNmnAud+fN37VrF/X88ssvKZw74ty6deu63ww/A/Y2atSIvZ8GlZyczKtOAqt40R8zZ8705sQGlu8UH1jTpk2jVyDAGRjwokDrpBs3bnzyySfgbq3AG2opKSnkmNUErFq1armSQZ++HzJkiG3evXu3Ro0aAwYM4LErmzQLdotLHzt2zGeuoKp+/fqzZ88OBevy5cu2+fTp0z59+oCXgWtgWcnUCqPFpfmFCKz3B1arVq1odDdYeMGCnpo1aw4fPtxbGiMaZsa6nwGOg69cueL2Ug57GYNCwUJ0bbNmzZw9A6zHjx97G4e9Xbt29Z5ChTt06LBgwQKMk/eTBT6wENUgh3wfWCbYIuf48eMxNzgtE8OuigsW3gkoDBw4MBSss2fPkk5LSyuqDvQr5mTSpElhv1LhA4t3IxmY+vXrZ5swFGpCMFoYPDdm0UqQzWiLG8eFDh8+HAGsrKwscnAow4JFy/P7GTduXGytvXXr1t69e584cSJ0V0ZGBrtSU1PLOViDBg368W3RuxHAYjgDIxK7d+/2gbVv3z7S4BWhGqBAlzdt2pQLUZQPLNyv6UExROKltWjRAkRsL04VB/hKs5q4Y9ikBPtoT+fOnbm1CEMhvYsJNNMbChZq166dz6GMXlyOc0PZMqrYBXnlHCwswXdvi76JDBa16tGjB35MXl6eFyxsFWlmWHb8kiVLBr4RI4t3cBw2bBidysHdu3d3M0q4wemx4/v27YsrDX/nz5+3vezyuU0OF9d0nTp1clZtw4YNDjJ3JDfbunVr/mUX9XcmLSxY1I0CY27wULbiS1V5GwrNzGAkGHRGjBjhBQuPhLTz3Dke28PAR+aKFSt8V+GOGIaghxHHbs03FDJcMg4yc7Rx84svvhgzZoyvEBYdKNysDjMAbOHChQsvBEVl2Fy1apUXrDlz5uDPrVmzBrCwna6csGCBdQn9d8cWlcGFiC9V5RMsRPewST85sJhh0ZfLly/3rTw5sC5evIi58t05e637Q5137xWZXbZv395X1fHjx7OiYctd3F2lEDHVCDsUgjsm0zVpKFjPnj0DPjAtYd+DkbEVd6rKLVhUjJEC18e73IBng43xrgB5waI07JO3/x49ehQBLHPIbCXTjNOZM2fcXvwkrm5VxaoxDWTxyXu6+XzQHAoWs0vOHTt2bFFgTZgwgTU2572V3G7FnapyCxbCPaL1vWDRc1gClgBYT7p///65c+cwKs7Tv3r1Kntx4xgXWHPHetHcDKm2mGkLCjaQcQDePZtDhw51I2ObNm2oG6vqLHEBTdu2bcHU1u5tdcC7EmuncACIhJ0VsiTBjJK5oQPrdFDM1/Dw2LVp06Z4EbA1KK1jRQuWeehesOzxCGBhaWwwwlN2C9w2GgIW3WZ7Gd1waZ3z7oYwVllZQMdiea0Ixo/6MEJxAOUzgXDPo1g4ZW0itHGhirGSBgwFiyblqQAjlAPLisWppzQfo1ogLS0CCMDFU4mwl5WqGErm/2cyQvkc7Yopvd0gCSxJYEkCS2BJAksSWJLAEliSwJIEliSwBJYksCSBJQksgSUJLElgSQJLYEkCSxJYksASWJLAkgSWJLAEliSwJIElCSyBJQksSWBJAktgSQJLEliSwBJYksCSBJYksASWJLAkgSUJrD8WLL6MzWeD+dj/3r17SatLBFYcwOJr2Hz1umfPnnwvny+YE3Vtx44d0ZzIZ9ktOJYksPziE/58aJ+wDnZh/iXqGjneoIFFiQ+7EwFL/Sewwoiv8vONfG98QAok+BGRcFwOwR2IAEAoAOyT+zI7VBHbDQRJQKc7l5CWy5YtI2qDiyRABIADBw640ghI5A1MQkgwdzoBTrgEF+JypC1zz549Lq5TIBi8mSu6qF0mQgeQSTAmImktXbqUyF6+AZ1LEDeFwCoE9HKRpIntw1mEKCOMBWdRZ+6Ovfv37w9bCO1AJoUcOnSIr8kLrEgi9HLkSEOEYGBwZJQkxEj//v0ZMS2K6YwZMwibC1gk6AmjCtQokBhahK7AmBGYJBCMJtKxY0cqaRUmYIQLFEhHUoJxg40k0BIBwwgDkZiYSNoCjcIZkSxcR0It8dx8kTKJ20u8k6SkpMGDB8+aNYtKEt7C/QaghAqQT3hzgvlMnTrVWpnqcRYRvKg2MYU5hutOnDiRcjiYaCtc1xHMj4HQQNwXd0c+DRIa6lxg/S56i5blVxjhGOJgEVXGcUDjuiAovqGQIDbsdWFn6RsLf8oPnatYYEFiitC1wAQKbGJgKAF7Q3r+/PlTpkyx++eOgMPihAEcpxujCC8QxH2VNLDocjvdNg13zBjVOHLkiB1Jgl0WXMnActYUW8umqwMnUjeiCQeCQYf5PbjrEiOIXa5MgeUXMUVoSgcKQZFmvJE3+o1dCEMFInSSa18fWAR75kS3ad3GQEMaE4XrRoLxiHCVRLwxrx9bEhpkECPBhSiNPrZLYykteiA9SpkWrysUrPT0dJeDwfP9YPgV0UTEd+VIG4uthu6XwF4vZwijZYHHKNl7JMJa++LjCay3TmeYc0EomeWtDur7779nRLBMeCJ4E4fRVVDF/LEosBih2oTIqr1y5UpgCgTDg2MYoMrCPDFyOayxW5hGxiNMGmaJhIGFWAdhhIUMEniEoW0UChbHW4hyhLEEU8wkVofTOdJCLPnAwqtj0xsomoOtcZg4h94ao6fAKlJ0LYHdfJn0ugNr9OjRMOHcWAJfFQUW2DH8XXtbFmgJ35kjGdQAlPBJeM1sEoaJznY+PtFWMWwuAiBOjAPLuIEDvB8YDb2LCGDRLAzQ/FqsJvj+MYDF8p5ZSu+t2WgusMKLIY/eJcBfWLAomb143+5ytLUDC8PjBYsJJgOE9wbMYbdhCIMHoLjJbigh3adPH3cw7vb69evdJmGhHViBYPw6UHMmMHqwmBmwy80xiT8YA1jm53nLd7cmsMKLc+ljC0vMqIcVASMGo0WLFjlnmT7m6vg3GCTa1wVLxjs2r5xYpm5JjDkm5g0/CSPBJMtNnRg4OJi1A9vEAWLT64YzH2SgxLvHhjExZK+zmja1JAd7GfYuIoBFtakVzhwA4VphFDnS4ntHDxbtjOXGQ6AEhmxMF81CiwmsSHLOjbkOTMdYL3W/SHqaRiQf74qZP+2Lv+JOBAV2OQoxD7S+lUMXuoD1gWCcXDrYzd6hxzvXCwTjblqvYwVx8DFXXnvGJIB85za9k49F8FK7O4wiy2ZUw6Ym0YMVCAYC5rdBHTiG0lj1KP1LWaXiITQrQ5RAx4etAY0eth25OtNy7y5OJ8e3gBm9sJreiNFedAAi5hjM1JBahb21dxLtzIy1TIyDAb3dUKy4R1t01VMagRU3MYYyrjGzs7jfksCKjxgEmSUwkAkUgSUJLElgCSxJYEkCSxJY8QXrwoUL9tYecy7e87RVTcohba+78HDGpXlyTNreniPN4zZ7j4qVa/KpAGkWMMnnMXMg+LiXtD36ZZ2dhyG2rpiTk0O+ranyvIV8S3ODpO0NPlYWeL/FHgfxzgVpaxee2fFuj6V5JMBDJEvzjMW9hnohKEvzuMneseEwDuAUS1OIvXtNmsK5RCC4WkbaFjWoBpWxNqd6pKmqpak8txAIPg0j3x6ic5vkc8subWu5NAuNY4v7NBf5NJ2lybc0a/qk7TE/XUDaupKuIW3TYRao3U3JYkkaCiWBJbCk9wcWbo3AkkLBAoySgoWXV1aeukvvQbwkAhIlAoupioFlsxVJQrwVbGCBR+xgMcVldpqamhr2ZSapogkeeM8RJEjEDhaLLvDEEgj/0YBXfkFVY2KFFV0PAGAADCABGODxzmB5jRZLl7wKzH924wVi3hn/UaqQousBAAyAASQimKuowHJGi+JYYj4rVWABABgUa66KAcvLFmaQZwVwmvdGT6QKI9fpAAAGwBCZqqjAcmyhl0EVShVS1vtGglEVO1g+vCSpWKTeASwvXpIUDS3vAJYkRS+BJQmscqeMSzert0v+oFHiX74uA3/Us1rb5H0nLwus0k7VB40Glwmk3sLr60RqLrBKr7BVZY4q+6vZbpzAKr0qKyNg2D+BVXpVdqkSWAJLYAksgSUJLIElsASWwBJYksASWAJLYAms6P7+2Wz4374ZIrCk+ID1YaPBk5ftePD49Wd5eIsz7diF2h3HCyyppGBNXLyNEzfuOdVj7PJxi7Y++6Ug68a9v/4ZpktglSuwTpzLfpFf6B4yTl2x68mzF037zSL9UZOkfimrZ6xMGzpr439ajCTnmz4zkmZuqNJ6tB3cddSSQVPXWbpul5QJP25LXrilYc9pAktgJabuzeDEMfM3f9RkqDf/X/8bfjH7Tn7BS8h7/qLg7oO8T78d02bI6yCjI+akcgAO2dPn+XtPXCTdbfTSgsJXjKe5D/Nevvq194SVAquig1WjXfLF7NcR5x7lPZ+7dq9zsL4dPP9QxpUOwxaR7jRiMQdgt3DIQGd/+mU7gMz+k9f8vXHSwyfPMy7dAE3G0OOZ16AwhvcsBFZ5mxWCS9fRSw+euhL8f1O/MZxZ/j+aDuubsnrK8p1rdryOHDZ9ZRqZizYexDgxhVy44QD2DMPWfMAc9m4/nMkoyV/a0ddRj6u3TRZYWm74/a9B9ymZV2+BV53OE2t1GI/huZX7eOmmw16wmvSdSRpPP+vm/W0Hzzp7djP3UeaVW+6vXrdJAqvigvXv5iPAaN/JSy4nZcl2ysGXYg2CRMOeUw04BxZ/128/OH4u2/Bis953k0nPW7/PFRLbpFJglSuLteXAGdgCC9wpBr7b9x7jklduOWrsgtfRr2eu3t02aSGjJOnZa/bYKTNX7Wbz2S/55u/jTh05k8WwOHx2aqvEecs2Hzl6Nks+VkUH6+OmwxanHgImK+F81u2WA+daPjO+wOvvfv/GUMi/W4MDH3/1gyZqw+50V0jVNmN3HD7H+ir5DKC9xq2QxZKPlWhrB0wP8dZ9+ZVajPw4JLOoP6aH+OwfxvrfhARWuXXe9RBaEliSwBJYAktgSQJLElgCS2AJLElgSe9FZfejINRcYJVeVWtbVj9jVKv9eIFVesWn8T4om+bqjD68VsrFp/H4iFnZslXRUCWwpD9KAksSWJLAkgSWwJIEllSGwLp+/TqBwtQWUrwETkCVkJubS7BDNYcULxGKHKgSiHGYk5MDW7JbUsltFSCBE4kEtomcCWKYr2uSVAKBECCZhfo//w/mIKeOaZ4AAAAASUVORK5CYII=", - "public": true - } ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_configuration__single_device_.json b/application/src/main/data/json/system/widget_types/gateway_configuration__single_device_.json index 9e351fa8df..a02c0112a3 100644 --- a/application/src/main/data/json/system/widget_types/gateway_configuration__single_device_.json +++ b/application/src/main/data/json/system/widget_types/gateway_configuration__single_device_.json @@ -22,6 +22,7 @@ "settingsDirective": "tb-gateway-config-single-device-widget-settings", "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":true,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"gatewayTitle\":\"Gateway configuration (Single device)\"},\"title\":\"Gateway configuration (Single device)\"}" }, + "externalId": null, "tags": [ "router", "bridge", @@ -40,28 +41,5 @@ "ocpp", "ble", "bluetooth" - ], - "resources": [ - { - "link": "/api/resource/js_module/system/gateway-management-extension.js", - "title": "gateway-management-extension.js", - "type": "JS_MODULE", - "resourceKey": "gateway-management-extension.js", - "fileName": "gateway-management-extension.js", - "mediaType": "application/javascript", - "data": "U3lzdGVtLnJlZ2lzdGVyKFsiQGFuZ3VsYXIvY29yZSIsIkBhbmd1bGFyL21hdGVyaWFsL3NvcnQiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZSIsIkBhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvciIsIkBzaGFyZWQvcHVibGljLWFwaSIsIkBhbmd1bGFyL2NvbW1vbiIsIkBhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXIiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJzIiwiQGFuZ3VsYXIvZmxleC1sYXlvdXQvZmxleCIsIkBhbmd1bGFyL2ZsZXgtbGF5b3V0L2V4dGVuZGVkIiwiQG5neC10cmFuc2xhdGUvY29yZSIsIkBjb3JlL3B1YmxpYy1hcGkiLCJAYW5ndWxhci9mb3JtcyIsIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2NhcmQiLCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCIsIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQiLCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QiLCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlIiwicnhqcyIsInJ4anMvb3BlcmF0b3JzIiwidHNsaWIiLCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwIiwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbiIsIkBzaGFyZWQvZGlyZWN0aXZlcy90cnVuY2F0ZS13aXRoLXRvb2x0aXAuZGlyZWN0aXZlIiwiQHNoYXJlZC9jb21wb25lbnRzL2RpYWxvZy9qc29uLW9iamVjdC1lZGl0LWRpYWxvZy5jb21wb25lbnQiLCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2ciLCJAc2hhcmVkL2NvbXBvbmVudHMvZGlyZWN0aXZlcy90Yi1qc29uLXRvLXN0cmluZy5kaXJlY3RpdmUiLCJAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUiLCJAc2hhcmVkL2NvbXBvbmVudHMvYnV0dG9uL3RvZ2dsZS1wYXNzd29yZC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLWhlYWRlci5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLXNlbGVjdC5jb21wb25lbnQiLCJAbmdyeC9zdG9yZSIsIkBhbmd1bGFyL3JvdXRlciIsIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXIiLCJAc2hhcmVkL2NvbXBvbmVudHMvanNvbi1jb250ZW50LmNvbXBvbmVudCIsIkBzaGFyZWQvaW1wb3J0LWV4cG9ydC9pbXBvcnQtZXhwb3J0LnNlcnZpY2UiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9hc3QuZGlyZWN0aXZlIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3giLCJAc2hhcmVkL2NvbXBvbmVudHMvZW50aXR5L2VudGl0eS1nYXRld2F5LXNlbGVjdC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGVscC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGludC10b29sdGlwLWljb24uY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2hlbHAtcG9wdXAuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL3BvcG92ZXIuc2VydmljZSIsIkBhbmd1bGFyL21hdGVyaWFsL2NoaXBzIiwiQHNoYXJlZC9jb21wb25lbnRzL2ljb24uY29tcG9uZW50IiwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSIsIkBzaGFyZWQvZGVjb3JhdG9ycy9jb2VyY2lvbiIsIkBzaGFyZWQvY29tcG9uZW50cy9qc29uLW9iamVjdC1lZGl0LmNvbXBvbmVudCIsIkBzaGFyZWQvY29tcG9uZW50cy9tYXJrZG93bi5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdGItZXJyb3IuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2ZpbGUtaW5wdXQuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2J1dHRvbi9jb3B5LWJ1dHRvbi5jb21wb25lbnQiXSwoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0LG4sYSxvLGkscixzLGwsYyxwLG0sZCx1LGcsZix5LGIsaCx4LHYsdyxDLFQsUyxrLEwsRixJLEEsTixNLEUscSxELFAsRyxPLFIsVixCLFUsXyxILHosVyxqLEssWSxRLEosWCxaLGVlLHRlLG5lLGFlLG9lLGllLHJlLHNlLGxlLGNlLHBlLG1lLGRlLHVlLGdlLGZlLHllLGJlLGhlLHhlLHZlLHdlLENlLFRlLFNlLGtlLExlLEZlLEllLEFlLE5lLE1lLEVlLHFlLERlLFBlLEdlLE9lLFJlLFZlLEJlLFVlLF9lLEhlLHplLFdlLGplLEtlLCRlLFllLFFlLEplLFhlLFplLGV0LHR0LG50LGF0LG90LGl0LHJ0LHN0LGx0LGN0LHB0LG10LGR0LHV0LGd0LGZ0LHl0LGJ0LGh0LHh0LHZ0LHd0LEN0LFR0LFN0O3JldHVybntzZXR0ZXJzOltmdW5jdGlvbihlKXt0PWUsbj1lLkNvbXBvbmVudCxhPWUuSW5wdXQsbz1lLlZpZXdDaGlsZCxpPWUuRXZlbnRFbWl0dGVyLHI9ZS5pbmplY3Qscz1lLkRpcmVjdGl2ZSxsPWUuT3V0cHV0LGM9ZS5QaXBlLHA9ZS5JbmplY3QsbT1lLmZvcndhcmRSZWYsZD1lLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5LHU9ZS5OZ01vZHVsZX0sZnVuY3Rpb24oZSl7Zz1lLk1hdFNvcnQsZj1lfSxmdW5jdGlvbihlKXt5PWUuTWF0VGFibGVEYXRhU291cmNlLGI9ZX0sZnVuY3Rpb24oZSl7aD1lLk1hdFBhZ2luYXRvcix4PWV9LGZ1bmN0aW9uKGUpe3Y9ZS5oZWxwQmFzZVVybCx3PWUuRGlyZWN0aW9uLEM9ZS5QYWdlTGluayxUPWUuRGF0YUtleVR5cGUsUz1lLkxlZ2VuZFBvc2l0aW9uLGs9ZS5OVUxMX1VVSUQsTD1lLkF0dHJpYnV0ZVNjb3BlLEY9ZS5EYXRhc291cmNlVHlwZSxJPWUuRW50aXR5VHlwZSxBPWUud2lkZ2V0VHlwZSxOPWUuY29lcmNlQm9vbGVhbixNPWUuZW1wdHlQYWdlRGF0YSxFPWUuaXNDbGllbnRTaWRlVGVsZW1ldHJ5VHlwZSxxPWUuVGVsZW1ldHJ5U3Vic2NyaWJlcixEPWUuU2hhcmVkTW9kdWxlLFA9ZS5EaWFsb2dDb21wb25lbnQsRz1lLkNvbnRlbnRUeXBlLE89ZS5QYWdlQ29tcG9uZW50LFI9ZS5UYlRhYmxlRGF0YXNvdXJjZSxWPWUuSE9VUixCPWUuY29lcmNlTnVtYmVyLFU9ZS5EZXZpY2VDcmVkZW50aWFsc1R5cGV9LGZ1bmN0aW9uKGUpe189ZSxIPWUuQ29tbW9uTW9kdWxlfSxmdW5jdGlvbihlKXt6PWV9LGZ1bmN0aW9uKGUpe1c9ZX0sZnVuY3Rpb24oZSl7aj1lfSxmdW5jdGlvbihlKXtLPWV9LGZ1bmN0aW9uKGUpe1k9ZSxRPWUuVHJhbnNsYXRlTW9kdWxlfSxmdW5jdGlvbihlKXtKPWUuZGVlcENsb25lLFg9ZSxaPWUuZGVsZXRlTnVsbFByb3BlcnRpZXMsZWU9ZS5pc0VxdWFsLHRlPWUuaXNOdW1iZXIsbmU9ZS5pc1N0cmluZyxhZT1lLldJTkRPVyxvZT1lLmlzTGl0ZXJhbE9iamVjdCxpZT1lLmlzRGVmaW5lZEFuZE5vdE51bGwscmU9ZS5pc1VuZGVmaW5lZE9yTnVsbCxzZT1lLmdlbmVyYXRlU2VjcmV0LGxlPWUuaXNPYmplY3QsY2U9ZS5jYW1lbENhc2UscGU9ZS5kZWVwVHJpbX0sZnVuY3Rpb24oZSl7bWU9ZSxkZT1lLkZvcm1CdWlsZGVyLHVlPWUuVmFsaWRhdG9ycyxnZT1lLk5HX1ZBTFVFX0FDQ0VTU09SLGZlPWUuTkdfVkFMSURBVE9SUyx5ZT1lLkZvcm1Db250cm9sfSxmdW5jdGlvbihlKXtiZT1lfSxmdW5jdGlvbihlKXtoZT1lfSxmdW5jdGlvbihlKXt4ZT1lfSxmdW5jdGlvbihlKXt2ZT1lfSxmdW5jdGlvbihlKXt3ZT1lfSxmdW5jdGlvbihlKXtDZT1lLFRlPWUuRXJyb3JTdGF0ZU1hdGNoZXJ9LGZ1bmN0aW9uKGUpe1NlPWUuU3ViamVjdCxrZT1lLmZyb21FdmVudCxMZT1lLkJlaGF2aW9yU3ViamVjdCxGZT1lLlJlcGxheVN1YmplY3QsSWU9ZS5vZixBZT1lLmZvcmtKb2lufSxmdW5jdGlvbihlKXtOZT1lLnRha2VVbnRpbCxNZT1lLmZpbHRlcixFZT1lLnRhcCxxZT1lLmNhdGNoRXJyb3IsRGU9ZS5tYXAsUGU9ZS5wdWJsaXNoUmVwbGF5LEdlPWUucmVmQ291bnQsT2U9ZS50YWtlLFJlPWUuc3RhcnRXaXRoLFZlPWUuZGVib3VuY2VUaW1lLEJlPWUuZGlzdGluY3RVbnRpbENoYW5nZWQsVWU9ZS5zd2l0Y2hNYXAsX2U9ZS5tZXJnZU1hcH0sZnVuY3Rpb24oZSl7SGU9ZS5fX2RlY29yYXRlfSxmdW5jdGlvbihlKXt6ZT1lLFdlPWUuTWF0VG9vbHRpcH0sZnVuY3Rpb24oZSl7amU9ZS5TZWxlY3Rpb25Nb2RlbH0sZnVuY3Rpb24oZSl7S2U9ZX0sZnVuY3Rpb24oZSl7JGU9ZX0sZnVuY3Rpb24oZSl7WWU9ZX0sZnVuY3Rpb24oZSl7UWU9ZS5Kc29uT2JqZWN0RWRpdERpYWxvZ0NvbXBvbmVudH0sZnVuY3Rpb24oZSl7SmU9ZSxYZT1lLk1BVF9ESUFMT0dfREFUQX0sZnVuY3Rpb24oZSl7WmU9ZX0sZnVuY3Rpb24oZSl7ZXQ9ZX0sZnVuY3Rpb24oZSl7dHQ9ZX0sZnVuY3Rpb24oZSl7bnQ9ZX0sZnVuY3Rpb24oZSl7YXQ9ZX0sZnVuY3Rpb24oZSl7b3Q9ZX0sZnVuY3Rpb24oZSl7aXQ9ZX0sZnVuY3Rpb24oZSl7cnQ9ZX0sZnVuY3Rpb24oZSl7c3Q9ZX0sZnVuY3Rpb24oZSl7bHQ9ZX0sZnVuY3Rpb24oZSl7Y3Q9ZX0sZnVuY3Rpb24oZSl7cHQ9ZX0sZnVuY3Rpb24oZSl7bXQ9ZX0sZnVuY3Rpb24oZSl7ZHQ9ZX0sZnVuY3Rpb24oZSl7dXQ9ZX0sZnVuY3Rpb24oZSl7Z3Q9ZX0sZnVuY3Rpb24oZSl7ZnQ9ZX0sZnVuY3Rpb24oZSl7eXQ9ZX0sZnVuY3Rpb24oZSl7YnQ9ZX0sZnVuY3Rpb24oZSl7aHQ9ZX0sZnVuY3Rpb24oZSl7eHQ9ZS5jb2VyY2VCb29sZWFufSxmdW5jdGlvbihlKXt2dD1lfSxmdW5jdGlvbihlKXt3dD1lfSxmdW5jdGlvbihlKXtDdD1lfSxmdW5jdGlvbihlKXtUdD1lfSxmdW5jdGlvbihlKXtTdD1lfV0sZXhlY3V0ZTpmdW5jdGlvbigpe2NvbnN0IGt0PWUoIm5vTGVhZFRyYWlsU3BhY2VzUmVnZXgiLC9eXFMrKD86IFxTKykqJC8pLEx0PWUoImludGVnZXJSZWdleCIsL15bLStdP1xkKyQvKSxGdD1lKCJub25aZXJvRmxvYXQiLC9eLT8oPyEwKFwuMCspPyQpXGQrKFwuXGQrKT8kLyksSXQ9ZSgianNvblJlcXVpcmVkIiwoZT0+ZS52YWx1ZT9udWxsOntyZXF1aXJlZDohMH0pKTt2YXIgQXQsTnQsTXQsRXQ7ZSgiU3RvcmFnZVR5cGVzIixBdCksZnVuY3Rpb24oZSl7ZS5NRU1PUlk9Im1lbW9yeSIsZS5GSUxFPSJmaWxlIixlLlNRTElURT0ic3FsaXRlIn0oQXR8fGUoIlN0b3JhZ2VUeXBlcyIsQXQ9e30pKSxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdCksZnVuY3Rpb24oZSl7ZS5FWENFUFRJT049IkVYQ0VQVElPTiJ9KE50fHxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdD17fSkpLGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQpLGZ1bmN0aW9uKGUpe2UuTk9ORT0iTk9ORSIsZS5DUklUSUNBTD0iQ1JJVElDQUwiLGUuRVJST1I9IkVSUk9SIixlLldBUk5JTkc9IldBUk5JTkciLGUuSU5GTz0iSU5GTyIsZS5ERUJVRz0iREVCVUciLGUuVFJBQ0U9IlRSQUNFIn0oTXR8fGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQ9e30pKSxlKCJQb3J0TGltaXRzIixFdCksZnVuY3Rpb24oZSl7ZVtlLk1JTj0xXT0iTUlOIixlW2UuTUFYPTY1NTM1XT0iTUFYIn0oRXR8fGUoIlBvcnRMaW1pdHMiLEV0PXt9KSk7Y29uc3QgcXQ9ZSgiR2F0ZXdheVN0YXR1cyIsey4uLk10LC4uLk50fSk7dmFyIER0LFB0O2UoIkxvZ1NhdmluZ1BlcmlvZCIsRHQpLGZ1bmN0aW9uKGUpe2UuZGF5cz0iRCIsZS5ob3Vycz0iSCIsZS5taW51dGVzPSJNIixlLnNlY29uZHM9IlMifShEdHx8ZSgiTG9nU2F2aW5nUGVyaW9kIixEdD17fSkpLGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0KSxmdW5jdGlvbihlKXtlLnNlcnZpY2U9InNlcnZpY2UiLGUuY29ubmVjdG9yPSJjb25uZWN0b3IiLGUuY29udmVydGVyPSJjb252ZXJ0ZXIiLGUudGJfY29ubmVjdGlvbj0idGJfY29ubmVjdGlvbiIsZS5zdG9yYWdlPSJzdG9yYWdlIixlLmV4dGVuc2lvbj0iZXh0ZW5zaW9uIn0oUHR8fGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0PXt9KSk7Y29uc3QgR3Q9ZSgiTG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwIixuZXcgTWFwKFtbUHQuc2VydmljZSwiU2VydmljZSJdLFtQdC5jb25uZWN0b3IsIkNvbm5lY3RvciJdLFtQdC5jb252ZXJ0ZXIsIkNvbnZlcnRlciJdLFtQdC50Yl9jb25uZWN0aW9uLCJUQiBDb25uZWN0aW9uIl0sW1B0LnN0b3JhZ2UsIlN0b3JhZ2UiXSxbUHQuZXh0ZW5zaW9uLCJFeHRlbnNpb24iXV0pKSxPdD1lKCJMb2dTYXZpbmdQZXJpb2RUcmFuc2xhdGlvbnMiLG5ldyBNYXAoW1tEdC5kYXlzLCJnYXRld2F5LmxvZ3MuZGF5cyJdLFtEdC5ob3VycywiZ2F0ZXdheS5sb2dzLmhvdXJzIl0sW0R0Lm1pbnV0ZXMsImdhdGV3YXkubG9ncy5taW51dGVzIl0sW0R0LnNlY29uZHMsImdhdGV3YXkubG9ncy5zZWNvbmRzIl1dKSksUnQ9ZSgiU3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAiLG5ldyBNYXAoW1tBdC5NRU1PUlksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtBdC5GSUxFLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl0sW0F0LlNRTElURSwiZ2F0ZXdheS5zdG9yYWdlLXR5cGVzLnNxbGl0ZSJdXSkpO3ZhciBWdDtlKCJTZWN1cml0eVR5cGVzIixWdCksZnVuY3Rpb24oZSl7ZS5BQ0NFU1NfVE9LRU49ImFjY2Vzc1Rva2VuIixlLlVTRVJOQU1FX1BBU1NXT1JEPSJ1c2VybmFtZVBhc3N3b3JkIixlLlRMU19BQ0NFU1NfVE9LRU49InRsc0FjY2Vzc1Rva2VuIixlLlRMU19QUklWQVRFX0tFWT0idGxzUHJpdmF0ZUtleSJ9KFZ0fHxlKCJTZWN1cml0eVR5cGVzIixWdD17fSkpO2NvbnN0IEJ0PWUoIkdlY3VyaXR5VHlwZXNUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tWdC5BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl0sW1Z0LlVTRVJOQU1FX1BBU1NXT1JELCJnYXRld2F5LnNlY3VyaXR5LXR5cGVzLnVzZXJuYW1lLXBhc3N3b3JkIl0sW1Z0LlRMU19BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMudGxzLWFjY2Vzcy10b2tlbiJdXSkpO3ZhciBVdCxfdDtlKCJHYXRld2F5VmVyc2lvbiIsVXQpLGZ1bmN0aW9uKGUpe2UuQ3VycmVudD0iMy41LjIiLGUuTGVnYWN5PSJsZWdhY3kifShVdHx8ZSgiR2F0ZXdheVZlcnNpb24iLFV0PXt9KSksZSgiQ29ubmVjdG9yVHlwZSIsX3QpLGZ1bmN0aW9uKGUpe2UuTVFUVD0ibXF0dCIsZS5NT0RCVVM9Im1vZGJ1cyIsZS5HUlBDPSJncnBjIixlLk9QQ1VBPSJvcGN1YSIsZS5CTEU9ImJsZSIsZS5SRVFVRVNUPSJyZXF1ZXN0IixlLkNBTj0iY2FuIixlLkJBQ05FVD0iYmFjbmV0IixlLk9EQkM9Im9kYmMiLGUuUkVTVD0icmVzdCIsZS5TTk1QPSJzbm1wIixlLkZUUD0iZnRwIixlLlNPQ0tFVD0ic29ja2V0IixlLlhNUFA9InhtcHAiLGUuT0NQUD0ib2NwcCIsZS5DVVNUT009ImN1c3RvbSJ9KF90fHxlKCJDb25uZWN0b3JUeXBlIixfdD17fSkpO2NvbnN0IEh0PWUoIkdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIixuZXcgTWFwKFtbX3QuTVFUVCwiTVFUVCJdLFtfdC5NT0RCVVMsIk1PREJVUyJdLFtfdC5HUlBDLCJHUlBDIl0sW190Lk9QQ1VBLCJPUENVQSJdLFtfdC5CTEUsIkJMRSJdLFtfdC5SRVFVRVNULCJSRVFVRVNUIl0sW190LkNBTiwiQ0FOIl0sW190LkJBQ05FVCwiQkFDTkVUIl0sW190Lk9EQkMsIk9EQkMiXSxbX3QuUkVTVCwiUkVTVCJdLFtfdC5TTk1QLCJTTk1QIl0sW190LkZUUCwiRlRQIl0sW190LlNPQ0tFVCwiU09DS0VUIl0sW190LlhNUFAsIlhNUFAiXSxbX3QuT0NQUCwiT0NQUCJdLFtfdC5DVVNUT00sIkNVU1RPTSJdXSkpLHp0PWUoIk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzEsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1jb2lscyJdLFsyLCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtZGlzY3JldGUtaW5wdXRzIl0sWzMsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdLFs0LCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtaW5wdXQtcmVnaXN0ZXJzIl0sWzUsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMud3JpdGUtc2luZ2xlLWNvaWwiXSxbNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1zaW5nbGUtaG9sZGluZy1yZWdpc3RlciJdLFsxNSwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1jb2lscyJdLFsxNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdXSkpO3ZhciBXdDtlKCJCQUNuZXRSZXF1ZXN0VHlwZXMiLFd0KSxmdW5jdGlvbihlKXtlLldyaXRlUHJvcGVydHk9IndyaXRlUHJvcGVydHkiLGUuUmVhZFByb3BlcnR5PSJyZWFkUHJvcGVydHkifShXdHx8ZSgiQkFDbmV0UmVxdWVzdFR5cGVzIixXdD17fSkpO2NvbnN0IGp0PWUoIkJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tXdC5Xcml0ZVByb3BlcnR5LCJnYXRld2F5LnJwYy53cml0ZS1wcm9wZXJ0eSJdLFtXdC5SZWFkUHJvcGVydHksImdhdGV3YXkucnBjLnJlYWQtcHJvcGVydHkiXV0pKTt2YXIgS3Q7ZSgiQkFDbmV0T2JqZWN0VHlwZXMiLEt0KSxmdW5jdGlvbihlKXtlLkJpbmFyeUlucHV0PSJiaW5hcnlJbnB1dCIsZS5CaW5hcnlPdXRwdXQ9ImJpbmFyeU91dHB1dCIsZS5BbmFsb2dJbnB1dD0iYW5hbG9nSW5wdXQiLGUuQW5hbG9nT3V0cHV0PSJhbmFsb2dPdXRwdXQiLGUuQmluYXJ5VmFsdWU9ImJpbmFyeVZhbHVlIixlLkFuYWxvZ1ZhbHVlPSJhbmFsb2dWYWx1ZSJ9KEt0fHxlKCJCQUNuZXRPYmplY3RUeXBlcyIsS3Q9e30pKTtjb25zdCAkdD1lKCJCQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tLdC5BbmFsb2dPdXRwdXQsImdhdGV3YXkucnBjLmFuYWxvZy1vdXRwdXQiXSxbS3QuQW5hbG9nSW5wdXQsImdhdGV3YXkucnBjLmFuYWxvZy1pbnB1dCJdLFtLdC5CaW5hcnlPdXRwdXQsImdhdGV3YXkucnBjLmJpbmFyeS1vdXRwdXQiXSxbS3QuQmluYXJ5SW5wdXQsImdhdGV3YXkucnBjLmJpbmFyeS1pbnB1dCJdLFtLdC5CaW5hcnlWYWx1ZSwiZ2F0ZXdheS5ycGMuYmluYXJ5LXZhbHVlIl0sW0t0LkFuYWxvZ1ZhbHVlLCJnYXRld2F5LnJwYy5hbmFsb2ctdmFsdWUiXV0pKTt2YXIgWXQ7ZSgiQkxFTWV0aG9kcyIsWXQpLGZ1bmN0aW9uKGUpe2UuV1JJVEU9IndyaXRlIixlLlJFQUQ9InJlYWQiLGUuU0NBTj0ic2NhbiJ9KFl0fHxlKCJCTEVNZXRob2RzIixZdD17fSkpO2NvbnN0IFF0PWUoIkJMRU1ldGhvZHNUcmFuc2xhdGVzIixuZXcgTWFwKFtbWXQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl0sW1l0LlJFQUQsImdhdGV3YXkucnBjLnJlYWQiXSxbWXQuU0NBTiwiZ2F0ZXdheS5ycGMuc2NhbiJdXSkpO3ZhciBKdCxYdDtlKCJDQU5CeXRlT3JkZXJzIixKdCksZnVuY3Rpb24oZSl7ZS5MSVRUTEU9IkxJVFRMRSIsZS5CSUc9IkJJRyJ9KEp0fHxlKCJDQU5CeXRlT3JkZXJzIixKdD17fSkpLGUoIlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzIixYdCksZnVuY3Rpb24oZSl7ZS5XUklURT0id3JpdGUifShYdHx8ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3MiLFh0PXt9KSk7Y29uc3QgWnQ9ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzIixuZXcgTWFwKFtbWHQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl1dKSk7dmFyIGVuO2UoIlNOTVBNZXRob2RzIixlbiksZnVuY3Rpb24oZSl7ZS5TRVQ9InNldCIsZS5NVUxUSVNFVD0ibXVsdGlzZXQiLGUuR0VUPSJnZXQiLGUuQlVMS1dBTEs9ImJ1bGt3YWxrIixlLlRBQkxFPSJ0YWJsZSIsZS5NVUxUSUdFVD0ibXVsdGlnZXQiLGUuR0VUTkVYVD0iZ2V0bmV4dCIsZS5CVUxLR0VUPSJidWxrZ2V0IixlLldBTEtTPSJ3YWxrIn0oZW58fGUoIlNOTVBNZXRob2RzIixlbj17fSkpO2NvbnN0IHRuPWUoIlNOTVBNZXRob2RzVHJhbnNsYXRpb25zIixuZXcgTWFwKFtbZW4uU0VULCJnYXRld2F5LnJwYy5zZXQiXSxbZW4uTVVMVElTRVQsImdhdGV3YXkucnBjLm11bHRpc2V0Il0sW2VuLkdFVCwiZ2F0ZXdheS5ycGMuZ2V0Il0sW2VuLkJVTEtXQUxLLCJnYXRld2F5LnJwYy5idWxrLXdhbGsiXSxbZW4uVEFCTEUsImdhdGV3YXkucnBjLnRhYmxlIl0sW2VuLk1VTFRJR0VULCJnYXRld2F5LnJwYy5tdWx0aS1nZXQiXSxbZW4uR0VUTkVYVCwiZ2F0ZXdheS5ycGMuZ2V0LW5leHQiXSxbZW4uQlVMS0dFVCwiZ2F0ZXdheS5ycGMuYnVsay1nZXQiXSxbZW4uV0FMS1MsImdhdGV3YXkucnBjLndhbGsiXV0pKTt2YXIgbm4sYW4sb24scm4sc24sbG47ZSgiSFRUUE1ldGhvZHMiLG5uKSxmdW5jdGlvbihlKXtlLkNPTk5FQ1Q9IkNPTk5FQ1QiLGUuREVMRVRFPSJERUxFVEUiLGUuR0VUPSJHRVQiLGUuSEVBRD0iSEVBRCIsZS5PUFRJT05TPSJPUFRJT05TIixlLlBBVENIPSJQQVRDSCIsZS5QT1NUPSJQT1NUIixlLlBVVD0iUFVUIixlLlRSQUNFPSJUUkFDRSJ9KG5ufHxlKCJIVFRQTWV0aG9kcyIsbm49e30pKSxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuKSxmdW5jdGlvbihlKXtlLlVURl84PSJ1dGYtOCJ9KGFufHxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuPXt9KSksZSgiQ29uZmlndXJhdGlvbk1vZGVzIixvbiksZnVuY3Rpb24oZSl7ZS5CQVNJQz0iYmFzaWMiLGUuQURWQU5DRUQ9ImFkdmFuY2VkIn0ob258fGUoIkNvbmZpZ3VyYXRpb25Nb2RlcyIsb249e30pKSxlKCJTZWN1cml0eVR5cGUiLHJuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyIsZS5DRVJUSUZJQ0FURVM9ImNlcnRpZmljYXRlcyJ9KHJufHxlKCJTZWN1cml0eVR5cGUiLHJuPXt9KSksZSgiUmVwb3J0U3RyYXRlZ3lUeXBlIixzbiksZnVuY3Rpb24oZSl7ZS5PbkNoYW5nZT0iT05fQ0hBTkdFIixlLk9uUmVwb3J0UGVyaW9kPSJPTl9SRVBPUlRfUEVSSU9EIixlLk9uQ2hhbmdlT3JSZXBvcnRQZXJpb2Q9Ik9OX0NIQU5HRV9PUl9SRVBPUlRfUEVSSU9EIn0oc258fGUoIlJlcG9ydFN0cmF0ZWd5VHlwZSIsc249e30pKSxlKCJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZSIsbG4pLGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0b3I9NmU0XT0iQ29ubmVjdG9yIixlW2UuRGV2aWNlPTNlNF09IkRldmljZSIsZVtlLktleT0xNWUzXT0iS2V5In0obG58fGUoIlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlIixsbj17fSkpO2NvbnN0IGNuPWUoIlJlcG9ydFN0cmF0ZWd5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW3NuLk9uQ2hhbmdlLCJnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5vbi1jaGFuZ2UiXSxbc24uT25SZXBvcnRQZXJpb2QsImdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5Lm9uLXJlcG9ydC1wZXJpb2QiXSxbc24uT25DaGFuZ2VPclJlcG9ydFBlcmlvZCwiZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kub24tY2hhbmdlLW9yLXJlcG9ydC1wZXJpb2QiXV0pKTt2YXIgcG47ZSgiTW9kZVR5cGUiLHBuKSxmdW5jdGlvbihlKXtlLk5PTkU9Ik5vbmUiLGUuU0lHTj0iU2lnbiIsZS5TSUdOQU5ERU5DUllQVD0iU2lnbkFuZEVuY3J5cHQifShwbnx8ZSgiTW9kZVR5cGUiLHBuPXt9KSk7Y29uc3QgbW49ZSgiU2VjdXJpdHlUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbcm4uQU5PTllNT1VTLCJnYXRld2F5LmJyb2tlci5zZWN1cml0eS10eXBlcy5hbm9ueW1vdXMiXSxbcm4uQkFTSUMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmJhc2ljIl0sW3JuLkNFUlRJRklDQVRFUywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuY2VydGlmaWNhdGVzIl1dKSk7dmFyIGRuO2UoIlJlc3RTZWN1cml0eVR5cGUiLGRuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyJ9KGRufHxlKCJSZXN0U2VjdXJpdHlUeXBlIixkbj17fSkpO2NvbnN0IHVuPWUoIlJlc3RTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tkbi5BTk9OWU1PVVMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmFub255bW91cyJdLFtkbi5CQVNJQywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuYmFzaWMiXV0pKSxnbj1lKCJNcXR0VmVyc2lvbnMiLFt7bmFtZTozLjEsdmFsdWU6M30se25hbWU6My4xMSx2YWx1ZTo0fSx7bmFtZTo1LHZhbHVlOjV9XSk7dmFyIGZuO2UoIk1hcHBpbmdUeXBlIixmbiksZnVuY3Rpb24oZSl7ZS5EQVRBPSJkYXRhIixlLlJFUVVFU1RTPSJyZXF1ZXN0cyIsZS5PUENVQT0iT1BDdWEifShmbnx8ZSgiTWFwcGluZ1R5cGUiLGZuPXt9KSk7Y29uc3QgeW49ZSgiTWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nIl0sW2ZuLk9QQ1VBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdXSkpLGJuPWUoIk1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbZm4uREFUQSwiZ2F0ZXdheS5kYXRhLW1hcHBpbmctaGludCJdLFtmbi5PUENVQSwiZ2F0ZXdheS5vcGN1YS1kYXRhLW1hcHBpbmctaGludCJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nLWhpbnQiXV0pKSxobj1lKCJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNzZWN0aW9uLW1hcHBpbmciXSxbZm4uT1BDVUEsdisiL2RvY3MvaW90LWdhdGV3YXkvY29uZmlnL29wYy11YS8jc2VjdGlvbi1tYXBwaW5nIl0sW2ZuLlJFUVVFU1RTLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNyZXF1ZXN0cy1tYXBwaW5nIl1dKSkseG49ZSgiUXVhbGl0eVR5cGVzIixbMCwxLDJdKSx2bj1lKCJRdWFsaXR5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzAsImdhdGV3YXkucW9zLmF0LW1vc3Qtb25jZSJdLFsxLCJnYXRld2F5LnFvcy5hdC1sZWFzdC1vbmNlIl0sWzIsImdhdGV3YXkucW9zLmV4YWN0bHktb25jZSJdXSkpO3ZhciB3bjtlKCJDb252ZXJ0b3JUeXBlIix3biksZnVuY3Rpb24oZSl7ZS5KU09OPSJqc29uIixlLkJZVEVTPSJieXRlcyIsZS5DVVNUT009ImN1c3RvbSJ9KHdufHxlKCJDb252ZXJ0b3JUeXBlIix3bj17fSkpO2NvbnN0IENuPWUoIkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1t3bi5KU09OLCJnYXRld2F5LkpTT04iXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMiXSxbd24uQ1VTVE9NLCJnYXRld2F5LmN1c3RvbSJdXSkpO3ZhciBUbixTbixrbjtlKCJTb3VyY2VUeXBlIixUbiksZnVuY3Rpb24oZSl7ZS5NU0c9Im1lc3NhZ2UiLGUuVE9QSUM9InRvcGljIixlLkNPTlNUPSJjb25zdGFudCJ9KFRufHxlKCJTb3VyY2VUeXBlIixUbj17fSkpLGUoIk9QQ1VhU291cmNlVHlwZSIsU24pLGZ1bmN0aW9uKGUpe2UuUEFUSD0icGF0aCIsZS5JREVOVElGSUVSPSJpZGVudGlmaWVyIixlLkNPTlNUPSJjb25zdGFudCJ9KFNufHxlKCJPUENVYVNvdXJjZVR5cGUiLFNuPXt9KSksZSgiRGV2aWNlSW5mb1R5cGUiLGtuKSxmdW5jdGlvbihlKXtlLkZVTEw9ImZ1bGwiLGUuUEFSVElBTD0icGFydGlhbCJ9KGtufHxlKCJEZXZpY2VJbmZvVHlwZSIsa249e30pKTtjb25zdCBMbj1lKCJTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbVG4uTVNHLCJnYXRld2F5LnNvdXJjZS10eXBlLm1zZyJdLFtUbi5UT1BJQywiZ2F0ZXdheS5zb3VyY2UtdHlwZS50b3BpYyJdLFtUbi5DT05TVCwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5jb25zdCJdLFtTbi5QQVRILCJnYXRld2F5LnNvdXJjZS10eXBlLnBhdGgiXSxbU24uSURFTlRJRklFUiwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5pZGVudGlmaWVyIl0sW1NuLkNPTlNULCJnYXRld2F5LnNvdXJjZS10eXBlLmNvbnN0Il1dKSk7dmFyIEZuLEluO2UoIlNlcnZlclNpZGVScGNUeXBlIixGbiksZnVuY3Rpb24oZSl7ZS5XaXRoUmVzcG9uc2U9InR3b1dheSIsZS5XaXRob3V0UmVzcG9uc2U9Im9uZVdheSJ9KEZufHxlKCJTZXJ2ZXJTaWRlUnBjVHlwZSIsRm49e30pKSxlKCJSZXF1ZXN0VHlwZSIsSW4pLGZ1bmN0aW9uKGUpe2UuQ09OTkVDVF9SRVFVRVNUPSJjb25uZWN0UmVxdWVzdHMiLGUuRElTQ09OTkVDVF9SRVFVRVNUPSJkaXNjb25uZWN0UmVxdWVzdHMiLGUuQVRUUklCVVRFX1JFUVVFU1Q9ImF0dHJpYnV0ZVJlcXVlc3RzIixlLkFUVFJJQlVURV9VUERBVEU9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuU0VSVkVSX1NJREVfUlBDPSJzZXJ2ZXJTaWRlUnBjIn0oSW58fGUoIlJlcXVlc3RUeXBlIixJbj17fSkpO2NvbnN0IEFuPWUoIlJlcXVlc3RUeXBlc1RyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW0luLkNPTk5FQ1RfUkVRVUVTVCwiZ2F0ZXdheS5yZXF1ZXN0LmNvbm5lY3QtcmVxdWVzdCJdLFtJbi5ESVNDT05ORUNUX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5kaXNjb25uZWN0LXJlcXVlc3QiXSxbSW4uQVRUUklCVVRFX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5hdHRyaWJ1dGUtcmVxdWVzdCJdLFtJbi5BVFRSSUJVVEVfVVBEQVRFLCJnYXRld2F5LnJlcXVlc3QuYXR0cmlidXRlLXVwZGF0ZSJdLFtJbi5TRVJWRVJfU0lERV9SUEMsImdhdGV3YXkucmVxdWVzdC5ycGMtY29ubmVjdGlvbiJdXSkpO3ZhciBObjtlKCJNYXBwaW5nS2V5c1R5cGUiLE5uKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5DVVNUT009ImV4dGVuc2lvbkNvbmZpZyIsZS5SUENfTUVUSE9EUz0icnBjX21ldGhvZHMiLGUuQVRUUklCVVRFU19VUERBVEVTPSJhdHRyaWJ1dGVzX3VwZGF0ZXMifShObnx8ZSgiTWFwcGluZ0tleXNUeXBlIixObj17fSkpO2NvbnN0IE1uPWUoIk1hcHBpbmdLZXlzUGFuZWxUaXRsZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LnRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5LmtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5LnJwYy1tZXRob2RzIl1dKSksRW49ZSgiTWFwcGluZ0tleXNBZGRLZXlUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tObi5BVFRSSUJVVEVTLCJnYXRld2F5LmFkZC1hdHRyaWJ1dGUiXSxbTm4uVElNRVNFUklFUywiZ2F0ZXdheS5hZGQtdGltZXNlcmllcyJdLFtObi5DVVNUT00sImdhdGV3YXkuYWRkLWtleSJdLFtObi5BVFRSSUJVVEVTX1VQREFURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZS11cGRhdGUiXSxbTm4uUlBDX01FVEhPRFMsImdhdGV3YXkuYWRkLXJwYy1tZXRob2QiXV0pKSxxbj1lKCJNYXBwaW5nS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW05uLkNVU1RPTSwiZ2F0ZXdheS5kZWxldGUta2V5Il0sW05uLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFtObi5SUENfTUVUSE9EUywiZ2F0ZXdheS5kZWxldGUtcnBjLW1ldGhvZCJdXSkpLERuPWUoIk1hcHBpbmdLZXlzTm9LZXlzVGV4dFRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkubm8tYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5Lm5vLXRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5Lm5vLWtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5Lm5vLXJwYy1tZXRob2RzIl1dKSk7dmFyIFBuLEduLE9uO2UoIlNlcnZlclNpZGVSUENUeXBlIixQbiksZnVuY3Rpb24oZSl7ZS5PTkVfV0FZPSJvbmVXYXkiLGUuVFdPX1dBWT0idHdvV2F5In0oUG58fGUoIlNlcnZlclNpZGVSUENUeXBlIixQbj17fSkpLGUoIk1hcHBpbmdWYWx1ZVR5cGUiLEduKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLklOVEVHRVI9ImludGVnZXIiLGUuRE9VQkxFPSJkb3VibGUiLGUuQk9PTEVBTj0iYm9vbGVhbiJ9KEdufHxlKCJNYXBwaW5nVmFsdWVUeXBlIixHbj17fSkpLGUoIk1vZGlmaWVyVHlwZSIsT24pLGZ1bmN0aW9uKGUpe2UuRElWSURFUj0iZGl2aWRlciIsZS5NVUxUSVBMSUVSPSJtdWx0aXBsaWVyIn0oT258fGUoIk1vZGlmaWVyVHlwZSIsT249e30pKTtjb25zdCBSbj1lKCJNb2RpZmllclR5cGVzTWFwIixuZXcgTWFwKFtbT24uRElWSURFUix7bmFtZToiZ2F0ZXdheS5kaXZpZGVyIixpY29uOiJtZGk6ZGl2aXNpb24ifV0sW09uLk1VTFRJUExJRVIse25hbWU6ImdhdGV3YXkubXVsdGlwbGllciIsaWNvbjoibWRpOm11bHRpcGxpY2F0aW9uIn1dXSkpLFZuPWUoIm1hcHBpbmdWYWx1ZVR5cGVzTWFwIixuZXcgTWFwKFtbR24uU1RSSU5HLHtuYW1lOiJ2YWx1ZS5zdHJpbmciLGljb246Im1kaTpmb3JtYXQtdGV4dCJ9XSxbR24uSU5URUdFUix7bmFtZToidmFsdWUuaW50ZWdlciIsaWNvbjoibWRpOm51bWVyaWMifV0sW0duLkRPVUJMRSx7bmFtZToidmFsdWUuZG91YmxlIixpY29uOiJtZGk6bnVtZXJpYyJ9XSxbR24uQk9PTEVBTix7bmFtZToidmFsdWUuYm9vbGVhbiIsaWNvbjoibWRpOmNoZWNrYm94LW1hcmtlZC1vdXRsaW5lIn1dXSkpLEJuPWUoIkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbd24uSlNPTiwiZ2F0ZXdheS5KU09OLWhpbnQiXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMtaGludCJdLFt3bi5DVVNUT00sImdhdGV3YXkuY3VzdG9tLWhpbnQiXV0pKTt2YXIgVW47ZSgiU2VjdXJpdHlQb2xpY3kiLFVuKSxmdW5jdGlvbihlKXtlLkJBU0lDMTI4PSJCYXNpYzEyOFJzYTE1IixlLkJBU0lDMjU2PSJCYXNpYzI1NiIsZS5CQVNJQzI1NlNIQT0iQmFzaWMyNTZTaGEyNTYifShVbnx8ZSgiU2VjdXJpdHlQb2xpY3kiLFVuPXt9KSk7Y29uc3QgX249ZSgiU2VjdXJpdHlQb2xpY3lUeXBlcyIsW3t2YWx1ZTpVbi5CQVNJQzEyOCxuYW1lOiJCYXNpYzEyOFJTQTE1In0se3ZhbHVlOlVuLkJBU0lDMjU2LG5hbWU6IkJhc2ljMjU2In0se3ZhbHVlOlVuLkJBU0lDMjU2U0hBLG5hbWU6IkJhc2ljMjU2U0hBMjU2In1dKTt2YXIgSG47ZSgiTW9kYnVzUHJvdG9jb2xUeXBlIixIbiksZnVuY3Rpb24oZSl7ZS5UQ1A9InRjcCIsZS5VRFA9InVkcCIsZS5TZXJpYWw9InNlcmlhbCJ9KEhufHxlKCJNb2RidXNQcm90b2NvbFR5cGUiLEhuPXt9KSk7Y29uc3Qgem49ZSgiTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAiLG5ldyBNYXAoW1tIbi5UQ1AsIlRDUCJdLFtIbi5VRFAsIlVEUCJdLFtIbi5TZXJpYWwsIlNlcmlhbCJdXSkpO3ZhciBXbixqbjtlKCJNb2RidXNNZXRob2RUeXBlIixXbiksZnVuY3Rpb24oZSl7ZS5TT0NLRVQ9InNvY2tldCIsZS5SVFU9InJ0dSJ9KFdufHxlKCJNb2RidXNNZXRob2RUeXBlIixXbj17fSkpLGUoIk1vZGJ1c1NlcmlhbE1ldGhvZFR5cGUiLGpuKSxmdW5jdGlvbihlKXtlLlJUVT0icnR1IixlLkFTQ0lJPSJhc2NpaSJ9KGpufHxlKCJNb2RidXNTZXJpYWxNZXRob2RUeXBlIixqbj17fSkpO2NvbnN0IEtuPWUoIk1vZGJ1c01ldGhvZExhYmVsc01hcCIsbmV3IE1hcChbW1duLlNPQ0tFVCwiU29ja2V0Il0sW1duLlJUVSwiUlRVIl0sW2puLkFTQ0lJLCJBU0NJSSJdXSkpLCRuPWUoIk1vZGJ1c0J5dGVTaXplcyIsWzUsNiw3LDhdKTt2YXIgWW47ZSgiTW9kYnVzUGFyaXR5IixZbiksZnVuY3Rpb24oZSl7ZS5FdmVuPSJFIixlLk9kZD0iTyIsZS5Ob25lPSJOIn0oWW58fGUoIk1vZGJ1c1Bhcml0eSIsWW49e30pKTtjb25zdCBRbj1lKCJNb2RidXNQYXJpdHlMYWJlbHNNYXAiLG5ldyBNYXAoW1tZbi5FdmVuLCJFdmVuIl0sW1luLk9kZCwiT2RkIl0sW1luLk5vbmUsIk5vbmUiXV0pKTt2YXIgSm4sWG47ZSgiTW9kYnVzT3JkZXJUeXBlIixKbiksZnVuY3Rpb24oZSl7ZS5CSUc9IkJJRyIsZS5MSVRUTEU9IkxJVFRMRSJ9KEpufHxlKCJNb2RidXNPcmRlclR5cGUiLEpuPXt9KSksZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbiksZnVuY3Rpb24oZSl7ZS5Ib2xkaW5nUmVnaXN0ZXJzPSJob2xkaW5nX3JlZ2lzdGVycyIsZS5Db2lsc0luaXRpYWxpemVyPSJjb2lsc19pbml0aWFsaXplciIsZS5JbnB1dFJlZ2lzdGVycz0iaW5wdXRfcmVnaXN0ZXJzIixlLkRpc2NyZXRlSW5wdXRzPSJkaXNjcmV0ZV9pbnB1dHMifShYbnx8ZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbj17fSkpO2NvbnN0IFpuPWUoIk1vZGJ1c1JlZ2lzdGVyVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbWG4uSG9sZGluZ1JlZ2lzdGVycywiZ2F0ZXdheS5ob2xkaW5nX3JlZ2lzdGVycyJdLFtYbi5Db2lsc0luaXRpYWxpemVyLCJnYXRld2F5LmNvaWxzX2luaXRpYWxpemVyIl0sW1huLklucHV0UmVnaXN0ZXJzLCJnYXRld2F5LmlucHV0X3JlZ2lzdGVycyJdLFtYbi5EaXNjcmV0ZUlucHV0cywiZ2F0ZXdheS5kaXNjcmV0ZV9pbnB1dHMiXV0pKTt2YXIgZWE7ZSgiTW9kYnVzRGF0YVR5cGUiLGVhKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLkJZVEVTPSJieXRlcyIsZS5CSVRTPSJiaXRzIixlLklOVDg9IjhpbnQiLGUuVUlOVDg9Ijh1aW50IixlLkZMT0FUOD0iOGZsb2F0IixlLklOVDE2PSIxNmludCIsZS5VSU5UMTY9IjE2dWludCIsZS5GTE9BVDE2PSIxNmZsb2F0IixlLklOVDMyPSIzMmludCIsZS5VSU5UMzI9IjMydWludCIsZS5GTE9BVDMyPSIzMmZsb2F0IixlLklOVDY0PSI2NGludCIsZS5VSU5UNjQ9IjY0dWludCIsZS5GTE9BVDY0PSI2NGZsb2F0In0oZWF8fGUoIk1vZGJ1c0RhdGFUeXBlIixlYT17fSkpO2NvbnN0IHRhPWUoIk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzIixbZWEuQllURVMsZWEuQklUUyxlYS5TVFJJTkddKTt2YXIgbmEsYWE7ZSgiTW9kYnVzT2JqZWN0Q291bnRCeURhdGFUeXBlIixuYSksZnVuY3Rpb24oZSl7ZVtlWyI4aW50Il09MV09IjhpbnQiLGVbZVsiOHVpbnQiXT0xXT0iOHVpbnQiLGVbZVsiOGZsb2F0Il09MV09IjhmbG9hdCIsZVtlWyIxNmludCJdPTFdPSIxNmludCIsZVtlWyIxNnVpbnQiXT0xXT0iMTZ1aW50IixlW2VbIjE2ZmxvYXQiXT0xXT0iMTZmbG9hdCIsZVtlWyIzMmludCJdPTJdPSIzMmludCIsZVtlWyIzMnVpbnQiXT0yXT0iMzJ1aW50IixlW2VbIjMyZmxvYXQiXT0yXT0iMzJmbG9hdCIsZVtlWyI2NGludCJdPTRdPSI2NGludCIsZVtlWyI2NHVpbnQiXT00XT0iNjR1aW50IixlW2VbIjY0ZmxvYXQiXT00XT0iNjRmbG9hdCJ9KG5hfHxlKCJNb2RidXNPYmplY3RDb3VudEJ5RGF0YVR5cGUiLG5hPXt9KSksZSgiTW9kYnVzVmFsdWVLZXkiLGFhKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5BVFRSSUJVVEVTX1VQREFURVM9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuUlBDX1JFUVVFU1RTPSJycGMifShhYXx8ZSgiTW9kYnVzVmFsdWVLZXkiLGFhPXt9KSk7Y29uc3Qgb2E9ZSgiTW9kYnVzS2V5c1BhbmVsVGl0bGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5LmF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS50aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkucnBjLXJlcXVlc3RzIl1dKSksaWE9ZSgiTW9kYnVzS2V5c0FkZEtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmFkZC10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hZGQtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuYWRkLXJwYy1yZXF1ZXN0Il1dKSkscmE9ZSgiTW9kYnVzS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuZGVsZXRlLXJwYy1yZXF1ZXN0Il1dKSksc2E9ZSgiTW9kYnVzS2V5c05vS2V5c1RleHRUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS5uby10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5uby1hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkubm8tcnBjLXJlcXVlc3RzIl1dKSksbGE9ZSgiTW9kYnVzQmF1ZHJhdGVzIixbNDgwMCw5NjAwLDE5MjAwLDM4NDAwLDU3NjAwLDExNTIwMCwyMzA0MDAsNDYwODAwLDkyMTYwMF0pO2NsYXNzIGNhe2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsidHMiLCJzdGF0dXMiLCJtZXNzYWdlIl0sdGhpcy5nYXRld2F5TG9nTGlua3M9W3tuYW1lOiJHZW5lcmFsIixrZXk6IkxPR1MifSx7bmFtZToiU2VydmljZSIsa2V5OiJTRVJWSUNFX0xPR1MifSx7bmFtZToiQ29ubmVjdGlvbiIsa2V5OiJDT05ORUNUSU9OX0xPR1MifSx7bmFtZToiU3RvcmFnZSIsa2V5OiJTVE9SQUdFX0xPR1MifSx7a2V5OiJFWFRFTlNJT05TX0xPR1MiLG5hbWU6IkV4dGVuc2lvbiJ9XTtjb25zdCBlPXtwcm9wZXJ0eToidHMiLGRpcmVjdGlvbjp3LkRFU0N9O3RoaXMucGFnZUxpbms9bmV3IEMoMTAsMCxudWxsLGUpLHRoaXMuZGF0YVNvdXJjZT1uZXcgeShbXSl9bmdPbkluaXQoKXt0aGlzLnVwZGF0ZVdpZGdldFRpdGxlKCl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3I9dGhpcy5wYWdpbmF0b3IsdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vblRpbWV3aW5kb3dDaGFuZ2VGdW5jdGlvbj1lPT4odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vcHRpb25zLnRpbWVXaW5kb3dDb25maWc9ZSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksZSksdGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmxvZ0xpbmtzPVt7a2V5OmAke2Uua2V5fV9MT0dTYCxuYW1lOiJDb25uZWN0b3IiLGZpbHRlckZuOmU9PiFlLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX0se2tleTpgJHtlLmtleX1fTE9HU2AsbmFtZToiQ29udmVydGVyIixmaWx0ZXJGbjplPT5lLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX1dfWVsc2UgdGhpcy5sb2dMaW5rcz10aGlzLmdhdGV3YXlMb2dMaW5rczt0aGlzLmFjdGl2ZUxpbms9dGhpcy5sb2dMaW5rc1swXSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXVwZGF0ZVdpZGdldFRpdGxlKCl7aWYodGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LndpZGdldENvbmZpZy50aXRsZSx0PSIke2Nvbm5lY3Rvck5hbWV9IjtpZihlLmluY2x1ZGVzKHQpKXtjb25zdCBuPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmN0eC53aWRnZXRUaXRsZT1lLnJlcGxhY2UodCxuLmtleSl9fX11cGRhdGVEYXRhKCl7aWYodGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhLmxlbmd0aCYmdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhWzBdKXtsZXQgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGFbMF0uZGF0YS5tYXAoKGU9Pntjb25zdCB0PXt0czplWzBdLGtleTp0aGlzLmFjdGl2ZUxpbmsua2V5LG1lc3NhZ2U6ZVsxXSxzdGF0dXM6IklOVkFMSUQgTE9HIEZPUk1BVCJ9O3RyeXt0Lm1lc3NhZ2U9L1xbKC4qKS8uZXhlYyhlWzFdKVswXX1jYXRjaChuKXt0Lm1lc3NhZ2U9ZVsxXX10cnl7dC5zdGF0dXM9ZVsxXS5tYXRjaCgvXHwoXHcrKVx8LylbMV19Y2F0Y2goZSl7dC5zdGF0dXM9IklOVkFMSUQgTE9HIEZPUk1BVCJ9cmV0dXJuIHR9KSk7dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuJiYoZT1lLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuKGUpKSkpLHRoaXMuZGF0YVNvdXJjZS5kYXRhPWV9fW9uVGFiQ2hhbmdlZChlKXt0aGlzLmFjdGl2ZUxpbms9ZSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXN0YXR1c0NsYXNzKGUpe3N3aXRjaChlKXtjYXNlIHF0LkRFQlVHOnJldHVybiJzdGF0dXMgc3RhdHVzLWRlYnVnIjtjYXNlIHF0LldBUk5JTkc6cmV0dXJuInN0YXR1cyBzdGF0dXMtd2FybmluZyI7Y2FzZSBxdC5FUlJPUjpjYXNlIHF0LkVYQ0VQVElPTjpyZXR1cm4ic3RhdHVzIHN0YXR1cy1lcnJvciI7ZGVmYXVsdDpyZXR1cm4ic3RhdHVzIHN0YXR1cy1pbmZvIn19c3RhdHVzQ2xhc3NNc2coZSl7aWYoZT09PXF0LkVYQ0VQVElPTilyZXR1cm4ibXNnLXN0YXR1cy1leGNlcHRpb24ifXRyYWNrQnlMb2dUcyhlLHQpe3JldHVybiB0LnRzfWNoYW5nZVN1YnNjcmlwdGlvbigpe3RoaXMuY3R4LmRhdGFzb3VyY2VzJiZ0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlcyYmKHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlc1swXS5kYXRhS2V5cz1be25hbWU6dGhpcy5hY3RpdmVMaW5rLmtleSx0eXBlOlQudGltZXNlcmllcyxzZXR0aW5nczp7fX1dLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5jYWxsYmFja3Mub25EYXRhVXBkYXRlZD0oKT0+e3RoaXMudXBkYXRlRGF0YSgpfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjYSxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Y2Esc2VsZWN0b3I6InRiLWdhdGV3YXktbG9ncyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToic2VhcmNoSW5wdXRGaWVsZCIsZmlyc3Q6ITAscHJlZGljYXRlOlsic2VhcmNoSW5wdXQiXSxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic29ydCIsZmlyc3Q6ITAscHJlZGljYXRlOmcsZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InBhZ2luYXRvciIsZmlyc3Q6ITAscHJlZGljYXRlOmgsZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRUYWJsZSxzZWxlY3RvcjoibWF0LXRhYmxlLCB0YWJsZVttYXQtdGFibGVdIixleHBvcnRBczpbIm1hdFRhYmxlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsRGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyQ2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyUm93RGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyUm93RGVmXSIsaW5wdXRzOlsibWF0SGVhZGVyUm93RGVmIiwibWF0SGVhZGVyUm93RGVmU3RpY2t5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDb2x1bW5EZWYsc2VsZWN0b3I6IlttYXRDb2x1bW5EZWZdIixpbnB1dHM6WyJtYXRDb2x1bW5EZWYiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGxEZWYsc2VsZWN0b3I6IlttYXRDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRSb3dEZWYsc2VsZWN0b3I6IlttYXRSb3dEZWZdIixpbnB1dHM6WyJtYXRSb3dEZWZDb2x1bW5zIiwibWF0Um93RGVmV2hlbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbCxzZWxlY3RvcjoibWF0LWhlYWRlci1jZWxsLCB0aFttYXQtaGVhZGVyLWNlbGxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGwsc2VsZWN0b3I6Im1hdC1jZWxsLCB0ZFttYXQtY2VsbF0ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0SGVhZGVyUm93LHNlbGVjdG9yOiJtYXQtaGVhZGVyLXJvdywgdHJbbWF0LWhlYWRlci1yb3ddIixleHBvcnRBczpbIm1hdEhlYWRlclJvdyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0Um93LHNlbGVjdG9yOiJtYXQtcm93LCB0clttYXQtcm93XSIsZXhwb3J0QXM6WyJtYXRSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp4Lk1hdFBhZ2luYXRvcixzZWxlY3RvcjoibWF0LXBhZ2luYXRvciIsaW5wdXRzOlsiY29sb3IiLCJwYWdlSW5kZXgiLCJsZW5ndGgiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImhpZGVQYWdlU2l6ZSIsInNob3dGaXJzdExhc3RCdXR0b25zIiwic2VsZWN0Q29uZmlnIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsicGFnZSJdLGV4cG9ydEFzOlsibWF0UGFnaW5hdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp6Lk1hdERpdmlkZXIsc2VsZWN0b3I6Im1hdC1kaXZpZGVyIixpbnB1dHM6WyJ2ZXJ0aWNhbCIsImluc2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXYsc2VsZWN0b3I6IlttYXQtdGFiLW5hdi1iYXJdIixpbnB1dHM6WyJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJkaXNhYmxlUmlwcGxlIiwiY29sb3IiLCJ0YWJQYW5lbCJdLGV4cG9ydEFzOlsibWF0VGFiTmF2QmFyIiwibWF0VGFiTmF2Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXZQYW5lbCxzZWxlY3RvcjoibWF0LXRhYi1uYXYtcGFuZWwiLGlucHV0czpbImlkIl0sZXhwb3J0QXM6WyJtYXRUYWJOYXZQYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiTGluayxzZWxlY3RvcjoiW21hdC10YWItbGlua10sIFttYXRUYWJMaW5rXSIsaW5wdXRzOlsiYWN0aXZlIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJpZCJdLGV4cG9ydEFzOlsibWF0VGFiTGluayJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUxvZ3NDb21wb25lbnQiLGNhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmNhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWxvZ3MiLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2N0eDpbe3R5cGU6YX1dLGRpYWxvZ1JlZjpbe3R5cGU6YX1dLHNlYXJjaElucHV0RmllbGQ6W3t0eXBlOm8sYXJnczpbInNlYXJjaElucHV0Il19XSxzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0scGFnaW5hdG9yOlt7dHlwZTpvLGFyZ3M6W2hdfV19fSk7Y2xhc3MgcGF7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLnV0aWxzPW4sdGhpcy5pc051bWVyaWNEYXRhPSExLHRoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3RhdGlzdGljc0tleXM9W10sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnM9e2NhbGxiYWNrczp7b25EYXRhVXBkYXRlZDooKT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfSx1c2VEYXNoYm9hcmRUaW1ld2luZG93OiExLGxlZ2VuZENvbmZpZzp7cG9zaXRpb246Uy5ib3R0b219fSx0aGlzLmluaXQ9KCk9Pnt0aGlzLmZsb3RDdHg9eyRzY29wZTp0aGlzLmN0eC4kc2NvcGUsJGluamVjdG9yOnRoaXMuY3R4LiRpbmplY3Rvcix1dGlsczp0aGlzLmN0eC51dGlscyxpc01vYmlsZTp0aGlzLmN0eC5pc01vYmlsZSxpc0VkaXQ6dGhpcy5jdHguaXNFZGl0LHN1YnNjcmlwdGlvbkFwaTp0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGksZGV0ZWN0Q2hhbmdlczp0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzLHNldHRpbmdzOnRoaXMuY3R4LnNldHRpbmdzfX0sdGhpcy51cGRhdGVDaGFydD0oKT0+e30sdGhpcy5yZXNpemU9KCk9Pnt9O2NvbnN0IGE9e3Byb3BlcnR5OiIwIixkaXJlY3Rpb246dy5ERVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwwLG51bGwsYSksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiMCIsIjEiXSx0aGlzLmRhdGFTb3VyY2U9bmV3IHkoW10pLHRoaXMuc3RhdGlzdGljRm9ybT10aGlzLmZiLmdyb3VwKHtzdGF0aXN0aWNLZXk6W251bGwsW11dfSksdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e3RoaXMuY29tbWFuZE9iaj1udWxsLHRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5jb21tYW5kT2JqPXRoaXMuY29tbWFuZHMuZmluZCgodD0+dC5hdHRyaWJ1dGVPbkdhdGV3YXk9PT1lKSkpLHRoaXMuc3Vic2NyaXB0aW9uSW5mbyYmdGhpcy5jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhc291cmNlc1swXS5lbnRpdHksZSl9KSl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKCk9PnRoaXMuc29ydERhdGEoKSkpLHRoaXMuaW5pdCgpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXMubGVuZ3RoKXtjb25zdCBlPXRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZW50aXR5O2lmKGUuaWQuaWQ9PT1rKXJldHVybjt0aGlzLmdlbmVyYWw/dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eVRpbWVzZXJpZXNMYXRlc3QoZS5pZCkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGU9PmUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1Byb2R1Y2VkIil8fGUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1NlbnQiKSkpO3RoaXMuY3JlYXRlR2VuZXJhbENoYXJ0c1N1YnNjcmlwdGlvbihlLG4pfSkpOnRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKGUuaWQsTC5TSEFSRURfU0NPUEUsWyJnZW5lcmFsX2NvbmZpZ3VyYXRpb24iXSkuc3Vic2NyaWJlKCh0PT57dCYmdC5sZW5ndGgmJih0aGlzLmNvbW1hbmRzPXRbMF0udmFsdWUuc3RhdGlzdGljcy5jb21tYW5kcywhdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWUmJnRoaXMuY29tbWFuZHMmJnRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5Iikuc2V0VmFsdWUodGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpLHRoaXMuY3JlYXRlQ2hhcnRzU3Vic2NyaXB0aW9uKGUsdGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpKSl9KSl9fW5hdmlnYXRlVG9TdGF0aXN0aWNzKCl7Y29uc3QgZT1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTt0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIub3BlblN0YXRlKCJjb25maWd1cmF0aW9uIixlKX1zb3J0RGF0YSgpe3RoaXMuZGF0YVNvdXJjZS5zb3J0RGF0YSh0aGlzLmRhdGFTb3VyY2UuZGF0YSx0aGlzLnNvcnQpfW9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGUpe3RoaXMubGVnZW5kRGF0YS5rZXlzW2VdLmRhdGFLZXkuaGlkZGVuPSF0aGlzLmxlZ2VuZERhdGEua2V5c1tlXS5kYXRhS2V5LmhpZGRlbix0aGlzLnN1YnNjcmlwdGlvbi51cGRhdGVEYXRhVmlzaWJpbGl0eShlKX1jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1be25hbWU6dCxsYWJlbDp0fV0sdGhpcy5zdWJzY3JpcHRpb25JbmZvPW4sdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWNyZWF0ZUdlbmVyYWxDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1bXSx0Py5sZW5ndGgmJnQuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUsbGFiZWw6ZX0pfSkpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZGF0YUtleXMuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUubmFtZSxsYWJlbDplLmxhYmVsfSl9KSksdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0KCl7dGhpcy5yZXNpemUkJiZ0aGlzLnJlc2l6ZSQuZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uRGF0YVVwZGF0ZUVycm9yKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5wYXJzZUV4Y2VwdGlvbihlKTtsZXQgbj10Lm5hbWU7dC5tZXNzYWdlJiYobis9IjogIit0Lm1lc3NhZ2UpLGNvbnNvbGUuZXJyb3Iobil9b25EYXRhVXBkYXRlZCgpe3RoaXMuaXNEYXRhT25seU51bWJlcnMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJih0aGlzLmNoYXJ0SW5pdGVkfHx0aGlzLmluaXRDaGFydCgpKX1pbml0Q2hhcnQoKXt0aGlzLmNoYXJ0SW5pdGVkPSEwLHRoaXMuZmxvdEN0eC4kY29udGFpbmVyPSQodGhpcy5zdGF0aXN0aWNDaGFydC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc2l6ZSQub2JzZXJ2ZSh0aGlzLnN0YXRpc3RpY0NoYXJ0Lm5hdGl2ZUVsZW1lbnQpfWlzRGF0YU9ubHlOdW1iZXJzKCl7dGhpcy5nZW5lcmFsP3RoaXMuaXNOdW1lcmljRGF0YT0hMDoodGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5zdWJzY3JpcHRpb24uZGF0YS5sZW5ndGg/dGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhOltdLHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCYmIXRoaXMuZGF0YVR5cGVEZWZpbmVkJiYodGhpcy5kYXRhVHlwZURlZmluZWQ9ITAsdGhpcy5pc051bWVyaWNEYXRhPXRoaXMuZGF0YVNvdXJjZS5kYXRhLmV2ZXJ5KChlPT4haXNOYU4oK2VbMV0pKSkpKX1jaGFuZ2VTdWJzY3JpcHRpb24oZSl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMucmVzZXQoKSx0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LnN1YnNjcmlwdGlvbkFwaS5jcmVhdGVTdWJzY3JpcHRpb25Gcm9tSW5mbyhBLnRpbWVzZXJpZXMsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3Vic2NyaXB0aW9uPWUsdGhpcy5pc0RhdGFPbmx5TnVtYmVycygpLHRoaXMubGVnZW5kRGF0YT10aGlzLnN1YnNjcmlwdGlvbi5sZWdlbmREYXRhLHRoaXMuZmxvdEN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uPWUsdGhpcy5yZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuY3R4LmRldGVjdENoYW5nZXMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJnRoaXMuaW5pdENoYXJ0KCl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpYLlV0aWxzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cGEsc2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsaW5wdXRzOntjdHg6ImN0eCIsZ2VuZXJhbDoiZ2VuZXJhbCJ9LHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzb3J0IixmaXJzdDohMCxwcmVkaWNhdGU6ZyxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic3RhdGlzdGljQ2hhcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInN0YXRpc3RpY0NoYXJ0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0Lmx0LW1kPSJjb2x1bW4iPlxuICA8bWF0LWNhcmQgW2Zvcm1Hcm91cF09InN0YXRpc3RpY0Zvcm0iICpuZ0lmPSIhZ2VuZXJhbCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0YXRpc3RpY0tleSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGtleSBvZiBzdGF0aXN0aWNzS2V5cyIgW3ZhbHVlXT0ia2V5Ij5cbiAgICAgICAgICB7eyBrZXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb21tYW5kIG9mIGNvbW1hbmRzIiBbdmFsdWVdPSJjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSI+XG4gICAgICAgICAge3sgY29tbWFuZC5hdHRyaWJ1dGVPbkdhdGV3YXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1lcnJvclxuICAgICAgKm5nSWY9IiFzdGF0aXN0aWNzS2V5cy5sZW5ndGggJiYgIWNvbW1hbmRzLmxlbmd0aCI+XG4gICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWMtY29tbWFuZHMtZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0ibmF2aWdhdGVUb1N0YXRpc3RpY3MoKSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3MtYnV0dG9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIiAqbmdJZj0iY29tbWFuZE9iaiI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IFt2YWx1ZV09ImNvbW1hbmRPYmouY29tbWFuZCIgZGlzYWJsZWQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9tYXQtY2FyZD5cbiAgPGRpdiBjbGFzcz0iY2hhcnQtYm94IiBmeExheW91dD0iY29sdW1uIj5cbiAgICA8ZGl2IGNsYXNzPSJjaGFydC1jb250YWluZXIiICNzdGF0aXN0aWNDaGFydCBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+PC9kaXY+XG4gICAgPHRhYmxlIFtmeFNob3ddPSIhaXNOdW1lcmljRGF0YSIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgICAgIG1hdFNvcnREaXNhYmxlQ2xlYXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMCI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7IFwnd2lkZ2V0cy5nYXRld2F5LmNyZWF0ZWQtdGltZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCByb3c7IGxldCByb3dJbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICB7eyByb3dbMF18IGRhdGU6XCd5eXl5LU1NLWRkIEhIOm1tOnNzXCcgfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9IjEiPlxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdyI+XG4gICAgICAgICAge3sgcm93WzFdIH19XG4gICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj0iZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IlxuICAgICAgICAgICAgICAgKm1hdFJvd0RlZj0ibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uczsiPjwvbWF0LXJvdz5cbiAgICA8L3RhYmxlPlxuICAgIDxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwICYmICFpc051bWVyaWNEYXRhIlxuICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7IFwnYXR0cmlidXRlLm5vLXRlbGVtZXRyeS10ZXh0XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGRpdiBmeEZsZXggY2xhc3M9ImxlZ2VuZCIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgW2Z4U2hvd109ImlzTnVtZXJpY0RhdGEiPlxuICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWtleXMiICpuZ0Zvcj0ibGV0IGxlZ2VuZEtleSBvZiBsZWdlbmREYXRhPy5rZXlzIiBmeExheW91dD0icm93IlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZ2VuZC1saW5lIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09ImxlZ2VuZEtleS5kYXRhS2V5LmNvbG9yIj48L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1sYWJlbCJcbiAgICAgICAgICAgICAoY2xpY2spPSJvbkxlZ2VuZEtleUhpZGRlbkNoYW5nZShsZWdlbmRLZXkuZGF0YUluZGV4KSJcbiAgICAgICAgICAgICBbY2xhc3NdPSJ7IFwnaGlkZGVuLWxhYmVsXCc6IGxlZ2VuZERhdGEua2V5c1tsZWdlbmRLZXkuZGF0YUluZGV4XS5kYXRhS2V5LmhpZGRlbiB9IlxuICAgICAgICAgICAgIFtpbm5lckhUTUxdPSJsZWdlbmRLZXkuZGF0YUtleS5sYWJlbCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BhZGRpbmc6MH06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXJ7aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDo0MCU7aGVpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OjM1cHg7cGFkZGluZzoxNXB4O2dhcDoyMnB4fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzUwcHgpezpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDoxMDAlfX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveCw6aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtmbGV4LWdyb3c6MX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveHtvdmVyZmxvdzphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcj4qe2hlaWdodDoxMDAlfTpob3N0IC5sZWdlbmR7ZmxleC13cmFwOndyYXA7d2lkdGg6MTAwJTtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206NHB4O21hcmdpbi10b3A6MTVweH06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVse3BhZGRpbmc6MnB4IDIwcHggMnB4IDEwcHg7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWwuaGlkZGVuLWxhYmVse3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7b3BhY2l0eTouNn06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTVweDtoZWlnaHQ6M3B4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7b3V0bGluZTpub25lfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmhlLk1hdENhcmQsc2VsZWN0b3I6Im1hdC1jYXJkIixpbnB1dHM6WyJhcHBlYXJhbmNlIl0sZXhwb3J0QXM6WyJtYXRDYXJkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5EYXRlUGlwZSxuYW1lOiJkYXRlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U3RhdGlzdGljc0NvbXBvbmVudCIscGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtbWQ9ImNvbHVtbiI+XG4gIDxtYXQtY2FyZCBbZm9ybUdyb3VwXT0ic3RhdGlzdGljRm9ybSIgKm5nSWY9IiFnZW5lcmFsIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3RhdGlzdGljS2V5Ij5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQga2V5IG9mIHN0YXRpc3RpY3NLZXlzIiBbdmFsdWVdPSJrZXkiPlxuICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgY29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQuYXR0cmlidXRlT25HYXRld2F5Ij5cbiAgICAgICAgICB7eyBjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iIXN0YXRpc3RpY3NLZXlzLmxlbmd0aCAmJiAhY29tbWFuZHMubGVuZ3RoIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpYy1jb21tYW5kcy1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPGRpdj5cbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJuYXZpZ2F0ZVRvU3RhdGlzdGljcygpIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljcy1idXR0b25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siICpuZ0lmPSJjb21tYW5kT2JqIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW3ZhbHVlXT0iY29tbWFuZE9iai5jb21tYW5kIiBkaXNhYmxlZD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L21hdC1jYXJkPlxuICA8ZGl2IGNsYXNzPSJjaGFydC1ib3giIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgI3N0YXRpc3RpY0NoYXJ0IFtmeFNob3ddPSJpc051bWVyaWNEYXRhIj48L2Rpdj5cbiAgICA8dGFibGUgW2Z4U2hvd109IiFpc051bWVyaWNEYXRhIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIlxuICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSIwIj5cbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdzsgbGV0IHJvd0luZGV4ID0gaW5kZXgiPlxuICAgICAgICAgIHt7IHJvd1swXXwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMSI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiA3MCUiPnt7IFwnd2lkZ2V0cy5nYXRld2F5Lm1lc3NhZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgcm93Ij5cbiAgICAgICAgICB7eyByb3dbMV0gfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG1hdC1oZWFkZXItcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCJcbiAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICA8bWF0LXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgIDwvdGFibGU+XG4gICAgPHNwYW4gW2Z4U2hvd109ImRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDAgJiYgIWlzTnVtZXJpY0RhdGEiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8ZGl2IGZ4RmxleCBjbGFzcz0ibGVnZW5kIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIiBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+XG4gICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQta2V5cyIgKm5nRm9yPSJsZXQgbGVnZW5kS2V5IG9mIGxlZ2VuZERhdGE/LmtleXMiIGZ4TGF5b3V0PSJyb3ciXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiPlxuICAgICAgICA8c3BhbiBjbGFzcz0ibGVnZW5kLWxpbmUiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ibGVnZW5kS2V5LmRhdGFLZXkuY29sb3IiPjwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWxhYmVsIlxuICAgICAgICAgICAgIChjbGljayk9Im9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGxlZ2VuZEtleS5kYXRhSW5kZXgpIlxuICAgICAgICAgICAgIFtjbGFzc109InsgXCdoaWRkZW4tbGFiZWxcJzogbGVnZW5kRGF0YS5rZXlzW2xlZ2VuZEtleS5kYXRhSW5kZXhdLmRhdGFLZXkuaGlkZGVuIH0iXG4gICAgICAgICAgICAgW2lubmVySFRNTF09ImxlZ2VuZEtleS5kYXRhS2V5LmxhYmVsIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzowfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtvdmVyZmxvdy15OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjQwJTtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6MzVweDtwYWRkaW5nOjE1cHg7Z2FwOjIycHh9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NTBweCl7Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjEwMCV9fTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94LDpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtY29udGFpbmVye2hlaWdodDoxMDAlO2ZsZXgtZ3JvdzoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94e292ZXJmbG93OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyPip7aGVpZ2h0OjEwMCV9Omhvc3QgLmxlZ2VuZHtmbGV4LXdyYXA6d3JhcDt3aWR0aDoxMDAlO3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo0cHg7bWFyZ2luLXRvcDoxNXB4fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWx7cGFkZGluZzoycHggMjBweCAycHggMTBweDt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLmxlZ2VuZCAubGVnZW5kLWtleXMgLmxlZ2VuZC1sYWJlbC5oaWRkZW4tbGFiZWx7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtvcGFjaXR5Oi42fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGluZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNXB4O2hlaWdodDozcHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtvdXRsaW5lOm5vbmV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpYLlV0aWxzU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0sc3RhdGlzdGljQ2hhcnQ6W3t0eXBlOm8sYXJnczpbInN0YXRpc3RpY0NoYXJ0Il19XSxjdHg6W3t0eXBlOmF9XSxnZW5lcmFsOlt7dHlwZTphfV19fSk7Y2xhc3MgbWF7c3RhdGlje3RoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1zdGF0aWN7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdPbGRGaWVsZHM9WyJhdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uIiwiZXh0ZW5zaW9uLWNvbmZpZyJdfXN0YXRpY3t0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ05ld0ZpZWxkcz1bImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIiwicmVzcG9uc2VUb3BpY1FvUyIsImV4dGVuc2lvbkNvbmZpZyJdfXN0YXRpYyBtYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGU/Lm1hcCgoKHtjb252ZXJ0ZXI6ZSx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpuPTF9KT0+e2NvbnN0IGE9ZS5kZXZpY2VJbmZvPz90aGlzLmV4dHJhY3RDb252ZXJ0ZXJEZXZpY2VJbmZvKGUpLG89ey4uLmUsZGV2aWNlSW5mbzphLGV4dGVuc2lvbkNvbmZpZzplLmV4dGVuc2lvbkNvbmZpZ3x8ZVsiZXh0ZW5zaW9uLWNvbmZpZyJdfHxudWxsfTtyZXR1cm4gdGhpcy5jbGVhblVwT2xkRmllbGRzKG8pLHtjb252ZXJ0ZXI6byx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpufX0pKX1zdGF0aWMgbWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbihlKXtyZXR1cm4gdGhpcy5tcXR0UmVxdWVzdFR5cGVLZXlzLnJlZHVjZSgoKHQsbik9PmVbbl0/KHRbbl09ZVtuXS5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwUmVxdWVzdFRvVXBncmFkZWRWZXJzaW9uKGUsbik7cmV0dXJuIHRoaXMuY2xlYW5VcE9sZEZpZWxkcyh0KSx0fSkpLHQpOnQpLHt9KX1zdGF0aWMgbWFwUmVxdWVzdHNUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMucmVkdWNlKCgodCxuKT0+ZVtuXT8odFtuXT1lW25dLm1hcCgoZT0+e249PT1Jbi5TRVJWRVJfU0lERV9SUEMmJmRlbGV0ZSBlLnR5cGU7Y29uc3R7YXR0cmlidXRlTmFtZUV4cHJlc3Npb246dCxkZXZpY2VJbmZvOmEsLi4ub309ZSxpPXsuLi5vLGF0dHJpYnV0ZU5hbWVKc29uRXhwcmVzc2lvbjp0fHxudWxsLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZSE9PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGx9O3JldHVybiB0aGlzLmNsZWFuVXBOZXdGaWVsZHMoaSksaX0pKSx0KTp0KSx7fSl9c3RhdGljIG1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlPy5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwQ29udmVydGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLmNvbnZlcnRlcik7cmV0dXJuIHRoaXMuY2xlYW5VcE5ld0ZpZWxkcyh0KSx7Y29udmVydGVyOnQsdG9waWNGaWx0ZXI6ZS50b3BpY0ZpbHRlcn19KSl9c3RhdGljIG1hcENvbnZlcnRlclRvRG93bmdyYWRlZFZlcnNpb24oZSl7Y29uc3R7ZGV2aWNlSW5mbzp0LC4uLm59PWU7cmV0dXJuIGUudHlwZSE9PXduLkJZVEVTP3suLi5uLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjp0Py5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLk1TRz90LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZUpzb25FeHByZXNzaW9uOnQ/LmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlPT09VG4uTVNHP3QuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246bnVsbCxkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uOnQ/LmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIT09VG4uTVNHP3Q/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbjp0Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSE9PVRuLk1TRz90Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbjpudWxsfTp7Li4ubixkZXZpY2VOYW1lRXhwcmVzc2lvbjp0LmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVFeHByZXNzaW9uOnQuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb24sImV4dGVuc2lvbi1jb25maWciOmUuZXh0ZW5zaW9uQ29uZmlnfX1zdGF0aWMgY2xlYW5VcE9sZEZpZWxkcyhlKXt0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ09sZEZpZWxkcy5mb3JFYWNoKCh0PT5kZWxldGUgZVt0XSkpLFooZSl9c3RhdGljIGNsZWFuVXBOZXdGaWVsZHMoZSl7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdOZXdGaWVsZHMuZm9yRWFjaCgodD0+ZGVsZXRlIGVbdF0pKSxaKGUpfXN0YXRpYyBnZXRUeXBlU291cmNlQnlWYWx1ZShlKXtyZXR1cm4gZS5pbmNsdWRlcygiJHsiKT9Ubi5NU0c6ZS5pbmNsdWRlcygiLyIpP1RuLlRPUElDOlRuLkNPTlNUfXN0YXRpYyBleHRyYWN0Q29udmVydGVyRGV2aWNlSW5mbyhlKXtjb25zdCB0PWUuZGV2aWNlTmFtZUV4cHJlc3Npb258fGUuZGV2aWNlTmFtZUpzb25FeHByZXNzaW9ufHxlLmRldmljZU5hbWVUb3BpY0V4cHJlc3Npb258fG51bGwsbj1lLmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6dD90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKHQpOm51bGwsYT1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9ufHxlLmRldmljZVR5cGVUb3BpY0V4cHJlc3Npb258fGUuZGV2aWNlVHlwZUpzb25FeHByZXNzaW9ufHwiZGVmYXVsdCIsbz1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6YT90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKGEpOm51bGw7cmV0dXJuIHR8fGE/e2RldmljZU5hbWVFeHByZXNzaW9uOnQsZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6bixkZXZpY2VQcm9maWxlRXhwcmVzc2lvbjphLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOm99Om51bGx9c3RhdGljIG1hcFJlcXVlc3RUb1VwZ3JhZGVkVmVyc2lvbihlLHQpe2NvbnN0IG49ZS5kZXZpY2VOYW1lSnNvbkV4cHJlc3Npb258fGUuZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbnx8bnVsbCxhPWUuZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbnx8ZS5kZXZpY2VUeXBlSnNvbkV4cHJlc3Npb258fCJkZWZhdWx0IixvPWE/dGhpcy5nZXRUeXBlU291cmNlQnlWYWx1ZShhKTpudWxsLGk9ZS5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZXx8ZS5hdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb258fG51bGwscj10PT09SW4uU0VSVkVSX1NJREVfUlBDPzE6bnVsbCxzPXQ9PT1Jbi5TRVJWRVJfU0lERV9SUEM/ZS5yZXNwb25zZVRvcGljRXhwcmVzc2lvbj9Gbi5XaXRoUmVzcG9uc2U6Rm4uV2l0aG91dFJlc3BvbnNlOm51bGw7cmV0dXJuey4uLmUsYXR0cmlidXRlTmFtZUV4cHJlc3Npb246aSxhdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZTppP3RoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoaSk6bnVsbCxkZXZpY2VJbmZvOmUuZGV2aWNlSW5mbz9lLmRldmljZUluZm86bj97ZGV2aWNlTmFtZUV4cHJlc3Npb246bixkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZTp0aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKG4pLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOmEsZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6b306bnVsbCxyZXNwb25zZVRvcGljUW9TOnIsdHlwZTpzfX19ZSgiTXF0dFZlcnNpb25NYXBwaW5nVXRpbCIsbWEpO2NsYXNzIGRhe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dCx0aGlzLmdhdGV3YXlWZXJzaW9uPWJhLnBhcnNlVmVyc2lvbih0aGlzLmdhdGV3YXlWZXJzaW9uSW4pLHRoaXMuY29uZmlnVmVyc2lvbj1iYS5wYXJzZVZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlnVmVyc2lvbil9Z2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBkYXRlTmVlZGVkKCk/dGhpcy5wcm9jZXNzVmVyc2lvblVwZGF0ZSgpOnRoaXMuY29ubmVjdG9yfXByb2Nlc3NWZXJzaW9uVXBkYXRlKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBncmFkZU5lZWRlZCgpP3RoaXMuZ2V0VXBncmFkZWRWZXJzaW9uKCk6dGhpcy5pc1ZlcnNpb25Eb3duZ3JhZGVOZWVkZWQoKT90aGlzLmdldERvd25ncmFkZWRWZXJzaW9uKCk6dGhpcy5jb25uZWN0b3J9aXNWZXJzaW9uVXBkYXRlTmVlZGVkKCl7cmV0dXJuISF0aGlzLmdhdGV3YXlWZXJzaW9uJiZ0aGlzLmNvbmZpZ1ZlcnNpb24hPT10aGlzLmdhdGV3YXlWZXJzaW9ufWlzVmVyc2lvblVwZ3JhZGVOZWVkZWQoKXtyZXR1cm4gdGhpcy5nYXRld2F5VmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiYoIXRoaXMuY29uZmlnVmVyc2lvbnx8dGhpcy5jb25maWdWZXJzaW9uPHRoaXMuZ2F0ZXdheVZlcnNpb24pfWlzVmVyc2lvbkRvd25ncmFkZU5lZWRlZCgpe3JldHVybiB0aGlzLmNvbmZpZ1ZlcnNpb24mJnRoaXMuY29uZmlnVmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiZ0aGlzLmNvbmZpZ1ZlcnNpb24+dGhpcy5nYXRld2F5VmVyc2lvbn19ZSgiR2F0ZXdheUNvbm5lY3RvclZlcnNpb25Qcm9jZXNzb3IiLGRhKTtjbGFzcyB1YSBleHRlbmRzIGRhe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLmdhdGV3YXlWZXJzaW9uSW49ZSx0aGlzLmNvbm5lY3Rvcj10LHRoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdHtjb25uZWN0UmVxdWVzdHM6ZSxkaXNjb25uZWN0UmVxdWVzdHM6dCxhdHRyaWJ1dGVSZXF1ZXN0czpuLGF0dHJpYnV0ZVVwZGF0ZXM6YSxzZXJ2ZXJTaWRlUnBjOm99PXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO2xldCBpPXsuLi50aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbixyZXF1ZXN0c01hcHBpbmc6bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmUsZGlzY29ubmVjdFJlcXVlc3RzOnQsYXR0cmlidXRlUmVxdWVzdHM6bixhdHRyaWJ1dGVVcGRhdGVzOmEsc2VydmVyU2lkZVJwYzpvfSksbWFwcGluZzptYS5tYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24ubWFwcGluZyl9O3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMuZm9yRWFjaCgoZT0+e2NvbnN0e1tlXTp0LC4uLm59PWk7aT17Li4ubn19KSksdGhpcy5jbGVhblVwQ29uZmlnSnNvbihpKSx7Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246aSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19Z2V0RG93bmdyYWRlZFZlcnNpb24oKXtjb25zdHtyZXF1ZXN0c01hcHBpbmc6ZSxtYXBwaW5nOnQsLi4ubn09dGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24sYT1lP21hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihlKTp7fSxvPW1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7Li4ubiwuLi5hLG1hcHBpbmc6b30sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWNsZWFuVXBDb25maWdKc29uKGUpe2VlKGUucmVxdWVzdHNNYXBwaW5nLHt9KSYmZGVsZXRlIGUucmVxdWVzdHNNYXBwaW5nLGVlKGUubWFwcGluZyxbXSkmJmRlbGV0ZSBlLm1hcHBpbmd9fWUoIk1xdHRWZXJzaW9uUHJvY2Vzc29yIix1YSk7Y2xhc3MgZ2EgZXh0ZW5kcyBkYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dH1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdCBlPXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7bWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZS5tYXN0ZXIpOntzbGF2ZXM6W119LHNsYXZlOmUuc2xhdmU/aGEubWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlLnNsYXZlKTp7fX0sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWdldERvd25ncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbjtyZXR1cm57Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246ey4uLmUsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e30sbWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLm1hc3Rlcik6e3NsYXZlczpbXX19LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX19ZSgiTW9kYnVzVmVyc2lvblByb2Nlc3NvciIsZ2EpO2NsYXNzIGZhIGV4dGVuZHMgZGF7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMuZ2F0ZXdheVZlcnNpb25Jbj1lLHRoaXMuY29ubmVjdG9yPXR9Z2V0VXBncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbi5zZXJ2ZXI7cmV0dXJuey4uLnRoaXMuY29ubmVjdG9yLGNvbmZpZ3VyYXRpb25Kc29uOntzZXJ2ZXI6ZT94YS5tYXBTZXJ2ZXJUb1VwZ3JhZGVkVmVyc2lvbihlKTp7fSxtYXBwaW5nOmU/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUubWFwcGluZyk6W119LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX1nZXREb3duZ3JhZGVkVmVyc2lvbigpe3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24pfSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19fWUoIk9wY1ZlcnNpb25Qcm9jZXNzb3IiLGZhKTtjbGFzcyB5YXtjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9bmV3IGksdGhpcy5mYj1yKGRlKSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmJhc2ljRm9ybUdyb3VwPXRoaXMuaW5pdEJhc2ljRm9ybUdyb3VwKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLm9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVkLmVtaXQoKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnNldFZhbHVlKHRoaXMubWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSkse2VtaXRFdmVudDohMX0pfW9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZSh0aGlzLmdldE1hcHBlZFZhbHVlKGUpKSx0aGlzLm9uVG91Y2hlZCgpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eWEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnlhLGlucHV0czp7Z2VuZXJhbFRhYkNvbnRlbnQ6ImdlbmVyYWxUYWJDb250ZW50In0sb3V0cHV0czp7aW5pdGlhbGl6ZWQ6ImluaXRpYWxpemVkIn0sbmdJbXBvcnQ6dH0pfX1lKCJHYXRld2F5Q29ubmVjdG9yQmFzaWNDb25maWdEaXJlY3RpdmUiLHlhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnlhLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2dlbmVyYWxUYWJDb250ZW50Olt7dHlwZTphfV0saW5pdGlhbGl6ZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBiYXtzdGF0aWMgZ2V0Q29uZmlnKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSBfdC5NUVRUOnJldHVybiBuZXcgdWEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk9QQ1VBOnJldHVybiBuZXcgZmEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk1PREJVUzpyZXR1cm4gbmV3IGdhKHQsZSkuZ2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCk7ZGVmYXVsdDpyZXR1cm4gZX19c3RhdGljIHBhcnNlVmVyc2lvbihlKXtyZXR1cm4gdGUoZSk/ZTpuZShlKT9wYXJzZUZsb2F0KGUucmVwbGFjZSgvXC4vZywiIikuc2xpY2UoMCwzKSkvMTAwOjB9fWUoIkdhdGV3YXlDb25uZWN0b3JWZXJzaW9uTWFwcGluZ1V0aWwiLGJhKTtjbGFzcyBoYXtzdGF0aWMgbWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJue3NsYXZlczplLnNsYXZlcy5tYXAoKGU9Pntjb25zdHtzZW5kRGF0YU9ubHlPbkNoYW5nZTp0LC4uLm59PWU7cmV0dXJuey4uLm4sZGV2aWNlVHlwZTplLmRldmljZVR5cGU/PyJkZWZhdWx0IixyZXBvcnRTdHJhdGVneTp0P3t0eXBlOnNuLk9uQ2hhbmdlfTp7dHlwZTpzbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6ZS5wb2xsUGVyaW9kfX19KSl9fXN0YXRpYyBtYXBNYXN0ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybntzbGF2ZXM6ZS5zbGF2ZXMubWFwKChlPT57Y29uc3R7cmVwb3J0U3RyYXRlZ3k6dCwuLi5ufT1lO3JldHVybnsuLi5uLHNlbmREYXRhT25seU9uQ2hhbmdlOnQ/LnR5cGUhPT1zbi5PblJlcG9ydFBlcmlvZH19KSl9fXN0YXRpYyBtYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZSl7aWYoIWU/LnZhbHVlcylyZXR1cm4gZTtjb25zdCB0PU9iamVjdC5rZXlzKGUudmFsdWVzKS5yZWR1Y2UoKCh0LG4pPT50PXsuLi50LFtuXTpbZS52YWx1ZXNbbl1dfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlKXtpZighZT8udmFsdWVzKXJldHVybiBlO2NvbnN0IHQ9T2JqZWN0LmtleXMoZS52YWx1ZXMpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOnRoaXMubWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZS52YWx1ZXNbbl1bMF0pfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOmVbbl0ubWFwKChlPT4oey4uLmUsdHlwZToiaW50Ij09PWUudHlwZT9lYS5JTlQxNjplLnR5cGV9KSkpfSkse30pfX1lKCJNb2RidXNWZXJzaW9uTWFwcGluZ1V0aWwiLGhhKTtjbGFzcyB4YXtzdGF0aWMgbWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZSl7Y29uc3R7bWFwcGluZzp0LGRpc2FibGVTdWJzY3JpcHRpb25zOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsLi4ub309ZTtyZXR1cm57Li4ubyxwb2xsUGVyaW9kSW5NaWxsaXM6YT8/NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6IW59fXN0YXRpYyBtYXBTZXJ2ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe2NvbnN0e21hcHBpbmc6dCxzZXJ2ZXI6bn09ZSx7ZW5hYmxlU3Vic2NyaXB0aW9uczphLC4uLm99PW4/P3t9O3JldHVybnsuLi5vLG1hcHBpbmc6dD90aGlzLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpOltdLGRpc2FibGVTdWJzY3JpcHRpb25zOiFhfX1zdGF0aWMgbWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlLm1hcCgoZT0+KHsuLi5lLGRldmljZU5vZGVTb3VyY2U6dGhpcy5nZXREZXZpY2VOb2RlU291cmNlQnlWYWx1ZShlLmRldmljZU5vZGVQYXR0ZXJuKSxkZXZpY2VJbmZvOntkZXZpY2VOYW1lRXhwcmVzc2lvbjplLmRldmljZU5hbWVQYXR0ZXJuLGRldmljZU5hbWVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VOYW1lUGF0dGVybiksZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246ZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiKX0sYXR0cmlidXRlczplLmF0dHJpYnV0ZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLGF0dHJpYnV0ZXNfdXBkYXRlczplLmF0dHJpYnV0ZXNfdXBkYXRlcy5tYXAoKGU9Pih7a2V5OmUuYXR0cmlidXRlT25UaGluZ3NCb2FyZCx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5hdHRyaWJ1dGVPbkRldmljZSksdmFsdWU6ZS5hdHRyaWJ1dGVPbkRldmljZX0pKSksdGltZXNlcmllczplLnRpbWVzZXJpZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLHJwY19tZXRob2RzOmUucnBjX21ldGhvZHMubWFwKChlPT4oe21ldGhvZDplLm1ldGhvZCxhcmd1bWVudHM6ZS5hcmd1bWVudHMubWFwKChlPT4oe3ZhbHVlOmUsdHlwZTp0aGlzLmdldEFyZ3VtZW50VHlwZShlKX0pKSl9KSkpfSkpKX1zdGF0aWMgbWFwTWFwcGluZ1RvRG93bmdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGUubWFwKChlPT4oey4uLmUsZGV2aWNlTmFtZVBhdHRlcm46ZS5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVQYXR0ZXJuOmUuZGV2aWNlSW5mby5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbixhdHRyaWJ1dGVzOmUuYXR0cmlidXRlcy5tYXAoKGU9Pih7a2V5OmUua2V5LHBhdGg6ZS52YWx1ZX0pKSksYXR0cmlidXRlc191cGRhdGVzOmUuYXR0cmlidXRlc191cGRhdGVzLm1hcCgoZT0+KHthdHRyaWJ1dGVPblRoaW5nc0JvYXJkOmUua2V5LGF0dHJpYnV0ZU9uRGV2aWNlOmUudmFsdWV9KSkpLHRpbWVzZXJpZXM6ZS50aW1lc2VyaWVzLm1hcCgoZT0+KHtrZXk6ZS5rZXkscGF0aDplLnZhbHVlfSkpKSxycGNfbWV0aG9kczplLnJwY19tZXRob2RzLm1hcCgoZT0+KHttZXRob2Q6ZS5tZXRob2QsYXJndW1lbnRzOmUuYXJndW1lbnRzLm1hcCgoZT0+ZS52YWx1ZSkpfSkpKX0pKSl9c3RhdGljIGdldFR5cGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6ZS5pbmNsdWRlcygiLyIpfHxlLmluY2x1ZGVzKCJcXCIpP1NuLlBBVEg6U24uQ09OU1R9c3RhdGljIGdldERldmljZU5vZGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6U24uUEFUSH1zdGF0aWMgZ2V0QXJndW1lbnRUeXBlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpPyJpbnRlZ2VyIjoiZmxvYXQiO2RlZmF1bHQ6cmV0dXJuInN0cmluZyJ9fX1lKCJPcGNWZXJzaW9uTWFwcGluZ1V0aWwiLHhhKTtjbGFzcyB2YXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGJhLnBhcnNlVmVyc2lvbihlKT49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5QaXBlfSl9c3RhdGlje3RoaXMuybVwaXBlPXQuybXJtW5nRGVjbGFyZVBpcGUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsaXNTdGFuZGFsb25lOiEwLG5hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyJ9KX19ZSgiTGF0ZXN0VmVyc2lvbkNvbmZpZ1BpcGUiLHZhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyB3YXtjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lfXRyYW5zZm9ybShlKXtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnBvcnQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKXx8ZS5oYXNFcnJvcigibWF4Iik/dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5wb3J0LWxpbWl0cy1lcnJvciIse21pbjpFdC5NSU4sbWF4OkV0Lk1BWH0pOiIifXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d2EsZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LlBpcGV9KX1zdGF0aWN7dGhpcy7JtXBpcGU9dC7Jtcm1bmdEZWNsYXJlUGlwZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxpc1N0YW5kYWxvbmU6ITAsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0pfX1lKCJHYXRld2F5UG9ydFRvb2x0aXBQaXBlIix3YSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAiLHN0YW5kYWxvbmU6ITB9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WS5UcmFuc2xhdGVTZXJ2aWNlfV19KTtjbGFzcyBDYXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGUubWFwKCgoe3ZhbHVlOmV9KT0+ZS50b1N0cmluZygpKSkuam9pbigiLCAiKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyJ9KX19ZSgiUnBjVGVtcGxhdGVBcnJheVZpZXdQaXBlIixDYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpDYSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBUYXt0cmFuc2Zvcm0oZSx0LG4pe3JldHVybiFufHxuPy5pbmNsdWRlcyhTbi5QQVRIKT90IT09U24uQ09OU1Q/YHdpZGdldC9saWIvZ2F0ZXdheS8ke2V9LSR7dH1fZm5gOnZvaWQgMDoiYXR0cmlidXRlcyI9PT1lfHwidGltZXNlcmllcyI9PT1lPyJ3aWRnZXQvbGliL2dhdGV3YXkvYXR0cmlidXRlc190aW1lc2VyaWVzX2V4cHJlc3Npb25zX2ZuIjoid2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifSl9fWUoIkdhdGV3YXlIZWxwTGlua1BpcGUiLFRhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImdldEdhdGV3YXlIZWxwTGluayIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBTYXtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbGVtZW50UmVmPWUsdGhpcy5yZW5kZXJlcj10LHRoaXMudG9vbHRpcD1uLHRoaXMudG9vbHRpcEVuYWJsZWQ9ITAsdGhpcy5wb3NpdGlvbj0iYWJvdmUiLHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5vYnNlcnZlTW91c2VFdmVudHMoKSx0aGlzLmFwcGx5VHJ1bmNhdGlvblN0eWxlcygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudG9vbHRpcC5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy50b29sdGlwLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJnRoaXMuaGlkZVRvb2x0aXAoKSx0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9b2JzZXJ2ZU1vdXNlRXZlbnRzKCl7a2UodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiKS5waXBlKE1lKCgoKT0+dGhpcy50b29sdGlwRW5hYmxlZCkpLE1lKCgoKT0+dGhpcy5pc092ZXJmbG93bih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpKSxFZSgoKCk9PnRoaXMuc2hvd1Rvb2x0aXAoKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKSxrZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUoTWUoKCgpPT50aGlzLnRvb2x0aXBFbmFibGVkKSksTWUoKCgpPT50aGlzLnRvb2x0aXAuX2lzVG9vbHRpcFZpc2libGUoKSkpLEVlKCgoKT0+dGhpcy5oaWRlVG9vbHRpcCgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWFwcGx5VHJ1bmNhdGlvblN0eWxlcygpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIndoaXRlLXNwYWNlIiwibm93cmFwIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKX1pc092ZXJmbG93bihlKXtyZXR1cm4gZS5jbGllbnRXaWR0aDxlLnNjcm9sbFdpZHRofXNob3dUb29sdGlwKCl7dGhpcy50b29sdGlwLm1lc3NhZ2U9dGhpcy50ZXh0fHx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lclRleHQsdGhpcy50b29sdGlwLnNob3coKX1oaWRlVG9vbHRpcCgpe3RoaXMudG9vbHRpcC5oaWRlKCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpTYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp6ZS5NYXRUb29sdGlwfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9c3RhdGlje3RoaXMuybVkaXI9dC7Jtcm1bmdEZWNsYXJlRGlyZWN0aXZlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6e3RleHQ6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0ZXh0Il0sdG9vbHRpcEVuYWJsZWQ6InRvb2x0aXBFbmFibGVkIixwb3NpdGlvbjoicG9zaXRpb24ifSxwcm92aWRlcnM6W1dlXSxuZ0ltcG9ydDp0fSl9fWUoIlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUiLFNhKSxIZShbTigpXSxTYS5wcm90b3R5cGUsInRvb2x0aXBFbmFibGVkIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixwcm92aWRlcnM6W1dlXSxzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOnplLk1hdFRvb2x0aXB9XSxwcm9wRGVjb3JhdG9yczp7dGV4dDpbe3R5cGU6YSxhcmdzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIl19XSx0b29sdGlwRW5hYmxlZDpbe3R5cGU6YX1dLHBvc2l0aW9uOlt7dHlwZTphfV19fSk7Y2xhc3Mga2F7c2V0IGNoaXBzKGUpe2VlKHRoaXMuY2hpcHNWYWx1ZSxlKXx8KHRoaXMuY2hpcHNWYWx1ZT1lLHNldFRpbWVvdXQoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSksMCkpfWNvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZWw9ZSx0aGlzLnJlbmRlcmVyPXQsdGhpcy50cmFuc2xhdGU9bix0aGlzLndpbmRvdz1hLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJtYXgtaGVpZ2h0IiwiNDhweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJvdmVyZmxvdyIsImF1dG8iKSxrZShhLCJyZXNpemUiKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSkpLHRoaXMub2JzZXJ2ZUludGVyc2VjdGlvbigpfW9ic2VydmVJbnRlcnNlY3Rpb24oKXt0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZT0+e2UuZm9yRWFjaCgoZT0+e2UuaXNJbnRlcnNlY3RpbmcmJnRoaXMuYWRqdXN0Q2hpcHMoKX0pKX0pKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1hZGp1c3RDaGlwcygpe2NvbnN0IGU9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy1jaGlwIiksbj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUodCkubWFyZ2luTGVmdCl8fDAsYT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIm1hdC1jaGlwOm5vdCguZWxsaXBzaXMtY2hpcCkiKTtpZih0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPjEpe2NvbnN0IG89dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy10ZXh0Iik7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5IiwiaW5saW5lLWZsZXgiKSxvLmlubmVySFRNTD10aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmVsbGlwc2lzLWNoaXBzLXRleHQiLHtjb3VudDp0aGlzLmNoaXBzVmFsdWUubGVuZ3RofSk7Y29uc3QgaT1lLm9mZnNldFdpZHRoLSh0Lm9mZnNldFdpZHRoK24pO2xldCByPTAscz0wO2EuZm9yRWFjaCgoZT0+e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUoZSwiZGlzcGxheSIsImlubGluZS1mbGV4Iik7Y29uc3QgdD1lLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX3RleHQtbGFiZWwiKTt0aGlzLmFwcGx5TWF4Q2hpcFRleHRXaWR0aCh0LGkvMykscisoZS5vZmZzZXRXaWR0aCtuKTw9aSYmczx0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPyhzKysscis9ZS5vZmZzZXRXaWR0aCtuKTp0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsImRpc3BsYXkiLCJub25lIil9KSksby5pbm5lckhUTUw9dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5lbGxpcHNpcy1jaGlwcy10ZXh0Iix7Y291bnQ6dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aC1zfSkscz09PXRoaXMuY2hpcHNWYWx1ZT8ubGVuZ3RoJiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHQsImRpc3BsYXkiLCJub25lIil9ZWxzZSBpZigxPT09dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aCl7Y29uc3Qgbz1hWzBdLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbiIpLGk9by5xdWVyeVNlbGVjdG9yKCIubWRjLWV2b2x1dGlvbi1jaGlwX190ZXh0LWxhYmVsIikscj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUobykucGFkZGluZ0xlZnQpfHwwLHM9cGFyc2VGbG9hdCh0aGlzLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG8pLnBhZGRpbmdSaWdodCl8fDAsbD1lLm9mZnNldFdpZHRoLW4tKHIrcyk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYVswXSwiZGlzcGxheSIsImlubGluZS1mbGV4IiksdGhpcy5hcHBseU1heENoaXBUZXh0V2lkdGgoaSxsKX1lbHNlIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodCwiZGlzcGxheSIsIm5vbmUiKX1hcHBseU1heENoaXBUZXh0V2lkdGgoZSx0KXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm1heC13aWR0aCIsdCsicHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm92ZXJmbG93IiwiaGlkZGVuIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlLCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIndoaXRlLXNwYWNlIiwibm93cmFwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjphZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6a2EsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJbdGItZWxsaXBzaXMtY2hpcC1saXN0XSIsaW5wdXRzOntjaGlwczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCIsImNoaXBzIl19LG5nSW1wb3J0OnR9KX19ZSgiRWxsaXBzaXNDaGlwTGlzdERpcmVjdGl2ZSIsa2EpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6a2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX0se3R5cGU6V2luZG93LGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbYWVdfV19XSxwcm9wRGVjb3JhdG9yczp7Y2hpcHM6W3t0eXBlOmEsYXJnczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfV19fSk7Y2xhc3MgTGF7Y29uc3RydWN0b3IoZSx0LG4sYSl7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWUsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2U9dCx0aGlzLnpvbmU9bix0aGlzLnRyYW5zbGF0ZT1hLHRoaXMuYXR0cmlidXRlc1N1YmplY3Q9bmV3IExlKFtdKSx0aGlzLnBhZ2VEYXRhU3ViamVjdD1uZXcgTGUoTSgpKSx0aGlzLnBhZ2VEYXRhJD10aGlzLnBhZ2VEYXRhU3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlzLnNlbGVjdGlvbj1uZXcgamUoITAsW10pfWNvbm5lY3QoZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCl9ZGlzY29ubmVjdChlKXt0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5wYWdlRGF0YVN1YmplY3QuY29tcGxldGUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXImJih0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIudW5zdWJzY3JpYmUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXI9bnVsbCl9bG9hZEF0dHJpYnV0ZXMoZSx0LG4sYT0hMSl7YSYmKHRoaXMuYWxsQXR0cmlidXRlcz1udWxsLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlciYmKHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlci51bnN1YnNjcmliZSgpLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlcj1udWxsKSksdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtjb25zdCBvPW5ldyBGZTtyZXR1cm4gdGhpcy5mZXRjaEF0dHJpYnV0ZXMoZSx0LG4pLnBpcGUocWUoKCgpPT5JZShNKCkpKSkpLnN1YnNjcmliZSgoZT0+e3RoaXMuYXR0cmlidXRlc1N1YmplY3QubmV4dChlLmRhdGEpLHRoaXMucGFnZURhdGFTdWJqZWN0Lm5leHQoZSksby5uZXh0KGUpfSkpLG99ZmV0Y2hBdHRyaWJ1dGVzKGUsdCxuKXtyZXR1cm4gdGhpcy5nZXRBbGxBdHRyaWJ1dGVzKGUsdCkucGlwZShEZSgoZT0+e2NvbnN0IHQ9ZS5maWx0ZXIoKGU9PjAhPT1lLmxhc3RVcGRhdGVUcykpO3JldHVybiBuLmZpbHRlckRhdGEodCl9KSkpfWdldEFsbEF0dHJpYnV0ZXMoZSx0KXtpZighdGhpcy5hbGxBdHRyaWJ1dGVzKXtsZXQgbjtFLmdldCh0KT8odGhpcy50ZWxlbWV0cnlTdWJzY3JpYmVyPXEuY3JlYXRlRW50aXR5QXR0cmlidXRlc1N1YnNjcmlwdGlvbih0aGlzLnRlbGVtZXRyeVdzU2VydmljZSxlLHQsdGhpcy56b25lKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuc3Vic2NyaWJlKCksbj10aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuYXR0cmlidXRlRGF0YSQoKSk6bj10aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyhlLHQpLHRoaXMuYWxsQXR0cmlidXRlcz1uLnBpcGUoUGUoMSksR2UoKSl9cmV0dXJuIHRoaXMuYWxsQXR0cmlidXRlc31pc0FsbFNlbGVjdGVkKCl7Y29uc3QgZT10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShEZSgodD0+ZT09PXQubGVuZ3RoKSkpfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5waXBlKERlKChlPT4hZS5sZW5ndGgpKSl9dG90YWwoKXtyZXR1cm4gdGhpcy5wYWdlRGF0YVN1YmplY3QucGlwZShEZSgoZT0+ZS50b3RhbEVsZW1lbnRzKSkpfW1hc3RlclRvZ2dsZSgpe3RoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShFZSgoZT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aD09PWUubGVuZ3RoP3RoaXMuc2VsZWN0aW9uLmNsZWFyKCk6ZS5mb3JFYWNoKChlPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0KGUpfSkpfSkpLE9lKDEpKS5zdWJzY3JpYmUoKX19ZSgiQXR0cmlidXRlRGF0YXNvdXJjZSIsTGEpO2NsYXNzIEZhe2NvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlU2VydmljZT1lLHRoaXMuc2F2ZVRlbXBsYXRlPW5ldyBpLHRoaXMudXNlVGVtcGxhdGU9bmV3IGksdGhpcy5vcmlnaW5hbE9yZGVyPSgpPT4wLHRoaXMuaXNPYmplY3Q9ZT0+b2UoZSksdGhpcy5pc0FycmF5PWU9PkFycmF5LmlzQXJyYXkoZSksdGhpcy5TTk1QTWV0aG9kc1RyYW5zbGF0aW9ucz10bn1uZ09uSW5pdCgpe31hcHBseVRlbXBsYXRlKGUsdCl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnVzZVRlbXBsYXRlLmVtaXQodCl9ZGVsZXRlVGVtcGxhdGUoZSx0KXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49dGhpcy5ycGNUZW1wbGF0ZXMuZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO3RoaXMucnBjVGVtcGxhdGVzLnNwbGljZShuLDEpO2NvbnN0IGE9YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5OmEsdmFsdWU6dGhpcy5ycGNUZW1wbGF0ZXN9XSkuc3Vic2NyaWJlKCgoKT0+e30pKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZhLGRlcHM6W3t0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkZhLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXMiLGlucHV0czp7Y29ubmVjdG9yVHlwZToiY29ubmVjdG9yVHlwZSIsY3R4OiJjdHgiLHJwY1RlbXBsYXRlczoicnBjVGVtcGxhdGVzIn0sb3V0cHV0czp7c2F2ZVRlbXBsYXRlOiJzYXZlVGVtcGxhdGUiLHVzZVRlbXBsYXRlOiJ1c2VUZW1wbGF0ZSJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZXMtdGl0bGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuPG1hdC1leHBhbnNpb24tcGFuZWwgaGlkZVRvZ2dsZSAqbmdGb3I9ImxldCB0ZW1wbGF0ZSBvZiBycGNUZW1wbGF0ZXMiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz0idGVtcGxhdGUtbmFtZSI+XG4gICAgICA8c3BhbiBtYXRUb29sdGlwPSJ7e3RlbXBsYXRlLm5hbWV9fSIgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+e3t0ZW1wbGF0ZS5uYW1lfX08L3NwYW4+XG4gICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IkRlbGV0ZSIgKGNsaWNrKT0iZGVsZXRlVGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPSJVc2UiIChjbGljayk9ImFwcGx5VGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9ImxldCBjb25maWcgb2YgdGVtcGxhdGUuY29uZmlnIHwga2V5VmFsdWVJc05vdEVtcHR5IlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IGNvbmZpZywgaW5uZXJWYWx1ZTogZmFsc2UgfSI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI1JQQ1RlbXBsYXRlUmVmIGxldC1jb25maWcgbGV0LWlubmVyVmFsdWU9XCdpbm5lclZhbHVlXCc+XG4gICAgPGRpdiBbZnhMYXlvdXRdPSJpc09iamVjdChjb25maWcudmFsdWUpID8gXCdjb2x1bW5cJzogXCdyb3dcJyJcbiAgICAgICAgIFtmeExheW91dEFsaWduXT0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ3NwYWNlLWJldHdlZW4gY2VudGVyXCcgOiBcJ1wnIlxuICAgICAgICAgW25nU3R5bGVdPSJ7XCdwYWRkaW5nLWxlZnRcJzogaW5uZXJWYWx1ZSA/IFwnMTZweFwnOiBcJzBcJ30iXG4gICAgICAgICBjbGFzcz0icnBjLXBhcmFtcy1yb3ciPlxuICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUta2V5Ij5cbiAgICAgICAge3shaW5uZXJWYWx1ZSA/IChcJ2dhdGV3YXkucnBjLlwnICsgY29uZmlnLmtleSB8IHRyYW5zbGF0ZSkgOiBjb25maWcua2V5fX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iaXNBcnJheShjb25maWcudmFsdWUpIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9ImFycmF5LXZhbHVlIj5cbiAgICAgICAge3sgY29uZmlnLnZhbHVlIHwgZ2V0UnBjVGVtcGxhdGVBcnJheVZpZXcgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iaXNPYmplY3QoY29uZmlnLnZhbHVlKSIgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENPYmplY3RSb3ciPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiAqbmdJZj0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgJiYgIWlzQXJyYXkoY29uZmlnLnZhbHVlKSJcbiAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdib29sZWFuLXRydWVcJzogY29uZmlnLnZhbHVlID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgIFwnYm9vbGVhbi1mYWxzZVwnOiBjb25maWcudmFsdWUgPT09IGZhbHNlICB9Ij5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29uZmlnLmtleSA9PT0gXCdtZXRob2RcJyBlbHNlIHZhbHVlIiBbbmdUZW1wbGF0ZU91dGxldF09IlNOTVBNZXRob2QiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZhbHVlPnt7IGNvbmZpZy52YWx1ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1NOTVBNZXRob2Q+e3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KGNvbmZpZy52YWx1ZSkgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNSUENPYmplY3RSb3c+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9ImxldCBzdWJDb25maWcgb2YgY29uZmlnLnZhbHVlIHwga2V5dmFsdWUgOiBvcmlnaW5hbE9yZGVyIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IHN1YkNvbmZpZywgaW5uZXJWYWx1ZTogdHJ1ZSB9Ij5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjB9Omhvc3QgLnRpdGxle2ZvbnQtd2VpZ2h0OjUwMH06aG9zdCAudGVtcGxhdGUta2V5e2NvbG9yOiMwMDAwMDA2MTtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4fTpob3N0IC5ib29sZWFuLXRydWUsOmhvc3QgLmJvb2xlYW4tZmFsc2V7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDtwYWRkaW5nOjAgMTJweDt3aWR0aDpmaXQtY29udGVudDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfTpob3N0IC5ib29sZWFuLWZhbHNle2NvbG9yOiNkMTI3MzA7YmFja2dyb3VuZC1jb2xvcjojZDEyNzMwMTR9Omhvc3QgLmJvb2xlYW4tdHJ1ZXtjb2xvcjojMTk4MDM4O2JhY2tncm91bmQtY29sb3I6IzE5ODAzODE0fTpob3N0IG1hdC1leHBhbnNpb24tcGFuZWx7bWFyZ2luLXRvcDoxMHB4O292ZXJmbG93OnZpc2libGV9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MDtmbGV4OjB9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uPm1hdC1pY29ue21hcmdpbi1sZWZ0OjE1cHg7Y29sb3I6IzAwMDAwMDYxfTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntwYWRkaW5nOjAgMCAwIDEycHh9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NDhweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgLm1hdC1jb250ZW50Lm1hdC1jb250ZW50LWhpZGUtdG9nZ2xle21hcmdpbi1yaWdodDowfTpob3N0IC5ycGMtcGFyYW1zLXJvd3tvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5ycGMtcGFyYW1zLXJvdyA6bm90KDpmaXJzdC1jaGlsZCl7d2hpdGUtc3BhY2U6cHJlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50ZW1wbGF0ZS1uYW1le292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2t9Omhvc3QgOjpuZy1kZWVwIC5tYXQtY29udGVudHthbGlnbi1pdGVtczpjZW50ZXJ9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2ZsZXg6MTttYXJnaW46MH06aG9zdCAuYXJyYXktdmFsdWV7bWFyZ2luLWxlZnQ6MTBweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3R5bGUsc2VsZWN0b3I6IltuZ1N0eWxlXSIsaW5wdXRzOlsibmdTdHlsZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsRGVzY3JpcHRpb24sc2VsZWN0b3I6Im1hdC1wYW5lbC1kZXNjcmlwdGlvbiJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOkNhLG5hbWU6ImdldFJwY1RlbXBsYXRlQXJyYXlWaWV3In1dfSl9fWUoIkdhdGV3YXlTZXJ2aWNlUlBDQ29ubmVjdG9yVGVtcGxhdGVzQ29tcG9uZW50IixGYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpGYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9Im1hdC1zdWJ0aXRsZS0xIHRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlcy10aXRsZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG48bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlICpuZ0Zvcj0ibGV0IHRlbXBsYXRlIG9mIHJwY1RlbXBsYXRlcyI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8bWF0LXBhbmVsLXRpdGxlIGNsYXNzPSJ0ZW1wbGF0ZS1uYW1lIj5cbiAgICAgIDxzcGFuIG1hdFRvb2x0aXA9Int7dGVtcGxhdGUubmFtZX19IiBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj57e3RlbXBsYXRlLm5hbWV9fTwvc3Bhbj5cbiAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD0iRGVsZXRlIiAoY2xpY2spPSJkZWxldGVUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IlVzZSIgKGNsaWNrKT0iYXBwbHlUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnBsYXlfYXJyb3c8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj0ibGV0IGNvbmZpZyBvZiB0ZW1wbGF0ZS5jb25maWcgfCBrZXlWYWx1ZUlzTm90RW1wdHkiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogY29uZmlnLCBpbm5lclZhbHVlOiBmYWxzZSB9Ij5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjUlBDVGVtcGxhdGVSZWYgbGV0LWNvbmZpZyBsZXQtaW5uZXJWYWx1ZT1cJ2lubmVyVmFsdWVcJz5cbiAgICA8ZGl2IFtmeExheW91dF09ImlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ2NvbHVtblwnOiBcJ3Jvd1wnIlxuICAgICAgICAgW2Z4TGF5b3V0QWxpZ25dPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSA/IFwnc3BhY2UtYmV0d2VlbiBjZW50ZXJcJyA6IFwnXCciXG4gICAgICAgICBbbmdTdHlsZV09IntcJ3BhZGRpbmctbGVmdFwnOiBpbm5lclZhbHVlID8gXCcxNnB4XCc6IFwnMFwnfSJcbiAgICAgICAgIGNsYXNzPSJycGMtcGFyYW1zLXJvdyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1rZXkiPlxuICAgICAgICB7eyFpbm5lclZhbHVlID8gKFwnZ2F0ZXdheS5ycGMuXCcgKyBjb25maWcua2V5IHwgdHJhbnNsYXRlKSA6IGNvbmZpZy5rZXl9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJpc0FycmF5KGNvbmZpZy52YWx1ZSkiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0iYXJyYXktdmFsdWUiPlxuICAgICAgICB7eyBjb25maWcudmFsdWUgfCBnZXRScGNUZW1wbGF0ZUFycmF5VmlldyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJpc09iamVjdChjb25maWcudmFsdWUpIiBbbmdUZW1wbGF0ZU91dGxldF09IlJQQ09iamVjdFJvdyI+PC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2ICpuZ0lmPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSAmJiAhaXNBcnJheShjb25maWcudmFsdWUpIlxuICAgICAgICAgICBbbmdDbGFzc109IntcJ2Jvb2xlYW4tdHJ1ZVwnOiBjb25maWcudmFsdWUgPT09IHRydWUsXG4gICAgICAgICAgICAgICAgICAgXCdib29sZWFuLWZhbHNlXCc6IGNvbmZpZy52YWx1ZSA9PT0gZmFsc2UgIH0iPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJjb25maWcua2V5ID09PSBcJ21ldGhvZFwnIGVsc2UgdmFsdWUiIFtuZ1RlbXBsYXRlT3V0bGV0XT0iU05NUE1ldGhvZCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdmFsdWU+e3sgY29uZmlnLnZhbHVlIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjU05NUE1ldGhvZD57eyBTTk1QTWV0aG9kc1RyYW5zbGF0aW9ucy5nZXQoY29uZmlnLnZhbHVlKSB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1JQQ09iamVjdFJvdz5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj0ibGV0IHN1YkNvbmZpZyBvZiBjb25maWcudmFsdWUgfCBrZXl2YWx1ZSA6IG9yaWdpbmFsT3JkZXIiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogc3ViQ29uZmlnLCBpbm5lclZhbHVlOiB0cnVlIH0iPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1leHBhbnNpb24tcGFuZWw+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC50ZW1wbGF0ZS1rZXl7Y29sb3I6IzAwMDAwMDYxO2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHh9Omhvc3QgLmJvb2xlYW4tdHJ1ZSw6aG9zdCAuYm9vbGVhbi1mYWxzZXtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4O3BhZGRpbmc6MCAxMnB4O3dpZHRoOmZpdC1jb250ZW50O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgLmJvb2xlYW4tZmFsc2V7Y29sb3I6I2QxMjczMDtiYWNrZ3JvdW5kLWNvbG9yOiNkMTI3MzAxNH06aG9zdCAuYm9vbGVhbi10cnVle2NvbG9yOiMxOTgwMzg7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4MTR9Omhvc3QgbWF0LWV4cGFuc2lvbi1wYW5lbHttYXJnaW4tdG9wOjEwcHg7b3ZlcmZsb3c6dmlzaWJsZX06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDowO2ZsZXg6MH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24+bWF0LWljb257bWFyZ2luLWxlZnQ6MTVweDtjb2xvcjojMDAwMDAwNjF9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye3BhZGRpbmc6MCAwIDAgMTJweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo0OHB4fTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAubWF0LWNvbnRlbnQubWF0LWNvbnRlbnQtaGlkZS10b2dnbGV7bWFyZ2luLXJpZ2h0OjB9Omhvc3QgLnJwYy1wYXJhbXMtcm93e292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLnJwYy1wYXJhbXMtcm93IDpub3QoOmZpcnN0LWNoaWxkKXt3aGl0ZS1zcGFjZTpwcmU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRlbXBsYXRlLW5hbWV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9ja306aG9zdCA6Om5nLWRlZXAgLm1hdC1jb250ZW50e2FsaWduLWl0ZW1zOmNlbnRlcn06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZmxleDoxO21hcmdpbjowfTpob3N0IC5hcnJheS12YWx1ZXttYXJnaW4tbGVmdDoxMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Nvbm5lY3RvclR5cGU6W3t0eXBlOmF9XSxjdHg6W3t0eXBlOmF9XSxzYXZlVGVtcGxhdGU6W3t0eXBlOmx9XSx1c2VUZW1wbGF0ZTpbe3R5cGU6bH1dLHJwY1RlbXBsYXRlczpbe3R5cGU6YX1dfX0pO2NsYXNzIElhe2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLkJyb2tlclNlY3VyaXR5VHlwZT1kbix0aGlzLnNlY3VyaXR5VHlwZXM9T2JqZWN0LnZhbHVlcyhkbiksdGhpcy5TZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXA9dW4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e30sdGhpcy5zZWN1cml0eUZvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltkbi5BTk9OWU1PVVMsW11dLHVzZXJuYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV19KSx0aGlzLm9ic2VydmVTZWN1cml0eUZvcm0oKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7ZS50eXBlfHwoZS50eXBlPWRuLkFOT05ZTU9VUyksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlKSx0aGlzLnVwZGF0ZVZpZXcoZSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUZvcm06e3ZhbGlkOiExfX19dXBkYXRlVmlldyhlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZShlKX11cGRhdGVWYWxpZGF0b3JzKGUpe2U9PT1kbi5CQVNJQz8odGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGFzc3dvcmQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfW9ic2VydmVTZWN1cml0eUZvcm0oKXt0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlVmlldyhlKSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PklhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+SWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbRCxIXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBBYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMuc2VuZENvbW1hbmQ9bmV3IGksdGhpcy5zYXZlVGVtcGxhdGU9bmV3IGksdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuYkFDbmV0UmVxdWVzdFR5cGVzPU9iamVjdC52YWx1ZXMoV3QpLHRoaXMuYkFDbmV0T2JqZWN0VHlwZXM9T2JqZWN0LnZhbHVlcyhLdCksdGhpcy5iTEVNZXRob2RzPU9iamVjdC52YWx1ZXMoWXQpLHRoaXMuY0FOQnl0ZU9yZGVycz1PYmplY3QudmFsdWVzKEp0KSx0aGlzLnNvY2tldE1ldGhvZFByb2Nlc3NpbmdzPU9iamVjdC52YWx1ZXMoWHQpLHRoaXMuc29ja2V0RW5jb2RpbmdzPU9iamVjdC52YWx1ZXMoYW4pLHRoaXMuc05NUE1ldGhvZHM9T2JqZWN0LnZhbHVlcyhlbiksdGhpcy5oVFRQTWV0aG9kcz1PYmplY3QudmFsdWVzKG5uKSx0aGlzLmJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXM9anQsdGhpcy5iQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXM9JHQsdGhpcy5iTEVNZXRob2RzVHJhbnNsYXRlcz1RdCx0aGlzLlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzVHJhbnNsYXRlcz1adCx0aGlzLlNOTVBNZXRob2RzVHJhbnNsYXRpb25zPXRuLHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy51cmxQYXR0ZXJuPS9eWy1hLXpBLVpkXyQ6e30/fis9XC8uMC05LV0qJC8sdGhpcy5udW1iZXJzT25seVBhdHRlcm49L15bMC05XSokLyx0aGlzLmhleE9ubHlQYXR0ZXJuPS9eWzAtOUEtRmEtZiBdKyQvLHRoaXMucHJvcGFnYXRlQ2hhbmdlPWU9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5jb21tYW5kRm9ybT10aGlzLmNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZSh0aGlzLmNvbm5lY3RvclR5cGUpLHRoaXMuY29tbWFuZEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9e307c3dpdGNoKHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5SRVNUOmNhc2UgX3QuUkVRVUVTVDplLmh0dHBIZWFkZXJzLmZvckVhY2goKGU9Pnt0W2UuaGVhZGVyTmFtZV09ZS52YWx1ZX0pKSxlLmh0dHBIZWFkZXJzPXR9dGhpcy5jb21tYW5kRm9ybS52YWxpZCYmdGhpcy5wcm9wYWdhdGVDaGFuZ2Uoey4uLnRoaXMuY29tbWFuZEZvcm0udmFsdWUsLi4uZX0pfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZShlKXtsZXQgdDtzd2l0Y2goZSl7Y2FzZSBfdC5CQUNORVQ6dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFR5cGU6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxvYmplY3RUeXBlOltudWxsLFtdXSxpZGVudGlmaWVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxwcm9wZXJ0eUlkOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7YnJlYWs7Y2FzZSBfdC5CTEU6dD10aGlzLmZiLmdyb3VwKHttZXRob2RSUEM6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sY2hhcmFjdGVyaXN0aWNVVUlEOlsiMDAwMDJBMDAtMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIzNEZCIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLHdpdGhSZXNwb25zZTpbITEsW11dfSk7YnJlYWs7Y2FzZSBfdC5DQU46dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbm9kZUlEOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxpc0V4dGVuZGVkSUQ6WyExLFtdXSxpc0ZEOlshMSxbXV0sYml0cmF0ZVN3aXRjaDpbITEsW11dLGRhdGFMZW5ndGg6W251bGwsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLGRhdGFCeXRlb3JkZXI6W251bGwsW11dLGRhdGFCZWZvcmU6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhQWZ0ZXI6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhSW5IRVg6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhRXhwcmVzc2lvbjpbbnVsbCxbdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuRlRQOnQ9dGhpcy5mYi5ncm91cCh7bWV0aG9kRmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuT0NQUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNPQ0tFVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLGVuY29kaW5nOlthbi5VVEZfOCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx3aXRoUmVzcG9uc2U6WyExLFtdXX0pO2JyZWFrO2Nhc2UgX3QuWE1QUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNOTVA6dD10aGlzLmZiLmdyb3VwKHtyZXF1ZXN0RmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx3aXRoUmVzcG9uc2U6WyExLFtdXSxvaWQ6dGhpcy5mYi5hcnJheShbXSxbdWUucmVxdWlyZWRdKX0pO2JyZWFrO2Nhc2UgX3QuUkVTVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwTWV0aG9kOltudWxsLFt1ZS5yZXF1aXJlZF1dLHJlcXVlc3RVcmxFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKHRoaXMudXJsUGF0dGVybildXSxyZXNwb25zZVRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSx0aW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdHJpZXM6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwSGVhZGVyczp0aGlzLmZiLmFycmF5KFtdKSxzZWN1cml0eTpbe30sW3VlLnJlcXVpcmVkXV19KTticmVhaztjYXNlIF90LlJFUVVFU1Q6dD10aGlzLmZiLmdyb3VwKHttZXRob2RGaWx0ZXI6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saHR0cE1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxyZXF1ZXN0VXJsRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybih0aGlzLnVybFBhdHRlcm4pXV0scmVzcG9uc2VUaW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdGltZW91dDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKDEwKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHRyaWVzOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxyZXF1ZXN0VmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5wYXR0ZXJuKGt0KV1dLGh0dHBIZWFkZXJzOnRoaXMuZmIuYXJyYXkoW10pfSk7YnJlYWs7ZGVmYXVsdDp0PXRoaXMuZmIuZ3JvdXAoe2NvbW1hbmQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFyYW1zOlt7fSxbSXRdXX0pfXJldHVybiB0fWFkZFNOTVBvaWQoZT1udWxsKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJvaWQiKTt0JiZ0LnB1c2godGhpcy5mYi5jb250cm9sKGUsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXSkse2VtaXRFdmVudDohMX0pfXJlbW92ZVNOTVBvaWQoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoIm9pZCIpLnJlbW92ZUF0KGUpfWFkZEhUVFBIZWFkZXIoZT17aGVhZGVyTmFtZTpudWxsLHZhbHVlOm51bGx9KXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJodHRwSGVhZGVycyIpLG49dGhpcy5mYi5ncm91cCh7aGVhZGVyTmFtZTpbZS5oZWFkZXJOYW1lLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlOltlLnZhbHVlLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7dCYmdC5wdXNoKG4se2VtaXRFdmVudDohMX0pfXJlbW92ZUhUVFBIZWFkZXIoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoImh0dHBIZWFkZXJzIikucmVtb3ZlQXQoZSl9Z2V0Rm9ybUFycmF5Q29udHJvbHMoZSl7cmV0dXJuIHRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpLmNvbnRyb2xzfW9wZW5FZGl0SlNPTkRpYWxvZyhlKXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlhbG9nLm9wZW4oUWUse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntqc29uVmFsdWU6dGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnZhbHVlLHJlcXVpcmVkOiEwfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnNldFZhbHVlKGUpfSkpfXNhdmUoKXt0aGlzLnNhdmVUZW1wbGF0ZS5lbWl0KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe31jbGVhckZyb21BcnJheUJ5TmFtZShlKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpO2Zvcig7MCE9PXQubGVuZ3RoOyl0LnJlbW92ZUF0KDApfXdyaXRlVmFsdWUoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtzd2l0Y2goZT1KKGUpLHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5TTk1QOnRoaXMuY2xlYXJGcm9tQXJyYXlCeU5hbWUoIm9pZCIpLGUub2lkLmZvckVhY2goKGU9Pnt0aGlzLmFkZFNOTVBvaWQoZSl9KSksZGVsZXRlIGUub2lkO2JyZWFrO2Nhc2UgX3QuUkVRVUVTVDpjYXNlIF90LlJFU1Q6dGhpcy5jbGVhckZyb21BcnJheUJ5TmFtZSgiaHR0cEhlYWRlcnMiKSxlLmh0dHBIZWFkZXJzJiZPYmplY3QuZW50cmllcyhlLmh0dHBIZWFkZXJzKS5mb3JFYWNoKChlPT57dGhpcy5hZGRIVFRQSGVhZGVyKHtoZWFkZXJOYW1lOmVbMF0sdmFsdWU6ZVsxXX0pfSkpLGRlbGV0ZSBlLmh0dHBIZWFkZXJzfXRoaXMuY29tbWFuZEZvcm0ucGF0Y2hWYWx1ZShlLHtvbmx5U2VsZjohMX0pfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6e2Nvbm5lY3RvclR5cGU6ImNvbm5lY3RvclR5cGUifSxvdXRwdXRzOntzZW5kQ29tbWFuZDoic2VuZENvbW1hbmQiLHNhdmVUZW1wbGF0ZToic2F2ZVRlbXBsYXRlIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hEZWZhdWx0LHNlbGVjdG9yOiJbbmdTd2l0Y2hEZWZhdWx0XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WmUuVGJKc29uVG9TdHJpbmdEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi1qc29uLXRvLXN0cmluZ10ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnouTWF0RGl2aWRlcixzZWxlY3RvcjoibWF0LWRpdmlkZXIiLGlucHV0czpbInZlcnRpY2FsIiwiaW5zZXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4QWxpZ25dLCBbZnhGbGV4QWxpZ24ueHNdLCBbZnhGbGV4QWxpZ24uc21dLCBbZnhGbGV4QWxpZ24ubWRdLCAgW2Z4RmxleEFsaWduLmxnXSwgW2Z4RmxleEFsaWduLnhsXSwgW2Z4RmxleEFsaWduLmx0LXNtXSwgW2Z4RmxleEFsaWduLmx0LW1kXSwgIFtmeEZsZXhBbGlnbi5sdC1sZ10sIFtmeEZsZXhBbGlnbi5sdC14bF0sIFtmeEZsZXhBbGlnbi5ndC14c10sIFtmeEZsZXhBbGlnbi5ndC1zbV0sICBbZnhGbGV4QWxpZ24uZ3QtbWRdLCBbZnhGbGV4QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeEZsZXhBbGlnbiIsImZ4RmxleEFsaWduLnhzIiwiZnhGbGV4QWxpZ24uc20iLCJmeEZsZXhBbGlnbi5tZCIsImZ4RmxleEFsaWduLmxnIiwiZnhGbGV4QWxpZ24ueGwiLCJmeEZsZXhBbGlnbi5sdC1zbSIsImZ4RmxleEFsaWduLmx0LW1kIiwiZnhGbGV4QWxpZ24ubHQtbGciLCJmeEZsZXhBbGlnbi5sdC14bCIsImZ4RmxleEFsaWduLmd0LXhzIiwiZnhGbGV4QWxpZ24uZ3Qtc20iLCJmeEZsZXhBbGlnbi5ndC1tZCIsImZ4RmxleEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUFycmF5TmFtZSxzZWxlY3RvcjoiW2Zvcm1BcnJheU5hbWVdIixpbnB1dHM6WyJmb3JtQXJyYXlOYW1lIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6SWEsc2VsZWN0b3I6InRiLXJlc3QtY29ubmVjdG9yLXNlY3VyaXR5In0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U2VydmljZVJQQ0Nvbm5lY3RvckNvbXBvbmVudCIsQWEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6QWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5BYSkpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpKZS5NYXREaWFsb2d9XSxwcm9wRGVjb3JhdG9yczp7Y29ubmVjdG9yVHlwZTpbe3R5cGU6YX1dLHNlbmRDb21tYW5kOlt7dHlwZTpsfV0sc2F2ZVRlbXBsYXRlOlt7dHlwZTpsfV19fSk7Y2xhc3MgTmEgZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LGEpLHRoaXMuc3RvcmU9ZSx0aGlzLnJvdXRlcj10LHRoaXMuZGF0YT1uLHRoaXMuZGlhbG9nUmVmPWEsdGhpcy5mYj1vLHRoaXMuY29uZmlnPXRoaXMuZGF0YS5jb25maWcsdGhpcy50ZW1wbGF0ZXM9dGhpcy5kYXRhLnRlbXBsYXRlcyx0aGlzLnRlbXBsYXRlTmFtZUN0cmw9dGhpcy5mYi5jb250cm9sKCIiLFt1ZS5yZXF1aXJlZF0pfXZhbGlkYXRlRHVwbGljYXRlTmFtZShlKXtjb25zdCB0PWUudmFsdWUudHJpbSgpO3JldHVybiEhdGhpcy50ZW1wbGF0ZXMuZmluZCgoZT0+ZS5uYW1lPT09dCkpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1zYXZlKCl7dGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnNldFZhbHVlKHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWx1ZS50cmltKCkpLHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnZhbHVlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5hLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOk5hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10b29sYmFyIGNvbG9yPSJwcmltYXJ5Ij5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy5zYXZlLXRlbXBsYXRlPC9oMj5cbiAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbWF0LXRvb2xiYXI+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0id2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayB0Yi12YWx1ZS10eXBlIiBzdHlsZT0iZmxleC1ncm93OiAwIj5cbiAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lPC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09InRlbXBsYXRlTmFtZUN0cmwiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0idGVtcGxhdGVOYW1lQ3RybC5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxkaXYgY2xhc3M9Im1hdC1tZGMtZm9ybS1maWVsZC1lcnJvciJcbiAgICAgICBzdHlsZT0ibWFyZ2luLXRvcDogLTE1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgZm9udC1zaXplOiAxNHB4OyJcbiAgICAgICAqbmdJZj0idmFsaWRhdGVEdXBsaWNhdGVOYW1lKHRlbXBsYXRlTmFtZUN0cmwpIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWUtZHVwbGljYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICA8YnV0dG9uIG1hdC1idXR0b25cbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICBbZGlzYWJsZWRdPSIhdGVtcGxhdGVOYW1lQ3RybC52YWxpZCJcbiAgICAgICAgICAoY2xpY2spPSJzYXZlKCkiPlxuICAgIHt7IFwnYWN0aW9uLnNhdmVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0FjdGlvbnMsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWFjdGlvbnNdLCBtYXQtZGlhbG9nLWFjdGlvbnMsIFttYXREaWFsb2dBY3Rpb25zXSIsaW5wdXRzOlsiYWxpZ24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dDb250ZW50LHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1jb250ZW50XSwgbWF0LWRpYWxvZy1jb250ZW50LCBbbWF0RGlhbG9nQ29udGVudF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb25uZWN0b3JUZW1wbGF0ZURpYWxvZ0NvbXBvbmVudCIsTmEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TmEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlLWRpYWxvZyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICA8aDIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnNhdmUtdGVtcGxhdGU8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJ3aWR0aDogNjAwcHgiIGNsYXNzPSJtYXQtY29udGVudCIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIHRiLXZhbHVlLXR5cGUiIHN0eWxlPSJmbGV4LWdyb3c6IDAiPlxuICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0idGVtcGxhdGVOYW1lQ3RybCIgcmVxdWlyZWQvPlxuICAgIDxtYXQtZXJyb3JcbiAgICAgICpuZ0lmPSJ0ZW1wbGF0ZU5hbWVDdHJsLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPGRpdiBjbGFzcz0ibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yIlxuICAgICAgIHN0eWxlPSJtYXJnaW4tdG9wOiAtMTVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDE0cHg7IlxuICAgICAgICpuZ0lmPSJ2YWxpZGF0ZUR1cGxpY2F0ZU5hbWUodGVtcGxhdGVOYW1lQ3RybCkiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1kdXBsaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIj5cbiAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgIFtkaXNhYmxlZF09IiF0ZW1wbGF0ZU5hbWVDdHJsLnZhbGlkIlxuICAgICAgICAgIChjbGljayk9InNhdmUoKSI+XG4gICAge3sgXCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBNYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKEduKSx0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy52YWx1ZVR5cGVzPVZuLHRoaXMub25DaGFuZ2U9ZT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXJndW1lbnRzOnRoaXMuZmIuYXJyYXkoW10pfSksdGhpcy5vYnNlcnZlVmFsdWVDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuY2xlYXJBcmd1bWVudHMoKSxlLmFyZ3VtZW50cz8ubWFwKCgoe3R5cGU6ZSx2YWx1ZTp0fSk9Pih7dHlwZTplLFtlXTp0fSkpKS5mb3JFYWNoKChlPT50aGlzLmFkZEFyZ3VtZW50KGUpKSksdGhpcy5jZHIubWFya0ZvckNoZWNrKCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlLm1ldGhvZCl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmFyZ3VtZW50cy5tYXAoKCh7dHlwZTplLC4uLnR9KT0+KHt0eXBlOmUsdmFsdWU6dFtlXX0pKSk7dGhpcy5vbkNoYW5nZSh7bWV0aG9kOmUubWV0aG9kLGFyZ3VtZW50czp0fSksdGhpcy5vblRvdWNoZWQoKX0pKX1yZW1vdmVBcmd1bWVudChlKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJhcmd1bWVudHMiKS5yZW1vdmVBdChlKX1hZGRBcmd1bWVudChlPXt9KXtjb25zdCB0PXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2UudHlwZT8/R24uU1RSSU5HXSxzdHJpbmc6W2Uuc3RyaW5nPz97dmFsdWU6IiIsZGlzYWJsZWQ6IShlZShlLHt9KXx8ZS5zdHJpbmcpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6ZS5pbnRlZ2VyPz8wLGRpc2FibGVkOiFpZShlLmludGVnZXIpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihMdCldXSxkb3VibGU6W3t2YWx1ZTplLmRvdWJsZT8/MCxkaXNhYmxlZDohaWUoZS5kb3VibGUpfSxbdWUucmVxdWlyZWRdXSxib29sZWFuOlt7dmFsdWU6ZS5ib29sZWFuPz8hMSxkaXNhYmxlZDohaWUoZS5ib29sZWFuKX0sW3VlLnJlcXVpcmVkXV19KTt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKHQpLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpLnB1c2godCx7ZW1pdEV2ZW50OiExfSl9Y2xlYXJBcmd1bWVudHMoKXtjb25zdCBlPXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpO2Zvcig7MCE9PWUubGVuZ3RoOyllLnJlbW92ZUF0KDApfW9ic2VydmVUeXBlQ2hhbmdlKGUpe2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e2UuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoInR5cGUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KHQpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpNYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpNYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+TWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCB0Yi1mbGV4IG5vLXBhZGRpbmctdG9wIGhpbnQtY29udGFpbmVyIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLmhpbnQub3BjLW1ldGhvZFwnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Im11bHRpcGx5Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxmaWVsZHNldCBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIGFyZ3VtZW50cy1jb250YWluZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZvcm1BcnJheU5hbWU9ImFyZ3VtZW50cyI+XG4gICAgPHN0cm9uZz5cbiAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9zdHJvbmc+XG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAqbmdGb3I9ImxldCBhcmd1bWVudEZvcm1Hcm91cCBvZiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FyZ3VtZW50c1wnKVtcJ2NvbnRyb2xzXCddOyBsZXQgaSA9IGluZGV4IiBbZm9ybUdyb3VwXT0iYXJndW1lbnRGb3JtR3JvdXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIHR5cGUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTE4IiBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHZhbHVlVHlwZSBvZiB2YWx1ZVR5cGVLZXlzIiBbdmFsdWVdPSJ2YWx1ZVR5cGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB2YWx1ZS1jb250YWluZXIiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuU1RSSU5HIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9InN0cmluZyJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLkRPVUJMRSIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJkb3VibGUiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5CT09MRUFOIiBmb3JtQ29udHJvbE5hbWU9ImJvb2xlYW4iPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJ0cnVlIj50cnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVBcmd1bWVudChpKSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgIChjbGljayk9ImFkZEFyZ3VtZW50KCkiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy5hZGQtYXJndW1lbnRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2ZpZWxkc2V0PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuYXJndW1lbnRzLWNvbnRhaW5lcnttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnR5cGUtY29udGFpbmVye3dpZHRoOjQwJX06aG9zdCAudmFsdWUtY29udGFpbmVye3dpZHRoOjUwJX06aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp3ZS5NYXRTZWxlY3RUcmlnZ2VyLHNlbGVjdG9yOiJtYXQtc2VsZWN0LXRyaWdnZXIifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEdhcERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRHYXBdLCBbZnhMYXlvdXRHYXAueHNdLCBbZnhMYXlvdXRHYXAuc21dLCBbZnhMYXlvdXRHYXAubWRdLCAgW2Z4TGF5b3V0R2FwLmxnXSwgW2Z4TGF5b3V0R2FwLnhsXSwgW2Z4TGF5b3V0R2FwLmx0LXNtXSwgW2Z4TGF5b3V0R2FwLmx0LW1kXSwgIFtmeExheW91dEdhcC5sdC1sZ10sIFtmeExheW91dEdhcC5sdC14bF0sIFtmeExheW91dEdhcC5ndC14c10sIFtmeExheW91dEdhcC5ndC1zbV0sICBbZnhMYXlvdXRHYXAuZ3QtbWRdLCBbZnhMYXlvdXRHYXAuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEdhcCIsImZ4TGF5b3V0R2FwLnhzIiwiZnhMYXlvdXRHYXAuc20iLCJmeExheW91dEdhcC5tZCIsImZ4TGF5b3V0R2FwLmxnIiwiZnhMYXlvdXRHYXAueGwiLCJmeExheW91dEdhcC5sdC1zbSIsImZ4TGF5b3V0R2FwLmx0LW1kIiwiZnhMYXlvdXRHYXAubHQtbGciLCJmeExheW91dEdhcC5sdC14bCIsImZ4TGF5b3V0R2FwLmd0LXhzIiwiZnhMYXlvdXRHYXAuZ3Qtc20iLCJmeExheW91dEdhcC5ndC1tZCIsImZ4TGF5b3V0R2FwLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhBbGlnbl0sIFtmeEZsZXhBbGlnbi54c10sIFtmeEZsZXhBbGlnbi5zbV0sIFtmeEZsZXhBbGlnbi5tZF0sICBbZnhGbGV4QWxpZ24ubGddLCBbZnhGbGV4QWxpZ24ueGxdLCBbZnhGbGV4QWxpZ24ubHQtc21dLCBbZnhGbGV4QWxpZ24ubHQtbWRdLCAgW2Z4RmxleEFsaWduLmx0LWxnXSwgW2Z4RmxleEFsaWduLmx0LXhsXSwgW2Z4RmxleEFsaWduLmd0LXhzXSwgW2Z4RmxleEFsaWduLmd0LXNtXSwgIFtmeEZsZXhBbGlnbi5ndC1tZF0sIFtmeEZsZXhBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4RmxleEFsaWduIiwiZnhGbGV4QWxpZ24ueHMiLCJmeEZsZXhBbGlnbi5zbSIsImZ4RmxleEFsaWduLm1kIiwiZnhGbGV4QWxpZ24ubGciLCJmeEZsZXhBbGlnbi54bCIsImZ4RmxleEFsaWduLmx0LXNtIiwiZnhGbGV4QWxpZ24ubHQtbWQiLCJmeEZsZXhBbGlnbi5sdC1sZyIsImZ4RmxleEFsaWduLmx0LXhsIiwiZnhGbGV4QWxpZ24uZ3QteHMiLCJmeEZsZXhBbGlnbi5ndC1zbSIsImZ4RmxleEFsaWduLmd0LW1kIiwiZnhGbGV4QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1BcnJheU5hbWUsc2VsZWN0b3I6Iltmb3JtQXJyYXlOYW1lXSIsaW5wdXRzOlsiZm9ybUFycmF5TmFtZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk1hLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk1hKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm9wYy1tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJtdWx0aXBseSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8ZmllbGRzZXQgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBhcmd1bWVudHMtY29udGFpbmVyIiBmeExheW91dD0iY29sdW1uIiBmb3JtQXJyYXlOYW1lPSJhcmd1bWVudHMiPlxuICAgIDxzdHJvbmc+XG4gICAgICA8c3BhbiBjbGFzcz0iZmllbGRzLWxhYmVsIj57eyBcJ2dhdGV3YXkucnBjLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvc3Ryb25nPlxuICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgKm5nRm9yPSJsZXQgYXJndW1lbnRGb3JtR3JvdXAgb2YgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhcmd1bWVudHNcJylbXCdjb250cm9sc1wnXTsgbGV0IGkgPSBpbmRleCIgW2Zvcm1Hcm91cF09ImFyZ3VtZW50Rm9ybUdyb3VwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB0eXBlLWNvbnRhaW5lciIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdmFsdWUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLklOVEVHRVIiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iaW50ZWdlciIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5ET1VCTEUiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iZG91YmxlIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0idHJ1ZSI+dHJ1ZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iZmFsc2UiPmZhbHNlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXJndW1lbnRGb3JtR3JvdXAuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQXJndW1lbnQoaSkiXG4gICAgICAgICAgICAgIGNsYXNzPSJ0Yi1ib3gtYnV0dG9uIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICBmeEZsZXhBbGlnbj0ic3RhcnQiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGRBcmd1bWVudCgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWFyZ3VtZW50XCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9maWVsZHNldD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFyZ3VtZW50cy1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC50eXBlLWNvbnRhaW5lcnt3aWR0aDo0MCV9Omhvc3QgLnZhbHVlLWNvbnRhaW5lcnt3aWR0aDo1MCV9Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyBFYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5vbkNoYW5nZT1lPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXF1ZXN0VG9waWNFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVG9waWNFeHByZXNzaW9uOlt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUaW1lb3V0Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLm1pbigxMCksdWUucGF0dGVybihMdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVXaXRoUmVzcG9uc2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWxpZD9udWxsOntycGNQYXJhbWV0ZXJzRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlLndpdGhSZXNwb25zZSl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW9ic2VydmVXaXRoUmVzcG9uc2UoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ3aXRoUmVzcG9uc2UiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+dGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX10b2dnbGVSZXNwb25zZUZpZWxkcyhlKXtjb25zdCB0PXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInJlc3BvbnNlVG9waWNFeHByZXNzaW9uIiksbj10aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKTtlPyh0LmVuYWJsZSgpLG4uZW5hYmxlKCkpOih0LmRpc2FibGUoKSxuLmRpc2FibGUoKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+RWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXF1ZXN0LyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXJnaW4iIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSIgZm9ybUNvbnRyb2xOYW1lPSJ3aXRoUmVzcG9uc2UiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMud2l0aFJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9InNlbnNvci8ke2RldmljZU5hbWV9L3Jlc3BvbnNlLyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd3aXRoUmVzcG9uc2VcJyk/LnZhbHVlIj5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VUaW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9IjEwMDAwIiBtaW49IjEwIiBzdGVwPSIxIi8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAubWF0LW1kYy1zbGlkZS10b2dnbGUubWFyZ2lue21hcmdpbi1ib3R0b206MTBweDttYXJnaW4tbGVmdDoxMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkVhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9ImVjaG8iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0ic2Vuc29yLyR7ZGV2aWNlTmFtZX0vcmVxdWVzdC8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWFyZ2luIiAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3dpdGhSZXNwb25zZVwnKT8udmFsdWUiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXNwb25zZS8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIxMDAwMCIgbWluPSIxMCIgc3RlcD0iMSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L25nLWNvbnRhaW5lcj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBxYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNFZGl0YWJsZURhdGFUeXBlcz10YSx0aGlzLk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcD16dCx0aGlzLm1vZGJ1c0RhdGFUeXBlcz1PYmplY3QudmFsdWVzKGVhKSx0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcz1bNSw2LDE1LDE2XSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVszLDQsNiwxNl0sdGhpcy5yZWFkRnVuY3Rpb25Db2Rlcz1bMSwyLDMsNF0sdGhpcy5iaXRzRnVuY3Rpb25Db2Rlcz1bLi4udGhpcy5yZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLndyaXRlRnVuY3Rpb25Db2Rlc10sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2VhLkJZVEVTLFt1ZS5yZXF1aXJlZF1dLGZ1bmN0aW9uQ29kZTpbdGhpcy5kZWZhdWx0RnVuY3Rpb25Db2Rlc1swXSxbdWUucmVxdWlyZWRdXSx2YWx1ZTpbe3ZhbHVlOiIiLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxhZGRyZXNzOltudWxsLFt1ZS5yZXF1aXJlZF1dLG9iamVjdHNDb3VudDpbMSxbdWUucmVxdWlyZWRdXX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2Rlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWUpLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpLHRoaXMub2JzZXJ2ZUtleURhdGFUeXBlKCksdGhpcy5vYnNlcnZlRnVuY3Rpb25Db2RlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlS2V5RGF0YVR5cGUoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoIm9iamVjdHNDb3VudCIpLnBhdGNoVmFsdWUobmFbZV0se2VtaXRFdmVudDohMX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlKX0pKX1vYnNlcnZlRnVuY3Rpb25Db2RlKCl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgiZnVuY3Rpb25Db2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWx1ZUVuYWJsaW5nKGUpKSl9dXBkYXRlVmFsdWVFbmFibGluZyhlKXt0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyhlKT90aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ2YWx1ZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6KHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInZhbHVlIikuc2V0VmFsdWUobnVsbCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgidmFsdWUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSl9dXBkYXRlRnVuY3Rpb25Db2RlcyhlKXt0aGlzLmZ1bmN0aW9uQ29kZXM9ZT09PWVhLkJJVFM/dGhpcy5iaXRzRnVuY3Rpb25Db2Rlczp0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzLHRoaXMuZnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJmdW5jdGlvbkNvZGUiKS52YWx1ZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUodGhpcy5mdW5jdGlvbkNvZGVzWzBdLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cWEsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnFhKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy1yZXNwb25zZS1yZWFkaW5nXCcgfCB0cmFuc2xhdGUgfX08YnI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9uc1wnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNEYXRhVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IHR5cGUgfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZnVuY3Rpb25Db2RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29kZSBvZiBmdW5jdGlvbkNvZGVzIiBbdmFsdWVdPSJjb2RlIj57eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iNTAwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImFkZHJlc3MiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYWRkcmVzcy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FkZHJlc3NcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm9iamVjdHNDb3VudFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICBtaW49IjEiXG4gICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJ3cml0ZUZ1bmN0aW9uQ29kZXMuaW5jbHVkZXMocnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdmdW5jdGlvbkNvZGVcJykudmFsdWUpIiBmeEZsZXggZnhMYXlvdXQ9InJvdyI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMTAwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndmFsdWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIlxuICAgICAgPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5xYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggbm8tcGFkZGluZy10b3AgaGludC1jb250YWluZXIiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtcmVzcG9uc2UtcmVhZGluZ1wnIHwgdHJhbnNsYXRlIH19PGJyPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtd3JpdGluZy1mdW5jdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzRGF0YVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyB0eXBlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmZ1bmN0aW9uQ29kZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImZ1bmN0aW9uQ29kZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvZGUgb2YgZnVuY3Rpb25Db2RlcyIgW3ZhbHVlXT0iY29kZSI+e3sgTW9kYnVzRnVuY3Rpb25Db2RlVHJhbnNsYXRpb25zTWFwLmdldChjb2RlKSB8IHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjUwMDAwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJhZGRyZXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmFkZHJlc3MtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnYWRkcmVzc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5vYmplY3RzQ291bnRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9Im51bWJlciJcbiAgICAgICAgbWluPSIxIlxuICAgICAgICBtYXg9IjUwMDAwIlxuICAgICAgICBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJvYmplY3RzQ291bnQiXG4gICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgIFtyZWFkb25seV09IiFNb2RidXNFZGl0YWJsZURhdGFUeXBlcy5pbmNsdWRlcyhycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpIlxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0id3JpdGVGdW5jdGlvbkNvZGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnZnVuY3Rpb25Db2RlXCcpLnZhbHVlKSIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjEwMCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciJcbiAgICAgID5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBEYXtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMudXRpbHM9bix0aGlzLmNkPWEsdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPW8sdGhpcy5jb250ZW50VHlwZXM9Ryx0aGlzLlJQQ0NvbW1hbmRzPVsiUGluZyIsIlN0YXRzIiwiRGV2aWNlcyIsIlVwZGF0ZSIsIlZlcnNpb24iLCJSZXN0YXJ0IiwiUmVib290Il0sdGhpcy50ZW1wbGF0ZXM9W10sdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy50eXBlc1dpdGhVcGRhdGVkUGFyYW1zPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVUZW1wbGF0ZXMoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpLGRhdGFMb2FkaW5nOigpPT57fX19LHRoaXMuY29tbWFuZEZvcm09dGhpcy5mYi5ncm91cCh7Y29tbWFuZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx0aW1lOls2MCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV0scGFyYW1zOlsie30iLFtJdF1dLHJlc3VsdDpbbnVsbF19KX1uZ09uSW5pdCgpe2lmKHRoaXMuaXNDb25uZWN0b3I9dGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3IsdGhpcy5pc0Nvbm5lY3Rvcil7dGhpcy5jb25uZWN0b3JUeXBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpLmNvbm5lY3Rvcl9ycGMudmFsdWUudHlwZTtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udGFyZ2V0RGV2aWNlSWQsZW50aXR5TmFtZToiQ29ubmVjdG9yIixhdHRyaWJ1dGVzOlt7bmFtZTpgJHt0aGlzLmNvbm5lY3RvclR5cGV9X3RlbXBsYXRlYH1dfV07dGhpcy5jdHguc3Vic2NyaXB0aW9uQXBpLmNyZWF0ZVN1YnNjcmlwdGlvbkZyb21JbmZvKEEubGF0ZXN0LGUsdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zLCExLCEwKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnN1YnNjcmlwdGlvbj1lfSkpfWVsc2UgdGhpcy5jb21tYW5kRm9ybS5nZXQoImNvbW1hbmQiKS5zZXRWYWx1ZSh0aGlzLlJQQ0NvbW1hbmRzWzBdKX1zZW5kQ29tbWFuZChlKXt0aGlzLnJlc3VsdFRpbWU9bnVsbDtjb25zdCB0PWV8fHRoaXMuY29tbWFuZEZvcm0udmFsdWUsbj10aGlzLmlzQ29ubmVjdG9yP2Ake3RoaXMuY29ubmVjdG9yVHlwZX1fYDoiZ2F0ZXdheV8iLGE9dGhpcy5pc0Nvbm5lY3Rvcj90aGlzLmdldENvbW1hbmRGcm9tUGFyYW1zQnlUeXBlKHQucGFyYW1zKTp0LmNvbW1hbmQudG9Mb3dlckNhc2UoKSxvPXQucGFyYW1zO3RoaXMuY3R4LmNvbnRyb2xBcGkuc2VuZFR3b1dheUNvbW1hbmQobithLG8sdC50aW1lKS5zdWJzY3JpYmUoe25leHQ6ZT0+e3RoaXMucmVzdWx0VGltZT0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLmNvbW1hbmRGb3JtLmdldCgicmVzdWx0Iikuc2V0VmFsdWUoSlNPTi5zdHJpbmdpZnkoZSkpfSxlcnJvcjplPT57dGhpcy5yZXN1bHRUaW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGNvbnNvbGUuZXJyb3IoZSksdGhpcy5jb21tYW5kRm9ybS5nZXQoInJlc3VsdCIpLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGUuZXJyb3IpKX19KX1nZXRDb21tYW5kRnJvbVBhcmFtc0J5VHlwZShlKXtzd2l0Y2godGhpcy5jb25uZWN0b3JUeXBlKXtjYXNlIF90Lk1RVFQ6Y2FzZSBfdC5GVFA6Y2FzZSBfdC5TTk1QOmNhc2UgX3QuUkVTVDpjYXNlIF90LlJFUVVFU1Q6cmV0dXJuIGUubWV0aG9kRmlsdGVyO2Nhc2UgX3QuTU9EQlVTOnJldHVybiBlLnRhZztjYXNlIF90LkJBQ05FVDpjYXNlIF90LkNBTjpjYXNlIF90Lk9QQ1VBOnJldHVybiBlLm1ldGhvZDtjYXNlIF90LkJMRTpjYXNlIF90Lk9DUFA6Y2FzZSBfdC5TT0NLRVQ6Y2FzZSBfdC5YTVBQOnJldHVybiBlLm1ldGhvZFJQQztkZWZhdWx0OnJldHVybiBlLmNvbW1hbmR9fXNhdmVUZW1wbGF0ZSgpe3RoaXMuZGlhbG9nLm9wZW4oTmEse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntjb25maWc6dGhpcy5jb21tYW5kRm9ybS52YWx1ZS5wYXJhbXMsdGVtcGxhdGVzOnRoaXMudGVtcGxhdGVzfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57aWYoZSl7Y29uc3QgdD17bmFtZTplLGNvbmZpZzp0aGlzLmNvbW1hbmRGb3JtLnZhbHVlLnBhcmFtc30sbj10aGlzLnRlbXBsYXRlcyxhPW4uZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO2E+LTEmJm4uc3BsaWNlKGEsMSksbi5wdXNoKHQpO2NvbnN0IG89YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5Om8sdmFsdWU6bn1dKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9fSkpfXVzZVRlbXBsYXRlKGUpe3RoaXMuY29tbWFuZEZvcm0uZ2V0KCJwYXJhbXMiKS5wYXRjaFZhbHVlKGUuY29uZmlnKX11cGRhdGVUZW1wbGF0ZXMoKXt0aGlzLnRlbXBsYXRlcz10aGlzLnN1YnNjcmlwdGlvbi5kYXRhWzBdLmRhdGFbMF1bMV0ubGVuZ3RoP0pTT04ucGFyc2UodGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhWzBdWzFdKTpbXSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVFcnJvcihlKXtjb25zdCB0PXRoaXMudXRpbHMucGFyc2VFeGNlcHRpb24oZSk7bGV0IG49dC5uYW1lO3QubWVzc2FnZSYmKG4rPSI6ICIrdC5tZXNzYWdlKSxjb25zb2xlLmVycm9yKG4pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RGEsZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpEYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBmeExheW91dD0iY29sdW1uIiBmeEZsZXggW25nQ2xhc3NdPSJ7XCdib3JkZXJcJzogaXNDb25uZWN0b3J9Ij5cbiAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dC5sdC1zbT0iY29sdW1uIiBjbGFzcz0iY29tbWFuZC1mb3JtIiBmeExheW91dEdhcD0iMTBweCIgW2Zvcm1Hcm91cF09ImNvbW1hbmRGb3JtIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSIhaXNDb25uZWN0b3I7IGVsc2UgY29ubmVjdG9yRm9ybSI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29tbWFuZCBvZiBSUENDb21tYW5kcyIgW3ZhbHVlXT0iY29tbWFuZCI+XG4gICAgICAgICAgICB7eyBjb21tYW5kIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LW1zXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiLz5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZEZvcm0uZ2V0KFwndGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5pbnZhbGlkIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNlbmRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb25uZWN0b3JGb3JtPlxuICAgICAgPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yXG4gICAgICAgICpuZ0lmPSIhdHlwZXNXaXRoVXBkYXRlZFBhcmFtcy5oYXMoY29ubmVjdG9yVHlwZSkgZWxzZSB1cGRhdGVkUGFyYW1ldGVycyJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiXG4gICAgICAgIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSJcbiAgICAgICAgKHNlbmRDb21tYW5kKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgKHNhdmVUZW1wbGF0ZSk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgLz5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlZFBhcmFtZXRlcnM+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InJwYy1wYXJhbWV0ZXJzIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0Yi1mb3JtLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRpdGxlXCcgfCB0cmFuc2xhdGU6IHt0eXBlOiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlcy5nZXQoY29ubmVjdG9yVHlwZSl9IH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1xdHQtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NUVRUIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgICAgPHRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuT1BDVUEiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUtYWN0aW9ucyIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2F2ZVRlbXBsYXRlKCkiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmdldChcJ3BhcmFtc1wnKS5pbnZhbGlkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxzZWN0aW9uIGNsYXNzPSJyZXN1bHQtYmxvY2siIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPHNwYW4+e3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXJlc3VsdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8ZGl2ICpuZ0lmPSJyZXN1bHRUaW1lIiBjbGFzcz0icmVzdWx0LXRpbWUiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+c2NoZWR1bGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyByZXN1bHRUaW1lIHwgZGF0ZTogXCd5eXl5L01NL2RkIEhIOm1tOnNzXCcgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG4gICAgPHRiLWpzb24tY29udGVudCBbY29udGVudFR5cGVdPSJjb250ZW50VHlwZXMuSlNPTiIgcmVhZG9ubHk9InRydWUiIGZvcm1Db250cm9sTmFtZT0icmVzdWx0Ij48L3RiLWpzb24tY29udGVudD5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG48dGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIGZ4RmxleD0iMzAiICpuZ0lmPSJpc0Nvbm5lY3RvciIgY2xhc3M9ImJvcmRlciIgW3JwY1RlbXBsYXRlc109InRlbXBsYXRlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N0eF09ImN0eCIgW2Nvbm5lY3RvclR5cGVdPSJjb25uZWN0b3JUeXBlIiAodXNlVGVtcGxhdGUpPSJ1c2VUZW1wbGF0ZSgkZXZlbnQpIj5cbjwvdGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3BhZGRpbmc6MCA1cHh9Omhvc3Q+KntoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfTpob3N0PnRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlczpsYXN0LWNoaWxke21hcmdpbi1sZWZ0OjEwcHh9Omhvc3QgLmNvbW1hbmQtZm9ybXtmbGV4LXdyYXA6bm93cmFwO3BhZGRpbmc6MCA1cHggNXB4fTpob3N0IC5jb21tYW5kLWZvcm0+YnV0dG9ue21hcmdpbi10b3A6MTBweH06aG9zdCAucnBjLXBhcmFtZXRlcnN7d2lkdGg6MTAwJX06aG9zdCAucmVzdWx0LWJsb2Nre3BhZGRpbmc6MCA1cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFue2ZvbnQtd2VpZ2h0OjYwMDtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjI1cHg7ei1pbmRleDo1O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAucmVzdWx0LWJsb2NrPnNwYW4gLnJlc3VsdC10aW1lIHNwYW57cGFkZGluZy1sZWZ0OjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jayB0Yi1qc29uLWNvbnRlbnR7ZmxleDoxfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0NsYXNzLHNlbGVjdG9yOiJbbmdDbGFzc10iLGlucHV0czpbImNsYXNzIiwibmdDbGFzcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6c3QuSnNvbkNvbnRlbnRDb21wb25lbnQsc2VsZWN0b3I6InRiLWpzb24tY29udGVudCIsaW5wdXRzOlsibGFiZWwiLCJjb250ZW50VHlwZSIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwidGJQbGFjZWhvbGRlciIsImhpZGVUb29sYmFyIiwicmVhZG9ubHkiLCJ2YWxpZGF0ZUNvbnRlbnQiLCJ2YWxpZGF0ZU9uQ2hhbmdlIiwicmVxdWlyZWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOk1hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbW9kYnVzLXJwYy1wYXJhbWV0ZXJzIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIiwiY3R4IiwicnBjVGVtcGxhdGVzIl0sb3V0cHV0czpbInNhdmVUZW1wbGF0ZSIsInVzZVRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIl0sb3V0cHV0czpbInNlbmRDb21tYW5kIiwic2F2ZVRlbXBsYXRlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb21wb25lbnQiLERhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkRhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgZnhGbGV4IFtuZ0NsYXNzXT0ie1wnYm9yZGVyXCc6IGlzQ29ubmVjdG9yfSI+XG4gIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtc209ImNvbHVtbiIgY2xhc3M9ImNvbW1hbmQtZm9ybSIgZnhMYXlvdXRHYXA9IjEwcHgiIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIWlzQ29ubmVjdG9yOyBlbHNlIGNvbm5lY3RvckZvcm0iPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgUlBDQ29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQiPlxuICAgICAgICAgICAge3sgY29tbWFuZCB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1tc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InRpbWUiIHR5cGU9Im51bWJlciIgbWluPSIxIi8+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRGb3JtLmdldChcJ3RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29ubmVjdG9yRm9ybT5cbiAgICAgIDx0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3RvclxuICAgICAgICAqbmdJZj0iIXR5cGVzV2l0aFVwZGF0ZWRQYXJhbXMuaGFzKGNvbm5lY3RvclR5cGUpIGVsc2UgdXBkYXRlZFBhcmFtZXRlcnMiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIlxuICAgICAgICBbY29ubmVjdG9yVHlwZV09ImNvbm5lY3RvclR5cGUiXG4gICAgICAgIChzZW5kQ29tbWFuZCk9InNlbmRDb21tYW5kKCkiXG4gICAgICAgIChzYXZlVGVtcGxhdGUpPSJzYXZlVGVtcGxhdGUoKSJcbiAgICAgIC8+XG4gICAgICA8bmctdGVtcGxhdGUgI3VwZGF0ZWRQYXJhbWV0ZXJzPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJycGMtcGFyYW1ldGVycyI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGItZm9ybS1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50aXRsZVwnIHwgdHJhbnNsYXRlOiB7dHlwZTogZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXMuZ2V0KGNvbm5lY3RvclR5cGUpfSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NT0RCVVMiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRlbXBsYXRlLWFjdGlvbnMiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zYXZlLXRlbXBsYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uZ2V0KFwncGFyYW1zXCcpLmludmFsaWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8c2VjdGlvbiBjbGFzcz0icmVzdWx0LWJsb2NrIiBbZm9ybUdyb3VwXT0iY29tbWFuZEZvcm0iPlxuICAgIDxzcGFuPnt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1yZXN1bHRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPGRpdiAqbmdJZj0icmVzdWx0VGltZSIgY2xhc3M9InJlc3VsdC10aW1lIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnNjaGVkdWxlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgcmVzdWx0VGltZSB8IGRhdGU6IFwneXl5eS9NTS9kZCBISDptbTpzc1wnIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9zcGFuPlxuICAgIDx0Yi1qc29uLWNvbnRlbnQgW2NvbnRlbnRUeXBlXT0iY29udGVudFR5cGVzLkpTT04iIHJlYWRvbmx5PSJ0cnVlIiBmb3JtQ29udHJvbE5hbWU9InJlc3VsdCI+PC90Yi1qc29uLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcyBmeEZsZXg9IjMwIiAqbmdJZj0iaXNDb25uZWN0b3IiIGNsYXNzPSJib3JkZXIiIFtycGNUZW1wbGF0ZXNdPSJ0ZW1wbGF0ZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdHhdPSJjdHgiIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSIgKHVzZVRlbXBsYXRlKT0idXNlVGVtcGxhdGUoJGV2ZW50KSI+XG48L3RiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcz5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztwYWRkaW5nOjAgNXB4fTpob3N0Pip7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b306aG9zdD50Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXM6bGFzdC1jaGlsZHttYXJnaW4tbGVmdDoxMHB4fTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcDtwYWRkaW5nOjAgNXB4IDVweH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLnJwYy1wYXJhbWV0ZXJze3dpZHRoOjEwMCV9Omhvc3QgLnJlc3VsdC1ibG9ja3twYWRkaW5nOjAgNXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxfTpob3N0IC5yZXN1bHQtYmxvY2s+c3Bhbntmb250LXdlaWdodDo2MDA7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2s+c3BhbiAucmVzdWx0LXRpbWV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDoyNXB4O3otaW5kZXg6NTtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZSBzcGFue3BhZGRpbmctbGVmdDoxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2sgdGItanNvbi1jb250ZW50e2ZsZXg6MX06aG9zdCAuYm9yZGVye3BhZGRpbmc6MTZweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5VdGlsc1NlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTtjbGFzcyBQYSBleHRlbmRzIFB7Y29uc3RydWN0b3IoZSx0LG4sYSxvKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5nYXRld2F5TmFtZT10aGlzLmRhdGEuZ2F0ZXdheU5hbWUsdGhpcy5nYXRld2F5Q29udHJvbD10aGlzLmZiLmNvbnRyb2woIiIpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX10dXJuT2ZmKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoITApfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6UGEsc2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbicsZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fXZhciBHYTtlKCJHYXRld2F5UmVtb3RlQ29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCIsUGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pLGZ1bmN0aW9uKGUpe2UudGxzPSJ0bHMiLGUuYWNjZXNzVG9rZW49ImFjY2Vzc1Rva2VuIn0oR2F8fChHYT17fSkpO2NvbnN0IE9hPSJjb25maWd1cmF0aW9uX2RyYWZ0cyIsUmE9IlJlbW90ZUxvZ2dpbmdMZXZlbCIsVmE9bmV3IE1hcChbW0dhLnRscywiZ2F0ZXdheS5zZWN1cml0eS10eXBlcy50bHMiXSxbR2EuYWNjZXNzVG9rZW4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl1dKTt2YXIgQmEsVWE7IWZ1bmN0aW9uKGUpe2Uubm9uZT0iTk9ORSIsZS5jcml0aWNhbD0iQ1JJVElDQUwiLGUuZXJyb3I9IkVSUk9SIixlLndhcm5pbmc9IldBUk5JTkciLGUuaW5mbz0iSU5GTyIsZS5kZWJ1Zz0iREVCVUcifShCYXx8KEJhPXt9KSksZnVuY3Rpb24oZSl7ZS5tZW1vcnk9Im1lbW9yeSIsZS5maWxlPSJmaWxlIn0oVWF8fChVYT17fSkpO2NvbnN0IF9hPW5ldyBNYXAoW1tVYS5tZW1vcnksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtVYS5maWxlLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl1dKTt2YXIgSGE7IWZ1bmN0aW9uKGUpe2UubXF0dD0iTVFUVCIsZS5tb2RidXM9Ik1vZGJ1cyIsZS5vcGN1YT0iT1BDLVVBIixlLmJsZT0iQkxFIixlLnJlcXVlc3Q9IlJlcXVlc3QiLGUuY2FuPSJDQU4iLGUuYmFjbmV0PSJCQUNuZXQiLGUuY3VzdG9tPSJDdXN0b20ifShIYXx8KEhhPXt9KSk7Y29uc3QgemE9e2NvbmZpZzp7fSxuYW1lOiIiLGNvbmZpZ1R5cGU6bnVsbCxlbmFibGVkOiExfTtmdW5jdGlvbiBXYShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZS52YWx1ZSk9PT1KU09OLnN0cmluZ2lmeSh7fSk/e3ZhbGlkSlNPTjohMH06bnVsbH1jb25zdCBqYT0nW2xvZ2dlcnNdfX1rZXlzPXJvb3QsIHNlcnZpY2UsIGNvbm5lY3RvciwgY29udmVydGVyLCB0Yl9jb25uZWN0aW9uLCBzdG9yYWdlLCBleHRlbnNpb259fVtoYW5kbGVyc119fWtleXM9Y29uc29sZUhhbmRsZXIsIHNlcnZpY2VIYW5kbGVyLCBjb25uZWN0b3JIYW5kbGVyLCBjb252ZXJ0ZXJIYW5kbGVyLCB0Yl9jb25uZWN0aW9uSGFuZGxlciwgc3RvcmFnZUhhbmRsZXIsIGV4dGVuc2lvbkhhbmRsZXJ9fVtmb3JtYXR0ZXJzXX19a2V5cz1Mb2dGb3JtYXR0ZXJ9fVtsb2dnZXJfcm9vdF19fWxldmVsPUVSUk9SfX1oYW5kbGVycz1jb25zb2xlSGFuZGxlcn19W2xvZ2dlcl9jb25uZWN0b3JdfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz1jb25uZWN0b3JIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1jb25uZWN0b3J9fVtsb2dnZXJfc3RvcmFnZV19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPXN0b3JhZ2VIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1zdG9yYWdlfX1bbG9nZ2VyX3RiX2Nvbm5lY3Rpb25dfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz10Yl9jb25uZWN0aW9uSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9dGJfY29ubmVjdGlvbn19W2xvZ2dlcl9zZXJ2aWNlXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9c2VydmljZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPXNlcnZpY2V9fVtsb2dnZXJfY29udmVydGVyXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9Y29udmVydGVySGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9Y29udmVydGVyfX1bbG9nZ2VyX2V4dGVuc2lvbl19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPWNvbm5lY3RvckhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPWV4dGVuc2lvbn19W2hhbmRsZXJfY29uc29sZUhhbmRsZXJdfX1jbGFzcz1TdHJlYW1IYW5kbGVyfX1sZXZlbD17RVJST1J9fX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1hcmdzPShzeXMuc3Rkb3V0LCl9fVtoYW5kbGVyX2Nvbm5lY3RvckhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWNvbm5lY3Rvci5sb2ciLCAiZCIsIDEsIDcsKX19W2hhbmRsZXJfc3RvcmFnZUhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXN0b3JhZ2UubG9nIiwgImQiLCAxLCA3LCl9fVtoYW5kbGVyX3NlcnZpY2VIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31zZXJ2aWNlLmxvZyIsICJkIiwgMSwgNywpfX1baGFuZGxlcl9jb252ZXJ0ZXJIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31jb252ZXJ0ZXIubG9nIiwgImQiLCAxLCAzLCl9fVtoYW5kbGVyX2V4dGVuc2lvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWV4dGVuc2lvbi5sb2ciLCAiZCIsIDEsIDMsKX19W2hhbmRsZXJfdGJfY29ubmVjdGlvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXRiX2Nvbm5lY3Rpb24ubG9nIiwgImQiLCAxLCAzLCl9fVtmb3JtYXR0ZXJfTG9nRm9ybWF0dGVyXX19Zm9ybWF0PSIlKGFzY3RpbWUpcyAtICUobGV2ZWxuYW1lKXMgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiIH19ZGF0ZWZtdD0iJVktJW0tJWQgJUg6JU06JVMiJztmdW5jdGlvbiBLYShlKXtyZXR1cm4gZS5yZXBsYWNlKCJfIiwiIikucmVwbGFjZSgiLSIsIiIpLnJlcGxhY2UoL15ccyt8XHMrL2csIiIpLnRvTG93ZXJDYXNlKCkrIi5qc29uIn1mdW5jdGlvbiAkYShlLHQpe3JldHVybiBqYS5yZXBsYWNlKC97RVJST1J9L2csZSkucmVwbGFjZSgvey5cL2xvZ3NcL30vZyx0KX1mdW5jdGlvbiBZYShlKXtyZXR1cm57aWQ6ZSxlbnRpdHlUeXBlOkkuREVWSUNFfX1mdW5jdGlvbiBRYShlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwidGhpbmdzYm9hcmQiKSYmKHQuaG9zdD1lLnRoaW5nc2JvYXJkLmhvc3QsdC5wb3J0PWUudGhpbmdzYm9hcmQucG9ydCx0LnJlbW90ZUNvbmZpZ3VyYXRpb249ZS50aGluZ3Nib2FyZC5yZW1vdGVDb25maWd1cmF0aW9uLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnRoaW5nc2JvYXJkLnNlY3VyaXR5LEdhLmFjY2Vzc1Rva2VuKT8odC5zZWN1cml0eVR5cGU9R2EuYWNjZXNzVG9rZW4sdC5hY2Nlc3NUb2tlbj1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuKToodC5zZWN1cml0eVR5cGU9R2EudGxzLHQuY2FDZXJ0UGF0aD1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmNhQ2VydCx0LnByaXZhdGVLZXlQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkucHJpdmF0ZUtleSx0LmNlcnRQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkuY2VydCkpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJzdG9yYWdlIikmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnN0b3JhZ2UsInR5cGUiKSYmKGUuc3RvcmFnZS50eXBlPT09VWEubWVtb3J5Pyh0LnN0b3JhZ2VUeXBlPVVhLm1lbW9yeSx0LnJlYWRSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudCx0Lm1heFJlY29yZHNDb3VudD1lLnN0b3JhZ2UubWF4X3JlY29yZHNfY291bnQpOmUuc3RvcmFnZS50eXBlPT09VWEuZmlsZSYmKHQuc3RvcmFnZVR5cGU9VWEuZmlsZSx0LmRhdGFGb2xkZXJQYXRoPWUuc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoLHQubWF4RmlsZXNDb3VudD1lLnN0b3JhZ2UubWF4X2ZpbGVfY291bnQsdC5yZWFkUmVjb3Jkc0NvdW50PWUuc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnQsdC5tYXhSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50KSksdH1mdW5jdGlvbiBKYShlKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpbi5lbmFibGVkfHwodFtuLm5hbWVdPXtjb25uZWN0b3I6bi5jb25maWdUeXBlLGNvbmZpZzpuLmNvbmZpZ30pO3JldHVybiB0fWZ1bmN0aW9uIFhhKGUpe2NvbnN0IHQ9e3RoaW5nc2JvYXJkOlphKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KWlmKG4uZW5hYmxlZCl7Y29uc3QgdD1uLmNvbmZpZ1R5cGU7QXJyYXkuaXNBcnJheShlW3RdKXx8KGVbdF09W10pO2NvbnN0IGE9e25hbWU6bi5uYW1lLGNvbmZpZzpuLmNvbmZpZ307ZVt0XS5wdXNoKGEpfX0odCxlLmNvbm5lY3RvcnMpLHR9ZnVuY3Rpb24gWmEoZSl7bGV0IHQ7dD1lLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3thY2Nlc3NUb2tlbjplLmFjY2Vzc1Rva2VufTp7Y2FDZXJ0OmUuY2FDZXJ0UGF0aCxwcml2YXRlS2V5OmUucHJpdmF0ZUtleVBhdGgsY2VydDplLmNlcnRQYXRofTtjb25zdCBuPXtob3N0OmUuaG9zdCxyZW1vdGVDb25maWd1cmF0aW9uOmUucmVtb3RlQ29uZmlndXJhdGlvbixwb3J0OmUucG9ydCxzZWN1cml0eTp0fTtsZXQgYTthPWUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/e3R5cGU6VWEubWVtb3J5LHJlYWRfcmVjb3Jkc19jb3VudDplLnJlYWRSZWNvcmRzQ291bnQsbWF4X3JlY29yZHNfY291bnQ6ZS5tYXhSZWNvcmRzQ291bnR9Ont0eXBlOlVhLmZpbGUsZGF0YV9mb2xkZXJfcGF0aDplLmRhdGFGb2xkZXJQYXRoLG1heF9maWxlX2NvdW50OmUubWF4RmlsZXNDb3VudCxtYXhfcmVhZF9yZWNvcmRzX2NvdW50OmUucmVhZFJlY29yZHNDb3VudCxtYXhfcmVjb3Jkc19wZXJfZmlsZTplLm1heFJlY29yZHNDb3VudH07Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBvZiBlLmNvbm5lY3RvcnMpaWYodC5lbmFibGVkKXtjb25zdCBlPXtjb25maWd1cmF0aW9uOkthKHQubmFtZSksbmFtZTp0Lm5hbWUsdHlwZTp0LmNvbmZpZ1R5cGV9O28ucHVzaChlKX1yZXR1cm57dGhpbmdzYm9hcmQ6bixjb25uZWN0b3JzOm8sc3RvcmFnZTphLGxvZ3M6d2luZG93LmJ0b2EoJGEoZS5yZW1vdGVMb2dnaW5nTGV2ZWwsZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncykpfX1jbGFzcyBlbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5lbGVtZW50UmVmPXQsdGhpcy51dGlscz1uLHRoaXMubmdab25lPWEsdGhpcy5mYj1vLHRoaXMud2luZG93PWksdGhpcy5kaWFsb2c9cix0aGlzLnRyYW5zbGF0ZT1zLHRoaXMuZGV2aWNlU2VydmljZT1sLHRoaXMuYXR0cmlidXRlU2VydmljZT1jLHRoaXMuaW1wb3J0RXhwb3J0PXAsdGhpcy5hbGlnbm1lbnQ9InJvdyIsdGhpcy5sYXlvdXRHYXA9IjVweCIsdGhpcy5zZWN1cml0eVR5cGVzPVZhLHRoaXMuZ2F0ZXdheUxvZ0xldmVscz1PYmplY3Qua2V5cyhCYSkubWFwKChlPT5CYVtlXSkpLHRoaXMuY29ubmVjdG9yVHlwZXM9T2JqZWN0LmtleXMoSGEpLHRoaXMuc3RvcmFnZVR5cGVzPV9hLHRoaXMudG9hc3RUYXJnZXRJZD0iZ2F0ZXdheS1jb25maWd1cmF0aW9uLXdpZGdldCIrdGhpcy51dGlscy5ndWlkKCksdGhpcy5pc1JlYWRPbmx5Rm9ybT0hMX1nZXQgY29ubmVjdG9ycygpe3JldHVybiB0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KCJjb25uZWN0b3JzIil9bmdPbkluaXQoKXt0aGlzLmluaXRXaWRnZXRTZXR0aW5ncyh0aGlzLmN0eC5zZXR0aW5ncyksdGhpcy5jdHguZGF0YXNvdXJjZXMmJnRoaXMuY3R4LmRhdGFzb3VyY2VzLmxlbmd0aCYmKHRoaXMuZGV2aWNlTmFtZUZvcm09dGhpcy5jdHguZGF0YXNvdXJjZXNbMF0ubmFtZSksdGhpcy5idWlsZEZvcm0oKSx0aGlzLmN0eC51cGRhdGVXaWRnZXRQYXJhbXMoKSx0aGlzLmZvcm1SZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuZm9ybVJlc2l6ZSQub2JzZXJ2ZSh0aGlzLmZvcm1Db250YWluZXJSZWYubmF0aXZlRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1SZXNpemUkJiZ0aGlzLmZvcm1SZXNpemUkLmRpc2Nvbm5lY3QoKSx0aGlzLnN1YnNjcmliZUdhdGV3YXkkLnVuc3Vic2NyaWJlKCksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQudW5zdWJzY3JpYmUoKX1pbml0V2lkZ2V0U2V0dGluZ3MoZSl7bGV0IHQ7dD1lLmdhdGV3YXlUaXRsZSYmZS5nYXRld2F5VGl0bGUubGVuZ3RoP3RoaXMudXRpbHMuY3VzdG9tVHJhbnNsYXRpb24oZS5nYXRld2F5VGl0bGUsZS5nYXRld2F5VGl0bGUpOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuZ2F0ZXdheSIpLHRoaXMuY3R4LndpZGdldFRpdGxlPXQsdGhpcy5pc1JlYWRPbmx5Rm9ybT0hIWUucmVhZE9ubHkmJmUucmVhZE9ubHksdGhpcy5hcmNoaXZlRmlsZU5hbWU9ZS5hcmNoaXZlRmlsZU5hbWU/Lmxlbmd0aD9lLmFyY2hpdmVGaWxlTmFtZToiZ2F0ZXdheUNvbmZpZ3VyYXRpb24iLHRoaXMuZ2F0ZXdheVR5cGU9ZS5nYXRld2F5VHlwZT8ubGVuZ3RoP2UuZ2F0ZXdheVR5cGU6IkdhdGV3YXkiLHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHM9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLmdhdGV3YXlOYW1lRXhpc3RzLGUuZ2F0ZXdheU5hbWVFeGlzdHMpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktZXhpc3RzIiksdGhpcy5zdWNjZXNzZnVsU2F2ZWQ9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLnN1Y2Nlc3NmdWxTYXZlLGUuc3VjY2Vzc2Z1bFNhdmUpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktc2F2ZWQiKSx0aGlzLnVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKX1yZXNpemUoKXt0aGlzLm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVXaWRnZXREaXNwbGF5aW5nKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpfXVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKXt0aGlzLmN0eC4kY29udGFpbmVyJiZ0aGlzLmN0eC4kY29udGFpbmVyWzBdLm9mZnNldFdpZHRoPD00MjU/KHRoaXMubGF5b3V0R2FwPSIwIix0aGlzLmFsaWdubWVudD0iY29sdW1uIik6KHRoaXMubGF5b3V0R2FwPSI1cHgiLHRoaXMuYWxpZ25tZW50PSJyb3ciKX1zYXZlQXR0cmlidXRlKGUsdCxuKXtjb25zdCBhPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoImdhdGV3YXkiKS52YWx1ZSxvPXtrZXk6ZSx2YWx1ZTp0fTtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKFlhKGEpLG4sW29dKX1jcmVhdGVDb25uZWN0b3IoZT16YSl7dGhpcy5jb25uZWN0b3JzLnB1c2godGhpcy5mYi5ncm91cCh7ZW5hYmxlZDpbZS5lbmFibGVkXSxjb25maWdUeXBlOltlLmNvbmZpZ1R5cGUsW3VlLnJlcXVpcmVkXV0sbmFtZTpbZS5uYW1lLFt1ZS5yZXF1aXJlZF1dLGNvbmZpZzpbZS5jb25maWcsW3VlLm51bGxWYWxpZGF0b3IsV2FdXX0pKX1nZXRGb3JtRmllbGQoZSl7cmV0dXJuIHRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoZSl9YnVpbGRGb3JtKCl7dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwPXRoaXMuZmIuZ3JvdXAoe2dhdGV3YXk6W251bGwsW11dLGFjY2Vzc1Rva2VuOltudWxsLFt1ZS5yZXF1aXJlZF1dLHNlY3VyaXR5VHlwZTpbR2EuYWNjZXNzVG9rZW5dLGhvc3Q6W3RoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFt1ZS5yZXF1aXJlZF1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZUNvbmZpZ3VyYXRpb246WyEwXSxjYUNlcnRQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L2NhLnBlbSJdLHByaXZhdGVLZXlQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L3ByaXZhdGVLZXkucGVtIl0sY2VydFBhdGg6WyIvZXRjL3RoaW5nc2JvYXJkLWdhdGV3YXkvY2VydGlmaWNhdGUucGVtIl0scmVtb3RlTG9nZ2luZ0xldmVsOltCYS5kZWJ1Z10scmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3M6WyIuL2xvZ3MvIixbdWUucmVxdWlyZWRdXSxzdG9yYWdlVHlwZTpbVWEubWVtb3J5XSxyZWFkUmVjb3Jkc0NvdW50OlsxMDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhSZWNvcmRzQ291bnQ6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heEZpbGVzQ291bnQ6WzUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhRm9sZGVyUGF0aDpbIi4vZGF0YS8iLFt1ZS5yZXF1aXJlZF1dLGNvbm5lY3RvcnM6dGhpcy5mYi5hcnJheShbXSl9KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQ9dGhpcy5nZXRGb3JtRmllbGQoInN0b3JhZ2VUeXBlIikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2U9PT1VYS5tZW1vcnk/KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZGlzYWJsZSgpLHRoaXMuZ2V0Rm9ybUZpZWxkKCJkYXRhRm9sZGVyUGF0aCIpLmRpc2FibGUoKSk6KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZW5hYmxlKCksdGhpcy5nZXRGb3JtRmllbGQoImRhdGFGb2xkZXJQYXRoIikuZW5hYmxlKCkpfSkpLHRoaXMuc3Vic2NyaWJlR2F0ZXdheSQ9dGhpcy5nZXRGb3JtRmllbGQoImdhdGV3YXkiKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57bnVsbCE9PWU/QWUoW3RoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyhlKS5waXBlKEVlKChlPT57dGhpcy5nZXRGb3JtRmllbGQoImFjY2Vzc1Rva2VuIikucGF0Y2hWYWx1ZShlLmNyZWRlbnRpYWxzSWQpfSkpKSwuLi50aGlzLmdldEF0dHJpYnV0ZXMoZSldKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLm1hcmtBc1ByaXN0aW5lKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpOnRoaXMuZ2V0Rm9ybUZpZWxkKCJhY2Nlc3NUb2tlbiIpLnBhdGNoVmFsdWUoIiIpfSkpfWdhdGV3YXlFeGlzdCgpe3RoaXMuY3R4LnNob3dFcnJvclRvYXN0KHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHMsInRvcCIsImxlZnQiLHRoaXMudG9hc3RUYXJnZXRJZCl9ZXhwb3J0Q29uZmlnKCl7Y29uc3QgZT10aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUsdD17fTt2YXIgbixhLG87dFsidGJfZ2F0ZXdheS55YW1sIl09ZnVuY3Rpb24oZSl7bGV0IHQ7dD0idGhpbmdzYm9hcmQ6XG4iLHQrPSIgIGhvc3Q6ICIrZS5ob3N0KyJcbiIsdCs9IiAgcmVtb3RlQ29uZmlndXJhdGlvbjogIitlLnJlbW90ZUNvbmZpZ3VyYXRpb24rIlxuIix0Kz0iICBwb3J0OiAiK2UucG9ydCsiXG4iLHQrPSIgIHNlY3VyaXR5OlxuIixlLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3QrPSIgICAgYWNjZXNzLXRva2VuOiAiK2UuYWNjZXNzVG9rZW4rIlxuIjoodCs9IiAgICBjYV9jZXJ0OiAiK2UuY2FDZXJ0UGF0aCsiXG4iLHQrPSIgICAgcHJpdmF0ZUtleTogIitlLnByaXZhdGVLZXlQYXRoKyJcbiIsdCs9IiAgICBjZXJ0OiAiK2UuY2VydFBhdGgrIlxuIiksdCs9InN0b3JhZ2U6XG4iLGUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/KHQrPSIgIHR5cGU6IG1lbW9yeVxuIix0Kz0iICByZWFkX3JlY29yZHNfY291bnQ6ICIrZS5yZWFkUmVjb3Jkc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlY29yZHNfY291bnQ6ICIrZS5tYXhSZWNvcmRzQ291bnQrIlxuIik6KHQrPSIgIHR5cGU6IGZpbGVcbiIsdCs9IiAgZGF0YV9mb2xkZXJfcGF0aDogIitlLmRhdGFGb2xkZXJQYXRoKyJcbiIsdCs9IiAgbWF4X2ZpbGVfY291bnQ6ICIrZS5tYXhGaWxlc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlYWRfcmVjb3Jkc19jb3VudDogIitlLnJlYWRSZWNvcmRzQ291bnQrIlxuIix0Kz0iICBtYXhfcmVjb3Jkc19wZXJfZmlsZTogIitlLm1heFJlY29yZHNDb3VudCsiXG4iKSx0Kz0iY29ubmVjdG9yczpcbiI7Zm9yKGNvbnN0IG4gb2YgZS5jb25uZWN0b3JzKW4uZW5hYmxlZCYmKHQrPSIgIC1cbiIsdCs9IiAgICBuYW1lOiAiK24ubmFtZSsiXG4iLHQrPSIgICAgdHlwZTogIituLmNvbmZpZ1R5cGUrIlxuIix0Kz0iICAgIGNvbmZpZ3VyYXRpb246ICIrS2Eobi5uYW1lKSsiXG4iKTtyZXR1cm4gdH0oZSksZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KW4uZW5hYmxlZCYmKGVbS2Eobi5uYW1lKV09SlNPTi5zdHJpbmdpZnkobi5jb25maWcpKX0odCxlLmNvbm5lY3RvcnMpLG49dCxhPWUucmVtb3RlTG9nZ2luZ0xldmVsLG89ZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncyxuWyJsb2dzLmNvbmYiXT0kYShhLG8pLHRoaXMuaW1wb3J0RXhwb3J0LmV4cG9ydEpTWmlwKHQsdGhpcy5hcmNoaXZlRmlsZU5hbWUpLHRoaXMuc2F2ZUF0dHJpYnV0ZShSYSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUucmVtb3RlTG9nZ2luZ0xldmVsLnRvVXBwZXJDYXNlKCksTC5TSEFSRURfU0NPUEUpfWFkZE5ld0Nvbm5lY3Rvcigpe3RoaXMuY3JlYXRlQ29ubmVjdG9yKCl9cmVtb3ZlQ29ubmVjdG9yKGUpe2U+LTEmJih0aGlzLmNvbm5lY3RvcnMucmVtb3ZlQXQoZSksdGhpcy5jb25uZWN0b3JzLm1hcmtBc0RpcnR5KCkpfW9wZW5Db25maWdEaWFsb2coZSx0LG4sYSl7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpKSx0aGlzLmRpYWxvZy5vcGVuKFFlLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7anNvblZhbHVlOm4scmVxdWlyZWQ6ITAsdGl0bGU6dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS50aXRsZS1jb25uZWN0b3JzLWpzb24iLHt0eXBlTmFtZTphfSl9fSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGU9PntlJiYodGhpcy5jb25uZWN0b3JzLmF0KHQpLmdldCgiY29uZmlnIikucGF0Y2hWYWx1ZShlKSx0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzKCkpfSkpfWNyZWF0ZUNvbm5lY3Rvck5hbWUoZSx0LG49MCl7Y29uc3QgYT1uP3Qrbjp0O3JldHVybi0xPT09ZS5maW5kSW5kZXgoKGU9PmUubmFtZT09PWEpKT9hOnRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShlLHQsKytuKX12YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sYT0wKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3QgaT0wPT09YT90OnQrYTtvIT09biYmZVtvXS5uYW1lPT09aSYmdGhpcy52YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sKythKX1yZXR1cm4gMD09PWE/dDp0K2F9Y2hhbmdlQ29ubmVjdG9yVHlwZShlKXtpZighZS5nZXQoIm5hbWUiKS52YWx1ZSl7Y29uc3QgdD1lLmdldCgiY29uZmlnVHlwZSIpLnZhbHVlLG49dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLmNvbm5lY3RvcnM7ZS5nZXQoIm5hbWUiKS5wYXRjaFZhbHVlKHRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShuLEhhW3RdKSl9fWNoYW5nZUNvbm5lY3Rvck5hbWUoZSx0KXtjb25zdCBuPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZS5jb25uZWN0b3JzO2UuZ2V0KCJuYW1lIikucGF0Y2hWYWx1ZSh0aGlzLnZhbGlkYXRlQ29ubmVjdG9yTmFtZShuLGUuZ2V0KCJuYW1lIikudmFsdWUsdCkpfXNhdmUoKXtjb25zdCBlPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZTtBZShbdGhpcy5zYXZlQXR0cmlidXRlKCJjb25maWd1cmF0aW9uIix3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShYYShlKSkpLEwuU0hBUkVEX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoT2Esd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoSmEoZS5jb25uZWN0b3JzKSkpLEwuU0VSVkVSX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoUmEsdGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLnJlbW90ZUxvZ2dpbmdMZXZlbC50b1VwcGVyQ2FzZSgpLEwuU0hBUkVEX1NDT1BFKV0pLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmN0eC5zaG93U3VjY2Vzc1RvYXN0KHRoaXMuc3VjY2Vzc2Z1bFNhdmVkLDJlMywidG9wIiwibGVmdCIsdGhpcy50b2FzdFRhcmdldElkKSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAubWFya0FzUHJpc3RpbmUoKX0pKX1nZXRBdHRyaWJ1dGVzKGUpe2NvbnN0IHQ9W107cmV0dXJuIHQucHVzaChBZShbdGhpcy5nZXRBdHRyaWJ1dGUoImN1cnJlbnRfY29uZmlndXJhdGlvbiIsTC5DTElFTlRfU0NPUEUsZSksdGhpcy5nZXRBdHRyaWJ1dGUoT2EsTC5TRVJWRVJfU0NPUEUsZSldKS5waXBlKEVlKCgoW2UsdF0pPT57dGhpcy5zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpLHRoaXMuc2V0Rm9ybUNvbm5lY3RvcnNEcmFmdCh0KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSkpKSx0LnB1c2godGhpcy5nZXRBdHRyaWJ1dGUoUmEsTC5TSEFSRURfU0NPUEUsZSkucGlwZShFZSgoZT0+dGhpcy5wcm9jZXNzTG9nZ2luZ0xldmVsKGUpKSkpKSx0fWdldEF0dHJpYnV0ZShlLHQsbil7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKFlhKG4pLHQsW2VdKX1zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpe2lmKHRoaXMuY29ubmVjdG9ycy5jbGVhcigpLGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49dFtlXTtpZigidGhpbmdzYm9hcmQiPT09ZSludWxsIT09biYmT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJnRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5wYXRjaFZhbHVlKFFhKG4pKTtlbHNlIGZvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgYT0iTm8gbmFtZSI7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5bdF0sIm5hbWUiKSYmKGE9blt0XS5uYW1lKTtjb25zdCBvPXtlbmFibGVkOiEwLGNvbmZpZ1R5cGU6ZSxjb25maWc6blt0XS5jb25maWcsbmFtZTphfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihvKX19fX1zZXRGb3JtQ29ubmVjdG9yc0RyYWZ0KGUpe2lmKGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49e2VuYWJsZWQ6ITEsY29uZmlnVHlwZTp0W2VdLmNvbm5lY3Rvcixjb25maWc6dFtlXS5jb25maWcsbmFtZTplfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihuKX19fXByb2Nlc3NMb2dnaW5nTGV2ZWwoZSl7bGV0IHQ9QmEuZGVidWc7ZS5sZW5ndGg+MCYmQmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSYmKHQ9QmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSksdGhpcy5nZXRGb3JtRmllbGQoInJlbW90ZUxvZ2dpbmdMZXZlbCIpLnBhdGNoVmFsdWUodCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjp0LkVsZW1lbnRSZWZ9LHt0b2tlbjpYLlV0aWxzU2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dG9rZW46YWV9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpYLkRldmljZVNlcnZpY2V9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTplbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIixpbnB1dHM6e2N0eDoiY3R4Iixpc1N0YXRlRm9ybToiaXNTdGF0ZUZvcm0ifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToiZm9ybUNvbnRhaW5lclJlZiIsZmlyc3Q6ITAscHJlZGljYXRlOlsiZm9ybUNvbnRhaW5lciJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH0se3Byb3BlcnR5TmFtZToibXVsdGlwbGVJbnB1dEZvcm0iLGZpcnN0OiEwLHByZWRpY2F0ZTpbImdhdGV3YXlDb25maWd1cmF0aW9uRm9ybSJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGZvcm0gI2Zvcm1Db250YWluZXIgY2xhc3M9ImdhdGV3YXktZm9ybSJcbiAgICAgIFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwIlxuICAgICAgdGItdG9hc3QgdG9hc3RUYXJnZXQ9Int7IHRvYXN0VGFyZ2V0SWQgfX0iXG4gICAgICAobmdTdWJtaXQpPSJzYXZlKCkiPlxuICA8bWF0LWFjY29yZGlvbiBtdWx0aT0idHJ1ZSIgY2xhc3M9Im1hdC1ib2R5LTIiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmRcJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDx0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3RcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImdhdGV3YXkiXG4gICAgICAgICAgW2RldmljZU5hbWVdPSJkZXZpY2VOYW1lRm9ybSJcbiAgICAgICAgICBbaXNTdGF0ZUZvcm1dPSJpc1N0YXRlRm9ybSJcbiAgICAgICAgICBbbmV3R2F0ZXdheVR5cGVdPSJnYXRld2F5VHlwZSJcbiAgICAgICAgICAoZ2F0ZXdheU5hbWVFeGlzdCk9ImdhdGV3YXlFeGlzdCgpIlxuICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgID5cbiAgICAgIDwvdGItZW50aXR5LWdhdGV3YXktc2VsZWN0PlxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnNlY3VyaXR5LXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHlUeXBlIiA+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc2VjdXJpdHlUeXBlLnZhbHVlLnRvU3RyaW5nKCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblxuICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc2VjdXJpdHlUeXBlXCcpLnZhbHVlID09IFwndGxzXCciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNhLWNlcnRpZmljYXRlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1wcml2YXRlLWtleVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icHJpdmF0ZUtleVBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2VydFBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj57eyBcJ2dhdGV3YXkucmVtb3RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1jaGVja2JveD5cblxuICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVMb2dnaW5nTGV2ZWwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVscyIgW3ZhbHVlXT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICB7eyBsb2dMZXZlbCB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnBhdGgtbG9nc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3MiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS5wYXRoLWxvZ3MtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zdG9yYWdlXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuc3RvcmFnZS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzdG9yYWdlVHlwZS5rZXkiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0icmVhZFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVhZFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1wYWNrLXNpemUtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsID5cbiAgICAgICAgICAgICAge3sgKGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgIT09IFwnZmlsZVwnID8gXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHNcJyA6IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHNcJykgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4UmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgPT0gXCdmaWxlXCciPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heEZpbGVzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heEZpbGVzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1wYXRoXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImRhdGFGb2xkZXJQYXRoIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnZGF0YUZvbGRlclBhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtY29uZmlnXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJnYXRld2F5LWNvbmZpZyI+XG4gICAgICAgIDxzZWN0aW9uIGZvcm1BcnJheU5hbWU9ImNvbm5lY3RvcnMiICpuZ0Zvcj0ibGV0IGNvbm5lY3RvciBvZiBjb25uZWN0b3JzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4OyI+XG4gICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09ImkiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gc3RyZXRjaCIgZnhMYXlvdXRHYXA9IjhweCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBzdGFydCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIiBmeEZsZXg+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5jb25uZWN0b3ItdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJjb25maWdUeXBlIiAoc2VsZWN0aW9uQ2hhbmdlKT0iY2hhbmdlQ29ubmVjdG9yVHlwZShjb25uZWN0b3IpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbm5lY3RvclR5cGUgb2YgY29ubmVjdG9yVHlwZXMiIFt2YWx1ZV09ImNvbm5lY3RvclR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb25uZWN0b3JUeXBlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCdjb25maWdUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLXR5cGUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LmNvbm5lY3Rvci1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiAoYmx1cik9ImNoYW5nZUNvbm5lY3Rvck5hbWUoY29ubmVjdG9yLCBpKSI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29ubmVjdG9yLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5jb25uZWN0b3ItbmFtZS1yZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIlxuICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJ7e2FsaWdubWVudCA9PSBcJ3Jvd1wnID8gXCdlbmQgY2VudGVyXCcgOiBcJ3NwYWNlLWV2ZW5seSBjZW50ZXJcJ319IiBjbGFzcz0iYWN0aW9uLWJ1dHRvbnMiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0ib3BlbkNvbmZpZ0RpYWxvZygkZXZlbnQsIGksIGNvbm5lY3Rvci5nZXQoXCdjb25maWdcJykudmFsdWUsIGNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLnZhbHVlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkudXBkYXRlLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdtYXQtd2FyblwnOiBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLmludmFsaWR9Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV9ob3JpejwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb25uZWN0b3IoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPHNwYW4gW2Z4U2hvd109IiFjb25uZWN0b3JzLmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7XCdnYXRld2F5Lm5vLWNvbm5lY3RvcnNcJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT0iYnV0dG9uIiAoY2xpY2spPSJhZGROZXdDb25uZWN0b3IoKSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5jb25uZWN0b3ItYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXYgPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPC9tYXQtYWNjb3JkaW9uPlxuICA8c2VjdGlvbiBbZnhTaG93XT0iIWlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBjbGFzcz0iZm9ybS1hY3Rpb24tYnV0dG9ucyI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iZXhwb3J0Q29uZmlnKCkiXG4gICAgICAgICAgICAqbmdJZj0iIWdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LmRvd25sb2FkLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0ic3VibWl0IlxuICAgICAgICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LnNhdmUtdGlwXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAge3tcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9zZWN0aW9uPlxuPC9mb3JtPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5nYXRld2F5LWZvcm17aGVpZ2h0OjEwMCU7cGFkZGluZzo1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW59Omhvc3QgLmdhdGV3YXktZm9ybSAuZm9ybS1hY3Rpb24tYnV0dG9uc3twYWRkaW5nLXRvcDo4cHh9Omhvc3QgLmdhdGV3YXktZm9ybSAuZ2F0ZXdheS1jb25maWcgLm5vLWRhdGEtZm91bmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2hlaWdodDo0MHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Y3QuVG9hc3REaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi10b2FzdF0iLGlucHV0czpbInRvYXN0VGFyZ2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpwdC5NYXRDaGVja2JveCxzZWxlY3RvcjoibWF0LWNoZWNrYm94IixpbnB1dHM6WyJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsImlkIiwicmVxdWlyZWQiLCJsYWJlbFBvc2l0aW9uIiwibmFtZSIsInZhbHVlIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY29sb3IiLCJkaXNhYmxlZEludGVyYWN0aXZlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiaW5kZXRlcm1pbmF0ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJpbmRldGVybWluYXRlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEFjY29yZGlvbixzZWxlY3RvcjoibWF0LWFjY29yZGlvbiIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsImRpc3BsYXlNb2RlIiwidG9nZ2xlUG9zaXRpb24iXSxleHBvcnRBczpbIm1hdEFjY29yZGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0Q2xhc3NEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nQ2xhc3NdLCBbbmdDbGFzcy54c10sIFtuZ0NsYXNzLnNtXSwgW25nQ2xhc3MubWRdLCBbbmdDbGFzcy5sZ10sIFtuZ0NsYXNzLnhsXSwgIFtuZ0NsYXNzLmx0LXNtXSwgW25nQ2xhc3MubHQtbWRdLCBbbmdDbGFzcy5sdC1sZ10sIFtuZ0NsYXNzLmx0LXhsXSwgIFtuZ0NsYXNzLmd0LXhzXSwgW25nQ2xhc3MuZ3Qtc21dLCBbbmdDbGFzcy5ndC1tZF0sIFtuZ0NsYXNzLmd0LWxnXSIsaW5wdXRzOlsibmdDbGFzcyIsIm5nQ2xhc3MueHMiLCJuZ0NsYXNzLnNtIiwibmdDbGFzcy5tZCIsIm5nQ2xhc3MubGciLCJuZ0NsYXNzLnhsIiwibmdDbGFzcy5sdC1zbSIsIm5nQ2xhc3MubHQtbWQiLCJuZ0NsYXNzLmx0LWxnIiwibmdDbGFzcy5sdC14bCIsIm5nQ2xhc3MuZ3QteHMiLCJuZ0NsYXNzLmd0LXNtIiwibmdDbGFzcy5ndC1tZCIsIm5nQ2xhc3MuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS7JtU5nTm9WYWxpZGF0ZSxzZWxlY3RvcjoiZm9ybTpub3QoW25nTm9Gb3JtXSk6bm90KFtuZ05hdGl2ZVZhbGlkYXRlXSkifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTptdC5FbnRpdHlHYXRld2F5U2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3QiLGlucHV0czpbInJlcXVpcmVkIiwibmV3R2F0ZXdheVR5cGUiLCJkZXZpY2VOYW1lIiwiaXNTdGF0ZUZvcm0iXSxvdXRwdXRzOlsiZ2F0ZXdheU5hbWVFeGlzdCJdfSx7a2luZDoicGlwZSIsdHlwZTpfLlVwcGVyQ2FzZVBpcGUsbmFtZToidXBwZXJjYXNlIn0se2tpbmQ6InBpcGUiLHR5cGU6Xy5LZXlWYWx1ZVBpcGUsbmFtZToia2V5dmFsdWUifSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fWUoIkdhdGV3YXlGb3JtQ29tcG9uZW50IixlbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2Vcbjxmb3JtICNmb3JtQ29udGFpbmVyIGNsYXNzPSJnYXRld2F5LWZvcm0iXG4gICAgICBbZm9ybUdyb3VwXT0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cCJcbiAgICAgIHRiLXRvYXN0IHRvYXN0VGFyZ2V0PSJ7eyB0b2FzdFRhcmdldElkIH19IlxuICAgICAgKG5nU3VibWl0KT0ic2F2ZSgpIj5cbiAgPG1hdC1hY2NvcmRpb24gbXVsdGk9InRydWUiIGNsYXNzPSJtYXQtYm9keS0yIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8dGItZW50aXR5LWdhdGV3YXktc2VsZWN0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJnYXRld2F5IlxuICAgICAgICAgIFtkZXZpY2VOYW1lXT0iZGV2aWNlTmFtZUZvcm0iXG4gICAgICAgICAgW2lzU3RhdGVGb3JtXT0iaXNTdGF0ZUZvcm0iXG4gICAgICAgICAgW25ld0dhdGV3YXlUeXBlXT0iZ2F0ZXdheVR5cGUiXG4gICAgICAgICAgKGdhdGV3YXlOYW1lRXhpc3QpPSJnYXRld2F5RXhpc3QoKSJcbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICA+XG4gICAgICA8L3RiLWVudGl0eS1nYXRld2F5LXNlbGVjdD5cbiAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5zZWN1cml0eS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5VHlwZSIgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2VjdXJpdHlUeXBlIG9mIHNlY3VyaXR5VHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic2VjdXJpdHlUeXBlLmtleSI+XG4gICAgICAgICAgICAgIHt7IHNlY3VyaXR5VHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWluXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3NlY3VyaXR5VHlwZVwnKS52YWx1ZSA9PSBcJ3Rsc1wnIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2FDZXJ0UGF0aCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGxzLXBhdGgtcHJpdmF0ZS1rZXlcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InByaXZhdGVLZXlQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT0icmVtb3RlQ29uZmlndXJhdGlvbiI+e3sgXCdnYXRld2F5LnJlbW90ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtY2hlY2tib3g+XG5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ0xldmVsIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbHMiIFt2YWx1ZV09ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAge3sgbG9nTGV2ZWwgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5wYXRoLWxvZ3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzIj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkucGF0aC1sb2dzLXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnN0b3JhZ2UtdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdG9yYWdlVHlwZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGUudmFsdWUudG9TdHJpbmcoKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InJlYWRSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbCA+XG4gICAgICAgICAgICAgIHt7IChnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlICE9PSBcJ2ZpbGVcJyA/IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzXCcgOiBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzXCcpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlID09IFwnZmlsZVwnIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhGaWxlc0NvdW50Ij5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJkYXRhRm9sZGVyUGF0aCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2RhdGFGb2xkZXJQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBjbGFzcz0iZ2F0ZXdheS1jb25maWciPlxuICAgICAgICA8c2VjdGlvbiBmb3JtQXJyYXlOYW1lPSJjb25uZWN0b3JzIiAqbmdGb3I9ImxldCBjb25uZWN0b3Igb2YgY29ubmVjdG9ycy5jb250cm9sczsgbGV0IGkgPSBpbmRleDsiPlxuICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPSJpIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIHN0cmV0Y2giIGZ4TGF5b3V0R2FwPSI4cHgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEFsaWduPSJjZW50ZXIgc3RhcnQiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgZnhGbGV4PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuY29ubmVjdG9yLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29uZmlnVHlwZSIgKHNlbGVjdGlvbkNoYW5nZSk9ImNoYW5nZUNvbm5lY3RvclR5cGUoY29ubmVjdG9yKSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb25uZWN0b3JUeXBlIG9mIGNvbm5lY3RvclR5cGVzIiBbdmFsdWVdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29ubmVjdG9yVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb25uZWN0b3IuZ2V0KFwnY29uZmlnVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rvci10eXBlLXJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3ItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgKGJsdXIpPSJjaGFuZ2VDb25uZWN0b3JOYW1lKGNvbm5lY3RvciwgaSkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLW5hbWUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCJcbiAgICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ie3thbGlnbm1lbnQgPT0gXCdyb3dcJyA/IFwnZW5kIGNlbnRlclwnIDogXCdzcGFjZS1ldmVubHkgY2VudGVyXCd9fSIgY2xhc3M9ImFjdGlvbi1idXR0b25zIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSIgbWF0LWljb24tYnV0dG9uIChjbGljayk9Im9wZW5Db25maWdEaWFsb2coJGV2ZW50LCBpLCBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLnZhbHVlLCBjb25uZWN0b3IuZ2V0KFwnbmFtZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnVwZGF0ZS1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ie1wnbWF0LXdhcm5cJzogY29ubmVjdG9yLmdldChcJ2NvbmZpZ1wnKS5pbnZhbGlkfSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfaG9yaXo8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQ29ubmVjdG9yKGkpIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5kZWxldGVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxzcGFuIFtmeFNob3ddPSIhY29ubmVjdG9ycy5sZW5ndGgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiIGNsYXNzPSJuby1kYXRhLWZvdW5kIj57e1wnZ2F0ZXdheS5uby1jb25uZWN0b3JzXCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uIFtmeFNob3ddPSIhaXNSZWFkT25seUZvcm0iIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9ImJ1dHRvbiIgKGNsaWNrKT0iYWRkTmV3Q29ubmVjdG9yKCkiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuY29ubmVjdG9yLWFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2ID5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gIDwvbWF0LWFjY29yZGlvbj5cbiAgPHNlY3Rpb24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgY2xhc3M9ImZvcm0tYWN0aW9uLWJ1dHRvbnMiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImV4cG9ydENvbmZpZygpIlxuICAgICAgICAgICAgKm5nSWY9IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5kb3dubG9hZC10aXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICB7e1wnYWN0aW9uLmRvd25sb2FkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9InN1Ym1pdCJcbiAgICAgICAgICAgICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5zYXZlLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvc2VjdGlvbj5cbjwvZm9ybT5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuZ2F0ZXdheS1mb3Jte2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufTpob3N0IC5nYXRld2F5LWZvcm0gLmZvcm0tYWN0aW9uLWJ1dHRvbnN7cGFkZGluZy10b3A6OHB4fTpob3N0IC5nYXRld2F5LWZvcm0gLmdhdGV3YXktY29uZmlnIC5uby1kYXRhLWZvdW5ke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTp0LkVsZW1lbnRSZWZ9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp0Lk5nWm9uZX0se3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dHlwZTpXaW5kb3csZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOlthZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Zvcm1Db250YWluZXJSZWY6W3t0eXBlOm8sYXJnczpbImZvcm1Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLG11bHRpcGxlSW5wdXRGb3JtOlt7dHlwZTpvLGFyZ3M6WyJnYXRld2F5Q29uZmlndXJhdGlvbkZvcm0iLHtzdGF0aWM6ITB9XX1dLGN0eDpbe3R5cGU6YX1dLGlzU3RhdGVGb3JtOlt7dHlwZTphfV19fSk7Y2xhc3MgdG8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIpe3N1cGVyKGUsdCxhKSx0aGlzLnN0b3JlPWUsdGhpcy5yb3V0ZXI9dCx0aGlzLmRhdGE9bix0aGlzLmRpYWxvZ1JlZj1hLHRoaXMuZmI9byx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1pLHRoaXMucmVzb3VyY2VzU2VydmljZT1yLHRoaXMuY29ubmVjdG9yVHlwZT1fdCx0aGlzLmdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwPUh0LHRoaXMuZ2F0ZXdheUxvZ0xldmVsPU9iamVjdC52YWx1ZXMoTXQpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHt0eXBlOltfdC5NUVRULFtdXSxuYW1lOlsiIixbdWUucmVxdWlyZWQsdGhpcy51bmlxTmFtZVJlcXVpcmVkKCksdWUucGF0dGVybihrdCldXSxsb2dMZXZlbDpbTXQuSU5GTyxbXV0sdXNlRGVmYXVsdHM6WyEwLFtdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITEsW11dLGNsYXNzOlsiIixbXV0sa2V5OlsiYXV0byIsW11dfSl9bmdPbkluaXQoKXt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1oZWxwTGlua0lkKCl7cmV0dXJuIHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZ3VyYXRpb24vIn1jYW5jZWwoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKX1hZGQoKXt0aGlzLnN1Ym1pdHRlZD0hMDtjb25zdCBlPXRoaXMuY29ubmVjdG9yRm9ybS5nZXRSYXdWYWx1ZSgpO2UudXNlRGVmYXVsdHM/dGhpcy5nZXREZWZhdWx0Q29uZmlnKGUudHlwZSkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj10aGlzLmRhdGEuZ2F0ZXdheVZlcnNpb247biYmKGUuY29uZmlnVmVyc2lvbj1uKSxlLmNvbmZpZ3VyYXRpb25Kc29uPSh0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0obik/dFtVdC5DdXJyZW50XTp0W1V0LkxlZ2FjeV0pPz90LHRoaXMuY29ubmVjdG9yRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UoZSl9KSk6dGhpcy5jb25uZWN0b3JGb3JtLnZhbGlkJiZ0aGlzLmRpYWxvZ1JlZi5jbG9zZShlKX11bmlxTmFtZVJlcXVpcmVkKCl7cmV0dXJuIGU9Pntjb25zdCB0PWUudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHRoaXMuZGF0YS5kYXRhU291cmNlRGF0YS5zb21lKCgoe3ZhbHVlOntuYW1lOmV9fSk9PmUudG9Mb3dlckNhc2UoKT09PXQpKT97ZHVwbGljYXRlTmFtZTp7dmFsaWQ6ITF9fTpudWxsfX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgidXNlRGVmYXVsdHMiKTtlPT09X3QuR1JQQ3x8ZT09PV90LkNVU1RPTT90LnNldFZhbHVlKCExKTp0LnZhbHVlfHx0LnNldFZhbHVlKCEwKX0pKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCl9Z2V0RGVmYXVsdENvbmZpZyhlKXtyZXR1cm4gdGhpcy5yZXNvdXJjZXNTZXJ2aWNlLmxvYWRKc29uUmVzb3VyY2UoYC9hc3NldHMvbWV0YWRhdGEvY29ubmVjdG9yLWRlZmF1bHQtY29uZmlncy8ke2V9Lmpzb25gKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp2YX0se3Rva2VuOlguUmVzb3VyY2VzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6dG8sc2VsZWN0b3I6InRiLWFkZC1jb25uZWN0b3ItZGlhbG9nIixwcm92aWRlcnM6W10sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJjb25uZWN0b3JGb3JtIiBjbGFzcz0iYWRkLWNvbm5lY3RvciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7ICJnYXRld2F5LmFkZC1jb25uZWN0b3IiIHwgdHJhbnNsYXRlfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09ImhlbHBMaW5rSWQoKSI+PC9kaXY+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtdG9vbGJhcj5cbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnR5cGU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIHwga2V5dmFsdWUiIFt2YWx1ZV09InR5cGUua2V5Ij5cbiAgICAgICAgICAgICAgICB7eyB0eXBlLnZhbHVlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJ2dhdGV3YXkuY29ubmVjdG9yLWR1cGxpY2F0ZS1uYW1lXCcgOlwnZ2F0ZXdheS5uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWNsYXNzPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNsYXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5HUlBDIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkdSUEMgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkNVU1RPTSJcbiAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIGZpeGVkLXRpdGxlLXdpZHRoIiBmb3JtQ29udHJvbE5hbWU9InVzZURlZmF1bHRzIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5maWxsLWNvbm5lY3Rvci1kZWZhdWx0c1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLk1RVFQiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGEtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIChjbGljayk9ImFkZCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29ubmVjdG9yRm9ybS5pbnZhbGlkIHx8ICFjb25uZWN0b3JGb3JtLmRpcnR5Ij5cbiAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFkZC1jb25uZWN0b3J7bWluLXdpZHRoOjQwMHB4O3dpZHRoOjUwMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpkdC5IZWxwQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGVscF0iLGlucHV0czpbInRiLWhlbHAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cnQuTWF0VG9vbGJhcixzZWxlY3RvcjoibWF0LXRvb2xiYXIiLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQWN0aW9ucyxzZWxlY3RvcjoiW21hdC1kaWFsb2ctYWN0aW9uc10sIG1hdC1kaWFsb2ctYWN0aW9ucywgW21hdERpYWxvZ0FjdGlvbnNdIixpbnB1dHM6WyJhbGlnbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0NvbnRlbnQsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWNvbnRlbnRdLCBtYXQtZGlhbG9nLWNvbnRlbnQsIFttYXREaWFsb2dDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJBZGRDb25uZWN0b3JEaWFsb2dDb21wb25lbnQiLHRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1hZGQtY29ubmVjdG9yLWRpYWxvZyIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9ImFkZC1jb25uZWN0b3IiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyAiZ2F0ZXdheS5hZGQtY29ubmVjdG9yIiB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJoZWxwTGlua0lkKCkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlc01hcCB8IGtleXZhbHVlIiBbdmFsdWVdPSJ0eXBlLmtleSI+XG4gICAgICAgICAgICAgICAge3sgdHlwZS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkubmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9Im9mZiIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDpcJ2dhdGV3YXkubmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS50b3VjaGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLkNVU1RPTSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuR1JQQyIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1rZXk8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5HUlBDICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5DVVNUT00iXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VEZWZhdWx0cyI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmZpbGwtY29ubmVjdG9yLWRlZmF1bHRzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5NUVRUIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc2VuZC1jaGFuZ2UtZGF0YVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbm5lY3RvckZvcm0uaW52YWxpZCB8fCAhY29ubmVjdG9yRm9ybS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5hZGQtY29ubmVjdG9ye21pbi13aWR0aDo0MDBweDt3aWR0aDo1MDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp2YX0se3R5cGU6WC5SZXNvdXJjZXNTZXJ2aWNlfV19KTtjbGFzcyBub3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy52YWx1ZVR5cGVLZXlzPU9iamVjdC52YWx1ZXMoR24pLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLnZhbHVlTGlzdEZvcm1BcnJheT10aGlzLmZiLmFycmF5KFtdKSx0aGlzLnZhbHVlTGlzdEZvcm1BcnJheS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXRyYWNrQnlLZXkoZSx0KXtyZXR1cm4gdH1hZGRLZXkoKXtjb25zdCBlPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0duLlNUUklOR10sc3RyaW5nOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oTHQpXV0sZG91YmxlOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV0sYm9vbGVhbjpbe3ZhbHVlOiExLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UoZSksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChlKX1vYnNlcnZlVHlwZUNoYW5nZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntlLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KCJ0eXBlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSxlLmdldCh0KS5lbmFibGUoe2VtaXRFdmVudDohMX0pfSkpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkubWFya0FzRGlydHkoKX12YWx1ZVRpdGxlKGUpe3JldHVybiBpZShlKT8ib2JqZWN0Ij09dHlwZW9mIGU/SlNPTi5zdHJpbmdpZnkoZSk6ZToiIn1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT17dHlwZTpbdC50eXBlXSxzdHJpbmc6W3t2YWx1ZToiIixkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saW50ZWdlcjpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKEx0KV1dLGRvdWJsZTpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZF1dLGJvb2xlYW46W3t2YWx1ZTohMSxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV19O2VbdC50eXBlXVswXT17dmFsdWU6dC52YWx1ZSxkaXNhYmxlZDohMX07Y29uc3Qgbj10aGlzLmZiLmdyb3VwKGUpO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UobiksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChuKX19dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkudmFsaWQ/bnVsbDp7dmFsdWVMaXN0Rm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUubWFwKCgoe3R5cGU6ZSwuLi50fSk9Pih7dHlwZTplLHZhbHVlOnRbZV19KSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOm5vLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bm8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJUeXBlVmFsdWVQYW5lbENvbXBvbmVudCIsbm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXR5cGUtdmFsdWUtcGFuZWwiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dfSk7Y2xhc3MgYW8gZXh0ZW5kcyBPe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnZhbHVlVHlwZUtleXM9T2JqZWN0LnZhbHVlcyhHbiksdGhpcy52YWx1ZVR5cGVFbnVtPUduLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLnJhd0RhdGE9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5NYXBwaW5nS2V5c1R5cGU9Tm4sdGhpcy5lcnJvclRleHQ9IiJ9bmdPbkluaXQoKXt0aGlzLmtleXNMaXN0Rm9ybUFycmF5PXRoaXMucHJlcGFyZUtleXNGb3JtQXJyYXkodGhpcy5rZXlzKX10cmFja0J5S2V5KGUsdCl7cmV0dXJuIHR9YWRkS2V5KCl7bGV0IGU7aWYoZT10aGlzLmtleXNUeXBlPT09Tm4uUlBDX01FVEhPRFM/dGhpcy5mYi5ncm91cCh7bWV0aG9kOlsiIixbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1tdLFtdXX0pOnRoaXMuZmIuZ3JvdXAoe2tleTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSksdGhpcy5rZXlzVHlwZSE9PU5uLkNVU1RPTSYmdGhpcy5rZXlzVHlwZSE9PU5uLlJQQ19NRVRIT0RTKXtjb25zdCB0PXRoaXMucmF3RGF0YT8icmF3Ijp0aGlzLnZhbHVlVHlwZUtleXNbMF07ZS5hZGRDb250cm9sKCJ0eXBlIix0aGlzLmZiLmNvbnRyb2wodCkpfXRoaXMua2V5c0xpc3RGb3JtQXJyYXkucHVzaChlKX1kZWxldGVLZXkoZSx0KXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMua2V5c0xpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpfWNhbmNlbCgpe3RoaXMucG9wb3Zlcj8uaGlkZSgpfWFwcGx5S2V5c0RhdGEoKXtsZXQgZT10aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlO2lmKHRoaXMua2V5c1R5cGU9PT1Obi5DVVNUT00pe2U9e307Zm9yKGxldCB0IG9mIHRoaXMua2V5c0xpc3RGb3JtQXJyYXkudmFsdWUpZVt0LmtleV09dC52YWx1ZX10aGlzLmtleXNEYXRhQXBwbGllZC5lbWl0KGUpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJih0aGlzLmtleXNUeXBlPT09Tm4uQ1VTVE9NJiYoZT1PYmplY3Qua2V5cyhlKS5tYXAoKHQ9Pih7a2V5OnQsdmFsdWU6ZVt0XSx0eXBlOiIifSkpKSksZS5mb3JFYWNoKChlPT57bGV0IG47aWYodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTKW49dGhpcy5mYi5ncm91cCh7bWV0aG9kOltlLm1ldGhvZCxbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1suLi5lLmFyZ3VtZW50c10sW11dfSk7ZWxzZXtjb25zdHtrZXk6dCx2YWx1ZTphLHR5cGU6b309ZTtuPXRoaXMuZmIuZ3JvdXAoe2tleTpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbYSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0eXBlOltvLFtdXX0pfXQucHVzaChuKX0pKSksdGhpcy5mYi5hcnJheSh0KX12YWx1ZVRpdGxlKGUpe2NvbnN0IHQ9ZS5nZXQodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTPyJtZXRob2QiOiJ2YWx1ZSIpLnZhbHVlO3JldHVybiBpZSh0KT8ib2JqZWN0Ij09dHlwZW9mIHQ/SlNPTi5zdHJpbmdpZnkodCk6dDoiIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6YW8sc2VsZWN0b3I6InRiLW1hcHBpbmctZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e3BhbmVsVGl0bGU6InBhbmVsVGl0bGUiLGFkZEtleVRpdGxlOiJhZGRLZXlUaXRsZSIsZGVsZXRlS2V5VGl0bGU6ImRlbGV0ZUtleVRpdGxlIixub0tleXNUZXh0OiJub0tleXNUZXh0IixrZXlzOiJrZXlzIixrZXlzVHlwZToia2V5c1R5cGUiLHZhbHVlVHlwZUtleXM6InZhbHVlVHlwZUtleXMiLHZhbHVlVHlwZUVudW06InZhbHVlVHlwZUVudW0iLHZhbHVlVHlwZXM6InZhbHVlVHlwZXMiLHJhd0RhdGE6InJhd0RhdGEiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LHByb3ZpZGVyczpbXSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmcta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUtleTsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImtleXNUeXBlICE9PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ2tleVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCctXCcgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgdmFsdWVUaXRsZShrZXlDb250cm9sKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5DVVNUT00gJiYga2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5KU09OUGF0aC1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmtleVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmtleS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rvci1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAgZmlsbC13aWR0aCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG5hbWU9InZhbHVlVHlwZSIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj0iIXJhd0RhdGEiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiIgY2xhc3M9InRiLW1hdC0xOCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lmljb24iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPSIhcmF3RGF0YTsgZWxzZSByYXdUZXh0Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKHZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd09wdGlvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9InZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiIgY2xhc3M9InRiLW1hdC0yMCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3T3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09IlwncmF3XCciPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJrZXlzVHlwZSA9PT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmtleTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ21ldGhvZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleUNvbnRyb2wuZ2V0KFwnYXJndW1lbnRzXCcpLnZhbHVlPy5sZW5ndGggKyBcJylcJ319XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLXR5cGUtdmFsdWUtcGFuZWwgZm9ybUNvbnRyb2xOYW1lPSJhcmd1bWVudHMiPjwvdGItdHlwZS12YWx1ZS1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUtleSgkZXZlbnQsICRpbmRleCkiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJkZWxldGVLZXlUaXRsZSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0iYWRkS2V5KCkiPlxuICAgICAgICB7eyBhZGRLZXlUaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI25vS2V5cz5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWZsZXggY2VudGVyIGFsaWduLWNlbnRlciBrZXktcGFuZWwiPlxuICAgICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IG5vS2V5c1RleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggZmxleC1lbmQiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iYXBwbHlLZXlzRGF0YSgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0ia2V5c0xpc3RGb3JtQXJyYXkuaW52YWxpZCB8fCAha2V5c0xpc3RGb3JtQXJyYXkuZGlydHkiPlxuICAgICAge3sgXCdhY3Rpb24uYXBwbHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWx7d2lkdGg6Nzd2dzttYXgtd2lkdGg6NzAwcHh9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye21heC13aWR0aDoxMXZ3O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC5rZXktcGFuZWx7aGVpZ2h0OjUwMHB4O292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCB0Yi12YWx1ZS1pbnB1dHt3aWR0aDoxMDAlfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlRhLG5hbWU6ImdldEdhdGV3YXlIZWxwTGluayJ9XX0pfX1lKCJNYXBwaW5nRGF0YUtleXNQYW5lbENvbXBvbmVudCIsYW8pLEhlKFtOKCldLGFvLnByb3RvdHlwZSwicmF3RGF0YSIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRhdGEta2V5cy1wYW5lbCIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy1rZXlzLXBhbmVsIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+e3sgcGFuZWxUaXRsZSAgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCArIFwnKVwnfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIGtleS1wYW5lbCIgKm5nSWY9ImtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aDsgZWxzZSBub0tleXMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgICAqbmdGb3I9ImxldCBrZXlDb250cm9sIG9mIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzOyB0cmFja0J5OiB0cmFja0J5S2V5OyBsZXQgJGluZGV4ID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDsiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ia2V5Q29udHJvbCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiIFtleHBhbmRlZF09Imxhc3QiPlxuICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7eyBcJy1cJyB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSAmJiBrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLlJQQ19NRVRIT0RTIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnBsYXRmb3JtLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ2tleVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgbmFtZT0idmFsdWVUeXBlIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPSIhcmF3RGF0YSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIiBjbGFzcz0idGItbWF0LTE4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdJY29uXT0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd1RleHQiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAodmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8fCB2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIXJhd0RhdGE7IGVsc2UgcmF3T3B0aW9uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIiBjbGFzcz0idGItbWF0LTIwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Z0ljb249Int7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8fCB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdPcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iXCdyYXdcJyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuSlNPTlBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS52YWx1ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkua2V5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0ia2V5c1R5cGUgPT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tZXRob2QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdtZXRob2RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hcmd1bWVudHNcJyB8IHRyYW5zbGF0ZSB9fXt7XCcgKFwnICsga2V5Q29udHJvbC5nZXQoXCdhcmd1bWVudHNcJykudmFsdWU/Lmxlbmd0aCArIFwnKVwnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGItdHlwZS12YWx1ZS1wYW5lbCBmb3JtQ29udHJvbE5hbWU9ImFyZ3VtZW50cyI+PC90Yi10eXBlLXZhbHVlLXBhbmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbHt3aWR0aDo3N3Z3O21heC13aWR0aDo3MDBweH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC50aXRsZS1jb250YWluZXJ7bWF4LXdpZHRoOjExdnc7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIHRiLXZhbHVlLWlucHV0e3dpZHRoOjEwMCV9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGItZm9ybS1wYW5lbCAubWF0LW1kYy1pY29uLWJ1dHRvbnt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MTZweDtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9XSxwcm9wRGVjb3JhdG9yczp7cGFuZWxUaXRsZTpbe3R5cGU6YX1dLGFkZEtleVRpdGxlOlt7dHlwZTphfV0sZGVsZXRlS2V5VGl0bGU6W3t0eXBlOmF9XSxub0tleXNUZXh0Olt7dHlwZTphfV0sa2V5czpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVUeXBlS2V5czpbe3R5cGU6YX1dLHZhbHVlVHlwZUVudW06W3t0eXBlOmF9XSx2YWx1ZVR5cGVzOlt7dHlwZTphfV0scmF3RGF0YTpbe3R5cGU6YX1dLHBvcG92ZXI6W3t0eXBlOmF9XSxrZXlzRGF0YUFwcGxpZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBvbyBleHRlbmRzIE97Z2V0IGRldmljZUluZm9UeXBlKCl7cmV0dXJuIHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZX1zZXQgZGV2aWNlSW5mb1R5cGUoZSl7dGhpcy5kZXZpY2VJbmZvVHlwZVZhbHVlIT09ZSYmKHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZT1lKX1jb25zdHJ1Y3RvcihlLHQsbixhKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy50cmFuc2xhdGU9dCx0aGlzLmRpYWxvZz1uLHRoaXMuZmI9YSx0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLnVzZVNvdXJjZT0hMCx0aGlzLnJlcXVpcmVkPSExLHRoaXMuc291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhUbiksdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLm1hcHBpbmdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldXX0pLHRoaXMudXNlU291cmNlJiZ0aGlzLm1hcHBpbmdGb3JtR3JvdXAuYWRkQ29udHJvbCgiZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiLHRoaXMuZmIuY29udHJvbCh0aGlzLnNvdXJjZVR5cGVzWzBdLFtdKSksdGhpcy5kZXZpY2VJbmZvVHlwZT09PWtuLkZVTEwmJih0aGlzLnVzZVNvdXJjZSYmdGhpcy5tYXBwaW5nRm9ybUdyb3VwLmFkZENvbnRyb2woImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIix0aGlzLmZiLmNvbnRyb2wodGhpcy5zb3VyY2VUeXBlc1swXSxbXSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5hZGRDb250cm9sKCJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGhpcy5mYi5jb250cm9sKCIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldKSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe313cml0ZVZhbHVlKGUpe3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnttYXBwaW5nRm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6b28sZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46WS5UcmFuc2xhdGVTZXJ2aWNlfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOnt1c2VTb3VyY2U6InVzZVNvdXJjZSIscmVxdWlyZWQ6InJlcXVpcmVkIixzb3VyY2VUeXBlczoic291cmNlVHlwZXMiLGRldmljZUluZm9UeXBlOiJkZXZpY2VJbmZvVHlwZSJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm9vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCIgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiBbY2xhc3MudGItcmVxdWlyZWRdPSJyZXF1aXJlZCIgdHJhbnNsYXRlPmRldmljZS5kZXZpY2U8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZSBuby1wYWRkaW5nIG5vLWdhcCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1uYW1lLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uZW50aXR5LWZpZWxkPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJ1c2VTb3VyY2UiIGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uc291cmNlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPlxuICAgICAgICBnYXRld2F5LmRldmljZS1pbmZvLmV4cHJlc3Npb25cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtYm9keSBuby1nYXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyB0b3Atc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICBbY2xhc3MuYm90dG9tLXNhbWUtcGFkZGluZ109ImRldmljZUluZm9UeXBlICE9PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLm5hbWU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgcmF3LXZhbHVlLW9wdGlvbiIgKm5nSWY9InVzZVNvdXJjZSI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93LWNlbGwgdGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLWluZm8uZGV2aWNlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyBib3R0b20tc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICAqbmdJZj0iZGV2aWNlSW5mb1R5cGUgPT09IERldmljZUluZm9UeXBlLkZVTEwiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8ucHJvZmlsZS1uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1wcm9maWxlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwncHJvZmlsZS1uYW1lXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2VcJykudmFsdWUgOiBzb3VyY2VUeXBlcyJcbiAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja306aG9zdCAudGItZm9ybS1yb3cuYm90dG9tLXNhbWUtcGFkZGluZ3twYWRkaW5nLWJvdHRvbToxNnB4fTpob3N0IC50Yi1mb3JtLXJvdy50b3Atc2FtZS1wYWRkaW5ne3BhZGRpbmctdG9wOjE2cHh9Omhvc3QgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHt3aWR0aDoxOSV9Omhvc3QgLnRhYmxlLWNvbHVtbnt3aWR0aDo0MCV9Omhvc3QgLnRhYmxlLW5hbWUtY29sdW1ue3dpZHRoOjIwJX06aG9zdCAucmF3LW5hbWV7d2lkdGg6MTklfTpob3N0IC5yYXctdmFsdWUtb3B0aW9ue21heC13aWR0aDo0MCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7ZGlzcGxheTpmbGV4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpndC5IZWxwUG9wdXBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwLXBvcHVwXSwgW3RiLWhlbHAtcG9wdXAtY29udGVudF0iLGlucHV0czpbInRiLWhlbHAtcG9wdXAiLCJ0Yi1oZWxwLXBvcHVwLWNvbnRlbnQiLCJ0cmlnZ2VyLXRleHQiLCJ0cmlnZ2VyLXN0eWxlIiwidGItaGVscC1wb3B1cC1wbGFjZW1lbnQiLCJ0Yi1oZWxwLXBvcHVwLXN0eWxlIiwiaGludE1vZGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIkRldmljZUluZm9UYWJsZUNvbXBvbmVudCIsb28pLEhlKFtOKCldLG9vLnByb3RvdHlwZSwidXNlU291cmNlIix2b2lkIDApLEhlKFtOKCldLG9vLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpvbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZGV2aWNlLWluZm8tdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+b28pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgW2NsYXNzLnRiLXJlcXVpcmVkXT0icmVxdWlyZWQiIHRyYW5zbGF0ZT5kZXZpY2UuZGV2aWNlPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUgbm8tcGFkZGluZyBuby1nYXAiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyLWNlbGwgdGFibGUtbmFtZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmVudGl0eS1maWVsZDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0idXNlU291cmNlIiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnNvdXJjZTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5cbiAgICAgICAgZ2F0ZXdheS5kZXZpY2UtaW5mby5leHByZXNzaW9uXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWJvZHkgbm8tZ2FwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgdG9wLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgW2NsYXNzLmJvdHRvbS1zYW1lLXBhZGRpbmddPSJkZXZpY2VJbmZvVHlwZSAhPT0gRGV2aWNlSW5mb1R5cGUuRlVMTCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgYm90dG9tLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgKm5nSWY9ImRldmljZUluZm9UeXBlID09PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnByb2ZpbGUtbmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCByYXctdmFsdWUtb3B0aW9uIiAqbmdJZj0idXNlU291cmNlIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3ctY2VsbCB0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdwcm9maWxlLW5hbWVcJyB8IGdldEdhdGV3YXlIZWxwTGluazogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLWZvcm0tcm93LmJvdHRvbS1zYW1lLXBhZGRpbmd7cGFkZGluZy1ib3R0b206MTZweH06aG9zdCAudGItZm9ybS1yb3cudG9wLXNhbWUtcGFkZGluZ3twYWRkaW5nLXRvcDoxNnB4fTpob3N0IC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7d2lkdGg6MTklfTpob3N0IC50YWJsZS1jb2x1bW57d2lkdGg6NDAlfTpob3N0IC50YWJsZS1uYW1lLWNvbHVtbnt3aWR0aDoyMCV9Omhvc3QgLnJhdy1uYW1le3dpZHRoOjE5JX06aG9zdCAucmF3LXZhbHVlLW9wdGlvbnttYXgtd2lkdGg6NDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7dXNlU291cmNlOlt7dHlwZTphfV0scmVxdWlyZWQ6W3t0eXBlOmF9XSxzb3VyY2VUeXBlczpbe3R5cGU6YX1dLGRldmljZUluZm9UeXBlOlt7dHlwZTphfV19fSk7Y2xhc3MgaW8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIscyxsKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5wb3BvdmVyU2VydmljZT1pLHRoaXMucmVuZGVyZXI9cix0aGlzLnZpZXdDb250YWluZXJSZWY9cyx0aGlzLnRyYW5zbGF0ZT1sLHRoaXMuTWFwcGluZ1R5cGU9Zm4sdGhpcy5xdWFsaXR5VHlwZXM9eG4sdGhpcy5RdWFsaXR5VHJhbnNsYXRpb25zTWFwPXZuLHRoaXMuY29udmVydG9yVHlwZXM9T2JqZWN0LnZhbHVlcyh3biksdGhpcy5Db252ZXJ0b3JUeXBlRW51bT13bix0aGlzLkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXA9Q24sdGhpcy5zb3VyY2VUeXBlcz1PYmplY3QudmFsdWVzKFRuKSx0aGlzLk9QQ1VhU291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhTbiksdGhpcy5PUENVYVNvdXJjZVR5cGVzRW51bT1Tbix0aGlzLnNvdXJjZVR5cGVzRW51bT1Ubix0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5yZXF1ZXN0VHlwZXM9T2JqZWN0LnZhbHVlcyhJbiksdGhpcy5SZXF1ZXN0VHlwZUVudW09SW4sdGhpcy5SZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXA9QW4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLlNlcnZlclNpZGVSUENUeXBlPVBuLHRoaXMuTWFwcGluZ0tleXNUeXBlPU5uLHRoaXMuTWFwcGluZ0hpbnRUcmFuc2xhdGlvbnNNYXA9Ym4sdGhpcy5NYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwPUJuLHRoaXMuSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwPWhuLHRoaXMua2V5c1BvcHVwQ2xvc2VkPSEwLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY3JlYXRlTWFwcGluZ0Zvcm0oKX1nZXQgY29udmVydGVyQXR0cmlidXRlcygpe2lmKHRoaXMuY29udmVydGVyVHlwZSlyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCh0aGlzLmNvbnZlcnRlclR5cGUpLnZhbHVlLmF0dHJpYnV0ZXMubWFwKChlPT5lLmtleSkpfWdldCBjb252ZXJ0ZXJUZWxlbWV0cnkoKXtpZih0aGlzLmNvbnZlcnRlclR5cGUpcmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKS52YWx1ZS50aW1lc2VyaWVzLm1hcCgoZT0+ZS5rZXkpKX1nZXQgb3BjQXR0cmlidXRlcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiYXR0cmlidXRlcyIpLnZhbHVlPy5tYXAoKGU9PmUua2V5KSl8fFtdfWdldCBvcGNUZWxlbWV0cnkoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoInRpbWVzZXJpZXMiKS52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgb3BjUnBjTWV0aG9kcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgicnBjX21ldGhvZHMiKS52YWx1ZT8ubWFwKChlPT5lLm1ldGhvZCkpfHxbXX1nZXQgb3BjQXR0cmlidXRlc1VwZGF0ZXMoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImF0dHJpYnV0ZXNfdXBkYXRlcyIpPy52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgY29udmVydGVyVHlwZSgpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyIikuZ2V0KCJ0eXBlIikudmFsdWV9Z2V0IGN1c3RvbUtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCgiY3VzdG9tIikudmFsdWUuZXh0ZW5zaW9uQ29uZmlnKX1nZXQgcmVxdWVzdE1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VHlwZSIpLnZhbHVlfWdldCByZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXQiKTtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtbGltaXRzLWVycm9yIix7bWluOjF9KToiIn1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWNyZWF0ZU1hcHBpbmdGb3JtKCl7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVEYXRhTWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVSZXF1ZXN0TWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMuY3JlYXRlT1BDVUFNYXBwaW5nRm9ybSgpfX1jYW5jZWwoKXt0aGlzLmtleXNQb3B1cENsb3NlZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5tYXBwaW5nRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5wcmVwYXJlTWFwcGluZ0RhdGEoKSl9bWFuYWdlS2V5cyhlLHQsbil7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBhPXQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZih0aGlzLnBvcG92ZXJTZXJ2aWNlLmhhc1BvcG92ZXIoYSkpdGhpcy5wb3BvdmVyU2VydmljZS5oaWRlUG9wb3ZlcihhKTtlbHNle2NvbnN0IGU9KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSE9PWZuLk9QQ1VBP3RoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKTp0aGlzLm1hcHBpbmdGb3JtKS5nZXQobiksdD17a2V5czplLnZhbHVlLGtleXNUeXBlOm4scmF3RGF0YTp0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKT8udmFsdWU9PT13bi5CWVRFUyxwYW5lbFRpdGxlOk1uLmdldChuKSxhZGRLZXlUaXRsZTpFbi5nZXQobiksZGVsZXRlS2V5VGl0bGU6cW4uZ2V0KG4pLG5vS2V5c1RleHQ6RG4uZ2V0KG4pfTt0aGlzLmRhdGEubWFwcGluZ1R5cGU9PT1mbi5PUENVQSYmKHQudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKFNuKSx0LnZhbHVlVHlwZUVudW09U24sdC52YWx1ZVR5cGVzPUxuKSx0aGlzLmtleXNQb3B1cENsb3NlZD0hMTtjb25zdCBvPXRoaXMucG9wb3ZlclNlcnZpY2UuZGlzcGxheVBvcG92ZXIoYSx0aGlzLnJlbmRlcmVyLHRoaXMudmlld0NvbnRhaW5lclJlZixhbywibGVmdEJvdHRvbSIsITEsbnVsbCx0LHt9LHt9LHt9LCEwKTtvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLnBvcG92ZXI9byxvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLmtleXNEYXRhQXBwbGllZC5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntvLmhpZGUoKSxlLnBhdGNoVmFsdWUodCksZS5tYXJrQXNEaXJ0eSgpfSkpLG8udGJIaWRlU3RhcnQucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMua2V5c1BvcHVwQ2xvc2VkPSEwfSkpfX1wcmVwYXJlTWFwcGluZ0RhdGEoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0udmFsdWU7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjp0LHRvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmF9PWU7cmV0dXJue3RvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmEsY29udmVydGVyOnt0eXBlOnQudHlwZSwuLi50W3QudHlwZV19fTtjYXNlIGZuLlJFUVVFU1RTOnJldHVybntyZXF1ZXN0VHlwZTplLnJlcXVlc3RUeXBlLHJlcXVlc3RWYWx1ZTplLnJlcXVlc3RWYWx1ZVtlLnJlcXVlc3RUeXBlXX07ZGVmYXVsdDpyZXR1cm4gZX19Z2V0Rm9ybVZhbHVlRGF0YSgpe2lmKHRoaXMuZGF0YS52YWx1ZSYmT2JqZWN0LmtleXModGhpcy5kYXRhLnZhbHVlKS5sZW5ndGgpc3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjplLHRvcGljRmlsdGVyOnQsc3Vic2NyaXB0aW9uUW9zOm59PXRoaXMuZGF0YS52YWx1ZTtyZXR1cm57dG9waWNGaWx0ZXI6dCxzdWJzY3JpcHRpb25Rb3M6bixjb252ZXJ0ZXI6e3R5cGU6ZS50eXBlLFtlLnR5cGVdOnsuLi5lfX19O2Nhc2UgZm4uUkVRVUVTVFM6cmV0dXJue3JlcXVlc3RUeXBlOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VHlwZSxyZXF1ZXN0VmFsdWU6e1t0aGlzLmRhdGEudmFsdWUucmVxdWVzdFR5cGVdOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VmFsdWV9fTtkZWZhdWx0OnJldHVybiB0aGlzLmRhdGEudmFsdWV9fWNyZWF0ZURhdGFNYXBwaW5nRm9ybSgpe3RoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgidG9waWNGaWx0ZXIiLHRoaXMuZmIuY29udHJvbCgiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJzdWJzY3JpcHRpb25Rb3MiLHRoaXMuZmIuY29udHJvbCgwKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJjb252ZXJ0ZXIiLHRoaXMuZmIuZ3JvdXAoe3R5cGU6W3duLkpTT04sW11dLGpzb246dGhpcy5mYi5ncm91cCh7ZGV2aWNlSW5mbzpbe30sW11dLGF0dHJpYnV0ZXM6W1tdLFtdXSx0aW1lc2VyaWVzOltbXSxbXV19KSxieXRlczp0aGlzLmZiLmdyb3VwKHtkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXX0pLGN1c3RvbTp0aGlzLmZiLmdyb3VwKHtleHRlbnNpb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGV4dGVuc2lvbkNvbmZpZzpbe30sW11dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShSZSh0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpO3QuZ2V0KCJqc29uIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImJ5dGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImN1c3RvbSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KGUpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9Y3JlYXRlUmVxdWVzdE1hcHBpbmdGb3JtKCl7dGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJyZXF1ZXN0VHlwZSIsdGhpcy5mYi5jb250cm9sKEluLkNPTk5FQ1RfUkVRVUVTVCxbXSkpLHRoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgicmVxdWVzdFZhbHVlIix0aGlzLmZiLmdyb3VwKHtjb25uZWN0UmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86W3t9LFtdXX0pLGRpc2Nvbm5lY3RSZXF1ZXN0czp0aGlzLmZiLmdyb3VwKHt0b3BpY0ZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlSW5mbzpbe30sW11dfSksYXR0cmlidXRlUmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZF1dfSksYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sYXR0cmlidXRlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWVFeHByZXNzaW9uOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXRhaW46WyExLFtdXX0pLGF0dHJpYnV0ZVVwZGF0ZXM6dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXR0cmlidXRlRmlsdGVyOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0b3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmV0YWluOlshMCxbXV19KSxzZXJ2ZXJTaWRlUnBjOnRoaXMuZmIuZ3JvdXAoe3R5cGU6W1BuLlRXT19XQVksW11dLGRldmljZU5hbWVGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZEZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY1FvUzpbMCxbXV0scmVzcG9uc2VUaW1lb3V0OlsxZTQsW3VlLnJlcXVpcmVkLHVlLm1pbigxKV1dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoUmUodGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWUpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUiKTt0LmdldCgiY29ubmVjdFJlcXVlc3RzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImRpc2Nvbm5lY3RSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVVcGRhdGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInNlcnZlclNpZGVScGMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldChlKS5lbmFibGUoKX0pKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgicmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYyIpO2U9PT1Qbi5PTkVfV0FZPyh0LmdldCgicmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgicmVzcG9uc2VUb3BpY1FvUyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSk6KHQuZ2V0KCJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInJlc3BvbnNlVG9waWNRb1MiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKX0pKSx0aGlzLm1hcHBpbmdGb3JtLnBhdGNoVmFsdWUodGhpcy5nZXRGb3JtVmFsdWVEYXRhKCkpfWNyZWF0ZU9QQ1VBTWFwcGluZ0Zvcm0oKXt0aGlzLm1hcHBpbmdGb3JtPXRoaXMuZmIuZ3JvdXAoe2RldmljZU5vZGVTb3VyY2U6W1NuLlBBVEgsW11dLGRldmljZU5vZGVQYXR0ZXJuOlsiIixbdWUucmVxdWlyZWRdXSxkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXSxycGNfbWV0aG9kczpbW10sW11dLGF0dHJpYnV0ZXNfdXBkYXRlczpbW10sW11dfSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmlvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmlvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRpYWxvZyIsdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtIiBjbGFzcz0ia2V5LW1hcHBpbmciPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBNYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0iSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwLmdldCh0aGlzLmRhdGEubWFwcGluZ1R5cGUpIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPlxuICAgICAgICB7eyBNYXBwaW5nSGludFRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJkYXRhLm1hcHBpbmdUeXBlIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5EQVRBIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50b3BpYy1maWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZDsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS90b3BpYy1maWx0ZXJfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1Rb3MtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1xdHQtcW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3Vic2NyaXB0aW9uUW9zIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcXVhbGl0eVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9ImNvbnZlcnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGF5bG9hZC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBjb252ZXJ0b3JUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyBDb252ZXJ0b3JUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5kYXRhLWNvbnZlcnNpb248L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgICAgICAgICAge3sgRGF0YUNvbnZlcnNpb25UcmFuc2xhdGlvbnNNYXAuZ2V0KGNvbnZlcnRlclR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iY29udmVydGVyVHlwZSIgW25nU3dpdGNoXT0iY29udmVydGVyVHlwZSI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb252ZXJ0b3JUeXBlRW51bS5KU09OIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkJZVEVTIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvdXJjZVR5cGVzXT0iW3NvdXJjZVR5cGVzRW51bS5NU0csIHNvdXJjZVR5cGVzRW51bS5DT05TVF0iIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkJZVEVTIHx8IGNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJjb252ZXJ0ZXJBdHRyaWJ1dGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2YgY29udmVydGVyQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHRlbGVtZXRyeUJ1dHRvbiwgTWFwcGluZ0tleXNUeXBlLlRJTUVTRVJJRVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmV4dGVuc2lvbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5leHRlbnNpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZXh0ZW5zaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmV4dGVuc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwnY29udmVydGVyLmN1c3RvbS5leHRlbnNpb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5rZXlzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImN1c3RvbUtleXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBjdXN0b21LZXlzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAja2V5c0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwga2V5c0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkNVU1RPTSkiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdHlwZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcXVlc3RUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgUmVxdWVzdFR5cGVzVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0icmVxdWVzdFZhbHVlIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpIiBbbmdTd2l0Y2hdPSJyZXF1ZXN0TWFwcGluZ1R5cGUiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0icmVxdWVzdE1hcHBpbmdUeXBlID09PSBSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5ESVNDT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgW2Zvcm1Db250cm9sXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS50b3BpYy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5QQVJUSUFMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZnJvbS1kZXZpY2UtcmVxdWVzdC1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnRcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiIGZvcm1Hcm91cE5hbWU9ImRldmljZUluZm8iPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMuYXR0cmlidXRlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUgdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS50by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJldGFpbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkFUVFJJQlVURV9VUERBVEUiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmRldmljZU5hbWVGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuYXR0cmlidXRlLWZpbHRlci1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZUZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5hdHRyaWJ1dGVGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0icmV0YWluIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5TRVJWRVJfU0lERV9SUEMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgY2VudGVyIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuVFdPX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IlNlcnZlclNpZGVSUENUeXBlLk9ORV9XQVkiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LndpdGhvdXQtcmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tZXRob2QtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLm1ldGhvZEZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy50eXBlXCcpLnZhbHVlID09PSBTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljUW9TIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFF1YWxpdHlUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVGltZW91dCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0icmVzcG9uc2VUaW1lb3V0RXJyb3JUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iTWFwcGluZ1R5cGUuT1BDVUEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBkZXZpY2UtY29uZmlnIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVTb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBbT1BDVWFTb3VyY2VUeXBlc0VudW0uUEFUSCwgT1BDVWFTb3VyY2VUeXBlc0VudW0uSURFTlRJRklFUl0iIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBkZXZpY2Utbm9kZS1wYXR0ZXJuLWZpZWxkIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOb2RlUGF0dGVybiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVQYXR0ZXJuXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdkZXZpY2Utbm9kZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlU291cmNlXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbc291cmNlVHlwZXNdPSJPUENVYVNvdXJjZVR5cGVzIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY0F0dHJpYnV0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNBdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIG9wY0F0dHJpYnV0ZXNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5BVFRSSUJVVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudGltZXNlcmllczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBvcGNUZWxlbWV0cnkiPlxuICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNUZWxlbWV0cnlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjVGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNBdHRyaWJ1dGVzVXBkYXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlc1VwZGF0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVNfVVBEQVRFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy1tZXRob2RzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNScGNNZXRob2RzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNScGNNZXRob2RzIj5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dHJpYnV0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAjcnBjTWV0aG9kc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBycGNNZXRob2RzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJtYXBwaW5nRm9ybS5pbnZhbGlkIHx8ICFtYXBwaW5nRm9ybS5kaXJ0eSB8fCAha2V5c1BvcHVwQ2xvc2VkIj5cbiAgICAgIHt7IHRoaXMuZGF0YS5idXR0b25UaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJX06aG9zdCAua2V5LW1hcHBpbmd7bWF4LXdpZHRoOjkwMHB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLmtleS1tYXBwaW5nIC5tYXQtdG9vbGJhcnttaW4taGVpZ2h0OjY0cHh9Omhvc3QgLmtleS1tYXBwaW5nIHRiLXRvZ2dsZS1zZWxlY3R7cGFkZGluZzo0cHggMH06aG9zdCAubWF0LW1kYy1kaWFsb2ctY29udGVudHtoZWlnaHQ6NjcwcHh9Omhvc3QgLmVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lcnttYXgtd2lkdGg6NzAlfTpob3N0IDo6bmctZGVlcCAua2V5LW1hcHBpbmcgLm1hdC1tZGMtY2hpcC1saXN0Ym94IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDpub3dyYXB9Omhvc3QgOjpuZy1kZWVwIC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjQwcHg7d2lkdGg6MzUlO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5tYXQtbWRjLWZvcm0tZmllbGR7d2lkdGg6MH06aG9zdCA6Om5nLWRlZXAgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9Omhvc3QgOjpuZy1kZWVwIC5kZXZpY2UtY29uZmlne2dhcDoxMnB4O3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1ub2RlLXBhdHRlcm4tZmllbGR7ZmxleC1iYXNpczozJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcCxzZWxlY3RvcjoibWF0LWJhc2ljLWNoaXAsIFttYXQtYmFzaWMtY2hpcF0sIG1hdC1jaGlwLCBbbWF0LWNoaXBdIixpbnB1dHM6WyJyb2xlIiwiaWQiLCJhcmlhLWxhYmVsIiwiYXJpYS1kZXNjcmlwdGlvbiIsInZhbHVlIiwiY29sb3IiLCJyZW1vdmFibGUiLCJoaWdobGlnaHRlZCIsImRpc2FibGVSaXBwbGUiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJyZW1vdmVkIiwiZGVzdHJveWVkIl0sZXhwb3J0QXM6WyJtYXRDaGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcExpc3Rib3gsc2VsZWN0b3I6Im1hdC1jaGlwLWxpc3Rib3giLGlucHV0czpbIm11bHRpcGxlIiwiYXJpYS1vcmllbnRhdGlvbiIsInNlbGVjdGFibGUiLCJjb21wYXJlV2l0aCIsInJlcXVpcmVkIiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInZhbHVlIl0sb3V0cHV0czpbImNoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTprYSxzZWxlY3RvcjoiW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF0iLGlucHV0czpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOlsidXNlU291cmNlIiwicmVxdWlyZWQiLCJzb3VyY2VUeXBlcyIsImRldmljZUluZm9UeXBlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV19KX19ZSgiTWFwcGluZ0RpYWxvZ0NvbXBvbmVudCIsaW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6aW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1hcHBpbmctZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPGRpdiBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0iIGNsYXNzPSJrZXktbWFwcGluZyI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IE1hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAuZ2V0KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgIHt7IE1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImRhdGEubWFwcGluZ1R5cGUiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLkRBVEEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0ZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudG9waWMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3NcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdWJzY3JpcHRpb25Rb3MiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBRdWFsaXR5VHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0iY29udmVydGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXlsb2FkLXR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGNvbnZlcnRvclR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgIHt7IENvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmRhdGEtY29udmVyc2lvbjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj5cbiAgICAgICAgICAgICAgICB7eyBEYXRhQ29udmVyc2lvblRyYW5zbGF0aW9uc01hcC5nZXQoY29udmVydGVyVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cE5hbWVdPSJjb252ZXJ0ZXJUeXBlIiBbbmdTd2l0Y2hdPSJjb252ZXJ0ZXJUeXBlIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29udmVydG9yVHlwZUVudW0uQllURVMiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc291cmNlVHlwZXNdPSJbc291cmNlVHlwZXNFbnVtLk1TRywgc291cmNlVHlwZXNFbnVtLkNPTlNUXSIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQllURVMgfHwgY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uSlNPTiI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlckF0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBjb252ZXJ0ZXJBdHRyaWJ1dGVzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnRpbWVzZXJpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGVsZW1ldHJ5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJjb252ZXJ0ZXJUeXBlID09PSBDb252ZXJ0b3JUeXBlRW51bS5DVVNUT00iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmV4dGVuc2lvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJleHRlbnNpb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZXh0ZW5zaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2NvbnZlcnRlci5jdXN0b20uZXh0ZW5zaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiBzYW1lLXBhZGRpbmcgdGItZmxleCBjb2x1bW4iPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5leHRlbnNpb24tY29uZmlndXJhdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj57eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24taGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmtleXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY3VzdG9tS2V5cyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGN1c3RvbUtleXMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNrZXlzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBrZXlzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVxdWVzdC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcmVxdWVzdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBSZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJyZXF1ZXN0VmFsdWUiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkiIFtuZ1N3aXRjaF09InJlcXVlc3RNYXBwaW5nVHlwZSI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJyZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG9waWMtZmlsdGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBbZm9ybUNvbnRyb2xdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvdG9waWMtZmlsdGVyX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uRElTQ09OTkVDVF9SRVFVRVNUIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLlBBUlRJQUwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LmZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciIgZm9ybUdyb3VwTmFtZT0iZGV2aWNlSW5mbyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5ncy1oaW50XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldGFpbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1VQREFURSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuYXR0cmlidXRlRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXRhaW4taGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLlNFUlZFUl9TSURFX1JQQyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBjZW50ZXIgYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS53aXRoLXJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuT05FX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aG91dC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWV0aG9kLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5tZXRob2RGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnR5cGVcJykudmFsdWUgPT09IFNlcnZlclNpZGVSUENUeXBlLlRXT19XQVkiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVG9waWNRb1MiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHF1YWxpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJyZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUaW1lb3V0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5PUENVQSI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGRldmljZS1jb25maWciPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTm9kZVNvdXJjZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIFtPUENVYVNvdXJjZVR5cGVzRW51bS5QQVRILCBPUENVYVNvdXJjZVR5cGVzRW51bS5JREVOVElGSUVSXSIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGRldmljZS1ub2RlLXBhdHRlcm4tZmllbGQiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVQYXR0ZXJuIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlUGF0dGVyblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ2RldmljZS1ub2RlXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVTb3VyY2VcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtzb3VyY2VUeXBlc109Ik9QQ1VhU291cmNlVHlwZXMiIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjQXR0cmlidXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY0F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjQXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIG9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY1RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBvcGNUZWxlbWV0cnlCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5USU1FU0VSSUVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlLXVwZGF0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXNVcGRhdGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNBdHRyaWJ1dGVzVXBkYXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIGF0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFU19VUERBVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLW1ldGhvZHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1JwY01ldGhvZHMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY1JwY01ldGhvZHMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNycGNNZXRob2RzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY01ldGhvZHNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09Im1hcHBpbmdGb3JtLmludmFsaWQgfHwgIW1hcHBpbmdGb3JtLmRpcnR5IHx8ICFrZXlzUG9wdXBDbG9zZWQiPlxuICAgICAge3sgdGhpcy5kYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpncmlkO2hlaWdodDoxMDAlfTpob3N0IC5rZXktbWFwcGluZ3ttYXgtd2lkdGg6OTAwcHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAua2V5LW1hcHBpbmcgLm1hdC10b29sYmFye21pbi1oZWlnaHQ6NjRweH06aG9zdCAua2V5LW1hcHBpbmcgdGItdG9nZ2xlLXNlbGVjdHtwYWRkaW5nOjRweCAwfTpob3N0IC5tYXQtbWRjLWRpYWxvZy1jb250ZW50e2hlaWdodDo2NzBweH06aG9zdCAuZWxsaXBzaXMtY2hpcHMtY29udGFpbmVye21heC13aWR0aDo3MCV9Omhvc3QgOjpuZy1kZWVwIC5rZXktbWFwcGluZyAubWF0LW1kYy1jaGlwLWxpc3Rib3ggLm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBze2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOm5vd3JhcH06aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6NDBweDt3aWR0aDozNSU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAudGItZm9ybS1yb3cgLm1hdC1tZGMtZm9ybS1maWVsZHt3aWR0aDowfTpob3N0IDo6bmctZGVlcCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1jb25maWd7Z2FwOjEycHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fTpob3N0IDo6bmctZGVlcCAuZGV2aWNlLW5vZGUtcGF0dGVybi1maWVsZHtmbGV4LWJhc2lzOjMlfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSk7Y2xhc3Mgcm97c2V0IG1hcHBpbmdUeXBlKGUpe3RoaXMubWFwcGluZ1R5cGVWYWx1ZSE9PWUmJih0aGlzLm1hcHBpbmdUeXBlVmFsdWU9ZSl9Z2V0IG1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ1R5cGVWYWx1ZX1jb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLnRyYW5zbGF0ZT1lLHRoaXMuZGlhbG9nPXQsdGhpcy5kaWFsb2dTZXJ2aWNlPW4sdGhpcy5mYj1hLHRoaXMucmVxdWlyZWQ9ITEsdGhpcy5tYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLm1hcHBpbmdUeXBlRW51bT1mbix0aGlzLmRpc3BsYXllZENvbHVtbnM9W10sdGhpcy5tYXBwaW5nQ29sdW1ucz1bXSx0aGlzLnRleHRTZWFyY2hNb2RlPSExLHRoaXMuaGlkZVBhZ2VTaXplPSExLHRoaXMuYWN0aXZlVmFsdWU9ITEsdGhpcy5kaXJ0eVZhbHVlPSExLHRoaXMudGV4dFNlYXJjaD10aGlzLmZiLmNvbnRyb2woIiIse25vbk51bGxhYmxlOiEwfSksdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFwcGluZ0Zvcm1Hcm91cD10aGlzLmZiLmFycmF5KFtdKSx0aGlzLmRpcnR5VmFsdWU9IXRoaXMuYWN0aXZlVmFsdWUsdGhpcy5kYXRhU291cmNlPW5ldyBzb31uZ09uSW5pdCgpe3RoaXMuc2V0TWFwcGluZ0NvbHVtbnMoKSx0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCguLi50aGlzLm1hcHBpbmdDb2x1bW5zLm1hcCgoZT0+ZS5kZWYpKSwiYWN0aW9ucyIpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVUYWJsZURhdGEoZSksdGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGV4dFNlYXJjaC52YWx1ZUNoYW5nZXMucGlwZShWZSgxNTApLEJlKCgoZSx0KT0+KGU/PyIiKT09PXQudHJpbSgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9ZS50cmltKCk7dGhpcy51cGRhdGVUYWJsZURhdGEodGhpcy5tYXBwaW5nRm9ybUdyb3VwLnZhbHVlLHQudHJpbSgpKX0pKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5tYXBwaW5nRm9ybUdyb3VwLmNsZWFyKCksdGhpcy5wdXNoRGF0YUFzRm9ybUFycmF5cyhlKX12YWxpZGF0ZSgpe3JldHVybiF0aGlzLnJlcXVpcmVkfHx0aGlzLm1hcHBpbmdGb3JtR3JvdXAuY29udHJvbHMubGVuZ3RoP251bGw6e21hcHBpbmdGb3JtR3JvdXA6e3ZhbGlkOiExfX19ZW50ZXJGaWx0ZXJNb2RlKCl7dGhpcy50ZXh0U2VhcmNoTW9kZT0hMCxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5zZWFyY2hJbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKX0pLDEwKX1leGl0RmlsdGVyTW9kZSgpe3RoaXMudXBkYXRlVGFibGVEYXRhKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VNYXBwaW5nKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPWllKHQpP3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5hdCh0KS52YWx1ZTp7fTt0aGlzLmRpYWxvZy5vcGVuKGlvLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7bWFwcGluZ1R5cGU6dGhpcy5tYXBwaW5nVHlwZSx2YWx1ZTpuLGJ1dHRvblRpdGxlOnJlKHQpPyJhY3Rpb24uYWRkIjoiYWN0aW9uLmFwcGx5In19KS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihpZSh0KT90aGlzLm1hcHBpbmdGb3JtR3JvdXAuYXQodCkucGF0Y2hWYWx1ZShlKTp0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKFtlXSksdGhpcy5tYXBwaW5nRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfXVwZGF0ZVRhYmxlRGF0YShlLHQpe2xldCBuPWUubWFwKChlPT50aGlzLmdldE1hcHBpbmdWYWx1ZShlKSkpO3QmJihuPW4uZmlsdGVyKChlPT5PYmplY3QudmFsdWVzKGUpLnNvbWUoKGU9PmUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSkpKSkpKSx0aGlzLmRhdGFTb3VyY2UubG9hZERhdGEobil9ZGVsZXRlTWFwcGluZyhlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtbWFwcGluZy10aXRsZSIpLCIiLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi5ubyIpLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi55ZXMiKSwhMCkuc3Vic2NyaWJlKChlPT57ZSYmKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5yZW1vdmVBdCh0KSx0aGlzLm1hcHBpbmdGb3JtR3JvdXAubWFya0FzRGlydHkoKSl9KSl9cHVzaERhdGFBc0Zvcm1BcnJheXMoZSl7ZT8ubGVuZ3RoJiZlLmZvckVhY2goKGU9PnRoaXMubWFwcGluZ0Zvcm1Hcm91cC5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1nZXRNYXBwaW5nVmFsdWUoZSl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTpjb25zdCB0PUNuLmdldChlLmNvbnZlcnRlcj8udHlwZSk7cmV0dXJue3RvcGljRmlsdGVyOmUudG9waWNGaWx0ZXIsUW9TOmUuc3Vic2NyaXB0aW9uUW9zLGNvbnZlcnRlcjp0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQodCk6IiJ9O2Nhc2UgZm4uUkVRVUVTVFM6bGV0IG47Y29uc3QgYT1lO3JldHVybiBuPWEucmVxdWVzdFR5cGU9PT1Jbi5BVFRSSUJVVEVfVVBEQVRFP2EucmVxdWVzdFZhbHVlLmF0dHJpYnV0ZUZpbHRlcjphLnJlcXVlc3RUeXBlPT09SW4uU0VSVkVSX1NJREVfUlBDP2EucmVxdWVzdFZhbHVlLm1ldGhvZEZpbHRlcjphLnJlcXVlc3RWYWx1ZS50b3BpY0ZpbHRlcix7cmVxdWVzdFR5cGU6ZS5yZXF1ZXN0VHlwZSx0eXBlOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoQW4uZ2V0KGUucmVxdWVzdFR5cGUpKSxkZXRhaWxzOm59O2Nhc2UgZm4uT1BDVUE6Y29uc3Qgbz1lLmRldmljZUluZm8/LmRldmljZU5hbWVFeHByZXNzaW9uLGk9ZS5kZXZpY2VJbmZvPy5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbix7ZGV2aWNlTm9kZVBhdHRlcm46cn09ZTtyZXR1cm57ZGV2aWNlTm9kZVBhdHRlcm46cixkZXZpY2VOYW1lUGF0dGVybjpvLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOml9O2RlZmF1bHQ6cmV0dXJue319fXNldE1hcHBpbmdDb2x1bW5zKCl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTp0aGlzLm1hcHBpbmdDb2x1bW5zLnB1c2goe2RlZjoidG9waWNGaWx0ZXIiLHRpdGxlOiJnYXRld2F5LnRvcGljLWZpbHRlciJ9LHtkZWY6IlFvUyIsdGl0bGU6ImdhdGV3YXkubXF0dC1xb3MifSx7ZGVmOiJjb252ZXJ0ZXIiLHRpdGxlOiJnYXRld2F5LnBheWxvYWQtdHlwZSJ9KTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJ0eXBlIix0aXRsZToiZ2F0ZXdheS50eXBlIn0se2RlZjoiZGV0YWlscyIsdGl0bGU6ImdhdGV3YXkuZGV0YWlscyJ9KTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJkZXZpY2VOb2RlUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5vZGUifSx7ZGVmOiJkZXZpY2VOYW1lUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5hbWUifSx7ZGVmOiJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLXByb2ZpbGUifSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cm8sZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpybyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIixtYXBwaW5nVHlwZToibWFwcGluZ1R5cGUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cm8pKSxtdWx0aTohMH1dLHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzZWFyY2hJbnB1dEZpZWxkIixmaXJzdDohMCxwcmVkaWNhdGU6WyJzZWFyY2hJbnB1dCJdLGRlc2NlbmRhbnRzOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmctdGFibGUgdGItYWJzb2x1dGUtZmlsbCI+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLXRpdGxlIj57e21hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldChtYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJlbnRlckZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5zZWFyY2hcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0idGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPiZuYnNwOzwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0idGV4dFNlYXJjaCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnY29tbW9uLmVudGVyLXNlYXJjaFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9ImV4aXRGaWx0ZXJNb2RlKCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uY2xvc2VcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPGRpdiBjbGFzcz0idGFibGUtY29udGFpbmVyIj5cbiAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iY29sdW1uLmRlZiIgKm5nRm9yPSJsZXQgY29sdW1uIG9mIG1hcHBpbmdDb2x1bW5zOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCB0YlRydW5jYXRlV2l0aFRvb2x0aXAgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IG1hcHBpbmdbY29sdW1uLmRlZl0gfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImFjdGlvbnMiIHN0aWNreUVuZD5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJywgdGV4dEFsaWduOiBcJ2NlbnRlclwnfSI+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgbWFwcGluZzsgbGV0IGkgPSBpbmRleCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCd9Ij5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcm93QWN0aW9ucz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlTWFwcGluZygkZXZlbnQsIGkpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbj5kZWxldGU8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cubHQtbGcgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09ImNlbGxBY3Rpb25zTWVudSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjY2VsbEFjdGlvbnNNZW51PSJtYXRNZW51IiB4UG9zaXRpb249ImJlZm9yZSI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBbbmdDbGFzc109IntcJ21hdC1yb3ctc2VsZWN0XCc6IHRydWV9IiAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9ImxldCBtYXBwaW5nOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDxzZWN0aW9uIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUgJiYgKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpIiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1oZWFkbGluZS01IHRiLWFic29sdXRlLWZpbGwgdGItYWRkLW5ldyI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz0iY29ubmVjdG9yIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnR7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQudGItb3V0bGluZWQtYm9yZGVye2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRpdGxlLWNvbnRhaW5lcntvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGItbWFwcGluZy10YWJsZS10aXRsZXtwYWRkaW5nLXJpZ2h0OjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1ue3BhZGRpbmc6MCAxMnB4O3dpZHRoOjIzJX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbi5yZXF1ZXN0LWNvbHVtbnt3aWR0aDozOCV9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAuZWxsaXBzaXN7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctYm90dG9tOjVweDt3aWR0aDoxMDAlfX06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbHtjdXJzb3I6cG9pbnRlcn06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbCAubWF0LWljb257aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtmb250LXNpemU6MjRweDtjb2xvcjojNzU3NTc1fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5Bc3luY1BpcGUsbmFtZToiYXN5bmMifSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdENsYXNzRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ0NsYXNzXSwgW25nQ2xhc3MueHNdLCBbbmdDbGFzcy5zbV0sIFtuZ0NsYXNzLm1kXSwgW25nQ2xhc3MubGddLCBbbmdDbGFzcy54bF0sICBbbmdDbGFzcy5sdC1zbV0sIFtuZ0NsYXNzLmx0LW1kXSwgW25nQ2xhc3MubHQtbGddLCBbbmdDbGFzcy5sdC14bF0sICBbbmdDbGFzcy5ndC14c10sIFtuZ0NsYXNzLmd0LXNtXSwgW25nQ2xhc3MuZ3QtbWRdLCBbbmdDbGFzcy5ndC1sZ10iLGlucHV0czpbIm5nQ2xhc3MiLCJuZ0NsYXNzLnhzIiwibmdDbGFzcy5zbSIsIm5nQ2xhc3MubWQiLCJuZ0NsYXNzLmxnIiwibmdDbGFzcy54bCIsIm5nQ2xhc3MubHQtc20iLCJuZ0NsYXNzLmx0LW1kIiwibmdDbGFzcy5sdC1sZyIsIm5nQ2xhc3MubHQteGwiLCJuZ0NsYXNzLmd0LXhzIiwibmdDbGFzcy5ndC1zbSIsIm5nQ2xhc3MuZ3QtbWQiLCJuZ0NsYXNzLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U3R5bGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nU3R5bGVdLCAgW25nU3R5bGUueHNdLCBbbmdTdHlsZS5zbV0sIFtuZ1N0eWxlLm1kXSwgW25nU3R5bGUubGddLCBbbmdTdHlsZS54bF0sICBbbmdTdHlsZS5sdC1zbV0sIFtuZ1N0eWxlLmx0LW1kXSwgW25nU3R5bGUubHQtbGddLCBbbmdTdHlsZS5sdC14bF0sICBbbmdTdHlsZS5ndC14c10sIFtuZ1N0eWxlLmd0LXNtXSwgW25nU3R5bGUuZ3QtbWRdLCBbbmdTdHlsZS5ndC1sZ10iLGlucHV0czpbIm5nU3R5bGUiLCJuZ1N0eWxlLnhzIiwibmdTdHlsZS5zbSIsIm5nU3R5bGUubWQiLCJuZ1N0eWxlLmxnIiwibmdTdHlsZS54bCIsIm5nU3R5bGUubHQtc20iLCJuZ1N0eWxlLmx0LW1kIiwibmdTdHlsZS5sdC1sZyIsIm5nU3R5bGUubHQteGwiLCJuZ1N0eWxlLmd0LXhzIiwibmdTdHlsZS5ndC1zbSIsIm5nU3R5bGUuZ3QtbWQiLCJuZ1N0eWxlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJ0LlRiSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItaWNvbiIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbInRiSWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIk1hcHBpbmdUYWJsZUNvbXBvbmVudCIscm8pLEhlKFtOKCldLHJvLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpybyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbWFwcGluZy10YWJsZSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy10YWJsZSB0Yi1hYnNvbHV0ZS1maWxsIj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InRiLW1hcHBpbmctdGFibGUtY29udGVudCI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiICpuZ0lmPSIoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykgPT09IGZhbHNlIj5cbiAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzdGFydCBjZW50ZXIiIGZ4TGF5b3V0LnhzPSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ24ueHM9ImNlbnRlciBzdGFydCIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9InRiLW1hcHBpbmctdGFibGUtdGl0bGUiPnt7bWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KG1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJjb2x1bW4uZGVmIiAqbmdGb3I9ImxldCBjb2x1bW4gb2YgbWFwcGluZ0NvbHVtbnM7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgY29sdW1uLnRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCAqbWF0Q2VsbERlZj0ibGV0IG1hcHBpbmciIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgbWFwcGluZ1tjb2x1bW4uZGVmXSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCc5NnB4XCcsIG1heFdpZHRoOiBcJzk2cHhcJywgd2lkdGg6IFwnOTZweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZGVsZXRlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmRlbGV0ZTwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmd0LW1kIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5sdC1sZyBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT0iY2VsbEFjdGlvbnNNZW51Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNjZWxsQWN0aW9uc01lbnU9Im1hdE1lbnUiIHhQb3NpdGlvbj0iYmVmb3JlIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG1hdC1oZWFkZXItcm93IFtuZ0NsYXNzXT0ie1wnbWF0LXJvdy1zZWxlY3RcJzogdHJ1ZX0iICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj0ibGV0IG1hcHBpbmc7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7Ij48L21hdC1yb3c+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPHNlY3Rpb24gW2Z4U2hvd109IiF0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgICAgICBjbGFzcz0ibWF0LWhlYWRsaW5lLTUgdGItYWJzb2x1dGUtZmlsbCB0Yi1hZGQtbmV3Ij5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPSJjb25uZWN0b3IiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gW2Z4U2hvd109InRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSJcbiAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgIGNsYXNzPSJuby1kYXRhLWZvdW5kIiB0cmFuc2xhdGU+XG4gICAgICB3aWRnZXQubm8tZGF0YS1mb3VuZFxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudC50Yi1vdXRsaW5lZC1ib3JkZXJ7Ym94LXNoYWRvdzowIDAgIzAwMDMsMCAwICMwMDAwMDAyNCwwIDAgIzAwMDAwMDFmO2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMDtib3JkZXItcmFkaXVzOjRweH06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5tYXQtdG9vbGJhci10b29sc3ttaW4taGVpZ2h0OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGl0bGUtY29udGFpbmVye292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctcmlnaHQ6MjBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxle3RhYmxlLWxheW91dDpmaXhlZDttaW4td2lkdGg6NDUwcHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxlIC50YWJsZS12YWx1ZS1jb2x1bW57cGFkZGluZzowIDEycHg7d2lkdGg6MjMlfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1uLnJlcXVlc3QtY29sdW1ue3dpZHRoOjM4JX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5lbGxpcHNpc3tvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAubm8tZGF0YS1mb3VuZHtoZWlnaHQ6Y2FsYygxMDAlIC0gMTIwcHgpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5OXB4KXs6aG9zdCAubWF0LXRvb2xiYXJ7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxMDBweH06aG9zdCAubWF0LXRvb2xiYXIgLnRiLW1hcHBpbmctdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntyZXF1aXJlZDpbe3R5cGU6YX1dLG1hcHBpbmdUeXBlOlt7dHlwZTphfV0sc2VhcmNoSW5wdXRGaWVsZDpbe3R5cGU6byxhcmdzOlsic2VhcmNoSW5wdXQiXX1dfX0pO2NsYXNzIHNvIGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9fWUoIk1hcHBpbmdEYXRhc291cmNlIixzbyk7Y2xhc3MgbG97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLnRpdGxlPSJnYXRld2F5LnNlY3VyaXR5Iix0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsPSExLHRoaXMuQnJva2VyU2VjdXJpdHlUeXBlPXJuLHRoaXMuc2VjdXJpdHlUeXBlcz1PYmplY3QudmFsdWVzKHJuKSx0aGlzLm1vZGVUeXBlcz1PYmplY3QudmFsdWVzKHBuKSx0aGlzLlNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcD1tbix0aGlzLmRlc3Ryb3kkPW5ldyBTZX1uZ09uSW5pdCgpe3RoaXMuc2VjdXJpdHlGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dHlwZTpbcm4uQU5PTllNT1VTLFtdXSx1c2VybmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFzc3dvcmQ6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHBhdGhUb0NBQ2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvUHJpdmF0ZUtleTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvQ2xpZW50Q2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsJiZ0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmFkZENvbnRyb2woIm1vZGUiLHRoaXMuZmIuY29udHJvbChwbi5OT05FLFtdKSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXtpZihlKWUudHlwZXx8KGUudHlwZT1ybi5BTk9OWU1PVVMpLHRoaXMudXBkYXRlVmFsaWRhdG9ycyhlLnR5cGUpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAucmVzZXQoZSx7ZW1pdEV2ZW50OiExfSk7ZWxzZXtjb25zdCBlPXt0eXBlOnJuLkFOT05ZTU9VU307dGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlLHtlbWl0RXZlbnQ6ITF9KX10aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlIT09cm4uQkFTSUN8fHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VjdXJpdHlGb3JtOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dXBkYXRlVmFsaWRhdG9ycyhlKXtpZihlKWlmKHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DQUNlcnQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DbGllbnRDZXJ0IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoIm1vZGUiKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZT09PXJuLkJBU0lDKXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTtlbHNlIGlmKGU9PT1ybi5DRVJUSUZJQ0FURVMmJih0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvQ0FDZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhdGhUb0NsaWVudENlcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwpKXtjb25zdCBlPXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJtb2RlIik7ZSYmIWUudmFsdWUmJmUuc2V0VmFsdWUocG4uTk9ORSx7ZW1pdEV2ZW50OiExfSksZT8uZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidXNlcm5hbWUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6bG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czp7dGl0bGU6InRpdGxlIixleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDoiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHNhbWUtcGFkZGluZyB0Yi1mbGV4IGNvbHVtbiIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Rm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5CQVNJQyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJCcm9rZXJTZWN1cml0eVR5cGUuQ0VSVElGSUNBVEVTIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5wYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuQ0EtY2VydGlmaWNhdGUtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DQUNlcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9Qcml2YXRlS2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGF0aFRvQ2xpZW50Q2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibW9kZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAge3sgdHlwZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja31cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2gsc2VsZWN0b3I6IltuZ1N3aXRjaF0iLGlucHV0czpbIm5nU3dpdGNoIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaENhc2Usc2VsZWN0b3I6IltuZ1N3aXRjaENhc2VdIixpbnB1dHM6WyJuZ1N3aXRjaENhc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIlNlY3VyaXR5Q29uZmlnQ29tcG9uZW50IixsbyksSGUoW04oKV0sbG8ucHJvdG90eXBlLCJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmxvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc2VjdXJpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgIHt7IFNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnVzZXJuYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5DRVJUSUZJQ0FURVMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LnBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5DQS1jZXJ0aWZpY2F0ZS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb0NBQ2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb1ByaXZhdGVLZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DbGllbnRDZXJ0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImV4dGVuZENlcnRpZmljYXRlc01vZGVsIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5tb2RlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGVUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyB0eXBlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7dGl0bGU6W3t0eXBlOmF9XSxleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDpbe3R5cGU6YX1dfX0pO2NsYXNzIGNve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5zZWN1cml0eVBvbGljeVR5cGVzPV9uLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3VybDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdGltZW91dEluTWlsbGlzOlsxZTMsW3VlLnJlcXVpcmVkLHVlLm1pbigxZTMpXV0sc2NhblBlcmlvZEluTWlsbGlzOltWLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMWUzKV1dLHBvbGxQZXJpb2RJbk1pbGxpczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oNTApXV0sZW5hYmxlU3Vic2NyaXB0aW9uczpbITAsW11dLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEwMCldXSxzaG93TWFwOlshMSxbXV0sc2VjdXJpdHk6W1VuLkJBU0lDMTI4LFtdXSxpZGVudGl0eTpbXX0pLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5oaWRlTmV3RmllbGRzJiZ0aGlzLnNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoInBvbGxQZXJpb2RJbk1pbGxpcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VydmVyQ29uZmlnRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7Y29uc3R7dGltZW91dEluTWlsbGlzOnQ9MWUzLHNjYW5QZXJpb2RJbk1pbGxpczpuPVYscG9sbFBlcmlvZEluTWlsbGlzOmE9NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6bz0hMCxzdWJDaGVja1BlcmlvZEluTWlsbGlzOmk9MTAwLHNob3dNYXA6cj0hMSxzZWN1cml0eTpzPVVuLkJBU0lDMTI4LGlkZW50aXR5Omw9e319PWU7dGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAucmVzZXQoey4uLmUsdGltZW91dEluTWlsbGlzOnQsc2NhblBlcmlvZEluTWlsbGlzOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsZW5hYmxlU3Vic2NyaXB0aW9uczpvLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6aSxzaG93TWFwOnIsc2VjdXJpdHk6cyxpZGVudGl0eTpsfSx7ZW1pdEV2ZW50OiExfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmNvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czp7aGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmxvLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czpbInRpdGxlIiwiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNTZXJ2ZXJDb25maWdDb21wb25lbnQiLGNvKSxIZShbTigpXSxjby5wcm90b3R5cGUsImhpZGVOZXdGaWVsZHMiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Y28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7aGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dfX0pO2NsYXNzIHBvIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWFwcGluZ1R5cGVzPWZuLHRoaXMuaXNMZWdhY3k9ITF9aW5pdEJhc2ljRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe21hcHBpbmc6W10sc2VydmVyOltdfSl9bWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSl7cmV0dXJue3NlcnZlcjplLnNlcnZlcj8/e30sbWFwcGluZzplLm1hcHBpbmc/P1tdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOmUuc2VydmVyLG1hcHBpbmc6ZS5tYXBwaW5nfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnBvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnBvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNVYUJhc2ljQ29uZmlnQ29tcG9uZW50IixwbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5wbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgbW97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLm1xdHRWZXJzaW9ucz1nbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5icm9rZXJDb25maWdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7aG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSx2ZXJzaW9uOls1LFtdXSxjbGllbnRJZDpbInRiX2d3XyIrc2UoNSksW3VlLnBhdHRlcm4oa3QpXV0sc2VjdXJpdHk6W119KSx0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWdlbmVyYXRlKGUpe3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLmdldChlKT8ucGF0Y2hWYWx1ZSgidGJfZ3dfIitzZSg1KSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2NvbnN0e3ZlcnNpb246dD01LGNsaWVudElkOm49YHRiX2d3XyR7c2UoNSl9YCxzZWN1cml0eTphPXt9fT1lO3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLnJlc2V0KHsuLi5lLHZlcnNpb246dCxjbGllbnRJZDpuLHNlY3VyaXR5OmF9LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnticm9rZXJDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTptbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTptbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9Pm1vKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpsbyxzZWxlY3RvcjoidGItc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJ0aXRsZSIsImV4dGVuZENlcnRpZmljYXRlc01vZGVsIl19LHtraW5kOiJwaXBlIix0eXBlOndhLG5hbWU6ImdldEdhdGV3YXlQb3J0VG9vbHRpcCJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiQnJva2VyQ29uZmlnQ29udHJvbENvbXBvbmVudCIsbW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLHdhXSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5tbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyB1b3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21heE51bWJlck9mV29ya2VyczpbMTAwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSldXSxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOlsxMCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV19KSx0aGlzLndvcmtlcnNDb25maWdGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7Y29uc3R7bWF4TnVtYmVyT2ZXb3JrZXJzOnQsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjpufT1lO3RoaXMud29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5yZXNldCh7bWF4TnVtYmVyT2ZXb3JrZXJzOnR8fDEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOm58fDEwfSx7ZW1pdEV2ZW50OiExfSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwLnZhbGlkP251bGw6e3dvcmtlcnNDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp1byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnVvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+dW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09IndvcmtlcnNDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9Im1heE51bWJlck9mV29ya2VycyJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TnVtYmVyT2ZXb3JrZXJzXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIFtzdHlsZS53aWR0aC4lXT0iNTAiXG4gICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXJcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TWVzc2FnZU51bWJlclBlcldvcmtlciJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiV29ya2Vyc0NvbmZpZ0NvbnRyb2xDb21wb25lbnQiLHVvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnVvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT51bykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBbZm9ybUdyb3VwXT0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiBbc3R5bGUud2lkdGguJV09IjUwIlxuICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TnVtYmVyT2ZXb3JrZXJzIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1udW1iZXItb2Ytd29ya2Vycy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiB0eXBlPSJudW1iZXIiIG1pbj0iMSIgZm9ybUNvbnRyb2xOYW1lPSJtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IndvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS50b3VjaGVkKSJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIGdve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmlzRXhwYW5zaW9uTW9kZT0hMSx0aGlzLmRlZmF1bHRWYWx1ZT1sbi5LZXksdGhpcy5yZXBvcnRTdHJhdGVneVR5cGVzPU9iamVjdC52YWx1ZXMoc24pLHRoaXMuUmVwb3J0VHlwZVRyYW5zbGF0ZU1hcD1jbix0aGlzLlJlcG9ydFN0cmF0ZWd5VHlwZT1zbix0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTdHJhdGVneUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W3t2YWx1ZTpzbi5PblJlcG9ydFBlcmlvZCxkaXNhYmxlZDohMH0sW11dLHJlcG9ydFBlcmlvZDpbe3ZhbHVlOnRoaXMuZGVmYXVsdFZhbHVlLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5Rm9ybUNoYW5nZSgpLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5VG9nZ2xlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmlzRXhwYW5zaW9uTW9kZSYmdGhpcy5zaG93U3RyYXRlZ3lDb250cm9sLnNldFZhbHVlKCEhZSx7ZW1pdEV2ZW50OiExfSksZSYmdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pO2NvbnN0e3R5cGU6dD1zbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6bj10aGlzLmRlZmF1bHRWYWx1ZX09ZT8/e307dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5zZXRWYWx1ZSh7dHlwZTp0LHJlcG9ydFBlcmlvZDpufSx7ZW1pdEV2ZW50OiExfSksdGhpcy5vblR5cGVDaGFuZ2UodCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWxpZHx8dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5kaXNhYmxlZD9udWxsOntyZXBvcnRTdHJhdGVneUZvcm06e3ZhbGlkOiExfX19cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX1vYnNlcnZlU3RyYXRlZ3lGb3JtQ2hhbmdlKCl7dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy5vblR5cGVDaGFuZ2UoZSkpKX1vYnNlcnZlU3RyYXRlZ3lUb2dnbGUoKXt0aGlzLnNob3dTdHJhdGVneUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCksTWUoKCgpPT50aGlzLmlzRXhwYW5zaW9uTW9kZSkpKS5zdWJzY3JpYmUoKGU9PntlPyh0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoInJlcG9ydFBlcmlvZCIpLmFkZFZhbGlkYXRvcnModWUucmVxdWlyZWQpLHRoaXMub25DaGFuZ2UodGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZSkpOih0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKS5yZW1vdmVWYWxpZGF0b3JzKHVlLnJlcXVpcmVkKSx0aGlzLm9uQ2hhbmdlKG51bGwpKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfW9uVHlwZUNoYW5nZShlKXtjb25zdCB0PXRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKTtlPT09c24uT25DaGFuZ2U/dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmlzRXhwYW5zaW9uTW9kZSYmIXRoaXMuc2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZXx8dC5lbmFibGUoe2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpnbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsaW5wdXRzOntpc0V4cGFuc2lvbk1vZGU6ImlzRXhwYW5zaW9uTW9kZSIsZGVmYXVsdFZhbHVlOiJkZWZhdWx0VmFsdWUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Z28pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0lmPSJpc0V4cGFuc2lvbk1vZGUgZWxzZSBkZWZhdWx0TW9kZSIgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U3RyYXRlZ3lDb250cm9sLnZhbHVlIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1N0cmF0ZWd5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InN0cmF0ZWd5RmllbGRzIj48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNb2RlPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjc3RyYXRlZ3lGaWVsZHM+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcG9ydFN0cmF0ZWd5VHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IFJlcG9ydFR5cGVUcmFuc2xhdGVNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUgIT09IFJlcG9ydFN0cmF0ZWd5VHlwZS5PbkNoYW5nZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPlxuICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgIGdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5LnJlcG9ydC1wZXJpb2RcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJSZXBvcnRTdHJhdGVneUNvbXBvbmVudCIsZ28pLEhlKFtOKCldLGdvLnByb3RvdHlwZSwiaXNFeHBhbnNpb25Nb2RlIix2b2lkIDApLEhlKFtCKCldLGdvLnByb3RvdHlwZSwiZGVmYXVsdFZhbHVlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmdvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0icmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdJZj0iaXNFeHBhbnNpb25Nb2RlIGVsc2UgZGVmYXVsdE1vZGUiIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZSI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTdHJhdGVneUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TW9kZT5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWw8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0ic3RyYXRlZ3lGaWVsZHMiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3N0cmF0ZWd5RmllbGRzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiPnt7IFwnZ2F0ZXdheS50eXBlXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiByZXBvcnRTdHJhdGVneVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBSZXBvcnRUeXBlVHJhbnNsYXRlTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBSZXBvcnRTdHJhdGVneVR5cGUuT25DaGFuZ2UiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj5cbiAgICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5cbiAgICAgICAgICBnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5yZXBvcnQtcGVyaW9kXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0UGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntpc0V4cGFuc2lvbk1vZGU6W3t0eXBlOmF9XSxkZWZhdWx0VmFsdWU6W3t0eXBlOmF9XX19KTtjbGFzcyBmb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5pc01hc3Rlcj0hMSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5tb2RidXNEYXRhVHlwZXM9T2JqZWN0LnZhbHVlcyhlYSksdGhpcy5tb2RpZmllclR5cGVzPU9iamVjdC52YWx1ZXMoT24pLHRoaXMud2l0aEZ1bmN0aW9uQ29kZT0hMCx0aGlzLndpdGhSZXBvcnRTdHJhdGVneT0hMCx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXA9bmV3IE1hcCx0aGlzLnNob3dNb2RpZmllcnNNYXA9bmV3IE1hcCx0aGlzLmZ1bmN0aW9uQ29kZXNNYXA9bmV3IE1hcCx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVtdLHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXM9dGEsdGhpcy5Nb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXA9enQsdGhpcy5Nb2RpZmllclR5cGVzTWFwPVJuLHRoaXMuUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWU9bG4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5kZWZhdWx0UmVhZEZ1bmN0aW9uQ29kZXM9WzMsNF0sdGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXM9WzEsMl0sdGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzPVs2LDE2XSx0aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM9WzUsMTVdfW5nT25Jbml0KCl7dGhpcy53aXRoRnVuY3Rpb25Db2RlPSF0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVMsdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3k9ISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuaGlkZU5ld0ZpZWxkcyksdGhpcy5rZXlzTGlzdEZvcm1BcnJheT10aGlzLnByZXBhcmVLZXlzRm9ybUFycmF5KHRoaXMudmFsdWVzKSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPXRoaXMuZ2V0RGVmYXVsdEZ1bmN0aW9uQ29kZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX10cmFja0J5Q29udHJvbElkKGUsdCl7cmV0dXJuIHQudmFsdWUuaWR9YWRkS2V5KCl7Y29uc3QgZT1zZSg1KSx0PXRoaXMuZmIuZ3JvdXAoe3RhZzpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6W3t2YWx1ZToiIixkaXNhYmxlZDohdGhpcy5pc01hc3Rlcn0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbZWEuQllURVMsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbnVsbCxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6WzEsW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6dGhpcy5nZXREZWZhdWx0RnVuY3Rpb25Db2RlcygpWzBdLGRpc2FibGVkOiF0aGlzLndpdGhGdW5jdGlvbkNvZGV9LFt1ZS5yZXF1aXJlZF1dLHJlcG9ydFN0cmF0ZWd5Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3l9XSxtb2RpZmllclR5cGU6W3t2YWx1ZTpPbi5NVUxUSVBMSUVSLGRpc2FibGVkOiEwfV0sbW9kaWZpZXJWYWx1ZTpbe3ZhbHVlOjEsZGlzYWJsZWQ6ITB9LFt1ZS5wYXR0ZXJuKEZ0KV1dLGlkOlt7dmFsdWU6ZSxkaXNhYmxlZDohMH1dfSk7dGhpcy5zaG93TW9kaWZpZXJzTWFwLnNldChlLCExKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KGUsdGhpcy5mYi5jb250cm9sKCExKSksdGhpcy5vYnNlcnZlS2V5RGF0YVR5cGUodCksdGhpcy5vYnNlcnZlRW5hYmxlTW9kaWZpZXIodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5wdXNoKHQpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5yZW1vdmVBdCh0KSx0aGlzLmtleXNMaXN0Rm9ybUFycmF5Lm1hcmtBc0RpcnR5KCl9Y2FuY2VsKCl7dGhpcy5wb3BvdmVyLmhpZGUoKX1hcHBseUtleXNEYXRhKCl7dGhpcy5rZXlzRGF0YUFwcGxpZWQuZW1pdCh0aGlzLmdldEZvcm1WYWx1ZSgpKX1nZXRGb3JtVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXBLZXlzV2l0aE1vZGlmaWVyKHRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5P3RoaXMuY2xlYW5VcEVtcHR5U3RyYXRlZ2llcyh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKTp0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKX1jbGVhblVwRW1wdHlTdHJhdGVnaWVzKGUpe3JldHVybiBlLm1hcCgoZT0+e2NvbnN0e3JlcG9ydFN0cmF0ZWd5OnQsLi4ubn09ZTtyZXR1cm4gdD9lOm59KSl9bWFwS2V5c1dpdGhNb2RpZmllcihlKXtyZXR1cm4gZS5tYXAoKChlLHQpPT57aWYodGhpcy5zaG93TW9kaWZpZXJzTWFwLmdldCh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzW3RdLmdldCgiaWQiKS52YWx1ZSkpe2NvbnN0e21vZGlmaWVyVHlwZTp0LG1vZGlmaWVyVmFsdWU6biwuLi5hfT1lO3JldHVybiB0P3suLi5hLFt0XTpufTphfXJldHVybiBlfSkpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJmUuZm9yRWFjaCgoZT0+e2NvbnN0IG49dGhpcy5jcmVhdGVEYXRhS2V5Rm9ybUdyb3VwKGUpO3RoaXMub2JzZXJ2ZUtleURhdGFUeXBlKG4pLHRoaXMub2JzZXJ2ZUVuYWJsZU1vZGlmaWVyKG4pLHRoaXMuZnVuY3Rpb25Db2Rlc01hcC5zZXQobi5nZXQoImlkIikudmFsdWUsdGhpcy5nZXRGdW5jdGlvbkNvZGVzKGUudHlwZSkpLHQucHVzaChuKX0pKSx0aGlzLmZiLmFycmF5KHQpfWNyZWF0ZURhdGFLZXlGb3JtR3JvdXAoZSl7Y29uc3R7dGFnOnQsdmFsdWU6bix0eXBlOmEsYWRkcmVzczpvLG9iamVjdHNDb3VudDppLGZ1bmN0aW9uQ29kZTpyLG11bHRpcGxpZXI6cyxkaXZpZGVyOmwscmVwb3J0U3RyYXRlZ3k6Y309ZSxwPXNlKDUpLG09dGhpcy5zaG91bGRTaG93TW9kaWZpZXIoYSk7cmV0dXJuIHRoaXMuc2hvd01vZGlmaWVyc01hcC5zZXQocCxtKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KHAsdGhpcy5mYi5jb250cm9sKChzfHxsKSYmbSkpLHRoaXMuZmIuZ3JvdXAoe3RhZzpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbe3ZhbHVlOm4sZGlzYWJsZWQ6IXRoaXMuaXNNYXN0ZXJ9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHR5cGU6W2EsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbyxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6W2ksW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6cixkaXNhYmxlZDohdGhpcy53aXRoRnVuY3Rpb25Db2RlfSxbdWUucmVxdWlyZWRdXSxtb2RpZmllclR5cGU6W3t2YWx1ZTpsP09uLkRJVklERVI6T24uTVVMVElQTElFUixkaXNhYmxlZDohdGhpcy5lbmFibGVNb2RpZmllcnNDb250cm9sTWFwLmdldChwKS52YWx1ZX1dLG1vZGlmaWVyVmFsdWU6W3t2YWx1ZTpzPz9sPz8xLGRpc2FibGVkOiF0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KHApLnZhbHVlfSxbdWUucGF0dGVybihGdCldXSxpZDpbe3ZhbHVlOnAsZGlzYWJsZWQ6ITB9XSxyZXBvcnRTdHJhdGVneTpbe3ZhbHVlOmMsZGlzYWJsZWQ6IXRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5fV19KX1zaG91bGRTaG93TW9kaWZpZXIoZSl7cmV0dXJuISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSkpfW9ic2VydmVLZXlEYXRhVHlwZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHQpfHxlLmdldCgib2JqZWN0c0NvdW50IikucGF0Y2hWYWx1ZShuYVt0XSx7ZW1pdEV2ZW50OiExfSk7Y29uc3Qgbj10aGlzLnNob3VsZFNob3dNb2RpZmllcih0KTt0aGlzLnNob3dNb2RpZmllcnNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlLHQpfSkpfW9ic2VydmVFbmFibGVNb2RpZmllcihlKXt0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KGUuZ2V0KCJpZCIpLnZhbHVlKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT50aGlzLnRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KSkpfXRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KXtjb25zdCBuPWUuZ2V0KCJtb2RpZmllclR5cGUiKSxhPWUuZ2V0KCJtb2RpZmllclZhbHVlIik7dD8obi5lbmFibGUoKSxhLmVuYWJsZSgpKToobi5kaXNhYmxlKCksYS5kaXNhYmxlKCkpfXVwZGF0ZUZ1bmN0aW9uQ29kZXMoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RnVuY3Rpb25Db2Rlcyh0KTt0aGlzLmZ1bmN0aW9uQ29kZXNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLG4uaW5jbHVkZXMoZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnZhbHVlKXx8ZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUoblswXSx7ZW1pdEV2ZW50OiExfSl9Z2V0RnVuY3Rpb25Db2RlcyhlKXtjb25zdCB0PVsuLi5lPT09ZWEuQklUUz90aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM6W10sLi4udGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzXTtpZih0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTKXJldHVybiB0LnNvcnQoKChlLHQpPT5lLXQpKTtjb25zdCBuPVsuLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2Rlc107cmV0dXJuIGU9PT1lYS5CSVRTJiZuLnB1c2goLi4udGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXMpLHRoaXMua2V5c1R5cGU9PT1hYS5SUENfUkVRVUVTVFMmJm4ucHVzaCguLi50KSxuLnNvcnQoKChlLHQpPT5lLXQpKX1nZXREZWZhdWx0RnVuY3Rpb25Db2Rlcygpe3JldHVybiB0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTP3RoaXMuZGVmYXVsdFdyaXRlRnVuY3Rpb25Db2Rlczp0aGlzLmtleXNUeXBlPT09YWEuUlBDX1JFUVVFU1RTP1suLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLmRlZmF1bHRXcml0ZUZ1bmN0aW9uQ29kZXNdOnRoaXMuZGVmYXVsdFJlYWRGdW5jdGlvbkNvZGVzfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Zm8sZGVwczpbe3Rva2VuOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Zm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyIscGFuZWxUaXRsZToicGFuZWxUaXRsZSIsYWRkS2V5VGl0bGU6ImFkZEtleVRpdGxlIixkZWxldGVLZXlUaXRsZToiZGVsZXRlS2V5VGl0bGUiLG5vS2V5c1RleHQ6Im5vS2V5c1RleHQiLGtleXNUeXBlOiJrZXlzVHlwZSIsdmFsdWVzOiJ2YWx1ZXMiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmV0Lk1hdFNsaWRlVG9nZ2xlLHNlbGVjdG9yOiJtYXQtc2xpZGUtdG9nZ2xlIixpbnB1dHM6WyJuYW1lIiwiaWQiLCJsYWJlbFBvc2l0aW9uIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJyZXF1aXJlZCIsImNvbG9yIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJjaGVja2VkIiwiaGlkZUljb24iLCJkaXNhYmxlZEludGVyYWN0aXZlIl0sb3V0cHV0czpbImNoYW5nZSIsInRvZ2dsZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2xpZGVUb2dnbGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsQ29udGVudCxzZWxlY3RvcjoibmctdGVtcGxhdGVbbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dfSl9fWUoIk1vZGJ1c0RhdGFLZXlzUGFuZWxDb21wb25lbnQiLGZvKSxIZShbTigpXSxmby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLEhlKFtOKCldLGZvLnByb3RvdHlwZSwiaGlkZU5ld0ZpZWxkcyIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxUYSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfV0scHJvcERlY29yYXRvcnM6e2lzTWFzdGVyOlt7dHlwZTphfV0saGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dLHBhbmVsVGl0bGU6W3t0eXBlOmF9XSxhZGRLZXlUaXRsZTpbe3R5cGU6YX1dLGRlbGV0ZUtleVRpdGxlOlt7dHlwZTphfV0sbm9LZXlzVGV4dDpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVzOlt7dHlwZTphfV0scG9wb3Zlcjpbe3R5cGU6YX1dLGtleXNEYXRhQXBwbGllZDpbe3R5cGU6bH1dfX0pO2NsYXNzIHlve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy5mYj1lLHRoaXMucG9wb3ZlclNlcnZpY2U9dCx0aGlzLnJlbmRlcmVyPW4sdGhpcy52aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5jZHI9byx0aGlzLnNpbmdsZU1vZGU9ITEsdGhpcy5oaWRlTmV3RmllbGRzPSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5tb2RidXNSZWdpc3RlclR5cGVzPU9iamVjdC52YWx1ZXMoWG4pLHRoaXMubW9kYnVzVmFsdWVLZXlzPU9iamVjdC52YWx1ZXMoYWEpLHRoaXMuTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwPVpuLHRoaXMuTW9kYnVzVmFsdWVLZXk9YWEsdGhpcy5kZXN0cm95JD1uZXcgU2V9bmdPbkluaXQoKXt0aGlzLmluaXRpYWxpemVWYWx1ZXNGb3JtR3JvdXAoKSx0aGlzLm9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2lmKHRoaXMuc2luZ2xlTW9kZSl0aGlzLnZhbHVlc0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoZSkse2VtaXRFdmVudDohMX0pO2Vsc2V7Y29uc3R7aG9sZGluZ19yZWdpc3RlcnM6dCxjb2lsc19pbml0aWFsaXplcjpuLGlucHV0X3JlZ2lzdGVyczphLGRpc2NyZXRlX2lucHV0czpvfT1lO3RoaXMudmFsdWVzRm9ybUdyb3VwLnNldFZhbHVlKHtob2xkaW5nX3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUodCksY29pbHNfaW5pdGlhbGl6ZXI6dGhpcy5nZXRTaW5nbGVSZWdpc3RlclN0YXRlKG4pLGlucHV0X3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoYSksZGlzY3JldGVfaW5wdXRzOnRoaXMuZ2V0U2luZ2xlUmVnaXN0ZXJTdGF0ZShvKX0se2VtaXRFdmVudDohMX0pfXRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMudmFsdWVzRm9ybUdyb3VwLnZhbGlkP251bGw6e3ZhbHVlc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX1nZXRWYWx1ZUdyb3VwKGUsdCl7cmV0dXJuIHQ/dGhpcy52YWx1ZXNGb3JtR3JvdXAuZ2V0KHQpLmdldChlKTp0aGlzLnZhbHVlc0Zvcm1Hcm91cC5nZXQoZSl9bWFuYWdlS2V5cyhlLHQsbixhKXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG89dC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKHRoaXMucG9wb3ZlclNlcnZpY2UuaGFzUG9wb3ZlcihvKSlyZXR1cm4gdm9pZCB0aGlzLnBvcG92ZXJTZXJ2aWNlLmhpZGVQb3BvdmVyKG8pO2NvbnN0IGk9dGhpcy5nZXRWYWx1ZUdyb3VwKG4sYSkscj17dmFsdWVzOmkudmFsdWUsaXNNYXN0ZXI6IXRoaXMuc2luZ2xlTW9kZSxrZXlzVHlwZTpuLHBhbmVsVGl0bGU6b2EuZ2V0KG4pLGFkZEtleVRpdGxlOmlhLmdldChuKSxkZWxldGVLZXlUaXRsZTpyYS5nZXQobiksbm9LZXlzVGV4dDpzYS5nZXQobiksaGlkZU5ld0ZpZWxkczp0aGlzLmhpZGVOZXdGaWVsZHN9LHM9dGhpcy5wb3BvdmVyU2VydmljZS5kaXNwbGF5UG9wb3ZlcihvLHRoaXMucmVuZGVyZXIsdGhpcy52aWV3Q29udGFpbmVyUmVmLGZvLCJsZWZ0Qm90dG9tIiwhMSxudWxsLHIse30se30se30sITApO3MudGJDb21wb25lbnRSZWYuaW5zdGFuY2UucG9wb3Zlcj1zLHMudGJDb21wb25lbnRSZWYuaW5zdGFuY2Uua2V5c0RhdGFBcHBsaWVkLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3MuaGlkZSgpLGkucGF0Y2hWYWx1ZShlKSxpLm1hcmtBc0RpcnR5KCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9KSl9aW5pdGlhbGl6ZVZhbHVlc0Zvcm1Hcm91cCgpe2NvbnN0IGU9KCk9PnRoaXMuZmIuZ3JvdXAodGhpcy5tb2RidXNWYWx1ZUtleXMucmVkdWNlKCgoZSx0KT0+KGVbdF09dGhpcy5mYi5jb250cm9sKFtbXSxbXV0pLGUpKSx7fSkpO3RoaXMuc2luZ2xlTW9kZT90aGlzLnZhbHVlc0Zvcm1Hcm91cD1lKCk6dGhpcy52YWx1ZXNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh0aGlzLm1vZGJ1c1JlZ2lzdGVyVHlwZXMucmVkdWNlKCgodCxuKT0+KHRbbl09ZSgpLHQpKSx7fSkpfW9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl7dGhpcy52YWx1ZXNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1nZXRTaW5nbGVSZWdpc3RlclN0YXRlKGUpe3JldHVybnthdHRyaWJ1dGVzOmU/LmF0dHJpYnV0ZXM/P1tdLHRpbWVzZXJpZXM6ZT8udGltZXNlcmllcz8/W10sYXR0cmlidXRlVXBkYXRlczplPy5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6ZT8ucnBjPz9bXX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp5byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp5byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGlucHV0czp7c2luZ2xlTW9kZToic2luZ2xlTW9kZSIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnlvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwLHNlbGVjdG9yOiJtYXQtYmFzaWMtY2hpcCwgW21hdC1iYXNpYy1jaGlwXSwgbWF0LWNoaXAsIFttYXQtY2hpcF0iLGlucHV0czpbInJvbGUiLCJpZCIsImFyaWEtbGFiZWwiLCJhcmlhLWRlc2NyaXB0aW9uIiwidmFsdWUiLCJjb2xvciIsInJlbW92YWJsZSIsImhpZ2hsaWdodGVkIiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVkIl0sb3V0cHV0czpbInJlbW92ZWQiLCJkZXN0cm95ZWQiXSxleHBvcnRBczpbIm1hdENoaXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwTGlzdGJveCxzZWxlY3RvcjoibWF0LWNoaXAtbGlzdGJveCIsaW5wdXRzOlsibXVsdGlwbGUiLCJhcmlhLW9yaWVudGF0aW9uIiwic2VsZWN0YWJsZSIsImNvbXBhcmVXaXRoIiwicmVxdWlyZWQiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwidmFsdWUiXSxvdXRwdXRzOlsiY2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YnQuVGJJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1pY29uIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsidGJJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6a2Esc2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixpbnB1dHM6WyJ0Yi1lbGxpcHNpcy1jaGlwLWxpc3QiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNWYWx1ZXNDb21wb25lbnQiLHlvKSxIZShbTigpXSx5by5wcm90b3R5cGUsInNpbmdsZU1vZGUiLHZvaWQgMCksSGUoW04oKV0seW8ucHJvdG90eXBlLCJoaWRlTmV3RmllbGRzIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+eW8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGthXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7c2luZ2xlTW9kZTpbe3R5cGU6YX1dLGhpZGVOZXdGaWVsZHM6W3t0eXBlOmF9XX19KTtjbGFzcyBib3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMuaXNNYXN0ZXI9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe2NlcnRmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxrZXlmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0sc2VydmVyX2hvc3RuYW1lOlsiIixbdWUucGF0dGVybihrdCldXSxyZXFjbGljZXJ0Olt7dmFsdWU6ITEsZGlzYWJsZWQ6ITB9XX0pLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVNYXN0ZXJFbmFibGluZygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWUsdGhpcy5kaXNhYmxlZD90aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pOnRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnVwZGF0ZU1hc3RlckVuYWJsaW5nKCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe2NvbnN0e2NlcnRmaWxlOnQscGFzc3dvcmQ6bixrZXlmaWxlOmEsc2VydmVyX2hvc3RuYW1lOm99PWUsaT17Y2VydGZpbGU6dD8/IiIscGFzc3dvcmQ6bj8/IiIsa2V5ZmlsZTphPz8iIixzZXJ2ZXJfaG9zdG5hbWU6bz8/IiIscmVxY2xpY2VydDohIWUucmVxY2xpY2VydH07dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC5yZXNldChpLHtlbWl0RXZlbnQ6ITF9KX11cGRhdGVNYXN0ZXJFbmFibGluZygpe3RoaXMuaXNNYXN0ZXI/KHRoaXMuZGlzYWJsZWR8fHRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZ2V0KCJyZXFjbGljZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0aGlzLmRpc2FibGVkfHx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgicmVxY2xpY2VydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pKX1vYnNlcnZlVmFsdWVDaGFuZ2VzKCl7dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Ym8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfV0sdXNlc09uQ2hhbmdlczohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmhpbnRzLnBhdGgtaW4tb3NcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2VydGZpbGUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucHJpdmF0ZS1rZXktcGF0aFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXlmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSIhaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1ob3N0bmFtZTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJfaG9zdG5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJpc01hc3RlciIgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXFjbGljZXJ0Ij5cbiAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5yZXF1ZXN0LWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1IZShbTigpXSxiby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Ym8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIFtmb3JtR3JvdXBdPSJzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5oaW50cy5wYXRoLWluLW9zXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jYS1jZXJ0XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNlcnRmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnByaXZhdGUta2V5LXBhdGhcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5ZmlsZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iIWlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItaG9zdG5hbWU8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ic2VydmVyX2hvc3RuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmVxY2xpY2VydCI+XG4gICAgICA8bWF0LWxhYmVsPlxuICAgICAgICB7eyBcJ2dhdGV3YXkucmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtbGFiZWw+XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntpc01hc3Rlcjpbe3R5cGU6YX1dfX0pO2NsYXNzIGhvIGV4dGVuZHMgUHtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKHQsbixvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9byx0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c1Bhcml0aWVzPU9iamVjdC52YWx1ZXMoWW4pLHRoaXMubW9kYnVzQnl0ZVNpemVzPSRuLHRoaXMubW9kYnVzQmF1ZHJhdGVzPWxhLHRoaXMubW9kYnVzT3JkZXJUeXBlPU9iamVjdC52YWx1ZXMoSm4pLHRoaXMuTW9kYnVzUHJvdG9jb2xUeXBlPUhuLHRoaXMuTW9kYnVzUGFyaXR5TGFiZWxzTWFwPVFuLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5Nb2RidXNNZXRob2RMYWJlbHNNYXA9S24sdGhpcy5SZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZT1sbix0aGlzLm1vZGJ1c0hlbHBMaW5rPXYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tb2RidXMvI3NlY3Rpb24tbWFzdGVyLWRlc2NyaXB0aW9uLWFuZC1jb25maWd1cmF0aW9uLXBhcmFtZXRlcnMiLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSIsInN0b3BiaXRzIiwiYnl0ZXNpemUiLCJwYXJpdHkiLCJzdHJpY3QiXSx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXM9WyJwb3J0Iiwic2VjdXJpdHkiLCJob3N0Il0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5zaG93U2VjdXJpdHlDb250cm9sPXRoaXMuZmIuY29udHJvbCghMSksdGhpcy5pbml0aWFsaXplU2xhdmVGb3JtR3JvdXAoKSx0aGlzLnVwZGF0ZVNsYXZlRm9ybUdyb3VwKCksdGhpcy51cGRhdGVDb250cm9sc0VuYWJsaW5nKHRoaXMuZGF0YS52YWx1ZS50eXBlKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCksdGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnBhdGNoVmFsdWUoISF0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkmJiFlZSh0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkse30pKX1nZXQgcHJvdG9jb2xUeXBlKCl7cmV0dXJuIHRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5nZXRTbGF2ZVJlc3VsdERhdGEoKSl9aW5pdGlhbGl6ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltIbi5UQ1BdLGhvc3Q6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHBvcnQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbihFdC5NSU4pLHVlLm1heChFdC5NQVgpXV0sc2VyaWFsUG9ydDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbWV0aG9kOltXbi5TT0NLRVQsW3VlLnJlcXVpcmVkXV0sYmF1ZHJhdGU6W3RoaXMubW9kYnVzQmF1ZHJhdGVzWzBdXSxzdG9wYml0czpbMV0sYnl0ZXNpemU6WyRuWzBdXSxwYXJpdHk6W1luLk5vbmVdLHN0cmljdDpbITBdLHVuaXRJZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxkZXZpY2VOYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxkZXZpY2VUeXBlOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0aW1lb3V0OlszNV0sYnl0ZU9yZGVyOltKbi5CSUddLHdvcmRPcmRlcjpbSm4uQklHXSxyZXRyaWVzOlshMF0scmV0cnlPbkVtcHR5OlshMF0scmV0cnlPbkludmFsaWQ6WyEwXSxwb2xsUGVyaW9kOls1ZTMsW3VlLnJlcXVpcmVkXV0sY29ubmVjdEF0dGVtcHRUaW1lTXM6WzVlMyxbdWUucmVxdWlyZWRdXSxjb25uZWN0QXR0ZW1wdENvdW50Ols1LFt1ZS5yZXF1aXJlZF1dLHdhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXM6WzNlNSxbdWUucmVxdWlyZWRdXSx2YWx1ZXM6W3t9XSxzZWN1cml0eTpbe31dfSksdGhpcy5hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpfXVwZGF0ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKHsuLi50aGlzLmRhdGEudmFsdWUscG9ydDp0aGlzLmRhdGEudmFsdWUudHlwZT09PUhuLlNlcmlhbD9udWxsOnRoaXMuZGF0YS52YWx1ZS5wb3J0LHNlcmlhbFBvcnQ6dGhpcy5kYXRhLnZhbHVlLnR5cGU9PT1Ibi5TZXJpYWw/dGhpcy5kYXRhLnZhbHVlLnBvcnQ6IiIsdmFsdWVzOnthdHRyaWJ1dGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVzPz9bXSx0aW1lc2VyaWVzOnRoaXMuZGF0YS52YWx1ZS50aW1lc2VyaWVzPz9bXSxhdHRyaWJ1dGVVcGRhdGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6dGhpcy5kYXRhLnZhbHVlLnJwYz8/W119fSl9b2JzZXJ2ZVR5cGVDaGFuZ2UoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbnRyb2xzRW5hYmxpbmcoZSksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlQ29udHJvbHNFbmFibGluZyhlKXtjb25zdFt0LG5dPWU9PT1Ibi5TZXJpYWw/W3RoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cyx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXNdOlt0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXMsdGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzXTt0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKSx0aGlzLnVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcodGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlKX1vYnNlcnZlU2hvd1NlY3VyaXR5KCl7dGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlU2VjdXJpdHlFbmFibGluZyhlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcoZSl7ZSYmdGhpcy5wcm90b2NvbFR5cGUhPT1Ibi5TZXJpYWw/dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgic2VjdXJpdHkiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmhvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fWUoIk1vZGJ1c1NsYXZlRGlhbG9nQWJzdHJhY3QiLGhvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpvdC5TdG9yZX0se3R5cGU6aXQuUm91dGVyfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOltYZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nUmVmfV19KTtjbGFzcyB4byBleHRlbmRzIGhve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LG4sYSxvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9b31nZXRTbGF2ZVJlc3VsdERhdGEoKXtjb25zdHt2YWx1ZXM6ZSx0eXBlOnQsc2VyaWFsUG9ydDpuLC4uLmF9PXRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAudmFsdWUsbz17Li4uYSx0eXBlOnQsLi4uZX07cmV0dXJuIHQ9PT1Ibi5TZXJpYWwmJihvLnBvcnQ9biksby5yZXBvcnRTdHJhdGVneXx8ZGVsZXRlIG8ucmVwb3J0U3RyYXRlZ3ksb31hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuYWRkQ29udHJvbCgicmVwb3J0U3RyYXRlZ3kiLHRoaXMuZmIuY29udHJvbChudWxsKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp4byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp4byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNTbGF2ZURpYWxvZ0NvbXBvbmVudCIseG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCx5byxibyx3YSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzbGF2ZXMtY29uZmlnLWNvbnRhaW5lciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IFwnZ2F0ZXdheS5zZXJ2ZXItc2xhdmVcJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0ibW9kYnVzSGVscExpbmsiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IFtmb3JtR3JvdXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgIDxkaXYgY2xhc3M9InN0cm9rZWQgdGItZm9ybS1wYW5lbCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItY29ubmVjdGlvbjwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c1Byb3RvY29sVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldCh0eXBlKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgZWxzZSBzZXJpYWxQb3J0IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zZXJpYWwtcG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InNlcmlhbFBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3NlcmlhbFBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZnJhbWVyLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5Lm1ldGhvZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIHByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCA/IG1vZGJ1c1NlcmlhbE1ldGhvZFR5cGVzIDogbW9kYnVzTWV0aG9kVHlwZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJtZXRob2QiPnt7IE1vZGJ1c01ldGhvZExhYmVsc01hcC5nZXQobWV0aG9kKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYmF1ZHJhdGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYmF1ZHJhdGU8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJhdWRyYXRlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHJhdGUgb2YgbW9kYnVzQmF1ZHJhdGVzIiBbdmFsdWVdPSJyYXRlIj57eyByYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGVzaXplXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGVzaXplPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlc2l6ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzaXplIG9mIG1vZGJ1c0J5dGVTaXplcyIgW3ZhbHVlXT0ic2l6ZSI+e3sgc2l6ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdG9wYml0c1wnIHwgdHJhbnNsYXRlIH19IiAgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcGJpdHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InN0b3BiaXRzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wYXJpdHlcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucGFyaXR5PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJwYXJpdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgcGFyaXR5IG9mIG1vZGJ1c1Bhcml0aWVzIiBbdmFsdWVdPSJwYXJpdHkiPnt7IE1vZGJ1c1Bhcml0eUxhYmVsc01hcC5nZXQocGFyaXR5KSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzdHJpY3QiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnN0cmljdFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RyaWN0XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMudW5pdC1pZFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS51bml0LWlkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1bml0SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51bml0LWlkLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwndW5pdElkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtcHJvZmlsZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VUeXBlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0iZGF0YS5oaWRlTmV3RmllbGRzIGVsc2UgcmVwb3J0U3RyYXRlZ3kiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtZGF0YS1vbi1jaGFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZXBvcnRTdHJhdGVneT5cbiAgICAgICAgICA8dGItcmVwb3J0LXN0cmF0ZWd5IFtkZWZhdWx0VmFsdWVdPSJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZS5EZXZpY2UiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0U3RyYXRlZ3kiIFtpc0V4cGFuc2lvbk1vZGVdPSJ0cnVlIi8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdGlvbi10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rpb24tdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlLW9yZGVyXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGUtb3JkZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJ5dGVPcmRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgb3JkZXIgb2YgbW9kYnVzT3JkZXJUeXBlIiBbdmFsdWVdPSJvcmRlciI+e3sgb3JkZXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud29yZC1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS53b3JkLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ3b3JkT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50bHMtY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIGNsYXNzPSJzZWN1cml0eS1jb25maWciIGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHkiPjwvdGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZz5cbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cmllcyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnJldHJpZXNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRyeU9uRW1wdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWVtcHR5XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkludmFsaWQiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb2xsLXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXkucG9sbC1wZXJpb2RcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC10aW1lXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC10aW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjb25uZWN0QXR0ZW1wdFRpbWVNcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdC1hdHRlbXB0LWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC1jb3VudDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRDb3VudCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHNcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9IndhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICA8dGItbW9kYnVzLXZhbHVlcyBbc2luZ2xlTW9kZV09InRydWUiIFtoaWRlTmV3RmllbGRzXT0iZGF0YS5oaWRlTmV3RmllbGRzIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmludmFsaWQgfHwgIXNsYXZlQ29uZmlnRm9ybUdyb3VwLmRpcnR5Ij5cbiAgICAgIHt7IGRhdGEuYnV0dG9uVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuc2xhdmVzLWNvbmZpZy1jb250YWluZXJ7d2lkdGg6ODB2dzttYXgtd2lkdGg6OTAwcHh9Omhvc3QgLnNsYXZlLW5hbWUtbGFiZWx7bWFyZ2luLXJpZ2h0OjE2cHg7Y29sb3I6IzAwMDAwMGRlfTpob3N0IC5maXhlZC10aXRsZS13aWR0aC0yNjB7bWluLXdpZHRoOjI2MHB4fTpob3N0IDo6bmctZGVlcCAuc2VjdXJpdHktY29uZmlnIC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6MjMwcHh9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn1dfSk7Y2xhc3Mgdm8gZXh0ZW5kcyBob3tjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKGUsdCxuLGEsbyksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnJvdXRlcj1uLHRoaXMuZGF0YT1hLHRoaXMuZGlhbG9nUmVmPW99Z2V0U2xhdmVSZXN1bHREYXRhKCl7Y29uc3R7dmFsdWVzOmUsdHlwZTp0LHNlcmlhbFBvcnQ6biwuLi5hfT10aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlLG89ey4uLmEsdHlwZTp0LC4uLmV9O3JldHVybiB0PT09SG4uU2VyaWFsJiYoby5wb3J0PW4pLG99YWRkRmllbGRzVG9Gb3JtR3JvdXAoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmFkZENvbnRyb2woInNlbmREYXRhT25seU9uQ2hhbmdlIix0aGlzLmZiLmNvbnRyb2woITEpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnZvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lTbGF2ZURpYWxvZ0NvbXBvbmVudCIsdm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktc2xhdmUtZGlhbG9nIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQseW8sYm8sd2EsZ29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9XX0pO2NsYXNzIHdve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy50cmFuc2xhdGU9ZSx0aGlzLmRpYWxvZz10LHRoaXMuZGlhbG9nU2VydmljZT1uLHRoaXMuZmI9YSx0aGlzLmNkcj1vLHRoaXMuaXNMZWdhY3k9ITEsdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2g9dGhpcy5mYi5jb250cm9sKCIiLHtub25OdWxsYWJsZTohMH0pLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFzdGVyRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3NsYXZlczp0aGlzLmZiLmFycmF5KFtdKX0pLHRoaXMuZGF0YVNvdXJjZT1uZXcgQ299Z2V0IHNsYXZlcygpe3JldHVybiB0aGlzLm1hc3RlckZvcm1Hcm91cC5nZXQoInNsYXZlcyIpfW5nT25Jbml0KCl7dGhpcy5tYXN0ZXJGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlVGFibGVEYXRhKGUuc2xhdmVzKSx0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50ZXh0U2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFZlKDE1MCksQmUoKChlLHQpPT4oZT8/IiIpPT09dC50cmltKCkpKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSxlLnRyaW0oKSkpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5zbGF2ZXMuY2xlYXIoKSx0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKGUuc2xhdmVzKX1lbnRlckZpbHRlck1vZGUoKXt0aGlzLnRleHRTZWFyY2hNb2RlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtjb25zdCBlPXRoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50O2UuZm9jdXMoKSxlLnNldFNlbGVjdGlvblJhbmdlKDAsMCl9ZXhpdEZpbHRlck1vZGUoKXt0aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1pZSh0KSxhPW4/dGhpcy5zbGF2ZXMuYXQodCkudmFsdWU6e307dGhpcy5nZXRTbGF2ZURpYWxvZyhhLG4/ImFjdGlvbi5hcHBseSI6ImFjdGlvbi5hZGQiKS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihuP3RoaXMuc2xhdmVzLmF0KHQpLnBhdGNoVmFsdWUoZSk6dGhpcy5zbGF2ZXMucHVzaCh0aGlzLmZiLmNvbnRyb2woZSkpLHRoaXMubWFzdGVyRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfWdldFNsYXZlRGlhbG9nKGUsdCl7cmV0dXJuIHRoaXMuaXNMZWdhY3k/dGhpcy5kaWFsb2cub3Blbih2byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e3ZhbHVlOmUsaGlkZU5ld0ZpZWxkczohMCxidXR0b25UaXRsZTp0fX0pOnRoaXMuZGlhbG9nLm9wZW4oeG8se2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOnt2YWx1ZTplLGJ1dHRvblRpdGxlOnQsaGlkZU5ld0ZpZWxkczohMX19KX1kZWxldGVTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtc2xhdmUtdGl0bGUiKSwiIix0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJih0aGlzLnNsYXZlcy5yZW1vdmVBdCh0KSx0aGlzLm1hc3RlckZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpKX0pKX11cGRhdGVUYWJsZURhdGEoZSx0KXt0JiYoZT1lLmZpbHRlcigoZT0+T2JqZWN0LnZhbHVlcyhlKS5zb21lKChlPT5lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpKSkpKSksdGhpcy5kYXRhU291cmNlLmxvYWREYXRhKGUpfXB1c2hEYXRhQXNGb3JtQXJyYXlzKGUpe2U/Lmxlbmd0aCYmZS5mb3JFYWNoKChlPT50aGlzLnNsYXZlcy5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOndvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpYLkRpYWxvZ1NlcnZpY2V9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOndvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOntpc0xlZ2FjeToiaXNMZWdhY3kifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6InNlYXJjaElucHV0RmllbGQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInNlYXJjaElucHV0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJwaXBlIix0eXBlOl8uQXN5bmNQaXBlLG5hbWU6ImFzeW5jIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpodC5NYXRNZW51LHNlbGVjdG9yOiJtYXQtbWVudSIsaW5wdXRzOlsiYmFja2Ryb3BDbGFzcyIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwieFBvc2l0aW9uIiwieVBvc2l0aW9uIiwib3ZlcmxhcFRyaWdnZXIiLCJoYXNCYWNrZHJvcCIsImNsYXNzIiwiY2xhc3NMaXN0Il0sb3V0cHV0czpbImNsb3NlZCIsImNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6aHQuTWF0TWVudVRyaWdnZXIsc2VsZWN0b3I6IlttYXQtbWVudS10cmlnZ2VyLWZvcl0sIFttYXRNZW51VHJpZ2dlckZvcl0iLGlucHV0czpbIm1hdC1tZW51LXRyaWdnZXItZm9yIiwibWF0TWVudVRyaWdnZXJGb3IiLCJtYXRNZW51VHJpZ2dlckRhdGEiLCJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyJdLG91dHB1dHM6WyJtZW51T3BlbmVkIiwib25NZW51T3BlbiIsIm1lbnVDbG9zZWQiLCJvbk1lbnVDbG9zZSJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFRhYmxlLHNlbGVjdG9yOiJtYXQtdGFibGUsIHRhYmxlW21hdC10YWJsZV0iLGV4cG9ydEFzOlsibWF0VGFibGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGxEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJSb3dEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJSb3dEZWZdIixpbnB1dHM6WyJtYXRIZWFkZXJSb3dEZWYiLCJtYXRIZWFkZXJSb3dEZWZTdGlja3kiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENvbHVtbkRlZixzZWxlY3RvcjoiW21hdENvbHVtbkRlZl0iLGlucHV0czpbIm1hdENvbHVtbkRlZiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbERlZixzZWxlY3RvcjoiW21hdENlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdFJvd0RlZixzZWxlY3RvcjoiW21hdFJvd0RlZl0iLGlucHV0czpbIm1hdFJvd0RlZkNvbHVtbnMiLCJtYXRSb3dEZWZXaGVuIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsLHNlbGVjdG9yOiJtYXQtaGVhZGVyLWNlbGwsIHRoW21hdC1oZWFkZXItY2VsbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbCxzZWxlY3RvcjoibWF0LWNlbGwsIHRkW21hdC1jZWxsXSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRIZWFkZXJSb3csc2VsZWN0b3I6Im1hdC1oZWFkZXItcm93LCB0clttYXQtaGVhZGVyLXJvd10iLGV4cG9ydEFzOlsibWF0SGVhZGVyUm93Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRSb3csc2VsZWN0b3I6Im1hdC1yb3csIHRyW21hdC1yb3ddIixleHBvcnRBczpbIm1hdFJvdyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFNob3dIaWRlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeFNob3ddLCBbZnhTaG93LnByaW50XSwgIFtmeFNob3cueHNdLCBbZnhTaG93LnNtXSwgW2Z4U2hvdy5tZF0sIFtmeFNob3cubGddLCBbZnhTaG93LnhsXSwgIFtmeFNob3cubHQtc21dLCBbZnhTaG93Lmx0LW1kXSwgW2Z4U2hvdy5sdC1sZ10sIFtmeFNob3cubHQteGxdLCAgW2Z4U2hvdy5ndC14c10sIFtmeFNob3cuZ3Qtc21dLCBbZnhTaG93Lmd0LW1kXSwgW2Z4U2hvdy5ndC1sZ10sICBbZnhIaWRlXSwgW2Z4SGlkZS5wcmludF0sICBbZnhIaWRlLnhzXSwgW2Z4SGlkZS5zbV0sIFtmeEhpZGUubWRdLCBbZnhIaWRlLmxnXSwgW2Z4SGlkZS54bF0sICBbZnhIaWRlLmx0LXNtXSwgW2Z4SGlkZS5sdC1tZF0sIFtmeEhpZGUubHQtbGddLCBbZnhIaWRlLmx0LXhsXSwgIFtmeEhpZGUuZ3QteHNdLCBbZnhIaWRlLmd0LXNtXSwgW2Z4SGlkZS5ndC1tZF0sIFtmeEhpZGUuZ3QtbGddIixpbnB1dHM6WyJmeFNob3ciLCJmeFNob3cucHJpbnQiLCJmeFNob3cueHMiLCJmeFNob3cuc20iLCJmeFNob3cubWQiLCJmeFNob3cubGciLCJmeFNob3cueGwiLCJmeFNob3cubHQtc20iLCJmeFNob3cubHQtbWQiLCJmeFNob3cubHQtbGciLCJmeFNob3cubHQteGwiLCJmeFNob3cuZ3QteHMiLCJmeFNob3cuZ3Qtc20iLCJmeFNob3cuZ3QtbWQiLCJmeFNob3cuZ3QtbGciLCJmeEhpZGUiLCJmeEhpZGUucHJpbnQiLCJmeEhpZGUueHMiLCJmeEhpZGUuc20iLCJmeEhpZGUubWQiLCJmeEhpZGUubGciLCJmeEhpZGUueGwiLCJmeEhpZGUubHQtc20iLCJmeEhpZGUubHQtbWQiLCJmeEhpZGUubHQtbGciLCJmeEhpZGUubHQteGwiLCJmeEhpZGUuZ3QteHMiLCJmeEhpZGUuZ3Qtc20iLCJmeEhpZGUuZ3QtbWQiLCJmeEhpZGUuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNNYXN0ZXJUYWJsZUNvbXBvbmVudCIsd28pLEhlKFt4dCgpXSx3by5wcm90b3R5cGUsImlzTGVnYWN5Iix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntzZWFyY2hJbnB1dEZpZWxkOlt7dHlwZTpvLGFyZ3M6WyJzZWFyY2hJbnB1dCJdfV0saXNMZWdhY3k6W3t0eXBlOmF9XX19KTtjbGFzcyBDbyBleHRlbmRzIFJ7Y29uc3RydWN0b3IoKXtzdXBlcigpfX1lKCJTbGF2ZXNEYXRhc291cmNlIixDbyk7Y2xhc3MgVG8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5lbmFibGVTbGF2ZUNvbnRyb2w9bmV3IHllKCExKSx0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVTbGF2ZUVuYWJsaW5nKGUpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzbGF2ZSIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohIXRoaXMub25DaGFuZ2V9KX0pKX13cml0ZVZhbHVlKGUpe3N1cGVyLndyaXRlVmFsdWUoZSksdGhpcy5vbkVuYWJsZVNsYXZlQ29udHJvbChlKX12YWxpZGF0ZSgpe2NvbnN0e21hc3RlcjplLHNsYXZlOnR9PXRoaXMuYmFzaWNGb3JtR3JvdXAudmFsdWUsbj0hZT8uc2xhdmVzPy5sZW5ndGgmJihlZSh0LHt9KXx8IXQpO3JldHVybiF0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkfHxuP3tiYXNpY0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fTpudWxsfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXN0ZXI6W10sc2xhdmU6W119KX11cGRhdGVTbGF2ZUVuYWJsaW5nKGUpe2U/dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInNsYXZlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgic2xhdmUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1vbkVuYWJsZVNsYXZlQ29udHJvbChlKXt0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC5zZXRWYWx1ZSghIWUuc2xhdmUmJiFlZShlLnNsYXZlLHt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpUbyxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6VG8sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnR9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdEaXJlY3RpdmUiLFRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W119KTtjbGFzcyBTb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNQcm90b2NvbExhYmVsc01hcD16bix0aGlzLk1vZGJ1c01ldGhvZExhYmVsc01hcD1Lbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c09yZGVyVHlwZT1PYmplY3QudmFsdWVzKEpuKSx0aGlzLk1vZGJ1c1Byb3RvY29sVHlwZT1Ibix0aGlzLm1vZGJ1c0JhdWRyYXRlcz1sYSx0aGlzLmlzU2xhdmVFbmFibGVkPSExLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSJdLHRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cz1bInBvcnQiLCJzZWN1cml0eSIsImhvc3QiXSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0huLlRDUF0saG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSxzZXJpYWxQb3J0OlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2Q6W1duLlNPQ0tFVF0sdW5pdElkOltudWxsLFt1ZS5yZXF1aXJlZF1dLGJhdWRyYXRlOlt0aGlzLm1vZGJ1c0JhdWRyYXRlc1swXV0sZGV2aWNlTmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlVHlwZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9sbFBlcmlvZDpbNWUzLFt1ZS5yZXF1aXJlZF1dLHNlbmREYXRhVG9UaGluZ3NCb2FyZDpbITFdLGJ5dGVPcmRlcjpbSm4uQklHXSx3b3JkT3JkZXI6W0puLkJJR10sc2VjdXJpdHk6W10saWRlbnRpdHk6dGhpcy5mYi5ncm91cCh7dmVuZG9yTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdENvZGU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHZlbmRvclVybDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdE5hbWU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLG1vZGVsTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx2YWx1ZXM6W119KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCl9Z2V0IHByb3RvY29sVHlwZSgpe3JldHVybiB0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzbGF2ZUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5wYXRjaFZhbHVlKCEhZS5zZWN1cml0eSYmIWVlKGUuc2VjdXJpdHkse30pKSx0aGlzLnVwZGF0ZVNsYXZlQ29uZmlnKGUpfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5pc1NsYXZlRW5hYmxlZD0hZSx0aGlzLnVwZGF0ZUZvcm1FbmFibGVTdGF0ZSgpfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PntlLnR5cGU9PT1Ibi5TZXJpYWwmJihlLnBvcnQ9ZS5zZXJpYWxQb3J0LGRlbGV0ZSBlLnNlcmlhbFBvcnQpLHRoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlRm9ybUVuYWJsZVN0YXRlKCksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUVuYWJsZVN0YXRlKCl7dGhpcy5pc1NsYXZlRW5hYmxlZD8odGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpLHRoaXMudXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCksdGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZSh0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWUpfW9ic2VydmVTaG93U2VjdXJpdHkoKXt0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZShlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxlKGUpe2UmJnRoaXMuaXNTbGF2ZUVuYWJsZWQmJnRoaXMucHJvdG9jb2xUeXBlIT09SG4uU2VyaWFsP3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJzZWN1cml0eSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCl7Y29uc3QgZT10aGlzLnByb3RvY29sVHlwZT09PUhuLlNlcmlhbCx0PWU/dGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cyxuPWU/dGhpcy50Y3BVZHBTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5czt0aGlzLmlzU2xhdmVFbmFibGVkJiZ0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKX11cGRhdGVTbGF2ZUNvbmZpZyhlKXtjb25zdHt0eXBlOnQ9SG4uVENQLG1ldGhvZDpuPVduLlJUVSx1bml0SWQ6YT0wLGRldmljZU5hbWU6bz0iIixkZXZpY2VUeXBlOmk9IiIscG9sbFBlcmlvZDpyPTVlMyxzZW5kRGF0YVRvVGhpbmdzQm9hcmQ6cz0hMSxieXRlT3JkZXI6bD1Kbi5CSUcsd29yZE9yZGVyOmM9Sm4uQklHLHNlY3VyaXR5OnA9e30saWRlbnRpdHk6bT17dmVuZG9yTmFtZToiIixwcm9kdWN0Q29kZToiIix2ZW5kb3JVcmw6IiIscHJvZHVjdE5hbWU6IiIsbW9kZWxOYW1lOiIifSx2YWx1ZXM6ZD17fSxiYXVkcmF0ZTp1PXRoaXMubW9kYnVzQmF1ZHJhdGVzWzBdLGhvc3Q6Zz0iIixwb3J0OmY9bnVsbH09ZSx5PXt0eXBlOnQsbWV0aG9kOm4sdW5pdElkOmEsZGV2aWNlTmFtZTpvLGRldmljZVR5cGU6aSxwb2xsUGVyaW9kOnIsc2VuZERhdGFUb1RoaW5nc0JvYXJkOiEhcyxieXRlT3JkZXI6bCx3b3JkT3JkZXI6YyxzZWN1cml0eTpwLGlkZW50aXR5Om0sdmFsdWVzOmQsYmF1ZHJhdGU6dSxob3N0OnQ9PT1Ibi5TZXJpYWw/IiI6Zyxwb3J0OnQ9PT1Ibi5TZXJpYWw/bnVsbDpmLHNlcmlhbFBvcnQ6dD09PUhuLlNlcmlhbD9mOiIifTt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnNldFZhbHVlKHkse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnlvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtdmFsdWVzIixpbnB1dHM6WyJzaW5nbGVNb2RlIiwiaGlkZU5ld0ZpZWxkcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJpc01hc3RlciJdfSx7a2luZDoicGlwZSIsdHlwZTp3YSxuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+U28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELHlvLGJvLHdhLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dfSk7Y2xhc3Mga28gZXh0ZW5kcyBUb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc0xlZ2FjeT0hMX1tYXBDb25maWdUb0Zvcm1WYWx1ZSh7bWFzdGVyOmUsc2xhdmU6dH0pe3JldHVybnttYXN0ZXI6ZT8uc2xhdmVzP2U6e3NsYXZlczpbXX0sc2xhdmU6dD8/e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTprbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1iYXNpYy1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5rbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpTbyxzZWxlY3RvcjoidGItbW9kYnVzLXNsYXZlLWNvbmZpZyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d28sc2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGlucHV0czpbImlzTGVnYWN5Il19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdDb21wb25lbnQiLGtvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmtvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+a28pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBMbyBleHRlbmRzIFRve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzTGVnYWN5PSEwfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXI/LnNsYXZlcz9lLm1hc3Rlcjp7c2xhdmVzOltdfSxzbGF2ZTplLnNsYXZlP2hhLm1hcFNsYXZlVG9VcGdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6TG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubWFzdGVyLWNvbm5lY3Rpb25zXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDx0Yi1tb2RidXMtbWFzdGVyLXRhYmxlIFtpc0xlZ2FjeV09ImlzTGVnYWN5IiBmb3JtQ29udHJvbE5hbWU9Im1hc3RlciI+PC90Yi1tb2RidXMtbWFzdGVyLXRhYmxlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIiPnt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMtc2VydmVyXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIFtmb3JtQ29udHJvbF09ImVuYWJsZVNsYXZlQ29udHJvbCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8dGItbW9kYnVzLXNsYXZlLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNsYXZlIj48L3RiLW1vZGJ1cy1zbGF2ZS1jb25maWc+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlNvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2xhdmUtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3byxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOlsiaXNMZWdhY3kiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lCYXNpY0NvbmZpZ0NvbXBvbmVudCIsTG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBGbyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm1hcHBpbmdUeXBlcz1mbix0aGlzLmlzTGVnYWN5PSEwfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXBwaW5nOltdLHNlcnZlcjpbXX0pfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybntzZXJ2ZXI6ZS5zZXJ2ZXI/eGEubWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZS5zZXJ2ZXIpOnt9LG1hcHBpbmc6ZS5zZXJ2ZXI/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUuc2VydmVyLm1hcHBpbmcpOltdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24oZSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Rm8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Rm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+Rm8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5GbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgSW8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5NYXBwaW5nVHlwZT1mbn1pbml0QmFzaWNGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7bWFwcGluZzpbXSxyZXF1ZXN0c01hcHBpbmc6W10sYnJva2VyOltdLHdvcmtlcnM6W119KX1nZXRSZXF1ZXN0RGF0YUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGxlKGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChuPT57Zm9yKGNvbnN0IGEgb2YgZVtuXSl0LnB1c2goe3JlcXVlc3RUeXBlOm4scmVxdWVzdFZhbHVlOmF9KX0pKSx0fWdldFJlcXVlc3REYXRhT2JqZWN0KGUpe3JldHVybiBlLnJlZHVjZSgoKGUse3JlcXVlc3RUeXBlOnQscmVxdWVzdFZhbHVlOm59KT0+KGVbdF0ucHVzaChuKSxlKSkse2Nvbm5lY3RSZXF1ZXN0czpbXSxkaXNjb25uZWN0UmVxdWVzdHM6W10sYXR0cmlidXRlUmVxdWVzdHM6W10sYXR0cmlidXRlVXBkYXRlczpbXSxzZXJ2ZXJTaWRlUnBjOltdfSl9Z2V0QnJva2VyTWFwcGVkVmFsdWUoZSx0KXtyZXR1cm57Li4uZSxtYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnM/PzEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcj8/MTB9fXdyaXRlVmFsdWUoZSl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLm1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOklvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6SW8sZGVjb3JhdG9yczpbe3R5cGU6c31dfSk7Y2xhc3MgQW8gZXh0ZW5kcyBJb3ttYXBDb25maWdUb0Zvcm1WYWx1ZShlKXtjb25zdHticm9rZXI6dCxtYXBwaW5nOm49W10sY29ubmVjdFJlcXVlc3RzOmE9W10sZGlzY29ubmVjdFJlcXVlc3RzOm89W10sYXR0cmlidXRlUmVxdWVzdHM6aT1bXSxhdHRyaWJ1dGVVcGRhdGVzOnI9W10sc2VydmVyU2lkZVJwYzpzPVtdfT1lLGw9bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmEsZGlzY29ubmVjdFJlcXVlc3RzOm8sYXR0cmlidXRlUmVxdWVzdHM6aSxhdHRyaWJ1dGVVcGRhdGVzOnIsc2VydmVyU2lkZVJwYzpzfSk7cmV0dXJue3dvcmtlcnM6dCYmKHQubWF4TnVtYmVyT2ZXb3JrZXJzfHx0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXIpP3ttYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnMsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjp0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJ9Ont9LG1hcHBpbmc6bWEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKG4pfHxbXSxicm9rZXI6dHx8e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShsKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e30saT1vPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fTtyZXR1cm57YnJva2VyOnRoaXMuZ2V0QnJva2VyTWFwcGVkVmFsdWUodCxuKSxtYXBwaW5nOm1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGEpLC4uLm1hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihpKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpBbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuYnJva2VyLmNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJicm9rZXIiPjwvdGItYnJva2VyLWNvbmZpZy1jb250cm9sPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZGF0YS1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJtYXBwaW5nIiBbcmVxdWlyZWRdPSJ0cnVlIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5EQVRBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RzTWFwcGluZyIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuUkVRVUVTVFMiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LndvcmtlcnMtc2V0dGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICA8dGItd29ya2Vycy1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9IndvcmtlcnMiPjwvdGItd29ya2Vycy1jb25maWctY29udHJvbD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuPC9tYXQtdGFiLWdyb3VwPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dW8sc2VsZWN0b3I6InRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm1vLHNlbGVjdG9yOiJ0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLXRhYmxlIixpbnB1dHM6WyJyZXF1aXJlZCIsIm1hcHBpbmdUeXBlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxsbyx1byxtbyxyb10sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmJyb2tlci5jb25uZWN0aW9uXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItYnJva2VyLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0iYnJva2VyIj48L3RiLWJyb2tlci1jb25maWctY29udHJvbD5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuREFUQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkucmVxdWVzdHMtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0c01hcHBpbmciIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS53b3JrZXJzLXNldHRpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgPHRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJ3b3JrZXJzIj48L3RiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2w+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2hlaWdodDoxMDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBObyBleHRlbmRzIElve21hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe2NvbnN0e2Jyb2tlcjp0LG1hcHBpbmc6bj1bXSxyZXF1ZXN0c01hcHBpbmc6YX09ZTtyZXR1cm57d29ya2Vyczp0JiYodC5tYXhOdW1iZXJPZldvcmtlcnN8fHQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcik/e21heE51bWJlck9mV29ya2Vyczp0Lm1heE51bWJlck9mV29ya2VycyxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcn06e30sbWFwcGluZzpuPz9bXSxicm9rZXI6dD8/e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShhKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e307cmV0dXJue2Jyb2tlcjp0aGlzLmdldEJyb2tlck1hcHBlZFZhbHVlKHQsbiksbWFwcGluZzphLHJlcXVlc3RzTWFwcGluZzpvPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpObyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpObyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtYmFzaWMtY29uZmlnIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Tm8pKSxtdWx0aTohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiLHNlbGVjdG9yOiJtYXQtdGFiIixpbnB1dHM6WyJkaXNhYmxlZCIsImxhYmVsIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImxhYmVsQ2xhc3MiLCJib2R5Q2xhc3MiXSxleHBvcnRBczpbIm1hdFRhYiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiR3JvdXAsc2VsZWN0b3I6Im1hdC10YWItZ3JvdXAiLGlucHV0czpbImNvbG9yIiwiZml0SW5rQmFyVG9Db250ZW50IiwibWF0LXN0cmV0Y2gtdGFicyIsImR5bmFtaWNIZWlnaHQiLCJzZWxlY3RlZEluZGV4IiwiaGVhZGVyUG9zaXRpb24iLCJhbmltYXRpb25EdXJhdGlvbiIsImNvbnRlbnRUYWJJbmRleCIsImRpc2FibGVQYWdpbmF0aW9uIiwiZGlzYWJsZVJpcHBsZSIsInByZXNlcnZlQ29udGVudCIsImJhY2tncm91bmRDb2xvciIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiXSxvdXRwdXRzOlsic2VsZWN0ZWRJbmRleENoYW5nZSIsImZvY3VzQ2hhbmdlIiwiYW5pbWF0aW9uRG9uZSIsInNlbGVjdGVkVGFiQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1byxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6bW8sc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5vLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tcXR0LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8sdW8sbW8scm9dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgTW97aXNFcnJvclN0YXRlKGUpe3JldHVybiBlJiZlLmludmFsaWR9fWUoIkZvcmNlRXJyb3JTdGF0ZU1hdGNoZXIiLE1vKTtjbGFzcyBFbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5mYj10LHRoaXMudHJhbnNsYXRlPW4sdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWEsdGhpcy5kaWFsb2dTZXJ2aWNlPW8sdGhpcy5kaWFsb2c9aSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZT1yLHRoaXMuem9uZT1zLHRoaXMudXRpbHM9bCx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1jLHRoaXMuY2Q9cCx0aGlzLkNvbm5lY3RvclR5cGU9X3QsdGhpcy5hbGxvd0Jhc2ljQ29uZmlnPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5nYXRld2F5TG9nTGV2ZWw9T2JqZWN0LnZhbHVlcyhNdCksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiZW5hYmxlZCIsImtleSIsInR5cGUiLCJzeW5jU3RhdHVzIiwiZXJyb3JzIiwiYWN0aW9ucyJdLHRoaXMuR2F0ZXdheUNvbm5lY3RvclR5cGVzVHJhbnNsYXRlc01hcD1IdCx0aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcz1vbix0aGlzLlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlPWxuLHRoaXMubW9kZT10aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyx0aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3Q9bmV3IFNlLHRoaXMuYWN0aXZlRGF0YT1bXSx0aGlzLmluYWN0aXZlRGF0YT1bXSx0aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGE9W10sdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy5vbkVycm9yc1VwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfX0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0PW5ldyBTZSx0aGlzLmluaXREYXRhU291cmNlcygpLHRoaXMuaW5pdENvbm5lY3RvckZvcm0oKSx0aGlzLm9ic2VydmVBdHRyaWJ1dGVDaGFuZ2UoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGFTb3VyY2Uuc29ydD10aGlzLnNvcnQsdGhpcy5kYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3I9dGhpcy5nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCksdGhpcy5jdHguJHNjb3BlLmdhdGV3YXlDb25uZWN0b3JzPXRoaXMsdGhpcy5sb2FkQ29ubmVjdG9ycygpLHRoaXMubG9hZEdhdGV3YXlTdGF0ZSgpLHRoaXMub2JzZXJ2ZU1vZGVDaGFuZ2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfW9uU2F2ZUNvbm5lY3Rvcigpe3RoaXMuc2F2ZUNvbm5lY3Rvcih0aGlzLmdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKHRoaXMuY29ubmVjdG9yRm9ybS52YWx1ZSksITEpfXNhdmVDb25uZWN0b3IoZSx0PSEwKXtjb25zdCBuPXR8fHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyh0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSk/TC5TSEFSRURfU0NPUEU6TC5TRVJWRVJfU0NPUEU7QWUodGhpcy5nZXRFbnRpdHlBdHRyaWJ1dGVUYXNrcyhlLG4pKS5waXBlKE9lKDEpKS5zdWJzY3JpYmUoKG49Pnt0aGlzLnNob3dUb2FzdCh0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuY29ubmVjdG9yLWNyZWF0ZWQiKTp0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmNvbm5lY3Rvci11cGRhdGVkIikpLHRoaXMuaW5pdGlhbENvbm5lY3Rvcj1lLHRoaXMudXBkYXRlRGF0YSghMCksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9KSl9Z2V0RW50aXR5QXR0cmlidXRlVGFza3MoZSx0KXtjb25zdCBuPVtdLGE9W3trZXk6ZS5uYW1lLHZhbHVlOmV9XSxvPVtdLGk9IXRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TSEFSRURfU0NPUEV8fCF0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TRVJWRVJfU0NPUEUscj10aGlzLmluaXRpYWxDb25uZWN0b3ImJnRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lIT09ZS5uYW1lO3JldHVybiByJiYoby5wdXNoKHtrZXk6dGhpcy5pbml0aWFsQ29ubmVjdG9yLm5hbWV9KSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCExKSksaSYmKHQ9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnMucHVzaChlLm5hbWUpOnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLnB1c2goZS5uYW1lKSksKHJ8fGkpJiZuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2sodCkpLG4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsdCxhKSksby5sZW5ndGgmJm4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSx0LG8pKSxufWdldFNhdmVFbnRpdHlBdHRyaWJ1dGVzVGFzayhlKXtjb25zdCB0PWU9PT1MLlNIQVJFRF9TQ09QRT8iYWN0aXZlX2Nvbm5lY3RvcnMiOiJpbmFjdGl2ZV9jb25uZWN0b3JzIixuPWU9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5zYXZlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxlLFt7a2V5OnQsdmFsdWU6bn1dKX1yZW1vdmVDb25uZWN0b3JGcm9tTGlzdChlLHQpe2NvbnN0IG49dD90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMsYT1uLmluZGV4T2YoZSk7LTEhPT1hJiZuLnNwbGljZShhLDEpfWdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKGUpe2NvbnN0IHQ9ey4uLmV9O3JldHVybiB0LmNvbmZpZ3VyYXRpb249YCR7Y2UodC5uYW1lKX0uanNvbmAsZGVsZXRlIHQuYmFzaWNDb25maWcsdC50eXBlIT09X3QuR1JQQyYmZGVsZXRlIHQua2V5LHQudHlwZSE9PV90LkNVU1RPTSYmZGVsZXRlIHQuY2xhc3MsdC50eXBlPT09X3QuTU9EQlVTJiZ0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0odC5jb25maWdWZXJzaW9uKSYmKHQucmVwb3J0U3RyYXRlZ3l8fCh0LnJlcG9ydFN0cmF0ZWd5PXt0eXBlOnNuLk9uUmVwb3J0UGVyaW9kLHJlcG9ydFBlcmlvZDpsbi5Db25uZWN0b3J9LGRlbGV0ZSB0LnNlbmREYXRhT25seU9uQ2hhbmdlKSksdGhpcy5nYXRld2F5VmVyc2lvbiYmIXQuY29uZmlnVmVyc2lvbiYmKHQuY29uZmlnVmVyc2lvbj10aGlzLmdhdGV3YXlWZXJzaW9uKSx0LnRzPURhdGUubm93KCksdH11cGRhdGVEYXRhKGU9ITEpe3RoaXMucGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5PXRoaXMuc29ydC5hY3RpdmUsdGhpcy5wYWdlTGluay5zb3J0T3JkZXIuZGlyZWN0aW9uPXdbdGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpXSx0aGlzLmF0dHJpYnV0ZURhdGFTb3VyY2UubG9hZEF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5DTElFTlRfU0NPUEUsdGhpcy5wYWdlTGluayxlKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZURhdGE9ZS5kYXRhLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKSx0aGlzLmdlbmVyYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5zZXRDbGllbnREYXRhKGUpfSkpLHRoaXMuaW5hY3RpdmVDb25uZWN0b3JzRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuc2hhcmVkQXR0cmlidXRlRGF0YT1lLmRhdGEuZmlsdGVyKChlPT50aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5jbHVkZXMoZS5rZXkpKSksdGhpcy5jb21iaW5lRGF0YSgpfSkpLHRoaXMuc2VydmVyRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuaW5hY3RpdmVEYXRhPWUuZGF0YS5maWx0ZXIoKGU9PnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKX0pKX1pc0Nvbm5lY3RvclN5bmNlZChlKXtjb25zdCB0PWUudmFsdWU7aWYoIXQudHN8fGUuc2tpcFN5bmN8fCF0aGlzLmlzR2F0ZXdheUFjdGl2ZSlyZXR1cm4hMTtpZigtMT09PXRoaXMuYWN0aXZlRGF0YS5maW5kSW5kZXgoKGU9Pigic3RyaW5nIj09dHlwZW9mIGUudmFsdWU/SlNPTi5wYXJzZShlLnZhbHVlKTplLnZhbHVlKS5uYW1lPT09dC5uYW1lKSkpcmV0dXJuITE7cmV0dXJuLTEhPT10aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGEuZmluZEluZGV4KChlPT57Y29uc3Qgbj1lLnZhbHVlLGE9bi5uYW1lPT09dC5uYW1lLG89ZWUobi5jb25maWd1cmF0aW9uSnNvbix7fSkmJmEsaT10aGlzLmhhc1NhbWVDb25maWcobi5jb25maWd1cmF0aW9uSnNvbix0LmNvbmZpZ3VyYXRpb25Kc29uKSxyPW4udHMmJm4udHM8PXQudHM7cmV0dXJuIGEmJnImJihpfHxvKX0pKX1oYXNTYW1lQ29uZmlnKGUsdCl7Y29uc3R7bmFtZTpuLGlkOmEsZW5hYmxlUmVtb3RlTG9nZ2luZzpvLGxvZ0xldmVsOmkscmVwb3J0U3RyYXRlZ3k6cixjb25maWdWZXJzaW9uOnMsLi4ubH09ZSx7bmFtZTpjLGlkOnAsZW5hYmxlUmVtb3RlTG9nZ2luZzptLGxvZ0xldmVsOmQscmVwb3J0U3RyYXRlZ3k6dSxjb25maWdWZXJzaW9uOmcsLi4uZn09dDtyZXR1cm4gZWUobCxmKX1jb21iaW5lRGF0YSgpe2NvbnN0IGU9Wy4uLnRoaXMuYWN0aXZlRGF0YSwuLi50aGlzLmluYWN0aXZlRGF0YSwuLi50aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGFdLnJlZHVjZSgoKGUsdCk9Pntjb25zdCBuPWUuZmluZEluZGV4KChlPT5lLmtleT09PXQua2V5KSk7cmV0dXJuLTE9PT1uP2UucHVzaCh0KTp0Lmxhc3RVcGRhdGVUcz5lW25dLmxhc3RVcGRhdGVUcyYmIXRoaXMuaXNDb25uZWN0b3JTeW5jZWQoZVtuXSkmJihlW25dPXsuLi50LHNraXBTeW5jOiEwfSksZX0pLFtdKTt0aGlzLmRhdGFTb3VyY2UuZGF0YT1lLm1hcCgoZT0+KHsuLi5lLHZhbHVlOiJzdHJpbmciPT10eXBlb2YgZS52YWx1ZT9KU09OLnBhcnNlKGUudmFsdWUpOmUudmFsdWV9KSkpfWNsZWFyT3V0Q29ubmVjdG9yRm9ybSgpe3RoaXMuaW5pdGlhbENvbm5lY3Rvcj1udWxsLHRoaXMuY29ubmVjdG9yRm9ybS5zZXRWYWx1ZSh7bW9kZTpvbi5CQVNJQyxuYW1lOiIiLHR5cGU6X3QuTVFUVCxzZW5kRGF0YU9ubHlPbkNoYW5nZTohMSxlbmFibGVSZW1vdGVMb2dnaW5nOiExLGxvZ0xldmVsOk10LklORk8sa2V5OiJhdXRvIixjbGFzczoiIixjb25maWd1cmF0aW9uOiIiLGNvbmZpZ3VyYXRpb25Kc29uOnt9LGJhc2ljQ29uZmlnOnt9LGNvbmZpZ1ZlcnNpb246IiIscmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9c2VsZWN0Q29ubmVjdG9yKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPXQudmFsdWU7bj8ubmFtZSE9PXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZSYmdGhpcy5jb25maXJtQ29ubmVjdG9yQ2hhbmdlKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5zZXRGb3JtVmFsdWUobil9KSl9aXNTYW1lQ29ubmVjdG9yKGUpe2lmKCF0aGlzLmluaXRpYWxDb25uZWN0b3IpcmV0dXJuITE7Y29uc3QgdD1lLnZhbHVlO3JldHVybiB0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZT09PXQubmFtZX1zaG93VG9hc3QoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh7dHlwZToiW05vdGlmaWNhdGlvbl0gU2hvdyIsbm90aWZpY2F0aW9uOnttZXNzYWdlOmUsdHlwZToic3VjY2VzcyIsZHVyYXRpb246MWUzLHZlcnRpY2FsUG9zaXRpb246InRvcCIsaG9yaXpvbnRhbFBvc2l0aW9uOiJsZWZ0Iix0YXJnZXQ6ImRhc2hib2FyZFJvb3QiLGZvcmNlRGlzbWlzczohMH19KX1yZXR1cm5UeXBlKGUpe2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4gdGhpcy5HYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldCh0LnR5cGUpfWRlbGV0ZUNvbm5lY3RvcihlLHQpe3Q/LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49YERlbGV0ZSBjb25uZWN0b3IgIiR7ZS5rZXl9Ij9gO3RoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG4sIkFsbCBjb25uZWN0b3IgZGF0YSB3aWxsIGJlIGRlbGV0ZWQuIiwiQ2FuY2VsIiwiRGVsZXRlIikucGlwZShPZSgxKSxVZSgodD0+e2lmKCF0KXJldHVybjtjb25zdCBuPVtdLGE9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUudmFsdWU/Lm5hbWUpP0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVybiBuLnB1c2godGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmRlbGV0ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsYSxbZV0pKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCExKSxuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2soYSkpLEFlKG4pfSkpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSE9PWUua2V5fHwodGhpcy5jbGVhck91dENvbm5lY3RvckZvcm0oKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSx0aGlzLmNvbm5lY3RvckZvcm0uZGlzYWJsZSgpKSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWNvbm5lY3RvckxvZ3MoZSx0KXt0JiZ0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49Sih0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIuZ2V0U3RhdGVQYXJhbXMoKSk7bi5jb25uZWN0b3JfbG9ncz1lLG4udGFyZ2V0RW50aXR5UGFyYW1OYW1lPSJjb25uZWN0b3JfbG9ncyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX2xvZ3MiLG4pfWNvbm5lY3RvclJwYyhlLHQpe3QmJnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTtuLmNvbm5lY3Rvcl9ycGM9ZSxuLnRhcmdldEVudGl0eVBhcmFtTmFtZT0iY29ubmVjdG9yX3JwYyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX3JwYyIsbil9b25FbmFibGVDb25uZWN0b3IoZSl7ZS52YWx1ZS50cz0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLnVwZGF0ZUFjdGl2ZUNvbm5lY3RvcktleXMoZS5rZXkpLHRoaXMuYXR0cmlidXRlVXBkYXRlU3ViamVjdC5uZXh0KGUpfWdldEVycm9yc0NvdW50KGUpe2NvbnN0IHQ9ZS5rZXksbj10aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24uZGF0YS5maW5kKChlPT5lJiZlLmRhdGFLZXkubmFtZT09PWAke3R9X0VSUk9SU19DT1VOVGApKTtyZXR1cm4gbiYmdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKHQpP24uZGF0YVswXVsxXXx8MDoiSW5hY3RpdmUifW9uQWRkQ29ubmVjdG9yKGUpe2U/LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29uZmlybUNvbm5lY3RvckNoYW5nZSgpLnBpcGUoT2UoMSksTWUoQm9vbGVhbiksVWUoKCgpPT50aGlzLm9wZW5BZGRDb25uZWN0b3JEaWFsb2coKSkpLE1lKEJvb2xlYW4pKS5zdWJzY3JpYmUoKGU9PnRoaXMuYWRkQ29ubmVjdG9yKGUpKSl9YWRkQ29ubmVjdG9yKGUpe3RoaXMuY29ubmVjdG9yRm9ybS5kaXNhYmxlZCYmdGhpcy5jb25uZWN0b3JGb3JtLmVuYWJsZSgpLGUuY29uZmlndXJhdGlvbkpzb258fChlLmNvbmZpZ3VyYXRpb25Kc29uPXt9KSx0aGlzLmdhdGV3YXlWZXJzaW9uJiYhZS5jb25maWdWZXJzaW9uJiYoZS5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLGUuYmFzaWNDb25maWc9ZS5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9ZTtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZTt0aGlzLnNldEluaXRpYWxDb25uZWN0b3JWYWx1ZXMoZSksdGhpcy5zYXZlQ29ubmVjdG9yKHRoaXMuZ2V0VXBkYXRlZENvbm5lY3RvckRhdGEoZSkpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9c2V0SW5pdGlhbENvbm5lY3RvclZhbHVlcyhlKXtjb25zdHtiYXNpY0NvbmZpZzp0LG1vZGU6biwuLi5hfT1lO3RoaXMudG9nZ2xlUmVwb3J0U3RyYXRlZ3koZS50eXBlKSx0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikuc2V0VmFsdWUodGhpcy5hbGxvd0Jhc2ljQ29uZmlnLmhhcyhlLnR5cGUpP2UubW9kZT8/b24uQkFTSUM6bnVsbCx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLnBhdGNoVmFsdWUoYSx7ZW1pdEV2ZW50OiExfSl9b3BlbkFkZENvbm5lY3RvckRpYWxvZygpe3JldHVybiB0aGlzLmN0eC5uZ1pvbmUucnVuKCgoKT0+dGhpcy5kaWFsb2cub3Blbih0byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e2RhdGFTb3VyY2VEYXRhOnRoaXMuZGF0YVNvdXJjZS5kYXRhLGdhdGV3YXlWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb259fSkuYWZ0ZXJDbG9zZWQoKSkpfXVuaXFOYW1lUmVxdWlyZWQoKXtyZXR1cm4gZT0+e2NvbnN0IHQ9ZS52YWx1ZT8udHJpbSgpLnRvTG93ZXJDYXNlKCksbj10aGlzLmRhdGFTb3VyY2UuZGF0YS5zb21lKChlPT5lLnZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKT09PXQpKSxhPXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZS50b0xvd2VyQ2FzZSgpPT09dDtyZXR1cm4gbiYmIWE/e2R1cGxpY2F0ZU5hbWU6e3ZhbGlkOiExfX06bnVsbH19aW5pdERhdGFTb3VyY2VzKCl7Y29uc3QgZT17cHJvcGVydHk6ImtleSIsZGlyZWN0aW9uOncuQVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKDFlMywwLG51bGwsZSksdGhpcy5hdHRyaWJ1dGVEYXRhU291cmNlPW5ldyBMYSh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2UsdGhpcy56b25lLHRoaXMudHJhbnNsYXRlKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9yc0RhdGFTb3VyY2U9bmV3IExhKHRoaXMuYXR0cmlidXRlU2VydmljZSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZSx0aGlzLnpvbmUsdGhpcy50cmFuc2xhdGUpLHRoaXMuc2VydmVyRGF0YVNvdXJjZT1uZXcgTGEodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLHRoaXMudGVsZW1ldHJ5V3NTZXJ2aWNlLHRoaXMuem9uZSx0aGlzLnRyYW5zbGF0ZSksdGhpcy5kYXRhU291cmNlPW5ldyB5KFtdKX1pbml0Q29ubmVjdG9yRm9ybSgpe3RoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHttb2RlOltvbi5CQVNJQ10sbmFtZTpbIiIsW3VlLnJlcXVpcmVkLHRoaXMudW5pcU5hbWVSZXF1aXJlZCgpLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbIiIsW3VlLnJlcXVpcmVkXV0sZW5hYmxlUmVtb3RlTG9nZ2luZzpbITFdLGxvZ0xldmVsOlsiIixbdWUucmVxdWlyZWRdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITFdLGtleTpbImF1dG8iXSxjbGFzczpbIiJdLGNvbmZpZ3VyYXRpb246WyIiXSxjb25maWd1cmF0aW9uSnNvbjpbe30sW3VlLnJlcXVpcmVkXV0sYmFzaWNDb25maWc6W3t9XSxjb25maWdWZXJzaW9uOlsiIl0scmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSksdGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGUoKX1nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCl7cmV0dXJuKGUsdCk9Pntzd2l0Y2godCl7Y2FzZSJzeW5jU3RhdHVzIjpyZXR1cm4gdGhpcy5pc0Nvbm5lY3RvclN5bmNlZChlKT8xOjA7Y2FzZSJlbmFibGVkIjpyZXR1cm4gdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KT8xOjA7Y2FzZSJlcnJvcnMiOmNvbnN0IG49dGhpcy5nZXRFcnJvcnNDb3VudChlKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpPT09dy5ERVNDPy0xOjEvMDpuO2RlZmF1bHQ6cmV0dXJuIGVbdF18fGUudmFsdWVbdF19fX1sb2FkQ29ubmVjdG9ycygpe3RoaXMuZGV2aWNlJiZ0aGlzLmRldmljZS5pZCE9PWsmJkFlKFt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSxbImFjdGl2ZV9jb25uZWN0b3JzIl0pLHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFsiaW5hY3RpdmVfY29ubmVjdG9ycyJdKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLkNMSUVOVF9TQ09QRSxbIlZlcnNpb24iXSldKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVswXSksdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVsxXSksdGhpcy5nYXRld2F5VmVyc2lvbj1lWzJdWzBdPy52YWx1ZSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWxvYWRHYXRld2F5U3RhdGUoKXt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5rZXkpKS52YWx1ZSxuPWUuZmluZCgoZT0+Imxhc3REaXNjb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZTt0aGlzLmlzR2F0ZXdheUFjdGl2ZT10aGlzLmdldEdhdGV3YXlTdGF0dXModCxhLG4pfSkpfXBhcnNlQ29ubmVjdG9ycyhlKXtjb25zdCB0PWU/LlswXT8udmFsdWV8fFtdO3JldHVybiBuZSh0KT9KU09OLnBhcnNlKHQpOnR9b2JzZXJ2ZU1vZGVDaGFuZ2UoKXt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikubWFya0FzUHJpc3RpbmUoKX0pKX1vYnNlcnZlQXR0cmlidXRlQ2hhbmdlKCl7dGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0LnBpcGUoVmUoMzAwKSxFZSgoZT0+dGhpcy5leGVjdXRlQXR0cmlidXRlVXBkYXRlcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX11cGRhdGVBY3RpdmVDb25uZWN0b3JLZXlzKGUpe2lmKHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlKSl7Y29uc3QgdD10aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuYWN0aXZlQ29ubmVjdG9ycy5zcGxpY2UodCwxKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5wdXNoKGUpfWVsc2V7Y29uc3QgdD10aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMuc3BsaWNlKHQsMSksdGhpcy5hY3RpdmVDb25uZWN0b3JzLnB1c2goZSl9fWV4ZWN1dGVBdHRyaWJ1dGVVcGRhdGVzKGUpe0FlKHRoaXMuZ2V0QXR0cmlidXRlRXhlY3V0aW9uVGFza3MoZSkpLnBpcGUoT2UoMSksRWUoKCgpPT50aGlzLnVwZGF0ZURhdGEoITApKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWdldEF0dHJpYnV0ZUV4ZWN1dGlvblRhc2tzKGUpe2NvbnN0IHQ9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSxuPXQ/TC5TRVJWRVJfU0NPUEU6TC5TSEFSRURfU0NPUEUsYT10P0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVyblt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsW3trZXk6ImFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmFjdGl2ZUNvbm5lY3RvcnN9XSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFt7a2V5OiJpbmFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmluYWN0aXZlQ29ubmVjdG9yc31dKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxuLFtlXSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLGEsW2VdKV19b25EYXRhVXBkYXRlRXJyb3IoZSl7Y29uc3QgdD10aGlzLnV0aWxzLnBhcnNlRXhjZXB0aW9uKGUpO2xldCBuPXQubmFtZTt0Lm1lc3NhZ2UmJihuKz0iOiAiK3QubWVzc2FnZSksY29uc29sZS5lcnJvcihuKX1vbkVycm9yc1VwZGF0ZWQoKXt0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVkKCl7Y29uc3QgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGEsdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5kYXRhS2V5Lm5hbWUpKS5kYXRhWzBdWzFdLG49ZS5maW5kKChlPT4ibGFzdERpc2Nvbm5lY3RUaW1lIj09PWUuZGF0YUtleS5uYW1lKSkuZGF0YVswXVsxXSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmRhdGFLZXkubmFtZSkpLmRhdGFbMF1bMV07dGhpcy5pc0dhdGV3YXlBY3RpdmU9dGhpcy5nZXRHYXRld2F5U3RhdHVzKHQsYSxuKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1nZXRHYXRld2F5U3RhdHVzKGUsdCxuKXtyZXR1cm4hIWUmJighbnx8dD5uKX1nZW5lcmF0ZVN1YnNjcmlwdGlvbigpe2lmKHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuZGV2aWNlKXtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuZGV2aWNlLmlkLGVudGl0eU5hbWU6IkdhdGV3YXkiLHRpbWVzZXJpZXM6W119XTt0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKCh0PT57ZVswXS50aW1lc2VyaWVzLnB1c2goe25hbWU6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGAsbGFiZWw6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGB9KX0pKSx0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGkuY3JlYXRlU3Vic2NyaXB0aW9uRnJvbUluZm8oQS5sYXRlc3QsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuc3Vic2NyaXB0aW9uPWV9KSl9fWNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpe3RoaXMuYmFzaWNDb25maWdTdWImJnRoaXMuYmFzaWNDb25maWdTdWIudW5zdWJzY3JpYmUoKSx0aGlzLmJhc2ljQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImJhc2ljQ29uZmlnIikudmFsdWVDaGFuZ2VzLnBpcGUoTWUoKCgpPT4hIXRoaXMuaW5pdGlhbENvbm5lY3RvcikpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIiksbj10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWUsYT10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU7aWYoIWVlKGUsdD8udmFsdWUpJiZ0aGlzLmFsbG93QmFzaWNDb25maWcuaGFzKG4pJiZhPT09b24uQkFTSUMpe2NvbnN0IG49ey4uLnQudmFsdWUsLi4uZX07dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiY29uZmlndXJhdGlvbkpzb24iKS5wYXRjaFZhbHVlKG4se2VtaXRFdmVudDohMX0pfX0pKX1jcmVhdGVKc29uQ29uZmlnV2F0Y2hlcigpe3RoaXMuanNvbkNvbmZpZ1N1YiYmdGhpcy5qc29uQ29uZmlnU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5qc29uQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKSxuPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZSxhPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoIm1vZGUiKS52YWx1ZTshZWUoZSx0Py52YWx1ZSkmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMobikmJmE9PT1vbi5BRFZBTkNFRCYmdGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKS5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWNvbmZpcm1Db25uZWN0b3JDaGFuZ2UoKXtyZXR1cm4gdGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmNvbm5lY3RvckZvcm0uZGlydHk/dGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRpdGxlIiksdGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRleHQiKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApOkllKCEwKX1zZXRGb3JtVmFsdWUoZSl7dGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGVkJiZ0aGlzLmNvbm5lY3RvckZvcm0uZW5hYmxlKCk7Y29uc3QgdD1iYS5nZXRDb25maWcoe2NvbmZpZ3VyYXRpb246IiIsa2V5OiJhdXRvIixjb25maWd1cmF0aW9uSnNvbjp7fSwuLi5lfSx0aGlzLmdhdGV3YXlWZXJzaW9uKTt0aGlzLmdhdGV3YXlWZXJzaW9uJiYhdC5jb25maWdWZXJzaW9uJiYodC5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLHQuYmFzaWNDb25maWc9dC5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9dCx0aGlzLnVwZGF0ZUNvbm5lY3Rvcih0KX11cGRhdGVDb25uZWN0b3IoZSl7c3dpdGNoKHRoaXMuanNvbkNvbmZpZ1N1Yj8udW5zdWJzY3JpYmUoKSxlLnR5cGUpe2Nhc2UgX3QuTVFUVDpjYXNlIF90Lk9QQ1VBOmNhc2UgX3QuTU9EQlVTOnRoaXMudXBkYXRlQmFzaWNDb25maWdDb25uZWN0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZSh7Li4uZSxtb2RlOm51bGx9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUpzb25Db25maWdXYXRjaGVyKCl9fXVwZGF0ZUJhc2ljQ29uZmlnQ29ubmVjdG9yKGUpe3RoaXMuYmFzaWNDb25maWdTdWI/LnVuc3Vic2NyaWJlKCk7Y29uc3QgdD10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWU7dGhpcy5zZXRJbml0aWFsQ29ubmVjdG9yVmFsdWVzKGUpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9cGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKXt0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZShlLHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpLHRoaXMuY3JlYXRlSnNvbkNvbmZpZ1dhdGNoZXIoKX10b2dnbGVSZXBvcnRTdHJhdGVneShlKXtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInJlcG9ydFN0cmF0ZWd5Iik7ZT09PV90Lk1PREJVUz90LmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zZXRDbGllbnREYXRhKGUpe2lmKHRoaXMuaW5pdGlhbENvbm5lY3Rvcil7Y29uc3QgdD1lLmRhdGEuZmluZCgoZT0+ZS5rZXk9PT10aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSkpO3QmJih0LnZhbHVlPSJzdHJpbmciPT10eXBlb2YgdC52YWx1ZT9KU09OLnBhcnNlKHQudmFsdWUpOnQudmFsdWUsdGhpcy5pc0Nvbm5lY3RvclN5bmNlZCh0KSYmdC52YWx1ZS5jb25maWd1cmF0aW9uSnNvbiYmdGhpcy5zZXRGb3JtVmFsdWUoey4uLnQudmFsdWUsbW9kZTp0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU/P3QudmFsdWUubW9kZX0pKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOlguQXR0cmlidXRlU2VydmljZX0se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp2YX0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVvLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbm5lY3RvciIsaW5wdXRzOntjdHg6ImN0eCIsZGV2aWNlOiJkZXZpY2UifSxwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6Im5hbWVJbnB1dCIsZmlyc3Q6ITAscHJlZGljYXRlOlsibmFtZUlucHV0Il0sZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InNvcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpnLGRlc2NlbmRhbnRzOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpMbyxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmtvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGbyxzZWxlY3RvcjoidGItb3BjLXVhLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnBvLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpBbyxzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpObyxzZWxlY3RvcjoidGItbXF0dC1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmdvLHNlbGVjdG9yOiJ0Yi1yZXBvcnQtc3RyYXRlZ3kiLGlucHV0czpbImlzRXhwYW5zaW9uTW9kZSIsImRlZmF1bHRWYWx1ZSJdfSx7a2luZDoicGlwZSIsdHlwZTpfLkFzeW5jUGlwZSxuYW1lOiJhc3luYyJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTp2YSxuYW1lOiJpc0xhdGVzdFZlcnNpb25Db25maWcifV19KX19ZSgiR2F0ZXdheUNvbm5lY3RvckNvbXBvbmVudCIsRW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX0se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTpKZS5NYXREaWFsb2d9LHt0eXBlOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3R5cGU6dC5OZ1pvbmV9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp2YX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkZXZpY2U6W3t0eXBlOmF9XSxuYW1lSW5wdXQ6W3t0eXBlOm8sYXJnczpbIm5hbWVJbnB1dCJdfV0sc29ydDpbe3R5cGU6byxhcmdzOltnLHtzdGF0aWM6ITF9XX1dfX0pO2NsYXNzIHFve2NvbnN0cnVjdG9yKGUpe3RoaXMuZGV2aWNlU2VydmljZT1lfWRvd25sb2FkKGUpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kZXZpY2VJZCYmdGhpcy5kZXZpY2VTZXJ2aWNlLmRvd25sb2FkR2F0ZXdheURvY2tlckNvbXBvc2VGaWxlKHRoaXMuZGV2aWNlSWQpLnN1YnNjcmliZSgoKCk9Pnt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxbyxkZXBzOlt7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpxbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1jb21tYW5kIixpbnB1dHM6e2RldmljZUlkOiJkZXZpY2VJZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJjb21wb25lbnQiLHR5cGU6d3QuVGJNYXJrZG93bkNvbXBvbmVudCxzZWxlY3RvcjoidGItbWFya2Rvd24iLGlucHV0czpbImRhdGEiLCJjb250ZXh0IiwiYWRkaXRpb25hbENvbXBpbGVNb2R1bGVzIiwibWFya2Rvd25DbGFzcyIsImNvbnRhaW5lckNsYXNzIiwic3R5bGUiLCJhcHBseURlZmF1bHRNYXJrZG93blN0eWxlIiwiYWRkaXRpb25hbFN0eWxlcyIsImxpbmVOdW1iZXJzIiwiZmFsbGJhY2tUb1BsYWluTWFya2Rvd24iLCJ1c2VQbGFpbk1hcmtkb3duIl0sb3V0cHV0czpbInJlYWR5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QW5jaG9yLHNlbGVjdG9yOiJhW21hdC1idXR0b25dLCBhW21hdC1yYWlzZWQtYnV0dG9uXSwgYVttYXQtZmxhdC1idXR0b25dLCBhW21hdC1zdHJva2VkLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJEZXZpY2VHYXRld2F5Q29tbWFuZENvbXBvbmVudCIscW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29tbWFuZCIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpYLkRldmljZVNlcnZpY2V9XSxwcm9wRGVjb3JhdG9yczp7ZGV2aWNlSWQ6W3t0eXBlOmF9XX19KTtjbGFzcyBEb3tjb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLmZiPWUsdGhpcy5kZXZpY2VTZXJ2aWNlPXQsdGhpcy5jZD1uLHRoaXMuZGlhbG9nPWEsdGhpcy5kaWFsb2dNb2RlPSExLHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZD1uZXcgaSx0aGlzLlN0b3JhZ2VUeXBlcz1BdCx0aGlzLnN0b3JhZ2VUeXBlcz1PYmplY3QudmFsdWVzKEF0KSx0aGlzLnN0b3JhZ2VUeXBlc1RyYW5zbGF0aW9uTWFwPVJ0LHRoaXMubG9nU2F2aW5nUGVyaW9kcz1PdCx0aGlzLmxvY2FsTG9nc0NvbmZpZ3M9T2JqZWN0LmtleXMoUHQpLHRoaXMubG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwPUd0LHRoaXMuc2VjdXJpdHlUeXBlcz1CdCx0aGlzLmdhdGV3YXlMb2dMZXZlbD1PYmplY3QudmFsdWVzKE10KSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmluaXRCYXNpY0Zvcm1Hcm91cCgpLHRoaXMub2JzZXJ2ZUZvcm1DaGFuZ2VzKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jaGVja0FuZEZldGNoQ3JlZGVudGlhbHMoZT8udGhpbmdzYm9hcmQ/LnNlY3VyaXR5Pz97fSksZT8uZ3JwYyYmdGhpcy50b2dnbGVScGNGaWVsZHMoZS5ncnBjLmVuYWJsZWQpOyhlPy50aGluZ3Nib2FyZD8uc3RhdGlzdGljcz8uY29tbWFuZHM/P1tdKS5mb3JFYWNoKChlPT50aGlzLmFkZENvbW1hbmQoZSwhMSkpKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fWF0TGVhc3RPbmVSZXF1aXJlZChlLHQ9bnVsbCl7cmV0dXJuIG49Pnt0fHwodD1PYmplY3Qua2V5cyhuLmNvbnRyb2xzKSk7cmV0dXJuIG4/LmNvbnRyb2xzJiZ0LnNvbWUoKHQ9PiFlKG4uY29udHJvbHNbdF0pKSk/bnVsbDp7YXRMZWFzdE9uZTohMH19fXRvZ2dsZVJwY0ZpZWxkcyhlKXtjb25zdCB0PXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjIik7ZT8odC5nZXQoInNlcnZlclBvcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lb3V0TXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluVGltZUJldHdlZW5QaW5nc01zIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNcyIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0LmdldCgic2VydmVyUG9ydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgia2VlcEFsaXZlVGltZW91dE1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoIm1pblRpbWVCZXR3ZWVuUGluZ3NNcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfWFkZExvY2FsTG9nQ29uZmlnKGUsdCl7Y29uc3Qgbj10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgibG9ncy5sb2NhbCIpLGE9dGhpcy5mYi5ncm91cCh7bG9nTGV2ZWw6W3QubG9nTGV2ZWx8fE10LklORk8sW3VlLnJlcXVpcmVkXV0sZmlsZVBhdGg6W3QuZmlsZVBhdGh8fCIuL2xvZ3MiLFt1ZS5yZXF1aXJlZF1dLGJhY2t1cENvdW50Olt0LmJhY2t1cENvdW50fHw3LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCldXSxzYXZpbmdUaW1lOlt0LnNhdmluZ1RpbWV8fDMsW3VlLnJlcXVpcmVkLHVlLm1pbigwKV1dLHNhdmluZ1BlcmlvZDpbdC5zYXZpbmdQZXJpb2R8fER0LmRheXMsW3VlLnJlcXVpcmVkXV19KTtuLmFkZENvbnRyb2woZSxhKX1nZXRMb2dGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KGBsb2dzLmxvY2FsLiR7ZX1gKX1jb21tYW5kRm9ybUFycmF5KCl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzIil9cmVtb3ZlQ29tbWFuZENvbnRyb2woZSx0KXsiIiE9PXQucG9pbnRlclR5cGUmJih0aGlzLmNvbW1hbmRGb3JtQXJyYXkoKS5yZW1vdmVBdChlKSx0aGlzLmJhc2ljRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfXJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5Iik7ZS5jbGVhclZhbGlkYXRvcnMoKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1yZW1vdmVBbGxTdG9yYWdlVmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInN0b3JhZ2UiKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKXt0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGV2aWNlKHRoaXMuZGV2aWNlLmlkKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmRpYWxvZy5vcGVuKFBhLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7Z2F0ZXdheU5hbWU6ZS5uYW1lfX0pLmFmdGVyQ2xvc2VkKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS5zZXRWYWx1ZSghMCx7ZW1pdEV2ZW50OiExfSl9KSl9KSl9YWRkQ29tbWFuZChlLHQ9ITApe2NvbnN0e2F0dHJpYnV0ZU9uR2F0ZXdheTpuPW51bGwsY29tbWFuZDphPW51bGwsdGltZW91dDpvPW51bGx9PWV8fHt9LGk9dGhpcy5mYi5ncm91cCh7YXR0cmlidXRlT25HYXRld2F5OltuLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dLGNvbW1hbmQ6W2EsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14oPz1cUykuKlxTJC8pXV0sdGltZW91dDpbbyxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKSx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dfSk7dGhpcy5jb21tYW5kRm9ybUFycmF5KCkucHVzaChpLHtlbWl0RXZlbnQ6dH0pfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3RoaXMuYmFzaWNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dGhpbmdzYm9hcmQ6dGhpcy5pbml0VGhpbmdzYm9hcmRGb3JtR3JvdXAoKSxzdG9yYWdlOnRoaXMuaW5pdFN0b3JhZ2VGb3JtR3JvdXAoKSxncnBjOnRoaXMuaW5pdEdycGNGb3JtR3JvdXAoKSxjb25uZWN0b3JzOnRoaXMuZmIuYXJyYXkoW10pLGxvZ3M6dGhpcy5pbml0TG9nc0Zvcm1Hcm91cCgpfSl9aW5pdFRoaW5nc2JvYXJkRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2hvc3Q6W3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteXHNdKyQvKV1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZVNoZWxsOlshMV0scmVtb3RlQ29uZmlndXJhdGlvbjpbITBdLGNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHM6WzYwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sc3RhdGlzdGljczp0aGlzLmZiLmdyb3VwKHtlbmFibGU6WyEwXSxzdGF0c1NlbmRQZXJpb2RJblNlY29uZHM6WzM2MDAsW3VlLnJlcXVpcmVkLHVlLm1pbig2MCksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sY29tbWFuZHM6dGhpcy5mYi5hcnJheShbXSl9KSxtYXhQYXlsb2FkU2l6ZUJ5dGVzOls4MTk2LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTAwKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtaW5QYWNrU2VuZERlbGF5TVM6WzUwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblBhY2tTaXplVG9TZW5kOls1MDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxMDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGhhbmRsZURldmljZVJlbmFtaW5nOlshMF0sY2hlY2tpbmdEZXZpY2VBY3Rpdml0eTp0aGlzLmluaXRDaGVja2luZ0RldmljZUFjdGl2aXR5Rm9ybUdyb3VwKCksc2VjdXJpdHk6dGhpcy5pbml0U2VjdXJpdHlGb3JtR3JvdXAoKSxxb3M6WzEsW3VlLnJlcXVpcmVkLHVlLm1pbigwKSx1ZS5tYXgoMSksdWUucGF0dGVybigvXlteLlxzXSskLyldXX0pfWluaXRTdG9yYWdlRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe3R5cGU6W0F0Lk1FTU9SWSxbdWUucmVxdWlyZWRdXSxyZWFkX3JlY29yZHNfY291bnQ6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heF9yZWNvcmRzX2NvdW50OlsxZTUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhX2ZvbGRlcl9wYXRoOlsiLi9kYXRhLyIsW3VlLnJlcXVpcmVkXV0sbWF4X2ZpbGVfY291bnQ6WzEwLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWF4X3JlYWRfcmVjb3Jkc19jb3VudDpbMTAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhfcmVjb3Jkc19wZXJfZmlsZTpbMWU0LFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sZGF0YV9maWxlX3BhdGg6WyIuL2RhdGEvZGF0YS5kYiIsW3VlLnJlcXVpcmVkXV0sbWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzOlsxLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWVzc2FnZXNfdHRsX2luX2RheXM6WzcsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRHcnBjRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxzZXJ2ZXJQb3J0Ols5NTk1LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUubWF4KDY1NTM1KSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxrZWVwQWxpdmVUaW1lTXM6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGtlZXBBbGl2ZVRpbWVvdXRNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sa2VlcGFsaXZlUGVybWl0V2l0aG91dENhbGxzOlshMF0sbWF4UGluZ3NXaXRob3V0RGF0YTpbMCxbdWUucmVxdWlyZWQsdWUubWluKDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblRpbWVCZXR3ZWVuUGluZ3NNczpbMWU0LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV19KX1pbml0TG9nc0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHtkYXRlRm9ybWF0OlsiJVktJW0tJWQgJUg6JU06JVMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sbG9nRm9ybWF0OlsiJShhc2N0aW1lKXMgLSB8JShsZXZlbG5hbWUpc3wgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGZ1bmNOYW1lKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sdHlwZTpbInJlbW90ZSIsW3VlLnJlcXVpcmVkXV0scmVtb3RlOnRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxsb2dMZXZlbDpbTXQuSU5GTyxbdWUucmVxdWlyZWRdXX0pLGxvY2FsOnRoaXMuZmIuZ3JvdXAoe30pfSl9aW5pdENoZWNraW5nRGV2aWNlQWN0aXZpdHlGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7Y2hlY2tEZXZpY2VJbmFjdGl2aXR5OlshMV0saW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzOlsyMDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzOls1MDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRTZWN1cml0eUZvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHt0eXBlOltWdC5BQ0NFU1NfVE9LRU4sW3VlLnJlcXVpcmVkXV0sYWNjZXNzVG9rZW46W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2xpZW50SWQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sdXNlcm5hbWU6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0scGFzc3dvcmQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2FDZXJ0OltudWxsXSxjZXJ0OltudWxsXSxwcml2YXRlS2V5OltudWxsXX0pfW9ic2VydmVGb3JtQ2hhbmdlcygpe3RoaXMub2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCksdGhpcy5vYnNlcnZlUmVtb3RlQ29uZmlndXJhdGlvbkNoYW5nZXMoKSx0aGlzLm9ic2VydmVEZXZpY2VBY3Rpdml0eUNoYW5nZXMoKSx0aGlzLm9ic2VydmVTZWN1cml0eVR5cGVDaGFuZ2VzKCksdGhpcy5vYnNlcnZlU3RvcmFnZVR5cGVDaGFuZ2VzKCl9b2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWUiKTt0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dCYmIiIhPT10P2Uuc2V0VmFsaWRhdG9ycyhbdWUucmVxdWlyZWRdKTplLmNsZWFyVmFsaWRhdG9ycygpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9b2JzZXJ2ZVJlbW90ZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKX0pKSx0aGlzLmxvZ1NlbGVjdG9yPXRoaXMuZmIuY29udHJvbChQdC5zZXJ2aWNlKTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhQdCkpdGhpcy5hZGRMb2NhbExvZ0NvbmZpZyhlLHt9KX1vYnNlcnZlRGV2aWNlQWN0aXZpdHlDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSIpO2UuZ2V0KCJjaGVja0RldmljZUluYWN0aXZpdHkiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7Y29uc3Qgbj1bdWUubWluKDEpLHVlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV07dD8oZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLnNldFZhbGlkYXRvcnMobiksZS5nZXQoImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiKS5zZXRWYWxpZGF0b3JzKG4pKTooZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLmNsZWFyVmFsaWRhdG9ycygpLGUuZ2V0KCJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIikuY2xlYXJWYWxpZGF0b3JzKCkpLGUuZ2V0KCJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSxlLmdldCgiaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kcyIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjLmVuYWJsZWQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy50b2dnbGVScGNGaWVsZHMoZSl9KSl9b2JzZXJ2ZVNlY3VyaXR5VHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eSIpO2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e3N3aXRjaCh0aGlzLnJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpLHQpe2Nhc2UgVnQuQUNDRVNTX1RPS0VOOnRoaXMuYWRkQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVExTX1BSSVZBVEVfS0VZOnRoaXMuYWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSk7YnJlYWs7Y2FzZSBWdC5UTFNfQUNDRVNTX1RPS0VOOnRoaXMuYWRkVGxzQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVVNFUk5BTUVfUEFTU1dPUkQ6ZS5hZGRWYWxpZGF0b3JzKFt0aGlzLmF0TGVhc3RPbmVSZXF1aXJlZCh1ZS5yZXF1aXJlZCxbImNsaWVudElkIiwidXNlcm5hbWUiXSldKX1lLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKSxbImNhQ2VydCIsInByaXZhdGVLZXkiLCJjZXJ0Il0uZm9yRWFjaCgodD0+e2UuZ2V0KHQpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT50aGlzLmNkLmRldGVjdENoYW5nZXMoKSkpfSkpfW9ic2VydmVTdG9yYWdlVHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzdG9yYWdlIik7ZS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57c3dpdGNoKHRoaXMucmVtb3ZlQWxsU3RvcmFnZVZhbGlkYXRvcnMoKSx0KXtjYXNlIEF0Lk1FTU9SWTp0aGlzLmFkZE1lbW9yeVN0b3JhZ2VWYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgQXQuRklMRTp0aGlzLmFkZEZpbGVTdG9yYWdlVmFsaWRhdG9ycyhlKTticmVhaztjYXNlIEF0LlNRTElURTp0aGlzLmFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpfX0pKX1hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7ZS5nZXQoImFjY2Vzc1Rva2VuIikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteLlxzXSskLyldKSxlLmdldCgiYWNjZXNzVG9rZW4iKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9YWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSl7WyJjYUNlcnQiLCJwcml2YXRlS2V5IiwiY2VydCJdLmZvckVhY2goKHQ9PntlLmdldCh0KS5hZGRWYWxpZGF0b3JzKFt1ZS5yZXF1aXJlZF0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKX1hZGRUbHNBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7dGhpcy5hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSksZS5nZXQoImNhQ2VydCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkXSksZS5nZXQoImNhQ2VydCIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1hZGRNZW1vcnlTdG9yYWdlVmFsaWRhdG9ycyhlKXtlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KCJtYXhfcmVjb3Jkc19jb3VudCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldKSxlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoIm1heF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9YWRkRmlsZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWF4X2ZpbGVfY291bnQiLCJtYXhfcmVhZF9yZWNvcmRzX2NvdW50IiwibWF4X3JlY29yZHNfcGVyX2ZpbGUiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIiwibWVzc2FnZXNfdHRsX2luX2RheXMiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWNoZWNrQW5kRmV0Y2hDcmVkZW50aWFscyhlKXtlLnR5cGUhPT1WdC5UTFNfUFJJVkFURV9LRVkmJnRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyh0aGlzLmRldmljZS5pZCkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5pbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkLmVtaXQodCksdGhpcy51cGRhdGVTZWN1cml0eVR5cGUoZSx0KSx0aGlzLnVwZGF0ZUNyZWRlbnRpYWxzKHQsZSl9KSl9dXBkYXRlU2VjdXJpdHlUeXBlKGUsdCl7Y29uc3Qgbj10LmNyZWRlbnRpYWxzVHlwZT09PVUuQUNDRVNTX1RPS0VOfHxlLnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOP2UudHlwZT09PVZ0LlRMU19BQ0NFU1NfVE9LRU4/VnQuVExTX0FDQ0VTU19UT0tFTjpWdC5BQ0NFU1NfVE9LRU46dC5jcmVkZW50aWFsc1R5cGU9PT1VLk1RVFRfQkFTSUM/VnQuVVNFUk5BTUVfUEFTU1dPUkQ6bnVsbDtuJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZSIpLnNldFZhbHVlKG4se2VtaXRFdmVudDohMX0pfXVwZGF0ZUNyZWRlbnRpYWxzKGUsdCl7c3dpdGNoKGUuY3JlZGVudGlhbHNUeXBlKXtjYXNlIFUuQUNDRVNTX1RPS0VOOnRoaXMudXBkYXRlQWNjZXNzVG9rZW5DcmVkZW50aWFscyhlLHQpO2JyZWFrO2Nhc2UgVS5NUVRUX0JBU0lDOnRoaXMudXBkYXRlTXF0dEJhc2ljQ3JlZGVudGlhbHMoZSk7Y2FzZSBVLlg1MDlfQ0VSVElGSUNBVEU6fX11cGRhdGVBY2Nlc3NUb2tlbkNyZWRlbnRpYWxzKGUsdCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuIikuc2V0VmFsdWUoZS5jcmVkZW50aWFsc0lkLHtlbWl0RXZlbnQ6ITF9KSx0LnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkuY2FDZXJ0Iikuc2V0VmFsdWUodC5jYUNlcnQse2VtaXRFdmVudDohMX0pfXVwZGF0ZU1xdHRCYXNpY0NyZWRlbnRpYWxzKGUpe2NvbnN0IHQ9SlNPTi5wYXJzZShlLmNyZWRlbnRpYWxzVmFsdWUpO3RoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZCIpLnNldFZhbHVlKHQuY2xpZW50SWQse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZSIpLnNldFZhbHVlKHQudXNlck5hbWUse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZCIpLnNldFZhbHVlKHQucGFzc3dvcmQse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6RG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWJhc2ljLWNvbmZpZ3VyYXRpb24iLGlucHV0czp7ZGV2aWNlOiJkZXZpY2UiLGRpYWxvZ01vZGU6ImRpYWxvZ01vZGUifSxvdXRwdXRzOntpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkOiJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+RG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgY2xhc3M9InRhYi1ncm91cC1ibG9jayIgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIiBbY2xhc3MuZGlhbG9nLW1vZGVdPSJkaWFsb2dNb2RlIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1jb25maWd1cmF0aW9uXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZVNoZWxsIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtaG9zdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaG9zdFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmhvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnNlY3VyaXR5LnNlY3VyaXR5PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzZWN1cml0eSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij57eyBzZWN1cml0eVR5cGUudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ2FjY2Vzc3Rva2VuXCcpIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuYWNjZXNzLXRva2VuPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImFjY2Vzc1Rva2VuIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkuYWNjZXNzLXRva2VuLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdkZXZpY2UuY29weS1hY2Nlc3MtdG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuY2xpZW50SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNsaWVudElkIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5jbGllbnRJZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgW2NvcHlUZXh0XT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuY2xpZW50SWRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS51c2VybmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LnVzZXJuYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZVwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXVzZXJuYW1lXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgc3R5bGU9IndpZHRoOiAxMDAlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiLz5cbiAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucGFzc3dvcmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8dGItZXJyb3Igc3R5bGU9Im1hcmdpbi10b3A6IC0xMnB4OyBkaXNwbGF5OiBibG9jazsiIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS50eXBlXCcpLnZhbHVlID09PSBcJ3VzZXJuYW1lUGFzc3dvcmRcJyJcbiAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eVwnKS5oYXNFcnJvcihcJ2F0TGVhc3RPbmVcJykgP1xuICAgICAgICAgIChcJ2RldmljZS5jbGllbnQtaWQtb3ItdXNlci1uYW1lLW5lY2Vzc2FyeVwnIHwgdHJhbnNsYXRlKSA6IFwnXCciPjwvdGItZXJyb3I+XG4gICAgICAgICAgICA8dGItZmlsZS1pbnB1dFxuICAgICAgICAgICAgICBmeEZsZXg9IjEwMCJcbiAgICAgICAgICAgICAgaGludD0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ3Rsc1wnKSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnQiXG4gICAgICAgICAgICAgIGxhYmVsPSJ7eyBcJ3NlY3VyaXR5LmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgW2FsbG93ZWRFeHRlbnNpb25zXT0iXCdwZW0sIGNlcnQsIGtleVwnIlxuICAgICAgICAgICAgICBbYWNjZXB0XT0iXCcucGVtLCBhcHBsaWNhdGlvbi9wZW0sLmNlcnQsIGFwcGxpY2F0aW9uL2NlcnQsIC5rZXksYXBwbGljYXRpb24va2V5XCciXG4gICAgICAgICAgICAgIGRyb3BMYWJlbD0ie3sgXCdnYXRld2F5LmRyb3AtZmlsZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIDwvdGItZmlsZS1pbnB1dD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubG9ncy5sb2dzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJsb2dzIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5kYXRlLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRlRm9ybWF0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MuZGF0ZUZvcm1hdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5kYXRlLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGUtZm9ybVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubG9nLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJsb2dGb3JtYXQiIHJvd3M9IjIiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9nRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmxvZy1mb3JtYXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5sb2ctZm9ybWF0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJyZW1vdGUiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MucmVtb3RlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1sb2dcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MucmVtb3RlLWxvZ3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ibG9jYWwiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MubG9jYWw8L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBbZm9ybUNvbnRyb2xdPSJsb2dTZWxlY3RvciI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBsb2dDb25maWcgb2YgbG9jYWxMb2dzQ29uZmlncyIgW3ZhbHVlXT0ibG9nQ29uZmlnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZpcnN0LWNhcGl0YWwiPnt7IGxvY2FsTG9nc0NvbmZpZ1RyYW5zbGF0ZU1hcC5nZXQobG9nQ29uZmlnKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0iZ2V0TG9nRm9ybUdyb3VwKGxvZ1NlbGVjdG9yLnZhbHVlKSI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MuZmlsZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZmlsZVBhdGgiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5maWxlUGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmZpbGUtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgc2F2aW5nLXBlcmlvZCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdUaW1lIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3Muc2F2aW5nLXBlcmlvZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLnNhdmluZ1RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBoaWRlUmVxdWlyZWRNYXJrZXIgc3R5bGU9Im1pbi13aWR0aDogMTEwcHg7IHdpZHRoOiAzMCUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdQZXJpb2QiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBwZXJpb2Qgb2YgbG9nU2F2aW5nUGVyaW9kcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJwZXJpb2Qua2V5Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwZXJpb2QudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5iYWNrdXAtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJiYWNrdXBDb3VudCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuYmFja3VwQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYmFja3VwLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0b3JhZ2VcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InN0b3JhZ2UiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPmdhdGV3YXkuaGludHMuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMiIFt2YWx1ZV09InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAuZ2V0KHN0b3JhZ2VUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPnt7IFwnZ2F0ZXdheS5oaW50cy5cJyArIGJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UudHlwZVwnKS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxzZWN0aW9uICpuZ1N3aXRjaENhc2U9IlN0b3JhZ2VUeXBlcy5NRU1PUlkiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlYWRfcmVjb3Jkc19jb3VudCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5yZWFkLXJlY29yZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLkZJTEUiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFfZm9sZGVyX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9mb2xkZXJfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtaW5maXggcG9pbnRlci1ldmVudCBzdWZmaXgtaWNvbiIgYXJpYS1oaWRkZW49ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9ImhlbHAtaWNvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0YS1mb2xkZXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9maWxlX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtZmlsZS1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhfcmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVhZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX3Blcl9maWxlIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVjb3Jkc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLlNRTElURSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9maWxlX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9maWxlX3BhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3VycyIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLWNoZWNrLWhvdXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9pbl9kYXlzIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnR0bC1tZXNzYWdlcy1kYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdycGNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImdycGMiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwY1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucGVybWl0LXdpdGhvdXQtY2FsbHNcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucGVybWl0LXdpdGhvdXQtY2FsbHNcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1wb3J0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ic2VydmVyUG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2VydmVyLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVvdXRNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJrZWVwQWxpdmVUaW1lTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMta2VlcC1hbGl2ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5nczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblRpbWVCZXR3ZWVuUGluZ3NNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGluZ3NXaXRob3V0RGF0YSIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY29sb3I9InByaW1hcnkiIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzdGF0c1NlbmRQZXJpb2RJblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSI2MCIvPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5oaW50cy5jb21tYW5kczwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZvcm1BcnJheU5hbWU9ImNvbW1hbmRzIiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiXG4gICAgICAgICAgICAgICAgICpuZ0Zvcj0ibGV0IGNvbW1hbmRDb250cm9sIG9mIGNvbW1hbmRGb3JtQXJyYXkoKS5jb250cm9sczsgbGV0ICRpbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gW2Zvcm1Hcm91cE5hbWVdPSIkaW5kZXgiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgbm8tcGFkZGluZy1ib3R0b20gbm8tZ2FwIGNvbW1hbmQtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuYXR0cmlidXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlT25HYXRld2F5Ii8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2F0dHJpYnV0ZU9uR2F0ZXdheVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmF0dHJpYnV0ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjb21tYW5kIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnY29tbWFuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jb21tYW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb21tYW5kQ29udHJvbCgkaW5kZXgsICRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3MucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiBmaXQtY29udGVudDsiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZENvbW1hbmQoKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkub3RoZXJcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiIGZvcm1Hcm91cE5hbWU9ImNoZWNraW5nRGV2aWNlQWN0aXZpdHkiXG4gICAgICAgICAgICAgW2NsYXNzLm5vLXBhZGRpbmctYm90dG9tXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jaGVjay1kZXZpY2UtYWN0aXZpdHlcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0RldmljZUluYWN0aXZpdHkiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5XCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuY2hlY2tEZXZpY2VJbmFjdGl2aXR5XCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmluYWN0aXZpdHktdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QYWNrU2VuZERlbGF5TVMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2VuZERlbGF5TVNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5taW5pbWFsLXBhY2stZGVsYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubXF0dC1xb3M8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icW9zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSIxIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnFvc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5xb3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heFBheWxvYWRTaXplQnl0ZXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXBheWxvYWQtc2l6ZS1ieXRlc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTaXplVG9TZW5kIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbi1wYWNrLXNpemUtdG8tc2VuZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1yb3dzOm1pbi1jb250ZW50IG1pbm1heChhdXRvLDFmcikgbWluLWNvbnRlbnR9Omhvc3QgLmNvbmZpZ3VyYXRpb24tYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTZweDttYXgtaGVpZ2h0Ojcwdmh9Omhvc3QgLmRpYWxvZy1tb2RlIC5jb25maWd1cmF0aW9uLWJsb2Nre21heC1oZWlnaHQ6NjB2aH06aG9zdCAubWF0LXRvb2xiYXJ7Z3JpZC1yb3c6MTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLnRhYi1ncm91cC1ibG9ja3ttaW4td2lkdGg6MDtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OjA7Z3JpZC1yb3c6Mn06aG9zdCAudG9nZ2xlLWdyb3Vwe21hcmdpbi1yaWdodDphdXRvfTpob3N0IC5maXJzdC1jYXBpdGFse3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgdGV4dGFyZWF7cmVzaXplOm5vbmV9Omhvc3QgLnNhdmluZy1wZXJpb2R7ZmxleDoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY29tbWFuZC1jb250YWluZXJ7d2lkdGg6MTAwJX06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3J7ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3I6Zmlyc3QtY2hpbGR7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QgOjpuZy1kZWVwIC5wb2ludGVyLWV2ZW50e3BvaW50ZXItZXZlbnRzOmFsbH06aG9zdCA6Om5nLWRlZXAgLnRvZ2dsZS1ncm91cCBzcGFue3BhZGRpbmc6MCAyNXB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2NvbG9yOiNlMGUwZTB9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXg6aG92ZXJ7Y29sb3I6IzllOWU5ZX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q3QuVGJFcnJvckNvbXBvbmVudCxzZWxlY3RvcjoidGItZXJyb3IiLGlucHV0czpbIm5vTWFyZ2luIiwiZXJyb3IiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpXLk1hdFRhYkNvbnRlbnQsc2VsZWN0b3I6IlttYXRUYWJDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpUdC5GaWxlSW5wdXRDb21wb25lbnQsc2VsZWN0b3I6InRiLWZpbGUtaW5wdXQiLGlucHV0czpbImxhYmVsIiwiaGludCIsImFjY2VwdCIsIm5vRmlsZVRleHQiLCJpbnB1dElkIiwiYWxsb3dlZEV4dGVuc2lvbnMiLCJkcm9wTGFiZWwiLCJtYXhTaXplQnl0ZSIsImNvbnRlbnRDb252ZXJ0RnVuY3Rpb24iLCJyZXF1aXJlZCIsInJlcXVpcmVkQXNFcnJvciIsImRpc2FibGVkIiwiZXhpc3RpbmdGaWxlTmFtZSIsInJlYWRBc0JpbmFyeSIsIndvcmtGcm9tRmlsZU9iaiIsIm11bHRpcGxlRmlsZSJdLG91dHB1dHM6WyJmaWxlTmFtZUNoYW5nZWQiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6U3QuQ29weUJ1dHRvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItY29weS1idXR0b24iLGlucHV0czpbImNvcHlUZXh0IiwiZGlzYWJsZWQiLCJtZGlJY29uIiwiaWNvbiIsInRvb2x0aXBUZXh0IiwidG9vbHRpcFBvc2l0aW9uIiwic3R5bGUiLCJjb2xvciIsIm1pbmlCdXR0b24iXSxvdXRwdXRzOlsic3VjY2Vzc0NvcGllZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19XX0pfX1lKCJHYXRld2F5QmFzaWNDb25maWd1cmF0aW9uQ29tcG9uZW50IixEbyksSGUoW04oKV0sRG8ucHJvdG90eXBlLCJkaWFsb2dNb2RlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5EbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBjbGFzcz0idGFiLWdyb3VwLWJsb2NrIiBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiIFtjbGFzcy5kaWFsb2ctbW9kZV09ImRpYWxvZ01vZGUiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5yZW1vdGUtY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUNvbmZpZ3VyYXRpb24iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlU2hlbGwiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Imhvc3QiLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+c2VjdXJpdHkuc2VjdXJpdHk8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHNlY3VyaXR5VHlwZSBvZiBzZWN1cml0eVR5cGVzIHwga2V5dmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09InNlY3VyaXR5VHlwZS5rZXkiPnt7IHNlY3VyaXR5VHlwZS52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwnYWNjZXNzdG9rZW5cJykiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5hY2Nlc3MtdG9rZW48L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYWNjZXNzVG9rZW4iLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuYWNjZXNzVG9rZW5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5hY2Nlc3MtdG9rZW4tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2RldmljZS5jb3B5LWFjY2Vzcy10b2tlblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50b2tlblwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPHNlY3Rpb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5jbGllbnRJZDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LmNsaWVudElkLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBpY29uPSJjb250ZW50X2NvcHkiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPnNlY3VyaXR5LnVzZXJuYW1lPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkudXNlcm5hbWUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdnYXRld2F5LmNvcHktdXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy51c2VybmFtZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBzdHlsZT0id2lkdGg6IDEwMCUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIvPlxuICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnBhc3N3b3JkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXBhc3N3b3JkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDx0Yi1lcnJvciBzdHlsZT0ibWFyZ2luLXRvcDogLTEycHg7IGRpc3BsYXk6IGJsb2NrOyIgZnhGbGV4PSIxMDAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIlxuICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5XCcpLmhhc0Vycm9yKFwnYXRMZWFzdE9uZVwnKSA/XG4gICAgICAgICAgKFwnZGV2aWNlLmNsaWVudC1pZC1vci11c2VyLW5hbWUtbmVjZXNzYXJ5XCcgfCB0cmFuc2xhdGUpIDogXCdcJyI+PC90Yi1lcnJvcj5cbiAgICAgICAgICAgIDx0Yi1maWxlLWlucHV0XG4gICAgICAgICAgICAgIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICBoaW50PSJ7eyBcJ2dhdGV3YXkuaGludHMuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwndGxzXCcpIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImNhQ2VydCJcbiAgICAgICAgICAgICAgbGFiZWw9Int7IFwnc2VjdXJpdHkuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBbYWxsb3dlZEV4dGVuc2lvbnNdPSJcJ3BlbSwgY2VydCwga2V5XCciXG4gICAgICAgICAgICAgIFthY2NlcHRdPSJcJy5wZW0sIGFwcGxpY2F0aW9uL3BlbSwuY2VydCwgYXBwbGljYXRpb24vY2VydCwgLmtleSxhcHBsaWNhdGlvbi9rZXlcJyJcbiAgICAgICAgICAgICAgZHJvcExhYmVsPSJ7eyBcJ2dhdGV3YXkuZHJvcC1maWxlXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgPC90Yi1maWxlLWlucHV0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5sb2dzLmxvZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImxvZ3MiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGVGb3JtYXQiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5kYXRlRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0ZS1mb3JtXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sb2ctZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImxvZ0Zvcm1hdCIgcm93cz0iMiI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2dGb3JtYXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MubG9nLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmxvZy1mb3JtYXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iIGZvcm1Hcm91cE5hbWU9InJlbW90ZSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5yZW1vdGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWxvZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5yZW1vdGUtbG9nc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJsb2dMZXZlbCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJsb2NhbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5sb2NhbDwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIFtmb3JtQ29udHJvbF09ImxvZ1NlbGVjdG9yIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0NvbmZpZyBvZiBsb2NhbExvZ3NDb25maWdzIiBbdmFsdWVdPSJsb2dDb25maWciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmlyc3QtY2FwaXRhbCI+e3sgbG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwLmdldChsb2dDb25maWcpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJnZXRMb2dGb3JtR3JvdXAobG9nU2VsZWN0b3IudmFsdWUpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5maWxlLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaWxlUGF0aCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmZpbGVQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MuZmlsZS1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBzYXZpbmctcGVyaW9kIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1RpbWUiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5zYXZpbmdUaW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2QtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGhpZGVSZXF1aXJlZE1hcmtlciBzdHlsZT0ibWluLXdpZHRoOiAxMTBweDsgd2lkdGg6IDMwJSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1BlcmlvZCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBlcmlvZCBvZiBsb2dTYXZpbmdQZXJpb2RzIHwga2V5dmFsdWUiIFt2YWx1ZV09InBlcmlvZC5rZXkiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBlcmlvZC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImJhY2t1cENvdW50IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmJhY2t1cENvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5iYWNrdXAtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0ic3RvcmFnZSIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+Z2F0ZXdheS5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+Z2F0ZXdheS5oaW50cy5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgY2xhc3M9InRvZ2dsZS1ncm91cCIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZXNUcmFuc2xhdGlvbk1hcC5nZXQoc3RvcmFnZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+e3sgXCdnYXRld2F5LmhpbnRzLlwnICsgYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnR5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLk1FTU9SWSIgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnJlYWQtcmVjb3JkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3JkczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXJlY29yZHMtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuRklMRSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9mb2xkZXJfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXQtZm9ybS1maWVsZC1pbmZpeCBwb2ludGVyLWV2ZW50IHN1ZmZpeC1pY29uIiBhcmlhLWhpZGRlbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iaGVscC1pY29uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X2ZpbGVfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfZmlsZV9jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1maWxlLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWFkX3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWFkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfcGVyX2ZpbGUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19wZXJfZmlsZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuU1FMSVRFIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRhX2ZpbGVfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZpbGVfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGEtZm9sZGVyXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50dGwtY2hlY2staG91clwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5czwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2luX2RheXMiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2luX2RheXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLW1lc3NhZ2VzLWRheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ3JwY1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0iZ3JwYyIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5wZXJtaXQtd2l0aG91dC1jYWxsc1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5wZXJtaXQtd2l0aG91dC1jYWxsc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJQb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5zZXJ2ZXItcG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLnNlcnZlclBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1heFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ia2VlcEFsaXZlVGltZW91dE1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLWtlZXAtYWxpdmUtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVvdXRNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluVGltZUJldHdlZW5QaW5nc01zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblRpbWVCZXR3ZWVuUGluZ3NNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtYXhQaW5nc1dpdGhvdXREYXRhIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGFcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1heFBpbmdzV2l0aG91dERhdGFcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWNzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj0icHJpbWFyeSIgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InN0YXRzU2VuZFBlcmlvZEluU2Vjb25kcyIgdHlwZT0ibnVtYmVyIiBtaW49IjYwIi8+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnN0YXRpc3RpY3Muc3RhdHNTZW5kUGVyaW9kSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZHM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiIHRyYW5zbGF0ZT5nYXRld2F5LmhpbnRzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZm9ybUFycmF5TmFtZT0iY29tbWFuZHMiIGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29tbWFuZENvbnRyb2wgb2YgY29tbWFuZEZvcm1BcnJheSgpLmNvbnRyb2xzOyBsZXQgJGluZGV4ID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8c2VjdGlvbiBbZm9ybUdyb3VwTmFtZV09IiRpbmRleCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBuby1wYWRkaW5nLWJvdHRvbSBuby1nYXAgY29tbWFuZC1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJhdHRyaWJ1dGVPbkdhdGV3YXkiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnYXR0cmlidXRlT25HYXRld2F5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXR0cmlidXRlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MudGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCd0aW1lb3V0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2NvbW1hbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9InJlbW92ZUNvbW1hbmRDb250cm9sKCRpbmRleCwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItYm94LWJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IGZpdC1jb250ZW50OyJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkQ29tbWFuZCgpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuYWRkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5vdGhlclwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCIgZm9ybUdyb3VwTmFtZT0iY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSJcbiAgICAgICAgICAgICBbY2xhc3Mubm8tcGFkZGluZy1ib3R0b21dPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmNoZWNrRGV2aWNlSW5hY3Rpdml0eVwnKS52YWx1ZSI+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNoZWNrLWRldmljZS1hY3Rpdml0eVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImNoZWNrRGV2aWNlSW5hY3Rpdml0eSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jaGVja2luZy1kZXZpY2UtYWN0aXZpdHlcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlUaW1lb3V0U2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBmb3JtQ29udHJvbE5hbWU9ImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5pbmFjdGl2aXR5LXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmFkdmFuY2VkPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTZW5kRGVsYXlNUyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbmltYWwtcGFjay1kZWxheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tcXR0LXFvczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJxb3MiIHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjEiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtYXhcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnFvc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGF5bG9hZFNpemVCeXRlcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1heFBheWxvYWRTaXplQnl0ZXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluUGFja1NpemVUb1NlbmQiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2l6ZVRvU2VuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWluLXBhY2stc2l6ZS10by1zZW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLXJvd3M6bWluLWNvbnRlbnQgbWlubWF4KGF1dG8sMWZyKSBtaW4tY29udGVudH06aG9zdCAuY29uZmlndXJhdGlvbi1ibG9ja3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxNnB4O21heC1oZWlnaHQ6NzB2aH06aG9zdCAuZGlhbG9nLW1vZGUgLmNvbmZpZ3VyYXRpb24tYmxvY2t7bWF4LWhlaWdodDo2MHZofTpob3N0IC5tYXQtdG9vbGJhcntncmlkLXJvdzoxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzAwMDAwMGRlIWltcG9ydGFudH06aG9zdCAudGFiLWdyb3VwLWJsb2Nre21pbi13aWR0aDowO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6MDtncmlkLXJvdzoyfTpob3N0IC50b2dnbGUtZ3JvdXB7bWFyZ2luLXJpZ2h0OmF1dG99Omhvc3QgLmZpcnN0LWNhcGl0YWx7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZX06aG9zdCB0ZXh0YXJlYXtyZXNpemU6bm9uZX06aG9zdCAuc2F2aW5nLXBlcmlvZHtmbGV4OjF9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVye3dpZHRoOjEwMCV9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIC5jb21tYW5kLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcjpmaXJzdC1jaGlsZHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH06aG9zdCA6Om5nLWRlZXAgLnBvaW50ZXItZXZlbnR7cG9pbnRlci1ldmVudHM6YWxsfTpob3N0IDo6bmctZGVlcCAudG9nZ2xlLWdyb3VwIHNwYW57cGFkZGluZzowIDI1cHh9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7Y29sb3I6I2UwZTBlMH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeDpob3Zlcntjb2xvcjojOWU5ZTllfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkRldmljZVNlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOkplLk1hdERpYWxvZ31dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dNb2RlOlt7dHlwZTphfV0saW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZDpbe3R5cGU6bH1dfX0pO2NsYXNzIFBve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCIiKSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5hZHZhbmNlZEZvcm1Db250cm9sLnJlc2V0KGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMuYWR2YW5jZWRGb3JtQ29udHJvbC52YWxpZD9udWxsOnthZHZhbmNlZEZvcm1Db250cm9sOnt2YWxpZDohMX19fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpQbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+UG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48dGItanNvbi1vYmplY3QtZWRpdFxuICBmaWxsSGVpZ2h0PSJ0cnVlIlxuICBjbGFzcz0idGItZmxleCBjb25maWctY29udGFpbmVyIlxuICBmeExheW91dD0iY29sdW1uIlxuICBqc29uUmVxdWlyZWRcbiAgbGFiZWw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX0iXG4gIFtmb3JtQ29udHJvbF09ImFkdmFuY2VkRm9ybUNvbnRyb2wiXG4vPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5jb25maWctY29udGFpbmVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KTtwYWRkaW5nOjhweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUFkdmFuY2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudCIsUG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5QbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjx0Yi1qc29uLW9iamVjdC1lZGl0XG4gIGZpbGxIZWlnaHQ9InRydWUiXG4gIGNsYXNzPSJ0Yi1mbGV4IGNvbmZpZy1jb250YWluZXIiXG4gIGZ4TGF5b3V0PSJjb2x1bW4iXG4gIGpzb25SZXF1aXJlZFxuICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgW2Zvcm1Db250cm9sXT0iYWR2YW5jZWRGb3JtQ29udHJvbCJcbi8+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmNvbmZpZy1jb250YWluZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpO3BhZGRpbmc6OHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIEdve2NvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLmRldmljZVNlcnZpY2U9bix0aGlzLmNkPWEsdGhpcy5Db25maWd1cmF0aW9uTW9kZXM9b24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5nYXRld2F5Q29uZmlnQXR0cmlidXRlS2V5cz1bImdlbmVyYWxfY29uZmlndXJhdGlvbiIsImdycGNfY29uZmlndXJhdGlvbiIsImxvZ3NfY29uZmlndXJhdGlvbiIsInN0b3JhZ2VfY29uZmlndXJhdGlvbiIsIlJlbW90ZUxvZ2dpbmdMZXZlbCIsIm1vZGUiXSx0aGlzLmdhdGV3YXlDb25maWdHcm91cD10aGlzLmZiLmdyb3VwKHtiYXNpY0NvbmZpZzpbXSxhZHZhbmNlZENvbmZpZzpbXSxtb2RlOltvbi5CQVNJQ119KSx0aGlzLm9ic2VydmVBbGlnbkNvbmZpZ3MoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmZldGNoQ29uZmlnQXR0cmlidXRlKHRoaXMuZGV2aWNlKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1zYXZlQ29uZmlnKCl7Y29uc3R7bW9kZTplLGFkdmFuY2VkQ29uZmlnOnR9PXBlKHRoaXMucmVtb3ZlRW1wdHkodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAudmFsdWUpKSxuPXttb2RlOmUsLi4udH07bi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPU9iamVjdC52YWx1ZXMobi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPz9bXSk7Y29uc3QgYT10aGlzLmdlbmVyYXRlQXR0cmlidXRlcyhuKTt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsYSkucGlwZShVZSgoZT0+dGhpcy51cGRhdGVDcmVkZW50aWFscyhuLnRoaW5nc2JvYXJkLnNlY3VyaXR5KSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5kaWFsb2dSZWY/dGhpcy5kaWFsb2dSZWYuY2xvc2UoKToodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSl9KSl9b2JzZXJ2ZUFsaWduQ29uZmlncygpe3RoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5CQVNJQ3x8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYWR2YW5jZWRDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImJhc2ljQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5BRFZBTkNFRHx8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWdlbmVyYXRlQXR0cmlidXRlcyhlKXtjb25zdCB0PVtdLG49KGUsbik9Pnt0LnB1c2goe2tleTplLHZhbHVlOm59KX0sYT0oZSx0KT0+e3Q9ey4uLnQsdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LG4oZSx0KX07cmV0dXJuIG4oIlJlbW90ZUxvZ2dpbmdMZXZlbCIsZS5sb2dzPy5yZW1vdGU/LmVuYWJsZWQ/ZS5sb2dzLnJlbW90ZS5sb2dMZXZlbDpNdC5OT05FKSxkZWxldGUgZS5jb25uZWN0b3JzLG4oImxvZ3NfY29uZmlndXJhdGlvbiIsdGhpcy5nZW5lcmF0ZUxvZ3NGaWxlKGUubG9ncykpLGEoImdycGNfY29uZmlndXJhdGlvbiIsZS5ncnBjKSxhKCJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iLGUuc3RvcmFnZSksYSgiZ2VuZXJhbF9jb25maWd1cmF0aW9uIixlLnRoaW5nc2JvYXJkKSxuKCJtb2RlIixlLm1vZGUpLHR9dXBkYXRlQ3JlZGVudGlhbHMoZSl7bGV0IHQ9e307c3dpdGNoKGUudHlwZSl7Y2FzZSBWdC5VU0VSTkFNRV9QQVNTV09SRDp0aGlzLnNob3VsZFVwZGF0ZUNyZWRlbnRpYWxzKGUpJiYodD10aGlzLmdlbmVyYXRlTXF0dENyZWRlbnRpYWxzKGUpKTticmVhaztjYXNlIFZ0LkFDQ0VTU19UT0tFTjpjYXNlIFZ0LlRMU19BQ0NFU1NfVE9LRU46dGhpcy5zaG91bGRVcGRhdGVBY2Nlc3NUb2tlbihlKSYmKHQ9e2NyZWRlbnRpYWxzVHlwZTpVLkFDQ0VTU19UT0tFTixjcmVkZW50aWFsc0lkOmUuYWNjZXNzVG9rZW59KX1yZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoP3RoaXMuZGV2aWNlU2VydmljZS5zYXZlRGV2aWNlQ3JlZGVudGlhbHMoey4uLnRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLC4uLnR9KTpJZShudWxsKX1zaG91bGRVcGRhdGVDcmVkZW50aWFscyhlKXtpZih0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLk1RVFRfQkFTSUMpcmV0dXJuITA7Y29uc3QgdD1KU09OLnBhcnNlKHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLmNyZWRlbnRpYWxzVmFsdWUpO3JldHVybiEodC5jbGllbnRJZD09PWUuY2xpZW50SWQmJnQudXNlck5hbWU9PT1lLnVzZXJuYW1lJiZ0LnBhc3N3b3JkPT09ZS5wYXNzd29yZCl9Z2VuZXJhdGVNcXR0Q3JlZGVudGlhbHMoZSl7Y29uc3R7Y2xpZW50SWQ6dCx1c2VybmFtZTpuLHBhc3N3b3JkOmF9PWUsbz17Li4udCYme2NsaWVudElkOnR9LC4uLm4mJnt1c2VyTmFtZTpufSwuLi5hJiZ7cGFzc3dvcmQ6YX19O3JldHVybntjcmVkZW50aWFsc1R5cGU6VS5NUVRUX0JBU0lDLGNyZWRlbnRpYWxzVmFsdWU6SlNPTi5zdHJpbmdpZnkobyl9fXNob3VsZFVwZGF0ZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLkFDQ0VTU19UT0tFTnx8dGhpcy5pbml0aWFsQ3JlZGVudGlhbHMuY3JlZGVudGlhbHNJZCE9PWUuYWNjZXNzVG9rZW59Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYmJnRoaXMuZGlhbG9nUmVmLmNsb3NlKCl9cmVtb3ZlRW1wdHkoZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKChbZSx0XSk9Pm51bGwhPXQpKS5tYXAoKChbZSx0XSk9PltlLHQ9PT1PYmplY3QodCk/dGhpcy5yZW1vdmVFbXB0eSh0KTp0XSkpKX1nZW5lcmF0ZUxvZ3NGaWxlKGUpe2NvbnN0IHQ9e3ZlcnNpb246MSxkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM6ITEsZm9ybWF0dGVyczp7TG9nRm9ybWF0dGVyOntjbGFzczoibG9nZ2luZy5Gb3JtYXR0ZXIiLGZvcm1hdDplLmxvZ0Zvcm1hdCxkYXRlZm10OmUuZGF0ZUZvcm1hdH19LGhhbmRsZXJzOntjb25zb2xlSGFuZGxlcjp7Y2xhc3M6ImxvZ2dpbmcuU3RyZWFtSGFuZGxlciIsZm9ybWF0dGVyOiJMb2dGb3JtYXR0ZXIiLGxldmVsOjAsc3RyZWFtOiJleHQ6Ly9zeXMuc3Rkb3V0In0sZGF0YWJhc2VIYW5kbGVyOntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6Ii4vbG9ncy9kYXRhYmFzZS5sb2ciLGJhY2t1cENvdW50OjEsZW5jb2Rpbmc6InV0Zi04In19LGxvZ2dlcnM6e2RhdGFiYXNlOntoYW5kbGVyczpbImRhdGFiYXNlSGFuZGxlciIsImNvbnNvbGVIYW5kbGVyIl0sbGV2ZWw6IkRFQlVHIixwcm9wYWdhdGU6ITF9fSxyb290OntsZXZlbDoiRVJST1IiLGhhbmRsZXJzOlsiY29uc29sZUhhbmRsZXIiXX0sdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9O3JldHVybiB0aGlzLmFkZExvY2FsTG9nZ2Vycyh0LGUubG9jYWwpLHR9YWRkTG9jYWxMb2dnZXJzKGUsdCl7Zm9yKGNvbnN0IG4gb2YgT2JqZWN0LmtleXModCkpZS5oYW5kbGVyc1tuKyJIYW5kbGVyIl09dGhpcy5jcmVhdGVIYW5kbGVyT2JqKHRbbl0sbiksZS5sb2dnZXJzW25dPXRoaXMuY3JlYXRlTG9nZ2VyT2JqKHRbbl0sbil9Y3JlYXRlSGFuZGxlck9iaihlLHQpe3JldHVybntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6YCR7ZS5maWxlUGF0aH0vJHt0fS5sb2dgLGJhY2t1cENvdW50OmUuYmFja3VwQ291bnQsaW50ZXJ2YWw6ZS5zYXZpbmdUaW1lLHdoZW46ZS5zYXZpbmdQZXJpb2QsZW5jb2Rpbmc6InV0Zi04In19Y3JlYXRlTG9nZ2VyT2JqKGUsdCl7cmV0dXJue2hhbmRsZXJzOltgJHt0fUhhbmRsZXJgLCJjb25zb2xlSGFuZGxlciJdLGxldmVsOmUubG9nTGV2ZWwscHJvcGFnYXRlOiExfX1mZXRjaENvbmZpZ0F0dHJpYnV0ZShlKXtlLmlkIT09ayYmdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLkNMSUVOVF9TQ09QRSkucGlwZShfZSgodD0+dC5sZW5ndGg/SWUodCk6dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLlNIQVJFRF9TQ09QRSx0aGlzLmdhdGV3YXlDb25maWdBdHRyaWJ1dGVLZXlzKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbmZpZ3MoZSksdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9dXBkYXRlQ29uZmlncyhlKXtjb25zdCB0PXt0aGluZ3Nib2FyZDp7fSxncnBjOnt9LGxvZ3M6e30sc3RvcmFnZTp7fSxtb2RlOm9uLkJBU0lDfTtlLmZvckVhY2goKGU9Pntzd2l0Y2goZS5rZXkpe2Nhc2UiZ2VuZXJhbF9jb25maWd1cmF0aW9uIjp0LnRoaW5nc2JvYXJkPWUudmFsdWUsdGhpcy51cGRhdGVGb3JtQ29udHJvbHMoZS52YWx1ZSk7YnJlYWs7Y2FzZSJncnBjX2NvbmZpZ3VyYXRpb24iOnQuZ3JwYz1lLnZhbHVlO2JyZWFrO2Nhc2UibG9nc19jb25maWd1cmF0aW9uIjp0LmxvZ3M9dGhpcy5sb2dzVG9PYmooZS52YWx1ZSk7YnJlYWs7Y2FzZSJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iOnQuc3RvcmFnZT1lLnZhbHVlO2JyZWFrO2Nhc2UibW9kZSI6dC5tb2RlPWUudmFsdWU7YnJlYWs7Y2FzZSJSZW1vdGVMb2dnaW5nTGV2ZWwiOnQubG9ncz17Li4udC5sb2dzLHJlbW90ZTp7ZW5hYmxlZDplLnZhbHVlIT09TXQuTk9ORSxsb2dMZXZlbDplLnZhbHVlfX19fSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS5zZXRWYWx1ZSh0LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIikuc2V0VmFsdWUodCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUNvbnRyb2xzKGUpe2NvbnN0e3R5cGU6dCxhY2Nlc3NUb2tlbjpuLC4uLmF9PWUuc2VjdXJpdHk/P3t9O3RoaXMuaW5pdGlhbENyZWRlbnRpYWxzPXtkZXZpY2VJZDp0aGlzLmRldmljZSxjcmVkZW50aWFsc1R5cGU6dCxjcmVkZW50aWFsc0lkOm4sY3JlZGVudGlhbHNWYWx1ZTpKU09OLnN0cmluZ2lmeShhKX19bG9nc1RvT2JqKGUpe2NvbnN0e2Zvcm1hdDp0LGRhdGVmbXQ6bn09ZS5mb3JtYXR0ZXJzLkxvZ0Zvcm1hdHRlcjtyZXR1cm57bG9jYWw6T2JqZWN0LmtleXMoUHQpLnJlZHVjZSgoKHQsbik9Pntjb25zdCBhPWUuaGFuZGxlcnNbYCR7bn1IYW5kbGVyYF18fHt9LG89ZS5sb2dnZXJzW25dfHx7fTtyZXR1cm4gdFtuXT17bG9nTGV2ZWw6by5sZXZlbHx8TXQuSU5GTyxmaWxlUGF0aDphLmZpbGVuYW1lPy5zcGxpdChgLyR7bn1gKVswXXx8Ii4vbG9ncyIsYmFja3VwQ291bnQ6YS5iYWNrdXBDb3VudHx8NyxzYXZpbmdUaW1lOmEuaW50ZXJ2YWx8fDMsc2F2aW5nUGVyaW9kOmEud2hlbnx8RHQuZGF5c30sdH0pLHt9KSxsb2dGb3JtYXQ6dCxkYXRlRm9ybWF0Om59fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6R28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6R28sc2VsZWN0b3I6InRiLWdhdGV3YXktY29uZmlndXJhdGlvbiIsaW5wdXRzOntkZXZpY2U6ImRldmljZSIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsaW5wdXRzOlsiZGV2aWNlIiwiZGlhbG9nTW9kZSJdLG91dHB1dHM6WyJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6UG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUNvbmZpZ3VyYXRpb25Db21wb25lbnQiLEdvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkdvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbmZpZ3VyYXRpb24iLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTt2YXIgT289e2dhdGV3YXk6e2FkZHJlc3M6IkFkZHJlc3MiLCJhZGRyZXNzLXJlcXVpcmVkIjoiQWRkcmVzcyByZXF1aXJlZCIsImFkZC1lbnRyeSI6IkFkZCBjb25maWd1cmF0aW9uIiwiYWRkLWF0dHJpYnV0ZSI6IkFkZCBhdHRyaWJ1dGUiLCJhZGQtYXR0cmlidXRlLXVwZGF0ZSI6IkFkZCBhdHRyaWJ1dGUgdXBkYXRlIiwiYWRkLWtleSI6IkFkZCBrZXkiLCJhZGQtdGltZXNlcmllcyI6IkFkZCB0aW1lIHNlcmllcyIsImFkZC1tYXBwaW5nIjoiQWRkIG1hcHBpbmciLCJhZGQtc2xhdmUiOiJBZGQgU2xhdmUiLGFyZ3VtZW50czoiQXJndW1lbnRzIiwiYWRkLXJwYy1tZXRob2QiOiJBZGQgbWV0aG9kIiwiYWRkLXJwYy1yZXF1ZXN0IjoiQWRkIHJlcXVlc3QiLCJhZGQtdmFsdWUiOiJBZGQgYXJndW1lbnQiLGJhdWRyYXRlOiJCYXVkcmF0ZSIsYnl0ZXNpemU6IkJ5dGVzaXplIiwiZGVsZXRlLXZhbHVlIjoiRGVsZXRlIHZhbHVlIiwiZGVsZXRlLXJwYy1tZXRob2QiOiJEZWxldGUgbWV0aG9kIiwiZGVsZXRlLXJwYy1yZXF1ZXN0IjoiRGVsZXRlIHJlcXVlc3QiLCJkZWxldGUtYXR0cmlidXRlLXVwZGF0ZSI6IkRlbGV0ZSBhdHRyaWJ1dGUgdXBkYXRlIixhZHZhbmNlZDoiQWR2YW5jZWQiLCJhZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzIjoiQWR2YW5jZWQgY29ubmVjdGlvbiBzZXR0aW5ncyIsYXR0cmlidXRlczoiQXR0cmlidXRlcyIsImF0dHJpYnV0ZS11cGRhdGVzIjoiQXR0cmlidXRlIHVwZGF0ZXMiLCJhdHRyaWJ1dGUtZmlsdGVyIjoiQXR0cmlidXRlIGZpbHRlciIsImF0dHJpYnV0ZS1maWx0ZXItaGludCI6IkZpbHRlciBmb3IgaW5jb21pbmcgYXR0cmlidXRlIG5hbWUgZnJvbSBwbGF0Zm9ybSwgc3VwcG9ydHMgcmVndWxhciBleHByZXNzaW9uLiIsImF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWQiOiJBdHRyaWJ1dGUgZmlsdGVyIHJlcXVpcmVkLiIsImF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb24iOiJBdHRyaWJ1dGUgbmFtZSBleHByZXNzaW9uIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGV4cHJlc3Npb24gcmVxdWlyZWQuIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1oaW50IjoiSGludCBmb3IgQXR0cmlidXRlIG5hbWUgZXhwcmVzc2lvbiIsYmFzaWM6IkJhc2ljIiwiYnl0ZS1vcmRlciI6IkJ5dGUgb3JkZXIiLCJ3b3JkLW9yZGVyIjoiV29yZCBvcmRlciIsYnJva2VyOntjb25uZWN0aW9uOiJDb25uZWN0aW9uIHRvIGJyb2tlciIsbmFtZToiQnJva2VyIG5hbWUiLCJuYW1lLXJlcXVpcmVkIjoiQnJva2VyIG5hbWUgcmVxdWlyZWQuIiwic2VjdXJpdHktdHlwZXMiOnthbm9ueW1vdXM6IkFub255bW91cyIsYmFzaWM6IkJhc2ljIixjZXJ0aWZpY2F0ZXM6IkNlcnRpZmljYXRlcyJ9fSwiQ0EtY2VydGlmaWNhdGUtcGF0aCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsInBhdGgtdG8tQ0EtY2VydC1yZXF1aXJlZCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjaGFuZ2UtY29ubmVjdG9yLXRpdGxlIjoiQ29uZmlybSBjb25uZWN0b3IgY2hhbmdlIiwiY2hhbmdlLWNvbm5lY3Rvci10ZXh0IjoiU3dpdGNoaW5nIGNvbm5lY3RvcnMgd2lsbCBkaXNjYXJkIGFueSB1bnNhdmVkIGNoYW5nZXMuIENvbnRpbnVlPyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IkNoZWNraW5nIGRldmljZSBhY3Rpdml0eSIsY29tbWFuZDoiRG9ja2VyIGNvbW1hbmRzIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlciBjb21tYW5kIGhhcyBiZWVuIGNvcGllZCB0byBjbGlwYm9hcmQiLGNvbmZpZ3VyYXRpb246IkNvbmZpZ3VyYXRpb24iLCJhZGQtY29ubmVjdG9yIjoiQWRkIGNvbm5lY3RvciIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKHMpIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJDb25uZWN0IGF0dGVtcHQgdGltZSAobXMpIiwiY29ubmVjdC1hdHRlbXB0LWNvdW50IjoiQ29ubmVjdCBhdHRlbXB0IGNvdW50IiwiY29weS11c2VybmFtZSI6IkNvcHkgdXNlcm5hbWUiLCJjb3B5LXBhc3N3b3JkIjoiQ29weSBwYXNzd29yZCIsImNvcHktY2xpZW50LWlkIjoiQ29weSBjbGllbnQgSUQiLCJjb25uZWN0b3ItY3JlYXRlZCI6IkNvbm5lY3RvciBjcmVhdGVkIiwiY29ubmVjdG9yLXVwZGF0ZWQiOiJDb25uZWN0b3IgdXBkYXRlZCIsInJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGUiOiJTYXZlIFRlbXBsYXRlIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXNwb25zZSIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiVXNlIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gdG8gcnVuIElvVCBHYXRld2F5IGluIERvY2tlciBjb21wb3NlIHdpdGggY3JlZGVudGlhbHMgZm9yIHNlbGVjdGVkIGRldmljZSIsImluc3RhbGwtZG9ja2VyLWNvbXBvc2UiOiJVc2UgdGhlIGluc3RydWN0aW9ucyB0byBkb3dubG9hZCwgaW5zdGFsbCBhbmQgc2V0dXAgZG9ja2VyIGNvbXBvc2UiLCJkZXZpY2UtaW5mby1zZXR0aW5ncyI6IkRldmljZSBpbmZvIHNldHRpbmdzIiwiZGV2aWNlLWluZm8iOnsiZW50aXR5LWZpZWxkIjoiRW50aXR5IGZpZWxkIixzb3VyY2U6IlNvdXJjZSIsZXhwcmVzc2lvbjoiVmFsdWUgLyBFeHByZXNzaW9uIiwiZXhwcmVzc2lvbi1oaW50IjoiU2hvdyBoZWxwIixuYW1lOiJOYW1lIiwicHJvZmlsZS1uYW1lIjoiUHJvZmlsZSBuYW1lIiwiZGV2aWNlLW5hbWUtZXhwcmVzc2lvbiI6IkRldmljZSBuYW1lIGV4cHJlc3Npb24iLCJkZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJkZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIHByb2ZpbGUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4ifSwiZGV2aWNlLW5hbWUtZmlsdGVyIjoiRGV2aWNlIG5hbWUgZmlsdGVyIiwiZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZmlsdGVyIGluY29taW5nIGRhdGEgYnkgZGV2aWNlIG5hbWUuIiwiZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZmlsdGVyIGlzIHJlcXVpcmVkLiIsZGV0YWlsczoiRGV0YWlscyIsImRlbGV0ZS1tYXBwaW5nLXRpdGxlIjoiRGVsZXRlIG1hcHBpbmc/IiwiZGVsZXRlLXNsYXZlLXRpdGxlIjoiRGVsZXRlIHNsYXZlPyIsZGl2aWRlcjoiRGl2aWRlciIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6IkRvd25sb2FkIGNvbmZpZ3VyYXRpb24gZmlsZSIsImRvd25sb2FkLWRvY2tlci1jb21wb3NlIjoiRG93bmxvYWQgZG9ja2VyLWNvbXBvc2UueW1sIGZvciB5b3VyIGdhdGV3YXkiLCJlbmFibGUtcmVtb3RlLWxvZ2dpbmciOiJFbmFibGUgcmVtb3RlIGxvZ2dpbmciLCJlbGxpcHNpcy1jaGlwcy10ZXh0IjoiKyB7e2NvdW50fX0gbW9yZSIsImxhdW5jaC1nYXRld2F5IjoiTGF1bmNoIGdhdGV3YXkiLCJsYXVuY2gtY29tbWFuZCI6IkxhdW5jaCBjb21tYW5kIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoiU3RhcnQgdGhlIGdhdGV3YXkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSB0ZXJtaW5hbCBmcm9tIGZvbGRlciB3aXRoIGRvY2tlci1jb21wb3NlLnltbCBmaWxlIiwibG9ncy1jb25maWd1cmF0aW9uIjoiTG9ncyBjb25maWd1cmF0aW9uIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXRlIGEgbmV3IGdhdGV3YXkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgZ2F0ZXdheSB3aXRoIG5hbWU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkNyZWF0ZWQgdGltZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXIiOiJDb25maWd1cmF0aW9ucyB3aWxsIGJlIGRlbGV0ZWQiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6IlR1cm5pbmcgb2ZmIFJlbW90ZSBDb25maWd1cmF0aW9uIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgaXMgcGh5c2ljYWwgYWNjZXNzIHRvIHRoZSBHYXRld2F5LiBBbGwgcHJldmlvdXMgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkLjxicj48YnI+IFxuVG8gdHVybiBvZmYgY29uZmlndXJhdGlvbiwgZW50ZXIgZ2F0ZXdheSBuYW1lIGJlbG93IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0IjoiR2F0ZXdheSBuYW1lIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIG1hbmRhdG9yeSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtIjoiVHVybiBPZmYiLCJjb25uZWN0b3ItZHVwbGljYXRlLW5hbWUiOiJDb25uZWN0b3Igd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMuIiwiY29ubmVjdG9yLXNpZGUiOiJDb25uZWN0b3Igc2lkZSIsInBheWxvYWQtdHlwZSI6IlBheWxvYWQgdHlwZSIsInBsYXRmb3JtLXNpZGUiOiJQbGF0Zm9ybSBzaWRlIixKU09OOiJKU09OIiwiSlNPTi1oaW50IjoiQ29udmVydGVyIGZvciB0aGlzIHBheWxvYWQgdHlwZSBwcm9jZXNzZXMgTVFUVCBtZXNzYWdlcyBpbiBKU09OIGZvcm1hdC4gSXQgdXNlcyBKU09OIFBhdGggZXhwcmVzc2lvbnMgdG8gZXh0cmFjdCB2aXRhbCBkZXRhaWxzIHN1Y2ggYXMgZGV2aWNlIG5hbWVzLCBkZXZpY2UgcHJvZmlsZSBuYW1lcywgYXR0cmlidXRlcywgYW5kIHRpbWUgc2VyaWVzIGZyb20gdGhlIG1lc3NhZ2UuIEFuZCByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGdldCBkZXZpY2UgZGV0YWlscyBmcm9tIHRvcGljcy4iLGJ5dGVzOiJCeXRlcyIsImJ5dGVzLWhpbnQiOiJDb252ZXJ0ZXIgZm9yIHRoaXMgcGF5bG9hZCB0eXBlIGRlc2lnbmVkIGZvciBiaW5hcnkgTVFUVCBwYXlsb2FkcywgdGhpcyBjb252ZXJ0ZXIgZGlyZWN0bHkgaW50ZXJwcmV0cyBiaW5hcnkgZGF0YSB0byByZXRyaWV2ZSBkZXZpY2UgbmFtZXMgYW5kIGRldmljZSBwcm9maWxlIG5hbWVzLCBhbG9uZyB3aXRoIGF0dHJpYnV0ZXMgYW5kIHRpbWUgc2VyaWVzLCB1c2luZyBzcGVjaWZpYyBieXRlIHBvc2l0aW9ucyBmb3IgZGF0YSBleHRyYWN0aW9uLiIsY3VzdG9tOiJDdXN0b20iLCJjdXN0b20taGludCI6IlRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gdXNlIGEgY3VzdG9tIGNvbnZlcnRlciBmb3Igc3BlY2lmaWMgZGF0YSB0YXNrcy4gWW91IG5lZWQgdG8gYWRkIHlvdXIgY3VzdG9tIGNvbnZlcnRlciB0byB0aGUgZXh0ZW5zaW9uIGZvbGRlciBhbmQgZW50ZXIgaXRzIGNsYXNzIG5hbWUgaW4gdGhlIFVJIHNldHRpbmdzLiBBbnkga2V5cyB5b3UgcHJvdmlkZSB3aWxsIGJlIHNlbnQgYXMgY29uZmlndXJhdGlvbiB0byB5b3VyIGN1c3RvbSBjb252ZXJ0ZXIuIiwiY2xpZW50LWNlcnQtcGF0aCI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIGZpbGUiLCJwYXRoLXRvLWNsaWVudC1jZXJ0LXJlcXVpcmVkIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjbGllbnQtaWQiOiJDbGllbnQgSUQiLCJkYXRhLWNvbnZlcnNpb24iOiJEYXRhIGNvbnZlcnNpb24iLCJkYXRhLW1hcHBpbmciOiJEYXRhIG1hcHBpbmciLCJkYXRhLW1hcHBpbmctaGludCI6IkRhdGEgbWFwcGluZyBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSB0byBwYXJzZSBhbmQgY29udmVydCB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIGEgTVFUVCBjbGllbnQgaW4gaW5jb21pbmcgbWVzc2FnZXMgaW50byBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBkYXRhIGtleXMuIiwib3BjdWEtZGF0YS1tYXBwaW5nLWhpbnQiOiJEYXRhIG1hcHBpbmcgcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgdG8gcGFyc2UgYW5kIGNvbnZlcnQgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBhIE9QQ1VBIHNlcnZlciBpbnRvIHNwZWNpZmljIGRhdGEga2V5cy4iLGRlbGV0ZToiRGVsZXRlIGNvbmZpZ3VyYXRpb24iLCJkZWxldGUtYXR0cmlidXRlIjoiRGVsZXRlIGF0dHJpYnV0ZSIsImRlbGV0ZS1rZXkiOiJEZWxldGUga2V5IiwiZGVsZXRlLXRpbWVzZXJpZXMiOiJEZWxldGUgdGltZSBzZXJpZXMiLGRlZmF1bHQ6IkRlZmF1bHQiLCJkZXZpY2Utbm9kZSI6IkRldmljZSBub2RlIiwiZGV2aWNlLW5vZGUtcmVxdWlyZWQiOiJEZXZpY2Ugbm9kZSByZXF1aXJlZC4iLCJkZXZpY2Utbm9kZS1oaW50IjoiUGF0aCBvciBpZGVudGlmaWVyIGZvciBkZXZpY2Ugbm9kZSBvbiBPUEMgVUEgc2VydmVyLiBSZWxhdGl2ZSBwYXRocyBmcm9tIGl0IGZvciBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBjYW4gYmUgdXNlZC4iLCJkZXZpY2UtbmFtZSI6IkRldmljZSBuYW1lIiwiZGV2aWNlLXByb2ZpbGUtbGFiZWwiOiJEZXZpY2UgcHJvZmlsZSIsImRldmljZS1uYW1lLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgcmVxdWlyZWQiLCJkZXZpY2UtcHJvZmlsZS1yZXF1aXJlZCI6IkRldmljZSBwcm9maWxlIHJlcXVpcmVkIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGVuYWJsZToiRW5hYmxlIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IkVuYWJsZSBzdWJzY3JpcHRpb24iLGV4dGVuc2lvbjoiRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uLWhpbnQiOiJQdXQgeW91ciBjb252ZXJ0ZXIgY2xhc3NuYW1lIGluIHRoZSBmaWVsZC4gQ3VzdG9tIGNvbnZlcnRlciB3aXRoIHN1Y2ggY2xhc3Mgc2hvdWxkIGJlIGluIGV4dGVuc2lvbi9tcXR0IGZvbGRlci4iLCJleHRlbnNpb24tcmVxdWlyZWQiOiJFeHRlbnNpb24gaXMgcmVxdWlyZWQuIiwiZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24iOiJFeHRlbnNpb24gY29uZmlndXJhdGlvbiIsImV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnQiOiJDb25maWd1cmF0aW9uIGZvciBjb252ZXJ0b3IiLCJmaWxsLWNvbm5lY3Rvci1kZWZhdWx0cyI6IkZpbGwgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHQgdmFsdWVzIiwiZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludCI6IlRoaXMgcHJvcGVydHkgYWxsb3dzIHRvIGZpbGwgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0IHZhbHVlcyBvbiBpdCdzIGNyZWF0aW9uLiIsImZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MiOiJJbnB1dCByZXF1ZXN0IHBhcnNpbmciLCJmcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnQiOiJUaGVzZSBmaWVsZHMgc3VwcG9ydCBKU09OUGF0aCBleHByZXNzaW9ucyB0byBleHRyYWN0IGEgbmFtZSBmcm9tIGluY29taW5nIG1lc3NhZ2UuIiwiZnVuY3Rpb24tY29kZSI6IkZ1bmN0aW9uIGNvZGUiLCJmdW5jdGlvbi1jb2RlcyI6eyJyZWFkLWNvaWxzIjoiMDEgLSBSZWFkIENvaWxzIiwicmVhZC1kaXNjcmV0ZS1pbnB1dHMiOiIwMiAtIFJlYWQgRGlzY3JldGUgSW5wdXRzIiwicmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyI6IjAzIC0gUmVhZCBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyIsInJlYWQtaW5wdXQtcmVnaXN0ZXJzIjoiMDQgLSBSZWFkIElucHV0IFJlZ2lzdGVycyIsIndyaXRlLXNpbmdsZS1jb2lsIjoiMDUgLSBXcml0ZSBTaW5nbGUgQ29pbCIsIndyaXRlLXNpbmdsZS1ob2xkaW5nLXJlZ2lzdGVyIjoiMDYgLSBXcml0ZSBTaW5nbGUgSG9sZGluZyBSZWdpc3RlciIsIndyaXRlLW11bHRpcGxlLWNvaWxzIjoiMTUgLSBXcml0ZSBNdWx0aXBsZSBDb2lscyIsIndyaXRlLW11bHRpcGxlLWhvbGRpbmctcmVnaXN0ZXJzIjoiMTYgLSBXcml0ZSBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyJ9LCJ0by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MiOiJPdXRwdXQgcmVxdWVzdCBwcm9jZXNzaW5nIiwidG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzLWhpbnQiOiJGb3IgdGhlc2UgZmllbGRzIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFuZCB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhY3R1YWwgdmFsdWVzOiAke2RldmljZU5hbWV9LCAke2F0dHJpYnV0ZUtleX0sICR7YXR0cmlidXRlVmFsdWV9IixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImdlbmVyYXRlLWNsaWVudC1pZCI6IkdlbmVyYXRlIENsaWVudCBJRCIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsaW5mbzoiSW5mbyIsaWRlbnRpdHk6IklkZW50aXR5IiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJ1bml0LWlkIjoiVW5pdCBJRCIsaG9zdDoiSG9zdCIsImhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsaG9sZGluZ19yZWdpc3RlcnM6IkhvbGRpbmcgcmVnaXN0ZXJzIixjb2lsc19pbml0aWFsaXplcjoiQ29pbHMgaW5pdGlhbGl6ZXIiLGlucHV0X3JlZ2lzdGVyczoiSW5wdXQgcmVnaXN0ZXJzIixkaXNjcmV0ZV9pbnB1dHM6IkRpc2NyZXRlIGlucHV0cyIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIkpTT05QYXRoLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIGNvbnN0YW50cyBhbmQgSlNPTlBhdGggZXhwcmVzc2lvbnMuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWF4LW51bWJlci1vZi13b3JrZXJzIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIiwibWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnQiOiJNYXhpbWFsIG51bWJlciBvZiB3b3JrZXJzIHRocmVhZHMgZm9yIGNvbnZlcnRlcnMgXG4oVGhlIGFtb3VudCBvZiB3b3JrZXJzIGNoYW5nZXMgZHluYW1pY2FsbHksIGRlcGVuZGluZyBvbiBsb2FkKSBcblJlY29tbWVuZGVkIGFtb3VudCA1MC0xNTAuIiwibWF4LW51bWJlci1vZi13b3JrZXJzLXJlcXVpcmVkIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIGlzIHJlcXVpcmVkLiIsIm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyIjoiTWF4IG1lc3NhZ2VzIHF1ZXVlIHBlciB3b3JrZXIiLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1oaW50IjoiTWF4aW1hbCBtZXNzYWdlcyBjb3VudCB0aGF0IHdpbGwgYmUgaW4gdGhlIHF1ZXVlIFxuZm9yIGVhY2ggY29udmVydGVyIHdvcmtlci4iLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZCI6Ik1heCBtZXNzYWdlcyBxdWV1ZSBwZXIgd29ya2VyIGlzIHJlcXVpcmVkLiIsbWV0aG9kOiJNZXRob2QiLCJtZXRob2QtbmFtZSI6Ik1ldGhvZCBuYW1lIiwibWV0aG9kLXJlcXVpcmVkIjoiTWV0aG9kIG5hbWUgaXMgcmVxdWlyZWQuIiwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwIiwibWluLXBhY2stc2VuZC1kZWxheS1wYXR0ZXJuIjoiTWluIHBhY2sgc2VuZCBkZWxheSBpcyBub3QgdmFsaWQiLG11bHRpcGxpZXI6Ik11bHRpcGxpZXIiLG1vZGU6Ik1vZGUiLCJtb2RlbC1uYW1lIjoiTW9kZWwgbmFtZSIsbW9kaWZpZXI6Ik1vZGlmaWVyIiwibW9kaWZpZXItaW52YWxpZCI6Ik1vZGlmaWVyIGlzIG5vdCB2YWxpZCIsIm1xdHQtdmVyc2lvbiI6Ik1RVFQgdmVyc2lvbiIsbmFtZToiTmFtZSIsIm5hbWUtcmVxdWlyZWQiOiJOYW1lIGlzIHJlcXVpcmVkLiIsIm5vLWF0dHJpYnV0ZXMiOiJObyBhdHRyaWJ1dGVzIiwibm8tYXR0cmlidXRlLXVwZGF0ZXMiOiJObyBhdHRyaWJ1dGUgdXBkYXRlcyIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJuby10aW1lc2VyaWVzIjoiTm8gdGltZSBzZXJpZXMiLCJuby1rZXlzIjoiTm8ga2V5cyIsIm5vLXZhbHVlIjoiTm8gYXJndW1lbnRzIiwibm8tcnBjLW1ldGhvZHMiOiJObyBSUEMgbWV0aG9kcyIsIm5vLXJwYy1yZXF1ZXN0cyI6Ik5vIFJQQyByZXF1ZXN0cyIsInBhdGgtaGludCI6IlRoZSBwYXRoIGlzIGxvY2FsIHRvIHRoZSBnYXRld2F5IGZpbGUgc3lzdGVtIiwicGF0aC1sb2dzIjoiUGF0aCB0byBsb2cgZmlsZXMiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYXRoIGlzIHJlcXVpcmVkLiIscGFzc3dvcmQ6IlBhc3N3b3JkIiwicGFzc3dvcmQtcmVxdWlyZWQiOiJQYXNzd29yZCBpcyByZXF1aXJlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IktlZXAgYWxpdmUgcGVybWl0IHdpdGhvdXQgY2FsbHMiLCJwb2xsLXBlcmlvZCI6IlBvbGwgcGVyaW9kIChtcykiLCJwb2xsLXBlcmlvZC1lcnJvciI6IlBvbGwgcGVyaW9kIHNob3VsZCBiZSBhdCBsZWFzdCB7e21pbn19IChtcykuIixwb3J0OiJQb3J0IiwicG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIiwicG9ydC1saW1pdHMtZXJyb3IiOiJQb3J0IHNob3VsZCBiZSBudW1iZXIgZnJvbSB7e21pbn19IHRvIHt7bWF4fX0uIiwicHJpdmF0ZS1rZXktcGF0aCI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgZmlsZSIsInBhdGgtdG8tcHJpdmF0ZS1rZXktcmVxdWlyZWQiOiJQYXRoIHRvIHByaXZhdGUga2V5IGZpbGUgaXMgcmVxdWlyZWQuIixwYXJpdHk6IlBhcml0eSIsInByb2R1Y3QtY29kZSI6IlByb2R1Y3QgY29kZSIsInByb2R1Y3QtbmFtZSI6IlByb2R1Y3QgbmFtZSIscmF3OiJSYXciLHJldGFpbjoiUmV0YWluIiwicmV0YWluLWhpbnQiOiJUaGlzIGZsYWcgdGVsbHMgdGhlIGJyb2tlciB0byBzdG9yZSB0aGUgbWVzc2FnZSBmb3IgYSB0b3BpY1xuYW5kIGVuc3VyZXMgYW55IG5ldyBjbGllbnQgc3Vic2NyaWJpbmcgdG8gdGhhdCB0b3BpY1xud2lsbCByZWNlaXZlIHRoZSBzdG9yZWQgbWVzc2FnZS4iLHJlbW90ZToiUmVtb3RlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IkxvZ2dpbmcgbGV2ZWwiLCJyZW1vdmUtZW50cnkiOiJSZW1vdmUgY29uZmlndXJhdGlvbiIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLHJldHJpZXM6IlJldHJpZXMiLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cmllcyBvbiBlbXB0eSIsInJldHJpZXMtb24taW52YWxpZCI6IlJldHJpZXMgb24gaW52YWxpZCIscnBjOnt0aXRsZToie3t0eXBlfX0gQ29ubmVjdG9yIFJQQyBwYXJhbWV0ZXJzIiwidGVtcGxhdGVzLXRpdGxlIjoiQ29ubmVjdG9yIFJQQyBUZW1wbGF0ZXMiLG1ldGhvZEZpbHRlcjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1uYW1lIjoiTWV0aG9kIG5hbWUiLHJlcXVlc3RUb3BpY0V4cHJlc3Npb246IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiIscmVzcG9uc2VUb3BpY0V4cHJlc3Npb246IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLHJlc3BvbnNlVGltZW91dDoiUmVzcG9uc2UgdGltZW91dCIsdmFsdWVFeHByZXNzaW9uOiJWYWx1ZSBleHByZXNzaW9uIix0YWc6IlRhZyIsdHlwZToiVHlwZSIsZnVuY3Rpb25Db2RlOiJGdW5jdGlvbiBDb2RlIixvYmplY3RzQ291bnQ6Ik9iamVjdHMgQ291bnQiLGFkZHJlc3M6IkFkZHJlc3MiLG1ldGhvZDoiTWV0aG9kIixyZXF1ZXN0VHlwZToiUmVxdWVzdCBUeXBlIixyZXF1ZXN0VGltZW91dDoiUmVxdWVzdCBUaW1lb3V0IixvYmplY3RUeXBlOiJPYmplY3QgdHlwZSIsaWRlbnRpZmllcjoiSWRlbnRpZmllciIscHJvcGVydHlJZDoiUHJvcGVydHkgSUQiLG1ldGhvZFJQQzoiTWV0aG9kIFJQQyBuYW1lIix3aXRoUmVzcG9uc2U6IldpdGggUmVzcG9uc2UiLGNoYXJhY3RlcmlzdGljVVVJRDoiQ2hhcmFjdGVyaXN0aWMgVVVJRCIsbWV0aG9kUHJvY2Vzc2luZzoiTWV0aG9kIFByb2Nlc3NpbmciLG5vZGVJRDoiTm9kZSBJRCIsaXNFeHRlbmRlZElEOiJJcyBFeHRlbmRlZCBJRCIsaXNGRDoiSXMgRkQiLGJpdHJhdGVTd2l0Y2g6IkJpdHJhdGUgU3dpdGNoIixkYXRhSW5IRVg6IkRhdGEgSW4gSEVYIixkYXRhTGVuZ3RoOiJEYXRhIExlbmd0aCIsZGF0YUJ5dGVvcmRlcjoiRGF0YSBCeXRlIE9yZGVyIixkYXRhQmVmb3JlOiJEYXRhIEJlZm9yZSIsZGF0YUFmdGVyOiJEYXRhIEFmdGVyIixkYXRhRXhwcmVzc2lvbjoiRGF0YSBFeHByZXNzaW9uIixlbmNvZGluZzoiRW5jb2RpbmciLG9pZDoiT0lEIiwiYWRkLW9pZCI6IkFkZCBPSUQiLCJhZGQtaGVhZGVyIjoiQWRkIGhlYWRlciIsImFkZC1zZWN1cml0eSI6IkFkZCBzZWN1cml0eSIscmVtb3ZlOiJSZW1vdmUiLHJlcXVlc3RGaWx0ZXI6IlJlcXVlc3QgRmlsdGVyIixyZXF1ZXN0VXJsRXhwcmVzc2lvbjoiUmVxdWVzdCBVUkwgRXhwcmVzc2lvbiIsaHR0cE1ldGhvZDoiSFRUUCBNZXRob2QiLHRpbWVvdXQ6IlRpbWVvdXQiLHRyaWVzOiJUcmllcyIsaHR0cEhlYWRlcnM6IkhUVFAgSGVhZGVycyIsImhlYWRlci1uYW1lIjoiSGVhZGVyIG5hbWUiLGhpbnQ6eyJtb2RidXMtcmVzcG9uc2UtcmVhZGluZyI6IlJQQyByZXNwb25zZSB3aWxsIHJldHVybiBhbGwgc3VidHJhY3RlZCB2YWx1ZXMgZnJvbSBhbGwgY29ubmVjdGVkIGRldmljZXMgd2hlbiB0aGUgcmVhZGluZyBmdW5jdGlvbnMgYXJlIHNlbGVjdGVkLiIsIm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9ucyI6IlJQQyB3aWxsIHdyaXRlIGEgZmlsbGVkIHZhbHVlIHRvIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyB3aGVuIHRoZSB3cml0aW5nIGZ1bmN0aW9ucyBhcmUgc2VsZWN0ZWQuIiwib3BjLW1ldGhvZCI6IkEgZmlsbGVkIG1ldGhvZCBuYW1lIGlzIHRoZSBPUEMtVUEgbWV0aG9kIHRoYXQgd2lsbCBwcm9jZXNzZWQgb24gdGhlIHNlcnZlciBzaWRlIChtYWtlIHN1cmUgeW91ciBub2RlIGhhcyB0aGUgcmVxdWVzdGVkIG1ldGhvZCkuIn0sInNlY3VyaXR5LW5hbWUiOiJTZWN1cml0eSBuYW1lIix2YWx1ZToiVmFsdWUiLHNlY3VyaXR5OiJTZWN1cml0eSIscmVzcG9uc2VWYWx1ZUV4cHJlc3Npb246IlJlc3BvbnNlIFZhbHVlIEV4cHJlc3Npb24iLHJlcXVlc3RWYWx1ZUV4cHJlc3Npb246IlJlcXVlc3QgVmFsdWUgRXhwcmVzc2lvbiIsYXJndW1lbnRzOiJBcmd1bWVudHMiLCJhZGQtYXJndW1lbnQiOiJBZGQgYXJndW1lbnQiLCJ3cml0ZS1wcm9wZXJ0eSI6IldyaXRlIHByb3BlcnR5IiwicmVhZC1wcm9wZXJ0eSI6IlJlYWQgcHJvcGVydHkiLCJhbmFsb2ctb3V0cHV0IjoiQW5hbG9nIG91dHB1dCIsImFuYWxvZy1pbnB1dCI6IkFuYWxvZyBpbnB1dCIsImJpbmFyeS1vdXRwdXQiOiJCaW5hcnkgb3V0cHV0IiwiYmluYXJ5LWlucHV0IjoiQmluYXJ5IGlucHV0IiwiYmluYXJ5LXZhbHVlIjoiQmluYXJ5IHZhbHVlIiwiYW5hbG9nLXZhbHVlIjoiQW5hbG9nIHZhbHVlIix3cml0ZToiV3JpdGUiLHJlYWQ6IlJlYWQiLHNjYW46IlNjYW4iLG9pZHM6Ik9JRFMiLHNldDoiU2V0IixtdWx0aXNldDoiTXVsdGlzZXQiLGdldDoiR2V0IiwiYnVsay13YWxrIjoiQnVsayB3YWxrIix0YWJsZToiVGFibGUiLCJtdWx0aS1nZXQiOiJNdWx0aWdldCIsImdldC1uZXh0IjoiR2V0IG5leHQiLCJidWxrLWdldCI6IkJ1bGsgZ2V0Iix3YWxrOiJXYWxrIiwic2F2ZS10ZW1wbGF0ZSI6IlNhdmUgdGVtcGxhdGUiLCJ0ZW1wbGF0ZS1uYW1lIjoiVGVtcGxhdGUgbmFtZSIsInRlbXBsYXRlLW5hbWUtcmVxdWlyZWQiOiJUZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLiIsInRlbXBsYXRlLW5hbWUtZHVwbGljYXRlIjoiVGVtcGxhdGUgd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgdXBkYXRlZC4iLGNvbW1hbmQ6IkNvbW1hbmQiLHBhcmFtczoiUGFyYW1zIiwianNvbi12YWx1ZS1pbnZhbGlkIjoiSlNPTiB2YWx1ZSBoYXMgYW4gaW52YWxpZCBmb3JtYXQifSwicnBjLW1ldGhvZHMiOiJSUEMgbWV0aG9kcyIsInJwYy1yZXF1ZXN0cyI6IlJQQyByZXF1ZXN0cyIscmVxdWVzdDp7ImNvbm5lY3QtcmVxdWVzdCI6IkNvbm5lY3QgcmVxdWVzdCIsImRpc2Nvbm5lY3QtcmVxdWVzdCI6IkRpc2Nvbm5lY3QgcmVxdWVzdCIsImF0dHJpYnV0ZS1yZXF1ZXN0IjoiQXR0cmlidXRlIHJlcXVlc3QiLCJhdHRyaWJ1dGUtdXBkYXRlIjoiQXR0cmlidXRlIHVwZGF0ZSIsInJwYy1jb25uZWN0aW9uIjoiUlBDIGNvbW1hbmQifSwicmVxdWVzdC10eXBlIjoiUmVxdWVzdCB0eXBlIiwicmVxdWVzdHMtbWFwcGluZyI6IlJlcXVlc3RzIG1hcHBpbmciLCJyZXF1ZXN0cy1tYXBwaW5nLWhpbnQiOiJNUVRUIENvbm5lY3RvciByZXF1ZXN0cyBhbGxvd3MgeW91IHRvIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHByb2Nlc3MgYXR0cmlidXRlIHJlcXVlc3RzIGZyb20gdGhlIGRldmljZSwgaGFuZGxlIGF0dHJpYnV0ZSB1cGRhdGVzIG9uIHRoZSBzZXJ2ZXIgYW5kIFJQQyBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24uIiwicmVxdWVzdC10b3BpYy1leHByZXNzaW9uIjoiUmVxdWVzdCB0b3BpYyBleHByZXNzaW9uIiwicmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGUiOiJSZXF1ZXN0IGNsaWVudCBjZXJ0aWZpY2F0ZSIsInJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS10aW1lb3V0IjoiUmVzcG9uc2UgdGltZW91dCAobXMpIiwicmVzcG9uc2UtdGltZW91dC1yZXF1aXJlZCI6IlJlc3BvbnNlIHRpbWVvdXQgaXMgcmVxdWlyZWQuIiwicmVzcG9uc2UtdGltZW91dC1saW1pdHMtZXJyb3IiOiJUaW1lb3V0IG11c3QgYmUgbW9yZSB0aGVuIHt7bWlufX0gbXMuIiwicmVzcG9uc2UtdG9waWMtUW9zIjoiUmVzcG9uc2UgdG9waWMgUW9TIiwicmVzcG9uc2UtdG9waWMtUW9zLWhpbnQiOiJNUVRUIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBpcyBhbiBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgbWVzc2FnZSBzZW5kZXIgYW5kIHJlY2VpdmVyIHRoYXQgZGVmaW5lcyB0aGUgbGV2ZWwgb2YgZGVsaXZlcnkgZ3VhcmFudGVlIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UuIiwicmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbiI6IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLCJyZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkIjoiUmVzcG9uc2UgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS12YWx1ZS1leHByZXNzaW9uIjoiUmVzcG9uc2UgdmFsdWUgZXhwcmVzc2lvbiIsInJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWQiOiJSZXNwb25zZSB2YWx1ZSBleHByZXNzaW9uIGlzIHJlcXVpcmVkLiIsInZlbmRvci1uYW1lIjoiVmVuZG9yIG5hbWUiLCJ2ZW5kb3ItdXJsIjoiVmVuZG9yIFVSTCIsdmFsdWU6IlZhbHVlIix2YWx1ZXM6IlZhbHVlcyIsInZhbHVlLXJlcXVpcmVkIjoiVmFsdWUgaXMgcmVxdWlyZWQuIiwidmFsdWUtZXhwcmVzc2lvbiI6IlZhbHVlIGV4cHJlc3Npb24iLCJ2YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiVmFsdWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJ3aXRoLXJlc3BvbnNlIjoiV2l0aCByZXNwb25zZSIsIndpdGhvdXQtcmVzcG9uc2UiOiJXaXRob3V0IHJlc3BvbnNlIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2Nhbi1wZXJpb2QiOiJTY2FuIHBlcmlvZCAobXMpIiwic2Nhbi1wZXJpb2QtZXJyb3IiOiJTY2FuIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJTdWJzY3JpcHRpb24gY2hlY2sgcGVyaW9kIChtcykiLCJzdWItY2hlY2stcGVyaW9kLWVycm9yIjoiU3Vic2NyaXB0aW9uIGNoZWNrIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInNlY3VyaXR5LWxhYmVsIjoiU2VjdXJpdHkiLCJzZWN1cml0eS1wb2xpY3kiOiJTZWN1cml0eSBwb2xpY3kiLCJzZWN1cml0eS10eXBlIjoiU2VjdXJpdHkgdHlwZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkFjY2VzcyBUb2tlbiIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXNlcm5hbWUgYW5kIFBhc3N3b3JkIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBBY2Nlc3MgVG9rZW4iLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyBQcml2YXRlIEtleSJ9LCJzZWxlY3QtY29ubmVjdG9yIjoiU2VsZWN0IGNvbm5lY3RvciB0byBkaXNwbGF5IGNvbmZpZyIsInNlbmQtY2hhbmdlLWRhdGEiOiJTZW5kIGRhdGEgb25seSBvbiBjaGFuZ2UiLCJzZW5kLWRhdGEtdG8tcGxhdGZvcm0iOiJTZW5kIGRhdGEgdG8gcGxhdGZvcm0iLCJzZW5kLWRhdGEtb24tY2hhbmdlIjoiU2VuZCBkYXRhIG9ubHkgb24gY2hhbmdlIiwic2VuZC1jaGFuZ2UtZGF0YS1oaW50IjoiVGhlIHZhbHVlcyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBkYXRhYmFzZSBvbmx5IGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgcHJldmlvdXMgY29udmVydGVkIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb25hbGl0eSBhcHBsaWVzIHRvIGJvdGggYXR0cmlidXRlcyBhbmQgdGltZSBzZXJpZXMgaW4gdGhlIGNvbnZlcnRlciBvdXRwdXQuIixzZXJ2ZXI6IlNlcnZlciIsInNlcnZlci1ob3N0bmFtZSI6IlNlcnZlciBob3N0bmFtZSIsInNlcnZlci1zbGF2ZSI6IlNlcnZlciAoU2xhdmUpIiwic2VydmVycy1zbGF2ZXMiOiJTZXJ2ZXJzIChTbGF2ZXMpIiwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsInNlcnZlci11cmwiOiJTZXJ2ZXIgZW5kcG9pbnQgdXJsIiwic2VydmVyLWNvbm5lY3Rpb24iOiJTZXJ2ZXIgQ29ubmVjdGlvbiIsInNlcnZlci1jb25maWciOiJTZXJ2ZXIgY29uZmlndXJhdGlvbiIsInNlcnZlci1zbGF2ZS1jb25maWciOiJTZXJ2ZXIgKFNsYXZlKSBjb25maWd1cmF0aW9uIiwic2VydmVyLXVybC1yZXF1aXJlZCI6IlNlcnZlciBlbmRwb2ludCB1cmwgaXMgcmVxdWlyZWQuIixzdG9wYml0czoiU3RvcGJpdHMiLHN0cmljdDoiU3RyaWN0IixzZXQ6IlNldCIsInNob3ctbWFwIjoiU2hvdyBtYXAiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiU3RhdGlzdGljIixzdGF0aXN0aWNzOiJTdGF0aXN0aWNzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjonTm8gY29uZmlndXJlZCBzdGF0aXN0aWMga2V5cyBmb3VuZC4gWW91IGNhbiBjb25maWd1cmUgdGhlbSBpbiAiU3RhdGlzdGljcyIgdGFiIGluIGdlbmVyYWwgY29uZmlndXJhdGlvbi4nLCJzdGF0aXN0aWNzLWJ1dHRvbiI6IkdvIHRvIGNvbmZpZ3VyYXRpb24iLGNvbW1hbmRzOiJDb21tYW5kcyIsInNlbmQtcGVyaW9kIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIChpbiBzZWMpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgcmVxdWlyZWQiLCJzZW5kLXBlcmlvZC1taW4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gNjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiAoaW4gc2VjKSIsIm1heC1wYXlsb2FkLXNpemUtYnl0ZXMiOiJNYXggcGF5bG9hZCBzaXplIGluIGJ5dGVzIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1yZXF1aXJlZCI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgaXMgcmVxdWlyZWQiLCJtYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pbiI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMTAwIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuIjoiTWF4IHBheWxvYWQgc2l6ZSBpbiBieXRlcyBpcyBub3QgdmFsaWQiLCJtaW4tcGFjay1zaXplLXRvLXNlbmQiOiJNaW4gcGFja2V0IHNpemUgdG8gc2VuZCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZCI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2l6ZS10by1zZW5kLW1pbiI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwMCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuIjoiTWluIHBhY2tldCBzaXplIHRvIHNlbmQgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IChpbiBzZWMpIiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLCJjb21tYW5kLXBhdHRlcm4iOiJDb21tYW5kIGlzIG5vdCB2YWxpZCIscmVtb3ZlOiJSZW1vdmUgY29tbWFuZCJ9LHN0b3JhZ2U6IlN0b3JhZ2UiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gZmlsZSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWF4aW11bSBudW1iZXIgb2YgZmlsZXMiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtYmVyIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1heGltdW0gcmVjb3JkcyBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiUmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50IjoiTWF4IHJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJNYXggUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiRGF0YSBmb2xkZXIgcGF0aCIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZCI6IkRhdGEgZm9sZGVyIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhdGgiOiJTdG9yYWdlIHBhdGgiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJTdG9yYWdlIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS10eXBlIjoiU3RvcmFnZSB0eXBlIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJGaWxlIHN0b3JhZ2UiLCJtZW1vcnktc3RvcmFnZSI6Ik1lbW9yeSBzdG9yYWdlIixzcWxpdGU6IlNRTElURSJ9LCJyZXBvcnQtc3RyYXRlZ3kiOntsYWJlbDoiUmVwb3J0IHN0cmF0ZWd5Iiwib24tY2hhbmdlIjoiT24gdmFsdWUgY2hhbmdlIiwib24tcmVwb3J0LXBlcmlvZCI6Ik9uIHJlcG9ydCBwZXJpb2QiLCJvbi1jaGFuZ2Utb3ItcmVwb3J0LXBlcmlvZCI6Ik9uIHZhbHVlIGNoYW5nZSBvciByZXBvcnQgcGVyaW9kIiwicmVwb3J0LXBlcmlvZCI6IlJlcG9ydCBwZXJpb2QifSwic291cmNlLXR5cGUiOnttc2c6IkV4dHJhY3QgZnJvbSBtZXNzYWdlIix0b3BpYzoiRXh0cmFjdCBmcm9tIHRvcGljIixjb25zdDoiQ29uc3RhbnQiLGlkZW50aWZpZXI6IklkZW50aWZpZXIiLHBhdGg6IlBhdGgifSwid29ya2Vycy1zZXR0aW5ncyI6IldvcmtlcnMgc2V0dGluZ3MiLHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsZ2VuZXJhbDoiR2VuZXJhbCIsdGltZXNlcmllczoiVGltZSBzZXJpZXMiLGtleToiS2V5IixrZXlzOiJLZXlzIiwia2V5LXJlcXVpcmVkIjoiS2V5IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLWhvc3QiOiJQbGF0Zm9ybSBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBsYXRmb3JtIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIix0aW1lb3V0OiJUaW1lb3V0IChtcykiLCJ0aW1lb3V0LWVycm9yIjoiVGltZW91dCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsdHlwZToiVHlwZSIsInRvcGljLWZpbHRlciI6IlRvcGljIGZpbHRlciIsInRvcGljLXJlcXVpcmVkIjoiVG9waWMgZmlsdGVyIGlzIHJlcXVpcmVkLiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1jb25uZWN0aW9uIjoiVExTIENvbm5lY3Rpb24iLCJtYXN0ZXItY29ubmVjdGlvbnMiOiJNYXN0ZXIgQ29ubmVjdGlvbnMiLCJtZXRob2QtZmlsdGVyIjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1maWx0ZXItaGludCI6IlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgaW5jb21pbmcgUlBDIG1ldGhvZCBmcm9tIHBsYXRmb3JtLiIsIm1ldGhvZC1maWx0ZXItcmVxdWlyZWQiOiJNZXRob2QgZmlsdGVyIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIscW9zOnsiYXQtbW9zdC1vbmNlIjoiMCAtIEF0IG1vc3Qgb25jZSIsImF0LWxlYXN0LW9uY2UiOiIxIC0gQXQgbGVhc3Qgb25jZSIsImV4YWN0bHktb25jZSI6IjIgLSBFeGFjdGx5IG9uY2UifSwib2JqZWN0cy1jb3VudCI6Ik9iamVjdHMgY291bnQiLCJvYmplY3RzLWNvdW50LXJlcXVpcmVkIjoiT2JqZWN0cyBjb3VudCBpcyByZXF1aXJlZCIsIndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzIjoiV2FpdCBhZnRlciBmYWlsZWQgYXR0ZW1wdHMgKG1zKSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsdXNlcm5hbWU6IlVzZXJuYW1lIiwidXNlcm5hbWUtcmVxdWlyZWQiOiJVc2VybmFtZSBpcyByZXF1aXJlZC4iLCJ1bml0LWlkLXJlcXVpcmVkIjoiVW5pdCBJRCBpcyByZXF1aXJlZC4iLCJ3cml0ZS1jb2lsIjoiV3JpdGUgQ29pbCIsIndyaXRlLWNvaWxzIjoiV3JpdGUgQ29pbHMiLCJ3cml0ZS1yZWdpc3RlciI6IldyaXRlIFJlZ2lzdGVyIiwid3JpdGUtcmVnaXN0ZXJzIjoiV3JpdGUgUmVnaXN0ZXJzIixoaW50czp7Im1vZGJ1cy1tYXN0ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb25zIGZvciBjb25uZWN0aW5nIHRvIE1vZGJ1cyBzZXJ2ZXJzIGFuZCByZWFkaW5nIGRhdGEgZnJvbSB0aGVtLiIsIm1vZGJ1cy1zZXJ2ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yIHRoZSBNb2RidXMgc2VydmVyLCBzdG9yaW5nIGRhdGEgYW5kIHNlbmRpbmcgdXBkYXRlcyB0byB0aGUgcGxhdGZvcm0gd2hlbiBjaGFuZ2VzIG9jY3VyIG9yIGF0IGZpeGVkIGludGVydmFscy4iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBwbGF0Zm9ybSBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIHBsYXRmb3JtIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBwbGF0Zm9ybSBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBwbGF0Zm9ybSBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIHBsYXRmb3JtIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gcGxhdGZvcm0gc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIHRoZSBmb2xkZXIgdGhhdCB3aWxsIGNvbnRhaW4gZGF0YSAoUmVsYXRpdmUgb3IgQWJzb2x1dGUpIiwibG9nLWZvcm1hdCI6IkxvZyBtZXNzYWdlIGZvcm1hdCIsInJlbW90ZS1sb2ciOiJFbmFibGVzIHJlbW90ZSBsb2dnaW5nIGFuZCBsb2dzIHJlYWRpbmcgZnJvbSB0aGUgZ2F0ZXdheSIsImJhY2t1cC1jb3VudCI6IklmIGJhY2t1cCBjb3VudCBpcyA+IDAsIHdoZW4gYSByb2xsb3ZlciBpcyBkb25lLCBubyBtb3JlIHRoYW4gYmFja3VwIGNvdW50IGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkIixzdG9yYWdlOiJQcm92aWRlcyBjb25maWd1cmF0aW9uIGZvciBzYXZpbmcgaW5jb21pbmcgZGF0YSBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgcGxhdGZvcm0iLCJtYXgtZmlsZS1jb3VudCI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJOdW1iZXIgb2YgbWVzc2FnZXMgdG8gcmV0cmlldmUgZnJvbSB0aGUgc3RvcmFnZSBhbmQgc2VuZCB0byBwbGF0Zm9ybSIsIm1heC1yZWNvcmRzIjoiTWF4aW11bSBjb3VudCBvZiByZWNvcmRzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gb25lIGZpbGUiLCJyZWFkLXJlY29yZC1jb3VudCI6Ik51bWJlciBvZiBtZXNzYWdlcyB0byByZXRyaWV2ZSBmcm9tIHRoZSBzdG9yYWdlIGFuZCBzZW5kIHRvIHBsYXRmb3JtIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIG51bWJlciBvZiBkYXRhIGVudHJpZXMgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZGluZyB0byBwbGF0Zm9ybSIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgdGhlIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gbnVtYmVyIG9mIGRheXMgdGhhdCB0aGUgc3RvcmFnZSB3aWxsIHJldGFpbiBkYXRhIixjb21tYW5kczoiQ29tbWFuZHMgZm9yIGNvbGxlY3RpbmcgYWRkaXRpb25hbCBzdGF0aXN0aWMiLGF0dHJpYnV0ZToiU3RhdGlzdGljIHRlbGVtZXRyeSBrZXkiLHRpbWVvdXQ6IlRpbWVvdXQgZm9yIGNvbW1hbmQgZXhlY3V0aW5nIixjb21tYW5kOiJUaGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kIGV4ZWN1dGlvbiwgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGVsZW1ldHJ5IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiRW5hYmxlcyBtb25pdG9yIHRoZSBhY3Rpdml0eSBvZiBlYWNoIGNvbm5lY3RlZCBkZXZpY2UiLCJpbmFjdGl2aXR5LXRpbWVvdXQiOiJUaW1lIGFmdGVyIHdob3NlIHRoZSBnYXRld2F5IHdpbGwgZGlzY29ubmVjdCBkZXZpY2UiLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZGljaXR5IG9mIGRldmljZSBhY3Rpdml0eSBjaGVjayIsIm1pbmltYWwtcGFjay1kZWxheSI6IkRlbGF5IGJldHdlZW4gc2VuZGluZyBwYWNrcyBvZiBtZXNzYWdlcyAoRGVjcmVhc2luZyB0aGlzIHNldHRpbmcgcmVzdWx0cyBpbiBpbmNyZWFzZWQgQ1BVIHVzYWdlKSIscW9zOiJRdWFsaXR5IG9mIFNlcnZpY2UgaW4gTVFUVCBtZXNzYWdpbmcgKDAgLSBhdCBtb3N0IG9uY2UsIDEgLSBhdCBsZWFzdCBvbmNlKSIsInNlcnZlci1wb3J0IjoiTmV0d29yayBwb3J0IG9uIHdoaWNoIEdSUEMgc2VydmVyIHdpbGwgbGlzdGVuIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Ik1heGltdW0gdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGZvciBhIGtlZXBhbGl2ZSBwaW5nIHJlc3BvbnNlIGJlZm9yZSBjb25zaWRlcmluZyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMta2VlcC1hbGl2ZSI6IkR1cmF0aW9uIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgUlBDIGNhbGwuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6Ik1heGltdW0gbnVtYmVyIG9mIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHRoYXQgdGhlIHNlcnZlciBjYW4gc2VuZCB3aXRob3V0IHJlY2VpdmluZyBhbnkgZGF0YSBiZWZvcmUgaXQgY29uc2lkZXJzIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gZGF0YSBiZWluZyBzZW50IG9yIHJlY2VpdmVkLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiQWxsb3cgc2VydmVyIHRvIGtlZXAgdGhlIEdSUEMgY29ubmVjdGlvbiBhbGl2ZSBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSBSUEMgY2FsbHMuIiwicGF0aC1pbi1vcyI6IlBhdGggaW4gZ2F0ZXdheSBvcy4iLG1lbW9yeToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBpbi1tZW1vcnkgcXVldWUsIGl0IGlzIGEgZmFzdGVzdCBidXQgbm8gcGVyc2lzdGVuY2UgZ3VhcmFudGVlLiIsZmlsZToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHNlcGFyYXRlZCBmaWxlcyBhbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIixzcWxpdGU6IllvdXIgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBmaWxlIGJhc2VkIGRhdGFiYXNlLiBBbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIiwib3BjLXRpbWVvdXQiOiJUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgY29ubmVjdGluZyB0byBPUEMtVUEgc2VydmVyLiIsInNlY3VyaXR5LXBvbGljeSI6IlNlY3VyaXR5IFBvbGljeSBkZWZpbmVzIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHRvIGJlIGFwcGxpZWQuIiwic2Nhbi1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlc2NhbiB0aGUgc2VydmVyLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJQZXJpb2QgdG8gY2hlY2sgdGhlIHN1YnNjcmlwdGlvbnMgaW4gdGhlIE9QQy1VQSBzZXJ2ZXIuIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IklmIHRydWUgLSB0aGUgZ2F0ZXdheSB3aWxsIHN1YnNjcmliZSB0byBpbnRlcmVzdGluZyBub2RlcyBhbmQgd2FpdCBmb3IgZGF0YSB1cGRhdGUgYW5kIGlmIGZhbHNlIC0gdGhlIGdhdGV3YXkgd2lsbCByZXNjYW4gT1BDLVVBIHNlcnZlciBldmVyeSBzY2FuUGVyaW9kSW5NaWxsaXMuIiwic2hvdy1tYXAiOiJTaG93IG5vZGVzIG9uIHNjYW5uaW5nLiIsIm1ldGhvZC1uYW1lIjoiTmFtZSBvZiBtZXRob2Qgb24gT1BDLVVBIHNlcnZlci4iLGFyZ3VtZW50czoiQXJndW1lbnRzIGZvciB0aGUgbWV0aG9kICh3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGFyZ3VtZW50cyBmcm9tIHRoZSBSUEMgcmVxdWVzdCkuIiwibWluLXBhY2stc2l6ZS10by1zZW5kIjoiTWluaW11bSBwYWNrYWdlIHNpemUgZm9yIHNlbmRpbmcuIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcyI6Ik1heGltdW0gcGFja2FnZSBzaXplIGluIGJ5dGVzIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlYWQgZGF0YSBmcm9tIG5vZGVzLiIsbW9kYnVzOnsiZnJhbWVyLXR5cGUiOiJUeXBlIG9mIGEgZnJhbWVyIChTb2NrZXQsIFJUVSwgb3IgQVNDSUkpLCBpZiBuZWVkZWQuIixob3N0OiJIb3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIE1vZGJ1cyBzZXJ2ZXIuIixwb3J0OiJNb2RidXMgc2VydmVyIHBvcnQgZm9yIGNvbm5lY3Rpb24uIiwidW5pdC1pZCI6Ik1vZGJ1cyBzbGF2ZSBJRC4iLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKGluIHNlY29uZHMpIGZvciB0aGUgTW9kYnVzIHNlcnZlci4iLCJieXRlLW9yZGVyIjoiQnl0ZSBvcmRlciBmb3IgcmVhZGluZyBkYXRhLiIsIndvcmQtb3JkZXIiOiJXb3JkIG9yZGVyIHdoZW4gcmVhZGluZyBtdWx0aXBsZSByZWdpc3RlcnMuIixyZXRyaWVzOiJSZXRyeWluZyBkYXRhIHRyYW5zbWlzc2lvbiB0byB0aGUgbWFzdGVyLiBBY2NlcHRhYmxlIHZhbHVlczogdHJ1ZSBvciBmYWxzZS4iLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgdGhlIGRhdGEgaXMgZW1wdHkuIiwicmV0cmllcy1vbi1pbnZhbGlkIjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgaXQgZmFpbHMuIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIGNoZWNrIGF0dHJpYnV0ZXMgYW5kIHRlbGVtZXRyeSBvbiB0aGUgc2xhdmUuIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgbWFzdGVyLiIsImNvbm5lY3QtYXR0ZW1wdC1jb3VudCI6IlRoZSBudW1iZXIgb2YgY29ubmVjdGlvbiBhdHRlbXB0cyBtYWRlIHRocm91Z2ggdGhlIGdhdGV3YXkuIiwid2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHMiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIGRhdGEgdG8gdGhlIG1hc3Rlci4iLCJzZXJpYWwtcG9ydCI6IlNlcmlhbCBwb3J0IGZvciBjb25uZWN0aW9uLiIsYmF1ZHJhdGU6IkJhdWQgcmF0ZSBmb3IgdGhlIHNlcmlhbCBkZXZpY2UuIixzdG9wYml0czoiVGhlIG51bWJlciBvZiBzdG9wIGJpdHMgc2VudCBhZnRlciBlYWNoIGNoYXJhY3RlciBpbiBhIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgYnl0ZS4iLGJ5dGVzaXplOiJUaGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBieXRlIG9mIHNlcmlhbCBkYXRhLiBUaGlzIGNhbiBiZSBvbmUgb2YgNSwgNiwgNywgb3IgOC4iLHBhcml0eToiVGhlIHR5cGUgb2YgY2hlY2tzdW0gdXNlZCB0byB2ZXJpZnkgZGF0YSBpbnRlZ3JpdHkuIE9wdGlvbnM6IChFKXZlbiwgKE8pZGQsIChOKW9uZS4iLHN0cmljdDoiVXNlIGludGVyLWNoYXJhY3RlciB0aW1lb3V0IGZvciBiYXVkcmF0ZXMg4omkIDE5MjAwLiIsIm9iamVjdHMtY291bnQiOiJEZXBlbmRzIG9uIHRoZSBzZWxlY3RlZCB0eXBlLiIsYWRkcmVzczoiUmVnaXN0ZXIgYWRkcmVzcyB0byB2ZXJpZnkuIixrZXk6IktleSB0byBiZSB1c2VkIGFzIHRoZSBhdHRyaWJ1dGUga2V5IGZvciB0aGUgcGxhdGZvcm0gaW5zdGFuY2UuIiwiZGF0YS1rZXlzIjoiRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZnVuY3Rpb24gY29kZXMgYW5kIGRhdGEgdHlwZXMgY2xpY2sgb24gaGVscCBpY29uIixtb2RpZmllcjoiVGhlIHJldHJpZXZlZCB2YWx1ZSB3aWxsIGJlIGFkanVzdGVkIChieSBtdWx0aXBseWluZyBvciBkaXZpZGluZyBpdCkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtb2RpZmllciB2YWx1ZS4ifX19fSxSbz17ImFkZC1lbnRyeSI6Itil2LbYp9mB2Kkg2KrZg9mI2YrZhiIsYWR2YW5jZWQ6ItmF2KrZgtiv2YUiLCJjaGVja2luZy1kZXZpY2UtYWN0aXZpdHkiOiLZgdit2LUg2YbYtNin2Lcg2KfZhNis2YfYp9iyIixjb21tYW5kOiLYo9mI2KfZhdixIERvY2tlciIsImNvbW1hbmQtY29waWVkLW1lc3NhZ2UiOiLYqtmFINmG2LPYriDYo9mF2LEgRG9ja2VyINil2YTZiSDYp9mE2K3Yp9mB2LjYqSIsY29uZmlndXJhdGlvbjoi2KfZhNiq2YPZiNmK2YYiLCJjb25uZWN0b3ItYWRkIjoi2KXYttin2YHYqSDZhdmI2LXZhCDYrNiv2YrYryIsImNvbm5lY3Rvci1lbmFibGVkIjoi2KrZhdmD2YrZhiDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZSI6Itin2LPZhSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLCJjb25uZWN0b3ItdHlwZSI6ItmG2YjYuSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6ItmG2YjYuSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLGNvbm5lY3RvcnM6Itin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLWNvbmZpZyI6Itiq2YPZiNmK2YbYp9iqINin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLXRhYmxlLWVuYWJsZWQiOiLZhdmF2YPZkdmGIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi2KfZhNin2LPZhSIsImNvbm5lY3RvcnMtdGFibGUtdHlwZSI6Itin2YTZhtmI2LkiLCJjb25uZWN0b3JzLXRhYmxlLXN0YXR1cyI6Itin2YTYrdin2YTYqSIsImNvbm5lY3RvcnMtdGFibGUtYWN0aW9ucyI6Itin2YTYpdis2LHYp9ih2KfYqiIsImNvbm5lY3RvcnMtdGFibGUta2V5Ijoi2KfZhNmF2YHYqtin2K0iLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoi2KfZhNmB2KbYqSIsInJwYy1jb21tYW5kLXNlbmQiOiLYpdix2LPYp9mEIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi2KfZhNin2LPYqtis2KfYqNipIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLYqtit2LHZitixINin2YTZhdi52YTZhdin2KoiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLYqtmD2YjZitmGINi52KfZhSIsImRvY2tlci1sYWJlbCI6Itin2LPYqtiu2K/ZhSDYp9mE2KrYudmE2YrZhdin2Kog2KfZhNiq2KfZhNmK2Kkg2YTYqti02LrZitmEIElvVCBHYXRld2F5INmB2YogRG9ja2VyIGNvbXBvc2Ug2YXYuSDYqNmK2KfZhtin2Kog2KfYudiq2YXYp9ivINmE2YTYrNmH2KfYsiDYp9mE2YXYrdiv2K8iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi2KfYs9iq2K7Yr9mFINin2YTYqti52YTZitmF2KfYqiDZhNiq2YbYstmK2YQg2YjYqtir2KjZitiqINmI2KXYudiv2KfYryBkb2NrZXIgY29tcG9zZSIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLYqtmG2LLZitmEIGRvY2tlci1jb21wb3NlLnltbCDZhNio2YjYp9io2KrZgyIsImxhdW5jaC1nYXRld2F5Ijoi2KrYtNi62YrZhCDYp9mE2KjZiNin2KjYqSIsImxhdW5jaC1kb2NrZXItY29tcG9zZSI6Itio2K/YoSDYqti02LrZitmEINin2YTYqNmI2KfYqNipINio2KfYs9iq2K7Yr9in2YUg2KfZhNij2YXYsSDYp9mE2KrYp9mE2Yog2YHZiiDYp9mE2LfYsdmB2YrYqSDZhdmGINin2YTZhdis2YTYryDYp9mE2LDZiiDZitit2KrZiNmKINi52YTZiSDZhdmE2YEgZG9ja2VyLWNvbXBvc2UueW1sIiwiY3JlYXRlLW5ldy1nYXRld2F5Ijoi2KXZhti02KfYoSDYqNmI2KfYqNipINis2K/Zitiv2KkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6ItmH2YQg2KPZhtiqINmF2KrYo9mD2K8g2KPZhtmDINiq2LHZitivINil2YbYtNin2KEg2KjZiNin2KjYqSDYrNiv2YrYr9ipINio2KfYs9mFOiAne3tnYXRld2F5TmFtZX19J9ifIiwiY3JlYXRlZC10aW1lIjoi2YjZgtiqINin2YTYpdmG2LTYp9ihIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6Itiz2YrYqtmFINit2LDZgSDYp9mE2KrZg9mI2YrZhtin2KoiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6ItmK2YXZg9mGINiq2LnYt9mK2YQg2KfZhNiq2YPZiNmK2YYg2LnZhiDYqNmP2LnYryDZgdmC2Lcg2KXYsNinINmD2KfZhiDZh9mG2KfZgyDZiNi12YjZhCDYrNiz2K/ZiiDYpdmE2Ykg2KfZhNio2YjYp9io2KkuINiz2KrYqtmFINit2LDZgSDYrNmF2YrYuSDYp9mE2KrZg9mI2YrZhtin2Kog2KfZhNiz2KfYqNmC2KkuPGJyPjxicj4gXG4g2YTYqti52LfZitmEINin2YTYqtmD2YjZitmG2Iwg2KPYr9iu2YQg2KfYs9mFINin2YTYqNmI2KfYqNipINij2K/Zhtin2YciLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQiOiLYp9iz2YUg2KfZhNio2YjYp9io2KkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNio2YjYp9io2Kkg2KXZhNiy2KfZhdmKIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLYpdmK2YLYp9mBINin2YTYqti02LrZitmEIixkZWxldGU6Itit2LDZgSDYp9mE2KrZg9mI2YrZhiIsImRvd25sb2FkLXRpcCI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZHJvcC1maWxlIjoi2KPZgdmE2YIg2KfZhNmF2YTZgSDZh9mG2Kcg2KPZiCIsZ2F0ZXdheToi2KfZhNio2YjYp9io2KkiLCJnYXRld2F5LWV4aXN0cyI6Itin2YTYrNmH2KfYsiDYqNmG2YHYsyDYp9mE2KfYs9mFINmF2YjYrNmI2K8g2KjYp9mE2YHYudmELiIsImdhdGV3YXktbmFtZSI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSDZhdi32YTZiNioLiIsImdhdGV3YXktc2F2ZWQiOiLYqtmFINit2YHYuCDYqtmD2YjZitmGINin2YTYqNmI2KfYqNipINio2YbYrNin2K0uIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqNipIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi2YXZh9mE2Kkg2KfZhNio2YLYp9ihINi52YTZiSDZgtmK2K8g2KfZhNit2YrYp9ipINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6ItmF2YfZhNipINin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K3YqSIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqCIsImdycGMta2VlcC1hbGl2ZS1taW4iOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINij2YLZhCDZhdmGIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDZhdi32YTZiNioIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmE2YjZgtiqINio2YrZhiDYp9mE2KjZitmG2LrYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2KogKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNio2YrZhti62KfYqiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQgKNio2KfZhNir2YjYp9mG2YopIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQg2YXYt9mE2YjYqNipIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiLZgdiq2LHYqSDZgdit2LUg2KfZhNiu2YXZiNmEINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoi2YHYqtix2Kkg2YHYrdi1INin2YTYrtmF2YjZhCDYutmK2LEg2LXYp9mE2K3YqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEICjYqNin2YTYq9mI2KfZhtmKKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEINmF2LfZhNmI2KjYqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6ItmB2KrYsdipINin2YTYrtmF2YjZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiLZgdiq2LHYqSDYp9mE2K7ZhdmI2YQg2LrZitixINi12KfZhNit2KkiLCJqc29uLXBhcnNlIjoiSlNPTiDYutmK2LEg2LXYp9mE2K0uIiwianNvbi1yZXF1aXJlZCI6Itin2YTYrdmC2YQg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINmB2KfYsdi62YvYpy4iLGxvZ3M6e2xvZ3M6Itin2YTYs9is2YTYp9iqIixkYXlzOiLYo9mK2KfZhSIsaG91cnM6Itiz2KfYudin2KoiLG1pbnV0ZXM6Itiv2YLYp9im2YIiLHNlY29uZHM6Itir2YjYp9mG2YoiLCJkYXRlLWZvcm1hdCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4g2YXYt9mE2YjYqCIsImxvZy1mb3JtYXQiOiLYqtmG2LPZitmCINin2YTYs9is2YQiLCJsb2ctdHlwZSI6ItmG2YjYuSDYp9mE2LPYrNmEIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiz2KzZhCDZhdi32YTZiNioIixyZW1vdGU6Itin2YTYqtiz2KzZitmEINi52YYg2KjZj9i52K8iLCJyZW1vdGUtbG9ncyI6Itin2YTYs9is2YTYp9iqINi52YYg2KjZj9i52K8iLGxvY2FsOiLYp9mE2KrYs9is2YrZhCDYp9mE2YXYrdmE2YoiLGxldmVsOiLZhdiz2KrZiNmJINin2YTYs9is2YQiLCJmaWxlLXBhdGgiOiLZhdiz2KfYsSDYp9mE2YXZhNmBIiwiZmlsZS1wYXRoLXJlcXVpcmVkIjoi2YXYs9in2LEg2KfZhNmF2YTZgSDZhdi32YTZiNioIiwic2F2aW5nLXBlcmlvZCI6ItmB2KrYsdipINit2YHYuCDYp9mE2LPYrNmEIiwic2F2aW5nLXBlcmlvZC1taW4iOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhdi32YTZiNio2KkiLCJiYWNrdXAtY291bnQiOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSIsImJhY2t1cC1jb3VudC1taW4iOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDZhNinINmK2YXZg9mGINij2YYg2YrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6Iti52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipINmF2LfZhNmI2KgifSwibWluLXBhY2stc2VuZC1kZWxheSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2YXYt9mE2YjYqCIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoi2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2KPZgtmEINmF2YYgMCIsIm5vLWNvbm5lY3RvcnMiOiLZhNinINiq2YjYrNivINmF2YjYtdmE2KfYqiIsIm5vLWRhdGEiOiLZhNinINiq2YjYrNivINiq2YPZiNmK2YbYp9iqIiwibm8tZ2F0ZXdheS1mb3VuZCI6ItmE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KjZiNin2KjYqS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiJ3t7aXRlbX19JyDYutmK2LEg2YXZiNis2YjYry4iLCJwYXRoLWxvZ3MiOiLZhdiz2KfYsSDYpdmE2Ykg2YXZhNmB2KfYqiDYp9mE2LPYrNmEIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi2KfZhNmF2LPYp9ixINmF2LfZhNmI2KguIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2KjZgtin2KEg2LnZhNmJINin2YTYrdmK2KfYqSDZitiz2YXYrSDYqNiv2YjZhiDZhdmD2KfZhNmF2KfYqiIscmVtb3RlOiLYp9mE2KrZg9mI2YrZhiDYudmGINio2Y/YudivIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiLZhdiz2KrZiNmJINin2YTYqtiz2KzZitmEIiwicmVtb3ZlLWVudHJ5Ijoi2KXYstin2YTYqSDYp9mE2KrZg9mI2YrZhiIsInJlbW90ZS1zaGVsbCI6ItmC2LTYsdipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Itin2YTYqtmD2YjZitmGINi52YYg2KjZj9i52K8iLG90aGVyOiLYotiu2LEiLCJzYXZlLXRpcCI6Itit2YHYuCDZhdmE2YEg2KfZhNiq2YPZiNmK2YYiLCJzZWN1cml0eS10eXBlIjoi2YbZiNi5INin2YTYo9mF2KfZhiIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Itix2YXYsiDYp9mE2YjYtdmI2YQiLCJ1c2VybmFtZS1wYXNzd29yZCI6Itin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINmI2YPZhNmF2Kkg2KfZhNmF2LHZiNixIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDYsdmF2LIg2KfZhNmI2LXZiNmEIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsg2KfZhNmF2YHYqtin2K0g2KfZhNiu2KfYtSJ9LCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYrtin2K/ZhSIsc3RhdGlzdGljczp7c3RhdGlzdGljOiLYpdit2LXYp9im2YrYqSIsc3RhdGlzdGljczoi2KfZhNil2K3Ytdin2KbZitin2KoiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLZhNinINiq2KrZiNmB2LEg2KXYrdi12KfYptmK2KfYqiIsY29tbWFuZHM6Itin2YTYo9mI2KfZhdixIiwic2VuZC1wZXJpb2QiOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqICjYqNin2YTYq9mI2KfZhtmKKSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDZhdi32YTZiNio2KkiLCJzZW5kLXBlcmlvZC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDYo9mC2YQg2YXZhiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqINi62YrYsSDYtdin2YTYrdipIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiAo2KjYp9mE2KvZiNin2YbZiikiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINmF2LfZhNmI2KjYqSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiDYo9mC2YQg2YXZhiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINi62YrYsSDYtdin2YTYrdipIixhZGQ6Itil2LbYp9mB2Kkg2KPZhdixIix0aW1lb3V0OiLYp9mE2YXZh9mE2KkiLCJ0aW1lb3V0LW1zIjoi2KfZhNmF2YfZhNipICjYqNin2YTZhdmE2YTZiiDYq9in2YbZitipKSIsInRpbWVvdXQtcmVxdWlyZWQiOiLYp9mE2YXZh9mE2Kkg2YXYt9mE2YjYqNipIiwidGltZW91dC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KfZhNmF2YfZhNipINij2YLZhCDZhdmGIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiLYp9mE2YXZh9mE2Kkg2LrZitixINi12KfZhNit2KkiLCJhdHRyaWJ1dGUtbmFtZSI6Itin2LPZhSDYp9mE2LPZhdipIiwiYXR0cmlidXRlLW5hbWUtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNiz2YXYqSDZhdi32YTZiNioIixjb21tYW5kOiLYp9mE2KPZhdixIiwiY29tbWFuZC1yZXF1aXJlZCI6Itin2YTYo9mF2LEg2YXYt9mE2YjYqCIsImNvbW1hbmQtcGF0dGVybiI6Itin2YTYo9mF2LEg2LrZitixINi12KfZhNitIixyZW1vdmU6Itil2LLYp9mE2Kkg2KfZhNij2YXYsSJ9LHN0b3JhZ2U6Itin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi2KfZhNiz2KzZhNin2Kog2KfZhNmC2LXZiNmJINmB2Yog2KfZhNmF2YTZgSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTZhdmE2YHYp9iqIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmH2YggMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi2KfZhNi52K/YryDYutmK2LEg2LXYp9mE2K0uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLYp9mE2LnYr9ivINmF2LfZhNmI2KguIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Itin2YTYs9is2YTYp9iqINin2YTZgti12YjZiSDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLYp9mE2LPYrNmE2KfYqiDYp9mE2YLYtdmI2Ykg2YXYt9mE2YjYqNipLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZhdi32YTZiNioLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50Ijoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINmC2LHYp9ih2Kkg2KfZhNiz2KzZhNin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNi52K/YryDYp9mE2LPYrNmE2KfYqiDZh9mIIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi2LnYr9ivINin2YTZgtix2KfYodipINin2YTZgti12YjZiSDZhdi32YTZiNioLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6ItmF2LPYp9ixINmF2KzZhNivINin2YTYqNmK2KfZhtin2KoiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDZhdis2YTYryDYp9mE2KjZitin2YbYp9iqINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYWNrLXNpemUiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYrdis2YUg2K3YstmF2Kkg2KfZhNit2K/YqyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZh9mIIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi2KfZhNit2KzZhSDYp9mE2KPZgti12Ykg2YTYrdiy2YXYqSDYp9mE2K3Yr9irINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYXRoIjoi2YXYs9in2LEg2KfZhNiq2K7YstmK2YYiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDYp9mE2KrYrtiy2YrZhiDZhdi32YTZiNioLiIsInN0b3JhZ2UtdHlwZSI6ItmG2YjYuSDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2YXZhNmB2KfYqiIsIm1lbW9yeS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2LDYp9mD2LHYqSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoi2KvZitmG2LrYstio2YjYsdivIixnZW5lcmFsOiLYudin2YUiLCJ0aGluZ3Nib2FyZC1ob3N0Ijoi2YXYttmK2YEg2KvZitmG2LrYstio2YjYsdivIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Itin2YTZhdi22YrZgSDZhdi32YTZiNioLiIsInRoaW5nc2JvYXJkLXBvcnQiOiLZhdmG2YHYsCDYq9mK2YbYutiy2KjZiNix2K8iLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6Itin2YTZhdmG2YHYsCDYutmK2LEg2LXYp9mE2K0uIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Itin2YTZhdmG2YHYsCDZhdi32YTZiNioLiIsdGlkeToi2KrYsdiq2YrYqCIsInRpZHktdGlwIjoi2KrYsdiq2YrYqCDYqtmD2YjZitmGIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiLYqtmD2YjZitmGINmF2YjYtdmEIHt7dHlwZU5hbWV9fSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoi2KfZhNmF2LPYp9ixINil2YTZiSDYtNmH2KfYr9ipIENBINi52YTZiSDYp9mE2KjZiNin2KjYqSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2LTZh9in2K/YqSDYp9mE2LnZhdmK2YQg2LnZhNmJINin2YTYqNmI2KfYqNipIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi2YrYrNioINiq2K3Yr9mK2K8g2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoi2KfZhNix2YLZhSDYutmK2LEg2LXYp9mE2K0uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwg2KfZhNix2LPYp9im2YQg2KjYp9mE2KPZitin2YUiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6ItmK2KzYqCDYqtit2K/ZitivIFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYo9mK2KfZhS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXBhdHRlcm4iOiLYp9mE2LHZgtmFINi62YrYsSDYtdin2YTYrS4iLCJtcXR0LXFvcyI6Itis2YjYr9ipINin2YTYrtiv2YXYqSAoUW9TKSIsIm1xdHQtcW9zLXJlcXVpcmVkIjoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipIChRb1MpINmF2LfZhNmI2KjYqSIsIm1xdHQtcW9zLXJhbmdlIjoi2KrYqtix2KfZiNitINmC2YrZhSDYrNmI2K/YqSDYp9mE2K7Yr9mF2KkgKFFvUykg2YXZhiAwINil2YTZiSAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdmB2KrYp9itINin2YTYrtin2LUg2LnZhNmJINin2YTYqNmI2KfYqNipIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLYqtio2K/ZitmEINmI2LbYuSDZhdmE2KEg2KfZhNi02KfYtNipIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiLYqtmD2YjZitmGIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6Itil2LbYp9mB2Kkv2KrYrdiv2YrYqyDYqtmD2YjZitmGIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2YPZiNmK2YYg2YjYpdiv2KfYsdipINin2YTYqNmI2KfYqNipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtc2hlbGwiOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2K3Zg9mFINin2YTYqNi52YrYryDZgdmKINmG2LjYp9mFINin2YTYqti02LrZitmEINmF2Lkg2KfZhNio2YjYp9io2Kkg2YXZhiDYudmG2LXYsSDZiNin2KzZh9ipINin2YTZhdiz2KrYrtiv2YUg2YLYtNix2Kkg2LnZhiDYqNmP2LnYryIsaG9zdDoi2KfYs9mFINin2YTZhdi22YrZgSDYo9mIINi52YbZiNin2YYgSVAg2YTYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLHBvcnQ6ItmF2YbZgdiwINiu2K/ZhdipIE1RVFQg2LnZhNmJINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIsdG9rZW46Itix2YXYsiDYp9mE2YjYtdmI2YQg2YTZhNio2YjYp9io2Kkg2YXZhiDYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLCJjbGllbnQtaWQiOiLZhdi52LHZgSDYudmF2YrZhCBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIix1c2VybmFtZToi2KfYs9mFINin2YTZhdiz2KrYrtiv2YUgTVFUVCDZhNmE2KjZiNin2KjYqSDZhdmGINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIscGFzc3dvcmQ6ItmD2YTZhdipINin2YTZhdix2YjYsSBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIiwiY2EtY2VydCI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2YXZhNmBINi02YfYp9iv2KkgQ0EiLCJkYXRlLWZvcm0iOiLYqtmG2LPZitmCINin2YTYqtin2LHZitiuINmB2Yog2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwiZGF0YS1mb2xkZXIiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdis2YTYryDYp9mE2LDZiiDYs9mK2K3YqtmI2Yog2LnZhNmJINin2YTYqNmK2KfZhtin2KogKNmG2LPYqNmKINij2Ygg2YXYt9mE2YIpIiwibG9nLWZvcm1hdCI6Itiq2YbYs9mK2YIg2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwicmVtb3RlLWxvZyI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDYp9mE2KrYs9is2YrZhCDYp9mE2KjYudmK2K8g2YjZgtix2KfYodipINin2YTYs9is2YTYp9iqINmF2YYg2KfZhNio2YjYp9io2KkiLCJiYWNrdXAtY291bnQiOiLYpdiw2Kcg2YPYp9mGINi52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipID4gMNiMINi52YbYryDYudmF2YTZitipINiq2K/ZiNmK2LHYjCDZhNinINmK2KrZhSDYp9mE2KfYrdiq2YHYp9i4INio2KPZg9ir2LEg2YXZhiDYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDYp9mE2YXYrdiv2K/YqSAtINmK2KrZhSDYrdiw2YEg2KfZhNij2YLYr9mFIixzdG9yYWdlOiLZitmI2YHYsSDYqtmD2YjZitmG2YvYpyDZhNit2YHYuCDYp9mE2KjZitin2YbYp9iqINin2YTZiNin2LHYr9ipINmC2KjZhCDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KfZhNmF2YbYtdipIiwibWF4LWZpbGUtY291bnQiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNi52K/YryDYp9mE2YXZhNmB2KfYqiDYp9mE2KrZiiDYs9mK2KrZhSDYpdmG2LTYp9ik2YfYpyIsIm1heC1yZWFkLWNvdW50Ijoi2LnYr9ivINin2YTYsdiz2KfYptmEINmE2YTYrdi12YjZhCDYudmE2YrZh9inINmF2YYg2KfZhNiq2K7YstmK2YYg2YjYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KvZitmG2LrYstio2YjYsdivIiwibWF4LXJlY29yZHMiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNmE2LPYrNmE2KfYqiDYp9mE2KrZiiDYs9iq2K7YstmGINmB2Yog2YXZhNmBINmI2KfYrdivIiwicmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2KfZhNix2LPYp9im2YQg2YTZhNit2LXZiNmEINi52YTZitmH2Kcg2YXZhiDYp9mE2KrYrtiy2YrZhiDZiNil2LHYs9in2YTZh9inINil2YTZiSDYq9mK2YbYutiy2KjZiNix2K8iLCJtYXgtcmVjb3Jkcy1jb3VudCI6Itin2YTYudiv2K8g2KfZhNij2YLYtdmJINmE2YTYqNmK2KfZhtin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiDZgtio2YQg2KXYsdiz2KfZhNmH2Kcg2KXZhNmJINir2YrZhti62LLYqNmI2LHYryIsInR0bC1jaGVjay1ob3VyIjoi2YPZhSDZhdix2Kkg2LPZitiq2K3ZgtmCINin2YTYqNmI2KfYqNipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDYp9mE2YLYr9mK2YXYqSIsInR0bC1tZXNzYWdlcy1kYXkiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNij2YrYp9mFINin2YTYqtmKINiz2KrYrdiq2YHYuCDZgdmK2YfYpyDYp9mE2KrYrtiy2YrZhiDYqNin2YTYqNmK2KfZhtin2KoiLGNvbW1hbmRzOiLYp9mE2KPZiNin2YXYsSDZhNis2YXYuSDYp9mE2KXYrdi12KfYptmK2KfYqiDYp9mE2KXYttin2YHZitipIixhdHRyaWJ1dGU6ItmF2YHYqtin2K0g2KrZhNmC2Yog2KfZhNil2K3Ytdin2KbZitin2KoiLHRpbWVvdXQ6ItmF2YfZhNipINiy2YXZhtmK2Kkg2YTYqtmG2YHZitiwINin2YTYo9mF2LEiLGNvbW1hbmQ6Itiz2YrYqtmFINin2LPYqtiu2K/Yp9mFINmG2KrZitis2Kkg2KrZhtmB2YrYsCDYp9mE2KPZhdixINmD2YLZitmF2Kkg2YTYqtmE2YLZiiDYp9mE2KXYrdi12KfYptmK2KfYqiIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDZhdix2KfZgtio2Kkg2YbYtNin2Lcg2YPZhCDYrNmH2KfYsiDZhdiq2LXZhCIsImluYWN0aXZpdHktdGltZW91dCI6Itin2YTZiNmC2Kog2KjYudivINin2YTYsNmKINiz2KrZgdi12YQg2KfZhNio2YjYp9io2Kkg2KfZhNis2YfYp9iyIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLYqtmD2LHYp9ixINmB2K3YtSDZhti02KfYtyDYp9mE2KzZh9in2LIiLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLYp9mE2KrYo9iu2YrYsSDYqNmK2YYg2KXYsdiz2KfZhCDYrdiy2YUg2KfZhNix2LPYp9im2YQgKNmK2KTYr9mKINiq2YLZhNmK2YQg2YfYsNinINin2YTYpdi52K/Yp9ivINil2YTZiSDYstmK2KfYr9ipINin2LPYqtiu2K/Yp9mFINmI2K3Yr9ipINin2YTZhdi52KfZhNis2Kkg2KfZhNmF2LHZg9iy2YrYqSkiLHFvczoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipINmB2Yog2LHYs9in2KbZhCBNUVRUICgwIC0g2LnZhNmJINin2YTYo9mD2KvYsSDZhdix2Kkg2YjYp9it2K/YqdiMIDEgLSDYudmE2Ykg2KfZhNij2YLZhCDZhdix2Kkg2YjYp9it2K/YqSkiLCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYtNio2YPYqSDYp9mE2LDZiiDYs9mK2LPYqtmF2Lkg2YHZitmHINiu2KfYr9mFIEdSUEMg2YTZhNin2LPYqtmB2LPYp9ix2KfYqiDYp9mE2YjYp9ix2K/YqS4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNmE2YjZgtiqINin2YTYsNmKINmK2KzYqCDYo9mGINmK2YbYqti42LHZhyDYp9mE2K7Yp9iv2YUg2YTYp9iz2KrYrNin2KjYqSDYsdiz2KfZhNipINin2YTYrdmB2KfYuCDYudmE2Ykg2KfZhNin2KrYtdin2YQg2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTZhdiv2Kkg2KjZitmGINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTZhdiq2LnYp9mC2KjYqSDYudmG2K8g2LnYr9mFINmI2KzZiNivINin2LPYqtiv2LnYp9ihIFJQQyDZhti02LcuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTYqtmKINmK2YXZg9mGINmE2YTYrtin2K/ZhSDYpdix2LPYp9mE2YfYpyDYr9mI2YYg2KrZhNmC2Yog2KPZiiDYqNmK2KfZhtin2Kog2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINi52YbYryDYudiv2YUg2KXYsdiz2KfZhCDYo9mIINin2LPYqtmE2KfZhSDYqNmK2KfZhtin2KouIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2LPZhdin2K0g2YTZhNiu2KfYr9mFINio2KXYqNmC2KfYoSDYp9iq2LXYp9mEIEdSUEMg2K3ZitmL2Kcg2K3YqtmJINi52YbYr9mF2Kcg2YTYpyDYqtmD2YjZhiDZh9mG2KfZgyDYp9iz2KrYr9i52KfYodin2KogUlBDINmG2LTYt9ipLiJ9fSxWbz17ImFkZC1lbnRyeSI6IkFmZWdpciBjb25maWd1cmFjacOzIiwiY29ubmVjdG9yLWFkZCI6IkFmZWdpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJDYWwgbm9tIGNvbmVjdG9yLiIsImNvbm5lY3Rvci10eXBlIjoiVGlwdXMgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNhbCB0aXB1cyBjb25lY3Rvci4iLGNvbm5lY3RvcnM6IkNvbmZpZ3VyYWNpw7MgZGUgY29uZWN0b3JzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXIgdW4gZ2F0ZXdheSBub3UiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkNyZWFyIHVuIG5vdSBnYXRld2F5IGFtYiBlbCBub206ICd7e2dhdGV3YXlOYW1lfX0nPyIsZGVsZXRlOiJFc2JvcnJhciBjb25maWd1cmFjacOzIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FycmVnYXIgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkphIGV4aXN0ZWl4IHVuIGRpc3Bvc2l0aXUgYW1iIGVsIG1hdGVpeCBub20uIiwiZ2F0ZXdheS1uYW1lIjoiTm9tIGRlIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJDYWwgdW4gbm9tIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7MgZGUgZ2F0ZXdheSBncmF2YWRhIHNhdGlzZmFjdMOycmlhbWVudC4iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6BsaWQuIiwianNvbi1yZXF1aXJlZCI6IkVsIGNhbXAgbm8gcG90IHNlciBidWl0LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBoaSBoYSBjb25lY3RvcnMiLCJuby1kYXRhIjoiTm8gaGkgaGEgY29uZmlndXJhY2lvbnMiLCJuby1nYXRld2F5LWZvdW5kIjoiTm8gcydoYSB0cm9iYXQgY2FwIGdhdGV3YXkuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vIHRyb2JhdC4iLCJwYXRoLWxvZ3MiOiJSdXRhIGFscyBmaXR4ZXJzIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IkNhbCBydXRhLiIscmVtb3RlOiJDb25maWd1cmFjacOzIHJlbW90YSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTml2ZWwgZGUgbG9nZ2luZyIsInJlbW92ZS1lbnRyeSI6IkVzYm9ycmFyIGNvbmZpZ3VyYWNpw7MiLCJzYXZlLXRpcCI6IkdyYXZhciBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIsInNlY3VyaXR5LXR5cGUiOiJUaXB1cyBkZSBzZWd1cmV0YXQiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkJ2FjY8OpcyIsdGxzOiJUTFMifSxzdG9yYWdlOiJHcmFiYWNpw7MiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJOw7ptZXJvIG3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZml0eGVyIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoHhpbSBkZSBmaXR4ZXJzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiRWwgbsO6bWVybyBtw61uaW0gw6lzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiQ2FsIG7Dum1lcm8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZWwgbWFnYXR6ZW0iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltIMOpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1pZGEgbcOgeGltIGRlIGVzZGV2ZW5pbWVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbSDDqXMgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6BsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhdGgiOiJSdXRhIGRlIG1hZ2F0emVtIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiQ2FsIHJ1dGEgZGUgbWFnYXR6ZW0uIiwic3RvcmFnZS10eXBlIjoiVGlwdXMgZGUgbWFnYXR6ZW0iLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik1hZ2F0emVtIGZpdHhlciIsIm1lbW9yeS1zdG9yYWdlIjoiTWFnYXR6ZW0gZW4gbWVtb3JpYSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IkNhbCBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQb3J0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJFbCBwb3J0IG3DoHhpbSDDqXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJFbCBwb3J0IG3DrW5pbSDDqXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQb3J0IG5vIHbDoGxpZC4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiQ2FsIHBvcnQuIix0aWR5OiJFbmRyZcOnYXQiLCJ0aWR5LXRpcCI6IkVuZHJlw6dhdCBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDsyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlJ1dGEgYWwgY2VydGlmaWNhdCBDQSBhbCBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUnV0YSBhbCBjZXJ0aWZpY2F0IGNsaWVudCBhbCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJSdXRhIGEgbGEgY2xhdSBwcml2YWRhIGFsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7MgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWZlZ2lyL2FjdHVhbGl6YXIgY29uZmlndXJhY2nDsyBKU09OIn0sQm89eyJhZGQtZW50cnkiOiJQxZlpZGF0IGtvbmZpZ3VyYWNpIiwiY29ubmVjdG9yLWFkZCI6IlDFmWlkYXQgbm92w70ga29uZWt0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IlBvdm9saXQga29uZWt0b3IiLCJjb25uZWN0b3ItbmFtZSI6Ik7DoXpldiBrb25la3RvcnUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Ik7DoXpldiBrb25la3RvcnUgamUgcG92aW5uw70uIiwiY29ubmVjdG9yLXR5cGUiOiJUeXAga29uZWt0b3J1IiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJUeXAga29uZWt0b3J1IGplIHBvdmlubsO9LiIsY29ubmVjdG9yczoiS29uZmlndXJhY2Uga29uZWt0b3J1IiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiVnl0dm/FmWl0IG5vdm91IGJyw6FudSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiSnN0ZSBzaSBqaXN0aSwgxb5lIGNoY2V0ZSB2eXR2b8WZaXQgbm92b3UgYnLDoW51IHMgbsOhenZlbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IlNtYXphdCBrb25maWd1cmFjaSIsImRvd25sb2FkLXRpcCI6IlN0w6Fobm91dCBzb3Vib3Iga29uZmlndXJhY2UiLGdhdGV3YXk6IkJyw6FuYSIsImdhdGV3YXktZXhpc3RzIjoiWmHFmcOtemVuw60gc2Ugc2hvZG7DvW0gbsOhenZlbSBqacW+IGV4aXN0dWplLiIsImdhdGV3YXktbmFtZSI6Ik7DoXpldiBicsOhbnkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOw6F6ZXYgYnLDoW55IGplIHBvdmlubsO9LiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjZSBicsOhbnkgYnlsYSDDunNwxJvFoW7EmyB1bG/FvmVuYS4iLCJqc29uLXBhcnNlIjoiTmVwbGF0bsO9IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmVtxa/FvmUgYsO9dCBwcsOhemRuw6kuIiwibm8tY29ubmVjdG9ycyI6IsW9w6FkbsOpIGtvbmVrdG9yeSIsIm5vLWRhdGEiOiLFvcOhZG7DqSBrb25maWd1cmFjZSIsIm5vLWdhdGV3YXktZm91bmQiOiLFvcOhZG7DqSBicsOhbnkgbmVieWx5IG5hbGV6ZW55LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIgJ3t7aXRlbX19JyBuZW5hbGV6ZW5hLiIsInBhdGgtbG9ncyI6IkNlc3RhIGsgc291Ym9yxa9tIGxvZ3UiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJDZXN0YSBqZSBwb3Zpbm7DoS4iLHJlbW90ZToiVnpkw6FsZW7DoSBrb25maWd1cmFjZSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiw5pyb3ZlxYggbG9nb3bDoW7DrSIsInJlbW92ZS1lbnRyeSI6Ik9kc3RyYW5pdCBrb25maWd1cmFjaSIsInNhdmUtdGlwIjoiVWxvxb5pdCBzb3Vib3Iga29uZmlndXJhY2UiLCJzZWN1cml0eS10eXBlIjoiVHlwIHphYmV6cGXEjWVuw60iLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJQxZnDrXN0dXBvdsO9IHRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IsOabG/FvmnFoXTEmyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiBzb3Vib3J1Iiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbcOhbG7DrSBwb8SNZXQgc291Ym9yxa8iLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbcOhbG7DrSBwb8SNZXQgamUgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiUG/EjWV0IG5lbsOtIHBsYXRuw70uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJQb8SNZXQgamUgcG92aW5uw70uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiDDumxvxb5pxaF0aSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IHrDoXpuYW3FryBqZSAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbcOhbG7DrSBwb8SNZXQgesOhem5hbcWvIGplIHBvdmlubsO9LiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IGplIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtcGF0aCI6IkNlc3RhIGsgw7psb8W+acWhdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJDZXN0YSBrIMO6bG/FvmnFoXRpIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCDDumxvxb5pxaF0xJsiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IlNvdWJvciIsIm1lbW9yeS1zdG9yYWdlIjoiUGFtxJvFpSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamUgcG92aW5uw70uIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBvcnQgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltw6FsbsOtIMSNw61zbG8gcG9ydHUgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbcOhbG7DrSDEjcOtc2xvIHBvcnR1IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBuZW7DrSBwbGF0bsO9LiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGplIHBvdmlubsO9LiIsdGlkeToiVXNwb8WZw6FkYXQiLCJ0aWR5LXRpcCI6IlVzcG/FmcOhZGF0IEpTT04ga29uZmlndXJhY2kiLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJLb25maWd1cmFjZSB7e3R5cGVOYW1lfX0ga29uZWt0b3J1IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBDQSBicsOhbnkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBrbGllbnRhIGJyw6FueSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiQ2VzdGEgayBwcml2w6F0bsOtbXUga2zDrcSNaSBicsOhbnkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlDFmWVwbm91dCBkbyByZcW+aW11IGNlbMOpIG9icmF6b3ZreSIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiSlNPTioga29uZmlndXJhY2UiLCJ1cGRhdGUtY29uZmlnIjoiUMWZaWRhdC9lZGl0b3ZhdCBKU09OIGtvbmZpZ3VyYWNpIn0sVW89eyJhZGQtZW50cnkiOiJUaWxmw7hqIGtvbmZpZ3VyYXRpb24iLCJjb25uZWN0b3ItYWRkIjoiVGlsZsO4aiBueSBzdGlrZm9yYmluZGVsc2UiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkFrdGl2w6lyIHN0aWtmb3JiaW5kZWxzZSIsImNvbm5lY3Rvci1uYW1lIjoiTmF2biBww6Ugc3Rpa2ZvcmJpbmRlbHNlIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJOYXZuIHDDpSBzdGlrZm9yYmluZGVsc2UgZXIgcMOla3LDpnZldC4iLCJjb25uZWN0b3ItdHlwZSI6IlN0aWtmb3JiaW5kZWxzZXN0eXBlIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTdGlrZm9yYmluZGVsc2VzdHlwZSBlciBww6VrcsOmdmV0LiIsY29ubmVjdG9yczoiS29uZmlndXJhdGlvbiBhZiBzdGlrZm9yYmluZGVsc2VyIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiT3ByZXQgZW4gbnkgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiIixkZWxldGU6IlNsZXQga29uZmlndXJhdGlvbiIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGtvbmZpZ3VyYXRpb25zZmlsIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJFbmhlZCBtZWQgc2FtbWUgbmF2biBmaW5kZXMgYWxsZXJlZGUuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheS1uYXZuIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheS1uYXZuIGVyIHDDpWtyw6Z2ZXQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkta29uZmlndXJhdGlvbmVuIGJsZXYgZ2VtdC4iLCJqc29uLXBhcnNlIjoiSWtrZSBneWxkaWcgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmVsdGV0IG3DpSBpa2tlIHbDpnJlIHRvbXQuIiwibm8tY29ubmVjdG9ycyI6IkluZ2VuIHN0aWtmb3JiaW5kZWxzZXIiLCJuby1kYXRhIjoiSW5nZW4ga29uZmlndXJhdGlvbmVyIiwibm8tZ2F0ZXdheS1mb3VuZCI6IkluZ2VuIGdhdGV3YXkgZnVuZGV0LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIiLCJwYXRoLWxvZ3MiOiJTdGkgdGlsIGxvZ2ZpbGVyIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiU3RpIGVyIHDDpWtyw6Z2ZXQuIixyZW1vdGU6IkZqZXJua29uZmlndXJhdGlvbiIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nZsO4cmluZ3NuaXZlYXUiLCJyZW1vdmUtZW50cnkiOiJGamVybiBrb25maWd1cmF0aW9uIiwic2F2ZS10aXAiOiJHZW0ga29uZmlndXJhdGlvbnNmaWwiLCJzZWN1cml0eS10eXBlIjoiU2lra2VyaGVkc3R5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBZGdhbmdzdG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiTGFncmluZyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGZpbCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrcy4gYW50YWwgZmlsZXIiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW4uIGFudGFsIGVyIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IkFudGFsIGVyIGlra2UgZ3lsZGlndC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6IkFudGFsIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGxhZ3JpbmciLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbi4gYW50YWwgcG9zdGVyIGVyIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYWtzLiBhbnRhbCBwb3N0ZXIgZXIgcMOla3LDpnZldC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3MuIGFudGFsIHBha2tlc3TDuHJyZWxzZSBmb3IgYmVnaXZlbmhlZCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbi4gYW50YWwgZXIgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrcy4gYW50YWwgcGFra2VzdMO4cnJlbHNlIGZvciBiZWdpdmVuaGVkIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1wYXRoIjoiTGFncmluZ3NzdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJMYWdyaW5nc3N0aSBlciBww6VrcsOmdmV0LiIsInN0b3JhZ2UtdHlwZSI6IkxhZ3JpbmdzdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiTGFncmluZyBhZiBmaWx0ZXIiLCJtZW1vcnktc3RvcmFnZSI6IkxhZ3JpbmcgYWYgaHVrb21tZWxzZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZC12w6ZydCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJWw6ZydCBlciBww6VrcsOmdmV0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZC1wb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzLiBwb3J0bnVtbWVyIGVyIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluLiBwb3J0bnVtbWVyIGVyIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBlciBpa2tlIGd5bGRpZy4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBlciBww6VrcsOmdmV0LiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBrb25maWcuIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiIiLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwgQ0EtY2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwga2xpZW50Y2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiU3RpIHRpbCBwcml2YXQgbsO4Z2xlIHDDpSBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJTa2lmdCB0aWwgZnVsZCBza8Omcm0iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiVGlsZsO4ai9vcGRhdGVyIGtvbmZpZ3VyYXRpb24gSlNPTiJ9LF9vPXsiYWRkLWVudHJ5IjoiQcOxYWRpciBjb25maWd1cmFjacOzbiIsYWR2YW5jZWQ6IkF2YW56YWRvIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiUHJvYmFuZG8gYWN0aXZpZGFkIGRlIGRpc3Bvc2l0aXZvIixjb21tYW5kOiJDb21hbmRvcyBEb2NrZXIiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiU2UgaGFuIGNvcGlhZG8gbG9zIGNvbWFuZG9zIGFsIHBvcnRhcGFwZWxlcyIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhY2nDs24iLCJjb25uZWN0b3ItYWRkIjoiQcOxYWRpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tYnJlIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBub21icmUgY29uZWN0b3IuIiwiY29ubmVjdG9yLXR5cGUiOiJUaXBvIGNvbmVjdG9yIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aXBvIGNvbmVjdG9yLiIsY29ubmVjdG9yczoiQ29uZWN0b3JlcyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29uZmlndXJhY2nDs24gZGUgY29uZWN0b3JlcyIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOb21icmUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUaXBvIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJFc3RhZG8iLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY2Npb25lcyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiQ2xhdmUiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc2UiLCJycGMtY29tbWFuZC1zZW5kIjoiRW52aWFyIiwicnBjLWNvbW1hbmQtcmVzdWx0IjoiUmVzdWx0YWRvIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiJFZGl0YXIgcGFyYW1ldHJvcyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkNvbmZpZ3VyYWNpw7NuIEdlbmVyYWwiLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhciB1biBnYXRld2F5IG51ZXZvIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJDcmVhciB1biBudWV2byBnYXRld2F5IGNvbiBlbCBub21icmU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkhvcmEgZGUgY3JlYWNpw7NuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6IkxhcyBjb25maWd1cmFjaW9uZXMgc2UgYm9ycmFyw6FuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJTw7NsbyBlcyBwb3NpYmxlIGRlc2FjdGl2YXIgbGEgY29uZmlndXJhY2nDs24gcmVtb3RhLCBzaSBoYXkgYWNjZXNvIGbDrXNpY28gYWwgZ2F0ZXdheS4gU2UgYm9ycmFyw6FuIHRvZGFzIGxhcyBjb25maWd1cmFjaW9uZXMgcHJldmlhcy48YnI+PGJyPiBcblBhcmEgZGVzYWN0aXZhciBsYSBjb25maWd1cmFjacOzbiwgaW50cm9kdWNlIGVsIG5vbWJyZSBkZWwgZ2F0ZXdheSBhcXXDrSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6Ik5vbWJyZSBHYXRld2F5IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGdhdGV3YXkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IkRlc2FjdGl2YXIiLGRlbGV0ZToiQm9ycmFyIGNvbmZpZ3VyYWNpw7NuIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FyZ2FyIGZpY2hlcm8gZGUgY29uZmlndXJhY2nDs24iLCJkcm9wLWZpbGUiOiJBcnJhc3RyYSB1biBmaWNoZXJvIG8iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IllhIGV4aXN0ZSB1biBkaXNwb3NpdGl2byBjb24gZWwgbWlzbW8gbm9tYnJlLiIsImdhdGV3YXktbmFtZSI6Ik5vbWJyZSBkZSBHYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdW4gbm9tYnJlIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7NuIGRlIGdhdGV3YXkgZ3JhYmFkYSBzYXRpc2ZhY3RvcmlhbWVudGUuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaW1lb3V0IEtlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgVGltZW91dCBLZWVwIGFsaXZlIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiRWwgdmFsb3Igbm8gZXMgdsOhbGlkbyIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGtlZXAgYWxpdmUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6IkVsIHZhbG9yIGtlZXAgYWxpdmUgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6IlRpZW1wbyBtw61uaW1vIGVudHJlIHBpbmdzIChlbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aWVtcG8gbcOtbmltbyBlbnRyZSBwaW5ncyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiRWwgdmFsb3IgZGUgdGllbXBvIG3DrW5pbW8gZW50cmUgcGluZ3Mgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DrW5pbW8gc2luIGRhdG9zIChlbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGludGVydmFsbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGludGVydmFsbyBubyBlcyB2w6FsaWRvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DoXhpbW8gc2luIGRhdG9zIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgaW50ZXJ2YWxvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJFbCB2YWxvciBkZSBpbnRlcnZhbG8gbm8gZXMgdsOhbGlkbyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJQZXJpb2RvIGRlIGNvbnRyb2wgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlbCBwZXJpb2RvIG5vIGVzIHbDoWxpZG8iLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcyI6IlRpbWVvdXQgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGltZW91dCBkZSBpbmFjdGl2aWRhZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGluYWN0aXZpZGFkIG5vIGVzIHbDoWxpZG8iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6FsaWRvLiIsImpzb24tcmVxdWlyZWQiOiJFbCBjYW1wbyBubyBwdWVkZSBlc3RhciB2YWPDrW8uIixsb2dzOntsb2dzOiJSZWdpc3Ryb3MiLGRheXM6ImTDrWFzIixob3VyczoiaG9yYXMiLG1pbnV0ZXM6Im1pbnV0b3MiLHNlY29uZHM6InNlZ3VuZG9zIiwiZGF0ZS1mb3JtYXQiOiJGb3JtYXRvIGRlIGZlY2hhIiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBmb3JtYXRvIGRlIGZlY2hhIiwibG9nLWZvcm1hdCI6IkZvcm1hdG8gZGUgcmVnaXN0cm8iLCJsb2ctdHlwZSI6IlRpcG8gZGUgcmVnaXN0cm8iLCJsb2ctZm9ybWF0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGlwbyBkZSByZWdpc3RybyIscmVtb3RlOiJSZWdpc3RybyByZW1vdG8iLCJyZW1vdGUtbG9ncyI6IlJlZ2lzdHJvIHJlbW90byIsbG9jYWw6IlJlZ2lzdHJvIGxvY2FsIixsZXZlbDoiTml2ZWwgZGUgcmVnaXN0cm8iLCJmaWxlLXBhdGgiOiJSdXRhIGRlIGZpY2hlcm8iLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBydXRhIGRlIGZpY2hlcm8iLCJzYXZpbmctcGVyaW9kIjoiUGVyaW9kbyBkZSBndWFyZGFkbyBkZSByZWdpc3Ryb3MiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gbm8gcHVlZGUgc2VyIG1lbm9yIHF1ZSAxIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHBlcmlvZG8gZGUgZ3VhcmRhZG8iLCJiYWNrdXAtY291bnQiOiJOw7ptZXJvIGRlIGJhY2t1cHMiLCJiYWNrdXAtY291bnQtbWluIjoiRWwgbsO6bWVybyBkZSBiYWNrdXBzIG5vIHB1ZWRlIHNlciBtZW5vciBxdWUgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgYmFja3VwcyJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiVGllbXBvIGRlIGVzcGVyYSwgZW52w61vIGRlIHBhcXVldGVzIChlbiBtcykiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGllbXBvIGRlIGVzcGVyYSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoiRWwgdGllbXBvIGRlIGVzcGVyYSBubyBwdWVkZSBzZXIgbWVub3IgcXVlIDAiLCJuby1jb25uZWN0b3JzIjoiTm8gaGF5IGNvbmVjdG9yZXMiLCJuby1kYXRhIjoiTm8gaGF5IGNvbmZpZ3VyYWNpb25lcyIsIm5vLWdhdGV3YXktZm91bmQiOiJObyBzZSBoYSBlbmNvbnRyYWRvIG5pbmfDum4gZ2F0ZXdheS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiICd7e2l0ZW19fScgbm8gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJSdXRhIGEgbG9zIGFyY2hpdm9zIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlJ1dGEgcmVxdWVyaWRhLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiUGVybWl0aXIgS2VlcCBhbGl2ZSBzaSBsbGFtYWRhcyIscmVtb3RlOiJDb25maWd1cmFjacOzbiByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik5pdmVsIGRlIGxvZ2dpbmciLCJyZW1vdmUtZW50cnkiOiJCb3JyYXIgY29uZmlndXJhY2nDs24iLCJyZW1vdGUtc2hlbGwiOiJDb25zb2xhIHJlbW90YSIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiQ29uZmlndXJhY2nDs24gcmVtb3RhIixvdGhlcjoib3Ryb3MiLCJzYXZlLXRpcCI6IkdyYWJhciBmaWNoZXJvIGRlIGNvbmZpZ3VyYWNpw7NuIiwic2VjdXJpdHktdHlwZSI6IlRpcG8gZGUgc2VndXJpZGFkIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVMOza2VuIGRlIGFjY2VzbyIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXN1YXJpbyB5IGNvbnRyYXNlw7FhIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBUw7NrZW4gZGUgYWNjZXNvIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgQ2xhdmUgcHJpdmFkYSJ9LCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZWwgc2Vydmlkb3IiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiRXN0YWTDrXN0aWNhIixzdGF0aXN0aWNzOiJFc3RhZMOtc3RpY2FzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjoiTm8gaGF5IGVzdGFkw61zdGljYXMiLGNvbW1hbmRzOiJDb21hbmRvcyIsInNlbmQtcGVyaW9kIjoiUGVyaW9kbyBkZSBlbnbDrW8gZGUgZXN0YWTDrXN0aWNhcyAoZW4gc2VndW5kb3MpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIGRlIGVudsOtbyIsInNlbmQtcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gZGUgZW52w61vIG5vIHB1ZWRlIHNlciBtZW5vciBkZSA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJFbCBwZXJpb2RvIGRlIGVudsOtbyBubyBlcyB2w6FsaWRvIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiUmV2aXNhciBjb25maWd1cmFjacOzbiBkZSBjb25lY3RvcmVzIChlbiBzZWd1bmRvcykiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB1biB2YWxvciIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuIjoiTGEgY29uZmlndXJhY2nDs24gbm8gZXMgdsOhbGlkYSIsYWRkOiJBw7FhZGlyIGNvbWFuZG8iLHRpbWVvdXQ6IlRpbWVvdXQiLCJ0aW1lb3V0LW1zIjoiVGltZW91dCAoZW4gbXMpIiwidGltZW91dC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHRpbWVvdXQiLCJ0aW1lb3V0LW1pbiI6IkVsIHRpbWVvdXQgbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJFbCB0aW1lb3V0IG5vIGVzIHbDoWxpZG8iLCJhdHRyaWJ1dGUtbmFtZSI6Ik5vbWJyZSBkZSBhdHJpYnV0byIsImF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGF0cmlidXRvIixjb21tYW5kOiJDb21hbmRvIiwiY29tbWFuZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGNvbWFuZG8iLHJlbW92ZToiQm9ycmFyIGNvbWFuZG8ifSxzdG9yYWdlOiJHcmFiYWNpw7NuIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTsO6bWVybyBtw6F4aW1vIGRlIHJlZ2lzdHJvcyBlbiBmaWNoZXJvIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZmljaGVyb3MiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6FsaWRvLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTcOheGltbyBkZSByZWdpc3Ryb3MgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltbyBlcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiTGVlciBuw7ptZXJvIGRlIGVudHJhZGFzIGVuIGFsbWFjw6luIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgZW50cmFkYXMgZXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBuw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiUnV0YSBkZSBjYXJwZXRhIGRlIGRhdG9zIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcnV0YS4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWHDsW8gbcOheGltbyBkZSBldmVudG9zIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiRWwgbsO6bWVybyBtw61uaW1vIGVzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8uIiwic3RvcmFnZS1wYXRoIjoiUnV0YSBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHJ1dGEgZGUgYWxtYWPDqW4uIiwic3RvcmFnZS10eXBlIjoiVGlwbyBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gZmljaGVybyIsIm1lbW9yeS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gbWVtb3JpYSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiSG9zdCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQdWVydG8gVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkVsIHB1ZXJ0byBtw6F4aW1vIGVzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiRWwgcHVlcnRvIG3DrW5pbW8gZXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQdWVydG8gbm8gdsOhbGlkby4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcHVlcnRvLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDs24gY29uZWN0b3Ige3t0eXBlTmFtZX19IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIENBIGVuIGVsIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIGNsaWVudGUgZW4gZWwgZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6IkNvbXByb2JhY2nDs24gZGUgVFRMIGRlIG1lbnNhamVzIGVuIGhvcmFzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiQ2FtcG8gcmVxdWVyaWRvLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJFbCBtw61uaW1vIGVzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwgKFRpbWUgdG8gbGl2ZSkgZGUgbWVuc2FnZXMgZW4gZMOtYXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIFRUTCBkZSBtZW5zYWplcy4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvLiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IkVsIHJhbmdvIGRlIHZhbG9yZXMgZXMgZGVzZGUgMCBhIDEiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlJ1dGEgYSBsYSBjbGF2ZSBwcml2YWRhIGVuIGVsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7NuIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkHDsWFkaXIvYWN0dWFsaXphciBjb25maWd1cmFjacOzbiBKU09OIixoaW50czp7InJlbW90ZS1jb25maWd1cmF0aW9uIjoiSGFiaWxpdGEgbGEgYWRtaW5pc3RyYWNpw7NuIHkgY29uZmlndXJhY2nDs24gcmVtb3RhIGRlbCBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiSGFiaWxpdGEgZWwgY29udHJvbCByZW1vdG8gZGVsIHNpc3RlbWEgb3BlcmF0aXZvIGRlbCBnYXRld2F5IGRlc2RlIGVsIHdpZGdldCB0ZXJtaW5hbCByZW1vdG8iLGhvc3Q6Ikhvc3RuYW1lIG8gZGlyZWNjacOzbiBJUCBkZWwgc2Vydmlkb3IgVGhpbmdzYm9hcmQiLHBvcnQ6IlB1ZXJ0byBkZWwgc2VydmljaW8gTVFUVCBlbiBlbCBzZXJ2aWRvciBUaGluZ3Nib2FyZCIsdG9rZW46IkFjY2VzcyB0b2tlbiBwYXJhIGVsIGdhdGV3YXkiLCJjbGllbnQtaWQiOiJJRCBkZSBjbGllbnRlIE1RVFQgcGFyYSBlbCBnYXRld2F5Iix1c2VybmFtZToiVXN1YXJpbyBNUVRUIHBhcmEgZWwgZ2F0ZXdheSIscGFzc3dvcmQ6IkNvbnRyYXNlw7FhIE1RVFQgcGFyYSBlbCBnYXRld2F5IiwiY2EtY2VydCI6IlJ1dGEgYWwgZmljaGVybyBkZWwgY2VydGlmaWNhZG8gQ0EiLCJkYXRlLWZvcm0iOiJGb3JtYXRvIGRlIGZlY2hhIGVuIGxvcyBtZW5zYWplcyBkZSByZWdpc3RybyIsImRhdGEtZm9sZGVyIjoiUnV0YSBhIGxhIGNhcnBldGEgcXVlIGNvbnRlbmRyw6EgbG9zIGRhdG9zIChSZWxhdGl2YSBvIGFic29sdXRhKSIsImxvZy1mb3JtYXQiOiJGb3JtYXRvIGRlIG1lbnNhamVzIGVuIHJlZ2lzdHJvIiwicmVtb3RlLWxvZyI6IkhhYmlsaXRhIGVsIHJlZ2lzdHJvIHJlbW90byB5IGxhIHBvc3RlcmlvciBsZWN0dXJhIGRlc2RlIGVsIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJTaSBlbCBjb250YWplIGRlIGNvcGlhcyBkZSBzZWd1cmlkYWQgZXMgbWF5b3IgcXVlIDAsIGN1YW5kbyBzZSByZWFsaWNlIHVuYSByZW5vdmFjacOzbiwgbm8gc2UgY29uc2VydmFuIG3DoXMgcXVlIGxvcyBhcmNoaXZvcyBkZSByZWN1ZW50byBkZSBjb3BpYXMgZGUgc2VndXJpZGFkLCBsb3MgbcOhcyBhbnTDrWd1b3Mgc2UgZWxpbWluYXLDoW4iLHN0b3JhZ2U6IlByb3ZlZSBsYSBjb25maWd1cmFjacOzbiBwYXJhIGVsIGdyYWJhZG8gZGUgZGF0b3MgZW50cmFudGVzIGFudGVzIGRlIHF1ZSBzZSBlbnbDrWVuIGEgbGEgcGxhdGFmb3JtYSIsIm1heC1maWxlLWNvdW50IjoiTsO6bWVybyBtw6F4aW1vIGRlIGZpY2hlcm9zIHF1ZSBzZSBjcmVhcsOhbiIsIm1heC1yZWFkLWNvdW50IjoiTsO6bWVvIG3DoXhpbW8gZGUgbWVuc2FqZXMgYSBvYnRlbmVyIGRlc2RlIGVsIGRpc2NvIHkgZW52aWFkb3MgYSBsYSBwbGF0YWZvcm1hIiwibWF4LXJlY29yZHMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIHF1ZSBzZSBndWFyZGFyw6FuIGVuIHVuIHNvbG8gZmljaGVybyIsInJlYWQtcmVjb3JkLWNvdW50IjoiTsO6bWVybyBkZSBtZW5zYWdlcyBhIG9idGVuZXIgZGVzZGUgZWwgYWxtYWNlbmFtaWVudG8geSBlbnZpYWRvcyBhIGxhIHBsYXRhZm9ybWEiLCJtYXgtcmVjb3Jkcy1jb3VudCI6Ik7Dum1lcm8gbcOheGltbyBkZSBkYXRvcyBlbiBhbG1hY2VuYW1pZW50byBhbnRlcyBkZSBlbnZpYXIgYSBsYSBwbGF0YWZvcm1hIiwidHRsLWNoZWNrLWhvdXIiOiJDb24gcXXDqSBmcmVjdWVuY2lhIGVsIGdhdGV3YXkgY29tcHJvYmFyw6Egc2kgbG9zIGRhdG9zIGVzdMOhbiBvYnNvbGV0b3MiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTsO6bWVybyBtw6F4aW1vIGRlIGTDrWFzIHBhcmEgbGEgcmV0ZW5jacOzbiBkZSBkYXRvcyBlbiBlbCBhbG1hY8OpbiIsY29tbWFuZHM6IkNvbWFuZG9zIHBhcmEgcmVjb2dlciBlc3RhZMOtc3RpY2FzIGFkaWNpb25hbGVzIixhdHRyaWJ1dGU6IkNsYXZlIGRlIHRlbGVtZXRyw61hIHBhcmEgZXN0YWTDrXN0aWNhcyIsdGltZW91dDoiVGltZW91dCBwYXJhIGxhIGVqZWN1Y2nDs24gZGUgY29tYW5kb3MiLGNvbW1hbmQ6IkVsIHJlc3VsdGFkbyBkZSBsYSBlamVjdWNpw7NuIGRlbCBjb21hbmRvLCBzZSB1c2Fyw6EgY29tbyB2YWxvciBwYXJhIGxhIHRlbGVtZXRyw61hIiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiSGFiaWxpdGEgbGEgbW9uaXRvcml6YWNpw7NuIGRlIGNhZGEgdW5vIGRlIGxvcyBkaXNwb3NpdGl2b3MgY29uZWN0YWRvcyIsImluYWN0aXZpdHktdGltZW91dCI6IlRpZW1wbyB0cmFzIHF1ZSBlbCBnYXRld2F5IGRlc2NvbmVjdGFyw6EgZWwgZGlzcG9zaXRpdm8iLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZG8gZGUgbW9uaXRvcml6YWNpw7NuIGRlIGFjdGl2aWRhZCBlbiBlbCBkaXNwb3NpdGl2byIsIm1pbmltYWwtcGFjay1kZWxheSI6IlRpZW1wbyBkZSBlc3BlcmEgZW50cmUgZW52w61vIGRlIHBhcXVldGVzIGRlIG1lbnNhamVzIChVbiB2YWxvciBtdXkgYmFqbywgcmVzdWx0YXLDoSBlbiB1biBhdW1lbnRvIGRlIHVzbyBkZSBsYSBDUFUgZW4gZWwgZ2F0ZXdheSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGVuIGxvcyBtZW5zYWplcyBNUVRUICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZSByZWQgZW4gZWwgY3VhbCBlbCBzZXJ2aWRvciBHUlBDIGVzY3VjaGFyw6EgY29uZXhpb25lcyBlbnRyYW50ZXMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaWVtcG8gbcOheGltbywgZWwgY3VhbCBlbCBzZXJ2aWRvciBlc3BlcmFyYSB1biBwaW5nIGtlZXBhbGl2ZSBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYWNpw7NuIGVudHJlIGRvcyBwaW5ncyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbGxhbWFkYSBSUEMgYWN0aXZhLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik3DrW5pbW8gdGllbXBvIHF1ZSBlbCBzZXJ2aWRvciBkZWJlIGVzcGVyYXIgZW50cmUgZW52w61vcyBkZSBtZW5zYWplcyBkZSBwaW5nIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTsO6bWVybyBtw6F4aW1vIGRlIHBpbmdzIGtlZXBhbGl2ZSBxdWUgZWwgc2Vydmlkb3IgcHVlZGUgZW52aWFyIHNpbiByZWNpYmlyIG5pbmfDum4gZGF0byBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNw61uaW1vIHRpZW1wbyBxdWUgZWwgc2Vydmlkb3IgZGViZSBlc3BlcmFyIGVudHJlIGVudsOtb3MgZGUgcGluZyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbmluZ8O6biBkYXRvIGVuIGVudsOtbyBvIHJlY2VwY2nDs24uIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJQZXJtaXRpciBhbCBzZXJ2aWRvciBtYW50ZW5lciBsYSBjb25leGnDs24gR1JQQyBhYmllcnRhLCBjdWFuZG8gbm8gaGF5YSBsbGFtYWRhcyBSUEMgYWN0aXZhcy4ifX0sSG89eyJhZGQtZW50cnkiOiLshKTsoJUg7LaU6rCAIiwiY29ubmVjdG9yLWFkZCI6IuyDiOuhnOyatCDsl7DqsrDsnpAg7LaU6rCAIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJFbmFibGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUiOiJDb25uZWN0b3IgbmFtZSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiQ29ubmVjdG9yIG5hbWUgaXMgcmVxdWlyZWQuIiwiY29ubmVjdG9yLXR5cGUiOiJDb25uZWN0b3IgdHlwZSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiQ29ubmVjdG9yIHR5cGUgaXMgcmVxdWlyZWQuIixjb25uZWN0b3JzOiJDb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhdGUgYSBuZXcgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQXJlIHlvdSBzdXJlIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBnYXRld2F5IHdpdGggbmFtZTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiU3RvcmFnZSIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBmaWxlIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbXVtIG51bWJlciBvZiBmaWxlcyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJOdW1iZXIgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWF4aW11bSByZWNvcmRzIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZCBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlRoaW5nc0JvYXJkIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29ubmVjdG9yIHt7dHlwZU5hbWV9fSBjb25maWd1cmF0aW9uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYXRoIHRvIHByaXZhdGUga2V5IG9uIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlRvZ2dsZSBmdWxsc2NyZWVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aW9uIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkZC91cGRhdGUgY29uZmlndXJhdGlvbiBKU09OIn0sem89eyJhZGQtZW50cnkiOiJBZGQgY29uZmlndXJhdGlvbiIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJycGMtY29tbWFuZC1zZW5kIjoiU2VuZCIsInJwYy1jb21tYW5kLXJlc3VsdCI6IlJlc3VsdCIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiSW4gb3JkZXIgdG8gcnVuIFRoaW5nc0JvYXJkIElvVCBnYXRld2F5IGluIGRvY2tlciB3aXRoIGNyZWRlbnRpYWxzIGZvciB0aGlzIGRldmljZSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkNyZWF0ZSBhIG5ldyBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJBcmUgeW91IHN1cmUgeW91IHdhbnQgY3JlYXRlIGEgbmV3IGdhdGV3YXkgd2l0aCBuYW1lOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkRldmljZSB3aXRoIHNhbWUgbmFtZSBpcyBhbHJlYWR5IGV4aXN0cy4iLCJnYXRld2F5LW5hbWUiOiJHYXRld2F5IG5hbWUiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJHYXRld2F5IG5hbWUgaXMgcmVxdWlyZWQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHkgc2F2ZWQuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJLZWVwIGFsaXZlIHRpbWVvdXQgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIG5vdCB2YWxpZCIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IktlZXAgYWxpdmUgaXMgcmVxdWlyZWQiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiS2VlcCBhbGl2ZSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm4iOiJLZWVwIGFsaXZlIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgKGluIG1zKSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluIHBpbmcgaW50ZXJ2YWwgd2l0aG91dCBkYXRhIChpbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyBub3QgdmFsaWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1taW4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJqc29uLXBhcnNlIjoiTm90IHZhbGlkIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IkZpZWxkIGNhbm5vdCBiZSBlbXB0eS4iLGxvZ3M6e2xvZ3M6IkxvZ3MiLGRheXM6ImRheXMiLGhvdXJzOiJob3VycyIsbWludXRlczoibWludXRlcyIsc2Vjb25kczoic2Vjb25kcyIsImRhdGUtZm9ybWF0IjoiRGF0ZSBmb3JtYXQiLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IkRhdGUgZm9ybWF0IHJlcXVpcmVkIiwibG9nLWZvcm1hdCI6IkxvZyBmb3JtYXQiLCJsb2ctdHlwZSI6IkxvZyB0eXBlIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6IkxvZyBmb3JtYXQgcmVxdWlyZWQiLHJlbW90ZToiUmVtb3RlIGxvZ2dpbmciLCJyZW1vdGUtbG9ncyI6IlJlbW90ZSBsb2dzIixsb2NhbDoiTG9jYWwgbG9nZ2luZyIsbGV2ZWw6IkxvZyBsZXZlbCIsImZpbGUtcGF0aCI6IkZpbGUgcGF0aCIsImZpbGUtcGF0aC1yZXF1aXJlZCI6IkZpbGUgcGF0aCByZXF1aXJlZCIsInNhdmluZy1wZXJpb2QiOiJMb2cgc2F2aW5nIHBlcmlvZCIsInNhdmluZy1wZXJpb2QtbWluIjoiTG9nIHNhdmluZyBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiJMb2cgc2F2aW5nIHBlcmlvZCByZXF1aXJlZCIsImJhY2t1cC1jb3VudCI6IkJhY2t1cCBjb3VudCIsImJhY2t1cC1jb3VudC1taW4iOiJCYWNrdXAgY291bnQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IkJhY2t1cCBjb3VudCByZXF1aXJlZCJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiTWluIHBhY2sgc2VuZCBkZWxheSAoaW4gbXMpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgaXMgcmVxdWlyZWQiLCJtaW4tcGFjay1zZW5kLWRlbGF5LW1pbiI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMCIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJLZWVwIGFsaXZlIHBlcm1pdCB3aXRob3V0IGNhbGxzIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtc2hlbGwiOiJSZW1vdGUgc2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IlJlbW90ZSBDb25maWd1cmF0aW9uIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTdG9yYWdlIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIGZpbGUiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBudW1iZXIgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWJlciBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbXVtIHJlY29yZHMgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudCI6IlJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudCI6Ik1heCByZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiTWF4IFJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6IkRhdGEgZm9sZGVyIHBhdGgiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiJEYXRhIGZvbGRlciBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQgaG9zdCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYXhpbXVtIHBvcnQgbnVtYmVyIGlzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluaW11bSBwb3J0IG51bWJlciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgaXMgbm90IHZhbGlkLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGlzIHJlcXVpcmVkLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBjb25maWcgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsaGludHM6eyJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIFRoaW5nc0JvYXJkIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIGZvbGRlciwgdGhhdCB3aWxsIGNvbnRhaW5zIGRhdGEgKFJlbGF0aXZlIG9yIEFic29sdXRlKSIsImxvZy1mb3JtYXQiOiJMb2cgbWVzc2FnZSBmb3JtYXQiLCJyZW1vdGUtbG9nIjoiRW5hYmxlcyByZW1vdGUgbG9nZ2luZyBhbmQgbG9ncyByZWFkaW5nIGZyb20gdGhlIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJJZiBiYWNrdXAgY291bnQgaXMgPiAwLCB3aGVuIGEgcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cCBjb3VudCBmaWxlcyBhcmUga2VwdCAtIHRoZSBvbGRlc3Qgb25lcyBhcmUgZGVsZXRlZCIsc3RvcmFnZToiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3Igc2F2aW5nIGluY29taW5nIGRhdGEgYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIHBsYXRmb3JtIiwibWF4LWZpbGUtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGZpbGUgdGhhdCB3aWxsIGJlIGNyZWF0ZWQiLCJtYXgtcmVhZC1jb3VudCI6IkNvdW50IG9mIG1lc3NhZ2VzIHRvIGdldCBmcm9tIHN0b3JhZ2UgYW5kIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJtYXgtcmVjb3JkcyI6Ik1heGltdW0gY291bnQgb2YgcmVjb3JkcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIG9uZSBmaWxlIiwicmVhZC1yZWNvcmQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGRhdGEgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZCB0byBUaGluZ3NCb2FyZCIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgR2F0ZXdheSBjaGVjayBkYXRhIGZvciBvYnNvbGVzY2VuY2UiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTWF4aW11bSBkYXlzIHRoYXQgc3RvcmFnZSB3aWxsIHNhdmUgZGF0YSIsY29tbWFuZHM6IkNvbW1hbmRzIGZvciBjb2xsZWN0aW5nIGFkZGl0aW9uYWwgc3RhdGlzdGljIixhdHRyaWJ1dGU6IlN0YXRpc3RpYyB0ZWxlbWV0cnkga2V5Iix0aW1lb3V0OiJUaW1lb3V0IGZvciBjb21tYW5kIGV4ZWN1dGluZyIsY29tbWFuZDoiVGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24sIHdpbGwgYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRlbGVtZXRyeSIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6IkVuYWJsZXMgbW9uaXRvciB0aGUgYWN0aXZpdHkgb2YgZWFjaCBjb25uZWN0ZWQgZGV2aWNlIiwiaW5hY3Rpdml0eS10aW1lb3V0IjoiVGltZSBhZnRlciB3aG9zZSB0aGUgZ2F0ZXdheSB3aWxsIGRpc2Nvbm5lY3QgZGV2aWNlIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiJQZXJpb2RpY2l0eSBvZiBkZXZpY2UgYWN0aXZpdHkgY2hlY2siLCJtaW5pbWFsLXBhY2stZGVsYXkiOiJEZWxheSBiZXR3ZWVuIHNlbmRpbmcgcGFja3Mgb2YgbWVzc2FnZXMgKERlY3JlYXNpbmcgdGhpcyBzZXR0aW5nIHJlc3VsdHMgaW4gaW5jcmVhc2VkIENQVSB1c2FnZSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGluIE1RVFQgbWVzc2FnaW5nICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6Ik5ldHdvcmsgcG9ydCBvbiB3aGljaCBHUlBDIHNlcnZlciB3aWxsIGxpc3RlbiBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJNYXhpbXVtIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBmb3IgYSBrZWVwYWxpdmUgcGluZyByZXNwb25zZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLWtlZXAtYWxpdmUiOiJEdXJhdGlvbiBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIFJQQyBjYWxsLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXhpbXVtIG51bWJlciBvZiBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB0aGF0IHRoZSBzZXJ2ZXIgY2FuIHNlbmQgd2l0aG91dCByZWNlaXZpbmcgYW55IGRhdGEgYmVmb3JlIGl0IGNvbnNpZGVycyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgYmVpbmcgc2VudCBvciByZWNlaXZlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IkFsbG93IHNlcnZlciB0byBrZWVwIHRoZSBHUlBDIGNvbm5lY3Rpb24gYWxpdmUgZXZlbiB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgUlBDIGNhbGxzLiJ9fSxXbz17ImFkZC1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB0b2V2b2VnZW4iLCJjb25uZWN0b3ItYWRkIjoiTmlldXdlIGNvbm5lY3RvciB0b2V2b2VnZW4iLCJjb25uZWN0b3ItZW5hYmxlZCI6IkNvbm5lY3RvciBpbnNjaGFrZWxlbiIsImNvbm5lY3Rvci1uYW1lIjoiTmFhbSB2YW4gZGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJEZSBuYWFtIHZhbiBkZSBjb25uZWN0b3IgaXMgdmVyZWlzdC4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cGUgYWFuc2x1aXRpbmciLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkhldCB0eXBlIGNvbm5lY3RvciBpcyB2ZXJlaXN0LiIsY29ubmVjdG9yczoiQ29uZmlndXJhdGllIHZhbiBjb25uZWN0b3JlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkVlbiBuaWV1d2UgZ2F0ZXdheSBtYWtlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiV2VldCB1IHpla2VyIGRhdCB1IGVlbiBuaWV1d2UgZ2F0ZXdheSB3aWx0IG1ha2VuIG1ldCBkZSBuYWFtOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiQ29uZmlndXJhdGllIHZlcndpamRlcmVuIiwiZG93bmxvYWQtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBkb3dubG9hZGVuIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2UgbWV0IGRlemVsZmRlIG5hYW0gYmVzdGFhdCBhbC4iLCJnYXRld2F5LW5hbWUiOiJOYWFtIHZhbiBkZSBnYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiRGUgbmFhbSB2YW4gZGUgZ2F0ZXdheSBpcyB2ZXJlaXN0LiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5Y29uZmlndXJhdGllIHN1Y2Nlc3ZvbCBvcGdlc2xhZ2VuLiIsImpzb24tcGFyc2UiOiJPbmdlbGRpZ2UgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiSGV0IHZlbGQgbWFnIG5pZXQgbGVlZyB6aWpuLiIsIm5vLWNvbm5lY3RvcnMiOiJHZWVuIGNvbm5lY3RvcmVuIiwibm8tZGF0YSI6IkdlZW4gY29uZmlndXJhdGllcyIsIm5vLWdhdGV3YXktZm91bmQiOiJHZWVuIGdhdGV3YXkgZ2V2b25kZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6Iid7e2l0ZW19fScgbmlldCBnZXZvbmRlbi4iLCJwYXRoLWxvZ3MiOiJQYWQgbmFhciBsb2diZXN0YW5kZW4iLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYWQgaXMgdmVyZWlzdC4iLHJlbW90ZToiQ29uZmlndXJhdGllIG9wIGFmc3RhbmQiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJlZ2lzdHJhdGllIG5pdmVhdSIsInJlbW92ZS1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB2ZXJ3aWpkZXJlbiIsInNhdmUtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBvcHNsYWFuIiwic2VjdXJpdHktdHlwZSI6IlNvb3J0IGJldmVpbGlnaW5nIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9lZ2FuZyB0b3QgdG9rZW4iLHRsczoiVExTIChUTFMpIn0sc3RvcmFnZToiT3BzbGFnIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSBhYW50YWwgcmVjb3JkcyBpbiBiZXN0YW5kIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbWFhbCBhYW50YWwgYmVzdGFuZGVuIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBhYW50YWwgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtbWVyIGlzIHZlcmVpc3QuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gYWFudGFsIHJlY29yZHMgaW4gb3BzbGFnIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIGFhbnRhbCByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbWFsZSByZWNvcmRzIHppam4gdmVyZWlzdC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1heGltYWxlIHBha2tldGdyb290dGUgdm9vciBldmVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIGFhbnRhbCBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1tZXIgaXMgbmlldCBnZWxkaWcuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJEZSBtYXhpbWFsZSBwYWtrZXRncm9vdHRlIHZhbiBoZXQgZXZlbnQgaXMgdmVyZWlzdC4iLCJzdG9yYWdlLXBhdGgiOiJPcHNsYWcgcGFkIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiT3BzbGFncGFkIGlzIHZlcmVpc3QuIiwic3RvcmFnZS10eXBlIjoiVHlwZSBvcHNsYWciLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik9wc2xhZyB2YW4gYmVzdGFuZGVuIiwibWVtb3J5LXN0b3JhZ2UiOiJHZWhldWdlbiBvcHNsYWcifSx0aGluZ3Nib2FyZDoiRGluZ2VuIEJvcmQiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQtZ2FzdGhlZXIiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiU2VydmVyIGhvc3QgaXMgdmVyZWlzdC4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmQtcG9vcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkhldCBtYXhpbWFsZSBwb29ydG51bW1lciBpcyA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6IkhldCBtaW5pbWFsZSBwb29ydG51bW1lciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvb3J0IGlzIG5pZXQgZ2VsZGlnLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb29ydCBpcyB2ZXJlaXN0LiIsdGlkeToiT3JkZWxpamsiLCJ0aWR5LXRpcCI6Ik9wZ2VydWltZGUgY29uZmlndXJhdGllIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmF0aWUgdmFuIGNvbm5lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhZCBuYWFyIENBLWNlcnRpZmljYWF0IG9wIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYWQgbmFhciBjbGllbnRjZXJ0aWZpY2FhdCBvcCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYWQgbmFhciBwcml2w6lzbGV1dGVsIG9wIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlZvbGxlZGlnIHNjaGVybSBpbi0gZW4gdWl0c2NoYWtlbGVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aWUgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQ29uZmlndXJhdGllIEpTT04gdG9ldm9lZ2VuL2JpandlcmtlbiJ9LGpvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2rEmSIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3dlIHrFgsSFY3plIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJXxYLEhWN6IHrFgsSFY3plIiwiY29ubmVjdG9yLW5hbWUiOiJOYXp3YSB6xYLEhWN6YSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTmF6d2EgesWCxIVjemEgamVzdCB3eW1hZ2FuYS4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cCB6xYLEhWN6YSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiVHlwIHrFgsSFY3phIGplc3Qgd3ltYWdhbnkuIixjb25uZWN0b3JzOiJLb25maWd1cmFjamEgesWCxIVjenkiLCJjb25uZWN0b3JzLWNvbmZpZyI6IkNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOYW1lIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoiVHlwZSIsImNvbm5lY3RvcnMtdGFibGUtc3RhdHVzIjoiU3RhdHVzIiwiY29ubmVjdG9ycy10YWJsZS1hY3Rpb25zIjoiQWN0aW9ucyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiS2V5IiwiY29ubmVjdG9ycy10YWJsZS1jbGFzcyI6IkNsYXNzIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXN1bHQiLCJycGMtY29tbWFuZC1lZGl0LXBhcmFtcyI6IkVkaXQgcGFyYW1ldGVycyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkdlbmVyYWwgQ29uZmlndXJhdGlvbiIsImRvY2tlci1sYWJlbCI6IkluIG9yZGVyIHRvIHJ1biBUaGluZ3NCb2FyZCBJb1QgZ2F0ZXdheSBpbiBkb2NrZXIgd2l0aCBjcmVkZW50aWFscyBmb3IgdGhpcyBkZXZpY2UgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcy4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJVdHfDs3J6IG5vd3kgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQ3p5IG5hIHBld25vIGNoY2VzeiB1dHdvcnp5xIcgbm93eSBnYXRld2F5IG8gbmF6d2llOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IlVzdcWEIGtvbmZpZ3VyYWNqxJkiLCJkb3dubG9hZC10aXAiOiJQb2JpZXJ6IHBsaWsga29uZmlndXJhY3lqbnkiLCJkcm9wLWZpbGUiOiJEcm9wIGZpbGUgaGVyZSBvciIsZ2F0ZXdheToiV2VqxZtjaWUiLCJnYXRld2F5LWV4aXN0cyI6IlVyesSFZHplbmllIG8gdGVqIHNhbWVqIG5hendpZSBqdcW8IGlzdG5pZWplLiIsImdhdGV3YXktbmFtZSI6Ik5hendhIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOYXp3YSBHYXRld2F5J2EgamVzdCB3eW1hZ2FuYS4iLCJnYXRld2F5LXNhdmVkIjoiS29uZmlndXJhY2phIEdhdGV3ZXknYSB6b3N0YcWCYSBwb215xZtsbmllIHphcGlzYW5hLiIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCAoaW4gc2VjKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoiSW5hY3Rpdml0eSB0aW1lb3V0IChpbiBzZWMpIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgcmVxdWlyZWQiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgbm90IHZhbGlkIiwianNvbi1wYXJzZSI6Ik5pZXByYXdpZMWCb3d5IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmllIG1vxbxlIGJ5xIcgcHVzdGUuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDAiLCJuby1jb25uZWN0b3JzIjoiQnJhayB6xYLEhWN6eSIsIm5vLWRhdGEiOiJCcmFrIGtvbmZpZ3VyYWNqaSIsIm5vLWdhdGV3YXktZm91bmQiOiJOaWUgem5hbGV6aW9ubyBnYXRld2F5J2EuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pZSB6bmFsZXppb25vLiIsInBhdGgtbG9ncyI6IsWaY2llxbxrYSBkbyBwbGlrw7N3IGR6aWVubmlrYSIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IsWaY2llxbxrYSBqZXN0IHd5bWFnYW5hLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiS2VlcCBhbGl2ZSBwZXJtaXQgd2l0aG91dCBjYWxscyIscmVtb3RlOiJaZGFsbmEga29uZmlndXJhY2phIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJQb3ppb20gbG9nb3dhbmlhIiwicmVtb3ZlLWVudHJ5IjoiVXN1xYQga29uZmlndXJhY2rEmSIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLG90aGVyOiJPdGhlciIsInNhdmUtdGlwIjoiWmFwaXN6IHBsaWsga29uZmlndXJhY3lqbnkiLCJzZWN1cml0eS10eXBlIjoiUm9kemFqIHphYmV6cGllY3plbmlhIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9rZW4gZG9zdMSZcHUiLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTa8WCYWRvd2FuaWUiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYWtzeW1hbG5hIGxpY3piYSByZWtvcmTDs3cgdyBwbGlrdSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc3ltYWxuYSBsaWN6YmEgcGxpa8OzdyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWVyIGplc3Qgd3ltYWdhbnkuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyB3IHBhbWnEmWNpIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbWFsbmEgbGljemJhIHJla29yZMOzdyB0byAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWVyIGplc3QgbmllcHJhd2lkxYJvd3kuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiJSZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJNYXggcmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6Ik1heCBSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgiOiJEYXRhIGZvbGRlciBwYXRoIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiRGF0YSBmb2xkZXIgcGF0aCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCBqZXN0IHd5bWFnYW55LiIsInN0b3JhZ2UtcGF0aCI6IsWaY2llxbxrYSBwcnplY2hvd3l3YW5pYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IsWaY2llxbxrYSBkbyBwcnplY2hvd3l3YW5pYSBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCBza8WCYWRvd2FuaWEiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik5vxZtuaWsgZGFueWNoIiwibWVtb3J5LXN0b3JhZ2UiOiJQcnplY2hvd3l3YW5pZSBwYW1pxJljaSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiR29zcG9kYXJ6IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamVzdCB3eW1hZ2FueS4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4IjoiTWFrc3ltYWxueSBudW1lciBwb3J0dSB0byA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltYWxueSBudW1lciBwb3J0dSB0byAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBqZXN0IHd5bWFnYW55LiIsdGlkeToiVXBvcnrEhWRrdWoiLCJ0aWR5LXRpcCI6IlVwb3J6xIVka293YW5hIGtvbmZpZ3VyYWNqYSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiWsWCxIVjemUge3t0eXBlTmFtZX19IGtvbmZpZ3VyYWNqYSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoixZpjaWXFvGthIGRvIGNlcnR5ZmlrYXR1IENBIG5hIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiLFmmNpZcW8a2EgZG8gY2VydHlmaWthdHUga2xpZW50YSBuYSBnYXRld2F5IiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoiTWVzc2FnZXMgVFRMIGluIGRheXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLW1pbiI6Ik1pbiBudW1iZXIgaXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtcXR0LXFvcyI6IlFvUyIsIm1xdHQtcW9zLXJlcXVpcmVkIjoiUW9TIGlzIHJlcXVpcmVkIiwibXF0dC1xb3MtcmFuZ2UiOiJRb1MgdmFsdWVzIHJhbmdlIGlzIGZyb20gMCB0byAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLFmmNpZcW8a2EgZG8ga2x1Y3phIHByeXdhdG5lZ28gbmEgYnJhbWNlIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJQcnplxYLEhWN6IHRyeWIgcGXFgm5vZWtyYW5vd3kiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNqYSBKU09OKiIsInVwZGF0ZS1jb25maWciOiJEb2Rhai96YWt0dWFsaXp1aiBrb25maWd1cmFjasSZIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiJFbmFibGVzIHJlbW90ZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiRW5hYmxlcyByZW1vdGUgY29udHJvbCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIHRoZSBnYXRld2F5IGZyb20gdGhlIFJlbW90ZSBTaGVsbCB3aWRnZXQiLGhvc3Q6Ikhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgVGhpbmdzQm9hcmQgc2VydmVyIixwb3J0OiJQb3J0IG9mIE1RVFQgc2VydmljZSBvbiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHRva2VuOiJBY2Nlc3MgdG9rZW4gZm9yIHRoZSBnYXRld2F5IGZyb20gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2xpZW50LWlkIjoiTVFUVCBjbGllbnQgaWQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIix1c2VybmFtZToiTVFUVCB1c2VybmFtZSBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBhc3N3b3JkOiJNUVRUIHBhc3N3b3JkIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIsImNhLWNlcnQiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUiLCJkYXRlLWZvcm0iOiJEYXRlIGZvcm1hdCBpbiBsb2cgbWVzc2FnZSIsImRhdGEtZm9sZGVyIjoiUGF0aCB0byBmb2xkZXIsIHRoYXQgd2lsbCBjb250YWlucyBkYXRhIChSZWxhdGl2ZSBvciBBYnNvbHV0ZSkiLCJsb2ctZm9ybWF0IjoiTG9nIG1lc3NhZ2UgZm9ybWF0IiwicmVtb3RlLWxvZyI6IkVuYWJsZXMgcmVtb3RlIGxvZ2dpbmcgYW5kIGxvZ3MgcmVhZGluZyBmcm9tIHRoZSBnYXRld2F5IiwiYmFja3VwLWNvdW50IjoiSWYgYmFja3VwIGNvdW50IGlzID4gMCwgd2hlbiBhIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXAgY291bnQgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQiLHN0b3JhZ2U6IlByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gZm9yIHNhdmluZyBpbmNvbWluZyBkYXRhIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBwbGF0Zm9ybSIsIm1heC1maWxlLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBmaWxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiJNYXhpbXVtIGNvdW50IG9mIHJlY29yZHMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiBvbmUgZmlsZSIsInJlYWQtcmVjb3JkLWNvdW50IjoiQ291bnQgb2YgbWVzc2FnZXMgdG8gZ2V0IGZyb20gc3RvcmFnZSBhbmQgc2VuZCB0byBUaGluZ3NCb2FyZCIsIm1heC1yZWNvcmRzLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBkYXRhIGluIHN0b3JhZ2UgYmVmb3JlIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJ0dGwtY2hlY2staG91ciI6IkhvdyBvZnRlbiB3aWxsIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gZGF5cyB0aGF0IHN0b3JhZ2Ugd2lsbCBzYXZlIGRhdGEiLGNvbW1hbmRzOiJDb21tYW5kcyBmb3IgY29sbGVjdGluZyBhZGRpdGlvbmFsIHN0YXRpc3RpYyIsYXR0cmlidXRlOiJTdGF0aXN0aWMgdGVsZW1ldHJ5IGtleSIsdGltZW91dDoiVGltZW91dCBmb3IgY29tbWFuZCBleGVjdXRpbmciLGNvbW1hbmQ6IlRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLCB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciB0ZWxlbWV0cnkiLCJjaGVjay1kZXZpY2UtYWN0aXZpdHkiOiJFbmFibGVzIG1vbml0b3IgdGhlIGFjdGl2aXR5IG9mIGVhY2ggY29ubmVjdGVkIGRldmljZSIsImluYWN0aXZpdHktdGltZW91dCI6IlRpbWUgYWZ0ZXIgd2hvc2UgdGhlIGdhdGV3YXkgd2lsbCBkaXNjb25uZWN0IGRldmljZSIsImluYWN0aXZpdHktcGVyaW9kIjoiUGVyaW9kaWNpdHkgb2YgZGV2aWNlIGFjdGl2aXR5IGNoZWNrIiwibWluaW1hbC1wYWNrLWRlbGF5IjoiRGVsYXkgYmV0d2VlbiBzZW5kaW5nIHBhY2tzIG9mIG1lc3NhZ2VzIChEZWNyZWFzaW5nIHRoaXMgc2V0dGluZyByZXN1bHRzIGluIGluY3JlYXNlZCBDUFUgdXNhZ2UpIixxb3M6IlF1YWxpdHkgb2YgU2VydmljZSBpbiBNUVRUIG1lc3NhZ2luZyAoMCAtIGF0IG1vc3Qgb25jZSwgMSAtIGF0IGxlYXN0IG9uY2UpIiwic2VydmVyLXBvcnQiOiJOZXR3b3JrIHBvcnQgb24gd2hpY2ggR1JQQyBzZXJ2ZXIgd2lsbCBsaXN0ZW4gZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLiIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiTWF4aW11bSB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgZm9yIGEga2VlcGFsaXZlIHBpbmcgcmVzcG9uc2UgYmVmb3JlIGNvbnNpZGVyaW5nIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYXRpb24gYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBSUEMgY2FsbC4iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4aW11bSBudW1iZXIgb2Yga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgdGhhdCB0aGUgc2VydmVyIGNhbiBzZW5kIHdpdGhvdXQgcmVjZWl2aW5nIGFueSBkYXRhIGJlZm9yZSBpdCBjb25zaWRlcnMgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGJlaW5nIHNlbnQgb3IgcmVjZWl2ZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJBbGxvdyBzZXJ2ZXIgdG8ga2VlcCB0aGUgR1JQQyBjb25uZWN0aW9uIGFsaXZlIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIFJQQyBjYWxscy4ifX0sS289eyJhZGQtZW50cnkiOiJBZGljaW9uYXIgY29uZmlndXJhw6fDo28iLCJjb25uZWN0b3ItYWRkIjoiQWRpY2lvbmFyIG5vdm8gY29uZWN0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkhhYmlsaXRhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tZSBkbyBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTyBub21lIGRvIGNvbmVjdG9yIMOpIG9icmlnYXTDs3Jpby4iLCJjb25uZWN0b3ItdHlwZSI6IlRpcG8gZGUgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6Ik8gdGlwbyBkZSBjb25lY3RvciDDqSBvYnJpZ2F0w7NyaW8uIixjb25uZWN0b3JzOiJDb25maWd1cmHDp8OjbyBkZSBjb25lY3RvcmVzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JpYXIgdW0gbm92byBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJUZW0gY2VydGV6YSBkZSBxdWUgZGVzZWphIGNyaWFyIHVtIG5vdm8gZ2F0ZXdheSBjb20gbyBub21lOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiRXhjbHVpciBjb25maWd1cmHDp8OjbyIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGRlIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkrDoSBleGlzdGUgdW0gZGlzcG9zaXRpdm8gY29tIG8gbWVzbW8gbm9tZS4iLCJnYXRld2F5LW5hbWUiOiJOb21lIGRvIGdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJPIG5vbWUgZG8gZ2F0ZXdheSDDqSBvYnJpZ2F0w7NyaW8uIiwiZ2F0ZXdheS1zYXZlZCI6IkEgY29uZmlndXJhw6fDo28gZG8gZ2F0ZXdheSBmb2kgc2FsdmEgY29ycmV0YW1lbnRlLiIsImpzb24tcGFyc2UiOiJKU09OIGludsOhbGlkby4iLCJqc29uLXJlcXVpcmVkIjoiTyBjYW1wbyBuw6NvIHBvZGUgZXN0YXIgZW0gYnJhbmNvLiIsIm5vLWNvbm5lY3RvcnMiOiJTZW0gY29uZWN0b3JlcyIsIm5vLWRhdGEiOiJTZW0gY29uZmlndXJhw6fDtWVzIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5lbmh1bSBnYXRld2F5IGVuY29udHJhZG8uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG7Do28gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJDYW1pbmhvIHBhcmEgYXJxdWl2b3MgZGUgbG9nIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiTyBjYW1pbmhvIMOpIG9icmlnYXTDs3JpbyIscmVtb3RlOiJDb25maWd1cmHDp8OjbyByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik7DrXZlbCBkZSByZWdpc3RybyBlbSBsb2ciLCJyZW1vdmUtZW50cnkiOiJSZW1vdmVyIGNvbmZpZ3VyYcOnw6NvIiwic2F2ZS10aXAiOiJTYWx2YXIgYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyIsInNlY3VyaXR5LXR5cGUiOiJUaXBvIGRlIHNlZ3VyYW7Dp2EiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkZSBBY2Vzc28iLHRsczoiVExTIn0sc3RvcmFnZToiQXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJxdWl2byIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTsO6bWVybyBtw6F4aW1vIGRlIGFycXVpdm9zIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gw6kgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik8gbsO6bWVybyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gZGUgcmVnaXN0cm9zIMOpIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTyBuw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIMOpIG9icmlnYXTDs3Jpby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIMOpIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik8gbsO6bWVybyBuw6NvIMOpIHbDoWxpZG8uIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJPIHRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1wYXRoIjoiQ2FtaW5obyBkZSBhcm1hemVuYW1lbnRvIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiTyBjYW1pbmhvIGRlIGFybWF6ZW5hbWVudG8gw6kgb2JyaWdhdMOzcmlvLiIsInN0b3JhZ2UtdHlwZSI6IlRpcG8gZGUgYXJtYXplbmFtZW50byIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQXJtYXplbmFtZW50byBkZSBhcnF1aXZvIiwibWVtb3J5LXN0b3JhZ2UiOiJBcm1hemVuYW1lbnRvIGRlIG1lbcOzcmlhIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikhvc3QgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiTyBob3N0IMOpIG9icmlnYXTDs3Jpby4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydGEgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik8gbsO6bWVybyBtw6F4aW1vIGRlIHBvcnRhcyDDqSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIGRlIHBvcnRhcyDDqSAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IkEgcG9ydGEgbsOjbyDDqSB2w6FsaWRhLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJBIHBvcnRhIMOpIG9icmlnYXTDs3JpYS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IkNvbmZpZyBUaWR5IEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmHDp8OjbyBkbyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IkNhbWluaG8gcGFyYSBjZXJ0aWZpY2FkbyBkZSBBdXRvcmlkYWRlIGRlIENlcnRpZmljYcOnw6NvIG5vIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDYW1pbmhvIHBhcmEgY2VydGlmaWNhZG8gZGUgY2xpZW50ZSBubyBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJDYW1pbmhvIHBhcmEgY2hhdmUgcHJpdmFkYSBubyBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJBbHRlcm5hciB0ZWxhIGludGVpcmEiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYcOnw6NvIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkaWNpb25hci9hdHVhbGl6YXIgY29uZmlndXJhw6fDo28gZGUgSlNPTiJ9LCRvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2lqbyIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3YgcHJpa2xqdcSNZWsiLCJjb25uZWN0b3ItZW5hYmxlZCI6Ik9tb2dvxI1pIHByaWtsanXEjWVrIiwiY29ubmVjdG9yLW5hbWUiOiJJbWUgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkltZSBwcmlrbGp1xI1rYSBqZSBvYnZlem5vLiIsImNvbm5lY3Rvci10eXBlIjoiVnJzdGEgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IlphaHRldmEgc2UgdnJzdGEgcHJpa2xqdcSNa2EuIixjb25uZWN0b3JzOiJLb25maWd1cmFjaWphIHByaWtsanXEjWtvdiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlVzdHZhcmkgbm92IHByZWhvZCIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQWxpIHN0ZSBwcmVwcmnEjWFuaSwgZGEgxb5lbGl0ZSB1c3R2YXJpdGkgbm92IHByZWhvZCB6IGltZW5vbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6Ikl6YnJpxaFpIGtvbmZpZ3VyYWNpam8iLCJkb3dubG9hZC10aXAiOiJQcmVub3Mga29uZmlndXJhY2lqc2tlIGRhdG90ZWtlIixnYXRld2F5OiJQcmVob2QiLCJnYXRld2F5LWV4aXN0cyI6Ik5hcHJhdmEgeiBpc3RpbSBpbWVub20gxb5lIG9ic3RhamEuIiwiZ2F0ZXdheS1uYW1lIjoiSW1lIHByZWhvZGEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJJbWUgcHJlaG9kYSBqZSBvYnZlem5vLiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjaWphIHByZWhvZGEgamUgdXNwZcWhbm8gc2hyYW5qZW5hLiIsImpzb24tcGFyc2UiOiJOZXZlbGphdmVuIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGplIG5lIHNtZSBiaXRpIHByYXpuby4iLCJuby1jb25uZWN0b3JzIjoiTmkgcHJpa2xqdcSNa292Iiwibm8tZGF0YSI6IkJyZXoga29uZmlndXJhY2lqIiwibm8tZ2F0ZXdheS1mb3VuZCI6IlByZWhvZCBuaSBuYWpkZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pIG1vZ2/EjWUgbmFqdGkuIiwicGF0aC1sb2dzIjoiUG90IGRvIGRuZXZuacWha2loIGRhdG90ZWsiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQb3QgamUgb2J2ZXpuYS4iLHJlbW90ZToiT2RkYWxqZW5hIGtvbmZpZ3VyYWNpamEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJhdmVuIGJlbGXFvmVuamEiLCJyZW1vdmUtZW50cnkiOiJPZHN0cmFuaSBrb25maWd1cmFjaWpvIiwic2F2ZS10aXAiOiJTaHJhbmkga29uZmlndXJhY2lqc2tvIGRhdG90ZWtvIiwic2VjdXJpdHktdHlwZSI6IlZyc3RhIHphxaHEjWl0ZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkRvc3RvcG5pIMW+ZXRvbiIsdGxzOiJUTFMifSxzdG9yYWdlOiJTaHJhbWJhIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgZGF0b3Rla2kiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik5hanZlxI1qZSDFoXRldmlsbyBkYXRvdGVrIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLFoHRldmlsa2EgamUgb2J2ZXpuYS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgcG9tbmlsbmlrdSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyB6YXBpc292IGplIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoixaB0ZXZpbGthIG5pIHZlbGphdm5hLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJaYWh0ZXZhbiBqZSBuYWp2ZcSNIHphcGlzb3YuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJOYWp2ZcSNamEgdmVsaWtvc3QgcGFrZXRhIGRvZ29ka292Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJaYWh0ZXZhbmEgamUgbmFqdmXEjWphIHZlbGlrb3N0IHBha2V0YSBkb2dvZGtvdi4iLCJzdG9yYWdlLXBhdGgiOiJQb3QgcG9tbmlsbmlrYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlphaHRldmFuYSBqZSBwb3QgZG8gcG9tbmlsbmlrYS4iLCJzdG9yYWdlLXR5cGUiOiJWcnN0YSBwb21uaWxuaWthIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJTaHJhbWJhIGRhdG90ZWsiLCJtZW1vcnktc3RvcmFnZSI6IlNwb21pbiBwb21uaWxuaWthIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikdvc3RpdGVsaiBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJQb3RyZWJlbiBqZSBnb3N0aXRlbGouIiwidGhpbmdzYm9hcmQtcG9ydCI6IlZyYXRhIFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJOYWp2ZcSNamEgxaF0ZXZpbGthIHZyYXQgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJOYWptYW5qxaFhIMWhdGV2aWxrYSB2cmF0IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiVnJhdGEgbmlzbyB2ZWxqYXZuYS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG90cmVibmEgc28gdnJhdGEuIix0aWR5OiJVcmVqZW5vIiwidGlkeS10aXAiOiJVcmVqZW5hIGtvbmZpZ3VyYWNpamEgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IktvbmZpZ3VyYWNpamEga29uZWt0b3JqYSB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBvdCBkbyBwb3RyZGlsYSBDQSBuYSBwcmVob2R1IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUG90IGRvIHBvdHJkaWxhIHN0cmFua2UgbmEgcHJlaG9kdSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUG90IGRvIHphc2VibmVnYSBrbGp1xI1hIG5hIHByZWhvZHUiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlByZWtsb3AgbmEgY2Vsb3phc2xvbnNraSBuYcSNaW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNpamEgSlNPTiAqIiwidXBkYXRlLWNvbmZpZyI6IkRvZGFqIC8gcG9zb2RvYmkga29uZmlndXJhY2lqbyBKU09OIn0sWW89eyJhZGQtZW50cnkiOiJZYXDEsWxhbmTEsXJtYSBla2xlIiwiY29ubmVjdG9yLWFkZCI6IlllbmkgYmHEn2xhecSxY8SxIGVrbGUiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkJhxJ9sYXnEsWPEsXnEsSBldGtpbmxlxZ90aXIiLCJjb25uZWN0b3ItbmFtZSI6IkJhxJ9sYXnEsWPEsSBhZMSxIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJCYcSfbGF5xLFjxLEgYWTEsSBnZXJla2xpLiIsImNvbm5lY3Rvci10eXBlIjoiQmHEn2xhecSxY8SxIHRpcGkiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkJhxJ9sYXnEsWPEsSB0w7xyw7wgZ2VyZWtsaS4iLGNvbm5lY3RvcnM6IkJhxJ9sYXnEsWPEsWxhcsSxbiB5YXDEsWxhbmTEsXJtYXPEsSIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVyIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiIne3tnYXRld2F5TmFtZX19JyBhZMSxbmRhIHllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo/IixkZWxldGU6IllhcMSxbGFuZMSxcm1hecSxIHNpbCIsImRvd25sb2FkLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGluZGlyaW4iLGdhdGV3YXk6IkHEnyBnZcOnaWRpIiwiZ2F0ZXdheS1leGlzdHMiOiJBeW7EsSBhZGEgc2FoaXAgY2loYXogemF0ZW4gdmFyLiIsImdhdGV3YXktbmFtZSI6IkHEnyBnZcOnaWRpIGFkxLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJBxJ8gZ2XDp2lkaSBhZMSxIGdlcmVrbGkuIiwiZ2F0ZXdheS1zYXZlZCI6IkHEnyBnZcOnaWRpIHlhcMSxbGFuZMSxcm1hc8SxIGJhxZ9hcsSxeWxhIGtheWRlZGlsZGkuIiwianNvbi1wYXJzZSI6Ikdlw6dlcmxpIGJpciBKU09OIGRlxJ9pbC4iLCJqc29uLXJlcXVpcmVkIjoiQWxhbiBib8WfIG9sYW1hei4iLCJuby1jb25uZWN0b3JzIjoiQmHEn2xhecSxY8SxIHlvayIsIm5vLWRhdGEiOiJZYXDEsWxhbmTEsXJtYSB5b2siLCJuby1nYXRld2F5LWZvdW5kIjoiQcSfIGdlw6dpZGkgYnVsdW5hbWFkxLEuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIGJ1bHVuYW1hZMSxLiIsInBhdGgtbG9ncyI6IkxvZyBkb3N5YWxhcsSxIHlvbHUiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJMb2cgZG9zeWFsYXLEsSBkaXppbmkgZ2VyZWtsaS4iLHJlbW90ZToiVXpha3RhbiB5YXDEsWxhbmTEsXJtYSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nbGFtYSBzZXZpeWVzaSIsInJlbW92ZS1lbnRyeSI6IllhcMSxbGFuZMSxcm1hecSxIGthbGTEsXIiLCJzYXZlLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGtheWRldCIsInNlY3VyaXR5LXR5cGUiOiJHw7x2ZW5saWsgdMO8csO8Iiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiQWNjZXNzIFRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IkRlcG9sYW1hIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiRG9zeWFkYWtpIG1ha3NpbXVtIGthecSxdCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc2ltdW0gZG9zeWEgc2F5xLFzxLEiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIHNhecSxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJTYXnEsSBnZcOnZXJsaSBkZcSfaWwuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJTYXnEsSBnZXJla2xpLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJEZXBvZGFraSBtYWtzaW11bSBrYXnEsXQiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0ga2F5xLF0IHNhecSxc8SxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlNhecSxIGdlw6dlcmxpIGRlxJ9pbC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWFrc2ltdW0ga2F5xLF0IGdlcmVrbGkuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYWtzaW11bSBldGtpbmxpayBwYWtldGkgYm95dXR1Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW11bSBzYXnEsSAxJ2Rpci4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiU2F5xLEgZ2XDp2VybGkgZGXEn2lsLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrc2ltdW0gZXRraW5saWsgcGFrZXRpIGJveXV0dSBnZXJla2xpLiIsInN0b3JhZ2UtcGF0aCI6IkRlcG9sYW1hIHlvbHUiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJEZXBvbGFtYSB5b2x1IGdlcmVrbGkuIiwic3RvcmFnZS10eXBlIjoiRGVwb2xhbWEgdMO8csO8Iiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJEb3N5YSBkZXBvbGFtYSIsIm1lbW9yeS1zdG9yYWdlIjoiQmVsbGVrIGRlcG9sYW1hIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJkIGhvc3QiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiSG9zdCBnZXJla2xpLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzaW11bSBwb3J0IG51bWFyYXPEsSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltdW0gcG9ydCBudW1hcmFzxLEgMSdkaXIuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBnZcOnZXJsaSBkZcSfaWwuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgZ2VyZWtsaS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IlRpZHkgY29uZmlnIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25uZWN0b3Ige3t0eXBlTmFtZX19IGNvbmZpZ3VyYXRpb24iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgb24gZ2F0ZXdheSIsInRvZ2dsZS1mdWxsc2NyZWVuIjoiVG9nZ2xlIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWRkL3VwZGF0ZSBjb25maWd1cmF0aW9uIEpTT04ifSxRbz17ImFkZC1lbnRyeSI6Iua3u+WKoOmFjee9riIsYWR2YW5jZWQ6IumrmOe6pyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IuajgOafpeiuvuWkh+a0u+WKqCIsY29tbWFuZDoiRG9ja2Vy5ZG95LukIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlcuWRveS7pOW3suWkjeWItuWIsOWJqui0tOadvyIsY29uZmlndXJhdGlvbjoi6YWN572uIiwiY29ubmVjdG9yLWFkZCI6Iua3u+WKoOi/nuaOpeWZqCIsImNvbm5lY3Rvci1lbmFibGVkIjoi5ZCv55So6L+e5o6l5ZmoIiwiY29ubmVjdG9yLW5hbWUiOiLov57mjqXlmajlkI3np7AiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Iui/nuaOpeWZqOWQjeensOW/heWhq+OAgiIsImNvbm5lY3Rvci10eXBlIjoi6L+e5o6l5Zmo57G75Z6LIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiLov57mjqXlmajnsbvlnovlv4XloavjgIIiLGNvbm5lY3RvcnM6Iui/nuaOpeWZqOmFjee9riIsImNvbm5lY3RvcnMtY29uZmlnIjoi6L+e5o6l5Zmo6YWN572uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoi5bey5ZCv55SoIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi5ZCN56ewIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoi57G75Z6LIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiLnirbmgIEiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiLmk43kvZwiLCJjb25uZWN0b3JzLXRhYmxlLWtleSI6IumUriIsImNvbm5lY3RvcnMtdGFibGUtY2xhc3MiOiLnsbsiLCJycGMtY29tbWFuZC1zZW5kIjoi5Y+R6YCBIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi57uT5p6cIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLnvJbovpHlj4LmlbAiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLpgJrnlKjphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLliJvlu7rnvZHlhbMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuehruWumuimgeWIm+W7uuWQjeS4uiAne3tnYXRld2F5TmFtZX19JyDnmoTmlrDnvZHlhbPvvJ8iLCJjcmVhdGVkLXRpbWUiOiLliJvlu7rml7bpl7QiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoi6YWN572u5bCG6KKr5Yig6ZmkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiLlj6rmnInlr7nnvZHlhbPov5vooYzniannkIborr/pl67ml7bvvIzmiY3mnInlj6/og73lhbPpl63ov5znqIvphY3nva7jgILmiYDmnInlhYjliY3nmoTphY3nva7pg73lsIbooqvliKDpmaTjgII8YnI+PGJyPlxu6KaB5YWz6Zet6YWN572u77yM6K+35Zyo5LiL6Z2i6L6T5YWl572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0Ijoi572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoi572R5YWz5ZCN56ew5piv5b+F6ZyA55qEIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLlhbPpl60iLGRlbGV0ZToi5Yig6Zmk6YWN572uIiwiZG93bmxvYWQtdGlwIjoi5LiL6L296YWN572uIiwiZHJvcC1maWxlIjoi5bCG5paH5Lu25ouW5pS+5Yiw5q2k5aSE5oiWIixnYXRld2F5OiLnvZHlhbMiLCJnYXRld2F5LWV4aXN0cyI6IuWQjOWQjeiuvuWkh+W3suWtmOWcqOOAgiIsImdhdGV3YXktbmFtZSI6Iue9keWFs+WQjeensCIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Iue9keWFs+WQjeensOW/heWhq+OAgiIsImdhdGV3YXktc2F2ZWQiOiLlt7LmiJDlip/kv53lrZjnvZHlhbPphY3nva7jgIIiLGdycGM6IkdSUEMiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuS/neaMgei/nuaOpei2heaXtu+8iOavq+enku+8iSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoi6ZyA6KaB5L+d5oyB6L+e5o6l6LaF5pe2IiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi5L+d5oyB6L+e5o6l6LaF5pe25LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXBhdHRlcm4iOiLkv53mjIHov57mjqXotoXml7bml6DmlYgiLCJncnBjLWtlZXAtYWxpdmUiOiLkv53mjIHov57mjqXvvIjmr6vnp5LvvIkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLpnIDopoHkv53mjIHov57mjqUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoi5L+d5oyB6L+e5o6l5LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoi5L+d5oyB6L+e5o6l5peg5pWIIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi5pyA5bCPUGluZ+mXtOmalO+8iOavq+enku+8iSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6IumcgOimgeacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoi5pyA5bCPUGluZ+mXtOmalOS4jeiDveWwj+S6jjEiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVybiI6IuacgOWwj1Bpbmfpl7TpmpTml6DmlYgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6IuaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpTvvIjmr6vnp5LvvIkiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5LiN6IO95bCP5LqOMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5peg5pWIIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbAiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsOS4jeiDveWwj+S6jjEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6IuaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbDml6DmlYgiLCJpbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzIjoi5LiN5rS76LeD5qOA5p+l5pyf77yI56eS77yJIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IumcgOimgeS4jea0u+i3g+ajgOafpeacnyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoi5LiN5rS76LeD5qOA5p+l5pyf5LiN6IO95bCP5LqOMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+ajgOafpeacn+aXoOaViCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi5LiN5rS76LeD6LaF5pe277yI56eS77yJIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiLpnIDopoHkuI3mtLvot4PotoXml7YiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiLkuI3mtLvot4PotoXml7bkuI3og73lsI/kuo4xIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+i2heaXtuaXoOaViCIsImpzb24tcGFyc2UiOiLml6DmlYjnmoRKU09O44CCIiwianNvbi1yZXF1aXJlZCI6IuWtl+auteS4jeiDveS4uuepuuOAgiIsbG9nczp7bG9nczoi5pel5b+XIixkYXlzOiLlpKkiLGhvdXJzOiLlsI/ml7YiLG1pbnV0ZXM6IuWIhumSnyIsc2Vjb25kczoi56eSIiwiZGF0ZS1mb3JtYXQiOiLml6XmnJ/moLzlvI8iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IumcgOimgeaXpeacn+agvOW8jyIsImxvZy1mb3JtYXQiOiLml6Xlv5fmoLzlvI8iLCJsb2ctdHlwZSI6IuaXpeW/l+exu+WeiyIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiLpnIDopoHml6Xlv5fmoLzlvI8iLHJlbW90ZToi6L+c56iL5pel5b+X6K6w5b2VIiwicmVtb3RlLWxvZ3MiOiLov5znqIvml6Xlv5ciLGxvY2FsOiLmnKzlnLDml6Xlv5forrDlvZUiLGxldmVsOiLml6Xlv5fnuqfliKsiLCJmaWxlLXBhdGgiOiLmlofku7bot6/lvoQiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHmlofku7bot6/lvoQiLCJzYXZpbmctcGVyaW9kIjoi5pel5b+X5L+d5a2Y5pyf6ZmQIiwic2F2aW5nLXBlcmlvZC1taW4iOiLml6Xlv5fkv53lrZjmnJ/pmZDkuI3og73lsI/kuo4xIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IumcgOimgeaXpeW/l+S/neWtmOacn+mZkCIsImJhY2t1cC1jb3VudCI6IuWkh+S7veaVsOmHjyIsImJhY2t1cC1jb3VudC1taW4iOiLlpIfku73mlbDph4/kuI3og73lsI/kuo4xIiwiYmFja3VwLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB5aSH5Lu95pWw6YePIn0sIm1pbi1wYWNrLXNlbmQtZGVsYXkiOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/vvIjmr6vnp5LvvIkiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoi5pyA5bCP5YyF5Y+R6YCB5bu26L+f5piv5b+F6ZyA55qEIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/kuI3og73lsI/kuo4wIiwibm8tY29ubmVjdG9ycyI6IuaXoOi/nuaOpeWZqCIsIm5vLWRhdGEiOiLmsqHmnInphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw572R5YWz44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IuacquaJvuWIsCAne3tpdGVtfX0nIOOAgiIsInBhdGgtbG9ncyI6IuaXpeW/l+aWh+S7tueahOi3r+W+hCIsInBhdGgtbG9ncy1yZXF1aXJlZCI6Iui3r+W+hOaYr+W/hemcgOeahOOAgiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5L+d5oyB6L+e5o6l6K645Y+v77yM5peg6ZyA5ZON5bqUIixyZW1vdGU6Iui/nOeoi+mFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel5b+X6K6w5b2V57qn5YirIiwicmVtb3ZlLWVudHJ5Ijoi5Yig6Zmk6YWN572uIiwicmVtb3RlLXNoZWxsIjoi6L+c56iLU2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Iui/nOeoi+mFjee9riIsb3RoZXI6IuWFtuS7liIsInNhdmUtdGlwIjoi5L+d5a2Y6YWN572uIiwic2VjdXJpdHktdHlwZSI6IuWuieWFqOexu+WeiyIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Iuiuv+mXruS7pOeJjCIsInVzZXJuYW1lLXBhc3N3b3JkIjoi55So5oi35ZCN5ZKM5a+G56CBIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDorr/pl67ku6TniYwiLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyDnp4HpkqUifSwic2VydmVyLXBvcnQiOiLmnI3liqHlmajnq6/lj6MiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoi57uf6K6h5L+h5oGvIixzdGF0aXN0aWNzOiLnu5/orqHkv6Hmga8iLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLml6Dlj6/nlKjnu5/orqHkv6Hmga8iLGNvbW1hbmRzOiLlkb3ku6QiLCJzZW5kLXBlcmlvZCI6Iue7n+iuoeS/oeaBr+WPkemAgeWRqOacn++8iOenku+8iSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5piv5b+F6ZyA55qEIiwic2VuZC1wZXJpb2QtbWluIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5LiN6IO95bCP5LqONjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5peg5pWIIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u77yI56eS77yJIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u5piv5b+F6ZyA55qEIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IuajgOafpei/nuaOpeWZqOmFjee9ruS4jeiDveWwj+S6jjEiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVybiI6IuajgOafpei/nuaOpeWZqOmFjee9ruaXoOaViCIsYWRkOiLmt7vliqDlkb3ku6QiLHRpbWVvdXQ6Iui2heaXtuaXtumXtCIsInRpbWVvdXQtbXMiOiLotoXml7bml7bpl7TvvIjmr6vnp5LvvIkiLCJ0aW1lb3V0LXJlcXVpcmVkIjoi6LaF5pe25pe26Ze05piv5b+F6ZyA55qEIiwidGltZW91dC1taW4iOiLotoXml7bml7bpl7TkuI3og73lsI/kuo4xIiwidGltZW91dC1wYXR0ZXJuIjoi6LaF5pe25pe26Ze05peg5pWIIiwiYXR0cmlidXRlLW5hbWUiOiLlsZ7mgKflkI3np7AiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IuWxnuaAp+WQjeensOaYr+W/hemcgOeahCIsY29tbWFuZDoi5ZG95LukIiwiY29tbWFuZC1yZXF1aXJlZCI6IuWRveS7pOaYr+W/hemcgOeahCIsImNvbW1hbmQtcGF0dGVybiI6IuWRveS7pOaXoOaViCIscmVtb3ZlOiLliKDpmaTlkb3ku6QifSxzdG9yYWdlOiLlrZjlgqgiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiLmlofku7bkuK3nmoTmnIDlpKforrDlvZXmlbAiLCJzdG9yYWdlLW1heC1maWxlcyI6IuacgOWkp+aWh+S7tuaVsCIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLmlbDlrZfmmK/lv4XpnIDnmoTjgIIiLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoi5a2Y5YKo5Lit55qE5pyA5aSn6K6w5b2V5pWwIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6IuacgOWkp+iusOW9lemhueW/heWhq+OAgiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6IuacgOWwj+iusOW9leaVsOS4ujHjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiLmlbDlrZfkuI3lkIjms5XjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB6K+75Y+W6K6w5b2V5pWw44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTmnIDlpKfor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6IuaVsOWtl+S4jeWQiOazleOAgiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi5pyA5aSn6K+75Y+W6K6w5b2V5pWw5b+F6ZyA44CCIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoi5pWw5o2u5paH5Lu25aS56Lev5b6EIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoi6ZyA6KaB5pWw5o2u5paH5Lu25aS56Lev5b6E44CCIiwic3RvcmFnZS1wYWNrLXNpemUiOiLmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi5pyA5aSn5LqL5Lu25YyF5aSn5bCP5b+F5aGr44CCIiwic3RvcmFnZS1wYXRoIjoi5a2Y5YKo6Lev5b6EIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoi5a2Y5YKo6Lev5b6E5b+F5aGr44CCIiwic3RvcmFnZS10eXBlIjoi5a2Y5YKo57G75Z6LIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiLmlofku7blrZjlgqgiLCJtZW1vcnktc3RvcmFnZSI6IuWGheWtmOWtmOWCqCIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IuW4uOinhCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZOS4u+acuiIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiLkuLvmnLrlv4XloavjgIIiLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmTnq6/lj6MiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IuacgOWkp+err+WPo+WPt+S4ujY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/nq6/lj6Plj7fkuLox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi56uv5Y+j5peg5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Iuerr+WPo+W/heWhq+OAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6L+e5o6l5ZmoIHt7dHlwZU5hbWV9fSDphY3nva4iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6Iue9keWFs+S4ikNB6K+B5Lmm55qE6Lev5b6EIiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoi572R5YWz5LiK5a6i5oi356uv6K+B5Lmm55qE6Lev5b6EIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi5raI5oGvVFRM5qOA5p+l5bCP5pe25pWwIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi6ZyA6KaB5o+Q5L6b5raI5oGvVFRM5qOA5p+l5bCP5pe25pWw44CCIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoi5raI5oGvVFRM5aSp5pWwIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiLpnIDopoHmj5Dkvpvmtojmga9UVEzlpKnmlbDjgIIiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiLpnIDopoHmj5DkvptRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IlFvU+WAvOeahOiMg+WbtOaYr+S7jjDliLAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLnvZHlhbPkuIrnp4HpkqXnmoTot6/lvoQiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IuWIh+aNouWFqOWxjyIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoi6YWN572uSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoi5re75YqgL+abtOaWsOmFjee9rkpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvphY3nva7lkoznrqHnkIYiLCJyZW1vdGUtc2hlbGwiOiLpgJrov4fov5znqItTaGVsbOWwj+mDqOS7tuWQr+eUqOWvuee9keWFs+aTjeS9nOezu+e7n+eahOi/nOeoi+aOp+WItiIsaG9zdDoiVGhpbmdzQm9hcmQg5Li75py65ZCN5oiWSVDlnLDlnYAiLHBvcnQ6IlRoaW5nc0JvYXJkIE1RVFTmnI3liqHnq6/lj6MiLHRva2VuOiJUaGluZ3NCb2FyZCDnvZHlhbPorr/pl67ku6TniYwiLCJjbGllbnQtaWQiOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU5a6i5oi356uvSUQiLHVzZXJuYW1lOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU55So5oi35ZCNIixwYXNzd29yZDoiVGhpbmdzQm9hcmQg572R5YWzTVFUVOWvhueggSIsImNhLWNlcnQiOiJDQeivgeS5puaWh+S7tueahOi3r+W+hCIsImRhdGUtZm9ybSI6IuaXpeW/l+a2iOaBr+S4reeahOaXpeacn+agvOW8jyIsImRhdGEtZm9sZGVyIjoi5YyF5ZCr5pWw5o2u55qE5paH5Lu25aS555qE6Lev5b6E77yI55u45a+55oiW57ud5a+56Lev5b6E77yJIiwibG9nLWZvcm1hdCI6IuaXpeW/l+a2iOaBr+agvOW8jyIsInJlbW90ZS1sb2ciOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvml6Xlv5forrDlvZXlkozml6Xlv5for7vlj5YiLCJiYWNrdXAtY291bnQiOiLlpoLmnpzlpIfku73orqHmlbDlpKfkuo4w77yM5YiZ5Zyo5omn6KGM6L2u5o2i5pe277yM5pyA5aSa5L+d55WZ5aSH5Lu96K6h5pWw5Liq5paH5Lu2LeacgOaXp+eahOaWh+S7tuWwhuiiq+WIoOmZpCIsc3RvcmFnZToi5o+Q5L6b5bCG5pWw5o2u5Y+R6YCB5Yiw5bmz5Y+w5LmL5YmN5L+d5a2Y5Lyg5YWl5pWw5o2u55qE6YWN572uIiwibWF4LWZpbGUtY291bnQiOiLlsIbliJvlu7rnmoTmlofku7bnmoTmnIDlpKfmlbDph48iLCJtYXgtcmVhZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiLkuIDkuKrmlofku7bkuK3lrZjlgqjnmoTmnIDlpKforrDlvZXmlbAiLCJyZWFkLXJlY29yZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiLlnKjlsIbmlbDmja7lj5HpgIHliLBUaGluZ3NCb2FyZOS5i+WJje+8jOWtmOWCqOS4reeahOacgOWkp+aVsOaNruiuoeaVsCIsInR0bC1jaGVjay1ob3VyIjoi572R5YWz5aSa5LmF5qOA5p+l5LiA5qyh5pWw5o2u5piv5ZCm6L+H5pe2IiwidHRsLW1lc3NhZ2VzLWRheSI6IuWtmOWCqOWwhuS/neWtmOaVsOaNrueahOacgOWkp+WkqeaVsCIsY29tbWFuZHM6IueUqOS6juaUtumbhumZhOWKoOe7n+iuoeS/oeaBr+eahOWRveS7pCIsYXR0cmlidXRlOiLnu5/orqHpgaXmtYvplK4iLHRpbWVvdXQ6IuWRveS7pOaJp+ihjOeahOi2heaXtuaXtumXtCIsY29tbWFuZDoi5ZG95Luk5omn6KGM55qE57uT5p6c77yM5bCG55So5L2c6YGl5rWL55qE5YC8IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5Ijoi5ZCv55So55uR6KeG5q+P5Liq6L+e5o6l6K6+5aSH55qE5rS75YqoIiwiaW5hY3Rpdml0eS10aW1lb3V0Ijoi5Zyo5q2k5pe26Ze05ZCO77yM572R5YWz5bCG5pat5byA6K6+5aSH55qE6L+e5o6lIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLorr7lpIfmtLvliqjmo4Dmn6XnmoTlkajmnJ8iLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLlj5HpgIHmtojmga/ljIXkuYvpl7TnmoTlu7bov5/vvIjlh4/lsI/mraTorr7nva7kvJrlr7zoh7Tlop7liqBDUFXkvb/nlKjnjofvvIkiLHFvczoiTVFUVOa2iOaBr+S8oOmAkueahOacjeWKoei0qOmHj++8iDAt6Iez5aSa5LiA5qyh77yMMS3oh7PlsJHkuIDmrKHvvIkiLCJzZXJ2ZXItcG9ydCI6IkdSUEPmnI3liqHlmajkvqblkKzkvKDlhaXov57mjqXnmoTnvZHnu5znq6/lj6MiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuWcqOiAg+iZkei/nuaOpeatu+S6oeS5i+WJje+8jOacjeWKoeWZqOetieW+hWtlZXBhbGl2ZSBwaW5n5ZON5bqU55qE5pyA6ZW/5pe26Ze0IiwiZ3JwYy1rZWVwLWFsaXZlIjoi5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25Lik5Liq6L+e57uta2VlcGFsaXZlIHBpbmfmtojmga/kuYvpl7TnmoTmjIHnu63ml7bpl7QiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6IuWcqOayoeacieaOpeaUtuWIsOS7u+S9leaVsOaNruS5i+WJje+8jOacjeWKoeWZqOWPr+S7peWPkemAgeeahGtlZXBhbGl2ZSBwaW5n5raI5oGv55qE5pyA5aSn5pWw6YeP77yM54S25ZCO5bCG6L+e5o6l6KeG5Li65q275LqhIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiLlnKjmsqHmnInlj5HpgIHmiJbmjqXmlLbmlbDmja7ml7bvvIzmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5YWB6K645pyN5Yqh5Zmo5Zyo5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25L+d5oyBR1JQQ+i/nuaOpea0u+WKqCJ9LCJkb2NrZXItbGFiZWwiOiLkvb/nlKjku6XkuIvmjIfku6TlnKggRG9ja2VyIGNvbXBvc2Ug5Lit6L+Q6KGMIElvVCDnvZHlhbPvvIzlubbkuLrpgInlrprnmoTorr7lpIfmj5Dkvpvlh63mja4iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi5L2/55So5Lul5LiL6K+05piO5LiL6L2944CB5a6J6KOF5ZKM6K6+572uIERvY2tlciBDb21wb3NlIiwiZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlIjoi5LiL6L296YWN572u5paH5Lu2IiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLkuIvovb3mgqjnmoTnvZHlhbPnmoQgZG9ja2VyLWNvbXBvc2UueW1sIOaWh+S7tiIsImxhdW5jaC1nYXRld2F5Ijoi5ZCv5Yqo572R5YWzIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoi5Zyo5YyF5ZCrIGRvY2tlci1jb21wb3NlLnltbCDmlofku7bnmoTmlofku7blpLnkuK3vvIzkvb/nlKjku6XkuIvlkb3ku6TlnKjnu4jnq6/kuK3lkK/liqjnvZHlhbMifSxKbz17ImFkZC1lbnRyeSI6IuWinuWKoOmFjee9riIsImNvbm5lY3Rvci1hZGQiOiLlop7liqDmlrDpgKPmjqXlmagiLCJjb25uZWN0b3ItZW5hYmxlZCI6IuWVn+eUqOmAo+aOpeWZqCIsImNvbm5lY3Rvci1uYW1lIjoi6YCj5o6l5Zmo5ZCN56ixIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiLpnIDopoHpgKPmjqXlmajlkI3nqLHjgIIiLCJjb25uZWN0b3ItdHlwZSI6IumAo+aOpeWZqOmhnuWeiyIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoi6ZyA6KaB6YCj5o6l5Zmo6aGe5Z6L44CCIixjb25uZWN0b3JzOiLpgKPmjqXlmajphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLlu7rnq4vmlrDplpjpgZMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuaCqOeiuuWumuimgeW7uueri+S4gOWAi+WQjeeoseeCuu+8mid7e2dhdGV3YXlOYW1lfX0n55qE5paw6ZaY6YGT5ZeO77yfIixkZWxldGU6IuWIqumZpOmFjee9riIsImRvd25sb2FkLXRpcCI6IuS4i+i8iemFjee9ruaWh+S7tiIsZ2F0ZXdheToi6ZaY6YGTIiwiZ2F0ZXdheS1leGlzdHMiOiLlkIzlkI3oqK3lgpnlt7LlrZjlnKjjgIIiLCJnYXRld2F5LW5hbWUiOiLplpjpgZPlkI3nqLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiLpnIDopoHplpjpgZPlkI3nqLHjgIIiLCJnYXRld2F5LXNhdmVkIjoi6ZaY6YGT6YWN572u5bey5oiQ5Yqf5L+d5a2Y44CCIiwianNvbi1wYXJzZSI6IueEoeaViOeahEpTT04iLCJqc29uLXJlcXVpcmVkIjoi5qyE5L2N5LiN6IO954K656m644CCIiwibm8tY29ubmVjdG9ycyI6IueEoemAo+aOpeWZqCIsIm5vLWRhdGEiOiLnhKHphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw6ZaY6YGT44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiDmnKrmib7liLAne3tpdGVtfX0n44CCIiwicGF0aC1sb2dzIjoi5pel6KqM5paH5Lu255qE6Lev5b6RIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi6ZyA6KaB6Lev5b6R44CCIixyZW1vdGU6Iuenu+mZpOmFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel6KqM6KiY6YyE57Sa5YilIiwicmVtb3ZlLWVudHJ5Ijoi56e76Zmk6YWN572uIiwic2F2ZS10aXAiOiLkv53lrZjphY3nva7mlofku7YiLCJzZWN1cml0eS10eXBlIjoi5a6J5YWo6aGe5Z6LIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoi6Kiq5ZWPVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToi6LKv5a2YIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi5paH5Lu25Lit55qE5pyA5aSn57SA6YyEIiwic3RvcmFnZS1tYXgtZmlsZXMiOiLmnIDlpKfmlofku7bmlbgiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiLmnIDlsI/mlbjph4/ngrox44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoi6ZyA6KaB6Jmf56K844CCIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6IuWtmOWEsuS4reeahOacgOWkp+e0gOmMhCIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoi5pyA5bCP57SA6YyE5pW454K6MeOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfntIDpjITmlbgiLCJzdG9yYWdlLXBhY2stc2l6ZSI6IuacgOWkp+S6i+S7tuWMheWkp+WwjyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6IuacgOWwj+aVuOmHj+eCujHjgIIiLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoi6Jmf56K854Sh5pWI77yOIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhdGgiOiLlrZjlhLLot6/lvpEiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHlrZjlhLLot6/lvpHjgIIiLCJzdG9yYWdlLXR5cGUiOiLlrZjlhLLpoZ7lnosiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IuaWh+S7tuWtmOWEsiIsIm1lbW9yeS1zdG9yYWdlIjoi6KiY5oa26auU5a2Y5YSyIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJk5Li75qmfIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IumcgOimgeS4u+apn+OAgiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZOmAo+aOpeWfoCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4Ijoi5pyA5aSn5Z+g6Jmf54K6IDY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/ln6DomZ/ngrox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi6YCj5o6l5Z+g54Sh5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IumcgOimgemAo+aOpeWfoOOAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6YCj5o6l5Zmoe3t0eXBlTmFtZX196YWN572uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiLplpjpgZPkuIpDQeitieabuOeahOi3r+W+kSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IumWmOmBk+S4iueUqOaItuerr+aGkeaTmueahOi3r+W+kSIsInRscy1wYXRoLXByaXZhdGUta2V5Ijoi6ZaY6YGT5LiK55qE56eB6ZGw6Lev5b6RIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLliIfmj5vlhajonqLluZUiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IumFjee9rkpTT04qIiwidXBkYXRlLWNvbmZpZyI6IuWinuWKoC/mm7TmlrDphY3nva5KU09OIn07Y29uc3QgWG89W2NhLHBhLEZhLERhLEFhLE5hLFBhLGVvLEVvLGlvLGFvLG9vLHFvLHRvLEdvLG5vXTtjbGFzcyBab3tjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lLGZ1bmN0aW9uKGUpe2Uuc2V0VHJhbnNsYXRpb24oImVuX1VTIixPbywhMCksZS5zZXRUcmFuc2xhdGlvbigiYXJfQUUiLFJvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJjYV9FUyIsVm8sITApLGUuc2V0VHJhbnNsYXRpb24oImNzX0NaIixCbywhMCksZS5zZXRUcmFuc2xhdGlvbigiZGFfREsiLFVvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJlc19FUyIsX28sITApLGUuc2V0VHJhbnNsYXRpb24oImtvX0tSIixIbywhMCksZS5zZXRUcmFuc2xhdGlvbigibHRfTFQiLHpvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJubF9CRSIsV28sITApLGUuc2V0VHJhbnNsYXRpb24oInBsX1BMIixqbywhMCksZS5zZXRUcmFuc2xhdGlvbigicHRfQlIiLEtvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJzbF9TSSIsJG8sITApLGUuc2V0VHJhbnNsYXRpb24oInRyX1RSIixZbywhMCksZS5zZXRUcmFuc2xhdGlvbigiemhfQ04iLFFvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJ6aF9UVyIsSm8sITApfShlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5OZ01vZHVsZX0pfXN0YXRpY3t0aGlzLsm1bW9kPXQuybXJtW5nRGVjbGFyZU5nTW9kdWxlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlY2xhcmF0aW9uczpbY2EscGEsRmEsRGEsQWEsTmEsUGEsZW8sRW8saW8sYW8sb28scW8sdG8sR28sbm9dLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOltjYSxwYSxGYSxEYSxBYSxOYSxQYSxlbyxFbyxpbyxhbyxvbyxxbyx0byxHbyxub119KX1zdGF0aWN7dGhpcy7JtWluaj10Lsm1ybVuZ0RlY2xhcmVJbmplY3Rvcih7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpabyxwcm92aWRlcnM6W3ZhXSxpbXBvcnRzOltILEQsUSxNYSxFYSxxYSxJYSxMbyxrbyxGbyxwbyxBbyxObyxnbyxEbyxQb119KX19ZSgiR2F0ZXdheUV4dGVuc2lvbk1vZHVsZSIsWm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Wm8sZGVjb3JhdG9yczpbe3R5cGU6dSxhcmdzOlt7ZGVjbGFyYXRpb25zOlhvLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOlhvLHByb3ZpZGVyczpbdmFdfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSl9fX0pKTsvLyMgc291cmNlTWFwcGluZ1VSTD1nYXRld2F5LW1hbmFnZW1lbnQtZXh0ZW5zaW9uLmpzLm1hcAo=", - "public": false - }, - { - "link": "/api/images/system/gateway_configuration_single_device_system_widget_image.png", - "title": "\"Gateway configuration (Single device)\" system widget image", - "type": "IMAGE", - "subType": "IMAGE", - "fileName": "gateway_configuration_single_device_system_widget_image.png", - "publicResourceKey": "ZL0sm6U5n3KO59xw62PmZjiTOQqdBCS2", - "mediaType": "image/png", - "data": "iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAIAAADGnbT+AAAABmJLR0QA/wD/AP+gvaeTAAAS3UlEQVR42u2dh5MTRxaH91/B5XKscoHhMNwdYEy2oQzYwBmKnDMmmGRgyXHJmJxNzgeYnHPOCyaaDEtOJtq6D72jazzSahetDCvt71dbW6OZnlZr+tN7Pa33ppMCgcDz58/T0tIuXLjwmyRlQSAESM+ePQOqJKi6ePHivXv3Xrx4EZCkLAiEAAmcgCoJxHihiyLFSuAEVEmYL9kqKbZ2C6iScI26FlJsBVQCS3qrYP0pSUHFDCyr7g9JCiozeGUAlkPqRVDPg3om5UhZ7xsJGeKVMVhGFTU+ffr0yZMnj1/pdynHyHU6AICB4WVsRQOWowpaDSm2M+lipcQTXQ8AhhdIRGYrY7DAk4rAlg1dXAkMgAEk2IgGLGeuMH2PHj1iIlXXVDJdu3YNJAAjgtHKACwzV8zQ28+KkoSAASQiG62MwcKn3r59W1dT8gokACN6sGBTYEnpgQUeWQLr1q1bupSSVyCRVbC4BRBYUihYgCGwJIElCSxJYAksSWBJAksSWAJLEliSwJIE1psD68CBA/9NR/wwTtAFG+TL+s5atWrVwYMHXQ1r1qyxbUpS/saNG97CNIyd5K95dx45cmTGjBmTJ09eu3YtBXz1X716lVMmTZq0ePFib22c5Zq3fv361NRUPrvvXNr8yy+/cO6iRYvSCyKiHt7Xt/PKlSuu8pUrVx46dMjbsFOnTtmhZcuW7dixI15+ln1rYI0ZM+Y/r1SkSJEvv/zSvTx//vzly5cLFy7MVfadVbFixf79+9t2v379vv32W9umJOXbtWvnLUxUEDvpbHtJU3/88Ufeq2rVqi1atChbtmz58uXpaVcemIoVK0YDWrVqValSpRIlSrhzR44cyYnWPNrAdq1atbz07Nmz56uvvipevHidOnXKlClTtGjRBQsWhF6xatWqcS6fzrt/w4YNtPObb76hcj4R55YrV859Z/gacLRKlSoc/SKolJQUQp0EVsaiP8aNG+fdEx1YvlN8YI0ePZpegQBnYMCLCq2TLl269Pnnn4O7XQUi1IYPH84es5qAVbp0aVcz6NP3PXr0sJfXr18vWbJkly5d+NmVl1wW7BZvvXfvXp+5gqoKFSpMmDAhFKzTp0/bywcPHnTo0AG8DFwDy2qmVRgt3ppviMB6c2DVrVuXi+6chRcs6ClVqlSfPn28teHRMDPW/Tg4Cp85c8YdpR6O4oNCwUJ0bY0aNZw9A6y7d+96Lw5HW7Zs6T2FBjdp0mTq1KkYJ+8jC3xgIZrBHvb7wDLBFnv27dsX9QXnykRxKOeCxegEFLp27RoK1rFjx9jeuHFjem2gXzEnI0aMCPuUCh9YxEbimDp16mQvYSjUhGC0MHjOZ3GVIBtvyzCON9q1a1cEsM6dO8ceBpRhweLK8/0ZPHhwdFd79erV7du3379/f+ihw4cPc2j58uUJDla3bt1+/qvo3Qhg4c7AiI1Nmzb5wNq6dSvb4BWhGaBAl1evXp03oiofWAy/xgSFi2SUVrt2bRCxowyqKOCrzVriyvCSGuyhPc2bN+ejRXCF9C4m0ExvKFioUaNGvgFl5sXbcW4oW0YVhyAvwcHCEnz/V9E3kcGiVW3atGEcc//+fS9Y2Cq2ucOy8jNnzuz6SngWr3Ps3bs3nUrh1q1buztKuGHQY+U7duzIUBr+Tpw4YUc55Bs2OVzcpWvWrJmzakuXLnWQuZJ82Hr16vGfQ7TfmbSwYNE2Koz6goeyFVuqEs0VmpnBSOB0+vbt6wWLEQnbbuROeWwPjo+dc+fO9b0Lnwg3BD14HPtoPleIu8QPcudofvPrr78eOHCgrxImHajcrA53ANjCadOm/RoUjeHl/PnzvWBNnDiR8dzChQsBC9vp6gkLFlhncfzu2KIxDCFiS1VigoXoHl7STw4s7rDoyzlz5vhmnhxYJ0+exFz5PjlHrftDB+/ed+TusnHjxr6mDhkyhBkNm+7i0xUOEbcaYV0huGMy3SUNBevhw4fAB6ZZ7HswMrZiTlXCgkXD8BQMfbzTDYxssDHeGSAvWNSGffL23507dyKAZQMym8k043T06FF3lHES725NxapxG8jkk/d0G/NBcyhY3F1y7qBBg9IDa+jQocyxudFb1u1WzKlKWLAQwyOuvhcseg5LwBQA80k3b948fvw4RsWN9M+ePctRhnH4BebcsV5cblyqTWbahII5Mgowuudlr169nGds0KABbWNWnSkuoGnYsCGY2ty9zQ54Z2LtFAqASNi7QqYkuKPk3tCBdSQo7tcY4XFoxYoVsSJgdVCax8osWDZC94JlP48AFpbGnBEjZTfBbd4QsOg2O4p3Y0jrBu/OhTHLygQ6FstrRTB+tAcPRQHq5wbC/R7FxClzE6EXF6rwlVzAULC4pPwqgIdyYFm1DOqpzceoJkiziwACcBmpRDjKTFUUNZOfiYfyDbRzphTdIAksSWBJAktgSQJLEliSwBJYksCSBJYksASWJLAkgSUJLIElJQpYBEWR2El40/bt20NzixNYhOQTtiWw/hawtmzZ0rZtW6KRCLsmYHL8+PERChOUZ4FvCSBicgiVtsSeRF0n5q2BxYlEw1lsbiAYBUXoMCnF9hKGyKshos3aRE7pDz/8QHKLFWAnh4j85KkHgWAMuAsLJpTKpVzylAcLjSKjYXtQFklM5S4Kj/LEjnpbxVmYk23btoG7M6KcSCIG7+g+KS1nm+dHYHgIYoYVTuGrQsSfq41wUz6F7+oRG00ixrBhw8iGIIHWEmIFVszAokfJQQh7iGtNNCaxnQSLzpo1KxAMEIVCPCaBv7wk14rwSx6SQZwuqYIGpYXmYdgsGBU4CBYlApioUTqSONLp06fTlzR48+bNAwYMsPeig71ZrCBCsjI7gZgMeku+gEtOxGWTbkrelcFNGVLB5s2bx9thd3lfjo4aNSo5OdmuI+X5FAQTUwymfZeOfH8+vjfxWmDFBiyAcAlM2IzUoMhB4OXOnTvBIhDMmoInK0NIrpk3QngBxfKuMCqWEMx/bBjWgkRQHnyAf8HIkeBl5Z0P5R15SbGmTZvCkBFp7+XAIhfU9jD+s7RSTKCLBgYjkvENLEuB5zoQQ0ybA6+SOLgaxNTzZBGzl3w6Gu/97NhXa7Avw0JgxQAs3ITL5eXLPXbsWEtzsI4kyY6vO99+Z9UcWOvWrYO2IUFRxgLDSQcg2YYkT6oiGp16CHi30TEtJIuGvD8yUeHJcrxgjnrwbqQ1e1tlFst9ciyibcMQo0ByFQmKt0h8wDKYEO2EQtumbThoEkFpuTWSE4HVe2uCceWN7JsjsGIMFnnAXG7v057oHgOrc+fO2BvqZ4QbCha40Fs3XgnbEAg+YgrPhTnBIDHuwWlSmz2lg/ytKVOm2OJklDGwKIM35HbBmwadHli7d+/GKVuMPFVlBizsMTtveJTT1gd9m3eF9CuDEutyvA+2Bx+BjyM9xkblZFNhY6xZ9JON0OkkzIYVgCr30JXOQVGYCqkK+2T7Gc3YUy4Y1TmjiK9ktAQEvsSHsGBxOpUEgtmCOEerLTJYeFt3awKRjOs1j/XmwMIj4LYYizC8pRvwZeYvMAkQwG0gR0nQM6+BO6Ok9RAmhKN0JwC50Q/DfIbnto2nW7JkiW0zQMbnggi3YJxiIySEVbNBWIZgsdPeC3AZG2G0MgQrEHwMBKdziKb6Bu8C603MvGM8cIu+2VFbZNpXkq++txhGLpNzqjTVOwvg4Av7KJ/0lF66WGRh5MI+F0lgJeBPOjhTrCODtpzZ5QLr7xKDLabK9PumwJIEliQJLElgSQJLkgSWJLAkgSUJLIElCSxJYEkCS2C5T0RQDckzPA3bLY4SQcQhetdakhINLOK3XPRV1CJ5hqWXPv74Y1ay5KnX77777uzZs8OW5CPzmHXWlaAMcYhx3f0RHvCcxWc/JwJYPLyfB6lnsRKC7qHKpV0Q3v7RRx+FfSg3EdWUJKCvUKFCcQ0W6JAKEDb/jJ0cygpbbxMsPA7pDHwG4n1tNVFzRqz40LNnTxfqGQiuu0RwsEsY5H15Seyo7bfFuthwz+AnrI+lZrp37060p1tgl/h6ypAzA0Ohayphnyz+2ERkfa5cucj4CG028fIWNohhi3eLRVYc4bU+tsLujCew8ufPX7BgQb79LP5BADEVEpH8/vvvYxLq16+Po8EqWJsIbKebXcAnAXq8ZMFwzqJrCxQokDdvXjasAPyxeATrOJDux0a+fPksGxFKOIt3/Oyzz/B6GRowLJZ30dRQJQBYoRjFhKq3DxYrH7nOI+GTjreVbWzkxEsSRyOAFdYV0tmsomNGBWMOWyRfOLCIQI8Q0IwVJBae9ENwJxk1cvsTAyxzfAaT24jvwTtgkRjoXrJmKQvIeAuwDi8JFK8FFjy999573vX+yNyCLQeWAzesWLiG9W3y5MnDKb6lwhMYLGeoYkVV9gKLoRIpWd4CJBUaapkHC+eYK0QffPBBJsEykd9hRsuNzwRWHINVuXJlXz9hw1hh8LXAYoDFIRvae/VaYAWCcfEUjnyV5QrjAyzSZhhWuzt8nBouydYEJPPTywSHfGCxzK6rh7O8y9q+CCpDsGrWrMlice6lvSNPj9HgPe7BYrLgww8/5CkdrGHJfZxNF9nTDaANXGrVqsVLlvgmVdoLFqmkdutnqX9MnXNHydMfyJNmXooJT3u+Q2SwSAh75513mKRgVoIpCZYyZArD7gColpTa0Ll4TTfEB1iB4GKkjJptYMQNozehlJvETz75hP3MR9DNDJscWDzRyg7ZMru0ioccASV7YIV1uW2V1AxdIY9+yJ07t707ftk9uwukIDX0JjHewUrYCdL0xLSnLXrrEx6NQ2GzTLkEHPLOIzAAx/KRYx3Fu4emTYfuSQzpJx0pziSwJIElCSxJYAksSWBJAksSWAJLShSwRkpxJVksSa5QElgCS3rTYPFrpcCSQsECjKyCRQyTLTAhSYFg9i9IZAksolMMrAReb0h6XRF0aWCBR/RgEd5JChcrzMCprqkED8QJggQb0YNF2B08EU9HgCU5gKAqn5hjRdcDABgAA0gABni8Nlheo0VUOPG7rEfKKoGk5v0s5UjR9QAABsAAEhHMVabAckaL6lgE65iUgwUAYJChucoALC9bmEECw+H0/ivdk3KMXKcDABgAQ2SqMgWWYws9D+qZlCNlvW8kGFXRg+XDS5IyROo1wPLiJUmZoeU1wJKkzEtgSQIr4XT41OUSjVLyVEnOXTkO/mhn8YYpWw+cFljZnao8VbrHBVJ/watyMi0XWNlX2Kq4o8r+SjUaLLCyr+LFA4b9E1jZV/FLlcASWAJLYAksSWAJLIElsASWwJIElsASWAJLYGXu7581+uT7rofAkmID1qdVuo+cve7W3ZcLKRDFuXHvr2WaDhFYUlbBGjZjDScu23yozaA5g6evfvj703OXbuR9G6ZLYCUUWPuPn3/85Jn7kfGnuRvuPXxcvdN4tvNX69lp+IKx8zb2Gr+sUO1+7Pmuw9ie45YWrTfACrfsP7PbT4ttu1yL4UN/XpMybVWltqMFlsBKXr7lMCcOnLIyf7Ve3v3/qtnn5PlrT54+h7xHj59ev3X/i/oDG/SYSuG+E5dTgAHZg0dPtuw/yXarAbOePnuBP027ff/5iz/aD50nsHI6WCUbpZw8f51z79x/NGnRFjfAqt99ys7DZ5r0ns52s74zKIDdYkAGOtsOnrYC7Ow8cuE/qva8fe/R4VOXQBMfui/1NyiMIs5CYCXaXSG4tBwwa8ehM8G8qT9xZ7a/YPXeHYcvGDVn/cJ1+6h8zLyN7Jy+bAfGiVvIaUu3Y88wbLW6TOTo2l2peEn+Nu45wcsSDVMElqYb/v9XsfWo1LNXwKts82GlmwzB8FxJuztrxS4vWNU6jmObkf65yzfX7Djm7NnltDupZ664v/KtRgisnAvWv2v1BaOtB065PcNnrqUexlLMQbBRqe1PBpwDi78LV2/tO37e8OJl+e9fPsd28pKtrpLobioFVkJZrFXbj8IWWDCcwvFdvXGXIXmROv0HTV1JheMWbGrYcxpeku0JCzfbKePmv1zA8eHvT2y8z3Bq99FzuMU+E5bXTZ48e+XuPcfOaYyV08EqUL33jOU7gclqOHHuap2uk2w/d3yBl6uE/okr5P/qoOPjr0LQRC3ddNBVUqzBoHW7jjO/yn4caLvBc2WxNMZKtrkDbg8Zrfv2F67dr0DIzvT+uD1kzP5ptGlCAithB+/6EVoSWJLAElgCS2BJAksSWAJLYAksSWBJb0Tx+1AQWi6wsq+KN4zXxxiVbjxEYGVf8Wi8PPFpro7qwWvZXDwaj4eYxZetygxVAkv6uySwJIElCSxJYAksSWBJcQTWhQsXWChM10KKlcAJqJLS0tJY7FCXQ4qVWIocqJJY4/DixYuwJbslZd1WARI4sZHEa1bOBDHM12+SlAWBECCZhfofUvIhO6Sugc0AAAAASUVORK5CYII=", - "public": true - } ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_connectors.json b/application/src/main/data/json/system/widget_types/gateway_connectors.json index 760541c5b0..54ad85048c 100644 --- a/application/src/main/data/json/system/widget_types/gateway_connectors.json +++ b/application/src/main/data/json/system/widget_types/gateway_connectors.json @@ -39,28 +39,5 @@ "ocpp", "ble", "bluetooth" - ], - "resources": [ - { - "link": "/api/resource/js_module/system/gateway-management-extension.js", - "title": "gateway-management-extension.js", - "type": "JS_MODULE", - "resourceKey": "gateway-management-extension.js", - "fileName": "gateway-management-extension.js", - "mediaType": "application/javascript", - "data": "U3lzdGVtLnJlZ2lzdGVyKFsiQGFuZ3VsYXIvY29yZSIsIkBhbmd1bGFyL21hdGVyaWFsL3NvcnQiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZSIsIkBhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvciIsIkBzaGFyZWQvcHVibGljLWFwaSIsIkBhbmd1bGFyL2NvbW1vbiIsIkBhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXIiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJzIiwiQGFuZ3VsYXIvZmxleC1sYXlvdXQvZmxleCIsIkBhbmd1bGFyL2ZsZXgtbGF5b3V0L2V4dGVuZGVkIiwiQG5neC10cmFuc2xhdGUvY29yZSIsIkBjb3JlL3B1YmxpYy1hcGkiLCJAYW5ndWxhci9mb3JtcyIsIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2NhcmQiLCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCIsIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQiLCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QiLCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlIiwicnhqcyIsInJ4anMvb3BlcmF0b3JzIiwidHNsaWIiLCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwIiwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbiIsIkBzaGFyZWQvZGlyZWN0aXZlcy90cnVuY2F0ZS13aXRoLXRvb2x0aXAuZGlyZWN0aXZlIiwiQHNoYXJlZC9jb21wb25lbnRzL2RpYWxvZy9qc29uLW9iamVjdC1lZGl0LWRpYWxvZy5jb21wb25lbnQiLCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2ciLCJAc2hhcmVkL2NvbXBvbmVudHMvZGlyZWN0aXZlcy90Yi1qc29uLXRvLXN0cmluZy5kaXJlY3RpdmUiLCJAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUiLCJAc2hhcmVkL2NvbXBvbmVudHMvYnV0dG9uL3RvZ2dsZS1wYXNzd29yZC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLWhlYWRlci5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLXNlbGVjdC5jb21wb25lbnQiLCJAbmdyeC9zdG9yZSIsIkBhbmd1bGFyL3JvdXRlciIsIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXIiLCJAc2hhcmVkL2NvbXBvbmVudHMvanNvbi1jb250ZW50LmNvbXBvbmVudCIsIkBzaGFyZWQvaW1wb3J0LWV4cG9ydC9pbXBvcnQtZXhwb3J0LnNlcnZpY2UiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9hc3QuZGlyZWN0aXZlIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3giLCJAc2hhcmVkL2NvbXBvbmVudHMvZW50aXR5L2VudGl0eS1nYXRld2F5LXNlbGVjdC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGVscC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGludC10b29sdGlwLWljb24uY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2hlbHAtcG9wdXAuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL3BvcG92ZXIuc2VydmljZSIsIkBhbmd1bGFyL21hdGVyaWFsL2NoaXBzIiwiQHNoYXJlZC9jb21wb25lbnRzL2ljb24uY29tcG9uZW50IiwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSIsIkBzaGFyZWQvZGVjb3JhdG9ycy9jb2VyY2lvbiIsIkBzaGFyZWQvY29tcG9uZW50cy9qc29uLW9iamVjdC1lZGl0LmNvbXBvbmVudCIsIkBzaGFyZWQvY29tcG9uZW50cy9tYXJrZG93bi5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdGItZXJyb3IuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2ZpbGUtaW5wdXQuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2J1dHRvbi9jb3B5LWJ1dHRvbi5jb21wb25lbnQiXSwoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0LG4sYSxvLGkscixzLGwsYyxwLG0sZCx1LGcsZix5LGIsaCx4LHYsdyxDLFQsUyxrLEwsRixJLEEsTixNLEUscSxELFAsRyxPLFIsVixCLFUsXyxILHosVyxqLEssWSxRLEosWCxaLGVlLHRlLG5lLGFlLG9lLGllLHJlLHNlLGxlLGNlLHBlLG1lLGRlLHVlLGdlLGZlLHllLGJlLGhlLHhlLHZlLHdlLENlLFRlLFNlLGtlLExlLEZlLEllLEFlLE5lLE1lLEVlLHFlLERlLFBlLEdlLE9lLFJlLFZlLEJlLFVlLF9lLEhlLHplLFdlLGplLEtlLCRlLFllLFFlLEplLFhlLFplLGV0LHR0LG50LGF0LG90LGl0LHJ0LHN0LGx0LGN0LHB0LG10LGR0LHV0LGd0LGZ0LHl0LGJ0LGh0LHh0LHZ0LHd0LEN0LFR0LFN0O3JldHVybntzZXR0ZXJzOltmdW5jdGlvbihlKXt0PWUsbj1lLkNvbXBvbmVudCxhPWUuSW5wdXQsbz1lLlZpZXdDaGlsZCxpPWUuRXZlbnRFbWl0dGVyLHI9ZS5pbmplY3Qscz1lLkRpcmVjdGl2ZSxsPWUuT3V0cHV0LGM9ZS5QaXBlLHA9ZS5JbmplY3QsbT1lLmZvcndhcmRSZWYsZD1lLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5LHU9ZS5OZ01vZHVsZX0sZnVuY3Rpb24oZSl7Zz1lLk1hdFNvcnQsZj1lfSxmdW5jdGlvbihlKXt5PWUuTWF0VGFibGVEYXRhU291cmNlLGI9ZX0sZnVuY3Rpb24oZSl7aD1lLk1hdFBhZ2luYXRvcix4PWV9LGZ1bmN0aW9uKGUpe3Y9ZS5oZWxwQmFzZVVybCx3PWUuRGlyZWN0aW9uLEM9ZS5QYWdlTGluayxUPWUuRGF0YUtleVR5cGUsUz1lLkxlZ2VuZFBvc2l0aW9uLGs9ZS5OVUxMX1VVSUQsTD1lLkF0dHJpYnV0ZVNjb3BlLEY9ZS5EYXRhc291cmNlVHlwZSxJPWUuRW50aXR5VHlwZSxBPWUud2lkZ2V0VHlwZSxOPWUuY29lcmNlQm9vbGVhbixNPWUuZW1wdHlQYWdlRGF0YSxFPWUuaXNDbGllbnRTaWRlVGVsZW1ldHJ5VHlwZSxxPWUuVGVsZW1ldHJ5U3Vic2NyaWJlcixEPWUuU2hhcmVkTW9kdWxlLFA9ZS5EaWFsb2dDb21wb25lbnQsRz1lLkNvbnRlbnRUeXBlLE89ZS5QYWdlQ29tcG9uZW50LFI9ZS5UYlRhYmxlRGF0YXNvdXJjZSxWPWUuSE9VUixCPWUuY29lcmNlTnVtYmVyLFU9ZS5EZXZpY2VDcmVkZW50aWFsc1R5cGV9LGZ1bmN0aW9uKGUpe189ZSxIPWUuQ29tbW9uTW9kdWxlfSxmdW5jdGlvbihlKXt6PWV9LGZ1bmN0aW9uKGUpe1c9ZX0sZnVuY3Rpb24oZSl7aj1lfSxmdW5jdGlvbihlKXtLPWV9LGZ1bmN0aW9uKGUpe1k9ZSxRPWUuVHJhbnNsYXRlTW9kdWxlfSxmdW5jdGlvbihlKXtKPWUuZGVlcENsb25lLFg9ZSxaPWUuZGVsZXRlTnVsbFByb3BlcnRpZXMsZWU9ZS5pc0VxdWFsLHRlPWUuaXNOdW1iZXIsbmU9ZS5pc1N0cmluZyxhZT1lLldJTkRPVyxvZT1lLmlzTGl0ZXJhbE9iamVjdCxpZT1lLmlzRGVmaW5lZEFuZE5vdE51bGwscmU9ZS5pc1VuZGVmaW5lZE9yTnVsbCxzZT1lLmdlbmVyYXRlU2VjcmV0LGxlPWUuaXNPYmplY3QsY2U9ZS5jYW1lbENhc2UscGU9ZS5kZWVwVHJpbX0sZnVuY3Rpb24oZSl7bWU9ZSxkZT1lLkZvcm1CdWlsZGVyLHVlPWUuVmFsaWRhdG9ycyxnZT1lLk5HX1ZBTFVFX0FDQ0VTU09SLGZlPWUuTkdfVkFMSURBVE9SUyx5ZT1lLkZvcm1Db250cm9sfSxmdW5jdGlvbihlKXtiZT1lfSxmdW5jdGlvbihlKXtoZT1lfSxmdW5jdGlvbihlKXt4ZT1lfSxmdW5jdGlvbihlKXt2ZT1lfSxmdW5jdGlvbihlKXt3ZT1lfSxmdW5jdGlvbihlKXtDZT1lLFRlPWUuRXJyb3JTdGF0ZU1hdGNoZXJ9LGZ1bmN0aW9uKGUpe1NlPWUuU3ViamVjdCxrZT1lLmZyb21FdmVudCxMZT1lLkJlaGF2aW9yU3ViamVjdCxGZT1lLlJlcGxheVN1YmplY3QsSWU9ZS5vZixBZT1lLmZvcmtKb2lufSxmdW5jdGlvbihlKXtOZT1lLnRha2VVbnRpbCxNZT1lLmZpbHRlcixFZT1lLnRhcCxxZT1lLmNhdGNoRXJyb3IsRGU9ZS5tYXAsUGU9ZS5wdWJsaXNoUmVwbGF5LEdlPWUucmVmQ291bnQsT2U9ZS50YWtlLFJlPWUuc3RhcnRXaXRoLFZlPWUuZGVib3VuY2VUaW1lLEJlPWUuZGlzdGluY3RVbnRpbENoYW5nZWQsVWU9ZS5zd2l0Y2hNYXAsX2U9ZS5tZXJnZU1hcH0sZnVuY3Rpb24oZSl7SGU9ZS5fX2RlY29yYXRlfSxmdW5jdGlvbihlKXt6ZT1lLFdlPWUuTWF0VG9vbHRpcH0sZnVuY3Rpb24oZSl7amU9ZS5TZWxlY3Rpb25Nb2RlbH0sZnVuY3Rpb24oZSl7S2U9ZX0sZnVuY3Rpb24oZSl7JGU9ZX0sZnVuY3Rpb24oZSl7WWU9ZX0sZnVuY3Rpb24oZSl7UWU9ZS5Kc29uT2JqZWN0RWRpdERpYWxvZ0NvbXBvbmVudH0sZnVuY3Rpb24oZSl7SmU9ZSxYZT1lLk1BVF9ESUFMT0dfREFUQX0sZnVuY3Rpb24oZSl7WmU9ZX0sZnVuY3Rpb24oZSl7ZXQ9ZX0sZnVuY3Rpb24oZSl7dHQ9ZX0sZnVuY3Rpb24oZSl7bnQ9ZX0sZnVuY3Rpb24oZSl7YXQ9ZX0sZnVuY3Rpb24oZSl7b3Q9ZX0sZnVuY3Rpb24oZSl7aXQ9ZX0sZnVuY3Rpb24oZSl7cnQ9ZX0sZnVuY3Rpb24oZSl7c3Q9ZX0sZnVuY3Rpb24oZSl7bHQ9ZX0sZnVuY3Rpb24oZSl7Y3Q9ZX0sZnVuY3Rpb24oZSl7cHQ9ZX0sZnVuY3Rpb24oZSl7bXQ9ZX0sZnVuY3Rpb24oZSl7ZHQ9ZX0sZnVuY3Rpb24oZSl7dXQ9ZX0sZnVuY3Rpb24oZSl7Z3Q9ZX0sZnVuY3Rpb24oZSl7ZnQ9ZX0sZnVuY3Rpb24oZSl7eXQ9ZX0sZnVuY3Rpb24oZSl7YnQ9ZX0sZnVuY3Rpb24oZSl7aHQ9ZX0sZnVuY3Rpb24oZSl7eHQ9ZS5jb2VyY2VCb29sZWFufSxmdW5jdGlvbihlKXt2dD1lfSxmdW5jdGlvbihlKXt3dD1lfSxmdW5jdGlvbihlKXtDdD1lfSxmdW5jdGlvbihlKXtUdD1lfSxmdW5jdGlvbihlKXtTdD1lfV0sZXhlY3V0ZTpmdW5jdGlvbigpe2NvbnN0IGt0PWUoIm5vTGVhZFRyYWlsU3BhY2VzUmVnZXgiLC9eXFMrKD86IFxTKykqJC8pLEx0PWUoImludGVnZXJSZWdleCIsL15bLStdP1xkKyQvKSxGdD1lKCJub25aZXJvRmxvYXQiLC9eLT8oPyEwKFwuMCspPyQpXGQrKFwuXGQrKT8kLyksSXQ9ZSgianNvblJlcXVpcmVkIiwoZT0+ZS52YWx1ZT9udWxsOntyZXF1aXJlZDohMH0pKTt2YXIgQXQsTnQsTXQsRXQ7ZSgiU3RvcmFnZVR5cGVzIixBdCksZnVuY3Rpb24oZSl7ZS5NRU1PUlk9Im1lbW9yeSIsZS5GSUxFPSJmaWxlIixlLlNRTElURT0ic3FsaXRlIn0oQXR8fGUoIlN0b3JhZ2VUeXBlcyIsQXQ9e30pKSxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdCksZnVuY3Rpb24oZSl7ZS5FWENFUFRJT049IkVYQ0VQVElPTiJ9KE50fHxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdD17fSkpLGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQpLGZ1bmN0aW9uKGUpe2UuTk9ORT0iTk9ORSIsZS5DUklUSUNBTD0iQ1JJVElDQUwiLGUuRVJST1I9IkVSUk9SIixlLldBUk5JTkc9IldBUk5JTkciLGUuSU5GTz0iSU5GTyIsZS5ERUJVRz0iREVCVUciLGUuVFJBQ0U9IlRSQUNFIn0oTXR8fGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQ9e30pKSxlKCJQb3J0TGltaXRzIixFdCksZnVuY3Rpb24oZSl7ZVtlLk1JTj0xXT0iTUlOIixlW2UuTUFYPTY1NTM1XT0iTUFYIn0oRXR8fGUoIlBvcnRMaW1pdHMiLEV0PXt9KSk7Y29uc3QgcXQ9ZSgiR2F0ZXdheVN0YXR1cyIsey4uLk10LC4uLk50fSk7dmFyIER0LFB0O2UoIkxvZ1NhdmluZ1BlcmlvZCIsRHQpLGZ1bmN0aW9uKGUpe2UuZGF5cz0iRCIsZS5ob3Vycz0iSCIsZS5taW51dGVzPSJNIixlLnNlY29uZHM9IlMifShEdHx8ZSgiTG9nU2F2aW5nUGVyaW9kIixEdD17fSkpLGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0KSxmdW5jdGlvbihlKXtlLnNlcnZpY2U9InNlcnZpY2UiLGUuY29ubmVjdG9yPSJjb25uZWN0b3IiLGUuY29udmVydGVyPSJjb252ZXJ0ZXIiLGUudGJfY29ubmVjdGlvbj0idGJfY29ubmVjdGlvbiIsZS5zdG9yYWdlPSJzdG9yYWdlIixlLmV4dGVuc2lvbj0iZXh0ZW5zaW9uIn0oUHR8fGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0PXt9KSk7Y29uc3QgR3Q9ZSgiTG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwIixuZXcgTWFwKFtbUHQuc2VydmljZSwiU2VydmljZSJdLFtQdC5jb25uZWN0b3IsIkNvbm5lY3RvciJdLFtQdC5jb252ZXJ0ZXIsIkNvbnZlcnRlciJdLFtQdC50Yl9jb25uZWN0aW9uLCJUQiBDb25uZWN0aW9uIl0sW1B0LnN0b3JhZ2UsIlN0b3JhZ2UiXSxbUHQuZXh0ZW5zaW9uLCJFeHRlbnNpb24iXV0pKSxPdD1lKCJMb2dTYXZpbmdQZXJpb2RUcmFuc2xhdGlvbnMiLG5ldyBNYXAoW1tEdC5kYXlzLCJnYXRld2F5LmxvZ3MuZGF5cyJdLFtEdC5ob3VycywiZ2F0ZXdheS5sb2dzLmhvdXJzIl0sW0R0Lm1pbnV0ZXMsImdhdGV3YXkubG9ncy5taW51dGVzIl0sW0R0LnNlY29uZHMsImdhdGV3YXkubG9ncy5zZWNvbmRzIl1dKSksUnQ9ZSgiU3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAiLG5ldyBNYXAoW1tBdC5NRU1PUlksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtBdC5GSUxFLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl0sW0F0LlNRTElURSwiZ2F0ZXdheS5zdG9yYWdlLXR5cGVzLnNxbGl0ZSJdXSkpO3ZhciBWdDtlKCJTZWN1cml0eVR5cGVzIixWdCksZnVuY3Rpb24oZSl7ZS5BQ0NFU1NfVE9LRU49ImFjY2Vzc1Rva2VuIixlLlVTRVJOQU1FX1BBU1NXT1JEPSJ1c2VybmFtZVBhc3N3b3JkIixlLlRMU19BQ0NFU1NfVE9LRU49InRsc0FjY2Vzc1Rva2VuIixlLlRMU19QUklWQVRFX0tFWT0idGxzUHJpdmF0ZUtleSJ9KFZ0fHxlKCJTZWN1cml0eVR5cGVzIixWdD17fSkpO2NvbnN0IEJ0PWUoIkdlY3VyaXR5VHlwZXNUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tWdC5BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl0sW1Z0LlVTRVJOQU1FX1BBU1NXT1JELCJnYXRld2F5LnNlY3VyaXR5LXR5cGVzLnVzZXJuYW1lLXBhc3N3b3JkIl0sW1Z0LlRMU19BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMudGxzLWFjY2Vzcy10b2tlbiJdXSkpO3ZhciBVdCxfdDtlKCJHYXRld2F5VmVyc2lvbiIsVXQpLGZ1bmN0aW9uKGUpe2UuQ3VycmVudD0iMy41LjIiLGUuTGVnYWN5PSJsZWdhY3kifShVdHx8ZSgiR2F0ZXdheVZlcnNpb24iLFV0PXt9KSksZSgiQ29ubmVjdG9yVHlwZSIsX3QpLGZ1bmN0aW9uKGUpe2UuTVFUVD0ibXF0dCIsZS5NT0RCVVM9Im1vZGJ1cyIsZS5HUlBDPSJncnBjIixlLk9QQ1VBPSJvcGN1YSIsZS5CTEU9ImJsZSIsZS5SRVFVRVNUPSJyZXF1ZXN0IixlLkNBTj0iY2FuIixlLkJBQ05FVD0iYmFjbmV0IixlLk9EQkM9Im9kYmMiLGUuUkVTVD0icmVzdCIsZS5TTk1QPSJzbm1wIixlLkZUUD0iZnRwIixlLlNPQ0tFVD0ic29ja2V0IixlLlhNUFA9InhtcHAiLGUuT0NQUD0ib2NwcCIsZS5DVVNUT009ImN1c3RvbSJ9KF90fHxlKCJDb25uZWN0b3JUeXBlIixfdD17fSkpO2NvbnN0IEh0PWUoIkdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIixuZXcgTWFwKFtbX3QuTVFUVCwiTVFUVCJdLFtfdC5NT0RCVVMsIk1PREJVUyJdLFtfdC5HUlBDLCJHUlBDIl0sW190Lk9QQ1VBLCJPUENVQSJdLFtfdC5CTEUsIkJMRSJdLFtfdC5SRVFVRVNULCJSRVFVRVNUIl0sW190LkNBTiwiQ0FOIl0sW190LkJBQ05FVCwiQkFDTkVUIl0sW190Lk9EQkMsIk9EQkMiXSxbX3QuUkVTVCwiUkVTVCJdLFtfdC5TTk1QLCJTTk1QIl0sW190LkZUUCwiRlRQIl0sW190LlNPQ0tFVCwiU09DS0VUIl0sW190LlhNUFAsIlhNUFAiXSxbX3QuT0NQUCwiT0NQUCJdLFtfdC5DVVNUT00sIkNVU1RPTSJdXSkpLHp0PWUoIk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzEsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1jb2lscyJdLFsyLCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtZGlzY3JldGUtaW5wdXRzIl0sWzMsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdLFs0LCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtaW5wdXQtcmVnaXN0ZXJzIl0sWzUsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMud3JpdGUtc2luZ2xlLWNvaWwiXSxbNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1zaW5nbGUtaG9sZGluZy1yZWdpc3RlciJdLFsxNSwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1jb2lscyJdLFsxNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdXSkpO3ZhciBXdDtlKCJCQUNuZXRSZXF1ZXN0VHlwZXMiLFd0KSxmdW5jdGlvbihlKXtlLldyaXRlUHJvcGVydHk9IndyaXRlUHJvcGVydHkiLGUuUmVhZFByb3BlcnR5PSJyZWFkUHJvcGVydHkifShXdHx8ZSgiQkFDbmV0UmVxdWVzdFR5cGVzIixXdD17fSkpO2NvbnN0IGp0PWUoIkJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tXdC5Xcml0ZVByb3BlcnR5LCJnYXRld2F5LnJwYy53cml0ZS1wcm9wZXJ0eSJdLFtXdC5SZWFkUHJvcGVydHksImdhdGV3YXkucnBjLnJlYWQtcHJvcGVydHkiXV0pKTt2YXIgS3Q7ZSgiQkFDbmV0T2JqZWN0VHlwZXMiLEt0KSxmdW5jdGlvbihlKXtlLkJpbmFyeUlucHV0PSJiaW5hcnlJbnB1dCIsZS5CaW5hcnlPdXRwdXQ9ImJpbmFyeU91dHB1dCIsZS5BbmFsb2dJbnB1dD0iYW5hbG9nSW5wdXQiLGUuQW5hbG9nT3V0cHV0PSJhbmFsb2dPdXRwdXQiLGUuQmluYXJ5VmFsdWU9ImJpbmFyeVZhbHVlIixlLkFuYWxvZ1ZhbHVlPSJhbmFsb2dWYWx1ZSJ9KEt0fHxlKCJCQUNuZXRPYmplY3RUeXBlcyIsS3Q9e30pKTtjb25zdCAkdD1lKCJCQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tLdC5BbmFsb2dPdXRwdXQsImdhdGV3YXkucnBjLmFuYWxvZy1vdXRwdXQiXSxbS3QuQW5hbG9nSW5wdXQsImdhdGV3YXkucnBjLmFuYWxvZy1pbnB1dCJdLFtLdC5CaW5hcnlPdXRwdXQsImdhdGV3YXkucnBjLmJpbmFyeS1vdXRwdXQiXSxbS3QuQmluYXJ5SW5wdXQsImdhdGV3YXkucnBjLmJpbmFyeS1pbnB1dCJdLFtLdC5CaW5hcnlWYWx1ZSwiZ2F0ZXdheS5ycGMuYmluYXJ5LXZhbHVlIl0sW0t0LkFuYWxvZ1ZhbHVlLCJnYXRld2F5LnJwYy5hbmFsb2ctdmFsdWUiXV0pKTt2YXIgWXQ7ZSgiQkxFTWV0aG9kcyIsWXQpLGZ1bmN0aW9uKGUpe2UuV1JJVEU9IndyaXRlIixlLlJFQUQ9InJlYWQiLGUuU0NBTj0ic2NhbiJ9KFl0fHxlKCJCTEVNZXRob2RzIixZdD17fSkpO2NvbnN0IFF0PWUoIkJMRU1ldGhvZHNUcmFuc2xhdGVzIixuZXcgTWFwKFtbWXQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl0sW1l0LlJFQUQsImdhdGV3YXkucnBjLnJlYWQiXSxbWXQuU0NBTiwiZ2F0ZXdheS5ycGMuc2NhbiJdXSkpO3ZhciBKdCxYdDtlKCJDQU5CeXRlT3JkZXJzIixKdCksZnVuY3Rpb24oZSl7ZS5MSVRUTEU9IkxJVFRMRSIsZS5CSUc9IkJJRyJ9KEp0fHxlKCJDQU5CeXRlT3JkZXJzIixKdD17fSkpLGUoIlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzIixYdCksZnVuY3Rpb24oZSl7ZS5XUklURT0id3JpdGUifShYdHx8ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3MiLFh0PXt9KSk7Y29uc3QgWnQ9ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzIixuZXcgTWFwKFtbWHQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl1dKSk7dmFyIGVuO2UoIlNOTVBNZXRob2RzIixlbiksZnVuY3Rpb24oZSl7ZS5TRVQ9InNldCIsZS5NVUxUSVNFVD0ibXVsdGlzZXQiLGUuR0VUPSJnZXQiLGUuQlVMS1dBTEs9ImJ1bGt3YWxrIixlLlRBQkxFPSJ0YWJsZSIsZS5NVUxUSUdFVD0ibXVsdGlnZXQiLGUuR0VUTkVYVD0iZ2V0bmV4dCIsZS5CVUxLR0VUPSJidWxrZ2V0IixlLldBTEtTPSJ3YWxrIn0oZW58fGUoIlNOTVBNZXRob2RzIixlbj17fSkpO2NvbnN0IHRuPWUoIlNOTVBNZXRob2RzVHJhbnNsYXRpb25zIixuZXcgTWFwKFtbZW4uU0VULCJnYXRld2F5LnJwYy5zZXQiXSxbZW4uTVVMVElTRVQsImdhdGV3YXkucnBjLm11bHRpc2V0Il0sW2VuLkdFVCwiZ2F0ZXdheS5ycGMuZ2V0Il0sW2VuLkJVTEtXQUxLLCJnYXRld2F5LnJwYy5idWxrLXdhbGsiXSxbZW4uVEFCTEUsImdhdGV3YXkucnBjLnRhYmxlIl0sW2VuLk1VTFRJR0VULCJnYXRld2F5LnJwYy5tdWx0aS1nZXQiXSxbZW4uR0VUTkVYVCwiZ2F0ZXdheS5ycGMuZ2V0LW5leHQiXSxbZW4uQlVMS0dFVCwiZ2F0ZXdheS5ycGMuYnVsay1nZXQiXSxbZW4uV0FMS1MsImdhdGV3YXkucnBjLndhbGsiXV0pKTt2YXIgbm4sYW4sb24scm4sc24sbG47ZSgiSFRUUE1ldGhvZHMiLG5uKSxmdW5jdGlvbihlKXtlLkNPTk5FQ1Q9IkNPTk5FQ1QiLGUuREVMRVRFPSJERUxFVEUiLGUuR0VUPSJHRVQiLGUuSEVBRD0iSEVBRCIsZS5PUFRJT05TPSJPUFRJT05TIixlLlBBVENIPSJQQVRDSCIsZS5QT1NUPSJQT1NUIixlLlBVVD0iUFVUIixlLlRSQUNFPSJUUkFDRSJ9KG5ufHxlKCJIVFRQTWV0aG9kcyIsbm49e30pKSxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuKSxmdW5jdGlvbihlKXtlLlVURl84PSJ1dGYtOCJ9KGFufHxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuPXt9KSksZSgiQ29uZmlndXJhdGlvbk1vZGVzIixvbiksZnVuY3Rpb24oZSl7ZS5CQVNJQz0iYmFzaWMiLGUuQURWQU5DRUQ9ImFkdmFuY2VkIn0ob258fGUoIkNvbmZpZ3VyYXRpb25Nb2RlcyIsb249e30pKSxlKCJTZWN1cml0eVR5cGUiLHJuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyIsZS5DRVJUSUZJQ0FURVM9ImNlcnRpZmljYXRlcyJ9KHJufHxlKCJTZWN1cml0eVR5cGUiLHJuPXt9KSksZSgiUmVwb3J0U3RyYXRlZ3lUeXBlIixzbiksZnVuY3Rpb24oZSl7ZS5PbkNoYW5nZT0iT05fQ0hBTkdFIixlLk9uUmVwb3J0UGVyaW9kPSJPTl9SRVBPUlRfUEVSSU9EIixlLk9uQ2hhbmdlT3JSZXBvcnRQZXJpb2Q9Ik9OX0NIQU5HRV9PUl9SRVBPUlRfUEVSSU9EIn0oc258fGUoIlJlcG9ydFN0cmF0ZWd5VHlwZSIsc249e30pKSxlKCJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZSIsbG4pLGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0b3I9NmU0XT0iQ29ubmVjdG9yIixlW2UuRGV2aWNlPTNlNF09IkRldmljZSIsZVtlLktleT0xNWUzXT0iS2V5In0obG58fGUoIlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlIixsbj17fSkpO2NvbnN0IGNuPWUoIlJlcG9ydFN0cmF0ZWd5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW3NuLk9uQ2hhbmdlLCJnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5vbi1jaGFuZ2UiXSxbc24uT25SZXBvcnRQZXJpb2QsImdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5Lm9uLXJlcG9ydC1wZXJpb2QiXSxbc24uT25DaGFuZ2VPclJlcG9ydFBlcmlvZCwiZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kub24tY2hhbmdlLW9yLXJlcG9ydC1wZXJpb2QiXV0pKTt2YXIgcG47ZSgiTW9kZVR5cGUiLHBuKSxmdW5jdGlvbihlKXtlLk5PTkU9Ik5vbmUiLGUuU0lHTj0iU2lnbiIsZS5TSUdOQU5ERU5DUllQVD0iU2lnbkFuZEVuY3J5cHQifShwbnx8ZSgiTW9kZVR5cGUiLHBuPXt9KSk7Y29uc3QgbW49ZSgiU2VjdXJpdHlUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbcm4uQU5PTllNT1VTLCJnYXRld2F5LmJyb2tlci5zZWN1cml0eS10eXBlcy5hbm9ueW1vdXMiXSxbcm4uQkFTSUMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmJhc2ljIl0sW3JuLkNFUlRJRklDQVRFUywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuY2VydGlmaWNhdGVzIl1dKSk7dmFyIGRuO2UoIlJlc3RTZWN1cml0eVR5cGUiLGRuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyJ9KGRufHxlKCJSZXN0U2VjdXJpdHlUeXBlIixkbj17fSkpO2NvbnN0IHVuPWUoIlJlc3RTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tkbi5BTk9OWU1PVVMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmFub255bW91cyJdLFtkbi5CQVNJQywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuYmFzaWMiXV0pKSxnbj1lKCJNcXR0VmVyc2lvbnMiLFt7bmFtZTozLjEsdmFsdWU6M30se25hbWU6My4xMSx2YWx1ZTo0fSx7bmFtZTo1LHZhbHVlOjV9XSk7dmFyIGZuO2UoIk1hcHBpbmdUeXBlIixmbiksZnVuY3Rpb24oZSl7ZS5EQVRBPSJkYXRhIixlLlJFUVVFU1RTPSJyZXF1ZXN0cyIsZS5PUENVQT0iT1BDdWEifShmbnx8ZSgiTWFwcGluZ1R5cGUiLGZuPXt9KSk7Y29uc3QgeW49ZSgiTWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nIl0sW2ZuLk9QQ1VBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdXSkpLGJuPWUoIk1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbZm4uREFUQSwiZ2F0ZXdheS5kYXRhLW1hcHBpbmctaGludCJdLFtmbi5PUENVQSwiZ2F0ZXdheS5vcGN1YS1kYXRhLW1hcHBpbmctaGludCJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nLWhpbnQiXV0pKSxobj1lKCJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNzZWN0aW9uLW1hcHBpbmciXSxbZm4uT1BDVUEsdisiL2RvY3MvaW90LWdhdGV3YXkvY29uZmlnL29wYy11YS8jc2VjdGlvbi1tYXBwaW5nIl0sW2ZuLlJFUVVFU1RTLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNyZXF1ZXN0cy1tYXBwaW5nIl1dKSkseG49ZSgiUXVhbGl0eVR5cGVzIixbMCwxLDJdKSx2bj1lKCJRdWFsaXR5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzAsImdhdGV3YXkucW9zLmF0LW1vc3Qtb25jZSJdLFsxLCJnYXRld2F5LnFvcy5hdC1sZWFzdC1vbmNlIl0sWzIsImdhdGV3YXkucW9zLmV4YWN0bHktb25jZSJdXSkpO3ZhciB3bjtlKCJDb252ZXJ0b3JUeXBlIix3biksZnVuY3Rpb24oZSl7ZS5KU09OPSJqc29uIixlLkJZVEVTPSJieXRlcyIsZS5DVVNUT009ImN1c3RvbSJ9KHdufHxlKCJDb252ZXJ0b3JUeXBlIix3bj17fSkpO2NvbnN0IENuPWUoIkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1t3bi5KU09OLCJnYXRld2F5LkpTT04iXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMiXSxbd24uQ1VTVE9NLCJnYXRld2F5LmN1c3RvbSJdXSkpO3ZhciBUbixTbixrbjtlKCJTb3VyY2VUeXBlIixUbiksZnVuY3Rpb24oZSl7ZS5NU0c9Im1lc3NhZ2UiLGUuVE9QSUM9InRvcGljIixlLkNPTlNUPSJjb25zdGFudCJ9KFRufHxlKCJTb3VyY2VUeXBlIixUbj17fSkpLGUoIk9QQ1VhU291cmNlVHlwZSIsU24pLGZ1bmN0aW9uKGUpe2UuUEFUSD0icGF0aCIsZS5JREVOVElGSUVSPSJpZGVudGlmaWVyIixlLkNPTlNUPSJjb25zdGFudCJ9KFNufHxlKCJPUENVYVNvdXJjZVR5cGUiLFNuPXt9KSksZSgiRGV2aWNlSW5mb1R5cGUiLGtuKSxmdW5jdGlvbihlKXtlLkZVTEw9ImZ1bGwiLGUuUEFSVElBTD0icGFydGlhbCJ9KGtufHxlKCJEZXZpY2VJbmZvVHlwZSIsa249e30pKTtjb25zdCBMbj1lKCJTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbVG4uTVNHLCJnYXRld2F5LnNvdXJjZS10eXBlLm1zZyJdLFtUbi5UT1BJQywiZ2F0ZXdheS5zb3VyY2UtdHlwZS50b3BpYyJdLFtUbi5DT05TVCwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5jb25zdCJdLFtTbi5QQVRILCJnYXRld2F5LnNvdXJjZS10eXBlLnBhdGgiXSxbU24uSURFTlRJRklFUiwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5pZGVudGlmaWVyIl0sW1NuLkNPTlNULCJnYXRld2F5LnNvdXJjZS10eXBlLmNvbnN0Il1dKSk7dmFyIEZuLEluO2UoIlNlcnZlclNpZGVScGNUeXBlIixGbiksZnVuY3Rpb24oZSl7ZS5XaXRoUmVzcG9uc2U9InR3b1dheSIsZS5XaXRob3V0UmVzcG9uc2U9Im9uZVdheSJ9KEZufHxlKCJTZXJ2ZXJTaWRlUnBjVHlwZSIsRm49e30pKSxlKCJSZXF1ZXN0VHlwZSIsSW4pLGZ1bmN0aW9uKGUpe2UuQ09OTkVDVF9SRVFVRVNUPSJjb25uZWN0UmVxdWVzdHMiLGUuRElTQ09OTkVDVF9SRVFVRVNUPSJkaXNjb25uZWN0UmVxdWVzdHMiLGUuQVRUUklCVVRFX1JFUVVFU1Q9ImF0dHJpYnV0ZVJlcXVlc3RzIixlLkFUVFJJQlVURV9VUERBVEU9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuU0VSVkVSX1NJREVfUlBDPSJzZXJ2ZXJTaWRlUnBjIn0oSW58fGUoIlJlcXVlc3RUeXBlIixJbj17fSkpO2NvbnN0IEFuPWUoIlJlcXVlc3RUeXBlc1RyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW0luLkNPTk5FQ1RfUkVRVUVTVCwiZ2F0ZXdheS5yZXF1ZXN0LmNvbm5lY3QtcmVxdWVzdCJdLFtJbi5ESVNDT05ORUNUX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5kaXNjb25uZWN0LXJlcXVlc3QiXSxbSW4uQVRUUklCVVRFX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5hdHRyaWJ1dGUtcmVxdWVzdCJdLFtJbi5BVFRSSUJVVEVfVVBEQVRFLCJnYXRld2F5LnJlcXVlc3QuYXR0cmlidXRlLXVwZGF0ZSJdLFtJbi5TRVJWRVJfU0lERV9SUEMsImdhdGV3YXkucmVxdWVzdC5ycGMtY29ubmVjdGlvbiJdXSkpO3ZhciBObjtlKCJNYXBwaW5nS2V5c1R5cGUiLE5uKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5DVVNUT009ImV4dGVuc2lvbkNvbmZpZyIsZS5SUENfTUVUSE9EUz0icnBjX21ldGhvZHMiLGUuQVRUUklCVVRFU19VUERBVEVTPSJhdHRyaWJ1dGVzX3VwZGF0ZXMifShObnx8ZSgiTWFwcGluZ0tleXNUeXBlIixObj17fSkpO2NvbnN0IE1uPWUoIk1hcHBpbmdLZXlzUGFuZWxUaXRsZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LnRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5LmtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5LnJwYy1tZXRob2RzIl1dKSksRW49ZSgiTWFwcGluZ0tleXNBZGRLZXlUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tObi5BVFRSSUJVVEVTLCJnYXRld2F5LmFkZC1hdHRyaWJ1dGUiXSxbTm4uVElNRVNFUklFUywiZ2F0ZXdheS5hZGQtdGltZXNlcmllcyJdLFtObi5DVVNUT00sImdhdGV3YXkuYWRkLWtleSJdLFtObi5BVFRSSUJVVEVTX1VQREFURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZS11cGRhdGUiXSxbTm4uUlBDX01FVEhPRFMsImdhdGV3YXkuYWRkLXJwYy1tZXRob2QiXV0pKSxxbj1lKCJNYXBwaW5nS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW05uLkNVU1RPTSwiZ2F0ZXdheS5kZWxldGUta2V5Il0sW05uLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFtObi5SUENfTUVUSE9EUywiZ2F0ZXdheS5kZWxldGUtcnBjLW1ldGhvZCJdXSkpLERuPWUoIk1hcHBpbmdLZXlzTm9LZXlzVGV4dFRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkubm8tYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5Lm5vLXRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5Lm5vLWtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5Lm5vLXJwYy1tZXRob2RzIl1dKSk7dmFyIFBuLEduLE9uO2UoIlNlcnZlclNpZGVSUENUeXBlIixQbiksZnVuY3Rpb24oZSl7ZS5PTkVfV0FZPSJvbmVXYXkiLGUuVFdPX1dBWT0idHdvV2F5In0oUG58fGUoIlNlcnZlclNpZGVSUENUeXBlIixQbj17fSkpLGUoIk1hcHBpbmdWYWx1ZVR5cGUiLEduKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLklOVEVHRVI9ImludGVnZXIiLGUuRE9VQkxFPSJkb3VibGUiLGUuQk9PTEVBTj0iYm9vbGVhbiJ9KEdufHxlKCJNYXBwaW5nVmFsdWVUeXBlIixHbj17fSkpLGUoIk1vZGlmaWVyVHlwZSIsT24pLGZ1bmN0aW9uKGUpe2UuRElWSURFUj0iZGl2aWRlciIsZS5NVUxUSVBMSUVSPSJtdWx0aXBsaWVyIn0oT258fGUoIk1vZGlmaWVyVHlwZSIsT249e30pKTtjb25zdCBSbj1lKCJNb2RpZmllclR5cGVzTWFwIixuZXcgTWFwKFtbT24uRElWSURFUix7bmFtZToiZ2F0ZXdheS5kaXZpZGVyIixpY29uOiJtZGk6ZGl2aXNpb24ifV0sW09uLk1VTFRJUExJRVIse25hbWU6ImdhdGV3YXkubXVsdGlwbGllciIsaWNvbjoibWRpOm11bHRpcGxpY2F0aW9uIn1dXSkpLFZuPWUoIm1hcHBpbmdWYWx1ZVR5cGVzTWFwIixuZXcgTWFwKFtbR24uU1RSSU5HLHtuYW1lOiJ2YWx1ZS5zdHJpbmciLGljb246Im1kaTpmb3JtYXQtdGV4dCJ9XSxbR24uSU5URUdFUix7bmFtZToidmFsdWUuaW50ZWdlciIsaWNvbjoibWRpOm51bWVyaWMifV0sW0duLkRPVUJMRSx7bmFtZToidmFsdWUuZG91YmxlIixpY29uOiJtZGk6bnVtZXJpYyJ9XSxbR24uQk9PTEVBTix7bmFtZToidmFsdWUuYm9vbGVhbiIsaWNvbjoibWRpOmNoZWNrYm94LW1hcmtlZC1vdXRsaW5lIn1dXSkpLEJuPWUoIkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbd24uSlNPTiwiZ2F0ZXdheS5KU09OLWhpbnQiXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMtaGludCJdLFt3bi5DVVNUT00sImdhdGV3YXkuY3VzdG9tLWhpbnQiXV0pKTt2YXIgVW47ZSgiU2VjdXJpdHlQb2xpY3kiLFVuKSxmdW5jdGlvbihlKXtlLkJBU0lDMTI4PSJCYXNpYzEyOFJzYTE1IixlLkJBU0lDMjU2PSJCYXNpYzI1NiIsZS5CQVNJQzI1NlNIQT0iQmFzaWMyNTZTaGEyNTYifShVbnx8ZSgiU2VjdXJpdHlQb2xpY3kiLFVuPXt9KSk7Y29uc3QgX249ZSgiU2VjdXJpdHlQb2xpY3lUeXBlcyIsW3t2YWx1ZTpVbi5CQVNJQzEyOCxuYW1lOiJCYXNpYzEyOFJTQTE1In0se3ZhbHVlOlVuLkJBU0lDMjU2LG5hbWU6IkJhc2ljMjU2In0se3ZhbHVlOlVuLkJBU0lDMjU2U0hBLG5hbWU6IkJhc2ljMjU2U0hBMjU2In1dKTt2YXIgSG47ZSgiTW9kYnVzUHJvdG9jb2xUeXBlIixIbiksZnVuY3Rpb24oZSl7ZS5UQ1A9InRjcCIsZS5VRFA9InVkcCIsZS5TZXJpYWw9InNlcmlhbCJ9KEhufHxlKCJNb2RidXNQcm90b2NvbFR5cGUiLEhuPXt9KSk7Y29uc3Qgem49ZSgiTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAiLG5ldyBNYXAoW1tIbi5UQ1AsIlRDUCJdLFtIbi5VRFAsIlVEUCJdLFtIbi5TZXJpYWwsIlNlcmlhbCJdXSkpO3ZhciBXbixqbjtlKCJNb2RidXNNZXRob2RUeXBlIixXbiksZnVuY3Rpb24oZSl7ZS5TT0NLRVQ9InNvY2tldCIsZS5SVFU9InJ0dSJ9KFdufHxlKCJNb2RidXNNZXRob2RUeXBlIixXbj17fSkpLGUoIk1vZGJ1c1NlcmlhbE1ldGhvZFR5cGUiLGpuKSxmdW5jdGlvbihlKXtlLlJUVT0icnR1IixlLkFTQ0lJPSJhc2NpaSJ9KGpufHxlKCJNb2RidXNTZXJpYWxNZXRob2RUeXBlIixqbj17fSkpO2NvbnN0IEtuPWUoIk1vZGJ1c01ldGhvZExhYmVsc01hcCIsbmV3IE1hcChbW1duLlNPQ0tFVCwiU29ja2V0Il0sW1duLlJUVSwiUlRVIl0sW2puLkFTQ0lJLCJBU0NJSSJdXSkpLCRuPWUoIk1vZGJ1c0J5dGVTaXplcyIsWzUsNiw3LDhdKTt2YXIgWW47ZSgiTW9kYnVzUGFyaXR5IixZbiksZnVuY3Rpb24oZSl7ZS5FdmVuPSJFIixlLk9kZD0iTyIsZS5Ob25lPSJOIn0oWW58fGUoIk1vZGJ1c1Bhcml0eSIsWW49e30pKTtjb25zdCBRbj1lKCJNb2RidXNQYXJpdHlMYWJlbHNNYXAiLG5ldyBNYXAoW1tZbi5FdmVuLCJFdmVuIl0sW1luLk9kZCwiT2RkIl0sW1luLk5vbmUsIk5vbmUiXV0pKTt2YXIgSm4sWG47ZSgiTW9kYnVzT3JkZXJUeXBlIixKbiksZnVuY3Rpb24oZSl7ZS5CSUc9IkJJRyIsZS5MSVRUTEU9IkxJVFRMRSJ9KEpufHxlKCJNb2RidXNPcmRlclR5cGUiLEpuPXt9KSksZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbiksZnVuY3Rpb24oZSl7ZS5Ib2xkaW5nUmVnaXN0ZXJzPSJob2xkaW5nX3JlZ2lzdGVycyIsZS5Db2lsc0luaXRpYWxpemVyPSJjb2lsc19pbml0aWFsaXplciIsZS5JbnB1dFJlZ2lzdGVycz0iaW5wdXRfcmVnaXN0ZXJzIixlLkRpc2NyZXRlSW5wdXRzPSJkaXNjcmV0ZV9pbnB1dHMifShYbnx8ZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbj17fSkpO2NvbnN0IFpuPWUoIk1vZGJ1c1JlZ2lzdGVyVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbWG4uSG9sZGluZ1JlZ2lzdGVycywiZ2F0ZXdheS5ob2xkaW5nX3JlZ2lzdGVycyJdLFtYbi5Db2lsc0luaXRpYWxpemVyLCJnYXRld2F5LmNvaWxzX2luaXRpYWxpemVyIl0sW1huLklucHV0UmVnaXN0ZXJzLCJnYXRld2F5LmlucHV0X3JlZ2lzdGVycyJdLFtYbi5EaXNjcmV0ZUlucHV0cywiZ2F0ZXdheS5kaXNjcmV0ZV9pbnB1dHMiXV0pKTt2YXIgZWE7ZSgiTW9kYnVzRGF0YVR5cGUiLGVhKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLkJZVEVTPSJieXRlcyIsZS5CSVRTPSJiaXRzIixlLklOVDg9IjhpbnQiLGUuVUlOVDg9Ijh1aW50IixlLkZMT0FUOD0iOGZsb2F0IixlLklOVDE2PSIxNmludCIsZS5VSU5UMTY9IjE2dWludCIsZS5GTE9BVDE2PSIxNmZsb2F0IixlLklOVDMyPSIzMmludCIsZS5VSU5UMzI9IjMydWludCIsZS5GTE9BVDMyPSIzMmZsb2F0IixlLklOVDY0PSI2NGludCIsZS5VSU5UNjQ9IjY0dWludCIsZS5GTE9BVDY0PSI2NGZsb2F0In0oZWF8fGUoIk1vZGJ1c0RhdGFUeXBlIixlYT17fSkpO2NvbnN0IHRhPWUoIk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzIixbZWEuQllURVMsZWEuQklUUyxlYS5TVFJJTkddKTt2YXIgbmEsYWE7ZSgiTW9kYnVzT2JqZWN0Q291bnRCeURhdGFUeXBlIixuYSksZnVuY3Rpb24oZSl7ZVtlWyI4aW50Il09MV09IjhpbnQiLGVbZVsiOHVpbnQiXT0xXT0iOHVpbnQiLGVbZVsiOGZsb2F0Il09MV09IjhmbG9hdCIsZVtlWyIxNmludCJdPTFdPSIxNmludCIsZVtlWyIxNnVpbnQiXT0xXT0iMTZ1aW50IixlW2VbIjE2ZmxvYXQiXT0xXT0iMTZmbG9hdCIsZVtlWyIzMmludCJdPTJdPSIzMmludCIsZVtlWyIzMnVpbnQiXT0yXT0iMzJ1aW50IixlW2VbIjMyZmxvYXQiXT0yXT0iMzJmbG9hdCIsZVtlWyI2NGludCJdPTRdPSI2NGludCIsZVtlWyI2NHVpbnQiXT00XT0iNjR1aW50IixlW2VbIjY0ZmxvYXQiXT00XT0iNjRmbG9hdCJ9KG5hfHxlKCJNb2RidXNPYmplY3RDb3VudEJ5RGF0YVR5cGUiLG5hPXt9KSksZSgiTW9kYnVzVmFsdWVLZXkiLGFhKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5BVFRSSUJVVEVTX1VQREFURVM9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuUlBDX1JFUVVFU1RTPSJycGMifShhYXx8ZSgiTW9kYnVzVmFsdWVLZXkiLGFhPXt9KSk7Y29uc3Qgb2E9ZSgiTW9kYnVzS2V5c1BhbmVsVGl0bGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5LmF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS50aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkucnBjLXJlcXVlc3RzIl1dKSksaWE9ZSgiTW9kYnVzS2V5c0FkZEtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmFkZC10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hZGQtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuYWRkLXJwYy1yZXF1ZXN0Il1dKSkscmE9ZSgiTW9kYnVzS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuZGVsZXRlLXJwYy1yZXF1ZXN0Il1dKSksc2E9ZSgiTW9kYnVzS2V5c05vS2V5c1RleHRUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS5uby10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5uby1hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkubm8tcnBjLXJlcXVlc3RzIl1dKSksbGE9ZSgiTW9kYnVzQmF1ZHJhdGVzIixbNDgwMCw5NjAwLDE5MjAwLDM4NDAwLDU3NjAwLDExNTIwMCwyMzA0MDAsNDYwODAwLDkyMTYwMF0pO2NsYXNzIGNhe2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsidHMiLCJzdGF0dXMiLCJtZXNzYWdlIl0sdGhpcy5nYXRld2F5TG9nTGlua3M9W3tuYW1lOiJHZW5lcmFsIixrZXk6IkxPR1MifSx7bmFtZToiU2VydmljZSIsa2V5OiJTRVJWSUNFX0xPR1MifSx7bmFtZToiQ29ubmVjdGlvbiIsa2V5OiJDT05ORUNUSU9OX0xPR1MifSx7bmFtZToiU3RvcmFnZSIsa2V5OiJTVE9SQUdFX0xPR1MifSx7a2V5OiJFWFRFTlNJT05TX0xPR1MiLG5hbWU6IkV4dGVuc2lvbiJ9XTtjb25zdCBlPXtwcm9wZXJ0eToidHMiLGRpcmVjdGlvbjp3LkRFU0N9O3RoaXMucGFnZUxpbms9bmV3IEMoMTAsMCxudWxsLGUpLHRoaXMuZGF0YVNvdXJjZT1uZXcgeShbXSl9bmdPbkluaXQoKXt0aGlzLnVwZGF0ZVdpZGdldFRpdGxlKCl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3I9dGhpcy5wYWdpbmF0b3IsdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vblRpbWV3aW5kb3dDaGFuZ2VGdW5jdGlvbj1lPT4odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vcHRpb25zLnRpbWVXaW5kb3dDb25maWc9ZSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksZSksdGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmxvZ0xpbmtzPVt7a2V5OmAke2Uua2V5fV9MT0dTYCxuYW1lOiJDb25uZWN0b3IiLGZpbHRlckZuOmU9PiFlLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX0se2tleTpgJHtlLmtleX1fTE9HU2AsbmFtZToiQ29udmVydGVyIixmaWx0ZXJGbjplPT5lLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX1dfWVsc2UgdGhpcy5sb2dMaW5rcz10aGlzLmdhdGV3YXlMb2dMaW5rczt0aGlzLmFjdGl2ZUxpbms9dGhpcy5sb2dMaW5rc1swXSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXVwZGF0ZVdpZGdldFRpdGxlKCl7aWYodGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LndpZGdldENvbmZpZy50aXRsZSx0PSIke2Nvbm5lY3Rvck5hbWV9IjtpZihlLmluY2x1ZGVzKHQpKXtjb25zdCBuPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmN0eC53aWRnZXRUaXRsZT1lLnJlcGxhY2UodCxuLmtleSl9fX11cGRhdGVEYXRhKCl7aWYodGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhLmxlbmd0aCYmdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhWzBdKXtsZXQgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGFbMF0uZGF0YS5tYXAoKGU9Pntjb25zdCB0PXt0czplWzBdLGtleTp0aGlzLmFjdGl2ZUxpbmsua2V5LG1lc3NhZ2U6ZVsxXSxzdGF0dXM6IklOVkFMSUQgTE9HIEZPUk1BVCJ9O3RyeXt0Lm1lc3NhZ2U9L1xbKC4qKS8uZXhlYyhlWzFdKVswXX1jYXRjaChuKXt0Lm1lc3NhZ2U9ZVsxXX10cnl7dC5zdGF0dXM9ZVsxXS5tYXRjaCgvXHwoXHcrKVx8LylbMV19Y2F0Y2goZSl7dC5zdGF0dXM9IklOVkFMSUQgTE9HIEZPUk1BVCJ9cmV0dXJuIHR9KSk7dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuJiYoZT1lLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuKGUpKSkpLHRoaXMuZGF0YVNvdXJjZS5kYXRhPWV9fW9uVGFiQ2hhbmdlZChlKXt0aGlzLmFjdGl2ZUxpbms9ZSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXN0YXR1c0NsYXNzKGUpe3N3aXRjaChlKXtjYXNlIHF0LkRFQlVHOnJldHVybiJzdGF0dXMgc3RhdHVzLWRlYnVnIjtjYXNlIHF0LldBUk5JTkc6cmV0dXJuInN0YXR1cyBzdGF0dXMtd2FybmluZyI7Y2FzZSBxdC5FUlJPUjpjYXNlIHF0LkVYQ0VQVElPTjpyZXR1cm4ic3RhdHVzIHN0YXR1cy1lcnJvciI7ZGVmYXVsdDpyZXR1cm4ic3RhdHVzIHN0YXR1cy1pbmZvIn19c3RhdHVzQ2xhc3NNc2coZSl7aWYoZT09PXF0LkVYQ0VQVElPTilyZXR1cm4ibXNnLXN0YXR1cy1leGNlcHRpb24ifXRyYWNrQnlMb2dUcyhlLHQpe3JldHVybiB0LnRzfWNoYW5nZVN1YnNjcmlwdGlvbigpe3RoaXMuY3R4LmRhdGFzb3VyY2VzJiZ0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlcyYmKHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlc1swXS5kYXRhS2V5cz1be25hbWU6dGhpcy5hY3RpdmVMaW5rLmtleSx0eXBlOlQudGltZXNlcmllcyxzZXR0aW5nczp7fX1dLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5jYWxsYmFja3Mub25EYXRhVXBkYXRlZD0oKT0+e3RoaXMudXBkYXRlRGF0YSgpfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjYSxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Y2Esc2VsZWN0b3I6InRiLWdhdGV3YXktbG9ncyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToic2VhcmNoSW5wdXRGaWVsZCIsZmlyc3Q6ITAscHJlZGljYXRlOlsic2VhcmNoSW5wdXQiXSxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic29ydCIsZmlyc3Q6ITAscHJlZGljYXRlOmcsZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InBhZ2luYXRvciIsZmlyc3Q6ITAscHJlZGljYXRlOmgsZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRUYWJsZSxzZWxlY3RvcjoibWF0LXRhYmxlLCB0YWJsZVttYXQtdGFibGVdIixleHBvcnRBczpbIm1hdFRhYmxlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsRGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyQ2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyUm93RGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyUm93RGVmXSIsaW5wdXRzOlsibWF0SGVhZGVyUm93RGVmIiwibWF0SGVhZGVyUm93RGVmU3RpY2t5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDb2x1bW5EZWYsc2VsZWN0b3I6IlttYXRDb2x1bW5EZWZdIixpbnB1dHM6WyJtYXRDb2x1bW5EZWYiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGxEZWYsc2VsZWN0b3I6IlttYXRDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRSb3dEZWYsc2VsZWN0b3I6IlttYXRSb3dEZWZdIixpbnB1dHM6WyJtYXRSb3dEZWZDb2x1bW5zIiwibWF0Um93RGVmV2hlbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbCxzZWxlY3RvcjoibWF0LWhlYWRlci1jZWxsLCB0aFttYXQtaGVhZGVyLWNlbGxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGwsc2VsZWN0b3I6Im1hdC1jZWxsLCB0ZFttYXQtY2VsbF0ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0SGVhZGVyUm93LHNlbGVjdG9yOiJtYXQtaGVhZGVyLXJvdywgdHJbbWF0LWhlYWRlci1yb3ddIixleHBvcnRBczpbIm1hdEhlYWRlclJvdyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0Um93LHNlbGVjdG9yOiJtYXQtcm93LCB0clttYXQtcm93XSIsZXhwb3J0QXM6WyJtYXRSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp4Lk1hdFBhZ2luYXRvcixzZWxlY3RvcjoibWF0LXBhZ2luYXRvciIsaW5wdXRzOlsiY29sb3IiLCJwYWdlSW5kZXgiLCJsZW5ndGgiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImhpZGVQYWdlU2l6ZSIsInNob3dGaXJzdExhc3RCdXR0b25zIiwic2VsZWN0Q29uZmlnIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsicGFnZSJdLGV4cG9ydEFzOlsibWF0UGFnaW5hdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp6Lk1hdERpdmlkZXIsc2VsZWN0b3I6Im1hdC1kaXZpZGVyIixpbnB1dHM6WyJ2ZXJ0aWNhbCIsImluc2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXYsc2VsZWN0b3I6IlttYXQtdGFiLW5hdi1iYXJdIixpbnB1dHM6WyJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJkaXNhYmxlUmlwcGxlIiwiY29sb3IiLCJ0YWJQYW5lbCJdLGV4cG9ydEFzOlsibWF0VGFiTmF2QmFyIiwibWF0VGFiTmF2Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXZQYW5lbCxzZWxlY3RvcjoibWF0LXRhYi1uYXYtcGFuZWwiLGlucHV0czpbImlkIl0sZXhwb3J0QXM6WyJtYXRUYWJOYXZQYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiTGluayxzZWxlY3RvcjoiW21hdC10YWItbGlua10sIFttYXRUYWJMaW5rXSIsaW5wdXRzOlsiYWN0aXZlIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJpZCJdLGV4cG9ydEFzOlsibWF0VGFiTGluayJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUxvZ3NDb21wb25lbnQiLGNhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmNhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWxvZ3MiLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2N0eDpbe3R5cGU6YX1dLGRpYWxvZ1JlZjpbe3R5cGU6YX1dLHNlYXJjaElucHV0RmllbGQ6W3t0eXBlOm8sYXJnczpbInNlYXJjaElucHV0Il19XSxzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0scGFnaW5hdG9yOlt7dHlwZTpvLGFyZ3M6W2hdfV19fSk7Y2xhc3MgcGF7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLnV0aWxzPW4sdGhpcy5pc051bWVyaWNEYXRhPSExLHRoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3RhdGlzdGljc0tleXM9W10sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnM9e2NhbGxiYWNrczp7b25EYXRhVXBkYXRlZDooKT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfSx1c2VEYXNoYm9hcmRUaW1ld2luZG93OiExLGxlZ2VuZENvbmZpZzp7cG9zaXRpb246Uy5ib3R0b219fSx0aGlzLmluaXQ9KCk9Pnt0aGlzLmZsb3RDdHg9eyRzY29wZTp0aGlzLmN0eC4kc2NvcGUsJGluamVjdG9yOnRoaXMuY3R4LiRpbmplY3Rvcix1dGlsczp0aGlzLmN0eC51dGlscyxpc01vYmlsZTp0aGlzLmN0eC5pc01vYmlsZSxpc0VkaXQ6dGhpcy5jdHguaXNFZGl0LHN1YnNjcmlwdGlvbkFwaTp0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGksZGV0ZWN0Q2hhbmdlczp0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzLHNldHRpbmdzOnRoaXMuY3R4LnNldHRpbmdzfX0sdGhpcy51cGRhdGVDaGFydD0oKT0+e30sdGhpcy5yZXNpemU9KCk9Pnt9O2NvbnN0IGE9e3Byb3BlcnR5OiIwIixkaXJlY3Rpb246dy5ERVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwwLG51bGwsYSksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiMCIsIjEiXSx0aGlzLmRhdGFTb3VyY2U9bmV3IHkoW10pLHRoaXMuc3RhdGlzdGljRm9ybT10aGlzLmZiLmdyb3VwKHtzdGF0aXN0aWNLZXk6W251bGwsW11dfSksdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e3RoaXMuY29tbWFuZE9iaj1udWxsLHRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5jb21tYW5kT2JqPXRoaXMuY29tbWFuZHMuZmluZCgodD0+dC5hdHRyaWJ1dGVPbkdhdGV3YXk9PT1lKSkpLHRoaXMuc3Vic2NyaXB0aW9uSW5mbyYmdGhpcy5jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhc291cmNlc1swXS5lbnRpdHksZSl9KSl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKCk9PnRoaXMuc29ydERhdGEoKSkpLHRoaXMuaW5pdCgpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXMubGVuZ3RoKXtjb25zdCBlPXRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZW50aXR5O2lmKGUuaWQuaWQ9PT1rKXJldHVybjt0aGlzLmdlbmVyYWw/dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eVRpbWVzZXJpZXNMYXRlc3QoZS5pZCkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGU9PmUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1Byb2R1Y2VkIil8fGUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1NlbnQiKSkpO3RoaXMuY3JlYXRlR2VuZXJhbENoYXJ0c1N1YnNjcmlwdGlvbihlLG4pfSkpOnRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKGUuaWQsTC5TSEFSRURfU0NPUEUsWyJnZW5lcmFsX2NvbmZpZ3VyYXRpb24iXSkuc3Vic2NyaWJlKCh0PT57dCYmdC5sZW5ndGgmJih0aGlzLmNvbW1hbmRzPXRbMF0udmFsdWUuc3RhdGlzdGljcy5jb21tYW5kcywhdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWUmJnRoaXMuY29tbWFuZHMmJnRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5Iikuc2V0VmFsdWUodGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpLHRoaXMuY3JlYXRlQ2hhcnRzU3Vic2NyaXB0aW9uKGUsdGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpKSl9KSl9fW5hdmlnYXRlVG9TdGF0aXN0aWNzKCl7Y29uc3QgZT1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTt0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIub3BlblN0YXRlKCJjb25maWd1cmF0aW9uIixlKX1zb3J0RGF0YSgpe3RoaXMuZGF0YVNvdXJjZS5zb3J0RGF0YSh0aGlzLmRhdGFTb3VyY2UuZGF0YSx0aGlzLnNvcnQpfW9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGUpe3RoaXMubGVnZW5kRGF0YS5rZXlzW2VdLmRhdGFLZXkuaGlkZGVuPSF0aGlzLmxlZ2VuZERhdGEua2V5c1tlXS5kYXRhS2V5LmhpZGRlbix0aGlzLnN1YnNjcmlwdGlvbi51cGRhdGVEYXRhVmlzaWJpbGl0eShlKX1jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1be25hbWU6dCxsYWJlbDp0fV0sdGhpcy5zdWJzY3JpcHRpb25JbmZvPW4sdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWNyZWF0ZUdlbmVyYWxDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1bXSx0Py5sZW5ndGgmJnQuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUsbGFiZWw6ZX0pfSkpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZGF0YUtleXMuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUubmFtZSxsYWJlbDplLmxhYmVsfSl9KSksdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0KCl7dGhpcy5yZXNpemUkJiZ0aGlzLnJlc2l6ZSQuZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uRGF0YVVwZGF0ZUVycm9yKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5wYXJzZUV4Y2VwdGlvbihlKTtsZXQgbj10Lm5hbWU7dC5tZXNzYWdlJiYobis9IjogIit0Lm1lc3NhZ2UpLGNvbnNvbGUuZXJyb3Iobil9b25EYXRhVXBkYXRlZCgpe3RoaXMuaXNEYXRhT25seU51bWJlcnMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJih0aGlzLmNoYXJ0SW5pdGVkfHx0aGlzLmluaXRDaGFydCgpKX1pbml0Q2hhcnQoKXt0aGlzLmNoYXJ0SW5pdGVkPSEwLHRoaXMuZmxvdEN0eC4kY29udGFpbmVyPSQodGhpcy5zdGF0aXN0aWNDaGFydC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc2l6ZSQub2JzZXJ2ZSh0aGlzLnN0YXRpc3RpY0NoYXJ0Lm5hdGl2ZUVsZW1lbnQpfWlzRGF0YU9ubHlOdW1iZXJzKCl7dGhpcy5nZW5lcmFsP3RoaXMuaXNOdW1lcmljRGF0YT0hMDoodGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5zdWJzY3JpcHRpb24uZGF0YS5sZW5ndGg/dGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhOltdLHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCYmIXRoaXMuZGF0YVR5cGVEZWZpbmVkJiYodGhpcy5kYXRhVHlwZURlZmluZWQ9ITAsdGhpcy5pc051bWVyaWNEYXRhPXRoaXMuZGF0YVNvdXJjZS5kYXRhLmV2ZXJ5KChlPT4haXNOYU4oK2VbMV0pKSkpKX1jaGFuZ2VTdWJzY3JpcHRpb24oZSl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMucmVzZXQoKSx0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LnN1YnNjcmlwdGlvbkFwaS5jcmVhdGVTdWJzY3JpcHRpb25Gcm9tSW5mbyhBLnRpbWVzZXJpZXMsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3Vic2NyaXB0aW9uPWUsdGhpcy5pc0RhdGFPbmx5TnVtYmVycygpLHRoaXMubGVnZW5kRGF0YT10aGlzLnN1YnNjcmlwdGlvbi5sZWdlbmREYXRhLHRoaXMuZmxvdEN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uPWUsdGhpcy5yZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuY3R4LmRldGVjdENoYW5nZXMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJnRoaXMuaW5pdENoYXJ0KCl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpYLlV0aWxzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cGEsc2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsaW5wdXRzOntjdHg6ImN0eCIsZ2VuZXJhbDoiZ2VuZXJhbCJ9LHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzb3J0IixmaXJzdDohMCxwcmVkaWNhdGU6ZyxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic3RhdGlzdGljQ2hhcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInN0YXRpc3RpY0NoYXJ0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0Lmx0LW1kPSJjb2x1bW4iPlxuICA8bWF0LWNhcmQgW2Zvcm1Hcm91cF09InN0YXRpc3RpY0Zvcm0iICpuZ0lmPSIhZ2VuZXJhbCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0YXRpc3RpY0tleSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGtleSBvZiBzdGF0aXN0aWNzS2V5cyIgW3ZhbHVlXT0ia2V5Ij5cbiAgICAgICAgICB7eyBrZXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb21tYW5kIG9mIGNvbW1hbmRzIiBbdmFsdWVdPSJjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSI+XG4gICAgICAgICAge3sgY29tbWFuZC5hdHRyaWJ1dGVPbkdhdGV3YXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1lcnJvclxuICAgICAgKm5nSWY9IiFzdGF0aXN0aWNzS2V5cy5sZW5ndGggJiYgIWNvbW1hbmRzLmxlbmd0aCI+XG4gICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWMtY29tbWFuZHMtZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0ibmF2aWdhdGVUb1N0YXRpc3RpY3MoKSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3MtYnV0dG9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIiAqbmdJZj0iY29tbWFuZE9iaiI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IFt2YWx1ZV09ImNvbW1hbmRPYmouY29tbWFuZCIgZGlzYWJsZWQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9tYXQtY2FyZD5cbiAgPGRpdiBjbGFzcz0iY2hhcnQtYm94IiBmeExheW91dD0iY29sdW1uIj5cbiAgICA8ZGl2IGNsYXNzPSJjaGFydC1jb250YWluZXIiICNzdGF0aXN0aWNDaGFydCBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+PC9kaXY+XG4gICAgPHRhYmxlIFtmeFNob3ddPSIhaXNOdW1lcmljRGF0YSIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgICAgIG1hdFNvcnREaXNhYmxlQ2xlYXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMCI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7IFwnd2lkZ2V0cy5nYXRld2F5LmNyZWF0ZWQtdGltZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCByb3c7IGxldCByb3dJbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICB7eyByb3dbMF18IGRhdGU6XCd5eXl5LU1NLWRkIEhIOm1tOnNzXCcgfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9IjEiPlxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdyI+XG4gICAgICAgICAge3sgcm93WzFdIH19XG4gICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj0iZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IlxuICAgICAgICAgICAgICAgKm1hdFJvd0RlZj0ibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uczsiPjwvbWF0LXJvdz5cbiAgICA8L3RhYmxlPlxuICAgIDxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwICYmICFpc051bWVyaWNEYXRhIlxuICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7IFwnYXR0cmlidXRlLm5vLXRlbGVtZXRyeS10ZXh0XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGRpdiBmeEZsZXggY2xhc3M9ImxlZ2VuZCIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgW2Z4U2hvd109ImlzTnVtZXJpY0RhdGEiPlxuICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWtleXMiICpuZ0Zvcj0ibGV0IGxlZ2VuZEtleSBvZiBsZWdlbmREYXRhPy5rZXlzIiBmeExheW91dD0icm93IlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZ2VuZC1saW5lIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09ImxlZ2VuZEtleS5kYXRhS2V5LmNvbG9yIj48L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1sYWJlbCJcbiAgICAgICAgICAgICAoY2xpY2spPSJvbkxlZ2VuZEtleUhpZGRlbkNoYW5nZShsZWdlbmRLZXkuZGF0YUluZGV4KSJcbiAgICAgICAgICAgICBbY2xhc3NdPSJ7IFwnaGlkZGVuLWxhYmVsXCc6IGxlZ2VuZERhdGEua2V5c1tsZWdlbmRLZXkuZGF0YUluZGV4XS5kYXRhS2V5LmhpZGRlbiB9IlxuICAgICAgICAgICAgIFtpbm5lckhUTUxdPSJsZWdlbmRLZXkuZGF0YUtleS5sYWJlbCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BhZGRpbmc6MH06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXJ7aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDo0MCU7aGVpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OjM1cHg7cGFkZGluZzoxNXB4O2dhcDoyMnB4fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzUwcHgpezpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDoxMDAlfX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveCw6aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtmbGV4LWdyb3c6MX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveHtvdmVyZmxvdzphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcj4qe2hlaWdodDoxMDAlfTpob3N0IC5sZWdlbmR7ZmxleC13cmFwOndyYXA7d2lkdGg6MTAwJTtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206NHB4O21hcmdpbi10b3A6MTVweH06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVse3BhZGRpbmc6MnB4IDIwcHggMnB4IDEwcHg7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWwuaGlkZGVuLWxhYmVse3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7b3BhY2l0eTouNn06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTVweDtoZWlnaHQ6M3B4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7b3V0bGluZTpub25lfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmhlLk1hdENhcmQsc2VsZWN0b3I6Im1hdC1jYXJkIixpbnB1dHM6WyJhcHBlYXJhbmNlIl0sZXhwb3J0QXM6WyJtYXRDYXJkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5EYXRlUGlwZSxuYW1lOiJkYXRlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U3RhdGlzdGljc0NvbXBvbmVudCIscGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtbWQ9ImNvbHVtbiI+XG4gIDxtYXQtY2FyZCBbZm9ybUdyb3VwXT0ic3RhdGlzdGljRm9ybSIgKm5nSWY9IiFnZW5lcmFsIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3RhdGlzdGljS2V5Ij5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQga2V5IG9mIHN0YXRpc3RpY3NLZXlzIiBbdmFsdWVdPSJrZXkiPlxuICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgY29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQuYXR0cmlidXRlT25HYXRld2F5Ij5cbiAgICAgICAgICB7eyBjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iIXN0YXRpc3RpY3NLZXlzLmxlbmd0aCAmJiAhY29tbWFuZHMubGVuZ3RoIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpYy1jb21tYW5kcy1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPGRpdj5cbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJuYXZpZ2F0ZVRvU3RhdGlzdGljcygpIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljcy1idXR0b25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siICpuZ0lmPSJjb21tYW5kT2JqIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW3ZhbHVlXT0iY29tbWFuZE9iai5jb21tYW5kIiBkaXNhYmxlZD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L21hdC1jYXJkPlxuICA8ZGl2IGNsYXNzPSJjaGFydC1ib3giIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgI3N0YXRpc3RpY0NoYXJ0IFtmeFNob3ddPSJpc051bWVyaWNEYXRhIj48L2Rpdj5cbiAgICA8dGFibGUgW2Z4U2hvd109IiFpc051bWVyaWNEYXRhIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIlxuICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSIwIj5cbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdzsgbGV0IHJvd0luZGV4ID0gaW5kZXgiPlxuICAgICAgICAgIHt7IHJvd1swXXwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMSI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiA3MCUiPnt7IFwnd2lkZ2V0cy5nYXRld2F5Lm1lc3NhZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgcm93Ij5cbiAgICAgICAgICB7eyByb3dbMV0gfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG1hdC1oZWFkZXItcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCJcbiAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICA8bWF0LXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgIDwvdGFibGU+XG4gICAgPHNwYW4gW2Z4U2hvd109ImRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDAgJiYgIWlzTnVtZXJpY0RhdGEiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8ZGl2IGZ4RmxleCBjbGFzcz0ibGVnZW5kIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIiBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+XG4gICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQta2V5cyIgKm5nRm9yPSJsZXQgbGVnZW5kS2V5IG9mIGxlZ2VuZERhdGE/LmtleXMiIGZ4TGF5b3V0PSJyb3ciXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiPlxuICAgICAgICA8c3BhbiBjbGFzcz0ibGVnZW5kLWxpbmUiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ibGVnZW5kS2V5LmRhdGFLZXkuY29sb3IiPjwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWxhYmVsIlxuICAgICAgICAgICAgIChjbGljayk9Im9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGxlZ2VuZEtleS5kYXRhSW5kZXgpIlxuICAgICAgICAgICAgIFtjbGFzc109InsgXCdoaWRkZW4tbGFiZWxcJzogbGVnZW5kRGF0YS5rZXlzW2xlZ2VuZEtleS5kYXRhSW5kZXhdLmRhdGFLZXkuaGlkZGVuIH0iXG4gICAgICAgICAgICAgW2lubmVySFRNTF09ImxlZ2VuZEtleS5kYXRhS2V5LmxhYmVsIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzowfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtvdmVyZmxvdy15OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjQwJTtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6MzVweDtwYWRkaW5nOjE1cHg7Z2FwOjIycHh9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NTBweCl7Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjEwMCV9fTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94LDpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtY29udGFpbmVye2hlaWdodDoxMDAlO2ZsZXgtZ3JvdzoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94e292ZXJmbG93OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyPip7aGVpZ2h0OjEwMCV9Omhvc3QgLmxlZ2VuZHtmbGV4LXdyYXA6d3JhcDt3aWR0aDoxMDAlO3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo0cHg7bWFyZ2luLXRvcDoxNXB4fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWx7cGFkZGluZzoycHggMjBweCAycHggMTBweDt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLmxlZ2VuZCAubGVnZW5kLWtleXMgLmxlZ2VuZC1sYWJlbC5oaWRkZW4tbGFiZWx7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtvcGFjaXR5Oi42fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGluZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNXB4O2hlaWdodDozcHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtvdXRsaW5lOm5vbmV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpYLlV0aWxzU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0sc3RhdGlzdGljQ2hhcnQ6W3t0eXBlOm8sYXJnczpbInN0YXRpc3RpY0NoYXJ0Il19XSxjdHg6W3t0eXBlOmF9XSxnZW5lcmFsOlt7dHlwZTphfV19fSk7Y2xhc3MgbWF7c3RhdGlje3RoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1zdGF0aWN7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdPbGRGaWVsZHM9WyJhdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uIiwiZXh0ZW5zaW9uLWNvbmZpZyJdfXN0YXRpY3t0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ05ld0ZpZWxkcz1bImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIiwicmVzcG9uc2VUb3BpY1FvUyIsImV4dGVuc2lvbkNvbmZpZyJdfXN0YXRpYyBtYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGU/Lm1hcCgoKHtjb252ZXJ0ZXI6ZSx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpuPTF9KT0+e2NvbnN0IGE9ZS5kZXZpY2VJbmZvPz90aGlzLmV4dHJhY3RDb252ZXJ0ZXJEZXZpY2VJbmZvKGUpLG89ey4uLmUsZGV2aWNlSW5mbzphLGV4dGVuc2lvbkNvbmZpZzplLmV4dGVuc2lvbkNvbmZpZ3x8ZVsiZXh0ZW5zaW9uLWNvbmZpZyJdfHxudWxsfTtyZXR1cm4gdGhpcy5jbGVhblVwT2xkRmllbGRzKG8pLHtjb252ZXJ0ZXI6byx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpufX0pKX1zdGF0aWMgbWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbihlKXtyZXR1cm4gdGhpcy5tcXR0UmVxdWVzdFR5cGVLZXlzLnJlZHVjZSgoKHQsbik9PmVbbl0/KHRbbl09ZVtuXS5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwUmVxdWVzdFRvVXBncmFkZWRWZXJzaW9uKGUsbik7cmV0dXJuIHRoaXMuY2xlYW5VcE9sZEZpZWxkcyh0KSx0fSkpLHQpOnQpLHt9KX1zdGF0aWMgbWFwUmVxdWVzdHNUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMucmVkdWNlKCgodCxuKT0+ZVtuXT8odFtuXT1lW25dLm1hcCgoZT0+e249PT1Jbi5TRVJWRVJfU0lERV9SUEMmJmRlbGV0ZSBlLnR5cGU7Y29uc3R7YXR0cmlidXRlTmFtZUV4cHJlc3Npb246dCxkZXZpY2VJbmZvOmEsLi4ub309ZSxpPXsuLi5vLGF0dHJpYnV0ZU5hbWVKc29uRXhwcmVzc2lvbjp0fHxudWxsLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZSE9PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGx9O3JldHVybiB0aGlzLmNsZWFuVXBOZXdGaWVsZHMoaSksaX0pKSx0KTp0KSx7fSl9c3RhdGljIG1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlPy5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwQ29udmVydGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLmNvbnZlcnRlcik7cmV0dXJuIHRoaXMuY2xlYW5VcE5ld0ZpZWxkcyh0KSx7Y29udmVydGVyOnQsdG9waWNGaWx0ZXI6ZS50b3BpY0ZpbHRlcn19KSl9c3RhdGljIG1hcENvbnZlcnRlclRvRG93bmdyYWRlZFZlcnNpb24oZSl7Y29uc3R7ZGV2aWNlSW5mbzp0LC4uLm59PWU7cmV0dXJuIGUudHlwZSE9PXduLkJZVEVTP3suLi5uLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjp0Py5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLk1TRz90LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZUpzb25FeHByZXNzaW9uOnQ/LmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlPT09VG4uTVNHP3QuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246bnVsbCxkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uOnQ/LmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIT09VG4uTVNHP3Q/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbjp0Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSE9PVRuLk1TRz90Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbjpudWxsfTp7Li4ubixkZXZpY2VOYW1lRXhwcmVzc2lvbjp0LmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVFeHByZXNzaW9uOnQuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb24sImV4dGVuc2lvbi1jb25maWciOmUuZXh0ZW5zaW9uQ29uZmlnfX1zdGF0aWMgY2xlYW5VcE9sZEZpZWxkcyhlKXt0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ09sZEZpZWxkcy5mb3JFYWNoKCh0PT5kZWxldGUgZVt0XSkpLFooZSl9c3RhdGljIGNsZWFuVXBOZXdGaWVsZHMoZSl7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdOZXdGaWVsZHMuZm9yRWFjaCgodD0+ZGVsZXRlIGVbdF0pKSxaKGUpfXN0YXRpYyBnZXRUeXBlU291cmNlQnlWYWx1ZShlKXtyZXR1cm4gZS5pbmNsdWRlcygiJHsiKT9Ubi5NU0c6ZS5pbmNsdWRlcygiLyIpP1RuLlRPUElDOlRuLkNPTlNUfXN0YXRpYyBleHRyYWN0Q29udmVydGVyRGV2aWNlSW5mbyhlKXtjb25zdCB0PWUuZGV2aWNlTmFtZUV4cHJlc3Npb258fGUuZGV2aWNlTmFtZUpzb25FeHByZXNzaW9ufHxlLmRldmljZU5hbWVUb3BpY0V4cHJlc3Npb258fG51bGwsbj1lLmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6dD90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKHQpOm51bGwsYT1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9ufHxlLmRldmljZVR5cGVUb3BpY0V4cHJlc3Npb258fGUuZGV2aWNlVHlwZUpzb25FeHByZXNzaW9ufHwiZGVmYXVsdCIsbz1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6YT90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKGEpOm51bGw7cmV0dXJuIHR8fGE/e2RldmljZU5hbWVFeHByZXNzaW9uOnQsZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6bixkZXZpY2VQcm9maWxlRXhwcmVzc2lvbjphLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOm99Om51bGx9c3RhdGljIG1hcFJlcXVlc3RUb1VwZ3JhZGVkVmVyc2lvbihlLHQpe2NvbnN0IG49ZS5kZXZpY2VOYW1lSnNvbkV4cHJlc3Npb258fGUuZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbnx8bnVsbCxhPWUuZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbnx8ZS5kZXZpY2VUeXBlSnNvbkV4cHJlc3Npb258fCJkZWZhdWx0IixvPWE/dGhpcy5nZXRUeXBlU291cmNlQnlWYWx1ZShhKTpudWxsLGk9ZS5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZXx8ZS5hdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb258fG51bGwscj10PT09SW4uU0VSVkVSX1NJREVfUlBDPzE6bnVsbCxzPXQ9PT1Jbi5TRVJWRVJfU0lERV9SUEM/ZS5yZXNwb25zZVRvcGljRXhwcmVzc2lvbj9Gbi5XaXRoUmVzcG9uc2U6Rm4uV2l0aG91dFJlc3BvbnNlOm51bGw7cmV0dXJuey4uLmUsYXR0cmlidXRlTmFtZUV4cHJlc3Npb246aSxhdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZTppP3RoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoaSk6bnVsbCxkZXZpY2VJbmZvOmUuZGV2aWNlSW5mbz9lLmRldmljZUluZm86bj97ZGV2aWNlTmFtZUV4cHJlc3Npb246bixkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZTp0aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKG4pLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOmEsZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6b306bnVsbCxyZXNwb25zZVRvcGljUW9TOnIsdHlwZTpzfX19ZSgiTXF0dFZlcnNpb25NYXBwaW5nVXRpbCIsbWEpO2NsYXNzIGRhe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dCx0aGlzLmdhdGV3YXlWZXJzaW9uPWJhLnBhcnNlVmVyc2lvbih0aGlzLmdhdGV3YXlWZXJzaW9uSW4pLHRoaXMuY29uZmlnVmVyc2lvbj1iYS5wYXJzZVZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlnVmVyc2lvbil9Z2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBkYXRlTmVlZGVkKCk/dGhpcy5wcm9jZXNzVmVyc2lvblVwZGF0ZSgpOnRoaXMuY29ubmVjdG9yfXByb2Nlc3NWZXJzaW9uVXBkYXRlKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBncmFkZU5lZWRlZCgpP3RoaXMuZ2V0VXBncmFkZWRWZXJzaW9uKCk6dGhpcy5pc1ZlcnNpb25Eb3duZ3JhZGVOZWVkZWQoKT90aGlzLmdldERvd25ncmFkZWRWZXJzaW9uKCk6dGhpcy5jb25uZWN0b3J9aXNWZXJzaW9uVXBkYXRlTmVlZGVkKCl7cmV0dXJuISF0aGlzLmdhdGV3YXlWZXJzaW9uJiZ0aGlzLmNvbmZpZ1ZlcnNpb24hPT10aGlzLmdhdGV3YXlWZXJzaW9ufWlzVmVyc2lvblVwZ3JhZGVOZWVkZWQoKXtyZXR1cm4gdGhpcy5nYXRld2F5VmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiYoIXRoaXMuY29uZmlnVmVyc2lvbnx8dGhpcy5jb25maWdWZXJzaW9uPHRoaXMuZ2F0ZXdheVZlcnNpb24pfWlzVmVyc2lvbkRvd25ncmFkZU5lZWRlZCgpe3JldHVybiB0aGlzLmNvbmZpZ1ZlcnNpb24mJnRoaXMuY29uZmlnVmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiZ0aGlzLmNvbmZpZ1ZlcnNpb24+dGhpcy5nYXRld2F5VmVyc2lvbn19ZSgiR2F0ZXdheUNvbm5lY3RvclZlcnNpb25Qcm9jZXNzb3IiLGRhKTtjbGFzcyB1YSBleHRlbmRzIGRhe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLmdhdGV3YXlWZXJzaW9uSW49ZSx0aGlzLmNvbm5lY3Rvcj10LHRoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdHtjb25uZWN0UmVxdWVzdHM6ZSxkaXNjb25uZWN0UmVxdWVzdHM6dCxhdHRyaWJ1dGVSZXF1ZXN0czpuLGF0dHJpYnV0ZVVwZGF0ZXM6YSxzZXJ2ZXJTaWRlUnBjOm99PXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO2xldCBpPXsuLi50aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbixyZXF1ZXN0c01hcHBpbmc6bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmUsZGlzY29ubmVjdFJlcXVlc3RzOnQsYXR0cmlidXRlUmVxdWVzdHM6bixhdHRyaWJ1dGVVcGRhdGVzOmEsc2VydmVyU2lkZVJwYzpvfSksbWFwcGluZzptYS5tYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24ubWFwcGluZyl9O3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMuZm9yRWFjaCgoZT0+e2NvbnN0e1tlXTp0LC4uLm59PWk7aT17Li4ubn19KSksdGhpcy5jbGVhblVwQ29uZmlnSnNvbihpKSx7Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246aSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19Z2V0RG93bmdyYWRlZFZlcnNpb24oKXtjb25zdHtyZXF1ZXN0c01hcHBpbmc6ZSxtYXBwaW5nOnQsLi4ubn09dGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24sYT1lP21hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihlKTp7fSxvPW1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7Li4ubiwuLi5hLG1hcHBpbmc6b30sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWNsZWFuVXBDb25maWdKc29uKGUpe2VlKGUucmVxdWVzdHNNYXBwaW5nLHt9KSYmZGVsZXRlIGUucmVxdWVzdHNNYXBwaW5nLGVlKGUubWFwcGluZyxbXSkmJmRlbGV0ZSBlLm1hcHBpbmd9fWUoIk1xdHRWZXJzaW9uUHJvY2Vzc29yIix1YSk7Y2xhc3MgZ2EgZXh0ZW5kcyBkYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dH1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdCBlPXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7bWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZS5tYXN0ZXIpOntzbGF2ZXM6W119LHNsYXZlOmUuc2xhdmU/aGEubWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlLnNsYXZlKTp7fX0sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWdldERvd25ncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbjtyZXR1cm57Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246ey4uLmUsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e30sbWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLm1hc3Rlcik6e3NsYXZlczpbXX19LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX19ZSgiTW9kYnVzVmVyc2lvblByb2Nlc3NvciIsZ2EpO2NsYXNzIGZhIGV4dGVuZHMgZGF7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMuZ2F0ZXdheVZlcnNpb25Jbj1lLHRoaXMuY29ubmVjdG9yPXR9Z2V0VXBncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbi5zZXJ2ZXI7cmV0dXJuey4uLnRoaXMuY29ubmVjdG9yLGNvbmZpZ3VyYXRpb25Kc29uOntzZXJ2ZXI6ZT94YS5tYXBTZXJ2ZXJUb1VwZ3JhZGVkVmVyc2lvbihlKTp7fSxtYXBwaW5nOmU/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUubWFwcGluZyk6W119LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX1nZXREb3duZ3JhZGVkVmVyc2lvbigpe3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24pfSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19fWUoIk9wY1ZlcnNpb25Qcm9jZXNzb3IiLGZhKTtjbGFzcyB5YXtjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9bmV3IGksdGhpcy5mYj1yKGRlKSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmJhc2ljRm9ybUdyb3VwPXRoaXMuaW5pdEJhc2ljRm9ybUdyb3VwKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLm9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVkLmVtaXQoKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnNldFZhbHVlKHRoaXMubWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSkse2VtaXRFdmVudDohMX0pfW9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZSh0aGlzLmdldE1hcHBlZFZhbHVlKGUpKSx0aGlzLm9uVG91Y2hlZCgpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eWEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnlhLGlucHV0czp7Z2VuZXJhbFRhYkNvbnRlbnQ6ImdlbmVyYWxUYWJDb250ZW50In0sb3V0cHV0czp7aW5pdGlhbGl6ZWQ6ImluaXRpYWxpemVkIn0sbmdJbXBvcnQ6dH0pfX1lKCJHYXRld2F5Q29ubmVjdG9yQmFzaWNDb25maWdEaXJlY3RpdmUiLHlhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnlhLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2dlbmVyYWxUYWJDb250ZW50Olt7dHlwZTphfV0saW5pdGlhbGl6ZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBiYXtzdGF0aWMgZ2V0Q29uZmlnKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSBfdC5NUVRUOnJldHVybiBuZXcgdWEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk9QQ1VBOnJldHVybiBuZXcgZmEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk1PREJVUzpyZXR1cm4gbmV3IGdhKHQsZSkuZ2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCk7ZGVmYXVsdDpyZXR1cm4gZX19c3RhdGljIHBhcnNlVmVyc2lvbihlKXtyZXR1cm4gdGUoZSk/ZTpuZShlKT9wYXJzZUZsb2F0KGUucmVwbGFjZSgvXC4vZywiIikuc2xpY2UoMCwzKSkvMTAwOjB9fWUoIkdhdGV3YXlDb25uZWN0b3JWZXJzaW9uTWFwcGluZ1V0aWwiLGJhKTtjbGFzcyBoYXtzdGF0aWMgbWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJue3NsYXZlczplLnNsYXZlcy5tYXAoKGU9Pntjb25zdHtzZW5kRGF0YU9ubHlPbkNoYW5nZTp0LC4uLm59PWU7cmV0dXJuey4uLm4sZGV2aWNlVHlwZTplLmRldmljZVR5cGU/PyJkZWZhdWx0IixyZXBvcnRTdHJhdGVneTp0P3t0eXBlOnNuLk9uQ2hhbmdlfTp7dHlwZTpzbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6ZS5wb2xsUGVyaW9kfX19KSl9fXN0YXRpYyBtYXBNYXN0ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybntzbGF2ZXM6ZS5zbGF2ZXMubWFwKChlPT57Y29uc3R7cmVwb3J0U3RyYXRlZ3k6dCwuLi5ufT1lO3JldHVybnsuLi5uLHNlbmREYXRhT25seU9uQ2hhbmdlOnQ/LnR5cGUhPT1zbi5PblJlcG9ydFBlcmlvZH19KSl9fXN0YXRpYyBtYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZSl7aWYoIWU/LnZhbHVlcylyZXR1cm4gZTtjb25zdCB0PU9iamVjdC5rZXlzKGUudmFsdWVzKS5yZWR1Y2UoKCh0LG4pPT50PXsuLi50LFtuXTpbZS52YWx1ZXNbbl1dfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlKXtpZighZT8udmFsdWVzKXJldHVybiBlO2NvbnN0IHQ9T2JqZWN0LmtleXMoZS52YWx1ZXMpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOnRoaXMubWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZS52YWx1ZXNbbl1bMF0pfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOmVbbl0ubWFwKChlPT4oey4uLmUsdHlwZToiaW50Ij09PWUudHlwZT9lYS5JTlQxNjplLnR5cGV9KSkpfSkse30pfX1lKCJNb2RidXNWZXJzaW9uTWFwcGluZ1V0aWwiLGhhKTtjbGFzcyB4YXtzdGF0aWMgbWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZSl7Y29uc3R7bWFwcGluZzp0LGRpc2FibGVTdWJzY3JpcHRpb25zOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsLi4ub309ZTtyZXR1cm57Li4ubyxwb2xsUGVyaW9kSW5NaWxsaXM6YT8/NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6IW59fXN0YXRpYyBtYXBTZXJ2ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe2NvbnN0e21hcHBpbmc6dCxzZXJ2ZXI6bn09ZSx7ZW5hYmxlU3Vic2NyaXB0aW9uczphLC4uLm99PW4/P3t9O3JldHVybnsuLi5vLG1hcHBpbmc6dD90aGlzLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpOltdLGRpc2FibGVTdWJzY3JpcHRpb25zOiFhfX1zdGF0aWMgbWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlLm1hcCgoZT0+KHsuLi5lLGRldmljZU5vZGVTb3VyY2U6dGhpcy5nZXREZXZpY2VOb2RlU291cmNlQnlWYWx1ZShlLmRldmljZU5vZGVQYXR0ZXJuKSxkZXZpY2VJbmZvOntkZXZpY2VOYW1lRXhwcmVzc2lvbjplLmRldmljZU5hbWVQYXR0ZXJuLGRldmljZU5hbWVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VOYW1lUGF0dGVybiksZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246ZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiKX0sYXR0cmlidXRlczplLmF0dHJpYnV0ZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLGF0dHJpYnV0ZXNfdXBkYXRlczplLmF0dHJpYnV0ZXNfdXBkYXRlcy5tYXAoKGU9Pih7a2V5OmUuYXR0cmlidXRlT25UaGluZ3NCb2FyZCx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5hdHRyaWJ1dGVPbkRldmljZSksdmFsdWU6ZS5hdHRyaWJ1dGVPbkRldmljZX0pKSksdGltZXNlcmllczplLnRpbWVzZXJpZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLHJwY19tZXRob2RzOmUucnBjX21ldGhvZHMubWFwKChlPT4oe21ldGhvZDplLm1ldGhvZCxhcmd1bWVudHM6ZS5hcmd1bWVudHMubWFwKChlPT4oe3ZhbHVlOmUsdHlwZTp0aGlzLmdldEFyZ3VtZW50VHlwZShlKX0pKSl9KSkpfSkpKX1zdGF0aWMgbWFwTWFwcGluZ1RvRG93bmdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGUubWFwKChlPT4oey4uLmUsZGV2aWNlTmFtZVBhdHRlcm46ZS5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVQYXR0ZXJuOmUuZGV2aWNlSW5mby5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbixhdHRyaWJ1dGVzOmUuYXR0cmlidXRlcy5tYXAoKGU9Pih7a2V5OmUua2V5LHBhdGg6ZS52YWx1ZX0pKSksYXR0cmlidXRlc191cGRhdGVzOmUuYXR0cmlidXRlc191cGRhdGVzLm1hcCgoZT0+KHthdHRyaWJ1dGVPblRoaW5nc0JvYXJkOmUua2V5LGF0dHJpYnV0ZU9uRGV2aWNlOmUudmFsdWV9KSkpLHRpbWVzZXJpZXM6ZS50aW1lc2VyaWVzLm1hcCgoZT0+KHtrZXk6ZS5rZXkscGF0aDplLnZhbHVlfSkpKSxycGNfbWV0aG9kczplLnJwY19tZXRob2RzLm1hcCgoZT0+KHttZXRob2Q6ZS5tZXRob2QsYXJndW1lbnRzOmUuYXJndW1lbnRzLm1hcCgoZT0+ZS52YWx1ZSkpfSkpKX0pKSl9c3RhdGljIGdldFR5cGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6ZS5pbmNsdWRlcygiLyIpfHxlLmluY2x1ZGVzKCJcXCIpP1NuLlBBVEg6U24uQ09OU1R9c3RhdGljIGdldERldmljZU5vZGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6U24uUEFUSH1zdGF0aWMgZ2V0QXJndW1lbnRUeXBlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpPyJpbnRlZ2VyIjoiZmxvYXQiO2RlZmF1bHQ6cmV0dXJuInN0cmluZyJ9fX1lKCJPcGNWZXJzaW9uTWFwcGluZ1V0aWwiLHhhKTtjbGFzcyB2YXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGJhLnBhcnNlVmVyc2lvbihlKT49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5QaXBlfSl9c3RhdGlje3RoaXMuybVwaXBlPXQuybXJtW5nRGVjbGFyZVBpcGUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsaXNTdGFuZGFsb25lOiEwLG5hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyJ9KX19ZSgiTGF0ZXN0VmVyc2lvbkNvbmZpZ1BpcGUiLHZhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyB3YXtjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lfXRyYW5zZm9ybShlKXtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnBvcnQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKXx8ZS5oYXNFcnJvcigibWF4Iik/dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5wb3J0LWxpbWl0cy1lcnJvciIse21pbjpFdC5NSU4sbWF4OkV0Lk1BWH0pOiIifXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d2EsZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LlBpcGV9KX1zdGF0aWN7dGhpcy7JtXBpcGU9dC7Jtcm1bmdEZWNsYXJlUGlwZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxpc1N0YW5kYWxvbmU6ITAsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0pfX1lKCJHYXRld2F5UG9ydFRvb2x0aXBQaXBlIix3YSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAiLHN0YW5kYWxvbmU6ITB9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WS5UcmFuc2xhdGVTZXJ2aWNlfV19KTtjbGFzcyBDYXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGUubWFwKCgoe3ZhbHVlOmV9KT0+ZS50b1N0cmluZygpKSkuam9pbigiLCAiKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyJ9KX19ZSgiUnBjVGVtcGxhdGVBcnJheVZpZXdQaXBlIixDYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpDYSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBUYXt0cmFuc2Zvcm0oZSx0LG4pe3JldHVybiFufHxuPy5pbmNsdWRlcyhTbi5QQVRIKT90IT09U24uQ09OU1Q/YHdpZGdldC9saWIvZ2F0ZXdheS8ke2V9LSR7dH1fZm5gOnZvaWQgMDoiYXR0cmlidXRlcyI9PT1lfHwidGltZXNlcmllcyI9PT1lPyJ3aWRnZXQvbGliL2dhdGV3YXkvYXR0cmlidXRlc190aW1lc2VyaWVzX2V4cHJlc3Npb25zX2ZuIjoid2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifSl9fWUoIkdhdGV3YXlIZWxwTGlua1BpcGUiLFRhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImdldEdhdGV3YXlIZWxwTGluayIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBTYXtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbGVtZW50UmVmPWUsdGhpcy5yZW5kZXJlcj10LHRoaXMudG9vbHRpcD1uLHRoaXMudG9vbHRpcEVuYWJsZWQ9ITAsdGhpcy5wb3NpdGlvbj0iYWJvdmUiLHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5vYnNlcnZlTW91c2VFdmVudHMoKSx0aGlzLmFwcGx5VHJ1bmNhdGlvblN0eWxlcygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudG9vbHRpcC5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy50b29sdGlwLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJnRoaXMuaGlkZVRvb2x0aXAoKSx0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9b2JzZXJ2ZU1vdXNlRXZlbnRzKCl7a2UodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiKS5waXBlKE1lKCgoKT0+dGhpcy50b29sdGlwRW5hYmxlZCkpLE1lKCgoKT0+dGhpcy5pc092ZXJmbG93bih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpKSxFZSgoKCk9PnRoaXMuc2hvd1Rvb2x0aXAoKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKSxrZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUoTWUoKCgpPT50aGlzLnRvb2x0aXBFbmFibGVkKSksTWUoKCgpPT50aGlzLnRvb2x0aXAuX2lzVG9vbHRpcFZpc2libGUoKSkpLEVlKCgoKT0+dGhpcy5oaWRlVG9vbHRpcCgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWFwcGx5VHJ1bmNhdGlvblN0eWxlcygpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIndoaXRlLXNwYWNlIiwibm93cmFwIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKX1pc092ZXJmbG93bihlKXtyZXR1cm4gZS5jbGllbnRXaWR0aDxlLnNjcm9sbFdpZHRofXNob3dUb29sdGlwKCl7dGhpcy50b29sdGlwLm1lc3NhZ2U9dGhpcy50ZXh0fHx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lclRleHQsdGhpcy50b29sdGlwLnNob3coKX1oaWRlVG9vbHRpcCgpe3RoaXMudG9vbHRpcC5oaWRlKCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpTYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp6ZS5NYXRUb29sdGlwfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9c3RhdGlje3RoaXMuybVkaXI9dC7Jtcm1bmdEZWNsYXJlRGlyZWN0aXZlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6e3RleHQ6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0ZXh0Il0sdG9vbHRpcEVuYWJsZWQ6InRvb2x0aXBFbmFibGVkIixwb3NpdGlvbjoicG9zaXRpb24ifSxwcm92aWRlcnM6W1dlXSxuZ0ltcG9ydDp0fSl9fWUoIlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUiLFNhKSxIZShbTigpXSxTYS5wcm90b3R5cGUsInRvb2x0aXBFbmFibGVkIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixwcm92aWRlcnM6W1dlXSxzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOnplLk1hdFRvb2x0aXB9XSxwcm9wRGVjb3JhdG9yczp7dGV4dDpbe3R5cGU6YSxhcmdzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIl19XSx0b29sdGlwRW5hYmxlZDpbe3R5cGU6YX1dLHBvc2l0aW9uOlt7dHlwZTphfV19fSk7Y2xhc3Mga2F7c2V0IGNoaXBzKGUpe2VlKHRoaXMuY2hpcHNWYWx1ZSxlKXx8KHRoaXMuY2hpcHNWYWx1ZT1lLHNldFRpbWVvdXQoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSksMCkpfWNvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZWw9ZSx0aGlzLnJlbmRlcmVyPXQsdGhpcy50cmFuc2xhdGU9bix0aGlzLndpbmRvdz1hLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJtYXgtaGVpZ2h0IiwiNDhweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJvdmVyZmxvdyIsImF1dG8iKSxrZShhLCJyZXNpemUiKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSkpLHRoaXMub2JzZXJ2ZUludGVyc2VjdGlvbigpfW9ic2VydmVJbnRlcnNlY3Rpb24oKXt0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZT0+e2UuZm9yRWFjaCgoZT0+e2UuaXNJbnRlcnNlY3RpbmcmJnRoaXMuYWRqdXN0Q2hpcHMoKX0pKX0pKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1hZGp1c3RDaGlwcygpe2NvbnN0IGU9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy1jaGlwIiksbj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUodCkubWFyZ2luTGVmdCl8fDAsYT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIm1hdC1jaGlwOm5vdCguZWxsaXBzaXMtY2hpcCkiKTtpZih0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPjEpe2NvbnN0IG89dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy10ZXh0Iik7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5IiwiaW5saW5lLWZsZXgiKSxvLmlubmVySFRNTD10aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmVsbGlwc2lzLWNoaXBzLXRleHQiLHtjb3VudDp0aGlzLmNoaXBzVmFsdWUubGVuZ3RofSk7Y29uc3QgaT1lLm9mZnNldFdpZHRoLSh0Lm9mZnNldFdpZHRoK24pO2xldCByPTAscz0wO2EuZm9yRWFjaCgoZT0+e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUoZSwiZGlzcGxheSIsImlubGluZS1mbGV4Iik7Y29uc3QgdD1lLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX3RleHQtbGFiZWwiKTt0aGlzLmFwcGx5TWF4Q2hpcFRleHRXaWR0aCh0LGkvMykscisoZS5vZmZzZXRXaWR0aCtuKTw9aSYmczx0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPyhzKysscis9ZS5vZmZzZXRXaWR0aCtuKTp0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsImRpc3BsYXkiLCJub25lIil9KSksby5pbm5lckhUTUw9dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5lbGxpcHNpcy1jaGlwcy10ZXh0Iix7Y291bnQ6dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aC1zfSkscz09PXRoaXMuY2hpcHNWYWx1ZT8ubGVuZ3RoJiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHQsImRpc3BsYXkiLCJub25lIil9ZWxzZSBpZigxPT09dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aCl7Y29uc3Qgbz1hWzBdLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbiIpLGk9by5xdWVyeVNlbGVjdG9yKCIubWRjLWV2b2x1dGlvbi1jaGlwX190ZXh0LWxhYmVsIikscj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUobykucGFkZGluZ0xlZnQpfHwwLHM9cGFyc2VGbG9hdCh0aGlzLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG8pLnBhZGRpbmdSaWdodCl8fDAsbD1lLm9mZnNldFdpZHRoLW4tKHIrcyk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYVswXSwiZGlzcGxheSIsImlubGluZS1mbGV4IiksdGhpcy5hcHBseU1heENoaXBUZXh0V2lkdGgoaSxsKX1lbHNlIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodCwiZGlzcGxheSIsIm5vbmUiKX1hcHBseU1heENoaXBUZXh0V2lkdGgoZSx0KXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm1heC13aWR0aCIsdCsicHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm92ZXJmbG93IiwiaGlkZGVuIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlLCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIndoaXRlLXNwYWNlIiwibm93cmFwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjphZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6a2EsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJbdGItZWxsaXBzaXMtY2hpcC1saXN0XSIsaW5wdXRzOntjaGlwczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCIsImNoaXBzIl19LG5nSW1wb3J0OnR9KX19ZSgiRWxsaXBzaXNDaGlwTGlzdERpcmVjdGl2ZSIsa2EpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6a2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX0se3R5cGU6V2luZG93LGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbYWVdfV19XSxwcm9wRGVjb3JhdG9yczp7Y2hpcHM6W3t0eXBlOmEsYXJnczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfV19fSk7Y2xhc3MgTGF7Y29uc3RydWN0b3IoZSx0LG4sYSl7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWUsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2U9dCx0aGlzLnpvbmU9bix0aGlzLnRyYW5zbGF0ZT1hLHRoaXMuYXR0cmlidXRlc1N1YmplY3Q9bmV3IExlKFtdKSx0aGlzLnBhZ2VEYXRhU3ViamVjdD1uZXcgTGUoTSgpKSx0aGlzLnBhZ2VEYXRhJD10aGlzLnBhZ2VEYXRhU3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlzLnNlbGVjdGlvbj1uZXcgamUoITAsW10pfWNvbm5lY3QoZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCl9ZGlzY29ubmVjdChlKXt0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5wYWdlRGF0YVN1YmplY3QuY29tcGxldGUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXImJih0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIudW5zdWJzY3JpYmUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXI9bnVsbCl9bG9hZEF0dHJpYnV0ZXMoZSx0LG4sYT0hMSl7YSYmKHRoaXMuYWxsQXR0cmlidXRlcz1udWxsLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlciYmKHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlci51bnN1YnNjcmliZSgpLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlcj1udWxsKSksdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtjb25zdCBvPW5ldyBGZTtyZXR1cm4gdGhpcy5mZXRjaEF0dHJpYnV0ZXMoZSx0LG4pLnBpcGUocWUoKCgpPT5JZShNKCkpKSkpLnN1YnNjcmliZSgoZT0+e3RoaXMuYXR0cmlidXRlc1N1YmplY3QubmV4dChlLmRhdGEpLHRoaXMucGFnZURhdGFTdWJqZWN0Lm5leHQoZSksby5uZXh0KGUpfSkpLG99ZmV0Y2hBdHRyaWJ1dGVzKGUsdCxuKXtyZXR1cm4gdGhpcy5nZXRBbGxBdHRyaWJ1dGVzKGUsdCkucGlwZShEZSgoZT0+e2NvbnN0IHQ9ZS5maWx0ZXIoKGU9PjAhPT1lLmxhc3RVcGRhdGVUcykpO3JldHVybiBuLmZpbHRlckRhdGEodCl9KSkpfWdldEFsbEF0dHJpYnV0ZXMoZSx0KXtpZighdGhpcy5hbGxBdHRyaWJ1dGVzKXtsZXQgbjtFLmdldCh0KT8odGhpcy50ZWxlbWV0cnlTdWJzY3JpYmVyPXEuY3JlYXRlRW50aXR5QXR0cmlidXRlc1N1YnNjcmlwdGlvbih0aGlzLnRlbGVtZXRyeVdzU2VydmljZSxlLHQsdGhpcy56b25lKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuc3Vic2NyaWJlKCksbj10aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuYXR0cmlidXRlRGF0YSQoKSk6bj10aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyhlLHQpLHRoaXMuYWxsQXR0cmlidXRlcz1uLnBpcGUoUGUoMSksR2UoKSl9cmV0dXJuIHRoaXMuYWxsQXR0cmlidXRlc31pc0FsbFNlbGVjdGVkKCl7Y29uc3QgZT10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShEZSgodD0+ZT09PXQubGVuZ3RoKSkpfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5waXBlKERlKChlPT4hZS5sZW5ndGgpKSl9dG90YWwoKXtyZXR1cm4gdGhpcy5wYWdlRGF0YVN1YmplY3QucGlwZShEZSgoZT0+ZS50b3RhbEVsZW1lbnRzKSkpfW1hc3RlclRvZ2dsZSgpe3RoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShFZSgoZT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aD09PWUubGVuZ3RoP3RoaXMuc2VsZWN0aW9uLmNsZWFyKCk6ZS5mb3JFYWNoKChlPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0KGUpfSkpfSkpLE9lKDEpKS5zdWJzY3JpYmUoKX19ZSgiQXR0cmlidXRlRGF0YXNvdXJjZSIsTGEpO2NsYXNzIEZhe2NvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlU2VydmljZT1lLHRoaXMuc2F2ZVRlbXBsYXRlPW5ldyBpLHRoaXMudXNlVGVtcGxhdGU9bmV3IGksdGhpcy5vcmlnaW5hbE9yZGVyPSgpPT4wLHRoaXMuaXNPYmplY3Q9ZT0+b2UoZSksdGhpcy5pc0FycmF5PWU9PkFycmF5LmlzQXJyYXkoZSksdGhpcy5TTk1QTWV0aG9kc1RyYW5zbGF0aW9ucz10bn1uZ09uSW5pdCgpe31hcHBseVRlbXBsYXRlKGUsdCl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnVzZVRlbXBsYXRlLmVtaXQodCl9ZGVsZXRlVGVtcGxhdGUoZSx0KXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49dGhpcy5ycGNUZW1wbGF0ZXMuZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO3RoaXMucnBjVGVtcGxhdGVzLnNwbGljZShuLDEpO2NvbnN0IGE9YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5OmEsdmFsdWU6dGhpcy5ycGNUZW1wbGF0ZXN9XSkuc3Vic2NyaWJlKCgoKT0+e30pKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZhLGRlcHM6W3t0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkZhLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXMiLGlucHV0czp7Y29ubmVjdG9yVHlwZToiY29ubmVjdG9yVHlwZSIsY3R4OiJjdHgiLHJwY1RlbXBsYXRlczoicnBjVGVtcGxhdGVzIn0sb3V0cHV0czp7c2F2ZVRlbXBsYXRlOiJzYXZlVGVtcGxhdGUiLHVzZVRlbXBsYXRlOiJ1c2VUZW1wbGF0ZSJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZXMtdGl0bGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuPG1hdC1leHBhbnNpb24tcGFuZWwgaGlkZVRvZ2dsZSAqbmdGb3I9ImxldCB0ZW1wbGF0ZSBvZiBycGNUZW1wbGF0ZXMiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz0idGVtcGxhdGUtbmFtZSI+XG4gICAgICA8c3BhbiBtYXRUb29sdGlwPSJ7e3RlbXBsYXRlLm5hbWV9fSIgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+e3t0ZW1wbGF0ZS5uYW1lfX08L3NwYW4+XG4gICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IkRlbGV0ZSIgKGNsaWNrKT0iZGVsZXRlVGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPSJVc2UiIChjbGljayk9ImFwcGx5VGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9ImxldCBjb25maWcgb2YgdGVtcGxhdGUuY29uZmlnIHwga2V5VmFsdWVJc05vdEVtcHR5IlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IGNvbmZpZywgaW5uZXJWYWx1ZTogZmFsc2UgfSI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI1JQQ1RlbXBsYXRlUmVmIGxldC1jb25maWcgbGV0LWlubmVyVmFsdWU9XCdpbm5lclZhbHVlXCc+XG4gICAgPGRpdiBbZnhMYXlvdXRdPSJpc09iamVjdChjb25maWcudmFsdWUpID8gXCdjb2x1bW5cJzogXCdyb3dcJyJcbiAgICAgICAgIFtmeExheW91dEFsaWduXT0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ3NwYWNlLWJldHdlZW4gY2VudGVyXCcgOiBcJ1wnIlxuICAgICAgICAgW25nU3R5bGVdPSJ7XCdwYWRkaW5nLWxlZnRcJzogaW5uZXJWYWx1ZSA/IFwnMTZweFwnOiBcJzBcJ30iXG4gICAgICAgICBjbGFzcz0icnBjLXBhcmFtcy1yb3ciPlxuICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUta2V5Ij5cbiAgICAgICAge3shaW5uZXJWYWx1ZSA/IChcJ2dhdGV3YXkucnBjLlwnICsgY29uZmlnLmtleSB8IHRyYW5zbGF0ZSkgOiBjb25maWcua2V5fX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iaXNBcnJheShjb25maWcudmFsdWUpIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9ImFycmF5LXZhbHVlIj5cbiAgICAgICAge3sgY29uZmlnLnZhbHVlIHwgZ2V0UnBjVGVtcGxhdGVBcnJheVZpZXcgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iaXNPYmplY3QoY29uZmlnLnZhbHVlKSIgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENPYmplY3RSb3ciPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiAqbmdJZj0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgJiYgIWlzQXJyYXkoY29uZmlnLnZhbHVlKSJcbiAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdib29sZWFuLXRydWVcJzogY29uZmlnLnZhbHVlID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgIFwnYm9vbGVhbi1mYWxzZVwnOiBjb25maWcudmFsdWUgPT09IGZhbHNlICB9Ij5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29uZmlnLmtleSA9PT0gXCdtZXRob2RcJyBlbHNlIHZhbHVlIiBbbmdUZW1wbGF0ZU91dGxldF09IlNOTVBNZXRob2QiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZhbHVlPnt7IGNvbmZpZy52YWx1ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1NOTVBNZXRob2Q+e3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KGNvbmZpZy52YWx1ZSkgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNSUENPYmplY3RSb3c+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9ImxldCBzdWJDb25maWcgb2YgY29uZmlnLnZhbHVlIHwga2V5dmFsdWUgOiBvcmlnaW5hbE9yZGVyIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IHN1YkNvbmZpZywgaW5uZXJWYWx1ZTogdHJ1ZSB9Ij5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjB9Omhvc3QgLnRpdGxle2ZvbnQtd2VpZ2h0OjUwMH06aG9zdCAudGVtcGxhdGUta2V5e2NvbG9yOiMwMDAwMDA2MTtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4fTpob3N0IC5ib29sZWFuLXRydWUsOmhvc3QgLmJvb2xlYW4tZmFsc2V7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDtwYWRkaW5nOjAgMTJweDt3aWR0aDpmaXQtY29udGVudDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfTpob3N0IC5ib29sZWFuLWZhbHNle2NvbG9yOiNkMTI3MzA7YmFja2dyb3VuZC1jb2xvcjojZDEyNzMwMTR9Omhvc3QgLmJvb2xlYW4tdHJ1ZXtjb2xvcjojMTk4MDM4O2JhY2tncm91bmQtY29sb3I6IzE5ODAzODE0fTpob3N0IG1hdC1leHBhbnNpb24tcGFuZWx7bWFyZ2luLXRvcDoxMHB4O292ZXJmbG93OnZpc2libGV9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MDtmbGV4OjB9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uPm1hdC1pY29ue21hcmdpbi1sZWZ0OjE1cHg7Y29sb3I6IzAwMDAwMDYxfTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntwYWRkaW5nOjAgMCAwIDEycHh9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NDhweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgLm1hdC1jb250ZW50Lm1hdC1jb250ZW50LWhpZGUtdG9nZ2xle21hcmdpbi1yaWdodDowfTpob3N0IC5ycGMtcGFyYW1zLXJvd3tvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5ycGMtcGFyYW1zLXJvdyA6bm90KDpmaXJzdC1jaGlsZCl7d2hpdGUtc3BhY2U6cHJlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50ZW1wbGF0ZS1uYW1le292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2t9Omhvc3QgOjpuZy1kZWVwIC5tYXQtY29udGVudHthbGlnbi1pdGVtczpjZW50ZXJ9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2ZsZXg6MTttYXJnaW46MH06aG9zdCAuYXJyYXktdmFsdWV7bWFyZ2luLWxlZnQ6MTBweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3R5bGUsc2VsZWN0b3I6IltuZ1N0eWxlXSIsaW5wdXRzOlsibmdTdHlsZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsRGVzY3JpcHRpb24sc2VsZWN0b3I6Im1hdC1wYW5lbC1kZXNjcmlwdGlvbiJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOkNhLG5hbWU6ImdldFJwY1RlbXBsYXRlQXJyYXlWaWV3In1dfSl9fWUoIkdhdGV3YXlTZXJ2aWNlUlBDQ29ubmVjdG9yVGVtcGxhdGVzQ29tcG9uZW50IixGYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpGYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9Im1hdC1zdWJ0aXRsZS0xIHRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlcy10aXRsZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG48bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlICpuZ0Zvcj0ibGV0IHRlbXBsYXRlIG9mIHJwY1RlbXBsYXRlcyI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8bWF0LXBhbmVsLXRpdGxlIGNsYXNzPSJ0ZW1wbGF0ZS1uYW1lIj5cbiAgICAgIDxzcGFuIG1hdFRvb2x0aXA9Int7dGVtcGxhdGUubmFtZX19IiBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj57e3RlbXBsYXRlLm5hbWV9fTwvc3Bhbj5cbiAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD0iRGVsZXRlIiAoY2xpY2spPSJkZWxldGVUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IlVzZSIgKGNsaWNrKT0iYXBwbHlUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnBsYXlfYXJyb3c8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj0ibGV0IGNvbmZpZyBvZiB0ZW1wbGF0ZS5jb25maWcgfCBrZXlWYWx1ZUlzTm90RW1wdHkiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogY29uZmlnLCBpbm5lclZhbHVlOiBmYWxzZSB9Ij5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjUlBDVGVtcGxhdGVSZWYgbGV0LWNvbmZpZyBsZXQtaW5uZXJWYWx1ZT1cJ2lubmVyVmFsdWVcJz5cbiAgICA8ZGl2IFtmeExheW91dF09ImlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ2NvbHVtblwnOiBcJ3Jvd1wnIlxuICAgICAgICAgW2Z4TGF5b3V0QWxpZ25dPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSA/IFwnc3BhY2UtYmV0d2VlbiBjZW50ZXJcJyA6IFwnXCciXG4gICAgICAgICBbbmdTdHlsZV09IntcJ3BhZGRpbmctbGVmdFwnOiBpbm5lclZhbHVlID8gXCcxNnB4XCc6IFwnMFwnfSJcbiAgICAgICAgIGNsYXNzPSJycGMtcGFyYW1zLXJvdyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1rZXkiPlxuICAgICAgICB7eyFpbm5lclZhbHVlID8gKFwnZ2F0ZXdheS5ycGMuXCcgKyBjb25maWcua2V5IHwgdHJhbnNsYXRlKSA6IGNvbmZpZy5rZXl9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJpc0FycmF5KGNvbmZpZy52YWx1ZSkiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0iYXJyYXktdmFsdWUiPlxuICAgICAgICB7eyBjb25maWcudmFsdWUgfCBnZXRScGNUZW1wbGF0ZUFycmF5VmlldyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJpc09iamVjdChjb25maWcudmFsdWUpIiBbbmdUZW1wbGF0ZU91dGxldF09IlJQQ09iamVjdFJvdyI+PC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2ICpuZ0lmPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSAmJiAhaXNBcnJheShjb25maWcudmFsdWUpIlxuICAgICAgICAgICBbbmdDbGFzc109IntcJ2Jvb2xlYW4tdHJ1ZVwnOiBjb25maWcudmFsdWUgPT09IHRydWUsXG4gICAgICAgICAgICAgICAgICAgXCdib29sZWFuLWZhbHNlXCc6IGNvbmZpZy52YWx1ZSA9PT0gZmFsc2UgIH0iPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJjb25maWcua2V5ID09PSBcJ21ldGhvZFwnIGVsc2UgdmFsdWUiIFtuZ1RlbXBsYXRlT3V0bGV0XT0iU05NUE1ldGhvZCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdmFsdWU+e3sgY29uZmlnLnZhbHVlIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjU05NUE1ldGhvZD57eyBTTk1QTWV0aG9kc1RyYW5zbGF0aW9ucy5nZXQoY29uZmlnLnZhbHVlKSB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1JQQ09iamVjdFJvdz5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj0ibGV0IHN1YkNvbmZpZyBvZiBjb25maWcudmFsdWUgfCBrZXl2YWx1ZSA6IG9yaWdpbmFsT3JkZXIiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogc3ViQ29uZmlnLCBpbm5lclZhbHVlOiB0cnVlIH0iPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1leHBhbnNpb24tcGFuZWw+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC50ZW1wbGF0ZS1rZXl7Y29sb3I6IzAwMDAwMDYxO2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHh9Omhvc3QgLmJvb2xlYW4tdHJ1ZSw6aG9zdCAuYm9vbGVhbi1mYWxzZXtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4O3BhZGRpbmc6MCAxMnB4O3dpZHRoOmZpdC1jb250ZW50O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgLmJvb2xlYW4tZmFsc2V7Y29sb3I6I2QxMjczMDtiYWNrZ3JvdW5kLWNvbG9yOiNkMTI3MzAxNH06aG9zdCAuYm9vbGVhbi10cnVle2NvbG9yOiMxOTgwMzg7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4MTR9Omhvc3QgbWF0LWV4cGFuc2lvbi1wYW5lbHttYXJnaW4tdG9wOjEwcHg7b3ZlcmZsb3c6dmlzaWJsZX06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDowO2ZsZXg6MH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24+bWF0LWljb257bWFyZ2luLWxlZnQ6MTVweDtjb2xvcjojMDAwMDAwNjF9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye3BhZGRpbmc6MCAwIDAgMTJweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo0OHB4fTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAubWF0LWNvbnRlbnQubWF0LWNvbnRlbnQtaGlkZS10b2dnbGV7bWFyZ2luLXJpZ2h0OjB9Omhvc3QgLnJwYy1wYXJhbXMtcm93e292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLnJwYy1wYXJhbXMtcm93IDpub3QoOmZpcnN0LWNoaWxkKXt3aGl0ZS1zcGFjZTpwcmU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRlbXBsYXRlLW5hbWV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9ja306aG9zdCA6Om5nLWRlZXAgLm1hdC1jb250ZW50e2FsaWduLWl0ZW1zOmNlbnRlcn06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZmxleDoxO21hcmdpbjowfTpob3N0IC5hcnJheS12YWx1ZXttYXJnaW4tbGVmdDoxMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Nvbm5lY3RvclR5cGU6W3t0eXBlOmF9XSxjdHg6W3t0eXBlOmF9XSxzYXZlVGVtcGxhdGU6W3t0eXBlOmx9XSx1c2VUZW1wbGF0ZTpbe3R5cGU6bH1dLHJwY1RlbXBsYXRlczpbe3R5cGU6YX1dfX0pO2NsYXNzIElhe2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLkJyb2tlclNlY3VyaXR5VHlwZT1kbix0aGlzLnNlY3VyaXR5VHlwZXM9T2JqZWN0LnZhbHVlcyhkbiksdGhpcy5TZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXA9dW4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e30sdGhpcy5zZWN1cml0eUZvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltkbi5BTk9OWU1PVVMsW11dLHVzZXJuYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV19KSx0aGlzLm9ic2VydmVTZWN1cml0eUZvcm0oKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7ZS50eXBlfHwoZS50eXBlPWRuLkFOT05ZTU9VUyksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlKSx0aGlzLnVwZGF0ZVZpZXcoZSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUZvcm06e3ZhbGlkOiExfX19dXBkYXRlVmlldyhlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZShlKX11cGRhdGVWYWxpZGF0b3JzKGUpe2U9PT1kbi5CQVNJQz8odGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGFzc3dvcmQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfW9ic2VydmVTZWN1cml0eUZvcm0oKXt0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlVmlldyhlKSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PklhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+SWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbRCxIXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBBYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMuc2VuZENvbW1hbmQ9bmV3IGksdGhpcy5zYXZlVGVtcGxhdGU9bmV3IGksdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuYkFDbmV0UmVxdWVzdFR5cGVzPU9iamVjdC52YWx1ZXMoV3QpLHRoaXMuYkFDbmV0T2JqZWN0VHlwZXM9T2JqZWN0LnZhbHVlcyhLdCksdGhpcy5iTEVNZXRob2RzPU9iamVjdC52YWx1ZXMoWXQpLHRoaXMuY0FOQnl0ZU9yZGVycz1PYmplY3QudmFsdWVzKEp0KSx0aGlzLnNvY2tldE1ldGhvZFByb2Nlc3NpbmdzPU9iamVjdC52YWx1ZXMoWHQpLHRoaXMuc29ja2V0RW5jb2RpbmdzPU9iamVjdC52YWx1ZXMoYW4pLHRoaXMuc05NUE1ldGhvZHM9T2JqZWN0LnZhbHVlcyhlbiksdGhpcy5oVFRQTWV0aG9kcz1PYmplY3QudmFsdWVzKG5uKSx0aGlzLmJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXM9anQsdGhpcy5iQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXM9JHQsdGhpcy5iTEVNZXRob2RzVHJhbnNsYXRlcz1RdCx0aGlzLlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzVHJhbnNsYXRlcz1adCx0aGlzLlNOTVBNZXRob2RzVHJhbnNsYXRpb25zPXRuLHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy51cmxQYXR0ZXJuPS9eWy1hLXpBLVpkXyQ6e30/fis9XC8uMC05LV0qJC8sdGhpcy5udW1iZXJzT25seVBhdHRlcm49L15bMC05XSokLyx0aGlzLmhleE9ubHlQYXR0ZXJuPS9eWzAtOUEtRmEtZiBdKyQvLHRoaXMucHJvcGFnYXRlQ2hhbmdlPWU9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5jb21tYW5kRm9ybT10aGlzLmNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZSh0aGlzLmNvbm5lY3RvclR5cGUpLHRoaXMuY29tbWFuZEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9e307c3dpdGNoKHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5SRVNUOmNhc2UgX3QuUkVRVUVTVDplLmh0dHBIZWFkZXJzLmZvckVhY2goKGU9Pnt0W2UuaGVhZGVyTmFtZV09ZS52YWx1ZX0pKSxlLmh0dHBIZWFkZXJzPXR9dGhpcy5jb21tYW5kRm9ybS52YWxpZCYmdGhpcy5wcm9wYWdhdGVDaGFuZ2Uoey4uLnRoaXMuY29tbWFuZEZvcm0udmFsdWUsLi4uZX0pfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZShlKXtsZXQgdDtzd2l0Y2goZSl7Y2FzZSBfdC5CQUNORVQ6dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFR5cGU6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxvYmplY3RUeXBlOltudWxsLFtdXSxpZGVudGlmaWVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxwcm9wZXJ0eUlkOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7YnJlYWs7Y2FzZSBfdC5CTEU6dD10aGlzLmZiLmdyb3VwKHttZXRob2RSUEM6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sY2hhcmFjdGVyaXN0aWNVVUlEOlsiMDAwMDJBMDAtMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIzNEZCIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLHdpdGhSZXNwb25zZTpbITEsW11dfSk7YnJlYWs7Y2FzZSBfdC5DQU46dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbm9kZUlEOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxpc0V4dGVuZGVkSUQ6WyExLFtdXSxpc0ZEOlshMSxbXV0sYml0cmF0ZVN3aXRjaDpbITEsW11dLGRhdGFMZW5ndGg6W251bGwsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLGRhdGFCeXRlb3JkZXI6W251bGwsW11dLGRhdGFCZWZvcmU6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhQWZ0ZXI6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhSW5IRVg6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhRXhwcmVzc2lvbjpbbnVsbCxbdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuRlRQOnQ9dGhpcy5mYi5ncm91cCh7bWV0aG9kRmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuT0NQUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNPQ0tFVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLGVuY29kaW5nOlthbi5VVEZfOCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx3aXRoUmVzcG9uc2U6WyExLFtdXX0pO2JyZWFrO2Nhc2UgX3QuWE1QUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNOTVA6dD10aGlzLmZiLmdyb3VwKHtyZXF1ZXN0RmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx3aXRoUmVzcG9uc2U6WyExLFtdXSxvaWQ6dGhpcy5mYi5hcnJheShbXSxbdWUucmVxdWlyZWRdKX0pO2JyZWFrO2Nhc2UgX3QuUkVTVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwTWV0aG9kOltudWxsLFt1ZS5yZXF1aXJlZF1dLHJlcXVlc3RVcmxFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKHRoaXMudXJsUGF0dGVybildXSxyZXNwb25zZVRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSx0aW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdHJpZXM6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwSGVhZGVyczp0aGlzLmZiLmFycmF5KFtdKSxzZWN1cml0eTpbe30sW3VlLnJlcXVpcmVkXV19KTticmVhaztjYXNlIF90LlJFUVVFU1Q6dD10aGlzLmZiLmdyb3VwKHttZXRob2RGaWx0ZXI6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saHR0cE1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxyZXF1ZXN0VXJsRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybih0aGlzLnVybFBhdHRlcm4pXV0scmVzcG9uc2VUaW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdGltZW91dDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKDEwKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHRyaWVzOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxyZXF1ZXN0VmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5wYXR0ZXJuKGt0KV1dLGh0dHBIZWFkZXJzOnRoaXMuZmIuYXJyYXkoW10pfSk7YnJlYWs7ZGVmYXVsdDp0PXRoaXMuZmIuZ3JvdXAoe2NvbW1hbmQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFyYW1zOlt7fSxbSXRdXX0pfXJldHVybiB0fWFkZFNOTVBvaWQoZT1udWxsKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJvaWQiKTt0JiZ0LnB1c2godGhpcy5mYi5jb250cm9sKGUsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXSkse2VtaXRFdmVudDohMX0pfXJlbW92ZVNOTVBvaWQoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoIm9pZCIpLnJlbW92ZUF0KGUpfWFkZEhUVFBIZWFkZXIoZT17aGVhZGVyTmFtZTpudWxsLHZhbHVlOm51bGx9KXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJodHRwSGVhZGVycyIpLG49dGhpcy5mYi5ncm91cCh7aGVhZGVyTmFtZTpbZS5oZWFkZXJOYW1lLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlOltlLnZhbHVlLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7dCYmdC5wdXNoKG4se2VtaXRFdmVudDohMX0pfXJlbW92ZUhUVFBIZWFkZXIoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoImh0dHBIZWFkZXJzIikucmVtb3ZlQXQoZSl9Z2V0Rm9ybUFycmF5Q29udHJvbHMoZSl7cmV0dXJuIHRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpLmNvbnRyb2xzfW9wZW5FZGl0SlNPTkRpYWxvZyhlKXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlhbG9nLm9wZW4oUWUse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntqc29uVmFsdWU6dGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnZhbHVlLHJlcXVpcmVkOiEwfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnNldFZhbHVlKGUpfSkpfXNhdmUoKXt0aGlzLnNhdmVUZW1wbGF0ZS5lbWl0KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe31jbGVhckZyb21BcnJheUJ5TmFtZShlKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpO2Zvcig7MCE9PXQubGVuZ3RoOyl0LnJlbW92ZUF0KDApfXdyaXRlVmFsdWUoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtzd2l0Y2goZT1KKGUpLHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5TTk1QOnRoaXMuY2xlYXJGcm9tQXJyYXlCeU5hbWUoIm9pZCIpLGUub2lkLmZvckVhY2goKGU9Pnt0aGlzLmFkZFNOTVBvaWQoZSl9KSksZGVsZXRlIGUub2lkO2JyZWFrO2Nhc2UgX3QuUkVRVUVTVDpjYXNlIF90LlJFU1Q6dGhpcy5jbGVhckZyb21BcnJheUJ5TmFtZSgiaHR0cEhlYWRlcnMiKSxlLmh0dHBIZWFkZXJzJiZPYmplY3QuZW50cmllcyhlLmh0dHBIZWFkZXJzKS5mb3JFYWNoKChlPT57dGhpcy5hZGRIVFRQSGVhZGVyKHtoZWFkZXJOYW1lOmVbMF0sdmFsdWU6ZVsxXX0pfSkpLGRlbGV0ZSBlLmh0dHBIZWFkZXJzfXRoaXMuY29tbWFuZEZvcm0ucGF0Y2hWYWx1ZShlLHtvbmx5U2VsZjohMX0pfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6e2Nvbm5lY3RvclR5cGU6ImNvbm5lY3RvclR5cGUifSxvdXRwdXRzOntzZW5kQ29tbWFuZDoic2VuZENvbW1hbmQiLHNhdmVUZW1wbGF0ZToic2F2ZVRlbXBsYXRlIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hEZWZhdWx0LHNlbGVjdG9yOiJbbmdTd2l0Y2hEZWZhdWx0XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WmUuVGJKc29uVG9TdHJpbmdEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi1qc29uLXRvLXN0cmluZ10ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnouTWF0RGl2aWRlcixzZWxlY3RvcjoibWF0LWRpdmlkZXIiLGlucHV0czpbInZlcnRpY2FsIiwiaW5zZXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4QWxpZ25dLCBbZnhGbGV4QWxpZ24ueHNdLCBbZnhGbGV4QWxpZ24uc21dLCBbZnhGbGV4QWxpZ24ubWRdLCAgW2Z4RmxleEFsaWduLmxnXSwgW2Z4RmxleEFsaWduLnhsXSwgW2Z4RmxleEFsaWduLmx0LXNtXSwgW2Z4RmxleEFsaWduLmx0LW1kXSwgIFtmeEZsZXhBbGlnbi5sdC1sZ10sIFtmeEZsZXhBbGlnbi5sdC14bF0sIFtmeEZsZXhBbGlnbi5ndC14c10sIFtmeEZsZXhBbGlnbi5ndC1zbV0sICBbZnhGbGV4QWxpZ24uZ3QtbWRdLCBbZnhGbGV4QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeEZsZXhBbGlnbiIsImZ4RmxleEFsaWduLnhzIiwiZnhGbGV4QWxpZ24uc20iLCJmeEZsZXhBbGlnbi5tZCIsImZ4RmxleEFsaWduLmxnIiwiZnhGbGV4QWxpZ24ueGwiLCJmeEZsZXhBbGlnbi5sdC1zbSIsImZ4RmxleEFsaWduLmx0LW1kIiwiZnhGbGV4QWxpZ24ubHQtbGciLCJmeEZsZXhBbGlnbi5sdC14bCIsImZ4RmxleEFsaWduLmd0LXhzIiwiZnhGbGV4QWxpZ24uZ3Qtc20iLCJmeEZsZXhBbGlnbi5ndC1tZCIsImZ4RmxleEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUFycmF5TmFtZSxzZWxlY3RvcjoiW2Zvcm1BcnJheU5hbWVdIixpbnB1dHM6WyJmb3JtQXJyYXlOYW1lIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6SWEsc2VsZWN0b3I6InRiLXJlc3QtY29ubmVjdG9yLXNlY3VyaXR5In0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U2VydmljZVJQQ0Nvbm5lY3RvckNvbXBvbmVudCIsQWEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6QWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5BYSkpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpKZS5NYXREaWFsb2d9XSxwcm9wRGVjb3JhdG9yczp7Y29ubmVjdG9yVHlwZTpbe3R5cGU6YX1dLHNlbmRDb21tYW5kOlt7dHlwZTpsfV0sc2F2ZVRlbXBsYXRlOlt7dHlwZTpsfV19fSk7Y2xhc3MgTmEgZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LGEpLHRoaXMuc3RvcmU9ZSx0aGlzLnJvdXRlcj10LHRoaXMuZGF0YT1uLHRoaXMuZGlhbG9nUmVmPWEsdGhpcy5mYj1vLHRoaXMuY29uZmlnPXRoaXMuZGF0YS5jb25maWcsdGhpcy50ZW1wbGF0ZXM9dGhpcy5kYXRhLnRlbXBsYXRlcyx0aGlzLnRlbXBsYXRlTmFtZUN0cmw9dGhpcy5mYi5jb250cm9sKCIiLFt1ZS5yZXF1aXJlZF0pfXZhbGlkYXRlRHVwbGljYXRlTmFtZShlKXtjb25zdCB0PWUudmFsdWUudHJpbSgpO3JldHVybiEhdGhpcy50ZW1wbGF0ZXMuZmluZCgoZT0+ZS5uYW1lPT09dCkpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1zYXZlKCl7dGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnNldFZhbHVlKHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWx1ZS50cmltKCkpLHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnZhbHVlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5hLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOk5hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10b29sYmFyIGNvbG9yPSJwcmltYXJ5Ij5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy5zYXZlLXRlbXBsYXRlPC9oMj5cbiAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbWF0LXRvb2xiYXI+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0id2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayB0Yi12YWx1ZS10eXBlIiBzdHlsZT0iZmxleC1ncm93OiAwIj5cbiAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lPC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09InRlbXBsYXRlTmFtZUN0cmwiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0idGVtcGxhdGVOYW1lQ3RybC5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxkaXYgY2xhc3M9Im1hdC1tZGMtZm9ybS1maWVsZC1lcnJvciJcbiAgICAgICBzdHlsZT0ibWFyZ2luLXRvcDogLTE1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgZm9udC1zaXplOiAxNHB4OyJcbiAgICAgICAqbmdJZj0idmFsaWRhdGVEdXBsaWNhdGVOYW1lKHRlbXBsYXRlTmFtZUN0cmwpIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWUtZHVwbGljYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICA8YnV0dG9uIG1hdC1idXR0b25cbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICBbZGlzYWJsZWRdPSIhdGVtcGxhdGVOYW1lQ3RybC52YWxpZCJcbiAgICAgICAgICAoY2xpY2spPSJzYXZlKCkiPlxuICAgIHt7IFwnYWN0aW9uLnNhdmVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0FjdGlvbnMsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWFjdGlvbnNdLCBtYXQtZGlhbG9nLWFjdGlvbnMsIFttYXREaWFsb2dBY3Rpb25zXSIsaW5wdXRzOlsiYWxpZ24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dDb250ZW50LHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1jb250ZW50XSwgbWF0LWRpYWxvZy1jb250ZW50LCBbbWF0RGlhbG9nQ29udGVudF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb25uZWN0b3JUZW1wbGF0ZURpYWxvZ0NvbXBvbmVudCIsTmEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TmEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlLWRpYWxvZyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICA8aDIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnNhdmUtdGVtcGxhdGU8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJ3aWR0aDogNjAwcHgiIGNsYXNzPSJtYXQtY29udGVudCIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIHRiLXZhbHVlLXR5cGUiIHN0eWxlPSJmbGV4LWdyb3c6IDAiPlxuICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0idGVtcGxhdGVOYW1lQ3RybCIgcmVxdWlyZWQvPlxuICAgIDxtYXQtZXJyb3JcbiAgICAgICpuZ0lmPSJ0ZW1wbGF0ZU5hbWVDdHJsLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPGRpdiBjbGFzcz0ibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yIlxuICAgICAgIHN0eWxlPSJtYXJnaW4tdG9wOiAtMTVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDE0cHg7IlxuICAgICAgICpuZ0lmPSJ2YWxpZGF0ZUR1cGxpY2F0ZU5hbWUodGVtcGxhdGVOYW1lQ3RybCkiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1kdXBsaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIj5cbiAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgIFtkaXNhYmxlZF09IiF0ZW1wbGF0ZU5hbWVDdHJsLnZhbGlkIlxuICAgICAgICAgIChjbGljayk9InNhdmUoKSI+XG4gICAge3sgXCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBNYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKEduKSx0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy52YWx1ZVR5cGVzPVZuLHRoaXMub25DaGFuZ2U9ZT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXJndW1lbnRzOnRoaXMuZmIuYXJyYXkoW10pfSksdGhpcy5vYnNlcnZlVmFsdWVDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuY2xlYXJBcmd1bWVudHMoKSxlLmFyZ3VtZW50cz8ubWFwKCgoe3R5cGU6ZSx2YWx1ZTp0fSk9Pih7dHlwZTplLFtlXTp0fSkpKS5mb3JFYWNoKChlPT50aGlzLmFkZEFyZ3VtZW50KGUpKSksdGhpcy5jZHIubWFya0ZvckNoZWNrKCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlLm1ldGhvZCl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmFyZ3VtZW50cy5tYXAoKCh7dHlwZTplLC4uLnR9KT0+KHt0eXBlOmUsdmFsdWU6dFtlXX0pKSk7dGhpcy5vbkNoYW5nZSh7bWV0aG9kOmUubWV0aG9kLGFyZ3VtZW50czp0fSksdGhpcy5vblRvdWNoZWQoKX0pKX1yZW1vdmVBcmd1bWVudChlKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJhcmd1bWVudHMiKS5yZW1vdmVBdChlKX1hZGRBcmd1bWVudChlPXt9KXtjb25zdCB0PXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2UudHlwZT8/R24uU1RSSU5HXSxzdHJpbmc6W2Uuc3RyaW5nPz97dmFsdWU6IiIsZGlzYWJsZWQ6IShlZShlLHt9KXx8ZS5zdHJpbmcpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6ZS5pbnRlZ2VyPz8wLGRpc2FibGVkOiFpZShlLmludGVnZXIpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihMdCldXSxkb3VibGU6W3t2YWx1ZTplLmRvdWJsZT8/MCxkaXNhYmxlZDohaWUoZS5kb3VibGUpfSxbdWUucmVxdWlyZWRdXSxib29sZWFuOlt7dmFsdWU6ZS5ib29sZWFuPz8hMSxkaXNhYmxlZDohaWUoZS5ib29sZWFuKX0sW3VlLnJlcXVpcmVkXV19KTt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKHQpLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpLnB1c2godCx7ZW1pdEV2ZW50OiExfSl9Y2xlYXJBcmd1bWVudHMoKXtjb25zdCBlPXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpO2Zvcig7MCE9PWUubGVuZ3RoOyllLnJlbW92ZUF0KDApfW9ic2VydmVUeXBlQ2hhbmdlKGUpe2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e2UuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoInR5cGUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KHQpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpNYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpNYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+TWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCB0Yi1mbGV4IG5vLXBhZGRpbmctdG9wIGhpbnQtY29udGFpbmVyIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLmhpbnQub3BjLW1ldGhvZFwnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Im11bHRpcGx5Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxmaWVsZHNldCBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIGFyZ3VtZW50cy1jb250YWluZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZvcm1BcnJheU5hbWU9ImFyZ3VtZW50cyI+XG4gICAgPHN0cm9uZz5cbiAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9zdHJvbmc+XG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAqbmdGb3I9ImxldCBhcmd1bWVudEZvcm1Hcm91cCBvZiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FyZ3VtZW50c1wnKVtcJ2NvbnRyb2xzXCddOyBsZXQgaSA9IGluZGV4IiBbZm9ybUdyb3VwXT0iYXJndW1lbnRGb3JtR3JvdXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIHR5cGUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTE4IiBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHZhbHVlVHlwZSBvZiB2YWx1ZVR5cGVLZXlzIiBbdmFsdWVdPSJ2YWx1ZVR5cGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB2YWx1ZS1jb250YWluZXIiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuU1RSSU5HIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9InN0cmluZyJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLkRPVUJMRSIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJkb3VibGUiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5CT09MRUFOIiBmb3JtQ29udHJvbE5hbWU9ImJvb2xlYW4iPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJ0cnVlIj50cnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVBcmd1bWVudChpKSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgIChjbGljayk9ImFkZEFyZ3VtZW50KCkiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy5hZGQtYXJndW1lbnRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2ZpZWxkc2V0PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuYXJndW1lbnRzLWNvbnRhaW5lcnttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnR5cGUtY29udGFpbmVye3dpZHRoOjQwJX06aG9zdCAudmFsdWUtY29udGFpbmVye3dpZHRoOjUwJX06aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp3ZS5NYXRTZWxlY3RUcmlnZ2VyLHNlbGVjdG9yOiJtYXQtc2VsZWN0LXRyaWdnZXIifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEdhcERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRHYXBdLCBbZnhMYXlvdXRHYXAueHNdLCBbZnhMYXlvdXRHYXAuc21dLCBbZnhMYXlvdXRHYXAubWRdLCAgW2Z4TGF5b3V0R2FwLmxnXSwgW2Z4TGF5b3V0R2FwLnhsXSwgW2Z4TGF5b3V0R2FwLmx0LXNtXSwgW2Z4TGF5b3V0R2FwLmx0LW1kXSwgIFtmeExheW91dEdhcC5sdC1sZ10sIFtmeExheW91dEdhcC5sdC14bF0sIFtmeExheW91dEdhcC5ndC14c10sIFtmeExheW91dEdhcC5ndC1zbV0sICBbZnhMYXlvdXRHYXAuZ3QtbWRdLCBbZnhMYXlvdXRHYXAuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEdhcCIsImZ4TGF5b3V0R2FwLnhzIiwiZnhMYXlvdXRHYXAuc20iLCJmeExheW91dEdhcC5tZCIsImZ4TGF5b3V0R2FwLmxnIiwiZnhMYXlvdXRHYXAueGwiLCJmeExheW91dEdhcC5sdC1zbSIsImZ4TGF5b3V0R2FwLmx0LW1kIiwiZnhMYXlvdXRHYXAubHQtbGciLCJmeExheW91dEdhcC5sdC14bCIsImZ4TGF5b3V0R2FwLmd0LXhzIiwiZnhMYXlvdXRHYXAuZ3Qtc20iLCJmeExheW91dEdhcC5ndC1tZCIsImZ4TGF5b3V0R2FwLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhBbGlnbl0sIFtmeEZsZXhBbGlnbi54c10sIFtmeEZsZXhBbGlnbi5zbV0sIFtmeEZsZXhBbGlnbi5tZF0sICBbZnhGbGV4QWxpZ24ubGddLCBbZnhGbGV4QWxpZ24ueGxdLCBbZnhGbGV4QWxpZ24ubHQtc21dLCBbZnhGbGV4QWxpZ24ubHQtbWRdLCAgW2Z4RmxleEFsaWduLmx0LWxnXSwgW2Z4RmxleEFsaWduLmx0LXhsXSwgW2Z4RmxleEFsaWduLmd0LXhzXSwgW2Z4RmxleEFsaWduLmd0LXNtXSwgIFtmeEZsZXhBbGlnbi5ndC1tZF0sIFtmeEZsZXhBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4RmxleEFsaWduIiwiZnhGbGV4QWxpZ24ueHMiLCJmeEZsZXhBbGlnbi5zbSIsImZ4RmxleEFsaWduLm1kIiwiZnhGbGV4QWxpZ24ubGciLCJmeEZsZXhBbGlnbi54bCIsImZ4RmxleEFsaWduLmx0LXNtIiwiZnhGbGV4QWxpZ24ubHQtbWQiLCJmeEZsZXhBbGlnbi5sdC1sZyIsImZ4RmxleEFsaWduLmx0LXhsIiwiZnhGbGV4QWxpZ24uZ3QteHMiLCJmeEZsZXhBbGlnbi5ndC1zbSIsImZ4RmxleEFsaWduLmd0LW1kIiwiZnhGbGV4QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1BcnJheU5hbWUsc2VsZWN0b3I6Iltmb3JtQXJyYXlOYW1lXSIsaW5wdXRzOlsiZm9ybUFycmF5TmFtZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk1hLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk1hKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm9wYy1tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJtdWx0aXBseSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8ZmllbGRzZXQgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBhcmd1bWVudHMtY29udGFpbmVyIiBmeExheW91dD0iY29sdW1uIiBmb3JtQXJyYXlOYW1lPSJhcmd1bWVudHMiPlxuICAgIDxzdHJvbmc+XG4gICAgICA8c3BhbiBjbGFzcz0iZmllbGRzLWxhYmVsIj57eyBcJ2dhdGV3YXkucnBjLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvc3Ryb25nPlxuICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgKm5nRm9yPSJsZXQgYXJndW1lbnRGb3JtR3JvdXAgb2YgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhcmd1bWVudHNcJylbXCdjb250cm9sc1wnXTsgbGV0IGkgPSBpbmRleCIgW2Zvcm1Hcm91cF09ImFyZ3VtZW50Rm9ybUdyb3VwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB0eXBlLWNvbnRhaW5lciIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdmFsdWUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLklOVEVHRVIiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iaW50ZWdlciIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5ET1VCTEUiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iZG91YmxlIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0idHJ1ZSI+dHJ1ZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iZmFsc2UiPmZhbHNlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXJndW1lbnRGb3JtR3JvdXAuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQXJndW1lbnQoaSkiXG4gICAgICAgICAgICAgIGNsYXNzPSJ0Yi1ib3gtYnV0dG9uIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICBmeEZsZXhBbGlnbj0ic3RhcnQiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGRBcmd1bWVudCgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWFyZ3VtZW50XCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9maWVsZHNldD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFyZ3VtZW50cy1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC50eXBlLWNvbnRhaW5lcnt3aWR0aDo0MCV9Omhvc3QgLnZhbHVlLWNvbnRhaW5lcnt3aWR0aDo1MCV9Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyBFYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5vbkNoYW5nZT1lPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXF1ZXN0VG9waWNFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVG9waWNFeHByZXNzaW9uOlt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUaW1lb3V0Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLm1pbigxMCksdWUucGF0dGVybihMdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVXaXRoUmVzcG9uc2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWxpZD9udWxsOntycGNQYXJhbWV0ZXJzRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlLndpdGhSZXNwb25zZSl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW9ic2VydmVXaXRoUmVzcG9uc2UoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ3aXRoUmVzcG9uc2UiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+dGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX10b2dnbGVSZXNwb25zZUZpZWxkcyhlKXtjb25zdCB0PXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInJlc3BvbnNlVG9waWNFeHByZXNzaW9uIiksbj10aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKTtlPyh0LmVuYWJsZSgpLG4uZW5hYmxlKCkpOih0LmRpc2FibGUoKSxuLmRpc2FibGUoKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+RWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXF1ZXN0LyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXJnaW4iIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSIgZm9ybUNvbnRyb2xOYW1lPSJ3aXRoUmVzcG9uc2UiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMud2l0aFJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9InNlbnNvci8ke2RldmljZU5hbWV9L3Jlc3BvbnNlLyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd3aXRoUmVzcG9uc2VcJyk/LnZhbHVlIj5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VUaW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9IjEwMDAwIiBtaW49IjEwIiBzdGVwPSIxIi8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAubWF0LW1kYy1zbGlkZS10b2dnbGUubWFyZ2lue21hcmdpbi1ib3R0b206MTBweDttYXJnaW4tbGVmdDoxMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkVhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9ImVjaG8iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0ic2Vuc29yLyR7ZGV2aWNlTmFtZX0vcmVxdWVzdC8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWFyZ2luIiAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3dpdGhSZXNwb25zZVwnKT8udmFsdWUiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXNwb25zZS8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIxMDAwMCIgbWluPSIxMCIgc3RlcD0iMSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L25nLWNvbnRhaW5lcj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBxYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNFZGl0YWJsZURhdGFUeXBlcz10YSx0aGlzLk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcD16dCx0aGlzLm1vZGJ1c0RhdGFUeXBlcz1PYmplY3QudmFsdWVzKGVhKSx0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcz1bNSw2LDE1LDE2XSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVszLDQsNiwxNl0sdGhpcy5yZWFkRnVuY3Rpb25Db2Rlcz1bMSwyLDMsNF0sdGhpcy5iaXRzRnVuY3Rpb25Db2Rlcz1bLi4udGhpcy5yZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLndyaXRlRnVuY3Rpb25Db2Rlc10sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2VhLkJZVEVTLFt1ZS5yZXF1aXJlZF1dLGZ1bmN0aW9uQ29kZTpbdGhpcy5kZWZhdWx0RnVuY3Rpb25Db2Rlc1swXSxbdWUucmVxdWlyZWRdXSx2YWx1ZTpbe3ZhbHVlOiIiLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxhZGRyZXNzOltudWxsLFt1ZS5yZXF1aXJlZF1dLG9iamVjdHNDb3VudDpbMSxbdWUucmVxdWlyZWRdXX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2Rlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWUpLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpLHRoaXMub2JzZXJ2ZUtleURhdGFUeXBlKCksdGhpcy5vYnNlcnZlRnVuY3Rpb25Db2RlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlS2V5RGF0YVR5cGUoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoIm9iamVjdHNDb3VudCIpLnBhdGNoVmFsdWUobmFbZV0se2VtaXRFdmVudDohMX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlKX0pKX1vYnNlcnZlRnVuY3Rpb25Db2RlKCl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgiZnVuY3Rpb25Db2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWx1ZUVuYWJsaW5nKGUpKSl9dXBkYXRlVmFsdWVFbmFibGluZyhlKXt0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyhlKT90aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ2YWx1ZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6KHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInZhbHVlIikuc2V0VmFsdWUobnVsbCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgidmFsdWUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSl9dXBkYXRlRnVuY3Rpb25Db2RlcyhlKXt0aGlzLmZ1bmN0aW9uQ29kZXM9ZT09PWVhLkJJVFM/dGhpcy5iaXRzRnVuY3Rpb25Db2Rlczp0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzLHRoaXMuZnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJmdW5jdGlvbkNvZGUiKS52YWx1ZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUodGhpcy5mdW5jdGlvbkNvZGVzWzBdLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cWEsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnFhKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy1yZXNwb25zZS1yZWFkaW5nXCcgfCB0cmFuc2xhdGUgfX08YnI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9uc1wnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNEYXRhVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IHR5cGUgfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZnVuY3Rpb25Db2RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29kZSBvZiBmdW5jdGlvbkNvZGVzIiBbdmFsdWVdPSJjb2RlIj57eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iNTAwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImFkZHJlc3MiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYWRkcmVzcy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FkZHJlc3NcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm9iamVjdHNDb3VudFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICBtaW49IjEiXG4gICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJ3cml0ZUZ1bmN0aW9uQ29kZXMuaW5jbHVkZXMocnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdmdW5jdGlvbkNvZGVcJykudmFsdWUpIiBmeEZsZXggZnhMYXlvdXQ9InJvdyI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMTAwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndmFsdWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIlxuICAgICAgPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5xYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggbm8tcGFkZGluZy10b3AgaGludC1jb250YWluZXIiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtcmVzcG9uc2UtcmVhZGluZ1wnIHwgdHJhbnNsYXRlIH19PGJyPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtd3JpdGluZy1mdW5jdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzRGF0YVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyB0eXBlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmZ1bmN0aW9uQ29kZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImZ1bmN0aW9uQ29kZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvZGUgb2YgZnVuY3Rpb25Db2RlcyIgW3ZhbHVlXT0iY29kZSI+e3sgTW9kYnVzRnVuY3Rpb25Db2RlVHJhbnNsYXRpb25zTWFwLmdldChjb2RlKSB8IHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjUwMDAwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJhZGRyZXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmFkZHJlc3MtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnYWRkcmVzc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5vYmplY3RzQ291bnRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9Im51bWJlciJcbiAgICAgICAgbWluPSIxIlxuICAgICAgICBtYXg9IjUwMDAwIlxuICAgICAgICBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJvYmplY3RzQ291bnQiXG4gICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgIFtyZWFkb25seV09IiFNb2RidXNFZGl0YWJsZURhdGFUeXBlcy5pbmNsdWRlcyhycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpIlxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0id3JpdGVGdW5jdGlvbkNvZGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnZnVuY3Rpb25Db2RlXCcpLnZhbHVlKSIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjEwMCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciJcbiAgICAgID5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBEYXtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMudXRpbHM9bix0aGlzLmNkPWEsdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPW8sdGhpcy5jb250ZW50VHlwZXM9Ryx0aGlzLlJQQ0NvbW1hbmRzPVsiUGluZyIsIlN0YXRzIiwiRGV2aWNlcyIsIlVwZGF0ZSIsIlZlcnNpb24iLCJSZXN0YXJ0IiwiUmVib290Il0sdGhpcy50ZW1wbGF0ZXM9W10sdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy50eXBlc1dpdGhVcGRhdGVkUGFyYW1zPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVUZW1wbGF0ZXMoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpLGRhdGFMb2FkaW5nOigpPT57fX19LHRoaXMuY29tbWFuZEZvcm09dGhpcy5mYi5ncm91cCh7Y29tbWFuZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx0aW1lOls2MCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV0scGFyYW1zOlsie30iLFtJdF1dLHJlc3VsdDpbbnVsbF19KX1uZ09uSW5pdCgpe2lmKHRoaXMuaXNDb25uZWN0b3I9dGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3IsdGhpcy5pc0Nvbm5lY3Rvcil7dGhpcy5jb25uZWN0b3JUeXBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpLmNvbm5lY3Rvcl9ycGMudmFsdWUudHlwZTtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udGFyZ2V0RGV2aWNlSWQsZW50aXR5TmFtZToiQ29ubmVjdG9yIixhdHRyaWJ1dGVzOlt7bmFtZTpgJHt0aGlzLmNvbm5lY3RvclR5cGV9X3RlbXBsYXRlYH1dfV07dGhpcy5jdHguc3Vic2NyaXB0aW9uQXBpLmNyZWF0ZVN1YnNjcmlwdGlvbkZyb21JbmZvKEEubGF0ZXN0LGUsdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zLCExLCEwKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnN1YnNjcmlwdGlvbj1lfSkpfWVsc2UgdGhpcy5jb21tYW5kRm9ybS5nZXQoImNvbW1hbmQiKS5zZXRWYWx1ZSh0aGlzLlJQQ0NvbW1hbmRzWzBdKX1zZW5kQ29tbWFuZChlKXt0aGlzLnJlc3VsdFRpbWU9bnVsbDtjb25zdCB0PWV8fHRoaXMuY29tbWFuZEZvcm0udmFsdWUsbj10aGlzLmlzQ29ubmVjdG9yP2Ake3RoaXMuY29ubmVjdG9yVHlwZX1fYDoiZ2F0ZXdheV8iLGE9dGhpcy5pc0Nvbm5lY3Rvcj90aGlzLmdldENvbW1hbmRGcm9tUGFyYW1zQnlUeXBlKHQucGFyYW1zKTp0LmNvbW1hbmQudG9Mb3dlckNhc2UoKSxvPXQucGFyYW1zO3RoaXMuY3R4LmNvbnRyb2xBcGkuc2VuZFR3b1dheUNvbW1hbmQobithLG8sdC50aW1lKS5zdWJzY3JpYmUoe25leHQ6ZT0+e3RoaXMucmVzdWx0VGltZT0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLmNvbW1hbmRGb3JtLmdldCgicmVzdWx0Iikuc2V0VmFsdWUoSlNPTi5zdHJpbmdpZnkoZSkpfSxlcnJvcjplPT57dGhpcy5yZXN1bHRUaW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGNvbnNvbGUuZXJyb3IoZSksdGhpcy5jb21tYW5kRm9ybS5nZXQoInJlc3VsdCIpLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGUuZXJyb3IpKX19KX1nZXRDb21tYW5kRnJvbVBhcmFtc0J5VHlwZShlKXtzd2l0Y2godGhpcy5jb25uZWN0b3JUeXBlKXtjYXNlIF90Lk1RVFQ6Y2FzZSBfdC5GVFA6Y2FzZSBfdC5TTk1QOmNhc2UgX3QuUkVTVDpjYXNlIF90LlJFUVVFU1Q6cmV0dXJuIGUubWV0aG9kRmlsdGVyO2Nhc2UgX3QuTU9EQlVTOnJldHVybiBlLnRhZztjYXNlIF90LkJBQ05FVDpjYXNlIF90LkNBTjpjYXNlIF90Lk9QQ1VBOnJldHVybiBlLm1ldGhvZDtjYXNlIF90LkJMRTpjYXNlIF90Lk9DUFA6Y2FzZSBfdC5TT0NLRVQ6Y2FzZSBfdC5YTVBQOnJldHVybiBlLm1ldGhvZFJQQztkZWZhdWx0OnJldHVybiBlLmNvbW1hbmR9fXNhdmVUZW1wbGF0ZSgpe3RoaXMuZGlhbG9nLm9wZW4oTmEse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntjb25maWc6dGhpcy5jb21tYW5kRm9ybS52YWx1ZS5wYXJhbXMsdGVtcGxhdGVzOnRoaXMudGVtcGxhdGVzfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57aWYoZSl7Y29uc3QgdD17bmFtZTplLGNvbmZpZzp0aGlzLmNvbW1hbmRGb3JtLnZhbHVlLnBhcmFtc30sbj10aGlzLnRlbXBsYXRlcyxhPW4uZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO2E+LTEmJm4uc3BsaWNlKGEsMSksbi5wdXNoKHQpO2NvbnN0IG89YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5Om8sdmFsdWU6bn1dKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9fSkpfXVzZVRlbXBsYXRlKGUpe3RoaXMuY29tbWFuZEZvcm0uZ2V0KCJwYXJhbXMiKS5wYXRjaFZhbHVlKGUuY29uZmlnKX11cGRhdGVUZW1wbGF0ZXMoKXt0aGlzLnRlbXBsYXRlcz10aGlzLnN1YnNjcmlwdGlvbi5kYXRhWzBdLmRhdGFbMF1bMV0ubGVuZ3RoP0pTT04ucGFyc2UodGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhWzBdWzFdKTpbXSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVFcnJvcihlKXtjb25zdCB0PXRoaXMudXRpbHMucGFyc2VFeGNlcHRpb24oZSk7bGV0IG49dC5uYW1lO3QubWVzc2FnZSYmKG4rPSI6ICIrdC5tZXNzYWdlKSxjb25zb2xlLmVycm9yKG4pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RGEsZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpEYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBmeExheW91dD0iY29sdW1uIiBmeEZsZXggW25nQ2xhc3NdPSJ7XCdib3JkZXJcJzogaXNDb25uZWN0b3J9Ij5cbiAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dC5sdC1zbT0iY29sdW1uIiBjbGFzcz0iY29tbWFuZC1mb3JtIiBmeExheW91dEdhcD0iMTBweCIgW2Zvcm1Hcm91cF09ImNvbW1hbmRGb3JtIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSIhaXNDb25uZWN0b3I7IGVsc2UgY29ubmVjdG9yRm9ybSI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29tbWFuZCBvZiBSUENDb21tYW5kcyIgW3ZhbHVlXT0iY29tbWFuZCI+XG4gICAgICAgICAgICB7eyBjb21tYW5kIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LW1zXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiLz5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZEZvcm0uZ2V0KFwndGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5pbnZhbGlkIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNlbmRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb25uZWN0b3JGb3JtPlxuICAgICAgPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yXG4gICAgICAgICpuZ0lmPSIhdHlwZXNXaXRoVXBkYXRlZFBhcmFtcy5oYXMoY29ubmVjdG9yVHlwZSkgZWxzZSB1cGRhdGVkUGFyYW1ldGVycyJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiXG4gICAgICAgIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSJcbiAgICAgICAgKHNlbmRDb21tYW5kKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgKHNhdmVUZW1wbGF0ZSk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgLz5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlZFBhcmFtZXRlcnM+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InJwYy1wYXJhbWV0ZXJzIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0Yi1mb3JtLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRpdGxlXCcgfCB0cmFuc2xhdGU6IHt0eXBlOiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlcy5nZXQoY29ubmVjdG9yVHlwZSl9IH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1xdHQtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NUVRUIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgICAgPHRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuT1BDVUEiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUtYWN0aW9ucyIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2F2ZVRlbXBsYXRlKCkiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmdldChcJ3BhcmFtc1wnKS5pbnZhbGlkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxzZWN0aW9uIGNsYXNzPSJyZXN1bHQtYmxvY2siIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPHNwYW4+e3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXJlc3VsdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8ZGl2ICpuZ0lmPSJyZXN1bHRUaW1lIiBjbGFzcz0icmVzdWx0LXRpbWUiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+c2NoZWR1bGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyByZXN1bHRUaW1lIHwgZGF0ZTogXCd5eXl5L01NL2RkIEhIOm1tOnNzXCcgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG4gICAgPHRiLWpzb24tY29udGVudCBbY29udGVudFR5cGVdPSJjb250ZW50VHlwZXMuSlNPTiIgcmVhZG9ubHk9InRydWUiIGZvcm1Db250cm9sTmFtZT0icmVzdWx0Ij48L3RiLWpzb24tY29udGVudD5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG48dGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIGZ4RmxleD0iMzAiICpuZ0lmPSJpc0Nvbm5lY3RvciIgY2xhc3M9ImJvcmRlciIgW3JwY1RlbXBsYXRlc109InRlbXBsYXRlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N0eF09ImN0eCIgW2Nvbm5lY3RvclR5cGVdPSJjb25uZWN0b3JUeXBlIiAodXNlVGVtcGxhdGUpPSJ1c2VUZW1wbGF0ZSgkZXZlbnQpIj5cbjwvdGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3BhZGRpbmc6MCA1cHh9Omhvc3Q+KntoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfTpob3N0PnRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlczpsYXN0LWNoaWxke21hcmdpbi1sZWZ0OjEwcHh9Omhvc3QgLmNvbW1hbmQtZm9ybXtmbGV4LXdyYXA6bm93cmFwO3BhZGRpbmc6MCA1cHggNXB4fTpob3N0IC5jb21tYW5kLWZvcm0+YnV0dG9ue21hcmdpbi10b3A6MTBweH06aG9zdCAucnBjLXBhcmFtZXRlcnN7d2lkdGg6MTAwJX06aG9zdCAucmVzdWx0LWJsb2Nre3BhZGRpbmc6MCA1cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFue2ZvbnQtd2VpZ2h0OjYwMDtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjI1cHg7ei1pbmRleDo1O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAucmVzdWx0LWJsb2NrPnNwYW4gLnJlc3VsdC10aW1lIHNwYW57cGFkZGluZy1sZWZ0OjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jayB0Yi1qc29uLWNvbnRlbnR7ZmxleDoxfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0NsYXNzLHNlbGVjdG9yOiJbbmdDbGFzc10iLGlucHV0czpbImNsYXNzIiwibmdDbGFzcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6c3QuSnNvbkNvbnRlbnRDb21wb25lbnQsc2VsZWN0b3I6InRiLWpzb24tY29udGVudCIsaW5wdXRzOlsibGFiZWwiLCJjb250ZW50VHlwZSIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwidGJQbGFjZWhvbGRlciIsImhpZGVUb29sYmFyIiwicmVhZG9ubHkiLCJ2YWxpZGF0ZUNvbnRlbnQiLCJ2YWxpZGF0ZU9uQ2hhbmdlIiwicmVxdWlyZWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOk1hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbW9kYnVzLXJwYy1wYXJhbWV0ZXJzIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIiwiY3R4IiwicnBjVGVtcGxhdGVzIl0sb3V0cHV0czpbInNhdmVUZW1wbGF0ZSIsInVzZVRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIl0sb3V0cHV0czpbInNlbmRDb21tYW5kIiwic2F2ZVRlbXBsYXRlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb21wb25lbnQiLERhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkRhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgZnhGbGV4IFtuZ0NsYXNzXT0ie1wnYm9yZGVyXCc6IGlzQ29ubmVjdG9yfSI+XG4gIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtc209ImNvbHVtbiIgY2xhc3M9ImNvbW1hbmQtZm9ybSIgZnhMYXlvdXRHYXA9IjEwcHgiIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIWlzQ29ubmVjdG9yOyBlbHNlIGNvbm5lY3RvckZvcm0iPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgUlBDQ29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQiPlxuICAgICAgICAgICAge3sgY29tbWFuZCB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1tc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InRpbWUiIHR5cGU9Im51bWJlciIgbWluPSIxIi8+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRGb3JtLmdldChcJ3RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29ubmVjdG9yRm9ybT5cbiAgICAgIDx0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3RvclxuICAgICAgICAqbmdJZj0iIXR5cGVzV2l0aFVwZGF0ZWRQYXJhbXMuaGFzKGNvbm5lY3RvclR5cGUpIGVsc2UgdXBkYXRlZFBhcmFtZXRlcnMiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIlxuICAgICAgICBbY29ubmVjdG9yVHlwZV09ImNvbm5lY3RvclR5cGUiXG4gICAgICAgIChzZW5kQ29tbWFuZCk9InNlbmRDb21tYW5kKCkiXG4gICAgICAgIChzYXZlVGVtcGxhdGUpPSJzYXZlVGVtcGxhdGUoKSJcbiAgICAgIC8+XG4gICAgICA8bmctdGVtcGxhdGUgI3VwZGF0ZWRQYXJhbWV0ZXJzPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJycGMtcGFyYW1ldGVycyI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGItZm9ybS1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50aXRsZVwnIHwgdHJhbnNsYXRlOiB7dHlwZTogZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXMuZ2V0KGNvbm5lY3RvclR5cGUpfSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NT0RCVVMiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRlbXBsYXRlLWFjdGlvbnMiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zYXZlLXRlbXBsYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uZ2V0KFwncGFyYW1zXCcpLmludmFsaWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8c2VjdGlvbiBjbGFzcz0icmVzdWx0LWJsb2NrIiBbZm9ybUdyb3VwXT0iY29tbWFuZEZvcm0iPlxuICAgIDxzcGFuPnt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1yZXN1bHRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPGRpdiAqbmdJZj0icmVzdWx0VGltZSIgY2xhc3M9InJlc3VsdC10aW1lIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnNjaGVkdWxlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgcmVzdWx0VGltZSB8IGRhdGU6IFwneXl5eS9NTS9kZCBISDptbTpzc1wnIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9zcGFuPlxuICAgIDx0Yi1qc29uLWNvbnRlbnQgW2NvbnRlbnRUeXBlXT0iY29udGVudFR5cGVzLkpTT04iIHJlYWRvbmx5PSJ0cnVlIiBmb3JtQ29udHJvbE5hbWU9InJlc3VsdCI+PC90Yi1qc29uLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcyBmeEZsZXg9IjMwIiAqbmdJZj0iaXNDb25uZWN0b3IiIGNsYXNzPSJib3JkZXIiIFtycGNUZW1wbGF0ZXNdPSJ0ZW1wbGF0ZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdHhdPSJjdHgiIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSIgKHVzZVRlbXBsYXRlKT0idXNlVGVtcGxhdGUoJGV2ZW50KSI+XG48L3RiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcz5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztwYWRkaW5nOjAgNXB4fTpob3N0Pip7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b306aG9zdD50Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXM6bGFzdC1jaGlsZHttYXJnaW4tbGVmdDoxMHB4fTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcDtwYWRkaW5nOjAgNXB4IDVweH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLnJwYy1wYXJhbWV0ZXJze3dpZHRoOjEwMCV9Omhvc3QgLnJlc3VsdC1ibG9ja3twYWRkaW5nOjAgNXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxfTpob3N0IC5yZXN1bHQtYmxvY2s+c3Bhbntmb250LXdlaWdodDo2MDA7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2s+c3BhbiAucmVzdWx0LXRpbWV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDoyNXB4O3otaW5kZXg6NTtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZSBzcGFue3BhZGRpbmctbGVmdDoxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2sgdGItanNvbi1jb250ZW50e2ZsZXg6MX06aG9zdCAuYm9yZGVye3BhZGRpbmc6MTZweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5VdGlsc1NlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTtjbGFzcyBQYSBleHRlbmRzIFB7Y29uc3RydWN0b3IoZSx0LG4sYSxvKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5nYXRld2F5TmFtZT10aGlzLmRhdGEuZ2F0ZXdheU5hbWUsdGhpcy5nYXRld2F5Q29udHJvbD10aGlzLmZiLmNvbnRyb2woIiIpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX10dXJuT2ZmKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoITApfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6UGEsc2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbicsZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fXZhciBHYTtlKCJHYXRld2F5UmVtb3RlQ29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCIsUGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pLGZ1bmN0aW9uKGUpe2UudGxzPSJ0bHMiLGUuYWNjZXNzVG9rZW49ImFjY2Vzc1Rva2VuIn0oR2F8fChHYT17fSkpO2NvbnN0IE9hPSJjb25maWd1cmF0aW9uX2RyYWZ0cyIsUmE9IlJlbW90ZUxvZ2dpbmdMZXZlbCIsVmE9bmV3IE1hcChbW0dhLnRscywiZ2F0ZXdheS5zZWN1cml0eS10eXBlcy50bHMiXSxbR2EuYWNjZXNzVG9rZW4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl1dKTt2YXIgQmEsVWE7IWZ1bmN0aW9uKGUpe2Uubm9uZT0iTk9ORSIsZS5jcml0aWNhbD0iQ1JJVElDQUwiLGUuZXJyb3I9IkVSUk9SIixlLndhcm5pbmc9IldBUk5JTkciLGUuaW5mbz0iSU5GTyIsZS5kZWJ1Zz0iREVCVUcifShCYXx8KEJhPXt9KSksZnVuY3Rpb24oZSl7ZS5tZW1vcnk9Im1lbW9yeSIsZS5maWxlPSJmaWxlIn0oVWF8fChVYT17fSkpO2NvbnN0IF9hPW5ldyBNYXAoW1tVYS5tZW1vcnksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtVYS5maWxlLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl1dKTt2YXIgSGE7IWZ1bmN0aW9uKGUpe2UubXF0dD0iTVFUVCIsZS5tb2RidXM9Ik1vZGJ1cyIsZS5vcGN1YT0iT1BDLVVBIixlLmJsZT0iQkxFIixlLnJlcXVlc3Q9IlJlcXVlc3QiLGUuY2FuPSJDQU4iLGUuYmFjbmV0PSJCQUNuZXQiLGUuY3VzdG9tPSJDdXN0b20ifShIYXx8KEhhPXt9KSk7Y29uc3QgemE9e2NvbmZpZzp7fSxuYW1lOiIiLGNvbmZpZ1R5cGU6bnVsbCxlbmFibGVkOiExfTtmdW5jdGlvbiBXYShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZS52YWx1ZSk9PT1KU09OLnN0cmluZ2lmeSh7fSk/e3ZhbGlkSlNPTjohMH06bnVsbH1jb25zdCBqYT0nW2xvZ2dlcnNdfX1rZXlzPXJvb3QsIHNlcnZpY2UsIGNvbm5lY3RvciwgY29udmVydGVyLCB0Yl9jb25uZWN0aW9uLCBzdG9yYWdlLCBleHRlbnNpb259fVtoYW5kbGVyc119fWtleXM9Y29uc29sZUhhbmRsZXIsIHNlcnZpY2VIYW5kbGVyLCBjb25uZWN0b3JIYW5kbGVyLCBjb252ZXJ0ZXJIYW5kbGVyLCB0Yl9jb25uZWN0aW9uSGFuZGxlciwgc3RvcmFnZUhhbmRsZXIsIGV4dGVuc2lvbkhhbmRsZXJ9fVtmb3JtYXR0ZXJzXX19a2V5cz1Mb2dGb3JtYXR0ZXJ9fVtsb2dnZXJfcm9vdF19fWxldmVsPUVSUk9SfX1oYW5kbGVycz1jb25zb2xlSGFuZGxlcn19W2xvZ2dlcl9jb25uZWN0b3JdfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz1jb25uZWN0b3JIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1jb25uZWN0b3J9fVtsb2dnZXJfc3RvcmFnZV19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPXN0b3JhZ2VIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1zdG9yYWdlfX1bbG9nZ2VyX3RiX2Nvbm5lY3Rpb25dfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz10Yl9jb25uZWN0aW9uSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9dGJfY29ubmVjdGlvbn19W2xvZ2dlcl9zZXJ2aWNlXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9c2VydmljZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPXNlcnZpY2V9fVtsb2dnZXJfY29udmVydGVyXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9Y29udmVydGVySGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9Y29udmVydGVyfX1bbG9nZ2VyX2V4dGVuc2lvbl19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPWNvbm5lY3RvckhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPWV4dGVuc2lvbn19W2hhbmRsZXJfY29uc29sZUhhbmRsZXJdfX1jbGFzcz1TdHJlYW1IYW5kbGVyfX1sZXZlbD17RVJST1J9fX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1hcmdzPShzeXMuc3Rkb3V0LCl9fVtoYW5kbGVyX2Nvbm5lY3RvckhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWNvbm5lY3Rvci5sb2ciLCAiZCIsIDEsIDcsKX19W2hhbmRsZXJfc3RvcmFnZUhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXN0b3JhZ2UubG9nIiwgImQiLCAxLCA3LCl9fVtoYW5kbGVyX3NlcnZpY2VIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31zZXJ2aWNlLmxvZyIsICJkIiwgMSwgNywpfX1baGFuZGxlcl9jb252ZXJ0ZXJIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31jb252ZXJ0ZXIubG9nIiwgImQiLCAxLCAzLCl9fVtoYW5kbGVyX2V4dGVuc2lvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWV4dGVuc2lvbi5sb2ciLCAiZCIsIDEsIDMsKX19W2hhbmRsZXJfdGJfY29ubmVjdGlvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXRiX2Nvbm5lY3Rpb24ubG9nIiwgImQiLCAxLCAzLCl9fVtmb3JtYXR0ZXJfTG9nRm9ybWF0dGVyXX19Zm9ybWF0PSIlKGFzY3RpbWUpcyAtICUobGV2ZWxuYW1lKXMgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiIH19ZGF0ZWZtdD0iJVktJW0tJWQgJUg6JU06JVMiJztmdW5jdGlvbiBLYShlKXtyZXR1cm4gZS5yZXBsYWNlKCJfIiwiIikucmVwbGFjZSgiLSIsIiIpLnJlcGxhY2UoL15ccyt8XHMrL2csIiIpLnRvTG93ZXJDYXNlKCkrIi5qc29uIn1mdW5jdGlvbiAkYShlLHQpe3JldHVybiBqYS5yZXBsYWNlKC97RVJST1J9L2csZSkucmVwbGFjZSgvey5cL2xvZ3NcL30vZyx0KX1mdW5jdGlvbiBZYShlKXtyZXR1cm57aWQ6ZSxlbnRpdHlUeXBlOkkuREVWSUNFfX1mdW5jdGlvbiBRYShlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwidGhpbmdzYm9hcmQiKSYmKHQuaG9zdD1lLnRoaW5nc2JvYXJkLmhvc3QsdC5wb3J0PWUudGhpbmdzYm9hcmQucG9ydCx0LnJlbW90ZUNvbmZpZ3VyYXRpb249ZS50aGluZ3Nib2FyZC5yZW1vdGVDb25maWd1cmF0aW9uLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnRoaW5nc2JvYXJkLnNlY3VyaXR5LEdhLmFjY2Vzc1Rva2VuKT8odC5zZWN1cml0eVR5cGU9R2EuYWNjZXNzVG9rZW4sdC5hY2Nlc3NUb2tlbj1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuKToodC5zZWN1cml0eVR5cGU9R2EudGxzLHQuY2FDZXJ0UGF0aD1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmNhQ2VydCx0LnByaXZhdGVLZXlQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkucHJpdmF0ZUtleSx0LmNlcnRQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkuY2VydCkpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJzdG9yYWdlIikmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnN0b3JhZ2UsInR5cGUiKSYmKGUuc3RvcmFnZS50eXBlPT09VWEubWVtb3J5Pyh0LnN0b3JhZ2VUeXBlPVVhLm1lbW9yeSx0LnJlYWRSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudCx0Lm1heFJlY29yZHNDb3VudD1lLnN0b3JhZ2UubWF4X3JlY29yZHNfY291bnQpOmUuc3RvcmFnZS50eXBlPT09VWEuZmlsZSYmKHQuc3RvcmFnZVR5cGU9VWEuZmlsZSx0LmRhdGFGb2xkZXJQYXRoPWUuc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoLHQubWF4RmlsZXNDb3VudD1lLnN0b3JhZ2UubWF4X2ZpbGVfY291bnQsdC5yZWFkUmVjb3Jkc0NvdW50PWUuc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnQsdC5tYXhSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50KSksdH1mdW5jdGlvbiBKYShlKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpbi5lbmFibGVkfHwodFtuLm5hbWVdPXtjb25uZWN0b3I6bi5jb25maWdUeXBlLGNvbmZpZzpuLmNvbmZpZ30pO3JldHVybiB0fWZ1bmN0aW9uIFhhKGUpe2NvbnN0IHQ9e3RoaW5nc2JvYXJkOlphKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KWlmKG4uZW5hYmxlZCl7Y29uc3QgdD1uLmNvbmZpZ1R5cGU7QXJyYXkuaXNBcnJheShlW3RdKXx8KGVbdF09W10pO2NvbnN0IGE9e25hbWU6bi5uYW1lLGNvbmZpZzpuLmNvbmZpZ307ZVt0XS5wdXNoKGEpfX0odCxlLmNvbm5lY3RvcnMpLHR9ZnVuY3Rpb24gWmEoZSl7bGV0IHQ7dD1lLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3thY2Nlc3NUb2tlbjplLmFjY2Vzc1Rva2VufTp7Y2FDZXJ0OmUuY2FDZXJ0UGF0aCxwcml2YXRlS2V5OmUucHJpdmF0ZUtleVBhdGgsY2VydDplLmNlcnRQYXRofTtjb25zdCBuPXtob3N0OmUuaG9zdCxyZW1vdGVDb25maWd1cmF0aW9uOmUucmVtb3RlQ29uZmlndXJhdGlvbixwb3J0OmUucG9ydCxzZWN1cml0eTp0fTtsZXQgYTthPWUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/e3R5cGU6VWEubWVtb3J5LHJlYWRfcmVjb3Jkc19jb3VudDplLnJlYWRSZWNvcmRzQ291bnQsbWF4X3JlY29yZHNfY291bnQ6ZS5tYXhSZWNvcmRzQ291bnR9Ont0eXBlOlVhLmZpbGUsZGF0YV9mb2xkZXJfcGF0aDplLmRhdGFGb2xkZXJQYXRoLG1heF9maWxlX2NvdW50OmUubWF4RmlsZXNDb3VudCxtYXhfcmVhZF9yZWNvcmRzX2NvdW50OmUucmVhZFJlY29yZHNDb3VudCxtYXhfcmVjb3Jkc19wZXJfZmlsZTplLm1heFJlY29yZHNDb3VudH07Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBvZiBlLmNvbm5lY3RvcnMpaWYodC5lbmFibGVkKXtjb25zdCBlPXtjb25maWd1cmF0aW9uOkthKHQubmFtZSksbmFtZTp0Lm5hbWUsdHlwZTp0LmNvbmZpZ1R5cGV9O28ucHVzaChlKX1yZXR1cm57dGhpbmdzYm9hcmQ6bixjb25uZWN0b3JzOm8sc3RvcmFnZTphLGxvZ3M6d2luZG93LmJ0b2EoJGEoZS5yZW1vdGVMb2dnaW5nTGV2ZWwsZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncykpfX1jbGFzcyBlbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5lbGVtZW50UmVmPXQsdGhpcy51dGlscz1uLHRoaXMubmdab25lPWEsdGhpcy5mYj1vLHRoaXMud2luZG93PWksdGhpcy5kaWFsb2c9cix0aGlzLnRyYW5zbGF0ZT1zLHRoaXMuZGV2aWNlU2VydmljZT1sLHRoaXMuYXR0cmlidXRlU2VydmljZT1jLHRoaXMuaW1wb3J0RXhwb3J0PXAsdGhpcy5hbGlnbm1lbnQ9InJvdyIsdGhpcy5sYXlvdXRHYXA9IjVweCIsdGhpcy5zZWN1cml0eVR5cGVzPVZhLHRoaXMuZ2F0ZXdheUxvZ0xldmVscz1PYmplY3Qua2V5cyhCYSkubWFwKChlPT5CYVtlXSkpLHRoaXMuY29ubmVjdG9yVHlwZXM9T2JqZWN0LmtleXMoSGEpLHRoaXMuc3RvcmFnZVR5cGVzPV9hLHRoaXMudG9hc3RUYXJnZXRJZD0iZ2F0ZXdheS1jb25maWd1cmF0aW9uLXdpZGdldCIrdGhpcy51dGlscy5ndWlkKCksdGhpcy5pc1JlYWRPbmx5Rm9ybT0hMX1nZXQgY29ubmVjdG9ycygpe3JldHVybiB0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KCJjb25uZWN0b3JzIil9bmdPbkluaXQoKXt0aGlzLmluaXRXaWRnZXRTZXR0aW5ncyh0aGlzLmN0eC5zZXR0aW5ncyksdGhpcy5jdHguZGF0YXNvdXJjZXMmJnRoaXMuY3R4LmRhdGFzb3VyY2VzLmxlbmd0aCYmKHRoaXMuZGV2aWNlTmFtZUZvcm09dGhpcy5jdHguZGF0YXNvdXJjZXNbMF0ubmFtZSksdGhpcy5idWlsZEZvcm0oKSx0aGlzLmN0eC51cGRhdGVXaWRnZXRQYXJhbXMoKSx0aGlzLmZvcm1SZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuZm9ybVJlc2l6ZSQub2JzZXJ2ZSh0aGlzLmZvcm1Db250YWluZXJSZWYubmF0aXZlRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1SZXNpemUkJiZ0aGlzLmZvcm1SZXNpemUkLmRpc2Nvbm5lY3QoKSx0aGlzLnN1YnNjcmliZUdhdGV3YXkkLnVuc3Vic2NyaWJlKCksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQudW5zdWJzY3JpYmUoKX1pbml0V2lkZ2V0U2V0dGluZ3MoZSl7bGV0IHQ7dD1lLmdhdGV3YXlUaXRsZSYmZS5nYXRld2F5VGl0bGUubGVuZ3RoP3RoaXMudXRpbHMuY3VzdG9tVHJhbnNsYXRpb24oZS5nYXRld2F5VGl0bGUsZS5nYXRld2F5VGl0bGUpOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuZ2F0ZXdheSIpLHRoaXMuY3R4LndpZGdldFRpdGxlPXQsdGhpcy5pc1JlYWRPbmx5Rm9ybT0hIWUucmVhZE9ubHkmJmUucmVhZE9ubHksdGhpcy5hcmNoaXZlRmlsZU5hbWU9ZS5hcmNoaXZlRmlsZU5hbWU/Lmxlbmd0aD9lLmFyY2hpdmVGaWxlTmFtZToiZ2F0ZXdheUNvbmZpZ3VyYXRpb24iLHRoaXMuZ2F0ZXdheVR5cGU9ZS5nYXRld2F5VHlwZT8ubGVuZ3RoP2UuZ2F0ZXdheVR5cGU6IkdhdGV3YXkiLHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHM9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLmdhdGV3YXlOYW1lRXhpc3RzLGUuZ2F0ZXdheU5hbWVFeGlzdHMpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktZXhpc3RzIiksdGhpcy5zdWNjZXNzZnVsU2F2ZWQ9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLnN1Y2Nlc3NmdWxTYXZlLGUuc3VjY2Vzc2Z1bFNhdmUpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktc2F2ZWQiKSx0aGlzLnVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKX1yZXNpemUoKXt0aGlzLm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVXaWRnZXREaXNwbGF5aW5nKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpfXVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKXt0aGlzLmN0eC4kY29udGFpbmVyJiZ0aGlzLmN0eC4kY29udGFpbmVyWzBdLm9mZnNldFdpZHRoPD00MjU/KHRoaXMubGF5b3V0R2FwPSIwIix0aGlzLmFsaWdubWVudD0iY29sdW1uIik6KHRoaXMubGF5b3V0R2FwPSI1cHgiLHRoaXMuYWxpZ25tZW50PSJyb3ciKX1zYXZlQXR0cmlidXRlKGUsdCxuKXtjb25zdCBhPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoImdhdGV3YXkiKS52YWx1ZSxvPXtrZXk6ZSx2YWx1ZTp0fTtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKFlhKGEpLG4sW29dKX1jcmVhdGVDb25uZWN0b3IoZT16YSl7dGhpcy5jb25uZWN0b3JzLnB1c2godGhpcy5mYi5ncm91cCh7ZW5hYmxlZDpbZS5lbmFibGVkXSxjb25maWdUeXBlOltlLmNvbmZpZ1R5cGUsW3VlLnJlcXVpcmVkXV0sbmFtZTpbZS5uYW1lLFt1ZS5yZXF1aXJlZF1dLGNvbmZpZzpbZS5jb25maWcsW3VlLm51bGxWYWxpZGF0b3IsV2FdXX0pKX1nZXRGb3JtRmllbGQoZSl7cmV0dXJuIHRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoZSl9YnVpbGRGb3JtKCl7dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwPXRoaXMuZmIuZ3JvdXAoe2dhdGV3YXk6W251bGwsW11dLGFjY2Vzc1Rva2VuOltudWxsLFt1ZS5yZXF1aXJlZF1dLHNlY3VyaXR5VHlwZTpbR2EuYWNjZXNzVG9rZW5dLGhvc3Q6W3RoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFt1ZS5yZXF1aXJlZF1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZUNvbmZpZ3VyYXRpb246WyEwXSxjYUNlcnRQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L2NhLnBlbSJdLHByaXZhdGVLZXlQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L3ByaXZhdGVLZXkucGVtIl0sY2VydFBhdGg6WyIvZXRjL3RoaW5nc2JvYXJkLWdhdGV3YXkvY2VydGlmaWNhdGUucGVtIl0scmVtb3RlTG9nZ2luZ0xldmVsOltCYS5kZWJ1Z10scmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3M6WyIuL2xvZ3MvIixbdWUucmVxdWlyZWRdXSxzdG9yYWdlVHlwZTpbVWEubWVtb3J5XSxyZWFkUmVjb3Jkc0NvdW50OlsxMDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhSZWNvcmRzQ291bnQ6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heEZpbGVzQ291bnQ6WzUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhRm9sZGVyUGF0aDpbIi4vZGF0YS8iLFt1ZS5yZXF1aXJlZF1dLGNvbm5lY3RvcnM6dGhpcy5mYi5hcnJheShbXSl9KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQ9dGhpcy5nZXRGb3JtRmllbGQoInN0b3JhZ2VUeXBlIikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2U9PT1VYS5tZW1vcnk/KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZGlzYWJsZSgpLHRoaXMuZ2V0Rm9ybUZpZWxkKCJkYXRhRm9sZGVyUGF0aCIpLmRpc2FibGUoKSk6KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZW5hYmxlKCksdGhpcy5nZXRGb3JtRmllbGQoImRhdGFGb2xkZXJQYXRoIikuZW5hYmxlKCkpfSkpLHRoaXMuc3Vic2NyaWJlR2F0ZXdheSQ9dGhpcy5nZXRGb3JtRmllbGQoImdhdGV3YXkiKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57bnVsbCE9PWU/QWUoW3RoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyhlKS5waXBlKEVlKChlPT57dGhpcy5nZXRGb3JtRmllbGQoImFjY2Vzc1Rva2VuIikucGF0Y2hWYWx1ZShlLmNyZWRlbnRpYWxzSWQpfSkpKSwuLi50aGlzLmdldEF0dHJpYnV0ZXMoZSldKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLm1hcmtBc1ByaXN0aW5lKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpOnRoaXMuZ2V0Rm9ybUZpZWxkKCJhY2Nlc3NUb2tlbiIpLnBhdGNoVmFsdWUoIiIpfSkpfWdhdGV3YXlFeGlzdCgpe3RoaXMuY3R4LnNob3dFcnJvclRvYXN0KHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHMsInRvcCIsImxlZnQiLHRoaXMudG9hc3RUYXJnZXRJZCl9ZXhwb3J0Q29uZmlnKCl7Y29uc3QgZT10aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUsdD17fTt2YXIgbixhLG87dFsidGJfZ2F0ZXdheS55YW1sIl09ZnVuY3Rpb24oZSl7bGV0IHQ7dD0idGhpbmdzYm9hcmQ6XG4iLHQrPSIgIGhvc3Q6ICIrZS5ob3N0KyJcbiIsdCs9IiAgcmVtb3RlQ29uZmlndXJhdGlvbjogIitlLnJlbW90ZUNvbmZpZ3VyYXRpb24rIlxuIix0Kz0iICBwb3J0OiAiK2UucG9ydCsiXG4iLHQrPSIgIHNlY3VyaXR5OlxuIixlLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3QrPSIgICAgYWNjZXNzLXRva2VuOiAiK2UuYWNjZXNzVG9rZW4rIlxuIjoodCs9IiAgICBjYV9jZXJ0OiAiK2UuY2FDZXJ0UGF0aCsiXG4iLHQrPSIgICAgcHJpdmF0ZUtleTogIitlLnByaXZhdGVLZXlQYXRoKyJcbiIsdCs9IiAgICBjZXJ0OiAiK2UuY2VydFBhdGgrIlxuIiksdCs9InN0b3JhZ2U6XG4iLGUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/KHQrPSIgIHR5cGU6IG1lbW9yeVxuIix0Kz0iICByZWFkX3JlY29yZHNfY291bnQ6ICIrZS5yZWFkUmVjb3Jkc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlY29yZHNfY291bnQ6ICIrZS5tYXhSZWNvcmRzQ291bnQrIlxuIik6KHQrPSIgIHR5cGU6IGZpbGVcbiIsdCs9IiAgZGF0YV9mb2xkZXJfcGF0aDogIitlLmRhdGFGb2xkZXJQYXRoKyJcbiIsdCs9IiAgbWF4X2ZpbGVfY291bnQ6ICIrZS5tYXhGaWxlc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlYWRfcmVjb3Jkc19jb3VudDogIitlLnJlYWRSZWNvcmRzQ291bnQrIlxuIix0Kz0iICBtYXhfcmVjb3Jkc19wZXJfZmlsZTogIitlLm1heFJlY29yZHNDb3VudCsiXG4iKSx0Kz0iY29ubmVjdG9yczpcbiI7Zm9yKGNvbnN0IG4gb2YgZS5jb25uZWN0b3JzKW4uZW5hYmxlZCYmKHQrPSIgIC1cbiIsdCs9IiAgICBuYW1lOiAiK24ubmFtZSsiXG4iLHQrPSIgICAgdHlwZTogIituLmNvbmZpZ1R5cGUrIlxuIix0Kz0iICAgIGNvbmZpZ3VyYXRpb246ICIrS2Eobi5uYW1lKSsiXG4iKTtyZXR1cm4gdH0oZSksZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KW4uZW5hYmxlZCYmKGVbS2Eobi5uYW1lKV09SlNPTi5zdHJpbmdpZnkobi5jb25maWcpKX0odCxlLmNvbm5lY3RvcnMpLG49dCxhPWUucmVtb3RlTG9nZ2luZ0xldmVsLG89ZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncyxuWyJsb2dzLmNvbmYiXT0kYShhLG8pLHRoaXMuaW1wb3J0RXhwb3J0LmV4cG9ydEpTWmlwKHQsdGhpcy5hcmNoaXZlRmlsZU5hbWUpLHRoaXMuc2F2ZUF0dHJpYnV0ZShSYSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUucmVtb3RlTG9nZ2luZ0xldmVsLnRvVXBwZXJDYXNlKCksTC5TSEFSRURfU0NPUEUpfWFkZE5ld0Nvbm5lY3Rvcigpe3RoaXMuY3JlYXRlQ29ubmVjdG9yKCl9cmVtb3ZlQ29ubmVjdG9yKGUpe2U+LTEmJih0aGlzLmNvbm5lY3RvcnMucmVtb3ZlQXQoZSksdGhpcy5jb25uZWN0b3JzLm1hcmtBc0RpcnR5KCkpfW9wZW5Db25maWdEaWFsb2coZSx0LG4sYSl7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpKSx0aGlzLmRpYWxvZy5vcGVuKFFlLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7anNvblZhbHVlOm4scmVxdWlyZWQ6ITAsdGl0bGU6dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS50aXRsZS1jb25uZWN0b3JzLWpzb24iLHt0eXBlTmFtZTphfSl9fSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGU9PntlJiYodGhpcy5jb25uZWN0b3JzLmF0KHQpLmdldCgiY29uZmlnIikucGF0Y2hWYWx1ZShlKSx0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzKCkpfSkpfWNyZWF0ZUNvbm5lY3Rvck5hbWUoZSx0LG49MCl7Y29uc3QgYT1uP3Qrbjp0O3JldHVybi0xPT09ZS5maW5kSW5kZXgoKGU9PmUubmFtZT09PWEpKT9hOnRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShlLHQsKytuKX12YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sYT0wKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3QgaT0wPT09YT90OnQrYTtvIT09biYmZVtvXS5uYW1lPT09aSYmdGhpcy52YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sKythKX1yZXR1cm4gMD09PWE/dDp0K2F9Y2hhbmdlQ29ubmVjdG9yVHlwZShlKXtpZighZS5nZXQoIm5hbWUiKS52YWx1ZSl7Y29uc3QgdD1lLmdldCgiY29uZmlnVHlwZSIpLnZhbHVlLG49dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLmNvbm5lY3RvcnM7ZS5nZXQoIm5hbWUiKS5wYXRjaFZhbHVlKHRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShuLEhhW3RdKSl9fWNoYW5nZUNvbm5lY3Rvck5hbWUoZSx0KXtjb25zdCBuPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZS5jb25uZWN0b3JzO2UuZ2V0KCJuYW1lIikucGF0Y2hWYWx1ZSh0aGlzLnZhbGlkYXRlQ29ubmVjdG9yTmFtZShuLGUuZ2V0KCJuYW1lIikudmFsdWUsdCkpfXNhdmUoKXtjb25zdCBlPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZTtBZShbdGhpcy5zYXZlQXR0cmlidXRlKCJjb25maWd1cmF0aW9uIix3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShYYShlKSkpLEwuU0hBUkVEX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoT2Esd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoSmEoZS5jb25uZWN0b3JzKSkpLEwuU0VSVkVSX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoUmEsdGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLnJlbW90ZUxvZ2dpbmdMZXZlbC50b1VwcGVyQ2FzZSgpLEwuU0hBUkVEX1NDT1BFKV0pLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmN0eC5zaG93U3VjY2Vzc1RvYXN0KHRoaXMuc3VjY2Vzc2Z1bFNhdmVkLDJlMywidG9wIiwibGVmdCIsdGhpcy50b2FzdFRhcmdldElkKSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAubWFya0FzUHJpc3RpbmUoKX0pKX1nZXRBdHRyaWJ1dGVzKGUpe2NvbnN0IHQ9W107cmV0dXJuIHQucHVzaChBZShbdGhpcy5nZXRBdHRyaWJ1dGUoImN1cnJlbnRfY29uZmlndXJhdGlvbiIsTC5DTElFTlRfU0NPUEUsZSksdGhpcy5nZXRBdHRyaWJ1dGUoT2EsTC5TRVJWRVJfU0NPUEUsZSldKS5waXBlKEVlKCgoW2UsdF0pPT57dGhpcy5zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpLHRoaXMuc2V0Rm9ybUNvbm5lY3RvcnNEcmFmdCh0KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSkpKSx0LnB1c2godGhpcy5nZXRBdHRyaWJ1dGUoUmEsTC5TSEFSRURfU0NPUEUsZSkucGlwZShFZSgoZT0+dGhpcy5wcm9jZXNzTG9nZ2luZ0xldmVsKGUpKSkpKSx0fWdldEF0dHJpYnV0ZShlLHQsbil7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKFlhKG4pLHQsW2VdKX1zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpe2lmKHRoaXMuY29ubmVjdG9ycy5jbGVhcigpLGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49dFtlXTtpZigidGhpbmdzYm9hcmQiPT09ZSludWxsIT09biYmT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJnRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5wYXRjaFZhbHVlKFFhKG4pKTtlbHNlIGZvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgYT0iTm8gbmFtZSI7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5bdF0sIm5hbWUiKSYmKGE9blt0XS5uYW1lKTtjb25zdCBvPXtlbmFibGVkOiEwLGNvbmZpZ1R5cGU6ZSxjb25maWc6blt0XS5jb25maWcsbmFtZTphfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihvKX19fX1zZXRGb3JtQ29ubmVjdG9yc0RyYWZ0KGUpe2lmKGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49e2VuYWJsZWQ6ITEsY29uZmlnVHlwZTp0W2VdLmNvbm5lY3Rvcixjb25maWc6dFtlXS5jb25maWcsbmFtZTplfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihuKX19fXByb2Nlc3NMb2dnaW5nTGV2ZWwoZSl7bGV0IHQ9QmEuZGVidWc7ZS5sZW5ndGg+MCYmQmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSYmKHQ9QmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSksdGhpcy5nZXRGb3JtRmllbGQoInJlbW90ZUxvZ2dpbmdMZXZlbCIpLnBhdGNoVmFsdWUodCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjp0LkVsZW1lbnRSZWZ9LHt0b2tlbjpYLlV0aWxzU2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dG9rZW46YWV9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpYLkRldmljZVNlcnZpY2V9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTplbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIixpbnB1dHM6e2N0eDoiY3R4Iixpc1N0YXRlRm9ybToiaXNTdGF0ZUZvcm0ifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToiZm9ybUNvbnRhaW5lclJlZiIsZmlyc3Q6ITAscHJlZGljYXRlOlsiZm9ybUNvbnRhaW5lciJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH0se3Byb3BlcnR5TmFtZToibXVsdGlwbGVJbnB1dEZvcm0iLGZpcnN0OiEwLHByZWRpY2F0ZTpbImdhdGV3YXlDb25maWd1cmF0aW9uRm9ybSJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGZvcm0gI2Zvcm1Db250YWluZXIgY2xhc3M9ImdhdGV3YXktZm9ybSJcbiAgICAgIFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwIlxuICAgICAgdGItdG9hc3QgdG9hc3RUYXJnZXQ9Int7IHRvYXN0VGFyZ2V0SWQgfX0iXG4gICAgICAobmdTdWJtaXQpPSJzYXZlKCkiPlxuICA8bWF0LWFjY29yZGlvbiBtdWx0aT0idHJ1ZSIgY2xhc3M9Im1hdC1ib2R5LTIiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmRcJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDx0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3RcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImdhdGV3YXkiXG4gICAgICAgICAgW2RldmljZU5hbWVdPSJkZXZpY2VOYW1lRm9ybSJcbiAgICAgICAgICBbaXNTdGF0ZUZvcm1dPSJpc1N0YXRlRm9ybSJcbiAgICAgICAgICBbbmV3R2F0ZXdheVR5cGVdPSJnYXRld2F5VHlwZSJcbiAgICAgICAgICAoZ2F0ZXdheU5hbWVFeGlzdCk9ImdhdGV3YXlFeGlzdCgpIlxuICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgID5cbiAgICAgIDwvdGItZW50aXR5LWdhdGV3YXktc2VsZWN0PlxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnNlY3VyaXR5LXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHlUeXBlIiA+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc2VjdXJpdHlUeXBlLnZhbHVlLnRvU3RyaW5nKCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblxuICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc2VjdXJpdHlUeXBlXCcpLnZhbHVlID09IFwndGxzXCciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNhLWNlcnRpZmljYXRlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1wcml2YXRlLWtleVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icHJpdmF0ZUtleVBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2VydFBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj57eyBcJ2dhdGV3YXkucmVtb3RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1jaGVja2JveD5cblxuICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVMb2dnaW5nTGV2ZWwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVscyIgW3ZhbHVlXT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICB7eyBsb2dMZXZlbCB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnBhdGgtbG9nc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3MiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS5wYXRoLWxvZ3MtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zdG9yYWdlXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuc3RvcmFnZS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzdG9yYWdlVHlwZS5rZXkiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0icmVhZFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVhZFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1wYWNrLXNpemUtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsID5cbiAgICAgICAgICAgICAge3sgKGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgIT09IFwnZmlsZVwnID8gXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHNcJyA6IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHNcJykgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4UmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgPT0gXCdmaWxlXCciPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heEZpbGVzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heEZpbGVzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1wYXRoXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImRhdGFGb2xkZXJQYXRoIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnZGF0YUZvbGRlclBhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtY29uZmlnXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJnYXRld2F5LWNvbmZpZyI+XG4gICAgICAgIDxzZWN0aW9uIGZvcm1BcnJheU5hbWU9ImNvbm5lY3RvcnMiICpuZ0Zvcj0ibGV0IGNvbm5lY3RvciBvZiBjb25uZWN0b3JzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4OyI+XG4gICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09ImkiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gc3RyZXRjaCIgZnhMYXlvdXRHYXA9IjhweCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBzdGFydCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIiBmeEZsZXg+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5jb25uZWN0b3ItdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJjb25maWdUeXBlIiAoc2VsZWN0aW9uQ2hhbmdlKT0iY2hhbmdlQ29ubmVjdG9yVHlwZShjb25uZWN0b3IpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbm5lY3RvclR5cGUgb2YgY29ubmVjdG9yVHlwZXMiIFt2YWx1ZV09ImNvbm5lY3RvclR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb25uZWN0b3JUeXBlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCdjb25maWdUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLXR5cGUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LmNvbm5lY3Rvci1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiAoYmx1cik9ImNoYW5nZUNvbm5lY3Rvck5hbWUoY29ubmVjdG9yLCBpKSI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29ubmVjdG9yLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5jb25uZWN0b3ItbmFtZS1yZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIlxuICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJ7e2FsaWdubWVudCA9PSBcJ3Jvd1wnID8gXCdlbmQgY2VudGVyXCcgOiBcJ3NwYWNlLWV2ZW5seSBjZW50ZXJcJ319IiBjbGFzcz0iYWN0aW9uLWJ1dHRvbnMiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0ib3BlbkNvbmZpZ0RpYWxvZygkZXZlbnQsIGksIGNvbm5lY3Rvci5nZXQoXCdjb25maWdcJykudmFsdWUsIGNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLnZhbHVlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkudXBkYXRlLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdtYXQtd2FyblwnOiBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLmludmFsaWR9Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV9ob3JpejwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb25uZWN0b3IoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPHNwYW4gW2Z4U2hvd109IiFjb25uZWN0b3JzLmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7XCdnYXRld2F5Lm5vLWNvbm5lY3RvcnNcJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT0iYnV0dG9uIiAoY2xpY2spPSJhZGROZXdDb25uZWN0b3IoKSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5jb25uZWN0b3ItYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXYgPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPC9tYXQtYWNjb3JkaW9uPlxuICA8c2VjdGlvbiBbZnhTaG93XT0iIWlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBjbGFzcz0iZm9ybS1hY3Rpb24tYnV0dG9ucyI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iZXhwb3J0Q29uZmlnKCkiXG4gICAgICAgICAgICAqbmdJZj0iIWdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LmRvd25sb2FkLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0ic3VibWl0IlxuICAgICAgICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LnNhdmUtdGlwXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAge3tcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9zZWN0aW9uPlxuPC9mb3JtPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5nYXRld2F5LWZvcm17aGVpZ2h0OjEwMCU7cGFkZGluZzo1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW59Omhvc3QgLmdhdGV3YXktZm9ybSAuZm9ybS1hY3Rpb24tYnV0dG9uc3twYWRkaW5nLXRvcDo4cHh9Omhvc3QgLmdhdGV3YXktZm9ybSAuZ2F0ZXdheS1jb25maWcgLm5vLWRhdGEtZm91bmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2hlaWdodDo0MHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Y3QuVG9hc3REaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi10b2FzdF0iLGlucHV0czpbInRvYXN0VGFyZ2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpwdC5NYXRDaGVja2JveCxzZWxlY3RvcjoibWF0LWNoZWNrYm94IixpbnB1dHM6WyJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsImlkIiwicmVxdWlyZWQiLCJsYWJlbFBvc2l0aW9uIiwibmFtZSIsInZhbHVlIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY29sb3IiLCJkaXNhYmxlZEludGVyYWN0aXZlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiaW5kZXRlcm1pbmF0ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJpbmRldGVybWluYXRlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEFjY29yZGlvbixzZWxlY3RvcjoibWF0LWFjY29yZGlvbiIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsImRpc3BsYXlNb2RlIiwidG9nZ2xlUG9zaXRpb24iXSxleHBvcnRBczpbIm1hdEFjY29yZGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0Q2xhc3NEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nQ2xhc3NdLCBbbmdDbGFzcy54c10sIFtuZ0NsYXNzLnNtXSwgW25nQ2xhc3MubWRdLCBbbmdDbGFzcy5sZ10sIFtuZ0NsYXNzLnhsXSwgIFtuZ0NsYXNzLmx0LXNtXSwgW25nQ2xhc3MubHQtbWRdLCBbbmdDbGFzcy5sdC1sZ10sIFtuZ0NsYXNzLmx0LXhsXSwgIFtuZ0NsYXNzLmd0LXhzXSwgW25nQ2xhc3MuZ3Qtc21dLCBbbmdDbGFzcy5ndC1tZF0sIFtuZ0NsYXNzLmd0LWxnXSIsaW5wdXRzOlsibmdDbGFzcyIsIm5nQ2xhc3MueHMiLCJuZ0NsYXNzLnNtIiwibmdDbGFzcy5tZCIsIm5nQ2xhc3MubGciLCJuZ0NsYXNzLnhsIiwibmdDbGFzcy5sdC1zbSIsIm5nQ2xhc3MubHQtbWQiLCJuZ0NsYXNzLmx0LWxnIiwibmdDbGFzcy5sdC14bCIsIm5nQ2xhc3MuZ3QteHMiLCJuZ0NsYXNzLmd0LXNtIiwibmdDbGFzcy5ndC1tZCIsIm5nQ2xhc3MuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS7JtU5nTm9WYWxpZGF0ZSxzZWxlY3RvcjoiZm9ybTpub3QoW25nTm9Gb3JtXSk6bm90KFtuZ05hdGl2ZVZhbGlkYXRlXSkifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTptdC5FbnRpdHlHYXRld2F5U2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3QiLGlucHV0czpbInJlcXVpcmVkIiwibmV3R2F0ZXdheVR5cGUiLCJkZXZpY2VOYW1lIiwiaXNTdGF0ZUZvcm0iXSxvdXRwdXRzOlsiZ2F0ZXdheU5hbWVFeGlzdCJdfSx7a2luZDoicGlwZSIsdHlwZTpfLlVwcGVyQ2FzZVBpcGUsbmFtZToidXBwZXJjYXNlIn0se2tpbmQ6InBpcGUiLHR5cGU6Xy5LZXlWYWx1ZVBpcGUsbmFtZToia2V5dmFsdWUifSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fWUoIkdhdGV3YXlGb3JtQ29tcG9uZW50IixlbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2Vcbjxmb3JtICNmb3JtQ29udGFpbmVyIGNsYXNzPSJnYXRld2F5LWZvcm0iXG4gICAgICBbZm9ybUdyb3VwXT0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cCJcbiAgICAgIHRiLXRvYXN0IHRvYXN0VGFyZ2V0PSJ7eyB0b2FzdFRhcmdldElkIH19IlxuICAgICAgKG5nU3VibWl0KT0ic2F2ZSgpIj5cbiAgPG1hdC1hY2NvcmRpb24gbXVsdGk9InRydWUiIGNsYXNzPSJtYXQtYm9keS0yIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8dGItZW50aXR5LWdhdGV3YXktc2VsZWN0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJnYXRld2F5IlxuICAgICAgICAgIFtkZXZpY2VOYW1lXT0iZGV2aWNlTmFtZUZvcm0iXG4gICAgICAgICAgW2lzU3RhdGVGb3JtXT0iaXNTdGF0ZUZvcm0iXG4gICAgICAgICAgW25ld0dhdGV3YXlUeXBlXT0iZ2F0ZXdheVR5cGUiXG4gICAgICAgICAgKGdhdGV3YXlOYW1lRXhpc3QpPSJnYXRld2F5RXhpc3QoKSJcbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICA+XG4gICAgICA8L3RiLWVudGl0eS1nYXRld2F5LXNlbGVjdD5cbiAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5zZWN1cml0eS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5VHlwZSIgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2VjdXJpdHlUeXBlIG9mIHNlY3VyaXR5VHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic2VjdXJpdHlUeXBlLmtleSI+XG4gICAgICAgICAgICAgIHt7IHNlY3VyaXR5VHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWluXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3NlY3VyaXR5VHlwZVwnKS52YWx1ZSA9PSBcJ3Rsc1wnIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2FDZXJ0UGF0aCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGxzLXBhdGgtcHJpdmF0ZS1rZXlcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InByaXZhdGVLZXlQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT0icmVtb3RlQ29uZmlndXJhdGlvbiI+e3sgXCdnYXRld2F5LnJlbW90ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtY2hlY2tib3g+XG5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ0xldmVsIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbHMiIFt2YWx1ZV09ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAge3sgbG9nTGV2ZWwgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5wYXRoLWxvZ3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzIj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkucGF0aC1sb2dzLXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnN0b3JhZ2UtdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdG9yYWdlVHlwZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGUudmFsdWUudG9TdHJpbmcoKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InJlYWRSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbCA+XG4gICAgICAgICAgICAgIHt7IChnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlICE9PSBcJ2ZpbGVcJyA/IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzXCcgOiBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzXCcpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlID09IFwnZmlsZVwnIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhGaWxlc0NvdW50Ij5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJkYXRhRm9sZGVyUGF0aCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2RhdGFGb2xkZXJQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBjbGFzcz0iZ2F0ZXdheS1jb25maWciPlxuICAgICAgICA8c2VjdGlvbiBmb3JtQXJyYXlOYW1lPSJjb25uZWN0b3JzIiAqbmdGb3I9ImxldCBjb25uZWN0b3Igb2YgY29ubmVjdG9ycy5jb250cm9sczsgbGV0IGkgPSBpbmRleDsiPlxuICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPSJpIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIHN0cmV0Y2giIGZ4TGF5b3V0R2FwPSI4cHgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEFsaWduPSJjZW50ZXIgc3RhcnQiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgZnhGbGV4PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuY29ubmVjdG9yLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29uZmlnVHlwZSIgKHNlbGVjdGlvbkNoYW5nZSk9ImNoYW5nZUNvbm5lY3RvclR5cGUoY29ubmVjdG9yKSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb25uZWN0b3JUeXBlIG9mIGNvbm5lY3RvclR5cGVzIiBbdmFsdWVdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29ubmVjdG9yVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb25uZWN0b3IuZ2V0KFwnY29uZmlnVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rvci10eXBlLXJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3ItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgKGJsdXIpPSJjaGFuZ2VDb25uZWN0b3JOYW1lKGNvbm5lY3RvciwgaSkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLW5hbWUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCJcbiAgICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ie3thbGlnbm1lbnQgPT0gXCdyb3dcJyA/IFwnZW5kIGNlbnRlclwnIDogXCdzcGFjZS1ldmVubHkgY2VudGVyXCd9fSIgY2xhc3M9ImFjdGlvbi1idXR0b25zIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSIgbWF0LWljb24tYnV0dG9uIChjbGljayk9Im9wZW5Db25maWdEaWFsb2coJGV2ZW50LCBpLCBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLnZhbHVlLCBjb25uZWN0b3IuZ2V0KFwnbmFtZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnVwZGF0ZS1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ie1wnbWF0LXdhcm5cJzogY29ubmVjdG9yLmdldChcJ2NvbmZpZ1wnKS5pbnZhbGlkfSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfaG9yaXo8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQ29ubmVjdG9yKGkpIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5kZWxldGVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxzcGFuIFtmeFNob3ddPSIhY29ubmVjdG9ycy5sZW5ndGgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiIGNsYXNzPSJuby1kYXRhLWZvdW5kIj57e1wnZ2F0ZXdheS5uby1jb25uZWN0b3JzXCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uIFtmeFNob3ddPSIhaXNSZWFkT25seUZvcm0iIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9ImJ1dHRvbiIgKGNsaWNrKT0iYWRkTmV3Q29ubmVjdG9yKCkiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuY29ubmVjdG9yLWFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2ID5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gIDwvbWF0LWFjY29yZGlvbj5cbiAgPHNlY3Rpb24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgY2xhc3M9ImZvcm0tYWN0aW9uLWJ1dHRvbnMiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImV4cG9ydENvbmZpZygpIlxuICAgICAgICAgICAgKm5nSWY9IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5kb3dubG9hZC10aXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICB7e1wnYWN0aW9uLmRvd25sb2FkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9InN1Ym1pdCJcbiAgICAgICAgICAgICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5zYXZlLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvc2VjdGlvbj5cbjwvZm9ybT5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuZ2F0ZXdheS1mb3Jte2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufTpob3N0IC5nYXRld2F5LWZvcm0gLmZvcm0tYWN0aW9uLWJ1dHRvbnN7cGFkZGluZy10b3A6OHB4fTpob3N0IC5nYXRld2F5LWZvcm0gLmdhdGV3YXktY29uZmlnIC5uby1kYXRhLWZvdW5ke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTp0LkVsZW1lbnRSZWZ9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp0Lk5nWm9uZX0se3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dHlwZTpXaW5kb3csZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOlthZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Zvcm1Db250YWluZXJSZWY6W3t0eXBlOm8sYXJnczpbImZvcm1Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLG11bHRpcGxlSW5wdXRGb3JtOlt7dHlwZTpvLGFyZ3M6WyJnYXRld2F5Q29uZmlndXJhdGlvbkZvcm0iLHtzdGF0aWM6ITB9XX1dLGN0eDpbe3R5cGU6YX1dLGlzU3RhdGVGb3JtOlt7dHlwZTphfV19fSk7Y2xhc3MgdG8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIpe3N1cGVyKGUsdCxhKSx0aGlzLnN0b3JlPWUsdGhpcy5yb3V0ZXI9dCx0aGlzLmRhdGE9bix0aGlzLmRpYWxvZ1JlZj1hLHRoaXMuZmI9byx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1pLHRoaXMucmVzb3VyY2VzU2VydmljZT1yLHRoaXMuY29ubmVjdG9yVHlwZT1fdCx0aGlzLmdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwPUh0LHRoaXMuZ2F0ZXdheUxvZ0xldmVsPU9iamVjdC52YWx1ZXMoTXQpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHt0eXBlOltfdC5NUVRULFtdXSxuYW1lOlsiIixbdWUucmVxdWlyZWQsdGhpcy51bmlxTmFtZVJlcXVpcmVkKCksdWUucGF0dGVybihrdCldXSxsb2dMZXZlbDpbTXQuSU5GTyxbXV0sdXNlRGVmYXVsdHM6WyEwLFtdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITEsW11dLGNsYXNzOlsiIixbXV0sa2V5OlsiYXV0byIsW11dfSl9bmdPbkluaXQoKXt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1oZWxwTGlua0lkKCl7cmV0dXJuIHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZ3VyYXRpb24vIn1jYW5jZWwoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKX1hZGQoKXt0aGlzLnN1Ym1pdHRlZD0hMDtjb25zdCBlPXRoaXMuY29ubmVjdG9yRm9ybS5nZXRSYXdWYWx1ZSgpO2UudXNlRGVmYXVsdHM/dGhpcy5nZXREZWZhdWx0Q29uZmlnKGUudHlwZSkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj10aGlzLmRhdGEuZ2F0ZXdheVZlcnNpb247biYmKGUuY29uZmlnVmVyc2lvbj1uKSxlLmNvbmZpZ3VyYXRpb25Kc29uPSh0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0obik/dFtVdC5DdXJyZW50XTp0W1V0LkxlZ2FjeV0pPz90LHRoaXMuY29ubmVjdG9yRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UoZSl9KSk6dGhpcy5jb25uZWN0b3JGb3JtLnZhbGlkJiZ0aGlzLmRpYWxvZ1JlZi5jbG9zZShlKX11bmlxTmFtZVJlcXVpcmVkKCl7cmV0dXJuIGU9Pntjb25zdCB0PWUudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHRoaXMuZGF0YS5kYXRhU291cmNlRGF0YS5zb21lKCgoe3ZhbHVlOntuYW1lOmV9fSk9PmUudG9Mb3dlckNhc2UoKT09PXQpKT97ZHVwbGljYXRlTmFtZTp7dmFsaWQ6ITF9fTpudWxsfX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgidXNlRGVmYXVsdHMiKTtlPT09X3QuR1JQQ3x8ZT09PV90LkNVU1RPTT90LnNldFZhbHVlKCExKTp0LnZhbHVlfHx0LnNldFZhbHVlKCEwKX0pKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCl9Z2V0RGVmYXVsdENvbmZpZyhlKXtyZXR1cm4gdGhpcy5yZXNvdXJjZXNTZXJ2aWNlLmxvYWRKc29uUmVzb3VyY2UoYC9hc3NldHMvbWV0YWRhdGEvY29ubmVjdG9yLWRlZmF1bHQtY29uZmlncy8ke2V9Lmpzb25gKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp2YX0se3Rva2VuOlguUmVzb3VyY2VzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6dG8sc2VsZWN0b3I6InRiLWFkZC1jb25uZWN0b3ItZGlhbG9nIixwcm92aWRlcnM6W10sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJjb25uZWN0b3JGb3JtIiBjbGFzcz0iYWRkLWNvbm5lY3RvciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7ICJnYXRld2F5LmFkZC1jb25uZWN0b3IiIHwgdHJhbnNsYXRlfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09ImhlbHBMaW5rSWQoKSI+PC9kaXY+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtdG9vbGJhcj5cbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnR5cGU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIHwga2V5dmFsdWUiIFt2YWx1ZV09InR5cGUua2V5Ij5cbiAgICAgICAgICAgICAgICB7eyB0eXBlLnZhbHVlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJ2dhdGV3YXkuY29ubmVjdG9yLWR1cGxpY2F0ZS1uYW1lXCcgOlwnZ2F0ZXdheS5uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWNsYXNzPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNsYXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5HUlBDIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkdSUEMgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkNVU1RPTSJcbiAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIGZpeGVkLXRpdGxlLXdpZHRoIiBmb3JtQ29udHJvbE5hbWU9InVzZURlZmF1bHRzIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5maWxsLWNvbm5lY3Rvci1kZWZhdWx0c1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLk1RVFQiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGEtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIChjbGljayk9ImFkZCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29ubmVjdG9yRm9ybS5pbnZhbGlkIHx8ICFjb25uZWN0b3JGb3JtLmRpcnR5Ij5cbiAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFkZC1jb25uZWN0b3J7bWluLXdpZHRoOjQwMHB4O3dpZHRoOjUwMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpkdC5IZWxwQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGVscF0iLGlucHV0czpbInRiLWhlbHAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cnQuTWF0VG9vbGJhcixzZWxlY3RvcjoibWF0LXRvb2xiYXIiLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQWN0aW9ucyxzZWxlY3RvcjoiW21hdC1kaWFsb2ctYWN0aW9uc10sIG1hdC1kaWFsb2ctYWN0aW9ucywgW21hdERpYWxvZ0FjdGlvbnNdIixpbnB1dHM6WyJhbGlnbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0NvbnRlbnQsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWNvbnRlbnRdLCBtYXQtZGlhbG9nLWNvbnRlbnQsIFttYXREaWFsb2dDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJBZGRDb25uZWN0b3JEaWFsb2dDb21wb25lbnQiLHRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1hZGQtY29ubmVjdG9yLWRpYWxvZyIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9ImFkZC1jb25uZWN0b3IiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyAiZ2F0ZXdheS5hZGQtY29ubmVjdG9yIiB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJoZWxwTGlua0lkKCkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlc01hcCB8IGtleXZhbHVlIiBbdmFsdWVdPSJ0eXBlLmtleSI+XG4gICAgICAgICAgICAgICAge3sgdHlwZS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkubmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9Im9mZiIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDpcJ2dhdGV3YXkubmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS50b3VjaGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLkNVU1RPTSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuR1JQQyIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1rZXk8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5HUlBDICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5DVVNUT00iXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VEZWZhdWx0cyI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmZpbGwtY29ubmVjdG9yLWRlZmF1bHRzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5NUVRUIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc2VuZC1jaGFuZ2UtZGF0YVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbm5lY3RvckZvcm0uaW52YWxpZCB8fCAhY29ubmVjdG9yRm9ybS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5hZGQtY29ubmVjdG9ye21pbi13aWR0aDo0MDBweDt3aWR0aDo1MDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp2YX0se3R5cGU6WC5SZXNvdXJjZXNTZXJ2aWNlfV19KTtjbGFzcyBub3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy52YWx1ZVR5cGVLZXlzPU9iamVjdC52YWx1ZXMoR24pLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLnZhbHVlTGlzdEZvcm1BcnJheT10aGlzLmZiLmFycmF5KFtdKSx0aGlzLnZhbHVlTGlzdEZvcm1BcnJheS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXRyYWNrQnlLZXkoZSx0KXtyZXR1cm4gdH1hZGRLZXkoKXtjb25zdCBlPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0duLlNUUklOR10sc3RyaW5nOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oTHQpXV0sZG91YmxlOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV0sYm9vbGVhbjpbe3ZhbHVlOiExLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UoZSksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChlKX1vYnNlcnZlVHlwZUNoYW5nZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntlLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KCJ0eXBlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSxlLmdldCh0KS5lbmFibGUoe2VtaXRFdmVudDohMX0pfSkpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkubWFya0FzRGlydHkoKX12YWx1ZVRpdGxlKGUpe3JldHVybiBpZShlKT8ib2JqZWN0Ij09dHlwZW9mIGU/SlNPTi5zdHJpbmdpZnkoZSk6ZToiIn1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT17dHlwZTpbdC50eXBlXSxzdHJpbmc6W3t2YWx1ZToiIixkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saW50ZWdlcjpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKEx0KV1dLGRvdWJsZTpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZF1dLGJvb2xlYW46W3t2YWx1ZTohMSxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV19O2VbdC50eXBlXVswXT17dmFsdWU6dC52YWx1ZSxkaXNhYmxlZDohMX07Y29uc3Qgbj10aGlzLmZiLmdyb3VwKGUpO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UobiksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChuKX19dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkudmFsaWQ/bnVsbDp7dmFsdWVMaXN0Rm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUubWFwKCgoe3R5cGU6ZSwuLi50fSk9Pih7dHlwZTplLHZhbHVlOnRbZV19KSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOm5vLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bm8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJUeXBlVmFsdWVQYW5lbENvbXBvbmVudCIsbm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXR5cGUtdmFsdWUtcGFuZWwiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dfSk7Y2xhc3MgYW8gZXh0ZW5kcyBPe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnZhbHVlVHlwZUtleXM9T2JqZWN0LnZhbHVlcyhHbiksdGhpcy52YWx1ZVR5cGVFbnVtPUduLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLnJhd0RhdGE9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5NYXBwaW5nS2V5c1R5cGU9Tm4sdGhpcy5lcnJvclRleHQ9IiJ9bmdPbkluaXQoKXt0aGlzLmtleXNMaXN0Rm9ybUFycmF5PXRoaXMucHJlcGFyZUtleXNGb3JtQXJyYXkodGhpcy5rZXlzKX10cmFja0J5S2V5KGUsdCl7cmV0dXJuIHR9YWRkS2V5KCl7bGV0IGU7aWYoZT10aGlzLmtleXNUeXBlPT09Tm4uUlBDX01FVEhPRFM/dGhpcy5mYi5ncm91cCh7bWV0aG9kOlsiIixbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1tdLFtdXX0pOnRoaXMuZmIuZ3JvdXAoe2tleTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSksdGhpcy5rZXlzVHlwZSE9PU5uLkNVU1RPTSYmdGhpcy5rZXlzVHlwZSE9PU5uLlJQQ19NRVRIT0RTKXtjb25zdCB0PXRoaXMucmF3RGF0YT8icmF3Ijp0aGlzLnZhbHVlVHlwZUtleXNbMF07ZS5hZGRDb250cm9sKCJ0eXBlIix0aGlzLmZiLmNvbnRyb2wodCkpfXRoaXMua2V5c0xpc3RGb3JtQXJyYXkucHVzaChlKX1kZWxldGVLZXkoZSx0KXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMua2V5c0xpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpfWNhbmNlbCgpe3RoaXMucG9wb3Zlcj8uaGlkZSgpfWFwcGx5S2V5c0RhdGEoKXtsZXQgZT10aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlO2lmKHRoaXMua2V5c1R5cGU9PT1Obi5DVVNUT00pe2U9e307Zm9yKGxldCB0IG9mIHRoaXMua2V5c0xpc3RGb3JtQXJyYXkudmFsdWUpZVt0LmtleV09dC52YWx1ZX10aGlzLmtleXNEYXRhQXBwbGllZC5lbWl0KGUpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJih0aGlzLmtleXNUeXBlPT09Tm4uQ1VTVE9NJiYoZT1PYmplY3Qua2V5cyhlKS5tYXAoKHQ9Pih7a2V5OnQsdmFsdWU6ZVt0XSx0eXBlOiIifSkpKSksZS5mb3JFYWNoKChlPT57bGV0IG47aWYodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTKW49dGhpcy5mYi5ncm91cCh7bWV0aG9kOltlLm1ldGhvZCxbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1suLi5lLmFyZ3VtZW50c10sW11dfSk7ZWxzZXtjb25zdHtrZXk6dCx2YWx1ZTphLHR5cGU6b309ZTtuPXRoaXMuZmIuZ3JvdXAoe2tleTpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbYSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0eXBlOltvLFtdXX0pfXQucHVzaChuKX0pKSksdGhpcy5mYi5hcnJheSh0KX12YWx1ZVRpdGxlKGUpe2NvbnN0IHQ9ZS5nZXQodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTPyJtZXRob2QiOiJ2YWx1ZSIpLnZhbHVlO3JldHVybiBpZSh0KT8ib2JqZWN0Ij09dHlwZW9mIHQ/SlNPTi5zdHJpbmdpZnkodCk6dDoiIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6YW8sc2VsZWN0b3I6InRiLW1hcHBpbmctZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e3BhbmVsVGl0bGU6InBhbmVsVGl0bGUiLGFkZEtleVRpdGxlOiJhZGRLZXlUaXRsZSIsZGVsZXRlS2V5VGl0bGU6ImRlbGV0ZUtleVRpdGxlIixub0tleXNUZXh0OiJub0tleXNUZXh0IixrZXlzOiJrZXlzIixrZXlzVHlwZToia2V5c1R5cGUiLHZhbHVlVHlwZUtleXM6InZhbHVlVHlwZUtleXMiLHZhbHVlVHlwZUVudW06InZhbHVlVHlwZUVudW0iLHZhbHVlVHlwZXM6InZhbHVlVHlwZXMiLHJhd0RhdGE6InJhd0RhdGEiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LHByb3ZpZGVyczpbXSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmcta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUtleTsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImtleXNUeXBlICE9PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ2tleVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCctXCcgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgdmFsdWVUaXRsZShrZXlDb250cm9sKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5DVVNUT00gJiYga2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5KU09OUGF0aC1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmtleVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmtleS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rvci1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAgZmlsbC13aWR0aCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG5hbWU9InZhbHVlVHlwZSIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj0iIXJhd0RhdGEiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiIgY2xhc3M9InRiLW1hdC0xOCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lmljb24iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPSIhcmF3RGF0YTsgZWxzZSByYXdUZXh0Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKHZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd09wdGlvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9InZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiIgY2xhc3M9InRiLW1hdC0yMCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3T3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09IlwncmF3XCciPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJrZXlzVHlwZSA9PT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmtleTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ21ldGhvZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleUNvbnRyb2wuZ2V0KFwnYXJndW1lbnRzXCcpLnZhbHVlPy5sZW5ndGggKyBcJylcJ319XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLXR5cGUtdmFsdWUtcGFuZWwgZm9ybUNvbnRyb2xOYW1lPSJhcmd1bWVudHMiPjwvdGItdHlwZS12YWx1ZS1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUtleSgkZXZlbnQsICRpbmRleCkiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJkZWxldGVLZXlUaXRsZSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0iYWRkS2V5KCkiPlxuICAgICAgICB7eyBhZGRLZXlUaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI25vS2V5cz5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWZsZXggY2VudGVyIGFsaWduLWNlbnRlciBrZXktcGFuZWwiPlxuICAgICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IG5vS2V5c1RleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggZmxleC1lbmQiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iYXBwbHlLZXlzRGF0YSgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0ia2V5c0xpc3RGb3JtQXJyYXkuaW52YWxpZCB8fCAha2V5c0xpc3RGb3JtQXJyYXkuZGlydHkiPlxuICAgICAge3sgXCdhY3Rpb24uYXBwbHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWx7d2lkdGg6Nzd2dzttYXgtd2lkdGg6NzAwcHh9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye21heC13aWR0aDoxMXZ3O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC5rZXktcGFuZWx7aGVpZ2h0OjUwMHB4O292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCB0Yi12YWx1ZS1pbnB1dHt3aWR0aDoxMDAlfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlRhLG5hbWU6ImdldEdhdGV3YXlIZWxwTGluayJ9XX0pfX1lKCJNYXBwaW5nRGF0YUtleXNQYW5lbENvbXBvbmVudCIsYW8pLEhlKFtOKCldLGFvLnByb3RvdHlwZSwicmF3RGF0YSIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRhdGEta2V5cy1wYW5lbCIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy1rZXlzLXBhbmVsIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+e3sgcGFuZWxUaXRsZSAgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCArIFwnKVwnfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIGtleS1wYW5lbCIgKm5nSWY9ImtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aDsgZWxzZSBub0tleXMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgICAqbmdGb3I9ImxldCBrZXlDb250cm9sIG9mIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzOyB0cmFja0J5OiB0cmFja0J5S2V5OyBsZXQgJGluZGV4ID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDsiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ia2V5Q29udHJvbCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiIFtleHBhbmRlZF09Imxhc3QiPlxuICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7eyBcJy1cJyB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSAmJiBrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLlJQQ19NRVRIT0RTIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnBsYXRmb3JtLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ2tleVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgbmFtZT0idmFsdWVUeXBlIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPSIhcmF3RGF0YSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIiBjbGFzcz0idGItbWF0LTE4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdJY29uXT0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd1RleHQiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAodmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8fCB2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIXJhd0RhdGE7IGVsc2UgcmF3T3B0aW9uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIiBjbGFzcz0idGItbWF0LTIwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Z0ljb249Int7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8fCB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdPcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iXCdyYXdcJyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuSlNPTlBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS52YWx1ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkua2V5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0ia2V5c1R5cGUgPT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tZXRob2QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdtZXRob2RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hcmd1bWVudHNcJyB8IHRyYW5zbGF0ZSB9fXt7XCcgKFwnICsga2V5Q29udHJvbC5nZXQoXCdhcmd1bWVudHNcJykudmFsdWU/Lmxlbmd0aCArIFwnKVwnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGItdHlwZS12YWx1ZS1wYW5lbCBmb3JtQ29udHJvbE5hbWU9ImFyZ3VtZW50cyI+PC90Yi10eXBlLXZhbHVlLXBhbmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbHt3aWR0aDo3N3Z3O21heC13aWR0aDo3MDBweH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC50aXRsZS1jb250YWluZXJ7bWF4LXdpZHRoOjExdnc7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIHRiLXZhbHVlLWlucHV0e3dpZHRoOjEwMCV9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGItZm9ybS1wYW5lbCAubWF0LW1kYy1pY29uLWJ1dHRvbnt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MTZweDtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9XSxwcm9wRGVjb3JhdG9yczp7cGFuZWxUaXRsZTpbe3R5cGU6YX1dLGFkZEtleVRpdGxlOlt7dHlwZTphfV0sZGVsZXRlS2V5VGl0bGU6W3t0eXBlOmF9XSxub0tleXNUZXh0Olt7dHlwZTphfV0sa2V5czpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVUeXBlS2V5czpbe3R5cGU6YX1dLHZhbHVlVHlwZUVudW06W3t0eXBlOmF9XSx2YWx1ZVR5cGVzOlt7dHlwZTphfV0scmF3RGF0YTpbe3R5cGU6YX1dLHBvcG92ZXI6W3t0eXBlOmF9XSxrZXlzRGF0YUFwcGxpZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBvbyBleHRlbmRzIE97Z2V0IGRldmljZUluZm9UeXBlKCl7cmV0dXJuIHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZX1zZXQgZGV2aWNlSW5mb1R5cGUoZSl7dGhpcy5kZXZpY2VJbmZvVHlwZVZhbHVlIT09ZSYmKHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZT1lKX1jb25zdHJ1Y3RvcihlLHQsbixhKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy50cmFuc2xhdGU9dCx0aGlzLmRpYWxvZz1uLHRoaXMuZmI9YSx0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLnVzZVNvdXJjZT0hMCx0aGlzLnJlcXVpcmVkPSExLHRoaXMuc291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhUbiksdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLm1hcHBpbmdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldXX0pLHRoaXMudXNlU291cmNlJiZ0aGlzLm1hcHBpbmdGb3JtR3JvdXAuYWRkQ29udHJvbCgiZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiLHRoaXMuZmIuY29udHJvbCh0aGlzLnNvdXJjZVR5cGVzWzBdLFtdKSksdGhpcy5kZXZpY2VJbmZvVHlwZT09PWtuLkZVTEwmJih0aGlzLnVzZVNvdXJjZSYmdGhpcy5tYXBwaW5nRm9ybUdyb3VwLmFkZENvbnRyb2woImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIix0aGlzLmZiLmNvbnRyb2wodGhpcy5zb3VyY2VUeXBlc1swXSxbXSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5hZGRDb250cm9sKCJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGhpcy5mYi5jb250cm9sKCIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldKSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe313cml0ZVZhbHVlKGUpe3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnttYXBwaW5nRm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6b28sZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46WS5UcmFuc2xhdGVTZXJ2aWNlfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOnt1c2VTb3VyY2U6InVzZVNvdXJjZSIscmVxdWlyZWQ6InJlcXVpcmVkIixzb3VyY2VUeXBlczoic291cmNlVHlwZXMiLGRldmljZUluZm9UeXBlOiJkZXZpY2VJbmZvVHlwZSJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm9vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCIgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiBbY2xhc3MudGItcmVxdWlyZWRdPSJyZXF1aXJlZCIgdHJhbnNsYXRlPmRldmljZS5kZXZpY2U8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZSBuby1wYWRkaW5nIG5vLWdhcCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1uYW1lLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uZW50aXR5LWZpZWxkPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJ1c2VTb3VyY2UiIGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uc291cmNlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPlxuICAgICAgICBnYXRld2F5LmRldmljZS1pbmZvLmV4cHJlc3Npb25cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtYm9keSBuby1nYXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyB0b3Atc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICBbY2xhc3MuYm90dG9tLXNhbWUtcGFkZGluZ109ImRldmljZUluZm9UeXBlICE9PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLm5hbWU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgcmF3LXZhbHVlLW9wdGlvbiIgKm5nSWY9InVzZVNvdXJjZSI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93LWNlbGwgdGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLWluZm8uZGV2aWNlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyBib3R0b20tc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICAqbmdJZj0iZGV2aWNlSW5mb1R5cGUgPT09IERldmljZUluZm9UeXBlLkZVTEwiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8ucHJvZmlsZS1uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1wcm9maWxlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwncHJvZmlsZS1uYW1lXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2VcJykudmFsdWUgOiBzb3VyY2VUeXBlcyJcbiAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja306aG9zdCAudGItZm9ybS1yb3cuYm90dG9tLXNhbWUtcGFkZGluZ3twYWRkaW5nLWJvdHRvbToxNnB4fTpob3N0IC50Yi1mb3JtLXJvdy50b3Atc2FtZS1wYWRkaW5ne3BhZGRpbmctdG9wOjE2cHh9Omhvc3QgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHt3aWR0aDoxOSV9Omhvc3QgLnRhYmxlLWNvbHVtbnt3aWR0aDo0MCV9Omhvc3QgLnRhYmxlLW5hbWUtY29sdW1ue3dpZHRoOjIwJX06aG9zdCAucmF3LW5hbWV7d2lkdGg6MTklfTpob3N0IC5yYXctdmFsdWUtb3B0aW9ue21heC13aWR0aDo0MCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7ZGlzcGxheTpmbGV4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpndC5IZWxwUG9wdXBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwLXBvcHVwXSwgW3RiLWhlbHAtcG9wdXAtY29udGVudF0iLGlucHV0czpbInRiLWhlbHAtcG9wdXAiLCJ0Yi1oZWxwLXBvcHVwLWNvbnRlbnQiLCJ0cmlnZ2VyLXRleHQiLCJ0cmlnZ2VyLXN0eWxlIiwidGItaGVscC1wb3B1cC1wbGFjZW1lbnQiLCJ0Yi1oZWxwLXBvcHVwLXN0eWxlIiwiaGludE1vZGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIkRldmljZUluZm9UYWJsZUNvbXBvbmVudCIsb28pLEhlKFtOKCldLG9vLnByb3RvdHlwZSwidXNlU291cmNlIix2b2lkIDApLEhlKFtOKCldLG9vLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpvbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZGV2aWNlLWluZm8tdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+b28pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgW2NsYXNzLnRiLXJlcXVpcmVkXT0icmVxdWlyZWQiIHRyYW5zbGF0ZT5kZXZpY2UuZGV2aWNlPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUgbm8tcGFkZGluZyBuby1nYXAiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyLWNlbGwgdGFibGUtbmFtZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmVudGl0eS1maWVsZDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0idXNlU291cmNlIiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnNvdXJjZTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5cbiAgICAgICAgZ2F0ZXdheS5kZXZpY2UtaW5mby5leHByZXNzaW9uXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWJvZHkgbm8tZ2FwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgdG9wLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgW2NsYXNzLmJvdHRvbS1zYW1lLXBhZGRpbmddPSJkZXZpY2VJbmZvVHlwZSAhPT0gRGV2aWNlSW5mb1R5cGUuRlVMTCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgYm90dG9tLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgKm5nSWY9ImRldmljZUluZm9UeXBlID09PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnByb2ZpbGUtbmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCByYXctdmFsdWUtb3B0aW9uIiAqbmdJZj0idXNlU291cmNlIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3ctY2VsbCB0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdwcm9maWxlLW5hbWVcJyB8IGdldEdhdGV3YXlIZWxwTGluazogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLWZvcm0tcm93LmJvdHRvbS1zYW1lLXBhZGRpbmd7cGFkZGluZy1ib3R0b206MTZweH06aG9zdCAudGItZm9ybS1yb3cudG9wLXNhbWUtcGFkZGluZ3twYWRkaW5nLXRvcDoxNnB4fTpob3N0IC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7d2lkdGg6MTklfTpob3N0IC50YWJsZS1jb2x1bW57d2lkdGg6NDAlfTpob3N0IC50YWJsZS1uYW1lLWNvbHVtbnt3aWR0aDoyMCV9Omhvc3QgLnJhdy1uYW1le3dpZHRoOjE5JX06aG9zdCAucmF3LXZhbHVlLW9wdGlvbnttYXgtd2lkdGg6NDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7dXNlU291cmNlOlt7dHlwZTphfV0scmVxdWlyZWQ6W3t0eXBlOmF9XSxzb3VyY2VUeXBlczpbe3R5cGU6YX1dLGRldmljZUluZm9UeXBlOlt7dHlwZTphfV19fSk7Y2xhc3MgaW8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIscyxsKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5wb3BvdmVyU2VydmljZT1pLHRoaXMucmVuZGVyZXI9cix0aGlzLnZpZXdDb250YWluZXJSZWY9cyx0aGlzLnRyYW5zbGF0ZT1sLHRoaXMuTWFwcGluZ1R5cGU9Zm4sdGhpcy5xdWFsaXR5VHlwZXM9eG4sdGhpcy5RdWFsaXR5VHJhbnNsYXRpb25zTWFwPXZuLHRoaXMuY29udmVydG9yVHlwZXM9T2JqZWN0LnZhbHVlcyh3biksdGhpcy5Db252ZXJ0b3JUeXBlRW51bT13bix0aGlzLkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXA9Q24sdGhpcy5zb3VyY2VUeXBlcz1PYmplY3QudmFsdWVzKFRuKSx0aGlzLk9QQ1VhU291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhTbiksdGhpcy5PUENVYVNvdXJjZVR5cGVzRW51bT1Tbix0aGlzLnNvdXJjZVR5cGVzRW51bT1Ubix0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5yZXF1ZXN0VHlwZXM9T2JqZWN0LnZhbHVlcyhJbiksdGhpcy5SZXF1ZXN0VHlwZUVudW09SW4sdGhpcy5SZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXA9QW4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLlNlcnZlclNpZGVSUENUeXBlPVBuLHRoaXMuTWFwcGluZ0tleXNUeXBlPU5uLHRoaXMuTWFwcGluZ0hpbnRUcmFuc2xhdGlvbnNNYXA9Ym4sdGhpcy5NYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwPUJuLHRoaXMuSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwPWhuLHRoaXMua2V5c1BvcHVwQ2xvc2VkPSEwLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY3JlYXRlTWFwcGluZ0Zvcm0oKX1nZXQgY29udmVydGVyQXR0cmlidXRlcygpe2lmKHRoaXMuY29udmVydGVyVHlwZSlyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCh0aGlzLmNvbnZlcnRlclR5cGUpLnZhbHVlLmF0dHJpYnV0ZXMubWFwKChlPT5lLmtleSkpfWdldCBjb252ZXJ0ZXJUZWxlbWV0cnkoKXtpZih0aGlzLmNvbnZlcnRlclR5cGUpcmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKS52YWx1ZS50aW1lc2VyaWVzLm1hcCgoZT0+ZS5rZXkpKX1nZXQgb3BjQXR0cmlidXRlcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiYXR0cmlidXRlcyIpLnZhbHVlPy5tYXAoKGU9PmUua2V5KSl8fFtdfWdldCBvcGNUZWxlbWV0cnkoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoInRpbWVzZXJpZXMiKS52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgb3BjUnBjTWV0aG9kcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgicnBjX21ldGhvZHMiKS52YWx1ZT8ubWFwKChlPT5lLm1ldGhvZCkpfHxbXX1nZXQgb3BjQXR0cmlidXRlc1VwZGF0ZXMoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImF0dHJpYnV0ZXNfdXBkYXRlcyIpPy52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgY29udmVydGVyVHlwZSgpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyIikuZ2V0KCJ0eXBlIikudmFsdWV9Z2V0IGN1c3RvbUtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCgiY3VzdG9tIikudmFsdWUuZXh0ZW5zaW9uQ29uZmlnKX1nZXQgcmVxdWVzdE1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VHlwZSIpLnZhbHVlfWdldCByZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXQiKTtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtbGltaXRzLWVycm9yIix7bWluOjF9KToiIn1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWNyZWF0ZU1hcHBpbmdGb3JtKCl7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVEYXRhTWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVSZXF1ZXN0TWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMuY3JlYXRlT1BDVUFNYXBwaW5nRm9ybSgpfX1jYW5jZWwoKXt0aGlzLmtleXNQb3B1cENsb3NlZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5tYXBwaW5nRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5wcmVwYXJlTWFwcGluZ0RhdGEoKSl9bWFuYWdlS2V5cyhlLHQsbil7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBhPXQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZih0aGlzLnBvcG92ZXJTZXJ2aWNlLmhhc1BvcG92ZXIoYSkpdGhpcy5wb3BvdmVyU2VydmljZS5oaWRlUG9wb3ZlcihhKTtlbHNle2NvbnN0IGU9KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSE9PWZuLk9QQ1VBP3RoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKTp0aGlzLm1hcHBpbmdGb3JtKS5nZXQobiksdD17a2V5czplLnZhbHVlLGtleXNUeXBlOm4scmF3RGF0YTp0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKT8udmFsdWU9PT13bi5CWVRFUyxwYW5lbFRpdGxlOk1uLmdldChuKSxhZGRLZXlUaXRsZTpFbi5nZXQobiksZGVsZXRlS2V5VGl0bGU6cW4uZ2V0KG4pLG5vS2V5c1RleHQ6RG4uZ2V0KG4pfTt0aGlzLmRhdGEubWFwcGluZ1R5cGU9PT1mbi5PUENVQSYmKHQudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKFNuKSx0LnZhbHVlVHlwZUVudW09U24sdC52YWx1ZVR5cGVzPUxuKSx0aGlzLmtleXNQb3B1cENsb3NlZD0hMTtjb25zdCBvPXRoaXMucG9wb3ZlclNlcnZpY2UuZGlzcGxheVBvcG92ZXIoYSx0aGlzLnJlbmRlcmVyLHRoaXMudmlld0NvbnRhaW5lclJlZixhbywibGVmdEJvdHRvbSIsITEsbnVsbCx0LHt9LHt9LHt9LCEwKTtvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLnBvcG92ZXI9byxvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLmtleXNEYXRhQXBwbGllZC5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntvLmhpZGUoKSxlLnBhdGNoVmFsdWUodCksZS5tYXJrQXNEaXJ0eSgpfSkpLG8udGJIaWRlU3RhcnQucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMua2V5c1BvcHVwQ2xvc2VkPSEwfSkpfX1wcmVwYXJlTWFwcGluZ0RhdGEoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0udmFsdWU7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjp0LHRvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmF9PWU7cmV0dXJue3RvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmEsY29udmVydGVyOnt0eXBlOnQudHlwZSwuLi50W3QudHlwZV19fTtjYXNlIGZuLlJFUVVFU1RTOnJldHVybntyZXF1ZXN0VHlwZTplLnJlcXVlc3RUeXBlLHJlcXVlc3RWYWx1ZTplLnJlcXVlc3RWYWx1ZVtlLnJlcXVlc3RUeXBlXX07ZGVmYXVsdDpyZXR1cm4gZX19Z2V0Rm9ybVZhbHVlRGF0YSgpe2lmKHRoaXMuZGF0YS52YWx1ZSYmT2JqZWN0LmtleXModGhpcy5kYXRhLnZhbHVlKS5sZW5ndGgpc3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjplLHRvcGljRmlsdGVyOnQsc3Vic2NyaXB0aW9uUW9zOm59PXRoaXMuZGF0YS52YWx1ZTtyZXR1cm57dG9waWNGaWx0ZXI6dCxzdWJzY3JpcHRpb25Rb3M6bixjb252ZXJ0ZXI6e3R5cGU6ZS50eXBlLFtlLnR5cGVdOnsuLi5lfX19O2Nhc2UgZm4uUkVRVUVTVFM6cmV0dXJue3JlcXVlc3RUeXBlOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VHlwZSxyZXF1ZXN0VmFsdWU6e1t0aGlzLmRhdGEudmFsdWUucmVxdWVzdFR5cGVdOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VmFsdWV9fTtkZWZhdWx0OnJldHVybiB0aGlzLmRhdGEudmFsdWV9fWNyZWF0ZURhdGFNYXBwaW5nRm9ybSgpe3RoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgidG9waWNGaWx0ZXIiLHRoaXMuZmIuY29udHJvbCgiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJzdWJzY3JpcHRpb25Rb3MiLHRoaXMuZmIuY29udHJvbCgwKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJjb252ZXJ0ZXIiLHRoaXMuZmIuZ3JvdXAoe3R5cGU6W3duLkpTT04sW11dLGpzb246dGhpcy5mYi5ncm91cCh7ZGV2aWNlSW5mbzpbe30sW11dLGF0dHJpYnV0ZXM6W1tdLFtdXSx0aW1lc2VyaWVzOltbXSxbXV19KSxieXRlczp0aGlzLmZiLmdyb3VwKHtkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXX0pLGN1c3RvbTp0aGlzLmZiLmdyb3VwKHtleHRlbnNpb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGV4dGVuc2lvbkNvbmZpZzpbe30sW11dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShSZSh0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpO3QuZ2V0KCJqc29uIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImJ5dGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImN1c3RvbSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KGUpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9Y3JlYXRlUmVxdWVzdE1hcHBpbmdGb3JtKCl7dGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJyZXF1ZXN0VHlwZSIsdGhpcy5mYi5jb250cm9sKEluLkNPTk5FQ1RfUkVRVUVTVCxbXSkpLHRoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgicmVxdWVzdFZhbHVlIix0aGlzLmZiLmdyb3VwKHtjb25uZWN0UmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86W3t9LFtdXX0pLGRpc2Nvbm5lY3RSZXF1ZXN0czp0aGlzLmZiLmdyb3VwKHt0b3BpY0ZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlSW5mbzpbe30sW11dfSksYXR0cmlidXRlUmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZF1dfSksYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sYXR0cmlidXRlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWVFeHByZXNzaW9uOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXRhaW46WyExLFtdXX0pLGF0dHJpYnV0ZVVwZGF0ZXM6dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXR0cmlidXRlRmlsdGVyOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0b3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmV0YWluOlshMCxbXV19KSxzZXJ2ZXJTaWRlUnBjOnRoaXMuZmIuZ3JvdXAoe3R5cGU6W1BuLlRXT19XQVksW11dLGRldmljZU5hbWVGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZEZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY1FvUzpbMCxbXV0scmVzcG9uc2VUaW1lb3V0OlsxZTQsW3VlLnJlcXVpcmVkLHVlLm1pbigxKV1dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoUmUodGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWUpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUiKTt0LmdldCgiY29ubmVjdFJlcXVlc3RzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImRpc2Nvbm5lY3RSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVVcGRhdGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInNlcnZlclNpZGVScGMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldChlKS5lbmFibGUoKX0pKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgicmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYyIpO2U9PT1Qbi5PTkVfV0FZPyh0LmdldCgicmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgicmVzcG9uc2VUb3BpY1FvUyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSk6KHQuZ2V0KCJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInJlc3BvbnNlVG9waWNRb1MiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKX0pKSx0aGlzLm1hcHBpbmdGb3JtLnBhdGNoVmFsdWUodGhpcy5nZXRGb3JtVmFsdWVEYXRhKCkpfWNyZWF0ZU9QQ1VBTWFwcGluZ0Zvcm0oKXt0aGlzLm1hcHBpbmdGb3JtPXRoaXMuZmIuZ3JvdXAoe2RldmljZU5vZGVTb3VyY2U6W1NuLlBBVEgsW11dLGRldmljZU5vZGVQYXR0ZXJuOlsiIixbdWUucmVxdWlyZWRdXSxkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXSxycGNfbWV0aG9kczpbW10sW11dLGF0dHJpYnV0ZXNfdXBkYXRlczpbW10sW11dfSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmlvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmlvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRpYWxvZyIsdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtIiBjbGFzcz0ia2V5LW1hcHBpbmciPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBNYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0iSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwLmdldCh0aGlzLmRhdGEubWFwcGluZ1R5cGUpIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPlxuICAgICAgICB7eyBNYXBwaW5nSGludFRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJkYXRhLm1hcHBpbmdUeXBlIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5EQVRBIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50b3BpYy1maWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZDsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS90b3BpYy1maWx0ZXJfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1Rb3MtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1xdHQtcW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3Vic2NyaXB0aW9uUW9zIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcXVhbGl0eVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9ImNvbnZlcnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGF5bG9hZC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBjb252ZXJ0b3JUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyBDb252ZXJ0b3JUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5kYXRhLWNvbnZlcnNpb248L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgICAgICAgICAge3sgRGF0YUNvbnZlcnNpb25UcmFuc2xhdGlvbnNNYXAuZ2V0KGNvbnZlcnRlclR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iY29udmVydGVyVHlwZSIgW25nU3dpdGNoXT0iY29udmVydGVyVHlwZSI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb252ZXJ0b3JUeXBlRW51bS5KU09OIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkJZVEVTIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvdXJjZVR5cGVzXT0iW3NvdXJjZVR5cGVzRW51bS5NU0csIHNvdXJjZVR5cGVzRW51bS5DT05TVF0iIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkJZVEVTIHx8IGNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJjb252ZXJ0ZXJBdHRyaWJ1dGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2YgY29udmVydGVyQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHRlbGVtZXRyeUJ1dHRvbiwgTWFwcGluZ0tleXNUeXBlLlRJTUVTRVJJRVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmV4dGVuc2lvbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5leHRlbnNpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZXh0ZW5zaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmV4dGVuc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwnY29udmVydGVyLmN1c3RvbS5leHRlbnNpb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5rZXlzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImN1c3RvbUtleXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBjdXN0b21LZXlzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAja2V5c0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwga2V5c0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkNVU1RPTSkiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdHlwZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcXVlc3RUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgUmVxdWVzdFR5cGVzVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0icmVxdWVzdFZhbHVlIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpIiBbbmdTd2l0Y2hdPSJyZXF1ZXN0TWFwcGluZ1R5cGUiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0icmVxdWVzdE1hcHBpbmdUeXBlID09PSBSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5ESVNDT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgW2Zvcm1Db250cm9sXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS50b3BpYy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5QQVJUSUFMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZnJvbS1kZXZpY2UtcmVxdWVzdC1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnRcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiIGZvcm1Hcm91cE5hbWU9ImRldmljZUluZm8iPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMuYXR0cmlidXRlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUgdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS50by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJldGFpbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkFUVFJJQlVURV9VUERBVEUiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmRldmljZU5hbWVGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuYXR0cmlidXRlLWZpbHRlci1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZUZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5hdHRyaWJ1dGVGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0icmV0YWluIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5TRVJWRVJfU0lERV9SUEMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgY2VudGVyIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuVFdPX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IlNlcnZlclNpZGVSUENUeXBlLk9ORV9XQVkiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LndpdGhvdXQtcmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tZXRob2QtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLm1ldGhvZEZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy50eXBlXCcpLnZhbHVlID09PSBTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljUW9TIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFF1YWxpdHlUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVGltZW91dCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0icmVzcG9uc2VUaW1lb3V0RXJyb3JUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iTWFwcGluZ1R5cGUuT1BDVUEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBkZXZpY2UtY29uZmlnIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVTb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBbT1BDVWFTb3VyY2VUeXBlc0VudW0uUEFUSCwgT1BDVWFTb3VyY2VUeXBlc0VudW0uSURFTlRJRklFUl0iIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBkZXZpY2Utbm9kZS1wYXR0ZXJuLWZpZWxkIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOb2RlUGF0dGVybiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVQYXR0ZXJuXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdkZXZpY2Utbm9kZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlU291cmNlXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbc291cmNlVHlwZXNdPSJPUENVYVNvdXJjZVR5cGVzIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY0F0dHJpYnV0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNBdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIG9wY0F0dHJpYnV0ZXNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5BVFRSSUJVVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudGltZXNlcmllczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBvcGNUZWxlbWV0cnkiPlxuICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNUZWxlbWV0cnlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjVGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNBdHRyaWJ1dGVzVXBkYXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlc1VwZGF0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVNfVVBEQVRFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy1tZXRob2RzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNScGNNZXRob2RzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNScGNNZXRob2RzIj5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dHJpYnV0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAjcnBjTWV0aG9kc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBycGNNZXRob2RzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJtYXBwaW5nRm9ybS5pbnZhbGlkIHx8ICFtYXBwaW5nRm9ybS5kaXJ0eSB8fCAha2V5c1BvcHVwQ2xvc2VkIj5cbiAgICAgIHt7IHRoaXMuZGF0YS5idXR0b25UaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJX06aG9zdCAua2V5LW1hcHBpbmd7bWF4LXdpZHRoOjkwMHB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLmtleS1tYXBwaW5nIC5tYXQtdG9vbGJhcnttaW4taGVpZ2h0OjY0cHh9Omhvc3QgLmtleS1tYXBwaW5nIHRiLXRvZ2dsZS1zZWxlY3R7cGFkZGluZzo0cHggMH06aG9zdCAubWF0LW1kYy1kaWFsb2ctY29udGVudHtoZWlnaHQ6NjcwcHh9Omhvc3QgLmVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lcnttYXgtd2lkdGg6NzAlfTpob3N0IDo6bmctZGVlcCAua2V5LW1hcHBpbmcgLm1hdC1tZGMtY2hpcC1saXN0Ym94IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDpub3dyYXB9Omhvc3QgOjpuZy1kZWVwIC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjQwcHg7d2lkdGg6MzUlO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5tYXQtbWRjLWZvcm0tZmllbGR7d2lkdGg6MH06aG9zdCA6Om5nLWRlZXAgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9Omhvc3QgOjpuZy1kZWVwIC5kZXZpY2UtY29uZmlne2dhcDoxMnB4O3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1ub2RlLXBhdHRlcm4tZmllbGR7ZmxleC1iYXNpczozJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcCxzZWxlY3RvcjoibWF0LWJhc2ljLWNoaXAsIFttYXQtYmFzaWMtY2hpcF0sIG1hdC1jaGlwLCBbbWF0LWNoaXBdIixpbnB1dHM6WyJyb2xlIiwiaWQiLCJhcmlhLWxhYmVsIiwiYXJpYS1kZXNjcmlwdGlvbiIsInZhbHVlIiwiY29sb3IiLCJyZW1vdmFibGUiLCJoaWdobGlnaHRlZCIsImRpc2FibGVSaXBwbGUiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJyZW1vdmVkIiwiZGVzdHJveWVkIl0sZXhwb3J0QXM6WyJtYXRDaGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcExpc3Rib3gsc2VsZWN0b3I6Im1hdC1jaGlwLWxpc3Rib3giLGlucHV0czpbIm11bHRpcGxlIiwiYXJpYS1vcmllbnRhdGlvbiIsInNlbGVjdGFibGUiLCJjb21wYXJlV2l0aCIsInJlcXVpcmVkIiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInZhbHVlIl0sb3V0cHV0czpbImNoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTprYSxzZWxlY3RvcjoiW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF0iLGlucHV0czpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOlsidXNlU291cmNlIiwicmVxdWlyZWQiLCJzb3VyY2VUeXBlcyIsImRldmljZUluZm9UeXBlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV19KX19ZSgiTWFwcGluZ0RpYWxvZ0NvbXBvbmVudCIsaW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6aW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1hcHBpbmctZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPGRpdiBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0iIGNsYXNzPSJrZXktbWFwcGluZyI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IE1hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAuZ2V0KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgIHt7IE1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImRhdGEubWFwcGluZ1R5cGUiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLkRBVEEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0ZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudG9waWMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3NcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdWJzY3JpcHRpb25Rb3MiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBRdWFsaXR5VHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0iY29udmVydGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXlsb2FkLXR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGNvbnZlcnRvclR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgIHt7IENvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmRhdGEtY29udmVyc2lvbjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj5cbiAgICAgICAgICAgICAgICB7eyBEYXRhQ29udmVyc2lvblRyYW5zbGF0aW9uc01hcC5nZXQoY29udmVydGVyVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cE5hbWVdPSJjb252ZXJ0ZXJUeXBlIiBbbmdTd2l0Y2hdPSJjb252ZXJ0ZXJUeXBlIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29udmVydG9yVHlwZUVudW0uQllURVMiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc291cmNlVHlwZXNdPSJbc291cmNlVHlwZXNFbnVtLk1TRywgc291cmNlVHlwZXNFbnVtLkNPTlNUXSIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQllURVMgfHwgY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uSlNPTiI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlckF0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBjb252ZXJ0ZXJBdHRyaWJ1dGVzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnRpbWVzZXJpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGVsZW1ldHJ5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJjb252ZXJ0ZXJUeXBlID09PSBDb252ZXJ0b3JUeXBlRW51bS5DVVNUT00iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmV4dGVuc2lvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJleHRlbnNpb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZXh0ZW5zaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2NvbnZlcnRlci5jdXN0b20uZXh0ZW5zaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiBzYW1lLXBhZGRpbmcgdGItZmxleCBjb2x1bW4iPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5leHRlbnNpb24tY29uZmlndXJhdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj57eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24taGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmtleXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY3VzdG9tS2V5cyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGN1c3RvbUtleXMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNrZXlzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBrZXlzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVxdWVzdC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcmVxdWVzdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBSZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJyZXF1ZXN0VmFsdWUiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkiIFtuZ1N3aXRjaF09InJlcXVlc3RNYXBwaW5nVHlwZSI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJyZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG9waWMtZmlsdGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBbZm9ybUNvbnRyb2xdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvdG9waWMtZmlsdGVyX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uRElTQ09OTkVDVF9SRVFVRVNUIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLlBBUlRJQUwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LmZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciIgZm9ybUdyb3VwTmFtZT0iZGV2aWNlSW5mbyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5ncy1oaW50XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldGFpbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1VQREFURSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuYXR0cmlidXRlRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXRhaW4taGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLlNFUlZFUl9TSURFX1JQQyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBjZW50ZXIgYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS53aXRoLXJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuT05FX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aG91dC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWV0aG9kLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5tZXRob2RGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnR5cGVcJykudmFsdWUgPT09IFNlcnZlclNpZGVSUENUeXBlLlRXT19XQVkiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVG9waWNRb1MiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHF1YWxpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJyZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUaW1lb3V0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5PUENVQSI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGRldmljZS1jb25maWciPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTm9kZVNvdXJjZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIFtPUENVYVNvdXJjZVR5cGVzRW51bS5QQVRILCBPUENVYVNvdXJjZVR5cGVzRW51bS5JREVOVElGSUVSXSIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGRldmljZS1ub2RlLXBhdHRlcm4tZmllbGQiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVQYXR0ZXJuIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlUGF0dGVyblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ2RldmljZS1ub2RlXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVTb3VyY2VcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtzb3VyY2VUeXBlc109Ik9QQ1VhU291cmNlVHlwZXMiIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjQXR0cmlidXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY0F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjQXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIG9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY1RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBvcGNUZWxlbWV0cnlCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5USU1FU0VSSUVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlLXVwZGF0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXNVcGRhdGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNBdHRyaWJ1dGVzVXBkYXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIGF0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFU19VUERBVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLW1ldGhvZHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1JwY01ldGhvZHMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY1JwY01ldGhvZHMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNycGNNZXRob2RzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY01ldGhvZHNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09Im1hcHBpbmdGb3JtLmludmFsaWQgfHwgIW1hcHBpbmdGb3JtLmRpcnR5IHx8ICFrZXlzUG9wdXBDbG9zZWQiPlxuICAgICAge3sgdGhpcy5kYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpncmlkO2hlaWdodDoxMDAlfTpob3N0IC5rZXktbWFwcGluZ3ttYXgtd2lkdGg6OTAwcHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAua2V5LW1hcHBpbmcgLm1hdC10b29sYmFye21pbi1oZWlnaHQ6NjRweH06aG9zdCAua2V5LW1hcHBpbmcgdGItdG9nZ2xlLXNlbGVjdHtwYWRkaW5nOjRweCAwfTpob3N0IC5tYXQtbWRjLWRpYWxvZy1jb250ZW50e2hlaWdodDo2NzBweH06aG9zdCAuZWxsaXBzaXMtY2hpcHMtY29udGFpbmVye21heC13aWR0aDo3MCV9Omhvc3QgOjpuZy1kZWVwIC5rZXktbWFwcGluZyAubWF0LW1kYy1jaGlwLWxpc3Rib3ggLm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBze2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOm5vd3JhcH06aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6NDBweDt3aWR0aDozNSU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAudGItZm9ybS1yb3cgLm1hdC1tZGMtZm9ybS1maWVsZHt3aWR0aDowfTpob3N0IDo6bmctZGVlcCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1jb25maWd7Z2FwOjEycHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fTpob3N0IDo6bmctZGVlcCAuZGV2aWNlLW5vZGUtcGF0dGVybi1maWVsZHtmbGV4LWJhc2lzOjMlfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSk7Y2xhc3Mgcm97c2V0IG1hcHBpbmdUeXBlKGUpe3RoaXMubWFwcGluZ1R5cGVWYWx1ZSE9PWUmJih0aGlzLm1hcHBpbmdUeXBlVmFsdWU9ZSl9Z2V0IG1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ1R5cGVWYWx1ZX1jb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLnRyYW5zbGF0ZT1lLHRoaXMuZGlhbG9nPXQsdGhpcy5kaWFsb2dTZXJ2aWNlPW4sdGhpcy5mYj1hLHRoaXMucmVxdWlyZWQ9ITEsdGhpcy5tYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLm1hcHBpbmdUeXBlRW51bT1mbix0aGlzLmRpc3BsYXllZENvbHVtbnM9W10sdGhpcy5tYXBwaW5nQ29sdW1ucz1bXSx0aGlzLnRleHRTZWFyY2hNb2RlPSExLHRoaXMuaGlkZVBhZ2VTaXplPSExLHRoaXMuYWN0aXZlVmFsdWU9ITEsdGhpcy5kaXJ0eVZhbHVlPSExLHRoaXMudGV4dFNlYXJjaD10aGlzLmZiLmNvbnRyb2woIiIse25vbk51bGxhYmxlOiEwfSksdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFwcGluZ0Zvcm1Hcm91cD10aGlzLmZiLmFycmF5KFtdKSx0aGlzLmRpcnR5VmFsdWU9IXRoaXMuYWN0aXZlVmFsdWUsdGhpcy5kYXRhU291cmNlPW5ldyBzb31uZ09uSW5pdCgpe3RoaXMuc2V0TWFwcGluZ0NvbHVtbnMoKSx0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCguLi50aGlzLm1hcHBpbmdDb2x1bW5zLm1hcCgoZT0+ZS5kZWYpKSwiYWN0aW9ucyIpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVUYWJsZURhdGEoZSksdGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGV4dFNlYXJjaC52YWx1ZUNoYW5nZXMucGlwZShWZSgxNTApLEJlKCgoZSx0KT0+KGU/PyIiKT09PXQudHJpbSgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9ZS50cmltKCk7dGhpcy51cGRhdGVUYWJsZURhdGEodGhpcy5tYXBwaW5nRm9ybUdyb3VwLnZhbHVlLHQudHJpbSgpKX0pKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5tYXBwaW5nRm9ybUdyb3VwLmNsZWFyKCksdGhpcy5wdXNoRGF0YUFzRm9ybUFycmF5cyhlKX12YWxpZGF0ZSgpe3JldHVybiF0aGlzLnJlcXVpcmVkfHx0aGlzLm1hcHBpbmdGb3JtR3JvdXAuY29udHJvbHMubGVuZ3RoP251bGw6e21hcHBpbmdGb3JtR3JvdXA6e3ZhbGlkOiExfX19ZW50ZXJGaWx0ZXJNb2RlKCl7dGhpcy50ZXh0U2VhcmNoTW9kZT0hMCxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5zZWFyY2hJbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKX0pLDEwKX1leGl0RmlsdGVyTW9kZSgpe3RoaXMudXBkYXRlVGFibGVEYXRhKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VNYXBwaW5nKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPWllKHQpP3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5hdCh0KS52YWx1ZTp7fTt0aGlzLmRpYWxvZy5vcGVuKGlvLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7bWFwcGluZ1R5cGU6dGhpcy5tYXBwaW5nVHlwZSx2YWx1ZTpuLGJ1dHRvblRpdGxlOnJlKHQpPyJhY3Rpb24uYWRkIjoiYWN0aW9uLmFwcGx5In19KS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihpZSh0KT90aGlzLm1hcHBpbmdGb3JtR3JvdXAuYXQodCkucGF0Y2hWYWx1ZShlKTp0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKFtlXSksdGhpcy5tYXBwaW5nRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfXVwZGF0ZVRhYmxlRGF0YShlLHQpe2xldCBuPWUubWFwKChlPT50aGlzLmdldE1hcHBpbmdWYWx1ZShlKSkpO3QmJihuPW4uZmlsdGVyKChlPT5PYmplY3QudmFsdWVzKGUpLnNvbWUoKGU9PmUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSkpKSkpKSx0aGlzLmRhdGFTb3VyY2UubG9hZERhdGEobil9ZGVsZXRlTWFwcGluZyhlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtbWFwcGluZy10aXRsZSIpLCIiLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi5ubyIpLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi55ZXMiKSwhMCkuc3Vic2NyaWJlKChlPT57ZSYmKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5yZW1vdmVBdCh0KSx0aGlzLm1hcHBpbmdGb3JtR3JvdXAubWFya0FzRGlydHkoKSl9KSl9cHVzaERhdGFBc0Zvcm1BcnJheXMoZSl7ZT8ubGVuZ3RoJiZlLmZvckVhY2goKGU9PnRoaXMubWFwcGluZ0Zvcm1Hcm91cC5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1nZXRNYXBwaW5nVmFsdWUoZSl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTpjb25zdCB0PUNuLmdldChlLmNvbnZlcnRlcj8udHlwZSk7cmV0dXJue3RvcGljRmlsdGVyOmUudG9waWNGaWx0ZXIsUW9TOmUuc3Vic2NyaXB0aW9uUW9zLGNvbnZlcnRlcjp0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQodCk6IiJ9O2Nhc2UgZm4uUkVRVUVTVFM6bGV0IG47Y29uc3QgYT1lO3JldHVybiBuPWEucmVxdWVzdFR5cGU9PT1Jbi5BVFRSSUJVVEVfVVBEQVRFP2EucmVxdWVzdFZhbHVlLmF0dHJpYnV0ZUZpbHRlcjphLnJlcXVlc3RUeXBlPT09SW4uU0VSVkVSX1NJREVfUlBDP2EucmVxdWVzdFZhbHVlLm1ldGhvZEZpbHRlcjphLnJlcXVlc3RWYWx1ZS50b3BpY0ZpbHRlcix7cmVxdWVzdFR5cGU6ZS5yZXF1ZXN0VHlwZSx0eXBlOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoQW4uZ2V0KGUucmVxdWVzdFR5cGUpKSxkZXRhaWxzOm59O2Nhc2UgZm4uT1BDVUE6Y29uc3Qgbz1lLmRldmljZUluZm8/LmRldmljZU5hbWVFeHByZXNzaW9uLGk9ZS5kZXZpY2VJbmZvPy5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbix7ZGV2aWNlTm9kZVBhdHRlcm46cn09ZTtyZXR1cm57ZGV2aWNlTm9kZVBhdHRlcm46cixkZXZpY2VOYW1lUGF0dGVybjpvLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOml9O2RlZmF1bHQ6cmV0dXJue319fXNldE1hcHBpbmdDb2x1bW5zKCl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTp0aGlzLm1hcHBpbmdDb2x1bW5zLnB1c2goe2RlZjoidG9waWNGaWx0ZXIiLHRpdGxlOiJnYXRld2F5LnRvcGljLWZpbHRlciJ9LHtkZWY6IlFvUyIsdGl0bGU6ImdhdGV3YXkubXF0dC1xb3MifSx7ZGVmOiJjb252ZXJ0ZXIiLHRpdGxlOiJnYXRld2F5LnBheWxvYWQtdHlwZSJ9KTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJ0eXBlIix0aXRsZToiZ2F0ZXdheS50eXBlIn0se2RlZjoiZGV0YWlscyIsdGl0bGU6ImdhdGV3YXkuZGV0YWlscyJ9KTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJkZXZpY2VOb2RlUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5vZGUifSx7ZGVmOiJkZXZpY2VOYW1lUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5hbWUifSx7ZGVmOiJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLXByb2ZpbGUifSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cm8sZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpybyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIixtYXBwaW5nVHlwZToibWFwcGluZ1R5cGUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cm8pKSxtdWx0aTohMH1dLHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzZWFyY2hJbnB1dEZpZWxkIixmaXJzdDohMCxwcmVkaWNhdGU6WyJzZWFyY2hJbnB1dCJdLGRlc2NlbmRhbnRzOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmctdGFibGUgdGItYWJzb2x1dGUtZmlsbCI+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLXRpdGxlIj57e21hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldChtYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJlbnRlckZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5zZWFyY2hcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0idGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPiZuYnNwOzwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0idGV4dFNlYXJjaCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnY29tbW9uLmVudGVyLXNlYXJjaFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9ImV4aXRGaWx0ZXJNb2RlKCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uY2xvc2VcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPGRpdiBjbGFzcz0idGFibGUtY29udGFpbmVyIj5cbiAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iY29sdW1uLmRlZiIgKm5nRm9yPSJsZXQgY29sdW1uIG9mIG1hcHBpbmdDb2x1bW5zOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCB0YlRydW5jYXRlV2l0aFRvb2x0aXAgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IG1hcHBpbmdbY29sdW1uLmRlZl0gfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImFjdGlvbnMiIHN0aWNreUVuZD5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJywgdGV4dEFsaWduOiBcJ2NlbnRlclwnfSI+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgbWFwcGluZzsgbGV0IGkgPSBpbmRleCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCd9Ij5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcm93QWN0aW9ucz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlTWFwcGluZygkZXZlbnQsIGkpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbj5kZWxldGU8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cubHQtbGcgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09ImNlbGxBY3Rpb25zTWVudSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjY2VsbEFjdGlvbnNNZW51PSJtYXRNZW51IiB4UG9zaXRpb249ImJlZm9yZSI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBbbmdDbGFzc109IntcJ21hdC1yb3ctc2VsZWN0XCc6IHRydWV9IiAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9ImxldCBtYXBwaW5nOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDxzZWN0aW9uIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUgJiYgKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpIiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1oZWFkbGluZS01IHRiLWFic29sdXRlLWZpbGwgdGItYWRkLW5ldyI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz0iY29ubmVjdG9yIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnR7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQudGItb3V0bGluZWQtYm9yZGVye2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRpdGxlLWNvbnRhaW5lcntvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGItbWFwcGluZy10YWJsZS10aXRsZXtwYWRkaW5nLXJpZ2h0OjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1ue3BhZGRpbmc6MCAxMnB4O3dpZHRoOjIzJX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbi5yZXF1ZXN0LWNvbHVtbnt3aWR0aDozOCV9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAuZWxsaXBzaXN7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctYm90dG9tOjVweDt3aWR0aDoxMDAlfX06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbHtjdXJzb3I6cG9pbnRlcn06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbCAubWF0LWljb257aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtmb250LXNpemU6MjRweDtjb2xvcjojNzU3NTc1fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5Bc3luY1BpcGUsbmFtZToiYXN5bmMifSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdENsYXNzRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ0NsYXNzXSwgW25nQ2xhc3MueHNdLCBbbmdDbGFzcy5zbV0sIFtuZ0NsYXNzLm1kXSwgW25nQ2xhc3MubGddLCBbbmdDbGFzcy54bF0sICBbbmdDbGFzcy5sdC1zbV0sIFtuZ0NsYXNzLmx0LW1kXSwgW25nQ2xhc3MubHQtbGddLCBbbmdDbGFzcy5sdC14bF0sICBbbmdDbGFzcy5ndC14c10sIFtuZ0NsYXNzLmd0LXNtXSwgW25nQ2xhc3MuZ3QtbWRdLCBbbmdDbGFzcy5ndC1sZ10iLGlucHV0czpbIm5nQ2xhc3MiLCJuZ0NsYXNzLnhzIiwibmdDbGFzcy5zbSIsIm5nQ2xhc3MubWQiLCJuZ0NsYXNzLmxnIiwibmdDbGFzcy54bCIsIm5nQ2xhc3MubHQtc20iLCJuZ0NsYXNzLmx0LW1kIiwibmdDbGFzcy5sdC1sZyIsIm5nQ2xhc3MubHQteGwiLCJuZ0NsYXNzLmd0LXhzIiwibmdDbGFzcy5ndC1zbSIsIm5nQ2xhc3MuZ3QtbWQiLCJuZ0NsYXNzLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U3R5bGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nU3R5bGVdLCAgW25nU3R5bGUueHNdLCBbbmdTdHlsZS5zbV0sIFtuZ1N0eWxlLm1kXSwgW25nU3R5bGUubGddLCBbbmdTdHlsZS54bF0sICBbbmdTdHlsZS5sdC1zbV0sIFtuZ1N0eWxlLmx0LW1kXSwgW25nU3R5bGUubHQtbGddLCBbbmdTdHlsZS5sdC14bF0sICBbbmdTdHlsZS5ndC14c10sIFtuZ1N0eWxlLmd0LXNtXSwgW25nU3R5bGUuZ3QtbWRdLCBbbmdTdHlsZS5ndC1sZ10iLGlucHV0czpbIm5nU3R5bGUiLCJuZ1N0eWxlLnhzIiwibmdTdHlsZS5zbSIsIm5nU3R5bGUubWQiLCJuZ1N0eWxlLmxnIiwibmdTdHlsZS54bCIsIm5nU3R5bGUubHQtc20iLCJuZ1N0eWxlLmx0LW1kIiwibmdTdHlsZS5sdC1sZyIsIm5nU3R5bGUubHQteGwiLCJuZ1N0eWxlLmd0LXhzIiwibmdTdHlsZS5ndC1zbSIsIm5nU3R5bGUuZ3QtbWQiLCJuZ1N0eWxlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJ0LlRiSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItaWNvbiIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbInRiSWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIk1hcHBpbmdUYWJsZUNvbXBvbmVudCIscm8pLEhlKFtOKCldLHJvLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpybyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbWFwcGluZy10YWJsZSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy10YWJsZSB0Yi1hYnNvbHV0ZS1maWxsIj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InRiLW1hcHBpbmctdGFibGUtY29udGVudCI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiICpuZ0lmPSIoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykgPT09IGZhbHNlIj5cbiAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzdGFydCBjZW50ZXIiIGZ4TGF5b3V0LnhzPSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ24ueHM9ImNlbnRlciBzdGFydCIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9InRiLW1hcHBpbmctdGFibGUtdGl0bGUiPnt7bWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KG1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJjb2x1bW4uZGVmIiAqbmdGb3I9ImxldCBjb2x1bW4gb2YgbWFwcGluZ0NvbHVtbnM7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgY29sdW1uLnRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCAqbWF0Q2VsbERlZj0ibGV0IG1hcHBpbmciIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgbWFwcGluZ1tjb2x1bW4uZGVmXSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCc5NnB4XCcsIG1heFdpZHRoOiBcJzk2cHhcJywgd2lkdGg6IFwnOTZweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZGVsZXRlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmRlbGV0ZTwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmd0LW1kIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5sdC1sZyBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT0iY2VsbEFjdGlvbnNNZW51Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNjZWxsQWN0aW9uc01lbnU9Im1hdE1lbnUiIHhQb3NpdGlvbj0iYmVmb3JlIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG1hdC1oZWFkZXItcm93IFtuZ0NsYXNzXT0ie1wnbWF0LXJvdy1zZWxlY3RcJzogdHJ1ZX0iICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj0ibGV0IG1hcHBpbmc7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7Ij48L21hdC1yb3c+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPHNlY3Rpb24gW2Z4U2hvd109IiF0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgICAgICBjbGFzcz0ibWF0LWhlYWRsaW5lLTUgdGItYWJzb2x1dGUtZmlsbCB0Yi1hZGQtbmV3Ij5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPSJjb25uZWN0b3IiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gW2Z4U2hvd109InRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSJcbiAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgIGNsYXNzPSJuby1kYXRhLWZvdW5kIiB0cmFuc2xhdGU+XG4gICAgICB3aWRnZXQubm8tZGF0YS1mb3VuZFxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudC50Yi1vdXRsaW5lZC1ib3JkZXJ7Ym94LXNoYWRvdzowIDAgIzAwMDMsMCAwICMwMDAwMDAyNCwwIDAgIzAwMDAwMDFmO2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMDtib3JkZXItcmFkaXVzOjRweH06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5tYXQtdG9vbGJhci10b29sc3ttaW4taGVpZ2h0OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGl0bGUtY29udGFpbmVye292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctcmlnaHQ6MjBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxle3RhYmxlLWxheW91dDpmaXhlZDttaW4td2lkdGg6NDUwcHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxlIC50YWJsZS12YWx1ZS1jb2x1bW57cGFkZGluZzowIDEycHg7d2lkdGg6MjMlfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1uLnJlcXVlc3QtY29sdW1ue3dpZHRoOjM4JX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5lbGxpcHNpc3tvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAubm8tZGF0YS1mb3VuZHtoZWlnaHQ6Y2FsYygxMDAlIC0gMTIwcHgpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5OXB4KXs6aG9zdCAubWF0LXRvb2xiYXJ7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxMDBweH06aG9zdCAubWF0LXRvb2xiYXIgLnRiLW1hcHBpbmctdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntyZXF1aXJlZDpbe3R5cGU6YX1dLG1hcHBpbmdUeXBlOlt7dHlwZTphfV0sc2VhcmNoSW5wdXRGaWVsZDpbe3R5cGU6byxhcmdzOlsic2VhcmNoSW5wdXQiXX1dfX0pO2NsYXNzIHNvIGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9fWUoIk1hcHBpbmdEYXRhc291cmNlIixzbyk7Y2xhc3MgbG97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLnRpdGxlPSJnYXRld2F5LnNlY3VyaXR5Iix0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsPSExLHRoaXMuQnJva2VyU2VjdXJpdHlUeXBlPXJuLHRoaXMuc2VjdXJpdHlUeXBlcz1PYmplY3QudmFsdWVzKHJuKSx0aGlzLm1vZGVUeXBlcz1PYmplY3QudmFsdWVzKHBuKSx0aGlzLlNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcD1tbix0aGlzLmRlc3Ryb3kkPW5ldyBTZX1uZ09uSW5pdCgpe3RoaXMuc2VjdXJpdHlGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dHlwZTpbcm4uQU5PTllNT1VTLFtdXSx1c2VybmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFzc3dvcmQ6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHBhdGhUb0NBQ2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvUHJpdmF0ZUtleTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvQ2xpZW50Q2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsJiZ0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmFkZENvbnRyb2woIm1vZGUiLHRoaXMuZmIuY29udHJvbChwbi5OT05FLFtdKSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXtpZihlKWUudHlwZXx8KGUudHlwZT1ybi5BTk9OWU1PVVMpLHRoaXMudXBkYXRlVmFsaWRhdG9ycyhlLnR5cGUpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAucmVzZXQoZSx7ZW1pdEV2ZW50OiExfSk7ZWxzZXtjb25zdCBlPXt0eXBlOnJuLkFOT05ZTU9VU307dGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlLHtlbWl0RXZlbnQ6ITF9KX10aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlIT09cm4uQkFTSUN8fHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VjdXJpdHlGb3JtOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dXBkYXRlVmFsaWRhdG9ycyhlKXtpZihlKWlmKHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DQUNlcnQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DbGllbnRDZXJ0IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoIm1vZGUiKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZT09PXJuLkJBU0lDKXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTtlbHNlIGlmKGU9PT1ybi5DRVJUSUZJQ0FURVMmJih0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvQ0FDZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhdGhUb0NsaWVudENlcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwpKXtjb25zdCBlPXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJtb2RlIik7ZSYmIWUudmFsdWUmJmUuc2V0VmFsdWUocG4uTk9ORSx7ZW1pdEV2ZW50OiExfSksZT8uZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidXNlcm5hbWUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6bG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czp7dGl0bGU6InRpdGxlIixleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDoiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHNhbWUtcGFkZGluZyB0Yi1mbGV4IGNvbHVtbiIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Rm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5CQVNJQyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJCcm9rZXJTZWN1cml0eVR5cGUuQ0VSVElGSUNBVEVTIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5wYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuQ0EtY2VydGlmaWNhdGUtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DQUNlcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9Qcml2YXRlS2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGF0aFRvQ2xpZW50Q2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibW9kZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAge3sgdHlwZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja31cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2gsc2VsZWN0b3I6IltuZ1N3aXRjaF0iLGlucHV0czpbIm5nU3dpdGNoIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaENhc2Usc2VsZWN0b3I6IltuZ1N3aXRjaENhc2VdIixpbnB1dHM6WyJuZ1N3aXRjaENhc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIlNlY3VyaXR5Q29uZmlnQ29tcG9uZW50IixsbyksSGUoW04oKV0sbG8ucHJvdG90eXBlLCJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmxvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc2VjdXJpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgIHt7IFNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnVzZXJuYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5DRVJUSUZJQ0FURVMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LnBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5DQS1jZXJ0aWZpY2F0ZS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb0NBQ2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb1ByaXZhdGVLZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DbGllbnRDZXJ0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImV4dGVuZENlcnRpZmljYXRlc01vZGVsIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5tb2RlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGVUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyB0eXBlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7dGl0bGU6W3t0eXBlOmF9XSxleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDpbe3R5cGU6YX1dfX0pO2NsYXNzIGNve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5zZWN1cml0eVBvbGljeVR5cGVzPV9uLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3VybDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdGltZW91dEluTWlsbGlzOlsxZTMsW3VlLnJlcXVpcmVkLHVlLm1pbigxZTMpXV0sc2NhblBlcmlvZEluTWlsbGlzOltWLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMWUzKV1dLHBvbGxQZXJpb2RJbk1pbGxpczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oNTApXV0sZW5hYmxlU3Vic2NyaXB0aW9uczpbITAsW11dLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEwMCldXSxzaG93TWFwOlshMSxbXV0sc2VjdXJpdHk6W1VuLkJBU0lDMTI4LFtdXSxpZGVudGl0eTpbXX0pLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5oaWRlTmV3RmllbGRzJiZ0aGlzLnNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoInBvbGxQZXJpb2RJbk1pbGxpcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VydmVyQ29uZmlnRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7Y29uc3R7dGltZW91dEluTWlsbGlzOnQ9MWUzLHNjYW5QZXJpb2RJbk1pbGxpczpuPVYscG9sbFBlcmlvZEluTWlsbGlzOmE9NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6bz0hMCxzdWJDaGVja1BlcmlvZEluTWlsbGlzOmk9MTAwLHNob3dNYXA6cj0hMSxzZWN1cml0eTpzPVVuLkJBU0lDMTI4LGlkZW50aXR5Omw9e319PWU7dGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAucmVzZXQoey4uLmUsdGltZW91dEluTWlsbGlzOnQsc2NhblBlcmlvZEluTWlsbGlzOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsZW5hYmxlU3Vic2NyaXB0aW9uczpvLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6aSxzaG93TWFwOnIsc2VjdXJpdHk6cyxpZGVudGl0eTpsfSx7ZW1pdEV2ZW50OiExfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmNvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czp7aGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmxvLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czpbInRpdGxlIiwiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNTZXJ2ZXJDb25maWdDb21wb25lbnQiLGNvKSxIZShbTigpXSxjby5wcm90b3R5cGUsImhpZGVOZXdGaWVsZHMiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Y28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7aGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dfX0pO2NsYXNzIHBvIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWFwcGluZ1R5cGVzPWZuLHRoaXMuaXNMZWdhY3k9ITF9aW5pdEJhc2ljRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe21hcHBpbmc6W10sc2VydmVyOltdfSl9bWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSl7cmV0dXJue3NlcnZlcjplLnNlcnZlcj8/e30sbWFwcGluZzplLm1hcHBpbmc/P1tdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOmUuc2VydmVyLG1hcHBpbmc6ZS5tYXBwaW5nfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnBvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnBvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNVYUJhc2ljQ29uZmlnQ29tcG9uZW50IixwbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5wbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgbW97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLm1xdHRWZXJzaW9ucz1nbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5icm9rZXJDb25maWdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7aG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSx2ZXJzaW9uOls1LFtdXSxjbGllbnRJZDpbInRiX2d3XyIrc2UoNSksW3VlLnBhdHRlcm4oa3QpXV0sc2VjdXJpdHk6W119KSx0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWdlbmVyYXRlKGUpe3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLmdldChlKT8ucGF0Y2hWYWx1ZSgidGJfZ3dfIitzZSg1KSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2NvbnN0e3ZlcnNpb246dD01LGNsaWVudElkOm49YHRiX2d3XyR7c2UoNSl9YCxzZWN1cml0eTphPXt9fT1lO3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLnJlc2V0KHsuLi5lLHZlcnNpb246dCxjbGllbnRJZDpuLHNlY3VyaXR5OmF9LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnticm9rZXJDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTptbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTptbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9Pm1vKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpsbyxzZWxlY3RvcjoidGItc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJ0aXRsZSIsImV4dGVuZENlcnRpZmljYXRlc01vZGVsIl19LHtraW5kOiJwaXBlIix0eXBlOndhLG5hbWU6ImdldEdhdGV3YXlQb3J0VG9vbHRpcCJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiQnJva2VyQ29uZmlnQ29udHJvbENvbXBvbmVudCIsbW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLHdhXSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5tbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyB1b3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21heE51bWJlck9mV29ya2VyczpbMTAwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSldXSxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOlsxMCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV19KSx0aGlzLndvcmtlcnNDb25maWdGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7Y29uc3R7bWF4TnVtYmVyT2ZXb3JrZXJzOnQsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjpufT1lO3RoaXMud29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5yZXNldCh7bWF4TnVtYmVyT2ZXb3JrZXJzOnR8fDEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOm58fDEwfSx7ZW1pdEV2ZW50OiExfSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwLnZhbGlkP251bGw6e3dvcmtlcnNDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp1byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnVvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+dW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09IndvcmtlcnNDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9Im1heE51bWJlck9mV29ya2VycyJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TnVtYmVyT2ZXb3JrZXJzXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIFtzdHlsZS53aWR0aC4lXT0iNTAiXG4gICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXJcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TWVzc2FnZU51bWJlclBlcldvcmtlciJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiV29ya2Vyc0NvbmZpZ0NvbnRyb2xDb21wb25lbnQiLHVvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnVvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT51bykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBbZm9ybUdyb3VwXT0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiBbc3R5bGUud2lkdGguJV09IjUwIlxuICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TnVtYmVyT2ZXb3JrZXJzIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1udW1iZXItb2Ytd29ya2Vycy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiB0eXBlPSJudW1iZXIiIG1pbj0iMSIgZm9ybUNvbnRyb2xOYW1lPSJtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IndvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS50b3VjaGVkKSJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIGdve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmlzRXhwYW5zaW9uTW9kZT0hMSx0aGlzLmRlZmF1bHRWYWx1ZT1sbi5LZXksdGhpcy5yZXBvcnRTdHJhdGVneVR5cGVzPU9iamVjdC52YWx1ZXMoc24pLHRoaXMuUmVwb3J0VHlwZVRyYW5zbGF0ZU1hcD1jbix0aGlzLlJlcG9ydFN0cmF0ZWd5VHlwZT1zbix0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTdHJhdGVneUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W3t2YWx1ZTpzbi5PblJlcG9ydFBlcmlvZCxkaXNhYmxlZDohMH0sW11dLHJlcG9ydFBlcmlvZDpbe3ZhbHVlOnRoaXMuZGVmYXVsdFZhbHVlLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5Rm9ybUNoYW5nZSgpLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5VG9nZ2xlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmlzRXhwYW5zaW9uTW9kZSYmdGhpcy5zaG93U3RyYXRlZ3lDb250cm9sLnNldFZhbHVlKCEhZSx7ZW1pdEV2ZW50OiExfSksZSYmdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pO2NvbnN0e3R5cGU6dD1zbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6bj10aGlzLmRlZmF1bHRWYWx1ZX09ZT8/e307dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5zZXRWYWx1ZSh7dHlwZTp0LHJlcG9ydFBlcmlvZDpufSx7ZW1pdEV2ZW50OiExfSksdGhpcy5vblR5cGVDaGFuZ2UodCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWxpZHx8dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5kaXNhYmxlZD9udWxsOntyZXBvcnRTdHJhdGVneUZvcm06e3ZhbGlkOiExfX19cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX1vYnNlcnZlU3RyYXRlZ3lGb3JtQ2hhbmdlKCl7dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy5vblR5cGVDaGFuZ2UoZSkpKX1vYnNlcnZlU3RyYXRlZ3lUb2dnbGUoKXt0aGlzLnNob3dTdHJhdGVneUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCksTWUoKCgpPT50aGlzLmlzRXhwYW5zaW9uTW9kZSkpKS5zdWJzY3JpYmUoKGU9PntlPyh0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoInJlcG9ydFBlcmlvZCIpLmFkZFZhbGlkYXRvcnModWUucmVxdWlyZWQpLHRoaXMub25DaGFuZ2UodGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZSkpOih0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKS5yZW1vdmVWYWxpZGF0b3JzKHVlLnJlcXVpcmVkKSx0aGlzLm9uQ2hhbmdlKG51bGwpKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfW9uVHlwZUNoYW5nZShlKXtjb25zdCB0PXRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKTtlPT09c24uT25DaGFuZ2U/dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmlzRXhwYW5zaW9uTW9kZSYmIXRoaXMuc2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZXx8dC5lbmFibGUoe2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpnbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsaW5wdXRzOntpc0V4cGFuc2lvbk1vZGU6ImlzRXhwYW5zaW9uTW9kZSIsZGVmYXVsdFZhbHVlOiJkZWZhdWx0VmFsdWUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Z28pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0lmPSJpc0V4cGFuc2lvbk1vZGUgZWxzZSBkZWZhdWx0TW9kZSIgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U3RyYXRlZ3lDb250cm9sLnZhbHVlIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1N0cmF0ZWd5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InN0cmF0ZWd5RmllbGRzIj48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNb2RlPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjc3RyYXRlZ3lGaWVsZHM+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcG9ydFN0cmF0ZWd5VHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IFJlcG9ydFR5cGVUcmFuc2xhdGVNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUgIT09IFJlcG9ydFN0cmF0ZWd5VHlwZS5PbkNoYW5nZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPlxuICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgIGdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5LnJlcG9ydC1wZXJpb2RcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJSZXBvcnRTdHJhdGVneUNvbXBvbmVudCIsZ28pLEhlKFtOKCldLGdvLnByb3RvdHlwZSwiaXNFeHBhbnNpb25Nb2RlIix2b2lkIDApLEhlKFtCKCldLGdvLnByb3RvdHlwZSwiZGVmYXVsdFZhbHVlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmdvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0icmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdJZj0iaXNFeHBhbnNpb25Nb2RlIGVsc2UgZGVmYXVsdE1vZGUiIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZSI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTdHJhdGVneUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TW9kZT5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWw8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0ic3RyYXRlZ3lGaWVsZHMiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3N0cmF0ZWd5RmllbGRzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiPnt7IFwnZ2F0ZXdheS50eXBlXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiByZXBvcnRTdHJhdGVneVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBSZXBvcnRUeXBlVHJhbnNsYXRlTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBSZXBvcnRTdHJhdGVneVR5cGUuT25DaGFuZ2UiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj5cbiAgICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5cbiAgICAgICAgICBnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5yZXBvcnQtcGVyaW9kXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0UGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntpc0V4cGFuc2lvbk1vZGU6W3t0eXBlOmF9XSxkZWZhdWx0VmFsdWU6W3t0eXBlOmF9XX19KTtjbGFzcyBmb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5pc01hc3Rlcj0hMSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5tb2RidXNEYXRhVHlwZXM9T2JqZWN0LnZhbHVlcyhlYSksdGhpcy5tb2RpZmllclR5cGVzPU9iamVjdC52YWx1ZXMoT24pLHRoaXMud2l0aEZ1bmN0aW9uQ29kZT0hMCx0aGlzLndpdGhSZXBvcnRTdHJhdGVneT0hMCx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXA9bmV3IE1hcCx0aGlzLnNob3dNb2RpZmllcnNNYXA9bmV3IE1hcCx0aGlzLmZ1bmN0aW9uQ29kZXNNYXA9bmV3IE1hcCx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVtdLHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXM9dGEsdGhpcy5Nb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXA9enQsdGhpcy5Nb2RpZmllclR5cGVzTWFwPVJuLHRoaXMuUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWU9bG4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5kZWZhdWx0UmVhZEZ1bmN0aW9uQ29kZXM9WzMsNF0sdGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXM9WzEsMl0sdGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzPVs2LDE2XSx0aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM9WzUsMTVdfW5nT25Jbml0KCl7dGhpcy53aXRoRnVuY3Rpb25Db2RlPSF0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVMsdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3k9ISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuaGlkZU5ld0ZpZWxkcyksdGhpcy5rZXlzTGlzdEZvcm1BcnJheT10aGlzLnByZXBhcmVLZXlzRm9ybUFycmF5KHRoaXMudmFsdWVzKSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPXRoaXMuZ2V0RGVmYXVsdEZ1bmN0aW9uQ29kZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX10cmFja0J5Q29udHJvbElkKGUsdCl7cmV0dXJuIHQudmFsdWUuaWR9YWRkS2V5KCl7Y29uc3QgZT1zZSg1KSx0PXRoaXMuZmIuZ3JvdXAoe3RhZzpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6W3t2YWx1ZToiIixkaXNhYmxlZDohdGhpcy5pc01hc3Rlcn0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbZWEuQllURVMsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbnVsbCxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6WzEsW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6dGhpcy5nZXREZWZhdWx0RnVuY3Rpb25Db2RlcygpWzBdLGRpc2FibGVkOiF0aGlzLndpdGhGdW5jdGlvbkNvZGV9LFt1ZS5yZXF1aXJlZF1dLHJlcG9ydFN0cmF0ZWd5Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3l9XSxtb2RpZmllclR5cGU6W3t2YWx1ZTpPbi5NVUxUSVBMSUVSLGRpc2FibGVkOiEwfV0sbW9kaWZpZXJWYWx1ZTpbe3ZhbHVlOjEsZGlzYWJsZWQ6ITB9LFt1ZS5wYXR0ZXJuKEZ0KV1dLGlkOlt7dmFsdWU6ZSxkaXNhYmxlZDohMH1dfSk7dGhpcy5zaG93TW9kaWZpZXJzTWFwLnNldChlLCExKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KGUsdGhpcy5mYi5jb250cm9sKCExKSksdGhpcy5vYnNlcnZlS2V5RGF0YVR5cGUodCksdGhpcy5vYnNlcnZlRW5hYmxlTW9kaWZpZXIodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5wdXNoKHQpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5yZW1vdmVBdCh0KSx0aGlzLmtleXNMaXN0Rm9ybUFycmF5Lm1hcmtBc0RpcnR5KCl9Y2FuY2VsKCl7dGhpcy5wb3BvdmVyLmhpZGUoKX1hcHBseUtleXNEYXRhKCl7dGhpcy5rZXlzRGF0YUFwcGxpZWQuZW1pdCh0aGlzLmdldEZvcm1WYWx1ZSgpKX1nZXRGb3JtVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXBLZXlzV2l0aE1vZGlmaWVyKHRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5P3RoaXMuY2xlYW5VcEVtcHR5U3RyYXRlZ2llcyh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKTp0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKX1jbGVhblVwRW1wdHlTdHJhdGVnaWVzKGUpe3JldHVybiBlLm1hcCgoZT0+e2NvbnN0e3JlcG9ydFN0cmF0ZWd5OnQsLi4ubn09ZTtyZXR1cm4gdD9lOm59KSl9bWFwS2V5c1dpdGhNb2RpZmllcihlKXtyZXR1cm4gZS5tYXAoKChlLHQpPT57aWYodGhpcy5zaG93TW9kaWZpZXJzTWFwLmdldCh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzW3RdLmdldCgiaWQiKS52YWx1ZSkpe2NvbnN0e21vZGlmaWVyVHlwZTp0LG1vZGlmaWVyVmFsdWU6biwuLi5hfT1lO3JldHVybiB0P3suLi5hLFt0XTpufTphfXJldHVybiBlfSkpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJmUuZm9yRWFjaCgoZT0+e2NvbnN0IG49dGhpcy5jcmVhdGVEYXRhS2V5Rm9ybUdyb3VwKGUpO3RoaXMub2JzZXJ2ZUtleURhdGFUeXBlKG4pLHRoaXMub2JzZXJ2ZUVuYWJsZU1vZGlmaWVyKG4pLHRoaXMuZnVuY3Rpb25Db2Rlc01hcC5zZXQobi5nZXQoImlkIikudmFsdWUsdGhpcy5nZXRGdW5jdGlvbkNvZGVzKGUudHlwZSkpLHQucHVzaChuKX0pKSx0aGlzLmZiLmFycmF5KHQpfWNyZWF0ZURhdGFLZXlGb3JtR3JvdXAoZSl7Y29uc3R7dGFnOnQsdmFsdWU6bix0eXBlOmEsYWRkcmVzczpvLG9iamVjdHNDb3VudDppLGZ1bmN0aW9uQ29kZTpyLG11bHRpcGxpZXI6cyxkaXZpZGVyOmwscmVwb3J0U3RyYXRlZ3k6Y309ZSxwPXNlKDUpLG09dGhpcy5zaG91bGRTaG93TW9kaWZpZXIoYSk7cmV0dXJuIHRoaXMuc2hvd01vZGlmaWVyc01hcC5zZXQocCxtKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KHAsdGhpcy5mYi5jb250cm9sKChzfHxsKSYmbSkpLHRoaXMuZmIuZ3JvdXAoe3RhZzpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbe3ZhbHVlOm4sZGlzYWJsZWQ6IXRoaXMuaXNNYXN0ZXJ9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHR5cGU6W2EsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbyxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6W2ksW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6cixkaXNhYmxlZDohdGhpcy53aXRoRnVuY3Rpb25Db2RlfSxbdWUucmVxdWlyZWRdXSxtb2RpZmllclR5cGU6W3t2YWx1ZTpsP09uLkRJVklERVI6T24uTVVMVElQTElFUixkaXNhYmxlZDohdGhpcy5lbmFibGVNb2RpZmllcnNDb250cm9sTWFwLmdldChwKS52YWx1ZX1dLG1vZGlmaWVyVmFsdWU6W3t2YWx1ZTpzPz9sPz8xLGRpc2FibGVkOiF0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KHApLnZhbHVlfSxbdWUucGF0dGVybihGdCldXSxpZDpbe3ZhbHVlOnAsZGlzYWJsZWQ6ITB9XSxyZXBvcnRTdHJhdGVneTpbe3ZhbHVlOmMsZGlzYWJsZWQ6IXRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5fV19KX1zaG91bGRTaG93TW9kaWZpZXIoZSl7cmV0dXJuISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSkpfW9ic2VydmVLZXlEYXRhVHlwZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHQpfHxlLmdldCgib2JqZWN0c0NvdW50IikucGF0Y2hWYWx1ZShuYVt0XSx7ZW1pdEV2ZW50OiExfSk7Y29uc3Qgbj10aGlzLnNob3VsZFNob3dNb2RpZmllcih0KTt0aGlzLnNob3dNb2RpZmllcnNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlLHQpfSkpfW9ic2VydmVFbmFibGVNb2RpZmllcihlKXt0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KGUuZ2V0KCJpZCIpLnZhbHVlKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT50aGlzLnRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KSkpfXRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KXtjb25zdCBuPWUuZ2V0KCJtb2RpZmllclR5cGUiKSxhPWUuZ2V0KCJtb2RpZmllclZhbHVlIik7dD8obi5lbmFibGUoKSxhLmVuYWJsZSgpKToobi5kaXNhYmxlKCksYS5kaXNhYmxlKCkpfXVwZGF0ZUZ1bmN0aW9uQ29kZXMoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RnVuY3Rpb25Db2Rlcyh0KTt0aGlzLmZ1bmN0aW9uQ29kZXNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLG4uaW5jbHVkZXMoZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnZhbHVlKXx8ZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUoblswXSx7ZW1pdEV2ZW50OiExfSl9Z2V0RnVuY3Rpb25Db2RlcyhlKXtjb25zdCB0PVsuLi5lPT09ZWEuQklUUz90aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM6W10sLi4udGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzXTtpZih0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTKXJldHVybiB0LnNvcnQoKChlLHQpPT5lLXQpKTtjb25zdCBuPVsuLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2Rlc107cmV0dXJuIGU9PT1lYS5CSVRTJiZuLnB1c2goLi4udGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXMpLHRoaXMua2V5c1R5cGU9PT1hYS5SUENfUkVRVUVTVFMmJm4ucHVzaCguLi50KSxuLnNvcnQoKChlLHQpPT5lLXQpKX1nZXREZWZhdWx0RnVuY3Rpb25Db2Rlcygpe3JldHVybiB0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTP3RoaXMuZGVmYXVsdFdyaXRlRnVuY3Rpb25Db2Rlczp0aGlzLmtleXNUeXBlPT09YWEuUlBDX1JFUVVFU1RTP1suLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLmRlZmF1bHRXcml0ZUZ1bmN0aW9uQ29kZXNdOnRoaXMuZGVmYXVsdFJlYWRGdW5jdGlvbkNvZGVzfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Zm8sZGVwczpbe3Rva2VuOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Zm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyIscGFuZWxUaXRsZToicGFuZWxUaXRsZSIsYWRkS2V5VGl0bGU6ImFkZEtleVRpdGxlIixkZWxldGVLZXlUaXRsZToiZGVsZXRlS2V5VGl0bGUiLG5vS2V5c1RleHQ6Im5vS2V5c1RleHQiLGtleXNUeXBlOiJrZXlzVHlwZSIsdmFsdWVzOiJ2YWx1ZXMiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmV0Lk1hdFNsaWRlVG9nZ2xlLHNlbGVjdG9yOiJtYXQtc2xpZGUtdG9nZ2xlIixpbnB1dHM6WyJuYW1lIiwiaWQiLCJsYWJlbFBvc2l0aW9uIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJyZXF1aXJlZCIsImNvbG9yIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJjaGVja2VkIiwiaGlkZUljb24iLCJkaXNhYmxlZEludGVyYWN0aXZlIl0sb3V0cHV0czpbImNoYW5nZSIsInRvZ2dsZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2xpZGVUb2dnbGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsQ29udGVudCxzZWxlY3RvcjoibmctdGVtcGxhdGVbbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dfSl9fWUoIk1vZGJ1c0RhdGFLZXlzUGFuZWxDb21wb25lbnQiLGZvKSxIZShbTigpXSxmby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLEhlKFtOKCldLGZvLnByb3RvdHlwZSwiaGlkZU5ld0ZpZWxkcyIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxUYSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfV0scHJvcERlY29yYXRvcnM6e2lzTWFzdGVyOlt7dHlwZTphfV0saGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dLHBhbmVsVGl0bGU6W3t0eXBlOmF9XSxhZGRLZXlUaXRsZTpbe3R5cGU6YX1dLGRlbGV0ZUtleVRpdGxlOlt7dHlwZTphfV0sbm9LZXlzVGV4dDpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVzOlt7dHlwZTphfV0scG9wb3Zlcjpbe3R5cGU6YX1dLGtleXNEYXRhQXBwbGllZDpbe3R5cGU6bH1dfX0pO2NsYXNzIHlve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy5mYj1lLHRoaXMucG9wb3ZlclNlcnZpY2U9dCx0aGlzLnJlbmRlcmVyPW4sdGhpcy52aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5jZHI9byx0aGlzLnNpbmdsZU1vZGU9ITEsdGhpcy5oaWRlTmV3RmllbGRzPSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5tb2RidXNSZWdpc3RlclR5cGVzPU9iamVjdC52YWx1ZXMoWG4pLHRoaXMubW9kYnVzVmFsdWVLZXlzPU9iamVjdC52YWx1ZXMoYWEpLHRoaXMuTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwPVpuLHRoaXMuTW9kYnVzVmFsdWVLZXk9YWEsdGhpcy5kZXN0cm95JD1uZXcgU2V9bmdPbkluaXQoKXt0aGlzLmluaXRpYWxpemVWYWx1ZXNGb3JtR3JvdXAoKSx0aGlzLm9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2lmKHRoaXMuc2luZ2xlTW9kZSl0aGlzLnZhbHVlc0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoZSkse2VtaXRFdmVudDohMX0pO2Vsc2V7Y29uc3R7aG9sZGluZ19yZWdpc3RlcnM6dCxjb2lsc19pbml0aWFsaXplcjpuLGlucHV0X3JlZ2lzdGVyczphLGRpc2NyZXRlX2lucHV0czpvfT1lO3RoaXMudmFsdWVzRm9ybUdyb3VwLnNldFZhbHVlKHtob2xkaW5nX3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUodCksY29pbHNfaW5pdGlhbGl6ZXI6dGhpcy5nZXRTaW5nbGVSZWdpc3RlclN0YXRlKG4pLGlucHV0X3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoYSksZGlzY3JldGVfaW5wdXRzOnRoaXMuZ2V0U2luZ2xlUmVnaXN0ZXJTdGF0ZShvKX0se2VtaXRFdmVudDohMX0pfXRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMudmFsdWVzRm9ybUdyb3VwLnZhbGlkP251bGw6e3ZhbHVlc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX1nZXRWYWx1ZUdyb3VwKGUsdCl7cmV0dXJuIHQ/dGhpcy52YWx1ZXNGb3JtR3JvdXAuZ2V0KHQpLmdldChlKTp0aGlzLnZhbHVlc0Zvcm1Hcm91cC5nZXQoZSl9bWFuYWdlS2V5cyhlLHQsbixhKXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG89dC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKHRoaXMucG9wb3ZlclNlcnZpY2UuaGFzUG9wb3ZlcihvKSlyZXR1cm4gdm9pZCB0aGlzLnBvcG92ZXJTZXJ2aWNlLmhpZGVQb3BvdmVyKG8pO2NvbnN0IGk9dGhpcy5nZXRWYWx1ZUdyb3VwKG4sYSkscj17dmFsdWVzOmkudmFsdWUsaXNNYXN0ZXI6IXRoaXMuc2luZ2xlTW9kZSxrZXlzVHlwZTpuLHBhbmVsVGl0bGU6b2EuZ2V0KG4pLGFkZEtleVRpdGxlOmlhLmdldChuKSxkZWxldGVLZXlUaXRsZTpyYS5nZXQobiksbm9LZXlzVGV4dDpzYS5nZXQobiksaGlkZU5ld0ZpZWxkczp0aGlzLmhpZGVOZXdGaWVsZHN9LHM9dGhpcy5wb3BvdmVyU2VydmljZS5kaXNwbGF5UG9wb3ZlcihvLHRoaXMucmVuZGVyZXIsdGhpcy52aWV3Q29udGFpbmVyUmVmLGZvLCJsZWZ0Qm90dG9tIiwhMSxudWxsLHIse30se30se30sITApO3MudGJDb21wb25lbnRSZWYuaW5zdGFuY2UucG9wb3Zlcj1zLHMudGJDb21wb25lbnRSZWYuaW5zdGFuY2Uua2V5c0RhdGFBcHBsaWVkLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3MuaGlkZSgpLGkucGF0Y2hWYWx1ZShlKSxpLm1hcmtBc0RpcnR5KCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9KSl9aW5pdGlhbGl6ZVZhbHVlc0Zvcm1Hcm91cCgpe2NvbnN0IGU9KCk9PnRoaXMuZmIuZ3JvdXAodGhpcy5tb2RidXNWYWx1ZUtleXMucmVkdWNlKCgoZSx0KT0+KGVbdF09dGhpcy5mYi5jb250cm9sKFtbXSxbXV0pLGUpKSx7fSkpO3RoaXMuc2luZ2xlTW9kZT90aGlzLnZhbHVlc0Zvcm1Hcm91cD1lKCk6dGhpcy52YWx1ZXNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh0aGlzLm1vZGJ1c1JlZ2lzdGVyVHlwZXMucmVkdWNlKCgodCxuKT0+KHRbbl09ZSgpLHQpKSx7fSkpfW9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl7dGhpcy52YWx1ZXNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1nZXRTaW5nbGVSZWdpc3RlclN0YXRlKGUpe3JldHVybnthdHRyaWJ1dGVzOmU/LmF0dHJpYnV0ZXM/P1tdLHRpbWVzZXJpZXM6ZT8udGltZXNlcmllcz8/W10sYXR0cmlidXRlVXBkYXRlczplPy5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6ZT8ucnBjPz9bXX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp5byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp5byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGlucHV0czp7c2luZ2xlTW9kZToic2luZ2xlTW9kZSIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnlvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwLHNlbGVjdG9yOiJtYXQtYmFzaWMtY2hpcCwgW21hdC1iYXNpYy1jaGlwXSwgbWF0LWNoaXAsIFttYXQtY2hpcF0iLGlucHV0czpbInJvbGUiLCJpZCIsImFyaWEtbGFiZWwiLCJhcmlhLWRlc2NyaXB0aW9uIiwidmFsdWUiLCJjb2xvciIsInJlbW92YWJsZSIsImhpZ2hsaWdodGVkIiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVkIl0sb3V0cHV0czpbInJlbW92ZWQiLCJkZXN0cm95ZWQiXSxleHBvcnRBczpbIm1hdENoaXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwTGlzdGJveCxzZWxlY3RvcjoibWF0LWNoaXAtbGlzdGJveCIsaW5wdXRzOlsibXVsdGlwbGUiLCJhcmlhLW9yaWVudGF0aW9uIiwic2VsZWN0YWJsZSIsImNvbXBhcmVXaXRoIiwicmVxdWlyZWQiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwidmFsdWUiXSxvdXRwdXRzOlsiY2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YnQuVGJJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1pY29uIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsidGJJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6a2Esc2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixpbnB1dHM6WyJ0Yi1lbGxpcHNpcy1jaGlwLWxpc3QiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNWYWx1ZXNDb21wb25lbnQiLHlvKSxIZShbTigpXSx5by5wcm90b3R5cGUsInNpbmdsZU1vZGUiLHZvaWQgMCksSGUoW04oKV0seW8ucHJvdG90eXBlLCJoaWRlTmV3RmllbGRzIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+eW8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGthXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7c2luZ2xlTW9kZTpbe3R5cGU6YX1dLGhpZGVOZXdGaWVsZHM6W3t0eXBlOmF9XX19KTtjbGFzcyBib3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMuaXNNYXN0ZXI9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe2NlcnRmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxrZXlmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0sc2VydmVyX2hvc3RuYW1lOlsiIixbdWUucGF0dGVybihrdCldXSxyZXFjbGljZXJ0Olt7dmFsdWU6ITEsZGlzYWJsZWQ6ITB9XX0pLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVNYXN0ZXJFbmFibGluZygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWUsdGhpcy5kaXNhYmxlZD90aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pOnRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnVwZGF0ZU1hc3RlckVuYWJsaW5nKCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe2NvbnN0e2NlcnRmaWxlOnQscGFzc3dvcmQ6bixrZXlmaWxlOmEsc2VydmVyX2hvc3RuYW1lOm99PWUsaT17Y2VydGZpbGU6dD8/IiIscGFzc3dvcmQ6bj8/IiIsa2V5ZmlsZTphPz8iIixzZXJ2ZXJfaG9zdG5hbWU6bz8/IiIscmVxY2xpY2VydDohIWUucmVxY2xpY2VydH07dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC5yZXNldChpLHtlbWl0RXZlbnQ6ITF9KX11cGRhdGVNYXN0ZXJFbmFibGluZygpe3RoaXMuaXNNYXN0ZXI/KHRoaXMuZGlzYWJsZWR8fHRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZ2V0KCJyZXFjbGljZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0aGlzLmRpc2FibGVkfHx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgicmVxY2xpY2VydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pKX1vYnNlcnZlVmFsdWVDaGFuZ2VzKCl7dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Ym8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfV0sdXNlc09uQ2hhbmdlczohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmhpbnRzLnBhdGgtaW4tb3NcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2VydGZpbGUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucHJpdmF0ZS1rZXktcGF0aFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXlmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSIhaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1ob3N0bmFtZTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJfaG9zdG5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJpc01hc3RlciIgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXFjbGljZXJ0Ij5cbiAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5yZXF1ZXN0LWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1IZShbTigpXSxiby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Ym8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIFtmb3JtR3JvdXBdPSJzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5oaW50cy5wYXRoLWluLW9zXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jYS1jZXJ0XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNlcnRmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnByaXZhdGUta2V5LXBhdGhcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5ZmlsZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iIWlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItaG9zdG5hbWU8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ic2VydmVyX2hvc3RuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmVxY2xpY2VydCI+XG4gICAgICA8bWF0LWxhYmVsPlxuICAgICAgICB7eyBcJ2dhdGV3YXkucmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtbGFiZWw+XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntpc01hc3Rlcjpbe3R5cGU6YX1dfX0pO2NsYXNzIGhvIGV4dGVuZHMgUHtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKHQsbixvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9byx0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c1Bhcml0aWVzPU9iamVjdC52YWx1ZXMoWW4pLHRoaXMubW9kYnVzQnl0ZVNpemVzPSRuLHRoaXMubW9kYnVzQmF1ZHJhdGVzPWxhLHRoaXMubW9kYnVzT3JkZXJUeXBlPU9iamVjdC52YWx1ZXMoSm4pLHRoaXMuTW9kYnVzUHJvdG9jb2xUeXBlPUhuLHRoaXMuTW9kYnVzUGFyaXR5TGFiZWxzTWFwPVFuLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5Nb2RidXNNZXRob2RMYWJlbHNNYXA9S24sdGhpcy5SZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZT1sbix0aGlzLm1vZGJ1c0hlbHBMaW5rPXYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tb2RidXMvI3NlY3Rpb24tbWFzdGVyLWRlc2NyaXB0aW9uLWFuZC1jb25maWd1cmF0aW9uLXBhcmFtZXRlcnMiLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSIsInN0b3BiaXRzIiwiYnl0ZXNpemUiLCJwYXJpdHkiLCJzdHJpY3QiXSx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXM9WyJwb3J0Iiwic2VjdXJpdHkiLCJob3N0Il0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5zaG93U2VjdXJpdHlDb250cm9sPXRoaXMuZmIuY29udHJvbCghMSksdGhpcy5pbml0aWFsaXplU2xhdmVGb3JtR3JvdXAoKSx0aGlzLnVwZGF0ZVNsYXZlRm9ybUdyb3VwKCksdGhpcy51cGRhdGVDb250cm9sc0VuYWJsaW5nKHRoaXMuZGF0YS52YWx1ZS50eXBlKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCksdGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnBhdGNoVmFsdWUoISF0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkmJiFlZSh0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkse30pKX1nZXQgcHJvdG9jb2xUeXBlKCl7cmV0dXJuIHRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5nZXRTbGF2ZVJlc3VsdERhdGEoKSl9aW5pdGlhbGl6ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltIbi5UQ1BdLGhvc3Q6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHBvcnQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbihFdC5NSU4pLHVlLm1heChFdC5NQVgpXV0sc2VyaWFsUG9ydDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbWV0aG9kOltXbi5TT0NLRVQsW3VlLnJlcXVpcmVkXV0sYmF1ZHJhdGU6W3RoaXMubW9kYnVzQmF1ZHJhdGVzWzBdXSxzdG9wYml0czpbMV0sYnl0ZXNpemU6WyRuWzBdXSxwYXJpdHk6W1luLk5vbmVdLHN0cmljdDpbITBdLHVuaXRJZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxkZXZpY2VOYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxkZXZpY2VUeXBlOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0aW1lb3V0OlszNV0sYnl0ZU9yZGVyOltKbi5CSUddLHdvcmRPcmRlcjpbSm4uQklHXSxyZXRyaWVzOlshMF0scmV0cnlPbkVtcHR5OlshMF0scmV0cnlPbkludmFsaWQ6WyEwXSxwb2xsUGVyaW9kOls1ZTMsW3VlLnJlcXVpcmVkXV0sY29ubmVjdEF0dGVtcHRUaW1lTXM6WzVlMyxbdWUucmVxdWlyZWRdXSxjb25uZWN0QXR0ZW1wdENvdW50Ols1LFt1ZS5yZXF1aXJlZF1dLHdhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXM6WzNlNSxbdWUucmVxdWlyZWRdXSx2YWx1ZXM6W3t9XSxzZWN1cml0eTpbe31dfSksdGhpcy5hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpfXVwZGF0ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKHsuLi50aGlzLmRhdGEudmFsdWUscG9ydDp0aGlzLmRhdGEudmFsdWUudHlwZT09PUhuLlNlcmlhbD9udWxsOnRoaXMuZGF0YS52YWx1ZS5wb3J0LHNlcmlhbFBvcnQ6dGhpcy5kYXRhLnZhbHVlLnR5cGU9PT1Ibi5TZXJpYWw/dGhpcy5kYXRhLnZhbHVlLnBvcnQ6IiIsdmFsdWVzOnthdHRyaWJ1dGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVzPz9bXSx0aW1lc2VyaWVzOnRoaXMuZGF0YS52YWx1ZS50aW1lc2VyaWVzPz9bXSxhdHRyaWJ1dGVVcGRhdGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6dGhpcy5kYXRhLnZhbHVlLnJwYz8/W119fSl9b2JzZXJ2ZVR5cGVDaGFuZ2UoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbnRyb2xzRW5hYmxpbmcoZSksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlQ29udHJvbHNFbmFibGluZyhlKXtjb25zdFt0LG5dPWU9PT1Ibi5TZXJpYWw/W3RoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cyx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXNdOlt0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXMsdGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzXTt0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKSx0aGlzLnVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcodGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlKX1vYnNlcnZlU2hvd1NlY3VyaXR5KCl7dGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlU2VjdXJpdHlFbmFibGluZyhlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcoZSl7ZSYmdGhpcy5wcm90b2NvbFR5cGUhPT1Ibi5TZXJpYWw/dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgic2VjdXJpdHkiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmhvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fWUoIk1vZGJ1c1NsYXZlRGlhbG9nQWJzdHJhY3QiLGhvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpvdC5TdG9yZX0se3R5cGU6aXQuUm91dGVyfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOltYZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nUmVmfV19KTtjbGFzcyB4byBleHRlbmRzIGhve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LG4sYSxvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9b31nZXRTbGF2ZVJlc3VsdERhdGEoKXtjb25zdHt2YWx1ZXM6ZSx0eXBlOnQsc2VyaWFsUG9ydDpuLC4uLmF9PXRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAudmFsdWUsbz17Li4uYSx0eXBlOnQsLi4uZX07cmV0dXJuIHQ9PT1Ibi5TZXJpYWwmJihvLnBvcnQ9biksby5yZXBvcnRTdHJhdGVneXx8ZGVsZXRlIG8ucmVwb3J0U3RyYXRlZ3ksb31hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuYWRkQ29udHJvbCgicmVwb3J0U3RyYXRlZ3kiLHRoaXMuZmIuY29udHJvbChudWxsKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp4byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp4byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNTbGF2ZURpYWxvZ0NvbXBvbmVudCIseG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCx5byxibyx3YSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzbGF2ZXMtY29uZmlnLWNvbnRhaW5lciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IFwnZ2F0ZXdheS5zZXJ2ZXItc2xhdmVcJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0ibW9kYnVzSGVscExpbmsiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IFtmb3JtR3JvdXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgIDxkaXYgY2xhc3M9InN0cm9rZWQgdGItZm9ybS1wYW5lbCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItY29ubmVjdGlvbjwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c1Byb3RvY29sVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldCh0eXBlKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgZWxzZSBzZXJpYWxQb3J0IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zZXJpYWwtcG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InNlcmlhbFBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3NlcmlhbFBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZnJhbWVyLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5Lm1ldGhvZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIHByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCA/IG1vZGJ1c1NlcmlhbE1ldGhvZFR5cGVzIDogbW9kYnVzTWV0aG9kVHlwZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJtZXRob2QiPnt7IE1vZGJ1c01ldGhvZExhYmVsc01hcC5nZXQobWV0aG9kKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYmF1ZHJhdGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYmF1ZHJhdGU8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJhdWRyYXRlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHJhdGUgb2YgbW9kYnVzQmF1ZHJhdGVzIiBbdmFsdWVdPSJyYXRlIj57eyByYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGVzaXplXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGVzaXplPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlc2l6ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzaXplIG9mIG1vZGJ1c0J5dGVTaXplcyIgW3ZhbHVlXT0ic2l6ZSI+e3sgc2l6ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdG9wYml0c1wnIHwgdHJhbnNsYXRlIH19IiAgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcGJpdHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InN0b3BiaXRzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wYXJpdHlcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucGFyaXR5PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJwYXJpdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgcGFyaXR5IG9mIG1vZGJ1c1Bhcml0aWVzIiBbdmFsdWVdPSJwYXJpdHkiPnt7IE1vZGJ1c1Bhcml0eUxhYmVsc01hcC5nZXQocGFyaXR5KSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzdHJpY3QiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnN0cmljdFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RyaWN0XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMudW5pdC1pZFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS51bml0LWlkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1bml0SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51bml0LWlkLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwndW5pdElkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtcHJvZmlsZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VUeXBlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0iZGF0YS5oaWRlTmV3RmllbGRzIGVsc2UgcmVwb3J0U3RyYXRlZ3kiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtZGF0YS1vbi1jaGFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZXBvcnRTdHJhdGVneT5cbiAgICAgICAgICA8dGItcmVwb3J0LXN0cmF0ZWd5IFtkZWZhdWx0VmFsdWVdPSJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZS5EZXZpY2UiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0U3RyYXRlZ3kiIFtpc0V4cGFuc2lvbk1vZGVdPSJ0cnVlIi8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdGlvbi10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rpb24tdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlLW9yZGVyXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGUtb3JkZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJ5dGVPcmRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgb3JkZXIgb2YgbW9kYnVzT3JkZXJUeXBlIiBbdmFsdWVdPSJvcmRlciI+e3sgb3JkZXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud29yZC1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS53b3JkLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ3b3JkT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50bHMtY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIGNsYXNzPSJzZWN1cml0eS1jb25maWciIGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHkiPjwvdGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZz5cbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cmllcyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnJldHJpZXNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRyeU9uRW1wdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWVtcHR5XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkludmFsaWQiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb2xsLXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXkucG9sbC1wZXJpb2RcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC10aW1lXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC10aW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjb25uZWN0QXR0ZW1wdFRpbWVNcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdC1hdHRlbXB0LWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC1jb3VudDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRDb3VudCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHNcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9IndhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICA8dGItbW9kYnVzLXZhbHVlcyBbc2luZ2xlTW9kZV09InRydWUiIFtoaWRlTmV3RmllbGRzXT0iZGF0YS5oaWRlTmV3RmllbGRzIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmludmFsaWQgfHwgIXNsYXZlQ29uZmlnRm9ybUdyb3VwLmRpcnR5Ij5cbiAgICAgIHt7IGRhdGEuYnV0dG9uVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuc2xhdmVzLWNvbmZpZy1jb250YWluZXJ7d2lkdGg6ODB2dzttYXgtd2lkdGg6OTAwcHh9Omhvc3QgLnNsYXZlLW5hbWUtbGFiZWx7bWFyZ2luLXJpZ2h0OjE2cHg7Y29sb3I6IzAwMDAwMGRlfTpob3N0IC5maXhlZC10aXRsZS13aWR0aC0yNjB7bWluLXdpZHRoOjI2MHB4fTpob3N0IDo6bmctZGVlcCAuc2VjdXJpdHktY29uZmlnIC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6MjMwcHh9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn1dfSk7Y2xhc3Mgdm8gZXh0ZW5kcyBob3tjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKGUsdCxuLGEsbyksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnJvdXRlcj1uLHRoaXMuZGF0YT1hLHRoaXMuZGlhbG9nUmVmPW99Z2V0U2xhdmVSZXN1bHREYXRhKCl7Y29uc3R7dmFsdWVzOmUsdHlwZTp0LHNlcmlhbFBvcnQ6biwuLi5hfT10aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlLG89ey4uLmEsdHlwZTp0LC4uLmV9O3JldHVybiB0PT09SG4uU2VyaWFsJiYoby5wb3J0PW4pLG99YWRkRmllbGRzVG9Gb3JtR3JvdXAoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmFkZENvbnRyb2woInNlbmREYXRhT25seU9uQ2hhbmdlIix0aGlzLmZiLmNvbnRyb2woITEpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnZvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lTbGF2ZURpYWxvZ0NvbXBvbmVudCIsdm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktc2xhdmUtZGlhbG9nIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQseW8sYm8sd2EsZ29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9XX0pO2NsYXNzIHdve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy50cmFuc2xhdGU9ZSx0aGlzLmRpYWxvZz10LHRoaXMuZGlhbG9nU2VydmljZT1uLHRoaXMuZmI9YSx0aGlzLmNkcj1vLHRoaXMuaXNMZWdhY3k9ITEsdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2g9dGhpcy5mYi5jb250cm9sKCIiLHtub25OdWxsYWJsZTohMH0pLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFzdGVyRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3NsYXZlczp0aGlzLmZiLmFycmF5KFtdKX0pLHRoaXMuZGF0YVNvdXJjZT1uZXcgQ299Z2V0IHNsYXZlcygpe3JldHVybiB0aGlzLm1hc3RlckZvcm1Hcm91cC5nZXQoInNsYXZlcyIpfW5nT25Jbml0KCl7dGhpcy5tYXN0ZXJGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlVGFibGVEYXRhKGUuc2xhdmVzKSx0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50ZXh0U2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFZlKDE1MCksQmUoKChlLHQpPT4oZT8/IiIpPT09dC50cmltKCkpKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSxlLnRyaW0oKSkpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5zbGF2ZXMuY2xlYXIoKSx0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKGUuc2xhdmVzKX1lbnRlckZpbHRlck1vZGUoKXt0aGlzLnRleHRTZWFyY2hNb2RlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtjb25zdCBlPXRoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50O2UuZm9jdXMoKSxlLnNldFNlbGVjdGlvblJhbmdlKDAsMCl9ZXhpdEZpbHRlck1vZGUoKXt0aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1pZSh0KSxhPW4/dGhpcy5zbGF2ZXMuYXQodCkudmFsdWU6e307dGhpcy5nZXRTbGF2ZURpYWxvZyhhLG4/ImFjdGlvbi5hcHBseSI6ImFjdGlvbi5hZGQiKS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihuP3RoaXMuc2xhdmVzLmF0KHQpLnBhdGNoVmFsdWUoZSk6dGhpcy5zbGF2ZXMucHVzaCh0aGlzLmZiLmNvbnRyb2woZSkpLHRoaXMubWFzdGVyRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfWdldFNsYXZlRGlhbG9nKGUsdCl7cmV0dXJuIHRoaXMuaXNMZWdhY3k/dGhpcy5kaWFsb2cub3Blbih2byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e3ZhbHVlOmUsaGlkZU5ld0ZpZWxkczohMCxidXR0b25UaXRsZTp0fX0pOnRoaXMuZGlhbG9nLm9wZW4oeG8se2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOnt2YWx1ZTplLGJ1dHRvblRpdGxlOnQsaGlkZU5ld0ZpZWxkczohMX19KX1kZWxldGVTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtc2xhdmUtdGl0bGUiKSwiIix0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJih0aGlzLnNsYXZlcy5yZW1vdmVBdCh0KSx0aGlzLm1hc3RlckZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpKX0pKX11cGRhdGVUYWJsZURhdGEoZSx0KXt0JiYoZT1lLmZpbHRlcigoZT0+T2JqZWN0LnZhbHVlcyhlKS5zb21lKChlPT5lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpKSkpKSksdGhpcy5kYXRhU291cmNlLmxvYWREYXRhKGUpfXB1c2hEYXRhQXNGb3JtQXJyYXlzKGUpe2U/Lmxlbmd0aCYmZS5mb3JFYWNoKChlPT50aGlzLnNsYXZlcy5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOndvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpYLkRpYWxvZ1NlcnZpY2V9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOndvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOntpc0xlZ2FjeToiaXNMZWdhY3kifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6InNlYXJjaElucHV0RmllbGQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInNlYXJjaElucHV0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJwaXBlIix0eXBlOl8uQXN5bmNQaXBlLG5hbWU6ImFzeW5jIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpodC5NYXRNZW51LHNlbGVjdG9yOiJtYXQtbWVudSIsaW5wdXRzOlsiYmFja2Ryb3BDbGFzcyIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwieFBvc2l0aW9uIiwieVBvc2l0aW9uIiwib3ZlcmxhcFRyaWdnZXIiLCJoYXNCYWNrZHJvcCIsImNsYXNzIiwiY2xhc3NMaXN0Il0sb3V0cHV0czpbImNsb3NlZCIsImNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6aHQuTWF0TWVudVRyaWdnZXIsc2VsZWN0b3I6IlttYXQtbWVudS10cmlnZ2VyLWZvcl0sIFttYXRNZW51VHJpZ2dlckZvcl0iLGlucHV0czpbIm1hdC1tZW51LXRyaWdnZXItZm9yIiwibWF0TWVudVRyaWdnZXJGb3IiLCJtYXRNZW51VHJpZ2dlckRhdGEiLCJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyJdLG91dHB1dHM6WyJtZW51T3BlbmVkIiwib25NZW51T3BlbiIsIm1lbnVDbG9zZWQiLCJvbk1lbnVDbG9zZSJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFRhYmxlLHNlbGVjdG9yOiJtYXQtdGFibGUsIHRhYmxlW21hdC10YWJsZV0iLGV4cG9ydEFzOlsibWF0VGFibGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGxEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJSb3dEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJSb3dEZWZdIixpbnB1dHM6WyJtYXRIZWFkZXJSb3dEZWYiLCJtYXRIZWFkZXJSb3dEZWZTdGlja3kiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENvbHVtbkRlZixzZWxlY3RvcjoiW21hdENvbHVtbkRlZl0iLGlucHV0czpbIm1hdENvbHVtbkRlZiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbERlZixzZWxlY3RvcjoiW21hdENlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdFJvd0RlZixzZWxlY3RvcjoiW21hdFJvd0RlZl0iLGlucHV0czpbIm1hdFJvd0RlZkNvbHVtbnMiLCJtYXRSb3dEZWZXaGVuIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsLHNlbGVjdG9yOiJtYXQtaGVhZGVyLWNlbGwsIHRoW21hdC1oZWFkZXItY2VsbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbCxzZWxlY3RvcjoibWF0LWNlbGwsIHRkW21hdC1jZWxsXSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRIZWFkZXJSb3csc2VsZWN0b3I6Im1hdC1oZWFkZXItcm93LCB0clttYXQtaGVhZGVyLXJvd10iLGV4cG9ydEFzOlsibWF0SGVhZGVyUm93Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRSb3csc2VsZWN0b3I6Im1hdC1yb3csIHRyW21hdC1yb3ddIixleHBvcnRBczpbIm1hdFJvdyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFNob3dIaWRlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeFNob3ddLCBbZnhTaG93LnByaW50XSwgIFtmeFNob3cueHNdLCBbZnhTaG93LnNtXSwgW2Z4U2hvdy5tZF0sIFtmeFNob3cubGddLCBbZnhTaG93LnhsXSwgIFtmeFNob3cubHQtc21dLCBbZnhTaG93Lmx0LW1kXSwgW2Z4U2hvdy5sdC1sZ10sIFtmeFNob3cubHQteGxdLCAgW2Z4U2hvdy5ndC14c10sIFtmeFNob3cuZ3Qtc21dLCBbZnhTaG93Lmd0LW1kXSwgW2Z4U2hvdy5ndC1sZ10sICBbZnhIaWRlXSwgW2Z4SGlkZS5wcmludF0sICBbZnhIaWRlLnhzXSwgW2Z4SGlkZS5zbV0sIFtmeEhpZGUubWRdLCBbZnhIaWRlLmxnXSwgW2Z4SGlkZS54bF0sICBbZnhIaWRlLmx0LXNtXSwgW2Z4SGlkZS5sdC1tZF0sIFtmeEhpZGUubHQtbGddLCBbZnhIaWRlLmx0LXhsXSwgIFtmeEhpZGUuZ3QteHNdLCBbZnhIaWRlLmd0LXNtXSwgW2Z4SGlkZS5ndC1tZF0sIFtmeEhpZGUuZ3QtbGddIixpbnB1dHM6WyJmeFNob3ciLCJmeFNob3cucHJpbnQiLCJmeFNob3cueHMiLCJmeFNob3cuc20iLCJmeFNob3cubWQiLCJmeFNob3cubGciLCJmeFNob3cueGwiLCJmeFNob3cubHQtc20iLCJmeFNob3cubHQtbWQiLCJmeFNob3cubHQtbGciLCJmeFNob3cubHQteGwiLCJmeFNob3cuZ3QteHMiLCJmeFNob3cuZ3Qtc20iLCJmeFNob3cuZ3QtbWQiLCJmeFNob3cuZ3QtbGciLCJmeEhpZGUiLCJmeEhpZGUucHJpbnQiLCJmeEhpZGUueHMiLCJmeEhpZGUuc20iLCJmeEhpZGUubWQiLCJmeEhpZGUubGciLCJmeEhpZGUueGwiLCJmeEhpZGUubHQtc20iLCJmeEhpZGUubHQtbWQiLCJmeEhpZGUubHQtbGciLCJmeEhpZGUubHQteGwiLCJmeEhpZGUuZ3QteHMiLCJmeEhpZGUuZ3Qtc20iLCJmeEhpZGUuZ3QtbWQiLCJmeEhpZGUuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNNYXN0ZXJUYWJsZUNvbXBvbmVudCIsd28pLEhlKFt4dCgpXSx3by5wcm90b3R5cGUsImlzTGVnYWN5Iix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntzZWFyY2hJbnB1dEZpZWxkOlt7dHlwZTpvLGFyZ3M6WyJzZWFyY2hJbnB1dCJdfV0saXNMZWdhY3k6W3t0eXBlOmF9XX19KTtjbGFzcyBDbyBleHRlbmRzIFJ7Y29uc3RydWN0b3IoKXtzdXBlcigpfX1lKCJTbGF2ZXNEYXRhc291cmNlIixDbyk7Y2xhc3MgVG8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5lbmFibGVTbGF2ZUNvbnRyb2w9bmV3IHllKCExKSx0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVTbGF2ZUVuYWJsaW5nKGUpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzbGF2ZSIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohIXRoaXMub25DaGFuZ2V9KX0pKX13cml0ZVZhbHVlKGUpe3N1cGVyLndyaXRlVmFsdWUoZSksdGhpcy5vbkVuYWJsZVNsYXZlQ29udHJvbChlKX12YWxpZGF0ZSgpe2NvbnN0e21hc3RlcjplLHNsYXZlOnR9PXRoaXMuYmFzaWNGb3JtR3JvdXAudmFsdWUsbj0hZT8uc2xhdmVzPy5sZW5ndGgmJihlZSh0LHt9KXx8IXQpO3JldHVybiF0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkfHxuP3tiYXNpY0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fTpudWxsfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXN0ZXI6W10sc2xhdmU6W119KX11cGRhdGVTbGF2ZUVuYWJsaW5nKGUpe2U/dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInNsYXZlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgic2xhdmUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1vbkVuYWJsZVNsYXZlQ29udHJvbChlKXt0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC5zZXRWYWx1ZSghIWUuc2xhdmUmJiFlZShlLnNsYXZlLHt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpUbyxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6VG8sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnR9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdEaXJlY3RpdmUiLFRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W119KTtjbGFzcyBTb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNQcm90b2NvbExhYmVsc01hcD16bix0aGlzLk1vZGJ1c01ldGhvZExhYmVsc01hcD1Lbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c09yZGVyVHlwZT1PYmplY3QudmFsdWVzKEpuKSx0aGlzLk1vZGJ1c1Byb3RvY29sVHlwZT1Ibix0aGlzLm1vZGJ1c0JhdWRyYXRlcz1sYSx0aGlzLmlzU2xhdmVFbmFibGVkPSExLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSJdLHRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cz1bInBvcnQiLCJzZWN1cml0eSIsImhvc3QiXSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0huLlRDUF0saG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSxzZXJpYWxQb3J0OlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2Q6W1duLlNPQ0tFVF0sdW5pdElkOltudWxsLFt1ZS5yZXF1aXJlZF1dLGJhdWRyYXRlOlt0aGlzLm1vZGJ1c0JhdWRyYXRlc1swXV0sZGV2aWNlTmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlVHlwZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9sbFBlcmlvZDpbNWUzLFt1ZS5yZXF1aXJlZF1dLHNlbmREYXRhVG9UaGluZ3NCb2FyZDpbITFdLGJ5dGVPcmRlcjpbSm4uQklHXSx3b3JkT3JkZXI6W0puLkJJR10sc2VjdXJpdHk6W10saWRlbnRpdHk6dGhpcy5mYi5ncm91cCh7dmVuZG9yTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdENvZGU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHZlbmRvclVybDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdE5hbWU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLG1vZGVsTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx2YWx1ZXM6W119KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCl9Z2V0IHByb3RvY29sVHlwZSgpe3JldHVybiB0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzbGF2ZUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5wYXRjaFZhbHVlKCEhZS5zZWN1cml0eSYmIWVlKGUuc2VjdXJpdHkse30pKSx0aGlzLnVwZGF0ZVNsYXZlQ29uZmlnKGUpfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5pc1NsYXZlRW5hYmxlZD0hZSx0aGlzLnVwZGF0ZUZvcm1FbmFibGVTdGF0ZSgpfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PntlLnR5cGU9PT1Ibi5TZXJpYWwmJihlLnBvcnQ9ZS5zZXJpYWxQb3J0LGRlbGV0ZSBlLnNlcmlhbFBvcnQpLHRoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlRm9ybUVuYWJsZVN0YXRlKCksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUVuYWJsZVN0YXRlKCl7dGhpcy5pc1NsYXZlRW5hYmxlZD8odGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpLHRoaXMudXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCksdGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZSh0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWUpfW9ic2VydmVTaG93U2VjdXJpdHkoKXt0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZShlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxlKGUpe2UmJnRoaXMuaXNTbGF2ZUVuYWJsZWQmJnRoaXMucHJvdG9jb2xUeXBlIT09SG4uU2VyaWFsP3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJzZWN1cml0eSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCl7Y29uc3QgZT10aGlzLnByb3RvY29sVHlwZT09PUhuLlNlcmlhbCx0PWU/dGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cyxuPWU/dGhpcy50Y3BVZHBTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5czt0aGlzLmlzU2xhdmVFbmFibGVkJiZ0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKX11cGRhdGVTbGF2ZUNvbmZpZyhlKXtjb25zdHt0eXBlOnQ9SG4uVENQLG1ldGhvZDpuPVduLlJUVSx1bml0SWQ6YT0wLGRldmljZU5hbWU6bz0iIixkZXZpY2VUeXBlOmk9IiIscG9sbFBlcmlvZDpyPTVlMyxzZW5kRGF0YVRvVGhpbmdzQm9hcmQ6cz0hMSxieXRlT3JkZXI6bD1Kbi5CSUcsd29yZE9yZGVyOmM9Sm4uQklHLHNlY3VyaXR5OnA9e30saWRlbnRpdHk6bT17dmVuZG9yTmFtZToiIixwcm9kdWN0Q29kZToiIix2ZW5kb3JVcmw6IiIscHJvZHVjdE5hbWU6IiIsbW9kZWxOYW1lOiIifSx2YWx1ZXM6ZD17fSxiYXVkcmF0ZTp1PXRoaXMubW9kYnVzQmF1ZHJhdGVzWzBdLGhvc3Q6Zz0iIixwb3J0OmY9bnVsbH09ZSx5PXt0eXBlOnQsbWV0aG9kOm4sdW5pdElkOmEsZGV2aWNlTmFtZTpvLGRldmljZVR5cGU6aSxwb2xsUGVyaW9kOnIsc2VuZERhdGFUb1RoaW5nc0JvYXJkOiEhcyxieXRlT3JkZXI6bCx3b3JkT3JkZXI6YyxzZWN1cml0eTpwLGlkZW50aXR5Om0sdmFsdWVzOmQsYmF1ZHJhdGU6dSxob3N0OnQ9PT1Ibi5TZXJpYWw/IiI6Zyxwb3J0OnQ9PT1Ibi5TZXJpYWw/bnVsbDpmLHNlcmlhbFBvcnQ6dD09PUhuLlNlcmlhbD9mOiIifTt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnNldFZhbHVlKHkse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnlvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtdmFsdWVzIixpbnB1dHM6WyJzaW5nbGVNb2RlIiwiaGlkZU5ld0ZpZWxkcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJpc01hc3RlciJdfSx7a2luZDoicGlwZSIsdHlwZTp3YSxuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+U28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELHlvLGJvLHdhLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dfSk7Y2xhc3Mga28gZXh0ZW5kcyBUb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc0xlZ2FjeT0hMX1tYXBDb25maWdUb0Zvcm1WYWx1ZSh7bWFzdGVyOmUsc2xhdmU6dH0pe3JldHVybnttYXN0ZXI6ZT8uc2xhdmVzP2U6e3NsYXZlczpbXX0sc2xhdmU6dD8/e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTprbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1iYXNpYy1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5rbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpTbyxzZWxlY3RvcjoidGItbW9kYnVzLXNsYXZlLWNvbmZpZyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d28sc2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGlucHV0czpbImlzTGVnYWN5Il19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdDb21wb25lbnQiLGtvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmtvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+a28pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBMbyBleHRlbmRzIFRve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzTGVnYWN5PSEwfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXI/LnNsYXZlcz9lLm1hc3Rlcjp7c2xhdmVzOltdfSxzbGF2ZTplLnNsYXZlP2hhLm1hcFNsYXZlVG9VcGdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6TG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubWFzdGVyLWNvbm5lY3Rpb25zXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDx0Yi1tb2RidXMtbWFzdGVyLXRhYmxlIFtpc0xlZ2FjeV09ImlzTGVnYWN5IiBmb3JtQ29udHJvbE5hbWU9Im1hc3RlciI+PC90Yi1tb2RidXMtbWFzdGVyLXRhYmxlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIiPnt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMtc2VydmVyXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIFtmb3JtQ29udHJvbF09ImVuYWJsZVNsYXZlQ29udHJvbCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8dGItbW9kYnVzLXNsYXZlLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNsYXZlIj48L3RiLW1vZGJ1cy1zbGF2ZS1jb25maWc+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlNvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2xhdmUtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3byxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOlsiaXNMZWdhY3kiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lCYXNpY0NvbmZpZ0NvbXBvbmVudCIsTG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBGbyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm1hcHBpbmdUeXBlcz1mbix0aGlzLmlzTGVnYWN5PSEwfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXBwaW5nOltdLHNlcnZlcjpbXX0pfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybntzZXJ2ZXI6ZS5zZXJ2ZXI/eGEubWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZS5zZXJ2ZXIpOnt9LG1hcHBpbmc6ZS5zZXJ2ZXI/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUuc2VydmVyLm1hcHBpbmcpOltdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24oZSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Rm8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Rm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+Rm8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5GbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgSW8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5NYXBwaW5nVHlwZT1mbn1pbml0QmFzaWNGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7bWFwcGluZzpbXSxyZXF1ZXN0c01hcHBpbmc6W10sYnJva2VyOltdLHdvcmtlcnM6W119KX1nZXRSZXF1ZXN0RGF0YUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGxlKGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChuPT57Zm9yKGNvbnN0IGEgb2YgZVtuXSl0LnB1c2goe3JlcXVlc3RUeXBlOm4scmVxdWVzdFZhbHVlOmF9KX0pKSx0fWdldFJlcXVlc3REYXRhT2JqZWN0KGUpe3JldHVybiBlLnJlZHVjZSgoKGUse3JlcXVlc3RUeXBlOnQscmVxdWVzdFZhbHVlOm59KT0+KGVbdF0ucHVzaChuKSxlKSkse2Nvbm5lY3RSZXF1ZXN0czpbXSxkaXNjb25uZWN0UmVxdWVzdHM6W10sYXR0cmlidXRlUmVxdWVzdHM6W10sYXR0cmlidXRlVXBkYXRlczpbXSxzZXJ2ZXJTaWRlUnBjOltdfSl9Z2V0QnJva2VyTWFwcGVkVmFsdWUoZSx0KXtyZXR1cm57Li4uZSxtYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnM/PzEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcj8/MTB9fXdyaXRlVmFsdWUoZSl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLm1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOklvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6SW8sZGVjb3JhdG9yczpbe3R5cGU6c31dfSk7Y2xhc3MgQW8gZXh0ZW5kcyBJb3ttYXBDb25maWdUb0Zvcm1WYWx1ZShlKXtjb25zdHticm9rZXI6dCxtYXBwaW5nOm49W10sY29ubmVjdFJlcXVlc3RzOmE9W10sZGlzY29ubmVjdFJlcXVlc3RzOm89W10sYXR0cmlidXRlUmVxdWVzdHM6aT1bXSxhdHRyaWJ1dGVVcGRhdGVzOnI9W10sc2VydmVyU2lkZVJwYzpzPVtdfT1lLGw9bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmEsZGlzY29ubmVjdFJlcXVlc3RzOm8sYXR0cmlidXRlUmVxdWVzdHM6aSxhdHRyaWJ1dGVVcGRhdGVzOnIsc2VydmVyU2lkZVJwYzpzfSk7cmV0dXJue3dvcmtlcnM6dCYmKHQubWF4TnVtYmVyT2ZXb3JrZXJzfHx0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXIpP3ttYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnMsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjp0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJ9Ont9LG1hcHBpbmc6bWEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKG4pfHxbXSxicm9rZXI6dHx8e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShsKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e30saT1vPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fTtyZXR1cm57YnJva2VyOnRoaXMuZ2V0QnJva2VyTWFwcGVkVmFsdWUodCxuKSxtYXBwaW5nOm1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGEpLC4uLm1hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihpKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpBbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuYnJva2VyLmNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJicm9rZXIiPjwvdGItYnJva2VyLWNvbmZpZy1jb250cm9sPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZGF0YS1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJtYXBwaW5nIiBbcmVxdWlyZWRdPSJ0cnVlIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5EQVRBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RzTWFwcGluZyIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuUkVRVUVTVFMiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LndvcmtlcnMtc2V0dGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICA8dGItd29ya2Vycy1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9IndvcmtlcnMiPjwvdGItd29ya2Vycy1jb25maWctY29udHJvbD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuPC9tYXQtdGFiLWdyb3VwPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dW8sc2VsZWN0b3I6InRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm1vLHNlbGVjdG9yOiJ0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLXRhYmxlIixpbnB1dHM6WyJyZXF1aXJlZCIsIm1hcHBpbmdUeXBlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxsbyx1byxtbyxyb10sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmJyb2tlci5jb25uZWN0aW9uXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItYnJva2VyLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0iYnJva2VyIj48L3RiLWJyb2tlci1jb25maWctY29udHJvbD5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuREFUQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkucmVxdWVzdHMtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0c01hcHBpbmciIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS53b3JrZXJzLXNldHRpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgPHRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJ3b3JrZXJzIj48L3RiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2w+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2hlaWdodDoxMDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBObyBleHRlbmRzIElve21hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe2NvbnN0e2Jyb2tlcjp0LG1hcHBpbmc6bj1bXSxyZXF1ZXN0c01hcHBpbmc6YX09ZTtyZXR1cm57d29ya2Vyczp0JiYodC5tYXhOdW1iZXJPZldvcmtlcnN8fHQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcik/e21heE51bWJlck9mV29ya2Vyczp0Lm1heE51bWJlck9mV29ya2VycyxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcn06e30sbWFwcGluZzpuPz9bXSxicm9rZXI6dD8/e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShhKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e307cmV0dXJue2Jyb2tlcjp0aGlzLmdldEJyb2tlck1hcHBlZFZhbHVlKHQsbiksbWFwcGluZzphLHJlcXVlc3RzTWFwcGluZzpvPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpObyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpObyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtYmFzaWMtY29uZmlnIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Tm8pKSxtdWx0aTohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiLHNlbGVjdG9yOiJtYXQtdGFiIixpbnB1dHM6WyJkaXNhYmxlZCIsImxhYmVsIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImxhYmVsQ2xhc3MiLCJib2R5Q2xhc3MiXSxleHBvcnRBczpbIm1hdFRhYiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiR3JvdXAsc2VsZWN0b3I6Im1hdC10YWItZ3JvdXAiLGlucHV0czpbImNvbG9yIiwiZml0SW5rQmFyVG9Db250ZW50IiwibWF0LXN0cmV0Y2gtdGFicyIsImR5bmFtaWNIZWlnaHQiLCJzZWxlY3RlZEluZGV4IiwiaGVhZGVyUG9zaXRpb24iLCJhbmltYXRpb25EdXJhdGlvbiIsImNvbnRlbnRUYWJJbmRleCIsImRpc2FibGVQYWdpbmF0aW9uIiwiZGlzYWJsZVJpcHBsZSIsInByZXNlcnZlQ29udGVudCIsImJhY2tncm91bmRDb2xvciIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiXSxvdXRwdXRzOlsic2VsZWN0ZWRJbmRleENoYW5nZSIsImZvY3VzQ2hhbmdlIiwiYW5pbWF0aW9uRG9uZSIsInNlbGVjdGVkVGFiQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1byxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6bW8sc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5vLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tcXR0LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8sdW8sbW8scm9dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgTW97aXNFcnJvclN0YXRlKGUpe3JldHVybiBlJiZlLmludmFsaWR9fWUoIkZvcmNlRXJyb3JTdGF0ZU1hdGNoZXIiLE1vKTtjbGFzcyBFbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5mYj10LHRoaXMudHJhbnNsYXRlPW4sdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWEsdGhpcy5kaWFsb2dTZXJ2aWNlPW8sdGhpcy5kaWFsb2c9aSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZT1yLHRoaXMuem9uZT1zLHRoaXMudXRpbHM9bCx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1jLHRoaXMuY2Q9cCx0aGlzLkNvbm5lY3RvclR5cGU9X3QsdGhpcy5hbGxvd0Jhc2ljQ29uZmlnPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5nYXRld2F5TG9nTGV2ZWw9T2JqZWN0LnZhbHVlcyhNdCksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiZW5hYmxlZCIsImtleSIsInR5cGUiLCJzeW5jU3RhdHVzIiwiZXJyb3JzIiwiYWN0aW9ucyJdLHRoaXMuR2F0ZXdheUNvbm5lY3RvclR5cGVzVHJhbnNsYXRlc01hcD1IdCx0aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcz1vbix0aGlzLlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlPWxuLHRoaXMubW9kZT10aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyx0aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3Q9bmV3IFNlLHRoaXMuYWN0aXZlRGF0YT1bXSx0aGlzLmluYWN0aXZlRGF0YT1bXSx0aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGE9W10sdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy5vbkVycm9yc1VwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfX0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0PW5ldyBTZSx0aGlzLmluaXREYXRhU291cmNlcygpLHRoaXMuaW5pdENvbm5lY3RvckZvcm0oKSx0aGlzLm9ic2VydmVBdHRyaWJ1dGVDaGFuZ2UoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGFTb3VyY2Uuc29ydD10aGlzLnNvcnQsdGhpcy5kYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3I9dGhpcy5nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCksdGhpcy5jdHguJHNjb3BlLmdhdGV3YXlDb25uZWN0b3JzPXRoaXMsdGhpcy5sb2FkQ29ubmVjdG9ycygpLHRoaXMubG9hZEdhdGV3YXlTdGF0ZSgpLHRoaXMub2JzZXJ2ZU1vZGVDaGFuZ2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfW9uU2F2ZUNvbm5lY3Rvcigpe3RoaXMuc2F2ZUNvbm5lY3Rvcih0aGlzLmdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKHRoaXMuY29ubmVjdG9yRm9ybS52YWx1ZSksITEpfXNhdmVDb25uZWN0b3IoZSx0PSEwKXtjb25zdCBuPXR8fHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyh0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSk/TC5TSEFSRURfU0NPUEU6TC5TRVJWRVJfU0NPUEU7QWUodGhpcy5nZXRFbnRpdHlBdHRyaWJ1dGVUYXNrcyhlLG4pKS5waXBlKE9lKDEpKS5zdWJzY3JpYmUoKG49Pnt0aGlzLnNob3dUb2FzdCh0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuY29ubmVjdG9yLWNyZWF0ZWQiKTp0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmNvbm5lY3Rvci11cGRhdGVkIikpLHRoaXMuaW5pdGlhbENvbm5lY3Rvcj1lLHRoaXMudXBkYXRlRGF0YSghMCksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9KSl9Z2V0RW50aXR5QXR0cmlidXRlVGFza3MoZSx0KXtjb25zdCBuPVtdLGE9W3trZXk6ZS5uYW1lLHZhbHVlOmV9XSxvPVtdLGk9IXRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TSEFSRURfU0NPUEV8fCF0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TRVJWRVJfU0NPUEUscj10aGlzLmluaXRpYWxDb25uZWN0b3ImJnRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lIT09ZS5uYW1lO3JldHVybiByJiYoby5wdXNoKHtrZXk6dGhpcy5pbml0aWFsQ29ubmVjdG9yLm5hbWV9KSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCExKSksaSYmKHQ9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnMucHVzaChlLm5hbWUpOnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLnB1c2goZS5uYW1lKSksKHJ8fGkpJiZuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2sodCkpLG4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsdCxhKSksby5sZW5ndGgmJm4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSx0LG8pKSxufWdldFNhdmVFbnRpdHlBdHRyaWJ1dGVzVGFzayhlKXtjb25zdCB0PWU9PT1MLlNIQVJFRF9TQ09QRT8iYWN0aXZlX2Nvbm5lY3RvcnMiOiJpbmFjdGl2ZV9jb25uZWN0b3JzIixuPWU9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5zYXZlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxlLFt7a2V5OnQsdmFsdWU6bn1dKX1yZW1vdmVDb25uZWN0b3JGcm9tTGlzdChlLHQpe2NvbnN0IG49dD90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMsYT1uLmluZGV4T2YoZSk7LTEhPT1hJiZuLnNwbGljZShhLDEpfWdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKGUpe2NvbnN0IHQ9ey4uLmV9O3JldHVybiB0LmNvbmZpZ3VyYXRpb249YCR7Y2UodC5uYW1lKX0uanNvbmAsZGVsZXRlIHQuYmFzaWNDb25maWcsdC50eXBlIT09X3QuR1JQQyYmZGVsZXRlIHQua2V5LHQudHlwZSE9PV90LkNVU1RPTSYmZGVsZXRlIHQuY2xhc3MsdC50eXBlPT09X3QuTU9EQlVTJiZ0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0odC5jb25maWdWZXJzaW9uKSYmKHQucmVwb3J0U3RyYXRlZ3l8fCh0LnJlcG9ydFN0cmF0ZWd5PXt0eXBlOnNuLk9uUmVwb3J0UGVyaW9kLHJlcG9ydFBlcmlvZDpsbi5Db25uZWN0b3J9LGRlbGV0ZSB0LnNlbmREYXRhT25seU9uQ2hhbmdlKSksdGhpcy5nYXRld2F5VmVyc2lvbiYmIXQuY29uZmlnVmVyc2lvbiYmKHQuY29uZmlnVmVyc2lvbj10aGlzLmdhdGV3YXlWZXJzaW9uKSx0LnRzPURhdGUubm93KCksdH11cGRhdGVEYXRhKGU9ITEpe3RoaXMucGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5PXRoaXMuc29ydC5hY3RpdmUsdGhpcy5wYWdlTGluay5zb3J0T3JkZXIuZGlyZWN0aW9uPXdbdGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpXSx0aGlzLmF0dHJpYnV0ZURhdGFTb3VyY2UubG9hZEF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5DTElFTlRfU0NPUEUsdGhpcy5wYWdlTGluayxlKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZURhdGE9ZS5kYXRhLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKSx0aGlzLmdlbmVyYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5zZXRDbGllbnREYXRhKGUpfSkpLHRoaXMuaW5hY3RpdmVDb25uZWN0b3JzRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuc2hhcmVkQXR0cmlidXRlRGF0YT1lLmRhdGEuZmlsdGVyKChlPT50aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5jbHVkZXMoZS5rZXkpKSksdGhpcy5jb21iaW5lRGF0YSgpfSkpLHRoaXMuc2VydmVyRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuaW5hY3RpdmVEYXRhPWUuZGF0YS5maWx0ZXIoKGU9PnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKX0pKX1pc0Nvbm5lY3RvclN5bmNlZChlKXtjb25zdCB0PWUudmFsdWU7aWYoIXQudHN8fGUuc2tpcFN5bmN8fCF0aGlzLmlzR2F0ZXdheUFjdGl2ZSlyZXR1cm4hMTtpZigtMT09PXRoaXMuYWN0aXZlRGF0YS5maW5kSW5kZXgoKGU9Pigic3RyaW5nIj09dHlwZW9mIGUudmFsdWU/SlNPTi5wYXJzZShlLnZhbHVlKTplLnZhbHVlKS5uYW1lPT09dC5uYW1lKSkpcmV0dXJuITE7cmV0dXJuLTEhPT10aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGEuZmluZEluZGV4KChlPT57Y29uc3Qgbj1lLnZhbHVlLGE9bi5uYW1lPT09dC5uYW1lLG89ZWUobi5jb25maWd1cmF0aW9uSnNvbix7fSkmJmEsaT10aGlzLmhhc1NhbWVDb25maWcobi5jb25maWd1cmF0aW9uSnNvbix0LmNvbmZpZ3VyYXRpb25Kc29uKSxyPW4udHMmJm4udHM8PXQudHM7cmV0dXJuIGEmJnImJihpfHxvKX0pKX1oYXNTYW1lQ29uZmlnKGUsdCl7Y29uc3R7bmFtZTpuLGlkOmEsZW5hYmxlUmVtb3RlTG9nZ2luZzpvLGxvZ0xldmVsOmkscmVwb3J0U3RyYXRlZ3k6cixjb25maWdWZXJzaW9uOnMsLi4ubH09ZSx7bmFtZTpjLGlkOnAsZW5hYmxlUmVtb3RlTG9nZ2luZzptLGxvZ0xldmVsOmQscmVwb3J0U3RyYXRlZ3k6dSxjb25maWdWZXJzaW9uOmcsLi4uZn09dDtyZXR1cm4gZWUobCxmKX1jb21iaW5lRGF0YSgpe2NvbnN0IGU9Wy4uLnRoaXMuYWN0aXZlRGF0YSwuLi50aGlzLmluYWN0aXZlRGF0YSwuLi50aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGFdLnJlZHVjZSgoKGUsdCk9Pntjb25zdCBuPWUuZmluZEluZGV4KChlPT5lLmtleT09PXQua2V5KSk7cmV0dXJuLTE9PT1uP2UucHVzaCh0KTp0Lmxhc3RVcGRhdGVUcz5lW25dLmxhc3RVcGRhdGVUcyYmIXRoaXMuaXNDb25uZWN0b3JTeW5jZWQoZVtuXSkmJihlW25dPXsuLi50LHNraXBTeW5jOiEwfSksZX0pLFtdKTt0aGlzLmRhdGFTb3VyY2UuZGF0YT1lLm1hcCgoZT0+KHsuLi5lLHZhbHVlOiJzdHJpbmciPT10eXBlb2YgZS52YWx1ZT9KU09OLnBhcnNlKGUudmFsdWUpOmUudmFsdWV9KSkpfWNsZWFyT3V0Q29ubmVjdG9yRm9ybSgpe3RoaXMuaW5pdGlhbENvbm5lY3Rvcj1udWxsLHRoaXMuY29ubmVjdG9yRm9ybS5zZXRWYWx1ZSh7bW9kZTpvbi5CQVNJQyxuYW1lOiIiLHR5cGU6X3QuTVFUVCxzZW5kRGF0YU9ubHlPbkNoYW5nZTohMSxlbmFibGVSZW1vdGVMb2dnaW5nOiExLGxvZ0xldmVsOk10LklORk8sa2V5OiJhdXRvIixjbGFzczoiIixjb25maWd1cmF0aW9uOiIiLGNvbmZpZ3VyYXRpb25Kc29uOnt9LGJhc2ljQ29uZmlnOnt9LGNvbmZpZ1ZlcnNpb246IiIscmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9c2VsZWN0Q29ubmVjdG9yKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPXQudmFsdWU7bj8ubmFtZSE9PXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZSYmdGhpcy5jb25maXJtQ29ubmVjdG9yQ2hhbmdlKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5zZXRGb3JtVmFsdWUobil9KSl9aXNTYW1lQ29ubmVjdG9yKGUpe2lmKCF0aGlzLmluaXRpYWxDb25uZWN0b3IpcmV0dXJuITE7Y29uc3QgdD1lLnZhbHVlO3JldHVybiB0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZT09PXQubmFtZX1zaG93VG9hc3QoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh7dHlwZToiW05vdGlmaWNhdGlvbl0gU2hvdyIsbm90aWZpY2F0aW9uOnttZXNzYWdlOmUsdHlwZToic3VjY2VzcyIsZHVyYXRpb246MWUzLHZlcnRpY2FsUG9zaXRpb246InRvcCIsaG9yaXpvbnRhbFBvc2l0aW9uOiJsZWZ0Iix0YXJnZXQ6ImRhc2hib2FyZFJvb3QiLGZvcmNlRGlzbWlzczohMH19KX1yZXR1cm5UeXBlKGUpe2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4gdGhpcy5HYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldCh0LnR5cGUpfWRlbGV0ZUNvbm5lY3RvcihlLHQpe3Q/LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49YERlbGV0ZSBjb25uZWN0b3IgIiR7ZS5rZXl9Ij9gO3RoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG4sIkFsbCBjb25uZWN0b3IgZGF0YSB3aWxsIGJlIGRlbGV0ZWQuIiwiQ2FuY2VsIiwiRGVsZXRlIikucGlwZShPZSgxKSxVZSgodD0+e2lmKCF0KXJldHVybjtjb25zdCBuPVtdLGE9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUudmFsdWU/Lm5hbWUpP0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVybiBuLnB1c2godGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmRlbGV0ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsYSxbZV0pKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCExKSxuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2soYSkpLEFlKG4pfSkpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSE9PWUua2V5fHwodGhpcy5jbGVhck91dENvbm5lY3RvckZvcm0oKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSx0aGlzLmNvbm5lY3RvckZvcm0uZGlzYWJsZSgpKSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWNvbm5lY3RvckxvZ3MoZSx0KXt0JiZ0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49Sih0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIuZ2V0U3RhdGVQYXJhbXMoKSk7bi5jb25uZWN0b3JfbG9ncz1lLG4udGFyZ2V0RW50aXR5UGFyYW1OYW1lPSJjb25uZWN0b3JfbG9ncyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX2xvZ3MiLG4pfWNvbm5lY3RvclJwYyhlLHQpe3QmJnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTtuLmNvbm5lY3Rvcl9ycGM9ZSxuLnRhcmdldEVudGl0eVBhcmFtTmFtZT0iY29ubmVjdG9yX3JwYyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX3JwYyIsbil9b25FbmFibGVDb25uZWN0b3IoZSl7ZS52YWx1ZS50cz0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLnVwZGF0ZUFjdGl2ZUNvbm5lY3RvcktleXMoZS5rZXkpLHRoaXMuYXR0cmlidXRlVXBkYXRlU3ViamVjdC5uZXh0KGUpfWdldEVycm9yc0NvdW50KGUpe2NvbnN0IHQ9ZS5rZXksbj10aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24uZGF0YS5maW5kKChlPT5lJiZlLmRhdGFLZXkubmFtZT09PWAke3R9X0VSUk9SU19DT1VOVGApKTtyZXR1cm4gbiYmdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKHQpP24uZGF0YVswXVsxXXx8MDoiSW5hY3RpdmUifW9uQWRkQ29ubmVjdG9yKGUpe2U/LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29uZmlybUNvbm5lY3RvckNoYW5nZSgpLnBpcGUoT2UoMSksTWUoQm9vbGVhbiksVWUoKCgpPT50aGlzLm9wZW5BZGRDb25uZWN0b3JEaWFsb2coKSkpLE1lKEJvb2xlYW4pKS5zdWJzY3JpYmUoKGU9PnRoaXMuYWRkQ29ubmVjdG9yKGUpKSl9YWRkQ29ubmVjdG9yKGUpe3RoaXMuY29ubmVjdG9yRm9ybS5kaXNhYmxlZCYmdGhpcy5jb25uZWN0b3JGb3JtLmVuYWJsZSgpLGUuY29uZmlndXJhdGlvbkpzb258fChlLmNvbmZpZ3VyYXRpb25Kc29uPXt9KSx0aGlzLmdhdGV3YXlWZXJzaW9uJiYhZS5jb25maWdWZXJzaW9uJiYoZS5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLGUuYmFzaWNDb25maWc9ZS5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9ZTtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZTt0aGlzLnNldEluaXRpYWxDb25uZWN0b3JWYWx1ZXMoZSksdGhpcy5zYXZlQ29ubmVjdG9yKHRoaXMuZ2V0VXBkYXRlZENvbm5lY3RvckRhdGEoZSkpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9c2V0SW5pdGlhbENvbm5lY3RvclZhbHVlcyhlKXtjb25zdHtiYXNpY0NvbmZpZzp0LG1vZGU6biwuLi5hfT1lO3RoaXMudG9nZ2xlUmVwb3J0U3RyYXRlZ3koZS50eXBlKSx0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikuc2V0VmFsdWUodGhpcy5hbGxvd0Jhc2ljQ29uZmlnLmhhcyhlLnR5cGUpP2UubW9kZT8/b24uQkFTSUM6bnVsbCx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLnBhdGNoVmFsdWUoYSx7ZW1pdEV2ZW50OiExfSl9b3BlbkFkZENvbm5lY3RvckRpYWxvZygpe3JldHVybiB0aGlzLmN0eC5uZ1pvbmUucnVuKCgoKT0+dGhpcy5kaWFsb2cub3Blbih0byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e2RhdGFTb3VyY2VEYXRhOnRoaXMuZGF0YVNvdXJjZS5kYXRhLGdhdGV3YXlWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb259fSkuYWZ0ZXJDbG9zZWQoKSkpfXVuaXFOYW1lUmVxdWlyZWQoKXtyZXR1cm4gZT0+e2NvbnN0IHQ9ZS52YWx1ZT8udHJpbSgpLnRvTG93ZXJDYXNlKCksbj10aGlzLmRhdGFTb3VyY2UuZGF0YS5zb21lKChlPT5lLnZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKT09PXQpKSxhPXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZS50b0xvd2VyQ2FzZSgpPT09dDtyZXR1cm4gbiYmIWE/e2R1cGxpY2F0ZU5hbWU6e3ZhbGlkOiExfX06bnVsbH19aW5pdERhdGFTb3VyY2VzKCl7Y29uc3QgZT17cHJvcGVydHk6ImtleSIsZGlyZWN0aW9uOncuQVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKDFlMywwLG51bGwsZSksdGhpcy5hdHRyaWJ1dGVEYXRhU291cmNlPW5ldyBMYSh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2UsdGhpcy56b25lLHRoaXMudHJhbnNsYXRlKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9yc0RhdGFTb3VyY2U9bmV3IExhKHRoaXMuYXR0cmlidXRlU2VydmljZSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZSx0aGlzLnpvbmUsdGhpcy50cmFuc2xhdGUpLHRoaXMuc2VydmVyRGF0YVNvdXJjZT1uZXcgTGEodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLHRoaXMudGVsZW1ldHJ5V3NTZXJ2aWNlLHRoaXMuem9uZSx0aGlzLnRyYW5zbGF0ZSksdGhpcy5kYXRhU291cmNlPW5ldyB5KFtdKX1pbml0Q29ubmVjdG9yRm9ybSgpe3RoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHttb2RlOltvbi5CQVNJQ10sbmFtZTpbIiIsW3VlLnJlcXVpcmVkLHRoaXMudW5pcU5hbWVSZXF1aXJlZCgpLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbIiIsW3VlLnJlcXVpcmVkXV0sZW5hYmxlUmVtb3RlTG9nZ2luZzpbITFdLGxvZ0xldmVsOlsiIixbdWUucmVxdWlyZWRdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITFdLGtleTpbImF1dG8iXSxjbGFzczpbIiJdLGNvbmZpZ3VyYXRpb246WyIiXSxjb25maWd1cmF0aW9uSnNvbjpbe30sW3VlLnJlcXVpcmVkXV0sYmFzaWNDb25maWc6W3t9XSxjb25maWdWZXJzaW9uOlsiIl0scmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSksdGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGUoKX1nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCl7cmV0dXJuKGUsdCk9Pntzd2l0Y2godCl7Y2FzZSJzeW5jU3RhdHVzIjpyZXR1cm4gdGhpcy5pc0Nvbm5lY3RvclN5bmNlZChlKT8xOjA7Y2FzZSJlbmFibGVkIjpyZXR1cm4gdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KT8xOjA7Y2FzZSJlcnJvcnMiOmNvbnN0IG49dGhpcy5nZXRFcnJvcnNDb3VudChlKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpPT09dy5ERVNDPy0xOjEvMDpuO2RlZmF1bHQ6cmV0dXJuIGVbdF18fGUudmFsdWVbdF19fX1sb2FkQ29ubmVjdG9ycygpe3RoaXMuZGV2aWNlJiZ0aGlzLmRldmljZS5pZCE9PWsmJkFlKFt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSxbImFjdGl2ZV9jb25uZWN0b3JzIl0pLHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFsiaW5hY3RpdmVfY29ubmVjdG9ycyJdKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLkNMSUVOVF9TQ09QRSxbIlZlcnNpb24iXSldKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVswXSksdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVsxXSksdGhpcy5nYXRld2F5VmVyc2lvbj1lWzJdWzBdPy52YWx1ZSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWxvYWRHYXRld2F5U3RhdGUoKXt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5rZXkpKS52YWx1ZSxuPWUuZmluZCgoZT0+Imxhc3REaXNjb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZTt0aGlzLmlzR2F0ZXdheUFjdGl2ZT10aGlzLmdldEdhdGV3YXlTdGF0dXModCxhLG4pfSkpfXBhcnNlQ29ubmVjdG9ycyhlKXtjb25zdCB0PWU/LlswXT8udmFsdWV8fFtdO3JldHVybiBuZSh0KT9KU09OLnBhcnNlKHQpOnR9b2JzZXJ2ZU1vZGVDaGFuZ2UoKXt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikubWFya0FzUHJpc3RpbmUoKX0pKX1vYnNlcnZlQXR0cmlidXRlQ2hhbmdlKCl7dGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0LnBpcGUoVmUoMzAwKSxFZSgoZT0+dGhpcy5leGVjdXRlQXR0cmlidXRlVXBkYXRlcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX11cGRhdGVBY3RpdmVDb25uZWN0b3JLZXlzKGUpe2lmKHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlKSl7Y29uc3QgdD10aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuYWN0aXZlQ29ubmVjdG9ycy5zcGxpY2UodCwxKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5wdXNoKGUpfWVsc2V7Y29uc3QgdD10aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMuc3BsaWNlKHQsMSksdGhpcy5hY3RpdmVDb25uZWN0b3JzLnB1c2goZSl9fWV4ZWN1dGVBdHRyaWJ1dGVVcGRhdGVzKGUpe0FlKHRoaXMuZ2V0QXR0cmlidXRlRXhlY3V0aW9uVGFza3MoZSkpLnBpcGUoT2UoMSksRWUoKCgpPT50aGlzLnVwZGF0ZURhdGEoITApKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWdldEF0dHJpYnV0ZUV4ZWN1dGlvblRhc2tzKGUpe2NvbnN0IHQ9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSxuPXQ/TC5TRVJWRVJfU0NPUEU6TC5TSEFSRURfU0NPUEUsYT10P0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVyblt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsW3trZXk6ImFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmFjdGl2ZUNvbm5lY3RvcnN9XSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFt7a2V5OiJpbmFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmluYWN0aXZlQ29ubmVjdG9yc31dKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxuLFtlXSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLGEsW2VdKV19b25EYXRhVXBkYXRlRXJyb3IoZSl7Y29uc3QgdD10aGlzLnV0aWxzLnBhcnNlRXhjZXB0aW9uKGUpO2xldCBuPXQubmFtZTt0Lm1lc3NhZ2UmJihuKz0iOiAiK3QubWVzc2FnZSksY29uc29sZS5lcnJvcihuKX1vbkVycm9yc1VwZGF0ZWQoKXt0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVkKCl7Y29uc3QgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGEsdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5kYXRhS2V5Lm5hbWUpKS5kYXRhWzBdWzFdLG49ZS5maW5kKChlPT4ibGFzdERpc2Nvbm5lY3RUaW1lIj09PWUuZGF0YUtleS5uYW1lKSkuZGF0YVswXVsxXSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmRhdGFLZXkubmFtZSkpLmRhdGFbMF1bMV07dGhpcy5pc0dhdGV3YXlBY3RpdmU9dGhpcy5nZXRHYXRld2F5U3RhdHVzKHQsYSxuKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1nZXRHYXRld2F5U3RhdHVzKGUsdCxuKXtyZXR1cm4hIWUmJighbnx8dD5uKX1nZW5lcmF0ZVN1YnNjcmlwdGlvbigpe2lmKHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuZGV2aWNlKXtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuZGV2aWNlLmlkLGVudGl0eU5hbWU6IkdhdGV3YXkiLHRpbWVzZXJpZXM6W119XTt0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKCh0PT57ZVswXS50aW1lc2VyaWVzLnB1c2goe25hbWU6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGAsbGFiZWw6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGB9KX0pKSx0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGkuY3JlYXRlU3Vic2NyaXB0aW9uRnJvbUluZm8oQS5sYXRlc3QsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuc3Vic2NyaXB0aW9uPWV9KSl9fWNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpe3RoaXMuYmFzaWNDb25maWdTdWImJnRoaXMuYmFzaWNDb25maWdTdWIudW5zdWJzY3JpYmUoKSx0aGlzLmJhc2ljQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImJhc2ljQ29uZmlnIikudmFsdWVDaGFuZ2VzLnBpcGUoTWUoKCgpPT4hIXRoaXMuaW5pdGlhbENvbm5lY3RvcikpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIiksbj10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWUsYT10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU7aWYoIWVlKGUsdD8udmFsdWUpJiZ0aGlzLmFsbG93QmFzaWNDb25maWcuaGFzKG4pJiZhPT09b24uQkFTSUMpe2NvbnN0IG49ey4uLnQudmFsdWUsLi4uZX07dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiY29uZmlndXJhdGlvbkpzb24iKS5wYXRjaFZhbHVlKG4se2VtaXRFdmVudDohMX0pfX0pKX1jcmVhdGVKc29uQ29uZmlnV2F0Y2hlcigpe3RoaXMuanNvbkNvbmZpZ1N1YiYmdGhpcy5qc29uQ29uZmlnU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5qc29uQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKSxuPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZSxhPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoIm1vZGUiKS52YWx1ZTshZWUoZSx0Py52YWx1ZSkmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMobikmJmE9PT1vbi5BRFZBTkNFRCYmdGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKS5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWNvbmZpcm1Db25uZWN0b3JDaGFuZ2UoKXtyZXR1cm4gdGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmNvbm5lY3RvckZvcm0uZGlydHk/dGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRpdGxlIiksdGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRleHQiKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApOkllKCEwKX1zZXRGb3JtVmFsdWUoZSl7dGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGVkJiZ0aGlzLmNvbm5lY3RvckZvcm0uZW5hYmxlKCk7Y29uc3QgdD1iYS5nZXRDb25maWcoe2NvbmZpZ3VyYXRpb246IiIsa2V5OiJhdXRvIixjb25maWd1cmF0aW9uSnNvbjp7fSwuLi5lfSx0aGlzLmdhdGV3YXlWZXJzaW9uKTt0aGlzLmdhdGV3YXlWZXJzaW9uJiYhdC5jb25maWdWZXJzaW9uJiYodC5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLHQuYmFzaWNDb25maWc9dC5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9dCx0aGlzLnVwZGF0ZUNvbm5lY3Rvcih0KX11cGRhdGVDb25uZWN0b3IoZSl7c3dpdGNoKHRoaXMuanNvbkNvbmZpZ1N1Yj8udW5zdWJzY3JpYmUoKSxlLnR5cGUpe2Nhc2UgX3QuTVFUVDpjYXNlIF90Lk9QQ1VBOmNhc2UgX3QuTU9EQlVTOnRoaXMudXBkYXRlQmFzaWNDb25maWdDb25uZWN0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZSh7Li4uZSxtb2RlOm51bGx9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUpzb25Db25maWdXYXRjaGVyKCl9fXVwZGF0ZUJhc2ljQ29uZmlnQ29ubmVjdG9yKGUpe3RoaXMuYmFzaWNDb25maWdTdWI/LnVuc3Vic2NyaWJlKCk7Y29uc3QgdD10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWU7dGhpcy5zZXRJbml0aWFsQ29ubmVjdG9yVmFsdWVzKGUpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9cGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKXt0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZShlLHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpLHRoaXMuY3JlYXRlSnNvbkNvbmZpZ1dhdGNoZXIoKX10b2dnbGVSZXBvcnRTdHJhdGVneShlKXtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInJlcG9ydFN0cmF0ZWd5Iik7ZT09PV90Lk1PREJVUz90LmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zZXRDbGllbnREYXRhKGUpe2lmKHRoaXMuaW5pdGlhbENvbm5lY3Rvcil7Y29uc3QgdD1lLmRhdGEuZmluZCgoZT0+ZS5rZXk9PT10aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSkpO3QmJih0LnZhbHVlPSJzdHJpbmciPT10eXBlb2YgdC52YWx1ZT9KU09OLnBhcnNlKHQudmFsdWUpOnQudmFsdWUsdGhpcy5pc0Nvbm5lY3RvclN5bmNlZCh0KSYmdC52YWx1ZS5jb25maWd1cmF0aW9uSnNvbiYmdGhpcy5zZXRGb3JtVmFsdWUoey4uLnQudmFsdWUsbW9kZTp0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU/P3QudmFsdWUubW9kZX0pKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOlguQXR0cmlidXRlU2VydmljZX0se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp2YX0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVvLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbm5lY3RvciIsaW5wdXRzOntjdHg6ImN0eCIsZGV2aWNlOiJkZXZpY2UifSxwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6Im5hbWVJbnB1dCIsZmlyc3Q6ITAscHJlZGljYXRlOlsibmFtZUlucHV0Il0sZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InNvcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpnLGRlc2NlbmRhbnRzOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpMbyxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmtvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGbyxzZWxlY3RvcjoidGItb3BjLXVhLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnBvLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpBbyxzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpObyxzZWxlY3RvcjoidGItbXF0dC1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmdvLHNlbGVjdG9yOiJ0Yi1yZXBvcnQtc3RyYXRlZ3kiLGlucHV0czpbImlzRXhwYW5zaW9uTW9kZSIsImRlZmF1bHRWYWx1ZSJdfSx7a2luZDoicGlwZSIsdHlwZTpfLkFzeW5jUGlwZSxuYW1lOiJhc3luYyJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTp2YSxuYW1lOiJpc0xhdGVzdFZlcnNpb25Db25maWcifV19KX19ZSgiR2F0ZXdheUNvbm5lY3RvckNvbXBvbmVudCIsRW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX0se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTpKZS5NYXREaWFsb2d9LHt0eXBlOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3R5cGU6dC5OZ1pvbmV9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp2YX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkZXZpY2U6W3t0eXBlOmF9XSxuYW1lSW5wdXQ6W3t0eXBlOm8sYXJnczpbIm5hbWVJbnB1dCJdfV0sc29ydDpbe3R5cGU6byxhcmdzOltnLHtzdGF0aWM6ITF9XX1dfX0pO2NsYXNzIHFve2NvbnN0cnVjdG9yKGUpe3RoaXMuZGV2aWNlU2VydmljZT1lfWRvd25sb2FkKGUpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kZXZpY2VJZCYmdGhpcy5kZXZpY2VTZXJ2aWNlLmRvd25sb2FkR2F0ZXdheURvY2tlckNvbXBvc2VGaWxlKHRoaXMuZGV2aWNlSWQpLnN1YnNjcmliZSgoKCk9Pnt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxbyxkZXBzOlt7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpxbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1jb21tYW5kIixpbnB1dHM6e2RldmljZUlkOiJkZXZpY2VJZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJjb21wb25lbnQiLHR5cGU6d3QuVGJNYXJrZG93bkNvbXBvbmVudCxzZWxlY3RvcjoidGItbWFya2Rvd24iLGlucHV0czpbImRhdGEiLCJjb250ZXh0IiwiYWRkaXRpb25hbENvbXBpbGVNb2R1bGVzIiwibWFya2Rvd25DbGFzcyIsImNvbnRhaW5lckNsYXNzIiwic3R5bGUiLCJhcHBseURlZmF1bHRNYXJrZG93blN0eWxlIiwiYWRkaXRpb25hbFN0eWxlcyIsImxpbmVOdW1iZXJzIiwiZmFsbGJhY2tUb1BsYWluTWFya2Rvd24iLCJ1c2VQbGFpbk1hcmtkb3duIl0sb3V0cHV0czpbInJlYWR5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QW5jaG9yLHNlbGVjdG9yOiJhW21hdC1idXR0b25dLCBhW21hdC1yYWlzZWQtYnV0dG9uXSwgYVttYXQtZmxhdC1idXR0b25dLCBhW21hdC1zdHJva2VkLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJEZXZpY2VHYXRld2F5Q29tbWFuZENvbXBvbmVudCIscW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29tbWFuZCIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpYLkRldmljZVNlcnZpY2V9XSxwcm9wRGVjb3JhdG9yczp7ZGV2aWNlSWQ6W3t0eXBlOmF9XX19KTtjbGFzcyBEb3tjb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLmZiPWUsdGhpcy5kZXZpY2VTZXJ2aWNlPXQsdGhpcy5jZD1uLHRoaXMuZGlhbG9nPWEsdGhpcy5kaWFsb2dNb2RlPSExLHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZD1uZXcgaSx0aGlzLlN0b3JhZ2VUeXBlcz1BdCx0aGlzLnN0b3JhZ2VUeXBlcz1PYmplY3QudmFsdWVzKEF0KSx0aGlzLnN0b3JhZ2VUeXBlc1RyYW5zbGF0aW9uTWFwPVJ0LHRoaXMubG9nU2F2aW5nUGVyaW9kcz1PdCx0aGlzLmxvY2FsTG9nc0NvbmZpZ3M9T2JqZWN0LmtleXMoUHQpLHRoaXMubG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwPUd0LHRoaXMuc2VjdXJpdHlUeXBlcz1CdCx0aGlzLmdhdGV3YXlMb2dMZXZlbD1PYmplY3QudmFsdWVzKE10KSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmluaXRCYXNpY0Zvcm1Hcm91cCgpLHRoaXMub2JzZXJ2ZUZvcm1DaGFuZ2VzKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jaGVja0FuZEZldGNoQ3JlZGVudGlhbHMoZT8udGhpbmdzYm9hcmQ/LnNlY3VyaXR5Pz97fSksZT8uZ3JwYyYmdGhpcy50b2dnbGVScGNGaWVsZHMoZS5ncnBjLmVuYWJsZWQpOyhlPy50aGluZ3Nib2FyZD8uc3RhdGlzdGljcz8uY29tbWFuZHM/P1tdKS5mb3JFYWNoKChlPT50aGlzLmFkZENvbW1hbmQoZSwhMSkpKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fWF0TGVhc3RPbmVSZXF1aXJlZChlLHQ9bnVsbCl7cmV0dXJuIG49Pnt0fHwodD1PYmplY3Qua2V5cyhuLmNvbnRyb2xzKSk7cmV0dXJuIG4/LmNvbnRyb2xzJiZ0LnNvbWUoKHQ9PiFlKG4uY29udHJvbHNbdF0pKSk/bnVsbDp7YXRMZWFzdE9uZTohMH19fXRvZ2dsZVJwY0ZpZWxkcyhlKXtjb25zdCB0PXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjIik7ZT8odC5nZXQoInNlcnZlclBvcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lb3V0TXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluVGltZUJldHdlZW5QaW5nc01zIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNcyIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0LmdldCgic2VydmVyUG9ydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgia2VlcEFsaXZlVGltZW91dE1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoIm1pblRpbWVCZXR3ZWVuUGluZ3NNcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfWFkZExvY2FsTG9nQ29uZmlnKGUsdCl7Y29uc3Qgbj10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgibG9ncy5sb2NhbCIpLGE9dGhpcy5mYi5ncm91cCh7bG9nTGV2ZWw6W3QubG9nTGV2ZWx8fE10LklORk8sW3VlLnJlcXVpcmVkXV0sZmlsZVBhdGg6W3QuZmlsZVBhdGh8fCIuL2xvZ3MiLFt1ZS5yZXF1aXJlZF1dLGJhY2t1cENvdW50Olt0LmJhY2t1cENvdW50fHw3LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCldXSxzYXZpbmdUaW1lOlt0LnNhdmluZ1RpbWV8fDMsW3VlLnJlcXVpcmVkLHVlLm1pbigwKV1dLHNhdmluZ1BlcmlvZDpbdC5zYXZpbmdQZXJpb2R8fER0LmRheXMsW3VlLnJlcXVpcmVkXV19KTtuLmFkZENvbnRyb2woZSxhKX1nZXRMb2dGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KGBsb2dzLmxvY2FsLiR7ZX1gKX1jb21tYW5kRm9ybUFycmF5KCl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzIil9cmVtb3ZlQ29tbWFuZENvbnRyb2woZSx0KXsiIiE9PXQucG9pbnRlclR5cGUmJih0aGlzLmNvbW1hbmRGb3JtQXJyYXkoKS5yZW1vdmVBdChlKSx0aGlzLmJhc2ljRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfXJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5Iik7ZS5jbGVhclZhbGlkYXRvcnMoKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1yZW1vdmVBbGxTdG9yYWdlVmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInN0b3JhZ2UiKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKXt0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGV2aWNlKHRoaXMuZGV2aWNlLmlkKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmRpYWxvZy5vcGVuKFBhLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7Z2F0ZXdheU5hbWU6ZS5uYW1lfX0pLmFmdGVyQ2xvc2VkKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS5zZXRWYWx1ZSghMCx7ZW1pdEV2ZW50OiExfSl9KSl9KSl9YWRkQ29tbWFuZChlLHQ9ITApe2NvbnN0e2F0dHJpYnV0ZU9uR2F0ZXdheTpuPW51bGwsY29tbWFuZDphPW51bGwsdGltZW91dDpvPW51bGx9PWV8fHt9LGk9dGhpcy5mYi5ncm91cCh7YXR0cmlidXRlT25HYXRld2F5OltuLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dLGNvbW1hbmQ6W2EsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14oPz1cUykuKlxTJC8pXV0sdGltZW91dDpbbyxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKSx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dfSk7dGhpcy5jb21tYW5kRm9ybUFycmF5KCkucHVzaChpLHtlbWl0RXZlbnQ6dH0pfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3RoaXMuYmFzaWNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dGhpbmdzYm9hcmQ6dGhpcy5pbml0VGhpbmdzYm9hcmRGb3JtR3JvdXAoKSxzdG9yYWdlOnRoaXMuaW5pdFN0b3JhZ2VGb3JtR3JvdXAoKSxncnBjOnRoaXMuaW5pdEdycGNGb3JtR3JvdXAoKSxjb25uZWN0b3JzOnRoaXMuZmIuYXJyYXkoW10pLGxvZ3M6dGhpcy5pbml0TG9nc0Zvcm1Hcm91cCgpfSl9aW5pdFRoaW5nc2JvYXJkRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2hvc3Q6W3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteXHNdKyQvKV1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZVNoZWxsOlshMV0scmVtb3RlQ29uZmlndXJhdGlvbjpbITBdLGNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHM6WzYwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sc3RhdGlzdGljczp0aGlzLmZiLmdyb3VwKHtlbmFibGU6WyEwXSxzdGF0c1NlbmRQZXJpb2RJblNlY29uZHM6WzM2MDAsW3VlLnJlcXVpcmVkLHVlLm1pbig2MCksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sY29tbWFuZHM6dGhpcy5mYi5hcnJheShbXSl9KSxtYXhQYXlsb2FkU2l6ZUJ5dGVzOls4MTk2LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTAwKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtaW5QYWNrU2VuZERlbGF5TVM6WzUwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblBhY2tTaXplVG9TZW5kOls1MDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxMDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGhhbmRsZURldmljZVJlbmFtaW5nOlshMF0sY2hlY2tpbmdEZXZpY2VBY3Rpdml0eTp0aGlzLmluaXRDaGVja2luZ0RldmljZUFjdGl2aXR5Rm9ybUdyb3VwKCksc2VjdXJpdHk6dGhpcy5pbml0U2VjdXJpdHlGb3JtR3JvdXAoKSxxb3M6WzEsW3VlLnJlcXVpcmVkLHVlLm1pbigwKSx1ZS5tYXgoMSksdWUucGF0dGVybigvXlteLlxzXSskLyldXX0pfWluaXRTdG9yYWdlRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe3R5cGU6W0F0Lk1FTU9SWSxbdWUucmVxdWlyZWRdXSxyZWFkX3JlY29yZHNfY291bnQ6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heF9yZWNvcmRzX2NvdW50OlsxZTUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhX2ZvbGRlcl9wYXRoOlsiLi9kYXRhLyIsW3VlLnJlcXVpcmVkXV0sbWF4X2ZpbGVfY291bnQ6WzEwLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWF4X3JlYWRfcmVjb3Jkc19jb3VudDpbMTAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhfcmVjb3Jkc19wZXJfZmlsZTpbMWU0LFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sZGF0YV9maWxlX3BhdGg6WyIuL2RhdGEvZGF0YS5kYiIsW3VlLnJlcXVpcmVkXV0sbWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzOlsxLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWVzc2FnZXNfdHRsX2luX2RheXM6WzcsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRHcnBjRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxzZXJ2ZXJQb3J0Ols5NTk1LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUubWF4KDY1NTM1KSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxrZWVwQWxpdmVUaW1lTXM6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGtlZXBBbGl2ZVRpbWVvdXRNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sa2VlcGFsaXZlUGVybWl0V2l0aG91dENhbGxzOlshMF0sbWF4UGluZ3NXaXRob3V0RGF0YTpbMCxbdWUucmVxdWlyZWQsdWUubWluKDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblRpbWVCZXR3ZWVuUGluZ3NNczpbMWU0LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV19KX1pbml0TG9nc0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHtkYXRlRm9ybWF0OlsiJVktJW0tJWQgJUg6JU06JVMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sbG9nRm9ybWF0OlsiJShhc2N0aW1lKXMgLSB8JShsZXZlbG5hbWUpc3wgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGZ1bmNOYW1lKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sdHlwZTpbInJlbW90ZSIsW3VlLnJlcXVpcmVkXV0scmVtb3RlOnRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxsb2dMZXZlbDpbTXQuSU5GTyxbdWUucmVxdWlyZWRdXX0pLGxvY2FsOnRoaXMuZmIuZ3JvdXAoe30pfSl9aW5pdENoZWNraW5nRGV2aWNlQWN0aXZpdHlGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7Y2hlY2tEZXZpY2VJbmFjdGl2aXR5OlshMV0saW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzOlsyMDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzOls1MDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRTZWN1cml0eUZvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHt0eXBlOltWdC5BQ0NFU1NfVE9LRU4sW3VlLnJlcXVpcmVkXV0sYWNjZXNzVG9rZW46W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2xpZW50SWQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sdXNlcm5hbWU6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0scGFzc3dvcmQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2FDZXJ0OltudWxsXSxjZXJ0OltudWxsXSxwcml2YXRlS2V5OltudWxsXX0pfW9ic2VydmVGb3JtQ2hhbmdlcygpe3RoaXMub2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCksdGhpcy5vYnNlcnZlUmVtb3RlQ29uZmlndXJhdGlvbkNoYW5nZXMoKSx0aGlzLm9ic2VydmVEZXZpY2VBY3Rpdml0eUNoYW5nZXMoKSx0aGlzLm9ic2VydmVTZWN1cml0eVR5cGVDaGFuZ2VzKCksdGhpcy5vYnNlcnZlU3RvcmFnZVR5cGVDaGFuZ2VzKCl9b2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWUiKTt0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dCYmIiIhPT10P2Uuc2V0VmFsaWRhdG9ycyhbdWUucmVxdWlyZWRdKTplLmNsZWFyVmFsaWRhdG9ycygpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9b2JzZXJ2ZVJlbW90ZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKX0pKSx0aGlzLmxvZ1NlbGVjdG9yPXRoaXMuZmIuY29udHJvbChQdC5zZXJ2aWNlKTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhQdCkpdGhpcy5hZGRMb2NhbExvZ0NvbmZpZyhlLHt9KX1vYnNlcnZlRGV2aWNlQWN0aXZpdHlDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSIpO2UuZ2V0KCJjaGVja0RldmljZUluYWN0aXZpdHkiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7Y29uc3Qgbj1bdWUubWluKDEpLHVlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV07dD8oZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLnNldFZhbGlkYXRvcnMobiksZS5nZXQoImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiKS5zZXRWYWxpZGF0b3JzKG4pKTooZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLmNsZWFyVmFsaWRhdG9ycygpLGUuZ2V0KCJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIikuY2xlYXJWYWxpZGF0b3JzKCkpLGUuZ2V0KCJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSxlLmdldCgiaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kcyIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjLmVuYWJsZWQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy50b2dnbGVScGNGaWVsZHMoZSl9KSl9b2JzZXJ2ZVNlY3VyaXR5VHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eSIpO2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e3N3aXRjaCh0aGlzLnJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpLHQpe2Nhc2UgVnQuQUNDRVNTX1RPS0VOOnRoaXMuYWRkQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVExTX1BSSVZBVEVfS0VZOnRoaXMuYWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSk7YnJlYWs7Y2FzZSBWdC5UTFNfQUNDRVNTX1RPS0VOOnRoaXMuYWRkVGxzQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVVNFUk5BTUVfUEFTU1dPUkQ6ZS5hZGRWYWxpZGF0b3JzKFt0aGlzLmF0TGVhc3RPbmVSZXF1aXJlZCh1ZS5yZXF1aXJlZCxbImNsaWVudElkIiwidXNlcm5hbWUiXSldKX1lLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKSxbImNhQ2VydCIsInByaXZhdGVLZXkiLCJjZXJ0Il0uZm9yRWFjaCgodD0+e2UuZ2V0KHQpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT50aGlzLmNkLmRldGVjdENoYW5nZXMoKSkpfSkpfW9ic2VydmVTdG9yYWdlVHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzdG9yYWdlIik7ZS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57c3dpdGNoKHRoaXMucmVtb3ZlQWxsU3RvcmFnZVZhbGlkYXRvcnMoKSx0KXtjYXNlIEF0Lk1FTU9SWTp0aGlzLmFkZE1lbW9yeVN0b3JhZ2VWYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgQXQuRklMRTp0aGlzLmFkZEZpbGVTdG9yYWdlVmFsaWRhdG9ycyhlKTticmVhaztjYXNlIEF0LlNRTElURTp0aGlzLmFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpfX0pKX1hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7ZS5nZXQoImFjY2Vzc1Rva2VuIikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteLlxzXSskLyldKSxlLmdldCgiYWNjZXNzVG9rZW4iKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9YWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSl7WyJjYUNlcnQiLCJwcml2YXRlS2V5IiwiY2VydCJdLmZvckVhY2goKHQ9PntlLmdldCh0KS5hZGRWYWxpZGF0b3JzKFt1ZS5yZXF1aXJlZF0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKX1hZGRUbHNBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7dGhpcy5hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSksZS5nZXQoImNhQ2VydCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkXSksZS5nZXQoImNhQ2VydCIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1hZGRNZW1vcnlTdG9yYWdlVmFsaWRhdG9ycyhlKXtlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KCJtYXhfcmVjb3Jkc19jb3VudCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldKSxlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoIm1heF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9YWRkRmlsZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWF4X2ZpbGVfY291bnQiLCJtYXhfcmVhZF9yZWNvcmRzX2NvdW50IiwibWF4X3JlY29yZHNfcGVyX2ZpbGUiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIiwibWVzc2FnZXNfdHRsX2luX2RheXMiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWNoZWNrQW5kRmV0Y2hDcmVkZW50aWFscyhlKXtlLnR5cGUhPT1WdC5UTFNfUFJJVkFURV9LRVkmJnRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyh0aGlzLmRldmljZS5pZCkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5pbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkLmVtaXQodCksdGhpcy51cGRhdGVTZWN1cml0eVR5cGUoZSx0KSx0aGlzLnVwZGF0ZUNyZWRlbnRpYWxzKHQsZSl9KSl9dXBkYXRlU2VjdXJpdHlUeXBlKGUsdCl7Y29uc3Qgbj10LmNyZWRlbnRpYWxzVHlwZT09PVUuQUNDRVNTX1RPS0VOfHxlLnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOP2UudHlwZT09PVZ0LlRMU19BQ0NFU1NfVE9LRU4/VnQuVExTX0FDQ0VTU19UT0tFTjpWdC5BQ0NFU1NfVE9LRU46dC5jcmVkZW50aWFsc1R5cGU9PT1VLk1RVFRfQkFTSUM/VnQuVVNFUk5BTUVfUEFTU1dPUkQ6bnVsbDtuJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZSIpLnNldFZhbHVlKG4se2VtaXRFdmVudDohMX0pfXVwZGF0ZUNyZWRlbnRpYWxzKGUsdCl7c3dpdGNoKGUuY3JlZGVudGlhbHNUeXBlKXtjYXNlIFUuQUNDRVNTX1RPS0VOOnRoaXMudXBkYXRlQWNjZXNzVG9rZW5DcmVkZW50aWFscyhlLHQpO2JyZWFrO2Nhc2UgVS5NUVRUX0JBU0lDOnRoaXMudXBkYXRlTXF0dEJhc2ljQ3JlZGVudGlhbHMoZSk7Y2FzZSBVLlg1MDlfQ0VSVElGSUNBVEU6fX11cGRhdGVBY2Nlc3NUb2tlbkNyZWRlbnRpYWxzKGUsdCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuIikuc2V0VmFsdWUoZS5jcmVkZW50aWFsc0lkLHtlbWl0RXZlbnQ6ITF9KSx0LnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkuY2FDZXJ0Iikuc2V0VmFsdWUodC5jYUNlcnQse2VtaXRFdmVudDohMX0pfXVwZGF0ZU1xdHRCYXNpY0NyZWRlbnRpYWxzKGUpe2NvbnN0IHQ9SlNPTi5wYXJzZShlLmNyZWRlbnRpYWxzVmFsdWUpO3RoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZCIpLnNldFZhbHVlKHQuY2xpZW50SWQse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZSIpLnNldFZhbHVlKHQudXNlck5hbWUse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZCIpLnNldFZhbHVlKHQucGFzc3dvcmQse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6RG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWJhc2ljLWNvbmZpZ3VyYXRpb24iLGlucHV0czp7ZGV2aWNlOiJkZXZpY2UiLGRpYWxvZ01vZGU6ImRpYWxvZ01vZGUifSxvdXRwdXRzOntpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkOiJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+RG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgY2xhc3M9InRhYi1ncm91cC1ibG9jayIgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIiBbY2xhc3MuZGlhbG9nLW1vZGVdPSJkaWFsb2dNb2RlIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1jb25maWd1cmF0aW9uXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZVNoZWxsIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtaG9zdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaG9zdFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmhvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnNlY3VyaXR5LnNlY3VyaXR5PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzZWN1cml0eSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij57eyBzZWN1cml0eVR5cGUudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ2FjY2Vzc3Rva2VuXCcpIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuYWNjZXNzLXRva2VuPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImFjY2Vzc1Rva2VuIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkuYWNjZXNzLXRva2VuLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdkZXZpY2UuY29weS1hY2Nlc3MtdG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuY2xpZW50SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNsaWVudElkIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5jbGllbnRJZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgW2NvcHlUZXh0XT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuY2xpZW50SWRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS51c2VybmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LnVzZXJuYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZVwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXVzZXJuYW1lXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgc3R5bGU9IndpZHRoOiAxMDAlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiLz5cbiAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucGFzc3dvcmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8dGItZXJyb3Igc3R5bGU9Im1hcmdpbi10b3A6IC0xMnB4OyBkaXNwbGF5OiBibG9jazsiIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS50eXBlXCcpLnZhbHVlID09PSBcJ3VzZXJuYW1lUGFzc3dvcmRcJyJcbiAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eVwnKS5oYXNFcnJvcihcJ2F0TGVhc3RPbmVcJykgP1xuICAgICAgICAgIChcJ2RldmljZS5jbGllbnQtaWQtb3ItdXNlci1uYW1lLW5lY2Vzc2FyeVwnIHwgdHJhbnNsYXRlKSA6IFwnXCciPjwvdGItZXJyb3I+XG4gICAgICAgICAgICA8dGItZmlsZS1pbnB1dFxuICAgICAgICAgICAgICBmeEZsZXg9IjEwMCJcbiAgICAgICAgICAgICAgaGludD0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ3Rsc1wnKSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnQiXG4gICAgICAgICAgICAgIGxhYmVsPSJ7eyBcJ3NlY3VyaXR5LmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgW2FsbG93ZWRFeHRlbnNpb25zXT0iXCdwZW0sIGNlcnQsIGtleVwnIlxuICAgICAgICAgICAgICBbYWNjZXB0XT0iXCcucGVtLCBhcHBsaWNhdGlvbi9wZW0sLmNlcnQsIGFwcGxpY2F0aW9uL2NlcnQsIC5rZXksYXBwbGljYXRpb24va2V5XCciXG4gICAgICAgICAgICAgIGRyb3BMYWJlbD0ie3sgXCdnYXRld2F5LmRyb3AtZmlsZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIDwvdGItZmlsZS1pbnB1dD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubG9ncy5sb2dzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJsb2dzIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5kYXRlLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRlRm9ybWF0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MuZGF0ZUZvcm1hdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5kYXRlLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGUtZm9ybVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubG9nLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJsb2dGb3JtYXQiIHJvd3M9IjIiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9nRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmxvZy1mb3JtYXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5sb2ctZm9ybWF0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJyZW1vdGUiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MucmVtb3RlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1sb2dcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MucmVtb3RlLWxvZ3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ibG9jYWwiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MubG9jYWw8L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBbZm9ybUNvbnRyb2xdPSJsb2dTZWxlY3RvciI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBsb2dDb25maWcgb2YgbG9jYWxMb2dzQ29uZmlncyIgW3ZhbHVlXT0ibG9nQ29uZmlnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZpcnN0LWNhcGl0YWwiPnt7IGxvY2FsTG9nc0NvbmZpZ1RyYW5zbGF0ZU1hcC5nZXQobG9nQ29uZmlnKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0iZ2V0TG9nRm9ybUdyb3VwKGxvZ1NlbGVjdG9yLnZhbHVlKSI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MuZmlsZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZmlsZVBhdGgiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5maWxlUGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmZpbGUtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgc2F2aW5nLXBlcmlvZCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdUaW1lIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3Muc2F2aW5nLXBlcmlvZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLnNhdmluZ1RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBoaWRlUmVxdWlyZWRNYXJrZXIgc3R5bGU9Im1pbi13aWR0aDogMTEwcHg7IHdpZHRoOiAzMCUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdQZXJpb2QiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBwZXJpb2Qgb2YgbG9nU2F2aW5nUGVyaW9kcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJwZXJpb2Qua2V5Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwZXJpb2QudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5iYWNrdXAtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJiYWNrdXBDb3VudCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuYmFja3VwQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYmFja3VwLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0b3JhZ2VcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InN0b3JhZ2UiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPmdhdGV3YXkuaGludHMuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMiIFt2YWx1ZV09InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAuZ2V0KHN0b3JhZ2VUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPnt7IFwnZ2F0ZXdheS5oaW50cy5cJyArIGJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UudHlwZVwnKS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxzZWN0aW9uICpuZ1N3aXRjaENhc2U9IlN0b3JhZ2VUeXBlcy5NRU1PUlkiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlYWRfcmVjb3Jkc19jb3VudCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5yZWFkLXJlY29yZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLkZJTEUiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFfZm9sZGVyX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9mb2xkZXJfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtaW5maXggcG9pbnRlci1ldmVudCBzdWZmaXgtaWNvbiIgYXJpYS1oaWRkZW49ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9ImhlbHAtaWNvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0YS1mb2xkZXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9maWxlX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtZmlsZS1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhfcmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVhZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX3Blcl9maWxlIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVjb3Jkc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLlNRTElURSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9maWxlX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9maWxlX3BhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3VycyIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLWNoZWNrLWhvdXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9pbl9kYXlzIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnR0bC1tZXNzYWdlcy1kYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdycGNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImdycGMiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwY1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucGVybWl0LXdpdGhvdXQtY2FsbHNcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucGVybWl0LXdpdGhvdXQtY2FsbHNcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1wb3J0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ic2VydmVyUG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2VydmVyLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVvdXRNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJrZWVwQWxpdmVUaW1lTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMta2VlcC1hbGl2ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5nczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblRpbWVCZXR3ZWVuUGluZ3NNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGluZ3NXaXRob3V0RGF0YSIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY29sb3I9InByaW1hcnkiIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzdGF0c1NlbmRQZXJpb2RJblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSI2MCIvPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5oaW50cy5jb21tYW5kczwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZvcm1BcnJheU5hbWU9ImNvbW1hbmRzIiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiXG4gICAgICAgICAgICAgICAgICpuZ0Zvcj0ibGV0IGNvbW1hbmRDb250cm9sIG9mIGNvbW1hbmRGb3JtQXJyYXkoKS5jb250cm9sczsgbGV0ICRpbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gW2Zvcm1Hcm91cE5hbWVdPSIkaW5kZXgiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgbm8tcGFkZGluZy1ib3R0b20gbm8tZ2FwIGNvbW1hbmQtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuYXR0cmlidXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlT25HYXRld2F5Ii8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2F0dHJpYnV0ZU9uR2F0ZXdheVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmF0dHJpYnV0ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjb21tYW5kIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnY29tbWFuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jb21tYW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb21tYW5kQ29udHJvbCgkaW5kZXgsICRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3MucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiBmaXQtY29udGVudDsiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZENvbW1hbmQoKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkub3RoZXJcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiIGZvcm1Hcm91cE5hbWU9ImNoZWNraW5nRGV2aWNlQWN0aXZpdHkiXG4gICAgICAgICAgICAgW2NsYXNzLm5vLXBhZGRpbmctYm90dG9tXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jaGVjay1kZXZpY2UtYWN0aXZpdHlcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0RldmljZUluYWN0aXZpdHkiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5XCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuY2hlY2tEZXZpY2VJbmFjdGl2aXR5XCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmluYWN0aXZpdHktdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QYWNrU2VuZERlbGF5TVMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2VuZERlbGF5TVNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5taW5pbWFsLXBhY2stZGVsYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubXF0dC1xb3M8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icW9zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSIxIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnFvc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5xb3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heFBheWxvYWRTaXplQnl0ZXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXBheWxvYWQtc2l6ZS1ieXRlc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTaXplVG9TZW5kIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbi1wYWNrLXNpemUtdG8tc2VuZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1yb3dzOm1pbi1jb250ZW50IG1pbm1heChhdXRvLDFmcikgbWluLWNvbnRlbnR9Omhvc3QgLmNvbmZpZ3VyYXRpb24tYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTZweDttYXgtaGVpZ2h0Ojcwdmh9Omhvc3QgLmRpYWxvZy1tb2RlIC5jb25maWd1cmF0aW9uLWJsb2Nre21heC1oZWlnaHQ6NjB2aH06aG9zdCAubWF0LXRvb2xiYXJ7Z3JpZC1yb3c6MTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLnRhYi1ncm91cC1ibG9ja3ttaW4td2lkdGg6MDtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OjA7Z3JpZC1yb3c6Mn06aG9zdCAudG9nZ2xlLWdyb3Vwe21hcmdpbi1yaWdodDphdXRvfTpob3N0IC5maXJzdC1jYXBpdGFse3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgdGV4dGFyZWF7cmVzaXplOm5vbmV9Omhvc3QgLnNhdmluZy1wZXJpb2R7ZmxleDoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY29tbWFuZC1jb250YWluZXJ7d2lkdGg6MTAwJX06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3J7ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3I6Zmlyc3QtY2hpbGR7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QgOjpuZy1kZWVwIC5wb2ludGVyLWV2ZW50e3BvaW50ZXItZXZlbnRzOmFsbH06aG9zdCA6Om5nLWRlZXAgLnRvZ2dsZS1ncm91cCBzcGFue3BhZGRpbmc6MCAyNXB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2NvbG9yOiNlMGUwZTB9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXg6aG92ZXJ7Y29sb3I6IzllOWU5ZX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q3QuVGJFcnJvckNvbXBvbmVudCxzZWxlY3RvcjoidGItZXJyb3IiLGlucHV0czpbIm5vTWFyZ2luIiwiZXJyb3IiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpXLk1hdFRhYkNvbnRlbnQsc2VsZWN0b3I6IlttYXRUYWJDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpUdC5GaWxlSW5wdXRDb21wb25lbnQsc2VsZWN0b3I6InRiLWZpbGUtaW5wdXQiLGlucHV0czpbImxhYmVsIiwiaGludCIsImFjY2VwdCIsIm5vRmlsZVRleHQiLCJpbnB1dElkIiwiYWxsb3dlZEV4dGVuc2lvbnMiLCJkcm9wTGFiZWwiLCJtYXhTaXplQnl0ZSIsImNvbnRlbnRDb252ZXJ0RnVuY3Rpb24iLCJyZXF1aXJlZCIsInJlcXVpcmVkQXNFcnJvciIsImRpc2FibGVkIiwiZXhpc3RpbmdGaWxlTmFtZSIsInJlYWRBc0JpbmFyeSIsIndvcmtGcm9tRmlsZU9iaiIsIm11bHRpcGxlRmlsZSJdLG91dHB1dHM6WyJmaWxlTmFtZUNoYW5nZWQiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6U3QuQ29weUJ1dHRvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItY29weS1idXR0b24iLGlucHV0czpbImNvcHlUZXh0IiwiZGlzYWJsZWQiLCJtZGlJY29uIiwiaWNvbiIsInRvb2x0aXBUZXh0IiwidG9vbHRpcFBvc2l0aW9uIiwic3R5bGUiLCJjb2xvciIsIm1pbmlCdXR0b24iXSxvdXRwdXRzOlsic3VjY2Vzc0NvcGllZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19XX0pfX1lKCJHYXRld2F5QmFzaWNDb25maWd1cmF0aW9uQ29tcG9uZW50IixEbyksSGUoW04oKV0sRG8ucHJvdG90eXBlLCJkaWFsb2dNb2RlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5EbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBjbGFzcz0idGFiLWdyb3VwLWJsb2NrIiBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiIFtjbGFzcy5kaWFsb2ctbW9kZV09ImRpYWxvZ01vZGUiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5yZW1vdGUtY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUNvbmZpZ3VyYXRpb24iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlU2hlbGwiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Imhvc3QiLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+c2VjdXJpdHkuc2VjdXJpdHk8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHNlY3VyaXR5VHlwZSBvZiBzZWN1cml0eVR5cGVzIHwga2V5dmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09InNlY3VyaXR5VHlwZS5rZXkiPnt7IHNlY3VyaXR5VHlwZS52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwnYWNjZXNzdG9rZW5cJykiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5hY2Nlc3MtdG9rZW48L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYWNjZXNzVG9rZW4iLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuYWNjZXNzVG9rZW5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5hY2Nlc3MtdG9rZW4tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2RldmljZS5jb3B5LWFjY2Vzcy10b2tlblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50b2tlblwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPHNlY3Rpb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5jbGllbnRJZDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LmNsaWVudElkLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBpY29uPSJjb250ZW50X2NvcHkiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPnNlY3VyaXR5LnVzZXJuYW1lPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkudXNlcm5hbWUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdnYXRld2F5LmNvcHktdXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy51c2VybmFtZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBzdHlsZT0id2lkdGg6IDEwMCUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIvPlxuICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnBhc3N3b3JkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXBhc3N3b3JkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDx0Yi1lcnJvciBzdHlsZT0ibWFyZ2luLXRvcDogLTEycHg7IGRpc3BsYXk6IGJsb2NrOyIgZnhGbGV4PSIxMDAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIlxuICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5XCcpLmhhc0Vycm9yKFwnYXRMZWFzdE9uZVwnKSA/XG4gICAgICAgICAgKFwnZGV2aWNlLmNsaWVudC1pZC1vci11c2VyLW5hbWUtbmVjZXNzYXJ5XCcgfCB0cmFuc2xhdGUpIDogXCdcJyI+PC90Yi1lcnJvcj5cbiAgICAgICAgICAgIDx0Yi1maWxlLWlucHV0XG4gICAgICAgICAgICAgIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICBoaW50PSJ7eyBcJ2dhdGV3YXkuaGludHMuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwndGxzXCcpIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImNhQ2VydCJcbiAgICAgICAgICAgICAgbGFiZWw9Int7IFwnc2VjdXJpdHkuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBbYWxsb3dlZEV4dGVuc2lvbnNdPSJcJ3BlbSwgY2VydCwga2V5XCciXG4gICAgICAgICAgICAgIFthY2NlcHRdPSJcJy5wZW0sIGFwcGxpY2F0aW9uL3BlbSwuY2VydCwgYXBwbGljYXRpb24vY2VydCwgLmtleSxhcHBsaWNhdGlvbi9rZXlcJyJcbiAgICAgICAgICAgICAgZHJvcExhYmVsPSJ7eyBcJ2dhdGV3YXkuZHJvcC1maWxlXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgPC90Yi1maWxlLWlucHV0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5sb2dzLmxvZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImxvZ3MiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGVGb3JtYXQiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5kYXRlRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0ZS1mb3JtXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sb2ctZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImxvZ0Zvcm1hdCIgcm93cz0iMiI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2dGb3JtYXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MubG9nLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmxvZy1mb3JtYXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iIGZvcm1Hcm91cE5hbWU9InJlbW90ZSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5yZW1vdGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWxvZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5yZW1vdGUtbG9nc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJsb2dMZXZlbCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJsb2NhbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5sb2NhbDwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIFtmb3JtQ29udHJvbF09ImxvZ1NlbGVjdG9yIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0NvbmZpZyBvZiBsb2NhbExvZ3NDb25maWdzIiBbdmFsdWVdPSJsb2dDb25maWciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmlyc3QtY2FwaXRhbCI+e3sgbG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwLmdldChsb2dDb25maWcpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJnZXRMb2dGb3JtR3JvdXAobG9nU2VsZWN0b3IudmFsdWUpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5maWxlLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaWxlUGF0aCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmZpbGVQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MuZmlsZS1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBzYXZpbmctcGVyaW9kIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1RpbWUiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5zYXZpbmdUaW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2QtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGhpZGVSZXF1aXJlZE1hcmtlciBzdHlsZT0ibWluLXdpZHRoOiAxMTBweDsgd2lkdGg6IDMwJSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1BlcmlvZCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBlcmlvZCBvZiBsb2dTYXZpbmdQZXJpb2RzIHwga2V5dmFsdWUiIFt2YWx1ZV09InBlcmlvZC5rZXkiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBlcmlvZC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImJhY2t1cENvdW50IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmJhY2t1cENvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5iYWNrdXAtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0ic3RvcmFnZSIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+Z2F0ZXdheS5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+Z2F0ZXdheS5oaW50cy5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgY2xhc3M9InRvZ2dsZS1ncm91cCIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZXNUcmFuc2xhdGlvbk1hcC5nZXQoc3RvcmFnZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+e3sgXCdnYXRld2F5LmhpbnRzLlwnICsgYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnR5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLk1FTU9SWSIgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnJlYWQtcmVjb3JkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3JkczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXJlY29yZHMtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuRklMRSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9mb2xkZXJfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXQtZm9ybS1maWVsZC1pbmZpeCBwb2ludGVyLWV2ZW50IHN1ZmZpeC1pY29uIiBhcmlhLWhpZGRlbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iaGVscC1pY29uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X2ZpbGVfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfZmlsZV9jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1maWxlLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWFkX3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWFkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfcGVyX2ZpbGUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19wZXJfZmlsZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuU1FMSVRFIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRhX2ZpbGVfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZpbGVfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGEtZm9sZGVyXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50dGwtY2hlY2staG91clwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5czwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2luX2RheXMiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2luX2RheXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLW1lc3NhZ2VzLWRheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ3JwY1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0iZ3JwYyIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5wZXJtaXQtd2l0aG91dC1jYWxsc1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5wZXJtaXQtd2l0aG91dC1jYWxsc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJQb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5zZXJ2ZXItcG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLnNlcnZlclBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1heFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ia2VlcEFsaXZlVGltZW91dE1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLWtlZXAtYWxpdmUtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVvdXRNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluVGltZUJldHdlZW5QaW5nc01zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblRpbWVCZXR3ZWVuUGluZ3NNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtYXhQaW5nc1dpdGhvdXREYXRhIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGFcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1heFBpbmdzV2l0aG91dERhdGFcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWNzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj0icHJpbWFyeSIgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InN0YXRzU2VuZFBlcmlvZEluU2Vjb25kcyIgdHlwZT0ibnVtYmVyIiBtaW49IjYwIi8+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnN0YXRpc3RpY3Muc3RhdHNTZW5kUGVyaW9kSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZHM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiIHRyYW5zbGF0ZT5nYXRld2F5LmhpbnRzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZm9ybUFycmF5TmFtZT0iY29tbWFuZHMiIGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29tbWFuZENvbnRyb2wgb2YgY29tbWFuZEZvcm1BcnJheSgpLmNvbnRyb2xzOyBsZXQgJGluZGV4ID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8c2VjdGlvbiBbZm9ybUdyb3VwTmFtZV09IiRpbmRleCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBuby1wYWRkaW5nLWJvdHRvbSBuby1nYXAgY29tbWFuZC1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJhdHRyaWJ1dGVPbkdhdGV3YXkiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnYXR0cmlidXRlT25HYXRld2F5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXR0cmlidXRlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MudGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCd0aW1lb3V0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2NvbW1hbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9InJlbW92ZUNvbW1hbmRDb250cm9sKCRpbmRleCwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItYm94LWJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IGZpdC1jb250ZW50OyJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkQ29tbWFuZCgpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuYWRkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5vdGhlclwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCIgZm9ybUdyb3VwTmFtZT0iY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSJcbiAgICAgICAgICAgICBbY2xhc3Mubm8tcGFkZGluZy1ib3R0b21dPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmNoZWNrRGV2aWNlSW5hY3Rpdml0eVwnKS52YWx1ZSI+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNoZWNrLWRldmljZS1hY3Rpdml0eVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImNoZWNrRGV2aWNlSW5hY3Rpdml0eSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jaGVja2luZy1kZXZpY2UtYWN0aXZpdHlcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlUaW1lb3V0U2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBmb3JtQ29udHJvbE5hbWU9ImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5pbmFjdGl2aXR5LXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmFkdmFuY2VkPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTZW5kRGVsYXlNUyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbmltYWwtcGFjay1kZWxheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tcXR0LXFvczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJxb3MiIHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjEiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtYXhcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnFvc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGF5bG9hZFNpemVCeXRlcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1heFBheWxvYWRTaXplQnl0ZXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluUGFja1NpemVUb1NlbmQiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2l6ZVRvU2VuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWluLXBhY2stc2l6ZS10by1zZW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLXJvd3M6bWluLWNvbnRlbnQgbWlubWF4KGF1dG8sMWZyKSBtaW4tY29udGVudH06aG9zdCAuY29uZmlndXJhdGlvbi1ibG9ja3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxNnB4O21heC1oZWlnaHQ6NzB2aH06aG9zdCAuZGlhbG9nLW1vZGUgLmNvbmZpZ3VyYXRpb24tYmxvY2t7bWF4LWhlaWdodDo2MHZofTpob3N0IC5tYXQtdG9vbGJhcntncmlkLXJvdzoxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzAwMDAwMGRlIWltcG9ydGFudH06aG9zdCAudGFiLWdyb3VwLWJsb2Nre21pbi13aWR0aDowO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6MDtncmlkLXJvdzoyfTpob3N0IC50b2dnbGUtZ3JvdXB7bWFyZ2luLXJpZ2h0OmF1dG99Omhvc3QgLmZpcnN0LWNhcGl0YWx7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZX06aG9zdCB0ZXh0YXJlYXtyZXNpemU6bm9uZX06aG9zdCAuc2F2aW5nLXBlcmlvZHtmbGV4OjF9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVye3dpZHRoOjEwMCV9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIC5jb21tYW5kLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcjpmaXJzdC1jaGlsZHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH06aG9zdCA6Om5nLWRlZXAgLnBvaW50ZXItZXZlbnR7cG9pbnRlci1ldmVudHM6YWxsfTpob3N0IDo6bmctZGVlcCAudG9nZ2xlLWdyb3VwIHNwYW57cGFkZGluZzowIDI1cHh9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7Y29sb3I6I2UwZTBlMH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeDpob3Zlcntjb2xvcjojOWU5ZTllfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkRldmljZVNlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOkplLk1hdERpYWxvZ31dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dNb2RlOlt7dHlwZTphfV0saW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZDpbe3R5cGU6bH1dfX0pO2NsYXNzIFBve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCIiKSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5hZHZhbmNlZEZvcm1Db250cm9sLnJlc2V0KGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMuYWR2YW5jZWRGb3JtQ29udHJvbC52YWxpZD9udWxsOnthZHZhbmNlZEZvcm1Db250cm9sOnt2YWxpZDohMX19fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpQbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+UG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48dGItanNvbi1vYmplY3QtZWRpdFxuICBmaWxsSGVpZ2h0PSJ0cnVlIlxuICBjbGFzcz0idGItZmxleCBjb25maWctY29udGFpbmVyIlxuICBmeExheW91dD0iY29sdW1uIlxuICBqc29uUmVxdWlyZWRcbiAgbGFiZWw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX0iXG4gIFtmb3JtQ29udHJvbF09ImFkdmFuY2VkRm9ybUNvbnRyb2wiXG4vPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5jb25maWctY29udGFpbmVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KTtwYWRkaW5nOjhweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUFkdmFuY2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudCIsUG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5QbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjx0Yi1qc29uLW9iamVjdC1lZGl0XG4gIGZpbGxIZWlnaHQ9InRydWUiXG4gIGNsYXNzPSJ0Yi1mbGV4IGNvbmZpZy1jb250YWluZXIiXG4gIGZ4TGF5b3V0PSJjb2x1bW4iXG4gIGpzb25SZXF1aXJlZFxuICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgW2Zvcm1Db250cm9sXT0iYWR2YW5jZWRGb3JtQ29udHJvbCJcbi8+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmNvbmZpZy1jb250YWluZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpO3BhZGRpbmc6OHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIEdve2NvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLmRldmljZVNlcnZpY2U9bix0aGlzLmNkPWEsdGhpcy5Db25maWd1cmF0aW9uTW9kZXM9b24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5nYXRld2F5Q29uZmlnQXR0cmlidXRlS2V5cz1bImdlbmVyYWxfY29uZmlndXJhdGlvbiIsImdycGNfY29uZmlndXJhdGlvbiIsImxvZ3NfY29uZmlndXJhdGlvbiIsInN0b3JhZ2VfY29uZmlndXJhdGlvbiIsIlJlbW90ZUxvZ2dpbmdMZXZlbCIsIm1vZGUiXSx0aGlzLmdhdGV3YXlDb25maWdHcm91cD10aGlzLmZiLmdyb3VwKHtiYXNpY0NvbmZpZzpbXSxhZHZhbmNlZENvbmZpZzpbXSxtb2RlOltvbi5CQVNJQ119KSx0aGlzLm9ic2VydmVBbGlnbkNvbmZpZ3MoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmZldGNoQ29uZmlnQXR0cmlidXRlKHRoaXMuZGV2aWNlKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1zYXZlQ29uZmlnKCl7Y29uc3R7bW9kZTplLGFkdmFuY2VkQ29uZmlnOnR9PXBlKHRoaXMucmVtb3ZlRW1wdHkodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAudmFsdWUpKSxuPXttb2RlOmUsLi4udH07bi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPU9iamVjdC52YWx1ZXMobi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPz9bXSk7Y29uc3QgYT10aGlzLmdlbmVyYXRlQXR0cmlidXRlcyhuKTt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsYSkucGlwZShVZSgoZT0+dGhpcy51cGRhdGVDcmVkZW50aWFscyhuLnRoaW5nc2JvYXJkLnNlY3VyaXR5KSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5kaWFsb2dSZWY/dGhpcy5kaWFsb2dSZWYuY2xvc2UoKToodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSl9KSl9b2JzZXJ2ZUFsaWduQ29uZmlncygpe3RoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5CQVNJQ3x8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYWR2YW5jZWRDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImJhc2ljQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5BRFZBTkNFRHx8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWdlbmVyYXRlQXR0cmlidXRlcyhlKXtjb25zdCB0PVtdLG49KGUsbik9Pnt0LnB1c2goe2tleTplLHZhbHVlOm59KX0sYT0oZSx0KT0+e3Q9ey4uLnQsdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LG4oZSx0KX07cmV0dXJuIG4oIlJlbW90ZUxvZ2dpbmdMZXZlbCIsZS5sb2dzPy5yZW1vdGU/LmVuYWJsZWQ/ZS5sb2dzLnJlbW90ZS5sb2dMZXZlbDpNdC5OT05FKSxkZWxldGUgZS5jb25uZWN0b3JzLG4oImxvZ3NfY29uZmlndXJhdGlvbiIsdGhpcy5nZW5lcmF0ZUxvZ3NGaWxlKGUubG9ncykpLGEoImdycGNfY29uZmlndXJhdGlvbiIsZS5ncnBjKSxhKCJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iLGUuc3RvcmFnZSksYSgiZ2VuZXJhbF9jb25maWd1cmF0aW9uIixlLnRoaW5nc2JvYXJkKSxuKCJtb2RlIixlLm1vZGUpLHR9dXBkYXRlQ3JlZGVudGlhbHMoZSl7bGV0IHQ9e307c3dpdGNoKGUudHlwZSl7Y2FzZSBWdC5VU0VSTkFNRV9QQVNTV09SRDp0aGlzLnNob3VsZFVwZGF0ZUNyZWRlbnRpYWxzKGUpJiYodD10aGlzLmdlbmVyYXRlTXF0dENyZWRlbnRpYWxzKGUpKTticmVhaztjYXNlIFZ0LkFDQ0VTU19UT0tFTjpjYXNlIFZ0LlRMU19BQ0NFU1NfVE9LRU46dGhpcy5zaG91bGRVcGRhdGVBY2Nlc3NUb2tlbihlKSYmKHQ9e2NyZWRlbnRpYWxzVHlwZTpVLkFDQ0VTU19UT0tFTixjcmVkZW50aWFsc0lkOmUuYWNjZXNzVG9rZW59KX1yZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoP3RoaXMuZGV2aWNlU2VydmljZS5zYXZlRGV2aWNlQ3JlZGVudGlhbHMoey4uLnRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLC4uLnR9KTpJZShudWxsKX1zaG91bGRVcGRhdGVDcmVkZW50aWFscyhlKXtpZih0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLk1RVFRfQkFTSUMpcmV0dXJuITA7Y29uc3QgdD1KU09OLnBhcnNlKHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLmNyZWRlbnRpYWxzVmFsdWUpO3JldHVybiEodC5jbGllbnRJZD09PWUuY2xpZW50SWQmJnQudXNlck5hbWU9PT1lLnVzZXJuYW1lJiZ0LnBhc3N3b3JkPT09ZS5wYXNzd29yZCl9Z2VuZXJhdGVNcXR0Q3JlZGVudGlhbHMoZSl7Y29uc3R7Y2xpZW50SWQ6dCx1c2VybmFtZTpuLHBhc3N3b3JkOmF9PWUsbz17Li4udCYme2NsaWVudElkOnR9LC4uLm4mJnt1c2VyTmFtZTpufSwuLi5hJiZ7cGFzc3dvcmQ6YX19O3JldHVybntjcmVkZW50aWFsc1R5cGU6VS5NUVRUX0JBU0lDLGNyZWRlbnRpYWxzVmFsdWU6SlNPTi5zdHJpbmdpZnkobyl9fXNob3VsZFVwZGF0ZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLkFDQ0VTU19UT0tFTnx8dGhpcy5pbml0aWFsQ3JlZGVudGlhbHMuY3JlZGVudGlhbHNJZCE9PWUuYWNjZXNzVG9rZW59Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYmJnRoaXMuZGlhbG9nUmVmLmNsb3NlKCl9cmVtb3ZlRW1wdHkoZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKChbZSx0XSk9Pm51bGwhPXQpKS5tYXAoKChbZSx0XSk9PltlLHQ9PT1PYmplY3QodCk/dGhpcy5yZW1vdmVFbXB0eSh0KTp0XSkpKX1nZW5lcmF0ZUxvZ3NGaWxlKGUpe2NvbnN0IHQ9e3ZlcnNpb246MSxkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM6ITEsZm9ybWF0dGVyczp7TG9nRm9ybWF0dGVyOntjbGFzczoibG9nZ2luZy5Gb3JtYXR0ZXIiLGZvcm1hdDplLmxvZ0Zvcm1hdCxkYXRlZm10OmUuZGF0ZUZvcm1hdH19LGhhbmRsZXJzOntjb25zb2xlSGFuZGxlcjp7Y2xhc3M6ImxvZ2dpbmcuU3RyZWFtSGFuZGxlciIsZm9ybWF0dGVyOiJMb2dGb3JtYXR0ZXIiLGxldmVsOjAsc3RyZWFtOiJleHQ6Ly9zeXMuc3Rkb3V0In0sZGF0YWJhc2VIYW5kbGVyOntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6Ii4vbG9ncy9kYXRhYmFzZS5sb2ciLGJhY2t1cENvdW50OjEsZW5jb2Rpbmc6InV0Zi04In19LGxvZ2dlcnM6e2RhdGFiYXNlOntoYW5kbGVyczpbImRhdGFiYXNlSGFuZGxlciIsImNvbnNvbGVIYW5kbGVyIl0sbGV2ZWw6IkRFQlVHIixwcm9wYWdhdGU6ITF9fSxyb290OntsZXZlbDoiRVJST1IiLGhhbmRsZXJzOlsiY29uc29sZUhhbmRsZXIiXX0sdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9O3JldHVybiB0aGlzLmFkZExvY2FsTG9nZ2Vycyh0LGUubG9jYWwpLHR9YWRkTG9jYWxMb2dnZXJzKGUsdCl7Zm9yKGNvbnN0IG4gb2YgT2JqZWN0LmtleXModCkpZS5oYW5kbGVyc1tuKyJIYW5kbGVyIl09dGhpcy5jcmVhdGVIYW5kbGVyT2JqKHRbbl0sbiksZS5sb2dnZXJzW25dPXRoaXMuY3JlYXRlTG9nZ2VyT2JqKHRbbl0sbil9Y3JlYXRlSGFuZGxlck9iaihlLHQpe3JldHVybntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6YCR7ZS5maWxlUGF0aH0vJHt0fS5sb2dgLGJhY2t1cENvdW50OmUuYmFja3VwQ291bnQsaW50ZXJ2YWw6ZS5zYXZpbmdUaW1lLHdoZW46ZS5zYXZpbmdQZXJpb2QsZW5jb2Rpbmc6InV0Zi04In19Y3JlYXRlTG9nZ2VyT2JqKGUsdCl7cmV0dXJue2hhbmRsZXJzOltgJHt0fUhhbmRsZXJgLCJjb25zb2xlSGFuZGxlciJdLGxldmVsOmUubG9nTGV2ZWwscHJvcGFnYXRlOiExfX1mZXRjaENvbmZpZ0F0dHJpYnV0ZShlKXtlLmlkIT09ayYmdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLkNMSUVOVF9TQ09QRSkucGlwZShfZSgodD0+dC5sZW5ndGg/SWUodCk6dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLlNIQVJFRF9TQ09QRSx0aGlzLmdhdGV3YXlDb25maWdBdHRyaWJ1dGVLZXlzKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbmZpZ3MoZSksdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9dXBkYXRlQ29uZmlncyhlKXtjb25zdCB0PXt0aGluZ3Nib2FyZDp7fSxncnBjOnt9LGxvZ3M6e30sc3RvcmFnZTp7fSxtb2RlOm9uLkJBU0lDfTtlLmZvckVhY2goKGU9Pntzd2l0Y2goZS5rZXkpe2Nhc2UiZ2VuZXJhbF9jb25maWd1cmF0aW9uIjp0LnRoaW5nc2JvYXJkPWUudmFsdWUsdGhpcy51cGRhdGVGb3JtQ29udHJvbHMoZS52YWx1ZSk7YnJlYWs7Y2FzZSJncnBjX2NvbmZpZ3VyYXRpb24iOnQuZ3JwYz1lLnZhbHVlO2JyZWFrO2Nhc2UibG9nc19jb25maWd1cmF0aW9uIjp0LmxvZ3M9dGhpcy5sb2dzVG9PYmooZS52YWx1ZSk7YnJlYWs7Y2FzZSJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iOnQuc3RvcmFnZT1lLnZhbHVlO2JyZWFrO2Nhc2UibW9kZSI6dC5tb2RlPWUudmFsdWU7YnJlYWs7Y2FzZSJSZW1vdGVMb2dnaW5nTGV2ZWwiOnQubG9ncz17Li4udC5sb2dzLHJlbW90ZTp7ZW5hYmxlZDplLnZhbHVlIT09TXQuTk9ORSxsb2dMZXZlbDplLnZhbHVlfX19fSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS5zZXRWYWx1ZSh0LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIikuc2V0VmFsdWUodCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUNvbnRyb2xzKGUpe2NvbnN0e3R5cGU6dCxhY2Nlc3NUb2tlbjpuLC4uLmF9PWUuc2VjdXJpdHk/P3t9O3RoaXMuaW5pdGlhbENyZWRlbnRpYWxzPXtkZXZpY2VJZDp0aGlzLmRldmljZSxjcmVkZW50aWFsc1R5cGU6dCxjcmVkZW50aWFsc0lkOm4sY3JlZGVudGlhbHNWYWx1ZTpKU09OLnN0cmluZ2lmeShhKX19bG9nc1RvT2JqKGUpe2NvbnN0e2Zvcm1hdDp0LGRhdGVmbXQ6bn09ZS5mb3JtYXR0ZXJzLkxvZ0Zvcm1hdHRlcjtyZXR1cm57bG9jYWw6T2JqZWN0LmtleXMoUHQpLnJlZHVjZSgoKHQsbik9Pntjb25zdCBhPWUuaGFuZGxlcnNbYCR7bn1IYW5kbGVyYF18fHt9LG89ZS5sb2dnZXJzW25dfHx7fTtyZXR1cm4gdFtuXT17bG9nTGV2ZWw6by5sZXZlbHx8TXQuSU5GTyxmaWxlUGF0aDphLmZpbGVuYW1lPy5zcGxpdChgLyR7bn1gKVswXXx8Ii4vbG9ncyIsYmFja3VwQ291bnQ6YS5iYWNrdXBDb3VudHx8NyxzYXZpbmdUaW1lOmEuaW50ZXJ2YWx8fDMsc2F2aW5nUGVyaW9kOmEud2hlbnx8RHQuZGF5c30sdH0pLHt9KSxsb2dGb3JtYXQ6dCxkYXRlRm9ybWF0Om59fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6R28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6R28sc2VsZWN0b3I6InRiLWdhdGV3YXktY29uZmlndXJhdGlvbiIsaW5wdXRzOntkZXZpY2U6ImRldmljZSIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsaW5wdXRzOlsiZGV2aWNlIiwiZGlhbG9nTW9kZSJdLG91dHB1dHM6WyJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6UG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUNvbmZpZ3VyYXRpb25Db21wb25lbnQiLEdvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkdvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbmZpZ3VyYXRpb24iLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTt2YXIgT289e2dhdGV3YXk6e2FkZHJlc3M6IkFkZHJlc3MiLCJhZGRyZXNzLXJlcXVpcmVkIjoiQWRkcmVzcyByZXF1aXJlZCIsImFkZC1lbnRyeSI6IkFkZCBjb25maWd1cmF0aW9uIiwiYWRkLWF0dHJpYnV0ZSI6IkFkZCBhdHRyaWJ1dGUiLCJhZGQtYXR0cmlidXRlLXVwZGF0ZSI6IkFkZCBhdHRyaWJ1dGUgdXBkYXRlIiwiYWRkLWtleSI6IkFkZCBrZXkiLCJhZGQtdGltZXNlcmllcyI6IkFkZCB0aW1lIHNlcmllcyIsImFkZC1tYXBwaW5nIjoiQWRkIG1hcHBpbmciLCJhZGQtc2xhdmUiOiJBZGQgU2xhdmUiLGFyZ3VtZW50czoiQXJndW1lbnRzIiwiYWRkLXJwYy1tZXRob2QiOiJBZGQgbWV0aG9kIiwiYWRkLXJwYy1yZXF1ZXN0IjoiQWRkIHJlcXVlc3QiLCJhZGQtdmFsdWUiOiJBZGQgYXJndW1lbnQiLGJhdWRyYXRlOiJCYXVkcmF0ZSIsYnl0ZXNpemU6IkJ5dGVzaXplIiwiZGVsZXRlLXZhbHVlIjoiRGVsZXRlIHZhbHVlIiwiZGVsZXRlLXJwYy1tZXRob2QiOiJEZWxldGUgbWV0aG9kIiwiZGVsZXRlLXJwYy1yZXF1ZXN0IjoiRGVsZXRlIHJlcXVlc3QiLCJkZWxldGUtYXR0cmlidXRlLXVwZGF0ZSI6IkRlbGV0ZSBhdHRyaWJ1dGUgdXBkYXRlIixhZHZhbmNlZDoiQWR2YW5jZWQiLCJhZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzIjoiQWR2YW5jZWQgY29ubmVjdGlvbiBzZXR0aW5ncyIsYXR0cmlidXRlczoiQXR0cmlidXRlcyIsImF0dHJpYnV0ZS11cGRhdGVzIjoiQXR0cmlidXRlIHVwZGF0ZXMiLCJhdHRyaWJ1dGUtZmlsdGVyIjoiQXR0cmlidXRlIGZpbHRlciIsImF0dHJpYnV0ZS1maWx0ZXItaGludCI6IkZpbHRlciBmb3IgaW5jb21pbmcgYXR0cmlidXRlIG5hbWUgZnJvbSBwbGF0Zm9ybSwgc3VwcG9ydHMgcmVndWxhciBleHByZXNzaW9uLiIsImF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWQiOiJBdHRyaWJ1dGUgZmlsdGVyIHJlcXVpcmVkLiIsImF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb24iOiJBdHRyaWJ1dGUgbmFtZSBleHByZXNzaW9uIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGV4cHJlc3Npb24gcmVxdWlyZWQuIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1oaW50IjoiSGludCBmb3IgQXR0cmlidXRlIG5hbWUgZXhwcmVzc2lvbiIsYmFzaWM6IkJhc2ljIiwiYnl0ZS1vcmRlciI6IkJ5dGUgb3JkZXIiLCJ3b3JkLW9yZGVyIjoiV29yZCBvcmRlciIsYnJva2VyOntjb25uZWN0aW9uOiJDb25uZWN0aW9uIHRvIGJyb2tlciIsbmFtZToiQnJva2VyIG5hbWUiLCJuYW1lLXJlcXVpcmVkIjoiQnJva2VyIG5hbWUgcmVxdWlyZWQuIiwic2VjdXJpdHktdHlwZXMiOnthbm9ueW1vdXM6IkFub255bW91cyIsYmFzaWM6IkJhc2ljIixjZXJ0aWZpY2F0ZXM6IkNlcnRpZmljYXRlcyJ9fSwiQ0EtY2VydGlmaWNhdGUtcGF0aCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsInBhdGgtdG8tQ0EtY2VydC1yZXF1aXJlZCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjaGFuZ2UtY29ubmVjdG9yLXRpdGxlIjoiQ29uZmlybSBjb25uZWN0b3IgY2hhbmdlIiwiY2hhbmdlLWNvbm5lY3Rvci10ZXh0IjoiU3dpdGNoaW5nIGNvbm5lY3RvcnMgd2lsbCBkaXNjYXJkIGFueSB1bnNhdmVkIGNoYW5nZXMuIENvbnRpbnVlPyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IkNoZWNraW5nIGRldmljZSBhY3Rpdml0eSIsY29tbWFuZDoiRG9ja2VyIGNvbW1hbmRzIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlciBjb21tYW5kIGhhcyBiZWVuIGNvcGllZCB0byBjbGlwYm9hcmQiLGNvbmZpZ3VyYXRpb246IkNvbmZpZ3VyYXRpb24iLCJhZGQtY29ubmVjdG9yIjoiQWRkIGNvbm5lY3RvciIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKHMpIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJDb25uZWN0IGF0dGVtcHQgdGltZSAobXMpIiwiY29ubmVjdC1hdHRlbXB0LWNvdW50IjoiQ29ubmVjdCBhdHRlbXB0IGNvdW50IiwiY29weS11c2VybmFtZSI6IkNvcHkgdXNlcm5hbWUiLCJjb3B5LXBhc3N3b3JkIjoiQ29weSBwYXNzd29yZCIsImNvcHktY2xpZW50LWlkIjoiQ29weSBjbGllbnQgSUQiLCJjb25uZWN0b3ItY3JlYXRlZCI6IkNvbm5lY3RvciBjcmVhdGVkIiwiY29ubmVjdG9yLXVwZGF0ZWQiOiJDb25uZWN0b3IgdXBkYXRlZCIsInJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGUiOiJTYXZlIFRlbXBsYXRlIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXNwb25zZSIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiVXNlIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gdG8gcnVuIElvVCBHYXRld2F5IGluIERvY2tlciBjb21wb3NlIHdpdGggY3JlZGVudGlhbHMgZm9yIHNlbGVjdGVkIGRldmljZSIsImluc3RhbGwtZG9ja2VyLWNvbXBvc2UiOiJVc2UgdGhlIGluc3RydWN0aW9ucyB0byBkb3dubG9hZCwgaW5zdGFsbCBhbmQgc2V0dXAgZG9ja2VyIGNvbXBvc2UiLCJkZXZpY2UtaW5mby1zZXR0aW5ncyI6IkRldmljZSBpbmZvIHNldHRpbmdzIiwiZGV2aWNlLWluZm8iOnsiZW50aXR5LWZpZWxkIjoiRW50aXR5IGZpZWxkIixzb3VyY2U6IlNvdXJjZSIsZXhwcmVzc2lvbjoiVmFsdWUgLyBFeHByZXNzaW9uIiwiZXhwcmVzc2lvbi1oaW50IjoiU2hvdyBoZWxwIixuYW1lOiJOYW1lIiwicHJvZmlsZS1uYW1lIjoiUHJvZmlsZSBuYW1lIiwiZGV2aWNlLW5hbWUtZXhwcmVzc2lvbiI6IkRldmljZSBuYW1lIGV4cHJlc3Npb24iLCJkZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJkZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIHByb2ZpbGUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4ifSwiZGV2aWNlLW5hbWUtZmlsdGVyIjoiRGV2aWNlIG5hbWUgZmlsdGVyIiwiZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZmlsdGVyIGluY29taW5nIGRhdGEgYnkgZGV2aWNlIG5hbWUuIiwiZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZmlsdGVyIGlzIHJlcXVpcmVkLiIsZGV0YWlsczoiRGV0YWlscyIsImRlbGV0ZS1tYXBwaW5nLXRpdGxlIjoiRGVsZXRlIG1hcHBpbmc/IiwiZGVsZXRlLXNsYXZlLXRpdGxlIjoiRGVsZXRlIHNsYXZlPyIsZGl2aWRlcjoiRGl2aWRlciIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6IkRvd25sb2FkIGNvbmZpZ3VyYXRpb24gZmlsZSIsImRvd25sb2FkLWRvY2tlci1jb21wb3NlIjoiRG93bmxvYWQgZG9ja2VyLWNvbXBvc2UueW1sIGZvciB5b3VyIGdhdGV3YXkiLCJlbmFibGUtcmVtb3RlLWxvZ2dpbmciOiJFbmFibGUgcmVtb3RlIGxvZ2dpbmciLCJlbGxpcHNpcy1jaGlwcy10ZXh0IjoiKyB7e2NvdW50fX0gbW9yZSIsImxhdW5jaC1nYXRld2F5IjoiTGF1bmNoIGdhdGV3YXkiLCJsYXVuY2gtY29tbWFuZCI6IkxhdW5jaCBjb21tYW5kIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoiU3RhcnQgdGhlIGdhdGV3YXkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSB0ZXJtaW5hbCBmcm9tIGZvbGRlciB3aXRoIGRvY2tlci1jb21wb3NlLnltbCBmaWxlIiwibG9ncy1jb25maWd1cmF0aW9uIjoiTG9ncyBjb25maWd1cmF0aW9uIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXRlIGEgbmV3IGdhdGV3YXkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgZ2F0ZXdheSB3aXRoIG5hbWU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkNyZWF0ZWQgdGltZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXIiOiJDb25maWd1cmF0aW9ucyB3aWxsIGJlIGRlbGV0ZWQiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6IlR1cm5pbmcgb2ZmIFJlbW90ZSBDb25maWd1cmF0aW9uIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgaXMgcGh5c2ljYWwgYWNjZXNzIHRvIHRoZSBHYXRld2F5LiBBbGwgcHJldmlvdXMgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkLjxicj48YnI+IFxuVG8gdHVybiBvZmYgY29uZmlndXJhdGlvbiwgZW50ZXIgZ2F0ZXdheSBuYW1lIGJlbG93IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0IjoiR2F0ZXdheSBuYW1lIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIG1hbmRhdG9yeSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtIjoiVHVybiBPZmYiLCJjb25uZWN0b3ItZHVwbGljYXRlLW5hbWUiOiJDb25uZWN0b3Igd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMuIiwiY29ubmVjdG9yLXNpZGUiOiJDb25uZWN0b3Igc2lkZSIsInBheWxvYWQtdHlwZSI6IlBheWxvYWQgdHlwZSIsInBsYXRmb3JtLXNpZGUiOiJQbGF0Zm9ybSBzaWRlIixKU09OOiJKU09OIiwiSlNPTi1oaW50IjoiQ29udmVydGVyIGZvciB0aGlzIHBheWxvYWQgdHlwZSBwcm9jZXNzZXMgTVFUVCBtZXNzYWdlcyBpbiBKU09OIGZvcm1hdC4gSXQgdXNlcyBKU09OIFBhdGggZXhwcmVzc2lvbnMgdG8gZXh0cmFjdCB2aXRhbCBkZXRhaWxzIHN1Y2ggYXMgZGV2aWNlIG5hbWVzLCBkZXZpY2UgcHJvZmlsZSBuYW1lcywgYXR0cmlidXRlcywgYW5kIHRpbWUgc2VyaWVzIGZyb20gdGhlIG1lc3NhZ2UuIEFuZCByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGdldCBkZXZpY2UgZGV0YWlscyBmcm9tIHRvcGljcy4iLGJ5dGVzOiJCeXRlcyIsImJ5dGVzLWhpbnQiOiJDb252ZXJ0ZXIgZm9yIHRoaXMgcGF5bG9hZCB0eXBlIGRlc2lnbmVkIGZvciBiaW5hcnkgTVFUVCBwYXlsb2FkcywgdGhpcyBjb252ZXJ0ZXIgZGlyZWN0bHkgaW50ZXJwcmV0cyBiaW5hcnkgZGF0YSB0byByZXRyaWV2ZSBkZXZpY2UgbmFtZXMgYW5kIGRldmljZSBwcm9maWxlIG5hbWVzLCBhbG9uZyB3aXRoIGF0dHJpYnV0ZXMgYW5kIHRpbWUgc2VyaWVzLCB1c2luZyBzcGVjaWZpYyBieXRlIHBvc2l0aW9ucyBmb3IgZGF0YSBleHRyYWN0aW9uLiIsY3VzdG9tOiJDdXN0b20iLCJjdXN0b20taGludCI6IlRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gdXNlIGEgY3VzdG9tIGNvbnZlcnRlciBmb3Igc3BlY2lmaWMgZGF0YSB0YXNrcy4gWW91IG5lZWQgdG8gYWRkIHlvdXIgY3VzdG9tIGNvbnZlcnRlciB0byB0aGUgZXh0ZW5zaW9uIGZvbGRlciBhbmQgZW50ZXIgaXRzIGNsYXNzIG5hbWUgaW4gdGhlIFVJIHNldHRpbmdzLiBBbnkga2V5cyB5b3UgcHJvdmlkZSB3aWxsIGJlIHNlbnQgYXMgY29uZmlndXJhdGlvbiB0byB5b3VyIGN1c3RvbSBjb252ZXJ0ZXIuIiwiY2xpZW50LWNlcnQtcGF0aCI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIGZpbGUiLCJwYXRoLXRvLWNsaWVudC1jZXJ0LXJlcXVpcmVkIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjbGllbnQtaWQiOiJDbGllbnQgSUQiLCJkYXRhLWNvbnZlcnNpb24iOiJEYXRhIGNvbnZlcnNpb24iLCJkYXRhLW1hcHBpbmciOiJEYXRhIG1hcHBpbmciLCJkYXRhLW1hcHBpbmctaGludCI6IkRhdGEgbWFwcGluZyBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSB0byBwYXJzZSBhbmQgY29udmVydCB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIGEgTVFUVCBjbGllbnQgaW4gaW5jb21pbmcgbWVzc2FnZXMgaW50byBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBkYXRhIGtleXMuIiwib3BjdWEtZGF0YS1tYXBwaW5nLWhpbnQiOiJEYXRhIG1hcHBpbmcgcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgdG8gcGFyc2UgYW5kIGNvbnZlcnQgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBhIE9QQ1VBIHNlcnZlciBpbnRvIHNwZWNpZmljIGRhdGEga2V5cy4iLGRlbGV0ZToiRGVsZXRlIGNvbmZpZ3VyYXRpb24iLCJkZWxldGUtYXR0cmlidXRlIjoiRGVsZXRlIGF0dHJpYnV0ZSIsImRlbGV0ZS1rZXkiOiJEZWxldGUga2V5IiwiZGVsZXRlLXRpbWVzZXJpZXMiOiJEZWxldGUgdGltZSBzZXJpZXMiLGRlZmF1bHQ6IkRlZmF1bHQiLCJkZXZpY2Utbm9kZSI6IkRldmljZSBub2RlIiwiZGV2aWNlLW5vZGUtcmVxdWlyZWQiOiJEZXZpY2Ugbm9kZSByZXF1aXJlZC4iLCJkZXZpY2Utbm9kZS1oaW50IjoiUGF0aCBvciBpZGVudGlmaWVyIGZvciBkZXZpY2Ugbm9kZSBvbiBPUEMgVUEgc2VydmVyLiBSZWxhdGl2ZSBwYXRocyBmcm9tIGl0IGZvciBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBjYW4gYmUgdXNlZC4iLCJkZXZpY2UtbmFtZSI6IkRldmljZSBuYW1lIiwiZGV2aWNlLXByb2ZpbGUtbGFiZWwiOiJEZXZpY2UgcHJvZmlsZSIsImRldmljZS1uYW1lLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgcmVxdWlyZWQiLCJkZXZpY2UtcHJvZmlsZS1yZXF1aXJlZCI6IkRldmljZSBwcm9maWxlIHJlcXVpcmVkIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGVuYWJsZToiRW5hYmxlIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IkVuYWJsZSBzdWJzY3JpcHRpb24iLGV4dGVuc2lvbjoiRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uLWhpbnQiOiJQdXQgeW91ciBjb252ZXJ0ZXIgY2xhc3NuYW1lIGluIHRoZSBmaWVsZC4gQ3VzdG9tIGNvbnZlcnRlciB3aXRoIHN1Y2ggY2xhc3Mgc2hvdWxkIGJlIGluIGV4dGVuc2lvbi9tcXR0IGZvbGRlci4iLCJleHRlbnNpb24tcmVxdWlyZWQiOiJFeHRlbnNpb24gaXMgcmVxdWlyZWQuIiwiZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24iOiJFeHRlbnNpb24gY29uZmlndXJhdGlvbiIsImV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnQiOiJDb25maWd1cmF0aW9uIGZvciBjb252ZXJ0b3IiLCJmaWxsLWNvbm5lY3Rvci1kZWZhdWx0cyI6IkZpbGwgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHQgdmFsdWVzIiwiZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludCI6IlRoaXMgcHJvcGVydHkgYWxsb3dzIHRvIGZpbGwgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0IHZhbHVlcyBvbiBpdCdzIGNyZWF0aW9uLiIsImZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MiOiJJbnB1dCByZXF1ZXN0IHBhcnNpbmciLCJmcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnQiOiJUaGVzZSBmaWVsZHMgc3VwcG9ydCBKU09OUGF0aCBleHByZXNzaW9ucyB0byBleHRyYWN0IGEgbmFtZSBmcm9tIGluY29taW5nIG1lc3NhZ2UuIiwiZnVuY3Rpb24tY29kZSI6IkZ1bmN0aW9uIGNvZGUiLCJmdW5jdGlvbi1jb2RlcyI6eyJyZWFkLWNvaWxzIjoiMDEgLSBSZWFkIENvaWxzIiwicmVhZC1kaXNjcmV0ZS1pbnB1dHMiOiIwMiAtIFJlYWQgRGlzY3JldGUgSW5wdXRzIiwicmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyI6IjAzIC0gUmVhZCBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyIsInJlYWQtaW5wdXQtcmVnaXN0ZXJzIjoiMDQgLSBSZWFkIElucHV0IFJlZ2lzdGVycyIsIndyaXRlLXNpbmdsZS1jb2lsIjoiMDUgLSBXcml0ZSBTaW5nbGUgQ29pbCIsIndyaXRlLXNpbmdsZS1ob2xkaW5nLXJlZ2lzdGVyIjoiMDYgLSBXcml0ZSBTaW5nbGUgSG9sZGluZyBSZWdpc3RlciIsIndyaXRlLW11bHRpcGxlLWNvaWxzIjoiMTUgLSBXcml0ZSBNdWx0aXBsZSBDb2lscyIsIndyaXRlLW11bHRpcGxlLWhvbGRpbmctcmVnaXN0ZXJzIjoiMTYgLSBXcml0ZSBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyJ9LCJ0by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MiOiJPdXRwdXQgcmVxdWVzdCBwcm9jZXNzaW5nIiwidG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzLWhpbnQiOiJGb3IgdGhlc2UgZmllbGRzIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFuZCB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhY3R1YWwgdmFsdWVzOiAke2RldmljZU5hbWV9LCAke2F0dHJpYnV0ZUtleX0sICR7YXR0cmlidXRlVmFsdWV9IixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImdlbmVyYXRlLWNsaWVudC1pZCI6IkdlbmVyYXRlIENsaWVudCBJRCIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsaW5mbzoiSW5mbyIsaWRlbnRpdHk6IklkZW50aXR5IiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJ1bml0LWlkIjoiVW5pdCBJRCIsaG9zdDoiSG9zdCIsImhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsaG9sZGluZ19yZWdpc3RlcnM6IkhvbGRpbmcgcmVnaXN0ZXJzIixjb2lsc19pbml0aWFsaXplcjoiQ29pbHMgaW5pdGlhbGl6ZXIiLGlucHV0X3JlZ2lzdGVyczoiSW5wdXQgcmVnaXN0ZXJzIixkaXNjcmV0ZV9pbnB1dHM6IkRpc2NyZXRlIGlucHV0cyIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIkpTT05QYXRoLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIGNvbnN0YW50cyBhbmQgSlNPTlBhdGggZXhwcmVzc2lvbnMuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWF4LW51bWJlci1vZi13b3JrZXJzIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIiwibWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnQiOiJNYXhpbWFsIG51bWJlciBvZiB3b3JrZXJzIHRocmVhZHMgZm9yIGNvbnZlcnRlcnMgXG4oVGhlIGFtb3VudCBvZiB3b3JrZXJzIGNoYW5nZXMgZHluYW1pY2FsbHksIGRlcGVuZGluZyBvbiBsb2FkKSBcblJlY29tbWVuZGVkIGFtb3VudCA1MC0xNTAuIiwibWF4LW51bWJlci1vZi13b3JrZXJzLXJlcXVpcmVkIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIGlzIHJlcXVpcmVkLiIsIm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyIjoiTWF4IG1lc3NhZ2VzIHF1ZXVlIHBlciB3b3JrZXIiLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1oaW50IjoiTWF4aW1hbCBtZXNzYWdlcyBjb3VudCB0aGF0IHdpbGwgYmUgaW4gdGhlIHF1ZXVlIFxuZm9yIGVhY2ggY29udmVydGVyIHdvcmtlci4iLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZCI6Ik1heCBtZXNzYWdlcyBxdWV1ZSBwZXIgd29ya2VyIGlzIHJlcXVpcmVkLiIsbWV0aG9kOiJNZXRob2QiLCJtZXRob2QtbmFtZSI6Ik1ldGhvZCBuYW1lIiwibWV0aG9kLXJlcXVpcmVkIjoiTWV0aG9kIG5hbWUgaXMgcmVxdWlyZWQuIiwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwIiwibWluLXBhY2stc2VuZC1kZWxheS1wYXR0ZXJuIjoiTWluIHBhY2sgc2VuZCBkZWxheSBpcyBub3QgdmFsaWQiLG11bHRpcGxpZXI6Ik11bHRpcGxpZXIiLG1vZGU6Ik1vZGUiLCJtb2RlbC1uYW1lIjoiTW9kZWwgbmFtZSIsbW9kaWZpZXI6Ik1vZGlmaWVyIiwibW9kaWZpZXItaW52YWxpZCI6Ik1vZGlmaWVyIGlzIG5vdCB2YWxpZCIsIm1xdHQtdmVyc2lvbiI6Ik1RVFQgdmVyc2lvbiIsbmFtZToiTmFtZSIsIm5hbWUtcmVxdWlyZWQiOiJOYW1lIGlzIHJlcXVpcmVkLiIsIm5vLWF0dHJpYnV0ZXMiOiJObyBhdHRyaWJ1dGVzIiwibm8tYXR0cmlidXRlLXVwZGF0ZXMiOiJObyBhdHRyaWJ1dGUgdXBkYXRlcyIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJuby10aW1lc2VyaWVzIjoiTm8gdGltZSBzZXJpZXMiLCJuby1rZXlzIjoiTm8ga2V5cyIsIm5vLXZhbHVlIjoiTm8gYXJndW1lbnRzIiwibm8tcnBjLW1ldGhvZHMiOiJObyBSUEMgbWV0aG9kcyIsIm5vLXJwYy1yZXF1ZXN0cyI6Ik5vIFJQQyByZXF1ZXN0cyIsInBhdGgtaGludCI6IlRoZSBwYXRoIGlzIGxvY2FsIHRvIHRoZSBnYXRld2F5IGZpbGUgc3lzdGVtIiwicGF0aC1sb2dzIjoiUGF0aCB0byBsb2cgZmlsZXMiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYXRoIGlzIHJlcXVpcmVkLiIscGFzc3dvcmQ6IlBhc3N3b3JkIiwicGFzc3dvcmQtcmVxdWlyZWQiOiJQYXNzd29yZCBpcyByZXF1aXJlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IktlZXAgYWxpdmUgcGVybWl0IHdpdGhvdXQgY2FsbHMiLCJwb2xsLXBlcmlvZCI6IlBvbGwgcGVyaW9kIChtcykiLCJwb2xsLXBlcmlvZC1lcnJvciI6IlBvbGwgcGVyaW9kIHNob3VsZCBiZSBhdCBsZWFzdCB7e21pbn19IChtcykuIixwb3J0OiJQb3J0IiwicG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIiwicG9ydC1saW1pdHMtZXJyb3IiOiJQb3J0IHNob3VsZCBiZSBudW1iZXIgZnJvbSB7e21pbn19IHRvIHt7bWF4fX0uIiwicHJpdmF0ZS1rZXktcGF0aCI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgZmlsZSIsInBhdGgtdG8tcHJpdmF0ZS1rZXktcmVxdWlyZWQiOiJQYXRoIHRvIHByaXZhdGUga2V5IGZpbGUgaXMgcmVxdWlyZWQuIixwYXJpdHk6IlBhcml0eSIsInByb2R1Y3QtY29kZSI6IlByb2R1Y3QgY29kZSIsInByb2R1Y3QtbmFtZSI6IlByb2R1Y3QgbmFtZSIscmF3OiJSYXciLHJldGFpbjoiUmV0YWluIiwicmV0YWluLWhpbnQiOiJUaGlzIGZsYWcgdGVsbHMgdGhlIGJyb2tlciB0byBzdG9yZSB0aGUgbWVzc2FnZSBmb3IgYSB0b3BpY1xuYW5kIGVuc3VyZXMgYW55IG5ldyBjbGllbnQgc3Vic2NyaWJpbmcgdG8gdGhhdCB0b3BpY1xud2lsbCByZWNlaXZlIHRoZSBzdG9yZWQgbWVzc2FnZS4iLHJlbW90ZToiUmVtb3RlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IkxvZ2dpbmcgbGV2ZWwiLCJyZW1vdmUtZW50cnkiOiJSZW1vdmUgY29uZmlndXJhdGlvbiIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLHJldHJpZXM6IlJldHJpZXMiLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cmllcyBvbiBlbXB0eSIsInJldHJpZXMtb24taW52YWxpZCI6IlJldHJpZXMgb24gaW52YWxpZCIscnBjOnt0aXRsZToie3t0eXBlfX0gQ29ubmVjdG9yIFJQQyBwYXJhbWV0ZXJzIiwidGVtcGxhdGVzLXRpdGxlIjoiQ29ubmVjdG9yIFJQQyBUZW1wbGF0ZXMiLG1ldGhvZEZpbHRlcjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1uYW1lIjoiTWV0aG9kIG5hbWUiLHJlcXVlc3RUb3BpY0V4cHJlc3Npb246IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiIscmVzcG9uc2VUb3BpY0V4cHJlc3Npb246IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLHJlc3BvbnNlVGltZW91dDoiUmVzcG9uc2UgdGltZW91dCIsdmFsdWVFeHByZXNzaW9uOiJWYWx1ZSBleHByZXNzaW9uIix0YWc6IlRhZyIsdHlwZToiVHlwZSIsZnVuY3Rpb25Db2RlOiJGdW5jdGlvbiBDb2RlIixvYmplY3RzQ291bnQ6Ik9iamVjdHMgQ291bnQiLGFkZHJlc3M6IkFkZHJlc3MiLG1ldGhvZDoiTWV0aG9kIixyZXF1ZXN0VHlwZToiUmVxdWVzdCBUeXBlIixyZXF1ZXN0VGltZW91dDoiUmVxdWVzdCBUaW1lb3V0IixvYmplY3RUeXBlOiJPYmplY3QgdHlwZSIsaWRlbnRpZmllcjoiSWRlbnRpZmllciIscHJvcGVydHlJZDoiUHJvcGVydHkgSUQiLG1ldGhvZFJQQzoiTWV0aG9kIFJQQyBuYW1lIix3aXRoUmVzcG9uc2U6IldpdGggUmVzcG9uc2UiLGNoYXJhY3RlcmlzdGljVVVJRDoiQ2hhcmFjdGVyaXN0aWMgVVVJRCIsbWV0aG9kUHJvY2Vzc2luZzoiTWV0aG9kIFByb2Nlc3NpbmciLG5vZGVJRDoiTm9kZSBJRCIsaXNFeHRlbmRlZElEOiJJcyBFeHRlbmRlZCBJRCIsaXNGRDoiSXMgRkQiLGJpdHJhdGVTd2l0Y2g6IkJpdHJhdGUgU3dpdGNoIixkYXRhSW5IRVg6IkRhdGEgSW4gSEVYIixkYXRhTGVuZ3RoOiJEYXRhIExlbmd0aCIsZGF0YUJ5dGVvcmRlcjoiRGF0YSBCeXRlIE9yZGVyIixkYXRhQmVmb3JlOiJEYXRhIEJlZm9yZSIsZGF0YUFmdGVyOiJEYXRhIEFmdGVyIixkYXRhRXhwcmVzc2lvbjoiRGF0YSBFeHByZXNzaW9uIixlbmNvZGluZzoiRW5jb2RpbmciLG9pZDoiT0lEIiwiYWRkLW9pZCI6IkFkZCBPSUQiLCJhZGQtaGVhZGVyIjoiQWRkIGhlYWRlciIsImFkZC1zZWN1cml0eSI6IkFkZCBzZWN1cml0eSIscmVtb3ZlOiJSZW1vdmUiLHJlcXVlc3RGaWx0ZXI6IlJlcXVlc3QgRmlsdGVyIixyZXF1ZXN0VXJsRXhwcmVzc2lvbjoiUmVxdWVzdCBVUkwgRXhwcmVzc2lvbiIsaHR0cE1ldGhvZDoiSFRUUCBNZXRob2QiLHRpbWVvdXQ6IlRpbWVvdXQiLHRyaWVzOiJUcmllcyIsaHR0cEhlYWRlcnM6IkhUVFAgSGVhZGVycyIsImhlYWRlci1uYW1lIjoiSGVhZGVyIG5hbWUiLGhpbnQ6eyJtb2RidXMtcmVzcG9uc2UtcmVhZGluZyI6IlJQQyByZXNwb25zZSB3aWxsIHJldHVybiBhbGwgc3VidHJhY3RlZCB2YWx1ZXMgZnJvbSBhbGwgY29ubmVjdGVkIGRldmljZXMgd2hlbiB0aGUgcmVhZGluZyBmdW5jdGlvbnMgYXJlIHNlbGVjdGVkLiIsIm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9ucyI6IlJQQyB3aWxsIHdyaXRlIGEgZmlsbGVkIHZhbHVlIHRvIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyB3aGVuIHRoZSB3cml0aW5nIGZ1bmN0aW9ucyBhcmUgc2VsZWN0ZWQuIiwib3BjLW1ldGhvZCI6IkEgZmlsbGVkIG1ldGhvZCBuYW1lIGlzIHRoZSBPUEMtVUEgbWV0aG9kIHRoYXQgd2lsbCBwcm9jZXNzZWQgb24gdGhlIHNlcnZlciBzaWRlIChtYWtlIHN1cmUgeW91ciBub2RlIGhhcyB0aGUgcmVxdWVzdGVkIG1ldGhvZCkuIn0sInNlY3VyaXR5LW5hbWUiOiJTZWN1cml0eSBuYW1lIix2YWx1ZToiVmFsdWUiLHNlY3VyaXR5OiJTZWN1cml0eSIscmVzcG9uc2VWYWx1ZUV4cHJlc3Npb246IlJlc3BvbnNlIFZhbHVlIEV4cHJlc3Npb24iLHJlcXVlc3RWYWx1ZUV4cHJlc3Npb246IlJlcXVlc3QgVmFsdWUgRXhwcmVzc2lvbiIsYXJndW1lbnRzOiJBcmd1bWVudHMiLCJhZGQtYXJndW1lbnQiOiJBZGQgYXJndW1lbnQiLCJ3cml0ZS1wcm9wZXJ0eSI6IldyaXRlIHByb3BlcnR5IiwicmVhZC1wcm9wZXJ0eSI6IlJlYWQgcHJvcGVydHkiLCJhbmFsb2ctb3V0cHV0IjoiQW5hbG9nIG91dHB1dCIsImFuYWxvZy1pbnB1dCI6IkFuYWxvZyBpbnB1dCIsImJpbmFyeS1vdXRwdXQiOiJCaW5hcnkgb3V0cHV0IiwiYmluYXJ5LWlucHV0IjoiQmluYXJ5IGlucHV0IiwiYmluYXJ5LXZhbHVlIjoiQmluYXJ5IHZhbHVlIiwiYW5hbG9nLXZhbHVlIjoiQW5hbG9nIHZhbHVlIix3cml0ZToiV3JpdGUiLHJlYWQ6IlJlYWQiLHNjYW46IlNjYW4iLG9pZHM6Ik9JRFMiLHNldDoiU2V0IixtdWx0aXNldDoiTXVsdGlzZXQiLGdldDoiR2V0IiwiYnVsay13YWxrIjoiQnVsayB3YWxrIix0YWJsZToiVGFibGUiLCJtdWx0aS1nZXQiOiJNdWx0aWdldCIsImdldC1uZXh0IjoiR2V0IG5leHQiLCJidWxrLWdldCI6IkJ1bGsgZ2V0Iix3YWxrOiJXYWxrIiwic2F2ZS10ZW1wbGF0ZSI6IlNhdmUgdGVtcGxhdGUiLCJ0ZW1wbGF0ZS1uYW1lIjoiVGVtcGxhdGUgbmFtZSIsInRlbXBsYXRlLW5hbWUtcmVxdWlyZWQiOiJUZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLiIsInRlbXBsYXRlLW5hbWUtZHVwbGljYXRlIjoiVGVtcGxhdGUgd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgdXBkYXRlZC4iLGNvbW1hbmQ6IkNvbW1hbmQiLHBhcmFtczoiUGFyYW1zIiwianNvbi12YWx1ZS1pbnZhbGlkIjoiSlNPTiB2YWx1ZSBoYXMgYW4gaW52YWxpZCBmb3JtYXQifSwicnBjLW1ldGhvZHMiOiJSUEMgbWV0aG9kcyIsInJwYy1yZXF1ZXN0cyI6IlJQQyByZXF1ZXN0cyIscmVxdWVzdDp7ImNvbm5lY3QtcmVxdWVzdCI6IkNvbm5lY3QgcmVxdWVzdCIsImRpc2Nvbm5lY3QtcmVxdWVzdCI6IkRpc2Nvbm5lY3QgcmVxdWVzdCIsImF0dHJpYnV0ZS1yZXF1ZXN0IjoiQXR0cmlidXRlIHJlcXVlc3QiLCJhdHRyaWJ1dGUtdXBkYXRlIjoiQXR0cmlidXRlIHVwZGF0ZSIsInJwYy1jb25uZWN0aW9uIjoiUlBDIGNvbW1hbmQifSwicmVxdWVzdC10eXBlIjoiUmVxdWVzdCB0eXBlIiwicmVxdWVzdHMtbWFwcGluZyI6IlJlcXVlc3RzIG1hcHBpbmciLCJyZXF1ZXN0cy1tYXBwaW5nLWhpbnQiOiJNUVRUIENvbm5lY3RvciByZXF1ZXN0cyBhbGxvd3MgeW91IHRvIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHByb2Nlc3MgYXR0cmlidXRlIHJlcXVlc3RzIGZyb20gdGhlIGRldmljZSwgaGFuZGxlIGF0dHJpYnV0ZSB1cGRhdGVzIG9uIHRoZSBzZXJ2ZXIgYW5kIFJQQyBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24uIiwicmVxdWVzdC10b3BpYy1leHByZXNzaW9uIjoiUmVxdWVzdCB0b3BpYyBleHByZXNzaW9uIiwicmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGUiOiJSZXF1ZXN0IGNsaWVudCBjZXJ0aWZpY2F0ZSIsInJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS10aW1lb3V0IjoiUmVzcG9uc2UgdGltZW91dCAobXMpIiwicmVzcG9uc2UtdGltZW91dC1yZXF1aXJlZCI6IlJlc3BvbnNlIHRpbWVvdXQgaXMgcmVxdWlyZWQuIiwicmVzcG9uc2UtdGltZW91dC1saW1pdHMtZXJyb3IiOiJUaW1lb3V0IG11c3QgYmUgbW9yZSB0aGVuIHt7bWlufX0gbXMuIiwicmVzcG9uc2UtdG9waWMtUW9zIjoiUmVzcG9uc2UgdG9waWMgUW9TIiwicmVzcG9uc2UtdG9waWMtUW9zLWhpbnQiOiJNUVRUIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBpcyBhbiBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgbWVzc2FnZSBzZW5kZXIgYW5kIHJlY2VpdmVyIHRoYXQgZGVmaW5lcyB0aGUgbGV2ZWwgb2YgZGVsaXZlcnkgZ3VhcmFudGVlIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UuIiwicmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbiI6IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLCJyZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkIjoiUmVzcG9uc2UgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS12YWx1ZS1leHByZXNzaW9uIjoiUmVzcG9uc2UgdmFsdWUgZXhwcmVzc2lvbiIsInJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWQiOiJSZXNwb25zZSB2YWx1ZSBleHByZXNzaW9uIGlzIHJlcXVpcmVkLiIsInZlbmRvci1uYW1lIjoiVmVuZG9yIG5hbWUiLCJ2ZW5kb3ItdXJsIjoiVmVuZG9yIFVSTCIsdmFsdWU6IlZhbHVlIix2YWx1ZXM6IlZhbHVlcyIsInZhbHVlLXJlcXVpcmVkIjoiVmFsdWUgaXMgcmVxdWlyZWQuIiwidmFsdWUtZXhwcmVzc2lvbiI6IlZhbHVlIGV4cHJlc3Npb24iLCJ2YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiVmFsdWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJ3aXRoLXJlc3BvbnNlIjoiV2l0aCByZXNwb25zZSIsIndpdGhvdXQtcmVzcG9uc2UiOiJXaXRob3V0IHJlc3BvbnNlIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2Nhbi1wZXJpb2QiOiJTY2FuIHBlcmlvZCAobXMpIiwic2Nhbi1wZXJpb2QtZXJyb3IiOiJTY2FuIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJTdWJzY3JpcHRpb24gY2hlY2sgcGVyaW9kIChtcykiLCJzdWItY2hlY2stcGVyaW9kLWVycm9yIjoiU3Vic2NyaXB0aW9uIGNoZWNrIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInNlY3VyaXR5LWxhYmVsIjoiU2VjdXJpdHkiLCJzZWN1cml0eS1wb2xpY3kiOiJTZWN1cml0eSBwb2xpY3kiLCJzZWN1cml0eS10eXBlIjoiU2VjdXJpdHkgdHlwZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkFjY2VzcyBUb2tlbiIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXNlcm5hbWUgYW5kIFBhc3N3b3JkIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBBY2Nlc3MgVG9rZW4iLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyBQcml2YXRlIEtleSJ9LCJzZWxlY3QtY29ubmVjdG9yIjoiU2VsZWN0IGNvbm5lY3RvciB0byBkaXNwbGF5IGNvbmZpZyIsInNlbmQtY2hhbmdlLWRhdGEiOiJTZW5kIGRhdGEgb25seSBvbiBjaGFuZ2UiLCJzZW5kLWRhdGEtdG8tcGxhdGZvcm0iOiJTZW5kIGRhdGEgdG8gcGxhdGZvcm0iLCJzZW5kLWRhdGEtb24tY2hhbmdlIjoiU2VuZCBkYXRhIG9ubHkgb24gY2hhbmdlIiwic2VuZC1jaGFuZ2UtZGF0YS1oaW50IjoiVGhlIHZhbHVlcyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBkYXRhYmFzZSBvbmx5IGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgcHJldmlvdXMgY29udmVydGVkIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb25hbGl0eSBhcHBsaWVzIHRvIGJvdGggYXR0cmlidXRlcyBhbmQgdGltZSBzZXJpZXMgaW4gdGhlIGNvbnZlcnRlciBvdXRwdXQuIixzZXJ2ZXI6IlNlcnZlciIsInNlcnZlci1ob3N0bmFtZSI6IlNlcnZlciBob3N0bmFtZSIsInNlcnZlci1zbGF2ZSI6IlNlcnZlciAoU2xhdmUpIiwic2VydmVycy1zbGF2ZXMiOiJTZXJ2ZXJzIChTbGF2ZXMpIiwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsInNlcnZlci11cmwiOiJTZXJ2ZXIgZW5kcG9pbnQgdXJsIiwic2VydmVyLWNvbm5lY3Rpb24iOiJTZXJ2ZXIgQ29ubmVjdGlvbiIsInNlcnZlci1jb25maWciOiJTZXJ2ZXIgY29uZmlndXJhdGlvbiIsInNlcnZlci1zbGF2ZS1jb25maWciOiJTZXJ2ZXIgKFNsYXZlKSBjb25maWd1cmF0aW9uIiwic2VydmVyLXVybC1yZXF1aXJlZCI6IlNlcnZlciBlbmRwb2ludCB1cmwgaXMgcmVxdWlyZWQuIixzdG9wYml0czoiU3RvcGJpdHMiLHN0cmljdDoiU3RyaWN0IixzZXQ6IlNldCIsInNob3ctbWFwIjoiU2hvdyBtYXAiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiU3RhdGlzdGljIixzdGF0aXN0aWNzOiJTdGF0aXN0aWNzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjonTm8gY29uZmlndXJlZCBzdGF0aXN0aWMga2V5cyBmb3VuZC4gWW91IGNhbiBjb25maWd1cmUgdGhlbSBpbiAiU3RhdGlzdGljcyIgdGFiIGluIGdlbmVyYWwgY29uZmlndXJhdGlvbi4nLCJzdGF0aXN0aWNzLWJ1dHRvbiI6IkdvIHRvIGNvbmZpZ3VyYXRpb24iLGNvbW1hbmRzOiJDb21tYW5kcyIsInNlbmQtcGVyaW9kIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIChpbiBzZWMpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgcmVxdWlyZWQiLCJzZW5kLXBlcmlvZC1taW4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gNjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiAoaW4gc2VjKSIsIm1heC1wYXlsb2FkLXNpemUtYnl0ZXMiOiJNYXggcGF5bG9hZCBzaXplIGluIGJ5dGVzIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1yZXF1aXJlZCI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgaXMgcmVxdWlyZWQiLCJtYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pbiI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMTAwIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuIjoiTWF4IHBheWxvYWQgc2l6ZSBpbiBieXRlcyBpcyBub3QgdmFsaWQiLCJtaW4tcGFjay1zaXplLXRvLXNlbmQiOiJNaW4gcGFja2V0IHNpemUgdG8gc2VuZCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZCI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2l6ZS10by1zZW5kLW1pbiI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwMCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuIjoiTWluIHBhY2tldCBzaXplIHRvIHNlbmQgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IChpbiBzZWMpIiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLCJjb21tYW5kLXBhdHRlcm4iOiJDb21tYW5kIGlzIG5vdCB2YWxpZCIscmVtb3ZlOiJSZW1vdmUgY29tbWFuZCJ9LHN0b3JhZ2U6IlN0b3JhZ2UiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gZmlsZSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWF4aW11bSBudW1iZXIgb2YgZmlsZXMiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtYmVyIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1heGltdW0gcmVjb3JkcyBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiUmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50IjoiTWF4IHJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJNYXggUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiRGF0YSBmb2xkZXIgcGF0aCIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZCI6IkRhdGEgZm9sZGVyIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhdGgiOiJTdG9yYWdlIHBhdGgiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJTdG9yYWdlIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS10eXBlIjoiU3RvcmFnZSB0eXBlIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJGaWxlIHN0b3JhZ2UiLCJtZW1vcnktc3RvcmFnZSI6Ik1lbW9yeSBzdG9yYWdlIixzcWxpdGU6IlNRTElURSJ9LCJyZXBvcnQtc3RyYXRlZ3kiOntsYWJlbDoiUmVwb3J0IHN0cmF0ZWd5Iiwib24tY2hhbmdlIjoiT24gdmFsdWUgY2hhbmdlIiwib24tcmVwb3J0LXBlcmlvZCI6Ik9uIHJlcG9ydCBwZXJpb2QiLCJvbi1jaGFuZ2Utb3ItcmVwb3J0LXBlcmlvZCI6Ik9uIHZhbHVlIGNoYW5nZSBvciByZXBvcnQgcGVyaW9kIiwicmVwb3J0LXBlcmlvZCI6IlJlcG9ydCBwZXJpb2QifSwic291cmNlLXR5cGUiOnttc2c6IkV4dHJhY3QgZnJvbSBtZXNzYWdlIix0b3BpYzoiRXh0cmFjdCBmcm9tIHRvcGljIixjb25zdDoiQ29uc3RhbnQiLGlkZW50aWZpZXI6IklkZW50aWZpZXIiLHBhdGg6IlBhdGgifSwid29ya2Vycy1zZXR0aW5ncyI6IldvcmtlcnMgc2V0dGluZ3MiLHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsZ2VuZXJhbDoiR2VuZXJhbCIsdGltZXNlcmllczoiVGltZSBzZXJpZXMiLGtleToiS2V5IixrZXlzOiJLZXlzIiwia2V5LXJlcXVpcmVkIjoiS2V5IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLWhvc3QiOiJQbGF0Zm9ybSBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBsYXRmb3JtIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIix0aW1lb3V0OiJUaW1lb3V0IChtcykiLCJ0aW1lb3V0LWVycm9yIjoiVGltZW91dCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsdHlwZToiVHlwZSIsInRvcGljLWZpbHRlciI6IlRvcGljIGZpbHRlciIsInRvcGljLXJlcXVpcmVkIjoiVG9waWMgZmlsdGVyIGlzIHJlcXVpcmVkLiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1jb25uZWN0aW9uIjoiVExTIENvbm5lY3Rpb24iLCJtYXN0ZXItY29ubmVjdGlvbnMiOiJNYXN0ZXIgQ29ubmVjdGlvbnMiLCJtZXRob2QtZmlsdGVyIjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1maWx0ZXItaGludCI6IlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgaW5jb21pbmcgUlBDIG1ldGhvZCBmcm9tIHBsYXRmb3JtLiIsIm1ldGhvZC1maWx0ZXItcmVxdWlyZWQiOiJNZXRob2QgZmlsdGVyIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIscW9zOnsiYXQtbW9zdC1vbmNlIjoiMCAtIEF0IG1vc3Qgb25jZSIsImF0LWxlYXN0LW9uY2UiOiIxIC0gQXQgbGVhc3Qgb25jZSIsImV4YWN0bHktb25jZSI6IjIgLSBFeGFjdGx5IG9uY2UifSwib2JqZWN0cy1jb3VudCI6Ik9iamVjdHMgY291bnQiLCJvYmplY3RzLWNvdW50LXJlcXVpcmVkIjoiT2JqZWN0cyBjb3VudCBpcyByZXF1aXJlZCIsIndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzIjoiV2FpdCBhZnRlciBmYWlsZWQgYXR0ZW1wdHMgKG1zKSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsdXNlcm5hbWU6IlVzZXJuYW1lIiwidXNlcm5hbWUtcmVxdWlyZWQiOiJVc2VybmFtZSBpcyByZXF1aXJlZC4iLCJ1bml0LWlkLXJlcXVpcmVkIjoiVW5pdCBJRCBpcyByZXF1aXJlZC4iLCJ3cml0ZS1jb2lsIjoiV3JpdGUgQ29pbCIsIndyaXRlLWNvaWxzIjoiV3JpdGUgQ29pbHMiLCJ3cml0ZS1yZWdpc3RlciI6IldyaXRlIFJlZ2lzdGVyIiwid3JpdGUtcmVnaXN0ZXJzIjoiV3JpdGUgUmVnaXN0ZXJzIixoaW50czp7Im1vZGJ1cy1tYXN0ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb25zIGZvciBjb25uZWN0aW5nIHRvIE1vZGJ1cyBzZXJ2ZXJzIGFuZCByZWFkaW5nIGRhdGEgZnJvbSB0aGVtLiIsIm1vZGJ1cy1zZXJ2ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yIHRoZSBNb2RidXMgc2VydmVyLCBzdG9yaW5nIGRhdGEgYW5kIHNlbmRpbmcgdXBkYXRlcyB0byB0aGUgcGxhdGZvcm0gd2hlbiBjaGFuZ2VzIG9jY3VyIG9yIGF0IGZpeGVkIGludGVydmFscy4iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBwbGF0Zm9ybSBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIHBsYXRmb3JtIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBwbGF0Zm9ybSBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBwbGF0Zm9ybSBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIHBsYXRmb3JtIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gcGxhdGZvcm0gc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIHRoZSBmb2xkZXIgdGhhdCB3aWxsIGNvbnRhaW4gZGF0YSAoUmVsYXRpdmUgb3IgQWJzb2x1dGUpIiwibG9nLWZvcm1hdCI6IkxvZyBtZXNzYWdlIGZvcm1hdCIsInJlbW90ZS1sb2ciOiJFbmFibGVzIHJlbW90ZSBsb2dnaW5nIGFuZCBsb2dzIHJlYWRpbmcgZnJvbSB0aGUgZ2F0ZXdheSIsImJhY2t1cC1jb3VudCI6IklmIGJhY2t1cCBjb3VudCBpcyA+IDAsIHdoZW4gYSByb2xsb3ZlciBpcyBkb25lLCBubyBtb3JlIHRoYW4gYmFja3VwIGNvdW50IGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkIixzdG9yYWdlOiJQcm92aWRlcyBjb25maWd1cmF0aW9uIGZvciBzYXZpbmcgaW5jb21pbmcgZGF0YSBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgcGxhdGZvcm0iLCJtYXgtZmlsZS1jb3VudCI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJOdW1iZXIgb2YgbWVzc2FnZXMgdG8gcmV0cmlldmUgZnJvbSB0aGUgc3RvcmFnZSBhbmQgc2VuZCB0byBwbGF0Zm9ybSIsIm1heC1yZWNvcmRzIjoiTWF4aW11bSBjb3VudCBvZiByZWNvcmRzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gb25lIGZpbGUiLCJyZWFkLXJlY29yZC1jb3VudCI6Ik51bWJlciBvZiBtZXNzYWdlcyB0byByZXRyaWV2ZSBmcm9tIHRoZSBzdG9yYWdlIGFuZCBzZW5kIHRvIHBsYXRmb3JtIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIG51bWJlciBvZiBkYXRhIGVudHJpZXMgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZGluZyB0byBwbGF0Zm9ybSIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgdGhlIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gbnVtYmVyIG9mIGRheXMgdGhhdCB0aGUgc3RvcmFnZSB3aWxsIHJldGFpbiBkYXRhIixjb21tYW5kczoiQ29tbWFuZHMgZm9yIGNvbGxlY3RpbmcgYWRkaXRpb25hbCBzdGF0aXN0aWMiLGF0dHJpYnV0ZToiU3RhdGlzdGljIHRlbGVtZXRyeSBrZXkiLHRpbWVvdXQ6IlRpbWVvdXQgZm9yIGNvbW1hbmQgZXhlY3V0aW5nIixjb21tYW5kOiJUaGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kIGV4ZWN1dGlvbiwgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGVsZW1ldHJ5IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiRW5hYmxlcyBtb25pdG9yIHRoZSBhY3Rpdml0eSBvZiBlYWNoIGNvbm5lY3RlZCBkZXZpY2UiLCJpbmFjdGl2aXR5LXRpbWVvdXQiOiJUaW1lIGFmdGVyIHdob3NlIHRoZSBnYXRld2F5IHdpbGwgZGlzY29ubmVjdCBkZXZpY2UiLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZGljaXR5IG9mIGRldmljZSBhY3Rpdml0eSBjaGVjayIsIm1pbmltYWwtcGFjay1kZWxheSI6IkRlbGF5IGJldHdlZW4gc2VuZGluZyBwYWNrcyBvZiBtZXNzYWdlcyAoRGVjcmVhc2luZyB0aGlzIHNldHRpbmcgcmVzdWx0cyBpbiBpbmNyZWFzZWQgQ1BVIHVzYWdlKSIscW9zOiJRdWFsaXR5IG9mIFNlcnZpY2UgaW4gTVFUVCBtZXNzYWdpbmcgKDAgLSBhdCBtb3N0IG9uY2UsIDEgLSBhdCBsZWFzdCBvbmNlKSIsInNlcnZlci1wb3J0IjoiTmV0d29yayBwb3J0IG9uIHdoaWNoIEdSUEMgc2VydmVyIHdpbGwgbGlzdGVuIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Ik1heGltdW0gdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGZvciBhIGtlZXBhbGl2ZSBwaW5nIHJlc3BvbnNlIGJlZm9yZSBjb25zaWRlcmluZyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMta2VlcC1hbGl2ZSI6IkR1cmF0aW9uIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgUlBDIGNhbGwuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6Ik1heGltdW0gbnVtYmVyIG9mIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHRoYXQgdGhlIHNlcnZlciBjYW4gc2VuZCB3aXRob3V0IHJlY2VpdmluZyBhbnkgZGF0YSBiZWZvcmUgaXQgY29uc2lkZXJzIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gZGF0YSBiZWluZyBzZW50IG9yIHJlY2VpdmVkLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiQWxsb3cgc2VydmVyIHRvIGtlZXAgdGhlIEdSUEMgY29ubmVjdGlvbiBhbGl2ZSBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSBSUEMgY2FsbHMuIiwicGF0aC1pbi1vcyI6IlBhdGggaW4gZ2F0ZXdheSBvcy4iLG1lbW9yeToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBpbi1tZW1vcnkgcXVldWUsIGl0IGlzIGEgZmFzdGVzdCBidXQgbm8gcGVyc2lzdGVuY2UgZ3VhcmFudGVlLiIsZmlsZToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHNlcGFyYXRlZCBmaWxlcyBhbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIixzcWxpdGU6IllvdXIgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBmaWxlIGJhc2VkIGRhdGFiYXNlLiBBbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIiwib3BjLXRpbWVvdXQiOiJUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgY29ubmVjdGluZyB0byBPUEMtVUEgc2VydmVyLiIsInNlY3VyaXR5LXBvbGljeSI6IlNlY3VyaXR5IFBvbGljeSBkZWZpbmVzIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHRvIGJlIGFwcGxpZWQuIiwic2Nhbi1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlc2NhbiB0aGUgc2VydmVyLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJQZXJpb2QgdG8gY2hlY2sgdGhlIHN1YnNjcmlwdGlvbnMgaW4gdGhlIE9QQy1VQSBzZXJ2ZXIuIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IklmIHRydWUgLSB0aGUgZ2F0ZXdheSB3aWxsIHN1YnNjcmliZSB0byBpbnRlcmVzdGluZyBub2RlcyBhbmQgd2FpdCBmb3IgZGF0YSB1cGRhdGUgYW5kIGlmIGZhbHNlIC0gdGhlIGdhdGV3YXkgd2lsbCByZXNjYW4gT1BDLVVBIHNlcnZlciBldmVyeSBzY2FuUGVyaW9kSW5NaWxsaXMuIiwic2hvdy1tYXAiOiJTaG93IG5vZGVzIG9uIHNjYW5uaW5nLiIsIm1ldGhvZC1uYW1lIjoiTmFtZSBvZiBtZXRob2Qgb24gT1BDLVVBIHNlcnZlci4iLGFyZ3VtZW50czoiQXJndW1lbnRzIGZvciB0aGUgbWV0aG9kICh3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGFyZ3VtZW50cyBmcm9tIHRoZSBSUEMgcmVxdWVzdCkuIiwibWluLXBhY2stc2l6ZS10by1zZW5kIjoiTWluaW11bSBwYWNrYWdlIHNpemUgZm9yIHNlbmRpbmcuIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcyI6Ik1heGltdW0gcGFja2FnZSBzaXplIGluIGJ5dGVzIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlYWQgZGF0YSBmcm9tIG5vZGVzLiIsbW9kYnVzOnsiZnJhbWVyLXR5cGUiOiJUeXBlIG9mIGEgZnJhbWVyIChTb2NrZXQsIFJUVSwgb3IgQVNDSUkpLCBpZiBuZWVkZWQuIixob3N0OiJIb3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIE1vZGJ1cyBzZXJ2ZXIuIixwb3J0OiJNb2RidXMgc2VydmVyIHBvcnQgZm9yIGNvbm5lY3Rpb24uIiwidW5pdC1pZCI6Ik1vZGJ1cyBzbGF2ZSBJRC4iLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKGluIHNlY29uZHMpIGZvciB0aGUgTW9kYnVzIHNlcnZlci4iLCJieXRlLW9yZGVyIjoiQnl0ZSBvcmRlciBmb3IgcmVhZGluZyBkYXRhLiIsIndvcmQtb3JkZXIiOiJXb3JkIG9yZGVyIHdoZW4gcmVhZGluZyBtdWx0aXBsZSByZWdpc3RlcnMuIixyZXRyaWVzOiJSZXRyeWluZyBkYXRhIHRyYW5zbWlzc2lvbiB0byB0aGUgbWFzdGVyLiBBY2NlcHRhYmxlIHZhbHVlczogdHJ1ZSBvciBmYWxzZS4iLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgdGhlIGRhdGEgaXMgZW1wdHkuIiwicmV0cmllcy1vbi1pbnZhbGlkIjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgaXQgZmFpbHMuIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIGNoZWNrIGF0dHJpYnV0ZXMgYW5kIHRlbGVtZXRyeSBvbiB0aGUgc2xhdmUuIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgbWFzdGVyLiIsImNvbm5lY3QtYXR0ZW1wdC1jb3VudCI6IlRoZSBudW1iZXIgb2YgY29ubmVjdGlvbiBhdHRlbXB0cyBtYWRlIHRocm91Z2ggdGhlIGdhdGV3YXkuIiwid2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHMiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIGRhdGEgdG8gdGhlIG1hc3Rlci4iLCJzZXJpYWwtcG9ydCI6IlNlcmlhbCBwb3J0IGZvciBjb25uZWN0aW9uLiIsYmF1ZHJhdGU6IkJhdWQgcmF0ZSBmb3IgdGhlIHNlcmlhbCBkZXZpY2UuIixzdG9wYml0czoiVGhlIG51bWJlciBvZiBzdG9wIGJpdHMgc2VudCBhZnRlciBlYWNoIGNoYXJhY3RlciBpbiBhIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgYnl0ZS4iLGJ5dGVzaXplOiJUaGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBieXRlIG9mIHNlcmlhbCBkYXRhLiBUaGlzIGNhbiBiZSBvbmUgb2YgNSwgNiwgNywgb3IgOC4iLHBhcml0eToiVGhlIHR5cGUgb2YgY2hlY2tzdW0gdXNlZCB0byB2ZXJpZnkgZGF0YSBpbnRlZ3JpdHkuIE9wdGlvbnM6IChFKXZlbiwgKE8pZGQsIChOKW9uZS4iLHN0cmljdDoiVXNlIGludGVyLWNoYXJhY3RlciB0aW1lb3V0IGZvciBiYXVkcmF0ZXMg4omkIDE5MjAwLiIsIm9iamVjdHMtY291bnQiOiJEZXBlbmRzIG9uIHRoZSBzZWxlY3RlZCB0eXBlLiIsYWRkcmVzczoiUmVnaXN0ZXIgYWRkcmVzcyB0byB2ZXJpZnkuIixrZXk6IktleSB0byBiZSB1c2VkIGFzIHRoZSBhdHRyaWJ1dGUga2V5IGZvciB0aGUgcGxhdGZvcm0gaW5zdGFuY2UuIiwiZGF0YS1rZXlzIjoiRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZnVuY3Rpb24gY29kZXMgYW5kIGRhdGEgdHlwZXMgY2xpY2sgb24gaGVscCBpY29uIixtb2RpZmllcjoiVGhlIHJldHJpZXZlZCB2YWx1ZSB3aWxsIGJlIGFkanVzdGVkIChieSBtdWx0aXBseWluZyBvciBkaXZpZGluZyBpdCkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtb2RpZmllciB2YWx1ZS4ifX19fSxSbz17ImFkZC1lbnRyeSI6Itil2LbYp9mB2Kkg2KrZg9mI2YrZhiIsYWR2YW5jZWQ6ItmF2KrZgtiv2YUiLCJjaGVja2luZy1kZXZpY2UtYWN0aXZpdHkiOiLZgdit2LUg2YbYtNin2Lcg2KfZhNis2YfYp9iyIixjb21tYW5kOiLYo9mI2KfZhdixIERvY2tlciIsImNvbW1hbmQtY29waWVkLW1lc3NhZ2UiOiLYqtmFINmG2LPYriDYo9mF2LEgRG9ja2VyINil2YTZiSDYp9mE2K3Yp9mB2LjYqSIsY29uZmlndXJhdGlvbjoi2KfZhNiq2YPZiNmK2YYiLCJjb25uZWN0b3ItYWRkIjoi2KXYttin2YHYqSDZhdmI2LXZhCDYrNiv2YrYryIsImNvbm5lY3Rvci1lbmFibGVkIjoi2KrZhdmD2YrZhiDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZSI6Itin2LPZhSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLCJjb25uZWN0b3ItdHlwZSI6ItmG2YjYuSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6ItmG2YjYuSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLGNvbm5lY3RvcnM6Itin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLWNvbmZpZyI6Itiq2YPZiNmK2YbYp9iqINin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLXRhYmxlLWVuYWJsZWQiOiLZhdmF2YPZkdmGIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi2KfZhNin2LPZhSIsImNvbm5lY3RvcnMtdGFibGUtdHlwZSI6Itin2YTZhtmI2LkiLCJjb25uZWN0b3JzLXRhYmxlLXN0YXR1cyI6Itin2YTYrdin2YTYqSIsImNvbm5lY3RvcnMtdGFibGUtYWN0aW9ucyI6Itin2YTYpdis2LHYp9ih2KfYqiIsImNvbm5lY3RvcnMtdGFibGUta2V5Ijoi2KfZhNmF2YHYqtin2K0iLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoi2KfZhNmB2KbYqSIsInJwYy1jb21tYW5kLXNlbmQiOiLYpdix2LPYp9mEIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi2KfZhNin2LPYqtis2KfYqNipIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLYqtit2LHZitixINin2YTZhdi52YTZhdin2KoiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLYqtmD2YjZitmGINi52KfZhSIsImRvY2tlci1sYWJlbCI6Itin2LPYqtiu2K/ZhSDYp9mE2KrYudmE2YrZhdin2Kog2KfZhNiq2KfZhNmK2Kkg2YTYqti02LrZitmEIElvVCBHYXRld2F5INmB2YogRG9ja2VyIGNvbXBvc2Ug2YXYuSDYqNmK2KfZhtin2Kog2KfYudiq2YXYp9ivINmE2YTYrNmH2KfYsiDYp9mE2YXYrdiv2K8iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi2KfYs9iq2K7Yr9mFINin2YTYqti52YTZitmF2KfYqiDZhNiq2YbYstmK2YQg2YjYqtir2KjZitiqINmI2KXYudiv2KfYryBkb2NrZXIgY29tcG9zZSIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLYqtmG2LLZitmEIGRvY2tlci1jb21wb3NlLnltbCDZhNio2YjYp9io2KrZgyIsImxhdW5jaC1nYXRld2F5Ijoi2KrYtNi62YrZhCDYp9mE2KjZiNin2KjYqSIsImxhdW5jaC1kb2NrZXItY29tcG9zZSI6Itio2K/YoSDYqti02LrZitmEINin2YTYqNmI2KfYqNipINio2KfYs9iq2K7Yr9in2YUg2KfZhNij2YXYsSDYp9mE2KrYp9mE2Yog2YHZiiDYp9mE2LfYsdmB2YrYqSDZhdmGINin2YTZhdis2YTYryDYp9mE2LDZiiDZitit2KrZiNmKINi52YTZiSDZhdmE2YEgZG9ja2VyLWNvbXBvc2UueW1sIiwiY3JlYXRlLW5ldy1nYXRld2F5Ijoi2KXZhti02KfYoSDYqNmI2KfYqNipINis2K/Zitiv2KkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6ItmH2YQg2KPZhtiqINmF2KrYo9mD2K8g2KPZhtmDINiq2LHZitivINil2YbYtNin2KEg2KjZiNin2KjYqSDYrNiv2YrYr9ipINio2KfYs9mFOiAne3tnYXRld2F5TmFtZX19J9ifIiwiY3JlYXRlZC10aW1lIjoi2YjZgtiqINin2YTYpdmG2LTYp9ihIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6Itiz2YrYqtmFINit2LDZgSDYp9mE2KrZg9mI2YrZhtin2KoiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6ItmK2YXZg9mGINiq2LnYt9mK2YQg2KfZhNiq2YPZiNmK2YYg2LnZhiDYqNmP2LnYryDZgdmC2Lcg2KXYsNinINmD2KfZhiDZh9mG2KfZgyDZiNi12YjZhCDYrNiz2K/ZiiDYpdmE2Ykg2KfZhNio2YjYp9io2KkuINiz2KrYqtmFINit2LDZgSDYrNmF2YrYuSDYp9mE2KrZg9mI2YrZhtin2Kog2KfZhNiz2KfYqNmC2KkuPGJyPjxicj4gXG4g2YTYqti52LfZitmEINin2YTYqtmD2YjZitmG2Iwg2KPYr9iu2YQg2KfYs9mFINin2YTYqNmI2KfYqNipINij2K/Zhtin2YciLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQiOiLYp9iz2YUg2KfZhNio2YjYp9io2KkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNio2YjYp9io2Kkg2KXZhNiy2KfZhdmKIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLYpdmK2YLYp9mBINin2YTYqti02LrZitmEIixkZWxldGU6Itit2LDZgSDYp9mE2KrZg9mI2YrZhiIsImRvd25sb2FkLXRpcCI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZHJvcC1maWxlIjoi2KPZgdmE2YIg2KfZhNmF2YTZgSDZh9mG2Kcg2KPZiCIsZ2F0ZXdheToi2KfZhNio2YjYp9io2KkiLCJnYXRld2F5LWV4aXN0cyI6Itin2YTYrNmH2KfYsiDYqNmG2YHYsyDYp9mE2KfYs9mFINmF2YjYrNmI2K8g2KjYp9mE2YHYudmELiIsImdhdGV3YXktbmFtZSI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSDZhdi32YTZiNioLiIsImdhdGV3YXktc2F2ZWQiOiLYqtmFINit2YHYuCDYqtmD2YjZitmGINin2YTYqNmI2KfYqNipINio2YbYrNin2K0uIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqNipIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi2YXZh9mE2Kkg2KfZhNio2YLYp9ihINi52YTZiSDZgtmK2K8g2KfZhNit2YrYp9ipINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6ItmF2YfZhNipINin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K3YqSIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqCIsImdycGMta2VlcC1hbGl2ZS1taW4iOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINij2YLZhCDZhdmGIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDZhdi32YTZiNioIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmE2YjZgtiqINio2YrZhiDYp9mE2KjZitmG2LrYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2KogKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNio2YrZhti62KfYqiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQgKNio2KfZhNir2YjYp9mG2YopIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQg2YXYt9mE2YjYqNipIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiLZgdiq2LHYqSDZgdit2LUg2KfZhNiu2YXZiNmEINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoi2YHYqtix2Kkg2YHYrdi1INin2YTYrtmF2YjZhCDYutmK2LEg2LXYp9mE2K3YqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEICjYqNin2YTYq9mI2KfZhtmKKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEINmF2LfZhNmI2KjYqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6ItmB2KrYsdipINin2YTYrtmF2YjZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiLZgdiq2LHYqSDYp9mE2K7ZhdmI2YQg2LrZitixINi12KfZhNit2KkiLCJqc29uLXBhcnNlIjoiSlNPTiDYutmK2LEg2LXYp9mE2K0uIiwianNvbi1yZXF1aXJlZCI6Itin2YTYrdmC2YQg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINmB2KfYsdi62YvYpy4iLGxvZ3M6e2xvZ3M6Itin2YTYs9is2YTYp9iqIixkYXlzOiLYo9mK2KfZhSIsaG91cnM6Itiz2KfYudin2KoiLG1pbnV0ZXM6Itiv2YLYp9im2YIiLHNlY29uZHM6Itir2YjYp9mG2YoiLCJkYXRlLWZvcm1hdCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4g2YXYt9mE2YjYqCIsImxvZy1mb3JtYXQiOiLYqtmG2LPZitmCINin2YTYs9is2YQiLCJsb2ctdHlwZSI6ItmG2YjYuSDYp9mE2LPYrNmEIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiz2KzZhCDZhdi32YTZiNioIixyZW1vdGU6Itin2YTYqtiz2KzZitmEINi52YYg2KjZj9i52K8iLCJyZW1vdGUtbG9ncyI6Itin2YTYs9is2YTYp9iqINi52YYg2KjZj9i52K8iLGxvY2FsOiLYp9mE2KrYs9is2YrZhCDYp9mE2YXYrdmE2YoiLGxldmVsOiLZhdiz2KrZiNmJINin2YTYs9is2YQiLCJmaWxlLXBhdGgiOiLZhdiz2KfYsSDYp9mE2YXZhNmBIiwiZmlsZS1wYXRoLXJlcXVpcmVkIjoi2YXYs9in2LEg2KfZhNmF2YTZgSDZhdi32YTZiNioIiwic2F2aW5nLXBlcmlvZCI6ItmB2KrYsdipINit2YHYuCDYp9mE2LPYrNmEIiwic2F2aW5nLXBlcmlvZC1taW4iOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhdi32YTZiNio2KkiLCJiYWNrdXAtY291bnQiOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSIsImJhY2t1cC1jb3VudC1taW4iOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDZhNinINmK2YXZg9mGINij2YYg2YrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6Iti52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipINmF2LfZhNmI2KgifSwibWluLXBhY2stc2VuZC1kZWxheSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2YXYt9mE2YjYqCIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoi2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2KPZgtmEINmF2YYgMCIsIm5vLWNvbm5lY3RvcnMiOiLZhNinINiq2YjYrNivINmF2YjYtdmE2KfYqiIsIm5vLWRhdGEiOiLZhNinINiq2YjYrNivINiq2YPZiNmK2YbYp9iqIiwibm8tZ2F0ZXdheS1mb3VuZCI6ItmE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KjZiNin2KjYqS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiJ3t7aXRlbX19JyDYutmK2LEg2YXZiNis2YjYry4iLCJwYXRoLWxvZ3MiOiLZhdiz2KfYsSDYpdmE2Ykg2YXZhNmB2KfYqiDYp9mE2LPYrNmEIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi2KfZhNmF2LPYp9ixINmF2LfZhNmI2KguIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2KjZgtin2KEg2LnZhNmJINin2YTYrdmK2KfYqSDZitiz2YXYrSDYqNiv2YjZhiDZhdmD2KfZhNmF2KfYqiIscmVtb3RlOiLYp9mE2KrZg9mI2YrZhiDYudmGINio2Y/YudivIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiLZhdiz2KrZiNmJINin2YTYqtiz2KzZitmEIiwicmVtb3ZlLWVudHJ5Ijoi2KXYstin2YTYqSDYp9mE2KrZg9mI2YrZhiIsInJlbW90ZS1zaGVsbCI6ItmC2LTYsdipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Itin2YTYqtmD2YjZitmGINi52YYg2KjZj9i52K8iLG90aGVyOiLYotiu2LEiLCJzYXZlLXRpcCI6Itit2YHYuCDZhdmE2YEg2KfZhNiq2YPZiNmK2YYiLCJzZWN1cml0eS10eXBlIjoi2YbZiNi5INin2YTYo9mF2KfZhiIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Itix2YXYsiDYp9mE2YjYtdmI2YQiLCJ1c2VybmFtZS1wYXNzd29yZCI6Itin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINmI2YPZhNmF2Kkg2KfZhNmF2LHZiNixIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDYsdmF2LIg2KfZhNmI2LXZiNmEIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsg2KfZhNmF2YHYqtin2K0g2KfZhNiu2KfYtSJ9LCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYrtin2K/ZhSIsc3RhdGlzdGljczp7c3RhdGlzdGljOiLYpdit2LXYp9im2YrYqSIsc3RhdGlzdGljczoi2KfZhNil2K3Ytdin2KbZitin2KoiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLZhNinINiq2KrZiNmB2LEg2KXYrdi12KfYptmK2KfYqiIsY29tbWFuZHM6Itin2YTYo9mI2KfZhdixIiwic2VuZC1wZXJpb2QiOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqICjYqNin2YTYq9mI2KfZhtmKKSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDZhdi32YTZiNio2KkiLCJzZW5kLXBlcmlvZC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDYo9mC2YQg2YXZhiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqINi62YrYsSDYtdin2YTYrdipIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiAo2KjYp9mE2KvZiNin2YbZiikiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINmF2LfZhNmI2KjYqSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiDYo9mC2YQg2YXZhiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINi62YrYsSDYtdin2YTYrdipIixhZGQ6Itil2LbYp9mB2Kkg2KPZhdixIix0aW1lb3V0OiLYp9mE2YXZh9mE2KkiLCJ0aW1lb3V0LW1zIjoi2KfZhNmF2YfZhNipICjYqNin2YTZhdmE2YTZiiDYq9in2YbZitipKSIsInRpbWVvdXQtcmVxdWlyZWQiOiLYp9mE2YXZh9mE2Kkg2YXYt9mE2YjYqNipIiwidGltZW91dC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KfZhNmF2YfZhNipINij2YLZhCDZhdmGIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiLYp9mE2YXZh9mE2Kkg2LrZitixINi12KfZhNit2KkiLCJhdHRyaWJ1dGUtbmFtZSI6Itin2LPZhSDYp9mE2LPZhdipIiwiYXR0cmlidXRlLW5hbWUtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNiz2YXYqSDZhdi32YTZiNioIixjb21tYW5kOiLYp9mE2KPZhdixIiwiY29tbWFuZC1yZXF1aXJlZCI6Itin2YTYo9mF2LEg2YXYt9mE2YjYqCIsImNvbW1hbmQtcGF0dGVybiI6Itin2YTYo9mF2LEg2LrZitixINi12KfZhNitIixyZW1vdmU6Itil2LLYp9mE2Kkg2KfZhNij2YXYsSJ9LHN0b3JhZ2U6Itin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi2KfZhNiz2KzZhNin2Kog2KfZhNmC2LXZiNmJINmB2Yog2KfZhNmF2YTZgSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTZhdmE2YHYp9iqIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmH2YggMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi2KfZhNi52K/YryDYutmK2LEg2LXYp9mE2K0uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLYp9mE2LnYr9ivINmF2LfZhNmI2KguIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Itin2YTYs9is2YTYp9iqINin2YTZgti12YjZiSDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLYp9mE2LPYrNmE2KfYqiDYp9mE2YLYtdmI2Ykg2YXYt9mE2YjYqNipLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZhdi32YTZiNioLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50Ijoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINmC2LHYp9ih2Kkg2KfZhNiz2KzZhNin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNi52K/YryDYp9mE2LPYrNmE2KfYqiDZh9mIIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi2LnYr9ivINin2YTZgtix2KfYodipINin2YTZgti12YjZiSDZhdi32YTZiNioLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6ItmF2LPYp9ixINmF2KzZhNivINin2YTYqNmK2KfZhtin2KoiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDZhdis2YTYryDYp9mE2KjZitin2YbYp9iqINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYWNrLXNpemUiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYrdis2YUg2K3YstmF2Kkg2KfZhNit2K/YqyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZh9mIIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi2KfZhNit2KzZhSDYp9mE2KPZgti12Ykg2YTYrdiy2YXYqSDYp9mE2K3Yr9irINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYXRoIjoi2YXYs9in2LEg2KfZhNiq2K7YstmK2YYiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDYp9mE2KrYrtiy2YrZhiDZhdi32YTZiNioLiIsInN0b3JhZ2UtdHlwZSI6ItmG2YjYuSDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2YXZhNmB2KfYqiIsIm1lbW9yeS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2LDYp9mD2LHYqSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoi2KvZitmG2LrYstio2YjYsdivIixnZW5lcmFsOiLYudin2YUiLCJ0aGluZ3Nib2FyZC1ob3N0Ijoi2YXYttmK2YEg2KvZitmG2LrYstio2YjYsdivIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Itin2YTZhdi22YrZgSDZhdi32YTZiNioLiIsInRoaW5nc2JvYXJkLXBvcnQiOiLZhdmG2YHYsCDYq9mK2YbYutiy2KjZiNix2K8iLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6Itin2YTZhdmG2YHYsCDYutmK2LEg2LXYp9mE2K0uIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Itin2YTZhdmG2YHYsCDZhdi32YTZiNioLiIsdGlkeToi2KrYsdiq2YrYqCIsInRpZHktdGlwIjoi2KrYsdiq2YrYqCDYqtmD2YjZitmGIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiLYqtmD2YjZitmGINmF2YjYtdmEIHt7dHlwZU5hbWV9fSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoi2KfZhNmF2LPYp9ixINil2YTZiSDYtNmH2KfYr9ipIENBINi52YTZiSDYp9mE2KjZiNin2KjYqSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2LTZh9in2K/YqSDYp9mE2LnZhdmK2YQg2LnZhNmJINin2YTYqNmI2KfYqNipIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi2YrYrNioINiq2K3Yr9mK2K8g2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoi2KfZhNix2YLZhSDYutmK2LEg2LXYp9mE2K0uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwg2KfZhNix2LPYp9im2YQg2KjYp9mE2KPZitin2YUiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6ItmK2KzYqCDYqtit2K/ZitivIFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYo9mK2KfZhS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXBhdHRlcm4iOiLYp9mE2LHZgtmFINi62YrYsSDYtdin2YTYrS4iLCJtcXR0LXFvcyI6Itis2YjYr9ipINin2YTYrtiv2YXYqSAoUW9TKSIsIm1xdHQtcW9zLXJlcXVpcmVkIjoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipIChRb1MpINmF2LfZhNmI2KjYqSIsIm1xdHQtcW9zLXJhbmdlIjoi2KrYqtix2KfZiNitINmC2YrZhSDYrNmI2K/YqSDYp9mE2K7Yr9mF2KkgKFFvUykg2YXZhiAwINil2YTZiSAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdmB2KrYp9itINin2YTYrtin2LUg2LnZhNmJINin2YTYqNmI2KfYqNipIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLYqtio2K/ZitmEINmI2LbYuSDZhdmE2KEg2KfZhNi02KfYtNipIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiLYqtmD2YjZitmGIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6Itil2LbYp9mB2Kkv2KrYrdiv2YrYqyDYqtmD2YjZitmGIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2YPZiNmK2YYg2YjYpdiv2KfYsdipINin2YTYqNmI2KfYqNipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtc2hlbGwiOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2K3Zg9mFINin2YTYqNi52YrYryDZgdmKINmG2LjYp9mFINin2YTYqti02LrZitmEINmF2Lkg2KfZhNio2YjYp9io2Kkg2YXZhiDYudmG2LXYsSDZiNin2KzZh9ipINin2YTZhdiz2KrYrtiv2YUg2YLYtNix2Kkg2LnZhiDYqNmP2LnYryIsaG9zdDoi2KfYs9mFINin2YTZhdi22YrZgSDYo9mIINi52YbZiNin2YYgSVAg2YTYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLHBvcnQ6ItmF2YbZgdiwINiu2K/ZhdipIE1RVFQg2LnZhNmJINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIsdG9rZW46Itix2YXYsiDYp9mE2YjYtdmI2YQg2YTZhNio2YjYp9io2Kkg2YXZhiDYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLCJjbGllbnQtaWQiOiLZhdi52LHZgSDYudmF2YrZhCBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIix1c2VybmFtZToi2KfYs9mFINin2YTZhdiz2KrYrtiv2YUgTVFUVCDZhNmE2KjZiNin2KjYqSDZhdmGINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIscGFzc3dvcmQ6ItmD2YTZhdipINin2YTZhdix2YjYsSBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIiwiY2EtY2VydCI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2YXZhNmBINi02YfYp9iv2KkgQ0EiLCJkYXRlLWZvcm0iOiLYqtmG2LPZitmCINin2YTYqtin2LHZitiuINmB2Yog2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwiZGF0YS1mb2xkZXIiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdis2YTYryDYp9mE2LDZiiDYs9mK2K3YqtmI2Yog2LnZhNmJINin2YTYqNmK2KfZhtin2KogKNmG2LPYqNmKINij2Ygg2YXYt9mE2YIpIiwibG9nLWZvcm1hdCI6Itiq2YbYs9mK2YIg2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwicmVtb3RlLWxvZyI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDYp9mE2KrYs9is2YrZhCDYp9mE2KjYudmK2K8g2YjZgtix2KfYodipINin2YTYs9is2YTYp9iqINmF2YYg2KfZhNio2YjYp9io2KkiLCJiYWNrdXAtY291bnQiOiLYpdiw2Kcg2YPYp9mGINi52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipID4gMNiMINi52YbYryDYudmF2YTZitipINiq2K/ZiNmK2LHYjCDZhNinINmK2KrZhSDYp9mE2KfYrdiq2YHYp9i4INio2KPZg9ir2LEg2YXZhiDYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDYp9mE2YXYrdiv2K/YqSAtINmK2KrZhSDYrdiw2YEg2KfZhNij2YLYr9mFIixzdG9yYWdlOiLZitmI2YHYsSDYqtmD2YjZitmG2YvYpyDZhNit2YHYuCDYp9mE2KjZitin2YbYp9iqINin2YTZiNin2LHYr9ipINmC2KjZhCDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KfZhNmF2YbYtdipIiwibWF4LWZpbGUtY291bnQiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNi52K/YryDYp9mE2YXZhNmB2KfYqiDYp9mE2KrZiiDYs9mK2KrZhSDYpdmG2LTYp9ik2YfYpyIsIm1heC1yZWFkLWNvdW50Ijoi2LnYr9ivINin2YTYsdiz2KfYptmEINmE2YTYrdi12YjZhCDYudmE2YrZh9inINmF2YYg2KfZhNiq2K7YstmK2YYg2YjYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KvZitmG2LrYstio2YjYsdivIiwibWF4LXJlY29yZHMiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNmE2LPYrNmE2KfYqiDYp9mE2KrZiiDYs9iq2K7YstmGINmB2Yog2YXZhNmBINmI2KfYrdivIiwicmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2KfZhNix2LPYp9im2YQg2YTZhNit2LXZiNmEINi52YTZitmH2Kcg2YXZhiDYp9mE2KrYrtiy2YrZhiDZiNil2LHYs9in2YTZh9inINil2YTZiSDYq9mK2YbYutiy2KjZiNix2K8iLCJtYXgtcmVjb3Jkcy1jb3VudCI6Itin2YTYudiv2K8g2KfZhNij2YLYtdmJINmE2YTYqNmK2KfZhtin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiDZgtio2YQg2KXYsdiz2KfZhNmH2Kcg2KXZhNmJINir2YrZhti62LLYqNmI2LHYryIsInR0bC1jaGVjay1ob3VyIjoi2YPZhSDZhdix2Kkg2LPZitiq2K3ZgtmCINin2YTYqNmI2KfYqNipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDYp9mE2YLYr9mK2YXYqSIsInR0bC1tZXNzYWdlcy1kYXkiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNij2YrYp9mFINin2YTYqtmKINiz2KrYrdiq2YHYuCDZgdmK2YfYpyDYp9mE2KrYrtiy2YrZhiDYqNin2YTYqNmK2KfZhtin2KoiLGNvbW1hbmRzOiLYp9mE2KPZiNin2YXYsSDZhNis2YXYuSDYp9mE2KXYrdi12KfYptmK2KfYqiDYp9mE2KXYttin2YHZitipIixhdHRyaWJ1dGU6ItmF2YHYqtin2K0g2KrZhNmC2Yog2KfZhNil2K3Ytdin2KbZitin2KoiLHRpbWVvdXQ6ItmF2YfZhNipINiy2YXZhtmK2Kkg2YTYqtmG2YHZitiwINin2YTYo9mF2LEiLGNvbW1hbmQ6Itiz2YrYqtmFINin2LPYqtiu2K/Yp9mFINmG2KrZitis2Kkg2KrZhtmB2YrYsCDYp9mE2KPZhdixINmD2YLZitmF2Kkg2YTYqtmE2YLZiiDYp9mE2KXYrdi12KfYptmK2KfYqiIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDZhdix2KfZgtio2Kkg2YbYtNin2Lcg2YPZhCDYrNmH2KfYsiDZhdiq2LXZhCIsImluYWN0aXZpdHktdGltZW91dCI6Itin2YTZiNmC2Kog2KjYudivINin2YTYsNmKINiz2KrZgdi12YQg2KfZhNio2YjYp9io2Kkg2KfZhNis2YfYp9iyIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLYqtmD2LHYp9ixINmB2K3YtSDZhti02KfYtyDYp9mE2KzZh9in2LIiLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLYp9mE2KrYo9iu2YrYsSDYqNmK2YYg2KXYsdiz2KfZhCDYrdiy2YUg2KfZhNix2LPYp9im2YQgKNmK2KTYr9mKINiq2YLZhNmK2YQg2YfYsNinINin2YTYpdi52K/Yp9ivINil2YTZiSDYstmK2KfYr9ipINin2LPYqtiu2K/Yp9mFINmI2K3Yr9ipINin2YTZhdi52KfZhNis2Kkg2KfZhNmF2LHZg9iy2YrYqSkiLHFvczoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipINmB2Yog2LHYs9in2KbZhCBNUVRUICgwIC0g2LnZhNmJINin2YTYo9mD2KvYsSDZhdix2Kkg2YjYp9it2K/YqdiMIDEgLSDYudmE2Ykg2KfZhNij2YLZhCDZhdix2Kkg2YjYp9it2K/YqSkiLCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYtNio2YPYqSDYp9mE2LDZiiDYs9mK2LPYqtmF2Lkg2YHZitmHINiu2KfYr9mFIEdSUEMg2YTZhNin2LPYqtmB2LPYp9ix2KfYqiDYp9mE2YjYp9ix2K/YqS4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNmE2YjZgtiqINin2YTYsNmKINmK2KzYqCDYo9mGINmK2YbYqti42LHZhyDYp9mE2K7Yp9iv2YUg2YTYp9iz2KrYrNin2KjYqSDYsdiz2KfZhNipINin2YTYrdmB2KfYuCDYudmE2Ykg2KfZhNin2KrYtdin2YQg2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTZhdiv2Kkg2KjZitmGINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTZhdiq2LnYp9mC2KjYqSDYudmG2K8g2LnYr9mFINmI2KzZiNivINin2LPYqtiv2LnYp9ihIFJQQyDZhti02LcuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTYqtmKINmK2YXZg9mGINmE2YTYrtin2K/ZhSDYpdix2LPYp9mE2YfYpyDYr9mI2YYg2KrZhNmC2Yog2KPZiiDYqNmK2KfZhtin2Kog2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINi52YbYryDYudiv2YUg2KXYsdiz2KfZhCDYo9mIINin2LPYqtmE2KfZhSDYqNmK2KfZhtin2KouIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2LPZhdin2K0g2YTZhNiu2KfYr9mFINio2KXYqNmC2KfYoSDYp9iq2LXYp9mEIEdSUEMg2K3ZitmL2Kcg2K3YqtmJINi52YbYr9mF2Kcg2YTYpyDYqtmD2YjZhiDZh9mG2KfZgyDYp9iz2KrYr9i52KfYodin2KogUlBDINmG2LTYt9ipLiJ9fSxWbz17ImFkZC1lbnRyeSI6IkFmZWdpciBjb25maWd1cmFjacOzIiwiY29ubmVjdG9yLWFkZCI6IkFmZWdpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJDYWwgbm9tIGNvbmVjdG9yLiIsImNvbm5lY3Rvci10eXBlIjoiVGlwdXMgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNhbCB0aXB1cyBjb25lY3Rvci4iLGNvbm5lY3RvcnM6IkNvbmZpZ3VyYWNpw7MgZGUgY29uZWN0b3JzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXIgdW4gZ2F0ZXdheSBub3UiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkNyZWFyIHVuIG5vdSBnYXRld2F5IGFtYiBlbCBub206ICd7e2dhdGV3YXlOYW1lfX0nPyIsZGVsZXRlOiJFc2JvcnJhciBjb25maWd1cmFjacOzIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FycmVnYXIgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkphIGV4aXN0ZWl4IHVuIGRpc3Bvc2l0aXUgYW1iIGVsIG1hdGVpeCBub20uIiwiZ2F0ZXdheS1uYW1lIjoiTm9tIGRlIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJDYWwgdW4gbm9tIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7MgZGUgZ2F0ZXdheSBncmF2YWRhIHNhdGlzZmFjdMOycmlhbWVudC4iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6BsaWQuIiwianNvbi1yZXF1aXJlZCI6IkVsIGNhbXAgbm8gcG90IHNlciBidWl0LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBoaSBoYSBjb25lY3RvcnMiLCJuby1kYXRhIjoiTm8gaGkgaGEgY29uZmlndXJhY2lvbnMiLCJuby1nYXRld2F5LWZvdW5kIjoiTm8gcydoYSB0cm9iYXQgY2FwIGdhdGV3YXkuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vIHRyb2JhdC4iLCJwYXRoLWxvZ3MiOiJSdXRhIGFscyBmaXR4ZXJzIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IkNhbCBydXRhLiIscmVtb3RlOiJDb25maWd1cmFjacOzIHJlbW90YSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTml2ZWwgZGUgbG9nZ2luZyIsInJlbW92ZS1lbnRyeSI6IkVzYm9ycmFyIGNvbmZpZ3VyYWNpw7MiLCJzYXZlLXRpcCI6IkdyYXZhciBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIsInNlY3VyaXR5LXR5cGUiOiJUaXB1cyBkZSBzZWd1cmV0YXQiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkJ2FjY8OpcyIsdGxzOiJUTFMifSxzdG9yYWdlOiJHcmFiYWNpw7MiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJOw7ptZXJvIG3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZml0eGVyIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoHhpbSBkZSBmaXR4ZXJzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiRWwgbsO6bWVybyBtw61uaW0gw6lzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiQ2FsIG7Dum1lcm8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZWwgbWFnYXR6ZW0iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltIMOpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1pZGEgbcOgeGltIGRlIGVzZGV2ZW5pbWVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbSDDqXMgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6BsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhdGgiOiJSdXRhIGRlIG1hZ2F0emVtIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiQ2FsIHJ1dGEgZGUgbWFnYXR6ZW0uIiwic3RvcmFnZS10eXBlIjoiVGlwdXMgZGUgbWFnYXR6ZW0iLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik1hZ2F0emVtIGZpdHhlciIsIm1lbW9yeS1zdG9yYWdlIjoiTWFnYXR6ZW0gZW4gbWVtb3JpYSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IkNhbCBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQb3J0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJFbCBwb3J0IG3DoHhpbSDDqXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJFbCBwb3J0IG3DrW5pbSDDqXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQb3J0IG5vIHbDoGxpZC4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiQ2FsIHBvcnQuIix0aWR5OiJFbmRyZcOnYXQiLCJ0aWR5LXRpcCI6IkVuZHJlw6dhdCBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDsyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlJ1dGEgYWwgY2VydGlmaWNhdCBDQSBhbCBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUnV0YSBhbCBjZXJ0aWZpY2F0IGNsaWVudCBhbCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJSdXRhIGEgbGEgY2xhdSBwcml2YWRhIGFsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7MgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWZlZ2lyL2FjdHVhbGl6YXIgY29uZmlndXJhY2nDsyBKU09OIn0sQm89eyJhZGQtZW50cnkiOiJQxZlpZGF0IGtvbmZpZ3VyYWNpIiwiY29ubmVjdG9yLWFkZCI6IlDFmWlkYXQgbm92w70ga29uZWt0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IlBvdm9saXQga29uZWt0b3IiLCJjb25uZWN0b3ItbmFtZSI6Ik7DoXpldiBrb25la3RvcnUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Ik7DoXpldiBrb25la3RvcnUgamUgcG92aW5uw70uIiwiY29ubmVjdG9yLXR5cGUiOiJUeXAga29uZWt0b3J1IiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJUeXAga29uZWt0b3J1IGplIHBvdmlubsO9LiIsY29ubmVjdG9yczoiS29uZmlndXJhY2Uga29uZWt0b3J1IiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiVnl0dm/FmWl0IG5vdm91IGJyw6FudSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiSnN0ZSBzaSBqaXN0aSwgxb5lIGNoY2V0ZSB2eXR2b8WZaXQgbm92b3UgYnLDoW51IHMgbsOhenZlbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IlNtYXphdCBrb25maWd1cmFjaSIsImRvd25sb2FkLXRpcCI6IlN0w6Fobm91dCBzb3Vib3Iga29uZmlndXJhY2UiLGdhdGV3YXk6IkJyw6FuYSIsImdhdGV3YXktZXhpc3RzIjoiWmHFmcOtemVuw60gc2Ugc2hvZG7DvW0gbsOhenZlbSBqacW+IGV4aXN0dWplLiIsImdhdGV3YXktbmFtZSI6Ik7DoXpldiBicsOhbnkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOw6F6ZXYgYnLDoW55IGplIHBvdmlubsO9LiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjZSBicsOhbnkgYnlsYSDDunNwxJvFoW7EmyB1bG/FvmVuYS4iLCJqc29uLXBhcnNlIjoiTmVwbGF0bsO9IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmVtxa/FvmUgYsO9dCBwcsOhemRuw6kuIiwibm8tY29ubmVjdG9ycyI6IsW9w6FkbsOpIGtvbmVrdG9yeSIsIm5vLWRhdGEiOiLFvcOhZG7DqSBrb25maWd1cmFjZSIsIm5vLWdhdGV3YXktZm91bmQiOiLFvcOhZG7DqSBicsOhbnkgbmVieWx5IG5hbGV6ZW55LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIgJ3t7aXRlbX19JyBuZW5hbGV6ZW5hLiIsInBhdGgtbG9ncyI6IkNlc3RhIGsgc291Ym9yxa9tIGxvZ3UiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJDZXN0YSBqZSBwb3Zpbm7DoS4iLHJlbW90ZToiVnpkw6FsZW7DoSBrb25maWd1cmFjZSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiw5pyb3ZlxYggbG9nb3bDoW7DrSIsInJlbW92ZS1lbnRyeSI6Ik9kc3RyYW5pdCBrb25maWd1cmFjaSIsInNhdmUtdGlwIjoiVWxvxb5pdCBzb3Vib3Iga29uZmlndXJhY2UiLCJzZWN1cml0eS10eXBlIjoiVHlwIHphYmV6cGXEjWVuw60iLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJQxZnDrXN0dXBvdsO9IHRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IsOabG/FvmnFoXTEmyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiBzb3Vib3J1Iiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbcOhbG7DrSBwb8SNZXQgc291Ym9yxa8iLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbcOhbG7DrSBwb8SNZXQgamUgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiUG/EjWV0IG5lbsOtIHBsYXRuw70uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJQb8SNZXQgamUgcG92aW5uw70uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiDDumxvxb5pxaF0aSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IHrDoXpuYW3FryBqZSAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbcOhbG7DrSBwb8SNZXQgesOhem5hbcWvIGplIHBvdmlubsO9LiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IGplIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtcGF0aCI6IkNlc3RhIGsgw7psb8W+acWhdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJDZXN0YSBrIMO6bG/FvmnFoXRpIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCDDumxvxb5pxaF0xJsiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IlNvdWJvciIsIm1lbW9yeS1zdG9yYWdlIjoiUGFtxJvFpSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamUgcG92aW5uw70uIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBvcnQgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltw6FsbsOtIMSNw61zbG8gcG9ydHUgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbcOhbG7DrSDEjcOtc2xvIHBvcnR1IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBuZW7DrSBwbGF0bsO9LiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGplIHBvdmlubsO9LiIsdGlkeToiVXNwb8WZw6FkYXQiLCJ0aWR5LXRpcCI6IlVzcG/FmcOhZGF0IEpTT04ga29uZmlndXJhY2kiLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJLb25maWd1cmFjZSB7e3R5cGVOYW1lfX0ga29uZWt0b3J1IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBDQSBicsOhbnkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBrbGllbnRhIGJyw6FueSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiQ2VzdGEgayBwcml2w6F0bsOtbXUga2zDrcSNaSBicsOhbnkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlDFmWVwbm91dCBkbyByZcW+aW11IGNlbMOpIG9icmF6b3ZreSIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiSlNPTioga29uZmlndXJhY2UiLCJ1cGRhdGUtY29uZmlnIjoiUMWZaWRhdC9lZGl0b3ZhdCBKU09OIGtvbmZpZ3VyYWNpIn0sVW89eyJhZGQtZW50cnkiOiJUaWxmw7hqIGtvbmZpZ3VyYXRpb24iLCJjb25uZWN0b3ItYWRkIjoiVGlsZsO4aiBueSBzdGlrZm9yYmluZGVsc2UiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkFrdGl2w6lyIHN0aWtmb3JiaW5kZWxzZSIsImNvbm5lY3Rvci1uYW1lIjoiTmF2biBww6Ugc3Rpa2ZvcmJpbmRlbHNlIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJOYXZuIHDDpSBzdGlrZm9yYmluZGVsc2UgZXIgcMOla3LDpnZldC4iLCJjb25uZWN0b3ItdHlwZSI6IlN0aWtmb3JiaW5kZWxzZXN0eXBlIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTdGlrZm9yYmluZGVsc2VzdHlwZSBlciBww6VrcsOmdmV0LiIsY29ubmVjdG9yczoiS29uZmlndXJhdGlvbiBhZiBzdGlrZm9yYmluZGVsc2VyIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiT3ByZXQgZW4gbnkgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiIixkZWxldGU6IlNsZXQga29uZmlndXJhdGlvbiIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGtvbmZpZ3VyYXRpb25zZmlsIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJFbmhlZCBtZWQgc2FtbWUgbmF2biBmaW5kZXMgYWxsZXJlZGUuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheS1uYXZuIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheS1uYXZuIGVyIHDDpWtyw6Z2ZXQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkta29uZmlndXJhdGlvbmVuIGJsZXYgZ2VtdC4iLCJqc29uLXBhcnNlIjoiSWtrZSBneWxkaWcgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmVsdGV0IG3DpSBpa2tlIHbDpnJlIHRvbXQuIiwibm8tY29ubmVjdG9ycyI6IkluZ2VuIHN0aWtmb3JiaW5kZWxzZXIiLCJuby1kYXRhIjoiSW5nZW4ga29uZmlndXJhdGlvbmVyIiwibm8tZ2F0ZXdheS1mb3VuZCI6IkluZ2VuIGdhdGV3YXkgZnVuZGV0LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIiLCJwYXRoLWxvZ3MiOiJTdGkgdGlsIGxvZ2ZpbGVyIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiU3RpIGVyIHDDpWtyw6Z2ZXQuIixyZW1vdGU6IkZqZXJua29uZmlndXJhdGlvbiIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nZsO4cmluZ3NuaXZlYXUiLCJyZW1vdmUtZW50cnkiOiJGamVybiBrb25maWd1cmF0aW9uIiwic2F2ZS10aXAiOiJHZW0ga29uZmlndXJhdGlvbnNmaWwiLCJzZWN1cml0eS10eXBlIjoiU2lra2VyaGVkc3R5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBZGdhbmdzdG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiTGFncmluZyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGZpbCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrcy4gYW50YWwgZmlsZXIiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW4uIGFudGFsIGVyIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IkFudGFsIGVyIGlra2UgZ3lsZGlndC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6IkFudGFsIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGxhZ3JpbmciLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbi4gYW50YWwgcG9zdGVyIGVyIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYWtzLiBhbnRhbCBwb3N0ZXIgZXIgcMOla3LDpnZldC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3MuIGFudGFsIHBha2tlc3TDuHJyZWxzZSBmb3IgYmVnaXZlbmhlZCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbi4gYW50YWwgZXIgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrcy4gYW50YWwgcGFra2VzdMO4cnJlbHNlIGZvciBiZWdpdmVuaGVkIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1wYXRoIjoiTGFncmluZ3NzdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJMYWdyaW5nc3N0aSBlciBww6VrcsOmdmV0LiIsInN0b3JhZ2UtdHlwZSI6IkxhZ3JpbmdzdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiTGFncmluZyBhZiBmaWx0ZXIiLCJtZW1vcnktc3RvcmFnZSI6IkxhZ3JpbmcgYWYgaHVrb21tZWxzZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZC12w6ZydCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJWw6ZydCBlciBww6VrcsOmdmV0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZC1wb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzLiBwb3J0bnVtbWVyIGVyIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluLiBwb3J0bnVtbWVyIGVyIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBlciBpa2tlIGd5bGRpZy4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBlciBww6VrcsOmdmV0LiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBrb25maWcuIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiIiLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwgQ0EtY2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwga2xpZW50Y2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiU3RpIHRpbCBwcml2YXQgbsO4Z2xlIHDDpSBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJTa2lmdCB0aWwgZnVsZCBza8Omcm0iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiVGlsZsO4ai9vcGRhdGVyIGtvbmZpZ3VyYXRpb24gSlNPTiJ9LF9vPXsiYWRkLWVudHJ5IjoiQcOxYWRpciBjb25maWd1cmFjacOzbiIsYWR2YW5jZWQ6IkF2YW56YWRvIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiUHJvYmFuZG8gYWN0aXZpZGFkIGRlIGRpc3Bvc2l0aXZvIixjb21tYW5kOiJDb21hbmRvcyBEb2NrZXIiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiU2UgaGFuIGNvcGlhZG8gbG9zIGNvbWFuZG9zIGFsIHBvcnRhcGFwZWxlcyIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhY2nDs24iLCJjb25uZWN0b3ItYWRkIjoiQcOxYWRpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tYnJlIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBub21icmUgY29uZWN0b3IuIiwiY29ubmVjdG9yLXR5cGUiOiJUaXBvIGNvbmVjdG9yIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aXBvIGNvbmVjdG9yLiIsY29ubmVjdG9yczoiQ29uZWN0b3JlcyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29uZmlndXJhY2nDs24gZGUgY29uZWN0b3JlcyIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOb21icmUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUaXBvIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJFc3RhZG8iLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY2Npb25lcyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiQ2xhdmUiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc2UiLCJycGMtY29tbWFuZC1zZW5kIjoiRW52aWFyIiwicnBjLWNvbW1hbmQtcmVzdWx0IjoiUmVzdWx0YWRvIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiJFZGl0YXIgcGFyYW1ldHJvcyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkNvbmZpZ3VyYWNpw7NuIEdlbmVyYWwiLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhciB1biBnYXRld2F5IG51ZXZvIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJDcmVhciB1biBudWV2byBnYXRld2F5IGNvbiBlbCBub21icmU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkhvcmEgZGUgY3JlYWNpw7NuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6IkxhcyBjb25maWd1cmFjaW9uZXMgc2UgYm9ycmFyw6FuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJTw7NsbyBlcyBwb3NpYmxlIGRlc2FjdGl2YXIgbGEgY29uZmlndXJhY2nDs24gcmVtb3RhLCBzaSBoYXkgYWNjZXNvIGbDrXNpY28gYWwgZ2F0ZXdheS4gU2UgYm9ycmFyw6FuIHRvZGFzIGxhcyBjb25maWd1cmFjaW9uZXMgcHJldmlhcy48YnI+PGJyPiBcblBhcmEgZGVzYWN0aXZhciBsYSBjb25maWd1cmFjacOzbiwgaW50cm9kdWNlIGVsIG5vbWJyZSBkZWwgZ2F0ZXdheSBhcXXDrSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6Ik5vbWJyZSBHYXRld2F5IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGdhdGV3YXkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IkRlc2FjdGl2YXIiLGRlbGV0ZToiQm9ycmFyIGNvbmZpZ3VyYWNpw7NuIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FyZ2FyIGZpY2hlcm8gZGUgY29uZmlndXJhY2nDs24iLCJkcm9wLWZpbGUiOiJBcnJhc3RyYSB1biBmaWNoZXJvIG8iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IllhIGV4aXN0ZSB1biBkaXNwb3NpdGl2byBjb24gZWwgbWlzbW8gbm9tYnJlLiIsImdhdGV3YXktbmFtZSI6Ik5vbWJyZSBkZSBHYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdW4gbm9tYnJlIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7NuIGRlIGdhdGV3YXkgZ3JhYmFkYSBzYXRpc2ZhY3RvcmlhbWVudGUuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaW1lb3V0IEtlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgVGltZW91dCBLZWVwIGFsaXZlIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiRWwgdmFsb3Igbm8gZXMgdsOhbGlkbyIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGtlZXAgYWxpdmUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6IkVsIHZhbG9yIGtlZXAgYWxpdmUgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6IlRpZW1wbyBtw61uaW1vIGVudHJlIHBpbmdzIChlbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aWVtcG8gbcOtbmltbyBlbnRyZSBwaW5ncyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiRWwgdmFsb3IgZGUgdGllbXBvIG3DrW5pbW8gZW50cmUgcGluZ3Mgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DrW5pbW8gc2luIGRhdG9zIChlbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGludGVydmFsbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGludGVydmFsbyBubyBlcyB2w6FsaWRvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DoXhpbW8gc2luIGRhdG9zIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgaW50ZXJ2YWxvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJFbCB2YWxvciBkZSBpbnRlcnZhbG8gbm8gZXMgdsOhbGlkbyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJQZXJpb2RvIGRlIGNvbnRyb2wgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlbCBwZXJpb2RvIG5vIGVzIHbDoWxpZG8iLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcyI6IlRpbWVvdXQgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGltZW91dCBkZSBpbmFjdGl2aWRhZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGluYWN0aXZpZGFkIG5vIGVzIHbDoWxpZG8iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6FsaWRvLiIsImpzb24tcmVxdWlyZWQiOiJFbCBjYW1wbyBubyBwdWVkZSBlc3RhciB2YWPDrW8uIixsb2dzOntsb2dzOiJSZWdpc3Ryb3MiLGRheXM6ImTDrWFzIixob3VyczoiaG9yYXMiLG1pbnV0ZXM6Im1pbnV0b3MiLHNlY29uZHM6InNlZ3VuZG9zIiwiZGF0ZS1mb3JtYXQiOiJGb3JtYXRvIGRlIGZlY2hhIiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBmb3JtYXRvIGRlIGZlY2hhIiwibG9nLWZvcm1hdCI6IkZvcm1hdG8gZGUgcmVnaXN0cm8iLCJsb2ctdHlwZSI6IlRpcG8gZGUgcmVnaXN0cm8iLCJsb2ctZm9ybWF0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGlwbyBkZSByZWdpc3RybyIscmVtb3RlOiJSZWdpc3RybyByZW1vdG8iLCJyZW1vdGUtbG9ncyI6IlJlZ2lzdHJvIHJlbW90byIsbG9jYWw6IlJlZ2lzdHJvIGxvY2FsIixsZXZlbDoiTml2ZWwgZGUgcmVnaXN0cm8iLCJmaWxlLXBhdGgiOiJSdXRhIGRlIGZpY2hlcm8iLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBydXRhIGRlIGZpY2hlcm8iLCJzYXZpbmctcGVyaW9kIjoiUGVyaW9kbyBkZSBndWFyZGFkbyBkZSByZWdpc3Ryb3MiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gbm8gcHVlZGUgc2VyIG1lbm9yIHF1ZSAxIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHBlcmlvZG8gZGUgZ3VhcmRhZG8iLCJiYWNrdXAtY291bnQiOiJOw7ptZXJvIGRlIGJhY2t1cHMiLCJiYWNrdXAtY291bnQtbWluIjoiRWwgbsO6bWVybyBkZSBiYWNrdXBzIG5vIHB1ZWRlIHNlciBtZW5vciBxdWUgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgYmFja3VwcyJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiVGllbXBvIGRlIGVzcGVyYSwgZW52w61vIGRlIHBhcXVldGVzIChlbiBtcykiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGllbXBvIGRlIGVzcGVyYSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoiRWwgdGllbXBvIGRlIGVzcGVyYSBubyBwdWVkZSBzZXIgbWVub3IgcXVlIDAiLCJuby1jb25uZWN0b3JzIjoiTm8gaGF5IGNvbmVjdG9yZXMiLCJuby1kYXRhIjoiTm8gaGF5IGNvbmZpZ3VyYWNpb25lcyIsIm5vLWdhdGV3YXktZm91bmQiOiJObyBzZSBoYSBlbmNvbnRyYWRvIG5pbmfDum4gZ2F0ZXdheS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiICd7e2l0ZW19fScgbm8gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJSdXRhIGEgbG9zIGFyY2hpdm9zIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlJ1dGEgcmVxdWVyaWRhLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiUGVybWl0aXIgS2VlcCBhbGl2ZSBzaSBsbGFtYWRhcyIscmVtb3RlOiJDb25maWd1cmFjacOzbiByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik5pdmVsIGRlIGxvZ2dpbmciLCJyZW1vdmUtZW50cnkiOiJCb3JyYXIgY29uZmlndXJhY2nDs24iLCJyZW1vdGUtc2hlbGwiOiJDb25zb2xhIHJlbW90YSIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiQ29uZmlndXJhY2nDs24gcmVtb3RhIixvdGhlcjoib3Ryb3MiLCJzYXZlLXRpcCI6IkdyYWJhciBmaWNoZXJvIGRlIGNvbmZpZ3VyYWNpw7NuIiwic2VjdXJpdHktdHlwZSI6IlRpcG8gZGUgc2VndXJpZGFkIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVMOza2VuIGRlIGFjY2VzbyIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXN1YXJpbyB5IGNvbnRyYXNlw7FhIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBUw7NrZW4gZGUgYWNjZXNvIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgQ2xhdmUgcHJpdmFkYSJ9LCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZWwgc2Vydmlkb3IiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiRXN0YWTDrXN0aWNhIixzdGF0aXN0aWNzOiJFc3RhZMOtc3RpY2FzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjoiTm8gaGF5IGVzdGFkw61zdGljYXMiLGNvbW1hbmRzOiJDb21hbmRvcyIsInNlbmQtcGVyaW9kIjoiUGVyaW9kbyBkZSBlbnbDrW8gZGUgZXN0YWTDrXN0aWNhcyAoZW4gc2VndW5kb3MpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIGRlIGVudsOtbyIsInNlbmQtcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gZGUgZW52w61vIG5vIHB1ZWRlIHNlciBtZW5vciBkZSA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJFbCBwZXJpb2RvIGRlIGVudsOtbyBubyBlcyB2w6FsaWRvIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiUmV2aXNhciBjb25maWd1cmFjacOzbiBkZSBjb25lY3RvcmVzIChlbiBzZWd1bmRvcykiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB1biB2YWxvciIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuIjoiTGEgY29uZmlndXJhY2nDs24gbm8gZXMgdsOhbGlkYSIsYWRkOiJBw7FhZGlyIGNvbWFuZG8iLHRpbWVvdXQ6IlRpbWVvdXQiLCJ0aW1lb3V0LW1zIjoiVGltZW91dCAoZW4gbXMpIiwidGltZW91dC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHRpbWVvdXQiLCJ0aW1lb3V0LW1pbiI6IkVsIHRpbWVvdXQgbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJFbCB0aW1lb3V0IG5vIGVzIHbDoWxpZG8iLCJhdHRyaWJ1dGUtbmFtZSI6Ik5vbWJyZSBkZSBhdHJpYnV0byIsImF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGF0cmlidXRvIixjb21tYW5kOiJDb21hbmRvIiwiY29tbWFuZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGNvbWFuZG8iLHJlbW92ZToiQm9ycmFyIGNvbWFuZG8ifSxzdG9yYWdlOiJHcmFiYWNpw7NuIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTsO6bWVybyBtw6F4aW1vIGRlIHJlZ2lzdHJvcyBlbiBmaWNoZXJvIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZmljaGVyb3MiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6FsaWRvLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTcOheGltbyBkZSByZWdpc3Ryb3MgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltbyBlcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiTGVlciBuw7ptZXJvIGRlIGVudHJhZGFzIGVuIGFsbWFjw6luIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgZW50cmFkYXMgZXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBuw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiUnV0YSBkZSBjYXJwZXRhIGRlIGRhdG9zIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcnV0YS4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWHDsW8gbcOheGltbyBkZSBldmVudG9zIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiRWwgbsO6bWVybyBtw61uaW1vIGVzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8uIiwic3RvcmFnZS1wYXRoIjoiUnV0YSBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHJ1dGEgZGUgYWxtYWPDqW4uIiwic3RvcmFnZS10eXBlIjoiVGlwbyBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gZmljaGVybyIsIm1lbW9yeS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gbWVtb3JpYSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiSG9zdCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQdWVydG8gVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkVsIHB1ZXJ0byBtw6F4aW1vIGVzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiRWwgcHVlcnRvIG3DrW5pbW8gZXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQdWVydG8gbm8gdsOhbGlkby4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcHVlcnRvLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDs24gY29uZWN0b3Ige3t0eXBlTmFtZX19IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIENBIGVuIGVsIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIGNsaWVudGUgZW4gZWwgZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6IkNvbXByb2JhY2nDs24gZGUgVFRMIGRlIG1lbnNhamVzIGVuIGhvcmFzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiQ2FtcG8gcmVxdWVyaWRvLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJFbCBtw61uaW1vIGVzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwgKFRpbWUgdG8gbGl2ZSkgZGUgbWVuc2FnZXMgZW4gZMOtYXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIFRUTCBkZSBtZW5zYWplcy4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvLiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IkVsIHJhbmdvIGRlIHZhbG9yZXMgZXMgZGVzZGUgMCBhIDEiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlJ1dGEgYSBsYSBjbGF2ZSBwcml2YWRhIGVuIGVsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7NuIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkHDsWFkaXIvYWN0dWFsaXphciBjb25maWd1cmFjacOzbiBKU09OIixoaW50czp7InJlbW90ZS1jb25maWd1cmF0aW9uIjoiSGFiaWxpdGEgbGEgYWRtaW5pc3RyYWNpw7NuIHkgY29uZmlndXJhY2nDs24gcmVtb3RhIGRlbCBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiSGFiaWxpdGEgZWwgY29udHJvbCByZW1vdG8gZGVsIHNpc3RlbWEgb3BlcmF0aXZvIGRlbCBnYXRld2F5IGRlc2RlIGVsIHdpZGdldCB0ZXJtaW5hbCByZW1vdG8iLGhvc3Q6Ikhvc3RuYW1lIG8gZGlyZWNjacOzbiBJUCBkZWwgc2Vydmlkb3IgVGhpbmdzYm9hcmQiLHBvcnQ6IlB1ZXJ0byBkZWwgc2VydmljaW8gTVFUVCBlbiBlbCBzZXJ2aWRvciBUaGluZ3Nib2FyZCIsdG9rZW46IkFjY2VzcyB0b2tlbiBwYXJhIGVsIGdhdGV3YXkiLCJjbGllbnQtaWQiOiJJRCBkZSBjbGllbnRlIE1RVFQgcGFyYSBlbCBnYXRld2F5Iix1c2VybmFtZToiVXN1YXJpbyBNUVRUIHBhcmEgZWwgZ2F0ZXdheSIscGFzc3dvcmQ6IkNvbnRyYXNlw7FhIE1RVFQgcGFyYSBlbCBnYXRld2F5IiwiY2EtY2VydCI6IlJ1dGEgYWwgZmljaGVybyBkZWwgY2VydGlmaWNhZG8gQ0EiLCJkYXRlLWZvcm0iOiJGb3JtYXRvIGRlIGZlY2hhIGVuIGxvcyBtZW5zYWplcyBkZSByZWdpc3RybyIsImRhdGEtZm9sZGVyIjoiUnV0YSBhIGxhIGNhcnBldGEgcXVlIGNvbnRlbmRyw6EgbG9zIGRhdG9zIChSZWxhdGl2YSBvIGFic29sdXRhKSIsImxvZy1mb3JtYXQiOiJGb3JtYXRvIGRlIG1lbnNhamVzIGVuIHJlZ2lzdHJvIiwicmVtb3RlLWxvZyI6IkhhYmlsaXRhIGVsIHJlZ2lzdHJvIHJlbW90byB5IGxhIHBvc3RlcmlvciBsZWN0dXJhIGRlc2RlIGVsIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJTaSBlbCBjb250YWplIGRlIGNvcGlhcyBkZSBzZWd1cmlkYWQgZXMgbWF5b3IgcXVlIDAsIGN1YW5kbyBzZSByZWFsaWNlIHVuYSByZW5vdmFjacOzbiwgbm8gc2UgY29uc2VydmFuIG3DoXMgcXVlIGxvcyBhcmNoaXZvcyBkZSByZWN1ZW50byBkZSBjb3BpYXMgZGUgc2VndXJpZGFkLCBsb3MgbcOhcyBhbnTDrWd1b3Mgc2UgZWxpbWluYXLDoW4iLHN0b3JhZ2U6IlByb3ZlZSBsYSBjb25maWd1cmFjacOzbiBwYXJhIGVsIGdyYWJhZG8gZGUgZGF0b3MgZW50cmFudGVzIGFudGVzIGRlIHF1ZSBzZSBlbnbDrWVuIGEgbGEgcGxhdGFmb3JtYSIsIm1heC1maWxlLWNvdW50IjoiTsO6bWVybyBtw6F4aW1vIGRlIGZpY2hlcm9zIHF1ZSBzZSBjcmVhcsOhbiIsIm1heC1yZWFkLWNvdW50IjoiTsO6bWVvIG3DoXhpbW8gZGUgbWVuc2FqZXMgYSBvYnRlbmVyIGRlc2RlIGVsIGRpc2NvIHkgZW52aWFkb3MgYSBsYSBwbGF0YWZvcm1hIiwibWF4LXJlY29yZHMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIHF1ZSBzZSBndWFyZGFyw6FuIGVuIHVuIHNvbG8gZmljaGVybyIsInJlYWQtcmVjb3JkLWNvdW50IjoiTsO6bWVybyBkZSBtZW5zYWdlcyBhIG9idGVuZXIgZGVzZGUgZWwgYWxtYWNlbmFtaWVudG8geSBlbnZpYWRvcyBhIGxhIHBsYXRhZm9ybWEiLCJtYXgtcmVjb3Jkcy1jb3VudCI6Ik7Dum1lcm8gbcOheGltbyBkZSBkYXRvcyBlbiBhbG1hY2VuYW1pZW50byBhbnRlcyBkZSBlbnZpYXIgYSBsYSBwbGF0YWZvcm1hIiwidHRsLWNoZWNrLWhvdXIiOiJDb24gcXXDqSBmcmVjdWVuY2lhIGVsIGdhdGV3YXkgY29tcHJvYmFyw6Egc2kgbG9zIGRhdG9zIGVzdMOhbiBvYnNvbGV0b3MiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTsO6bWVybyBtw6F4aW1vIGRlIGTDrWFzIHBhcmEgbGEgcmV0ZW5jacOzbiBkZSBkYXRvcyBlbiBlbCBhbG1hY8OpbiIsY29tbWFuZHM6IkNvbWFuZG9zIHBhcmEgcmVjb2dlciBlc3RhZMOtc3RpY2FzIGFkaWNpb25hbGVzIixhdHRyaWJ1dGU6IkNsYXZlIGRlIHRlbGVtZXRyw61hIHBhcmEgZXN0YWTDrXN0aWNhcyIsdGltZW91dDoiVGltZW91dCBwYXJhIGxhIGVqZWN1Y2nDs24gZGUgY29tYW5kb3MiLGNvbW1hbmQ6IkVsIHJlc3VsdGFkbyBkZSBsYSBlamVjdWNpw7NuIGRlbCBjb21hbmRvLCBzZSB1c2Fyw6EgY29tbyB2YWxvciBwYXJhIGxhIHRlbGVtZXRyw61hIiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiSGFiaWxpdGEgbGEgbW9uaXRvcml6YWNpw7NuIGRlIGNhZGEgdW5vIGRlIGxvcyBkaXNwb3NpdGl2b3MgY29uZWN0YWRvcyIsImluYWN0aXZpdHktdGltZW91dCI6IlRpZW1wbyB0cmFzIHF1ZSBlbCBnYXRld2F5IGRlc2NvbmVjdGFyw6EgZWwgZGlzcG9zaXRpdm8iLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZG8gZGUgbW9uaXRvcml6YWNpw7NuIGRlIGFjdGl2aWRhZCBlbiBlbCBkaXNwb3NpdGl2byIsIm1pbmltYWwtcGFjay1kZWxheSI6IlRpZW1wbyBkZSBlc3BlcmEgZW50cmUgZW52w61vIGRlIHBhcXVldGVzIGRlIG1lbnNhamVzIChVbiB2YWxvciBtdXkgYmFqbywgcmVzdWx0YXLDoSBlbiB1biBhdW1lbnRvIGRlIHVzbyBkZSBsYSBDUFUgZW4gZWwgZ2F0ZXdheSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGVuIGxvcyBtZW5zYWplcyBNUVRUICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZSByZWQgZW4gZWwgY3VhbCBlbCBzZXJ2aWRvciBHUlBDIGVzY3VjaGFyw6EgY29uZXhpb25lcyBlbnRyYW50ZXMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaWVtcG8gbcOheGltbywgZWwgY3VhbCBlbCBzZXJ2aWRvciBlc3BlcmFyYSB1biBwaW5nIGtlZXBhbGl2ZSBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYWNpw7NuIGVudHJlIGRvcyBwaW5ncyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbGxhbWFkYSBSUEMgYWN0aXZhLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik3DrW5pbW8gdGllbXBvIHF1ZSBlbCBzZXJ2aWRvciBkZWJlIGVzcGVyYXIgZW50cmUgZW52w61vcyBkZSBtZW5zYWplcyBkZSBwaW5nIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTsO6bWVybyBtw6F4aW1vIGRlIHBpbmdzIGtlZXBhbGl2ZSBxdWUgZWwgc2Vydmlkb3IgcHVlZGUgZW52aWFyIHNpbiByZWNpYmlyIG5pbmfDum4gZGF0byBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNw61uaW1vIHRpZW1wbyBxdWUgZWwgc2Vydmlkb3IgZGViZSBlc3BlcmFyIGVudHJlIGVudsOtb3MgZGUgcGluZyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbmluZ8O6biBkYXRvIGVuIGVudsOtbyBvIHJlY2VwY2nDs24uIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJQZXJtaXRpciBhbCBzZXJ2aWRvciBtYW50ZW5lciBsYSBjb25leGnDs24gR1JQQyBhYmllcnRhLCBjdWFuZG8gbm8gaGF5YSBsbGFtYWRhcyBSUEMgYWN0aXZhcy4ifX0sSG89eyJhZGQtZW50cnkiOiLshKTsoJUg7LaU6rCAIiwiY29ubmVjdG9yLWFkZCI6IuyDiOuhnOyatCDsl7DqsrDsnpAg7LaU6rCAIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJFbmFibGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUiOiJDb25uZWN0b3IgbmFtZSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiQ29ubmVjdG9yIG5hbWUgaXMgcmVxdWlyZWQuIiwiY29ubmVjdG9yLXR5cGUiOiJDb25uZWN0b3IgdHlwZSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiQ29ubmVjdG9yIHR5cGUgaXMgcmVxdWlyZWQuIixjb25uZWN0b3JzOiJDb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhdGUgYSBuZXcgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQXJlIHlvdSBzdXJlIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBnYXRld2F5IHdpdGggbmFtZTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiU3RvcmFnZSIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBmaWxlIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbXVtIG51bWJlciBvZiBmaWxlcyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJOdW1iZXIgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWF4aW11bSByZWNvcmRzIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZCBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlRoaW5nc0JvYXJkIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29ubmVjdG9yIHt7dHlwZU5hbWV9fSBjb25maWd1cmF0aW9uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYXRoIHRvIHByaXZhdGUga2V5IG9uIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlRvZ2dsZSBmdWxsc2NyZWVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aW9uIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkZC91cGRhdGUgY29uZmlndXJhdGlvbiBKU09OIn0sem89eyJhZGQtZW50cnkiOiJBZGQgY29uZmlndXJhdGlvbiIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJycGMtY29tbWFuZC1zZW5kIjoiU2VuZCIsInJwYy1jb21tYW5kLXJlc3VsdCI6IlJlc3VsdCIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiSW4gb3JkZXIgdG8gcnVuIFRoaW5nc0JvYXJkIElvVCBnYXRld2F5IGluIGRvY2tlciB3aXRoIGNyZWRlbnRpYWxzIGZvciB0aGlzIGRldmljZSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkNyZWF0ZSBhIG5ldyBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJBcmUgeW91IHN1cmUgeW91IHdhbnQgY3JlYXRlIGEgbmV3IGdhdGV3YXkgd2l0aCBuYW1lOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkRldmljZSB3aXRoIHNhbWUgbmFtZSBpcyBhbHJlYWR5IGV4aXN0cy4iLCJnYXRld2F5LW5hbWUiOiJHYXRld2F5IG5hbWUiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJHYXRld2F5IG5hbWUgaXMgcmVxdWlyZWQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHkgc2F2ZWQuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJLZWVwIGFsaXZlIHRpbWVvdXQgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIG5vdCB2YWxpZCIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IktlZXAgYWxpdmUgaXMgcmVxdWlyZWQiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiS2VlcCBhbGl2ZSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm4iOiJLZWVwIGFsaXZlIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgKGluIG1zKSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluIHBpbmcgaW50ZXJ2YWwgd2l0aG91dCBkYXRhIChpbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyBub3QgdmFsaWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1taW4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJqc29uLXBhcnNlIjoiTm90IHZhbGlkIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IkZpZWxkIGNhbm5vdCBiZSBlbXB0eS4iLGxvZ3M6e2xvZ3M6IkxvZ3MiLGRheXM6ImRheXMiLGhvdXJzOiJob3VycyIsbWludXRlczoibWludXRlcyIsc2Vjb25kczoic2Vjb25kcyIsImRhdGUtZm9ybWF0IjoiRGF0ZSBmb3JtYXQiLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IkRhdGUgZm9ybWF0IHJlcXVpcmVkIiwibG9nLWZvcm1hdCI6IkxvZyBmb3JtYXQiLCJsb2ctdHlwZSI6IkxvZyB0eXBlIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6IkxvZyBmb3JtYXQgcmVxdWlyZWQiLHJlbW90ZToiUmVtb3RlIGxvZ2dpbmciLCJyZW1vdGUtbG9ncyI6IlJlbW90ZSBsb2dzIixsb2NhbDoiTG9jYWwgbG9nZ2luZyIsbGV2ZWw6IkxvZyBsZXZlbCIsImZpbGUtcGF0aCI6IkZpbGUgcGF0aCIsImZpbGUtcGF0aC1yZXF1aXJlZCI6IkZpbGUgcGF0aCByZXF1aXJlZCIsInNhdmluZy1wZXJpb2QiOiJMb2cgc2F2aW5nIHBlcmlvZCIsInNhdmluZy1wZXJpb2QtbWluIjoiTG9nIHNhdmluZyBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiJMb2cgc2F2aW5nIHBlcmlvZCByZXF1aXJlZCIsImJhY2t1cC1jb3VudCI6IkJhY2t1cCBjb3VudCIsImJhY2t1cC1jb3VudC1taW4iOiJCYWNrdXAgY291bnQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IkJhY2t1cCBjb3VudCByZXF1aXJlZCJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiTWluIHBhY2sgc2VuZCBkZWxheSAoaW4gbXMpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgaXMgcmVxdWlyZWQiLCJtaW4tcGFjay1zZW5kLWRlbGF5LW1pbiI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMCIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJLZWVwIGFsaXZlIHBlcm1pdCB3aXRob3V0IGNhbGxzIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtc2hlbGwiOiJSZW1vdGUgc2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IlJlbW90ZSBDb25maWd1cmF0aW9uIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTdG9yYWdlIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIGZpbGUiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBudW1iZXIgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWJlciBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbXVtIHJlY29yZHMgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudCI6IlJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudCI6Ik1heCByZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiTWF4IFJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6IkRhdGEgZm9sZGVyIHBhdGgiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiJEYXRhIGZvbGRlciBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQgaG9zdCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYXhpbXVtIHBvcnQgbnVtYmVyIGlzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluaW11bSBwb3J0IG51bWJlciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgaXMgbm90IHZhbGlkLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGlzIHJlcXVpcmVkLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBjb25maWcgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsaGludHM6eyJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIFRoaW5nc0JvYXJkIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIGZvbGRlciwgdGhhdCB3aWxsIGNvbnRhaW5zIGRhdGEgKFJlbGF0aXZlIG9yIEFic29sdXRlKSIsImxvZy1mb3JtYXQiOiJMb2cgbWVzc2FnZSBmb3JtYXQiLCJyZW1vdGUtbG9nIjoiRW5hYmxlcyByZW1vdGUgbG9nZ2luZyBhbmQgbG9ncyByZWFkaW5nIGZyb20gdGhlIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJJZiBiYWNrdXAgY291bnQgaXMgPiAwLCB3aGVuIGEgcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cCBjb3VudCBmaWxlcyBhcmUga2VwdCAtIHRoZSBvbGRlc3Qgb25lcyBhcmUgZGVsZXRlZCIsc3RvcmFnZToiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3Igc2F2aW5nIGluY29taW5nIGRhdGEgYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIHBsYXRmb3JtIiwibWF4LWZpbGUtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGZpbGUgdGhhdCB3aWxsIGJlIGNyZWF0ZWQiLCJtYXgtcmVhZC1jb3VudCI6IkNvdW50IG9mIG1lc3NhZ2VzIHRvIGdldCBmcm9tIHN0b3JhZ2UgYW5kIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJtYXgtcmVjb3JkcyI6Ik1heGltdW0gY291bnQgb2YgcmVjb3JkcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIG9uZSBmaWxlIiwicmVhZC1yZWNvcmQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGRhdGEgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZCB0byBUaGluZ3NCb2FyZCIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgR2F0ZXdheSBjaGVjayBkYXRhIGZvciBvYnNvbGVzY2VuY2UiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTWF4aW11bSBkYXlzIHRoYXQgc3RvcmFnZSB3aWxsIHNhdmUgZGF0YSIsY29tbWFuZHM6IkNvbW1hbmRzIGZvciBjb2xsZWN0aW5nIGFkZGl0aW9uYWwgc3RhdGlzdGljIixhdHRyaWJ1dGU6IlN0YXRpc3RpYyB0ZWxlbWV0cnkga2V5Iix0aW1lb3V0OiJUaW1lb3V0IGZvciBjb21tYW5kIGV4ZWN1dGluZyIsY29tbWFuZDoiVGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24sIHdpbGwgYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRlbGVtZXRyeSIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6IkVuYWJsZXMgbW9uaXRvciB0aGUgYWN0aXZpdHkgb2YgZWFjaCBjb25uZWN0ZWQgZGV2aWNlIiwiaW5hY3Rpdml0eS10aW1lb3V0IjoiVGltZSBhZnRlciB3aG9zZSB0aGUgZ2F0ZXdheSB3aWxsIGRpc2Nvbm5lY3QgZGV2aWNlIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiJQZXJpb2RpY2l0eSBvZiBkZXZpY2UgYWN0aXZpdHkgY2hlY2siLCJtaW5pbWFsLXBhY2stZGVsYXkiOiJEZWxheSBiZXR3ZWVuIHNlbmRpbmcgcGFja3Mgb2YgbWVzc2FnZXMgKERlY3JlYXNpbmcgdGhpcyBzZXR0aW5nIHJlc3VsdHMgaW4gaW5jcmVhc2VkIENQVSB1c2FnZSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGluIE1RVFQgbWVzc2FnaW5nICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6Ik5ldHdvcmsgcG9ydCBvbiB3aGljaCBHUlBDIHNlcnZlciB3aWxsIGxpc3RlbiBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJNYXhpbXVtIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBmb3IgYSBrZWVwYWxpdmUgcGluZyByZXNwb25zZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLWtlZXAtYWxpdmUiOiJEdXJhdGlvbiBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIFJQQyBjYWxsLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXhpbXVtIG51bWJlciBvZiBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB0aGF0IHRoZSBzZXJ2ZXIgY2FuIHNlbmQgd2l0aG91dCByZWNlaXZpbmcgYW55IGRhdGEgYmVmb3JlIGl0IGNvbnNpZGVycyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgYmVpbmcgc2VudCBvciByZWNlaXZlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IkFsbG93IHNlcnZlciB0byBrZWVwIHRoZSBHUlBDIGNvbm5lY3Rpb24gYWxpdmUgZXZlbiB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgUlBDIGNhbGxzLiJ9fSxXbz17ImFkZC1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB0b2V2b2VnZW4iLCJjb25uZWN0b3ItYWRkIjoiTmlldXdlIGNvbm5lY3RvciB0b2V2b2VnZW4iLCJjb25uZWN0b3ItZW5hYmxlZCI6IkNvbm5lY3RvciBpbnNjaGFrZWxlbiIsImNvbm5lY3Rvci1uYW1lIjoiTmFhbSB2YW4gZGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJEZSBuYWFtIHZhbiBkZSBjb25uZWN0b3IgaXMgdmVyZWlzdC4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cGUgYWFuc2x1aXRpbmciLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkhldCB0eXBlIGNvbm5lY3RvciBpcyB2ZXJlaXN0LiIsY29ubmVjdG9yczoiQ29uZmlndXJhdGllIHZhbiBjb25uZWN0b3JlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkVlbiBuaWV1d2UgZ2F0ZXdheSBtYWtlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiV2VldCB1IHpla2VyIGRhdCB1IGVlbiBuaWV1d2UgZ2F0ZXdheSB3aWx0IG1ha2VuIG1ldCBkZSBuYWFtOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiQ29uZmlndXJhdGllIHZlcndpamRlcmVuIiwiZG93bmxvYWQtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBkb3dubG9hZGVuIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2UgbWV0IGRlemVsZmRlIG5hYW0gYmVzdGFhdCBhbC4iLCJnYXRld2F5LW5hbWUiOiJOYWFtIHZhbiBkZSBnYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiRGUgbmFhbSB2YW4gZGUgZ2F0ZXdheSBpcyB2ZXJlaXN0LiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5Y29uZmlndXJhdGllIHN1Y2Nlc3ZvbCBvcGdlc2xhZ2VuLiIsImpzb24tcGFyc2UiOiJPbmdlbGRpZ2UgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiSGV0IHZlbGQgbWFnIG5pZXQgbGVlZyB6aWpuLiIsIm5vLWNvbm5lY3RvcnMiOiJHZWVuIGNvbm5lY3RvcmVuIiwibm8tZGF0YSI6IkdlZW4gY29uZmlndXJhdGllcyIsIm5vLWdhdGV3YXktZm91bmQiOiJHZWVuIGdhdGV3YXkgZ2V2b25kZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6Iid7e2l0ZW19fScgbmlldCBnZXZvbmRlbi4iLCJwYXRoLWxvZ3MiOiJQYWQgbmFhciBsb2diZXN0YW5kZW4iLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYWQgaXMgdmVyZWlzdC4iLHJlbW90ZToiQ29uZmlndXJhdGllIG9wIGFmc3RhbmQiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJlZ2lzdHJhdGllIG5pdmVhdSIsInJlbW92ZS1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB2ZXJ3aWpkZXJlbiIsInNhdmUtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBvcHNsYWFuIiwic2VjdXJpdHktdHlwZSI6IlNvb3J0IGJldmVpbGlnaW5nIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9lZ2FuZyB0b3QgdG9rZW4iLHRsczoiVExTIChUTFMpIn0sc3RvcmFnZToiT3BzbGFnIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSBhYW50YWwgcmVjb3JkcyBpbiBiZXN0YW5kIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbWFhbCBhYW50YWwgYmVzdGFuZGVuIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBhYW50YWwgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtbWVyIGlzIHZlcmVpc3QuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gYWFudGFsIHJlY29yZHMgaW4gb3BzbGFnIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIGFhbnRhbCByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbWFsZSByZWNvcmRzIHppam4gdmVyZWlzdC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1heGltYWxlIHBha2tldGdyb290dGUgdm9vciBldmVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIGFhbnRhbCBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1tZXIgaXMgbmlldCBnZWxkaWcuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJEZSBtYXhpbWFsZSBwYWtrZXRncm9vdHRlIHZhbiBoZXQgZXZlbnQgaXMgdmVyZWlzdC4iLCJzdG9yYWdlLXBhdGgiOiJPcHNsYWcgcGFkIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiT3BzbGFncGFkIGlzIHZlcmVpc3QuIiwic3RvcmFnZS10eXBlIjoiVHlwZSBvcHNsYWciLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik9wc2xhZyB2YW4gYmVzdGFuZGVuIiwibWVtb3J5LXN0b3JhZ2UiOiJHZWhldWdlbiBvcHNsYWcifSx0aGluZ3Nib2FyZDoiRGluZ2VuIEJvcmQiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQtZ2FzdGhlZXIiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiU2VydmVyIGhvc3QgaXMgdmVyZWlzdC4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmQtcG9vcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkhldCBtYXhpbWFsZSBwb29ydG51bW1lciBpcyA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6IkhldCBtaW5pbWFsZSBwb29ydG51bW1lciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvb3J0IGlzIG5pZXQgZ2VsZGlnLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb29ydCBpcyB2ZXJlaXN0LiIsdGlkeToiT3JkZWxpamsiLCJ0aWR5LXRpcCI6Ik9wZ2VydWltZGUgY29uZmlndXJhdGllIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmF0aWUgdmFuIGNvbm5lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhZCBuYWFyIENBLWNlcnRpZmljYWF0IG9wIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYWQgbmFhciBjbGllbnRjZXJ0aWZpY2FhdCBvcCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYWQgbmFhciBwcml2w6lzbGV1dGVsIG9wIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlZvbGxlZGlnIHNjaGVybSBpbi0gZW4gdWl0c2NoYWtlbGVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aWUgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQ29uZmlndXJhdGllIEpTT04gdG9ldm9lZ2VuL2JpandlcmtlbiJ9LGpvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2rEmSIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3dlIHrFgsSFY3plIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJXxYLEhWN6IHrFgsSFY3plIiwiY29ubmVjdG9yLW5hbWUiOiJOYXp3YSB6xYLEhWN6YSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTmF6d2EgesWCxIVjemEgamVzdCB3eW1hZ2FuYS4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cCB6xYLEhWN6YSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiVHlwIHrFgsSFY3phIGplc3Qgd3ltYWdhbnkuIixjb25uZWN0b3JzOiJLb25maWd1cmFjamEgesWCxIVjenkiLCJjb25uZWN0b3JzLWNvbmZpZyI6IkNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOYW1lIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoiVHlwZSIsImNvbm5lY3RvcnMtdGFibGUtc3RhdHVzIjoiU3RhdHVzIiwiY29ubmVjdG9ycy10YWJsZS1hY3Rpb25zIjoiQWN0aW9ucyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiS2V5IiwiY29ubmVjdG9ycy10YWJsZS1jbGFzcyI6IkNsYXNzIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXN1bHQiLCJycGMtY29tbWFuZC1lZGl0LXBhcmFtcyI6IkVkaXQgcGFyYW1ldGVycyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkdlbmVyYWwgQ29uZmlndXJhdGlvbiIsImRvY2tlci1sYWJlbCI6IkluIG9yZGVyIHRvIHJ1biBUaGluZ3NCb2FyZCBJb1QgZ2F0ZXdheSBpbiBkb2NrZXIgd2l0aCBjcmVkZW50aWFscyBmb3IgdGhpcyBkZXZpY2UgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcy4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJVdHfDs3J6IG5vd3kgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQ3p5IG5hIHBld25vIGNoY2VzeiB1dHdvcnp5xIcgbm93eSBnYXRld2F5IG8gbmF6d2llOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IlVzdcWEIGtvbmZpZ3VyYWNqxJkiLCJkb3dubG9hZC10aXAiOiJQb2JpZXJ6IHBsaWsga29uZmlndXJhY3lqbnkiLCJkcm9wLWZpbGUiOiJEcm9wIGZpbGUgaGVyZSBvciIsZ2F0ZXdheToiV2VqxZtjaWUiLCJnYXRld2F5LWV4aXN0cyI6IlVyesSFZHplbmllIG8gdGVqIHNhbWVqIG5hendpZSBqdcW8IGlzdG5pZWplLiIsImdhdGV3YXktbmFtZSI6Ik5hendhIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOYXp3YSBHYXRld2F5J2EgamVzdCB3eW1hZ2FuYS4iLCJnYXRld2F5LXNhdmVkIjoiS29uZmlndXJhY2phIEdhdGV3ZXknYSB6b3N0YcWCYSBwb215xZtsbmllIHphcGlzYW5hLiIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCAoaW4gc2VjKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoiSW5hY3Rpdml0eSB0aW1lb3V0IChpbiBzZWMpIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgcmVxdWlyZWQiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgbm90IHZhbGlkIiwianNvbi1wYXJzZSI6Ik5pZXByYXdpZMWCb3d5IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmllIG1vxbxlIGJ5xIcgcHVzdGUuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDAiLCJuby1jb25uZWN0b3JzIjoiQnJhayB6xYLEhWN6eSIsIm5vLWRhdGEiOiJCcmFrIGtvbmZpZ3VyYWNqaSIsIm5vLWdhdGV3YXktZm91bmQiOiJOaWUgem5hbGV6aW9ubyBnYXRld2F5J2EuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pZSB6bmFsZXppb25vLiIsInBhdGgtbG9ncyI6IsWaY2llxbxrYSBkbyBwbGlrw7N3IGR6aWVubmlrYSIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IsWaY2llxbxrYSBqZXN0IHd5bWFnYW5hLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiS2VlcCBhbGl2ZSBwZXJtaXQgd2l0aG91dCBjYWxscyIscmVtb3RlOiJaZGFsbmEga29uZmlndXJhY2phIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJQb3ppb20gbG9nb3dhbmlhIiwicmVtb3ZlLWVudHJ5IjoiVXN1xYQga29uZmlndXJhY2rEmSIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLG90aGVyOiJPdGhlciIsInNhdmUtdGlwIjoiWmFwaXN6IHBsaWsga29uZmlndXJhY3lqbnkiLCJzZWN1cml0eS10eXBlIjoiUm9kemFqIHphYmV6cGllY3plbmlhIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9rZW4gZG9zdMSZcHUiLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTa8WCYWRvd2FuaWUiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYWtzeW1hbG5hIGxpY3piYSByZWtvcmTDs3cgdyBwbGlrdSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc3ltYWxuYSBsaWN6YmEgcGxpa8OzdyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWVyIGplc3Qgd3ltYWdhbnkuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyB3IHBhbWnEmWNpIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbWFsbmEgbGljemJhIHJla29yZMOzdyB0byAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWVyIGplc3QgbmllcHJhd2lkxYJvd3kuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiJSZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJNYXggcmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6Ik1heCBSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgiOiJEYXRhIGZvbGRlciBwYXRoIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiRGF0YSBmb2xkZXIgcGF0aCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCBqZXN0IHd5bWFnYW55LiIsInN0b3JhZ2UtcGF0aCI6IsWaY2llxbxrYSBwcnplY2hvd3l3YW5pYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IsWaY2llxbxrYSBkbyBwcnplY2hvd3l3YW5pYSBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCBza8WCYWRvd2FuaWEiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik5vxZtuaWsgZGFueWNoIiwibWVtb3J5LXN0b3JhZ2UiOiJQcnplY2hvd3l3YW5pZSBwYW1pxJljaSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiR29zcG9kYXJ6IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamVzdCB3eW1hZ2FueS4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4IjoiTWFrc3ltYWxueSBudW1lciBwb3J0dSB0byA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltYWxueSBudW1lciBwb3J0dSB0byAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBqZXN0IHd5bWFnYW55LiIsdGlkeToiVXBvcnrEhWRrdWoiLCJ0aWR5LXRpcCI6IlVwb3J6xIVka293YW5hIGtvbmZpZ3VyYWNqYSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiWsWCxIVjemUge3t0eXBlTmFtZX19IGtvbmZpZ3VyYWNqYSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoixZpjaWXFvGthIGRvIGNlcnR5ZmlrYXR1IENBIG5hIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiLFmmNpZcW8a2EgZG8gY2VydHlmaWthdHUga2xpZW50YSBuYSBnYXRld2F5IiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoiTWVzc2FnZXMgVFRMIGluIGRheXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLW1pbiI6Ik1pbiBudW1iZXIgaXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtcXR0LXFvcyI6IlFvUyIsIm1xdHQtcW9zLXJlcXVpcmVkIjoiUW9TIGlzIHJlcXVpcmVkIiwibXF0dC1xb3MtcmFuZ2UiOiJRb1MgdmFsdWVzIHJhbmdlIGlzIGZyb20gMCB0byAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLFmmNpZcW8a2EgZG8ga2x1Y3phIHByeXdhdG5lZ28gbmEgYnJhbWNlIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJQcnplxYLEhWN6IHRyeWIgcGXFgm5vZWtyYW5vd3kiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNqYSBKU09OKiIsInVwZGF0ZS1jb25maWciOiJEb2Rhai96YWt0dWFsaXp1aiBrb25maWd1cmFjasSZIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiJFbmFibGVzIHJlbW90ZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiRW5hYmxlcyByZW1vdGUgY29udHJvbCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIHRoZSBnYXRld2F5IGZyb20gdGhlIFJlbW90ZSBTaGVsbCB3aWRnZXQiLGhvc3Q6Ikhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgVGhpbmdzQm9hcmQgc2VydmVyIixwb3J0OiJQb3J0IG9mIE1RVFQgc2VydmljZSBvbiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHRva2VuOiJBY2Nlc3MgdG9rZW4gZm9yIHRoZSBnYXRld2F5IGZyb20gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2xpZW50LWlkIjoiTVFUVCBjbGllbnQgaWQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIix1c2VybmFtZToiTVFUVCB1c2VybmFtZSBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBhc3N3b3JkOiJNUVRUIHBhc3N3b3JkIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIsImNhLWNlcnQiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUiLCJkYXRlLWZvcm0iOiJEYXRlIGZvcm1hdCBpbiBsb2cgbWVzc2FnZSIsImRhdGEtZm9sZGVyIjoiUGF0aCB0byBmb2xkZXIsIHRoYXQgd2lsbCBjb250YWlucyBkYXRhIChSZWxhdGl2ZSBvciBBYnNvbHV0ZSkiLCJsb2ctZm9ybWF0IjoiTG9nIG1lc3NhZ2UgZm9ybWF0IiwicmVtb3RlLWxvZyI6IkVuYWJsZXMgcmVtb3RlIGxvZ2dpbmcgYW5kIGxvZ3MgcmVhZGluZyBmcm9tIHRoZSBnYXRld2F5IiwiYmFja3VwLWNvdW50IjoiSWYgYmFja3VwIGNvdW50IGlzID4gMCwgd2hlbiBhIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXAgY291bnQgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQiLHN0b3JhZ2U6IlByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gZm9yIHNhdmluZyBpbmNvbWluZyBkYXRhIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBwbGF0Zm9ybSIsIm1heC1maWxlLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBmaWxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiJNYXhpbXVtIGNvdW50IG9mIHJlY29yZHMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiBvbmUgZmlsZSIsInJlYWQtcmVjb3JkLWNvdW50IjoiQ291bnQgb2YgbWVzc2FnZXMgdG8gZ2V0IGZyb20gc3RvcmFnZSBhbmQgc2VuZCB0byBUaGluZ3NCb2FyZCIsIm1heC1yZWNvcmRzLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBkYXRhIGluIHN0b3JhZ2UgYmVmb3JlIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJ0dGwtY2hlY2staG91ciI6IkhvdyBvZnRlbiB3aWxsIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gZGF5cyB0aGF0IHN0b3JhZ2Ugd2lsbCBzYXZlIGRhdGEiLGNvbW1hbmRzOiJDb21tYW5kcyBmb3IgY29sbGVjdGluZyBhZGRpdGlvbmFsIHN0YXRpc3RpYyIsYXR0cmlidXRlOiJTdGF0aXN0aWMgdGVsZW1ldHJ5IGtleSIsdGltZW91dDoiVGltZW91dCBmb3IgY29tbWFuZCBleGVjdXRpbmciLGNvbW1hbmQ6IlRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLCB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciB0ZWxlbWV0cnkiLCJjaGVjay1kZXZpY2UtYWN0aXZpdHkiOiJFbmFibGVzIG1vbml0b3IgdGhlIGFjdGl2aXR5IG9mIGVhY2ggY29ubmVjdGVkIGRldmljZSIsImluYWN0aXZpdHktdGltZW91dCI6IlRpbWUgYWZ0ZXIgd2hvc2UgdGhlIGdhdGV3YXkgd2lsbCBkaXNjb25uZWN0IGRldmljZSIsImluYWN0aXZpdHktcGVyaW9kIjoiUGVyaW9kaWNpdHkgb2YgZGV2aWNlIGFjdGl2aXR5IGNoZWNrIiwibWluaW1hbC1wYWNrLWRlbGF5IjoiRGVsYXkgYmV0d2VlbiBzZW5kaW5nIHBhY2tzIG9mIG1lc3NhZ2VzIChEZWNyZWFzaW5nIHRoaXMgc2V0dGluZyByZXN1bHRzIGluIGluY3JlYXNlZCBDUFUgdXNhZ2UpIixxb3M6IlF1YWxpdHkgb2YgU2VydmljZSBpbiBNUVRUIG1lc3NhZ2luZyAoMCAtIGF0IG1vc3Qgb25jZSwgMSAtIGF0IGxlYXN0IG9uY2UpIiwic2VydmVyLXBvcnQiOiJOZXR3b3JrIHBvcnQgb24gd2hpY2ggR1JQQyBzZXJ2ZXIgd2lsbCBsaXN0ZW4gZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLiIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiTWF4aW11bSB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgZm9yIGEga2VlcGFsaXZlIHBpbmcgcmVzcG9uc2UgYmVmb3JlIGNvbnNpZGVyaW5nIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYXRpb24gYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBSUEMgY2FsbC4iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4aW11bSBudW1iZXIgb2Yga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgdGhhdCB0aGUgc2VydmVyIGNhbiBzZW5kIHdpdGhvdXQgcmVjZWl2aW5nIGFueSBkYXRhIGJlZm9yZSBpdCBjb25zaWRlcnMgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGJlaW5nIHNlbnQgb3IgcmVjZWl2ZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJBbGxvdyBzZXJ2ZXIgdG8ga2VlcCB0aGUgR1JQQyBjb25uZWN0aW9uIGFsaXZlIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIFJQQyBjYWxscy4ifX0sS289eyJhZGQtZW50cnkiOiJBZGljaW9uYXIgY29uZmlndXJhw6fDo28iLCJjb25uZWN0b3ItYWRkIjoiQWRpY2lvbmFyIG5vdm8gY29uZWN0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkhhYmlsaXRhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tZSBkbyBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTyBub21lIGRvIGNvbmVjdG9yIMOpIG9icmlnYXTDs3Jpby4iLCJjb25uZWN0b3ItdHlwZSI6IlRpcG8gZGUgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6Ik8gdGlwbyBkZSBjb25lY3RvciDDqSBvYnJpZ2F0w7NyaW8uIixjb25uZWN0b3JzOiJDb25maWd1cmHDp8OjbyBkZSBjb25lY3RvcmVzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JpYXIgdW0gbm92byBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJUZW0gY2VydGV6YSBkZSBxdWUgZGVzZWphIGNyaWFyIHVtIG5vdm8gZ2F0ZXdheSBjb20gbyBub21lOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiRXhjbHVpciBjb25maWd1cmHDp8OjbyIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGRlIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkrDoSBleGlzdGUgdW0gZGlzcG9zaXRpdm8gY29tIG8gbWVzbW8gbm9tZS4iLCJnYXRld2F5LW5hbWUiOiJOb21lIGRvIGdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJPIG5vbWUgZG8gZ2F0ZXdheSDDqSBvYnJpZ2F0w7NyaW8uIiwiZ2F0ZXdheS1zYXZlZCI6IkEgY29uZmlndXJhw6fDo28gZG8gZ2F0ZXdheSBmb2kgc2FsdmEgY29ycmV0YW1lbnRlLiIsImpzb24tcGFyc2UiOiJKU09OIGludsOhbGlkby4iLCJqc29uLXJlcXVpcmVkIjoiTyBjYW1wbyBuw6NvIHBvZGUgZXN0YXIgZW0gYnJhbmNvLiIsIm5vLWNvbm5lY3RvcnMiOiJTZW0gY29uZWN0b3JlcyIsIm5vLWRhdGEiOiJTZW0gY29uZmlndXJhw6fDtWVzIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5lbmh1bSBnYXRld2F5IGVuY29udHJhZG8uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG7Do28gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJDYW1pbmhvIHBhcmEgYXJxdWl2b3MgZGUgbG9nIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiTyBjYW1pbmhvIMOpIG9icmlnYXTDs3JpbyIscmVtb3RlOiJDb25maWd1cmHDp8OjbyByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik7DrXZlbCBkZSByZWdpc3RybyBlbSBsb2ciLCJyZW1vdmUtZW50cnkiOiJSZW1vdmVyIGNvbmZpZ3VyYcOnw6NvIiwic2F2ZS10aXAiOiJTYWx2YXIgYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyIsInNlY3VyaXR5LXR5cGUiOiJUaXBvIGRlIHNlZ3VyYW7Dp2EiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkZSBBY2Vzc28iLHRsczoiVExTIn0sc3RvcmFnZToiQXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJxdWl2byIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTsO6bWVybyBtw6F4aW1vIGRlIGFycXVpdm9zIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gw6kgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik8gbsO6bWVybyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gZGUgcmVnaXN0cm9zIMOpIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTyBuw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIMOpIG9icmlnYXTDs3Jpby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIMOpIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik8gbsO6bWVybyBuw6NvIMOpIHbDoWxpZG8uIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJPIHRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1wYXRoIjoiQ2FtaW5obyBkZSBhcm1hemVuYW1lbnRvIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiTyBjYW1pbmhvIGRlIGFybWF6ZW5hbWVudG8gw6kgb2JyaWdhdMOzcmlvLiIsInN0b3JhZ2UtdHlwZSI6IlRpcG8gZGUgYXJtYXplbmFtZW50byIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQXJtYXplbmFtZW50byBkZSBhcnF1aXZvIiwibWVtb3J5LXN0b3JhZ2UiOiJBcm1hemVuYW1lbnRvIGRlIG1lbcOzcmlhIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikhvc3QgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiTyBob3N0IMOpIG9icmlnYXTDs3Jpby4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydGEgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik8gbsO6bWVybyBtw6F4aW1vIGRlIHBvcnRhcyDDqSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIGRlIHBvcnRhcyDDqSAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IkEgcG9ydGEgbsOjbyDDqSB2w6FsaWRhLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJBIHBvcnRhIMOpIG9icmlnYXTDs3JpYS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IkNvbmZpZyBUaWR5IEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmHDp8OjbyBkbyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IkNhbWluaG8gcGFyYSBjZXJ0aWZpY2FkbyBkZSBBdXRvcmlkYWRlIGRlIENlcnRpZmljYcOnw6NvIG5vIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDYW1pbmhvIHBhcmEgY2VydGlmaWNhZG8gZGUgY2xpZW50ZSBubyBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJDYW1pbmhvIHBhcmEgY2hhdmUgcHJpdmFkYSBubyBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJBbHRlcm5hciB0ZWxhIGludGVpcmEiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYcOnw6NvIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkaWNpb25hci9hdHVhbGl6YXIgY29uZmlndXJhw6fDo28gZGUgSlNPTiJ9LCRvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2lqbyIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3YgcHJpa2xqdcSNZWsiLCJjb25uZWN0b3ItZW5hYmxlZCI6Ik9tb2dvxI1pIHByaWtsanXEjWVrIiwiY29ubmVjdG9yLW5hbWUiOiJJbWUgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkltZSBwcmlrbGp1xI1rYSBqZSBvYnZlem5vLiIsImNvbm5lY3Rvci10eXBlIjoiVnJzdGEgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IlphaHRldmEgc2UgdnJzdGEgcHJpa2xqdcSNa2EuIixjb25uZWN0b3JzOiJLb25maWd1cmFjaWphIHByaWtsanXEjWtvdiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlVzdHZhcmkgbm92IHByZWhvZCIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQWxpIHN0ZSBwcmVwcmnEjWFuaSwgZGEgxb5lbGl0ZSB1c3R2YXJpdGkgbm92IHByZWhvZCB6IGltZW5vbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6Ikl6YnJpxaFpIGtvbmZpZ3VyYWNpam8iLCJkb3dubG9hZC10aXAiOiJQcmVub3Mga29uZmlndXJhY2lqc2tlIGRhdG90ZWtlIixnYXRld2F5OiJQcmVob2QiLCJnYXRld2F5LWV4aXN0cyI6Ik5hcHJhdmEgeiBpc3RpbSBpbWVub20gxb5lIG9ic3RhamEuIiwiZ2F0ZXdheS1uYW1lIjoiSW1lIHByZWhvZGEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJJbWUgcHJlaG9kYSBqZSBvYnZlem5vLiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjaWphIHByZWhvZGEgamUgdXNwZcWhbm8gc2hyYW5qZW5hLiIsImpzb24tcGFyc2UiOiJOZXZlbGphdmVuIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGplIG5lIHNtZSBiaXRpIHByYXpuby4iLCJuby1jb25uZWN0b3JzIjoiTmkgcHJpa2xqdcSNa292Iiwibm8tZGF0YSI6IkJyZXoga29uZmlndXJhY2lqIiwibm8tZ2F0ZXdheS1mb3VuZCI6IlByZWhvZCBuaSBuYWpkZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pIG1vZ2/EjWUgbmFqdGkuIiwicGF0aC1sb2dzIjoiUG90IGRvIGRuZXZuacWha2loIGRhdG90ZWsiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQb3QgamUgb2J2ZXpuYS4iLHJlbW90ZToiT2RkYWxqZW5hIGtvbmZpZ3VyYWNpamEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJhdmVuIGJlbGXFvmVuamEiLCJyZW1vdmUtZW50cnkiOiJPZHN0cmFuaSBrb25maWd1cmFjaWpvIiwic2F2ZS10aXAiOiJTaHJhbmkga29uZmlndXJhY2lqc2tvIGRhdG90ZWtvIiwic2VjdXJpdHktdHlwZSI6IlZyc3RhIHphxaHEjWl0ZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkRvc3RvcG5pIMW+ZXRvbiIsdGxzOiJUTFMifSxzdG9yYWdlOiJTaHJhbWJhIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgZGF0b3Rla2kiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik5hanZlxI1qZSDFoXRldmlsbyBkYXRvdGVrIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLFoHRldmlsa2EgamUgb2J2ZXpuYS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgcG9tbmlsbmlrdSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyB6YXBpc292IGplIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoixaB0ZXZpbGthIG5pIHZlbGphdm5hLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJaYWh0ZXZhbiBqZSBuYWp2ZcSNIHphcGlzb3YuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJOYWp2ZcSNamEgdmVsaWtvc3QgcGFrZXRhIGRvZ29ka292Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJaYWh0ZXZhbmEgamUgbmFqdmXEjWphIHZlbGlrb3N0IHBha2V0YSBkb2dvZGtvdi4iLCJzdG9yYWdlLXBhdGgiOiJQb3QgcG9tbmlsbmlrYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlphaHRldmFuYSBqZSBwb3QgZG8gcG9tbmlsbmlrYS4iLCJzdG9yYWdlLXR5cGUiOiJWcnN0YSBwb21uaWxuaWthIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJTaHJhbWJhIGRhdG90ZWsiLCJtZW1vcnktc3RvcmFnZSI6IlNwb21pbiBwb21uaWxuaWthIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikdvc3RpdGVsaiBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJQb3RyZWJlbiBqZSBnb3N0aXRlbGouIiwidGhpbmdzYm9hcmQtcG9ydCI6IlZyYXRhIFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJOYWp2ZcSNamEgxaF0ZXZpbGthIHZyYXQgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJOYWptYW5qxaFhIMWhdGV2aWxrYSB2cmF0IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiVnJhdGEgbmlzbyB2ZWxqYXZuYS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG90cmVibmEgc28gdnJhdGEuIix0aWR5OiJVcmVqZW5vIiwidGlkeS10aXAiOiJVcmVqZW5hIGtvbmZpZ3VyYWNpamEgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IktvbmZpZ3VyYWNpamEga29uZWt0b3JqYSB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBvdCBkbyBwb3RyZGlsYSBDQSBuYSBwcmVob2R1IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUG90IGRvIHBvdHJkaWxhIHN0cmFua2UgbmEgcHJlaG9kdSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUG90IGRvIHphc2VibmVnYSBrbGp1xI1hIG5hIHByZWhvZHUiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlByZWtsb3AgbmEgY2Vsb3phc2xvbnNraSBuYcSNaW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNpamEgSlNPTiAqIiwidXBkYXRlLWNvbmZpZyI6IkRvZGFqIC8gcG9zb2RvYmkga29uZmlndXJhY2lqbyBKU09OIn0sWW89eyJhZGQtZW50cnkiOiJZYXDEsWxhbmTEsXJtYSBla2xlIiwiY29ubmVjdG9yLWFkZCI6IlllbmkgYmHEn2xhecSxY8SxIGVrbGUiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkJhxJ9sYXnEsWPEsXnEsSBldGtpbmxlxZ90aXIiLCJjb25uZWN0b3ItbmFtZSI6IkJhxJ9sYXnEsWPEsSBhZMSxIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJCYcSfbGF5xLFjxLEgYWTEsSBnZXJla2xpLiIsImNvbm5lY3Rvci10eXBlIjoiQmHEn2xhecSxY8SxIHRpcGkiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkJhxJ9sYXnEsWPEsSB0w7xyw7wgZ2VyZWtsaS4iLGNvbm5lY3RvcnM6IkJhxJ9sYXnEsWPEsWxhcsSxbiB5YXDEsWxhbmTEsXJtYXPEsSIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVyIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiIne3tnYXRld2F5TmFtZX19JyBhZMSxbmRhIHllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo/IixkZWxldGU6IllhcMSxbGFuZMSxcm1hecSxIHNpbCIsImRvd25sb2FkLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGluZGlyaW4iLGdhdGV3YXk6IkHEnyBnZcOnaWRpIiwiZ2F0ZXdheS1leGlzdHMiOiJBeW7EsSBhZGEgc2FoaXAgY2loYXogemF0ZW4gdmFyLiIsImdhdGV3YXktbmFtZSI6IkHEnyBnZcOnaWRpIGFkxLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJBxJ8gZ2XDp2lkaSBhZMSxIGdlcmVrbGkuIiwiZ2F0ZXdheS1zYXZlZCI6IkHEnyBnZcOnaWRpIHlhcMSxbGFuZMSxcm1hc8SxIGJhxZ9hcsSxeWxhIGtheWRlZGlsZGkuIiwianNvbi1wYXJzZSI6Ikdlw6dlcmxpIGJpciBKU09OIGRlxJ9pbC4iLCJqc29uLXJlcXVpcmVkIjoiQWxhbiBib8WfIG9sYW1hei4iLCJuby1jb25uZWN0b3JzIjoiQmHEn2xhecSxY8SxIHlvayIsIm5vLWRhdGEiOiJZYXDEsWxhbmTEsXJtYSB5b2siLCJuby1nYXRld2F5LWZvdW5kIjoiQcSfIGdlw6dpZGkgYnVsdW5hbWFkxLEuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIGJ1bHVuYW1hZMSxLiIsInBhdGgtbG9ncyI6IkxvZyBkb3N5YWxhcsSxIHlvbHUiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJMb2cgZG9zeWFsYXLEsSBkaXppbmkgZ2VyZWtsaS4iLHJlbW90ZToiVXpha3RhbiB5YXDEsWxhbmTEsXJtYSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nbGFtYSBzZXZpeWVzaSIsInJlbW92ZS1lbnRyeSI6IllhcMSxbGFuZMSxcm1hecSxIGthbGTEsXIiLCJzYXZlLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGtheWRldCIsInNlY3VyaXR5LXR5cGUiOiJHw7x2ZW5saWsgdMO8csO8Iiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiQWNjZXNzIFRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IkRlcG9sYW1hIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiRG9zeWFkYWtpIG1ha3NpbXVtIGthecSxdCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc2ltdW0gZG9zeWEgc2F5xLFzxLEiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIHNhecSxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJTYXnEsSBnZcOnZXJsaSBkZcSfaWwuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJTYXnEsSBnZXJla2xpLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJEZXBvZGFraSBtYWtzaW11bSBrYXnEsXQiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0ga2F5xLF0IHNhecSxc8SxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlNhecSxIGdlw6dlcmxpIGRlxJ9pbC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWFrc2ltdW0ga2F5xLF0IGdlcmVrbGkuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYWtzaW11bSBldGtpbmxpayBwYWtldGkgYm95dXR1Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW11bSBzYXnEsSAxJ2Rpci4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiU2F5xLEgZ2XDp2VybGkgZGXEn2lsLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrc2ltdW0gZXRraW5saWsgcGFrZXRpIGJveXV0dSBnZXJla2xpLiIsInN0b3JhZ2UtcGF0aCI6IkRlcG9sYW1hIHlvbHUiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJEZXBvbGFtYSB5b2x1IGdlcmVrbGkuIiwic3RvcmFnZS10eXBlIjoiRGVwb2xhbWEgdMO8csO8Iiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJEb3N5YSBkZXBvbGFtYSIsIm1lbW9yeS1zdG9yYWdlIjoiQmVsbGVrIGRlcG9sYW1hIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJkIGhvc3QiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiSG9zdCBnZXJla2xpLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzaW11bSBwb3J0IG51bWFyYXPEsSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltdW0gcG9ydCBudW1hcmFzxLEgMSdkaXIuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBnZcOnZXJsaSBkZcSfaWwuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgZ2VyZWtsaS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IlRpZHkgY29uZmlnIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25uZWN0b3Ige3t0eXBlTmFtZX19IGNvbmZpZ3VyYXRpb24iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgb24gZ2F0ZXdheSIsInRvZ2dsZS1mdWxsc2NyZWVuIjoiVG9nZ2xlIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWRkL3VwZGF0ZSBjb25maWd1cmF0aW9uIEpTT04ifSxRbz17ImFkZC1lbnRyeSI6Iua3u+WKoOmFjee9riIsYWR2YW5jZWQ6IumrmOe6pyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IuajgOafpeiuvuWkh+a0u+WKqCIsY29tbWFuZDoiRG9ja2Vy5ZG95LukIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlcuWRveS7pOW3suWkjeWItuWIsOWJqui0tOadvyIsY29uZmlndXJhdGlvbjoi6YWN572uIiwiY29ubmVjdG9yLWFkZCI6Iua3u+WKoOi/nuaOpeWZqCIsImNvbm5lY3Rvci1lbmFibGVkIjoi5ZCv55So6L+e5o6l5ZmoIiwiY29ubmVjdG9yLW5hbWUiOiLov57mjqXlmajlkI3np7AiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Iui/nuaOpeWZqOWQjeensOW/heWhq+OAgiIsImNvbm5lY3Rvci10eXBlIjoi6L+e5o6l5Zmo57G75Z6LIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiLov57mjqXlmajnsbvlnovlv4XloavjgIIiLGNvbm5lY3RvcnM6Iui/nuaOpeWZqOmFjee9riIsImNvbm5lY3RvcnMtY29uZmlnIjoi6L+e5o6l5Zmo6YWN572uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoi5bey5ZCv55SoIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi5ZCN56ewIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoi57G75Z6LIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiLnirbmgIEiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiLmk43kvZwiLCJjb25uZWN0b3JzLXRhYmxlLWtleSI6IumUriIsImNvbm5lY3RvcnMtdGFibGUtY2xhc3MiOiLnsbsiLCJycGMtY29tbWFuZC1zZW5kIjoi5Y+R6YCBIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi57uT5p6cIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLnvJbovpHlj4LmlbAiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLpgJrnlKjphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLliJvlu7rnvZHlhbMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuehruWumuimgeWIm+W7uuWQjeS4uiAne3tnYXRld2F5TmFtZX19JyDnmoTmlrDnvZHlhbPvvJ8iLCJjcmVhdGVkLXRpbWUiOiLliJvlu7rml7bpl7QiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoi6YWN572u5bCG6KKr5Yig6ZmkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiLlj6rmnInlr7nnvZHlhbPov5vooYzniannkIborr/pl67ml7bvvIzmiY3mnInlj6/og73lhbPpl63ov5znqIvphY3nva7jgILmiYDmnInlhYjliY3nmoTphY3nva7pg73lsIbooqvliKDpmaTjgII8YnI+PGJyPlxu6KaB5YWz6Zet6YWN572u77yM6K+35Zyo5LiL6Z2i6L6T5YWl572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0Ijoi572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoi572R5YWz5ZCN56ew5piv5b+F6ZyA55qEIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLlhbPpl60iLGRlbGV0ZToi5Yig6Zmk6YWN572uIiwiZG93bmxvYWQtdGlwIjoi5LiL6L296YWN572uIiwiZHJvcC1maWxlIjoi5bCG5paH5Lu25ouW5pS+5Yiw5q2k5aSE5oiWIixnYXRld2F5OiLnvZHlhbMiLCJnYXRld2F5LWV4aXN0cyI6IuWQjOWQjeiuvuWkh+W3suWtmOWcqOOAgiIsImdhdGV3YXktbmFtZSI6Iue9keWFs+WQjeensCIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Iue9keWFs+WQjeensOW/heWhq+OAgiIsImdhdGV3YXktc2F2ZWQiOiLlt7LmiJDlip/kv53lrZjnvZHlhbPphY3nva7jgIIiLGdycGM6IkdSUEMiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuS/neaMgei/nuaOpei2heaXtu+8iOavq+enku+8iSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoi6ZyA6KaB5L+d5oyB6L+e5o6l6LaF5pe2IiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi5L+d5oyB6L+e5o6l6LaF5pe25LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXBhdHRlcm4iOiLkv53mjIHov57mjqXotoXml7bml6DmlYgiLCJncnBjLWtlZXAtYWxpdmUiOiLkv53mjIHov57mjqXvvIjmr6vnp5LvvIkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLpnIDopoHkv53mjIHov57mjqUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoi5L+d5oyB6L+e5o6l5LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoi5L+d5oyB6L+e5o6l5peg5pWIIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi5pyA5bCPUGluZ+mXtOmalO+8iOavq+enku+8iSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6IumcgOimgeacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoi5pyA5bCPUGluZ+mXtOmalOS4jeiDveWwj+S6jjEiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVybiI6IuacgOWwj1Bpbmfpl7TpmpTml6DmlYgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6IuaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpTvvIjmr6vnp5LvvIkiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5LiN6IO95bCP5LqOMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5peg5pWIIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbAiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsOS4jeiDveWwj+S6jjEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6IuaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbDml6DmlYgiLCJpbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzIjoi5LiN5rS76LeD5qOA5p+l5pyf77yI56eS77yJIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IumcgOimgeS4jea0u+i3g+ajgOafpeacnyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoi5LiN5rS76LeD5qOA5p+l5pyf5LiN6IO95bCP5LqOMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+ajgOafpeacn+aXoOaViCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi5LiN5rS76LeD6LaF5pe277yI56eS77yJIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiLpnIDopoHkuI3mtLvot4PotoXml7YiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiLkuI3mtLvot4PotoXml7bkuI3og73lsI/kuo4xIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+i2heaXtuaXoOaViCIsImpzb24tcGFyc2UiOiLml6DmlYjnmoRKU09O44CCIiwianNvbi1yZXF1aXJlZCI6IuWtl+auteS4jeiDveS4uuepuuOAgiIsbG9nczp7bG9nczoi5pel5b+XIixkYXlzOiLlpKkiLGhvdXJzOiLlsI/ml7YiLG1pbnV0ZXM6IuWIhumSnyIsc2Vjb25kczoi56eSIiwiZGF0ZS1mb3JtYXQiOiLml6XmnJ/moLzlvI8iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IumcgOimgeaXpeacn+agvOW8jyIsImxvZy1mb3JtYXQiOiLml6Xlv5fmoLzlvI8iLCJsb2ctdHlwZSI6IuaXpeW/l+exu+WeiyIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiLpnIDopoHml6Xlv5fmoLzlvI8iLHJlbW90ZToi6L+c56iL5pel5b+X6K6w5b2VIiwicmVtb3RlLWxvZ3MiOiLov5znqIvml6Xlv5ciLGxvY2FsOiLmnKzlnLDml6Xlv5forrDlvZUiLGxldmVsOiLml6Xlv5fnuqfliKsiLCJmaWxlLXBhdGgiOiLmlofku7bot6/lvoQiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHmlofku7bot6/lvoQiLCJzYXZpbmctcGVyaW9kIjoi5pel5b+X5L+d5a2Y5pyf6ZmQIiwic2F2aW5nLXBlcmlvZC1taW4iOiLml6Xlv5fkv53lrZjmnJ/pmZDkuI3og73lsI/kuo4xIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IumcgOimgeaXpeW/l+S/neWtmOacn+mZkCIsImJhY2t1cC1jb3VudCI6IuWkh+S7veaVsOmHjyIsImJhY2t1cC1jb3VudC1taW4iOiLlpIfku73mlbDph4/kuI3og73lsI/kuo4xIiwiYmFja3VwLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB5aSH5Lu95pWw6YePIn0sIm1pbi1wYWNrLXNlbmQtZGVsYXkiOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/vvIjmr6vnp5LvvIkiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoi5pyA5bCP5YyF5Y+R6YCB5bu26L+f5piv5b+F6ZyA55qEIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/kuI3og73lsI/kuo4wIiwibm8tY29ubmVjdG9ycyI6IuaXoOi/nuaOpeWZqCIsIm5vLWRhdGEiOiLmsqHmnInphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw572R5YWz44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IuacquaJvuWIsCAne3tpdGVtfX0nIOOAgiIsInBhdGgtbG9ncyI6IuaXpeW/l+aWh+S7tueahOi3r+W+hCIsInBhdGgtbG9ncy1yZXF1aXJlZCI6Iui3r+W+hOaYr+W/hemcgOeahOOAgiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5L+d5oyB6L+e5o6l6K645Y+v77yM5peg6ZyA5ZON5bqUIixyZW1vdGU6Iui/nOeoi+mFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel5b+X6K6w5b2V57qn5YirIiwicmVtb3ZlLWVudHJ5Ijoi5Yig6Zmk6YWN572uIiwicmVtb3RlLXNoZWxsIjoi6L+c56iLU2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Iui/nOeoi+mFjee9riIsb3RoZXI6IuWFtuS7liIsInNhdmUtdGlwIjoi5L+d5a2Y6YWN572uIiwic2VjdXJpdHktdHlwZSI6IuWuieWFqOexu+WeiyIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Iuiuv+mXruS7pOeJjCIsInVzZXJuYW1lLXBhc3N3b3JkIjoi55So5oi35ZCN5ZKM5a+G56CBIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDorr/pl67ku6TniYwiLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyDnp4HpkqUifSwic2VydmVyLXBvcnQiOiLmnI3liqHlmajnq6/lj6MiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoi57uf6K6h5L+h5oGvIixzdGF0aXN0aWNzOiLnu5/orqHkv6Hmga8iLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLml6Dlj6/nlKjnu5/orqHkv6Hmga8iLGNvbW1hbmRzOiLlkb3ku6QiLCJzZW5kLXBlcmlvZCI6Iue7n+iuoeS/oeaBr+WPkemAgeWRqOacn++8iOenku+8iSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5piv5b+F6ZyA55qEIiwic2VuZC1wZXJpb2QtbWluIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5LiN6IO95bCP5LqONjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5peg5pWIIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u77yI56eS77yJIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u5piv5b+F6ZyA55qEIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IuajgOafpei/nuaOpeWZqOmFjee9ruS4jeiDveWwj+S6jjEiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVybiI6IuajgOafpei/nuaOpeWZqOmFjee9ruaXoOaViCIsYWRkOiLmt7vliqDlkb3ku6QiLHRpbWVvdXQ6Iui2heaXtuaXtumXtCIsInRpbWVvdXQtbXMiOiLotoXml7bml7bpl7TvvIjmr6vnp5LvvIkiLCJ0aW1lb3V0LXJlcXVpcmVkIjoi6LaF5pe25pe26Ze05piv5b+F6ZyA55qEIiwidGltZW91dC1taW4iOiLotoXml7bml7bpl7TkuI3og73lsI/kuo4xIiwidGltZW91dC1wYXR0ZXJuIjoi6LaF5pe25pe26Ze05peg5pWIIiwiYXR0cmlidXRlLW5hbWUiOiLlsZ7mgKflkI3np7AiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IuWxnuaAp+WQjeensOaYr+W/hemcgOeahCIsY29tbWFuZDoi5ZG95LukIiwiY29tbWFuZC1yZXF1aXJlZCI6IuWRveS7pOaYr+W/hemcgOeahCIsImNvbW1hbmQtcGF0dGVybiI6IuWRveS7pOaXoOaViCIscmVtb3ZlOiLliKDpmaTlkb3ku6QifSxzdG9yYWdlOiLlrZjlgqgiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiLmlofku7bkuK3nmoTmnIDlpKforrDlvZXmlbAiLCJzdG9yYWdlLW1heC1maWxlcyI6IuacgOWkp+aWh+S7tuaVsCIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLmlbDlrZfmmK/lv4XpnIDnmoTjgIIiLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoi5a2Y5YKo5Lit55qE5pyA5aSn6K6w5b2V5pWwIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6IuacgOWkp+iusOW9lemhueW/heWhq+OAgiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6IuacgOWwj+iusOW9leaVsOS4ujHjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiLmlbDlrZfkuI3lkIjms5XjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB6K+75Y+W6K6w5b2V5pWw44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTmnIDlpKfor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6IuaVsOWtl+S4jeWQiOazleOAgiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi5pyA5aSn6K+75Y+W6K6w5b2V5pWw5b+F6ZyA44CCIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoi5pWw5o2u5paH5Lu25aS56Lev5b6EIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoi6ZyA6KaB5pWw5o2u5paH5Lu25aS56Lev5b6E44CCIiwic3RvcmFnZS1wYWNrLXNpemUiOiLmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi5pyA5aSn5LqL5Lu25YyF5aSn5bCP5b+F5aGr44CCIiwic3RvcmFnZS1wYXRoIjoi5a2Y5YKo6Lev5b6EIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoi5a2Y5YKo6Lev5b6E5b+F5aGr44CCIiwic3RvcmFnZS10eXBlIjoi5a2Y5YKo57G75Z6LIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiLmlofku7blrZjlgqgiLCJtZW1vcnktc3RvcmFnZSI6IuWGheWtmOWtmOWCqCIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IuW4uOinhCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZOS4u+acuiIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiLkuLvmnLrlv4XloavjgIIiLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmTnq6/lj6MiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IuacgOWkp+err+WPo+WPt+S4ujY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/nq6/lj6Plj7fkuLox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi56uv5Y+j5peg5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Iuerr+WPo+W/heWhq+OAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6L+e5o6l5ZmoIHt7dHlwZU5hbWV9fSDphY3nva4iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6Iue9keWFs+S4ikNB6K+B5Lmm55qE6Lev5b6EIiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoi572R5YWz5LiK5a6i5oi356uv6K+B5Lmm55qE6Lev5b6EIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi5raI5oGvVFRM5qOA5p+l5bCP5pe25pWwIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi6ZyA6KaB5o+Q5L6b5raI5oGvVFRM5qOA5p+l5bCP5pe25pWw44CCIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoi5raI5oGvVFRM5aSp5pWwIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiLpnIDopoHmj5Dkvpvmtojmga9UVEzlpKnmlbDjgIIiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiLpnIDopoHmj5DkvptRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IlFvU+WAvOeahOiMg+WbtOaYr+S7jjDliLAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLnvZHlhbPkuIrnp4HpkqXnmoTot6/lvoQiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IuWIh+aNouWFqOWxjyIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoi6YWN572uSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoi5re75YqgL+abtOaWsOmFjee9rkpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvphY3nva7lkoznrqHnkIYiLCJyZW1vdGUtc2hlbGwiOiLpgJrov4fov5znqItTaGVsbOWwj+mDqOS7tuWQr+eUqOWvuee9keWFs+aTjeS9nOezu+e7n+eahOi/nOeoi+aOp+WItiIsaG9zdDoiVGhpbmdzQm9hcmQg5Li75py65ZCN5oiWSVDlnLDlnYAiLHBvcnQ6IlRoaW5nc0JvYXJkIE1RVFTmnI3liqHnq6/lj6MiLHRva2VuOiJUaGluZ3NCb2FyZCDnvZHlhbPorr/pl67ku6TniYwiLCJjbGllbnQtaWQiOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU5a6i5oi356uvSUQiLHVzZXJuYW1lOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU55So5oi35ZCNIixwYXNzd29yZDoiVGhpbmdzQm9hcmQg572R5YWzTVFUVOWvhueggSIsImNhLWNlcnQiOiJDQeivgeS5puaWh+S7tueahOi3r+W+hCIsImRhdGUtZm9ybSI6IuaXpeW/l+a2iOaBr+S4reeahOaXpeacn+agvOW8jyIsImRhdGEtZm9sZGVyIjoi5YyF5ZCr5pWw5o2u55qE5paH5Lu25aS555qE6Lev5b6E77yI55u45a+55oiW57ud5a+56Lev5b6E77yJIiwibG9nLWZvcm1hdCI6IuaXpeW/l+a2iOaBr+agvOW8jyIsInJlbW90ZS1sb2ciOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvml6Xlv5forrDlvZXlkozml6Xlv5for7vlj5YiLCJiYWNrdXAtY291bnQiOiLlpoLmnpzlpIfku73orqHmlbDlpKfkuo4w77yM5YiZ5Zyo5omn6KGM6L2u5o2i5pe277yM5pyA5aSa5L+d55WZ5aSH5Lu96K6h5pWw5Liq5paH5Lu2LeacgOaXp+eahOaWh+S7tuWwhuiiq+WIoOmZpCIsc3RvcmFnZToi5o+Q5L6b5bCG5pWw5o2u5Y+R6YCB5Yiw5bmz5Y+w5LmL5YmN5L+d5a2Y5Lyg5YWl5pWw5o2u55qE6YWN572uIiwibWF4LWZpbGUtY291bnQiOiLlsIbliJvlu7rnmoTmlofku7bnmoTmnIDlpKfmlbDph48iLCJtYXgtcmVhZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiLkuIDkuKrmlofku7bkuK3lrZjlgqjnmoTmnIDlpKforrDlvZXmlbAiLCJyZWFkLXJlY29yZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiLlnKjlsIbmlbDmja7lj5HpgIHliLBUaGluZ3NCb2FyZOS5i+WJje+8jOWtmOWCqOS4reeahOacgOWkp+aVsOaNruiuoeaVsCIsInR0bC1jaGVjay1ob3VyIjoi572R5YWz5aSa5LmF5qOA5p+l5LiA5qyh5pWw5o2u5piv5ZCm6L+H5pe2IiwidHRsLW1lc3NhZ2VzLWRheSI6IuWtmOWCqOWwhuS/neWtmOaVsOaNrueahOacgOWkp+WkqeaVsCIsY29tbWFuZHM6IueUqOS6juaUtumbhumZhOWKoOe7n+iuoeS/oeaBr+eahOWRveS7pCIsYXR0cmlidXRlOiLnu5/orqHpgaXmtYvplK4iLHRpbWVvdXQ6IuWRveS7pOaJp+ihjOeahOi2heaXtuaXtumXtCIsY29tbWFuZDoi5ZG95Luk5omn6KGM55qE57uT5p6c77yM5bCG55So5L2c6YGl5rWL55qE5YC8IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5Ijoi5ZCv55So55uR6KeG5q+P5Liq6L+e5o6l6K6+5aSH55qE5rS75YqoIiwiaW5hY3Rpdml0eS10aW1lb3V0Ijoi5Zyo5q2k5pe26Ze05ZCO77yM572R5YWz5bCG5pat5byA6K6+5aSH55qE6L+e5o6lIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLorr7lpIfmtLvliqjmo4Dmn6XnmoTlkajmnJ8iLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLlj5HpgIHmtojmga/ljIXkuYvpl7TnmoTlu7bov5/vvIjlh4/lsI/mraTorr7nva7kvJrlr7zoh7Tlop7liqBDUFXkvb/nlKjnjofvvIkiLHFvczoiTVFUVOa2iOaBr+S8oOmAkueahOacjeWKoei0qOmHj++8iDAt6Iez5aSa5LiA5qyh77yMMS3oh7PlsJHkuIDmrKHvvIkiLCJzZXJ2ZXItcG9ydCI6IkdSUEPmnI3liqHlmajkvqblkKzkvKDlhaXov57mjqXnmoTnvZHnu5znq6/lj6MiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuWcqOiAg+iZkei/nuaOpeatu+S6oeS5i+WJje+8jOacjeWKoeWZqOetieW+hWtlZXBhbGl2ZSBwaW5n5ZON5bqU55qE5pyA6ZW/5pe26Ze0IiwiZ3JwYy1rZWVwLWFsaXZlIjoi5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25Lik5Liq6L+e57uta2VlcGFsaXZlIHBpbmfmtojmga/kuYvpl7TnmoTmjIHnu63ml7bpl7QiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6IuWcqOayoeacieaOpeaUtuWIsOS7u+S9leaVsOaNruS5i+WJje+8jOacjeWKoeWZqOWPr+S7peWPkemAgeeahGtlZXBhbGl2ZSBwaW5n5raI5oGv55qE5pyA5aSn5pWw6YeP77yM54S25ZCO5bCG6L+e5o6l6KeG5Li65q275LqhIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiLlnKjmsqHmnInlj5HpgIHmiJbmjqXmlLbmlbDmja7ml7bvvIzmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5YWB6K645pyN5Yqh5Zmo5Zyo5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25L+d5oyBR1JQQ+i/nuaOpea0u+WKqCJ9LCJkb2NrZXItbGFiZWwiOiLkvb/nlKjku6XkuIvmjIfku6TlnKggRG9ja2VyIGNvbXBvc2Ug5Lit6L+Q6KGMIElvVCDnvZHlhbPvvIzlubbkuLrpgInlrprnmoTorr7lpIfmj5Dkvpvlh63mja4iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi5L2/55So5Lul5LiL6K+05piO5LiL6L2944CB5a6J6KOF5ZKM6K6+572uIERvY2tlciBDb21wb3NlIiwiZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlIjoi5LiL6L296YWN572u5paH5Lu2IiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLkuIvovb3mgqjnmoTnvZHlhbPnmoQgZG9ja2VyLWNvbXBvc2UueW1sIOaWh+S7tiIsImxhdW5jaC1nYXRld2F5Ijoi5ZCv5Yqo572R5YWzIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoi5Zyo5YyF5ZCrIGRvY2tlci1jb21wb3NlLnltbCDmlofku7bnmoTmlofku7blpLnkuK3vvIzkvb/nlKjku6XkuIvlkb3ku6TlnKjnu4jnq6/kuK3lkK/liqjnvZHlhbMifSxKbz17ImFkZC1lbnRyeSI6IuWinuWKoOmFjee9riIsImNvbm5lY3Rvci1hZGQiOiLlop7liqDmlrDpgKPmjqXlmagiLCJjb25uZWN0b3ItZW5hYmxlZCI6IuWVn+eUqOmAo+aOpeWZqCIsImNvbm5lY3Rvci1uYW1lIjoi6YCj5o6l5Zmo5ZCN56ixIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiLpnIDopoHpgKPmjqXlmajlkI3nqLHjgIIiLCJjb25uZWN0b3ItdHlwZSI6IumAo+aOpeWZqOmhnuWeiyIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoi6ZyA6KaB6YCj5o6l5Zmo6aGe5Z6L44CCIixjb25uZWN0b3JzOiLpgKPmjqXlmajphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLlu7rnq4vmlrDplpjpgZMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuaCqOeiuuWumuimgeW7uueri+S4gOWAi+WQjeeoseeCuu+8mid7e2dhdGV3YXlOYW1lfX0n55qE5paw6ZaY6YGT5ZeO77yfIixkZWxldGU6IuWIqumZpOmFjee9riIsImRvd25sb2FkLXRpcCI6IuS4i+i8iemFjee9ruaWh+S7tiIsZ2F0ZXdheToi6ZaY6YGTIiwiZ2F0ZXdheS1leGlzdHMiOiLlkIzlkI3oqK3lgpnlt7LlrZjlnKjjgIIiLCJnYXRld2F5LW5hbWUiOiLplpjpgZPlkI3nqLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiLpnIDopoHplpjpgZPlkI3nqLHjgIIiLCJnYXRld2F5LXNhdmVkIjoi6ZaY6YGT6YWN572u5bey5oiQ5Yqf5L+d5a2Y44CCIiwianNvbi1wYXJzZSI6IueEoeaViOeahEpTT04iLCJqc29uLXJlcXVpcmVkIjoi5qyE5L2N5LiN6IO954K656m644CCIiwibm8tY29ubmVjdG9ycyI6IueEoemAo+aOpeWZqCIsIm5vLWRhdGEiOiLnhKHphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw6ZaY6YGT44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiDmnKrmib7liLAne3tpdGVtfX0n44CCIiwicGF0aC1sb2dzIjoi5pel6KqM5paH5Lu255qE6Lev5b6RIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi6ZyA6KaB6Lev5b6R44CCIixyZW1vdGU6Iuenu+mZpOmFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel6KqM6KiY6YyE57Sa5YilIiwicmVtb3ZlLWVudHJ5Ijoi56e76Zmk6YWN572uIiwic2F2ZS10aXAiOiLkv53lrZjphY3nva7mlofku7YiLCJzZWN1cml0eS10eXBlIjoi5a6J5YWo6aGe5Z6LIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoi6Kiq5ZWPVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToi6LKv5a2YIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi5paH5Lu25Lit55qE5pyA5aSn57SA6YyEIiwic3RvcmFnZS1tYXgtZmlsZXMiOiLmnIDlpKfmlofku7bmlbgiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiLmnIDlsI/mlbjph4/ngrox44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoi6ZyA6KaB6Jmf56K844CCIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6IuWtmOWEsuS4reeahOacgOWkp+e0gOmMhCIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoi5pyA5bCP57SA6YyE5pW454K6MeOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfntIDpjITmlbgiLCJzdG9yYWdlLXBhY2stc2l6ZSI6IuacgOWkp+S6i+S7tuWMheWkp+WwjyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6IuacgOWwj+aVuOmHj+eCujHjgIIiLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoi6Jmf56K854Sh5pWI77yOIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhdGgiOiLlrZjlhLLot6/lvpEiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHlrZjlhLLot6/lvpHjgIIiLCJzdG9yYWdlLXR5cGUiOiLlrZjlhLLpoZ7lnosiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IuaWh+S7tuWtmOWEsiIsIm1lbW9yeS1zdG9yYWdlIjoi6KiY5oa26auU5a2Y5YSyIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJk5Li75qmfIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IumcgOimgeS4u+apn+OAgiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZOmAo+aOpeWfoCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4Ijoi5pyA5aSn5Z+g6Jmf54K6IDY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/ln6DomZ/ngrox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi6YCj5o6l5Z+g54Sh5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IumcgOimgemAo+aOpeWfoOOAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6YCj5o6l5Zmoe3t0eXBlTmFtZX196YWN572uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiLplpjpgZPkuIpDQeitieabuOeahOi3r+W+kSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IumWmOmBk+S4iueUqOaItuerr+aGkeaTmueahOi3r+W+kSIsInRscy1wYXRoLXByaXZhdGUta2V5Ijoi6ZaY6YGT5LiK55qE56eB6ZGw6Lev5b6RIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLliIfmj5vlhajonqLluZUiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IumFjee9rkpTT04qIiwidXBkYXRlLWNvbmZpZyI6IuWinuWKoC/mm7TmlrDphY3nva5KU09OIn07Y29uc3QgWG89W2NhLHBhLEZhLERhLEFhLE5hLFBhLGVvLEVvLGlvLGFvLG9vLHFvLHRvLEdvLG5vXTtjbGFzcyBab3tjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lLGZ1bmN0aW9uKGUpe2Uuc2V0VHJhbnNsYXRpb24oImVuX1VTIixPbywhMCksZS5zZXRUcmFuc2xhdGlvbigiYXJfQUUiLFJvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJjYV9FUyIsVm8sITApLGUuc2V0VHJhbnNsYXRpb24oImNzX0NaIixCbywhMCksZS5zZXRUcmFuc2xhdGlvbigiZGFfREsiLFVvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJlc19FUyIsX28sITApLGUuc2V0VHJhbnNsYXRpb24oImtvX0tSIixIbywhMCksZS5zZXRUcmFuc2xhdGlvbigibHRfTFQiLHpvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJubF9CRSIsV28sITApLGUuc2V0VHJhbnNsYXRpb24oInBsX1BMIixqbywhMCksZS5zZXRUcmFuc2xhdGlvbigicHRfQlIiLEtvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJzbF9TSSIsJG8sITApLGUuc2V0VHJhbnNsYXRpb24oInRyX1RSIixZbywhMCksZS5zZXRUcmFuc2xhdGlvbigiemhfQ04iLFFvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJ6aF9UVyIsSm8sITApfShlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5OZ01vZHVsZX0pfXN0YXRpY3t0aGlzLsm1bW9kPXQuybXJtW5nRGVjbGFyZU5nTW9kdWxlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlY2xhcmF0aW9uczpbY2EscGEsRmEsRGEsQWEsTmEsUGEsZW8sRW8saW8sYW8sb28scW8sdG8sR28sbm9dLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOltjYSxwYSxGYSxEYSxBYSxOYSxQYSxlbyxFbyxpbyxhbyxvbyxxbyx0byxHbyxub119KX1zdGF0aWN7dGhpcy7JtWluaj10Lsm1ybVuZ0RlY2xhcmVJbmplY3Rvcih7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpabyxwcm92aWRlcnM6W3ZhXSxpbXBvcnRzOltILEQsUSxNYSxFYSxxYSxJYSxMbyxrbyxGbyxwbyxBbyxObyxnbyxEbyxQb119KX19ZSgiR2F0ZXdheUV4dGVuc2lvbk1vZHVsZSIsWm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Wm8sZGVjb3JhdG9yczpbe3R5cGU6dSxhcmdzOlt7ZGVjbGFyYXRpb25zOlhvLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOlhvLHByb3ZpZGVyczpbdmFdfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSl9fX0pKTsvLyMgc291cmNlTWFwcGluZ1VSTD1nYXRld2F5LW1hbmFnZW1lbnQtZXh0ZW5zaW9uLmpzLm1hcAo=", - "public": false - }, - { - "link": "/api/images/system/gateway_connectors_system_widget_image.png", - "title": "\"Gateway connectors\" system widget image", - "type": "IMAGE", - "subType": "IMAGE", - "fileName": "gateway_connectors_system_widget_image.png", - "publicResourceKey": "tOnk7NUrJmcN1aIfISDwNkNbmDniEXy7", - "mediaType": "image/png", - "data": "iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAAA7VBMVEXg4ODf39/g4ODg4OAAAAD////88vPg4OD39/fo6Ojv7+9hYWHt7e2GhobLy8upqan99fb9+Pn++/zDw8OXl5fb29vnjJHspao9PT1VVVXPz8/l5eX65efd3d1tbW2enp7hc3nz8/O2tra6urrU1NT32dvcWmHxv8KPj4+YmJixsbGgoKBzc3P+/f332Nuqqqp6enrXQEj0zM7Z2dlJSUnZTVR9fX3pmZ2wsLDusraSkpLr6+tpaWmRkZGNjY3eZ23k5OTkf4Xjf4XkgIWBgYHeZm3aTVXvsrbfZ23UMTnFxcXusrWzs7PkgIbeZmxYj4YaAAAABXRSTlPvIMCwAL23wXkAAAxzSURBVHja7NbBquMgGIbhdM75KLbILILw/b+g6L4YqKvCuf/bmtjNTLMJswm2+BIU1M2DWTh9n35N53fv6/Q9nabLDW/e7bIyvi74gC7rb/X299G6TdMZH9F5QDprQHprQHprQHprC1FrM96xDSQyLAzYTWVGX71CDC1QqEi5GEDVlRnITqMBoFHbWLJJkdYhlXZo1nl+LuKw9iEzFSvCG6mBBbZWYQblKjXB1sCIzKuIu1KyabsKqbSZQeQ4yT4k0qD1oIetaf1QLbhAmWdmxJpkgWdWZgRJCAEiq1GQrOKo9iGFd7SCAJl3K4BY0MIwR4YgdIxYaxCxTQwJgIosGYe1D1FmwAVdBCgbSGFWVfABmLSBwM+WPd0IRFSv1WcWI4IXiPLhtCCIK5wdHylWp2KfkBCMYcZh7UP8lZQ78NOmVwiKsP6GF/IHEMa0kME3yHMxJBzWPgRI/u+0zad/xnYobbb+v/FEGZDeG5DeGpDeGpDeGpDeGpDeGpDeGpDe+lDIH/LqoMVtGAjD8OmDDO4kBzUgjWAGDXtY6EEC+STw//9btZO27CYBey+l0PdgsBnLPAgsEpHy58YBeMe9mvEhugJS8KLTCTtdReSKnYrQ06NwHGKJueNXogDUcS8JPmRzQaRXjvf3PcnSItvOTJg4CT5HDKWjEAagQ4maBkmNizo17aXp/ABpiFRVqbKOdn/h5vjxfVdCEcSwoKyEoY7njCFh+7Kt1zLUi7bQamwsxEcgc1LEzBbEJ0lFq3q79Mk5P0BYZYV0rrz0mFvlS543x3ltT0IRmCnl2Je2rVzwVG6pgi89VXbeZq6zSEIkG8ZHdyTCzJWTKMzU06RshvQAkRRJWY2NIth0Ul0hbzif8XYAMpoikign1ReQK2W1aVItqYVt5ppwg1Ca+hGIupcN0sZIMksK6mMED1N43BEskWZpvyHGwbG2QYB9iERHrIN9EnsBsSbNbASHJmwzd8gctvsDEDGzbBDJS61UF4f34kuH2+e/lgQUK2HxEKQYgmCdOgopBmDOiLYUOAte5EvFbc3u2GZKBVW4wcZfOke+nXCkxkAkfLmQ8r91IHYAGV8vl//rZP+pIQxGPTLYwKhHBhsYRh7xYh8WwGv4xMioRwYXALBftr1twkAA/nRXNIwdAgFpwEaFwSZvG0jNixpt7bq264f9/7+zI2xL46Rj+dAITXtELOQAukfH+cx/kdfCHWA3A7fvIi7+Yp7e5nWI6vEuTVPEOEhzpNMcf+L2WmTngQ95XagUwyBf3lL06XJexVWex7gz6Ra5zFbeNZwV02NeIFZbkeZAvCIXVYUh7nA7RbKNbdtTPmyYwfmY4Y6YIn96JlLFeK8qpfAZXSLcbmlb/vURlUyXDI5iJbAjOXKV1BaAluDRIzyH2A5mQohi+f02flCfw1ZkGawLrHAPt0PEsVv0RWsCJlzAqISIM5AJZyzhEiz6QSIZd6LmlOYAosw5FOELCXzKm0doAD+B7dCyt17FzWs0XyoaaiTWyxjXxtrVIWJvdMNmetECJmNOA3MoaD8Tk5HmCybGwuPvs5LrGzFejUc6A+KYiCjBF1xw+tcyRPBUOkQ2m68N9seXREQjkmWQeT4blSNBoUzFZEIBMVbCFGBBcy+JZH5UZmcRMV8tBiaegEhzAUL+FlkwYEKCxzQsGNN/EvEc0uCCUgodIiGtuQHOg8emnWCQhieKXLQe07dbjzdwyEr7N5YofRAsmkRjEIn0fcl8x7OcTPqfJM01+EeK3bN8GEtYOVQsdCPQYNTIbuGKqcJVGgZPeRhQyRf5aTUC/F3j8dqNkk2sgzayT5HWOL8qKBffwqCo0WTY3RC9D94lnB8jI7EqFN6HGIRf0oCk8ng/If3dogz3RYqmi6SKROKnILxbX+X7CemviGGy7SIqx5qOmhqJ4dHnTSPM8C8ZzHq9+yWG7qAbd9j375F/6AvxR3vn2ps2DIXh7nJSbzj2WifOh4QtUy7kAmikChd1gra7a5f//3N2nKwrkGyQSWMh6ys4GCuK+sousR/OCfdGTi5IJ3Rxwp50Qqw7U+veSLvUQiOj8506AiPnz/ZboZy33MidDStfZYM3uFR08xwZ13i1kloYhtlxkMa14QgdJ1zjWmGAPZONQdnDyAWmylzAAbWbNE4K0ui6jUjji57S/GWh8z9POCH0F32UqCe2UUWoJ415tjYiSBqzSbOtruiVEqdKV1UnJOa6gFqRtX4apXGVBwwJ0CEjsaEzZkyXRhFq4IN0XenkMgxKI4v82m1KGqe9Um9PCz2pI42Ug+AMPI/btsc9fJ8Q4nHKpz42KfYBYkjQSZU0CmB6gYOmvyWN2jjAoLbpDj4xBviuKWmcK70e/hbQIdMy+gZjqWnQJV2a84QLOzVjsjT92NR9QPkpVIwkKeg/SCP926SxV+iWNF7VItO+Io3eGmnkifqDNkgjjWpJo+AJU6eY/m3SyHuleGmkyoXMyBaxGRPjjjQufWonCeU0Ikbfx77CR7/OiDnsc1acYhdp/PouHIfa2J1JvJyMV+4brdnUejksSePpE6U6vsWMhAJLBQhCPcpA2JRzSnh6BXOmmrSYfJxzG7Zk+sCB9YGlugcgbFChnjSOc+3zQH5wB/LTwJI3lnYdNPtnh8uoh0T+bxM64ldh0KZkaCHccjWJDRkGf0AayeXF6TkcWNWPrYF2MysB3ey9xFcrOBbSONoijQh8SyNaKLP31/kW2WqvkU0nt1eR20e25aPNi0YYnWn76az1pBFR426dj1q/serSVve/N+I/7YT87hjpzNS6N9Iutc/IXhfE9hs5W19oOeoRoG737KpV6qzdRkbrFGU1K7jWTZgjzfoQ4gYRuVb2c9HYZiOjTa412SKNWVPS+HL+ujecw+H1rAlpRCf77dmnl0q1TJGwPuyhvk+rjNLH4NPiFDZDFaFmqztxxpPsoza7HZEMB6UhaXzRK5X+iqLQSKQCakX5OqIQUQ1ptBVppIZIPdPTeRlqdrpWmGfazcdVgARFUzQ+nGlhM/gw3CSNNmzLEwqNpgaHlEfCVGXGfhRTmsaCTxk2bTPVAQghU1IFMB5wnSUCiF4ljbvUkDQO9yGNjOOrYSPDSmFp633GOSMJjUGnNMI+lKnzGtKog+EdhDTuHpFEjYjYzGn0PJZukUZCYEmrgC5JFGkUeBTsMhI4jlNETT2CpkbmvVLz0giBbdkRSxLEuzr9acTwGBNcRHSKzYQXRkTqG6SONFLOaCSSZJeR/DocTBzLlaFmyXEu3zs7plY9jk+fFhpBVVT4KphgEuITfKHAGAFfEGCmamIfyhc1n1pXUBxPBedENQBDfSqgMwnGwQzJnJxYluJaC6chaTz/8ur5Ae7oae8ijYPwo6NNkDTO8pl8V51Zo91X9pdPCRxY1SEZW5r8QRoHE3mz0GS2OSDtXaJsfgCXV5GbgTZbqKqLVXh9PKTx95eSYyKNcNaRhIH9MjhGo/ZvrDq01b030plUwM4kZ3Zmat0baZdaZ6QjSf6jZ3d1iAv1Tfs4W1hFYetgEWjYdG7XKO02srYjWcnZm4JrLdwVGpHX1nsNN1hBs0KYy4tLOKSqPhxEP/lW0XE2CYJGpUmnqhJR/wdWtF2kUcompPGyTNgamlco+2kdQuQJhXqRzaJD2FaBJXhfnYL4HFWEmq1uHoxDdCOt0siN5eROJRWwEWmsOrF1KuIizZJiIORHrqXqMSOCTdWnTOl1OY19MIfM1k0vpuZSmEWo2VWN1d0ELBdNDD6rqXbtInhsRlGQYCv11gBdlWvZdMkjYrwwPMRwOvEM3feN1OO67xmGMKdLdVxSY8RIgMcsEQfIoOu9TpV2kEaRoCHDLrmWPWWJKjr2aQxTIHpBGik3a4x4EdUPRBr1Xin9V/XswgPKCyN3Rce+aac+9JURgka48ruMpv2qES9CG8Lbo+h4bA2cBU6tLFA17QOrAoQa3WHArsn71dPII1ES3ZFGL+a+r/OE6EyksYd9SrUjQhRpLE6xA2I7OZYch4ElJeJGaa0GeVPSWDLTL6QQ1MlU3TYBfKEY8ChKsWnjs2wSKERhW+pQFcAWafGuCPWkMbccZ6BIYy4t+S7TsqakUeXGxyYcXpWppb7eUUXHoawlja1domwOSeaihZI0jj9J+cbJg6MhjZtOLFc6mpVh0qxmfdbkN2vTR5sXjehkl46jEAZgtOdNkEZQMXLSjR8IPj152I2fbH7UnR/Rfvzg0emx6+Thg8ffAbOE0ZCNlb+aAAAAAElFTkSuQmCC", - "public": true - } ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_custom_statistics.json b/application/src/main/data/json/system/widget_types/gateway_custom_statistics.json index 2a0a8c1975..dd1a8ea3ee 100644 --- a/application/src/main/data/json/system/widget_types/gateway_custom_statistics.json +++ b/application/src/main/data/json/system/widget_types/gateway_custom_statistics.json @@ -43,28 +43,5 @@ "ocpp", "ble", "bluetooth" - ], - "resources": [ - { - "link": "/api/resource/js_module/system/gateway-management-extension.js", - "title": "gateway-management-extension.js", - "type": "JS_MODULE", - "resourceKey": "gateway-management-extension.js", - "fileName": "gateway-management-extension.js", - "mediaType": "application/javascript", - "data": "U3lzdGVtLnJlZ2lzdGVyKFsiQGFuZ3VsYXIvY29yZSIsIkBhbmd1bGFyL21hdGVyaWFsL3NvcnQiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZSIsIkBhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvciIsIkBzaGFyZWQvcHVibGljLWFwaSIsIkBhbmd1bGFyL2NvbW1vbiIsIkBhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXIiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJzIiwiQGFuZ3VsYXIvZmxleC1sYXlvdXQvZmxleCIsIkBhbmd1bGFyL2ZsZXgtbGF5b3V0L2V4dGVuZGVkIiwiQG5neC10cmFuc2xhdGUvY29yZSIsIkBjb3JlL3B1YmxpYy1hcGkiLCJAYW5ndWxhci9mb3JtcyIsIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2NhcmQiLCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCIsIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQiLCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QiLCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlIiwicnhqcyIsInJ4anMvb3BlcmF0b3JzIiwidHNsaWIiLCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwIiwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbiIsIkBzaGFyZWQvZGlyZWN0aXZlcy90cnVuY2F0ZS13aXRoLXRvb2x0aXAuZGlyZWN0aXZlIiwiQHNoYXJlZC9jb21wb25lbnRzL2RpYWxvZy9qc29uLW9iamVjdC1lZGl0LWRpYWxvZy5jb21wb25lbnQiLCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2ciLCJAc2hhcmVkL2NvbXBvbmVudHMvZGlyZWN0aXZlcy90Yi1qc29uLXRvLXN0cmluZy5kaXJlY3RpdmUiLCJAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUiLCJAc2hhcmVkL2NvbXBvbmVudHMvYnV0dG9uL3RvZ2dsZS1wYXNzd29yZC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLWhlYWRlci5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLXNlbGVjdC5jb21wb25lbnQiLCJAbmdyeC9zdG9yZSIsIkBhbmd1bGFyL3JvdXRlciIsIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXIiLCJAc2hhcmVkL2NvbXBvbmVudHMvanNvbi1jb250ZW50LmNvbXBvbmVudCIsIkBzaGFyZWQvaW1wb3J0LWV4cG9ydC9pbXBvcnQtZXhwb3J0LnNlcnZpY2UiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9hc3QuZGlyZWN0aXZlIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3giLCJAc2hhcmVkL2NvbXBvbmVudHMvZW50aXR5L2VudGl0eS1nYXRld2F5LXNlbGVjdC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGVscC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGludC10b29sdGlwLWljb24uY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2hlbHAtcG9wdXAuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL3BvcG92ZXIuc2VydmljZSIsIkBhbmd1bGFyL21hdGVyaWFsL2NoaXBzIiwiQHNoYXJlZC9jb21wb25lbnRzL2ljb24uY29tcG9uZW50IiwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSIsIkBzaGFyZWQvZGVjb3JhdG9ycy9jb2VyY2lvbiIsIkBzaGFyZWQvY29tcG9uZW50cy9qc29uLW9iamVjdC1lZGl0LmNvbXBvbmVudCIsIkBzaGFyZWQvY29tcG9uZW50cy9tYXJrZG93bi5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdGItZXJyb3IuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2ZpbGUtaW5wdXQuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2J1dHRvbi9jb3B5LWJ1dHRvbi5jb21wb25lbnQiXSwoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0LG4sYSxvLGkscixzLGwsYyxwLG0sZCx1LGcsZix5LGIsaCx4LHYsdyxDLFQsUyxrLEwsRixJLEEsTixNLEUscSxELFAsRyxPLFIsVixCLFUsXyxILHosVyxqLEssWSxRLEosWCxaLGVlLHRlLG5lLGFlLG9lLGllLHJlLHNlLGxlLGNlLHBlLG1lLGRlLHVlLGdlLGZlLHllLGJlLGhlLHhlLHZlLHdlLENlLFRlLFNlLGtlLExlLEZlLEllLEFlLE5lLE1lLEVlLHFlLERlLFBlLEdlLE9lLFJlLFZlLEJlLFVlLF9lLEhlLHplLFdlLGplLEtlLCRlLFllLFFlLEplLFhlLFplLGV0LHR0LG50LGF0LG90LGl0LHJ0LHN0LGx0LGN0LHB0LG10LGR0LHV0LGd0LGZ0LHl0LGJ0LGh0LHh0LHZ0LHd0LEN0LFR0LFN0O3JldHVybntzZXR0ZXJzOltmdW5jdGlvbihlKXt0PWUsbj1lLkNvbXBvbmVudCxhPWUuSW5wdXQsbz1lLlZpZXdDaGlsZCxpPWUuRXZlbnRFbWl0dGVyLHI9ZS5pbmplY3Qscz1lLkRpcmVjdGl2ZSxsPWUuT3V0cHV0LGM9ZS5QaXBlLHA9ZS5JbmplY3QsbT1lLmZvcndhcmRSZWYsZD1lLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5LHU9ZS5OZ01vZHVsZX0sZnVuY3Rpb24oZSl7Zz1lLk1hdFNvcnQsZj1lfSxmdW5jdGlvbihlKXt5PWUuTWF0VGFibGVEYXRhU291cmNlLGI9ZX0sZnVuY3Rpb24oZSl7aD1lLk1hdFBhZ2luYXRvcix4PWV9LGZ1bmN0aW9uKGUpe3Y9ZS5oZWxwQmFzZVVybCx3PWUuRGlyZWN0aW9uLEM9ZS5QYWdlTGluayxUPWUuRGF0YUtleVR5cGUsUz1lLkxlZ2VuZFBvc2l0aW9uLGs9ZS5OVUxMX1VVSUQsTD1lLkF0dHJpYnV0ZVNjb3BlLEY9ZS5EYXRhc291cmNlVHlwZSxJPWUuRW50aXR5VHlwZSxBPWUud2lkZ2V0VHlwZSxOPWUuY29lcmNlQm9vbGVhbixNPWUuZW1wdHlQYWdlRGF0YSxFPWUuaXNDbGllbnRTaWRlVGVsZW1ldHJ5VHlwZSxxPWUuVGVsZW1ldHJ5U3Vic2NyaWJlcixEPWUuU2hhcmVkTW9kdWxlLFA9ZS5EaWFsb2dDb21wb25lbnQsRz1lLkNvbnRlbnRUeXBlLE89ZS5QYWdlQ29tcG9uZW50LFI9ZS5UYlRhYmxlRGF0YXNvdXJjZSxWPWUuSE9VUixCPWUuY29lcmNlTnVtYmVyLFU9ZS5EZXZpY2VDcmVkZW50aWFsc1R5cGV9LGZ1bmN0aW9uKGUpe189ZSxIPWUuQ29tbW9uTW9kdWxlfSxmdW5jdGlvbihlKXt6PWV9LGZ1bmN0aW9uKGUpe1c9ZX0sZnVuY3Rpb24oZSl7aj1lfSxmdW5jdGlvbihlKXtLPWV9LGZ1bmN0aW9uKGUpe1k9ZSxRPWUuVHJhbnNsYXRlTW9kdWxlfSxmdW5jdGlvbihlKXtKPWUuZGVlcENsb25lLFg9ZSxaPWUuZGVsZXRlTnVsbFByb3BlcnRpZXMsZWU9ZS5pc0VxdWFsLHRlPWUuaXNOdW1iZXIsbmU9ZS5pc1N0cmluZyxhZT1lLldJTkRPVyxvZT1lLmlzTGl0ZXJhbE9iamVjdCxpZT1lLmlzRGVmaW5lZEFuZE5vdE51bGwscmU9ZS5pc1VuZGVmaW5lZE9yTnVsbCxzZT1lLmdlbmVyYXRlU2VjcmV0LGxlPWUuaXNPYmplY3QsY2U9ZS5jYW1lbENhc2UscGU9ZS5kZWVwVHJpbX0sZnVuY3Rpb24oZSl7bWU9ZSxkZT1lLkZvcm1CdWlsZGVyLHVlPWUuVmFsaWRhdG9ycyxnZT1lLk5HX1ZBTFVFX0FDQ0VTU09SLGZlPWUuTkdfVkFMSURBVE9SUyx5ZT1lLkZvcm1Db250cm9sfSxmdW5jdGlvbihlKXtiZT1lfSxmdW5jdGlvbihlKXtoZT1lfSxmdW5jdGlvbihlKXt4ZT1lfSxmdW5jdGlvbihlKXt2ZT1lfSxmdW5jdGlvbihlKXt3ZT1lfSxmdW5jdGlvbihlKXtDZT1lLFRlPWUuRXJyb3JTdGF0ZU1hdGNoZXJ9LGZ1bmN0aW9uKGUpe1NlPWUuU3ViamVjdCxrZT1lLmZyb21FdmVudCxMZT1lLkJlaGF2aW9yU3ViamVjdCxGZT1lLlJlcGxheVN1YmplY3QsSWU9ZS5vZixBZT1lLmZvcmtKb2lufSxmdW5jdGlvbihlKXtOZT1lLnRha2VVbnRpbCxNZT1lLmZpbHRlcixFZT1lLnRhcCxxZT1lLmNhdGNoRXJyb3IsRGU9ZS5tYXAsUGU9ZS5wdWJsaXNoUmVwbGF5LEdlPWUucmVmQ291bnQsT2U9ZS50YWtlLFJlPWUuc3RhcnRXaXRoLFZlPWUuZGVib3VuY2VUaW1lLEJlPWUuZGlzdGluY3RVbnRpbENoYW5nZWQsVWU9ZS5zd2l0Y2hNYXAsX2U9ZS5tZXJnZU1hcH0sZnVuY3Rpb24oZSl7SGU9ZS5fX2RlY29yYXRlfSxmdW5jdGlvbihlKXt6ZT1lLFdlPWUuTWF0VG9vbHRpcH0sZnVuY3Rpb24oZSl7amU9ZS5TZWxlY3Rpb25Nb2RlbH0sZnVuY3Rpb24oZSl7S2U9ZX0sZnVuY3Rpb24oZSl7JGU9ZX0sZnVuY3Rpb24oZSl7WWU9ZX0sZnVuY3Rpb24oZSl7UWU9ZS5Kc29uT2JqZWN0RWRpdERpYWxvZ0NvbXBvbmVudH0sZnVuY3Rpb24oZSl7SmU9ZSxYZT1lLk1BVF9ESUFMT0dfREFUQX0sZnVuY3Rpb24oZSl7WmU9ZX0sZnVuY3Rpb24oZSl7ZXQ9ZX0sZnVuY3Rpb24oZSl7dHQ9ZX0sZnVuY3Rpb24oZSl7bnQ9ZX0sZnVuY3Rpb24oZSl7YXQ9ZX0sZnVuY3Rpb24oZSl7b3Q9ZX0sZnVuY3Rpb24oZSl7aXQ9ZX0sZnVuY3Rpb24oZSl7cnQ9ZX0sZnVuY3Rpb24oZSl7c3Q9ZX0sZnVuY3Rpb24oZSl7bHQ9ZX0sZnVuY3Rpb24oZSl7Y3Q9ZX0sZnVuY3Rpb24oZSl7cHQ9ZX0sZnVuY3Rpb24oZSl7bXQ9ZX0sZnVuY3Rpb24oZSl7ZHQ9ZX0sZnVuY3Rpb24oZSl7dXQ9ZX0sZnVuY3Rpb24oZSl7Z3Q9ZX0sZnVuY3Rpb24oZSl7ZnQ9ZX0sZnVuY3Rpb24oZSl7eXQ9ZX0sZnVuY3Rpb24oZSl7YnQ9ZX0sZnVuY3Rpb24oZSl7aHQ9ZX0sZnVuY3Rpb24oZSl7eHQ9ZS5jb2VyY2VCb29sZWFufSxmdW5jdGlvbihlKXt2dD1lfSxmdW5jdGlvbihlKXt3dD1lfSxmdW5jdGlvbihlKXtDdD1lfSxmdW5jdGlvbihlKXtUdD1lfSxmdW5jdGlvbihlKXtTdD1lfV0sZXhlY3V0ZTpmdW5jdGlvbigpe2NvbnN0IGt0PWUoIm5vTGVhZFRyYWlsU3BhY2VzUmVnZXgiLC9eXFMrKD86IFxTKykqJC8pLEx0PWUoImludGVnZXJSZWdleCIsL15bLStdP1xkKyQvKSxGdD1lKCJub25aZXJvRmxvYXQiLC9eLT8oPyEwKFwuMCspPyQpXGQrKFwuXGQrKT8kLyksSXQ9ZSgianNvblJlcXVpcmVkIiwoZT0+ZS52YWx1ZT9udWxsOntyZXF1aXJlZDohMH0pKTt2YXIgQXQsTnQsTXQsRXQ7ZSgiU3RvcmFnZVR5cGVzIixBdCksZnVuY3Rpb24oZSl7ZS5NRU1PUlk9Im1lbW9yeSIsZS5GSUxFPSJmaWxlIixlLlNRTElURT0ic3FsaXRlIn0oQXR8fGUoIlN0b3JhZ2VUeXBlcyIsQXQ9e30pKSxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdCksZnVuY3Rpb24oZSl7ZS5FWENFUFRJT049IkVYQ0VQVElPTiJ9KE50fHxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdD17fSkpLGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQpLGZ1bmN0aW9uKGUpe2UuTk9ORT0iTk9ORSIsZS5DUklUSUNBTD0iQ1JJVElDQUwiLGUuRVJST1I9IkVSUk9SIixlLldBUk5JTkc9IldBUk5JTkciLGUuSU5GTz0iSU5GTyIsZS5ERUJVRz0iREVCVUciLGUuVFJBQ0U9IlRSQUNFIn0oTXR8fGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQ9e30pKSxlKCJQb3J0TGltaXRzIixFdCksZnVuY3Rpb24oZSl7ZVtlLk1JTj0xXT0iTUlOIixlW2UuTUFYPTY1NTM1XT0iTUFYIn0oRXR8fGUoIlBvcnRMaW1pdHMiLEV0PXt9KSk7Y29uc3QgcXQ9ZSgiR2F0ZXdheVN0YXR1cyIsey4uLk10LC4uLk50fSk7dmFyIER0LFB0O2UoIkxvZ1NhdmluZ1BlcmlvZCIsRHQpLGZ1bmN0aW9uKGUpe2UuZGF5cz0iRCIsZS5ob3Vycz0iSCIsZS5taW51dGVzPSJNIixlLnNlY29uZHM9IlMifShEdHx8ZSgiTG9nU2F2aW5nUGVyaW9kIixEdD17fSkpLGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0KSxmdW5jdGlvbihlKXtlLnNlcnZpY2U9InNlcnZpY2UiLGUuY29ubmVjdG9yPSJjb25uZWN0b3IiLGUuY29udmVydGVyPSJjb252ZXJ0ZXIiLGUudGJfY29ubmVjdGlvbj0idGJfY29ubmVjdGlvbiIsZS5zdG9yYWdlPSJzdG9yYWdlIixlLmV4dGVuc2lvbj0iZXh0ZW5zaW9uIn0oUHR8fGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0PXt9KSk7Y29uc3QgR3Q9ZSgiTG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwIixuZXcgTWFwKFtbUHQuc2VydmljZSwiU2VydmljZSJdLFtQdC5jb25uZWN0b3IsIkNvbm5lY3RvciJdLFtQdC5jb252ZXJ0ZXIsIkNvbnZlcnRlciJdLFtQdC50Yl9jb25uZWN0aW9uLCJUQiBDb25uZWN0aW9uIl0sW1B0LnN0b3JhZ2UsIlN0b3JhZ2UiXSxbUHQuZXh0ZW5zaW9uLCJFeHRlbnNpb24iXV0pKSxPdD1lKCJMb2dTYXZpbmdQZXJpb2RUcmFuc2xhdGlvbnMiLG5ldyBNYXAoW1tEdC5kYXlzLCJnYXRld2F5LmxvZ3MuZGF5cyJdLFtEdC5ob3VycywiZ2F0ZXdheS5sb2dzLmhvdXJzIl0sW0R0Lm1pbnV0ZXMsImdhdGV3YXkubG9ncy5taW51dGVzIl0sW0R0LnNlY29uZHMsImdhdGV3YXkubG9ncy5zZWNvbmRzIl1dKSksUnQ9ZSgiU3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAiLG5ldyBNYXAoW1tBdC5NRU1PUlksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtBdC5GSUxFLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl0sW0F0LlNRTElURSwiZ2F0ZXdheS5zdG9yYWdlLXR5cGVzLnNxbGl0ZSJdXSkpO3ZhciBWdDtlKCJTZWN1cml0eVR5cGVzIixWdCksZnVuY3Rpb24oZSl7ZS5BQ0NFU1NfVE9LRU49ImFjY2Vzc1Rva2VuIixlLlVTRVJOQU1FX1BBU1NXT1JEPSJ1c2VybmFtZVBhc3N3b3JkIixlLlRMU19BQ0NFU1NfVE9LRU49InRsc0FjY2Vzc1Rva2VuIixlLlRMU19QUklWQVRFX0tFWT0idGxzUHJpdmF0ZUtleSJ9KFZ0fHxlKCJTZWN1cml0eVR5cGVzIixWdD17fSkpO2NvbnN0IEJ0PWUoIkdlY3VyaXR5VHlwZXNUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tWdC5BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl0sW1Z0LlVTRVJOQU1FX1BBU1NXT1JELCJnYXRld2F5LnNlY3VyaXR5LXR5cGVzLnVzZXJuYW1lLXBhc3N3b3JkIl0sW1Z0LlRMU19BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMudGxzLWFjY2Vzcy10b2tlbiJdXSkpO3ZhciBVdCxfdDtlKCJHYXRld2F5VmVyc2lvbiIsVXQpLGZ1bmN0aW9uKGUpe2UuQ3VycmVudD0iMy41LjIiLGUuTGVnYWN5PSJsZWdhY3kifShVdHx8ZSgiR2F0ZXdheVZlcnNpb24iLFV0PXt9KSksZSgiQ29ubmVjdG9yVHlwZSIsX3QpLGZ1bmN0aW9uKGUpe2UuTVFUVD0ibXF0dCIsZS5NT0RCVVM9Im1vZGJ1cyIsZS5HUlBDPSJncnBjIixlLk9QQ1VBPSJvcGN1YSIsZS5CTEU9ImJsZSIsZS5SRVFVRVNUPSJyZXF1ZXN0IixlLkNBTj0iY2FuIixlLkJBQ05FVD0iYmFjbmV0IixlLk9EQkM9Im9kYmMiLGUuUkVTVD0icmVzdCIsZS5TTk1QPSJzbm1wIixlLkZUUD0iZnRwIixlLlNPQ0tFVD0ic29ja2V0IixlLlhNUFA9InhtcHAiLGUuT0NQUD0ib2NwcCIsZS5DVVNUT009ImN1c3RvbSJ9KF90fHxlKCJDb25uZWN0b3JUeXBlIixfdD17fSkpO2NvbnN0IEh0PWUoIkdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIixuZXcgTWFwKFtbX3QuTVFUVCwiTVFUVCJdLFtfdC5NT0RCVVMsIk1PREJVUyJdLFtfdC5HUlBDLCJHUlBDIl0sW190Lk9QQ1VBLCJPUENVQSJdLFtfdC5CTEUsIkJMRSJdLFtfdC5SRVFVRVNULCJSRVFVRVNUIl0sW190LkNBTiwiQ0FOIl0sW190LkJBQ05FVCwiQkFDTkVUIl0sW190Lk9EQkMsIk9EQkMiXSxbX3QuUkVTVCwiUkVTVCJdLFtfdC5TTk1QLCJTTk1QIl0sW190LkZUUCwiRlRQIl0sW190LlNPQ0tFVCwiU09DS0VUIl0sW190LlhNUFAsIlhNUFAiXSxbX3QuT0NQUCwiT0NQUCJdLFtfdC5DVVNUT00sIkNVU1RPTSJdXSkpLHp0PWUoIk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzEsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1jb2lscyJdLFsyLCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtZGlzY3JldGUtaW5wdXRzIl0sWzMsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdLFs0LCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtaW5wdXQtcmVnaXN0ZXJzIl0sWzUsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMud3JpdGUtc2luZ2xlLWNvaWwiXSxbNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1zaW5nbGUtaG9sZGluZy1yZWdpc3RlciJdLFsxNSwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1jb2lscyJdLFsxNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdXSkpO3ZhciBXdDtlKCJCQUNuZXRSZXF1ZXN0VHlwZXMiLFd0KSxmdW5jdGlvbihlKXtlLldyaXRlUHJvcGVydHk9IndyaXRlUHJvcGVydHkiLGUuUmVhZFByb3BlcnR5PSJyZWFkUHJvcGVydHkifShXdHx8ZSgiQkFDbmV0UmVxdWVzdFR5cGVzIixXdD17fSkpO2NvbnN0IGp0PWUoIkJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tXdC5Xcml0ZVByb3BlcnR5LCJnYXRld2F5LnJwYy53cml0ZS1wcm9wZXJ0eSJdLFtXdC5SZWFkUHJvcGVydHksImdhdGV3YXkucnBjLnJlYWQtcHJvcGVydHkiXV0pKTt2YXIgS3Q7ZSgiQkFDbmV0T2JqZWN0VHlwZXMiLEt0KSxmdW5jdGlvbihlKXtlLkJpbmFyeUlucHV0PSJiaW5hcnlJbnB1dCIsZS5CaW5hcnlPdXRwdXQ9ImJpbmFyeU91dHB1dCIsZS5BbmFsb2dJbnB1dD0iYW5hbG9nSW5wdXQiLGUuQW5hbG9nT3V0cHV0PSJhbmFsb2dPdXRwdXQiLGUuQmluYXJ5VmFsdWU9ImJpbmFyeVZhbHVlIixlLkFuYWxvZ1ZhbHVlPSJhbmFsb2dWYWx1ZSJ9KEt0fHxlKCJCQUNuZXRPYmplY3RUeXBlcyIsS3Q9e30pKTtjb25zdCAkdD1lKCJCQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tLdC5BbmFsb2dPdXRwdXQsImdhdGV3YXkucnBjLmFuYWxvZy1vdXRwdXQiXSxbS3QuQW5hbG9nSW5wdXQsImdhdGV3YXkucnBjLmFuYWxvZy1pbnB1dCJdLFtLdC5CaW5hcnlPdXRwdXQsImdhdGV3YXkucnBjLmJpbmFyeS1vdXRwdXQiXSxbS3QuQmluYXJ5SW5wdXQsImdhdGV3YXkucnBjLmJpbmFyeS1pbnB1dCJdLFtLdC5CaW5hcnlWYWx1ZSwiZ2F0ZXdheS5ycGMuYmluYXJ5LXZhbHVlIl0sW0t0LkFuYWxvZ1ZhbHVlLCJnYXRld2F5LnJwYy5hbmFsb2ctdmFsdWUiXV0pKTt2YXIgWXQ7ZSgiQkxFTWV0aG9kcyIsWXQpLGZ1bmN0aW9uKGUpe2UuV1JJVEU9IndyaXRlIixlLlJFQUQ9InJlYWQiLGUuU0NBTj0ic2NhbiJ9KFl0fHxlKCJCTEVNZXRob2RzIixZdD17fSkpO2NvbnN0IFF0PWUoIkJMRU1ldGhvZHNUcmFuc2xhdGVzIixuZXcgTWFwKFtbWXQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl0sW1l0LlJFQUQsImdhdGV3YXkucnBjLnJlYWQiXSxbWXQuU0NBTiwiZ2F0ZXdheS5ycGMuc2NhbiJdXSkpO3ZhciBKdCxYdDtlKCJDQU5CeXRlT3JkZXJzIixKdCksZnVuY3Rpb24oZSl7ZS5MSVRUTEU9IkxJVFRMRSIsZS5CSUc9IkJJRyJ9KEp0fHxlKCJDQU5CeXRlT3JkZXJzIixKdD17fSkpLGUoIlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzIixYdCksZnVuY3Rpb24oZSl7ZS5XUklURT0id3JpdGUifShYdHx8ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3MiLFh0PXt9KSk7Y29uc3QgWnQ9ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzIixuZXcgTWFwKFtbWHQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl1dKSk7dmFyIGVuO2UoIlNOTVBNZXRob2RzIixlbiksZnVuY3Rpb24oZSl7ZS5TRVQ9InNldCIsZS5NVUxUSVNFVD0ibXVsdGlzZXQiLGUuR0VUPSJnZXQiLGUuQlVMS1dBTEs9ImJ1bGt3YWxrIixlLlRBQkxFPSJ0YWJsZSIsZS5NVUxUSUdFVD0ibXVsdGlnZXQiLGUuR0VUTkVYVD0iZ2V0bmV4dCIsZS5CVUxLR0VUPSJidWxrZ2V0IixlLldBTEtTPSJ3YWxrIn0oZW58fGUoIlNOTVBNZXRob2RzIixlbj17fSkpO2NvbnN0IHRuPWUoIlNOTVBNZXRob2RzVHJhbnNsYXRpb25zIixuZXcgTWFwKFtbZW4uU0VULCJnYXRld2F5LnJwYy5zZXQiXSxbZW4uTVVMVElTRVQsImdhdGV3YXkucnBjLm11bHRpc2V0Il0sW2VuLkdFVCwiZ2F0ZXdheS5ycGMuZ2V0Il0sW2VuLkJVTEtXQUxLLCJnYXRld2F5LnJwYy5idWxrLXdhbGsiXSxbZW4uVEFCTEUsImdhdGV3YXkucnBjLnRhYmxlIl0sW2VuLk1VTFRJR0VULCJnYXRld2F5LnJwYy5tdWx0aS1nZXQiXSxbZW4uR0VUTkVYVCwiZ2F0ZXdheS5ycGMuZ2V0LW5leHQiXSxbZW4uQlVMS0dFVCwiZ2F0ZXdheS5ycGMuYnVsay1nZXQiXSxbZW4uV0FMS1MsImdhdGV3YXkucnBjLndhbGsiXV0pKTt2YXIgbm4sYW4sb24scm4sc24sbG47ZSgiSFRUUE1ldGhvZHMiLG5uKSxmdW5jdGlvbihlKXtlLkNPTk5FQ1Q9IkNPTk5FQ1QiLGUuREVMRVRFPSJERUxFVEUiLGUuR0VUPSJHRVQiLGUuSEVBRD0iSEVBRCIsZS5PUFRJT05TPSJPUFRJT05TIixlLlBBVENIPSJQQVRDSCIsZS5QT1NUPSJQT1NUIixlLlBVVD0iUFVUIixlLlRSQUNFPSJUUkFDRSJ9KG5ufHxlKCJIVFRQTWV0aG9kcyIsbm49e30pKSxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuKSxmdW5jdGlvbihlKXtlLlVURl84PSJ1dGYtOCJ9KGFufHxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuPXt9KSksZSgiQ29uZmlndXJhdGlvbk1vZGVzIixvbiksZnVuY3Rpb24oZSl7ZS5CQVNJQz0iYmFzaWMiLGUuQURWQU5DRUQ9ImFkdmFuY2VkIn0ob258fGUoIkNvbmZpZ3VyYXRpb25Nb2RlcyIsb249e30pKSxlKCJTZWN1cml0eVR5cGUiLHJuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyIsZS5DRVJUSUZJQ0FURVM9ImNlcnRpZmljYXRlcyJ9KHJufHxlKCJTZWN1cml0eVR5cGUiLHJuPXt9KSksZSgiUmVwb3J0U3RyYXRlZ3lUeXBlIixzbiksZnVuY3Rpb24oZSl7ZS5PbkNoYW5nZT0iT05fQ0hBTkdFIixlLk9uUmVwb3J0UGVyaW9kPSJPTl9SRVBPUlRfUEVSSU9EIixlLk9uQ2hhbmdlT3JSZXBvcnRQZXJpb2Q9Ik9OX0NIQU5HRV9PUl9SRVBPUlRfUEVSSU9EIn0oc258fGUoIlJlcG9ydFN0cmF0ZWd5VHlwZSIsc249e30pKSxlKCJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZSIsbG4pLGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0b3I9NmU0XT0iQ29ubmVjdG9yIixlW2UuRGV2aWNlPTNlNF09IkRldmljZSIsZVtlLktleT0xNWUzXT0iS2V5In0obG58fGUoIlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlIixsbj17fSkpO2NvbnN0IGNuPWUoIlJlcG9ydFN0cmF0ZWd5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW3NuLk9uQ2hhbmdlLCJnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5vbi1jaGFuZ2UiXSxbc24uT25SZXBvcnRQZXJpb2QsImdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5Lm9uLXJlcG9ydC1wZXJpb2QiXSxbc24uT25DaGFuZ2VPclJlcG9ydFBlcmlvZCwiZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kub24tY2hhbmdlLW9yLXJlcG9ydC1wZXJpb2QiXV0pKTt2YXIgcG47ZSgiTW9kZVR5cGUiLHBuKSxmdW5jdGlvbihlKXtlLk5PTkU9Ik5vbmUiLGUuU0lHTj0iU2lnbiIsZS5TSUdOQU5ERU5DUllQVD0iU2lnbkFuZEVuY3J5cHQifShwbnx8ZSgiTW9kZVR5cGUiLHBuPXt9KSk7Y29uc3QgbW49ZSgiU2VjdXJpdHlUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbcm4uQU5PTllNT1VTLCJnYXRld2F5LmJyb2tlci5zZWN1cml0eS10eXBlcy5hbm9ueW1vdXMiXSxbcm4uQkFTSUMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmJhc2ljIl0sW3JuLkNFUlRJRklDQVRFUywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuY2VydGlmaWNhdGVzIl1dKSk7dmFyIGRuO2UoIlJlc3RTZWN1cml0eVR5cGUiLGRuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyJ9KGRufHxlKCJSZXN0U2VjdXJpdHlUeXBlIixkbj17fSkpO2NvbnN0IHVuPWUoIlJlc3RTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tkbi5BTk9OWU1PVVMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmFub255bW91cyJdLFtkbi5CQVNJQywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuYmFzaWMiXV0pKSxnbj1lKCJNcXR0VmVyc2lvbnMiLFt7bmFtZTozLjEsdmFsdWU6M30se25hbWU6My4xMSx2YWx1ZTo0fSx7bmFtZTo1LHZhbHVlOjV9XSk7dmFyIGZuO2UoIk1hcHBpbmdUeXBlIixmbiksZnVuY3Rpb24oZSl7ZS5EQVRBPSJkYXRhIixlLlJFUVVFU1RTPSJyZXF1ZXN0cyIsZS5PUENVQT0iT1BDdWEifShmbnx8ZSgiTWFwcGluZ1R5cGUiLGZuPXt9KSk7Y29uc3QgeW49ZSgiTWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nIl0sW2ZuLk9QQ1VBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdXSkpLGJuPWUoIk1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbZm4uREFUQSwiZ2F0ZXdheS5kYXRhLW1hcHBpbmctaGludCJdLFtmbi5PUENVQSwiZ2F0ZXdheS5vcGN1YS1kYXRhLW1hcHBpbmctaGludCJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nLWhpbnQiXV0pKSxobj1lKCJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNzZWN0aW9uLW1hcHBpbmciXSxbZm4uT1BDVUEsdisiL2RvY3MvaW90LWdhdGV3YXkvY29uZmlnL29wYy11YS8jc2VjdGlvbi1tYXBwaW5nIl0sW2ZuLlJFUVVFU1RTLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNyZXF1ZXN0cy1tYXBwaW5nIl1dKSkseG49ZSgiUXVhbGl0eVR5cGVzIixbMCwxLDJdKSx2bj1lKCJRdWFsaXR5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzAsImdhdGV3YXkucW9zLmF0LW1vc3Qtb25jZSJdLFsxLCJnYXRld2F5LnFvcy5hdC1sZWFzdC1vbmNlIl0sWzIsImdhdGV3YXkucW9zLmV4YWN0bHktb25jZSJdXSkpO3ZhciB3bjtlKCJDb252ZXJ0b3JUeXBlIix3biksZnVuY3Rpb24oZSl7ZS5KU09OPSJqc29uIixlLkJZVEVTPSJieXRlcyIsZS5DVVNUT009ImN1c3RvbSJ9KHdufHxlKCJDb252ZXJ0b3JUeXBlIix3bj17fSkpO2NvbnN0IENuPWUoIkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1t3bi5KU09OLCJnYXRld2F5LkpTT04iXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMiXSxbd24uQ1VTVE9NLCJnYXRld2F5LmN1c3RvbSJdXSkpO3ZhciBUbixTbixrbjtlKCJTb3VyY2VUeXBlIixUbiksZnVuY3Rpb24oZSl7ZS5NU0c9Im1lc3NhZ2UiLGUuVE9QSUM9InRvcGljIixlLkNPTlNUPSJjb25zdGFudCJ9KFRufHxlKCJTb3VyY2VUeXBlIixUbj17fSkpLGUoIk9QQ1VhU291cmNlVHlwZSIsU24pLGZ1bmN0aW9uKGUpe2UuUEFUSD0icGF0aCIsZS5JREVOVElGSUVSPSJpZGVudGlmaWVyIixlLkNPTlNUPSJjb25zdGFudCJ9KFNufHxlKCJPUENVYVNvdXJjZVR5cGUiLFNuPXt9KSksZSgiRGV2aWNlSW5mb1R5cGUiLGtuKSxmdW5jdGlvbihlKXtlLkZVTEw9ImZ1bGwiLGUuUEFSVElBTD0icGFydGlhbCJ9KGtufHxlKCJEZXZpY2VJbmZvVHlwZSIsa249e30pKTtjb25zdCBMbj1lKCJTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbVG4uTVNHLCJnYXRld2F5LnNvdXJjZS10eXBlLm1zZyJdLFtUbi5UT1BJQywiZ2F0ZXdheS5zb3VyY2UtdHlwZS50b3BpYyJdLFtUbi5DT05TVCwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5jb25zdCJdLFtTbi5QQVRILCJnYXRld2F5LnNvdXJjZS10eXBlLnBhdGgiXSxbU24uSURFTlRJRklFUiwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5pZGVudGlmaWVyIl0sW1NuLkNPTlNULCJnYXRld2F5LnNvdXJjZS10eXBlLmNvbnN0Il1dKSk7dmFyIEZuLEluO2UoIlNlcnZlclNpZGVScGNUeXBlIixGbiksZnVuY3Rpb24oZSl7ZS5XaXRoUmVzcG9uc2U9InR3b1dheSIsZS5XaXRob3V0UmVzcG9uc2U9Im9uZVdheSJ9KEZufHxlKCJTZXJ2ZXJTaWRlUnBjVHlwZSIsRm49e30pKSxlKCJSZXF1ZXN0VHlwZSIsSW4pLGZ1bmN0aW9uKGUpe2UuQ09OTkVDVF9SRVFVRVNUPSJjb25uZWN0UmVxdWVzdHMiLGUuRElTQ09OTkVDVF9SRVFVRVNUPSJkaXNjb25uZWN0UmVxdWVzdHMiLGUuQVRUUklCVVRFX1JFUVVFU1Q9ImF0dHJpYnV0ZVJlcXVlc3RzIixlLkFUVFJJQlVURV9VUERBVEU9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuU0VSVkVSX1NJREVfUlBDPSJzZXJ2ZXJTaWRlUnBjIn0oSW58fGUoIlJlcXVlc3RUeXBlIixJbj17fSkpO2NvbnN0IEFuPWUoIlJlcXVlc3RUeXBlc1RyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW0luLkNPTk5FQ1RfUkVRVUVTVCwiZ2F0ZXdheS5yZXF1ZXN0LmNvbm5lY3QtcmVxdWVzdCJdLFtJbi5ESVNDT05ORUNUX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5kaXNjb25uZWN0LXJlcXVlc3QiXSxbSW4uQVRUUklCVVRFX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5hdHRyaWJ1dGUtcmVxdWVzdCJdLFtJbi5BVFRSSUJVVEVfVVBEQVRFLCJnYXRld2F5LnJlcXVlc3QuYXR0cmlidXRlLXVwZGF0ZSJdLFtJbi5TRVJWRVJfU0lERV9SUEMsImdhdGV3YXkucmVxdWVzdC5ycGMtY29ubmVjdGlvbiJdXSkpO3ZhciBObjtlKCJNYXBwaW5nS2V5c1R5cGUiLE5uKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5DVVNUT009ImV4dGVuc2lvbkNvbmZpZyIsZS5SUENfTUVUSE9EUz0icnBjX21ldGhvZHMiLGUuQVRUUklCVVRFU19VUERBVEVTPSJhdHRyaWJ1dGVzX3VwZGF0ZXMifShObnx8ZSgiTWFwcGluZ0tleXNUeXBlIixObj17fSkpO2NvbnN0IE1uPWUoIk1hcHBpbmdLZXlzUGFuZWxUaXRsZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LnRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5LmtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5LnJwYy1tZXRob2RzIl1dKSksRW49ZSgiTWFwcGluZ0tleXNBZGRLZXlUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tObi5BVFRSSUJVVEVTLCJnYXRld2F5LmFkZC1hdHRyaWJ1dGUiXSxbTm4uVElNRVNFUklFUywiZ2F0ZXdheS5hZGQtdGltZXNlcmllcyJdLFtObi5DVVNUT00sImdhdGV3YXkuYWRkLWtleSJdLFtObi5BVFRSSUJVVEVTX1VQREFURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZS11cGRhdGUiXSxbTm4uUlBDX01FVEhPRFMsImdhdGV3YXkuYWRkLXJwYy1tZXRob2QiXV0pKSxxbj1lKCJNYXBwaW5nS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW05uLkNVU1RPTSwiZ2F0ZXdheS5kZWxldGUta2V5Il0sW05uLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFtObi5SUENfTUVUSE9EUywiZ2F0ZXdheS5kZWxldGUtcnBjLW1ldGhvZCJdXSkpLERuPWUoIk1hcHBpbmdLZXlzTm9LZXlzVGV4dFRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkubm8tYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5Lm5vLXRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5Lm5vLWtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5Lm5vLXJwYy1tZXRob2RzIl1dKSk7dmFyIFBuLEduLE9uO2UoIlNlcnZlclNpZGVSUENUeXBlIixQbiksZnVuY3Rpb24oZSl7ZS5PTkVfV0FZPSJvbmVXYXkiLGUuVFdPX1dBWT0idHdvV2F5In0oUG58fGUoIlNlcnZlclNpZGVSUENUeXBlIixQbj17fSkpLGUoIk1hcHBpbmdWYWx1ZVR5cGUiLEduKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLklOVEVHRVI9ImludGVnZXIiLGUuRE9VQkxFPSJkb3VibGUiLGUuQk9PTEVBTj0iYm9vbGVhbiJ9KEdufHxlKCJNYXBwaW5nVmFsdWVUeXBlIixHbj17fSkpLGUoIk1vZGlmaWVyVHlwZSIsT24pLGZ1bmN0aW9uKGUpe2UuRElWSURFUj0iZGl2aWRlciIsZS5NVUxUSVBMSUVSPSJtdWx0aXBsaWVyIn0oT258fGUoIk1vZGlmaWVyVHlwZSIsT249e30pKTtjb25zdCBSbj1lKCJNb2RpZmllclR5cGVzTWFwIixuZXcgTWFwKFtbT24uRElWSURFUix7bmFtZToiZ2F0ZXdheS5kaXZpZGVyIixpY29uOiJtZGk6ZGl2aXNpb24ifV0sW09uLk1VTFRJUExJRVIse25hbWU6ImdhdGV3YXkubXVsdGlwbGllciIsaWNvbjoibWRpOm11bHRpcGxpY2F0aW9uIn1dXSkpLFZuPWUoIm1hcHBpbmdWYWx1ZVR5cGVzTWFwIixuZXcgTWFwKFtbR24uU1RSSU5HLHtuYW1lOiJ2YWx1ZS5zdHJpbmciLGljb246Im1kaTpmb3JtYXQtdGV4dCJ9XSxbR24uSU5URUdFUix7bmFtZToidmFsdWUuaW50ZWdlciIsaWNvbjoibWRpOm51bWVyaWMifV0sW0duLkRPVUJMRSx7bmFtZToidmFsdWUuZG91YmxlIixpY29uOiJtZGk6bnVtZXJpYyJ9XSxbR24uQk9PTEVBTix7bmFtZToidmFsdWUuYm9vbGVhbiIsaWNvbjoibWRpOmNoZWNrYm94LW1hcmtlZC1vdXRsaW5lIn1dXSkpLEJuPWUoIkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbd24uSlNPTiwiZ2F0ZXdheS5KU09OLWhpbnQiXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMtaGludCJdLFt3bi5DVVNUT00sImdhdGV3YXkuY3VzdG9tLWhpbnQiXV0pKTt2YXIgVW47ZSgiU2VjdXJpdHlQb2xpY3kiLFVuKSxmdW5jdGlvbihlKXtlLkJBU0lDMTI4PSJCYXNpYzEyOFJzYTE1IixlLkJBU0lDMjU2PSJCYXNpYzI1NiIsZS5CQVNJQzI1NlNIQT0iQmFzaWMyNTZTaGEyNTYifShVbnx8ZSgiU2VjdXJpdHlQb2xpY3kiLFVuPXt9KSk7Y29uc3QgX249ZSgiU2VjdXJpdHlQb2xpY3lUeXBlcyIsW3t2YWx1ZTpVbi5CQVNJQzEyOCxuYW1lOiJCYXNpYzEyOFJTQTE1In0se3ZhbHVlOlVuLkJBU0lDMjU2LG5hbWU6IkJhc2ljMjU2In0se3ZhbHVlOlVuLkJBU0lDMjU2U0hBLG5hbWU6IkJhc2ljMjU2U0hBMjU2In1dKTt2YXIgSG47ZSgiTW9kYnVzUHJvdG9jb2xUeXBlIixIbiksZnVuY3Rpb24oZSl7ZS5UQ1A9InRjcCIsZS5VRFA9InVkcCIsZS5TZXJpYWw9InNlcmlhbCJ9KEhufHxlKCJNb2RidXNQcm90b2NvbFR5cGUiLEhuPXt9KSk7Y29uc3Qgem49ZSgiTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAiLG5ldyBNYXAoW1tIbi5UQ1AsIlRDUCJdLFtIbi5VRFAsIlVEUCJdLFtIbi5TZXJpYWwsIlNlcmlhbCJdXSkpO3ZhciBXbixqbjtlKCJNb2RidXNNZXRob2RUeXBlIixXbiksZnVuY3Rpb24oZSl7ZS5TT0NLRVQ9InNvY2tldCIsZS5SVFU9InJ0dSJ9KFdufHxlKCJNb2RidXNNZXRob2RUeXBlIixXbj17fSkpLGUoIk1vZGJ1c1NlcmlhbE1ldGhvZFR5cGUiLGpuKSxmdW5jdGlvbihlKXtlLlJUVT0icnR1IixlLkFTQ0lJPSJhc2NpaSJ9KGpufHxlKCJNb2RidXNTZXJpYWxNZXRob2RUeXBlIixqbj17fSkpO2NvbnN0IEtuPWUoIk1vZGJ1c01ldGhvZExhYmVsc01hcCIsbmV3IE1hcChbW1duLlNPQ0tFVCwiU29ja2V0Il0sW1duLlJUVSwiUlRVIl0sW2puLkFTQ0lJLCJBU0NJSSJdXSkpLCRuPWUoIk1vZGJ1c0J5dGVTaXplcyIsWzUsNiw3LDhdKTt2YXIgWW47ZSgiTW9kYnVzUGFyaXR5IixZbiksZnVuY3Rpb24oZSl7ZS5FdmVuPSJFIixlLk9kZD0iTyIsZS5Ob25lPSJOIn0oWW58fGUoIk1vZGJ1c1Bhcml0eSIsWW49e30pKTtjb25zdCBRbj1lKCJNb2RidXNQYXJpdHlMYWJlbHNNYXAiLG5ldyBNYXAoW1tZbi5FdmVuLCJFdmVuIl0sW1luLk9kZCwiT2RkIl0sW1luLk5vbmUsIk5vbmUiXV0pKTt2YXIgSm4sWG47ZSgiTW9kYnVzT3JkZXJUeXBlIixKbiksZnVuY3Rpb24oZSl7ZS5CSUc9IkJJRyIsZS5MSVRUTEU9IkxJVFRMRSJ9KEpufHxlKCJNb2RidXNPcmRlclR5cGUiLEpuPXt9KSksZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbiksZnVuY3Rpb24oZSl7ZS5Ib2xkaW5nUmVnaXN0ZXJzPSJob2xkaW5nX3JlZ2lzdGVycyIsZS5Db2lsc0luaXRpYWxpemVyPSJjb2lsc19pbml0aWFsaXplciIsZS5JbnB1dFJlZ2lzdGVycz0iaW5wdXRfcmVnaXN0ZXJzIixlLkRpc2NyZXRlSW5wdXRzPSJkaXNjcmV0ZV9pbnB1dHMifShYbnx8ZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbj17fSkpO2NvbnN0IFpuPWUoIk1vZGJ1c1JlZ2lzdGVyVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbWG4uSG9sZGluZ1JlZ2lzdGVycywiZ2F0ZXdheS5ob2xkaW5nX3JlZ2lzdGVycyJdLFtYbi5Db2lsc0luaXRpYWxpemVyLCJnYXRld2F5LmNvaWxzX2luaXRpYWxpemVyIl0sW1huLklucHV0UmVnaXN0ZXJzLCJnYXRld2F5LmlucHV0X3JlZ2lzdGVycyJdLFtYbi5EaXNjcmV0ZUlucHV0cywiZ2F0ZXdheS5kaXNjcmV0ZV9pbnB1dHMiXV0pKTt2YXIgZWE7ZSgiTW9kYnVzRGF0YVR5cGUiLGVhKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLkJZVEVTPSJieXRlcyIsZS5CSVRTPSJiaXRzIixlLklOVDg9IjhpbnQiLGUuVUlOVDg9Ijh1aW50IixlLkZMT0FUOD0iOGZsb2F0IixlLklOVDE2PSIxNmludCIsZS5VSU5UMTY9IjE2dWludCIsZS5GTE9BVDE2PSIxNmZsb2F0IixlLklOVDMyPSIzMmludCIsZS5VSU5UMzI9IjMydWludCIsZS5GTE9BVDMyPSIzMmZsb2F0IixlLklOVDY0PSI2NGludCIsZS5VSU5UNjQ9IjY0dWludCIsZS5GTE9BVDY0PSI2NGZsb2F0In0oZWF8fGUoIk1vZGJ1c0RhdGFUeXBlIixlYT17fSkpO2NvbnN0IHRhPWUoIk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzIixbZWEuQllURVMsZWEuQklUUyxlYS5TVFJJTkddKTt2YXIgbmEsYWE7ZSgiTW9kYnVzT2JqZWN0Q291bnRCeURhdGFUeXBlIixuYSksZnVuY3Rpb24oZSl7ZVtlWyI4aW50Il09MV09IjhpbnQiLGVbZVsiOHVpbnQiXT0xXT0iOHVpbnQiLGVbZVsiOGZsb2F0Il09MV09IjhmbG9hdCIsZVtlWyIxNmludCJdPTFdPSIxNmludCIsZVtlWyIxNnVpbnQiXT0xXT0iMTZ1aW50IixlW2VbIjE2ZmxvYXQiXT0xXT0iMTZmbG9hdCIsZVtlWyIzMmludCJdPTJdPSIzMmludCIsZVtlWyIzMnVpbnQiXT0yXT0iMzJ1aW50IixlW2VbIjMyZmxvYXQiXT0yXT0iMzJmbG9hdCIsZVtlWyI2NGludCJdPTRdPSI2NGludCIsZVtlWyI2NHVpbnQiXT00XT0iNjR1aW50IixlW2VbIjY0ZmxvYXQiXT00XT0iNjRmbG9hdCJ9KG5hfHxlKCJNb2RidXNPYmplY3RDb3VudEJ5RGF0YVR5cGUiLG5hPXt9KSksZSgiTW9kYnVzVmFsdWVLZXkiLGFhKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5BVFRSSUJVVEVTX1VQREFURVM9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuUlBDX1JFUVVFU1RTPSJycGMifShhYXx8ZSgiTW9kYnVzVmFsdWVLZXkiLGFhPXt9KSk7Y29uc3Qgb2E9ZSgiTW9kYnVzS2V5c1BhbmVsVGl0bGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5LmF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS50aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkucnBjLXJlcXVlc3RzIl1dKSksaWE9ZSgiTW9kYnVzS2V5c0FkZEtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmFkZC10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hZGQtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuYWRkLXJwYy1yZXF1ZXN0Il1dKSkscmE9ZSgiTW9kYnVzS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuZGVsZXRlLXJwYy1yZXF1ZXN0Il1dKSksc2E9ZSgiTW9kYnVzS2V5c05vS2V5c1RleHRUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS5uby10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5uby1hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkubm8tcnBjLXJlcXVlc3RzIl1dKSksbGE9ZSgiTW9kYnVzQmF1ZHJhdGVzIixbNDgwMCw5NjAwLDE5MjAwLDM4NDAwLDU3NjAwLDExNTIwMCwyMzA0MDAsNDYwODAwLDkyMTYwMF0pO2NsYXNzIGNhe2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsidHMiLCJzdGF0dXMiLCJtZXNzYWdlIl0sdGhpcy5nYXRld2F5TG9nTGlua3M9W3tuYW1lOiJHZW5lcmFsIixrZXk6IkxPR1MifSx7bmFtZToiU2VydmljZSIsa2V5OiJTRVJWSUNFX0xPR1MifSx7bmFtZToiQ29ubmVjdGlvbiIsa2V5OiJDT05ORUNUSU9OX0xPR1MifSx7bmFtZToiU3RvcmFnZSIsa2V5OiJTVE9SQUdFX0xPR1MifSx7a2V5OiJFWFRFTlNJT05TX0xPR1MiLG5hbWU6IkV4dGVuc2lvbiJ9XTtjb25zdCBlPXtwcm9wZXJ0eToidHMiLGRpcmVjdGlvbjp3LkRFU0N9O3RoaXMucGFnZUxpbms9bmV3IEMoMTAsMCxudWxsLGUpLHRoaXMuZGF0YVNvdXJjZT1uZXcgeShbXSl9bmdPbkluaXQoKXt0aGlzLnVwZGF0ZVdpZGdldFRpdGxlKCl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3I9dGhpcy5wYWdpbmF0b3IsdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vblRpbWV3aW5kb3dDaGFuZ2VGdW5jdGlvbj1lPT4odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vcHRpb25zLnRpbWVXaW5kb3dDb25maWc9ZSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksZSksdGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmxvZ0xpbmtzPVt7a2V5OmAke2Uua2V5fV9MT0dTYCxuYW1lOiJDb25uZWN0b3IiLGZpbHRlckZuOmU9PiFlLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX0se2tleTpgJHtlLmtleX1fTE9HU2AsbmFtZToiQ29udmVydGVyIixmaWx0ZXJGbjplPT5lLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX1dfWVsc2UgdGhpcy5sb2dMaW5rcz10aGlzLmdhdGV3YXlMb2dMaW5rczt0aGlzLmFjdGl2ZUxpbms9dGhpcy5sb2dMaW5rc1swXSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXVwZGF0ZVdpZGdldFRpdGxlKCl7aWYodGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LndpZGdldENvbmZpZy50aXRsZSx0PSIke2Nvbm5lY3Rvck5hbWV9IjtpZihlLmluY2x1ZGVzKHQpKXtjb25zdCBuPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmN0eC53aWRnZXRUaXRsZT1lLnJlcGxhY2UodCxuLmtleSl9fX11cGRhdGVEYXRhKCl7aWYodGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhLmxlbmd0aCYmdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhWzBdKXtsZXQgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGFbMF0uZGF0YS5tYXAoKGU9Pntjb25zdCB0PXt0czplWzBdLGtleTp0aGlzLmFjdGl2ZUxpbmsua2V5LG1lc3NhZ2U6ZVsxXSxzdGF0dXM6IklOVkFMSUQgTE9HIEZPUk1BVCJ9O3RyeXt0Lm1lc3NhZ2U9L1xbKC4qKS8uZXhlYyhlWzFdKVswXX1jYXRjaChuKXt0Lm1lc3NhZ2U9ZVsxXX10cnl7dC5zdGF0dXM9ZVsxXS5tYXRjaCgvXHwoXHcrKVx8LylbMV19Y2F0Y2goZSl7dC5zdGF0dXM9IklOVkFMSUQgTE9HIEZPUk1BVCJ9cmV0dXJuIHR9KSk7dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuJiYoZT1lLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuKGUpKSkpLHRoaXMuZGF0YVNvdXJjZS5kYXRhPWV9fW9uVGFiQ2hhbmdlZChlKXt0aGlzLmFjdGl2ZUxpbms9ZSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXN0YXR1c0NsYXNzKGUpe3N3aXRjaChlKXtjYXNlIHF0LkRFQlVHOnJldHVybiJzdGF0dXMgc3RhdHVzLWRlYnVnIjtjYXNlIHF0LldBUk5JTkc6cmV0dXJuInN0YXR1cyBzdGF0dXMtd2FybmluZyI7Y2FzZSBxdC5FUlJPUjpjYXNlIHF0LkVYQ0VQVElPTjpyZXR1cm4ic3RhdHVzIHN0YXR1cy1lcnJvciI7ZGVmYXVsdDpyZXR1cm4ic3RhdHVzIHN0YXR1cy1pbmZvIn19c3RhdHVzQ2xhc3NNc2coZSl7aWYoZT09PXF0LkVYQ0VQVElPTilyZXR1cm4ibXNnLXN0YXR1cy1leGNlcHRpb24ifXRyYWNrQnlMb2dUcyhlLHQpe3JldHVybiB0LnRzfWNoYW5nZVN1YnNjcmlwdGlvbigpe3RoaXMuY3R4LmRhdGFzb3VyY2VzJiZ0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlcyYmKHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlc1swXS5kYXRhS2V5cz1be25hbWU6dGhpcy5hY3RpdmVMaW5rLmtleSx0eXBlOlQudGltZXNlcmllcyxzZXR0aW5nczp7fX1dLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5jYWxsYmFja3Mub25EYXRhVXBkYXRlZD0oKT0+e3RoaXMudXBkYXRlRGF0YSgpfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjYSxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Y2Esc2VsZWN0b3I6InRiLWdhdGV3YXktbG9ncyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToic2VhcmNoSW5wdXRGaWVsZCIsZmlyc3Q6ITAscHJlZGljYXRlOlsic2VhcmNoSW5wdXQiXSxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic29ydCIsZmlyc3Q6ITAscHJlZGljYXRlOmcsZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InBhZ2luYXRvciIsZmlyc3Q6ITAscHJlZGljYXRlOmgsZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRUYWJsZSxzZWxlY3RvcjoibWF0LXRhYmxlLCB0YWJsZVttYXQtdGFibGVdIixleHBvcnRBczpbIm1hdFRhYmxlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsRGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyQ2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyUm93RGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyUm93RGVmXSIsaW5wdXRzOlsibWF0SGVhZGVyUm93RGVmIiwibWF0SGVhZGVyUm93RGVmU3RpY2t5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDb2x1bW5EZWYsc2VsZWN0b3I6IlttYXRDb2x1bW5EZWZdIixpbnB1dHM6WyJtYXRDb2x1bW5EZWYiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGxEZWYsc2VsZWN0b3I6IlttYXRDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRSb3dEZWYsc2VsZWN0b3I6IlttYXRSb3dEZWZdIixpbnB1dHM6WyJtYXRSb3dEZWZDb2x1bW5zIiwibWF0Um93RGVmV2hlbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbCxzZWxlY3RvcjoibWF0LWhlYWRlci1jZWxsLCB0aFttYXQtaGVhZGVyLWNlbGxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGwsc2VsZWN0b3I6Im1hdC1jZWxsLCB0ZFttYXQtY2VsbF0ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0SGVhZGVyUm93LHNlbGVjdG9yOiJtYXQtaGVhZGVyLXJvdywgdHJbbWF0LWhlYWRlci1yb3ddIixleHBvcnRBczpbIm1hdEhlYWRlclJvdyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0Um93LHNlbGVjdG9yOiJtYXQtcm93LCB0clttYXQtcm93XSIsZXhwb3J0QXM6WyJtYXRSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp4Lk1hdFBhZ2luYXRvcixzZWxlY3RvcjoibWF0LXBhZ2luYXRvciIsaW5wdXRzOlsiY29sb3IiLCJwYWdlSW5kZXgiLCJsZW5ndGgiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImhpZGVQYWdlU2l6ZSIsInNob3dGaXJzdExhc3RCdXR0b25zIiwic2VsZWN0Q29uZmlnIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsicGFnZSJdLGV4cG9ydEFzOlsibWF0UGFnaW5hdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp6Lk1hdERpdmlkZXIsc2VsZWN0b3I6Im1hdC1kaXZpZGVyIixpbnB1dHM6WyJ2ZXJ0aWNhbCIsImluc2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXYsc2VsZWN0b3I6IlttYXQtdGFiLW5hdi1iYXJdIixpbnB1dHM6WyJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJkaXNhYmxlUmlwcGxlIiwiY29sb3IiLCJ0YWJQYW5lbCJdLGV4cG9ydEFzOlsibWF0VGFiTmF2QmFyIiwibWF0VGFiTmF2Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXZQYW5lbCxzZWxlY3RvcjoibWF0LXRhYi1uYXYtcGFuZWwiLGlucHV0czpbImlkIl0sZXhwb3J0QXM6WyJtYXRUYWJOYXZQYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiTGluayxzZWxlY3RvcjoiW21hdC10YWItbGlua10sIFttYXRUYWJMaW5rXSIsaW5wdXRzOlsiYWN0aXZlIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJpZCJdLGV4cG9ydEFzOlsibWF0VGFiTGluayJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUxvZ3NDb21wb25lbnQiLGNhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmNhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWxvZ3MiLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2N0eDpbe3R5cGU6YX1dLGRpYWxvZ1JlZjpbe3R5cGU6YX1dLHNlYXJjaElucHV0RmllbGQ6W3t0eXBlOm8sYXJnczpbInNlYXJjaElucHV0Il19XSxzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0scGFnaW5hdG9yOlt7dHlwZTpvLGFyZ3M6W2hdfV19fSk7Y2xhc3MgcGF7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLnV0aWxzPW4sdGhpcy5pc051bWVyaWNEYXRhPSExLHRoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3RhdGlzdGljc0tleXM9W10sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnM9e2NhbGxiYWNrczp7b25EYXRhVXBkYXRlZDooKT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfSx1c2VEYXNoYm9hcmRUaW1ld2luZG93OiExLGxlZ2VuZENvbmZpZzp7cG9zaXRpb246Uy5ib3R0b219fSx0aGlzLmluaXQ9KCk9Pnt0aGlzLmZsb3RDdHg9eyRzY29wZTp0aGlzLmN0eC4kc2NvcGUsJGluamVjdG9yOnRoaXMuY3R4LiRpbmplY3Rvcix1dGlsczp0aGlzLmN0eC51dGlscyxpc01vYmlsZTp0aGlzLmN0eC5pc01vYmlsZSxpc0VkaXQ6dGhpcy5jdHguaXNFZGl0LHN1YnNjcmlwdGlvbkFwaTp0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGksZGV0ZWN0Q2hhbmdlczp0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzLHNldHRpbmdzOnRoaXMuY3R4LnNldHRpbmdzfX0sdGhpcy51cGRhdGVDaGFydD0oKT0+e30sdGhpcy5yZXNpemU9KCk9Pnt9O2NvbnN0IGE9e3Byb3BlcnR5OiIwIixkaXJlY3Rpb246dy5ERVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwwLG51bGwsYSksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiMCIsIjEiXSx0aGlzLmRhdGFTb3VyY2U9bmV3IHkoW10pLHRoaXMuc3RhdGlzdGljRm9ybT10aGlzLmZiLmdyb3VwKHtzdGF0aXN0aWNLZXk6W251bGwsW11dfSksdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e3RoaXMuY29tbWFuZE9iaj1udWxsLHRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5jb21tYW5kT2JqPXRoaXMuY29tbWFuZHMuZmluZCgodD0+dC5hdHRyaWJ1dGVPbkdhdGV3YXk9PT1lKSkpLHRoaXMuc3Vic2NyaXB0aW9uSW5mbyYmdGhpcy5jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhc291cmNlc1swXS5lbnRpdHksZSl9KSl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKCk9PnRoaXMuc29ydERhdGEoKSkpLHRoaXMuaW5pdCgpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXMubGVuZ3RoKXtjb25zdCBlPXRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZW50aXR5O2lmKGUuaWQuaWQ9PT1rKXJldHVybjt0aGlzLmdlbmVyYWw/dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eVRpbWVzZXJpZXNMYXRlc3QoZS5pZCkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGU9PmUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1Byb2R1Y2VkIil8fGUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1NlbnQiKSkpO3RoaXMuY3JlYXRlR2VuZXJhbENoYXJ0c1N1YnNjcmlwdGlvbihlLG4pfSkpOnRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKGUuaWQsTC5TSEFSRURfU0NPUEUsWyJnZW5lcmFsX2NvbmZpZ3VyYXRpb24iXSkuc3Vic2NyaWJlKCh0PT57dCYmdC5sZW5ndGgmJih0aGlzLmNvbW1hbmRzPXRbMF0udmFsdWUuc3RhdGlzdGljcy5jb21tYW5kcywhdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWUmJnRoaXMuY29tbWFuZHMmJnRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5Iikuc2V0VmFsdWUodGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpLHRoaXMuY3JlYXRlQ2hhcnRzU3Vic2NyaXB0aW9uKGUsdGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpKSl9KSl9fW5hdmlnYXRlVG9TdGF0aXN0aWNzKCl7Y29uc3QgZT1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTt0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIub3BlblN0YXRlKCJjb25maWd1cmF0aW9uIixlKX1zb3J0RGF0YSgpe3RoaXMuZGF0YVNvdXJjZS5zb3J0RGF0YSh0aGlzLmRhdGFTb3VyY2UuZGF0YSx0aGlzLnNvcnQpfW9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGUpe3RoaXMubGVnZW5kRGF0YS5rZXlzW2VdLmRhdGFLZXkuaGlkZGVuPSF0aGlzLmxlZ2VuZERhdGEua2V5c1tlXS5kYXRhS2V5LmhpZGRlbix0aGlzLnN1YnNjcmlwdGlvbi51cGRhdGVEYXRhVmlzaWJpbGl0eShlKX1jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1be25hbWU6dCxsYWJlbDp0fV0sdGhpcy5zdWJzY3JpcHRpb25JbmZvPW4sdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWNyZWF0ZUdlbmVyYWxDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1bXSx0Py5sZW5ndGgmJnQuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUsbGFiZWw6ZX0pfSkpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZGF0YUtleXMuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUubmFtZSxsYWJlbDplLmxhYmVsfSl9KSksdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0KCl7dGhpcy5yZXNpemUkJiZ0aGlzLnJlc2l6ZSQuZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uRGF0YVVwZGF0ZUVycm9yKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5wYXJzZUV4Y2VwdGlvbihlKTtsZXQgbj10Lm5hbWU7dC5tZXNzYWdlJiYobis9IjogIit0Lm1lc3NhZ2UpLGNvbnNvbGUuZXJyb3Iobil9b25EYXRhVXBkYXRlZCgpe3RoaXMuaXNEYXRhT25seU51bWJlcnMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJih0aGlzLmNoYXJ0SW5pdGVkfHx0aGlzLmluaXRDaGFydCgpKX1pbml0Q2hhcnQoKXt0aGlzLmNoYXJ0SW5pdGVkPSEwLHRoaXMuZmxvdEN0eC4kY29udGFpbmVyPSQodGhpcy5zdGF0aXN0aWNDaGFydC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc2l6ZSQub2JzZXJ2ZSh0aGlzLnN0YXRpc3RpY0NoYXJ0Lm5hdGl2ZUVsZW1lbnQpfWlzRGF0YU9ubHlOdW1iZXJzKCl7dGhpcy5nZW5lcmFsP3RoaXMuaXNOdW1lcmljRGF0YT0hMDoodGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5zdWJzY3JpcHRpb24uZGF0YS5sZW5ndGg/dGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhOltdLHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCYmIXRoaXMuZGF0YVR5cGVEZWZpbmVkJiYodGhpcy5kYXRhVHlwZURlZmluZWQ9ITAsdGhpcy5pc051bWVyaWNEYXRhPXRoaXMuZGF0YVNvdXJjZS5kYXRhLmV2ZXJ5KChlPT4haXNOYU4oK2VbMV0pKSkpKX1jaGFuZ2VTdWJzY3JpcHRpb24oZSl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMucmVzZXQoKSx0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LnN1YnNjcmlwdGlvbkFwaS5jcmVhdGVTdWJzY3JpcHRpb25Gcm9tSW5mbyhBLnRpbWVzZXJpZXMsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3Vic2NyaXB0aW9uPWUsdGhpcy5pc0RhdGFPbmx5TnVtYmVycygpLHRoaXMubGVnZW5kRGF0YT10aGlzLnN1YnNjcmlwdGlvbi5sZWdlbmREYXRhLHRoaXMuZmxvdEN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uPWUsdGhpcy5yZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuY3R4LmRldGVjdENoYW5nZXMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJnRoaXMuaW5pdENoYXJ0KCl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpYLlV0aWxzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cGEsc2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsaW5wdXRzOntjdHg6ImN0eCIsZ2VuZXJhbDoiZ2VuZXJhbCJ9LHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzb3J0IixmaXJzdDohMCxwcmVkaWNhdGU6ZyxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic3RhdGlzdGljQ2hhcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInN0YXRpc3RpY0NoYXJ0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0Lmx0LW1kPSJjb2x1bW4iPlxuICA8bWF0LWNhcmQgW2Zvcm1Hcm91cF09InN0YXRpc3RpY0Zvcm0iICpuZ0lmPSIhZ2VuZXJhbCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0YXRpc3RpY0tleSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGtleSBvZiBzdGF0aXN0aWNzS2V5cyIgW3ZhbHVlXT0ia2V5Ij5cbiAgICAgICAgICB7eyBrZXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb21tYW5kIG9mIGNvbW1hbmRzIiBbdmFsdWVdPSJjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSI+XG4gICAgICAgICAge3sgY29tbWFuZC5hdHRyaWJ1dGVPbkdhdGV3YXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1lcnJvclxuICAgICAgKm5nSWY9IiFzdGF0aXN0aWNzS2V5cy5sZW5ndGggJiYgIWNvbW1hbmRzLmxlbmd0aCI+XG4gICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWMtY29tbWFuZHMtZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0ibmF2aWdhdGVUb1N0YXRpc3RpY3MoKSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3MtYnV0dG9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIiAqbmdJZj0iY29tbWFuZE9iaiI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IFt2YWx1ZV09ImNvbW1hbmRPYmouY29tbWFuZCIgZGlzYWJsZWQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9tYXQtY2FyZD5cbiAgPGRpdiBjbGFzcz0iY2hhcnQtYm94IiBmeExheW91dD0iY29sdW1uIj5cbiAgICA8ZGl2IGNsYXNzPSJjaGFydC1jb250YWluZXIiICNzdGF0aXN0aWNDaGFydCBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+PC9kaXY+XG4gICAgPHRhYmxlIFtmeFNob3ddPSIhaXNOdW1lcmljRGF0YSIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgICAgIG1hdFNvcnREaXNhYmxlQ2xlYXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMCI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7IFwnd2lkZ2V0cy5nYXRld2F5LmNyZWF0ZWQtdGltZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCByb3c7IGxldCByb3dJbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICB7eyByb3dbMF18IGRhdGU6XCd5eXl5LU1NLWRkIEhIOm1tOnNzXCcgfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9IjEiPlxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdyI+XG4gICAgICAgICAge3sgcm93WzFdIH19XG4gICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj0iZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IlxuICAgICAgICAgICAgICAgKm1hdFJvd0RlZj0ibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uczsiPjwvbWF0LXJvdz5cbiAgICA8L3RhYmxlPlxuICAgIDxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwICYmICFpc051bWVyaWNEYXRhIlxuICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7IFwnYXR0cmlidXRlLm5vLXRlbGVtZXRyeS10ZXh0XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGRpdiBmeEZsZXggY2xhc3M9ImxlZ2VuZCIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgW2Z4U2hvd109ImlzTnVtZXJpY0RhdGEiPlxuICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWtleXMiICpuZ0Zvcj0ibGV0IGxlZ2VuZEtleSBvZiBsZWdlbmREYXRhPy5rZXlzIiBmeExheW91dD0icm93IlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZ2VuZC1saW5lIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09ImxlZ2VuZEtleS5kYXRhS2V5LmNvbG9yIj48L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1sYWJlbCJcbiAgICAgICAgICAgICAoY2xpY2spPSJvbkxlZ2VuZEtleUhpZGRlbkNoYW5nZShsZWdlbmRLZXkuZGF0YUluZGV4KSJcbiAgICAgICAgICAgICBbY2xhc3NdPSJ7IFwnaGlkZGVuLWxhYmVsXCc6IGxlZ2VuZERhdGEua2V5c1tsZWdlbmRLZXkuZGF0YUluZGV4XS5kYXRhS2V5LmhpZGRlbiB9IlxuICAgICAgICAgICAgIFtpbm5lckhUTUxdPSJsZWdlbmRLZXkuZGF0YUtleS5sYWJlbCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BhZGRpbmc6MH06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXJ7aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDo0MCU7aGVpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OjM1cHg7cGFkZGluZzoxNXB4O2dhcDoyMnB4fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzUwcHgpezpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDoxMDAlfX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveCw6aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtmbGV4LWdyb3c6MX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveHtvdmVyZmxvdzphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcj4qe2hlaWdodDoxMDAlfTpob3N0IC5sZWdlbmR7ZmxleC13cmFwOndyYXA7d2lkdGg6MTAwJTtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206NHB4O21hcmdpbi10b3A6MTVweH06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVse3BhZGRpbmc6MnB4IDIwcHggMnB4IDEwcHg7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWwuaGlkZGVuLWxhYmVse3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7b3BhY2l0eTouNn06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTVweDtoZWlnaHQ6M3B4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7b3V0bGluZTpub25lfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmhlLk1hdENhcmQsc2VsZWN0b3I6Im1hdC1jYXJkIixpbnB1dHM6WyJhcHBlYXJhbmNlIl0sZXhwb3J0QXM6WyJtYXRDYXJkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5EYXRlUGlwZSxuYW1lOiJkYXRlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U3RhdGlzdGljc0NvbXBvbmVudCIscGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtbWQ9ImNvbHVtbiI+XG4gIDxtYXQtY2FyZCBbZm9ybUdyb3VwXT0ic3RhdGlzdGljRm9ybSIgKm5nSWY9IiFnZW5lcmFsIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3RhdGlzdGljS2V5Ij5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQga2V5IG9mIHN0YXRpc3RpY3NLZXlzIiBbdmFsdWVdPSJrZXkiPlxuICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgY29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQuYXR0cmlidXRlT25HYXRld2F5Ij5cbiAgICAgICAgICB7eyBjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iIXN0YXRpc3RpY3NLZXlzLmxlbmd0aCAmJiAhY29tbWFuZHMubGVuZ3RoIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpYy1jb21tYW5kcy1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPGRpdj5cbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJuYXZpZ2F0ZVRvU3RhdGlzdGljcygpIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljcy1idXR0b25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siICpuZ0lmPSJjb21tYW5kT2JqIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW3ZhbHVlXT0iY29tbWFuZE9iai5jb21tYW5kIiBkaXNhYmxlZD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L21hdC1jYXJkPlxuICA8ZGl2IGNsYXNzPSJjaGFydC1ib3giIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgI3N0YXRpc3RpY0NoYXJ0IFtmeFNob3ddPSJpc051bWVyaWNEYXRhIj48L2Rpdj5cbiAgICA8dGFibGUgW2Z4U2hvd109IiFpc051bWVyaWNEYXRhIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIlxuICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSIwIj5cbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdzsgbGV0IHJvd0luZGV4ID0gaW5kZXgiPlxuICAgICAgICAgIHt7IHJvd1swXXwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMSI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiA3MCUiPnt7IFwnd2lkZ2V0cy5nYXRld2F5Lm1lc3NhZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgcm93Ij5cbiAgICAgICAgICB7eyByb3dbMV0gfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG1hdC1oZWFkZXItcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCJcbiAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICA8bWF0LXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgIDwvdGFibGU+XG4gICAgPHNwYW4gW2Z4U2hvd109ImRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDAgJiYgIWlzTnVtZXJpY0RhdGEiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8ZGl2IGZ4RmxleCBjbGFzcz0ibGVnZW5kIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIiBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+XG4gICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQta2V5cyIgKm5nRm9yPSJsZXQgbGVnZW5kS2V5IG9mIGxlZ2VuZERhdGE/LmtleXMiIGZ4TGF5b3V0PSJyb3ciXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiPlxuICAgICAgICA8c3BhbiBjbGFzcz0ibGVnZW5kLWxpbmUiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ibGVnZW5kS2V5LmRhdGFLZXkuY29sb3IiPjwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWxhYmVsIlxuICAgICAgICAgICAgIChjbGljayk9Im9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGxlZ2VuZEtleS5kYXRhSW5kZXgpIlxuICAgICAgICAgICAgIFtjbGFzc109InsgXCdoaWRkZW4tbGFiZWxcJzogbGVnZW5kRGF0YS5rZXlzW2xlZ2VuZEtleS5kYXRhSW5kZXhdLmRhdGFLZXkuaGlkZGVuIH0iXG4gICAgICAgICAgICAgW2lubmVySFRNTF09ImxlZ2VuZEtleS5kYXRhS2V5LmxhYmVsIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzowfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtvdmVyZmxvdy15OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjQwJTtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6MzVweDtwYWRkaW5nOjE1cHg7Z2FwOjIycHh9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NTBweCl7Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjEwMCV9fTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94LDpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtY29udGFpbmVye2hlaWdodDoxMDAlO2ZsZXgtZ3JvdzoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94e292ZXJmbG93OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyPip7aGVpZ2h0OjEwMCV9Omhvc3QgLmxlZ2VuZHtmbGV4LXdyYXA6d3JhcDt3aWR0aDoxMDAlO3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo0cHg7bWFyZ2luLXRvcDoxNXB4fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWx7cGFkZGluZzoycHggMjBweCAycHggMTBweDt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLmxlZ2VuZCAubGVnZW5kLWtleXMgLmxlZ2VuZC1sYWJlbC5oaWRkZW4tbGFiZWx7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtvcGFjaXR5Oi42fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGluZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNXB4O2hlaWdodDozcHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtvdXRsaW5lOm5vbmV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpYLlV0aWxzU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0sc3RhdGlzdGljQ2hhcnQ6W3t0eXBlOm8sYXJnczpbInN0YXRpc3RpY0NoYXJ0Il19XSxjdHg6W3t0eXBlOmF9XSxnZW5lcmFsOlt7dHlwZTphfV19fSk7Y2xhc3MgbWF7c3RhdGlje3RoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1zdGF0aWN7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdPbGRGaWVsZHM9WyJhdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uIiwiZXh0ZW5zaW9uLWNvbmZpZyJdfXN0YXRpY3t0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ05ld0ZpZWxkcz1bImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIiwicmVzcG9uc2VUb3BpY1FvUyIsImV4dGVuc2lvbkNvbmZpZyJdfXN0YXRpYyBtYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGU/Lm1hcCgoKHtjb252ZXJ0ZXI6ZSx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpuPTF9KT0+e2NvbnN0IGE9ZS5kZXZpY2VJbmZvPz90aGlzLmV4dHJhY3RDb252ZXJ0ZXJEZXZpY2VJbmZvKGUpLG89ey4uLmUsZGV2aWNlSW5mbzphLGV4dGVuc2lvbkNvbmZpZzplLmV4dGVuc2lvbkNvbmZpZ3x8ZVsiZXh0ZW5zaW9uLWNvbmZpZyJdfHxudWxsfTtyZXR1cm4gdGhpcy5jbGVhblVwT2xkRmllbGRzKG8pLHtjb252ZXJ0ZXI6byx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpufX0pKX1zdGF0aWMgbWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbihlKXtyZXR1cm4gdGhpcy5tcXR0UmVxdWVzdFR5cGVLZXlzLnJlZHVjZSgoKHQsbik9PmVbbl0/KHRbbl09ZVtuXS5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwUmVxdWVzdFRvVXBncmFkZWRWZXJzaW9uKGUsbik7cmV0dXJuIHRoaXMuY2xlYW5VcE9sZEZpZWxkcyh0KSx0fSkpLHQpOnQpLHt9KX1zdGF0aWMgbWFwUmVxdWVzdHNUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMucmVkdWNlKCgodCxuKT0+ZVtuXT8odFtuXT1lW25dLm1hcCgoZT0+e249PT1Jbi5TRVJWRVJfU0lERV9SUEMmJmRlbGV0ZSBlLnR5cGU7Y29uc3R7YXR0cmlidXRlTmFtZUV4cHJlc3Npb246dCxkZXZpY2VJbmZvOmEsLi4ub309ZSxpPXsuLi5vLGF0dHJpYnV0ZU5hbWVKc29uRXhwcmVzc2lvbjp0fHxudWxsLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZSE9PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGx9O3JldHVybiB0aGlzLmNsZWFuVXBOZXdGaWVsZHMoaSksaX0pKSx0KTp0KSx7fSl9c3RhdGljIG1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlPy5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwQ29udmVydGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLmNvbnZlcnRlcik7cmV0dXJuIHRoaXMuY2xlYW5VcE5ld0ZpZWxkcyh0KSx7Y29udmVydGVyOnQsdG9waWNGaWx0ZXI6ZS50b3BpY0ZpbHRlcn19KSl9c3RhdGljIG1hcENvbnZlcnRlclRvRG93bmdyYWRlZFZlcnNpb24oZSl7Y29uc3R7ZGV2aWNlSW5mbzp0LC4uLm59PWU7cmV0dXJuIGUudHlwZSE9PXduLkJZVEVTP3suLi5uLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjp0Py5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLk1TRz90LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZUpzb25FeHByZXNzaW9uOnQ/LmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlPT09VG4uTVNHP3QuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246bnVsbCxkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uOnQ/LmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIT09VG4uTVNHP3Q/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbjp0Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSE9PVRuLk1TRz90Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbjpudWxsfTp7Li4ubixkZXZpY2VOYW1lRXhwcmVzc2lvbjp0LmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVFeHByZXNzaW9uOnQuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb24sImV4dGVuc2lvbi1jb25maWciOmUuZXh0ZW5zaW9uQ29uZmlnfX1zdGF0aWMgY2xlYW5VcE9sZEZpZWxkcyhlKXt0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ09sZEZpZWxkcy5mb3JFYWNoKCh0PT5kZWxldGUgZVt0XSkpLFooZSl9c3RhdGljIGNsZWFuVXBOZXdGaWVsZHMoZSl7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdOZXdGaWVsZHMuZm9yRWFjaCgodD0+ZGVsZXRlIGVbdF0pKSxaKGUpfXN0YXRpYyBnZXRUeXBlU291cmNlQnlWYWx1ZShlKXtyZXR1cm4gZS5pbmNsdWRlcygiJHsiKT9Ubi5NU0c6ZS5pbmNsdWRlcygiLyIpP1RuLlRPUElDOlRuLkNPTlNUfXN0YXRpYyBleHRyYWN0Q29udmVydGVyRGV2aWNlSW5mbyhlKXtjb25zdCB0PWUuZGV2aWNlTmFtZUV4cHJlc3Npb258fGUuZGV2aWNlTmFtZUpzb25FeHByZXNzaW9ufHxlLmRldmljZU5hbWVUb3BpY0V4cHJlc3Npb258fG51bGwsbj1lLmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6dD90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKHQpOm51bGwsYT1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9ufHxlLmRldmljZVR5cGVUb3BpY0V4cHJlc3Npb258fGUuZGV2aWNlVHlwZUpzb25FeHByZXNzaW9ufHwiZGVmYXVsdCIsbz1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6YT90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKGEpOm51bGw7cmV0dXJuIHR8fGE/e2RldmljZU5hbWVFeHByZXNzaW9uOnQsZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6bixkZXZpY2VQcm9maWxlRXhwcmVzc2lvbjphLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOm99Om51bGx9c3RhdGljIG1hcFJlcXVlc3RUb1VwZ3JhZGVkVmVyc2lvbihlLHQpe2NvbnN0IG49ZS5kZXZpY2VOYW1lSnNvbkV4cHJlc3Npb258fGUuZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbnx8bnVsbCxhPWUuZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbnx8ZS5kZXZpY2VUeXBlSnNvbkV4cHJlc3Npb258fCJkZWZhdWx0IixvPWE/dGhpcy5nZXRUeXBlU291cmNlQnlWYWx1ZShhKTpudWxsLGk9ZS5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZXx8ZS5hdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb258fG51bGwscj10PT09SW4uU0VSVkVSX1NJREVfUlBDPzE6bnVsbCxzPXQ9PT1Jbi5TRVJWRVJfU0lERV9SUEM/ZS5yZXNwb25zZVRvcGljRXhwcmVzc2lvbj9Gbi5XaXRoUmVzcG9uc2U6Rm4uV2l0aG91dFJlc3BvbnNlOm51bGw7cmV0dXJuey4uLmUsYXR0cmlidXRlTmFtZUV4cHJlc3Npb246aSxhdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZTppP3RoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoaSk6bnVsbCxkZXZpY2VJbmZvOmUuZGV2aWNlSW5mbz9lLmRldmljZUluZm86bj97ZGV2aWNlTmFtZUV4cHJlc3Npb246bixkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZTp0aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKG4pLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOmEsZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6b306bnVsbCxyZXNwb25zZVRvcGljUW9TOnIsdHlwZTpzfX19ZSgiTXF0dFZlcnNpb25NYXBwaW5nVXRpbCIsbWEpO2NsYXNzIGRhe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dCx0aGlzLmdhdGV3YXlWZXJzaW9uPWJhLnBhcnNlVmVyc2lvbih0aGlzLmdhdGV3YXlWZXJzaW9uSW4pLHRoaXMuY29uZmlnVmVyc2lvbj1iYS5wYXJzZVZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlnVmVyc2lvbil9Z2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBkYXRlTmVlZGVkKCk/dGhpcy5wcm9jZXNzVmVyc2lvblVwZGF0ZSgpOnRoaXMuY29ubmVjdG9yfXByb2Nlc3NWZXJzaW9uVXBkYXRlKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBncmFkZU5lZWRlZCgpP3RoaXMuZ2V0VXBncmFkZWRWZXJzaW9uKCk6dGhpcy5pc1ZlcnNpb25Eb3duZ3JhZGVOZWVkZWQoKT90aGlzLmdldERvd25ncmFkZWRWZXJzaW9uKCk6dGhpcy5jb25uZWN0b3J9aXNWZXJzaW9uVXBkYXRlTmVlZGVkKCl7cmV0dXJuISF0aGlzLmdhdGV3YXlWZXJzaW9uJiZ0aGlzLmNvbmZpZ1ZlcnNpb24hPT10aGlzLmdhdGV3YXlWZXJzaW9ufWlzVmVyc2lvblVwZ3JhZGVOZWVkZWQoKXtyZXR1cm4gdGhpcy5nYXRld2F5VmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiYoIXRoaXMuY29uZmlnVmVyc2lvbnx8dGhpcy5jb25maWdWZXJzaW9uPHRoaXMuZ2F0ZXdheVZlcnNpb24pfWlzVmVyc2lvbkRvd25ncmFkZU5lZWRlZCgpe3JldHVybiB0aGlzLmNvbmZpZ1ZlcnNpb24mJnRoaXMuY29uZmlnVmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiZ0aGlzLmNvbmZpZ1ZlcnNpb24+dGhpcy5nYXRld2F5VmVyc2lvbn19ZSgiR2F0ZXdheUNvbm5lY3RvclZlcnNpb25Qcm9jZXNzb3IiLGRhKTtjbGFzcyB1YSBleHRlbmRzIGRhe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLmdhdGV3YXlWZXJzaW9uSW49ZSx0aGlzLmNvbm5lY3Rvcj10LHRoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdHtjb25uZWN0UmVxdWVzdHM6ZSxkaXNjb25uZWN0UmVxdWVzdHM6dCxhdHRyaWJ1dGVSZXF1ZXN0czpuLGF0dHJpYnV0ZVVwZGF0ZXM6YSxzZXJ2ZXJTaWRlUnBjOm99PXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO2xldCBpPXsuLi50aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbixyZXF1ZXN0c01hcHBpbmc6bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmUsZGlzY29ubmVjdFJlcXVlc3RzOnQsYXR0cmlidXRlUmVxdWVzdHM6bixhdHRyaWJ1dGVVcGRhdGVzOmEsc2VydmVyU2lkZVJwYzpvfSksbWFwcGluZzptYS5tYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24ubWFwcGluZyl9O3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMuZm9yRWFjaCgoZT0+e2NvbnN0e1tlXTp0LC4uLm59PWk7aT17Li4ubn19KSksdGhpcy5jbGVhblVwQ29uZmlnSnNvbihpKSx7Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246aSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19Z2V0RG93bmdyYWRlZFZlcnNpb24oKXtjb25zdHtyZXF1ZXN0c01hcHBpbmc6ZSxtYXBwaW5nOnQsLi4ubn09dGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24sYT1lP21hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihlKTp7fSxvPW1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7Li4ubiwuLi5hLG1hcHBpbmc6b30sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWNsZWFuVXBDb25maWdKc29uKGUpe2VlKGUucmVxdWVzdHNNYXBwaW5nLHt9KSYmZGVsZXRlIGUucmVxdWVzdHNNYXBwaW5nLGVlKGUubWFwcGluZyxbXSkmJmRlbGV0ZSBlLm1hcHBpbmd9fWUoIk1xdHRWZXJzaW9uUHJvY2Vzc29yIix1YSk7Y2xhc3MgZ2EgZXh0ZW5kcyBkYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dH1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdCBlPXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7bWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZS5tYXN0ZXIpOntzbGF2ZXM6W119LHNsYXZlOmUuc2xhdmU/aGEubWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlLnNsYXZlKTp7fX0sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWdldERvd25ncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbjtyZXR1cm57Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246ey4uLmUsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e30sbWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLm1hc3Rlcik6e3NsYXZlczpbXX19LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX19ZSgiTW9kYnVzVmVyc2lvblByb2Nlc3NvciIsZ2EpO2NsYXNzIGZhIGV4dGVuZHMgZGF7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMuZ2F0ZXdheVZlcnNpb25Jbj1lLHRoaXMuY29ubmVjdG9yPXR9Z2V0VXBncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbi5zZXJ2ZXI7cmV0dXJuey4uLnRoaXMuY29ubmVjdG9yLGNvbmZpZ3VyYXRpb25Kc29uOntzZXJ2ZXI6ZT94YS5tYXBTZXJ2ZXJUb1VwZ3JhZGVkVmVyc2lvbihlKTp7fSxtYXBwaW5nOmU/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUubWFwcGluZyk6W119LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX1nZXREb3duZ3JhZGVkVmVyc2lvbigpe3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24pfSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19fWUoIk9wY1ZlcnNpb25Qcm9jZXNzb3IiLGZhKTtjbGFzcyB5YXtjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9bmV3IGksdGhpcy5mYj1yKGRlKSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmJhc2ljRm9ybUdyb3VwPXRoaXMuaW5pdEJhc2ljRm9ybUdyb3VwKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLm9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVkLmVtaXQoKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnNldFZhbHVlKHRoaXMubWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSkse2VtaXRFdmVudDohMX0pfW9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZSh0aGlzLmdldE1hcHBlZFZhbHVlKGUpKSx0aGlzLm9uVG91Y2hlZCgpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eWEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnlhLGlucHV0czp7Z2VuZXJhbFRhYkNvbnRlbnQ6ImdlbmVyYWxUYWJDb250ZW50In0sb3V0cHV0czp7aW5pdGlhbGl6ZWQ6ImluaXRpYWxpemVkIn0sbmdJbXBvcnQ6dH0pfX1lKCJHYXRld2F5Q29ubmVjdG9yQmFzaWNDb25maWdEaXJlY3RpdmUiLHlhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnlhLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2dlbmVyYWxUYWJDb250ZW50Olt7dHlwZTphfV0saW5pdGlhbGl6ZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBiYXtzdGF0aWMgZ2V0Q29uZmlnKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSBfdC5NUVRUOnJldHVybiBuZXcgdWEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk9QQ1VBOnJldHVybiBuZXcgZmEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk1PREJVUzpyZXR1cm4gbmV3IGdhKHQsZSkuZ2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCk7ZGVmYXVsdDpyZXR1cm4gZX19c3RhdGljIHBhcnNlVmVyc2lvbihlKXtyZXR1cm4gdGUoZSk/ZTpuZShlKT9wYXJzZUZsb2F0KGUucmVwbGFjZSgvXC4vZywiIikuc2xpY2UoMCwzKSkvMTAwOjB9fWUoIkdhdGV3YXlDb25uZWN0b3JWZXJzaW9uTWFwcGluZ1V0aWwiLGJhKTtjbGFzcyBoYXtzdGF0aWMgbWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJue3NsYXZlczplLnNsYXZlcy5tYXAoKGU9Pntjb25zdHtzZW5kRGF0YU9ubHlPbkNoYW5nZTp0LC4uLm59PWU7cmV0dXJuey4uLm4sZGV2aWNlVHlwZTplLmRldmljZVR5cGU/PyJkZWZhdWx0IixyZXBvcnRTdHJhdGVneTp0P3t0eXBlOnNuLk9uQ2hhbmdlfTp7dHlwZTpzbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6ZS5wb2xsUGVyaW9kfX19KSl9fXN0YXRpYyBtYXBNYXN0ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybntzbGF2ZXM6ZS5zbGF2ZXMubWFwKChlPT57Y29uc3R7cmVwb3J0U3RyYXRlZ3k6dCwuLi5ufT1lO3JldHVybnsuLi5uLHNlbmREYXRhT25seU9uQ2hhbmdlOnQ/LnR5cGUhPT1zbi5PblJlcG9ydFBlcmlvZH19KSl9fXN0YXRpYyBtYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZSl7aWYoIWU/LnZhbHVlcylyZXR1cm4gZTtjb25zdCB0PU9iamVjdC5rZXlzKGUudmFsdWVzKS5yZWR1Y2UoKCh0LG4pPT50PXsuLi50LFtuXTpbZS52YWx1ZXNbbl1dfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlKXtpZighZT8udmFsdWVzKXJldHVybiBlO2NvbnN0IHQ9T2JqZWN0LmtleXMoZS52YWx1ZXMpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOnRoaXMubWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZS52YWx1ZXNbbl1bMF0pfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOmVbbl0ubWFwKChlPT4oey4uLmUsdHlwZToiaW50Ij09PWUudHlwZT9lYS5JTlQxNjplLnR5cGV9KSkpfSkse30pfX1lKCJNb2RidXNWZXJzaW9uTWFwcGluZ1V0aWwiLGhhKTtjbGFzcyB4YXtzdGF0aWMgbWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZSl7Y29uc3R7bWFwcGluZzp0LGRpc2FibGVTdWJzY3JpcHRpb25zOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsLi4ub309ZTtyZXR1cm57Li4ubyxwb2xsUGVyaW9kSW5NaWxsaXM6YT8/NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6IW59fXN0YXRpYyBtYXBTZXJ2ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe2NvbnN0e21hcHBpbmc6dCxzZXJ2ZXI6bn09ZSx7ZW5hYmxlU3Vic2NyaXB0aW9uczphLC4uLm99PW4/P3t9O3JldHVybnsuLi5vLG1hcHBpbmc6dD90aGlzLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpOltdLGRpc2FibGVTdWJzY3JpcHRpb25zOiFhfX1zdGF0aWMgbWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlLm1hcCgoZT0+KHsuLi5lLGRldmljZU5vZGVTb3VyY2U6dGhpcy5nZXREZXZpY2VOb2RlU291cmNlQnlWYWx1ZShlLmRldmljZU5vZGVQYXR0ZXJuKSxkZXZpY2VJbmZvOntkZXZpY2VOYW1lRXhwcmVzc2lvbjplLmRldmljZU5hbWVQYXR0ZXJuLGRldmljZU5hbWVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VOYW1lUGF0dGVybiksZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246ZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiKX0sYXR0cmlidXRlczplLmF0dHJpYnV0ZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLGF0dHJpYnV0ZXNfdXBkYXRlczplLmF0dHJpYnV0ZXNfdXBkYXRlcy5tYXAoKGU9Pih7a2V5OmUuYXR0cmlidXRlT25UaGluZ3NCb2FyZCx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5hdHRyaWJ1dGVPbkRldmljZSksdmFsdWU6ZS5hdHRyaWJ1dGVPbkRldmljZX0pKSksdGltZXNlcmllczplLnRpbWVzZXJpZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLHJwY19tZXRob2RzOmUucnBjX21ldGhvZHMubWFwKChlPT4oe21ldGhvZDplLm1ldGhvZCxhcmd1bWVudHM6ZS5hcmd1bWVudHMubWFwKChlPT4oe3ZhbHVlOmUsdHlwZTp0aGlzLmdldEFyZ3VtZW50VHlwZShlKX0pKSl9KSkpfSkpKX1zdGF0aWMgbWFwTWFwcGluZ1RvRG93bmdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGUubWFwKChlPT4oey4uLmUsZGV2aWNlTmFtZVBhdHRlcm46ZS5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVQYXR0ZXJuOmUuZGV2aWNlSW5mby5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbixhdHRyaWJ1dGVzOmUuYXR0cmlidXRlcy5tYXAoKGU9Pih7a2V5OmUua2V5LHBhdGg6ZS52YWx1ZX0pKSksYXR0cmlidXRlc191cGRhdGVzOmUuYXR0cmlidXRlc191cGRhdGVzLm1hcCgoZT0+KHthdHRyaWJ1dGVPblRoaW5nc0JvYXJkOmUua2V5LGF0dHJpYnV0ZU9uRGV2aWNlOmUudmFsdWV9KSkpLHRpbWVzZXJpZXM6ZS50aW1lc2VyaWVzLm1hcCgoZT0+KHtrZXk6ZS5rZXkscGF0aDplLnZhbHVlfSkpKSxycGNfbWV0aG9kczplLnJwY19tZXRob2RzLm1hcCgoZT0+KHttZXRob2Q6ZS5tZXRob2QsYXJndW1lbnRzOmUuYXJndW1lbnRzLm1hcCgoZT0+ZS52YWx1ZSkpfSkpKX0pKSl9c3RhdGljIGdldFR5cGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6ZS5pbmNsdWRlcygiLyIpfHxlLmluY2x1ZGVzKCJcXCIpP1NuLlBBVEg6U24uQ09OU1R9c3RhdGljIGdldERldmljZU5vZGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6U24uUEFUSH1zdGF0aWMgZ2V0QXJndW1lbnRUeXBlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpPyJpbnRlZ2VyIjoiZmxvYXQiO2RlZmF1bHQ6cmV0dXJuInN0cmluZyJ9fX1lKCJPcGNWZXJzaW9uTWFwcGluZ1V0aWwiLHhhKTtjbGFzcyB2YXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGJhLnBhcnNlVmVyc2lvbihlKT49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5QaXBlfSl9c3RhdGlje3RoaXMuybVwaXBlPXQuybXJtW5nRGVjbGFyZVBpcGUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsaXNTdGFuZGFsb25lOiEwLG5hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyJ9KX19ZSgiTGF0ZXN0VmVyc2lvbkNvbmZpZ1BpcGUiLHZhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyB3YXtjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lfXRyYW5zZm9ybShlKXtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnBvcnQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKXx8ZS5oYXNFcnJvcigibWF4Iik/dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5wb3J0LWxpbWl0cy1lcnJvciIse21pbjpFdC5NSU4sbWF4OkV0Lk1BWH0pOiIifXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d2EsZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LlBpcGV9KX1zdGF0aWN7dGhpcy7JtXBpcGU9dC7Jtcm1bmdEZWNsYXJlUGlwZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxpc1N0YW5kYWxvbmU6ITAsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0pfX1lKCJHYXRld2F5UG9ydFRvb2x0aXBQaXBlIix3YSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAiLHN0YW5kYWxvbmU6ITB9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WS5UcmFuc2xhdGVTZXJ2aWNlfV19KTtjbGFzcyBDYXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGUubWFwKCgoe3ZhbHVlOmV9KT0+ZS50b1N0cmluZygpKSkuam9pbigiLCAiKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyJ9KX19ZSgiUnBjVGVtcGxhdGVBcnJheVZpZXdQaXBlIixDYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpDYSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBUYXt0cmFuc2Zvcm0oZSx0LG4pe3JldHVybiFufHxuPy5pbmNsdWRlcyhTbi5QQVRIKT90IT09U24uQ09OU1Q/YHdpZGdldC9saWIvZ2F0ZXdheS8ke2V9LSR7dH1fZm5gOnZvaWQgMDoiYXR0cmlidXRlcyI9PT1lfHwidGltZXNlcmllcyI9PT1lPyJ3aWRnZXQvbGliL2dhdGV3YXkvYXR0cmlidXRlc190aW1lc2VyaWVzX2V4cHJlc3Npb25zX2ZuIjoid2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifSl9fWUoIkdhdGV3YXlIZWxwTGlua1BpcGUiLFRhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImdldEdhdGV3YXlIZWxwTGluayIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBTYXtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbGVtZW50UmVmPWUsdGhpcy5yZW5kZXJlcj10LHRoaXMudG9vbHRpcD1uLHRoaXMudG9vbHRpcEVuYWJsZWQ9ITAsdGhpcy5wb3NpdGlvbj0iYWJvdmUiLHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5vYnNlcnZlTW91c2VFdmVudHMoKSx0aGlzLmFwcGx5VHJ1bmNhdGlvblN0eWxlcygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudG9vbHRpcC5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy50b29sdGlwLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJnRoaXMuaGlkZVRvb2x0aXAoKSx0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9b2JzZXJ2ZU1vdXNlRXZlbnRzKCl7a2UodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiKS5waXBlKE1lKCgoKT0+dGhpcy50b29sdGlwRW5hYmxlZCkpLE1lKCgoKT0+dGhpcy5pc092ZXJmbG93bih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpKSxFZSgoKCk9PnRoaXMuc2hvd1Rvb2x0aXAoKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKSxrZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUoTWUoKCgpPT50aGlzLnRvb2x0aXBFbmFibGVkKSksTWUoKCgpPT50aGlzLnRvb2x0aXAuX2lzVG9vbHRpcFZpc2libGUoKSkpLEVlKCgoKT0+dGhpcy5oaWRlVG9vbHRpcCgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWFwcGx5VHJ1bmNhdGlvblN0eWxlcygpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIndoaXRlLXNwYWNlIiwibm93cmFwIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKX1pc092ZXJmbG93bihlKXtyZXR1cm4gZS5jbGllbnRXaWR0aDxlLnNjcm9sbFdpZHRofXNob3dUb29sdGlwKCl7dGhpcy50b29sdGlwLm1lc3NhZ2U9dGhpcy50ZXh0fHx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lclRleHQsdGhpcy50b29sdGlwLnNob3coKX1oaWRlVG9vbHRpcCgpe3RoaXMudG9vbHRpcC5oaWRlKCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpTYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp6ZS5NYXRUb29sdGlwfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9c3RhdGlje3RoaXMuybVkaXI9dC7Jtcm1bmdEZWNsYXJlRGlyZWN0aXZlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6e3RleHQ6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0ZXh0Il0sdG9vbHRpcEVuYWJsZWQ6InRvb2x0aXBFbmFibGVkIixwb3NpdGlvbjoicG9zaXRpb24ifSxwcm92aWRlcnM6W1dlXSxuZ0ltcG9ydDp0fSl9fWUoIlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUiLFNhKSxIZShbTigpXSxTYS5wcm90b3R5cGUsInRvb2x0aXBFbmFibGVkIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixwcm92aWRlcnM6W1dlXSxzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOnplLk1hdFRvb2x0aXB9XSxwcm9wRGVjb3JhdG9yczp7dGV4dDpbe3R5cGU6YSxhcmdzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIl19XSx0b29sdGlwRW5hYmxlZDpbe3R5cGU6YX1dLHBvc2l0aW9uOlt7dHlwZTphfV19fSk7Y2xhc3Mga2F7c2V0IGNoaXBzKGUpe2VlKHRoaXMuY2hpcHNWYWx1ZSxlKXx8KHRoaXMuY2hpcHNWYWx1ZT1lLHNldFRpbWVvdXQoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSksMCkpfWNvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZWw9ZSx0aGlzLnJlbmRlcmVyPXQsdGhpcy50cmFuc2xhdGU9bix0aGlzLndpbmRvdz1hLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJtYXgtaGVpZ2h0IiwiNDhweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJvdmVyZmxvdyIsImF1dG8iKSxrZShhLCJyZXNpemUiKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSkpLHRoaXMub2JzZXJ2ZUludGVyc2VjdGlvbigpfW9ic2VydmVJbnRlcnNlY3Rpb24oKXt0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZT0+e2UuZm9yRWFjaCgoZT0+e2UuaXNJbnRlcnNlY3RpbmcmJnRoaXMuYWRqdXN0Q2hpcHMoKX0pKX0pKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1hZGp1c3RDaGlwcygpe2NvbnN0IGU9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy1jaGlwIiksbj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUodCkubWFyZ2luTGVmdCl8fDAsYT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIm1hdC1jaGlwOm5vdCguZWxsaXBzaXMtY2hpcCkiKTtpZih0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPjEpe2NvbnN0IG89dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy10ZXh0Iik7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5IiwiaW5saW5lLWZsZXgiKSxvLmlubmVySFRNTD10aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmVsbGlwc2lzLWNoaXBzLXRleHQiLHtjb3VudDp0aGlzLmNoaXBzVmFsdWUubGVuZ3RofSk7Y29uc3QgaT1lLm9mZnNldFdpZHRoLSh0Lm9mZnNldFdpZHRoK24pO2xldCByPTAscz0wO2EuZm9yRWFjaCgoZT0+e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUoZSwiZGlzcGxheSIsImlubGluZS1mbGV4Iik7Y29uc3QgdD1lLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX3RleHQtbGFiZWwiKTt0aGlzLmFwcGx5TWF4Q2hpcFRleHRXaWR0aCh0LGkvMykscisoZS5vZmZzZXRXaWR0aCtuKTw9aSYmczx0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPyhzKysscis9ZS5vZmZzZXRXaWR0aCtuKTp0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsImRpc3BsYXkiLCJub25lIil9KSksby5pbm5lckhUTUw9dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5lbGxpcHNpcy1jaGlwcy10ZXh0Iix7Y291bnQ6dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aC1zfSkscz09PXRoaXMuY2hpcHNWYWx1ZT8ubGVuZ3RoJiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHQsImRpc3BsYXkiLCJub25lIil9ZWxzZSBpZigxPT09dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aCl7Y29uc3Qgbz1hWzBdLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbiIpLGk9by5xdWVyeVNlbGVjdG9yKCIubWRjLWV2b2x1dGlvbi1jaGlwX190ZXh0LWxhYmVsIikscj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUobykucGFkZGluZ0xlZnQpfHwwLHM9cGFyc2VGbG9hdCh0aGlzLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG8pLnBhZGRpbmdSaWdodCl8fDAsbD1lLm9mZnNldFdpZHRoLW4tKHIrcyk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYVswXSwiZGlzcGxheSIsImlubGluZS1mbGV4IiksdGhpcy5hcHBseU1heENoaXBUZXh0V2lkdGgoaSxsKX1lbHNlIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodCwiZGlzcGxheSIsIm5vbmUiKX1hcHBseU1heENoaXBUZXh0V2lkdGgoZSx0KXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm1heC13aWR0aCIsdCsicHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm92ZXJmbG93IiwiaGlkZGVuIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlLCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIndoaXRlLXNwYWNlIiwibm93cmFwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjphZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6a2EsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJbdGItZWxsaXBzaXMtY2hpcC1saXN0XSIsaW5wdXRzOntjaGlwczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCIsImNoaXBzIl19LG5nSW1wb3J0OnR9KX19ZSgiRWxsaXBzaXNDaGlwTGlzdERpcmVjdGl2ZSIsa2EpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6a2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX0se3R5cGU6V2luZG93LGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbYWVdfV19XSxwcm9wRGVjb3JhdG9yczp7Y2hpcHM6W3t0eXBlOmEsYXJnczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfV19fSk7Y2xhc3MgTGF7Y29uc3RydWN0b3IoZSx0LG4sYSl7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWUsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2U9dCx0aGlzLnpvbmU9bix0aGlzLnRyYW5zbGF0ZT1hLHRoaXMuYXR0cmlidXRlc1N1YmplY3Q9bmV3IExlKFtdKSx0aGlzLnBhZ2VEYXRhU3ViamVjdD1uZXcgTGUoTSgpKSx0aGlzLnBhZ2VEYXRhJD10aGlzLnBhZ2VEYXRhU3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlzLnNlbGVjdGlvbj1uZXcgamUoITAsW10pfWNvbm5lY3QoZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCl9ZGlzY29ubmVjdChlKXt0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5wYWdlRGF0YVN1YmplY3QuY29tcGxldGUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXImJih0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIudW5zdWJzY3JpYmUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXI9bnVsbCl9bG9hZEF0dHJpYnV0ZXMoZSx0LG4sYT0hMSl7YSYmKHRoaXMuYWxsQXR0cmlidXRlcz1udWxsLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlciYmKHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlci51bnN1YnNjcmliZSgpLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlcj1udWxsKSksdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtjb25zdCBvPW5ldyBGZTtyZXR1cm4gdGhpcy5mZXRjaEF0dHJpYnV0ZXMoZSx0LG4pLnBpcGUocWUoKCgpPT5JZShNKCkpKSkpLnN1YnNjcmliZSgoZT0+e3RoaXMuYXR0cmlidXRlc1N1YmplY3QubmV4dChlLmRhdGEpLHRoaXMucGFnZURhdGFTdWJqZWN0Lm5leHQoZSksby5uZXh0KGUpfSkpLG99ZmV0Y2hBdHRyaWJ1dGVzKGUsdCxuKXtyZXR1cm4gdGhpcy5nZXRBbGxBdHRyaWJ1dGVzKGUsdCkucGlwZShEZSgoZT0+e2NvbnN0IHQ9ZS5maWx0ZXIoKGU9PjAhPT1lLmxhc3RVcGRhdGVUcykpO3JldHVybiBuLmZpbHRlckRhdGEodCl9KSkpfWdldEFsbEF0dHJpYnV0ZXMoZSx0KXtpZighdGhpcy5hbGxBdHRyaWJ1dGVzKXtsZXQgbjtFLmdldCh0KT8odGhpcy50ZWxlbWV0cnlTdWJzY3JpYmVyPXEuY3JlYXRlRW50aXR5QXR0cmlidXRlc1N1YnNjcmlwdGlvbih0aGlzLnRlbGVtZXRyeVdzU2VydmljZSxlLHQsdGhpcy56b25lKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuc3Vic2NyaWJlKCksbj10aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuYXR0cmlidXRlRGF0YSQoKSk6bj10aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyhlLHQpLHRoaXMuYWxsQXR0cmlidXRlcz1uLnBpcGUoUGUoMSksR2UoKSl9cmV0dXJuIHRoaXMuYWxsQXR0cmlidXRlc31pc0FsbFNlbGVjdGVkKCl7Y29uc3QgZT10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShEZSgodD0+ZT09PXQubGVuZ3RoKSkpfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5waXBlKERlKChlPT4hZS5sZW5ndGgpKSl9dG90YWwoKXtyZXR1cm4gdGhpcy5wYWdlRGF0YVN1YmplY3QucGlwZShEZSgoZT0+ZS50b3RhbEVsZW1lbnRzKSkpfW1hc3RlclRvZ2dsZSgpe3RoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShFZSgoZT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aD09PWUubGVuZ3RoP3RoaXMuc2VsZWN0aW9uLmNsZWFyKCk6ZS5mb3JFYWNoKChlPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0KGUpfSkpfSkpLE9lKDEpKS5zdWJzY3JpYmUoKX19ZSgiQXR0cmlidXRlRGF0YXNvdXJjZSIsTGEpO2NsYXNzIEZhe2NvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlU2VydmljZT1lLHRoaXMuc2F2ZVRlbXBsYXRlPW5ldyBpLHRoaXMudXNlVGVtcGxhdGU9bmV3IGksdGhpcy5vcmlnaW5hbE9yZGVyPSgpPT4wLHRoaXMuaXNPYmplY3Q9ZT0+b2UoZSksdGhpcy5pc0FycmF5PWU9PkFycmF5LmlzQXJyYXkoZSksdGhpcy5TTk1QTWV0aG9kc1RyYW5zbGF0aW9ucz10bn1uZ09uSW5pdCgpe31hcHBseVRlbXBsYXRlKGUsdCl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnVzZVRlbXBsYXRlLmVtaXQodCl9ZGVsZXRlVGVtcGxhdGUoZSx0KXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49dGhpcy5ycGNUZW1wbGF0ZXMuZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO3RoaXMucnBjVGVtcGxhdGVzLnNwbGljZShuLDEpO2NvbnN0IGE9YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5OmEsdmFsdWU6dGhpcy5ycGNUZW1wbGF0ZXN9XSkuc3Vic2NyaWJlKCgoKT0+e30pKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZhLGRlcHM6W3t0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkZhLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXMiLGlucHV0czp7Y29ubmVjdG9yVHlwZToiY29ubmVjdG9yVHlwZSIsY3R4OiJjdHgiLHJwY1RlbXBsYXRlczoicnBjVGVtcGxhdGVzIn0sb3V0cHV0czp7c2F2ZVRlbXBsYXRlOiJzYXZlVGVtcGxhdGUiLHVzZVRlbXBsYXRlOiJ1c2VUZW1wbGF0ZSJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZXMtdGl0bGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuPG1hdC1leHBhbnNpb24tcGFuZWwgaGlkZVRvZ2dsZSAqbmdGb3I9ImxldCB0ZW1wbGF0ZSBvZiBycGNUZW1wbGF0ZXMiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz0idGVtcGxhdGUtbmFtZSI+XG4gICAgICA8c3BhbiBtYXRUb29sdGlwPSJ7e3RlbXBsYXRlLm5hbWV9fSIgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+e3t0ZW1wbGF0ZS5uYW1lfX08L3NwYW4+XG4gICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IkRlbGV0ZSIgKGNsaWNrKT0iZGVsZXRlVGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPSJVc2UiIChjbGljayk9ImFwcGx5VGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9ImxldCBjb25maWcgb2YgdGVtcGxhdGUuY29uZmlnIHwga2V5VmFsdWVJc05vdEVtcHR5IlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IGNvbmZpZywgaW5uZXJWYWx1ZTogZmFsc2UgfSI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI1JQQ1RlbXBsYXRlUmVmIGxldC1jb25maWcgbGV0LWlubmVyVmFsdWU9XCdpbm5lclZhbHVlXCc+XG4gICAgPGRpdiBbZnhMYXlvdXRdPSJpc09iamVjdChjb25maWcudmFsdWUpID8gXCdjb2x1bW5cJzogXCdyb3dcJyJcbiAgICAgICAgIFtmeExheW91dEFsaWduXT0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ3NwYWNlLWJldHdlZW4gY2VudGVyXCcgOiBcJ1wnIlxuICAgICAgICAgW25nU3R5bGVdPSJ7XCdwYWRkaW5nLWxlZnRcJzogaW5uZXJWYWx1ZSA/IFwnMTZweFwnOiBcJzBcJ30iXG4gICAgICAgICBjbGFzcz0icnBjLXBhcmFtcy1yb3ciPlxuICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUta2V5Ij5cbiAgICAgICAge3shaW5uZXJWYWx1ZSA/IChcJ2dhdGV3YXkucnBjLlwnICsgY29uZmlnLmtleSB8IHRyYW5zbGF0ZSkgOiBjb25maWcua2V5fX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iaXNBcnJheShjb25maWcudmFsdWUpIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9ImFycmF5LXZhbHVlIj5cbiAgICAgICAge3sgY29uZmlnLnZhbHVlIHwgZ2V0UnBjVGVtcGxhdGVBcnJheVZpZXcgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iaXNPYmplY3QoY29uZmlnLnZhbHVlKSIgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENPYmplY3RSb3ciPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiAqbmdJZj0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgJiYgIWlzQXJyYXkoY29uZmlnLnZhbHVlKSJcbiAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdib29sZWFuLXRydWVcJzogY29uZmlnLnZhbHVlID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgIFwnYm9vbGVhbi1mYWxzZVwnOiBjb25maWcudmFsdWUgPT09IGZhbHNlICB9Ij5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29uZmlnLmtleSA9PT0gXCdtZXRob2RcJyBlbHNlIHZhbHVlIiBbbmdUZW1wbGF0ZU91dGxldF09IlNOTVBNZXRob2QiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZhbHVlPnt7IGNvbmZpZy52YWx1ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1NOTVBNZXRob2Q+e3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KGNvbmZpZy52YWx1ZSkgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNSUENPYmplY3RSb3c+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9ImxldCBzdWJDb25maWcgb2YgY29uZmlnLnZhbHVlIHwga2V5dmFsdWUgOiBvcmlnaW5hbE9yZGVyIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IHN1YkNvbmZpZywgaW5uZXJWYWx1ZTogdHJ1ZSB9Ij5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjB9Omhvc3QgLnRpdGxle2ZvbnQtd2VpZ2h0OjUwMH06aG9zdCAudGVtcGxhdGUta2V5e2NvbG9yOiMwMDAwMDA2MTtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4fTpob3N0IC5ib29sZWFuLXRydWUsOmhvc3QgLmJvb2xlYW4tZmFsc2V7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDtwYWRkaW5nOjAgMTJweDt3aWR0aDpmaXQtY29udGVudDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfTpob3N0IC5ib29sZWFuLWZhbHNle2NvbG9yOiNkMTI3MzA7YmFja2dyb3VuZC1jb2xvcjojZDEyNzMwMTR9Omhvc3QgLmJvb2xlYW4tdHJ1ZXtjb2xvcjojMTk4MDM4O2JhY2tncm91bmQtY29sb3I6IzE5ODAzODE0fTpob3N0IG1hdC1leHBhbnNpb24tcGFuZWx7bWFyZ2luLXRvcDoxMHB4O292ZXJmbG93OnZpc2libGV9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MDtmbGV4OjB9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uPm1hdC1pY29ue21hcmdpbi1sZWZ0OjE1cHg7Y29sb3I6IzAwMDAwMDYxfTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntwYWRkaW5nOjAgMCAwIDEycHh9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NDhweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgLm1hdC1jb250ZW50Lm1hdC1jb250ZW50LWhpZGUtdG9nZ2xle21hcmdpbi1yaWdodDowfTpob3N0IC5ycGMtcGFyYW1zLXJvd3tvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5ycGMtcGFyYW1zLXJvdyA6bm90KDpmaXJzdC1jaGlsZCl7d2hpdGUtc3BhY2U6cHJlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50ZW1wbGF0ZS1uYW1le292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2t9Omhvc3QgOjpuZy1kZWVwIC5tYXQtY29udGVudHthbGlnbi1pdGVtczpjZW50ZXJ9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2ZsZXg6MTttYXJnaW46MH06aG9zdCAuYXJyYXktdmFsdWV7bWFyZ2luLWxlZnQ6MTBweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3R5bGUsc2VsZWN0b3I6IltuZ1N0eWxlXSIsaW5wdXRzOlsibmdTdHlsZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsRGVzY3JpcHRpb24sc2VsZWN0b3I6Im1hdC1wYW5lbC1kZXNjcmlwdGlvbiJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOkNhLG5hbWU6ImdldFJwY1RlbXBsYXRlQXJyYXlWaWV3In1dfSl9fWUoIkdhdGV3YXlTZXJ2aWNlUlBDQ29ubmVjdG9yVGVtcGxhdGVzQ29tcG9uZW50IixGYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpGYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9Im1hdC1zdWJ0aXRsZS0xIHRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlcy10aXRsZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG48bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlICpuZ0Zvcj0ibGV0IHRlbXBsYXRlIG9mIHJwY1RlbXBsYXRlcyI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8bWF0LXBhbmVsLXRpdGxlIGNsYXNzPSJ0ZW1wbGF0ZS1uYW1lIj5cbiAgICAgIDxzcGFuIG1hdFRvb2x0aXA9Int7dGVtcGxhdGUubmFtZX19IiBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj57e3RlbXBsYXRlLm5hbWV9fTwvc3Bhbj5cbiAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD0iRGVsZXRlIiAoY2xpY2spPSJkZWxldGVUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IlVzZSIgKGNsaWNrKT0iYXBwbHlUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnBsYXlfYXJyb3c8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj0ibGV0IGNvbmZpZyBvZiB0ZW1wbGF0ZS5jb25maWcgfCBrZXlWYWx1ZUlzTm90RW1wdHkiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogY29uZmlnLCBpbm5lclZhbHVlOiBmYWxzZSB9Ij5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjUlBDVGVtcGxhdGVSZWYgbGV0LWNvbmZpZyBsZXQtaW5uZXJWYWx1ZT1cJ2lubmVyVmFsdWVcJz5cbiAgICA8ZGl2IFtmeExheW91dF09ImlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ2NvbHVtblwnOiBcJ3Jvd1wnIlxuICAgICAgICAgW2Z4TGF5b3V0QWxpZ25dPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSA/IFwnc3BhY2UtYmV0d2VlbiBjZW50ZXJcJyA6IFwnXCciXG4gICAgICAgICBbbmdTdHlsZV09IntcJ3BhZGRpbmctbGVmdFwnOiBpbm5lclZhbHVlID8gXCcxNnB4XCc6IFwnMFwnfSJcbiAgICAgICAgIGNsYXNzPSJycGMtcGFyYW1zLXJvdyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1rZXkiPlxuICAgICAgICB7eyFpbm5lclZhbHVlID8gKFwnZ2F0ZXdheS5ycGMuXCcgKyBjb25maWcua2V5IHwgdHJhbnNsYXRlKSA6IGNvbmZpZy5rZXl9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJpc0FycmF5KGNvbmZpZy52YWx1ZSkiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0iYXJyYXktdmFsdWUiPlxuICAgICAgICB7eyBjb25maWcudmFsdWUgfCBnZXRScGNUZW1wbGF0ZUFycmF5VmlldyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJpc09iamVjdChjb25maWcudmFsdWUpIiBbbmdUZW1wbGF0ZU91dGxldF09IlJQQ09iamVjdFJvdyI+PC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2ICpuZ0lmPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSAmJiAhaXNBcnJheShjb25maWcudmFsdWUpIlxuICAgICAgICAgICBbbmdDbGFzc109IntcJ2Jvb2xlYW4tdHJ1ZVwnOiBjb25maWcudmFsdWUgPT09IHRydWUsXG4gICAgICAgICAgICAgICAgICAgXCdib29sZWFuLWZhbHNlXCc6IGNvbmZpZy52YWx1ZSA9PT0gZmFsc2UgIH0iPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJjb25maWcua2V5ID09PSBcJ21ldGhvZFwnIGVsc2UgdmFsdWUiIFtuZ1RlbXBsYXRlT3V0bGV0XT0iU05NUE1ldGhvZCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdmFsdWU+e3sgY29uZmlnLnZhbHVlIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjU05NUE1ldGhvZD57eyBTTk1QTWV0aG9kc1RyYW5zbGF0aW9ucy5nZXQoY29uZmlnLnZhbHVlKSB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1JQQ09iamVjdFJvdz5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj0ibGV0IHN1YkNvbmZpZyBvZiBjb25maWcudmFsdWUgfCBrZXl2YWx1ZSA6IG9yaWdpbmFsT3JkZXIiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogc3ViQ29uZmlnLCBpbm5lclZhbHVlOiB0cnVlIH0iPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1leHBhbnNpb24tcGFuZWw+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC50ZW1wbGF0ZS1rZXl7Y29sb3I6IzAwMDAwMDYxO2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHh9Omhvc3QgLmJvb2xlYW4tdHJ1ZSw6aG9zdCAuYm9vbGVhbi1mYWxzZXtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4O3BhZGRpbmc6MCAxMnB4O3dpZHRoOmZpdC1jb250ZW50O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgLmJvb2xlYW4tZmFsc2V7Y29sb3I6I2QxMjczMDtiYWNrZ3JvdW5kLWNvbG9yOiNkMTI3MzAxNH06aG9zdCAuYm9vbGVhbi10cnVle2NvbG9yOiMxOTgwMzg7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4MTR9Omhvc3QgbWF0LWV4cGFuc2lvbi1wYW5lbHttYXJnaW4tdG9wOjEwcHg7b3ZlcmZsb3c6dmlzaWJsZX06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDowO2ZsZXg6MH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24+bWF0LWljb257bWFyZ2luLWxlZnQ6MTVweDtjb2xvcjojMDAwMDAwNjF9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye3BhZGRpbmc6MCAwIDAgMTJweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo0OHB4fTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAubWF0LWNvbnRlbnQubWF0LWNvbnRlbnQtaGlkZS10b2dnbGV7bWFyZ2luLXJpZ2h0OjB9Omhvc3QgLnJwYy1wYXJhbXMtcm93e292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLnJwYy1wYXJhbXMtcm93IDpub3QoOmZpcnN0LWNoaWxkKXt3aGl0ZS1zcGFjZTpwcmU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRlbXBsYXRlLW5hbWV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9ja306aG9zdCA6Om5nLWRlZXAgLm1hdC1jb250ZW50e2FsaWduLWl0ZW1zOmNlbnRlcn06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZmxleDoxO21hcmdpbjowfTpob3N0IC5hcnJheS12YWx1ZXttYXJnaW4tbGVmdDoxMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Nvbm5lY3RvclR5cGU6W3t0eXBlOmF9XSxjdHg6W3t0eXBlOmF9XSxzYXZlVGVtcGxhdGU6W3t0eXBlOmx9XSx1c2VUZW1wbGF0ZTpbe3R5cGU6bH1dLHJwY1RlbXBsYXRlczpbe3R5cGU6YX1dfX0pO2NsYXNzIElhe2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLkJyb2tlclNlY3VyaXR5VHlwZT1kbix0aGlzLnNlY3VyaXR5VHlwZXM9T2JqZWN0LnZhbHVlcyhkbiksdGhpcy5TZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXA9dW4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e30sdGhpcy5zZWN1cml0eUZvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltkbi5BTk9OWU1PVVMsW11dLHVzZXJuYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV19KSx0aGlzLm9ic2VydmVTZWN1cml0eUZvcm0oKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7ZS50eXBlfHwoZS50eXBlPWRuLkFOT05ZTU9VUyksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlKSx0aGlzLnVwZGF0ZVZpZXcoZSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUZvcm06e3ZhbGlkOiExfX19dXBkYXRlVmlldyhlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZShlKX11cGRhdGVWYWxpZGF0b3JzKGUpe2U9PT1kbi5CQVNJQz8odGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGFzc3dvcmQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfW9ic2VydmVTZWN1cml0eUZvcm0oKXt0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlVmlldyhlKSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PklhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+SWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbRCxIXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBBYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMuc2VuZENvbW1hbmQ9bmV3IGksdGhpcy5zYXZlVGVtcGxhdGU9bmV3IGksdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuYkFDbmV0UmVxdWVzdFR5cGVzPU9iamVjdC52YWx1ZXMoV3QpLHRoaXMuYkFDbmV0T2JqZWN0VHlwZXM9T2JqZWN0LnZhbHVlcyhLdCksdGhpcy5iTEVNZXRob2RzPU9iamVjdC52YWx1ZXMoWXQpLHRoaXMuY0FOQnl0ZU9yZGVycz1PYmplY3QudmFsdWVzKEp0KSx0aGlzLnNvY2tldE1ldGhvZFByb2Nlc3NpbmdzPU9iamVjdC52YWx1ZXMoWHQpLHRoaXMuc29ja2V0RW5jb2RpbmdzPU9iamVjdC52YWx1ZXMoYW4pLHRoaXMuc05NUE1ldGhvZHM9T2JqZWN0LnZhbHVlcyhlbiksdGhpcy5oVFRQTWV0aG9kcz1PYmplY3QudmFsdWVzKG5uKSx0aGlzLmJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXM9anQsdGhpcy5iQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXM9JHQsdGhpcy5iTEVNZXRob2RzVHJhbnNsYXRlcz1RdCx0aGlzLlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzVHJhbnNsYXRlcz1adCx0aGlzLlNOTVBNZXRob2RzVHJhbnNsYXRpb25zPXRuLHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy51cmxQYXR0ZXJuPS9eWy1hLXpBLVpkXyQ6e30/fis9XC8uMC05LV0qJC8sdGhpcy5udW1iZXJzT25seVBhdHRlcm49L15bMC05XSokLyx0aGlzLmhleE9ubHlQYXR0ZXJuPS9eWzAtOUEtRmEtZiBdKyQvLHRoaXMucHJvcGFnYXRlQ2hhbmdlPWU9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5jb21tYW5kRm9ybT10aGlzLmNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZSh0aGlzLmNvbm5lY3RvclR5cGUpLHRoaXMuY29tbWFuZEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9e307c3dpdGNoKHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5SRVNUOmNhc2UgX3QuUkVRVUVTVDplLmh0dHBIZWFkZXJzLmZvckVhY2goKGU9Pnt0W2UuaGVhZGVyTmFtZV09ZS52YWx1ZX0pKSxlLmh0dHBIZWFkZXJzPXR9dGhpcy5jb21tYW5kRm9ybS52YWxpZCYmdGhpcy5wcm9wYWdhdGVDaGFuZ2Uoey4uLnRoaXMuY29tbWFuZEZvcm0udmFsdWUsLi4uZX0pfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZShlKXtsZXQgdDtzd2l0Y2goZSl7Y2FzZSBfdC5CQUNORVQ6dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFR5cGU6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxvYmplY3RUeXBlOltudWxsLFtdXSxpZGVudGlmaWVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxwcm9wZXJ0eUlkOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7YnJlYWs7Y2FzZSBfdC5CTEU6dD10aGlzLmZiLmdyb3VwKHttZXRob2RSUEM6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sY2hhcmFjdGVyaXN0aWNVVUlEOlsiMDAwMDJBMDAtMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIzNEZCIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLHdpdGhSZXNwb25zZTpbITEsW11dfSk7YnJlYWs7Y2FzZSBfdC5DQU46dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbm9kZUlEOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxpc0V4dGVuZGVkSUQ6WyExLFtdXSxpc0ZEOlshMSxbXV0sYml0cmF0ZVN3aXRjaDpbITEsW11dLGRhdGFMZW5ndGg6W251bGwsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLGRhdGFCeXRlb3JkZXI6W251bGwsW11dLGRhdGFCZWZvcmU6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhQWZ0ZXI6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhSW5IRVg6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhRXhwcmVzc2lvbjpbbnVsbCxbdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuRlRQOnQ9dGhpcy5mYi5ncm91cCh7bWV0aG9kRmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuT0NQUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNPQ0tFVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLGVuY29kaW5nOlthbi5VVEZfOCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx3aXRoUmVzcG9uc2U6WyExLFtdXX0pO2JyZWFrO2Nhc2UgX3QuWE1QUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNOTVA6dD10aGlzLmZiLmdyb3VwKHtyZXF1ZXN0RmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx3aXRoUmVzcG9uc2U6WyExLFtdXSxvaWQ6dGhpcy5mYi5hcnJheShbXSxbdWUucmVxdWlyZWRdKX0pO2JyZWFrO2Nhc2UgX3QuUkVTVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwTWV0aG9kOltudWxsLFt1ZS5yZXF1aXJlZF1dLHJlcXVlc3RVcmxFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKHRoaXMudXJsUGF0dGVybildXSxyZXNwb25zZVRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSx0aW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdHJpZXM6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwSGVhZGVyczp0aGlzLmZiLmFycmF5KFtdKSxzZWN1cml0eTpbe30sW3VlLnJlcXVpcmVkXV19KTticmVhaztjYXNlIF90LlJFUVVFU1Q6dD10aGlzLmZiLmdyb3VwKHttZXRob2RGaWx0ZXI6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saHR0cE1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxyZXF1ZXN0VXJsRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybih0aGlzLnVybFBhdHRlcm4pXV0scmVzcG9uc2VUaW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdGltZW91dDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKDEwKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHRyaWVzOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxyZXF1ZXN0VmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5wYXR0ZXJuKGt0KV1dLGh0dHBIZWFkZXJzOnRoaXMuZmIuYXJyYXkoW10pfSk7YnJlYWs7ZGVmYXVsdDp0PXRoaXMuZmIuZ3JvdXAoe2NvbW1hbmQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFyYW1zOlt7fSxbSXRdXX0pfXJldHVybiB0fWFkZFNOTVBvaWQoZT1udWxsKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJvaWQiKTt0JiZ0LnB1c2godGhpcy5mYi5jb250cm9sKGUsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXSkse2VtaXRFdmVudDohMX0pfXJlbW92ZVNOTVBvaWQoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoIm9pZCIpLnJlbW92ZUF0KGUpfWFkZEhUVFBIZWFkZXIoZT17aGVhZGVyTmFtZTpudWxsLHZhbHVlOm51bGx9KXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJodHRwSGVhZGVycyIpLG49dGhpcy5mYi5ncm91cCh7aGVhZGVyTmFtZTpbZS5oZWFkZXJOYW1lLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlOltlLnZhbHVlLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7dCYmdC5wdXNoKG4se2VtaXRFdmVudDohMX0pfXJlbW92ZUhUVFBIZWFkZXIoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoImh0dHBIZWFkZXJzIikucmVtb3ZlQXQoZSl9Z2V0Rm9ybUFycmF5Q29udHJvbHMoZSl7cmV0dXJuIHRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpLmNvbnRyb2xzfW9wZW5FZGl0SlNPTkRpYWxvZyhlKXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlhbG9nLm9wZW4oUWUse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntqc29uVmFsdWU6dGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnZhbHVlLHJlcXVpcmVkOiEwfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnNldFZhbHVlKGUpfSkpfXNhdmUoKXt0aGlzLnNhdmVUZW1wbGF0ZS5lbWl0KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe31jbGVhckZyb21BcnJheUJ5TmFtZShlKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpO2Zvcig7MCE9PXQubGVuZ3RoOyl0LnJlbW92ZUF0KDApfXdyaXRlVmFsdWUoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtzd2l0Y2goZT1KKGUpLHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5TTk1QOnRoaXMuY2xlYXJGcm9tQXJyYXlCeU5hbWUoIm9pZCIpLGUub2lkLmZvckVhY2goKGU9Pnt0aGlzLmFkZFNOTVBvaWQoZSl9KSksZGVsZXRlIGUub2lkO2JyZWFrO2Nhc2UgX3QuUkVRVUVTVDpjYXNlIF90LlJFU1Q6dGhpcy5jbGVhckZyb21BcnJheUJ5TmFtZSgiaHR0cEhlYWRlcnMiKSxlLmh0dHBIZWFkZXJzJiZPYmplY3QuZW50cmllcyhlLmh0dHBIZWFkZXJzKS5mb3JFYWNoKChlPT57dGhpcy5hZGRIVFRQSGVhZGVyKHtoZWFkZXJOYW1lOmVbMF0sdmFsdWU6ZVsxXX0pfSkpLGRlbGV0ZSBlLmh0dHBIZWFkZXJzfXRoaXMuY29tbWFuZEZvcm0ucGF0Y2hWYWx1ZShlLHtvbmx5U2VsZjohMX0pfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6e2Nvbm5lY3RvclR5cGU6ImNvbm5lY3RvclR5cGUifSxvdXRwdXRzOntzZW5kQ29tbWFuZDoic2VuZENvbW1hbmQiLHNhdmVUZW1wbGF0ZToic2F2ZVRlbXBsYXRlIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hEZWZhdWx0LHNlbGVjdG9yOiJbbmdTd2l0Y2hEZWZhdWx0XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WmUuVGJKc29uVG9TdHJpbmdEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi1qc29uLXRvLXN0cmluZ10ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnouTWF0RGl2aWRlcixzZWxlY3RvcjoibWF0LWRpdmlkZXIiLGlucHV0czpbInZlcnRpY2FsIiwiaW5zZXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4QWxpZ25dLCBbZnhGbGV4QWxpZ24ueHNdLCBbZnhGbGV4QWxpZ24uc21dLCBbZnhGbGV4QWxpZ24ubWRdLCAgW2Z4RmxleEFsaWduLmxnXSwgW2Z4RmxleEFsaWduLnhsXSwgW2Z4RmxleEFsaWduLmx0LXNtXSwgW2Z4RmxleEFsaWduLmx0LW1kXSwgIFtmeEZsZXhBbGlnbi5sdC1sZ10sIFtmeEZsZXhBbGlnbi5sdC14bF0sIFtmeEZsZXhBbGlnbi5ndC14c10sIFtmeEZsZXhBbGlnbi5ndC1zbV0sICBbZnhGbGV4QWxpZ24uZ3QtbWRdLCBbZnhGbGV4QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeEZsZXhBbGlnbiIsImZ4RmxleEFsaWduLnhzIiwiZnhGbGV4QWxpZ24uc20iLCJmeEZsZXhBbGlnbi5tZCIsImZ4RmxleEFsaWduLmxnIiwiZnhGbGV4QWxpZ24ueGwiLCJmeEZsZXhBbGlnbi5sdC1zbSIsImZ4RmxleEFsaWduLmx0LW1kIiwiZnhGbGV4QWxpZ24ubHQtbGciLCJmeEZsZXhBbGlnbi5sdC14bCIsImZ4RmxleEFsaWduLmd0LXhzIiwiZnhGbGV4QWxpZ24uZ3Qtc20iLCJmeEZsZXhBbGlnbi5ndC1tZCIsImZ4RmxleEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUFycmF5TmFtZSxzZWxlY3RvcjoiW2Zvcm1BcnJheU5hbWVdIixpbnB1dHM6WyJmb3JtQXJyYXlOYW1lIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6SWEsc2VsZWN0b3I6InRiLXJlc3QtY29ubmVjdG9yLXNlY3VyaXR5In0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U2VydmljZVJQQ0Nvbm5lY3RvckNvbXBvbmVudCIsQWEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6QWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5BYSkpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpKZS5NYXREaWFsb2d9XSxwcm9wRGVjb3JhdG9yczp7Y29ubmVjdG9yVHlwZTpbe3R5cGU6YX1dLHNlbmRDb21tYW5kOlt7dHlwZTpsfV0sc2F2ZVRlbXBsYXRlOlt7dHlwZTpsfV19fSk7Y2xhc3MgTmEgZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LGEpLHRoaXMuc3RvcmU9ZSx0aGlzLnJvdXRlcj10LHRoaXMuZGF0YT1uLHRoaXMuZGlhbG9nUmVmPWEsdGhpcy5mYj1vLHRoaXMuY29uZmlnPXRoaXMuZGF0YS5jb25maWcsdGhpcy50ZW1wbGF0ZXM9dGhpcy5kYXRhLnRlbXBsYXRlcyx0aGlzLnRlbXBsYXRlTmFtZUN0cmw9dGhpcy5mYi5jb250cm9sKCIiLFt1ZS5yZXF1aXJlZF0pfXZhbGlkYXRlRHVwbGljYXRlTmFtZShlKXtjb25zdCB0PWUudmFsdWUudHJpbSgpO3JldHVybiEhdGhpcy50ZW1wbGF0ZXMuZmluZCgoZT0+ZS5uYW1lPT09dCkpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1zYXZlKCl7dGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnNldFZhbHVlKHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWx1ZS50cmltKCkpLHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnZhbHVlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5hLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOk5hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10b29sYmFyIGNvbG9yPSJwcmltYXJ5Ij5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy5zYXZlLXRlbXBsYXRlPC9oMj5cbiAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbWF0LXRvb2xiYXI+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0id2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayB0Yi12YWx1ZS10eXBlIiBzdHlsZT0iZmxleC1ncm93OiAwIj5cbiAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lPC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09InRlbXBsYXRlTmFtZUN0cmwiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0idGVtcGxhdGVOYW1lQ3RybC5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxkaXYgY2xhc3M9Im1hdC1tZGMtZm9ybS1maWVsZC1lcnJvciJcbiAgICAgICBzdHlsZT0ibWFyZ2luLXRvcDogLTE1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgZm9udC1zaXplOiAxNHB4OyJcbiAgICAgICAqbmdJZj0idmFsaWRhdGVEdXBsaWNhdGVOYW1lKHRlbXBsYXRlTmFtZUN0cmwpIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWUtZHVwbGljYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICA8YnV0dG9uIG1hdC1idXR0b25cbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICBbZGlzYWJsZWRdPSIhdGVtcGxhdGVOYW1lQ3RybC52YWxpZCJcbiAgICAgICAgICAoY2xpY2spPSJzYXZlKCkiPlxuICAgIHt7IFwnYWN0aW9uLnNhdmVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0FjdGlvbnMsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWFjdGlvbnNdLCBtYXQtZGlhbG9nLWFjdGlvbnMsIFttYXREaWFsb2dBY3Rpb25zXSIsaW5wdXRzOlsiYWxpZ24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dDb250ZW50LHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1jb250ZW50XSwgbWF0LWRpYWxvZy1jb250ZW50LCBbbWF0RGlhbG9nQ29udGVudF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb25uZWN0b3JUZW1wbGF0ZURpYWxvZ0NvbXBvbmVudCIsTmEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TmEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlLWRpYWxvZyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICA8aDIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnNhdmUtdGVtcGxhdGU8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJ3aWR0aDogNjAwcHgiIGNsYXNzPSJtYXQtY29udGVudCIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIHRiLXZhbHVlLXR5cGUiIHN0eWxlPSJmbGV4LWdyb3c6IDAiPlxuICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0idGVtcGxhdGVOYW1lQ3RybCIgcmVxdWlyZWQvPlxuICAgIDxtYXQtZXJyb3JcbiAgICAgICpuZ0lmPSJ0ZW1wbGF0ZU5hbWVDdHJsLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPGRpdiBjbGFzcz0ibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yIlxuICAgICAgIHN0eWxlPSJtYXJnaW4tdG9wOiAtMTVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDE0cHg7IlxuICAgICAgICpuZ0lmPSJ2YWxpZGF0ZUR1cGxpY2F0ZU5hbWUodGVtcGxhdGVOYW1lQ3RybCkiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1kdXBsaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIj5cbiAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgIFtkaXNhYmxlZF09IiF0ZW1wbGF0ZU5hbWVDdHJsLnZhbGlkIlxuICAgICAgICAgIChjbGljayk9InNhdmUoKSI+XG4gICAge3sgXCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBNYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKEduKSx0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy52YWx1ZVR5cGVzPVZuLHRoaXMub25DaGFuZ2U9ZT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXJndW1lbnRzOnRoaXMuZmIuYXJyYXkoW10pfSksdGhpcy5vYnNlcnZlVmFsdWVDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuY2xlYXJBcmd1bWVudHMoKSxlLmFyZ3VtZW50cz8ubWFwKCgoe3R5cGU6ZSx2YWx1ZTp0fSk9Pih7dHlwZTplLFtlXTp0fSkpKS5mb3JFYWNoKChlPT50aGlzLmFkZEFyZ3VtZW50KGUpKSksdGhpcy5jZHIubWFya0ZvckNoZWNrKCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlLm1ldGhvZCl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmFyZ3VtZW50cy5tYXAoKCh7dHlwZTplLC4uLnR9KT0+KHt0eXBlOmUsdmFsdWU6dFtlXX0pKSk7dGhpcy5vbkNoYW5nZSh7bWV0aG9kOmUubWV0aG9kLGFyZ3VtZW50czp0fSksdGhpcy5vblRvdWNoZWQoKX0pKX1yZW1vdmVBcmd1bWVudChlKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJhcmd1bWVudHMiKS5yZW1vdmVBdChlKX1hZGRBcmd1bWVudChlPXt9KXtjb25zdCB0PXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2UudHlwZT8/R24uU1RSSU5HXSxzdHJpbmc6W2Uuc3RyaW5nPz97dmFsdWU6IiIsZGlzYWJsZWQ6IShlZShlLHt9KXx8ZS5zdHJpbmcpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6ZS5pbnRlZ2VyPz8wLGRpc2FibGVkOiFpZShlLmludGVnZXIpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihMdCldXSxkb3VibGU6W3t2YWx1ZTplLmRvdWJsZT8/MCxkaXNhYmxlZDohaWUoZS5kb3VibGUpfSxbdWUucmVxdWlyZWRdXSxib29sZWFuOlt7dmFsdWU6ZS5ib29sZWFuPz8hMSxkaXNhYmxlZDohaWUoZS5ib29sZWFuKX0sW3VlLnJlcXVpcmVkXV19KTt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKHQpLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpLnB1c2godCx7ZW1pdEV2ZW50OiExfSl9Y2xlYXJBcmd1bWVudHMoKXtjb25zdCBlPXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpO2Zvcig7MCE9PWUubGVuZ3RoOyllLnJlbW92ZUF0KDApfW9ic2VydmVUeXBlQ2hhbmdlKGUpe2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e2UuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoInR5cGUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KHQpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpNYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpNYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+TWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCB0Yi1mbGV4IG5vLXBhZGRpbmctdG9wIGhpbnQtY29udGFpbmVyIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLmhpbnQub3BjLW1ldGhvZFwnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Im11bHRpcGx5Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxmaWVsZHNldCBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIGFyZ3VtZW50cy1jb250YWluZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZvcm1BcnJheU5hbWU9ImFyZ3VtZW50cyI+XG4gICAgPHN0cm9uZz5cbiAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9zdHJvbmc+XG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAqbmdGb3I9ImxldCBhcmd1bWVudEZvcm1Hcm91cCBvZiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FyZ3VtZW50c1wnKVtcJ2NvbnRyb2xzXCddOyBsZXQgaSA9IGluZGV4IiBbZm9ybUdyb3VwXT0iYXJndW1lbnRGb3JtR3JvdXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIHR5cGUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTE4IiBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHZhbHVlVHlwZSBvZiB2YWx1ZVR5cGVLZXlzIiBbdmFsdWVdPSJ2YWx1ZVR5cGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB2YWx1ZS1jb250YWluZXIiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuU1RSSU5HIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9InN0cmluZyJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLkRPVUJMRSIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJkb3VibGUiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5CT09MRUFOIiBmb3JtQ29udHJvbE5hbWU9ImJvb2xlYW4iPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJ0cnVlIj50cnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVBcmd1bWVudChpKSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgIChjbGljayk9ImFkZEFyZ3VtZW50KCkiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy5hZGQtYXJndW1lbnRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2ZpZWxkc2V0PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuYXJndW1lbnRzLWNvbnRhaW5lcnttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnR5cGUtY29udGFpbmVye3dpZHRoOjQwJX06aG9zdCAudmFsdWUtY29udGFpbmVye3dpZHRoOjUwJX06aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp3ZS5NYXRTZWxlY3RUcmlnZ2VyLHNlbGVjdG9yOiJtYXQtc2VsZWN0LXRyaWdnZXIifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEdhcERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRHYXBdLCBbZnhMYXlvdXRHYXAueHNdLCBbZnhMYXlvdXRHYXAuc21dLCBbZnhMYXlvdXRHYXAubWRdLCAgW2Z4TGF5b3V0R2FwLmxnXSwgW2Z4TGF5b3V0R2FwLnhsXSwgW2Z4TGF5b3V0R2FwLmx0LXNtXSwgW2Z4TGF5b3V0R2FwLmx0LW1kXSwgIFtmeExheW91dEdhcC5sdC1sZ10sIFtmeExheW91dEdhcC5sdC14bF0sIFtmeExheW91dEdhcC5ndC14c10sIFtmeExheW91dEdhcC5ndC1zbV0sICBbZnhMYXlvdXRHYXAuZ3QtbWRdLCBbZnhMYXlvdXRHYXAuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEdhcCIsImZ4TGF5b3V0R2FwLnhzIiwiZnhMYXlvdXRHYXAuc20iLCJmeExheW91dEdhcC5tZCIsImZ4TGF5b3V0R2FwLmxnIiwiZnhMYXlvdXRHYXAueGwiLCJmeExheW91dEdhcC5sdC1zbSIsImZ4TGF5b3V0R2FwLmx0LW1kIiwiZnhMYXlvdXRHYXAubHQtbGciLCJmeExheW91dEdhcC5sdC14bCIsImZ4TGF5b3V0R2FwLmd0LXhzIiwiZnhMYXlvdXRHYXAuZ3Qtc20iLCJmeExheW91dEdhcC5ndC1tZCIsImZ4TGF5b3V0R2FwLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhBbGlnbl0sIFtmeEZsZXhBbGlnbi54c10sIFtmeEZsZXhBbGlnbi5zbV0sIFtmeEZsZXhBbGlnbi5tZF0sICBbZnhGbGV4QWxpZ24ubGddLCBbZnhGbGV4QWxpZ24ueGxdLCBbZnhGbGV4QWxpZ24ubHQtc21dLCBbZnhGbGV4QWxpZ24ubHQtbWRdLCAgW2Z4RmxleEFsaWduLmx0LWxnXSwgW2Z4RmxleEFsaWduLmx0LXhsXSwgW2Z4RmxleEFsaWduLmd0LXhzXSwgW2Z4RmxleEFsaWduLmd0LXNtXSwgIFtmeEZsZXhBbGlnbi5ndC1tZF0sIFtmeEZsZXhBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4RmxleEFsaWduIiwiZnhGbGV4QWxpZ24ueHMiLCJmeEZsZXhBbGlnbi5zbSIsImZ4RmxleEFsaWduLm1kIiwiZnhGbGV4QWxpZ24ubGciLCJmeEZsZXhBbGlnbi54bCIsImZ4RmxleEFsaWduLmx0LXNtIiwiZnhGbGV4QWxpZ24ubHQtbWQiLCJmeEZsZXhBbGlnbi5sdC1sZyIsImZ4RmxleEFsaWduLmx0LXhsIiwiZnhGbGV4QWxpZ24uZ3QteHMiLCJmeEZsZXhBbGlnbi5ndC1zbSIsImZ4RmxleEFsaWduLmd0LW1kIiwiZnhGbGV4QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1BcnJheU5hbWUsc2VsZWN0b3I6Iltmb3JtQXJyYXlOYW1lXSIsaW5wdXRzOlsiZm9ybUFycmF5TmFtZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk1hLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk1hKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm9wYy1tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJtdWx0aXBseSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8ZmllbGRzZXQgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBhcmd1bWVudHMtY29udGFpbmVyIiBmeExheW91dD0iY29sdW1uIiBmb3JtQXJyYXlOYW1lPSJhcmd1bWVudHMiPlxuICAgIDxzdHJvbmc+XG4gICAgICA8c3BhbiBjbGFzcz0iZmllbGRzLWxhYmVsIj57eyBcJ2dhdGV3YXkucnBjLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvc3Ryb25nPlxuICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgKm5nRm9yPSJsZXQgYXJndW1lbnRGb3JtR3JvdXAgb2YgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhcmd1bWVudHNcJylbXCdjb250cm9sc1wnXTsgbGV0IGkgPSBpbmRleCIgW2Zvcm1Hcm91cF09ImFyZ3VtZW50Rm9ybUdyb3VwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB0eXBlLWNvbnRhaW5lciIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdmFsdWUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLklOVEVHRVIiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iaW50ZWdlciIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5ET1VCTEUiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iZG91YmxlIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0idHJ1ZSI+dHJ1ZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iZmFsc2UiPmZhbHNlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXJndW1lbnRGb3JtR3JvdXAuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQXJndW1lbnQoaSkiXG4gICAgICAgICAgICAgIGNsYXNzPSJ0Yi1ib3gtYnV0dG9uIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICBmeEZsZXhBbGlnbj0ic3RhcnQiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGRBcmd1bWVudCgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWFyZ3VtZW50XCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9maWVsZHNldD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFyZ3VtZW50cy1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC50eXBlLWNvbnRhaW5lcnt3aWR0aDo0MCV9Omhvc3QgLnZhbHVlLWNvbnRhaW5lcnt3aWR0aDo1MCV9Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyBFYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5vbkNoYW5nZT1lPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXF1ZXN0VG9waWNFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVG9waWNFeHByZXNzaW9uOlt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUaW1lb3V0Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLm1pbigxMCksdWUucGF0dGVybihMdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVXaXRoUmVzcG9uc2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWxpZD9udWxsOntycGNQYXJhbWV0ZXJzRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlLndpdGhSZXNwb25zZSl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW9ic2VydmVXaXRoUmVzcG9uc2UoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ3aXRoUmVzcG9uc2UiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+dGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX10b2dnbGVSZXNwb25zZUZpZWxkcyhlKXtjb25zdCB0PXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInJlc3BvbnNlVG9waWNFeHByZXNzaW9uIiksbj10aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKTtlPyh0LmVuYWJsZSgpLG4uZW5hYmxlKCkpOih0LmRpc2FibGUoKSxuLmRpc2FibGUoKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+RWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXF1ZXN0LyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXJnaW4iIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSIgZm9ybUNvbnRyb2xOYW1lPSJ3aXRoUmVzcG9uc2UiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMud2l0aFJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9InNlbnNvci8ke2RldmljZU5hbWV9L3Jlc3BvbnNlLyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd3aXRoUmVzcG9uc2VcJyk/LnZhbHVlIj5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VUaW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9IjEwMDAwIiBtaW49IjEwIiBzdGVwPSIxIi8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAubWF0LW1kYy1zbGlkZS10b2dnbGUubWFyZ2lue21hcmdpbi1ib3R0b206MTBweDttYXJnaW4tbGVmdDoxMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkVhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9ImVjaG8iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0ic2Vuc29yLyR7ZGV2aWNlTmFtZX0vcmVxdWVzdC8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWFyZ2luIiAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3dpdGhSZXNwb25zZVwnKT8udmFsdWUiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXNwb25zZS8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIxMDAwMCIgbWluPSIxMCIgc3RlcD0iMSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L25nLWNvbnRhaW5lcj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBxYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNFZGl0YWJsZURhdGFUeXBlcz10YSx0aGlzLk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcD16dCx0aGlzLm1vZGJ1c0RhdGFUeXBlcz1PYmplY3QudmFsdWVzKGVhKSx0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcz1bNSw2LDE1LDE2XSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVszLDQsNiwxNl0sdGhpcy5yZWFkRnVuY3Rpb25Db2Rlcz1bMSwyLDMsNF0sdGhpcy5iaXRzRnVuY3Rpb25Db2Rlcz1bLi4udGhpcy5yZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLndyaXRlRnVuY3Rpb25Db2Rlc10sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2VhLkJZVEVTLFt1ZS5yZXF1aXJlZF1dLGZ1bmN0aW9uQ29kZTpbdGhpcy5kZWZhdWx0RnVuY3Rpb25Db2Rlc1swXSxbdWUucmVxdWlyZWRdXSx2YWx1ZTpbe3ZhbHVlOiIiLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxhZGRyZXNzOltudWxsLFt1ZS5yZXF1aXJlZF1dLG9iamVjdHNDb3VudDpbMSxbdWUucmVxdWlyZWRdXX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2Rlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWUpLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpLHRoaXMub2JzZXJ2ZUtleURhdGFUeXBlKCksdGhpcy5vYnNlcnZlRnVuY3Rpb25Db2RlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlS2V5RGF0YVR5cGUoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoIm9iamVjdHNDb3VudCIpLnBhdGNoVmFsdWUobmFbZV0se2VtaXRFdmVudDohMX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlKX0pKX1vYnNlcnZlRnVuY3Rpb25Db2RlKCl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgiZnVuY3Rpb25Db2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWx1ZUVuYWJsaW5nKGUpKSl9dXBkYXRlVmFsdWVFbmFibGluZyhlKXt0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyhlKT90aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ2YWx1ZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6KHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInZhbHVlIikuc2V0VmFsdWUobnVsbCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgidmFsdWUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSl9dXBkYXRlRnVuY3Rpb25Db2RlcyhlKXt0aGlzLmZ1bmN0aW9uQ29kZXM9ZT09PWVhLkJJVFM/dGhpcy5iaXRzRnVuY3Rpb25Db2Rlczp0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzLHRoaXMuZnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJmdW5jdGlvbkNvZGUiKS52YWx1ZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUodGhpcy5mdW5jdGlvbkNvZGVzWzBdLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cWEsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnFhKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy1yZXNwb25zZS1yZWFkaW5nXCcgfCB0cmFuc2xhdGUgfX08YnI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9uc1wnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNEYXRhVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IHR5cGUgfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZnVuY3Rpb25Db2RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29kZSBvZiBmdW5jdGlvbkNvZGVzIiBbdmFsdWVdPSJjb2RlIj57eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iNTAwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImFkZHJlc3MiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYWRkcmVzcy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FkZHJlc3NcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm9iamVjdHNDb3VudFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICBtaW49IjEiXG4gICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJ3cml0ZUZ1bmN0aW9uQ29kZXMuaW5jbHVkZXMocnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdmdW5jdGlvbkNvZGVcJykudmFsdWUpIiBmeEZsZXggZnhMYXlvdXQ9InJvdyI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMTAwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndmFsdWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIlxuICAgICAgPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5xYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggbm8tcGFkZGluZy10b3AgaGludC1jb250YWluZXIiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtcmVzcG9uc2UtcmVhZGluZ1wnIHwgdHJhbnNsYXRlIH19PGJyPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtd3JpdGluZy1mdW5jdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzRGF0YVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyB0eXBlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmZ1bmN0aW9uQ29kZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImZ1bmN0aW9uQ29kZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvZGUgb2YgZnVuY3Rpb25Db2RlcyIgW3ZhbHVlXT0iY29kZSI+e3sgTW9kYnVzRnVuY3Rpb25Db2RlVHJhbnNsYXRpb25zTWFwLmdldChjb2RlKSB8IHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjUwMDAwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJhZGRyZXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmFkZHJlc3MtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnYWRkcmVzc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5vYmplY3RzQ291bnRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9Im51bWJlciJcbiAgICAgICAgbWluPSIxIlxuICAgICAgICBtYXg9IjUwMDAwIlxuICAgICAgICBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJvYmplY3RzQ291bnQiXG4gICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgIFtyZWFkb25seV09IiFNb2RidXNFZGl0YWJsZURhdGFUeXBlcy5pbmNsdWRlcyhycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpIlxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0id3JpdGVGdW5jdGlvbkNvZGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnZnVuY3Rpb25Db2RlXCcpLnZhbHVlKSIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjEwMCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciJcbiAgICAgID5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBEYXtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMudXRpbHM9bix0aGlzLmNkPWEsdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPW8sdGhpcy5jb250ZW50VHlwZXM9Ryx0aGlzLlJQQ0NvbW1hbmRzPVsiUGluZyIsIlN0YXRzIiwiRGV2aWNlcyIsIlVwZGF0ZSIsIlZlcnNpb24iLCJSZXN0YXJ0IiwiUmVib290Il0sdGhpcy50ZW1wbGF0ZXM9W10sdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy50eXBlc1dpdGhVcGRhdGVkUGFyYW1zPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVUZW1wbGF0ZXMoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpLGRhdGFMb2FkaW5nOigpPT57fX19LHRoaXMuY29tbWFuZEZvcm09dGhpcy5mYi5ncm91cCh7Y29tbWFuZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx0aW1lOls2MCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV0scGFyYW1zOlsie30iLFtJdF1dLHJlc3VsdDpbbnVsbF19KX1uZ09uSW5pdCgpe2lmKHRoaXMuaXNDb25uZWN0b3I9dGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3IsdGhpcy5pc0Nvbm5lY3Rvcil7dGhpcy5jb25uZWN0b3JUeXBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpLmNvbm5lY3Rvcl9ycGMudmFsdWUudHlwZTtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udGFyZ2V0RGV2aWNlSWQsZW50aXR5TmFtZToiQ29ubmVjdG9yIixhdHRyaWJ1dGVzOlt7bmFtZTpgJHt0aGlzLmNvbm5lY3RvclR5cGV9X3RlbXBsYXRlYH1dfV07dGhpcy5jdHguc3Vic2NyaXB0aW9uQXBpLmNyZWF0ZVN1YnNjcmlwdGlvbkZyb21JbmZvKEEubGF0ZXN0LGUsdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zLCExLCEwKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnN1YnNjcmlwdGlvbj1lfSkpfWVsc2UgdGhpcy5jb21tYW5kRm9ybS5nZXQoImNvbW1hbmQiKS5zZXRWYWx1ZSh0aGlzLlJQQ0NvbW1hbmRzWzBdKX1zZW5kQ29tbWFuZChlKXt0aGlzLnJlc3VsdFRpbWU9bnVsbDtjb25zdCB0PWV8fHRoaXMuY29tbWFuZEZvcm0udmFsdWUsbj10aGlzLmlzQ29ubmVjdG9yP2Ake3RoaXMuY29ubmVjdG9yVHlwZX1fYDoiZ2F0ZXdheV8iLGE9dGhpcy5pc0Nvbm5lY3Rvcj90aGlzLmdldENvbW1hbmRGcm9tUGFyYW1zQnlUeXBlKHQucGFyYW1zKTp0LmNvbW1hbmQudG9Mb3dlckNhc2UoKSxvPXQucGFyYW1zO3RoaXMuY3R4LmNvbnRyb2xBcGkuc2VuZFR3b1dheUNvbW1hbmQobithLG8sdC50aW1lKS5zdWJzY3JpYmUoe25leHQ6ZT0+e3RoaXMucmVzdWx0VGltZT0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLmNvbW1hbmRGb3JtLmdldCgicmVzdWx0Iikuc2V0VmFsdWUoSlNPTi5zdHJpbmdpZnkoZSkpfSxlcnJvcjplPT57dGhpcy5yZXN1bHRUaW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGNvbnNvbGUuZXJyb3IoZSksdGhpcy5jb21tYW5kRm9ybS5nZXQoInJlc3VsdCIpLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGUuZXJyb3IpKX19KX1nZXRDb21tYW5kRnJvbVBhcmFtc0J5VHlwZShlKXtzd2l0Y2godGhpcy5jb25uZWN0b3JUeXBlKXtjYXNlIF90Lk1RVFQ6Y2FzZSBfdC5GVFA6Y2FzZSBfdC5TTk1QOmNhc2UgX3QuUkVTVDpjYXNlIF90LlJFUVVFU1Q6cmV0dXJuIGUubWV0aG9kRmlsdGVyO2Nhc2UgX3QuTU9EQlVTOnJldHVybiBlLnRhZztjYXNlIF90LkJBQ05FVDpjYXNlIF90LkNBTjpjYXNlIF90Lk9QQ1VBOnJldHVybiBlLm1ldGhvZDtjYXNlIF90LkJMRTpjYXNlIF90Lk9DUFA6Y2FzZSBfdC5TT0NLRVQ6Y2FzZSBfdC5YTVBQOnJldHVybiBlLm1ldGhvZFJQQztkZWZhdWx0OnJldHVybiBlLmNvbW1hbmR9fXNhdmVUZW1wbGF0ZSgpe3RoaXMuZGlhbG9nLm9wZW4oTmEse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntjb25maWc6dGhpcy5jb21tYW5kRm9ybS52YWx1ZS5wYXJhbXMsdGVtcGxhdGVzOnRoaXMudGVtcGxhdGVzfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57aWYoZSl7Y29uc3QgdD17bmFtZTplLGNvbmZpZzp0aGlzLmNvbW1hbmRGb3JtLnZhbHVlLnBhcmFtc30sbj10aGlzLnRlbXBsYXRlcyxhPW4uZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO2E+LTEmJm4uc3BsaWNlKGEsMSksbi5wdXNoKHQpO2NvbnN0IG89YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5Om8sdmFsdWU6bn1dKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9fSkpfXVzZVRlbXBsYXRlKGUpe3RoaXMuY29tbWFuZEZvcm0uZ2V0KCJwYXJhbXMiKS5wYXRjaFZhbHVlKGUuY29uZmlnKX11cGRhdGVUZW1wbGF0ZXMoKXt0aGlzLnRlbXBsYXRlcz10aGlzLnN1YnNjcmlwdGlvbi5kYXRhWzBdLmRhdGFbMF1bMV0ubGVuZ3RoP0pTT04ucGFyc2UodGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhWzBdWzFdKTpbXSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVFcnJvcihlKXtjb25zdCB0PXRoaXMudXRpbHMucGFyc2VFeGNlcHRpb24oZSk7bGV0IG49dC5uYW1lO3QubWVzc2FnZSYmKG4rPSI6ICIrdC5tZXNzYWdlKSxjb25zb2xlLmVycm9yKG4pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RGEsZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpEYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBmeExheW91dD0iY29sdW1uIiBmeEZsZXggW25nQ2xhc3NdPSJ7XCdib3JkZXJcJzogaXNDb25uZWN0b3J9Ij5cbiAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dC5sdC1zbT0iY29sdW1uIiBjbGFzcz0iY29tbWFuZC1mb3JtIiBmeExheW91dEdhcD0iMTBweCIgW2Zvcm1Hcm91cF09ImNvbW1hbmRGb3JtIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSIhaXNDb25uZWN0b3I7IGVsc2UgY29ubmVjdG9yRm9ybSI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29tbWFuZCBvZiBSUENDb21tYW5kcyIgW3ZhbHVlXT0iY29tbWFuZCI+XG4gICAgICAgICAgICB7eyBjb21tYW5kIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LW1zXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiLz5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZEZvcm0uZ2V0KFwndGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5pbnZhbGlkIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNlbmRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb25uZWN0b3JGb3JtPlxuICAgICAgPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yXG4gICAgICAgICpuZ0lmPSIhdHlwZXNXaXRoVXBkYXRlZFBhcmFtcy5oYXMoY29ubmVjdG9yVHlwZSkgZWxzZSB1cGRhdGVkUGFyYW1ldGVycyJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiXG4gICAgICAgIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSJcbiAgICAgICAgKHNlbmRDb21tYW5kKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgKHNhdmVUZW1wbGF0ZSk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgLz5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlZFBhcmFtZXRlcnM+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InJwYy1wYXJhbWV0ZXJzIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0Yi1mb3JtLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRpdGxlXCcgfCB0cmFuc2xhdGU6IHt0eXBlOiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlcy5nZXQoY29ubmVjdG9yVHlwZSl9IH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1xdHQtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NUVRUIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgICAgPHRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuT1BDVUEiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUtYWN0aW9ucyIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2F2ZVRlbXBsYXRlKCkiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmdldChcJ3BhcmFtc1wnKS5pbnZhbGlkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxzZWN0aW9uIGNsYXNzPSJyZXN1bHQtYmxvY2siIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPHNwYW4+e3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXJlc3VsdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8ZGl2ICpuZ0lmPSJyZXN1bHRUaW1lIiBjbGFzcz0icmVzdWx0LXRpbWUiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+c2NoZWR1bGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyByZXN1bHRUaW1lIHwgZGF0ZTogXCd5eXl5L01NL2RkIEhIOm1tOnNzXCcgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG4gICAgPHRiLWpzb24tY29udGVudCBbY29udGVudFR5cGVdPSJjb250ZW50VHlwZXMuSlNPTiIgcmVhZG9ubHk9InRydWUiIGZvcm1Db250cm9sTmFtZT0icmVzdWx0Ij48L3RiLWpzb24tY29udGVudD5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG48dGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIGZ4RmxleD0iMzAiICpuZ0lmPSJpc0Nvbm5lY3RvciIgY2xhc3M9ImJvcmRlciIgW3JwY1RlbXBsYXRlc109InRlbXBsYXRlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N0eF09ImN0eCIgW2Nvbm5lY3RvclR5cGVdPSJjb25uZWN0b3JUeXBlIiAodXNlVGVtcGxhdGUpPSJ1c2VUZW1wbGF0ZSgkZXZlbnQpIj5cbjwvdGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3BhZGRpbmc6MCA1cHh9Omhvc3Q+KntoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfTpob3N0PnRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlczpsYXN0LWNoaWxke21hcmdpbi1sZWZ0OjEwcHh9Omhvc3QgLmNvbW1hbmQtZm9ybXtmbGV4LXdyYXA6bm93cmFwO3BhZGRpbmc6MCA1cHggNXB4fTpob3N0IC5jb21tYW5kLWZvcm0+YnV0dG9ue21hcmdpbi10b3A6MTBweH06aG9zdCAucnBjLXBhcmFtZXRlcnN7d2lkdGg6MTAwJX06aG9zdCAucmVzdWx0LWJsb2Nre3BhZGRpbmc6MCA1cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFue2ZvbnQtd2VpZ2h0OjYwMDtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjI1cHg7ei1pbmRleDo1O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAucmVzdWx0LWJsb2NrPnNwYW4gLnJlc3VsdC10aW1lIHNwYW57cGFkZGluZy1sZWZ0OjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jayB0Yi1qc29uLWNvbnRlbnR7ZmxleDoxfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0NsYXNzLHNlbGVjdG9yOiJbbmdDbGFzc10iLGlucHV0czpbImNsYXNzIiwibmdDbGFzcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6c3QuSnNvbkNvbnRlbnRDb21wb25lbnQsc2VsZWN0b3I6InRiLWpzb24tY29udGVudCIsaW5wdXRzOlsibGFiZWwiLCJjb250ZW50VHlwZSIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwidGJQbGFjZWhvbGRlciIsImhpZGVUb29sYmFyIiwicmVhZG9ubHkiLCJ2YWxpZGF0ZUNvbnRlbnQiLCJ2YWxpZGF0ZU9uQ2hhbmdlIiwicmVxdWlyZWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOk1hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbW9kYnVzLXJwYy1wYXJhbWV0ZXJzIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIiwiY3R4IiwicnBjVGVtcGxhdGVzIl0sb3V0cHV0czpbInNhdmVUZW1wbGF0ZSIsInVzZVRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIl0sb3V0cHV0czpbInNlbmRDb21tYW5kIiwic2F2ZVRlbXBsYXRlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb21wb25lbnQiLERhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkRhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgZnhGbGV4IFtuZ0NsYXNzXT0ie1wnYm9yZGVyXCc6IGlzQ29ubmVjdG9yfSI+XG4gIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtc209ImNvbHVtbiIgY2xhc3M9ImNvbW1hbmQtZm9ybSIgZnhMYXlvdXRHYXA9IjEwcHgiIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIWlzQ29ubmVjdG9yOyBlbHNlIGNvbm5lY3RvckZvcm0iPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgUlBDQ29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQiPlxuICAgICAgICAgICAge3sgY29tbWFuZCB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1tc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InRpbWUiIHR5cGU9Im51bWJlciIgbWluPSIxIi8+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRGb3JtLmdldChcJ3RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29ubmVjdG9yRm9ybT5cbiAgICAgIDx0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3RvclxuICAgICAgICAqbmdJZj0iIXR5cGVzV2l0aFVwZGF0ZWRQYXJhbXMuaGFzKGNvbm5lY3RvclR5cGUpIGVsc2UgdXBkYXRlZFBhcmFtZXRlcnMiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIlxuICAgICAgICBbY29ubmVjdG9yVHlwZV09ImNvbm5lY3RvclR5cGUiXG4gICAgICAgIChzZW5kQ29tbWFuZCk9InNlbmRDb21tYW5kKCkiXG4gICAgICAgIChzYXZlVGVtcGxhdGUpPSJzYXZlVGVtcGxhdGUoKSJcbiAgICAgIC8+XG4gICAgICA8bmctdGVtcGxhdGUgI3VwZGF0ZWRQYXJhbWV0ZXJzPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJycGMtcGFyYW1ldGVycyI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGItZm9ybS1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50aXRsZVwnIHwgdHJhbnNsYXRlOiB7dHlwZTogZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXMuZ2V0KGNvbm5lY3RvclR5cGUpfSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NT0RCVVMiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRlbXBsYXRlLWFjdGlvbnMiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zYXZlLXRlbXBsYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uZ2V0KFwncGFyYW1zXCcpLmludmFsaWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8c2VjdGlvbiBjbGFzcz0icmVzdWx0LWJsb2NrIiBbZm9ybUdyb3VwXT0iY29tbWFuZEZvcm0iPlxuICAgIDxzcGFuPnt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1yZXN1bHRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPGRpdiAqbmdJZj0icmVzdWx0VGltZSIgY2xhc3M9InJlc3VsdC10aW1lIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnNjaGVkdWxlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgcmVzdWx0VGltZSB8IGRhdGU6IFwneXl5eS9NTS9kZCBISDptbTpzc1wnIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9zcGFuPlxuICAgIDx0Yi1qc29uLWNvbnRlbnQgW2NvbnRlbnRUeXBlXT0iY29udGVudFR5cGVzLkpTT04iIHJlYWRvbmx5PSJ0cnVlIiBmb3JtQ29udHJvbE5hbWU9InJlc3VsdCI+PC90Yi1qc29uLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcyBmeEZsZXg9IjMwIiAqbmdJZj0iaXNDb25uZWN0b3IiIGNsYXNzPSJib3JkZXIiIFtycGNUZW1wbGF0ZXNdPSJ0ZW1wbGF0ZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdHhdPSJjdHgiIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSIgKHVzZVRlbXBsYXRlKT0idXNlVGVtcGxhdGUoJGV2ZW50KSI+XG48L3RiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcz5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztwYWRkaW5nOjAgNXB4fTpob3N0Pip7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b306aG9zdD50Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXM6bGFzdC1jaGlsZHttYXJnaW4tbGVmdDoxMHB4fTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcDtwYWRkaW5nOjAgNXB4IDVweH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLnJwYy1wYXJhbWV0ZXJze3dpZHRoOjEwMCV9Omhvc3QgLnJlc3VsdC1ibG9ja3twYWRkaW5nOjAgNXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxfTpob3N0IC5yZXN1bHQtYmxvY2s+c3Bhbntmb250LXdlaWdodDo2MDA7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2s+c3BhbiAucmVzdWx0LXRpbWV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDoyNXB4O3otaW5kZXg6NTtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZSBzcGFue3BhZGRpbmctbGVmdDoxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2sgdGItanNvbi1jb250ZW50e2ZsZXg6MX06aG9zdCAuYm9yZGVye3BhZGRpbmc6MTZweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5VdGlsc1NlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTtjbGFzcyBQYSBleHRlbmRzIFB7Y29uc3RydWN0b3IoZSx0LG4sYSxvKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5nYXRld2F5TmFtZT10aGlzLmRhdGEuZ2F0ZXdheU5hbWUsdGhpcy5nYXRld2F5Q29udHJvbD10aGlzLmZiLmNvbnRyb2woIiIpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX10dXJuT2ZmKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoITApfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6UGEsc2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbicsZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fXZhciBHYTtlKCJHYXRld2F5UmVtb3RlQ29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCIsUGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pLGZ1bmN0aW9uKGUpe2UudGxzPSJ0bHMiLGUuYWNjZXNzVG9rZW49ImFjY2Vzc1Rva2VuIn0oR2F8fChHYT17fSkpO2NvbnN0IE9hPSJjb25maWd1cmF0aW9uX2RyYWZ0cyIsUmE9IlJlbW90ZUxvZ2dpbmdMZXZlbCIsVmE9bmV3IE1hcChbW0dhLnRscywiZ2F0ZXdheS5zZWN1cml0eS10eXBlcy50bHMiXSxbR2EuYWNjZXNzVG9rZW4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl1dKTt2YXIgQmEsVWE7IWZ1bmN0aW9uKGUpe2Uubm9uZT0iTk9ORSIsZS5jcml0aWNhbD0iQ1JJVElDQUwiLGUuZXJyb3I9IkVSUk9SIixlLndhcm5pbmc9IldBUk5JTkciLGUuaW5mbz0iSU5GTyIsZS5kZWJ1Zz0iREVCVUcifShCYXx8KEJhPXt9KSksZnVuY3Rpb24oZSl7ZS5tZW1vcnk9Im1lbW9yeSIsZS5maWxlPSJmaWxlIn0oVWF8fChVYT17fSkpO2NvbnN0IF9hPW5ldyBNYXAoW1tVYS5tZW1vcnksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtVYS5maWxlLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl1dKTt2YXIgSGE7IWZ1bmN0aW9uKGUpe2UubXF0dD0iTVFUVCIsZS5tb2RidXM9Ik1vZGJ1cyIsZS5vcGN1YT0iT1BDLVVBIixlLmJsZT0iQkxFIixlLnJlcXVlc3Q9IlJlcXVlc3QiLGUuY2FuPSJDQU4iLGUuYmFjbmV0PSJCQUNuZXQiLGUuY3VzdG9tPSJDdXN0b20ifShIYXx8KEhhPXt9KSk7Y29uc3QgemE9e2NvbmZpZzp7fSxuYW1lOiIiLGNvbmZpZ1R5cGU6bnVsbCxlbmFibGVkOiExfTtmdW5jdGlvbiBXYShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZS52YWx1ZSk9PT1KU09OLnN0cmluZ2lmeSh7fSk/e3ZhbGlkSlNPTjohMH06bnVsbH1jb25zdCBqYT0nW2xvZ2dlcnNdfX1rZXlzPXJvb3QsIHNlcnZpY2UsIGNvbm5lY3RvciwgY29udmVydGVyLCB0Yl9jb25uZWN0aW9uLCBzdG9yYWdlLCBleHRlbnNpb259fVtoYW5kbGVyc119fWtleXM9Y29uc29sZUhhbmRsZXIsIHNlcnZpY2VIYW5kbGVyLCBjb25uZWN0b3JIYW5kbGVyLCBjb252ZXJ0ZXJIYW5kbGVyLCB0Yl9jb25uZWN0aW9uSGFuZGxlciwgc3RvcmFnZUhhbmRsZXIsIGV4dGVuc2lvbkhhbmRsZXJ9fVtmb3JtYXR0ZXJzXX19a2V5cz1Mb2dGb3JtYXR0ZXJ9fVtsb2dnZXJfcm9vdF19fWxldmVsPUVSUk9SfX1oYW5kbGVycz1jb25zb2xlSGFuZGxlcn19W2xvZ2dlcl9jb25uZWN0b3JdfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz1jb25uZWN0b3JIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1jb25uZWN0b3J9fVtsb2dnZXJfc3RvcmFnZV19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPXN0b3JhZ2VIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1zdG9yYWdlfX1bbG9nZ2VyX3RiX2Nvbm5lY3Rpb25dfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz10Yl9jb25uZWN0aW9uSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9dGJfY29ubmVjdGlvbn19W2xvZ2dlcl9zZXJ2aWNlXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9c2VydmljZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPXNlcnZpY2V9fVtsb2dnZXJfY29udmVydGVyXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9Y29udmVydGVySGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9Y29udmVydGVyfX1bbG9nZ2VyX2V4dGVuc2lvbl19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPWNvbm5lY3RvckhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPWV4dGVuc2lvbn19W2hhbmRsZXJfY29uc29sZUhhbmRsZXJdfX1jbGFzcz1TdHJlYW1IYW5kbGVyfX1sZXZlbD17RVJST1J9fX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1hcmdzPShzeXMuc3Rkb3V0LCl9fVtoYW5kbGVyX2Nvbm5lY3RvckhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWNvbm5lY3Rvci5sb2ciLCAiZCIsIDEsIDcsKX19W2hhbmRsZXJfc3RvcmFnZUhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXN0b3JhZ2UubG9nIiwgImQiLCAxLCA3LCl9fVtoYW5kbGVyX3NlcnZpY2VIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31zZXJ2aWNlLmxvZyIsICJkIiwgMSwgNywpfX1baGFuZGxlcl9jb252ZXJ0ZXJIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31jb252ZXJ0ZXIubG9nIiwgImQiLCAxLCAzLCl9fVtoYW5kbGVyX2V4dGVuc2lvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWV4dGVuc2lvbi5sb2ciLCAiZCIsIDEsIDMsKX19W2hhbmRsZXJfdGJfY29ubmVjdGlvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXRiX2Nvbm5lY3Rpb24ubG9nIiwgImQiLCAxLCAzLCl9fVtmb3JtYXR0ZXJfTG9nRm9ybWF0dGVyXX19Zm9ybWF0PSIlKGFzY3RpbWUpcyAtICUobGV2ZWxuYW1lKXMgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiIH19ZGF0ZWZtdD0iJVktJW0tJWQgJUg6JU06JVMiJztmdW5jdGlvbiBLYShlKXtyZXR1cm4gZS5yZXBsYWNlKCJfIiwiIikucmVwbGFjZSgiLSIsIiIpLnJlcGxhY2UoL15ccyt8XHMrL2csIiIpLnRvTG93ZXJDYXNlKCkrIi5qc29uIn1mdW5jdGlvbiAkYShlLHQpe3JldHVybiBqYS5yZXBsYWNlKC97RVJST1J9L2csZSkucmVwbGFjZSgvey5cL2xvZ3NcL30vZyx0KX1mdW5jdGlvbiBZYShlKXtyZXR1cm57aWQ6ZSxlbnRpdHlUeXBlOkkuREVWSUNFfX1mdW5jdGlvbiBRYShlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwidGhpbmdzYm9hcmQiKSYmKHQuaG9zdD1lLnRoaW5nc2JvYXJkLmhvc3QsdC5wb3J0PWUudGhpbmdzYm9hcmQucG9ydCx0LnJlbW90ZUNvbmZpZ3VyYXRpb249ZS50aGluZ3Nib2FyZC5yZW1vdGVDb25maWd1cmF0aW9uLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnRoaW5nc2JvYXJkLnNlY3VyaXR5LEdhLmFjY2Vzc1Rva2VuKT8odC5zZWN1cml0eVR5cGU9R2EuYWNjZXNzVG9rZW4sdC5hY2Nlc3NUb2tlbj1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuKToodC5zZWN1cml0eVR5cGU9R2EudGxzLHQuY2FDZXJ0UGF0aD1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmNhQ2VydCx0LnByaXZhdGVLZXlQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkucHJpdmF0ZUtleSx0LmNlcnRQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkuY2VydCkpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJzdG9yYWdlIikmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnN0b3JhZ2UsInR5cGUiKSYmKGUuc3RvcmFnZS50eXBlPT09VWEubWVtb3J5Pyh0LnN0b3JhZ2VUeXBlPVVhLm1lbW9yeSx0LnJlYWRSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudCx0Lm1heFJlY29yZHNDb3VudD1lLnN0b3JhZ2UubWF4X3JlY29yZHNfY291bnQpOmUuc3RvcmFnZS50eXBlPT09VWEuZmlsZSYmKHQuc3RvcmFnZVR5cGU9VWEuZmlsZSx0LmRhdGFGb2xkZXJQYXRoPWUuc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoLHQubWF4RmlsZXNDb3VudD1lLnN0b3JhZ2UubWF4X2ZpbGVfY291bnQsdC5yZWFkUmVjb3Jkc0NvdW50PWUuc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnQsdC5tYXhSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50KSksdH1mdW5jdGlvbiBKYShlKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpbi5lbmFibGVkfHwodFtuLm5hbWVdPXtjb25uZWN0b3I6bi5jb25maWdUeXBlLGNvbmZpZzpuLmNvbmZpZ30pO3JldHVybiB0fWZ1bmN0aW9uIFhhKGUpe2NvbnN0IHQ9e3RoaW5nc2JvYXJkOlphKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KWlmKG4uZW5hYmxlZCl7Y29uc3QgdD1uLmNvbmZpZ1R5cGU7QXJyYXkuaXNBcnJheShlW3RdKXx8KGVbdF09W10pO2NvbnN0IGE9e25hbWU6bi5uYW1lLGNvbmZpZzpuLmNvbmZpZ307ZVt0XS5wdXNoKGEpfX0odCxlLmNvbm5lY3RvcnMpLHR9ZnVuY3Rpb24gWmEoZSl7bGV0IHQ7dD1lLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3thY2Nlc3NUb2tlbjplLmFjY2Vzc1Rva2VufTp7Y2FDZXJ0OmUuY2FDZXJ0UGF0aCxwcml2YXRlS2V5OmUucHJpdmF0ZUtleVBhdGgsY2VydDplLmNlcnRQYXRofTtjb25zdCBuPXtob3N0OmUuaG9zdCxyZW1vdGVDb25maWd1cmF0aW9uOmUucmVtb3RlQ29uZmlndXJhdGlvbixwb3J0OmUucG9ydCxzZWN1cml0eTp0fTtsZXQgYTthPWUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/e3R5cGU6VWEubWVtb3J5LHJlYWRfcmVjb3Jkc19jb3VudDplLnJlYWRSZWNvcmRzQ291bnQsbWF4X3JlY29yZHNfY291bnQ6ZS5tYXhSZWNvcmRzQ291bnR9Ont0eXBlOlVhLmZpbGUsZGF0YV9mb2xkZXJfcGF0aDplLmRhdGFGb2xkZXJQYXRoLG1heF9maWxlX2NvdW50OmUubWF4RmlsZXNDb3VudCxtYXhfcmVhZF9yZWNvcmRzX2NvdW50OmUucmVhZFJlY29yZHNDb3VudCxtYXhfcmVjb3Jkc19wZXJfZmlsZTplLm1heFJlY29yZHNDb3VudH07Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBvZiBlLmNvbm5lY3RvcnMpaWYodC5lbmFibGVkKXtjb25zdCBlPXtjb25maWd1cmF0aW9uOkthKHQubmFtZSksbmFtZTp0Lm5hbWUsdHlwZTp0LmNvbmZpZ1R5cGV9O28ucHVzaChlKX1yZXR1cm57dGhpbmdzYm9hcmQ6bixjb25uZWN0b3JzOm8sc3RvcmFnZTphLGxvZ3M6d2luZG93LmJ0b2EoJGEoZS5yZW1vdGVMb2dnaW5nTGV2ZWwsZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncykpfX1jbGFzcyBlbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5lbGVtZW50UmVmPXQsdGhpcy51dGlscz1uLHRoaXMubmdab25lPWEsdGhpcy5mYj1vLHRoaXMud2luZG93PWksdGhpcy5kaWFsb2c9cix0aGlzLnRyYW5zbGF0ZT1zLHRoaXMuZGV2aWNlU2VydmljZT1sLHRoaXMuYXR0cmlidXRlU2VydmljZT1jLHRoaXMuaW1wb3J0RXhwb3J0PXAsdGhpcy5hbGlnbm1lbnQ9InJvdyIsdGhpcy5sYXlvdXRHYXA9IjVweCIsdGhpcy5zZWN1cml0eVR5cGVzPVZhLHRoaXMuZ2F0ZXdheUxvZ0xldmVscz1PYmplY3Qua2V5cyhCYSkubWFwKChlPT5CYVtlXSkpLHRoaXMuY29ubmVjdG9yVHlwZXM9T2JqZWN0LmtleXMoSGEpLHRoaXMuc3RvcmFnZVR5cGVzPV9hLHRoaXMudG9hc3RUYXJnZXRJZD0iZ2F0ZXdheS1jb25maWd1cmF0aW9uLXdpZGdldCIrdGhpcy51dGlscy5ndWlkKCksdGhpcy5pc1JlYWRPbmx5Rm9ybT0hMX1nZXQgY29ubmVjdG9ycygpe3JldHVybiB0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KCJjb25uZWN0b3JzIil9bmdPbkluaXQoKXt0aGlzLmluaXRXaWRnZXRTZXR0aW5ncyh0aGlzLmN0eC5zZXR0aW5ncyksdGhpcy5jdHguZGF0YXNvdXJjZXMmJnRoaXMuY3R4LmRhdGFzb3VyY2VzLmxlbmd0aCYmKHRoaXMuZGV2aWNlTmFtZUZvcm09dGhpcy5jdHguZGF0YXNvdXJjZXNbMF0ubmFtZSksdGhpcy5idWlsZEZvcm0oKSx0aGlzLmN0eC51cGRhdGVXaWRnZXRQYXJhbXMoKSx0aGlzLmZvcm1SZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuZm9ybVJlc2l6ZSQub2JzZXJ2ZSh0aGlzLmZvcm1Db250YWluZXJSZWYubmF0aXZlRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1SZXNpemUkJiZ0aGlzLmZvcm1SZXNpemUkLmRpc2Nvbm5lY3QoKSx0aGlzLnN1YnNjcmliZUdhdGV3YXkkLnVuc3Vic2NyaWJlKCksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQudW5zdWJzY3JpYmUoKX1pbml0V2lkZ2V0U2V0dGluZ3MoZSl7bGV0IHQ7dD1lLmdhdGV3YXlUaXRsZSYmZS5nYXRld2F5VGl0bGUubGVuZ3RoP3RoaXMudXRpbHMuY3VzdG9tVHJhbnNsYXRpb24oZS5nYXRld2F5VGl0bGUsZS5nYXRld2F5VGl0bGUpOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuZ2F0ZXdheSIpLHRoaXMuY3R4LndpZGdldFRpdGxlPXQsdGhpcy5pc1JlYWRPbmx5Rm9ybT0hIWUucmVhZE9ubHkmJmUucmVhZE9ubHksdGhpcy5hcmNoaXZlRmlsZU5hbWU9ZS5hcmNoaXZlRmlsZU5hbWU/Lmxlbmd0aD9lLmFyY2hpdmVGaWxlTmFtZToiZ2F0ZXdheUNvbmZpZ3VyYXRpb24iLHRoaXMuZ2F0ZXdheVR5cGU9ZS5nYXRld2F5VHlwZT8ubGVuZ3RoP2UuZ2F0ZXdheVR5cGU6IkdhdGV3YXkiLHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHM9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLmdhdGV3YXlOYW1lRXhpc3RzLGUuZ2F0ZXdheU5hbWVFeGlzdHMpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktZXhpc3RzIiksdGhpcy5zdWNjZXNzZnVsU2F2ZWQ9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLnN1Y2Nlc3NmdWxTYXZlLGUuc3VjY2Vzc2Z1bFNhdmUpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktc2F2ZWQiKSx0aGlzLnVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKX1yZXNpemUoKXt0aGlzLm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVXaWRnZXREaXNwbGF5aW5nKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpfXVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKXt0aGlzLmN0eC4kY29udGFpbmVyJiZ0aGlzLmN0eC4kY29udGFpbmVyWzBdLm9mZnNldFdpZHRoPD00MjU/KHRoaXMubGF5b3V0R2FwPSIwIix0aGlzLmFsaWdubWVudD0iY29sdW1uIik6KHRoaXMubGF5b3V0R2FwPSI1cHgiLHRoaXMuYWxpZ25tZW50PSJyb3ciKX1zYXZlQXR0cmlidXRlKGUsdCxuKXtjb25zdCBhPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoImdhdGV3YXkiKS52YWx1ZSxvPXtrZXk6ZSx2YWx1ZTp0fTtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKFlhKGEpLG4sW29dKX1jcmVhdGVDb25uZWN0b3IoZT16YSl7dGhpcy5jb25uZWN0b3JzLnB1c2godGhpcy5mYi5ncm91cCh7ZW5hYmxlZDpbZS5lbmFibGVkXSxjb25maWdUeXBlOltlLmNvbmZpZ1R5cGUsW3VlLnJlcXVpcmVkXV0sbmFtZTpbZS5uYW1lLFt1ZS5yZXF1aXJlZF1dLGNvbmZpZzpbZS5jb25maWcsW3VlLm51bGxWYWxpZGF0b3IsV2FdXX0pKX1nZXRGb3JtRmllbGQoZSl7cmV0dXJuIHRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoZSl9YnVpbGRGb3JtKCl7dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwPXRoaXMuZmIuZ3JvdXAoe2dhdGV3YXk6W251bGwsW11dLGFjY2Vzc1Rva2VuOltudWxsLFt1ZS5yZXF1aXJlZF1dLHNlY3VyaXR5VHlwZTpbR2EuYWNjZXNzVG9rZW5dLGhvc3Q6W3RoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFt1ZS5yZXF1aXJlZF1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZUNvbmZpZ3VyYXRpb246WyEwXSxjYUNlcnRQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L2NhLnBlbSJdLHByaXZhdGVLZXlQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L3ByaXZhdGVLZXkucGVtIl0sY2VydFBhdGg6WyIvZXRjL3RoaW5nc2JvYXJkLWdhdGV3YXkvY2VydGlmaWNhdGUucGVtIl0scmVtb3RlTG9nZ2luZ0xldmVsOltCYS5kZWJ1Z10scmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3M6WyIuL2xvZ3MvIixbdWUucmVxdWlyZWRdXSxzdG9yYWdlVHlwZTpbVWEubWVtb3J5XSxyZWFkUmVjb3Jkc0NvdW50OlsxMDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhSZWNvcmRzQ291bnQ6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heEZpbGVzQ291bnQ6WzUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhRm9sZGVyUGF0aDpbIi4vZGF0YS8iLFt1ZS5yZXF1aXJlZF1dLGNvbm5lY3RvcnM6dGhpcy5mYi5hcnJheShbXSl9KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQ9dGhpcy5nZXRGb3JtRmllbGQoInN0b3JhZ2VUeXBlIikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2U9PT1VYS5tZW1vcnk/KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZGlzYWJsZSgpLHRoaXMuZ2V0Rm9ybUZpZWxkKCJkYXRhRm9sZGVyUGF0aCIpLmRpc2FibGUoKSk6KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZW5hYmxlKCksdGhpcy5nZXRGb3JtRmllbGQoImRhdGFGb2xkZXJQYXRoIikuZW5hYmxlKCkpfSkpLHRoaXMuc3Vic2NyaWJlR2F0ZXdheSQ9dGhpcy5nZXRGb3JtRmllbGQoImdhdGV3YXkiKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57bnVsbCE9PWU/QWUoW3RoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyhlKS5waXBlKEVlKChlPT57dGhpcy5nZXRGb3JtRmllbGQoImFjY2Vzc1Rva2VuIikucGF0Y2hWYWx1ZShlLmNyZWRlbnRpYWxzSWQpfSkpKSwuLi50aGlzLmdldEF0dHJpYnV0ZXMoZSldKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLm1hcmtBc1ByaXN0aW5lKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpOnRoaXMuZ2V0Rm9ybUZpZWxkKCJhY2Nlc3NUb2tlbiIpLnBhdGNoVmFsdWUoIiIpfSkpfWdhdGV3YXlFeGlzdCgpe3RoaXMuY3R4LnNob3dFcnJvclRvYXN0KHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHMsInRvcCIsImxlZnQiLHRoaXMudG9hc3RUYXJnZXRJZCl9ZXhwb3J0Q29uZmlnKCl7Y29uc3QgZT10aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUsdD17fTt2YXIgbixhLG87dFsidGJfZ2F0ZXdheS55YW1sIl09ZnVuY3Rpb24oZSl7bGV0IHQ7dD0idGhpbmdzYm9hcmQ6XG4iLHQrPSIgIGhvc3Q6ICIrZS5ob3N0KyJcbiIsdCs9IiAgcmVtb3RlQ29uZmlndXJhdGlvbjogIitlLnJlbW90ZUNvbmZpZ3VyYXRpb24rIlxuIix0Kz0iICBwb3J0OiAiK2UucG9ydCsiXG4iLHQrPSIgIHNlY3VyaXR5OlxuIixlLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3QrPSIgICAgYWNjZXNzLXRva2VuOiAiK2UuYWNjZXNzVG9rZW4rIlxuIjoodCs9IiAgICBjYV9jZXJ0OiAiK2UuY2FDZXJ0UGF0aCsiXG4iLHQrPSIgICAgcHJpdmF0ZUtleTogIitlLnByaXZhdGVLZXlQYXRoKyJcbiIsdCs9IiAgICBjZXJ0OiAiK2UuY2VydFBhdGgrIlxuIiksdCs9InN0b3JhZ2U6XG4iLGUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/KHQrPSIgIHR5cGU6IG1lbW9yeVxuIix0Kz0iICByZWFkX3JlY29yZHNfY291bnQ6ICIrZS5yZWFkUmVjb3Jkc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlY29yZHNfY291bnQ6ICIrZS5tYXhSZWNvcmRzQ291bnQrIlxuIik6KHQrPSIgIHR5cGU6IGZpbGVcbiIsdCs9IiAgZGF0YV9mb2xkZXJfcGF0aDogIitlLmRhdGFGb2xkZXJQYXRoKyJcbiIsdCs9IiAgbWF4X2ZpbGVfY291bnQ6ICIrZS5tYXhGaWxlc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlYWRfcmVjb3Jkc19jb3VudDogIitlLnJlYWRSZWNvcmRzQ291bnQrIlxuIix0Kz0iICBtYXhfcmVjb3Jkc19wZXJfZmlsZTogIitlLm1heFJlY29yZHNDb3VudCsiXG4iKSx0Kz0iY29ubmVjdG9yczpcbiI7Zm9yKGNvbnN0IG4gb2YgZS5jb25uZWN0b3JzKW4uZW5hYmxlZCYmKHQrPSIgIC1cbiIsdCs9IiAgICBuYW1lOiAiK24ubmFtZSsiXG4iLHQrPSIgICAgdHlwZTogIituLmNvbmZpZ1R5cGUrIlxuIix0Kz0iICAgIGNvbmZpZ3VyYXRpb246ICIrS2Eobi5uYW1lKSsiXG4iKTtyZXR1cm4gdH0oZSksZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KW4uZW5hYmxlZCYmKGVbS2Eobi5uYW1lKV09SlNPTi5zdHJpbmdpZnkobi5jb25maWcpKX0odCxlLmNvbm5lY3RvcnMpLG49dCxhPWUucmVtb3RlTG9nZ2luZ0xldmVsLG89ZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncyxuWyJsb2dzLmNvbmYiXT0kYShhLG8pLHRoaXMuaW1wb3J0RXhwb3J0LmV4cG9ydEpTWmlwKHQsdGhpcy5hcmNoaXZlRmlsZU5hbWUpLHRoaXMuc2F2ZUF0dHJpYnV0ZShSYSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUucmVtb3RlTG9nZ2luZ0xldmVsLnRvVXBwZXJDYXNlKCksTC5TSEFSRURfU0NPUEUpfWFkZE5ld0Nvbm5lY3Rvcigpe3RoaXMuY3JlYXRlQ29ubmVjdG9yKCl9cmVtb3ZlQ29ubmVjdG9yKGUpe2U+LTEmJih0aGlzLmNvbm5lY3RvcnMucmVtb3ZlQXQoZSksdGhpcy5jb25uZWN0b3JzLm1hcmtBc0RpcnR5KCkpfW9wZW5Db25maWdEaWFsb2coZSx0LG4sYSl7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpKSx0aGlzLmRpYWxvZy5vcGVuKFFlLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7anNvblZhbHVlOm4scmVxdWlyZWQ6ITAsdGl0bGU6dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS50aXRsZS1jb25uZWN0b3JzLWpzb24iLHt0eXBlTmFtZTphfSl9fSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGU9PntlJiYodGhpcy5jb25uZWN0b3JzLmF0KHQpLmdldCgiY29uZmlnIikucGF0Y2hWYWx1ZShlKSx0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzKCkpfSkpfWNyZWF0ZUNvbm5lY3Rvck5hbWUoZSx0LG49MCl7Y29uc3QgYT1uP3Qrbjp0O3JldHVybi0xPT09ZS5maW5kSW5kZXgoKGU9PmUubmFtZT09PWEpKT9hOnRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShlLHQsKytuKX12YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sYT0wKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3QgaT0wPT09YT90OnQrYTtvIT09biYmZVtvXS5uYW1lPT09aSYmdGhpcy52YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sKythKX1yZXR1cm4gMD09PWE/dDp0K2F9Y2hhbmdlQ29ubmVjdG9yVHlwZShlKXtpZighZS5nZXQoIm5hbWUiKS52YWx1ZSl7Y29uc3QgdD1lLmdldCgiY29uZmlnVHlwZSIpLnZhbHVlLG49dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLmNvbm5lY3RvcnM7ZS5nZXQoIm5hbWUiKS5wYXRjaFZhbHVlKHRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShuLEhhW3RdKSl9fWNoYW5nZUNvbm5lY3Rvck5hbWUoZSx0KXtjb25zdCBuPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZS5jb25uZWN0b3JzO2UuZ2V0KCJuYW1lIikucGF0Y2hWYWx1ZSh0aGlzLnZhbGlkYXRlQ29ubmVjdG9yTmFtZShuLGUuZ2V0KCJuYW1lIikudmFsdWUsdCkpfXNhdmUoKXtjb25zdCBlPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZTtBZShbdGhpcy5zYXZlQXR0cmlidXRlKCJjb25maWd1cmF0aW9uIix3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShYYShlKSkpLEwuU0hBUkVEX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoT2Esd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoSmEoZS5jb25uZWN0b3JzKSkpLEwuU0VSVkVSX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoUmEsdGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLnJlbW90ZUxvZ2dpbmdMZXZlbC50b1VwcGVyQ2FzZSgpLEwuU0hBUkVEX1NDT1BFKV0pLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmN0eC5zaG93U3VjY2Vzc1RvYXN0KHRoaXMuc3VjY2Vzc2Z1bFNhdmVkLDJlMywidG9wIiwibGVmdCIsdGhpcy50b2FzdFRhcmdldElkKSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAubWFya0FzUHJpc3RpbmUoKX0pKX1nZXRBdHRyaWJ1dGVzKGUpe2NvbnN0IHQ9W107cmV0dXJuIHQucHVzaChBZShbdGhpcy5nZXRBdHRyaWJ1dGUoImN1cnJlbnRfY29uZmlndXJhdGlvbiIsTC5DTElFTlRfU0NPUEUsZSksdGhpcy5nZXRBdHRyaWJ1dGUoT2EsTC5TRVJWRVJfU0NPUEUsZSldKS5waXBlKEVlKCgoW2UsdF0pPT57dGhpcy5zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpLHRoaXMuc2V0Rm9ybUNvbm5lY3RvcnNEcmFmdCh0KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSkpKSx0LnB1c2godGhpcy5nZXRBdHRyaWJ1dGUoUmEsTC5TSEFSRURfU0NPUEUsZSkucGlwZShFZSgoZT0+dGhpcy5wcm9jZXNzTG9nZ2luZ0xldmVsKGUpKSkpKSx0fWdldEF0dHJpYnV0ZShlLHQsbil7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKFlhKG4pLHQsW2VdKX1zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpe2lmKHRoaXMuY29ubmVjdG9ycy5jbGVhcigpLGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49dFtlXTtpZigidGhpbmdzYm9hcmQiPT09ZSludWxsIT09biYmT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJnRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5wYXRjaFZhbHVlKFFhKG4pKTtlbHNlIGZvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgYT0iTm8gbmFtZSI7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5bdF0sIm5hbWUiKSYmKGE9blt0XS5uYW1lKTtjb25zdCBvPXtlbmFibGVkOiEwLGNvbmZpZ1R5cGU6ZSxjb25maWc6blt0XS5jb25maWcsbmFtZTphfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihvKX19fX1zZXRGb3JtQ29ubmVjdG9yc0RyYWZ0KGUpe2lmKGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49e2VuYWJsZWQ6ITEsY29uZmlnVHlwZTp0W2VdLmNvbm5lY3Rvcixjb25maWc6dFtlXS5jb25maWcsbmFtZTplfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihuKX19fXByb2Nlc3NMb2dnaW5nTGV2ZWwoZSl7bGV0IHQ9QmEuZGVidWc7ZS5sZW5ndGg+MCYmQmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSYmKHQ9QmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSksdGhpcy5nZXRGb3JtRmllbGQoInJlbW90ZUxvZ2dpbmdMZXZlbCIpLnBhdGNoVmFsdWUodCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjp0LkVsZW1lbnRSZWZ9LHt0b2tlbjpYLlV0aWxzU2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dG9rZW46YWV9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpYLkRldmljZVNlcnZpY2V9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTplbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIixpbnB1dHM6e2N0eDoiY3R4Iixpc1N0YXRlRm9ybToiaXNTdGF0ZUZvcm0ifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToiZm9ybUNvbnRhaW5lclJlZiIsZmlyc3Q6ITAscHJlZGljYXRlOlsiZm9ybUNvbnRhaW5lciJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH0se3Byb3BlcnR5TmFtZToibXVsdGlwbGVJbnB1dEZvcm0iLGZpcnN0OiEwLHByZWRpY2F0ZTpbImdhdGV3YXlDb25maWd1cmF0aW9uRm9ybSJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGZvcm0gI2Zvcm1Db250YWluZXIgY2xhc3M9ImdhdGV3YXktZm9ybSJcbiAgICAgIFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwIlxuICAgICAgdGItdG9hc3QgdG9hc3RUYXJnZXQ9Int7IHRvYXN0VGFyZ2V0SWQgfX0iXG4gICAgICAobmdTdWJtaXQpPSJzYXZlKCkiPlxuICA8bWF0LWFjY29yZGlvbiBtdWx0aT0idHJ1ZSIgY2xhc3M9Im1hdC1ib2R5LTIiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmRcJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDx0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3RcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImdhdGV3YXkiXG4gICAgICAgICAgW2RldmljZU5hbWVdPSJkZXZpY2VOYW1lRm9ybSJcbiAgICAgICAgICBbaXNTdGF0ZUZvcm1dPSJpc1N0YXRlRm9ybSJcbiAgICAgICAgICBbbmV3R2F0ZXdheVR5cGVdPSJnYXRld2F5VHlwZSJcbiAgICAgICAgICAoZ2F0ZXdheU5hbWVFeGlzdCk9ImdhdGV3YXlFeGlzdCgpIlxuICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgID5cbiAgICAgIDwvdGItZW50aXR5LWdhdGV3YXktc2VsZWN0PlxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnNlY3VyaXR5LXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHlUeXBlIiA+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc2VjdXJpdHlUeXBlLnZhbHVlLnRvU3RyaW5nKCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblxuICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc2VjdXJpdHlUeXBlXCcpLnZhbHVlID09IFwndGxzXCciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNhLWNlcnRpZmljYXRlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1wcml2YXRlLWtleVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icHJpdmF0ZUtleVBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2VydFBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj57eyBcJ2dhdGV3YXkucmVtb3RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1jaGVja2JveD5cblxuICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVMb2dnaW5nTGV2ZWwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVscyIgW3ZhbHVlXT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICB7eyBsb2dMZXZlbCB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnBhdGgtbG9nc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3MiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS5wYXRoLWxvZ3MtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zdG9yYWdlXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuc3RvcmFnZS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzdG9yYWdlVHlwZS5rZXkiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0icmVhZFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVhZFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1wYWNrLXNpemUtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsID5cbiAgICAgICAgICAgICAge3sgKGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgIT09IFwnZmlsZVwnID8gXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHNcJyA6IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHNcJykgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4UmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgPT0gXCdmaWxlXCciPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heEZpbGVzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heEZpbGVzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1wYXRoXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImRhdGFGb2xkZXJQYXRoIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnZGF0YUZvbGRlclBhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtY29uZmlnXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJnYXRld2F5LWNvbmZpZyI+XG4gICAgICAgIDxzZWN0aW9uIGZvcm1BcnJheU5hbWU9ImNvbm5lY3RvcnMiICpuZ0Zvcj0ibGV0IGNvbm5lY3RvciBvZiBjb25uZWN0b3JzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4OyI+XG4gICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09ImkiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gc3RyZXRjaCIgZnhMYXlvdXRHYXA9IjhweCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBzdGFydCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIiBmeEZsZXg+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5jb25uZWN0b3ItdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJjb25maWdUeXBlIiAoc2VsZWN0aW9uQ2hhbmdlKT0iY2hhbmdlQ29ubmVjdG9yVHlwZShjb25uZWN0b3IpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbm5lY3RvclR5cGUgb2YgY29ubmVjdG9yVHlwZXMiIFt2YWx1ZV09ImNvbm5lY3RvclR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb25uZWN0b3JUeXBlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCdjb25maWdUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLXR5cGUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LmNvbm5lY3Rvci1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiAoYmx1cik9ImNoYW5nZUNvbm5lY3Rvck5hbWUoY29ubmVjdG9yLCBpKSI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29ubmVjdG9yLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5jb25uZWN0b3ItbmFtZS1yZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIlxuICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJ7e2FsaWdubWVudCA9PSBcJ3Jvd1wnID8gXCdlbmQgY2VudGVyXCcgOiBcJ3NwYWNlLWV2ZW5seSBjZW50ZXJcJ319IiBjbGFzcz0iYWN0aW9uLWJ1dHRvbnMiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0ib3BlbkNvbmZpZ0RpYWxvZygkZXZlbnQsIGksIGNvbm5lY3Rvci5nZXQoXCdjb25maWdcJykudmFsdWUsIGNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLnZhbHVlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkudXBkYXRlLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdtYXQtd2FyblwnOiBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLmludmFsaWR9Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV9ob3JpejwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb25uZWN0b3IoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPHNwYW4gW2Z4U2hvd109IiFjb25uZWN0b3JzLmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7XCdnYXRld2F5Lm5vLWNvbm5lY3RvcnNcJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT0iYnV0dG9uIiAoY2xpY2spPSJhZGROZXdDb25uZWN0b3IoKSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5jb25uZWN0b3ItYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXYgPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPC9tYXQtYWNjb3JkaW9uPlxuICA8c2VjdGlvbiBbZnhTaG93XT0iIWlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBjbGFzcz0iZm9ybS1hY3Rpb24tYnV0dG9ucyI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iZXhwb3J0Q29uZmlnKCkiXG4gICAgICAgICAgICAqbmdJZj0iIWdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LmRvd25sb2FkLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0ic3VibWl0IlxuICAgICAgICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LnNhdmUtdGlwXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAge3tcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9zZWN0aW9uPlxuPC9mb3JtPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5nYXRld2F5LWZvcm17aGVpZ2h0OjEwMCU7cGFkZGluZzo1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW59Omhvc3QgLmdhdGV3YXktZm9ybSAuZm9ybS1hY3Rpb24tYnV0dG9uc3twYWRkaW5nLXRvcDo4cHh9Omhvc3QgLmdhdGV3YXktZm9ybSAuZ2F0ZXdheS1jb25maWcgLm5vLWRhdGEtZm91bmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2hlaWdodDo0MHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Y3QuVG9hc3REaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi10b2FzdF0iLGlucHV0czpbInRvYXN0VGFyZ2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpwdC5NYXRDaGVja2JveCxzZWxlY3RvcjoibWF0LWNoZWNrYm94IixpbnB1dHM6WyJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsImlkIiwicmVxdWlyZWQiLCJsYWJlbFBvc2l0aW9uIiwibmFtZSIsInZhbHVlIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY29sb3IiLCJkaXNhYmxlZEludGVyYWN0aXZlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiaW5kZXRlcm1pbmF0ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJpbmRldGVybWluYXRlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEFjY29yZGlvbixzZWxlY3RvcjoibWF0LWFjY29yZGlvbiIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsImRpc3BsYXlNb2RlIiwidG9nZ2xlUG9zaXRpb24iXSxleHBvcnRBczpbIm1hdEFjY29yZGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0Q2xhc3NEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nQ2xhc3NdLCBbbmdDbGFzcy54c10sIFtuZ0NsYXNzLnNtXSwgW25nQ2xhc3MubWRdLCBbbmdDbGFzcy5sZ10sIFtuZ0NsYXNzLnhsXSwgIFtuZ0NsYXNzLmx0LXNtXSwgW25nQ2xhc3MubHQtbWRdLCBbbmdDbGFzcy5sdC1sZ10sIFtuZ0NsYXNzLmx0LXhsXSwgIFtuZ0NsYXNzLmd0LXhzXSwgW25nQ2xhc3MuZ3Qtc21dLCBbbmdDbGFzcy5ndC1tZF0sIFtuZ0NsYXNzLmd0LWxnXSIsaW5wdXRzOlsibmdDbGFzcyIsIm5nQ2xhc3MueHMiLCJuZ0NsYXNzLnNtIiwibmdDbGFzcy5tZCIsIm5nQ2xhc3MubGciLCJuZ0NsYXNzLnhsIiwibmdDbGFzcy5sdC1zbSIsIm5nQ2xhc3MubHQtbWQiLCJuZ0NsYXNzLmx0LWxnIiwibmdDbGFzcy5sdC14bCIsIm5nQ2xhc3MuZ3QteHMiLCJuZ0NsYXNzLmd0LXNtIiwibmdDbGFzcy5ndC1tZCIsIm5nQ2xhc3MuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS7JtU5nTm9WYWxpZGF0ZSxzZWxlY3RvcjoiZm9ybTpub3QoW25nTm9Gb3JtXSk6bm90KFtuZ05hdGl2ZVZhbGlkYXRlXSkifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTptdC5FbnRpdHlHYXRld2F5U2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3QiLGlucHV0czpbInJlcXVpcmVkIiwibmV3R2F0ZXdheVR5cGUiLCJkZXZpY2VOYW1lIiwiaXNTdGF0ZUZvcm0iXSxvdXRwdXRzOlsiZ2F0ZXdheU5hbWVFeGlzdCJdfSx7a2luZDoicGlwZSIsdHlwZTpfLlVwcGVyQ2FzZVBpcGUsbmFtZToidXBwZXJjYXNlIn0se2tpbmQ6InBpcGUiLHR5cGU6Xy5LZXlWYWx1ZVBpcGUsbmFtZToia2V5dmFsdWUifSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fWUoIkdhdGV3YXlGb3JtQ29tcG9uZW50IixlbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2Vcbjxmb3JtICNmb3JtQ29udGFpbmVyIGNsYXNzPSJnYXRld2F5LWZvcm0iXG4gICAgICBbZm9ybUdyb3VwXT0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cCJcbiAgICAgIHRiLXRvYXN0IHRvYXN0VGFyZ2V0PSJ7eyB0b2FzdFRhcmdldElkIH19IlxuICAgICAgKG5nU3VibWl0KT0ic2F2ZSgpIj5cbiAgPG1hdC1hY2NvcmRpb24gbXVsdGk9InRydWUiIGNsYXNzPSJtYXQtYm9keS0yIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8dGItZW50aXR5LWdhdGV3YXktc2VsZWN0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJnYXRld2F5IlxuICAgICAgICAgIFtkZXZpY2VOYW1lXT0iZGV2aWNlTmFtZUZvcm0iXG4gICAgICAgICAgW2lzU3RhdGVGb3JtXT0iaXNTdGF0ZUZvcm0iXG4gICAgICAgICAgW25ld0dhdGV3YXlUeXBlXT0iZ2F0ZXdheVR5cGUiXG4gICAgICAgICAgKGdhdGV3YXlOYW1lRXhpc3QpPSJnYXRld2F5RXhpc3QoKSJcbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICA+XG4gICAgICA8L3RiLWVudGl0eS1nYXRld2F5LXNlbGVjdD5cbiAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5zZWN1cml0eS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5VHlwZSIgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2VjdXJpdHlUeXBlIG9mIHNlY3VyaXR5VHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic2VjdXJpdHlUeXBlLmtleSI+XG4gICAgICAgICAgICAgIHt7IHNlY3VyaXR5VHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWluXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3NlY3VyaXR5VHlwZVwnKS52YWx1ZSA9PSBcJ3Rsc1wnIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2FDZXJ0UGF0aCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGxzLXBhdGgtcHJpdmF0ZS1rZXlcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InByaXZhdGVLZXlQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT0icmVtb3RlQ29uZmlndXJhdGlvbiI+e3sgXCdnYXRld2F5LnJlbW90ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtY2hlY2tib3g+XG5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ0xldmVsIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbHMiIFt2YWx1ZV09ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAge3sgbG9nTGV2ZWwgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5wYXRoLWxvZ3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzIj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkucGF0aC1sb2dzLXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnN0b3JhZ2UtdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdG9yYWdlVHlwZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGUudmFsdWUudG9TdHJpbmcoKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InJlYWRSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbCA+XG4gICAgICAgICAgICAgIHt7IChnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlICE9PSBcJ2ZpbGVcJyA/IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzXCcgOiBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzXCcpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlID09IFwnZmlsZVwnIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhGaWxlc0NvdW50Ij5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJkYXRhRm9sZGVyUGF0aCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2RhdGFGb2xkZXJQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBjbGFzcz0iZ2F0ZXdheS1jb25maWciPlxuICAgICAgICA8c2VjdGlvbiBmb3JtQXJyYXlOYW1lPSJjb25uZWN0b3JzIiAqbmdGb3I9ImxldCBjb25uZWN0b3Igb2YgY29ubmVjdG9ycy5jb250cm9sczsgbGV0IGkgPSBpbmRleDsiPlxuICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPSJpIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIHN0cmV0Y2giIGZ4TGF5b3V0R2FwPSI4cHgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEFsaWduPSJjZW50ZXIgc3RhcnQiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgZnhGbGV4PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuY29ubmVjdG9yLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29uZmlnVHlwZSIgKHNlbGVjdGlvbkNoYW5nZSk9ImNoYW5nZUNvbm5lY3RvclR5cGUoY29ubmVjdG9yKSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb25uZWN0b3JUeXBlIG9mIGNvbm5lY3RvclR5cGVzIiBbdmFsdWVdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29ubmVjdG9yVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb25uZWN0b3IuZ2V0KFwnY29uZmlnVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rvci10eXBlLXJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3ItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgKGJsdXIpPSJjaGFuZ2VDb25uZWN0b3JOYW1lKGNvbm5lY3RvciwgaSkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLW5hbWUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCJcbiAgICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ie3thbGlnbm1lbnQgPT0gXCdyb3dcJyA/IFwnZW5kIGNlbnRlclwnIDogXCdzcGFjZS1ldmVubHkgY2VudGVyXCd9fSIgY2xhc3M9ImFjdGlvbi1idXR0b25zIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSIgbWF0LWljb24tYnV0dG9uIChjbGljayk9Im9wZW5Db25maWdEaWFsb2coJGV2ZW50LCBpLCBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLnZhbHVlLCBjb25uZWN0b3IuZ2V0KFwnbmFtZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnVwZGF0ZS1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ie1wnbWF0LXdhcm5cJzogY29ubmVjdG9yLmdldChcJ2NvbmZpZ1wnKS5pbnZhbGlkfSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfaG9yaXo8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQ29ubmVjdG9yKGkpIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5kZWxldGVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxzcGFuIFtmeFNob3ddPSIhY29ubmVjdG9ycy5sZW5ndGgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiIGNsYXNzPSJuby1kYXRhLWZvdW5kIj57e1wnZ2F0ZXdheS5uby1jb25uZWN0b3JzXCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uIFtmeFNob3ddPSIhaXNSZWFkT25seUZvcm0iIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9ImJ1dHRvbiIgKGNsaWNrKT0iYWRkTmV3Q29ubmVjdG9yKCkiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuY29ubmVjdG9yLWFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2ID5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gIDwvbWF0LWFjY29yZGlvbj5cbiAgPHNlY3Rpb24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgY2xhc3M9ImZvcm0tYWN0aW9uLWJ1dHRvbnMiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImV4cG9ydENvbmZpZygpIlxuICAgICAgICAgICAgKm5nSWY9IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5kb3dubG9hZC10aXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICB7e1wnYWN0aW9uLmRvd25sb2FkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9InN1Ym1pdCJcbiAgICAgICAgICAgICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5zYXZlLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvc2VjdGlvbj5cbjwvZm9ybT5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuZ2F0ZXdheS1mb3Jte2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufTpob3N0IC5nYXRld2F5LWZvcm0gLmZvcm0tYWN0aW9uLWJ1dHRvbnN7cGFkZGluZy10b3A6OHB4fTpob3N0IC5nYXRld2F5LWZvcm0gLmdhdGV3YXktY29uZmlnIC5uby1kYXRhLWZvdW5ke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTp0LkVsZW1lbnRSZWZ9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp0Lk5nWm9uZX0se3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dHlwZTpXaW5kb3csZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOlthZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Zvcm1Db250YWluZXJSZWY6W3t0eXBlOm8sYXJnczpbImZvcm1Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLG11bHRpcGxlSW5wdXRGb3JtOlt7dHlwZTpvLGFyZ3M6WyJnYXRld2F5Q29uZmlndXJhdGlvbkZvcm0iLHtzdGF0aWM6ITB9XX1dLGN0eDpbe3R5cGU6YX1dLGlzU3RhdGVGb3JtOlt7dHlwZTphfV19fSk7Y2xhc3MgdG8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIpe3N1cGVyKGUsdCxhKSx0aGlzLnN0b3JlPWUsdGhpcy5yb3V0ZXI9dCx0aGlzLmRhdGE9bix0aGlzLmRpYWxvZ1JlZj1hLHRoaXMuZmI9byx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1pLHRoaXMucmVzb3VyY2VzU2VydmljZT1yLHRoaXMuY29ubmVjdG9yVHlwZT1fdCx0aGlzLmdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwPUh0LHRoaXMuZ2F0ZXdheUxvZ0xldmVsPU9iamVjdC52YWx1ZXMoTXQpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHt0eXBlOltfdC5NUVRULFtdXSxuYW1lOlsiIixbdWUucmVxdWlyZWQsdGhpcy51bmlxTmFtZVJlcXVpcmVkKCksdWUucGF0dGVybihrdCldXSxsb2dMZXZlbDpbTXQuSU5GTyxbXV0sdXNlRGVmYXVsdHM6WyEwLFtdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITEsW11dLGNsYXNzOlsiIixbXV0sa2V5OlsiYXV0byIsW11dfSl9bmdPbkluaXQoKXt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1oZWxwTGlua0lkKCl7cmV0dXJuIHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZ3VyYXRpb24vIn1jYW5jZWwoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKX1hZGQoKXt0aGlzLnN1Ym1pdHRlZD0hMDtjb25zdCBlPXRoaXMuY29ubmVjdG9yRm9ybS5nZXRSYXdWYWx1ZSgpO2UudXNlRGVmYXVsdHM/dGhpcy5nZXREZWZhdWx0Q29uZmlnKGUudHlwZSkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj10aGlzLmRhdGEuZ2F0ZXdheVZlcnNpb247biYmKGUuY29uZmlnVmVyc2lvbj1uKSxlLmNvbmZpZ3VyYXRpb25Kc29uPSh0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0obik/dFtVdC5DdXJyZW50XTp0W1V0LkxlZ2FjeV0pPz90LHRoaXMuY29ubmVjdG9yRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UoZSl9KSk6dGhpcy5jb25uZWN0b3JGb3JtLnZhbGlkJiZ0aGlzLmRpYWxvZ1JlZi5jbG9zZShlKX11bmlxTmFtZVJlcXVpcmVkKCl7cmV0dXJuIGU9Pntjb25zdCB0PWUudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHRoaXMuZGF0YS5kYXRhU291cmNlRGF0YS5zb21lKCgoe3ZhbHVlOntuYW1lOmV9fSk9PmUudG9Mb3dlckNhc2UoKT09PXQpKT97ZHVwbGljYXRlTmFtZTp7dmFsaWQ6ITF9fTpudWxsfX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgidXNlRGVmYXVsdHMiKTtlPT09X3QuR1JQQ3x8ZT09PV90LkNVU1RPTT90LnNldFZhbHVlKCExKTp0LnZhbHVlfHx0LnNldFZhbHVlKCEwKX0pKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCl9Z2V0RGVmYXVsdENvbmZpZyhlKXtyZXR1cm4gdGhpcy5yZXNvdXJjZXNTZXJ2aWNlLmxvYWRKc29uUmVzb3VyY2UoYC9hc3NldHMvbWV0YWRhdGEvY29ubmVjdG9yLWRlZmF1bHQtY29uZmlncy8ke2V9Lmpzb25gKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp2YX0se3Rva2VuOlguUmVzb3VyY2VzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6dG8sc2VsZWN0b3I6InRiLWFkZC1jb25uZWN0b3ItZGlhbG9nIixwcm92aWRlcnM6W10sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJjb25uZWN0b3JGb3JtIiBjbGFzcz0iYWRkLWNvbm5lY3RvciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7ICJnYXRld2F5LmFkZC1jb25uZWN0b3IiIHwgdHJhbnNsYXRlfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09ImhlbHBMaW5rSWQoKSI+PC9kaXY+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtdG9vbGJhcj5cbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnR5cGU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIHwga2V5dmFsdWUiIFt2YWx1ZV09InR5cGUua2V5Ij5cbiAgICAgICAgICAgICAgICB7eyB0eXBlLnZhbHVlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJ2dhdGV3YXkuY29ubmVjdG9yLWR1cGxpY2F0ZS1uYW1lXCcgOlwnZ2F0ZXdheS5uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWNsYXNzPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNsYXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5HUlBDIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkdSUEMgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkNVU1RPTSJcbiAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIGZpeGVkLXRpdGxlLXdpZHRoIiBmb3JtQ29udHJvbE5hbWU9InVzZURlZmF1bHRzIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5maWxsLWNvbm5lY3Rvci1kZWZhdWx0c1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLk1RVFQiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGEtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIChjbGljayk9ImFkZCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29ubmVjdG9yRm9ybS5pbnZhbGlkIHx8ICFjb25uZWN0b3JGb3JtLmRpcnR5Ij5cbiAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFkZC1jb25uZWN0b3J7bWluLXdpZHRoOjQwMHB4O3dpZHRoOjUwMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpkdC5IZWxwQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGVscF0iLGlucHV0czpbInRiLWhlbHAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cnQuTWF0VG9vbGJhcixzZWxlY3RvcjoibWF0LXRvb2xiYXIiLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQWN0aW9ucyxzZWxlY3RvcjoiW21hdC1kaWFsb2ctYWN0aW9uc10sIG1hdC1kaWFsb2ctYWN0aW9ucywgW21hdERpYWxvZ0FjdGlvbnNdIixpbnB1dHM6WyJhbGlnbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0NvbnRlbnQsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWNvbnRlbnRdLCBtYXQtZGlhbG9nLWNvbnRlbnQsIFttYXREaWFsb2dDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJBZGRDb25uZWN0b3JEaWFsb2dDb21wb25lbnQiLHRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1hZGQtY29ubmVjdG9yLWRpYWxvZyIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9ImFkZC1jb25uZWN0b3IiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyAiZ2F0ZXdheS5hZGQtY29ubmVjdG9yIiB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJoZWxwTGlua0lkKCkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlc01hcCB8IGtleXZhbHVlIiBbdmFsdWVdPSJ0eXBlLmtleSI+XG4gICAgICAgICAgICAgICAge3sgdHlwZS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkubmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9Im9mZiIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDpcJ2dhdGV3YXkubmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS50b3VjaGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLkNVU1RPTSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuR1JQQyIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1rZXk8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5HUlBDICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5DVVNUT00iXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VEZWZhdWx0cyI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmZpbGwtY29ubmVjdG9yLWRlZmF1bHRzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5NUVRUIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc2VuZC1jaGFuZ2UtZGF0YVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbm5lY3RvckZvcm0uaW52YWxpZCB8fCAhY29ubmVjdG9yRm9ybS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5hZGQtY29ubmVjdG9ye21pbi13aWR0aDo0MDBweDt3aWR0aDo1MDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp2YX0se3R5cGU6WC5SZXNvdXJjZXNTZXJ2aWNlfV19KTtjbGFzcyBub3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy52YWx1ZVR5cGVLZXlzPU9iamVjdC52YWx1ZXMoR24pLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLnZhbHVlTGlzdEZvcm1BcnJheT10aGlzLmZiLmFycmF5KFtdKSx0aGlzLnZhbHVlTGlzdEZvcm1BcnJheS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXRyYWNrQnlLZXkoZSx0KXtyZXR1cm4gdH1hZGRLZXkoKXtjb25zdCBlPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0duLlNUUklOR10sc3RyaW5nOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oTHQpXV0sZG91YmxlOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV0sYm9vbGVhbjpbe3ZhbHVlOiExLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UoZSksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChlKX1vYnNlcnZlVHlwZUNoYW5nZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntlLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KCJ0eXBlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSxlLmdldCh0KS5lbmFibGUoe2VtaXRFdmVudDohMX0pfSkpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkubWFya0FzRGlydHkoKX12YWx1ZVRpdGxlKGUpe3JldHVybiBpZShlKT8ib2JqZWN0Ij09dHlwZW9mIGU/SlNPTi5zdHJpbmdpZnkoZSk6ZToiIn1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT17dHlwZTpbdC50eXBlXSxzdHJpbmc6W3t2YWx1ZToiIixkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saW50ZWdlcjpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKEx0KV1dLGRvdWJsZTpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZF1dLGJvb2xlYW46W3t2YWx1ZTohMSxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV19O2VbdC50eXBlXVswXT17dmFsdWU6dC52YWx1ZSxkaXNhYmxlZDohMX07Y29uc3Qgbj10aGlzLmZiLmdyb3VwKGUpO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UobiksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChuKX19dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkudmFsaWQ/bnVsbDp7dmFsdWVMaXN0Rm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUubWFwKCgoe3R5cGU6ZSwuLi50fSk9Pih7dHlwZTplLHZhbHVlOnRbZV19KSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOm5vLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bm8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJUeXBlVmFsdWVQYW5lbENvbXBvbmVudCIsbm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXR5cGUtdmFsdWUtcGFuZWwiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dfSk7Y2xhc3MgYW8gZXh0ZW5kcyBPe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnZhbHVlVHlwZUtleXM9T2JqZWN0LnZhbHVlcyhHbiksdGhpcy52YWx1ZVR5cGVFbnVtPUduLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLnJhd0RhdGE9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5NYXBwaW5nS2V5c1R5cGU9Tm4sdGhpcy5lcnJvclRleHQ9IiJ9bmdPbkluaXQoKXt0aGlzLmtleXNMaXN0Rm9ybUFycmF5PXRoaXMucHJlcGFyZUtleXNGb3JtQXJyYXkodGhpcy5rZXlzKX10cmFja0J5S2V5KGUsdCl7cmV0dXJuIHR9YWRkS2V5KCl7bGV0IGU7aWYoZT10aGlzLmtleXNUeXBlPT09Tm4uUlBDX01FVEhPRFM/dGhpcy5mYi5ncm91cCh7bWV0aG9kOlsiIixbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1tdLFtdXX0pOnRoaXMuZmIuZ3JvdXAoe2tleTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSksdGhpcy5rZXlzVHlwZSE9PU5uLkNVU1RPTSYmdGhpcy5rZXlzVHlwZSE9PU5uLlJQQ19NRVRIT0RTKXtjb25zdCB0PXRoaXMucmF3RGF0YT8icmF3Ijp0aGlzLnZhbHVlVHlwZUtleXNbMF07ZS5hZGRDb250cm9sKCJ0eXBlIix0aGlzLmZiLmNvbnRyb2wodCkpfXRoaXMua2V5c0xpc3RGb3JtQXJyYXkucHVzaChlKX1kZWxldGVLZXkoZSx0KXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMua2V5c0xpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpfWNhbmNlbCgpe3RoaXMucG9wb3Zlcj8uaGlkZSgpfWFwcGx5S2V5c0RhdGEoKXtsZXQgZT10aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlO2lmKHRoaXMua2V5c1R5cGU9PT1Obi5DVVNUT00pe2U9e307Zm9yKGxldCB0IG9mIHRoaXMua2V5c0xpc3RGb3JtQXJyYXkudmFsdWUpZVt0LmtleV09dC52YWx1ZX10aGlzLmtleXNEYXRhQXBwbGllZC5lbWl0KGUpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJih0aGlzLmtleXNUeXBlPT09Tm4uQ1VTVE9NJiYoZT1PYmplY3Qua2V5cyhlKS5tYXAoKHQ9Pih7a2V5OnQsdmFsdWU6ZVt0XSx0eXBlOiIifSkpKSksZS5mb3JFYWNoKChlPT57bGV0IG47aWYodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTKW49dGhpcy5mYi5ncm91cCh7bWV0aG9kOltlLm1ldGhvZCxbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1suLi5lLmFyZ3VtZW50c10sW11dfSk7ZWxzZXtjb25zdHtrZXk6dCx2YWx1ZTphLHR5cGU6b309ZTtuPXRoaXMuZmIuZ3JvdXAoe2tleTpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbYSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0eXBlOltvLFtdXX0pfXQucHVzaChuKX0pKSksdGhpcy5mYi5hcnJheSh0KX12YWx1ZVRpdGxlKGUpe2NvbnN0IHQ9ZS5nZXQodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTPyJtZXRob2QiOiJ2YWx1ZSIpLnZhbHVlO3JldHVybiBpZSh0KT8ib2JqZWN0Ij09dHlwZW9mIHQ/SlNPTi5zdHJpbmdpZnkodCk6dDoiIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6YW8sc2VsZWN0b3I6InRiLW1hcHBpbmctZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e3BhbmVsVGl0bGU6InBhbmVsVGl0bGUiLGFkZEtleVRpdGxlOiJhZGRLZXlUaXRsZSIsZGVsZXRlS2V5VGl0bGU6ImRlbGV0ZUtleVRpdGxlIixub0tleXNUZXh0OiJub0tleXNUZXh0IixrZXlzOiJrZXlzIixrZXlzVHlwZToia2V5c1R5cGUiLHZhbHVlVHlwZUtleXM6InZhbHVlVHlwZUtleXMiLHZhbHVlVHlwZUVudW06InZhbHVlVHlwZUVudW0iLHZhbHVlVHlwZXM6InZhbHVlVHlwZXMiLHJhd0RhdGE6InJhd0RhdGEiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LHByb3ZpZGVyczpbXSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmcta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUtleTsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImtleXNUeXBlICE9PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ2tleVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCctXCcgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgdmFsdWVUaXRsZShrZXlDb250cm9sKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5DVVNUT00gJiYga2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5KU09OUGF0aC1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmtleVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmtleS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rvci1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAgZmlsbC13aWR0aCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG5hbWU9InZhbHVlVHlwZSIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj0iIXJhd0RhdGEiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiIgY2xhc3M9InRiLW1hdC0xOCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lmljb24iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPSIhcmF3RGF0YTsgZWxzZSByYXdUZXh0Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKHZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd09wdGlvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9InZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiIgY2xhc3M9InRiLW1hdC0yMCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3T3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09IlwncmF3XCciPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJrZXlzVHlwZSA9PT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmtleTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ21ldGhvZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleUNvbnRyb2wuZ2V0KFwnYXJndW1lbnRzXCcpLnZhbHVlPy5sZW5ndGggKyBcJylcJ319XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLXR5cGUtdmFsdWUtcGFuZWwgZm9ybUNvbnRyb2xOYW1lPSJhcmd1bWVudHMiPjwvdGItdHlwZS12YWx1ZS1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUtleSgkZXZlbnQsICRpbmRleCkiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJkZWxldGVLZXlUaXRsZSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0iYWRkS2V5KCkiPlxuICAgICAgICB7eyBhZGRLZXlUaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI25vS2V5cz5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWZsZXggY2VudGVyIGFsaWduLWNlbnRlciBrZXktcGFuZWwiPlxuICAgICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IG5vS2V5c1RleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggZmxleC1lbmQiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iYXBwbHlLZXlzRGF0YSgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0ia2V5c0xpc3RGb3JtQXJyYXkuaW52YWxpZCB8fCAha2V5c0xpc3RGb3JtQXJyYXkuZGlydHkiPlxuICAgICAge3sgXCdhY3Rpb24uYXBwbHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWx7d2lkdGg6Nzd2dzttYXgtd2lkdGg6NzAwcHh9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye21heC13aWR0aDoxMXZ3O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC5rZXktcGFuZWx7aGVpZ2h0OjUwMHB4O292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCB0Yi12YWx1ZS1pbnB1dHt3aWR0aDoxMDAlfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlRhLG5hbWU6ImdldEdhdGV3YXlIZWxwTGluayJ9XX0pfX1lKCJNYXBwaW5nRGF0YUtleXNQYW5lbENvbXBvbmVudCIsYW8pLEhlKFtOKCldLGFvLnByb3RvdHlwZSwicmF3RGF0YSIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRhdGEta2V5cy1wYW5lbCIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy1rZXlzLXBhbmVsIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+e3sgcGFuZWxUaXRsZSAgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCArIFwnKVwnfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIGtleS1wYW5lbCIgKm5nSWY9ImtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aDsgZWxzZSBub0tleXMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgICAqbmdGb3I9ImxldCBrZXlDb250cm9sIG9mIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzOyB0cmFja0J5OiB0cmFja0J5S2V5OyBsZXQgJGluZGV4ID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDsiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ia2V5Q29udHJvbCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiIFtleHBhbmRlZF09Imxhc3QiPlxuICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7eyBcJy1cJyB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSAmJiBrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLlJQQ19NRVRIT0RTIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnBsYXRmb3JtLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ2tleVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgbmFtZT0idmFsdWVUeXBlIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPSIhcmF3RGF0YSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIiBjbGFzcz0idGItbWF0LTE4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdJY29uXT0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd1RleHQiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAodmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8fCB2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIXJhd0RhdGE7IGVsc2UgcmF3T3B0aW9uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIiBjbGFzcz0idGItbWF0LTIwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Z0ljb249Int7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8fCB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdPcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iXCdyYXdcJyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuSlNPTlBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS52YWx1ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkua2V5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0ia2V5c1R5cGUgPT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tZXRob2QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdtZXRob2RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hcmd1bWVudHNcJyB8IHRyYW5zbGF0ZSB9fXt7XCcgKFwnICsga2V5Q29udHJvbC5nZXQoXCdhcmd1bWVudHNcJykudmFsdWU/Lmxlbmd0aCArIFwnKVwnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGItdHlwZS12YWx1ZS1wYW5lbCBmb3JtQ29udHJvbE5hbWU9ImFyZ3VtZW50cyI+PC90Yi10eXBlLXZhbHVlLXBhbmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbHt3aWR0aDo3N3Z3O21heC13aWR0aDo3MDBweH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC50aXRsZS1jb250YWluZXJ7bWF4LXdpZHRoOjExdnc7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIHRiLXZhbHVlLWlucHV0e3dpZHRoOjEwMCV9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGItZm9ybS1wYW5lbCAubWF0LW1kYy1pY29uLWJ1dHRvbnt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MTZweDtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9XSxwcm9wRGVjb3JhdG9yczp7cGFuZWxUaXRsZTpbe3R5cGU6YX1dLGFkZEtleVRpdGxlOlt7dHlwZTphfV0sZGVsZXRlS2V5VGl0bGU6W3t0eXBlOmF9XSxub0tleXNUZXh0Olt7dHlwZTphfV0sa2V5czpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVUeXBlS2V5czpbe3R5cGU6YX1dLHZhbHVlVHlwZUVudW06W3t0eXBlOmF9XSx2YWx1ZVR5cGVzOlt7dHlwZTphfV0scmF3RGF0YTpbe3R5cGU6YX1dLHBvcG92ZXI6W3t0eXBlOmF9XSxrZXlzRGF0YUFwcGxpZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBvbyBleHRlbmRzIE97Z2V0IGRldmljZUluZm9UeXBlKCl7cmV0dXJuIHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZX1zZXQgZGV2aWNlSW5mb1R5cGUoZSl7dGhpcy5kZXZpY2VJbmZvVHlwZVZhbHVlIT09ZSYmKHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZT1lKX1jb25zdHJ1Y3RvcihlLHQsbixhKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy50cmFuc2xhdGU9dCx0aGlzLmRpYWxvZz1uLHRoaXMuZmI9YSx0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLnVzZVNvdXJjZT0hMCx0aGlzLnJlcXVpcmVkPSExLHRoaXMuc291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhUbiksdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLm1hcHBpbmdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldXX0pLHRoaXMudXNlU291cmNlJiZ0aGlzLm1hcHBpbmdGb3JtR3JvdXAuYWRkQ29udHJvbCgiZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiLHRoaXMuZmIuY29udHJvbCh0aGlzLnNvdXJjZVR5cGVzWzBdLFtdKSksdGhpcy5kZXZpY2VJbmZvVHlwZT09PWtuLkZVTEwmJih0aGlzLnVzZVNvdXJjZSYmdGhpcy5tYXBwaW5nRm9ybUdyb3VwLmFkZENvbnRyb2woImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIix0aGlzLmZiLmNvbnRyb2wodGhpcy5zb3VyY2VUeXBlc1swXSxbXSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5hZGRDb250cm9sKCJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGhpcy5mYi5jb250cm9sKCIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldKSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe313cml0ZVZhbHVlKGUpe3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnttYXBwaW5nRm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6b28sZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46WS5UcmFuc2xhdGVTZXJ2aWNlfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOnt1c2VTb3VyY2U6InVzZVNvdXJjZSIscmVxdWlyZWQ6InJlcXVpcmVkIixzb3VyY2VUeXBlczoic291cmNlVHlwZXMiLGRldmljZUluZm9UeXBlOiJkZXZpY2VJbmZvVHlwZSJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm9vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCIgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiBbY2xhc3MudGItcmVxdWlyZWRdPSJyZXF1aXJlZCIgdHJhbnNsYXRlPmRldmljZS5kZXZpY2U8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZSBuby1wYWRkaW5nIG5vLWdhcCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1uYW1lLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uZW50aXR5LWZpZWxkPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJ1c2VTb3VyY2UiIGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uc291cmNlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPlxuICAgICAgICBnYXRld2F5LmRldmljZS1pbmZvLmV4cHJlc3Npb25cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtYm9keSBuby1nYXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyB0b3Atc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICBbY2xhc3MuYm90dG9tLXNhbWUtcGFkZGluZ109ImRldmljZUluZm9UeXBlICE9PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLm5hbWU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgcmF3LXZhbHVlLW9wdGlvbiIgKm5nSWY9InVzZVNvdXJjZSI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93LWNlbGwgdGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLWluZm8uZGV2aWNlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyBib3R0b20tc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICAqbmdJZj0iZGV2aWNlSW5mb1R5cGUgPT09IERldmljZUluZm9UeXBlLkZVTEwiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8ucHJvZmlsZS1uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1wcm9maWxlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwncHJvZmlsZS1uYW1lXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2VcJykudmFsdWUgOiBzb3VyY2VUeXBlcyJcbiAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja306aG9zdCAudGItZm9ybS1yb3cuYm90dG9tLXNhbWUtcGFkZGluZ3twYWRkaW5nLWJvdHRvbToxNnB4fTpob3N0IC50Yi1mb3JtLXJvdy50b3Atc2FtZS1wYWRkaW5ne3BhZGRpbmctdG9wOjE2cHh9Omhvc3QgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHt3aWR0aDoxOSV9Omhvc3QgLnRhYmxlLWNvbHVtbnt3aWR0aDo0MCV9Omhvc3QgLnRhYmxlLW5hbWUtY29sdW1ue3dpZHRoOjIwJX06aG9zdCAucmF3LW5hbWV7d2lkdGg6MTklfTpob3N0IC5yYXctdmFsdWUtb3B0aW9ue21heC13aWR0aDo0MCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7ZGlzcGxheTpmbGV4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpndC5IZWxwUG9wdXBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwLXBvcHVwXSwgW3RiLWhlbHAtcG9wdXAtY29udGVudF0iLGlucHV0czpbInRiLWhlbHAtcG9wdXAiLCJ0Yi1oZWxwLXBvcHVwLWNvbnRlbnQiLCJ0cmlnZ2VyLXRleHQiLCJ0cmlnZ2VyLXN0eWxlIiwidGItaGVscC1wb3B1cC1wbGFjZW1lbnQiLCJ0Yi1oZWxwLXBvcHVwLXN0eWxlIiwiaGludE1vZGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIkRldmljZUluZm9UYWJsZUNvbXBvbmVudCIsb28pLEhlKFtOKCldLG9vLnByb3RvdHlwZSwidXNlU291cmNlIix2b2lkIDApLEhlKFtOKCldLG9vLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpvbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZGV2aWNlLWluZm8tdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+b28pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgW2NsYXNzLnRiLXJlcXVpcmVkXT0icmVxdWlyZWQiIHRyYW5zbGF0ZT5kZXZpY2UuZGV2aWNlPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUgbm8tcGFkZGluZyBuby1nYXAiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyLWNlbGwgdGFibGUtbmFtZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmVudGl0eS1maWVsZDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0idXNlU291cmNlIiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnNvdXJjZTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5cbiAgICAgICAgZ2F0ZXdheS5kZXZpY2UtaW5mby5leHByZXNzaW9uXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWJvZHkgbm8tZ2FwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgdG9wLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgW2NsYXNzLmJvdHRvbS1zYW1lLXBhZGRpbmddPSJkZXZpY2VJbmZvVHlwZSAhPT0gRGV2aWNlSW5mb1R5cGUuRlVMTCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgYm90dG9tLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgKm5nSWY9ImRldmljZUluZm9UeXBlID09PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnByb2ZpbGUtbmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCByYXctdmFsdWUtb3B0aW9uIiAqbmdJZj0idXNlU291cmNlIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3ctY2VsbCB0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdwcm9maWxlLW5hbWVcJyB8IGdldEdhdGV3YXlIZWxwTGluazogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLWZvcm0tcm93LmJvdHRvbS1zYW1lLXBhZGRpbmd7cGFkZGluZy1ib3R0b206MTZweH06aG9zdCAudGItZm9ybS1yb3cudG9wLXNhbWUtcGFkZGluZ3twYWRkaW5nLXRvcDoxNnB4fTpob3N0IC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7d2lkdGg6MTklfTpob3N0IC50YWJsZS1jb2x1bW57d2lkdGg6NDAlfTpob3N0IC50YWJsZS1uYW1lLWNvbHVtbnt3aWR0aDoyMCV9Omhvc3QgLnJhdy1uYW1le3dpZHRoOjE5JX06aG9zdCAucmF3LXZhbHVlLW9wdGlvbnttYXgtd2lkdGg6NDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7dXNlU291cmNlOlt7dHlwZTphfV0scmVxdWlyZWQ6W3t0eXBlOmF9XSxzb3VyY2VUeXBlczpbe3R5cGU6YX1dLGRldmljZUluZm9UeXBlOlt7dHlwZTphfV19fSk7Y2xhc3MgaW8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIscyxsKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5wb3BvdmVyU2VydmljZT1pLHRoaXMucmVuZGVyZXI9cix0aGlzLnZpZXdDb250YWluZXJSZWY9cyx0aGlzLnRyYW5zbGF0ZT1sLHRoaXMuTWFwcGluZ1R5cGU9Zm4sdGhpcy5xdWFsaXR5VHlwZXM9eG4sdGhpcy5RdWFsaXR5VHJhbnNsYXRpb25zTWFwPXZuLHRoaXMuY29udmVydG9yVHlwZXM9T2JqZWN0LnZhbHVlcyh3biksdGhpcy5Db252ZXJ0b3JUeXBlRW51bT13bix0aGlzLkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXA9Q24sdGhpcy5zb3VyY2VUeXBlcz1PYmplY3QudmFsdWVzKFRuKSx0aGlzLk9QQ1VhU291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhTbiksdGhpcy5PUENVYVNvdXJjZVR5cGVzRW51bT1Tbix0aGlzLnNvdXJjZVR5cGVzRW51bT1Ubix0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5yZXF1ZXN0VHlwZXM9T2JqZWN0LnZhbHVlcyhJbiksdGhpcy5SZXF1ZXN0VHlwZUVudW09SW4sdGhpcy5SZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXA9QW4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLlNlcnZlclNpZGVSUENUeXBlPVBuLHRoaXMuTWFwcGluZ0tleXNUeXBlPU5uLHRoaXMuTWFwcGluZ0hpbnRUcmFuc2xhdGlvbnNNYXA9Ym4sdGhpcy5NYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwPUJuLHRoaXMuSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwPWhuLHRoaXMua2V5c1BvcHVwQ2xvc2VkPSEwLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY3JlYXRlTWFwcGluZ0Zvcm0oKX1nZXQgY29udmVydGVyQXR0cmlidXRlcygpe2lmKHRoaXMuY29udmVydGVyVHlwZSlyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCh0aGlzLmNvbnZlcnRlclR5cGUpLnZhbHVlLmF0dHJpYnV0ZXMubWFwKChlPT5lLmtleSkpfWdldCBjb252ZXJ0ZXJUZWxlbWV0cnkoKXtpZih0aGlzLmNvbnZlcnRlclR5cGUpcmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKS52YWx1ZS50aW1lc2VyaWVzLm1hcCgoZT0+ZS5rZXkpKX1nZXQgb3BjQXR0cmlidXRlcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiYXR0cmlidXRlcyIpLnZhbHVlPy5tYXAoKGU9PmUua2V5KSl8fFtdfWdldCBvcGNUZWxlbWV0cnkoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoInRpbWVzZXJpZXMiKS52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgb3BjUnBjTWV0aG9kcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgicnBjX21ldGhvZHMiKS52YWx1ZT8ubWFwKChlPT5lLm1ldGhvZCkpfHxbXX1nZXQgb3BjQXR0cmlidXRlc1VwZGF0ZXMoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImF0dHJpYnV0ZXNfdXBkYXRlcyIpPy52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgY29udmVydGVyVHlwZSgpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyIikuZ2V0KCJ0eXBlIikudmFsdWV9Z2V0IGN1c3RvbUtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCgiY3VzdG9tIikudmFsdWUuZXh0ZW5zaW9uQ29uZmlnKX1nZXQgcmVxdWVzdE1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VHlwZSIpLnZhbHVlfWdldCByZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXQiKTtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtbGltaXRzLWVycm9yIix7bWluOjF9KToiIn1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWNyZWF0ZU1hcHBpbmdGb3JtKCl7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVEYXRhTWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVSZXF1ZXN0TWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMuY3JlYXRlT1BDVUFNYXBwaW5nRm9ybSgpfX1jYW5jZWwoKXt0aGlzLmtleXNQb3B1cENsb3NlZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5tYXBwaW5nRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5wcmVwYXJlTWFwcGluZ0RhdGEoKSl9bWFuYWdlS2V5cyhlLHQsbil7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBhPXQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZih0aGlzLnBvcG92ZXJTZXJ2aWNlLmhhc1BvcG92ZXIoYSkpdGhpcy5wb3BvdmVyU2VydmljZS5oaWRlUG9wb3ZlcihhKTtlbHNle2NvbnN0IGU9KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSE9PWZuLk9QQ1VBP3RoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKTp0aGlzLm1hcHBpbmdGb3JtKS5nZXQobiksdD17a2V5czplLnZhbHVlLGtleXNUeXBlOm4scmF3RGF0YTp0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKT8udmFsdWU9PT13bi5CWVRFUyxwYW5lbFRpdGxlOk1uLmdldChuKSxhZGRLZXlUaXRsZTpFbi5nZXQobiksZGVsZXRlS2V5VGl0bGU6cW4uZ2V0KG4pLG5vS2V5c1RleHQ6RG4uZ2V0KG4pfTt0aGlzLmRhdGEubWFwcGluZ1R5cGU9PT1mbi5PUENVQSYmKHQudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKFNuKSx0LnZhbHVlVHlwZUVudW09U24sdC52YWx1ZVR5cGVzPUxuKSx0aGlzLmtleXNQb3B1cENsb3NlZD0hMTtjb25zdCBvPXRoaXMucG9wb3ZlclNlcnZpY2UuZGlzcGxheVBvcG92ZXIoYSx0aGlzLnJlbmRlcmVyLHRoaXMudmlld0NvbnRhaW5lclJlZixhbywibGVmdEJvdHRvbSIsITEsbnVsbCx0LHt9LHt9LHt9LCEwKTtvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLnBvcG92ZXI9byxvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLmtleXNEYXRhQXBwbGllZC5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntvLmhpZGUoKSxlLnBhdGNoVmFsdWUodCksZS5tYXJrQXNEaXJ0eSgpfSkpLG8udGJIaWRlU3RhcnQucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMua2V5c1BvcHVwQ2xvc2VkPSEwfSkpfX1wcmVwYXJlTWFwcGluZ0RhdGEoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0udmFsdWU7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjp0LHRvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmF9PWU7cmV0dXJue3RvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmEsY29udmVydGVyOnt0eXBlOnQudHlwZSwuLi50W3QudHlwZV19fTtjYXNlIGZuLlJFUVVFU1RTOnJldHVybntyZXF1ZXN0VHlwZTplLnJlcXVlc3RUeXBlLHJlcXVlc3RWYWx1ZTplLnJlcXVlc3RWYWx1ZVtlLnJlcXVlc3RUeXBlXX07ZGVmYXVsdDpyZXR1cm4gZX19Z2V0Rm9ybVZhbHVlRGF0YSgpe2lmKHRoaXMuZGF0YS52YWx1ZSYmT2JqZWN0LmtleXModGhpcy5kYXRhLnZhbHVlKS5sZW5ndGgpc3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjplLHRvcGljRmlsdGVyOnQsc3Vic2NyaXB0aW9uUW9zOm59PXRoaXMuZGF0YS52YWx1ZTtyZXR1cm57dG9waWNGaWx0ZXI6dCxzdWJzY3JpcHRpb25Rb3M6bixjb252ZXJ0ZXI6e3R5cGU6ZS50eXBlLFtlLnR5cGVdOnsuLi5lfX19O2Nhc2UgZm4uUkVRVUVTVFM6cmV0dXJue3JlcXVlc3RUeXBlOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VHlwZSxyZXF1ZXN0VmFsdWU6e1t0aGlzLmRhdGEudmFsdWUucmVxdWVzdFR5cGVdOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VmFsdWV9fTtkZWZhdWx0OnJldHVybiB0aGlzLmRhdGEudmFsdWV9fWNyZWF0ZURhdGFNYXBwaW5nRm9ybSgpe3RoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgidG9waWNGaWx0ZXIiLHRoaXMuZmIuY29udHJvbCgiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJzdWJzY3JpcHRpb25Rb3MiLHRoaXMuZmIuY29udHJvbCgwKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJjb252ZXJ0ZXIiLHRoaXMuZmIuZ3JvdXAoe3R5cGU6W3duLkpTT04sW11dLGpzb246dGhpcy5mYi5ncm91cCh7ZGV2aWNlSW5mbzpbe30sW11dLGF0dHJpYnV0ZXM6W1tdLFtdXSx0aW1lc2VyaWVzOltbXSxbXV19KSxieXRlczp0aGlzLmZiLmdyb3VwKHtkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXX0pLGN1c3RvbTp0aGlzLmZiLmdyb3VwKHtleHRlbnNpb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGV4dGVuc2lvbkNvbmZpZzpbe30sW11dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShSZSh0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpO3QuZ2V0KCJqc29uIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImJ5dGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImN1c3RvbSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KGUpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9Y3JlYXRlUmVxdWVzdE1hcHBpbmdGb3JtKCl7dGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJyZXF1ZXN0VHlwZSIsdGhpcy5mYi5jb250cm9sKEluLkNPTk5FQ1RfUkVRVUVTVCxbXSkpLHRoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgicmVxdWVzdFZhbHVlIix0aGlzLmZiLmdyb3VwKHtjb25uZWN0UmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86W3t9LFtdXX0pLGRpc2Nvbm5lY3RSZXF1ZXN0czp0aGlzLmZiLmdyb3VwKHt0b3BpY0ZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlSW5mbzpbe30sW11dfSksYXR0cmlidXRlUmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZF1dfSksYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sYXR0cmlidXRlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWVFeHByZXNzaW9uOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXRhaW46WyExLFtdXX0pLGF0dHJpYnV0ZVVwZGF0ZXM6dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXR0cmlidXRlRmlsdGVyOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0b3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmV0YWluOlshMCxbXV19KSxzZXJ2ZXJTaWRlUnBjOnRoaXMuZmIuZ3JvdXAoe3R5cGU6W1BuLlRXT19XQVksW11dLGRldmljZU5hbWVGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZEZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY1FvUzpbMCxbXV0scmVzcG9uc2VUaW1lb3V0OlsxZTQsW3VlLnJlcXVpcmVkLHVlLm1pbigxKV1dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoUmUodGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWUpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUiKTt0LmdldCgiY29ubmVjdFJlcXVlc3RzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImRpc2Nvbm5lY3RSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVVcGRhdGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInNlcnZlclNpZGVScGMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldChlKS5lbmFibGUoKX0pKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgicmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYyIpO2U9PT1Qbi5PTkVfV0FZPyh0LmdldCgicmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgicmVzcG9uc2VUb3BpY1FvUyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSk6KHQuZ2V0KCJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInJlc3BvbnNlVG9waWNRb1MiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKX0pKSx0aGlzLm1hcHBpbmdGb3JtLnBhdGNoVmFsdWUodGhpcy5nZXRGb3JtVmFsdWVEYXRhKCkpfWNyZWF0ZU9QQ1VBTWFwcGluZ0Zvcm0oKXt0aGlzLm1hcHBpbmdGb3JtPXRoaXMuZmIuZ3JvdXAoe2RldmljZU5vZGVTb3VyY2U6W1NuLlBBVEgsW11dLGRldmljZU5vZGVQYXR0ZXJuOlsiIixbdWUucmVxdWlyZWRdXSxkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXSxycGNfbWV0aG9kczpbW10sW11dLGF0dHJpYnV0ZXNfdXBkYXRlczpbW10sW11dfSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmlvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmlvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRpYWxvZyIsdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtIiBjbGFzcz0ia2V5LW1hcHBpbmciPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBNYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0iSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwLmdldCh0aGlzLmRhdGEubWFwcGluZ1R5cGUpIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPlxuICAgICAgICB7eyBNYXBwaW5nSGludFRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJkYXRhLm1hcHBpbmdUeXBlIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5EQVRBIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50b3BpYy1maWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZDsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS90b3BpYy1maWx0ZXJfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1Rb3MtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1xdHQtcW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3Vic2NyaXB0aW9uUW9zIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcXVhbGl0eVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9ImNvbnZlcnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGF5bG9hZC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBjb252ZXJ0b3JUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyBDb252ZXJ0b3JUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5kYXRhLWNvbnZlcnNpb248L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgICAgICAgICAge3sgRGF0YUNvbnZlcnNpb25UcmFuc2xhdGlvbnNNYXAuZ2V0KGNvbnZlcnRlclR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iY29udmVydGVyVHlwZSIgW25nU3dpdGNoXT0iY29udmVydGVyVHlwZSI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb252ZXJ0b3JUeXBlRW51bS5KU09OIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkJZVEVTIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvdXJjZVR5cGVzXT0iW3NvdXJjZVR5cGVzRW51bS5NU0csIHNvdXJjZVR5cGVzRW51bS5DT05TVF0iIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkJZVEVTIHx8IGNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJjb252ZXJ0ZXJBdHRyaWJ1dGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2YgY29udmVydGVyQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHRlbGVtZXRyeUJ1dHRvbiwgTWFwcGluZ0tleXNUeXBlLlRJTUVTRVJJRVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmV4dGVuc2lvbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5leHRlbnNpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZXh0ZW5zaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmV4dGVuc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwnY29udmVydGVyLmN1c3RvbS5leHRlbnNpb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5rZXlzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImN1c3RvbUtleXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBjdXN0b21LZXlzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAja2V5c0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwga2V5c0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkNVU1RPTSkiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdHlwZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcXVlc3RUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgUmVxdWVzdFR5cGVzVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0icmVxdWVzdFZhbHVlIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpIiBbbmdTd2l0Y2hdPSJyZXF1ZXN0TWFwcGluZ1R5cGUiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0icmVxdWVzdE1hcHBpbmdUeXBlID09PSBSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5ESVNDT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgW2Zvcm1Db250cm9sXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS50b3BpYy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5QQVJUSUFMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZnJvbS1kZXZpY2UtcmVxdWVzdC1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnRcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiIGZvcm1Hcm91cE5hbWU9ImRldmljZUluZm8iPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMuYXR0cmlidXRlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUgdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS50by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJldGFpbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkFUVFJJQlVURV9VUERBVEUiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmRldmljZU5hbWVGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuYXR0cmlidXRlLWZpbHRlci1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZUZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5hdHRyaWJ1dGVGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0icmV0YWluIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5TRVJWRVJfU0lERV9SUEMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgY2VudGVyIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuVFdPX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IlNlcnZlclNpZGVSUENUeXBlLk9ORV9XQVkiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LndpdGhvdXQtcmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tZXRob2QtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLm1ldGhvZEZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy50eXBlXCcpLnZhbHVlID09PSBTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljUW9TIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFF1YWxpdHlUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVGltZW91dCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0icmVzcG9uc2VUaW1lb3V0RXJyb3JUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iTWFwcGluZ1R5cGUuT1BDVUEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBkZXZpY2UtY29uZmlnIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVTb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBbT1BDVWFTb3VyY2VUeXBlc0VudW0uUEFUSCwgT1BDVWFTb3VyY2VUeXBlc0VudW0uSURFTlRJRklFUl0iIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBkZXZpY2Utbm9kZS1wYXR0ZXJuLWZpZWxkIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOb2RlUGF0dGVybiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVQYXR0ZXJuXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdkZXZpY2Utbm9kZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlU291cmNlXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbc291cmNlVHlwZXNdPSJPUENVYVNvdXJjZVR5cGVzIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY0F0dHJpYnV0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNBdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIG9wY0F0dHJpYnV0ZXNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5BVFRSSUJVVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudGltZXNlcmllczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBvcGNUZWxlbWV0cnkiPlxuICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNUZWxlbWV0cnlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjVGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNBdHRyaWJ1dGVzVXBkYXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlc1VwZGF0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVNfVVBEQVRFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy1tZXRob2RzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNScGNNZXRob2RzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNScGNNZXRob2RzIj5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dHJpYnV0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAjcnBjTWV0aG9kc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBycGNNZXRob2RzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJtYXBwaW5nRm9ybS5pbnZhbGlkIHx8ICFtYXBwaW5nRm9ybS5kaXJ0eSB8fCAha2V5c1BvcHVwQ2xvc2VkIj5cbiAgICAgIHt7IHRoaXMuZGF0YS5idXR0b25UaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJX06aG9zdCAua2V5LW1hcHBpbmd7bWF4LXdpZHRoOjkwMHB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLmtleS1tYXBwaW5nIC5tYXQtdG9vbGJhcnttaW4taGVpZ2h0OjY0cHh9Omhvc3QgLmtleS1tYXBwaW5nIHRiLXRvZ2dsZS1zZWxlY3R7cGFkZGluZzo0cHggMH06aG9zdCAubWF0LW1kYy1kaWFsb2ctY29udGVudHtoZWlnaHQ6NjcwcHh9Omhvc3QgLmVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lcnttYXgtd2lkdGg6NzAlfTpob3N0IDo6bmctZGVlcCAua2V5LW1hcHBpbmcgLm1hdC1tZGMtY2hpcC1saXN0Ym94IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDpub3dyYXB9Omhvc3QgOjpuZy1kZWVwIC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjQwcHg7d2lkdGg6MzUlO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5tYXQtbWRjLWZvcm0tZmllbGR7d2lkdGg6MH06aG9zdCA6Om5nLWRlZXAgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9Omhvc3QgOjpuZy1kZWVwIC5kZXZpY2UtY29uZmlne2dhcDoxMnB4O3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1ub2RlLXBhdHRlcm4tZmllbGR7ZmxleC1iYXNpczozJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcCxzZWxlY3RvcjoibWF0LWJhc2ljLWNoaXAsIFttYXQtYmFzaWMtY2hpcF0sIG1hdC1jaGlwLCBbbWF0LWNoaXBdIixpbnB1dHM6WyJyb2xlIiwiaWQiLCJhcmlhLWxhYmVsIiwiYXJpYS1kZXNjcmlwdGlvbiIsInZhbHVlIiwiY29sb3IiLCJyZW1vdmFibGUiLCJoaWdobGlnaHRlZCIsImRpc2FibGVSaXBwbGUiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJyZW1vdmVkIiwiZGVzdHJveWVkIl0sZXhwb3J0QXM6WyJtYXRDaGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcExpc3Rib3gsc2VsZWN0b3I6Im1hdC1jaGlwLWxpc3Rib3giLGlucHV0czpbIm11bHRpcGxlIiwiYXJpYS1vcmllbnRhdGlvbiIsInNlbGVjdGFibGUiLCJjb21wYXJlV2l0aCIsInJlcXVpcmVkIiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInZhbHVlIl0sb3V0cHV0czpbImNoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTprYSxzZWxlY3RvcjoiW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF0iLGlucHV0czpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOlsidXNlU291cmNlIiwicmVxdWlyZWQiLCJzb3VyY2VUeXBlcyIsImRldmljZUluZm9UeXBlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV19KX19ZSgiTWFwcGluZ0RpYWxvZ0NvbXBvbmVudCIsaW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6aW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1hcHBpbmctZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPGRpdiBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0iIGNsYXNzPSJrZXktbWFwcGluZyI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IE1hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAuZ2V0KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgIHt7IE1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImRhdGEubWFwcGluZ1R5cGUiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLkRBVEEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0ZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudG9waWMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3NcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdWJzY3JpcHRpb25Rb3MiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBRdWFsaXR5VHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0iY29udmVydGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXlsb2FkLXR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGNvbnZlcnRvclR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgIHt7IENvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmRhdGEtY29udmVyc2lvbjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj5cbiAgICAgICAgICAgICAgICB7eyBEYXRhQ29udmVyc2lvblRyYW5zbGF0aW9uc01hcC5nZXQoY29udmVydGVyVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cE5hbWVdPSJjb252ZXJ0ZXJUeXBlIiBbbmdTd2l0Y2hdPSJjb252ZXJ0ZXJUeXBlIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29udmVydG9yVHlwZUVudW0uQllURVMiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc291cmNlVHlwZXNdPSJbc291cmNlVHlwZXNFbnVtLk1TRywgc291cmNlVHlwZXNFbnVtLkNPTlNUXSIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQllURVMgfHwgY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uSlNPTiI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlckF0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBjb252ZXJ0ZXJBdHRyaWJ1dGVzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnRpbWVzZXJpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGVsZW1ldHJ5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJjb252ZXJ0ZXJUeXBlID09PSBDb252ZXJ0b3JUeXBlRW51bS5DVVNUT00iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmV4dGVuc2lvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJleHRlbnNpb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZXh0ZW5zaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2NvbnZlcnRlci5jdXN0b20uZXh0ZW5zaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiBzYW1lLXBhZGRpbmcgdGItZmxleCBjb2x1bW4iPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5leHRlbnNpb24tY29uZmlndXJhdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj57eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24taGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmtleXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY3VzdG9tS2V5cyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGN1c3RvbUtleXMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNrZXlzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBrZXlzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVxdWVzdC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcmVxdWVzdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBSZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJyZXF1ZXN0VmFsdWUiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkiIFtuZ1N3aXRjaF09InJlcXVlc3RNYXBwaW5nVHlwZSI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJyZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG9waWMtZmlsdGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBbZm9ybUNvbnRyb2xdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvdG9waWMtZmlsdGVyX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uRElTQ09OTkVDVF9SRVFVRVNUIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLlBBUlRJQUwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LmZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciIgZm9ybUdyb3VwTmFtZT0iZGV2aWNlSW5mbyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5ncy1oaW50XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldGFpbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1VQREFURSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuYXR0cmlidXRlRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXRhaW4taGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLlNFUlZFUl9TSURFX1JQQyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBjZW50ZXIgYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS53aXRoLXJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuT05FX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aG91dC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWV0aG9kLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5tZXRob2RGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnR5cGVcJykudmFsdWUgPT09IFNlcnZlclNpZGVSUENUeXBlLlRXT19XQVkiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVG9waWNRb1MiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHF1YWxpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJyZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUaW1lb3V0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5PUENVQSI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGRldmljZS1jb25maWciPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTm9kZVNvdXJjZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIFtPUENVYVNvdXJjZVR5cGVzRW51bS5QQVRILCBPUENVYVNvdXJjZVR5cGVzRW51bS5JREVOVElGSUVSXSIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGRldmljZS1ub2RlLXBhdHRlcm4tZmllbGQiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVQYXR0ZXJuIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlUGF0dGVyblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ2RldmljZS1ub2RlXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVTb3VyY2VcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtzb3VyY2VUeXBlc109Ik9QQ1VhU291cmNlVHlwZXMiIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjQXR0cmlidXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY0F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjQXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIG9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY1RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBvcGNUZWxlbWV0cnlCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5USU1FU0VSSUVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlLXVwZGF0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXNVcGRhdGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNBdHRyaWJ1dGVzVXBkYXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIGF0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFU19VUERBVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLW1ldGhvZHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1JwY01ldGhvZHMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY1JwY01ldGhvZHMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNycGNNZXRob2RzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY01ldGhvZHNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09Im1hcHBpbmdGb3JtLmludmFsaWQgfHwgIW1hcHBpbmdGb3JtLmRpcnR5IHx8ICFrZXlzUG9wdXBDbG9zZWQiPlxuICAgICAge3sgdGhpcy5kYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpncmlkO2hlaWdodDoxMDAlfTpob3N0IC5rZXktbWFwcGluZ3ttYXgtd2lkdGg6OTAwcHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAua2V5LW1hcHBpbmcgLm1hdC10b29sYmFye21pbi1oZWlnaHQ6NjRweH06aG9zdCAua2V5LW1hcHBpbmcgdGItdG9nZ2xlLXNlbGVjdHtwYWRkaW5nOjRweCAwfTpob3N0IC5tYXQtbWRjLWRpYWxvZy1jb250ZW50e2hlaWdodDo2NzBweH06aG9zdCAuZWxsaXBzaXMtY2hpcHMtY29udGFpbmVye21heC13aWR0aDo3MCV9Omhvc3QgOjpuZy1kZWVwIC5rZXktbWFwcGluZyAubWF0LW1kYy1jaGlwLWxpc3Rib3ggLm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBze2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOm5vd3JhcH06aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6NDBweDt3aWR0aDozNSU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAudGItZm9ybS1yb3cgLm1hdC1tZGMtZm9ybS1maWVsZHt3aWR0aDowfTpob3N0IDo6bmctZGVlcCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1jb25maWd7Z2FwOjEycHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fTpob3N0IDo6bmctZGVlcCAuZGV2aWNlLW5vZGUtcGF0dGVybi1maWVsZHtmbGV4LWJhc2lzOjMlfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSk7Y2xhc3Mgcm97c2V0IG1hcHBpbmdUeXBlKGUpe3RoaXMubWFwcGluZ1R5cGVWYWx1ZSE9PWUmJih0aGlzLm1hcHBpbmdUeXBlVmFsdWU9ZSl9Z2V0IG1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ1R5cGVWYWx1ZX1jb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLnRyYW5zbGF0ZT1lLHRoaXMuZGlhbG9nPXQsdGhpcy5kaWFsb2dTZXJ2aWNlPW4sdGhpcy5mYj1hLHRoaXMucmVxdWlyZWQ9ITEsdGhpcy5tYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLm1hcHBpbmdUeXBlRW51bT1mbix0aGlzLmRpc3BsYXllZENvbHVtbnM9W10sdGhpcy5tYXBwaW5nQ29sdW1ucz1bXSx0aGlzLnRleHRTZWFyY2hNb2RlPSExLHRoaXMuaGlkZVBhZ2VTaXplPSExLHRoaXMuYWN0aXZlVmFsdWU9ITEsdGhpcy5kaXJ0eVZhbHVlPSExLHRoaXMudGV4dFNlYXJjaD10aGlzLmZiLmNvbnRyb2woIiIse25vbk51bGxhYmxlOiEwfSksdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFwcGluZ0Zvcm1Hcm91cD10aGlzLmZiLmFycmF5KFtdKSx0aGlzLmRpcnR5VmFsdWU9IXRoaXMuYWN0aXZlVmFsdWUsdGhpcy5kYXRhU291cmNlPW5ldyBzb31uZ09uSW5pdCgpe3RoaXMuc2V0TWFwcGluZ0NvbHVtbnMoKSx0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCguLi50aGlzLm1hcHBpbmdDb2x1bW5zLm1hcCgoZT0+ZS5kZWYpKSwiYWN0aW9ucyIpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVUYWJsZURhdGEoZSksdGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGV4dFNlYXJjaC52YWx1ZUNoYW5nZXMucGlwZShWZSgxNTApLEJlKCgoZSx0KT0+KGU/PyIiKT09PXQudHJpbSgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9ZS50cmltKCk7dGhpcy51cGRhdGVUYWJsZURhdGEodGhpcy5tYXBwaW5nRm9ybUdyb3VwLnZhbHVlLHQudHJpbSgpKX0pKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5tYXBwaW5nRm9ybUdyb3VwLmNsZWFyKCksdGhpcy5wdXNoRGF0YUFzRm9ybUFycmF5cyhlKX12YWxpZGF0ZSgpe3JldHVybiF0aGlzLnJlcXVpcmVkfHx0aGlzLm1hcHBpbmdGb3JtR3JvdXAuY29udHJvbHMubGVuZ3RoP251bGw6e21hcHBpbmdGb3JtR3JvdXA6e3ZhbGlkOiExfX19ZW50ZXJGaWx0ZXJNb2RlKCl7dGhpcy50ZXh0U2VhcmNoTW9kZT0hMCxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5zZWFyY2hJbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKX0pLDEwKX1leGl0RmlsdGVyTW9kZSgpe3RoaXMudXBkYXRlVGFibGVEYXRhKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VNYXBwaW5nKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPWllKHQpP3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5hdCh0KS52YWx1ZTp7fTt0aGlzLmRpYWxvZy5vcGVuKGlvLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7bWFwcGluZ1R5cGU6dGhpcy5tYXBwaW5nVHlwZSx2YWx1ZTpuLGJ1dHRvblRpdGxlOnJlKHQpPyJhY3Rpb24uYWRkIjoiYWN0aW9uLmFwcGx5In19KS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihpZSh0KT90aGlzLm1hcHBpbmdGb3JtR3JvdXAuYXQodCkucGF0Y2hWYWx1ZShlKTp0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKFtlXSksdGhpcy5tYXBwaW5nRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfXVwZGF0ZVRhYmxlRGF0YShlLHQpe2xldCBuPWUubWFwKChlPT50aGlzLmdldE1hcHBpbmdWYWx1ZShlKSkpO3QmJihuPW4uZmlsdGVyKChlPT5PYmplY3QudmFsdWVzKGUpLnNvbWUoKGU9PmUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSkpKSkpKSx0aGlzLmRhdGFTb3VyY2UubG9hZERhdGEobil9ZGVsZXRlTWFwcGluZyhlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtbWFwcGluZy10aXRsZSIpLCIiLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi5ubyIpLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi55ZXMiKSwhMCkuc3Vic2NyaWJlKChlPT57ZSYmKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5yZW1vdmVBdCh0KSx0aGlzLm1hcHBpbmdGb3JtR3JvdXAubWFya0FzRGlydHkoKSl9KSl9cHVzaERhdGFBc0Zvcm1BcnJheXMoZSl7ZT8ubGVuZ3RoJiZlLmZvckVhY2goKGU9PnRoaXMubWFwcGluZ0Zvcm1Hcm91cC5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1nZXRNYXBwaW5nVmFsdWUoZSl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTpjb25zdCB0PUNuLmdldChlLmNvbnZlcnRlcj8udHlwZSk7cmV0dXJue3RvcGljRmlsdGVyOmUudG9waWNGaWx0ZXIsUW9TOmUuc3Vic2NyaXB0aW9uUW9zLGNvbnZlcnRlcjp0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQodCk6IiJ9O2Nhc2UgZm4uUkVRVUVTVFM6bGV0IG47Y29uc3QgYT1lO3JldHVybiBuPWEucmVxdWVzdFR5cGU9PT1Jbi5BVFRSSUJVVEVfVVBEQVRFP2EucmVxdWVzdFZhbHVlLmF0dHJpYnV0ZUZpbHRlcjphLnJlcXVlc3RUeXBlPT09SW4uU0VSVkVSX1NJREVfUlBDP2EucmVxdWVzdFZhbHVlLm1ldGhvZEZpbHRlcjphLnJlcXVlc3RWYWx1ZS50b3BpY0ZpbHRlcix7cmVxdWVzdFR5cGU6ZS5yZXF1ZXN0VHlwZSx0eXBlOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoQW4uZ2V0KGUucmVxdWVzdFR5cGUpKSxkZXRhaWxzOm59O2Nhc2UgZm4uT1BDVUE6Y29uc3Qgbz1lLmRldmljZUluZm8/LmRldmljZU5hbWVFeHByZXNzaW9uLGk9ZS5kZXZpY2VJbmZvPy5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbix7ZGV2aWNlTm9kZVBhdHRlcm46cn09ZTtyZXR1cm57ZGV2aWNlTm9kZVBhdHRlcm46cixkZXZpY2VOYW1lUGF0dGVybjpvLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOml9O2RlZmF1bHQ6cmV0dXJue319fXNldE1hcHBpbmdDb2x1bW5zKCl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTp0aGlzLm1hcHBpbmdDb2x1bW5zLnB1c2goe2RlZjoidG9waWNGaWx0ZXIiLHRpdGxlOiJnYXRld2F5LnRvcGljLWZpbHRlciJ9LHtkZWY6IlFvUyIsdGl0bGU6ImdhdGV3YXkubXF0dC1xb3MifSx7ZGVmOiJjb252ZXJ0ZXIiLHRpdGxlOiJnYXRld2F5LnBheWxvYWQtdHlwZSJ9KTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJ0eXBlIix0aXRsZToiZ2F0ZXdheS50eXBlIn0se2RlZjoiZGV0YWlscyIsdGl0bGU6ImdhdGV3YXkuZGV0YWlscyJ9KTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJkZXZpY2VOb2RlUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5vZGUifSx7ZGVmOiJkZXZpY2VOYW1lUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5hbWUifSx7ZGVmOiJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLXByb2ZpbGUifSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cm8sZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpybyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIixtYXBwaW5nVHlwZToibWFwcGluZ1R5cGUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cm8pKSxtdWx0aTohMH1dLHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzZWFyY2hJbnB1dEZpZWxkIixmaXJzdDohMCxwcmVkaWNhdGU6WyJzZWFyY2hJbnB1dCJdLGRlc2NlbmRhbnRzOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmctdGFibGUgdGItYWJzb2x1dGUtZmlsbCI+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLXRpdGxlIj57e21hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldChtYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJlbnRlckZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5zZWFyY2hcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0idGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPiZuYnNwOzwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0idGV4dFNlYXJjaCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnY29tbW9uLmVudGVyLXNlYXJjaFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9ImV4aXRGaWx0ZXJNb2RlKCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uY2xvc2VcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPGRpdiBjbGFzcz0idGFibGUtY29udGFpbmVyIj5cbiAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iY29sdW1uLmRlZiIgKm5nRm9yPSJsZXQgY29sdW1uIG9mIG1hcHBpbmdDb2x1bW5zOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCB0YlRydW5jYXRlV2l0aFRvb2x0aXAgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IG1hcHBpbmdbY29sdW1uLmRlZl0gfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImFjdGlvbnMiIHN0aWNreUVuZD5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJywgdGV4dEFsaWduOiBcJ2NlbnRlclwnfSI+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgbWFwcGluZzsgbGV0IGkgPSBpbmRleCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCd9Ij5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcm93QWN0aW9ucz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlTWFwcGluZygkZXZlbnQsIGkpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbj5kZWxldGU8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cubHQtbGcgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09ImNlbGxBY3Rpb25zTWVudSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjY2VsbEFjdGlvbnNNZW51PSJtYXRNZW51IiB4UG9zaXRpb249ImJlZm9yZSI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBbbmdDbGFzc109IntcJ21hdC1yb3ctc2VsZWN0XCc6IHRydWV9IiAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9ImxldCBtYXBwaW5nOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDxzZWN0aW9uIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUgJiYgKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpIiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1oZWFkbGluZS01IHRiLWFic29sdXRlLWZpbGwgdGItYWRkLW5ldyI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz0iY29ubmVjdG9yIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnR7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQudGItb3V0bGluZWQtYm9yZGVye2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRpdGxlLWNvbnRhaW5lcntvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGItbWFwcGluZy10YWJsZS10aXRsZXtwYWRkaW5nLXJpZ2h0OjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1ue3BhZGRpbmc6MCAxMnB4O3dpZHRoOjIzJX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbi5yZXF1ZXN0LWNvbHVtbnt3aWR0aDozOCV9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAuZWxsaXBzaXN7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctYm90dG9tOjVweDt3aWR0aDoxMDAlfX06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbHtjdXJzb3I6cG9pbnRlcn06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbCAubWF0LWljb257aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtmb250LXNpemU6MjRweDtjb2xvcjojNzU3NTc1fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5Bc3luY1BpcGUsbmFtZToiYXN5bmMifSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdENsYXNzRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ0NsYXNzXSwgW25nQ2xhc3MueHNdLCBbbmdDbGFzcy5zbV0sIFtuZ0NsYXNzLm1kXSwgW25nQ2xhc3MubGddLCBbbmdDbGFzcy54bF0sICBbbmdDbGFzcy5sdC1zbV0sIFtuZ0NsYXNzLmx0LW1kXSwgW25nQ2xhc3MubHQtbGddLCBbbmdDbGFzcy5sdC14bF0sICBbbmdDbGFzcy5ndC14c10sIFtuZ0NsYXNzLmd0LXNtXSwgW25nQ2xhc3MuZ3QtbWRdLCBbbmdDbGFzcy5ndC1sZ10iLGlucHV0czpbIm5nQ2xhc3MiLCJuZ0NsYXNzLnhzIiwibmdDbGFzcy5zbSIsIm5nQ2xhc3MubWQiLCJuZ0NsYXNzLmxnIiwibmdDbGFzcy54bCIsIm5nQ2xhc3MubHQtc20iLCJuZ0NsYXNzLmx0LW1kIiwibmdDbGFzcy5sdC1sZyIsIm5nQ2xhc3MubHQteGwiLCJuZ0NsYXNzLmd0LXhzIiwibmdDbGFzcy5ndC1zbSIsIm5nQ2xhc3MuZ3QtbWQiLCJuZ0NsYXNzLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U3R5bGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nU3R5bGVdLCAgW25nU3R5bGUueHNdLCBbbmdTdHlsZS5zbV0sIFtuZ1N0eWxlLm1kXSwgW25nU3R5bGUubGddLCBbbmdTdHlsZS54bF0sICBbbmdTdHlsZS5sdC1zbV0sIFtuZ1N0eWxlLmx0LW1kXSwgW25nU3R5bGUubHQtbGddLCBbbmdTdHlsZS5sdC14bF0sICBbbmdTdHlsZS5ndC14c10sIFtuZ1N0eWxlLmd0LXNtXSwgW25nU3R5bGUuZ3QtbWRdLCBbbmdTdHlsZS5ndC1sZ10iLGlucHV0czpbIm5nU3R5bGUiLCJuZ1N0eWxlLnhzIiwibmdTdHlsZS5zbSIsIm5nU3R5bGUubWQiLCJuZ1N0eWxlLmxnIiwibmdTdHlsZS54bCIsIm5nU3R5bGUubHQtc20iLCJuZ1N0eWxlLmx0LW1kIiwibmdTdHlsZS5sdC1sZyIsIm5nU3R5bGUubHQteGwiLCJuZ1N0eWxlLmd0LXhzIiwibmdTdHlsZS5ndC1zbSIsIm5nU3R5bGUuZ3QtbWQiLCJuZ1N0eWxlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJ0LlRiSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItaWNvbiIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbInRiSWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIk1hcHBpbmdUYWJsZUNvbXBvbmVudCIscm8pLEhlKFtOKCldLHJvLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpybyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbWFwcGluZy10YWJsZSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy10YWJsZSB0Yi1hYnNvbHV0ZS1maWxsIj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InRiLW1hcHBpbmctdGFibGUtY29udGVudCI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiICpuZ0lmPSIoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykgPT09IGZhbHNlIj5cbiAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzdGFydCBjZW50ZXIiIGZ4TGF5b3V0LnhzPSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ24ueHM9ImNlbnRlciBzdGFydCIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9InRiLW1hcHBpbmctdGFibGUtdGl0bGUiPnt7bWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KG1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJjb2x1bW4uZGVmIiAqbmdGb3I9ImxldCBjb2x1bW4gb2YgbWFwcGluZ0NvbHVtbnM7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgY29sdW1uLnRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCAqbWF0Q2VsbERlZj0ibGV0IG1hcHBpbmciIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgbWFwcGluZ1tjb2x1bW4uZGVmXSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCc5NnB4XCcsIG1heFdpZHRoOiBcJzk2cHhcJywgd2lkdGg6IFwnOTZweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZGVsZXRlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmRlbGV0ZTwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmd0LW1kIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5sdC1sZyBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT0iY2VsbEFjdGlvbnNNZW51Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNjZWxsQWN0aW9uc01lbnU9Im1hdE1lbnUiIHhQb3NpdGlvbj0iYmVmb3JlIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG1hdC1oZWFkZXItcm93IFtuZ0NsYXNzXT0ie1wnbWF0LXJvdy1zZWxlY3RcJzogdHJ1ZX0iICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj0ibGV0IG1hcHBpbmc7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7Ij48L21hdC1yb3c+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPHNlY3Rpb24gW2Z4U2hvd109IiF0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgICAgICBjbGFzcz0ibWF0LWhlYWRsaW5lLTUgdGItYWJzb2x1dGUtZmlsbCB0Yi1hZGQtbmV3Ij5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPSJjb25uZWN0b3IiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gW2Z4U2hvd109InRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSJcbiAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgIGNsYXNzPSJuby1kYXRhLWZvdW5kIiB0cmFuc2xhdGU+XG4gICAgICB3aWRnZXQubm8tZGF0YS1mb3VuZFxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudC50Yi1vdXRsaW5lZC1ib3JkZXJ7Ym94LXNoYWRvdzowIDAgIzAwMDMsMCAwICMwMDAwMDAyNCwwIDAgIzAwMDAwMDFmO2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMDtib3JkZXItcmFkaXVzOjRweH06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5tYXQtdG9vbGJhci10b29sc3ttaW4taGVpZ2h0OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGl0bGUtY29udGFpbmVye292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctcmlnaHQ6MjBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxle3RhYmxlLWxheW91dDpmaXhlZDttaW4td2lkdGg6NDUwcHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxlIC50YWJsZS12YWx1ZS1jb2x1bW57cGFkZGluZzowIDEycHg7d2lkdGg6MjMlfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1uLnJlcXVlc3QtY29sdW1ue3dpZHRoOjM4JX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5lbGxpcHNpc3tvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAubm8tZGF0YS1mb3VuZHtoZWlnaHQ6Y2FsYygxMDAlIC0gMTIwcHgpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5OXB4KXs6aG9zdCAubWF0LXRvb2xiYXJ7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxMDBweH06aG9zdCAubWF0LXRvb2xiYXIgLnRiLW1hcHBpbmctdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntyZXF1aXJlZDpbe3R5cGU6YX1dLG1hcHBpbmdUeXBlOlt7dHlwZTphfV0sc2VhcmNoSW5wdXRGaWVsZDpbe3R5cGU6byxhcmdzOlsic2VhcmNoSW5wdXQiXX1dfX0pO2NsYXNzIHNvIGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9fWUoIk1hcHBpbmdEYXRhc291cmNlIixzbyk7Y2xhc3MgbG97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLnRpdGxlPSJnYXRld2F5LnNlY3VyaXR5Iix0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsPSExLHRoaXMuQnJva2VyU2VjdXJpdHlUeXBlPXJuLHRoaXMuc2VjdXJpdHlUeXBlcz1PYmplY3QudmFsdWVzKHJuKSx0aGlzLm1vZGVUeXBlcz1PYmplY3QudmFsdWVzKHBuKSx0aGlzLlNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcD1tbix0aGlzLmRlc3Ryb3kkPW5ldyBTZX1uZ09uSW5pdCgpe3RoaXMuc2VjdXJpdHlGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dHlwZTpbcm4uQU5PTllNT1VTLFtdXSx1c2VybmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFzc3dvcmQ6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHBhdGhUb0NBQ2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvUHJpdmF0ZUtleTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvQ2xpZW50Q2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsJiZ0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmFkZENvbnRyb2woIm1vZGUiLHRoaXMuZmIuY29udHJvbChwbi5OT05FLFtdKSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXtpZihlKWUudHlwZXx8KGUudHlwZT1ybi5BTk9OWU1PVVMpLHRoaXMudXBkYXRlVmFsaWRhdG9ycyhlLnR5cGUpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAucmVzZXQoZSx7ZW1pdEV2ZW50OiExfSk7ZWxzZXtjb25zdCBlPXt0eXBlOnJuLkFOT05ZTU9VU307dGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlLHtlbWl0RXZlbnQ6ITF9KX10aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlIT09cm4uQkFTSUN8fHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VjdXJpdHlGb3JtOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dXBkYXRlVmFsaWRhdG9ycyhlKXtpZihlKWlmKHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DQUNlcnQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DbGllbnRDZXJ0IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoIm1vZGUiKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZT09PXJuLkJBU0lDKXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTtlbHNlIGlmKGU9PT1ybi5DRVJUSUZJQ0FURVMmJih0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvQ0FDZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhdGhUb0NsaWVudENlcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwpKXtjb25zdCBlPXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJtb2RlIik7ZSYmIWUudmFsdWUmJmUuc2V0VmFsdWUocG4uTk9ORSx7ZW1pdEV2ZW50OiExfSksZT8uZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidXNlcm5hbWUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6bG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czp7dGl0bGU6InRpdGxlIixleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDoiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHNhbWUtcGFkZGluZyB0Yi1mbGV4IGNvbHVtbiIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Rm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5CQVNJQyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJCcm9rZXJTZWN1cml0eVR5cGUuQ0VSVElGSUNBVEVTIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5wYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuQ0EtY2VydGlmaWNhdGUtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DQUNlcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9Qcml2YXRlS2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGF0aFRvQ2xpZW50Q2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibW9kZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAge3sgdHlwZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja31cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2gsc2VsZWN0b3I6IltuZ1N3aXRjaF0iLGlucHV0czpbIm5nU3dpdGNoIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaENhc2Usc2VsZWN0b3I6IltuZ1N3aXRjaENhc2VdIixpbnB1dHM6WyJuZ1N3aXRjaENhc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIlNlY3VyaXR5Q29uZmlnQ29tcG9uZW50IixsbyksSGUoW04oKV0sbG8ucHJvdG90eXBlLCJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmxvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc2VjdXJpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgIHt7IFNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnVzZXJuYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5DRVJUSUZJQ0FURVMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LnBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5DQS1jZXJ0aWZpY2F0ZS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb0NBQ2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb1ByaXZhdGVLZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DbGllbnRDZXJ0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImV4dGVuZENlcnRpZmljYXRlc01vZGVsIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5tb2RlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGVUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyB0eXBlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7dGl0bGU6W3t0eXBlOmF9XSxleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDpbe3R5cGU6YX1dfX0pO2NsYXNzIGNve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5zZWN1cml0eVBvbGljeVR5cGVzPV9uLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3VybDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdGltZW91dEluTWlsbGlzOlsxZTMsW3VlLnJlcXVpcmVkLHVlLm1pbigxZTMpXV0sc2NhblBlcmlvZEluTWlsbGlzOltWLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMWUzKV1dLHBvbGxQZXJpb2RJbk1pbGxpczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oNTApXV0sZW5hYmxlU3Vic2NyaXB0aW9uczpbITAsW11dLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEwMCldXSxzaG93TWFwOlshMSxbXV0sc2VjdXJpdHk6W1VuLkJBU0lDMTI4LFtdXSxpZGVudGl0eTpbXX0pLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5oaWRlTmV3RmllbGRzJiZ0aGlzLnNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoInBvbGxQZXJpb2RJbk1pbGxpcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VydmVyQ29uZmlnRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7Y29uc3R7dGltZW91dEluTWlsbGlzOnQ9MWUzLHNjYW5QZXJpb2RJbk1pbGxpczpuPVYscG9sbFBlcmlvZEluTWlsbGlzOmE9NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6bz0hMCxzdWJDaGVja1BlcmlvZEluTWlsbGlzOmk9MTAwLHNob3dNYXA6cj0hMSxzZWN1cml0eTpzPVVuLkJBU0lDMTI4LGlkZW50aXR5Omw9e319PWU7dGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAucmVzZXQoey4uLmUsdGltZW91dEluTWlsbGlzOnQsc2NhblBlcmlvZEluTWlsbGlzOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsZW5hYmxlU3Vic2NyaXB0aW9uczpvLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6aSxzaG93TWFwOnIsc2VjdXJpdHk6cyxpZGVudGl0eTpsfSx7ZW1pdEV2ZW50OiExfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmNvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czp7aGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmxvLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czpbInRpdGxlIiwiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNTZXJ2ZXJDb25maWdDb21wb25lbnQiLGNvKSxIZShbTigpXSxjby5wcm90b3R5cGUsImhpZGVOZXdGaWVsZHMiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Y28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7aGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dfX0pO2NsYXNzIHBvIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWFwcGluZ1R5cGVzPWZuLHRoaXMuaXNMZWdhY3k9ITF9aW5pdEJhc2ljRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe21hcHBpbmc6W10sc2VydmVyOltdfSl9bWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSl7cmV0dXJue3NlcnZlcjplLnNlcnZlcj8/e30sbWFwcGluZzplLm1hcHBpbmc/P1tdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOmUuc2VydmVyLG1hcHBpbmc6ZS5tYXBwaW5nfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnBvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnBvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNVYUJhc2ljQ29uZmlnQ29tcG9uZW50IixwbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5wbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgbW97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLm1xdHRWZXJzaW9ucz1nbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5icm9rZXJDb25maWdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7aG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSx2ZXJzaW9uOls1LFtdXSxjbGllbnRJZDpbInRiX2d3XyIrc2UoNSksW3VlLnBhdHRlcm4oa3QpXV0sc2VjdXJpdHk6W119KSx0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWdlbmVyYXRlKGUpe3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLmdldChlKT8ucGF0Y2hWYWx1ZSgidGJfZ3dfIitzZSg1KSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2NvbnN0e3ZlcnNpb246dD01LGNsaWVudElkOm49YHRiX2d3XyR7c2UoNSl9YCxzZWN1cml0eTphPXt9fT1lO3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLnJlc2V0KHsuLi5lLHZlcnNpb246dCxjbGllbnRJZDpuLHNlY3VyaXR5OmF9LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnticm9rZXJDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTptbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTptbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9Pm1vKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpsbyxzZWxlY3RvcjoidGItc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJ0aXRsZSIsImV4dGVuZENlcnRpZmljYXRlc01vZGVsIl19LHtraW5kOiJwaXBlIix0eXBlOndhLG5hbWU6ImdldEdhdGV3YXlQb3J0VG9vbHRpcCJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiQnJva2VyQ29uZmlnQ29udHJvbENvbXBvbmVudCIsbW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLHdhXSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5tbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyB1b3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21heE51bWJlck9mV29ya2VyczpbMTAwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSldXSxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOlsxMCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV19KSx0aGlzLndvcmtlcnNDb25maWdGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7Y29uc3R7bWF4TnVtYmVyT2ZXb3JrZXJzOnQsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjpufT1lO3RoaXMud29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5yZXNldCh7bWF4TnVtYmVyT2ZXb3JrZXJzOnR8fDEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOm58fDEwfSx7ZW1pdEV2ZW50OiExfSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwLnZhbGlkP251bGw6e3dvcmtlcnNDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp1byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnVvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+dW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09IndvcmtlcnNDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9Im1heE51bWJlck9mV29ya2VycyJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TnVtYmVyT2ZXb3JrZXJzXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIFtzdHlsZS53aWR0aC4lXT0iNTAiXG4gICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXJcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TWVzc2FnZU51bWJlclBlcldvcmtlciJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiV29ya2Vyc0NvbmZpZ0NvbnRyb2xDb21wb25lbnQiLHVvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnVvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT51bykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBbZm9ybUdyb3VwXT0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiBbc3R5bGUud2lkdGguJV09IjUwIlxuICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TnVtYmVyT2ZXb3JrZXJzIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1udW1iZXItb2Ytd29ya2Vycy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiB0eXBlPSJudW1iZXIiIG1pbj0iMSIgZm9ybUNvbnRyb2xOYW1lPSJtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IndvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS50b3VjaGVkKSJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIGdve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmlzRXhwYW5zaW9uTW9kZT0hMSx0aGlzLmRlZmF1bHRWYWx1ZT1sbi5LZXksdGhpcy5yZXBvcnRTdHJhdGVneVR5cGVzPU9iamVjdC52YWx1ZXMoc24pLHRoaXMuUmVwb3J0VHlwZVRyYW5zbGF0ZU1hcD1jbix0aGlzLlJlcG9ydFN0cmF0ZWd5VHlwZT1zbix0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTdHJhdGVneUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W3t2YWx1ZTpzbi5PblJlcG9ydFBlcmlvZCxkaXNhYmxlZDohMH0sW11dLHJlcG9ydFBlcmlvZDpbe3ZhbHVlOnRoaXMuZGVmYXVsdFZhbHVlLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5Rm9ybUNoYW5nZSgpLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5VG9nZ2xlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmlzRXhwYW5zaW9uTW9kZSYmdGhpcy5zaG93U3RyYXRlZ3lDb250cm9sLnNldFZhbHVlKCEhZSx7ZW1pdEV2ZW50OiExfSksZSYmdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pO2NvbnN0e3R5cGU6dD1zbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6bj10aGlzLmRlZmF1bHRWYWx1ZX09ZT8/e307dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5zZXRWYWx1ZSh7dHlwZTp0LHJlcG9ydFBlcmlvZDpufSx7ZW1pdEV2ZW50OiExfSksdGhpcy5vblR5cGVDaGFuZ2UodCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWxpZHx8dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5kaXNhYmxlZD9udWxsOntyZXBvcnRTdHJhdGVneUZvcm06e3ZhbGlkOiExfX19cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX1vYnNlcnZlU3RyYXRlZ3lGb3JtQ2hhbmdlKCl7dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy5vblR5cGVDaGFuZ2UoZSkpKX1vYnNlcnZlU3RyYXRlZ3lUb2dnbGUoKXt0aGlzLnNob3dTdHJhdGVneUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCksTWUoKCgpPT50aGlzLmlzRXhwYW5zaW9uTW9kZSkpKS5zdWJzY3JpYmUoKGU9PntlPyh0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoInJlcG9ydFBlcmlvZCIpLmFkZFZhbGlkYXRvcnModWUucmVxdWlyZWQpLHRoaXMub25DaGFuZ2UodGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZSkpOih0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKS5yZW1vdmVWYWxpZGF0b3JzKHVlLnJlcXVpcmVkKSx0aGlzLm9uQ2hhbmdlKG51bGwpKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfW9uVHlwZUNoYW5nZShlKXtjb25zdCB0PXRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKTtlPT09c24uT25DaGFuZ2U/dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmlzRXhwYW5zaW9uTW9kZSYmIXRoaXMuc2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZXx8dC5lbmFibGUoe2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpnbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsaW5wdXRzOntpc0V4cGFuc2lvbk1vZGU6ImlzRXhwYW5zaW9uTW9kZSIsZGVmYXVsdFZhbHVlOiJkZWZhdWx0VmFsdWUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Z28pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0lmPSJpc0V4cGFuc2lvbk1vZGUgZWxzZSBkZWZhdWx0TW9kZSIgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U3RyYXRlZ3lDb250cm9sLnZhbHVlIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1N0cmF0ZWd5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InN0cmF0ZWd5RmllbGRzIj48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNb2RlPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjc3RyYXRlZ3lGaWVsZHM+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcG9ydFN0cmF0ZWd5VHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IFJlcG9ydFR5cGVUcmFuc2xhdGVNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUgIT09IFJlcG9ydFN0cmF0ZWd5VHlwZS5PbkNoYW5nZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPlxuICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgIGdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5LnJlcG9ydC1wZXJpb2RcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJSZXBvcnRTdHJhdGVneUNvbXBvbmVudCIsZ28pLEhlKFtOKCldLGdvLnByb3RvdHlwZSwiaXNFeHBhbnNpb25Nb2RlIix2b2lkIDApLEhlKFtCKCldLGdvLnByb3RvdHlwZSwiZGVmYXVsdFZhbHVlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmdvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0icmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdJZj0iaXNFeHBhbnNpb25Nb2RlIGVsc2UgZGVmYXVsdE1vZGUiIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZSI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTdHJhdGVneUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TW9kZT5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWw8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0ic3RyYXRlZ3lGaWVsZHMiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3N0cmF0ZWd5RmllbGRzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiPnt7IFwnZ2F0ZXdheS50eXBlXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiByZXBvcnRTdHJhdGVneVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBSZXBvcnRUeXBlVHJhbnNsYXRlTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBSZXBvcnRTdHJhdGVneVR5cGUuT25DaGFuZ2UiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj5cbiAgICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5cbiAgICAgICAgICBnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5yZXBvcnQtcGVyaW9kXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0UGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntpc0V4cGFuc2lvbk1vZGU6W3t0eXBlOmF9XSxkZWZhdWx0VmFsdWU6W3t0eXBlOmF9XX19KTtjbGFzcyBmb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5pc01hc3Rlcj0hMSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5tb2RidXNEYXRhVHlwZXM9T2JqZWN0LnZhbHVlcyhlYSksdGhpcy5tb2RpZmllclR5cGVzPU9iamVjdC52YWx1ZXMoT24pLHRoaXMud2l0aEZ1bmN0aW9uQ29kZT0hMCx0aGlzLndpdGhSZXBvcnRTdHJhdGVneT0hMCx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXA9bmV3IE1hcCx0aGlzLnNob3dNb2RpZmllcnNNYXA9bmV3IE1hcCx0aGlzLmZ1bmN0aW9uQ29kZXNNYXA9bmV3IE1hcCx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVtdLHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXM9dGEsdGhpcy5Nb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXA9enQsdGhpcy5Nb2RpZmllclR5cGVzTWFwPVJuLHRoaXMuUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWU9bG4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5kZWZhdWx0UmVhZEZ1bmN0aW9uQ29kZXM9WzMsNF0sdGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXM9WzEsMl0sdGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzPVs2LDE2XSx0aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM9WzUsMTVdfW5nT25Jbml0KCl7dGhpcy53aXRoRnVuY3Rpb25Db2RlPSF0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVMsdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3k9ISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuaGlkZU5ld0ZpZWxkcyksdGhpcy5rZXlzTGlzdEZvcm1BcnJheT10aGlzLnByZXBhcmVLZXlzRm9ybUFycmF5KHRoaXMudmFsdWVzKSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPXRoaXMuZ2V0RGVmYXVsdEZ1bmN0aW9uQ29kZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX10cmFja0J5Q29udHJvbElkKGUsdCl7cmV0dXJuIHQudmFsdWUuaWR9YWRkS2V5KCl7Y29uc3QgZT1zZSg1KSx0PXRoaXMuZmIuZ3JvdXAoe3RhZzpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6W3t2YWx1ZToiIixkaXNhYmxlZDohdGhpcy5pc01hc3Rlcn0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbZWEuQllURVMsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbnVsbCxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6WzEsW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6dGhpcy5nZXREZWZhdWx0RnVuY3Rpb25Db2RlcygpWzBdLGRpc2FibGVkOiF0aGlzLndpdGhGdW5jdGlvbkNvZGV9LFt1ZS5yZXF1aXJlZF1dLHJlcG9ydFN0cmF0ZWd5Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3l9XSxtb2RpZmllclR5cGU6W3t2YWx1ZTpPbi5NVUxUSVBMSUVSLGRpc2FibGVkOiEwfV0sbW9kaWZpZXJWYWx1ZTpbe3ZhbHVlOjEsZGlzYWJsZWQ6ITB9LFt1ZS5wYXR0ZXJuKEZ0KV1dLGlkOlt7dmFsdWU6ZSxkaXNhYmxlZDohMH1dfSk7dGhpcy5zaG93TW9kaWZpZXJzTWFwLnNldChlLCExKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KGUsdGhpcy5mYi5jb250cm9sKCExKSksdGhpcy5vYnNlcnZlS2V5RGF0YVR5cGUodCksdGhpcy5vYnNlcnZlRW5hYmxlTW9kaWZpZXIodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5wdXNoKHQpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5yZW1vdmVBdCh0KSx0aGlzLmtleXNMaXN0Rm9ybUFycmF5Lm1hcmtBc0RpcnR5KCl9Y2FuY2VsKCl7dGhpcy5wb3BvdmVyLmhpZGUoKX1hcHBseUtleXNEYXRhKCl7dGhpcy5rZXlzRGF0YUFwcGxpZWQuZW1pdCh0aGlzLmdldEZvcm1WYWx1ZSgpKX1nZXRGb3JtVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXBLZXlzV2l0aE1vZGlmaWVyKHRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5P3RoaXMuY2xlYW5VcEVtcHR5U3RyYXRlZ2llcyh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKTp0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKX1jbGVhblVwRW1wdHlTdHJhdGVnaWVzKGUpe3JldHVybiBlLm1hcCgoZT0+e2NvbnN0e3JlcG9ydFN0cmF0ZWd5OnQsLi4ubn09ZTtyZXR1cm4gdD9lOm59KSl9bWFwS2V5c1dpdGhNb2RpZmllcihlKXtyZXR1cm4gZS5tYXAoKChlLHQpPT57aWYodGhpcy5zaG93TW9kaWZpZXJzTWFwLmdldCh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzW3RdLmdldCgiaWQiKS52YWx1ZSkpe2NvbnN0e21vZGlmaWVyVHlwZTp0LG1vZGlmaWVyVmFsdWU6biwuLi5hfT1lO3JldHVybiB0P3suLi5hLFt0XTpufTphfXJldHVybiBlfSkpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJmUuZm9yRWFjaCgoZT0+e2NvbnN0IG49dGhpcy5jcmVhdGVEYXRhS2V5Rm9ybUdyb3VwKGUpO3RoaXMub2JzZXJ2ZUtleURhdGFUeXBlKG4pLHRoaXMub2JzZXJ2ZUVuYWJsZU1vZGlmaWVyKG4pLHRoaXMuZnVuY3Rpb25Db2Rlc01hcC5zZXQobi5nZXQoImlkIikudmFsdWUsdGhpcy5nZXRGdW5jdGlvbkNvZGVzKGUudHlwZSkpLHQucHVzaChuKX0pKSx0aGlzLmZiLmFycmF5KHQpfWNyZWF0ZURhdGFLZXlGb3JtR3JvdXAoZSl7Y29uc3R7dGFnOnQsdmFsdWU6bix0eXBlOmEsYWRkcmVzczpvLG9iamVjdHNDb3VudDppLGZ1bmN0aW9uQ29kZTpyLG11bHRpcGxpZXI6cyxkaXZpZGVyOmwscmVwb3J0U3RyYXRlZ3k6Y309ZSxwPXNlKDUpLG09dGhpcy5zaG91bGRTaG93TW9kaWZpZXIoYSk7cmV0dXJuIHRoaXMuc2hvd01vZGlmaWVyc01hcC5zZXQocCxtKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KHAsdGhpcy5mYi5jb250cm9sKChzfHxsKSYmbSkpLHRoaXMuZmIuZ3JvdXAoe3RhZzpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbe3ZhbHVlOm4sZGlzYWJsZWQ6IXRoaXMuaXNNYXN0ZXJ9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHR5cGU6W2EsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbyxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6W2ksW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6cixkaXNhYmxlZDohdGhpcy53aXRoRnVuY3Rpb25Db2RlfSxbdWUucmVxdWlyZWRdXSxtb2RpZmllclR5cGU6W3t2YWx1ZTpsP09uLkRJVklERVI6T24uTVVMVElQTElFUixkaXNhYmxlZDohdGhpcy5lbmFibGVNb2RpZmllcnNDb250cm9sTWFwLmdldChwKS52YWx1ZX1dLG1vZGlmaWVyVmFsdWU6W3t2YWx1ZTpzPz9sPz8xLGRpc2FibGVkOiF0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KHApLnZhbHVlfSxbdWUucGF0dGVybihGdCldXSxpZDpbe3ZhbHVlOnAsZGlzYWJsZWQ6ITB9XSxyZXBvcnRTdHJhdGVneTpbe3ZhbHVlOmMsZGlzYWJsZWQ6IXRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5fV19KX1zaG91bGRTaG93TW9kaWZpZXIoZSl7cmV0dXJuISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSkpfW9ic2VydmVLZXlEYXRhVHlwZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHQpfHxlLmdldCgib2JqZWN0c0NvdW50IikucGF0Y2hWYWx1ZShuYVt0XSx7ZW1pdEV2ZW50OiExfSk7Y29uc3Qgbj10aGlzLnNob3VsZFNob3dNb2RpZmllcih0KTt0aGlzLnNob3dNb2RpZmllcnNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlLHQpfSkpfW9ic2VydmVFbmFibGVNb2RpZmllcihlKXt0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KGUuZ2V0KCJpZCIpLnZhbHVlKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT50aGlzLnRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KSkpfXRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KXtjb25zdCBuPWUuZ2V0KCJtb2RpZmllclR5cGUiKSxhPWUuZ2V0KCJtb2RpZmllclZhbHVlIik7dD8obi5lbmFibGUoKSxhLmVuYWJsZSgpKToobi5kaXNhYmxlKCksYS5kaXNhYmxlKCkpfXVwZGF0ZUZ1bmN0aW9uQ29kZXMoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RnVuY3Rpb25Db2Rlcyh0KTt0aGlzLmZ1bmN0aW9uQ29kZXNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLG4uaW5jbHVkZXMoZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnZhbHVlKXx8ZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUoblswXSx7ZW1pdEV2ZW50OiExfSl9Z2V0RnVuY3Rpb25Db2RlcyhlKXtjb25zdCB0PVsuLi5lPT09ZWEuQklUUz90aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM6W10sLi4udGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzXTtpZih0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTKXJldHVybiB0LnNvcnQoKChlLHQpPT5lLXQpKTtjb25zdCBuPVsuLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2Rlc107cmV0dXJuIGU9PT1lYS5CSVRTJiZuLnB1c2goLi4udGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXMpLHRoaXMua2V5c1R5cGU9PT1hYS5SUENfUkVRVUVTVFMmJm4ucHVzaCguLi50KSxuLnNvcnQoKChlLHQpPT5lLXQpKX1nZXREZWZhdWx0RnVuY3Rpb25Db2Rlcygpe3JldHVybiB0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTP3RoaXMuZGVmYXVsdFdyaXRlRnVuY3Rpb25Db2Rlczp0aGlzLmtleXNUeXBlPT09YWEuUlBDX1JFUVVFU1RTP1suLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLmRlZmF1bHRXcml0ZUZ1bmN0aW9uQ29kZXNdOnRoaXMuZGVmYXVsdFJlYWRGdW5jdGlvbkNvZGVzfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Zm8sZGVwczpbe3Rva2VuOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Zm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyIscGFuZWxUaXRsZToicGFuZWxUaXRsZSIsYWRkS2V5VGl0bGU6ImFkZEtleVRpdGxlIixkZWxldGVLZXlUaXRsZToiZGVsZXRlS2V5VGl0bGUiLG5vS2V5c1RleHQ6Im5vS2V5c1RleHQiLGtleXNUeXBlOiJrZXlzVHlwZSIsdmFsdWVzOiJ2YWx1ZXMiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmV0Lk1hdFNsaWRlVG9nZ2xlLHNlbGVjdG9yOiJtYXQtc2xpZGUtdG9nZ2xlIixpbnB1dHM6WyJuYW1lIiwiaWQiLCJsYWJlbFBvc2l0aW9uIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJyZXF1aXJlZCIsImNvbG9yIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJjaGVja2VkIiwiaGlkZUljb24iLCJkaXNhYmxlZEludGVyYWN0aXZlIl0sb3V0cHV0czpbImNoYW5nZSIsInRvZ2dsZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2xpZGVUb2dnbGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsQ29udGVudCxzZWxlY3RvcjoibmctdGVtcGxhdGVbbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dfSl9fWUoIk1vZGJ1c0RhdGFLZXlzUGFuZWxDb21wb25lbnQiLGZvKSxIZShbTigpXSxmby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLEhlKFtOKCldLGZvLnByb3RvdHlwZSwiaGlkZU5ld0ZpZWxkcyIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxUYSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfV0scHJvcERlY29yYXRvcnM6e2lzTWFzdGVyOlt7dHlwZTphfV0saGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dLHBhbmVsVGl0bGU6W3t0eXBlOmF9XSxhZGRLZXlUaXRsZTpbe3R5cGU6YX1dLGRlbGV0ZUtleVRpdGxlOlt7dHlwZTphfV0sbm9LZXlzVGV4dDpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVzOlt7dHlwZTphfV0scG9wb3Zlcjpbe3R5cGU6YX1dLGtleXNEYXRhQXBwbGllZDpbe3R5cGU6bH1dfX0pO2NsYXNzIHlve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy5mYj1lLHRoaXMucG9wb3ZlclNlcnZpY2U9dCx0aGlzLnJlbmRlcmVyPW4sdGhpcy52aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5jZHI9byx0aGlzLnNpbmdsZU1vZGU9ITEsdGhpcy5oaWRlTmV3RmllbGRzPSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5tb2RidXNSZWdpc3RlclR5cGVzPU9iamVjdC52YWx1ZXMoWG4pLHRoaXMubW9kYnVzVmFsdWVLZXlzPU9iamVjdC52YWx1ZXMoYWEpLHRoaXMuTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwPVpuLHRoaXMuTW9kYnVzVmFsdWVLZXk9YWEsdGhpcy5kZXN0cm95JD1uZXcgU2V9bmdPbkluaXQoKXt0aGlzLmluaXRpYWxpemVWYWx1ZXNGb3JtR3JvdXAoKSx0aGlzLm9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2lmKHRoaXMuc2luZ2xlTW9kZSl0aGlzLnZhbHVlc0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoZSkse2VtaXRFdmVudDohMX0pO2Vsc2V7Y29uc3R7aG9sZGluZ19yZWdpc3RlcnM6dCxjb2lsc19pbml0aWFsaXplcjpuLGlucHV0X3JlZ2lzdGVyczphLGRpc2NyZXRlX2lucHV0czpvfT1lO3RoaXMudmFsdWVzRm9ybUdyb3VwLnNldFZhbHVlKHtob2xkaW5nX3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUodCksY29pbHNfaW5pdGlhbGl6ZXI6dGhpcy5nZXRTaW5nbGVSZWdpc3RlclN0YXRlKG4pLGlucHV0X3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoYSksZGlzY3JldGVfaW5wdXRzOnRoaXMuZ2V0U2luZ2xlUmVnaXN0ZXJTdGF0ZShvKX0se2VtaXRFdmVudDohMX0pfXRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMudmFsdWVzRm9ybUdyb3VwLnZhbGlkP251bGw6e3ZhbHVlc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX1nZXRWYWx1ZUdyb3VwKGUsdCl7cmV0dXJuIHQ/dGhpcy52YWx1ZXNGb3JtR3JvdXAuZ2V0KHQpLmdldChlKTp0aGlzLnZhbHVlc0Zvcm1Hcm91cC5nZXQoZSl9bWFuYWdlS2V5cyhlLHQsbixhKXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG89dC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKHRoaXMucG9wb3ZlclNlcnZpY2UuaGFzUG9wb3ZlcihvKSlyZXR1cm4gdm9pZCB0aGlzLnBvcG92ZXJTZXJ2aWNlLmhpZGVQb3BvdmVyKG8pO2NvbnN0IGk9dGhpcy5nZXRWYWx1ZUdyb3VwKG4sYSkscj17dmFsdWVzOmkudmFsdWUsaXNNYXN0ZXI6IXRoaXMuc2luZ2xlTW9kZSxrZXlzVHlwZTpuLHBhbmVsVGl0bGU6b2EuZ2V0KG4pLGFkZEtleVRpdGxlOmlhLmdldChuKSxkZWxldGVLZXlUaXRsZTpyYS5nZXQobiksbm9LZXlzVGV4dDpzYS5nZXQobiksaGlkZU5ld0ZpZWxkczp0aGlzLmhpZGVOZXdGaWVsZHN9LHM9dGhpcy5wb3BvdmVyU2VydmljZS5kaXNwbGF5UG9wb3ZlcihvLHRoaXMucmVuZGVyZXIsdGhpcy52aWV3Q29udGFpbmVyUmVmLGZvLCJsZWZ0Qm90dG9tIiwhMSxudWxsLHIse30se30se30sITApO3MudGJDb21wb25lbnRSZWYuaW5zdGFuY2UucG9wb3Zlcj1zLHMudGJDb21wb25lbnRSZWYuaW5zdGFuY2Uua2V5c0RhdGFBcHBsaWVkLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3MuaGlkZSgpLGkucGF0Y2hWYWx1ZShlKSxpLm1hcmtBc0RpcnR5KCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9KSl9aW5pdGlhbGl6ZVZhbHVlc0Zvcm1Hcm91cCgpe2NvbnN0IGU9KCk9PnRoaXMuZmIuZ3JvdXAodGhpcy5tb2RidXNWYWx1ZUtleXMucmVkdWNlKCgoZSx0KT0+KGVbdF09dGhpcy5mYi5jb250cm9sKFtbXSxbXV0pLGUpKSx7fSkpO3RoaXMuc2luZ2xlTW9kZT90aGlzLnZhbHVlc0Zvcm1Hcm91cD1lKCk6dGhpcy52YWx1ZXNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh0aGlzLm1vZGJ1c1JlZ2lzdGVyVHlwZXMucmVkdWNlKCgodCxuKT0+KHRbbl09ZSgpLHQpKSx7fSkpfW9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl7dGhpcy52YWx1ZXNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1nZXRTaW5nbGVSZWdpc3RlclN0YXRlKGUpe3JldHVybnthdHRyaWJ1dGVzOmU/LmF0dHJpYnV0ZXM/P1tdLHRpbWVzZXJpZXM6ZT8udGltZXNlcmllcz8/W10sYXR0cmlidXRlVXBkYXRlczplPy5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6ZT8ucnBjPz9bXX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp5byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp5byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGlucHV0czp7c2luZ2xlTW9kZToic2luZ2xlTW9kZSIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnlvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwLHNlbGVjdG9yOiJtYXQtYmFzaWMtY2hpcCwgW21hdC1iYXNpYy1jaGlwXSwgbWF0LWNoaXAsIFttYXQtY2hpcF0iLGlucHV0czpbInJvbGUiLCJpZCIsImFyaWEtbGFiZWwiLCJhcmlhLWRlc2NyaXB0aW9uIiwidmFsdWUiLCJjb2xvciIsInJlbW92YWJsZSIsImhpZ2hsaWdodGVkIiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVkIl0sb3V0cHV0czpbInJlbW92ZWQiLCJkZXN0cm95ZWQiXSxleHBvcnRBczpbIm1hdENoaXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwTGlzdGJveCxzZWxlY3RvcjoibWF0LWNoaXAtbGlzdGJveCIsaW5wdXRzOlsibXVsdGlwbGUiLCJhcmlhLW9yaWVudGF0aW9uIiwic2VsZWN0YWJsZSIsImNvbXBhcmVXaXRoIiwicmVxdWlyZWQiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwidmFsdWUiXSxvdXRwdXRzOlsiY2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YnQuVGJJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1pY29uIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsidGJJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6a2Esc2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixpbnB1dHM6WyJ0Yi1lbGxpcHNpcy1jaGlwLWxpc3QiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNWYWx1ZXNDb21wb25lbnQiLHlvKSxIZShbTigpXSx5by5wcm90b3R5cGUsInNpbmdsZU1vZGUiLHZvaWQgMCksSGUoW04oKV0seW8ucHJvdG90eXBlLCJoaWRlTmV3RmllbGRzIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+eW8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGthXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7c2luZ2xlTW9kZTpbe3R5cGU6YX1dLGhpZGVOZXdGaWVsZHM6W3t0eXBlOmF9XX19KTtjbGFzcyBib3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMuaXNNYXN0ZXI9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe2NlcnRmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxrZXlmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0sc2VydmVyX2hvc3RuYW1lOlsiIixbdWUucGF0dGVybihrdCldXSxyZXFjbGljZXJ0Olt7dmFsdWU6ITEsZGlzYWJsZWQ6ITB9XX0pLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVNYXN0ZXJFbmFibGluZygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWUsdGhpcy5kaXNhYmxlZD90aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pOnRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnVwZGF0ZU1hc3RlckVuYWJsaW5nKCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe2NvbnN0e2NlcnRmaWxlOnQscGFzc3dvcmQ6bixrZXlmaWxlOmEsc2VydmVyX2hvc3RuYW1lOm99PWUsaT17Y2VydGZpbGU6dD8/IiIscGFzc3dvcmQ6bj8/IiIsa2V5ZmlsZTphPz8iIixzZXJ2ZXJfaG9zdG5hbWU6bz8/IiIscmVxY2xpY2VydDohIWUucmVxY2xpY2VydH07dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC5yZXNldChpLHtlbWl0RXZlbnQ6ITF9KX11cGRhdGVNYXN0ZXJFbmFibGluZygpe3RoaXMuaXNNYXN0ZXI/KHRoaXMuZGlzYWJsZWR8fHRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZ2V0KCJyZXFjbGljZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0aGlzLmRpc2FibGVkfHx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgicmVxY2xpY2VydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pKX1vYnNlcnZlVmFsdWVDaGFuZ2VzKCl7dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Ym8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfV0sdXNlc09uQ2hhbmdlczohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmhpbnRzLnBhdGgtaW4tb3NcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2VydGZpbGUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucHJpdmF0ZS1rZXktcGF0aFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXlmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSIhaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1ob3N0bmFtZTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJfaG9zdG5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJpc01hc3RlciIgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXFjbGljZXJ0Ij5cbiAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5yZXF1ZXN0LWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1IZShbTigpXSxiby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Ym8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIFtmb3JtR3JvdXBdPSJzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5oaW50cy5wYXRoLWluLW9zXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jYS1jZXJ0XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNlcnRmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnByaXZhdGUta2V5LXBhdGhcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5ZmlsZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iIWlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItaG9zdG5hbWU8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ic2VydmVyX2hvc3RuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmVxY2xpY2VydCI+XG4gICAgICA8bWF0LWxhYmVsPlxuICAgICAgICB7eyBcJ2dhdGV3YXkucmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtbGFiZWw+XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntpc01hc3Rlcjpbe3R5cGU6YX1dfX0pO2NsYXNzIGhvIGV4dGVuZHMgUHtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKHQsbixvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9byx0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c1Bhcml0aWVzPU9iamVjdC52YWx1ZXMoWW4pLHRoaXMubW9kYnVzQnl0ZVNpemVzPSRuLHRoaXMubW9kYnVzQmF1ZHJhdGVzPWxhLHRoaXMubW9kYnVzT3JkZXJUeXBlPU9iamVjdC52YWx1ZXMoSm4pLHRoaXMuTW9kYnVzUHJvdG9jb2xUeXBlPUhuLHRoaXMuTW9kYnVzUGFyaXR5TGFiZWxzTWFwPVFuLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5Nb2RidXNNZXRob2RMYWJlbHNNYXA9S24sdGhpcy5SZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZT1sbix0aGlzLm1vZGJ1c0hlbHBMaW5rPXYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tb2RidXMvI3NlY3Rpb24tbWFzdGVyLWRlc2NyaXB0aW9uLWFuZC1jb25maWd1cmF0aW9uLXBhcmFtZXRlcnMiLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSIsInN0b3BiaXRzIiwiYnl0ZXNpemUiLCJwYXJpdHkiLCJzdHJpY3QiXSx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXM9WyJwb3J0Iiwic2VjdXJpdHkiLCJob3N0Il0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5zaG93U2VjdXJpdHlDb250cm9sPXRoaXMuZmIuY29udHJvbCghMSksdGhpcy5pbml0aWFsaXplU2xhdmVGb3JtR3JvdXAoKSx0aGlzLnVwZGF0ZVNsYXZlRm9ybUdyb3VwKCksdGhpcy51cGRhdGVDb250cm9sc0VuYWJsaW5nKHRoaXMuZGF0YS52YWx1ZS50eXBlKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCksdGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnBhdGNoVmFsdWUoISF0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkmJiFlZSh0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkse30pKX1nZXQgcHJvdG9jb2xUeXBlKCl7cmV0dXJuIHRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5nZXRTbGF2ZVJlc3VsdERhdGEoKSl9aW5pdGlhbGl6ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltIbi5UQ1BdLGhvc3Q6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHBvcnQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbihFdC5NSU4pLHVlLm1heChFdC5NQVgpXV0sc2VyaWFsUG9ydDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbWV0aG9kOltXbi5TT0NLRVQsW3VlLnJlcXVpcmVkXV0sYmF1ZHJhdGU6W3RoaXMubW9kYnVzQmF1ZHJhdGVzWzBdXSxzdG9wYml0czpbMV0sYnl0ZXNpemU6WyRuWzBdXSxwYXJpdHk6W1luLk5vbmVdLHN0cmljdDpbITBdLHVuaXRJZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxkZXZpY2VOYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxkZXZpY2VUeXBlOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0aW1lb3V0OlszNV0sYnl0ZU9yZGVyOltKbi5CSUddLHdvcmRPcmRlcjpbSm4uQklHXSxyZXRyaWVzOlshMF0scmV0cnlPbkVtcHR5OlshMF0scmV0cnlPbkludmFsaWQ6WyEwXSxwb2xsUGVyaW9kOls1ZTMsW3VlLnJlcXVpcmVkXV0sY29ubmVjdEF0dGVtcHRUaW1lTXM6WzVlMyxbdWUucmVxdWlyZWRdXSxjb25uZWN0QXR0ZW1wdENvdW50Ols1LFt1ZS5yZXF1aXJlZF1dLHdhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXM6WzNlNSxbdWUucmVxdWlyZWRdXSx2YWx1ZXM6W3t9XSxzZWN1cml0eTpbe31dfSksdGhpcy5hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpfXVwZGF0ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKHsuLi50aGlzLmRhdGEudmFsdWUscG9ydDp0aGlzLmRhdGEudmFsdWUudHlwZT09PUhuLlNlcmlhbD9udWxsOnRoaXMuZGF0YS52YWx1ZS5wb3J0LHNlcmlhbFBvcnQ6dGhpcy5kYXRhLnZhbHVlLnR5cGU9PT1Ibi5TZXJpYWw/dGhpcy5kYXRhLnZhbHVlLnBvcnQ6IiIsdmFsdWVzOnthdHRyaWJ1dGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVzPz9bXSx0aW1lc2VyaWVzOnRoaXMuZGF0YS52YWx1ZS50aW1lc2VyaWVzPz9bXSxhdHRyaWJ1dGVVcGRhdGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6dGhpcy5kYXRhLnZhbHVlLnJwYz8/W119fSl9b2JzZXJ2ZVR5cGVDaGFuZ2UoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbnRyb2xzRW5hYmxpbmcoZSksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlQ29udHJvbHNFbmFibGluZyhlKXtjb25zdFt0LG5dPWU9PT1Ibi5TZXJpYWw/W3RoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cyx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXNdOlt0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXMsdGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzXTt0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKSx0aGlzLnVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcodGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlKX1vYnNlcnZlU2hvd1NlY3VyaXR5KCl7dGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlU2VjdXJpdHlFbmFibGluZyhlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcoZSl7ZSYmdGhpcy5wcm90b2NvbFR5cGUhPT1Ibi5TZXJpYWw/dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgic2VjdXJpdHkiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmhvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fWUoIk1vZGJ1c1NsYXZlRGlhbG9nQWJzdHJhY3QiLGhvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpvdC5TdG9yZX0se3R5cGU6aXQuUm91dGVyfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOltYZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nUmVmfV19KTtjbGFzcyB4byBleHRlbmRzIGhve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LG4sYSxvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9b31nZXRTbGF2ZVJlc3VsdERhdGEoKXtjb25zdHt2YWx1ZXM6ZSx0eXBlOnQsc2VyaWFsUG9ydDpuLC4uLmF9PXRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAudmFsdWUsbz17Li4uYSx0eXBlOnQsLi4uZX07cmV0dXJuIHQ9PT1Ibi5TZXJpYWwmJihvLnBvcnQ9biksby5yZXBvcnRTdHJhdGVneXx8ZGVsZXRlIG8ucmVwb3J0U3RyYXRlZ3ksb31hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuYWRkQ29udHJvbCgicmVwb3J0U3RyYXRlZ3kiLHRoaXMuZmIuY29udHJvbChudWxsKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp4byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp4byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNTbGF2ZURpYWxvZ0NvbXBvbmVudCIseG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCx5byxibyx3YSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzbGF2ZXMtY29uZmlnLWNvbnRhaW5lciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IFwnZ2F0ZXdheS5zZXJ2ZXItc2xhdmVcJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0ibW9kYnVzSGVscExpbmsiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IFtmb3JtR3JvdXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgIDxkaXYgY2xhc3M9InN0cm9rZWQgdGItZm9ybS1wYW5lbCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItY29ubmVjdGlvbjwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c1Byb3RvY29sVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldCh0eXBlKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgZWxzZSBzZXJpYWxQb3J0IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zZXJpYWwtcG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InNlcmlhbFBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3NlcmlhbFBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZnJhbWVyLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5Lm1ldGhvZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIHByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCA/IG1vZGJ1c1NlcmlhbE1ldGhvZFR5cGVzIDogbW9kYnVzTWV0aG9kVHlwZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJtZXRob2QiPnt7IE1vZGJ1c01ldGhvZExhYmVsc01hcC5nZXQobWV0aG9kKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYmF1ZHJhdGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYmF1ZHJhdGU8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJhdWRyYXRlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHJhdGUgb2YgbW9kYnVzQmF1ZHJhdGVzIiBbdmFsdWVdPSJyYXRlIj57eyByYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGVzaXplXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGVzaXplPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlc2l6ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzaXplIG9mIG1vZGJ1c0J5dGVTaXplcyIgW3ZhbHVlXT0ic2l6ZSI+e3sgc2l6ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdG9wYml0c1wnIHwgdHJhbnNsYXRlIH19IiAgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcGJpdHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InN0b3BiaXRzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wYXJpdHlcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucGFyaXR5PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJwYXJpdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgcGFyaXR5IG9mIG1vZGJ1c1Bhcml0aWVzIiBbdmFsdWVdPSJwYXJpdHkiPnt7IE1vZGJ1c1Bhcml0eUxhYmVsc01hcC5nZXQocGFyaXR5KSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzdHJpY3QiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnN0cmljdFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RyaWN0XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMudW5pdC1pZFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS51bml0LWlkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1bml0SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51bml0LWlkLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwndW5pdElkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtcHJvZmlsZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VUeXBlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0iZGF0YS5oaWRlTmV3RmllbGRzIGVsc2UgcmVwb3J0U3RyYXRlZ3kiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtZGF0YS1vbi1jaGFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZXBvcnRTdHJhdGVneT5cbiAgICAgICAgICA8dGItcmVwb3J0LXN0cmF0ZWd5IFtkZWZhdWx0VmFsdWVdPSJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZS5EZXZpY2UiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0U3RyYXRlZ3kiIFtpc0V4cGFuc2lvbk1vZGVdPSJ0cnVlIi8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdGlvbi10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rpb24tdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlLW9yZGVyXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGUtb3JkZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJ5dGVPcmRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgb3JkZXIgb2YgbW9kYnVzT3JkZXJUeXBlIiBbdmFsdWVdPSJvcmRlciI+e3sgb3JkZXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud29yZC1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS53b3JkLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ3b3JkT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50bHMtY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIGNsYXNzPSJzZWN1cml0eS1jb25maWciIGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHkiPjwvdGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZz5cbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cmllcyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnJldHJpZXNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRyeU9uRW1wdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWVtcHR5XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkludmFsaWQiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb2xsLXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXkucG9sbC1wZXJpb2RcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC10aW1lXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC10aW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjb25uZWN0QXR0ZW1wdFRpbWVNcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdC1hdHRlbXB0LWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC1jb3VudDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRDb3VudCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHNcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9IndhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICA8dGItbW9kYnVzLXZhbHVlcyBbc2luZ2xlTW9kZV09InRydWUiIFtoaWRlTmV3RmllbGRzXT0iZGF0YS5oaWRlTmV3RmllbGRzIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmludmFsaWQgfHwgIXNsYXZlQ29uZmlnRm9ybUdyb3VwLmRpcnR5Ij5cbiAgICAgIHt7IGRhdGEuYnV0dG9uVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuc2xhdmVzLWNvbmZpZy1jb250YWluZXJ7d2lkdGg6ODB2dzttYXgtd2lkdGg6OTAwcHh9Omhvc3QgLnNsYXZlLW5hbWUtbGFiZWx7bWFyZ2luLXJpZ2h0OjE2cHg7Y29sb3I6IzAwMDAwMGRlfTpob3N0IC5maXhlZC10aXRsZS13aWR0aC0yNjB7bWluLXdpZHRoOjI2MHB4fTpob3N0IDo6bmctZGVlcCAuc2VjdXJpdHktY29uZmlnIC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6MjMwcHh9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn1dfSk7Y2xhc3Mgdm8gZXh0ZW5kcyBob3tjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKGUsdCxuLGEsbyksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnJvdXRlcj1uLHRoaXMuZGF0YT1hLHRoaXMuZGlhbG9nUmVmPW99Z2V0U2xhdmVSZXN1bHREYXRhKCl7Y29uc3R7dmFsdWVzOmUsdHlwZTp0LHNlcmlhbFBvcnQ6biwuLi5hfT10aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlLG89ey4uLmEsdHlwZTp0LC4uLmV9O3JldHVybiB0PT09SG4uU2VyaWFsJiYoby5wb3J0PW4pLG99YWRkRmllbGRzVG9Gb3JtR3JvdXAoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmFkZENvbnRyb2woInNlbmREYXRhT25seU9uQ2hhbmdlIix0aGlzLmZiLmNvbnRyb2woITEpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnZvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lTbGF2ZURpYWxvZ0NvbXBvbmVudCIsdm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktc2xhdmUtZGlhbG9nIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQseW8sYm8sd2EsZ29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9XX0pO2NsYXNzIHdve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy50cmFuc2xhdGU9ZSx0aGlzLmRpYWxvZz10LHRoaXMuZGlhbG9nU2VydmljZT1uLHRoaXMuZmI9YSx0aGlzLmNkcj1vLHRoaXMuaXNMZWdhY3k9ITEsdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2g9dGhpcy5mYi5jb250cm9sKCIiLHtub25OdWxsYWJsZTohMH0pLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFzdGVyRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3NsYXZlczp0aGlzLmZiLmFycmF5KFtdKX0pLHRoaXMuZGF0YVNvdXJjZT1uZXcgQ299Z2V0IHNsYXZlcygpe3JldHVybiB0aGlzLm1hc3RlckZvcm1Hcm91cC5nZXQoInNsYXZlcyIpfW5nT25Jbml0KCl7dGhpcy5tYXN0ZXJGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlVGFibGVEYXRhKGUuc2xhdmVzKSx0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50ZXh0U2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFZlKDE1MCksQmUoKChlLHQpPT4oZT8/IiIpPT09dC50cmltKCkpKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSxlLnRyaW0oKSkpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5zbGF2ZXMuY2xlYXIoKSx0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKGUuc2xhdmVzKX1lbnRlckZpbHRlck1vZGUoKXt0aGlzLnRleHRTZWFyY2hNb2RlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtjb25zdCBlPXRoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50O2UuZm9jdXMoKSxlLnNldFNlbGVjdGlvblJhbmdlKDAsMCl9ZXhpdEZpbHRlck1vZGUoKXt0aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1pZSh0KSxhPW4/dGhpcy5zbGF2ZXMuYXQodCkudmFsdWU6e307dGhpcy5nZXRTbGF2ZURpYWxvZyhhLG4/ImFjdGlvbi5hcHBseSI6ImFjdGlvbi5hZGQiKS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihuP3RoaXMuc2xhdmVzLmF0KHQpLnBhdGNoVmFsdWUoZSk6dGhpcy5zbGF2ZXMucHVzaCh0aGlzLmZiLmNvbnRyb2woZSkpLHRoaXMubWFzdGVyRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfWdldFNsYXZlRGlhbG9nKGUsdCl7cmV0dXJuIHRoaXMuaXNMZWdhY3k/dGhpcy5kaWFsb2cub3Blbih2byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e3ZhbHVlOmUsaGlkZU5ld0ZpZWxkczohMCxidXR0b25UaXRsZTp0fX0pOnRoaXMuZGlhbG9nLm9wZW4oeG8se2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOnt2YWx1ZTplLGJ1dHRvblRpdGxlOnQsaGlkZU5ld0ZpZWxkczohMX19KX1kZWxldGVTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtc2xhdmUtdGl0bGUiKSwiIix0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJih0aGlzLnNsYXZlcy5yZW1vdmVBdCh0KSx0aGlzLm1hc3RlckZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpKX0pKX11cGRhdGVUYWJsZURhdGEoZSx0KXt0JiYoZT1lLmZpbHRlcigoZT0+T2JqZWN0LnZhbHVlcyhlKS5zb21lKChlPT5lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpKSkpKSksdGhpcy5kYXRhU291cmNlLmxvYWREYXRhKGUpfXB1c2hEYXRhQXNGb3JtQXJyYXlzKGUpe2U/Lmxlbmd0aCYmZS5mb3JFYWNoKChlPT50aGlzLnNsYXZlcy5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOndvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpYLkRpYWxvZ1NlcnZpY2V9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOndvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOntpc0xlZ2FjeToiaXNMZWdhY3kifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6InNlYXJjaElucHV0RmllbGQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInNlYXJjaElucHV0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJwaXBlIix0eXBlOl8uQXN5bmNQaXBlLG5hbWU6ImFzeW5jIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpodC5NYXRNZW51LHNlbGVjdG9yOiJtYXQtbWVudSIsaW5wdXRzOlsiYmFja2Ryb3BDbGFzcyIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwieFBvc2l0aW9uIiwieVBvc2l0aW9uIiwib3ZlcmxhcFRyaWdnZXIiLCJoYXNCYWNrZHJvcCIsImNsYXNzIiwiY2xhc3NMaXN0Il0sb3V0cHV0czpbImNsb3NlZCIsImNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6aHQuTWF0TWVudVRyaWdnZXIsc2VsZWN0b3I6IlttYXQtbWVudS10cmlnZ2VyLWZvcl0sIFttYXRNZW51VHJpZ2dlckZvcl0iLGlucHV0czpbIm1hdC1tZW51LXRyaWdnZXItZm9yIiwibWF0TWVudVRyaWdnZXJGb3IiLCJtYXRNZW51VHJpZ2dlckRhdGEiLCJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyJdLG91dHB1dHM6WyJtZW51T3BlbmVkIiwib25NZW51T3BlbiIsIm1lbnVDbG9zZWQiLCJvbk1lbnVDbG9zZSJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFRhYmxlLHNlbGVjdG9yOiJtYXQtdGFibGUsIHRhYmxlW21hdC10YWJsZV0iLGV4cG9ydEFzOlsibWF0VGFibGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGxEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJSb3dEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJSb3dEZWZdIixpbnB1dHM6WyJtYXRIZWFkZXJSb3dEZWYiLCJtYXRIZWFkZXJSb3dEZWZTdGlja3kiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENvbHVtbkRlZixzZWxlY3RvcjoiW21hdENvbHVtbkRlZl0iLGlucHV0czpbIm1hdENvbHVtbkRlZiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbERlZixzZWxlY3RvcjoiW21hdENlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdFJvd0RlZixzZWxlY3RvcjoiW21hdFJvd0RlZl0iLGlucHV0czpbIm1hdFJvd0RlZkNvbHVtbnMiLCJtYXRSb3dEZWZXaGVuIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsLHNlbGVjdG9yOiJtYXQtaGVhZGVyLWNlbGwsIHRoW21hdC1oZWFkZXItY2VsbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbCxzZWxlY3RvcjoibWF0LWNlbGwsIHRkW21hdC1jZWxsXSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRIZWFkZXJSb3csc2VsZWN0b3I6Im1hdC1oZWFkZXItcm93LCB0clttYXQtaGVhZGVyLXJvd10iLGV4cG9ydEFzOlsibWF0SGVhZGVyUm93Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRSb3csc2VsZWN0b3I6Im1hdC1yb3csIHRyW21hdC1yb3ddIixleHBvcnRBczpbIm1hdFJvdyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFNob3dIaWRlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeFNob3ddLCBbZnhTaG93LnByaW50XSwgIFtmeFNob3cueHNdLCBbZnhTaG93LnNtXSwgW2Z4U2hvdy5tZF0sIFtmeFNob3cubGddLCBbZnhTaG93LnhsXSwgIFtmeFNob3cubHQtc21dLCBbZnhTaG93Lmx0LW1kXSwgW2Z4U2hvdy5sdC1sZ10sIFtmeFNob3cubHQteGxdLCAgW2Z4U2hvdy5ndC14c10sIFtmeFNob3cuZ3Qtc21dLCBbZnhTaG93Lmd0LW1kXSwgW2Z4U2hvdy5ndC1sZ10sICBbZnhIaWRlXSwgW2Z4SGlkZS5wcmludF0sICBbZnhIaWRlLnhzXSwgW2Z4SGlkZS5zbV0sIFtmeEhpZGUubWRdLCBbZnhIaWRlLmxnXSwgW2Z4SGlkZS54bF0sICBbZnhIaWRlLmx0LXNtXSwgW2Z4SGlkZS5sdC1tZF0sIFtmeEhpZGUubHQtbGddLCBbZnhIaWRlLmx0LXhsXSwgIFtmeEhpZGUuZ3QteHNdLCBbZnhIaWRlLmd0LXNtXSwgW2Z4SGlkZS5ndC1tZF0sIFtmeEhpZGUuZ3QtbGddIixpbnB1dHM6WyJmeFNob3ciLCJmeFNob3cucHJpbnQiLCJmeFNob3cueHMiLCJmeFNob3cuc20iLCJmeFNob3cubWQiLCJmeFNob3cubGciLCJmeFNob3cueGwiLCJmeFNob3cubHQtc20iLCJmeFNob3cubHQtbWQiLCJmeFNob3cubHQtbGciLCJmeFNob3cubHQteGwiLCJmeFNob3cuZ3QteHMiLCJmeFNob3cuZ3Qtc20iLCJmeFNob3cuZ3QtbWQiLCJmeFNob3cuZ3QtbGciLCJmeEhpZGUiLCJmeEhpZGUucHJpbnQiLCJmeEhpZGUueHMiLCJmeEhpZGUuc20iLCJmeEhpZGUubWQiLCJmeEhpZGUubGciLCJmeEhpZGUueGwiLCJmeEhpZGUubHQtc20iLCJmeEhpZGUubHQtbWQiLCJmeEhpZGUubHQtbGciLCJmeEhpZGUubHQteGwiLCJmeEhpZGUuZ3QteHMiLCJmeEhpZGUuZ3Qtc20iLCJmeEhpZGUuZ3QtbWQiLCJmeEhpZGUuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNNYXN0ZXJUYWJsZUNvbXBvbmVudCIsd28pLEhlKFt4dCgpXSx3by5wcm90b3R5cGUsImlzTGVnYWN5Iix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntzZWFyY2hJbnB1dEZpZWxkOlt7dHlwZTpvLGFyZ3M6WyJzZWFyY2hJbnB1dCJdfV0saXNMZWdhY3k6W3t0eXBlOmF9XX19KTtjbGFzcyBDbyBleHRlbmRzIFJ7Y29uc3RydWN0b3IoKXtzdXBlcigpfX1lKCJTbGF2ZXNEYXRhc291cmNlIixDbyk7Y2xhc3MgVG8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5lbmFibGVTbGF2ZUNvbnRyb2w9bmV3IHllKCExKSx0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVTbGF2ZUVuYWJsaW5nKGUpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzbGF2ZSIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohIXRoaXMub25DaGFuZ2V9KX0pKX13cml0ZVZhbHVlKGUpe3N1cGVyLndyaXRlVmFsdWUoZSksdGhpcy5vbkVuYWJsZVNsYXZlQ29udHJvbChlKX12YWxpZGF0ZSgpe2NvbnN0e21hc3RlcjplLHNsYXZlOnR9PXRoaXMuYmFzaWNGb3JtR3JvdXAudmFsdWUsbj0hZT8uc2xhdmVzPy5sZW5ndGgmJihlZSh0LHt9KXx8IXQpO3JldHVybiF0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkfHxuP3tiYXNpY0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fTpudWxsfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXN0ZXI6W10sc2xhdmU6W119KX11cGRhdGVTbGF2ZUVuYWJsaW5nKGUpe2U/dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInNsYXZlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgic2xhdmUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1vbkVuYWJsZVNsYXZlQ29udHJvbChlKXt0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC5zZXRWYWx1ZSghIWUuc2xhdmUmJiFlZShlLnNsYXZlLHt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpUbyxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6VG8sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnR9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdEaXJlY3RpdmUiLFRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W119KTtjbGFzcyBTb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNQcm90b2NvbExhYmVsc01hcD16bix0aGlzLk1vZGJ1c01ldGhvZExhYmVsc01hcD1Lbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c09yZGVyVHlwZT1PYmplY3QudmFsdWVzKEpuKSx0aGlzLk1vZGJ1c1Byb3RvY29sVHlwZT1Ibix0aGlzLm1vZGJ1c0JhdWRyYXRlcz1sYSx0aGlzLmlzU2xhdmVFbmFibGVkPSExLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSJdLHRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cz1bInBvcnQiLCJzZWN1cml0eSIsImhvc3QiXSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0huLlRDUF0saG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSxzZXJpYWxQb3J0OlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2Q6W1duLlNPQ0tFVF0sdW5pdElkOltudWxsLFt1ZS5yZXF1aXJlZF1dLGJhdWRyYXRlOlt0aGlzLm1vZGJ1c0JhdWRyYXRlc1swXV0sZGV2aWNlTmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlVHlwZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9sbFBlcmlvZDpbNWUzLFt1ZS5yZXF1aXJlZF1dLHNlbmREYXRhVG9UaGluZ3NCb2FyZDpbITFdLGJ5dGVPcmRlcjpbSm4uQklHXSx3b3JkT3JkZXI6W0puLkJJR10sc2VjdXJpdHk6W10saWRlbnRpdHk6dGhpcy5mYi5ncm91cCh7dmVuZG9yTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdENvZGU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHZlbmRvclVybDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdE5hbWU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLG1vZGVsTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx2YWx1ZXM6W119KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCl9Z2V0IHByb3RvY29sVHlwZSgpe3JldHVybiB0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzbGF2ZUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5wYXRjaFZhbHVlKCEhZS5zZWN1cml0eSYmIWVlKGUuc2VjdXJpdHkse30pKSx0aGlzLnVwZGF0ZVNsYXZlQ29uZmlnKGUpfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5pc1NsYXZlRW5hYmxlZD0hZSx0aGlzLnVwZGF0ZUZvcm1FbmFibGVTdGF0ZSgpfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PntlLnR5cGU9PT1Ibi5TZXJpYWwmJihlLnBvcnQ9ZS5zZXJpYWxQb3J0LGRlbGV0ZSBlLnNlcmlhbFBvcnQpLHRoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlRm9ybUVuYWJsZVN0YXRlKCksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUVuYWJsZVN0YXRlKCl7dGhpcy5pc1NsYXZlRW5hYmxlZD8odGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpLHRoaXMudXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCksdGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZSh0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWUpfW9ic2VydmVTaG93U2VjdXJpdHkoKXt0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZShlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxlKGUpe2UmJnRoaXMuaXNTbGF2ZUVuYWJsZWQmJnRoaXMucHJvdG9jb2xUeXBlIT09SG4uU2VyaWFsP3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJzZWN1cml0eSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCl7Y29uc3QgZT10aGlzLnByb3RvY29sVHlwZT09PUhuLlNlcmlhbCx0PWU/dGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cyxuPWU/dGhpcy50Y3BVZHBTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5czt0aGlzLmlzU2xhdmVFbmFibGVkJiZ0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKX11cGRhdGVTbGF2ZUNvbmZpZyhlKXtjb25zdHt0eXBlOnQ9SG4uVENQLG1ldGhvZDpuPVduLlJUVSx1bml0SWQ6YT0wLGRldmljZU5hbWU6bz0iIixkZXZpY2VUeXBlOmk9IiIscG9sbFBlcmlvZDpyPTVlMyxzZW5kRGF0YVRvVGhpbmdzQm9hcmQ6cz0hMSxieXRlT3JkZXI6bD1Kbi5CSUcsd29yZE9yZGVyOmM9Sm4uQklHLHNlY3VyaXR5OnA9e30saWRlbnRpdHk6bT17dmVuZG9yTmFtZToiIixwcm9kdWN0Q29kZToiIix2ZW5kb3JVcmw6IiIscHJvZHVjdE5hbWU6IiIsbW9kZWxOYW1lOiIifSx2YWx1ZXM6ZD17fSxiYXVkcmF0ZTp1PXRoaXMubW9kYnVzQmF1ZHJhdGVzWzBdLGhvc3Q6Zz0iIixwb3J0OmY9bnVsbH09ZSx5PXt0eXBlOnQsbWV0aG9kOm4sdW5pdElkOmEsZGV2aWNlTmFtZTpvLGRldmljZVR5cGU6aSxwb2xsUGVyaW9kOnIsc2VuZERhdGFUb1RoaW5nc0JvYXJkOiEhcyxieXRlT3JkZXI6bCx3b3JkT3JkZXI6YyxzZWN1cml0eTpwLGlkZW50aXR5Om0sdmFsdWVzOmQsYmF1ZHJhdGU6dSxob3N0OnQ9PT1Ibi5TZXJpYWw/IiI6Zyxwb3J0OnQ9PT1Ibi5TZXJpYWw/bnVsbDpmLHNlcmlhbFBvcnQ6dD09PUhuLlNlcmlhbD9mOiIifTt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnNldFZhbHVlKHkse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnlvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtdmFsdWVzIixpbnB1dHM6WyJzaW5nbGVNb2RlIiwiaGlkZU5ld0ZpZWxkcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJpc01hc3RlciJdfSx7a2luZDoicGlwZSIsdHlwZTp3YSxuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+U28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELHlvLGJvLHdhLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dfSk7Y2xhc3Mga28gZXh0ZW5kcyBUb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc0xlZ2FjeT0hMX1tYXBDb25maWdUb0Zvcm1WYWx1ZSh7bWFzdGVyOmUsc2xhdmU6dH0pe3JldHVybnttYXN0ZXI6ZT8uc2xhdmVzP2U6e3NsYXZlczpbXX0sc2xhdmU6dD8/e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTprbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1iYXNpYy1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5rbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpTbyxzZWxlY3RvcjoidGItbW9kYnVzLXNsYXZlLWNvbmZpZyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d28sc2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGlucHV0czpbImlzTGVnYWN5Il19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdDb21wb25lbnQiLGtvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmtvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+a28pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBMbyBleHRlbmRzIFRve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzTGVnYWN5PSEwfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXI/LnNsYXZlcz9lLm1hc3Rlcjp7c2xhdmVzOltdfSxzbGF2ZTplLnNsYXZlP2hhLm1hcFNsYXZlVG9VcGdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6TG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubWFzdGVyLWNvbm5lY3Rpb25zXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDx0Yi1tb2RidXMtbWFzdGVyLXRhYmxlIFtpc0xlZ2FjeV09ImlzTGVnYWN5IiBmb3JtQ29udHJvbE5hbWU9Im1hc3RlciI+PC90Yi1tb2RidXMtbWFzdGVyLXRhYmxlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIiPnt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMtc2VydmVyXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIFtmb3JtQ29udHJvbF09ImVuYWJsZVNsYXZlQ29udHJvbCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8dGItbW9kYnVzLXNsYXZlLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNsYXZlIj48L3RiLW1vZGJ1cy1zbGF2ZS1jb25maWc+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlNvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2xhdmUtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3byxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOlsiaXNMZWdhY3kiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lCYXNpY0NvbmZpZ0NvbXBvbmVudCIsTG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBGbyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm1hcHBpbmdUeXBlcz1mbix0aGlzLmlzTGVnYWN5PSEwfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXBwaW5nOltdLHNlcnZlcjpbXX0pfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybntzZXJ2ZXI6ZS5zZXJ2ZXI/eGEubWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZS5zZXJ2ZXIpOnt9LG1hcHBpbmc6ZS5zZXJ2ZXI/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUuc2VydmVyLm1hcHBpbmcpOltdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24oZSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Rm8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Rm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+Rm8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5GbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgSW8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5NYXBwaW5nVHlwZT1mbn1pbml0QmFzaWNGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7bWFwcGluZzpbXSxyZXF1ZXN0c01hcHBpbmc6W10sYnJva2VyOltdLHdvcmtlcnM6W119KX1nZXRSZXF1ZXN0RGF0YUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGxlKGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChuPT57Zm9yKGNvbnN0IGEgb2YgZVtuXSl0LnB1c2goe3JlcXVlc3RUeXBlOm4scmVxdWVzdFZhbHVlOmF9KX0pKSx0fWdldFJlcXVlc3REYXRhT2JqZWN0KGUpe3JldHVybiBlLnJlZHVjZSgoKGUse3JlcXVlc3RUeXBlOnQscmVxdWVzdFZhbHVlOm59KT0+KGVbdF0ucHVzaChuKSxlKSkse2Nvbm5lY3RSZXF1ZXN0czpbXSxkaXNjb25uZWN0UmVxdWVzdHM6W10sYXR0cmlidXRlUmVxdWVzdHM6W10sYXR0cmlidXRlVXBkYXRlczpbXSxzZXJ2ZXJTaWRlUnBjOltdfSl9Z2V0QnJva2VyTWFwcGVkVmFsdWUoZSx0KXtyZXR1cm57Li4uZSxtYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnM/PzEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcj8/MTB9fXdyaXRlVmFsdWUoZSl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLm1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOklvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6SW8sZGVjb3JhdG9yczpbe3R5cGU6c31dfSk7Y2xhc3MgQW8gZXh0ZW5kcyBJb3ttYXBDb25maWdUb0Zvcm1WYWx1ZShlKXtjb25zdHticm9rZXI6dCxtYXBwaW5nOm49W10sY29ubmVjdFJlcXVlc3RzOmE9W10sZGlzY29ubmVjdFJlcXVlc3RzOm89W10sYXR0cmlidXRlUmVxdWVzdHM6aT1bXSxhdHRyaWJ1dGVVcGRhdGVzOnI9W10sc2VydmVyU2lkZVJwYzpzPVtdfT1lLGw9bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmEsZGlzY29ubmVjdFJlcXVlc3RzOm8sYXR0cmlidXRlUmVxdWVzdHM6aSxhdHRyaWJ1dGVVcGRhdGVzOnIsc2VydmVyU2lkZVJwYzpzfSk7cmV0dXJue3dvcmtlcnM6dCYmKHQubWF4TnVtYmVyT2ZXb3JrZXJzfHx0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXIpP3ttYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnMsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjp0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJ9Ont9LG1hcHBpbmc6bWEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKG4pfHxbXSxicm9rZXI6dHx8e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShsKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e30saT1vPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fTtyZXR1cm57YnJva2VyOnRoaXMuZ2V0QnJva2VyTWFwcGVkVmFsdWUodCxuKSxtYXBwaW5nOm1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGEpLC4uLm1hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihpKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpBbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuYnJva2VyLmNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJicm9rZXIiPjwvdGItYnJva2VyLWNvbmZpZy1jb250cm9sPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZGF0YS1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJtYXBwaW5nIiBbcmVxdWlyZWRdPSJ0cnVlIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5EQVRBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RzTWFwcGluZyIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuUkVRVUVTVFMiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LndvcmtlcnMtc2V0dGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICA8dGItd29ya2Vycy1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9IndvcmtlcnMiPjwvdGItd29ya2Vycy1jb25maWctY29udHJvbD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuPC9tYXQtdGFiLWdyb3VwPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dW8sc2VsZWN0b3I6InRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm1vLHNlbGVjdG9yOiJ0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLXRhYmxlIixpbnB1dHM6WyJyZXF1aXJlZCIsIm1hcHBpbmdUeXBlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxsbyx1byxtbyxyb10sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmJyb2tlci5jb25uZWN0aW9uXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItYnJva2VyLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0iYnJva2VyIj48L3RiLWJyb2tlci1jb25maWctY29udHJvbD5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuREFUQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkucmVxdWVzdHMtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0c01hcHBpbmciIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS53b3JrZXJzLXNldHRpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgPHRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJ3b3JrZXJzIj48L3RiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2w+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2hlaWdodDoxMDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBObyBleHRlbmRzIElve21hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe2NvbnN0e2Jyb2tlcjp0LG1hcHBpbmc6bj1bXSxyZXF1ZXN0c01hcHBpbmc6YX09ZTtyZXR1cm57d29ya2Vyczp0JiYodC5tYXhOdW1iZXJPZldvcmtlcnN8fHQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcik/e21heE51bWJlck9mV29ya2Vyczp0Lm1heE51bWJlck9mV29ya2VycyxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcn06e30sbWFwcGluZzpuPz9bXSxicm9rZXI6dD8/e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShhKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e307cmV0dXJue2Jyb2tlcjp0aGlzLmdldEJyb2tlck1hcHBlZFZhbHVlKHQsbiksbWFwcGluZzphLHJlcXVlc3RzTWFwcGluZzpvPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpObyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpObyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtYmFzaWMtY29uZmlnIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Tm8pKSxtdWx0aTohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiLHNlbGVjdG9yOiJtYXQtdGFiIixpbnB1dHM6WyJkaXNhYmxlZCIsImxhYmVsIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImxhYmVsQ2xhc3MiLCJib2R5Q2xhc3MiXSxleHBvcnRBczpbIm1hdFRhYiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiR3JvdXAsc2VsZWN0b3I6Im1hdC10YWItZ3JvdXAiLGlucHV0czpbImNvbG9yIiwiZml0SW5rQmFyVG9Db250ZW50IiwibWF0LXN0cmV0Y2gtdGFicyIsImR5bmFtaWNIZWlnaHQiLCJzZWxlY3RlZEluZGV4IiwiaGVhZGVyUG9zaXRpb24iLCJhbmltYXRpb25EdXJhdGlvbiIsImNvbnRlbnRUYWJJbmRleCIsImRpc2FibGVQYWdpbmF0aW9uIiwiZGlzYWJsZVJpcHBsZSIsInByZXNlcnZlQ29udGVudCIsImJhY2tncm91bmRDb2xvciIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiXSxvdXRwdXRzOlsic2VsZWN0ZWRJbmRleENoYW5nZSIsImZvY3VzQ2hhbmdlIiwiYW5pbWF0aW9uRG9uZSIsInNlbGVjdGVkVGFiQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1byxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6bW8sc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5vLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tcXR0LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8sdW8sbW8scm9dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgTW97aXNFcnJvclN0YXRlKGUpe3JldHVybiBlJiZlLmludmFsaWR9fWUoIkZvcmNlRXJyb3JTdGF0ZU1hdGNoZXIiLE1vKTtjbGFzcyBFbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5mYj10LHRoaXMudHJhbnNsYXRlPW4sdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWEsdGhpcy5kaWFsb2dTZXJ2aWNlPW8sdGhpcy5kaWFsb2c9aSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZT1yLHRoaXMuem9uZT1zLHRoaXMudXRpbHM9bCx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1jLHRoaXMuY2Q9cCx0aGlzLkNvbm5lY3RvclR5cGU9X3QsdGhpcy5hbGxvd0Jhc2ljQ29uZmlnPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5nYXRld2F5TG9nTGV2ZWw9T2JqZWN0LnZhbHVlcyhNdCksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiZW5hYmxlZCIsImtleSIsInR5cGUiLCJzeW5jU3RhdHVzIiwiZXJyb3JzIiwiYWN0aW9ucyJdLHRoaXMuR2F0ZXdheUNvbm5lY3RvclR5cGVzVHJhbnNsYXRlc01hcD1IdCx0aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcz1vbix0aGlzLlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlPWxuLHRoaXMubW9kZT10aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyx0aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3Q9bmV3IFNlLHRoaXMuYWN0aXZlRGF0YT1bXSx0aGlzLmluYWN0aXZlRGF0YT1bXSx0aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGE9W10sdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy5vbkVycm9yc1VwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfX0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0PW5ldyBTZSx0aGlzLmluaXREYXRhU291cmNlcygpLHRoaXMuaW5pdENvbm5lY3RvckZvcm0oKSx0aGlzLm9ic2VydmVBdHRyaWJ1dGVDaGFuZ2UoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGFTb3VyY2Uuc29ydD10aGlzLnNvcnQsdGhpcy5kYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3I9dGhpcy5nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCksdGhpcy5jdHguJHNjb3BlLmdhdGV3YXlDb25uZWN0b3JzPXRoaXMsdGhpcy5sb2FkQ29ubmVjdG9ycygpLHRoaXMubG9hZEdhdGV3YXlTdGF0ZSgpLHRoaXMub2JzZXJ2ZU1vZGVDaGFuZ2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfW9uU2F2ZUNvbm5lY3Rvcigpe3RoaXMuc2F2ZUNvbm5lY3Rvcih0aGlzLmdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKHRoaXMuY29ubmVjdG9yRm9ybS52YWx1ZSksITEpfXNhdmVDb25uZWN0b3IoZSx0PSEwKXtjb25zdCBuPXR8fHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyh0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSk/TC5TSEFSRURfU0NPUEU6TC5TRVJWRVJfU0NPUEU7QWUodGhpcy5nZXRFbnRpdHlBdHRyaWJ1dGVUYXNrcyhlLG4pKS5waXBlKE9lKDEpKS5zdWJzY3JpYmUoKG49Pnt0aGlzLnNob3dUb2FzdCh0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuY29ubmVjdG9yLWNyZWF0ZWQiKTp0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmNvbm5lY3Rvci11cGRhdGVkIikpLHRoaXMuaW5pdGlhbENvbm5lY3Rvcj1lLHRoaXMudXBkYXRlRGF0YSghMCksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9KSl9Z2V0RW50aXR5QXR0cmlidXRlVGFza3MoZSx0KXtjb25zdCBuPVtdLGE9W3trZXk6ZS5uYW1lLHZhbHVlOmV9XSxvPVtdLGk9IXRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TSEFSRURfU0NPUEV8fCF0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TRVJWRVJfU0NPUEUscj10aGlzLmluaXRpYWxDb25uZWN0b3ImJnRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lIT09ZS5uYW1lO3JldHVybiByJiYoby5wdXNoKHtrZXk6dGhpcy5pbml0aWFsQ29ubmVjdG9yLm5hbWV9KSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCExKSksaSYmKHQ9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnMucHVzaChlLm5hbWUpOnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLnB1c2goZS5uYW1lKSksKHJ8fGkpJiZuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2sodCkpLG4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsdCxhKSksby5sZW5ndGgmJm4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSx0LG8pKSxufWdldFNhdmVFbnRpdHlBdHRyaWJ1dGVzVGFzayhlKXtjb25zdCB0PWU9PT1MLlNIQVJFRF9TQ09QRT8iYWN0aXZlX2Nvbm5lY3RvcnMiOiJpbmFjdGl2ZV9jb25uZWN0b3JzIixuPWU9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5zYXZlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxlLFt7a2V5OnQsdmFsdWU6bn1dKX1yZW1vdmVDb25uZWN0b3JGcm9tTGlzdChlLHQpe2NvbnN0IG49dD90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMsYT1uLmluZGV4T2YoZSk7LTEhPT1hJiZuLnNwbGljZShhLDEpfWdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKGUpe2NvbnN0IHQ9ey4uLmV9O3JldHVybiB0LmNvbmZpZ3VyYXRpb249YCR7Y2UodC5uYW1lKX0uanNvbmAsZGVsZXRlIHQuYmFzaWNDb25maWcsdC50eXBlIT09X3QuR1JQQyYmZGVsZXRlIHQua2V5LHQudHlwZSE9PV90LkNVU1RPTSYmZGVsZXRlIHQuY2xhc3MsdC50eXBlPT09X3QuTU9EQlVTJiZ0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0odC5jb25maWdWZXJzaW9uKSYmKHQucmVwb3J0U3RyYXRlZ3l8fCh0LnJlcG9ydFN0cmF0ZWd5PXt0eXBlOnNuLk9uUmVwb3J0UGVyaW9kLHJlcG9ydFBlcmlvZDpsbi5Db25uZWN0b3J9LGRlbGV0ZSB0LnNlbmREYXRhT25seU9uQ2hhbmdlKSksdGhpcy5nYXRld2F5VmVyc2lvbiYmIXQuY29uZmlnVmVyc2lvbiYmKHQuY29uZmlnVmVyc2lvbj10aGlzLmdhdGV3YXlWZXJzaW9uKSx0LnRzPURhdGUubm93KCksdH11cGRhdGVEYXRhKGU9ITEpe3RoaXMucGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5PXRoaXMuc29ydC5hY3RpdmUsdGhpcy5wYWdlTGluay5zb3J0T3JkZXIuZGlyZWN0aW9uPXdbdGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpXSx0aGlzLmF0dHJpYnV0ZURhdGFTb3VyY2UubG9hZEF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5DTElFTlRfU0NPUEUsdGhpcy5wYWdlTGluayxlKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZURhdGE9ZS5kYXRhLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKSx0aGlzLmdlbmVyYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5zZXRDbGllbnREYXRhKGUpfSkpLHRoaXMuaW5hY3RpdmVDb25uZWN0b3JzRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuc2hhcmVkQXR0cmlidXRlRGF0YT1lLmRhdGEuZmlsdGVyKChlPT50aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5jbHVkZXMoZS5rZXkpKSksdGhpcy5jb21iaW5lRGF0YSgpfSkpLHRoaXMuc2VydmVyRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuaW5hY3RpdmVEYXRhPWUuZGF0YS5maWx0ZXIoKGU9PnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKX0pKX1pc0Nvbm5lY3RvclN5bmNlZChlKXtjb25zdCB0PWUudmFsdWU7aWYoIXQudHN8fGUuc2tpcFN5bmN8fCF0aGlzLmlzR2F0ZXdheUFjdGl2ZSlyZXR1cm4hMTtpZigtMT09PXRoaXMuYWN0aXZlRGF0YS5maW5kSW5kZXgoKGU9Pigic3RyaW5nIj09dHlwZW9mIGUudmFsdWU/SlNPTi5wYXJzZShlLnZhbHVlKTplLnZhbHVlKS5uYW1lPT09dC5uYW1lKSkpcmV0dXJuITE7cmV0dXJuLTEhPT10aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGEuZmluZEluZGV4KChlPT57Y29uc3Qgbj1lLnZhbHVlLGE9bi5uYW1lPT09dC5uYW1lLG89ZWUobi5jb25maWd1cmF0aW9uSnNvbix7fSkmJmEsaT10aGlzLmhhc1NhbWVDb25maWcobi5jb25maWd1cmF0aW9uSnNvbix0LmNvbmZpZ3VyYXRpb25Kc29uKSxyPW4udHMmJm4udHM8PXQudHM7cmV0dXJuIGEmJnImJihpfHxvKX0pKX1oYXNTYW1lQ29uZmlnKGUsdCl7Y29uc3R7bmFtZTpuLGlkOmEsZW5hYmxlUmVtb3RlTG9nZ2luZzpvLGxvZ0xldmVsOmkscmVwb3J0U3RyYXRlZ3k6cixjb25maWdWZXJzaW9uOnMsLi4ubH09ZSx7bmFtZTpjLGlkOnAsZW5hYmxlUmVtb3RlTG9nZ2luZzptLGxvZ0xldmVsOmQscmVwb3J0U3RyYXRlZ3k6dSxjb25maWdWZXJzaW9uOmcsLi4uZn09dDtyZXR1cm4gZWUobCxmKX1jb21iaW5lRGF0YSgpe2NvbnN0IGU9Wy4uLnRoaXMuYWN0aXZlRGF0YSwuLi50aGlzLmluYWN0aXZlRGF0YSwuLi50aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGFdLnJlZHVjZSgoKGUsdCk9Pntjb25zdCBuPWUuZmluZEluZGV4KChlPT5lLmtleT09PXQua2V5KSk7cmV0dXJuLTE9PT1uP2UucHVzaCh0KTp0Lmxhc3RVcGRhdGVUcz5lW25dLmxhc3RVcGRhdGVUcyYmIXRoaXMuaXNDb25uZWN0b3JTeW5jZWQoZVtuXSkmJihlW25dPXsuLi50LHNraXBTeW5jOiEwfSksZX0pLFtdKTt0aGlzLmRhdGFTb3VyY2UuZGF0YT1lLm1hcCgoZT0+KHsuLi5lLHZhbHVlOiJzdHJpbmciPT10eXBlb2YgZS52YWx1ZT9KU09OLnBhcnNlKGUudmFsdWUpOmUudmFsdWV9KSkpfWNsZWFyT3V0Q29ubmVjdG9yRm9ybSgpe3RoaXMuaW5pdGlhbENvbm5lY3Rvcj1udWxsLHRoaXMuY29ubmVjdG9yRm9ybS5zZXRWYWx1ZSh7bW9kZTpvbi5CQVNJQyxuYW1lOiIiLHR5cGU6X3QuTVFUVCxzZW5kRGF0YU9ubHlPbkNoYW5nZTohMSxlbmFibGVSZW1vdGVMb2dnaW5nOiExLGxvZ0xldmVsOk10LklORk8sa2V5OiJhdXRvIixjbGFzczoiIixjb25maWd1cmF0aW9uOiIiLGNvbmZpZ3VyYXRpb25Kc29uOnt9LGJhc2ljQ29uZmlnOnt9LGNvbmZpZ1ZlcnNpb246IiIscmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9c2VsZWN0Q29ubmVjdG9yKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPXQudmFsdWU7bj8ubmFtZSE9PXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZSYmdGhpcy5jb25maXJtQ29ubmVjdG9yQ2hhbmdlKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5zZXRGb3JtVmFsdWUobil9KSl9aXNTYW1lQ29ubmVjdG9yKGUpe2lmKCF0aGlzLmluaXRpYWxDb25uZWN0b3IpcmV0dXJuITE7Y29uc3QgdD1lLnZhbHVlO3JldHVybiB0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZT09PXQubmFtZX1zaG93VG9hc3QoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh7dHlwZToiW05vdGlmaWNhdGlvbl0gU2hvdyIsbm90aWZpY2F0aW9uOnttZXNzYWdlOmUsdHlwZToic3VjY2VzcyIsZHVyYXRpb246MWUzLHZlcnRpY2FsUG9zaXRpb246InRvcCIsaG9yaXpvbnRhbFBvc2l0aW9uOiJsZWZ0Iix0YXJnZXQ6ImRhc2hib2FyZFJvb3QiLGZvcmNlRGlzbWlzczohMH19KX1yZXR1cm5UeXBlKGUpe2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4gdGhpcy5HYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldCh0LnR5cGUpfWRlbGV0ZUNvbm5lY3RvcihlLHQpe3Q/LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49YERlbGV0ZSBjb25uZWN0b3IgIiR7ZS5rZXl9Ij9gO3RoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG4sIkFsbCBjb25uZWN0b3IgZGF0YSB3aWxsIGJlIGRlbGV0ZWQuIiwiQ2FuY2VsIiwiRGVsZXRlIikucGlwZShPZSgxKSxVZSgodD0+e2lmKCF0KXJldHVybjtjb25zdCBuPVtdLGE9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUudmFsdWU/Lm5hbWUpP0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVybiBuLnB1c2godGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmRlbGV0ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsYSxbZV0pKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCExKSxuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2soYSkpLEFlKG4pfSkpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSE9PWUua2V5fHwodGhpcy5jbGVhck91dENvbm5lY3RvckZvcm0oKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSx0aGlzLmNvbm5lY3RvckZvcm0uZGlzYWJsZSgpKSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWNvbm5lY3RvckxvZ3MoZSx0KXt0JiZ0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49Sih0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIuZ2V0U3RhdGVQYXJhbXMoKSk7bi5jb25uZWN0b3JfbG9ncz1lLG4udGFyZ2V0RW50aXR5UGFyYW1OYW1lPSJjb25uZWN0b3JfbG9ncyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX2xvZ3MiLG4pfWNvbm5lY3RvclJwYyhlLHQpe3QmJnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTtuLmNvbm5lY3Rvcl9ycGM9ZSxuLnRhcmdldEVudGl0eVBhcmFtTmFtZT0iY29ubmVjdG9yX3JwYyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX3JwYyIsbil9b25FbmFibGVDb25uZWN0b3IoZSl7ZS52YWx1ZS50cz0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLnVwZGF0ZUFjdGl2ZUNvbm5lY3RvcktleXMoZS5rZXkpLHRoaXMuYXR0cmlidXRlVXBkYXRlU3ViamVjdC5uZXh0KGUpfWdldEVycm9yc0NvdW50KGUpe2NvbnN0IHQ9ZS5rZXksbj10aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24uZGF0YS5maW5kKChlPT5lJiZlLmRhdGFLZXkubmFtZT09PWAke3R9X0VSUk9SU19DT1VOVGApKTtyZXR1cm4gbiYmdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKHQpP24uZGF0YVswXVsxXXx8MDoiSW5hY3RpdmUifW9uQWRkQ29ubmVjdG9yKGUpe2U/LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29uZmlybUNvbm5lY3RvckNoYW5nZSgpLnBpcGUoT2UoMSksTWUoQm9vbGVhbiksVWUoKCgpPT50aGlzLm9wZW5BZGRDb25uZWN0b3JEaWFsb2coKSkpLE1lKEJvb2xlYW4pKS5zdWJzY3JpYmUoKGU9PnRoaXMuYWRkQ29ubmVjdG9yKGUpKSl9YWRkQ29ubmVjdG9yKGUpe3RoaXMuY29ubmVjdG9yRm9ybS5kaXNhYmxlZCYmdGhpcy5jb25uZWN0b3JGb3JtLmVuYWJsZSgpLGUuY29uZmlndXJhdGlvbkpzb258fChlLmNvbmZpZ3VyYXRpb25Kc29uPXt9KSx0aGlzLmdhdGV3YXlWZXJzaW9uJiYhZS5jb25maWdWZXJzaW9uJiYoZS5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLGUuYmFzaWNDb25maWc9ZS5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9ZTtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZTt0aGlzLnNldEluaXRpYWxDb25uZWN0b3JWYWx1ZXMoZSksdGhpcy5zYXZlQ29ubmVjdG9yKHRoaXMuZ2V0VXBkYXRlZENvbm5lY3RvckRhdGEoZSkpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9c2V0SW5pdGlhbENvbm5lY3RvclZhbHVlcyhlKXtjb25zdHtiYXNpY0NvbmZpZzp0LG1vZGU6biwuLi5hfT1lO3RoaXMudG9nZ2xlUmVwb3J0U3RyYXRlZ3koZS50eXBlKSx0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikuc2V0VmFsdWUodGhpcy5hbGxvd0Jhc2ljQ29uZmlnLmhhcyhlLnR5cGUpP2UubW9kZT8/b24uQkFTSUM6bnVsbCx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLnBhdGNoVmFsdWUoYSx7ZW1pdEV2ZW50OiExfSl9b3BlbkFkZENvbm5lY3RvckRpYWxvZygpe3JldHVybiB0aGlzLmN0eC5uZ1pvbmUucnVuKCgoKT0+dGhpcy5kaWFsb2cub3Blbih0byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e2RhdGFTb3VyY2VEYXRhOnRoaXMuZGF0YVNvdXJjZS5kYXRhLGdhdGV3YXlWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb259fSkuYWZ0ZXJDbG9zZWQoKSkpfXVuaXFOYW1lUmVxdWlyZWQoKXtyZXR1cm4gZT0+e2NvbnN0IHQ9ZS52YWx1ZT8udHJpbSgpLnRvTG93ZXJDYXNlKCksbj10aGlzLmRhdGFTb3VyY2UuZGF0YS5zb21lKChlPT5lLnZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKT09PXQpKSxhPXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZS50b0xvd2VyQ2FzZSgpPT09dDtyZXR1cm4gbiYmIWE/e2R1cGxpY2F0ZU5hbWU6e3ZhbGlkOiExfX06bnVsbH19aW5pdERhdGFTb3VyY2VzKCl7Y29uc3QgZT17cHJvcGVydHk6ImtleSIsZGlyZWN0aW9uOncuQVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKDFlMywwLG51bGwsZSksdGhpcy5hdHRyaWJ1dGVEYXRhU291cmNlPW5ldyBMYSh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2UsdGhpcy56b25lLHRoaXMudHJhbnNsYXRlKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9yc0RhdGFTb3VyY2U9bmV3IExhKHRoaXMuYXR0cmlidXRlU2VydmljZSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZSx0aGlzLnpvbmUsdGhpcy50cmFuc2xhdGUpLHRoaXMuc2VydmVyRGF0YVNvdXJjZT1uZXcgTGEodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLHRoaXMudGVsZW1ldHJ5V3NTZXJ2aWNlLHRoaXMuem9uZSx0aGlzLnRyYW5zbGF0ZSksdGhpcy5kYXRhU291cmNlPW5ldyB5KFtdKX1pbml0Q29ubmVjdG9yRm9ybSgpe3RoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHttb2RlOltvbi5CQVNJQ10sbmFtZTpbIiIsW3VlLnJlcXVpcmVkLHRoaXMudW5pcU5hbWVSZXF1aXJlZCgpLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbIiIsW3VlLnJlcXVpcmVkXV0sZW5hYmxlUmVtb3RlTG9nZ2luZzpbITFdLGxvZ0xldmVsOlsiIixbdWUucmVxdWlyZWRdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITFdLGtleTpbImF1dG8iXSxjbGFzczpbIiJdLGNvbmZpZ3VyYXRpb246WyIiXSxjb25maWd1cmF0aW9uSnNvbjpbe30sW3VlLnJlcXVpcmVkXV0sYmFzaWNDb25maWc6W3t9XSxjb25maWdWZXJzaW9uOlsiIl0scmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSksdGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGUoKX1nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCl7cmV0dXJuKGUsdCk9Pntzd2l0Y2godCl7Y2FzZSJzeW5jU3RhdHVzIjpyZXR1cm4gdGhpcy5pc0Nvbm5lY3RvclN5bmNlZChlKT8xOjA7Y2FzZSJlbmFibGVkIjpyZXR1cm4gdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KT8xOjA7Y2FzZSJlcnJvcnMiOmNvbnN0IG49dGhpcy5nZXRFcnJvcnNDb3VudChlKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpPT09dy5ERVNDPy0xOjEvMDpuO2RlZmF1bHQ6cmV0dXJuIGVbdF18fGUudmFsdWVbdF19fX1sb2FkQ29ubmVjdG9ycygpe3RoaXMuZGV2aWNlJiZ0aGlzLmRldmljZS5pZCE9PWsmJkFlKFt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSxbImFjdGl2ZV9jb25uZWN0b3JzIl0pLHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFsiaW5hY3RpdmVfY29ubmVjdG9ycyJdKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLkNMSUVOVF9TQ09QRSxbIlZlcnNpb24iXSldKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVswXSksdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVsxXSksdGhpcy5nYXRld2F5VmVyc2lvbj1lWzJdWzBdPy52YWx1ZSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWxvYWRHYXRld2F5U3RhdGUoKXt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5rZXkpKS52YWx1ZSxuPWUuZmluZCgoZT0+Imxhc3REaXNjb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZTt0aGlzLmlzR2F0ZXdheUFjdGl2ZT10aGlzLmdldEdhdGV3YXlTdGF0dXModCxhLG4pfSkpfXBhcnNlQ29ubmVjdG9ycyhlKXtjb25zdCB0PWU/LlswXT8udmFsdWV8fFtdO3JldHVybiBuZSh0KT9KU09OLnBhcnNlKHQpOnR9b2JzZXJ2ZU1vZGVDaGFuZ2UoKXt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikubWFya0FzUHJpc3RpbmUoKX0pKX1vYnNlcnZlQXR0cmlidXRlQ2hhbmdlKCl7dGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0LnBpcGUoVmUoMzAwKSxFZSgoZT0+dGhpcy5leGVjdXRlQXR0cmlidXRlVXBkYXRlcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX11cGRhdGVBY3RpdmVDb25uZWN0b3JLZXlzKGUpe2lmKHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlKSl7Y29uc3QgdD10aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuYWN0aXZlQ29ubmVjdG9ycy5zcGxpY2UodCwxKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5wdXNoKGUpfWVsc2V7Y29uc3QgdD10aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMuc3BsaWNlKHQsMSksdGhpcy5hY3RpdmVDb25uZWN0b3JzLnB1c2goZSl9fWV4ZWN1dGVBdHRyaWJ1dGVVcGRhdGVzKGUpe0FlKHRoaXMuZ2V0QXR0cmlidXRlRXhlY3V0aW9uVGFza3MoZSkpLnBpcGUoT2UoMSksRWUoKCgpPT50aGlzLnVwZGF0ZURhdGEoITApKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWdldEF0dHJpYnV0ZUV4ZWN1dGlvblRhc2tzKGUpe2NvbnN0IHQ9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSxuPXQ/TC5TRVJWRVJfU0NPUEU6TC5TSEFSRURfU0NPUEUsYT10P0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVyblt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsW3trZXk6ImFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmFjdGl2ZUNvbm5lY3RvcnN9XSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFt7a2V5OiJpbmFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmluYWN0aXZlQ29ubmVjdG9yc31dKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxuLFtlXSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLGEsW2VdKV19b25EYXRhVXBkYXRlRXJyb3IoZSl7Y29uc3QgdD10aGlzLnV0aWxzLnBhcnNlRXhjZXB0aW9uKGUpO2xldCBuPXQubmFtZTt0Lm1lc3NhZ2UmJihuKz0iOiAiK3QubWVzc2FnZSksY29uc29sZS5lcnJvcihuKX1vbkVycm9yc1VwZGF0ZWQoKXt0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVkKCl7Y29uc3QgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGEsdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5kYXRhS2V5Lm5hbWUpKS5kYXRhWzBdWzFdLG49ZS5maW5kKChlPT4ibGFzdERpc2Nvbm5lY3RUaW1lIj09PWUuZGF0YUtleS5uYW1lKSkuZGF0YVswXVsxXSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmRhdGFLZXkubmFtZSkpLmRhdGFbMF1bMV07dGhpcy5pc0dhdGV3YXlBY3RpdmU9dGhpcy5nZXRHYXRld2F5U3RhdHVzKHQsYSxuKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1nZXRHYXRld2F5U3RhdHVzKGUsdCxuKXtyZXR1cm4hIWUmJighbnx8dD5uKX1nZW5lcmF0ZVN1YnNjcmlwdGlvbigpe2lmKHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuZGV2aWNlKXtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuZGV2aWNlLmlkLGVudGl0eU5hbWU6IkdhdGV3YXkiLHRpbWVzZXJpZXM6W119XTt0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKCh0PT57ZVswXS50aW1lc2VyaWVzLnB1c2goe25hbWU6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGAsbGFiZWw6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGB9KX0pKSx0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGkuY3JlYXRlU3Vic2NyaXB0aW9uRnJvbUluZm8oQS5sYXRlc3QsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuc3Vic2NyaXB0aW9uPWV9KSl9fWNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpe3RoaXMuYmFzaWNDb25maWdTdWImJnRoaXMuYmFzaWNDb25maWdTdWIudW5zdWJzY3JpYmUoKSx0aGlzLmJhc2ljQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImJhc2ljQ29uZmlnIikudmFsdWVDaGFuZ2VzLnBpcGUoTWUoKCgpPT4hIXRoaXMuaW5pdGlhbENvbm5lY3RvcikpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIiksbj10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWUsYT10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU7aWYoIWVlKGUsdD8udmFsdWUpJiZ0aGlzLmFsbG93QmFzaWNDb25maWcuaGFzKG4pJiZhPT09b24uQkFTSUMpe2NvbnN0IG49ey4uLnQudmFsdWUsLi4uZX07dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiY29uZmlndXJhdGlvbkpzb24iKS5wYXRjaFZhbHVlKG4se2VtaXRFdmVudDohMX0pfX0pKX1jcmVhdGVKc29uQ29uZmlnV2F0Y2hlcigpe3RoaXMuanNvbkNvbmZpZ1N1YiYmdGhpcy5qc29uQ29uZmlnU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5qc29uQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKSxuPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZSxhPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoIm1vZGUiKS52YWx1ZTshZWUoZSx0Py52YWx1ZSkmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMobikmJmE9PT1vbi5BRFZBTkNFRCYmdGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKS5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWNvbmZpcm1Db25uZWN0b3JDaGFuZ2UoKXtyZXR1cm4gdGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmNvbm5lY3RvckZvcm0uZGlydHk/dGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRpdGxlIiksdGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRleHQiKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApOkllKCEwKX1zZXRGb3JtVmFsdWUoZSl7dGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGVkJiZ0aGlzLmNvbm5lY3RvckZvcm0uZW5hYmxlKCk7Y29uc3QgdD1iYS5nZXRDb25maWcoe2NvbmZpZ3VyYXRpb246IiIsa2V5OiJhdXRvIixjb25maWd1cmF0aW9uSnNvbjp7fSwuLi5lfSx0aGlzLmdhdGV3YXlWZXJzaW9uKTt0aGlzLmdhdGV3YXlWZXJzaW9uJiYhdC5jb25maWdWZXJzaW9uJiYodC5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLHQuYmFzaWNDb25maWc9dC5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9dCx0aGlzLnVwZGF0ZUNvbm5lY3Rvcih0KX11cGRhdGVDb25uZWN0b3IoZSl7c3dpdGNoKHRoaXMuanNvbkNvbmZpZ1N1Yj8udW5zdWJzY3JpYmUoKSxlLnR5cGUpe2Nhc2UgX3QuTVFUVDpjYXNlIF90Lk9QQ1VBOmNhc2UgX3QuTU9EQlVTOnRoaXMudXBkYXRlQmFzaWNDb25maWdDb25uZWN0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZSh7Li4uZSxtb2RlOm51bGx9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUpzb25Db25maWdXYXRjaGVyKCl9fXVwZGF0ZUJhc2ljQ29uZmlnQ29ubmVjdG9yKGUpe3RoaXMuYmFzaWNDb25maWdTdWI/LnVuc3Vic2NyaWJlKCk7Y29uc3QgdD10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWU7dGhpcy5zZXRJbml0aWFsQ29ubmVjdG9yVmFsdWVzKGUpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9cGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKXt0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZShlLHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpLHRoaXMuY3JlYXRlSnNvbkNvbmZpZ1dhdGNoZXIoKX10b2dnbGVSZXBvcnRTdHJhdGVneShlKXtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInJlcG9ydFN0cmF0ZWd5Iik7ZT09PV90Lk1PREJVUz90LmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zZXRDbGllbnREYXRhKGUpe2lmKHRoaXMuaW5pdGlhbENvbm5lY3Rvcil7Y29uc3QgdD1lLmRhdGEuZmluZCgoZT0+ZS5rZXk9PT10aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSkpO3QmJih0LnZhbHVlPSJzdHJpbmciPT10eXBlb2YgdC52YWx1ZT9KU09OLnBhcnNlKHQudmFsdWUpOnQudmFsdWUsdGhpcy5pc0Nvbm5lY3RvclN5bmNlZCh0KSYmdC52YWx1ZS5jb25maWd1cmF0aW9uSnNvbiYmdGhpcy5zZXRGb3JtVmFsdWUoey4uLnQudmFsdWUsbW9kZTp0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU/P3QudmFsdWUubW9kZX0pKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOlguQXR0cmlidXRlU2VydmljZX0se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp2YX0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVvLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbm5lY3RvciIsaW5wdXRzOntjdHg6ImN0eCIsZGV2aWNlOiJkZXZpY2UifSxwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6Im5hbWVJbnB1dCIsZmlyc3Q6ITAscHJlZGljYXRlOlsibmFtZUlucHV0Il0sZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InNvcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpnLGRlc2NlbmRhbnRzOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpMbyxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmtvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGbyxzZWxlY3RvcjoidGItb3BjLXVhLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnBvLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpBbyxzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpObyxzZWxlY3RvcjoidGItbXF0dC1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmdvLHNlbGVjdG9yOiJ0Yi1yZXBvcnQtc3RyYXRlZ3kiLGlucHV0czpbImlzRXhwYW5zaW9uTW9kZSIsImRlZmF1bHRWYWx1ZSJdfSx7a2luZDoicGlwZSIsdHlwZTpfLkFzeW5jUGlwZSxuYW1lOiJhc3luYyJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTp2YSxuYW1lOiJpc0xhdGVzdFZlcnNpb25Db25maWcifV19KX19ZSgiR2F0ZXdheUNvbm5lY3RvckNvbXBvbmVudCIsRW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX0se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTpKZS5NYXREaWFsb2d9LHt0eXBlOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3R5cGU6dC5OZ1pvbmV9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp2YX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkZXZpY2U6W3t0eXBlOmF9XSxuYW1lSW5wdXQ6W3t0eXBlOm8sYXJnczpbIm5hbWVJbnB1dCJdfV0sc29ydDpbe3R5cGU6byxhcmdzOltnLHtzdGF0aWM6ITF9XX1dfX0pO2NsYXNzIHFve2NvbnN0cnVjdG9yKGUpe3RoaXMuZGV2aWNlU2VydmljZT1lfWRvd25sb2FkKGUpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kZXZpY2VJZCYmdGhpcy5kZXZpY2VTZXJ2aWNlLmRvd25sb2FkR2F0ZXdheURvY2tlckNvbXBvc2VGaWxlKHRoaXMuZGV2aWNlSWQpLnN1YnNjcmliZSgoKCk9Pnt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxbyxkZXBzOlt7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpxbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1jb21tYW5kIixpbnB1dHM6e2RldmljZUlkOiJkZXZpY2VJZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJjb21wb25lbnQiLHR5cGU6d3QuVGJNYXJrZG93bkNvbXBvbmVudCxzZWxlY3RvcjoidGItbWFya2Rvd24iLGlucHV0czpbImRhdGEiLCJjb250ZXh0IiwiYWRkaXRpb25hbENvbXBpbGVNb2R1bGVzIiwibWFya2Rvd25DbGFzcyIsImNvbnRhaW5lckNsYXNzIiwic3R5bGUiLCJhcHBseURlZmF1bHRNYXJrZG93blN0eWxlIiwiYWRkaXRpb25hbFN0eWxlcyIsImxpbmVOdW1iZXJzIiwiZmFsbGJhY2tUb1BsYWluTWFya2Rvd24iLCJ1c2VQbGFpbk1hcmtkb3duIl0sb3V0cHV0czpbInJlYWR5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QW5jaG9yLHNlbGVjdG9yOiJhW21hdC1idXR0b25dLCBhW21hdC1yYWlzZWQtYnV0dG9uXSwgYVttYXQtZmxhdC1idXR0b25dLCBhW21hdC1zdHJva2VkLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJEZXZpY2VHYXRld2F5Q29tbWFuZENvbXBvbmVudCIscW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29tbWFuZCIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpYLkRldmljZVNlcnZpY2V9XSxwcm9wRGVjb3JhdG9yczp7ZGV2aWNlSWQ6W3t0eXBlOmF9XX19KTtjbGFzcyBEb3tjb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLmZiPWUsdGhpcy5kZXZpY2VTZXJ2aWNlPXQsdGhpcy5jZD1uLHRoaXMuZGlhbG9nPWEsdGhpcy5kaWFsb2dNb2RlPSExLHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZD1uZXcgaSx0aGlzLlN0b3JhZ2VUeXBlcz1BdCx0aGlzLnN0b3JhZ2VUeXBlcz1PYmplY3QudmFsdWVzKEF0KSx0aGlzLnN0b3JhZ2VUeXBlc1RyYW5zbGF0aW9uTWFwPVJ0LHRoaXMubG9nU2F2aW5nUGVyaW9kcz1PdCx0aGlzLmxvY2FsTG9nc0NvbmZpZ3M9T2JqZWN0LmtleXMoUHQpLHRoaXMubG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwPUd0LHRoaXMuc2VjdXJpdHlUeXBlcz1CdCx0aGlzLmdhdGV3YXlMb2dMZXZlbD1PYmplY3QudmFsdWVzKE10KSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmluaXRCYXNpY0Zvcm1Hcm91cCgpLHRoaXMub2JzZXJ2ZUZvcm1DaGFuZ2VzKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jaGVja0FuZEZldGNoQ3JlZGVudGlhbHMoZT8udGhpbmdzYm9hcmQ/LnNlY3VyaXR5Pz97fSksZT8uZ3JwYyYmdGhpcy50b2dnbGVScGNGaWVsZHMoZS5ncnBjLmVuYWJsZWQpOyhlPy50aGluZ3Nib2FyZD8uc3RhdGlzdGljcz8uY29tbWFuZHM/P1tdKS5mb3JFYWNoKChlPT50aGlzLmFkZENvbW1hbmQoZSwhMSkpKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fWF0TGVhc3RPbmVSZXF1aXJlZChlLHQ9bnVsbCl7cmV0dXJuIG49Pnt0fHwodD1PYmplY3Qua2V5cyhuLmNvbnRyb2xzKSk7cmV0dXJuIG4/LmNvbnRyb2xzJiZ0LnNvbWUoKHQ9PiFlKG4uY29udHJvbHNbdF0pKSk/bnVsbDp7YXRMZWFzdE9uZTohMH19fXRvZ2dsZVJwY0ZpZWxkcyhlKXtjb25zdCB0PXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjIik7ZT8odC5nZXQoInNlcnZlclBvcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lb3V0TXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluVGltZUJldHdlZW5QaW5nc01zIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNcyIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0LmdldCgic2VydmVyUG9ydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgia2VlcEFsaXZlVGltZW91dE1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoIm1pblRpbWVCZXR3ZWVuUGluZ3NNcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfWFkZExvY2FsTG9nQ29uZmlnKGUsdCl7Y29uc3Qgbj10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgibG9ncy5sb2NhbCIpLGE9dGhpcy5mYi5ncm91cCh7bG9nTGV2ZWw6W3QubG9nTGV2ZWx8fE10LklORk8sW3VlLnJlcXVpcmVkXV0sZmlsZVBhdGg6W3QuZmlsZVBhdGh8fCIuL2xvZ3MiLFt1ZS5yZXF1aXJlZF1dLGJhY2t1cENvdW50Olt0LmJhY2t1cENvdW50fHw3LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCldXSxzYXZpbmdUaW1lOlt0LnNhdmluZ1RpbWV8fDMsW3VlLnJlcXVpcmVkLHVlLm1pbigwKV1dLHNhdmluZ1BlcmlvZDpbdC5zYXZpbmdQZXJpb2R8fER0LmRheXMsW3VlLnJlcXVpcmVkXV19KTtuLmFkZENvbnRyb2woZSxhKX1nZXRMb2dGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KGBsb2dzLmxvY2FsLiR7ZX1gKX1jb21tYW5kRm9ybUFycmF5KCl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzIil9cmVtb3ZlQ29tbWFuZENvbnRyb2woZSx0KXsiIiE9PXQucG9pbnRlclR5cGUmJih0aGlzLmNvbW1hbmRGb3JtQXJyYXkoKS5yZW1vdmVBdChlKSx0aGlzLmJhc2ljRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfXJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5Iik7ZS5jbGVhclZhbGlkYXRvcnMoKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1yZW1vdmVBbGxTdG9yYWdlVmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInN0b3JhZ2UiKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKXt0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGV2aWNlKHRoaXMuZGV2aWNlLmlkKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmRpYWxvZy5vcGVuKFBhLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7Z2F0ZXdheU5hbWU6ZS5uYW1lfX0pLmFmdGVyQ2xvc2VkKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS5zZXRWYWx1ZSghMCx7ZW1pdEV2ZW50OiExfSl9KSl9KSl9YWRkQ29tbWFuZChlLHQ9ITApe2NvbnN0e2F0dHJpYnV0ZU9uR2F0ZXdheTpuPW51bGwsY29tbWFuZDphPW51bGwsdGltZW91dDpvPW51bGx9PWV8fHt9LGk9dGhpcy5mYi5ncm91cCh7YXR0cmlidXRlT25HYXRld2F5OltuLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dLGNvbW1hbmQ6W2EsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14oPz1cUykuKlxTJC8pXV0sdGltZW91dDpbbyxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKSx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dfSk7dGhpcy5jb21tYW5kRm9ybUFycmF5KCkucHVzaChpLHtlbWl0RXZlbnQ6dH0pfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3RoaXMuYmFzaWNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dGhpbmdzYm9hcmQ6dGhpcy5pbml0VGhpbmdzYm9hcmRGb3JtR3JvdXAoKSxzdG9yYWdlOnRoaXMuaW5pdFN0b3JhZ2VGb3JtR3JvdXAoKSxncnBjOnRoaXMuaW5pdEdycGNGb3JtR3JvdXAoKSxjb25uZWN0b3JzOnRoaXMuZmIuYXJyYXkoW10pLGxvZ3M6dGhpcy5pbml0TG9nc0Zvcm1Hcm91cCgpfSl9aW5pdFRoaW5nc2JvYXJkRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2hvc3Q6W3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteXHNdKyQvKV1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZVNoZWxsOlshMV0scmVtb3RlQ29uZmlndXJhdGlvbjpbITBdLGNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHM6WzYwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sc3RhdGlzdGljczp0aGlzLmZiLmdyb3VwKHtlbmFibGU6WyEwXSxzdGF0c1NlbmRQZXJpb2RJblNlY29uZHM6WzM2MDAsW3VlLnJlcXVpcmVkLHVlLm1pbig2MCksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sY29tbWFuZHM6dGhpcy5mYi5hcnJheShbXSl9KSxtYXhQYXlsb2FkU2l6ZUJ5dGVzOls4MTk2LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTAwKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtaW5QYWNrU2VuZERlbGF5TVM6WzUwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblBhY2tTaXplVG9TZW5kOls1MDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxMDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGhhbmRsZURldmljZVJlbmFtaW5nOlshMF0sY2hlY2tpbmdEZXZpY2VBY3Rpdml0eTp0aGlzLmluaXRDaGVja2luZ0RldmljZUFjdGl2aXR5Rm9ybUdyb3VwKCksc2VjdXJpdHk6dGhpcy5pbml0U2VjdXJpdHlGb3JtR3JvdXAoKSxxb3M6WzEsW3VlLnJlcXVpcmVkLHVlLm1pbigwKSx1ZS5tYXgoMSksdWUucGF0dGVybigvXlteLlxzXSskLyldXX0pfWluaXRTdG9yYWdlRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe3R5cGU6W0F0Lk1FTU9SWSxbdWUucmVxdWlyZWRdXSxyZWFkX3JlY29yZHNfY291bnQ6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heF9yZWNvcmRzX2NvdW50OlsxZTUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhX2ZvbGRlcl9wYXRoOlsiLi9kYXRhLyIsW3VlLnJlcXVpcmVkXV0sbWF4X2ZpbGVfY291bnQ6WzEwLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWF4X3JlYWRfcmVjb3Jkc19jb3VudDpbMTAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhfcmVjb3Jkc19wZXJfZmlsZTpbMWU0LFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sZGF0YV9maWxlX3BhdGg6WyIuL2RhdGEvZGF0YS5kYiIsW3VlLnJlcXVpcmVkXV0sbWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzOlsxLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWVzc2FnZXNfdHRsX2luX2RheXM6WzcsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRHcnBjRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxzZXJ2ZXJQb3J0Ols5NTk1LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUubWF4KDY1NTM1KSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxrZWVwQWxpdmVUaW1lTXM6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGtlZXBBbGl2ZVRpbWVvdXRNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sa2VlcGFsaXZlUGVybWl0V2l0aG91dENhbGxzOlshMF0sbWF4UGluZ3NXaXRob3V0RGF0YTpbMCxbdWUucmVxdWlyZWQsdWUubWluKDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblRpbWVCZXR3ZWVuUGluZ3NNczpbMWU0LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV19KX1pbml0TG9nc0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHtkYXRlRm9ybWF0OlsiJVktJW0tJWQgJUg6JU06JVMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sbG9nRm9ybWF0OlsiJShhc2N0aW1lKXMgLSB8JShsZXZlbG5hbWUpc3wgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGZ1bmNOYW1lKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sdHlwZTpbInJlbW90ZSIsW3VlLnJlcXVpcmVkXV0scmVtb3RlOnRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxsb2dMZXZlbDpbTXQuSU5GTyxbdWUucmVxdWlyZWRdXX0pLGxvY2FsOnRoaXMuZmIuZ3JvdXAoe30pfSl9aW5pdENoZWNraW5nRGV2aWNlQWN0aXZpdHlGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7Y2hlY2tEZXZpY2VJbmFjdGl2aXR5OlshMV0saW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzOlsyMDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzOls1MDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRTZWN1cml0eUZvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHt0eXBlOltWdC5BQ0NFU1NfVE9LRU4sW3VlLnJlcXVpcmVkXV0sYWNjZXNzVG9rZW46W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2xpZW50SWQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sdXNlcm5hbWU6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0scGFzc3dvcmQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2FDZXJ0OltudWxsXSxjZXJ0OltudWxsXSxwcml2YXRlS2V5OltudWxsXX0pfW9ic2VydmVGb3JtQ2hhbmdlcygpe3RoaXMub2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCksdGhpcy5vYnNlcnZlUmVtb3RlQ29uZmlndXJhdGlvbkNoYW5nZXMoKSx0aGlzLm9ic2VydmVEZXZpY2VBY3Rpdml0eUNoYW5nZXMoKSx0aGlzLm9ic2VydmVTZWN1cml0eVR5cGVDaGFuZ2VzKCksdGhpcy5vYnNlcnZlU3RvcmFnZVR5cGVDaGFuZ2VzKCl9b2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWUiKTt0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dCYmIiIhPT10P2Uuc2V0VmFsaWRhdG9ycyhbdWUucmVxdWlyZWRdKTplLmNsZWFyVmFsaWRhdG9ycygpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9b2JzZXJ2ZVJlbW90ZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKX0pKSx0aGlzLmxvZ1NlbGVjdG9yPXRoaXMuZmIuY29udHJvbChQdC5zZXJ2aWNlKTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhQdCkpdGhpcy5hZGRMb2NhbExvZ0NvbmZpZyhlLHt9KX1vYnNlcnZlRGV2aWNlQWN0aXZpdHlDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSIpO2UuZ2V0KCJjaGVja0RldmljZUluYWN0aXZpdHkiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7Y29uc3Qgbj1bdWUubWluKDEpLHVlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV07dD8oZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLnNldFZhbGlkYXRvcnMobiksZS5nZXQoImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiKS5zZXRWYWxpZGF0b3JzKG4pKTooZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLmNsZWFyVmFsaWRhdG9ycygpLGUuZ2V0KCJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIikuY2xlYXJWYWxpZGF0b3JzKCkpLGUuZ2V0KCJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSxlLmdldCgiaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kcyIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjLmVuYWJsZWQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy50b2dnbGVScGNGaWVsZHMoZSl9KSl9b2JzZXJ2ZVNlY3VyaXR5VHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eSIpO2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e3N3aXRjaCh0aGlzLnJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpLHQpe2Nhc2UgVnQuQUNDRVNTX1RPS0VOOnRoaXMuYWRkQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVExTX1BSSVZBVEVfS0VZOnRoaXMuYWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSk7YnJlYWs7Y2FzZSBWdC5UTFNfQUNDRVNTX1RPS0VOOnRoaXMuYWRkVGxzQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVVNFUk5BTUVfUEFTU1dPUkQ6ZS5hZGRWYWxpZGF0b3JzKFt0aGlzLmF0TGVhc3RPbmVSZXF1aXJlZCh1ZS5yZXF1aXJlZCxbImNsaWVudElkIiwidXNlcm5hbWUiXSldKX1lLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKSxbImNhQ2VydCIsInByaXZhdGVLZXkiLCJjZXJ0Il0uZm9yRWFjaCgodD0+e2UuZ2V0KHQpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT50aGlzLmNkLmRldGVjdENoYW5nZXMoKSkpfSkpfW9ic2VydmVTdG9yYWdlVHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzdG9yYWdlIik7ZS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57c3dpdGNoKHRoaXMucmVtb3ZlQWxsU3RvcmFnZVZhbGlkYXRvcnMoKSx0KXtjYXNlIEF0Lk1FTU9SWTp0aGlzLmFkZE1lbW9yeVN0b3JhZ2VWYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgQXQuRklMRTp0aGlzLmFkZEZpbGVTdG9yYWdlVmFsaWRhdG9ycyhlKTticmVhaztjYXNlIEF0LlNRTElURTp0aGlzLmFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpfX0pKX1hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7ZS5nZXQoImFjY2Vzc1Rva2VuIikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteLlxzXSskLyldKSxlLmdldCgiYWNjZXNzVG9rZW4iKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9YWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSl7WyJjYUNlcnQiLCJwcml2YXRlS2V5IiwiY2VydCJdLmZvckVhY2goKHQ9PntlLmdldCh0KS5hZGRWYWxpZGF0b3JzKFt1ZS5yZXF1aXJlZF0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKX1hZGRUbHNBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7dGhpcy5hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSksZS5nZXQoImNhQ2VydCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkXSksZS5nZXQoImNhQ2VydCIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1hZGRNZW1vcnlTdG9yYWdlVmFsaWRhdG9ycyhlKXtlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KCJtYXhfcmVjb3Jkc19jb3VudCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldKSxlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoIm1heF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9YWRkRmlsZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWF4X2ZpbGVfY291bnQiLCJtYXhfcmVhZF9yZWNvcmRzX2NvdW50IiwibWF4X3JlY29yZHNfcGVyX2ZpbGUiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIiwibWVzc2FnZXNfdHRsX2luX2RheXMiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWNoZWNrQW5kRmV0Y2hDcmVkZW50aWFscyhlKXtlLnR5cGUhPT1WdC5UTFNfUFJJVkFURV9LRVkmJnRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyh0aGlzLmRldmljZS5pZCkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5pbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkLmVtaXQodCksdGhpcy51cGRhdGVTZWN1cml0eVR5cGUoZSx0KSx0aGlzLnVwZGF0ZUNyZWRlbnRpYWxzKHQsZSl9KSl9dXBkYXRlU2VjdXJpdHlUeXBlKGUsdCl7Y29uc3Qgbj10LmNyZWRlbnRpYWxzVHlwZT09PVUuQUNDRVNTX1RPS0VOfHxlLnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOP2UudHlwZT09PVZ0LlRMU19BQ0NFU1NfVE9LRU4/VnQuVExTX0FDQ0VTU19UT0tFTjpWdC5BQ0NFU1NfVE9LRU46dC5jcmVkZW50aWFsc1R5cGU9PT1VLk1RVFRfQkFTSUM/VnQuVVNFUk5BTUVfUEFTU1dPUkQ6bnVsbDtuJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZSIpLnNldFZhbHVlKG4se2VtaXRFdmVudDohMX0pfXVwZGF0ZUNyZWRlbnRpYWxzKGUsdCl7c3dpdGNoKGUuY3JlZGVudGlhbHNUeXBlKXtjYXNlIFUuQUNDRVNTX1RPS0VOOnRoaXMudXBkYXRlQWNjZXNzVG9rZW5DcmVkZW50aWFscyhlLHQpO2JyZWFrO2Nhc2UgVS5NUVRUX0JBU0lDOnRoaXMudXBkYXRlTXF0dEJhc2ljQ3JlZGVudGlhbHMoZSk7Y2FzZSBVLlg1MDlfQ0VSVElGSUNBVEU6fX11cGRhdGVBY2Nlc3NUb2tlbkNyZWRlbnRpYWxzKGUsdCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuIikuc2V0VmFsdWUoZS5jcmVkZW50aWFsc0lkLHtlbWl0RXZlbnQ6ITF9KSx0LnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkuY2FDZXJ0Iikuc2V0VmFsdWUodC5jYUNlcnQse2VtaXRFdmVudDohMX0pfXVwZGF0ZU1xdHRCYXNpY0NyZWRlbnRpYWxzKGUpe2NvbnN0IHQ9SlNPTi5wYXJzZShlLmNyZWRlbnRpYWxzVmFsdWUpO3RoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZCIpLnNldFZhbHVlKHQuY2xpZW50SWQse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZSIpLnNldFZhbHVlKHQudXNlck5hbWUse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZCIpLnNldFZhbHVlKHQucGFzc3dvcmQse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6RG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWJhc2ljLWNvbmZpZ3VyYXRpb24iLGlucHV0czp7ZGV2aWNlOiJkZXZpY2UiLGRpYWxvZ01vZGU6ImRpYWxvZ01vZGUifSxvdXRwdXRzOntpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkOiJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+RG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgY2xhc3M9InRhYi1ncm91cC1ibG9jayIgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIiBbY2xhc3MuZGlhbG9nLW1vZGVdPSJkaWFsb2dNb2RlIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1jb25maWd1cmF0aW9uXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZVNoZWxsIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtaG9zdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaG9zdFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmhvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnNlY3VyaXR5LnNlY3VyaXR5PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzZWN1cml0eSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij57eyBzZWN1cml0eVR5cGUudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ2FjY2Vzc3Rva2VuXCcpIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuYWNjZXNzLXRva2VuPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImFjY2Vzc1Rva2VuIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkuYWNjZXNzLXRva2VuLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdkZXZpY2UuY29weS1hY2Nlc3MtdG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuY2xpZW50SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNsaWVudElkIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5jbGllbnRJZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgW2NvcHlUZXh0XT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuY2xpZW50SWRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS51c2VybmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LnVzZXJuYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZVwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXVzZXJuYW1lXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgc3R5bGU9IndpZHRoOiAxMDAlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiLz5cbiAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucGFzc3dvcmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8dGItZXJyb3Igc3R5bGU9Im1hcmdpbi10b3A6IC0xMnB4OyBkaXNwbGF5OiBibG9jazsiIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS50eXBlXCcpLnZhbHVlID09PSBcJ3VzZXJuYW1lUGFzc3dvcmRcJyJcbiAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eVwnKS5oYXNFcnJvcihcJ2F0TGVhc3RPbmVcJykgP1xuICAgICAgICAgIChcJ2RldmljZS5jbGllbnQtaWQtb3ItdXNlci1uYW1lLW5lY2Vzc2FyeVwnIHwgdHJhbnNsYXRlKSA6IFwnXCciPjwvdGItZXJyb3I+XG4gICAgICAgICAgICA8dGItZmlsZS1pbnB1dFxuICAgICAgICAgICAgICBmeEZsZXg9IjEwMCJcbiAgICAgICAgICAgICAgaGludD0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ3Rsc1wnKSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnQiXG4gICAgICAgICAgICAgIGxhYmVsPSJ7eyBcJ3NlY3VyaXR5LmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgW2FsbG93ZWRFeHRlbnNpb25zXT0iXCdwZW0sIGNlcnQsIGtleVwnIlxuICAgICAgICAgICAgICBbYWNjZXB0XT0iXCcucGVtLCBhcHBsaWNhdGlvbi9wZW0sLmNlcnQsIGFwcGxpY2F0aW9uL2NlcnQsIC5rZXksYXBwbGljYXRpb24va2V5XCciXG4gICAgICAgICAgICAgIGRyb3BMYWJlbD0ie3sgXCdnYXRld2F5LmRyb3AtZmlsZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIDwvdGItZmlsZS1pbnB1dD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubG9ncy5sb2dzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJsb2dzIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5kYXRlLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRlRm9ybWF0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MuZGF0ZUZvcm1hdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5kYXRlLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGUtZm9ybVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubG9nLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJsb2dGb3JtYXQiIHJvd3M9IjIiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9nRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmxvZy1mb3JtYXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5sb2ctZm9ybWF0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJyZW1vdGUiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MucmVtb3RlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1sb2dcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MucmVtb3RlLWxvZ3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ibG9jYWwiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MubG9jYWw8L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBbZm9ybUNvbnRyb2xdPSJsb2dTZWxlY3RvciI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBsb2dDb25maWcgb2YgbG9jYWxMb2dzQ29uZmlncyIgW3ZhbHVlXT0ibG9nQ29uZmlnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZpcnN0LWNhcGl0YWwiPnt7IGxvY2FsTG9nc0NvbmZpZ1RyYW5zbGF0ZU1hcC5nZXQobG9nQ29uZmlnKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0iZ2V0TG9nRm9ybUdyb3VwKGxvZ1NlbGVjdG9yLnZhbHVlKSI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MuZmlsZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZmlsZVBhdGgiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5maWxlUGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmZpbGUtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgc2F2aW5nLXBlcmlvZCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdUaW1lIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3Muc2F2aW5nLXBlcmlvZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLnNhdmluZ1RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBoaWRlUmVxdWlyZWRNYXJrZXIgc3R5bGU9Im1pbi13aWR0aDogMTEwcHg7IHdpZHRoOiAzMCUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdQZXJpb2QiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBwZXJpb2Qgb2YgbG9nU2F2aW5nUGVyaW9kcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJwZXJpb2Qua2V5Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwZXJpb2QudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5iYWNrdXAtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJiYWNrdXBDb3VudCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuYmFja3VwQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYmFja3VwLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0b3JhZ2VcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InN0b3JhZ2UiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPmdhdGV3YXkuaGludHMuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMiIFt2YWx1ZV09InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAuZ2V0KHN0b3JhZ2VUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPnt7IFwnZ2F0ZXdheS5oaW50cy5cJyArIGJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UudHlwZVwnKS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxzZWN0aW9uICpuZ1N3aXRjaENhc2U9IlN0b3JhZ2VUeXBlcy5NRU1PUlkiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlYWRfcmVjb3Jkc19jb3VudCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5yZWFkLXJlY29yZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLkZJTEUiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFfZm9sZGVyX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9mb2xkZXJfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtaW5maXggcG9pbnRlci1ldmVudCBzdWZmaXgtaWNvbiIgYXJpYS1oaWRkZW49ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9ImhlbHAtaWNvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0YS1mb2xkZXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9maWxlX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtZmlsZS1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhfcmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVhZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX3Blcl9maWxlIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVjb3Jkc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLlNRTElURSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9maWxlX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9maWxlX3BhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3VycyIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLWNoZWNrLWhvdXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9pbl9kYXlzIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnR0bC1tZXNzYWdlcy1kYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdycGNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImdycGMiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwY1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucGVybWl0LXdpdGhvdXQtY2FsbHNcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucGVybWl0LXdpdGhvdXQtY2FsbHNcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1wb3J0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ic2VydmVyUG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2VydmVyLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVvdXRNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJrZWVwQWxpdmVUaW1lTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMta2VlcC1hbGl2ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5nczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblRpbWVCZXR3ZWVuUGluZ3NNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGluZ3NXaXRob3V0RGF0YSIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY29sb3I9InByaW1hcnkiIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzdGF0c1NlbmRQZXJpb2RJblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSI2MCIvPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5oaW50cy5jb21tYW5kczwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZvcm1BcnJheU5hbWU9ImNvbW1hbmRzIiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiXG4gICAgICAgICAgICAgICAgICpuZ0Zvcj0ibGV0IGNvbW1hbmRDb250cm9sIG9mIGNvbW1hbmRGb3JtQXJyYXkoKS5jb250cm9sczsgbGV0ICRpbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gW2Zvcm1Hcm91cE5hbWVdPSIkaW5kZXgiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgbm8tcGFkZGluZy1ib3R0b20gbm8tZ2FwIGNvbW1hbmQtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuYXR0cmlidXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlT25HYXRld2F5Ii8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2F0dHJpYnV0ZU9uR2F0ZXdheVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmF0dHJpYnV0ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjb21tYW5kIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnY29tbWFuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jb21tYW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb21tYW5kQ29udHJvbCgkaW5kZXgsICRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3MucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiBmaXQtY29udGVudDsiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZENvbW1hbmQoKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkub3RoZXJcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiIGZvcm1Hcm91cE5hbWU9ImNoZWNraW5nRGV2aWNlQWN0aXZpdHkiXG4gICAgICAgICAgICAgW2NsYXNzLm5vLXBhZGRpbmctYm90dG9tXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jaGVjay1kZXZpY2UtYWN0aXZpdHlcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0RldmljZUluYWN0aXZpdHkiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5XCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuY2hlY2tEZXZpY2VJbmFjdGl2aXR5XCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmluYWN0aXZpdHktdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QYWNrU2VuZERlbGF5TVMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2VuZERlbGF5TVNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5taW5pbWFsLXBhY2stZGVsYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubXF0dC1xb3M8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icW9zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSIxIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnFvc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5xb3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heFBheWxvYWRTaXplQnl0ZXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXBheWxvYWQtc2l6ZS1ieXRlc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTaXplVG9TZW5kIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbi1wYWNrLXNpemUtdG8tc2VuZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1yb3dzOm1pbi1jb250ZW50IG1pbm1heChhdXRvLDFmcikgbWluLWNvbnRlbnR9Omhvc3QgLmNvbmZpZ3VyYXRpb24tYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTZweDttYXgtaGVpZ2h0Ojcwdmh9Omhvc3QgLmRpYWxvZy1tb2RlIC5jb25maWd1cmF0aW9uLWJsb2Nre21heC1oZWlnaHQ6NjB2aH06aG9zdCAubWF0LXRvb2xiYXJ7Z3JpZC1yb3c6MTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLnRhYi1ncm91cC1ibG9ja3ttaW4td2lkdGg6MDtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OjA7Z3JpZC1yb3c6Mn06aG9zdCAudG9nZ2xlLWdyb3Vwe21hcmdpbi1yaWdodDphdXRvfTpob3N0IC5maXJzdC1jYXBpdGFse3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgdGV4dGFyZWF7cmVzaXplOm5vbmV9Omhvc3QgLnNhdmluZy1wZXJpb2R7ZmxleDoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY29tbWFuZC1jb250YWluZXJ7d2lkdGg6MTAwJX06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3J7ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3I6Zmlyc3QtY2hpbGR7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QgOjpuZy1kZWVwIC5wb2ludGVyLWV2ZW50e3BvaW50ZXItZXZlbnRzOmFsbH06aG9zdCA6Om5nLWRlZXAgLnRvZ2dsZS1ncm91cCBzcGFue3BhZGRpbmc6MCAyNXB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2NvbG9yOiNlMGUwZTB9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXg6aG92ZXJ7Y29sb3I6IzllOWU5ZX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q3QuVGJFcnJvckNvbXBvbmVudCxzZWxlY3RvcjoidGItZXJyb3IiLGlucHV0czpbIm5vTWFyZ2luIiwiZXJyb3IiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpXLk1hdFRhYkNvbnRlbnQsc2VsZWN0b3I6IlttYXRUYWJDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpUdC5GaWxlSW5wdXRDb21wb25lbnQsc2VsZWN0b3I6InRiLWZpbGUtaW5wdXQiLGlucHV0czpbImxhYmVsIiwiaGludCIsImFjY2VwdCIsIm5vRmlsZVRleHQiLCJpbnB1dElkIiwiYWxsb3dlZEV4dGVuc2lvbnMiLCJkcm9wTGFiZWwiLCJtYXhTaXplQnl0ZSIsImNvbnRlbnRDb252ZXJ0RnVuY3Rpb24iLCJyZXF1aXJlZCIsInJlcXVpcmVkQXNFcnJvciIsImRpc2FibGVkIiwiZXhpc3RpbmdGaWxlTmFtZSIsInJlYWRBc0JpbmFyeSIsIndvcmtGcm9tRmlsZU9iaiIsIm11bHRpcGxlRmlsZSJdLG91dHB1dHM6WyJmaWxlTmFtZUNoYW5nZWQiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6U3QuQ29weUJ1dHRvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItY29weS1idXR0b24iLGlucHV0czpbImNvcHlUZXh0IiwiZGlzYWJsZWQiLCJtZGlJY29uIiwiaWNvbiIsInRvb2x0aXBUZXh0IiwidG9vbHRpcFBvc2l0aW9uIiwic3R5bGUiLCJjb2xvciIsIm1pbmlCdXR0b24iXSxvdXRwdXRzOlsic3VjY2Vzc0NvcGllZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19XX0pfX1lKCJHYXRld2F5QmFzaWNDb25maWd1cmF0aW9uQ29tcG9uZW50IixEbyksSGUoW04oKV0sRG8ucHJvdG90eXBlLCJkaWFsb2dNb2RlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5EbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBjbGFzcz0idGFiLWdyb3VwLWJsb2NrIiBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiIFtjbGFzcy5kaWFsb2ctbW9kZV09ImRpYWxvZ01vZGUiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5yZW1vdGUtY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUNvbmZpZ3VyYXRpb24iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlU2hlbGwiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Imhvc3QiLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+c2VjdXJpdHkuc2VjdXJpdHk8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHNlY3VyaXR5VHlwZSBvZiBzZWN1cml0eVR5cGVzIHwga2V5dmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09InNlY3VyaXR5VHlwZS5rZXkiPnt7IHNlY3VyaXR5VHlwZS52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwnYWNjZXNzdG9rZW5cJykiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5hY2Nlc3MtdG9rZW48L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYWNjZXNzVG9rZW4iLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuYWNjZXNzVG9rZW5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5hY2Nlc3MtdG9rZW4tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2RldmljZS5jb3B5LWFjY2Vzcy10b2tlblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50b2tlblwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPHNlY3Rpb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5jbGllbnRJZDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LmNsaWVudElkLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBpY29uPSJjb250ZW50X2NvcHkiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPnNlY3VyaXR5LnVzZXJuYW1lPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkudXNlcm5hbWUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdnYXRld2F5LmNvcHktdXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy51c2VybmFtZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBzdHlsZT0id2lkdGg6IDEwMCUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIvPlxuICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnBhc3N3b3JkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXBhc3N3b3JkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDx0Yi1lcnJvciBzdHlsZT0ibWFyZ2luLXRvcDogLTEycHg7IGRpc3BsYXk6IGJsb2NrOyIgZnhGbGV4PSIxMDAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIlxuICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5XCcpLmhhc0Vycm9yKFwnYXRMZWFzdE9uZVwnKSA/XG4gICAgICAgICAgKFwnZGV2aWNlLmNsaWVudC1pZC1vci11c2VyLW5hbWUtbmVjZXNzYXJ5XCcgfCB0cmFuc2xhdGUpIDogXCdcJyI+PC90Yi1lcnJvcj5cbiAgICAgICAgICAgIDx0Yi1maWxlLWlucHV0XG4gICAgICAgICAgICAgIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICBoaW50PSJ7eyBcJ2dhdGV3YXkuaGludHMuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwndGxzXCcpIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImNhQ2VydCJcbiAgICAgICAgICAgICAgbGFiZWw9Int7IFwnc2VjdXJpdHkuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBbYWxsb3dlZEV4dGVuc2lvbnNdPSJcJ3BlbSwgY2VydCwga2V5XCciXG4gICAgICAgICAgICAgIFthY2NlcHRdPSJcJy5wZW0sIGFwcGxpY2F0aW9uL3BlbSwuY2VydCwgYXBwbGljYXRpb24vY2VydCwgLmtleSxhcHBsaWNhdGlvbi9rZXlcJyJcbiAgICAgICAgICAgICAgZHJvcExhYmVsPSJ7eyBcJ2dhdGV3YXkuZHJvcC1maWxlXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgPC90Yi1maWxlLWlucHV0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5sb2dzLmxvZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImxvZ3MiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGVGb3JtYXQiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5kYXRlRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0ZS1mb3JtXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sb2ctZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImxvZ0Zvcm1hdCIgcm93cz0iMiI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2dGb3JtYXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MubG9nLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmxvZy1mb3JtYXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iIGZvcm1Hcm91cE5hbWU9InJlbW90ZSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5yZW1vdGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWxvZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5yZW1vdGUtbG9nc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJsb2dMZXZlbCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJsb2NhbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5sb2NhbDwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIFtmb3JtQ29udHJvbF09ImxvZ1NlbGVjdG9yIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0NvbmZpZyBvZiBsb2NhbExvZ3NDb25maWdzIiBbdmFsdWVdPSJsb2dDb25maWciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmlyc3QtY2FwaXRhbCI+e3sgbG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwLmdldChsb2dDb25maWcpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJnZXRMb2dGb3JtR3JvdXAobG9nU2VsZWN0b3IudmFsdWUpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5maWxlLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaWxlUGF0aCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmZpbGVQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MuZmlsZS1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBzYXZpbmctcGVyaW9kIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1RpbWUiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5zYXZpbmdUaW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2QtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGhpZGVSZXF1aXJlZE1hcmtlciBzdHlsZT0ibWluLXdpZHRoOiAxMTBweDsgd2lkdGg6IDMwJSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1BlcmlvZCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBlcmlvZCBvZiBsb2dTYXZpbmdQZXJpb2RzIHwga2V5dmFsdWUiIFt2YWx1ZV09InBlcmlvZC5rZXkiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBlcmlvZC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImJhY2t1cENvdW50IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmJhY2t1cENvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5iYWNrdXAtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0ic3RvcmFnZSIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+Z2F0ZXdheS5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+Z2F0ZXdheS5oaW50cy5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgY2xhc3M9InRvZ2dsZS1ncm91cCIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZXNUcmFuc2xhdGlvbk1hcC5nZXQoc3RvcmFnZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+e3sgXCdnYXRld2F5LmhpbnRzLlwnICsgYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnR5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLk1FTU9SWSIgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnJlYWQtcmVjb3JkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3JkczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXJlY29yZHMtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuRklMRSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9mb2xkZXJfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXQtZm9ybS1maWVsZC1pbmZpeCBwb2ludGVyLWV2ZW50IHN1ZmZpeC1pY29uIiBhcmlhLWhpZGRlbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iaGVscC1pY29uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X2ZpbGVfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfZmlsZV9jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1maWxlLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWFkX3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWFkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfcGVyX2ZpbGUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19wZXJfZmlsZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuU1FMSVRFIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRhX2ZpbGVfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZpbGVfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGEtZm9sZGVyXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50dGwtY2hlY2staG91clwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5czwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2luX2RheXMiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2luX2RheXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLW1lc3NhZ2VzLWRheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ3JwY1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0iZ3JwYyIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5wZXJtaXQtd2l0aG91dC1jYWxsc1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5wZXJtaXQtd2l0aG91dC1jYWxsc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJQb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5zZXJ2ZXItcG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLnNlcnZlclBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1heFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ia2VlcEFsaXZlVGltZW91dE1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLWtlZXAtYWxpdmUtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVvdXRNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluVGltZUJldHdlZW5QaW5nc01zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblRpbWVCZXR3ZWVuUGluZ3NNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtYXhQaW5nc1dpdGhvdXREYXRhIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGFcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1heFBpbmdzV2l0aG91dERhdGFcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWNzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj0icHJpbWFyeSIgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InN0YXRzU2VuZFBlcmlvZEluU2Vjb25kcyIgdHlwZT0ibnVtYmVyIiBtaW49IjYwIi8+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnN0YXRpc3RpY3Muc3RhdHNTZW5kUGVyaW9kSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZHM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiIHRyYW5zbGF0ZT5nYXRld2F5LmhpbnRzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZm9ybUFycmF5TmFtZT0iY29tbWFuZHMiIGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29tbWFuZENvbnRyb2wgb2YgY29tbWFuZEZvcm1BcnJheSgpLmNvbnRyb2xzOyBsZXQgJGluZGV4ID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8c2VjdGlvbiBbZm9ybUdyb3VwTmFtZV09IiRpbmRleCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBuby1wYWRkaW5nLWJvdHRvbSBuby1nYXAgY29tbWFuZC1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJhdHRyaWJ1dGVPbkdhdGV3YXkiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnYXR0cmlidXRlT25HYXRld2F5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXR0cmlidXRlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MudGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCd0aW1lb3V0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2NvbW1hbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9InJlbW92ZUNvbW1hbmRDb250cm9sKCRpbmRleCwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItYm94LWJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IGZpdC1jb250ZW50OyJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkQ29tbWFuZCgpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuYWRkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5vdGhlclwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCIgZm9ybUdyb3VwTmFtZT0iY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSJcbiAgICAgICAgICAgICBbY2xhc3Mubm8tcGFkZGluZy1ib3R0b21dPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmNoZWNrRGV2aWNlSW5hY3Rpdml0eVwnKS52YWx1ZSI+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNoZWNrLWRldmljZS1hY3Rpdml0eVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImNoZWNrRGV2aWNlSW5hY3Rpdml0eSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jaGVja2luZy1kZXZpY2UtYWN0aXZpdHlcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlUaW1lb3V0U2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBmb3JtQ29udHJvbE5hbWU9ImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5pbmFjdGl2aXR5LXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmFkdmFuY2VkPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTZW5kRGVsYXlNUyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbmltYWwtcGFjay1kZWxheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tcXR0LXFvczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJxb3MiIHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjEiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtYXhcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnFvc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGF5bG9hZFNpemVCeXRlcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1heFBheWxvYWRTaXplQnl0ZXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluUGFja1NpemVUb1NlbmQiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2l6ZVRvU2VuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWluLXBhY2stc2l6ZS10by1zZW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLXJvd3M6bWluLWNvbnRlbnQgbWlubWF4KGF1dG8sMWZyKSBtaW4tY29udGVudH06aG9zdCAuY29uZmlndXJhdGlvbi1ibG9ja3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxNnB4O21heC1oZWlnaHQ6NzB2aH06aG9zdCAuZGlhbG9nLW1vZGUgLmNvbmZpZ3VyYXRpb24tYmxvY2t7bWF4LWhlaWdodDo2MHZofTpob3N0IC5tYXQtdG9vbGJhcntncmlkLXJvdzoxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzAwMDAwMGRlIWltcG9ydGFudH06aG9zdCAudGFiLWdyb3VwLWJsb2Nre21pbi13aWR0aDowO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6MDtncmlkLXJvdzoyfTpob3N0IC50b2dnbGUtZ3JvdXB7bWFyZ2luLXJpZ2h0OmF1dG99Omhvc3QgLmZpcnN0LWNhcGl0YWx7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZX06aG9zdCB0ZXh0YXJlYXtyZXNpemU6bm9uZX06aG9zdCAuc2F2aW5nLXBlcmlvZHtmbGV4OjF9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVye3dpZHRoOjEwMCV9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIC5jb21tYW5kLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcjpmaXJzdC1jaGlsZHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH06aG9zdCA6Om5nLWRlZXAgLnBvaW50ZXItZXZlbnR7cG9pbnRlci1ldmVudHM6YWxsfTpob3N0IDo6bmctZGVlcCAudG9nZ2xlLWdyb3VwIHNwYW57cGFkZGluZzowIDI1cHh9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7Y29sb3I6I2UwZTBlMH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeDpob3Zlcntjb2xvcjojOWU5ZTllfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkRldmljZVNlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOkplLk1hdERpYWxvZ31dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dNb2RlOlt7dHlwZTphfV0saW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZDpbe3R5cGU6bH1dfX0pO2NsYXNzIFBve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCIiKSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5hZHZhbmNlZEZvcm1Db250cm9sLnJlc2V0KGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMuYWR2YW5jZWRGb3JtQ29udHJvbC52YWxpZD9udWxsOnthZHZhbmNlZEZvcm1Db250cm9sOnt2YWxpZDohMX19fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpQbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+UG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48dGItanNvbi1vYmplY3QtZWRpdFxuICBmaWxsSGVpZ2h0PSJ0cnVlIlxuICBjbGFzcz0idGItZmxleCBjb25maWctY29udGFpbmVyIlxuICBmeExheW91dD0iY29sdW1uIlxuICBqc29uUmVxdWlyZWRcbiAgbGFiZWw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX0iXG4gIFtmb3JtQ29udHJvbF09ImFkdmFuY2VkRm9ybUNvbnRyb2wiXG4vPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5jb25maWctY29udGFpbmVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KTtwYWRkaW5nOjhweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUFkdmFuY2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudCIsUG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5QbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjx0Yi1qc29uLW9iamVjdC1lZGl0XG4gIGZpbGxIZWlnaHQ9InRydWUiXG4gIGNsYXNzPSJ0Yi1mbGV4IGNvbmZpZy1jb250YWluZXIiXG4gIGZ4TGF5b3V0PSJjb2x1bW4iXG4gIGpzb25SZXF1aXJlZFxuICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgW2Zvcm1Db250cm9sXT0iYWR2YW5jZWRGb3JtQ29udHJvbCJcbi8+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmNvbmZpZy1jb250YWluZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpO3BhZGRpbmc6OHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIEdve2NvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLmRldmljZVNlcnZpY2U9bix0aGlzLmNkPWEsdGhpcy5Db25maWd1cmF0aW9uTW9kZXM9b24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5nYXRld2F5Q29uZmlnQXR0cmlidXRlS2V5cz1bImdlbmVyYWxfY29uZmlndXJhdGlvbiIsImdycGNfY29uZmlndXJhdGlvbiIsImxvZ3NfY29uZmlndXJhdGlvbiIsInN0b3JhZ2VfY29uZmlndXJhdGlvbiIsIlJlbW90ZUxvZ2dpbmdMZXZlbCIsIm1vZGUiXSx0aGlzLmdhdGV3YXlDb25maWdHcm91cD10aGlzLmZiLmdyb3VwKHtiYXNpY0NvbmZpZzpbXSxhZHZhbmNlZENvbmZpZzpbXSxtb2RlOltvbi5CQVNJQ119KSx0aGlzLm9ic2VydmVBbGlnbkNvbmZpZ3MoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmZldGNoQ29uZmlnQXR0cmlidXRlKHRoaXMuZGV2aWNlKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1zYXZlQ29uZmlnKCl7Y29uc3R7bW9kZTplLGFkdmFuY2VkQ29uZmlnOnR9PXBlKHRoaXMucmVtb3ZlRW1wdHkodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAudmFsdWUpKSxuPXttb2RlOmUsLi4udH07bi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPU9iamVjdC52YWx1ZXMobi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPz9bXSk7Y29uc3QgYT10aGlzLmdlbmVyYXRlQXR0cmlidXRlcyhuKTt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsYSkucGlwZShVZSgoZT0+dGhpcy51cGRhdGVDcmVkZW50aWFscyhuLnRoaW5nc2JvYXJkLnNlY3VyaXR5KSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5kaWFsb2dSZWY/dGhpcy5kaWFsb2dSZWYuY2xvc2UoKToodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSl9KSl9b2JzZXJ2ZUFsaWduQ29uZmlncygpe3RoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5CQVNJQ3x8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYWR2YW5jZWRDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImJhc2ljQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5BRFZBTkNFRHx8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWdlbmVyYXRlQXR0cmlidXRlcyhlKXtjb25zdCB0PVtdLG49KGUsbik9Pnt0LnB1c2goe2tleTplLHZhbHVlOm59KX0sYT0oZSx0KT0+e3Q9ey4uLnQsdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LG4oZSx0KX07cmV0dXJuIG4oIlJlbW90ZUxvZ2dpbmdMZXZlbCIsZS5sb2dzPy5yZW1vdGU/LmVuYWJsZWQ/ZS5sb2dzLnJlbW90ZS5sb2dMZXZlbDpNdC5OT05FKSxkZWxldGUgZS5jb25uZWN0b3JzLG4oImxvZ3NfY29uZmlndXJhdGlvbiIsdGhpcy5nZW5lcmF0ZUxvZ3NGaWxlKGUubG9ncykpLGEoImdycGNfY29uZmlndXJhdGlvbiIsZS5ncnBjKSxhKCJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iLGUuc3RvcmFnZSksYSgiZ2VuZXJhbF9jb25maWd1cmF0aW9uIixlLnRoaW5nc2JvYXJkKSxuKCJtb2RlIixlLm1vZGUpLHR9dXBkYXRlQ3JlZGVudGlhbHMoZSl7bGV0IHQ9e307c3dpdGNoKGUudHlwZSl7Y2FzZSBWdC5VU0VSTkFNRV9QQVNTV09SRDp0aGlzLnNob3VsZFVwZGF0ZUNyZWRlbnRpYWxzKGUpJiYodD10aGlzLmdlbmVyYXRlTXF0dENyZWRlbnRpYWxzKGUpKTticmVhaztjYXNlIFZ0LkFDQ0VTU19UT0tFTjpjYXNlIFZ0LlRMU19BQ0NFU1NfVE9LRU46dGhpcy5zaG91bGRVcGRhdGVBY2Nlc3NUb2tlbihlKSYmKHQ9e2NyZWRlbnRpYWxzVHlwZTpVLkFDQ0VTU19UT0tFTixjcmVkZW50aWFsc0lkOmUuYWNjZXNzVG9rZW59KX1yZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoP3RoaXMuZGV2aWNlU2VydmljZS5zYXZlRGV2aWNlQ3JlZGVudGlhbHMoey4uLnRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLC4uLnR9KTpJZShudWxsKX1zaG91bGRVcGRhdGVDcmVkZW50aWFscyhlKXtpZih0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLk1RVFRfQkFTSUMpcmV0dXJuITA7Y29uc3QgdD1KU09OLnBhcnNlKHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLmNyZWRlbnRpYWxzVmFsdWUpO3JldHVybiEodC5jbGllbnRJZD09PWUuY2xpZW50SWQmJnQudXNlck5hbWU9PT1lLnVzZXJuYW1lJiZ0LnBhc3N3b3JkPT09ZS5wYXNzd29yZCl9Z2VuZXJhdGVNcXR0Q3JlZGVudGlhbHMoZSl7Y29uc3R7Y2xpZW50SWQ6dCx1c2VybmFtZTpuLHBhc3N3b3JkOmF9PWUsbz17Li4udCYme2NsaWVudElkOnR9LC4uLm4mJnt1c2VyTmFtZTpufSwuLi5hJiZ7cGFzc3dvcmQ6YX19O3JldHVybntjcmVkZW50aWFsc1R5cGU6VS5NUVRUX0JBU0lDLGNyZWRlbnRpYWxzVmFsdWU6SlNPTi5zdHJpbmdpZnkobyl9fXNob3VsZFVwZGF0ZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLkFDQ0VTU19UT0tFTnx8dGhpcy5pbml0aWFsQ3JlZGVudGlhbHMuY3JlZGVudGlhbHNJZCE9PWUuYWNjZXNzVG9rZW59Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYmJnRoaXMuZGlhbG9nUmVmLmNsb3NlKCl9cmVtb3ZlRW1wdHkoZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKChbZSx0XSk9Pm51bGwhPXQpKS5tYXAoKChbZSx0XSk9PltlLHQ9PT1PYmplY3QodCk/dGhpcy5yZW1vdmVFbXB0eSh0KTp0XSkpKX1nZW5lcmF0ZUxvZ3NGaWxlKGUpe2NvbnN0IHQ9e3ZlcnNpb246MSxkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM6ITEsZm9ybWF0dGVyczp7TG9nRm9ybWF0dGVyOntjbGFzczoibG9nZ2luZy5Gb3JtYXR0ZXIiLGZvcm1hdDplLmxvZ0Zvcm1hdCxkYXRlZm10OmUuZGF0ZUZvcm1hdH19LGhhbmRsZXJzOntjb25zb2xlSGFuZGxlcjp7Y2xhc3M6ImxvZ2dpbmcuU3RyZWFtSGFuZGxlciIsZm9ybWF0dGVyOiJMb2dGb3JtYXR0ZXIiLGxldmVsOjAsc3RyZWFtOiJleHQ6Ly9zeXMuc3Rkb3V0In0sZGF0YWJhc2VIYW5kbGVyOntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6Ii4vbG9ncy9kYXRhYmFzZS5sb2ciLGJhY2t1cENvdW50OjEsZW5jb2Rpbmc6InV0Zi04In19LGxvZ2dlcnM6e2RhdGFiYXNlOntoYW5kbGVyczpbImRhdGFiYXNlSGFuZGxlciIsImNvbnNvbGVIYW5kbGVyIl0sbGV2ZWw6IkRFQlVHIixwcm9wYWdhdGU6ITF9fSxyb290OntsZXZlbDoiRVJST1IiLGhhbmRsZXJzOlsiY29uc29sZUhhbmRsZXIiXX0sdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9O3JldHVybiB0aGlzLmFkZExvY2FsTG9nZ2Vycyh0LGUubG9jYWwpLHR9YWRkTG9jYWxMb2dnZXJzKGUsdCl7Zm9yKGNvbnN0IG4gb2YgT2JqZWN0LmtleXModCkpZS5oYW5kbGVyc1tuKyJIYW5kbGVyIl09dGhpcy5jcmVhdGVIYW5kbGVyT2JqKHRbbl0sbiksZS5sb2dnZXJzW25dPXRoaXMuY3JlYXRlTG9nZ2VyT2JqKHRbbl0sbil9Y3JlYXRlSGFuZGxlck9iaihlLHQpe3JldHVybntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6YCR7ZS5maWxlUGF0aH0vJHt0fS5sb2dgLGJhY2t1cENvdW50OmUuYmFja3VwQ291bnQsaW50ZXJ2YWw6ZS5zYXZpbmdUaW1lLHdoZW46ZS5zYXZpbmdQZXJpb2QsZW5jb2Rpbmc6InV0Zi04In19Y3JlYXRlTG9nZ2VyT2JqKGUsdCl7cmV0dXJue2hhbmRsZXJzOltgJHt0fUhhbmRsZXJgLCJjb25zb2xlSGFuZGxlciJdLGxldmVsOmUubG9nTGV2ZWwscHJvcGFnYXRlOiExfX1mZXRjaENvbmZpZ0F0dHJpYnV0ZShlKXtlLmlkIT09ayYmdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLkNMSUVOVF9TQ09QRSkucGlwZShfZSgodD0+dC5sZW5ndGg/SWUodCk6dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLlNIQVJFRF9TQ09QRSx0aGlzLmdhdGV3YXlDb25maWdBdHRyaWJ1dGVLZXlzKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbmZpZ3MoZSksdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9dXBkYXRlQ29uZmlncyhlKXtjb25zdCB0PXt0aGluZ3Nib2FyZDp7fSxncnBjOnt9LGxvZ3M6e30sc3RvcmFnZTp7fSxtb2RlOm9uLkJBU0lDfTtlLmZvckVhY2goKGU9Pntzd2l0Y2goZS5rZXkpe2Nhc2UiZ2VuZXJhbF9jb25maWd1cmF0aW9uIjp0LnRoaW5nc2JvYXJkPWUudmFsdWUsdGhpcy51cGRhdGVGb3JtQ29udHJvbHMoZS52YWx1ZSk7YnJlYWs7Y2FzZSJncnBjX2NvbmZpZ3VyYXRpb24iOnQuZ3JwYz1lLnZhbHVlO2JyZWFrO2Nhc2UibG9nc19jb25maWd1cmF0aW9uIjp0LmxvZ3M9dGhpcy5sb2dzVG9PYmooZS52YWx1ZSk7YnJlYWs7Y2FzZSJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iOnQuc3RvcmFnZT1lLnZhbHVlO2JyZWFrO2Nhc2UibW9kZSI6dC5tb2RlPWUudmFsdWU7YnJlYWs7Y2FzZSJSZW1vdGVMb2dnaW5nTGV2ZWwiOnQubG9ncz17Li4udC5sb2dzLHJlbW90ZTp7ZW5hYmxlZDplLnZhbHVlIT09TXQuTk9ORSxsb2dMZXZlbDplLnZhbHVlfX19fSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS5zZXRWYWx1ZSh0LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIikuc2V0VmFsdWUodCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUNvbnRyb2xzKGUpe2NvbnN0e3R5cGU6dCxhY2Nlc3NUb2tlbjpuLC4uLmF9PWUuc2VjdXJpdHk/P3t9O3RoaXMuaW5pdGlhbENyZWRlbnRpYWxzPXtkZXZpY2VJZDp0aGlzLmRldmljZSxjcmVkZW50aWFsc1R5cGU6dCxjcmVkZW50aWFsc0lkOm4sY3JlZGVudGlhbHNWYWx1ZTpKU09OLnN0cmluZ2lmeShhKX19bG9nc1RvT2JqKGUpe2NvbnN0e2Zvcm1hdDp0LGRhdGVmbXQ6bn09ZS5mb3JtYXR0ZXJzLkxvZ0Zvcm1hdHRlcjtyZXR1cm57bG9jYWw6T2JqZWN0LmtleXMoUHQpLnJlZHVjZSgoKHQsbik9Pntjb25zdCBhPWUuaGFuZGxlcnNbYCR7bn1IYW5kbGVyYF18fHt9LG89ZS5sb2dnZXJzW25dfHx7fTtyZXR1cm4gdFtuXT17bG9nTGV2ZWw6by5sZXZlbHx8TXQuSU5GTyxmaWxlUGF0aDphLmZpbGVuYW1lPy5zcGxpdChgLyR7bn1gKVswXXx8Ii4vbG9ncyIsYmFja3VwQ291bnQ6YS5iYWNrdXBDb3VudHx8NyxzYXZpbmdUaW1lOmEuaW50ZXJ2YWx8fDMsc2F2aW5nUGVyaW9kOmEud2hlbnx8RHQuZGF5c30sdH0pLHt9KSxsb2dGb3JtYXQ6dCxkYXRlRm9ybWF0Om59fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6R28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6R28sc2VsZWN0b3I6InRiLWdhdGV3YXktY29uZmlndXJhdGlvbiIsaW5wdXRzOntkZXZpY2U6ImRldmljZSIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsaW5wdXRzOlsiZGV2aWNlIiwiZGlhbG9nTW9kZSJdLG91dHB1dHM6WyJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6UG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUNvbmZpZ3VyYXRpb25Db21wb25lbnQiLEdvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkdvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbmZpZ3VyYXRpb24iLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTt2YXIgT289e2dhdGV3YXk6e2FkZHJlc3M6IkFkZHJlc3MiLCJhZGRyZXNzLXJlcXVpcmVkIjoiQWRkcmVzcyByZXF1aXJlZCIsImFkZC1lbnRyeSI6IkFkZCBjb25maWd1cmF0aW9uIiwiYWRkLWF0dHJpYnV0ZSI6IkFkZCBhdHRyaWJ1dGUiLCJhZGQtYXR0cmlidXRlLXVwZGF0ZSI6IkFkZCBhdHRyaWJ1dGUgdXBkYXRlIiwiYWRkLWtleSI6IkFkZCBrZXkiLCJhZGQtdGltZXNlcmllcyI6IkFkZCB0aW1lIHNlcmllcyIsImFkZC1tYXBwaW5nIjoiQWRkIG1hcHBpbmciLCJhZGQtc2xhdmUiOiJBZGQgU2xhdmUiLGFyZ3VtZW50czoiQXJndW1lbnRzIiwiYWRkLXJwYy1tZXRob2QiOiJBZGQgbWV0aG9kIiwiYWRkLXJwYy1yZXF1ZXN0IjoiQWRkIHJlcXVlc3QiLCJhZGQtdmFsdWUiOiJBZGQgYXJndW1lbnQiLGJhdWRyYXRlOiJCYXVkcmF0ZSIsYnl0ZXNpemU6IkJ5dGVzaXplIiwiZGVsZXRlLXZhbHVlIjoiRGVsZXRlIHZhbHVlIiwiZGVsZXRlLXJwYy1tZXRob2QiOiJEZWxldGUgbWV0aG9kIiwiZGVsZXRlLXJwYy1yZXF1ZXN0IjoiRGVsZXRlIHJlcXVlc3QiLCJkZWxldGUtYXR0cmlidXRlLXVwZGF0ZSI6IkRlbGV0ZSBhdHRyaWJ1dGUgdXBkYXRlIixhZHZhbmNlZDoiQWR2YW5jZWQiLCJhZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzIjoiQWR2YW5jZWQgY29ubmVjdGlvbiBzZXR0aW5ncyIsYXR0cmlidXRlczoiQXR0cmlidXRlcyIsImF0dHJpYnV0ZS11cGRhdGVzIjoiQXR0cmlidXRlIHVwZGF0ZXMiLCJhdHRyaWJ1dGUtZmlsdGVyIjoiQXR0cmlidXRlIGZpbHRlciIsImF0dHJpYnV0ZS1maWx0ZXItaGludCI6IkZpbHRlciBmb3IgaW5jb21pbmcgYXR0cmlidXRlIG5hbWUgZnJvbSBwbGF0Zm9ybSwgc3VwcG9ydHMgcmVndWxhciBleHByZXNzaW9uLiIsImF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWQiOiJBdHRyaWJ1dGUgZmlsdGVyIHJlcXVpcmVkLiIsImF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb24iOiJBdHRyaWJ1dGUgbmFtZSBleHByZXNzaW9uIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGV4cHJlc3Npb24gcmVxdWlyZWQuIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1oaW50IjoiSGludCBmb3IgQXR0cmlidXRlIG5hbWUgZXhwcmVzc2lvbiIsYmFzaWM6IkJhc2ljIiwiYnl0ZS1vcmRlciI6IkJ5dGUgb3JkZXIiLCJ3b3JkLW9yZGVyIjoiV29yZCBvcmRlciIsYnJva2VyOntjb25uZWN0aW9uOiJDb25uZWN0aW9uIHRvIGJyb2tlciIsbmFtZToiQnJva2VyIG5hbWUiLCJuYW1lLXJlcXVpcmVkIjoiQnJva2VyIG5hbWUgcmVxdWlyZWQuIiwic2VjdXJpdHktdHlwZXMiOnthbm9ueW1vdXM6IkFub255bW91cyIsYmFzaWM6IkJhc2ljIixjZXJ0aWZpY2F0ZXM6IkNlcnRpZmljYXRlcyJ9fSwiQ0EtY2VydGlmaWNhdGUtcGF0aCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsInBhdGgtdG8tQ0EtY2VydC1yZXF1aXJlZCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjaGFuZ2UtY29ubmVjdG9yLXRpdGxlIjoiQ29uZmlybSBjb25uZWN0b3IgY2hhbmdlIiwiY2hhbmdlLWNvbm5lY3Rvci10ZXh0IjoiU3dpdGNoaW5nIGNvbm5lY3RvcnMgd2lsbCBkaXNjYXJkIGFueSB1bnNhdmVkIGNoYW5nZXMuIENvbnRpbnVlPyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IkNoZWNraW5nIGRldmljZSBhY3Rpdml0eSIsY29tbWFuZDoiRG9ja2VyIGNvbW1hbmRzIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlciBjb21tYW5kIGhhcyBiZWVuIGNvcGllZCB0byBjbGlwYm9hcmQiLGNvbmZpZ3VyYXRpb246IkNvbmZpZ3VyYXRpb24iLCJhZGQtY29ubmVjdG9yIjoiQWRkIGNvbm5lY3RvciIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKHMpIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJDb25uZWN0IGF0dGVtcHQgdGltZSAobXMpIiwiY29ubmVjdC1hdHRlbXB0LWNvdW50IjoiQ29ubmVjdCBhdHRlbXB0IGNvdW50IiwiY29weS11c2VybmFtZSI6IkNvcHkgdXNlcm5hbWUiLCJjb3B5LXBhc3N3b3JkIjoiQ29weSBwYXNzd29yZCIsImNvcHktY2xpZW50LWlkIjoiQ29weSBjbGllbnQgSUQiLCJjb25uZWN0b3ItY3JlYXRlZCI6IkNvbm5lY3RvciBjcmVhdGVkIiwiY29ubmVjdG9yLXVwZGF0ZWQiOiJDb25uZWN0b3IgdXBkYXRlZCIsInJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGUiOiJTYXZlIFRlbXBsYXRlIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXNwb25zZSIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiVXNlIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gdG8gcnVuIElvVCBHYXRld2F5IGluIERvY2tlciBjb21wb3NlIHdpdGggY3JlZGVudGlhbHMgZm9yIHNlbGVjdGVkIGRldmljZSIsImluc3RhbGwtZG9ja2VyLWNvbXBvc2UiOiJVc2UgdGhlIGluc3RydWN0aW9ucyB0byBkb3dubG9hZCwgaW5zdGFsbCBhbmQgc2V0dXAgZG9ja2VyIGNvbXBvc2UiLCJkZXZpY2UtaW5mby1zZXR0aW5ncyI6IkRldmljZSBpbmZvIHNldHRpbmdzIiwiZGV2aWNlLWluZm8iOnsiZW50aXR5LWZpZWxkIjoiRW50aXR5IGZpZWxkIixzb3VyY2U6IlNvdXJjZSIsZXhwcmVzc2lvbjoiVmFsdWUgLyBFeHByZXNzaW9uIiwiZXhwcmVzc2lvbi1oaW50IjoiU2hvdyBoZWxwIixuYW1lOiJOYW1lIiwicHJvZmlsZS1uYW1lIjoiUHJvZmlsZSBuYW1lIiwiZGV2aWNlLW5hbWUtZXhwcmVzc2lvbiI6IkRldmljZSBuYW1lIGV4cHJlc3Npb24iLCJkZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJkZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIHByb2ZpbGUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4ifSwiZGV2aWNlLW5hbWUtZmlsdGVyIjoiRGV2aWNlIG5hbWUgZmlsdGVyIiwiZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZmlsdGVyIGluY29taW5nIGRhdGEgYnkgZGV2aWNlIG5hbWUuIiwiZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZmlsdGVyIGlzIHJlcXVpcmVkLiIsZGV0YWlsczoiRGV0YWlscyIsImRlbGV0ZS1tYXBwaW5nLXRpdGxlIjoiRGVsZXRlIG1hcHBpbmc/IiwiZGVsZXRlLXNsYXZlLXRpdGxlIjoiRGVsZXRlIHNsYXZlPyIsZGl2aWRlcjoiRGl2aWRlciIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6IkRvd25sb2FkIGNvbmZpZ3VyYXRpb24gZmlsZSIsImRvd25sb2FkLWRvY2tlci1jb21wb3NlIjoiRG93bmxvYWQgZG9ja2VyLWNvbXBvc2UueW1sIGZvciB5b3VyIGdhdGV3YXkiLCJlbmFibGUtcmVtb3RlLWxvZ2dpbmciOiJFbmFibGUgcmVtb3RlIGxvZ2dpbmciLCJlbGxpcHNpcy1jaGlwcy10ZXh0IjoiKyB7e2NvdW50fX0gbW9yZSIsImxhdW5jaC1nYXRld2F5IjoiTGF1bmNoIGdhdGV3YXkiLCJsYXVuY2gtY29tbWFuZCI6IkxhdW5jaCBjb21tYW5kIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoiU3RhcnQgdGhlIGdhdGV3YXkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSB0ZXJtaW5hbCBmcm9tIGZvbGRlciB3aXRoIGRvY2tlci1jb21wb3NlLnltbCBmaWxlIiwibG9ncy1jb25maWd1cmF0aW9uIjoiTG9ncyBjb25maWd1cmF0aW9uIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXRlIGEgbmV3IGdhdGV3YXkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgZ2F0ZXdheSB3aXRoIG5hbWU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkNyZWF0ZWQgdGltZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXIiOiJDb25maWd1cmF0aW9ucyB3aWxsIGJlIGRlbGV0ZWQiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6IlR1cm5pbmcgb2ZmIFJlbW90ZSBDb25maWd1cmF0aW9uIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgaXMgcGh5c2ljYWwgYWNjZXNzIHRvIHRoZSBHYXRld2F5LiBBbGwgcHJldmlvdXMgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkLjxicj48YnI+IFxuVG8gdHVybiBvZmYgY29uZmlndXJhdGlvbiwgZW50ZXIgZ2F0ZXdheSBuYW1lIGJlbG93IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0IjoiR2F0ZXdheSBuYW1lIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIG1hbmRhdG9yeSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtIjoiVHVybiBPZmYiLCJjb25uZWN0b3ItZHVwbGljYXRlLW5hbWUiOiJDb25uZWN0b3Igd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMuIiwiY29ubmVjdG9yLXNpZGUiOiJDb25uZWN0b3Igc2lkZSIsInBheWxvYWQtdHlwZSI6IlBheWxvYWQgdHlwZSIsInBsYXRmb3JtLXNpZGUiOiJQbGF0Zm9ybSBzaWRlIixKU09OOiJKU09OIiwiSlNPTi1oaW50IjoiQ29udmVydGVyIGZvciB0aGlzIHBheWxvYWQgdHlwZSBwcm9jZXNzZXMgTVFUVCBtZXNzYWdlcyBpbiBKU09OIGZvcm1hdC4gSXQgdXNlcyBKU09OIFBhdGggZXhwcmVzc2lvbnMgdG8gZXh0cmFjdCB2aXRhbCBkZXRhaWxzIHN1Y2ggYXMgZGV2aWNlIG5hbWVzLCBkZXZpY2UgcHJvZmlsZSBuYW1lcywgYXR0cmlidXRlcywgYW5kIHRpbWUgc2VyaWVzIGZyb20gdGhlIG1lc3NhZ2UuIEFuZCByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGdldCBkZXZpY2UgZGV0YWlscyBmcm9tIHRvcGljcy4iLGJ5dGVzOiJCeXRlcyIsImJ5dGVzLWhpbnQiOiJDb252ZXJ0ZXIgZm9yIHRoaXMgcGF5bG9hZCB0eXBlIGRlc2lnbmVkIGZvciBiaW5hcnkgTVFUVCBwYXlsb2FkcywgdGhpcyBjb252ZXJ0ZXIgZGlyZWN0bHkgaW50ZXJwcmV0cyBiaW5hcnkgZGF0YSB0byByZXRyaWV2ZSBkZXZpY2UgbmFtZXMgYW5kIGRldmljZSBwcm9maWxlIG5hbWVzLCBhbG9uZyB3aXRoIGF0dHJpYnV0ZXMgYW5kIHRpbWUgc2VyaWVzLCB1c2luZyBzcGVjaWZpYyBieXRlIHBvc2l0aW9ucyBmb3IgZGF0YSBleHRyYWN0aW9uLiIsY3VzdG9tOiJDdXN0b20iLCJjdXN0b20taGludCI6IlRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gdXNlIGEgY3VzdG9tIGNvbnZlcnRlciBmb3Igc3BlY2lmaWMgZGF0YSB0YXNrcy4gWW91IG5lZWQgdG8gYWRkIHlvdXIgY3VzdG9tIGNvbnZlcnRlciB0byB0aGUgZXh0ZW5zaW9uIGZvbGRlciBhbmQgZW50ZXIgaXRzIGNsYXNzIG5hbWUgaW4gdGhlIFVJIHNldHRpbmdzLiBBbnkga2V5cyB5b3UgcHJvdmlkZSB3aWxsIGJlIHNlbnQgYXMgY29uZmlndXJhdGlvbiB0byB5b3VyIGN1c3RvbSBjb252ZXJ0ZXIuIiwiY2xpZW50LWNlcnQtcGF0aCI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIGZpbGUiLCJwYXRoLXRvLWNsaWVudC1jZXJ0LXJlcXVpcmVkIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjbGllbnQtaWQiOiJDbGllbnQgSUQiLCJkYXRhLWNvbnZlcnNpb24iOiJEYXRhIGNvbnZlcnNpb24iLCJkYXRhLW1hcHBpbmciOiJEYXRhIG1hcHBpbmciLCJkYXRhLW1hcHBpbmctaGludCI6IkRhdGEgbWFwcGluZyBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSB0byBwYXJzZSBhbmQgY29udmVydCB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIGEgTVFUVCBjbGllbnQgaW4gaW5jb21pbmcgbWVzc2FnZXMgaW50byBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBkYXRhIGtleXMuIiwib3BjdWEtZGF0YS1tYXBwaW5nLWhpbnQiOiJEYXRhIG1hcHBpbmcgcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgdG8gcGFyc2UgYW5kIGNvbnZlcnQgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBhIE9QQ1VBIHNlcnZlciBpbnRvIHNwZWNpZmljIGRhdGEga2V5cy4iLGRlbGV0ZToiRGVsZXRlIGNvbmZpZ3VyYXRpb24iLCJkZWxldGUtYXR0cmlidXRlIjoiRGVsZXRlIGF0dHJpYnV0ZSIsImRlbGV0ZS1rZXkiOiJEZWxldGUga2V5IiwiZGVsZXRlLXRpbWVzZXJpZXMiOiJEZWxldGUgdGltZSBzZXJpZXMiLGRlZmF1bHQ6IkRlZmF1bHQiLCJkZXZpY2Utbm9kZSI6IkRldmljZSBub2RlIiwiZGV2aWNlLW5vZGUtcmVxdWlyZWQiOiJEZXZpY2Ugbm9kZSByZXF1aXJlZC4iLCJkZXZpY2Utbm9kZS1oaW50IjoiUGF0aCBvciBpZGVudGlmaWVyIGZvciBkZXZpY2Ugbm9kZSBvbiBPUEMgVUEgc2VydmVyLiBSZWxhdGl2ZSBwYXRocyBmcm9tIGl0IGZvciBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBjYW4gYmUgdXNlZC4iLCJkZXZpY2UtbmFtZSI6IkRldmljZSBuYW1lIiwiZGV2aWNlLXByb2ZpbGUtbGFiZWwiOiJEZXZpY2UgcHJvZmlsZSIsImRldmljZS1uYW1lLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgcmVxdWlyZWQiLCJkZXZpY2UtcHJvZmlsZS1yZXF1aXJlZCI6IkRldmljZSBwcm9maWxlIHJlcXVpcmVkIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGVuYWJsZToiRW5hYmxlIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IkVuYWJsZSBzdWJzY3JpcHRpb24iLGV4dGVuc2lvbjoiRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uLWhpbnQiOiJQdXQgeW91ciBjb252ZXJ0ZXIgY2xhc3NuYW1lIGluIHRoZSBmaWVsZC4gQ3VzdG9tIGNvbnZlcnRlciB3aXRoIHN1Y2ggY2xhc3Mgc2hvdWxkIGJlIGluIGV4dGVuc2lvbi9tcXR0IGZvbGRlci4iLCJleHRlbnNpb24tcmVxdWlyZWQiOiJFeHRlbnNpb24gaXMgcmVxdWlyZWQuIiwiZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24iOiJFeHRlbnNpb24gY29uZmlndXJhdGlvbiIsImV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnQiOiJDb25maWd1cmF0aW9uIGZvciBjb252ZXJ0b3IiLCJmaWxsLWNvbm5lY3Rvci1kZWZhdWx0cyI6IkZpbGwgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHQgdmFsdWVzIiwiZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludCI6IlRoaXMgcHJvcGVydHkgYWxsb3dzIHRvIGZpbGwgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0IHZhbHVlcyBvbiBpdCdzIGNyZWF0aW9uLiIsImZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MiOiJJbnB1dCByZXF1ZXN0IHBhcnNpbmciLCJmcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnQiOiJUaGVzZSBmaWVsZHMgc3VwcG9ydCBKU09OUGF0aCBleHByZXNzaW9ucyB0byBleHRyYWN0IGEgbmFtZSBmcm9tIGluY29taW5nIG1lc3NhZ2UuIiwiZnVuY3Rpb24tY29kZSI6IkZ1bmN0aW9uIGNvZGUiLCJmdW5jdGlvbi1jb2RlcyI6eyJyZWFkLWNvaWxzIjoiMDEgLSBSZWFkIENvaWxzIiwicmVhZC1kaXNjcmV0ZS1pbnB1dHMiOiIwMiAtIFJlYWQgRGlzY3JldGUgSW5wdXRzIiwicmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyI6IjAzIC0gUmVhZCBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyIsInJlYWQtaW5wdXQtcmVnaXN0ZXJzIjoiMDQgLSBSZWFkIElucHV0IFJlZ2lzdGVycyIsIndyaXRlLXNpbmdsZS1jb2lsIjoiMDUgLSBXcml0ZSBTaW5nbGUgQ29pbCIsIndyaXRlLXNpbmdsZS1ob2xkaW5nLXJlZ2lzdGVyIjoiMDYgLSBXcml0ZSBTaW5nbGUgSG9sZGluZyBSZWdpc3RlciIsIndyaXRlLW11bHRpcGxlLWNvaWxzIjoiMTUgLSBXcml0ZSBNdWx0aXBsZSBDb2lscyIsIndyaXRlLW11bHRpcGxlLWhvbGRpbmctcmVnaXN0ZXJzIjoiMTYgLSBXcml0ZSBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyJ9LCJ0by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MiOiJPdXRwdXQgcmVxdWVzdCBwcm9jZXNzaW5nIiwidG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzLWhpbnQiOiJGb3IgdGhlc2UgZmllbGRzIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFuZCB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhY3R1YWwgdmFsdWVzOiAke2RldmljZU5hbWV9LCAke2F0dHJpYnV0ZUtleX0sICR7YXR0cmlidXRlVmFsdWV9IixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImdlbmVyYXRlLWNsaWVudC1pZCI6IkdlbmVyYXRlIENsaWVudCBJRCIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsaW5mbzoiSW5mbyIsaWRlbnRpdHk6IklkZW50aXR5IiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJ1bml0LWlkIjoiVW5pdCBJRCIsaG9zdDoiSG9zdCIsImhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsaG9sZGluZ19yZWdpc3RlcnM6IkhvbGRpbmcgcmVnaXN0ZXJzIixjb2lsc19pbml0aWFsaXplcjoiQ29pbHMgaW5pdGlhbGl6ZXIiLGlucHV0X3JlZ2lzdGVyczoiSW5wdXQgcmVnaXN0ZXJzIixkaXNjcmV0ZV9pbnB1dHM6IkRpc2NyZXRlIGlucHV0cyIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIkpTT05QYXRoLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIGNvbnN0YW50cyBhbmQgSlNPTlBhdGggZXhwcmVzc2lvbnMuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWF4LW51bWJlci1vZi13b3JrZXJzIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIiwibWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnQiOiJNYXhpbWFsIG51bWJlciBvZiB3b3JrZXJzIHRocmVhZHMgZm9yIGNvbnZlcnRlcnMgXG4oVGhlIGFtb3VudCBvZiB3b3JrZXJzIGNoYW5nZXMgZHluYW1pY2FsbHksIGRlcGVuZGluZyBvbiBsb2FkKSBcblJlY29tbWVuZGVkIGFtb3VudCA1MC0xNTAuIiwibWF4LW51bWJlci1vZi13b3JrZXJzLXJlcXVpcmVkIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIGlzIHJlcXVpcmVkLiIsIm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyIjoiTWF4IG1lc3NhZ2VzIHF1ZXVlIHBlciB3b3JrZXIiLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1oaW50IjoiTWF4aW1hbCBtZXNzYWdlcyBjb3VudCB0aGF0IHdpbGwgYmUgaW4gdGhlIHF1ZXVlIFxuZm9yIGVhY2ggY29udmVydGVyIHdvcmtlci4iLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZCI6Ik1heCBtZXNzYWdlcyBxdWV1ZSBwZXIgd29ya2VyIGlzIHJlcXVpcmVkLiIsbWV0aG9kOiJNZXRob2QiLCJtZXRob2QtbmFtZSI6Ik1ldGhvZCBuYW1lIiwibWV0aG9kLXJlcXVpcmVkIjoiTWV0aG9kIG5hbWUgaXMgcmVxdWlyZWQuIiwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwIiwibWluLXBhY2stc2VuZC1kZWxheS1wYXR0ZXJuIjoiTWluIHBhY2sgc2VuZCBkZWxheSBpcyBub3QgdmFsaWQiLG11bHRpcGxpZXI6Ik11bHRpcGxpZXIiLG1vZGU6Ik1vZGUiLCJtb2RlbC1uYW1lIjoiTW9kZWwgbmFtZSIsbW9kaWZpZXI6Ik1vZGlmaWVyIiwibW9kaWZpZXItaW52YWxpZCI6Ik1vZGlmaWVyIGlzIG5vdCB2YWxpZCIsIm1xdHQtdmVyc2lvbiI6Ik1RVFQgdmVyc2lvbiIsbmFtZToiTmFtZSIsIm5hbWUtcmVxdWlyZWQiOiJOYW1lIGlzIHJlcXVpcmVkLiIsIm5vLWF0dHJpYnV0ZXMiOiJObyBhdHRyaWJ1dGVzIiwibm8tYXR0cmlidXRlLXVwZGF0ZXMiOiJObyBhdHRyaWJ1dGUgdXBkYXRlcyIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJuby10aW1lc2VyaWVzIjoiTm8gdGltZSBzZXJpZXMiLCJuby1rZXlzIjoiTm8ga2V5cyIsIm5vLXZhbHVlIjoiTm8gYXJndW1lbnRzIiwibm8tcnBjLW1ldGhvZHMiOiJObyBSUEMgbWV0aG9kcyIsIm5vLXJwYy1yZXF1ZXN0cyI6Ik5vIFJQQyByZXF1ZXN0cyIsInBhdGgtaGludCI6IlRoZSBwYXRoIGlzIGxvY2FsIHRvIHRoZSBnYXRld2F5IGZpbGUgc3lzdGVtIiwicGF0aC1sb2dzIjoiUGF0aCB0byBsb2cgZmlsZXMiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYXRoIGlzIHJlcXVpcmVkLiIscGFzc3dvcmQ6IlBhc3N3b3JkIiwicGFzc3dvcmQtcmVxdWlyZWQiOiJQYXNzd29yZCBpcyByZXF1aXJlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IktlZXAgYWxpdmUgcGVybWl0IHdpdGhvdXQgY2FsbHMiLCJwb2xsLXBlcmlvZCI6IlBvbGwgcGVyaW9kIChtcykiLCJwb2xsLXBlcmlvZC1lcnJvciI6IlBvbGwgcGVyaW9kIHNob3VsZCBiZSBhdCBsZWFzdCB7e21pbn19IChtcykuIixwb3J0OiJQb3J0IiwicG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIiwicG9ydC1saW1pdHMtZXJyb3IiOiJQb3J0IHNob3VsZCBiZSBudW1iZXIgZnJvbSB7e21pbn19IHRvIHt7bWF4fX0uIiwicHJpdmF0ZS1rZXktcGF0aCI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgZmlsZSIsInBhdGgtdG8tcHJpdmF0ZS1rZXktcmVxdWlyZWQiOiJQYXRoIHRvIHByaXZhdGUga2V5IGZpbGUgaXMgcmVxdWlyZWQuIixwYXJpdHk6IlBhcml0eSIsInByb2R1Y3QtY29kZSI6IlByb2R1Y3QgY29kZSIsInByb2R1Y3QtbmFtZSI6IlByb2R1Y3QgbmFtZSIscmF3OiJSYXciLHJldGFpbjoiUmV0YWluIiwicmV0YWluLWhpbnQiOiJUaGlzIGZsYWcgdGVsbHMgdGhlIGJyb2tlciB0byBzdG9yZSB0aGUgbWVzc2FnZSBmb3IgYSB0b3BpY1xuYW5kIGVuc3VyZXMgYW55IG5ldyBjbGllbnQgc3Vic2NyaWJpbmcgdG8gdGhhdCB0b3BpY1xud2lsbCByZWNlaXZlIHRoZSBzdG9yZWQgbWVzc2FnZS4iLHJlbW90ZToiUmVtb3RlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IkxvZ2dpbmcgbGV2ZWwiLCJyZW1vdmUtZW50cnkiOiJSZW1vdmUgY29uZmlndXJhdGlvbiIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLHJldHJpZXM6IlJldHJpZXMiLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cmllcyBvbiBlbXB0eSIsInJldHJpZXMtb24taW52YWxpZCI6IlJldHJpZXMgb24gaW52YWxpZCIscnBjOnt0aXRsZToie3t0eXBlfX0gQ29ubmVjdG9yIFJQQyBwYXJhbWV0ZXJzIiwidGVtcGxhdGVzLXRpdGxlIjoiQ29ubmVjdG9yIFJQQyBUZW1wbGF0ZXMiLG1ldGhvZEZpbHRlcjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1uYW1lIjoiTWV0aG9kIG5hbWUiLHJlcXVlc3RUb3BpY0V4cHJlc3Npb246IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiIscmVzcG9uc2VUb3BpY0V4cHJlc3Npb246IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLHJlc3BvbnNlVGltZW91dDoiUmVzcG9uc2UgdGltZW91dCIsdmFsdWVFeHByZXNzaW9uOiJWYWx1ZSBleHByZXNzaW9uIix0YWc6IlRhZyIsdHlwZToiVHlwZSIsZnVuY3Rpb25Db2RlOiJGdW5jdGlvbiBDb2RlIixvYmplY3RzQ291bnQ6Ik9iamVjdHMgQ291bnQiLGFkZHJlc3M6IkFkZHJlc3MiLG1ldGhvZDoiTWV0aG9kIixyZXF1ZXN0VHlwZToiUmVxdWVzdCBUeXBlIixyZXF1ZXN0VGltZW91dDoiUmVxdWVzdCBUaW1lb3V0IixvYmplY3RUeXBlOiJPYmplY3QgdHlwZSIsaWRlbnRpZmllcjoiSWRlbnRpZmllciIscHJvcGVydHlJZDoiUHJvcGVydHkgSUQiLG1ldGhvZFJQQzoiTWV0aG9kIFJQQyBuYW1lIix3aXRoUmVzcG9uc2U6IldpdGggUmVzcG9uc2UiLGNoYXJhY3RlcmlzdGljVVVJRDoiQ2hhcmFjdGVyaXN0aWMgVVVJRCIsbWV0aG9kUHJvY2Vzc2luZzoiTWV0aG9kIFByb2Nlc3NpbmciLG5vZGVJRDoiTm9kZSBJRCIsaXNFeHRlbmRlZElEOiJJcyBFeHRlbmRlZCBJRCIsaXNGRDoiSXMgRkQiLGJpdHJhdGVTd2l0Y2g6IkJpdHJhdGUgU3dpdGNoIixkYXRhSW5IRVg6IkRhdGEgSW4gSEVYIixkYXRhTGVuZ3RoOiJEYXRhIExlbmd0aCIsZGF0YUJ5dGVvcmRlcjoiRGF0YSBCeXRlIE9yZGVyIixkYXRhQmVmb3JlOiJEYXRhIEJlZm9yZSIsZGF0YUFmdGVyOiJEYXRhIEFmdGVyIixkYXRhRXhwcmVzc2lvbjoiRGF0YSBFeHByZXNzaW9uIixlbmNvZGluZzoiRW5jb2RpbmciLG9pZDoiT0lEIiwiYWRkLW9pZCI6IkFkZCBPSUQiLCJhZGQtaGVhZGVyIjoiQWRkIGhlYWRlciIsImFkZC1zZWN1cml0eSI6IkFkZCBzZWN1cml0eSIscmVtb3ZlOiJSZW1vdmUiLHJlcXVlc3RGaWx0ZXI6IlJlcXVlc3QgRmlsdGVyIixyZXF1ZXN0VXJsRXhwcmVzc2lvbjoiUmVxdWVzdCBVUkwgRXhwcmVzc2lvbiIsaHR0cE1ldGhvZDoiSFRUUCBNZXRob2QiLHRpbWVvdXQ6IlRpbWVvdXQiLHRyaWVzOiJUcmllcyIsaHR0cEhlYWRlcnM6IkhUVFAgSGVhZGVycyIsImhlYWRlci1uYW1lIjoiSGVhZGVyIG5hbWUiLGhpbnQ6eyJtb2RidXMtcmVzcG9uc2UtcmVhZGluZyI6IlJQQyByZXNwb25zZSB3aWxsIHJldHVybiBhbGwgc3VidHJhY3RlZCB2YWx1ZXMgZnJvbSBhbGwgY29ubmVjdGVkIGRldmljZXMgd2hlbiB0aGUgcmVhZGluZyBmdW5jdGlvbnMgYXJlIHNlbGVjdGVkLiIsIm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9ucyI6IlJQQyB3aWxsIHdyaXRlIGEgZmlsbGVkIHZhbHVlIHRvIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyB3aGVuIHRoZSB3cml0aW5nIGZ1bmN0aW9ucyBhcmUgc2VsZWN0ZWQuIiwib3BjLW1ldGhvZCI6IkEgZmlsbGVkIG1ldGhvZCBuYW1lIGlzIHRoZSBPUEMtVUEgbWV0aG9kIHRoYXQgd2lsbCBwcm9jZXNzZWQgb24gdGhlIHNlcnZlciBzaWRlIChtYWtlIHN1cmUgeW91ciBub2RlIGhhcyB0aGUgcmVxdWVzdGVkIG1ldGhvZCkuIn0sInNlY3VyaXR5LW5hbWUiOiJTZWN1cml0eSBuYW1lIix2YWx1ZToiVmFsdWUiLHNlY3VyaXR5OiJTZWN1cml0eSIscmVzcG9uc2VWYWx1ZUV4cHJlc3Npb246IlJlc3BvbnNlIFZhbHVlIEV4cHJlc3Npb24iLHJlcXVlc3RWYWx1ZUV4cHJlc3Npb246IlJlcXVlc3QgVmFsdWUgRXhwcmVzc2lvbiIsYXJndW1lbnRzOiJBcmd1bWVudHMiLCJhZGQtYXJndW1lbnQiOiJBZGQgYXJndW1lbnQiLCJ3cml0ZS1wcm9wZXJ0eSI6IldyaXRlIHByb3BlcnR5IiwicmVhZC1wcm9wZXJ0eSI6IlJlYWQgcHJvcGVydHkiLCJhbmFsb2ctb3V0cHV0IjoiQW5hbG9nIG91dHB1dCIsImFuYWxvZy1pbnB1dCI6IkFuYWxvZyBpbnB1dCIsImJpbmFyeS1vdXRwdXQiOiJCaW5hcnkgb3V0cHV0IiwiYmluYXJ5LWlucHV0IjoiQmluYXJ5IGlucHV0IiwiYmluYXJ5LXZhbHVlIjoiQmluYXJ5IHZhbHVlIiwiYW5hbG9nLXZhbHVlIjoiQW5hbG9nIHZhbHVlIix3cml0ZToiV3JpdGUiLHJlYWQ6IlJlYWQiLHNjYW46IlNjYW4iLG9pZHM6Ik9JRFMiLHNldDoiU2V0IixtdWx0aXNldDoiTXVsdGlzZXQiLGdldDoiR2V0IiwiYnVsay13YWxrIjoiQnVsayB3YWxrIix0YWJsZToiVGFibGUiLCJtdWx0aS1nZXQiOiJNdWx0aWdldCIsImdldC1uZXh0IjoiR2V0IG5leHQiLCJidWxrLWdldCI6IkJ1bGsgZ2V0Iix3YWxrOiJXYWxrIiwic2F2ZS10ZW1wbGF0ZSI6IlNhdmUgdGVtcGxhdGUiLCJ0ZW1wbGF0ZS1uYW1lIjoiVGVtcGxhdGUgbmFtZSIsInRlbXBsYXRlLW5hbWUtcmVxdWlyZWQiOiJUZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLiIsInRlbXBsYXRlLW5hbWUtZHVwbGljYXRlIjoiVGVtcGxhdGUgd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgdXBkYXRlZC4iLGNvbW1hbmQ6IkNvbW1hbmQiLHBhcmFtczoiUGFyYW1zIiwianNvbi12YWx1ZS1pbnZhbGlkIjoiSlNPTiB2YWx1ZSBoYXMgYW4gaW52YWxpZCBmb3JtYXQifSwicnBjLW1ldGhvZHMiOiJSUEMgbWV0aG9kcyIsInJwYy1yZXF1ZXN0cyI6IlJQQyByZXF1ZXN0cyIscmVxdWVzdDp7ImNvbm5lY3QtcmVxdWVzdCI6IkNvbm5lY3QgcmVxdWVzdCIsImRpc2Nvbm5lY3QtcmVxdWVzdCI6IkRpc2Nvbm5lY3QgcmVxdWVzdCIsImF0dHJpYnV0ZS1yZXF1ZXN0IjoiQXR0cmlidXRlIHJlcXVlc3QiLCJhdHRyaWJ1dGUtdXBkYXRlIjoiQXR0cmlidXRlIHVwZGF0ZSIsInJwYy1jb25uZWN0aW9uIjoiUlBDIGNvbW1hbmQifSwicmVxdWVzdC10eXBlIjoiUmVxdWVzdCB0eXBlIiwicmVxdWVzdHMtbWFwcGluZyI6IlJlcXVlc3RzIG1hcHBpbmciLCJyZXF1ZXN0cy1tYXBwaW5nLWhpbnQiOiJNUVRUIENvbm5lY3RvciByZXF1ZXN0cyBhbGxvd3MgeW91IHRvIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHByb2Nlc3MgYXR0cmlidXRlIHJlcXVlc3RzIGZyb20gdGhlIGRldmljZSwgaGFuZGxlIGF0dHJpYnV0ZSB1cGRhdGVzIG9uIHRoZSBzZXJ2ZXIgYW5kIFJQQyBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24uIiwicmVxdWVzdC10b3BpYy1leHByZXNzaW9uIjoiUmVxdWVzdCB0b3BpYyBleHByZXNzaW9uIiwicmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGUiOiJSZXF1ZXN0IGNsaWVudCBjZXJ0aWZpY2F0ZSIsInJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS10aW1lb3V0IjoiUmVzcG9uc2UgdGltZW91dCAobXMpIiwicmVzcG9uc2UtdGltZW91dC1yZXF1aXJlZCI6IlJlc3BvbnNlIHRpbWVvdXQgaXMgcmVxdWlyZWQuIiwicmVzcG9uc2UtdGltZW91dC1saW1pdHMtZXJyb3IiOiJUaW1lb3V0IG11c3QgYmUgbW9yZSB0aGVuIHt7bWlufX0gbXMuIiwicmVzcG9uc2UtdG9waWMtUW9zIjoiUmVzcG9uc2UgdG9waWMgUW9TIiwicmVzcG9uc2UtdG9waWMtUW9zLWhpbnQiOiJNUVRUIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBpcyBhbiBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgbWVzc2FnZSBzZW5kZXIgYW5kIHJlY2VpdmVyIHRoYXQgZGVmaW5lcyB0aGUgbGV2ZWwgb2YgZGVsaXZlcnkgZ3VhcmFudGVlIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UuIiwicmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbiI6IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLCJyZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkIjoiUmVzcG9uc2UgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS12YWx1ZS1leHByZXNzaW9uIjoiUmVzcG9uc2UgdmFsdWUgZXhwcmVzc2lvbiIsInJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWQiOiJSZXNwb25zZSB2YWx1ZSBleHByZXNzaW9uIGlzIHJlcXVpcmVkLiIsInZlbmRvci1uYW1lIjoiVmVuZG9yIG5hbWUiLCJ2ZW5kb3ItdXJsIjoiVmVuZG9yIFVSTCIsdmFsdWU6IlZhbHVlIix2YWx1ZXM6IlZhbHVlcyIsInZhbHVlLXJlcXVpcmVkIjoiVmFsdWUgaXMgcmVxdWlyZWQuIiwidmFsdWUtZXhwcmVzc2lvbiI6IlZhbHVlIGV4cHJlc3Npb24iLCJ2YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiVmFsdWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJ3aXRoLXJlc3BvbnNlIjoiV2l0aCByZXNwb25zZSIsIndpdGhvdXQtcmVzcG9uc2UiOiJXaXRob3V0IHJlc3BvbnNlIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2Nhbi1wZXJpb2QiOiJTY2FuIHBlcmlvZCAobXMpIiwic2Nhbi1wZXJpb2QtZXJyb3IiOiJTY2FuIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJTdWJzY3JpcHRpb24gY2hlY2sgcGVyaW9kIChtcykiLCJzdWItY2hlY2stcGVyaW9kLWVycm9yIjoiU3Vic2NyaXB0aW9uIGNoZWNrIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInNlY3VyaXR5LWxhYmVsIjoiU2VjdXJpdHkiLCJzZWN1cml0eS1wb2xpY3kiOiJTZWN1cml0eSBwb2xpY3kiLCJzZWN1cml0eS10eXBlIjoiU2VjdXJpdHkgdHlwZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkFjY2VzcyBUb2tlbiIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXNlcm5hbWUgYW5kIFBhc3N3b3JkIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBBY2Nlc3MgVG9rZW4iLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyBQcml2YXRlIEtleSJ9LCJzZWxlY3QtY29ubmVjdG9yIjoiU2VsZWN0IGNvbm5lY3RvciB0byBkaXNwbGF5IGNvbmZpZyIsInNlbmQtY2hhbmdlLWRhdGEiOiJTZW5kIGRhdGEgb25seSBvbiBjaGFuZ2UiLCJzZW5kLWRhdGEtdG8tcGxhdGZvcm0iOiJTZW5kIGRhdGEgdG8gcGxhdGZvcm0iLCJzZW5kLWRhdGEtb24tY2hhbmdlIjoiU2VuZCBkYXRhIG9ubHkgb24gY2hhbmdlIiwic2VuZC1jaGFuZ2UtZGF0YS1oaW50IjoiVGhlIHZhbHVlcyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBkYXRhYmFzZSBvbmx5IGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgcHJldmlvdXMgY29udmVydGVkIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb25hbGl0eSBhcHBsaWVzIHRvIGJvdGggYXR0cmlidXRlcyBhbmQgdGltZSBzZXJpZXMgaW4gdGhlIGNvbnZlcnRlciBvdXRwdXQuIixzZXJ2ZXI6IlNlcnZlciIsInNlcnZlci1ob3N0bmFtZSI6IlNlcnZlciBob3N0bmFtZSIsInNlcnZlci1zbGF2ZSI6IlNlcnZlciAoU2xhdmUpIiwic2VydmVycy1zbGF2ZXMiOiJTZXJ2ZXJzIChTbGF2ZXMpIiwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsInNlcnZlci11cmwiOiJTZXJ2ZXIgZW5kcG9pbnQgdXJsIiwic2VydmVyLWNvbm5lY3Rpb24iOiJTZXJ2ZXIgQ29ubmVjdGlvbiIsInNlcnZlci1jb25maWciOiJTZXJ2ZXIgY29uZmlndXJhdGlvbiIsInNlcnZlci1zbGF2ZS1jb25maWciOiJTZXJ2ZXIgKFNsYXZlKSBjb25maWd1cmF0aW9uIiwic2VydmVyLXVybC1yZXF1aXJlZCI6IlNlcnZlciBlbmRwb2ludCB1cmwgaXMgcmVxdWlyZWQuIixzdG9wYml0czoiU3RvcGJpdHMiLHN0cmljdDoiU3RyaWN0IixzZXQ6IlNldCIsInNob3ctbWFwIjoiU2hvdyBtYXAiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiU3RhdGlzdGljIixzdGF0aXN0aWNzOiJTdGF0aXN0aWNzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjonTm8gY29uZmlndXJlZCBzdGF0aXN0aWMga2V5cyBmb3VuZC4gWW91IGNhbiBjb25maWd1cmUgdGhlbSBpbiAiU3RhdGlzdGljcyIgdGFiIGluIGdlbmVyYWwgY29uZmlndXJhdGlvbi4nLCJzdGF0aXN0aWNzLWJ1dHRvbiI6IkdvIHRvIGNvbmZpZ3VyYXRpb24iLGNvbW1hbmRzOiJDb21tYW5kcyIsInNlbmQtcGVyaW9kIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIChpbiBzZWMpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgcmVxdWlyZWQiLCJzZW5kLXBlcmlvZC1taW4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gNjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiAoaW4gc2VjKSIsIm1heC1wYXlsb2FkLXNpemUtYnl0ZXMiOiJNYXggcGF5bG9hZCBzaXplIGluIGJ5dGVzIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1yZXF1aXJlZCI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgaXMgcmVxdWlyZWQiLCJtYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pbiI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMTAwIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuIjoiTWF4IHBheWxvYWQgc2l6ZSBpbiBieXRlcyBpcyBub3QgdmFsaWQiLCJtaW4tcGFjay1zaXplLXRvLXNlbmQiOiJNaW4gcGFja2V0IHNpemUgdG8gc2VuZCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZCI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2l6ZS10by1zZW5kLW1pbiI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwMCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuIjoiTWluIHBhY2tldCBzaXplIHRvIHNlbmQgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IChpbiBzZWMpIiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLCJjb21tYW5kLXBhdHRlcm4iOiJDb21tYW5kIGlzIG5vdCB2YWxpZCIscmVtb3ZlOiJSZW1vdmUgY29tbWFuZCJ9LHN0b3JhZ2U6IlN0b3JhZ2UiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gZmlsZSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWF4aW11bSBudW1iZXIgb2YgZmlsZXMiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtYmVyIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1heGltdW0gcmVjb3JkcyBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiUmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50IjoiTWF4IHJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJNYXggUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiRGF0YSBmb2xkZXIgcGF0aCIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZCI6IkRhdGEgZm9sZGVyIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhdGgiOiJTdG9yYWdlIHBhdGgiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJTdG9yYWdlIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS10eXBlIjoiU3RvcmFnZSB0eXBlIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJGaWxlIHN0b3JhZ2UiLCJtZW1vcnktc3RvcmFnZSI6Ik1lbW9yeSBzdG9yYWdlIixzcWxpdGU6IlNRTElURSJ9LCJyZXBvcnQtc3RyYXRlZ3kiOntsYWJlbDoiUmVwb3J0IHN0cmF0ZWd5Iiwib24tY2hhbmdlIjoiT24gdmFsdWUgY2hhbmdlIiwib24tcmVwb3J0LXBlcmlvZCI6Ik9uIHJlcG9ydCBwZXJpb2QiLCJvbi1jaGFuZ2Utb3ItcmVwb3J0LXBlcmlvZCI6Ik9uIHZhbHVlIGNoYW5nZSBvciByZXBvcnQgcGVyaW9kIiwicmVwb3J0LXBlcmlvZCI6IlJlcG9ydCBwZXJpb2QifSwic291cmNlLXR5cGUiOnttc2c6IkV4dHJhY3QgZnJvbSBtZXNzYWdlIix0b3BpYzoiRXh0cmFjdCBmcm9tIHRvcGljIixjb25zdDoiQ29uc3RhbnQiLGlkZW50aWZpZXI6IklkZW50aWZpZXIiLHBhdGg6IlBhdGgifSwid29ya2Vycy1zZXR0aW5ncyI6IldvcmtlcnMgc2V0dGluZ3MiLHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsZ2VuZXJhbDoiR2VuZXJhbCIsdGltZXNlcmllczoiVGltZSBzZXJpZXMiLGtleToiS2V5IixrZXlzOiJLZXlzIiwia2V5LXJlcXVpcmVkIjoiS2V5IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLWhvc3QiOiJQbGF0Zm9ybSBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBsYXRmb3JtIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIix0aW1lb3V0OiJUaW1lb3V0IChtcykiLCJ0aW1lb3V0LWVycm9yIjoiVGltZW91dCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsdHlwZToiVHlwZSIsInRvcGljLWZpbHRlciI6IlRvcGljIGZpbHRlciIsInRvcGljLXJlcXVpcmVkIjoiVG9waWMgZmlsdGVyIGlzIHJlcXVpcmVkLiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1jb25uZWN0aW9uIjoiVExTIENvbm5lY3Rpb24iLCJtYXN0ZXItY29ubmVjdGlvbnMiOiJNYXN0ZXIgQ29ubmVjdGlvbnMiLCJtZXRob2QtZmlsdGVyIjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1maWx0ZXItaGludCI6IlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgaW5jb21pbmcgUlBDIG1ldGhvZCBmcm9tIHBsYXRmb3JtLiIsIm1ldGhvZC1maWx0ZXItcmVxdWlyZWQiOiJNZXRob2QgZmlsdGVyIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIscW9zOnsiYXQtbW9zdC1vbmNlIjoiMCAtIEF0IG1vc3Qgb25jZSIsImF0LWxlYXN0LW9uY2UiOiIxIC0gQXQgbGVhc3Qgb25jZSIsImV4YWN0bHktb25jZSI6IjIgLSBFeGFjdGx5IG9uY2UifSwib2JqZWN0cy1jb3VudCI6Ik9iamVjdHMgY291bnQiLCJvYmplY3RzLWNvdW50LXJlcXVpcmVkIjoiT2JqZWN0cyBjb3VudCBpcyByZXF1aXJlZCIsIndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzIjoiV2FpdCBhZnRlciBmYWlsZWQgYXR0ZW1wdHMgKG1zKSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsdXNlcm5hbWU6IlVzZXJuYW1lIiwidXNlcm5hbWUtcmVxdWlyZWQiOiJVc2VybmFtZSBpcyByZXF1aXJlZC4iLCJ1bml0LWlkLXJlcXVpcmVkIjoiVW5pdCBJRCBpcyByZXF1aXJlZC4iLCJ3cml0ZS1jb2lsIjoiV3JpdGUgQ29pbCIsIndyaXRlLWNvaWxzIjoiV3JpdGUgQ29pbHMiLCJ3cml0ZS1yZWdpc3RlciI6IldyaXRlIFJlZ2lzdGVyIiwid3JpdGUtcmVnaXN0ZXJzIjoiV3JpdGUgUmVnaXN0ZXJzIixoaW50czp7Im1vZGJ1cy1tYXN0ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb25zIGZvciBjb25uZWN0aW5nIHRvIE1vZGJ1cyBzZXJ2ZXJzIGFuZCByZWFkaW5nIGRhdGEgZnJvbSB0aGVtLiIsIm1vZGJ1cy1zZXJ2ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yIHRoZSBNb2RidXMgc2VydmVyLCBzdG9yaW5nIGRhdGEgYW5kIHNlbmRpbmcgdXBkYXRlcyB0byB0aGUgcGxhdGZvcm0gd2hlbiBjaGFuZ2VzIG9jY3VyIG9yIGF0IGZpeGVkIGludGVydmFscy4iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBwbGF0Zm9ybSBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIHBsYXRmb3JtIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBwbGF0Zm9ybSBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBwbGF0Zm9ybSBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIHBsYXRmb3JtIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gcGxhdGZvcm0gc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIHRoZSBmb2xkZXIgdGhhdCB3aWxsIGNvbnRhaW4gZGF0YSAoUmVsYXRpdmUgb3IgQWJzb2x1dGUpIiwibG9nLWZvcm1hdCI6IkxvZyBtZXNzYWdlIGZvcm1hdCIsInJlbW90ZS1sb2ciOiJFbmFibGVzIHJlbW90ZSBsb2dnaW5nIGFuZCBsb2dzIHJlYWRpbmcgZnJvbSB0aGUgZ2F0ZXdheSIsImJhY2t1cC1jb3VudCI6IklmIGJhY2t1cCBjb3VudCBpcyA+IDAsIHdoZW4gYSByb2xsb3ZlciBpcyBkb25lLCBubyBtb3JlIHRoYW4gYmFja3VwIGNvdW50IGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkIixzdG9yYWdlOiJQcm92aWRlcyBjb25maWd1cmF0aW9uIGZvciBzYXZpbmcgaW5jb21pbmcgZGF0YSBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgcGxhdGZvcm0iLCJtYXgtZmlsZS1jb3VudCI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJOdW1iZXIgb2YgbWVzc2FnZXMgdG8gcmV0cmlldmUgZnJvbSB0aGUgc3RvcmFnZSBhbmQgc2VuZCB0byBwbGF0Zm9ybSIsIm1heC1yZWNvcmRzIjoiTWF4aW11bSBjb3VudCBvZiByZWNvcmRzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gb25lIGZpbGUiLCJyZWFkLXJlY29yZC1jb3VudCI6Ik51bWJlciBvZiBtZXNzYWdlcyB0byByZXRyaWV2ZSBmcm9tIHRoZSBzdG9yYWdlIGFuZCBzZW5kIHRvIHBsYXRmb3JtIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIG51bWJlciBvZiBkYXRhIGVudHJpZXMgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZGluZyB0byBwbGF0Zm9ybSIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgdGhlIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gbnVtYmVyIG9mIGRheXMgdGhhdCB0aGUgc3RvcmFnZSB3aWxsIHJldGFpbiBkYXRhIixjb21tYW5kczoiQ29tbWFuZHMgZm9yIGNvbGxlY3RpbmcgYWRkaXRpb25hbCBzdGF0aXN0aWMiLGF0dHJpYnV0ZToiU3RhdGlzdGljIHRlbGVtZXRyeSBrZXkiLHRpbWVvdXQ6IlRpbWVvdXQgZm9yIGNvbW1hbmQgZXhlY3V0aW5nIixjb21tYW5kOiJUaGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kIGV4ZWN1dGlvbiwgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGVsZW1ldHJ5IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiRW5hYmxlcyBtb25pdG9yIHRoZSBhY3Rpdml0eSBvZiBlYWNoIGNvbm5lY3RlZCBkZXZpY2UiLCJpbmFjdGl2aXR5LXRpbWVvdXQiOiJUaW1lIGFmdGVyIHdob3NlIHRoZSBnYXRld2F5IHdpbGwgZGlzY29ubmVjdCBkZXZpY2UiLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZGljaXR5IG9mIGRldmljZSBhY3Rpdml0eSBjaGVjayIsIm1pbmltYWwtcGFjay1kZWxheSI6IkRlbGF5IGJldHdlZW4gc2VuZGluZyBwYWNrcyBvZiBtZXNzYWdlcyAoRGVjcmVhc2luZyB0aGlzIHNldHRpbmcgcmVzdWx0cyBpbiBpbmNyZWFzZWQgQ1BVIHVzYWdlKSIscW9zOiJRdWFsaXR5IG9mIFNlcnZpY2UgaW4gTVFUVCBtZXNzYWdpbmcgKDAgLSBhdCBtb3N0IG9uY2UsIDEgLSBhdCBsZWFzdCBvbmNlKSIsInNlcnZlci1wb3J0IjoiTmV0d29yayBwb3J0IG9uIHdoaWNoIEdSUEMgc2VydmVyIHdpbGwgbGlzdGVuIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Ik1heGltdW0gdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGZvciBhIGtlZXBhbGl2ZSBwaW5nIHJlc3BvbnNlIGJlZm9yZSBjb25zaWRlcmluZyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMta2VlcC1hbGl2ZSI6IkR1cmF0aW9uIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgUlBDIGNhbGwuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6Ik1heGltdW0gbnVtYmVyIG9mIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHRoYXQgdGhlIHNlcnZlciBjYW4gc2VuZCB3aXRob3V0IHJlY2VpdmluZyBhbnkgZGF0YSBiZWZvcmUgaXQgY29uc2lkZXJzIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gZGF0YSBiZWluZyBzZW50IG9yIHJlY2VpdmVkLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiQWxsb3cgc2VydmVyIHRvIGtlZXAgdGhlIEdSUEMgY29ubmVjdGlvbiBhbGl2ZSBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSBSUEMgY2FsbHMuIiwicGF0aC1pbi1vcyI6IlBhdGggaW4gZ2F0ZXdheSBvcy4iLG1lbW9yeToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBpbi1tZW1vcnkgcXVldWUsIGl0IGlzIGEgZmFzdGVzdCBidXQgbm8gcGVyc2lzdGVuY2UgZ3VhcmFudGVlLiIsZmlsZToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHNlcGFyYXRlZCBmaWxlcyBhbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIixzcWxpdGU6IllvdXIgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBmaWxlIGJhc2VkIGRhdGFiYXNlLiBBbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIiwib3BjLXRpbWVvdXQiOiJUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgY29ubmVjdGluZyB0byBPUEMtVUEgc2VydmVyLiIsInNlY3VyaXR5LXBvbGljeSI6IlNlY3VyaXR5IFBvbGljeSBkZWZpbmVzIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHRvIGJlIGFwcGxpZWQuIiwic2Nhbi1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlc2NhbiB0aGUgc2VydmVyLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJQZXJpb2QgdG8gY2hlY2sgdGhlIHN1YnNjcmlwdGlvbnMgaW4gdGhlIE9QQy1VQSBzZXJ2ZXIuIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IklmIHRydWUgLSB0aGUgZ2F0ZXdheSB3aWxsIHN1YnNjcmliZSB0byBpbnRlcmVzdGluZyBub2RlcyBhbmQgd2FpdCBmb3IgZGF0YSB1cGRhdGUgYW5kIGlmIGZhbHNlIC0gdGhlIGdhdGV3YXkgd2lsbCByZXNjYW4gT1BDLVVBIHNlcnZlciBldmVyeSBzY2FuUGVyaW9kSW5NaWxsaXMuIiwic2hvdy1tYXAiOiJTaG93IG5vZGVzIG9uIHNjYW5uaW5nLiIsIm1ldGhvZC1uYW1lIjoiTmFtZSBvZiBtZXRob2Qgb24gT1BDLVVBIHNlcnZlci4iLGFyZ3VtZW50czoiQXJndW1lbnRzIGZvciB0aGUgbWV0aG9kICh3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGFyZ3VtZW50cyBmcm9tIHRoZSBSUEMgcmVxdWVzdCkuIiwibWluLXBhY2stc2l6ZS10by1zZW5kIjoiTWluaW11bSBwYWNrYWdlIHNpemUgZm9yIHNlbmRpbmcuIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcyI6Ik1heGltdW0gcGFja2FnZSBzaXplIGluIGJ5dGVzIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlYWQgZGF0YSBmcm9tIG5vZGVzLiIsbW9kYnVzOnsiZnJhbWVyLXR5cGUiOiJUeXBlIG9mIGEgZnJhbWVyIChTb2NrZXQsIFJUVSwgb3IgQVNDSUkpLCBpZiBuZWVkZWQuIixob3N0OiJIb3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIE1vZGJ1cyBzZXJ2ZXIuIixwb3J0OiJNb2RidXMgc2VydmVyIHBvcnQgZm9yIGNvbm5lY3Rpb24uIiwidW5pdC1pZCI6Ik1vZGJ1cyBzbGF2ZSBJRC4iLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKGluIHNlY29uZHMpIGZvciB0aGUgTW9kYnVzIHNlcnZlci4iLCJieXRlLW9yZGVyIjoiQnl0ZSBvcmRlciBmb3IgcmVhZGluZyBkYXRhLiIsIndvcmQtb3JkZXIiOiJXb3JkIG9yZGVyIHdoZW4gcmVhZGluZyBtdWx0aXBsZSByZWdpc3RlcnMuIixyZXRyaWVzOiJSZXRyeWluZyBkYXRhIHRyYW5zbWlzc2lvbiB0byB0aGUgbWFzdGVyLiBBY2NlcHRhYmxlIHZhbHVlczogdHJ1ZSBvciBmYWxzZS4iLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgdGhlIGRhdGEgaXMgZW1wdHkuIiwicmV0cmllcy1vbi1pbnZhbGlkIjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgaXQgZmFpbHMuIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIGNoZWNrIGF0dHJpYnV0ZXMgYW5kIHRlbGVtZXRyeSBvbiB0aGUgc2xhdmUuIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgbWFzdGVyLiIsImNvbm5lY3QtYXR0ZW1wdC1jb3VudCI6IlRoZSBudW1iZXIgb2YgY29ubmVjdGlvbiBhdHRlbXB0cyBtYWRlIHRocm91Z2ggdGhlIGdhdGV3YXkuIiwid2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHMiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIGRhdGEgdG8gdGhlIG1hc3Rlci4iLCJzZXJpYWwtcG9ydCI6IlNlcmlhbCBwb3J0IGZvciBjb25uZWN0aW9uLiIsYmF1ZHJhdGU6IkJhdWQgcmF0ZSBmb3IgdGhlIHNlcmlhbCBkZXZpY2UuIixzdG9wYml0czoiVGhlIG51bWJlciBvZiBzdG9wIGJpdHMgc2VudCBhZnRlciBlYWNoIGNoYXJhY3RlciBpbiBhIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgYnl0ZS4iLGJ5dGVzaXplOiJUaGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBieXRlIG9mIHNlcmlhbCBkYXRhLiBUaGlzIGNhbiBiZSBvbmUgb2YgNSwgNiwgNywgb3IgOC4iLHBhcml0eToiVGhlIHR5cGUgb2YgY2hlY2tzdW0gdXNlZCB0byB2ZXJpZnkgZGF0YSBpbnRlZ3JpdHkuIE9wdGlvbnM6IChFKXZlbiwgKE8pZGQsIChOKW9uZS4iLHN0cmljdDoiVXNlIGludGVyLWNoYXJhY3RlciB0aW1lb3V0IGZvciBiYXVkcmF0ZXMg4omkIDE5MjAwLiIsIm9iamVjdHMtY291bnQiOiJEZXBlbmRzIG9uIHRoZSBzZWxlY3RlZCB0eXBlLiIsYWRkcmVzczoiUmVnaXN0ZXIgYWRkcmVzcyB0byB2ZXJpZnkuIixrZXk6IktleSB0byBiZSB1c2VkIGFzIHRoZSBhdHRyaWJ1dGUga2V5IGZvciB0aGUgcGxhdGZvcm0gaW5zdGFuY2UuIiwiZGF0YS1rZXlzIjoiRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZnVuY3Rpb24gY29kZXMgYW5kIGRhdGEgdHlwZXMgY2xpY2sgb24gaGVscCBpY29uIixtb2RpZmllcjoiVGhlIHJldHJpZXZlZCB2YWx1ZSB3aWxsIGJlIGFkanVzdGVkIChieSBtdWx0aXBseWluZyBvciBkaXZpZGluZyBpdCkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtb2RpZmllciB2YWx1ZS4ifX19fSxSbz17ImFkZC1lbnRyeSI6Itil2LbYp9mB2Kkg2KrZg9mI2YrZhiIsYWR2YW5jZWQ6ItmF2KrZgtiv2YUiLCJjaGVja2luZy1kZXZpY2UtYWN0aXZpdHkiOiLZgdit2LUg2YbYtNin2Lcg2KfZhNis2YfYp9iyIixjb21tYW5kOiLYo9mI2KfZhdixIERvY2tlciIsImNvbW1hbmQtY29waWVkLW1lc3NhZ2UiOiLYqtmFINmG2LPYriDYo9mF2LEgRG9ja2VyINil2YTZiSDYp9mE2K3Yp9mB2LjYqSIsY29uZmlndXJhdGlvbjoi2KfZhNiq2YPZiNmK2YYiLCJjb25uZWN0b3ItYWRkIjoi2KXYttin2YHYqSDZhdmI2LXZhCDYrNiv2YrYryIsImNvbm5lY3Rvci1lbmFibGVkIjoi2KrZhdmD2YrZhiDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZSI6Itin2LPZhSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLCJjb25uZWN0b3ItdHlwZSI6ItmG2YjYuSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6ItmG2YjYuSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLGNvbm5lY3RvcnM6Itin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLWNvbmZpZyI6Itiq2YPZiNmK2YbYp9iqINin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLXRhYmxlLWVuYWJsZWQiOiLZhdmF2YPZkdmGIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi2KfZhNin2LPZhSIsImNvbm5lY3RvcnMtdGFibGUtdHlwZSI6Itin2YTZhtmI2LkiLCJjb25uZWN0b3JzLXRhYmxlLXN0YXR1cyI6Itin2YTYrdin2YTYqSIsImNvbm5lY3RvcnMtdGFibGUtYWN0aW9ucyI6Itin2YTYpdis2LHYp9ih2KfYqiIsImNvbm5lY3RvcnMtdGFibGUta2V5Ijoi2KfZhNmF2YHYqtin2K0iLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoi2KfZhNmB2KbYqSIsInJwYy1jb21tYW5kLXNlbmQiOiLYpdix2LPYp9mEIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi2KfZhNin2LPYqtis2KfYqNipIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLYqtit2LHZitixINin2YTZhdi52YTZhdin2KoiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLYqtmD2YjZitmGINi52KfZhSIsImRvY2tlci1sYWJlbCI6Itin2LPYqtiu2K/ZhSDYp9mE2KrYudmE2YrZhdin2Kog2KfZhNiq2KfZhNmK2Kkg2YTYqti02LrZitmEIElvVCBHYXRld2F5INmB2YogRG9ja2VyIGNvbXBvc2Ug2YXYuSDYqNmK2KfZhtin2Kog2KfYudiq2YXYp9ivINmE2YTYrNmH2KfYsiDYp9mE2YXYrdiv2K8iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi2KfYs9iq2K7Yr9mFINin2YTYqti52YTZitmF2KfYqiDZhNiq2YbYstmK2YQg2YjYqtir2KjZitiqINmI2KXYudiv2KfYryBkb2NrZXIgY29tcG9zZSIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLYqtmG2LLZitmEIGRvY2tlci1jb21wb3NlLnltbCDZhNio2YjYp9io2KrZgyIsImxhdW5jaC1nYXRld2F5Ijoi2KrYtNi62YrZhCDYp9mE2KjZiNin2KjYqSIsImxhdW5jaC1kb2NrZXItY29tcG9zZSI6Itio2K/YoSDYqti02LrZitmEINin2YTYqNmI2KfYqNipINio2KfYs9iq2K7Yr9in2YUg2KfZhNij2YXYsSDYp9mE2KrYp9mE2Yog2YHZiiDYp9mE2LfYsdmB2YrYqSDZhdmGINin2YTZhdis2YTYryDYp9mE2LDZiiDZitit2KrZiNmKINi52YTZiSDZhdmE2YEgZG9ja2VyLWNvbXBvc2UueW1sIiwiY3JlYXRlLW5ldy1nYXRld2F5Ijoi2KXZhti02KfYoSDYqNmI2KfYqNipINis2K/Zitiv2KkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6ItmH2YQg2KPZhtiqINmF2KrYo9mD2K8g2KPZhtmDINiq2LHZitivINil2YbYtNin2KEg2KjZiNin2KjYqSDYrNiv2YrYr9ipINio2KfYs9mFOiAne3tnYXRld2F5TmFtZX19J9ifIiwiY3JlYXRlZC10aW1lIjoi2YjZgtiqINin2YTYpdmG2LTYp9ihIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6Itiz2YrYqtmFINit2LDZgSDYp9mE2KrZg9mI2YrZhtin2KoiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6ItmK2YXZg9mGINiq2LnYt9mK2YQg2KfZhNiq2YPZiNmK2YYg2LnZhiDYqNmP2LnYryDZgdmC2Lcg2KXYsNinINmD2KfZhiDZh9mG2KfZgyDZiNi12YjZhCDYrNiz2K/ZiiDYpdmE2Ykg2KfZhNio2YjYp9io2KkuINiz2KrYqtmFINit2LDZgSDYrNmF2YrYuSDYp9mE2KrZg9mI2YrZhtin2Kog2KfZhNiz2KfYqNmC2KkuPGJyPjxicj4gXG4g2YTYqti52LfZitmEINin2YTYqtmD2YjZitmG2Iwg2KPYr9iu2YQg2KfYs9mFINin2YTYqNmI2KfYqNipINij2K/Zhtin2YciLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQiOiLYp9iz2YUg2KfZhNio2YjYp9io2KkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNio2YjYp9io2Kkg2KXZhNiy2KfZhdmKIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLYpdmK2YLYp9mBINin2YTYqti02LrZitmEIixkZWxldGU6Itit2LDZgSDYp9mE2KrZg9mI2YrZhiIsImRvd25sb2FkLXRpcCI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZHJvcC1maWxlIjoi2KPZgdmE2YIg2KfZhNmF2YTZgSDZh9mG2Kcg2KPZiCIsZ2F0ZXdheToi2KfZhNio2YjYp9io2KkiLCJnYXRld2F5LWV4aXN0cyI6Itin2YTYrNmH2KfYsiDYqNmG2YHYsyDYp9mE2KfYs9mFINmF2YjYrNmI2K8g2KjYp9mE2YHYudmELiIsImdhdGV3YXktbmFtZSI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSDZhdi32YTZiNioLiIsImdhdGV3YXktc2F2ZWQiOiLYqtmFINit2YHYuCDYqtmD2YjZitmGINin2YTYqNmI2KfYqNipINio2YbYrNin2K0uIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqNipIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi2YXZh9mE2Kkg2KfZhNio2YLYp9ihINi52YTZiSDZgtmK2K8g2KfZhNit2YrYp9ipINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6ItmF2YfZhNipINin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K3YqSIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqCIsImdycGMta2VlcC1hbGl2ZS1taW4iOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINij2YLZhCDZhdmGIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDZhdi32YTZiNioIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmE2YjZgtiqINio2YrZhiDYp9mE2KjZitmG2LrYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2KogKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNio2YrZhti62KfYqiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQgKNio2KfZhNir2YjYp9mG2YopIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQg2YXYt9mE2YjYqNipIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiLZgdiq2LHYqSDZgdit2LUg2KfZhNiu2YXZiNmEINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoi2YHYqtix2Kkg2YHYrdi1INin2YTYrtmF2YjZhCDYutmK2LEg2LXYp9mE2K3YqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEICjYqNin2YTYq9mI2KfZhtmKKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEINmF2LfZhNmI2KjYqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6ItmB2KrYsdipINin2YTYrtmF2YjZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiLZgdiq2LHYqSDYp9mE2K7ZhdmI2YQg2LrZitixINi12KfZhNit2KkiLCJqc29uLXBhcnNlIjoiSlNPTiDYutmK2LEg2LXYp9mE2K0uIiwianNvbi1yZXF1aXJlZCI6Itin2YTYrdmC2YQg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINmB2KfYsdi62YvYpy4iLGxvZ3M6e2xvZ3M6Itin2YTYs9is2YTYp9iqIixkYXlzOiLYo9mK2KfZhSIsaG91cnM6Itiz2KfYudin2KoiLG1pbnV0ZXM6Itiv2YLYp9im2YIiLHNlY29uZHM6Itir2YjYp9mG2YoiLCJkYXRlLWZvcm1hdCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4g2YXYt9mE2YjYqCIsImxvZy1mb3JtYXQiOiLYqtmG2LPZitmCINin2YTYs9is2YQiLCJsb2ctdHlwZSI6ItmG2YjYuSDYp9mE2LPYrNmEIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiz2KzZhCDZhdi32YTZiNioIixyZW1vdGU6Itin2YTYqtiz2KzZitmEINi52YYg2KjZj9i52K8iLCJyZW1vdGUtbG9ncyI6Itin2YTYs9is2YTYp9iqINi52YYg2KjZj9i52K8iLGxvY2FsOiLYp9mE2KrYs9is2YrZhCDYp9mE2YXYrdmE2YoiLGxldmVsOiLZhdiz2KrZiNmJINin2YTYs9is2YQiLCJmaWxlLXBhdGgiOiLZhdiz2KfYsSDYp9mE2YXZhNmBIiwiZmlsZS1wYXRoLXJlcXVpcmVkIjoi2YXYs9in2LEg2KfZhNmF2YTZgSDZhdi32YTZiNioIiwic2F2aW5nLXBlcmlvZCI6ItmB2KrYsdipINit2YHYuCDYp9mE2LPYrNmEIiwic2F2aW5nLXBlcmlvZC1taW4iOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhdi32YTZiNio2KkiLCJiYWNrdXAtY291bnQiOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSIsImJhY2t1cC1jb3VudC1taW4iOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDZhNinINmK2YXZg9mGINij2YYg2YrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6Iti52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipINmF2LfZhNmI2KgifSwibWluLXBhY2stc2VuZC1kZWxheSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2YXYt9mE2YjYqCIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoi2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2KPZgtmEINmF2YYgMCIsIm5vLWNvbm5lY3RvcnMiOiLZhNinINiq2YjYrNivINmF2YjYtdmE2KfYqiIsIm5vLWRhdGEiOiLZhNinINiq2YjYrNivINiq2YPZiNmK2YbYp9iqIiwibm8tZ2F0ZXdheS1mb3VuZCI6ItmE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KjZiNin2KjYqS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiJ3t7aXRlbX19JyDYutmK2LEg2YXZiNis2YjYry4iLCJwYXRoLWxvZ3MiOiLZhdiz2KfYsSDYpdmE2Ykg2YXZhNmB2KfYqiDYp9mE2LPYrNmEIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi2KfZhNmF2LPYp9ixINmF2LfZhNmI2KguIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2KjZgtin2KEg2LnZhNmJINin2YTYrdmK2KfYqSDZitiz2YXYrSDYqNiv2YjZhiDZhdmD2KfZhNmF2KfYqiIscmVtb3RlOiLYp9mE2KrZg9mI2YrZhiDYudmGINio2Y/YudivIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiLZhdiz2KrZiNmJINin2YTYqtiz2KzZitmEIiwicmVtb3ZlLWVudHJ5Ijoi2KXYstin2YTYqSDYp9mE2KrZg9mI2YrZhiIsInJlbW90ZS1zaGVsbCI6ItmC2LTYsdipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Itin2YTYqtmD2YjZitmGINi52YYg2KjZj9i52K8iLG90aGVyOiLYotiu2LEiLCJzYXZlLXRpcCI6Itit2YHYuCDZhdmE2YEg2KfZhNiq2YPZiNmK2YYiLCJzZWN1cml0eS10eXBlIjoi2YbZiNi5INin2YTYo9mF2KfZhiIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Itix2YXYsiDYp9mE2YjYtdmI2YQiLCJ1c2VybmFtZS1wYXNzd29yZCI6Itin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINmI2YPZhNmF2Kkg2KfZhNmF2LHZiNixIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDYsdmF2LIg2KfZhNmI2LXZiNmEIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsg2KfZhNmF2YHYqtin2K0g2KfZhNiu2KfYtSJ9LCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYrtin2K/ZhSIsc3RhdGlzdGljczp7c3RhdGlzdGljOiLYpdit2LXYp9im2YrYqSIsc3RhdGlzdGljczoi2KfZhNil2K3Ytdin2KbZitin2KoiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLZhNinINiq2KrZiNmB2LEg2KXYrdi12KfYptmK2KfYqiIsY29tbWFuZHM6Itin2YTYo9mI2KfZhdixIiwic2VuZC1wZXJpb2QiOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqICjYqNin2YTYq9mI2KfZhtmKKSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDZhdi32YTZiNio2KkiLCJzZW5kLXBlcmlvZC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDYo9mC2YQg2YXZhiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqINi62YrYsSDYtdin2YTYrdipIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiAo2KjYp9mE2KvZiNin2YbZiikiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINmF2LfZhNmI2KjYqSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiDYo9mC2YQg2YXZhiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINi62YrYsSDYtdin2YTYrdipIixhZGQ6Itil2LbYp9mB2Kkg2KPZhdixIix0aW1lb3V0OiLYp9mE2YXZh9mE2KkiLCJ0aW1lb3V0LW1zIjoi2KfZhNmF2YfZhNipICjYqNin2YTZhdmE2YTZiiDYq9in2YbZitipKSIsInRpbWVvdXQtcmVxdWlyZWQiOiLYp9mE2YXZh9mE2Kkg2YXYt9mE2YjYqNipIiwidGltZW91dC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KfZhNmF2YfZhNipINij2YLZhCDZhdmGIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiLYp9mE2YXZh9mE2Kkg2LrZitixINi12KfZhNit2KkiLCJhdHRyaWJ1dGUtbmFtZSI6Itin2LPZhSDYp9mE2LPZhdipIiwiYXR0cmlidXRlLW5hbWUtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNiz2YXYqSDZhdi32YTZiNioIixjb21tYW5kOiLYp9mE2KPZhdixIiwiY29tbWFuZC1yZXF1aXJlZCI6Itin2YTYo9mF2LEg2YXYt9mE2YjYqCIsImNvbW1hbmQtcGF0dGVybiI6Itin2YTYo9mF2LEg2LrZitixINi12KfZhNitIixyZW1vdmU6Itil2LLYp9mE2Kkg2KfZhNij2YXYsSJ9LHN0b3JhZ2U6Itin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi2KfZhNiz2KzZhNin2Kog2KfZhNmC2LXZiNmJINmB2Yog2KfZhNmF2YTZgSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTZhdmE2YHYp9iqIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmH2YggMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi2KfZhNi52K/YryDYutmK2LEg2LXYp9mE2K0uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLYp9mE2LnYr9ivINmF2LfZhNmI2KguIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Itin2YTYs9is2YTYp9iqINin2YTZgti12YjZiSDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLYp9mE2LPYrNmE2KfYqiDYp9mE2YLYtdmI2Ykg2YXYt9mE2YjYqNipLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZhdi32YTZiNioLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50Ijoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINmC2LHYp9ih2Kkg2KfZhNiz2KzZhNin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNi52K/YryDYp9mE2LPYrNmE2KfYqiDZh9mIIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi2LnYr9ivINin2YTZgtix2KfYodipINin2YTZgti12YjZiSDZhdi32YTZiNioLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6ItmF2LPYp9ixINmF2KzZhNivINin2YTYqNmK2KfZhtin2KoiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDZhdis2YTYryDYp9mE2KjZitin2YbYp9iqINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYWNrLXNpemUiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYrdis2YUg2K3YstmF2Kkg2KfZhNit2K/YqyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZh9mIIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi2KfZhNit2KzZhSDYp9mE2KPZgti12Ykg2YTYrdiy2YXYqSDYp9mE2K3Yr9irINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYXRoIjoi2YXYs9in2LEg2KfZhNiq2K7YstmK2YYiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDYp9mE2KrYrtiy2YrZhiDZhdi32YTZiNioLiIsInN0b3JhZ2UtdHlwZSI6ItmG2YjYuSDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2YXZhNmB2KfYqiIsIm1lbW9yeS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2LDYp9mD2LHYqSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoi2KvZitmG2LrYstio2YjYsdivIixnZW5lcmFsOiLYudin2YUiLCJ0aGluZ3Nib2FyZC1ob3N0Ijoi2YXYttmK2YEg2KvZitmG2LrYstio2YjYsdivIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Itin2YTZhdi22YrZgSDZhdi32YTZiNioLiIsInRoaW5nc2JvYXJkLXBvcnQiOiLZhdmG2YHYsCDYq9mK2YbYutiy2KjZiNix2K8iLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6Itin2YTZhdmG2YHYsCDYutmK2LEg2LXYp9mE2K0uIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Itin2YTZhdmG2YHYsCDZhdi32YTZiNioLiIsdGlkeToi2KrYsdiq2YrYqCIsInRpZHktdGlwIjoi2KrYsdiq2YrYqCDYqtmD2YjZitmGIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiLYqtmD2YjZitmGINmF2YjYtdmEIHt7dHlwZU5hbWV9fSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoi2KfZhNmF2LPYp9ixINil2YTZiSDYtNmH2KfYr9ipIENBINi52YTZiSDYp9mE2KjZiNin2KjYqSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2LTZh9in2K/YqSDYp9mE2LnZhdmK2YQg2LnZhNmJINin2YTYqNmI2KfYqNipIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi2YrYrNioINiq2K3Yr9mK2K8g2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoi2KfZhNix2YLZhSDYutmK2LEg2LXYp9mE2K0uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwg2KfZhNix2LPYp9im2YQg2KjYp9mE2KPZitin2YUiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6ItmK2KzYqCDYqtit2K/ZitivIFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYo9mK2KfZhS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXBhdHRlcm4iOiLYp9mE2LHZgtmFINi62YrYsSDYtdin2YTYrS4iLCJtcXR0LXFvcyI6Itis2YjYr9ipINin2YTYrtiv2YXYqSAoUW9TKSIsIm1xdHQtcW9zLXJlcXVpcmVkIjoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipIChRb1MpINmF2LfZhNmI2KjYqSIsIm1xdHQtcW9zLXJhbmdlIjoi2KrYqtix2KfZiNitINmC2YrZhSDYrNmI2K/YqSDYp9mE2K7Yr9mF2KkgKFFvUykg2YXZhiAwINil2YTZiSAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdmB2KrYp9itINin2YTYrtin2LUg2LnZhNmJINin2YTYqNmI2KfYqNipIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLYqtio2K/ZitmEINmI2LbYuSDZhdmE2KEg2KfZhNi02KfYtNipIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiLYqtmD2YjZitmGIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6Itil2LbYp9mB2Kkv2KrYrdiv2YrYqyDYqtmD2YjZitmGIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2YPZiNmK2YYg2YjYpdiv2KfYsdipINin2YTYqNmI2KfYqNipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtc2hlbGwiOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2K3Zg9mFINin2YTYqNi52YrYryDZgdmKINmG2LjYp9mFINin2YTYqti02LrZitmEINmF2Lkg2KfZhNio2YjYp9io2Kkg2YXZhiDYudmG2LXYsSDZiNin2KzZh9ipINin2YTZhdiz2KrYrtiv2YUg2YLYtNix2Kkg2LnZhiDYqNmP2LnYryIsaG9zdDoi2KfYs9mFINin2YTZhdi22YrZgSDYo9mIINi52YbZiNin2YYgSVAg2YTYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLHBvcnQ6ItmF2YbZgdiwINiu2K/ZhdipIE1RVFQg2LnZhNmJINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIsdG9rZW46Itix2YXYsiDYp9mE2YjYtdmI2YQg2YTZhNio2YjYp9io2Kkg2YXZhiDYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLCJjbGllbnQtaWQiOiLZhdi52LHZgSDYudmF2YrZhCBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIix1c2VybmFtZToi2KfYs9mFINin2YTZhdiz2KrYrtiv2YUgTVFUVCDZhNmE2KjZiNin2KjYqSDZhdmGINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIscGFzc3dvcmQ6ItmD2YTZhdipINin2YTZhdix2YjYsSBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIiwiY2EtY2VydCI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2YXZhNmBINi02YfYp9iv2KkgQ0EiLCJkYXRlLWZvcm0iOiLYqtmG2LPZitmCINin2YTYqtin2LHZitiuINmB2Yog2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwiZGF0YS1mb2xkZXIiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdis2YTYryDYp9mE2LDZiiDYs9mK2K3YqtmI2Yog2LnZhNmJINin2YTYqNmK2KfZhtin2KogKNmG2LPYqNmKINij2Ygg2YXYt9mE2YIpIiwibG9nLWZvcm1hdCI6Itiq2YbYs9mK2YIg2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwicmVtb3RlLWxvZyI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDYp9mE2KrYs9is2YrZhCDYp9mE2KjYudmK2K8g2YjZgtix2KfYodipINin2YTYs9is2YTYp9iqINmF2YYg2KfZhNio2YjYp9io2KkiLCJiYWNrdXAtY291bnQiOiLYpdiw2Kcg2YPYp9mGINi52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipID4gMNiMINi52YbYryDYudmF2YTZitipINiq2K/ZiNmK2LHYjCDZhNinINmK2KrZhSDYp9mE2KfYrdiq2YHYp9i4INio2KPZg9ir2LEg2YXZhiDYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDYp9mE2YXYrdiv2K/YqSAtINmK2KrZhSDYrdiw2YEg2KfZhNij2YLYr9mFIixzdG9yYWdlOiLZitmI2YHYsSDYqtmD2YjZitmG2YvYpyDZhNit2YHYuCDYp9mE2KjZitin2YbYp9iqINin2YTZiNin2LHYr9ipINmC2KjZhCDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KfZhNmF2YbYtdipIiwibWF4LWZpbGUtY291bnQiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNi52K/YryDYp9mE2YXZhNmB2KfYqiDYp9mE2KrZiiDYs9mK2KrZhSDYpdmG2LTYp9ik2YfYpyIsIm1heC1yZWFkLWNvdW50Ijoi2LnYr9ivINin2YTYsdiz2KfYptmEINmE2YTYrdi12YjZhCDYudmE2YrZh9inINmF2YYg2KfZhNiq2K7YstmK2YYg2YjYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KvZitmG2LrYstio2YjYsdivIiwibWF4LXJlY29yZHMiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNmE2LPYrNmE2KfYqiDYp9mE2KrZiiDYs9iq2K7YstmGINmB2Yog2YXZhNmBINmI2KfYrdivIiwicmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2KfZhNix2LPYp9im2YQg2YTZhNit2LXZiNmEINi52YTZitmH2Kcg2YXZhiDYp9mE2KrYrtiy2YrZhiDZiNil2LHYs9in2YTZh9inINil2YTZiSDYq9mK2YbYutiy2KjZiNix2K8iLCJtYXgtcmVjb3Jkcy1jb3VudCI6Itin2YTYudiv2K8g2KfZhNij2YLYtdmJINmE2YTYqNmK2KfZhtin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiDZgtio2YQg2KXYsdiz2KfZhNmH2Kcg2KXZhNmJINir2YrZhti62LLYqNmI2LHYryIsInR0bC1jaGVjay1ob3VyIjoi2YPZhSDZhdix2Kkg2LPZitiq2K3ZgtmCINin2YTYqNmI2KfYqNipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDYp9mE2YLYr9mK2YXYqSIsInR0bC1tZXNzYWdlcy1kYXkiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNij2YrYp9mFINin2YTYqtmKINiz2KrYrdiq2YHYuCDZgdmK2YfYpyDYp9mE2KrYrtiy2YrZhiDYqNin2YTYqNmK2KfZhtin2KoiLGNvbW1hbmRzOiLYp9mE2KPZiNin2YXYsSDZhNis2YXYuSDYp9mE2KXYrdi12KfYptmK2KfYqiDYp9mE2KXYttin2YHZitipIixhdHRyaWJ1dGU6ItmF2YHYqtin2K0g2KrZhNmC2Yog2KfZhNil2K3Ytdin2KbZitin2KoiLHRpbWVvdXQ6ItmF2YfZhNipINiy2YXZhtmK2Kkg2YTYqtmG2YHZitiwINin2YTYo9mF2LEiLGNvbW1hbmQ6Itiz2YrYqtmFINin2LPYqtiu2K/Yp9mFINmG2KrZitis2Kkg2KrZhtmB2YrYsCDYp9mE2KPZhdixINmD2YLZitmF2Kkg2YTYqtmE2YLZiiDYp9mE2KXYrdi12KfYptmK2KfYqiIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDZhdix2KfZgtio2Kkg2YbYtNin2Lcg2YPZhCDYrNmH2KfYsiDZhdiq2LXZhCIsImluYWN0aXZpdHktdGltZW91dCI6Itin2YTZiNmC2Kog2KjYudivINin2YTYsNmKINiz2KrZgdi12YQg2KfZhNio2YjYp9io2Kkg2KfZhNis2YfYp9iyIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLYqtmD2LHYp9ixINmB2K3YtSDZhti02KfYtyDYp9mE2KzZh9in2LIiLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLYp9mE2KrYo9iu2YrYsSDYqNmK2YYg2KXYsdiz2KfZhCDYrdiy2YUg2KfZhNix2LPYp9im2YQgKNmK2KTYr9mKINiq2YLZhNmK2YQg2YfYsNinINin2YTYpdi52K/Yp9ivINil2YTZiSDYstmK2KfYr9ipINin2LPYqtiu2K/Yp9mFINmI2K3Yr9ipINin2YTZhdi52KfZhNis2Kkg2KfZhNmF2LHZg9iy2YrYqSkiLHFvczoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipINmB2Yog2LHYs9in2KbZhCBNUVRUICgwIC0g2LnZhNmJINin2YTYo9mD2KvYsSDZhdix2Kkg2YjYp9it2K/YqdiMIDEgLSDYudmE2Ykg2KfZhNij2YLZhCDZhdix2Kkg2YjYp9it2K/YqSkiLCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYtNio2YPYqSDYp9mE2LDZiiDYs9mK2LPYqtmF2Lkg2YHZitmHINiu2KfYr9mFIEdSUEMg2YTZhNin2LPYqtmB2LPYp9ix2KfYqiDYp9mE2YjYp9ix2K/YqS4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNmE2YjZgtiqINin2YTYsNmKINmK2KzYqCDYo9mGINmK2YbYqti42LHZhyDYp9mE2K7Yp9iv2YUg2YTYp9iz2KrYrNin2KjYqSDYsdiz2KfZhNipINin2YTYrdmB2KfYuCDYudmE2Ykg2KfZhNin2KrYtdin2YQg2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTZhdiv2Kkg2KjZitmGINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTZhdiq2LnYp9mC2KjYqSDYudmG2K8g2LnYr9mFINmI2KzZiNivINin2LPYqtiv2LnYp9ihIFJQQyDZhti02LcuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTYqtmKINmK2YXZg9mGINmE2YTYrtin2K/ZhSDYpdix2LPYp9mE2YfYpyDYr9mI2YYg2KrZhNmC2Yog2KPZiiDYqNmK2KfZhtin2Kog2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINi52YbYryDYudiv2YUg2KXYsdiz2KfZhCDYo9mIINin2LPYqtmE2KfZhSDYqNmK2KfZhtin2KouIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2LPZhdin2K0g2YTZhNiu2KfYr9mFINio2KXYqNmC2KfYoSDYp9iq2LXYp9mEIEdSUEMg2K3ZitmL2Kcg2K3YqtmJINi52YbYr9mF2Kcg2YTYpyDYqtmD2YjZhiDZh9mG2KfZgyDYp9iz2KrYr9i52KfYodin2KogUlBDINmG2LTYt9ipLiJ9fSxWbz17ImFkZC1lbnRyeSI6IkFmZWdpciBjb25maWd1cmFjacOzIiwiY29ubmVjdG9yLWFkZCI6IkFmZWdpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJDYWwgbm9tIGNvbmVjdG9yLiIsImNvbm5lY3Rvci10eXBlIjoiVGlwdXMgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNhbCB0aXB1cyBjb25lY3Rvci4iLGNvbm5lY3RvcnM6IkNvbmZpZ3VyYWNpw7MgZGUgY29uZWN0b3JzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXIgdW4gZ2F0ZXdheSBub3UiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkNyZWFyIHVuIG5vdSBnYXRld2F5IGFtYiBlbCBub206ICd7e2dhdGV3YXlOYW1lfX0nPyIsZGVsZXRlOiJFc2JvcnJhciBjb25maWd1cmFjacOzIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FycmVnYXIgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkphIGV4aXN0ZWl4IHVuIGRpc3Bvc2l0aXUgYW1iIGVsIG1hdGVpeCBub20uIiwiZ2F0ZXdheS1uYW1lIjoiTm9tIGRlIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJDYWwgdW4gbm9tIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7MgZGUgZ2F0ZXdheSBncmF2YWRhIHNhdGlzZmFjdMOycmlhbWVudC4iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6BsaWQuIiwianNvbi1yZXF1aXJlZCI6IkVsIGNhbXAgbm8gcG90IHNlciBidWl0LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBoaSBoYSBjb25lY3RvcnMiLCJuby1kYXRhIjoiTm8gaGkgaGEgY29uZmlndXJhY2lvbnMiLCJuby1nYXRld2F5LWZvdW5kIjoiTm8gcydoYSB0cm9iYXQgY2FwIGdhdGV3YXkuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vIHRyb2JhdC4iLCJwYXRoLWxvZ3MiOiJSdXRhIGFscyBmaXR4ZXJzIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IkNhbCBydXRhLiIscmVtb3RlOiJDb25maWd1cmFjacOzIHJlbW90YSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTml2ZWwgZGUgbG9nZ2luZyIsInJlbW92ZS1lbnRyeSI6IkVzYm9ycmFyIGNvbmZpZ3VyYWNpw7MiLCJzYXZlLXRpcCI6IkdyYXZhciBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIsInNlY3VyaXR5LXR5cGUiOiJUaXB1cyBkZSBzZWd1cmV0YXQiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkJ2FjY8OpcyIsdGxzOiJUTFMifSxzdG9yYWdlOiJHcmFiYWNpw7MiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJOw7ptZXJvIG3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZml0eGVyIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoHhpbSBkZSBmaXR4ZXJzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiRWwgbsO6bWVybyBtw61uaW0gw6lzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiQ2FsIG7Dum1lcm8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZWwgbWFnYXR6ZW0iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltIMOpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1pZGEgbcOgeGltIGRlIGVzZGV2ZW5pbWVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbSDDqXMgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6BsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhdGgiOiJSdXRhIGRlIG1hZ2F0emVtIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiQ2FsIHJ1dGEgZGUgbWFnYXR6ZW0uIiwic3RvcmFnZS10eXBlIjoiVGlwdXMgZGUgbWFnYXR6ZW0iLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik1hZ2F0emVtIGZpdHhlciIsIm1lbW9yeS1zdG9yYWdlIjoiTWFnYXR6ZW0gZW4gbWVtb3JpYSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IkNhbCBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQb3J0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJFbCBwb3J0IG3DoHhpbSDDqXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJFbCBwb3J0IG3DrW5pbSDDqXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQb3J0IG5vIHbDoGxpZC4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiQ2FsIHBvcnQuIix0aWR5OiJFbmRyZcOnYXQiLCJ0aWR5LXRpcCI6IkVuZHJlw6dhdCBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDsyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlJ1dGEgYWwgY2VydGlmaWNhdCBDQSBhbCBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUnV0YSBhbCBjZXJ0aWZpY2F0IGNsaWVudCBhbCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJSdXRhIGEgbGEgY2xhdSBwcml2YWRhIGFsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7MgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWZlZ2lyL2FjdHVhbGl6YXIgY29uZmlndXJhY2nDsyBKU09OIn0sQm89eyJhZGQtZW50cnkiOiJQxZlpZGF0IGtvbmZpZ3VyYWNpIiwiY29ubmVjdG9yLWFkZCI6IlDFmWlkYXQgbm92w70ga29uZWt0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IlBvdm9saXQga29uZWt0b3IiLCJjb25uZWN0b3ItbmFtZSI6Ik7DoXpldiBrb25la3RvcnUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Ik7DoXpldiBrb25la3RvcnUgamUgcG92aW5uw70uIiwiY29ubmVjdG9yLXR5cGUiOiJUeXAga29uZWt0b3J1IiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJUeXAga29uZWt0b3J1IGplIHBvdmlubsO9LiIsY29ubmVjdG9yczoiS29uZmlndXJhY2Uga29uZWt0b3J1IiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiVnl0dm/FmWl0IG5vdm91IGJyw6FudSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiSnN0ZSBzaSBqaXN0aSwgxb5lIGNoY2V0ZSB2eXR2b8WZaXQgbm92b3UgYnLDoW51IHMgbsOhenZlbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IlNtYXphdCBrb25maWd1cmFjaSIsImRvd25sb2FkLXRpcCI6IlN0w6Fobm91dCBzb3Vib3Iga29uZmlndXJhY2UiLGdhdGV3YXk6IkJyw6FuYSIsImdhdGV3YXktZXhpc3RzIjoiWmHFmcOtemVuw60gc2Ugc2hvZG7DvW0gbsOhenZlbSBqacW+IGV4aXN0dWplLiIsImdhdGV3YXktbmFtZSI6Ik7DoXpldiBicsOhbnkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOw6F6ZXYgYnLDoW55IGplIHBvdmlubsO9LiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjZSBicsOhbnkgYnlsYSDDunNwxJvFoW7EmyB1bG/FvmVuYS4iLCJqc29uLXBhcnNlIjoiTmVwbGF0bsO9IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmVtxa/FvmUgYsO9dCBwcsOhemRuw6kuIiwibm8tY29ubmVjdG9ycyI6IsW9w6FkbsOpIGtvbmVrdG9yeSIsIm5vLWRhdGEiOiLFvcOhZG7DqSBrb25maWd1cmFjZSIsIm5vLWdhdGV3YXktZm91bmQiOiLFvcOhZG7DqSBicsOhbnkgbmVieWx5IG5hbGV6ZW55LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIgJ3t7aXRlbX19JyBuZW5hbGV6ZW5hLiIsInBhdGgtbG9ncyI6IkNlc3RhIGsgc291Ym9yxa9tIGxvZ3UiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJDZXN0YSBqZSBwb3Zpbm7DoS4iLHJlbW90ZToiVnpkw6FsZW7DoSBrb25maWd1cmFjZSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiw5pyb3ZlxYggbG9nb3bDoW7DrSIsInJlbW92ZS1lbnRyeSI6Ik9kc3RyYW5pdCBrb25maWd1cmFjaSIsInNhdmUtdGlwIjoiVWxvxb5pdCBzb3Vib3Iga29uZmlndXJhY2UiLCJzZWN1cml0eS10eXBlIjoiVHlwIHphYmV6cGXEjWVuw60iLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJQxZnDrXN0dXBvdsO9IHRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IsOabG/FvmnFoXTEmyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiBzb3Vib3J1Iiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbcOhbG7DrSBwb8SNZXQgc291Ym9yxa8iLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbcOhbG7DrSBwb8SNZXQgamUgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiUG/EjWV0IG5lbsOtIHBsYXRuw70uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJQb8SNZXQgamUgcG92aW5uw70uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiDDumxvxb5pxaF0aSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IHrDoXpuYW3FryBqZSAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbcOhbG7DrSBwb8SNZXQgesOhem5hbcWvIGplIHBvdmlubsO9LiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IGplIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtcGF0aCI6IkNlc3RhIGsgw7psb8W+acWhdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJDZXN0YSBrIMO6bG/FvmnFoXRpIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCDDumxvxb5pxaF0xJsiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IlNvdWJvciIsIm1lbW9yeS1zdG9yYWdlIjoiUGFtxJvFpSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamUgcG92aW5uw70uIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBvcnQgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltw6FsbsOtIMSNw61zbG8gcG9ydHUgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbcOhbG7DrSDEjcOtc2xvIHBvcnR1IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBuZW7DrSBwbGF0bsO9LiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGplIHBvdmlubsO9LiIsdGlkeToiVXNwb8WZw6FkYXQiLCJ0aWR5LXRpcCI6IlVzcG/FmcOhZGF0IEpTT04ga29uZmlndXJhY2kiLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJLb25maWd1cmFjZSB7e3R5cGVOYW1lfX0ga29uZWt0b3J1IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBDQSBicsOhbnkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBrbGllbnRhIGJyw6FueSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiQ2VzdGEgayBwcml2w6F0bsOtbXUga2zDrcSNaSBicsOhbnkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlDFmWVwbm91dCBkbyByZcW+aW11IGNlbMOpIG9icmF6b3ZreSIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiSlNPTioga29uZmlndXJhY2UiLCJ1cGRhdGUtY29uZmlnIjoiUMWZaWRhdC9lZGl0b3ZhdCBKU09OIGtvbmZpZ3VyYWNpIn0sVW89eyJhZGQtZW50cnkiOiJUaWxmw7hqIGtvbmZpZ3VyYXRpb24iLCJjb25uZWN0b3ItYWRkIjoiVGlsZsO4aiBueSBzdGlrZm9yYmluZGVsc2UiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkFrdGl2w6lyIHN0aWtmb3JiaW5kZWxzZSIsImNvbm5lY3Rvci1uYW1lIjoiTmF2biBww6Ugc3Rpa2ZvcmJpbmRlbHNlIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJOYXZuIHDDpSBzdGlrZm9yYmluZGVsc2UgZXIgcMOla3LDpnZldC4iLCJjb25uZWN0b3ItdHlwZSI6IlN0aWtmb3JiaW5kZWxzZXN0eXBlIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTdGlrZm9yYmluZGVsc2VzdHlwZSBlciBww6VrcsOmdmV0LiIsY29ubmVjdG9yczoiS29uZmlndXJhdGlvbiBhZiBzdGlrZm9yYmluZGVsc2VyIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiT3ByZXQgZW4gbnkgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiIixkZWxldGU6IlNsZXQga29uZmlndXJhdGlvbiIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGtvbmZpZ3VyYXRpb25zZmlsIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJFbmhlZCBtZWQgc2FtbWUgbmF2biBmaW5kZXMgYWxsZXJlZGUuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheS1uYXZuIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheS1uYXZuIGVyIHDDpWtyw6Z2ZXQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkta29uZmlndXJhdGlvbmVuIGJsZXYgZ2VtdC4iLCJqc29uLXBhcnNlIjoiSWtrZSBneWxkaWcgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmVsdGV0IG3DpSBpa2tlIHbDpnJlIHRvbXQuIiwibm8tY29ubmVjdG9ycyI6IkluZ2VuIHN0aWtmb3JiaW5kZWxzZXIiLCJuby1kYXRhIjoiSW5nZW4ga29uZmlndXJhdGlvbmVyIiwibm8tZ2F0ZXdheS1mb3VuZCI6IkluZ2VuIGdhdGV3YXkgZnVuZGV0LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIiLCJwYXRoLWxvZ3MiOiJTdGkgdGlsIGxvZ2ZpbGVyIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiU3RpIGVyIHDDpWtyw6Z2ZXQuIixyZW1vdGU6IkZqZXJua29uZmlndXJhdGlvbiIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nZsO4cmluZ3NuaXZlYXUiLCJyZW1vdmUtZW50cnkiOiJGamVybiBrb25maWd1cmF0aW9uIiwic2F2ZS10aXAiOiJHZW0ga29uZmlndXJhdGlvbnNmaWwiLCJzZWN1cml0eS10eXBlIjoiU2lra2VyaGVkc3R5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBZGdhbmdzdG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiTGFncmluZyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGZpbCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrcy4gYW50YWwgZmlsZXIiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW4uIGFudGFsIGVyIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IkFudGFsIGVyIGlra2UgZ3lsZGlndC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6IkFudGFsIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGxhZ3JpbmciLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbi4gYW50YWwgcG9zdGVyIGVyIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYWtzLiBhbnRhbCBwb3N0ZXIgZXIgcMOla3LDpnZldC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3MuIGFudGFsIHBha2tlc3TDuHJyZWxzZSBmb3IgYmVnaXZlbmhlZCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbi4gYW50YWwgZXIgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrcy4gYW50YWwgcGFra2VzdMO4cnJlbHNlIGZvciBiZWdpdmVuaGVkIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1wYXRoIjoiTGFncmluZ3NzdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJMYWdyaW5nc3N0aSBlciBww6VrcsOmdmV0LiIsInN0b3JhZ2UtdHlwZSI6IkxhZ3JpbmdzdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiTGFncmluZyBhZiBmaWx0ZXIiLCJtZW1vcnktc3RvcmFnZSI6IkxhZ3JpbmcgYWYgaHVrb21tZWxzZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZC12w6ZydCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJWw6ZydCBlciBww6VrcsOmdmV0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZC1wb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzLiBwb3J0bnVtbWVyIGVyIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluLiBwb3J0bnVtbWVyIGVyIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBlciBpa2tlIGd5bGRpZy4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBlciBww6VrcsOmdmV0LiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBrb25maWcuIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiIiLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwgQ0EtY2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwga2xpZW50Y2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiU3RpIHRpbCBwcml2YXQgbsO4Z2xlIHDDpSBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJTa2lmdCB0aWwgZnVsZCBza8Omcm0iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiVGlsZsO4ai9vcGRhdGVyIGtvbmZpZ3VyYXRpb24gSlNPTiJ9LF9vPXsiYWRkLWVudHJ5IjoiQcOxYWRpciBjb25maWd1cmFjacOzbiIsYWR2YW5jZWQ6IkF2YW56YWRvIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiUHJvYmFuZG8gYWN0aXZpZGFkIGRlIGRpc3Bvc2l0aXZvIixjb21tYW5kOiJDb21hbmRvcyBEb2NrZXIiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiU2UgaGFuIGNvcGlhZG8gbG9zIGNvbWFuZG9zIGFsIHBvcnRhcGFwZWxlcyIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhY2nDs24iLCJjb25uZWN0b3ItYWRkIjoiQcOxYWRpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tYnJlIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBub21icmUgY29uZWN0b3IuIiwiY29ubmVjdG9yLXR5cGUiOiJUaXBvIGNvbmVjdG9yIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aXBvIGNvbmVjdG9yLiIsY29ubmVjdG9yczoiQ29uZWN0b3JlcyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29uZmlndXJhY2nDs24gZGUgY29uZWN0b3JlcyIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOb21icmUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUaXBvIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJFc3RhZG8iLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY2Npb25lcyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiQ2xhdmUiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc2UiLCJycGMtY29tbWFuZC1zZW5kIjoiRW52aWFyIiwicnBjLWNvbW1hbmQtcmVzdWx0IjoiUmVzdWx0YWRvIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiJFZGl0YXIgcGFyYW1ldHJvcyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkNvbmZpZ3VyYWNpw7NuIEdlbmVyYWwiLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhciB1biBnYXRld2F5IG51ZXZvIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJDcmVhciB1biBudWV2byBnYXRld2F5IGNvbiBlbCBub21icmU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkhvcmEgZGUgY3JlYWNpw7NuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6IkxhcyBjb25maWd1cmFjaW9uZXMgc2UgYm9ycmFyw6FuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJTw7NsbyBlcyBwb3NpYmxlIGRlc2FjdGl2YXIgbGEgY29uZmlndXJhY2nDs24gcmVtb3RhLCBzaSBoYXkgYWNjZXNvIGbDrXNpY28gYWwgZ2F0ZXdheS4gU2UgYm9ycmFyw6FuIHRvZGFzIGxhcyBjb25maWd1cmFjaW9uZXMgcHJldmlhcy48YnI+PGJyPiBcblBhcmEgZGVzYWN0aXZhciBsYSBjb25maWd1cmFjacOzbiwgaW50cm9kdWNlIGVsIG5vbWJyZSBkZWwgZ2F0ZXdheSBhcXXDrSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6Ik5vbWJyZSBHYXRld2F5IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGdhdGV3YXkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IkRlc2FjdGl2YXIiLGRlbGV0ZToiQm9ycmFyIGNvbmZpZ3VyYWNpw7NuIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FyZ2FyIGZpY2hlcm8gZGUgY29uZmlndXJhY2nDs24iLCJkcm9wLWZpbGUiOiJBcnJhc3RyYSB1biBmaWNoZXJvIG8iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IllhIGV4aXN0ZSB1biBkaXNwb3NpdGl2byBjb24gZWwgbWlzbW8gbm9tYnJlLiIsImdhdGV3YXktbmFtZSI6Ik5vbWJyZSBkZSBHYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdW4gbm9tYnJlIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7NuIGRlIGdhdGV3YXkgZ3JhYmFkYSBzYXRpc2ZhY3RvcmlhbWVudGUuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaW1lb3V0IEtlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgVGltZW91dCBLZWVwIGFsaXZlIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiRWwgdmFsb3Igbm8gZXMgdsOhbGlkbyIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGtlZXAgYWxpdmUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6IkVsIHZhbG9yIGtlZXAgYWxpdmUgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6IlRpZW1wbyBtw61uaW1vIGVudHJlIHBpbmdzIChlbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aWVtcG8gbcOtbmltbyBlbnRyZSBwaW5ncyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiRWwgdmFsb3IgZGUgdGllbXBvIG3DrW5pbW8gZW50cmUgcGluZ3Mgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DrW5pbW8gc2luIGRhdG9zIChlbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGludGVydmFsbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGludGVydmFsbyBubyBlcyB2w6FsaWRvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DoXhpbW8gc2luIGRhdG9zIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgaW50ZXJ2YWxvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJFbCB2YWxvciBkZSBpbnRlcnZhbG8gbm8gZXMgdsOhbGlkbyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJQZXJpb2RvIGRlIGNvbnRyb2wgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlbCBwZXJpb2RvIG5vIGVzIHbDoWxpZG8iLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcyI6IlRpbWVvdXQgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGltZW91dCBkZSBpbmFjdGl2aWRhZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGluYWN0aXZpZGFkIG5vIGVzIHbDoWxpZG8iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6FsaWRvLiIsImpzb24tcmVxdWlyZWQiOiJFbCBjYW1wbyBubyBwdWVkZSBlc3RhciB2YWPDrW8uIixsb2dzOntsb2dzOiJSZWdpc3Ryb3MiLGRheXM6ImTDrWFzIixob3VyczoiaG9yYXMiLG1pbnV0ZXM6Im1pbnV0b3MiLHNlY29uZHM6InNlZ3VuZG9zIiwiZGF0ZS1mb3JtYXQiOiJGb3JtYXRvIGRlIGZlY2hhIiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBmb3JtYXRvIGRlIGZlY2hhIiwibG9nLWZvcm1hdCI6IkZvcm1hdG8gZGUgcmVnaXN0cm8iLCJsb2ctdHlwZSI6IlRpcG8gZGUgcmVnaXN0cm8iLCJsb2ctZm9ybWF0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGlwbyBkZSByZWdpc3RybyIscmVtb3RlOiJSZWdpc3RybyByZW1vdG8iLCJyZW1vdGUtbG9ncyI6IlJlZ2lzdHJvIHJlbW90byIsbG9jYWw6IlJlZ2lzdHJvIGxvY2FsIixsZXZlbDoiTml2ZWwgZGUgcmVnaXN0cm8iLCJmaWxlLXBhdGgiOiJSdXRhIGRlIGZpY2hlcm8iLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBydXRhIGRlIGZpY2hlcm8iLCJzYXZpbmctcGVyaW9kIjoiUGVyaW9kbyBkZSBndWFyZGFkbyBkZSByZWdpc3Ryb3MiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gbm8gcHVlZGUgc2VyIG1lbm9yIHF1ZSAxIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHBlcmlvZG8gZGUgZ3VhcmRhZG8iLCJiYWNrdXAtY291bnQiOiJOw7ptZXJvIGRlIGJhY2t1cHMiLCJiYWNrdXAtY291bnQtbWluIjoiRWwgbsO6bWVybyBkZSBiYWNrdXBzIG5vIHB1ZWRlIHNlciBtZW5vciBxdWUgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgYmFja3VwcyJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiVGllbXBvIGRlIGVzcGVyYSwgZW52w61vIGRlIHBhcXVldGVzIChlbiBtcykiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGllbXBvIGRlIGVzcGVyYSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoiRWwgdGllbXBvIGRlIGVzcGVyYSBubyBwdWVkZSBzZXIgbWVub3IgcXVlIDAiLCJuby1jb25uZWN0b3JzIjoiTm8gaGF5IGNvbmVjdG9yZXMiLCJuby1kYXRhIjoiTm8gaGF5IGNvbmZpZ3VyYWNpb25lcyIsIm5vLWdhdGV3YXktZm91bmQiOiJObyBzZSBoYSBlbmNvbnRyYWRvIG5pbmfDum4gZ2F0ZXdheS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiICd7e2l0ZW19fScgbm8gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJSdXRhIGEgbG9zIGFyY2hpdm9zIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlJ1dGEgcmVxdWVyaWRhLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiUGVybWl0aXIgS2VlcCBhbGl2ZSBzaSBsbGFtYWRhcyIscmVtb3RlOiJDb25maWd1cmFjacOzbiByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik5pdmVsIGRlIGxvZ2dpbmciLCJyZW1vdmUtZW50cnkiOiJCb3JyYXIgY29uZmlndXJhY2nDs24iLCJyZW1vdGUtc2hlbGwiOiJDb25zb2xhIHJlbW90YSIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiQ29uZmlndXJhY2nDs24gcmVtb3RhIixvdGhlcjoib3Ryb3MiLCJzYXZlLXRpcCI6IkdyYWJhciBmaWNoZXJvIGRlIGNvbmZpZ3VyYWNpw7NuIiwic2VjdXJpdHktdHlwZSI6IlRpcG8gZGUgc2VndXJpZGFkIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVMOza2VuIGRlIGFjY2VzbyIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXN1YXJpbyB5IGNvbnRyYXNlw7FhIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBUw7NrZW4gZGUgYWNjZXNvIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgQ2xhdmUgcHJpdmFkYSJ9LCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZWwgc2Vydmlkb3IiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiRXN0YWTDrXN0aWNhIixzdGF0aXN0aWNzOiJFc3RhZMOtc3RpY2FzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjoiTm8gaGF5IGVzdGFkw61zdGljYXMiLGNvbW1hbmRzOiJDb21hbmRvcyIsInNlbmQtcGVyaW9kIjoiUGVyaW9kbyBkZSBlbnbDrW8gZGUgZXN0YWTDrXN0aWNhcyAoZW4gc2VndW5kb3MpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIGRlIGVudsOtbyIsInNlbmQtcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gZGUgZW52w61vIG5vIHB1ZWRlIHNlciBtZW5vciBkZSA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJFbCBwZXJpb2RvIGRlIGVudsOtbyBubyBlcyB2w6FsaWRvIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiUmV2aXNhciBjb25maWd1cmFjacOzbiBkZSBjb25lY3RvcmVzIChlbiBzZWd1bmRvcykiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB1biB2YWxvciIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuIjoiTGEgY29uZmlndXJhY2nDs24gbm8gZXMgdsOhbGlkYSIsYWRkOiJBw7FhZGlyIGNvbWFuZG8iLHRpbWVvdXQ6IlRpbWVvdXQiLCJ0aW1lb3V0LW1zIjoiVGltZW91dCAoZW4gbXMpIiwidGltZW91dC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHRpbWVvdXQiLCJ0aW1lb3V0LW1pbiI6IkVsIHRpbWVvdXQgbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJFbCB0aW1lb3V0IG5vIGVzIHbDoWxpZG8iLCJhdHRyaWJ1dGUtbmFtZSI6Ik5vbWJyZSBkZSBhdHJpYnV0byIsImF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGF0cmlidXRvIixjb21tYW5kOiJDb21hbmRvIiwiY29tbWFuZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGNvbWFuZG8iLHJlbW92ZToiQm9ycmFyIGNvbWFuZG8ifSxzdG9yYWdlOiJHcmFiYWNpw7NuIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTsO6bWVybyBtw6F4aW1vIGRlIHJlZ2lzdHJvcyBlbiBmaWNoZXJvIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZmljaGVyb3MiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6FsaWRvLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTcOheGltbyBkZSByZWdpc3Ryb3MgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltbyBlcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiTGVlciBuw7ptZXJvIGRlIGVudHJhZGFzIGVuIGFsbWFjw6luIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgZW50cmFkYXMgZXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBuw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiUnV0YSBkZSBjYXJwZXRhIGRlIGRhdG9zIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcnV0YS4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWHDsW8gbcOheGltbyBkZSBldmVudG9zIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiRWwgbsO6bWVybyBtw61uaW1vIGVzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8uIiwic3RvcmFnZS1wYXRoIjoiUnV0YSBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHJ1dGEgZGUgYWxtYWPDqW4uIiwic3RvcmFnZS10eXBlIjoiVGlwbyBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gZmljaGVybyIsIm1lbW9yeS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gbWVtb3JpYSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiSG9zdCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQdWVydG8gVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkVsIHB1ZXJ0byBtw6F4aW1vIGVzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiRWwgcHVlcnRvIG3DrW5pbW8gZXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQdWVydG8gbm8gdsOhbGlkby4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcHVlcnRvLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDs24gY29uZWN0b3Ige3t0eXBlTmFtZX19IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIENBIGVuIGVsIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIGNsaWVudGUgZW4gZWwgZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6IkNvbXByb2JhY2nDs24gZGUgVFRMIGRlIG1lbnNhamVzIGVuIGhvcmFzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiQ2FtcG8gcmVxdWVyaWRvLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJFbCBtw61uaW1vIGVzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwgKFRpbWUgdG8gbGl2ZSkgZGUgbWVuc2FnZXMgZW4gZMOtYXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIFRUTCBkZSBtZW5zYWplcy4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvLiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IkVsIHJhbmdvIGRlIHZhbG9yZXMgZXMgZGVzZGUgMCBhIDEiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlJ1dGEgYSBsYSBjbGF2ZSBwcml2YWRhIGVuIGVsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7NuIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkHDsWFkaXIvYWN0dWFsaXphciBjb25maWd1cmFjacOzbiBKU09OIixoaW50czp7InJlbW90ZS1jb25maWd1cmF0aW9uIjoiSGFiaWxpdGEgbGEgYWRtaW5pc3RyYWNpw7NuIHkgY29uZmlndXJhY2nDs24gcmVtb3RhIGRlbCBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiSGFiaWxpdGEgZWwgY29udHJvbCByZW1vdG8gZGVsIHNpc3RlbWEgb3BlcmF0aXZvIGRlbCBnYXRld2F5IGRlc2RlIGVsIHdpZGdldCB0ZXJtaW5hbCByZW1vdG8iLGhvc3Q6Ikhvc3RuYW1lIG8gZGlyZWNjacOzbiBJUCBkZWwgc2Vydmlkb3IgVGhpbmdzYm9hcmQiLHBvcnQ6IlB1ZXJ0byBkZWwgc2VydmljaW8gTVFUVCBlbiBlbCBzZXJ2aWRvciBUaGluZ3Nib2FyZCIsdG9rZW46IkFjY2VzcyB0b2tlbiBwYXJhIGVsIGdhdGV3YXkiLCJjbGllbnQtaWQiOiJJRCBkZSBjbGllbnRlIE1RVFQgcGFyYSBlbCBnYXRld2F5Iix1c2VybmFtZToiVXN1YXJpbyBNUVRUIHBhcmEgZWwgZ2F0ZXdheSIscGFzc3dvcmQ6IkNvbnRyYXNlw7FhIE1RVFQgcGFyYSBlbCBnYXRld2F5IiwiY2EtY2VydCI6IlJ1dGEgYWwgZmljaGVybyBkZWwgY2VydGlmaWNhZG8gQ0EiLCJkYXRlLWZvcm0iOiJGb3JtYXRvIGRlIGZlY2hhIGVuIGxvcyBtZW5zYWplcyBkZSByZWdpc3RybyIsImRhdGEtZm9sZGVyIjoiUnV0YSBhIGxhIGNhcnBldGEgcXVlIGNvbnRlbmRyw6EgbG9zIGRhdG9zIChSZWxhdGl2YSBvIGFic29sdXRhKSIsImxvZy1mb3JtYXQiOiJGb3JtYXRvIGRlIG1lbnNhamVzIGVuIHJlZ2lzdHJvIiwicmVtb3RlLWxvZyI6IkhhYmlsaXRhIGVsIHJlZ2lzdHJvIHJlbW90byB5IGxhIHBvc3RlcmlvciBsZWN0dXJhIGRlc2RlIGVsIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJTaSBlbCBjb250YWplIGRlIGNvcGlhcyBkZSBzZWd1cmlkYWQgZXMgbWF5b3IgcXVlIDAsIGN1YW5kbyBzZSByZWFsaWNlIHVuYSByZW5vdmFjacOzbiwgbm8gc2UgY29uc2VydmFuIG3DoXMgcXVlIGxvcyBhcmNoaXZvcyBkZSByZWN1ZW50byBkZSBjb3BpYXMgZGUgc2VndXJpZGFkLCBsb3MgbcOhcyBhbnTDrWd1b3Mgc2UgZWxpbWluYXLDoW4iLHN0b3JhZ2U6IlByb3ZlZSBsYSBjb25maWd1cmFjacOzbiBwYXJhIGVsIGdyYWJhZG8gZGUgZGF0b3MgZW50cmFudGVzIGFudGVzIGRlIHF1ZSBzZSBlbnbDrWVuIGEgbGEgcGxhdGFmb3JtYSIsIm1heC1maWxlLWNvdW50IjoiTsO6bWVybyBtw6F4aW1vIGRlIGZpY2hlcm9zIHF1ZSBzZSBjcmVhcsOhbiIsIm1heC1yZWFkLWNvdW50IjoiTsO6bWVvIG3DoXhpbW8gZGUgbWVuc2FqZXMgYSBvYnRlbmVyIGRlc2RlIGVsIGRpc2NvIHkgZW52aWFkb3MgYSBsYSBwbGF0YWZvcm1hIiwibWF4LXJlY29yZHMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIHF1ZSBzZSBndWFyZGFyw6FuIGVuIHVuIHNvbG8gZmljaGVybyIsInJlYWQtcmVjb3JkLWNvdW50IjoiTsO6bWVybyBkZSBtZW5zYWdlcyBhIG9idGVuZXIgZGVzZGUgZWwgYWxtYWNlbmFtaWVudG8geSBlbnZpYWRvcyBhIGxhIHBsYXRhZm9ybWEiLCJtYXgtcmVjb3Jkcy1jb3VudCI6Ik7Dum1lcm8gbcOheGltbyBkZSBkYXRvcyBlbiBhbG1hY2VuYW1pZW50byBhbnRlcyBkZSBlbnZpYXIgYSBsYSBwbGF0YWZvcm1hIiwidHRsLWNoZWNrLWhvdXIiOiJDb24gcXXDqSBmcmVjdWVuY2lhIGVsIGdhdGV3YXkgY29tcHJvYmFyw6Egc2kgbG9zIGRhdG9zIGVzdMOhbiBvYnNvbGV0b3MiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTsO6bWVybyBtw6F4aW1vIGRlIGTDrWFzIHBhcmEgbGEgcmV0ZW5jacOzbiBkZSBkYXRvcyBlbiBlbCBhbG1hY8OpbiIsY29tbWFuZHM6IkNvbWFuZG9zIHBhcmEgcmVjb2dlciBlc3RhZMOtc3RpY2FzIGFkaWNpb25hbGVzIixhdHRyaWJ1dGU6IkNsYXZlIGRlIHRlbGVtZXRyw61hIHBhcmEgZXN0YWTDrXN0aWNhcyIsdGltZW91dDoiVGltZW91dCBwYXJhIGxhIGVqZWN1Y2nDs24gZGUgY29tYW5kb3MiLGNvbW1hbmQ6IkVsIHJlc3VsdGFkbyBkZSBsYSBlamVjdWNpw7NuIGRlbCBjb21hbmRvLCBzZSB1c2Fyw6EgY29tbyB2YWxvciBwYXJhIGxhIHRlbGVtZXRyw61hIiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiSGFiaWxpdGEgbGEgbW9uaXRvcml6YWNpw7NuIGRlIGNhZGEgdW5vIGRlIGxvcyBkaXNwb3NpdGl2b3MgY29uZWN0YWRvcyIsImluYWN0aXZpdHktdGltZW91dCI6IlRpZW1wbyB0cmFzIHF1ZSBlbCBnYXRld2F5IGRlc2NvbmVjdGFyw6EgZWwgZGlzcG9zaXRpdm8iLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZG8gZGUgbW9uaXRvcml6YWNpw7NuIGRlIGFjdGl2aWRhZCBlbiBlbCBkaXNwb3NpdGl2byIsIm1pbmltYWwtcGFjay1kZWxheSI6IlRpZW1wbyBkZSBlc3BlcmEgZW50cmUgZW52w61vIGRlIHBhcXVldGVzIGRlIG1lbnNhamVzIChVbiB2YWxvciBtdXkgYmFqbywgcmVzdWx0YXLDoSBlbiB1biBhdW1lbnRvIGRlIHVzbyBkZSBsYSBDUFUgZW4gZWwgZ2F0ZXdheSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGVuIGxvcyBtZW5zYWplcyBNUVRUICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZSByZWQgZW4gZWwgY3VhbCBlbCBzZXJ2aWRvciBHUlBDIGVzY3VjaGFyw6EgY29uZXhpb25lcyBlbnRyYW50ZXMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaWVtcG8gbcOheGltbywgZWwgY3VhbCBlbCBzZXJ2aWRvciBlc3BlcmFyYSB1biBwaW5nIGtlZXBhbGl2ZSBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYWNpw7NuIGVudHJlIGRvcyBwaW5ncyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbGxhbWFkYSBSUEMgYWN0aXZhLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik3DrW5pbW8gdGllbXBvIHF1ZSBlbCBzZXJ2aWRvciBkZWJlIGVzcGVyYXIgZW50cmUgZW52w61vcyBkZSBtZW5zYWplcyBkZSBwaW5nIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTsO6bWVybyBtw6F4aW1vIGRlIHBpbmdzIGtlZXBhbGl2ZSBxdWUgZWwgc2Vydmlkb3IgcHVlZGUgZW52aWFyIHNpbiByZWNpYmlyIG5pbmfDum4gZGF0byBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNw61uaW1vIHRpZW1wbyBxdWUgZWwgc2Vydmlkb3IgZGViZSBlc3BlcmFyIGVudHJlIGVudsOtb3MgZGUgcGluZyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbmluZ8O6biBkYXRvIGVuIGVudsOtbyBvIHJlY2VwY2nDs24uIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJQZXJtaXRpciBhbCBzZXJ2aWRvciBtYW50ZW5lciBsYSBjb25leGnDs24gR1JQQyBhYmllcnRhLCBjdWFuZG8gbm8gaGF5YSBsbGFtYWRhcyBSUEMgYWN0aXZhcy4ifX0sSG89eyJhZGQtZW50cnkiOiLshKTsoJUg7LaU6rCAIiwiY29ubmVjdG9yLWFkZCI6IuyDiOuhnOyatCDsl7DqsrDsnpAg7LaU6rCAIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJFbmFibGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUiOiJDb25uZWN0b3IgbmFtZSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiQ29ubmVjdG9yIG5hbWUgaXMgcmVxdWlyZWQuIiwiY29ubmVjdG9yLXR5cGUiOiJDb25uZWN0b3IgdHlwZSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiQ29ubmVjdG9yIHR5cGUgaXMgcmVxdWlyZWQuIixjb25uZWN0b3JzOiJDb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhdGUgYSBuZXcgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQXJlIHlvdSBzdXJlIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBnYXRld2F5IHdpdGggbmFtZTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiU3RvcmFnZSIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBmaWxlIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbXVtIG51bWJlciBvZiBmaWxlcyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJOdW1iZXIgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWF4aW11bSByZWNvcmRzIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZCBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlRoaW5nc0JvYXJkIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29ubmVjdG9yIHt7dHlwZU5hbWV9fSBjb25maWd1cmF0aW9uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYXRoIHRvIHByaXZhdGUga2V5IG9uIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlRvZ2dsZSBmdWxsc2NyZWVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aW9uIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkZC91cGRhdGUgY29uZmlndXJhdGlvbiBKU09OIn0sem89eyJhZGQtZW50cnkiOiJBZGQgY29uZmlndXJhdGlvbiIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJycGMtY29tbWFuZC1zZW5kIjoiU2VuZCIsInJwYy1jb21tYW5kLXJlc3VsdCI6IlJlc3VsdCIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiSW4gb3JkZXIgdG8gcnVuIFRoaW5nc0JvYXJkIElvVCBnYXRld2F5IGluIGRvY2tlciB3aXRoIGNyZWRlbnRpYWxzIGZvciB0aGlzIGRldmljZSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkNyZWF0ZSBhIG5ldyBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJBcmUgeW91IHN1cmUgeW91IHdhbnQgY3JlYXRlIGEgbmV3IGdhdGV3YXkgd2l0aCBuYW1lOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkRldmljZSB3aXRoIHNhbWUgbmFtZSBpcyBhbHJlYWR5IGV4aXN0cy4iLCJnYXRld2F5LW5hbWUiOiJHYXRld2F5IG5hbWUiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJHYXRld2F5IG5hbWUgaXMgcmVxdWlyZWQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHkgc2F2ZWQuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJLZWVwIGFsaXZlIHRpbWVvdXQgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIG5vdCB2YWxpZCIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IktlZXAgYWxpdmUgaXMgcmVxdWlyZWQiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiS2VlcCBhbGl2ZSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm4iOiJLZWVwIGFsaXZlIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgKGluIG1zKSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluIHBpbmcgaW50ZXJ2YWwgd2l0aG91dCBkYXRhIChpbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyBub3QgdmFsaWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1taW4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJqc29uLXBhcnNlIjoiTm90IHZhbGlkIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IkZpZWxkIGNhbm5vdCBiZSBlbXB0eS4iLGxvZ3M6e2xvZ3M6IkxvZ3MiLGRheXM6ImRheXMiLGhvdXJzOiJob3VycyIsbWludXRlczoibWludXRlcyIsc2Vjb25kczoic2Vjb25kcyIsImRhdGUtZm9ybWF0IjoiRGF0ZSBmb3JtYXQiLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IkRhdGUgZm9ybWF0IHJlcXVpcmVkIiwibG9nLWZvcm1hdCI6IkxvZyBmb3JtYXQiLCJsb2ctdHlwZSI6IkxvZyB0eXBlIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6IkxvZyBmb3JtYXQgcmVxdWlyZWQiLHJlbW90ZToiUmVtb3RlIGxvZ2dpbmciLCJyZW1vdGUtbG9ncyI6IlJlbW90ZSBsb2dzIixsb2NhbDoiTG9jYWwgbG9nZ2luZyIsbGV2ZWw6IkxvZyBsZXZlbCIsImZpbGUtcGF0aCI6IkZpbGUgcGF0aCIsImZpbGUtcGF0aC1yZXF1aXJlZCI6IkZpbGUgcGF0aCByZXF1aXJlZCIsInNhdmluZy1wZXJpb2QiOiJMb2cgc2F2aW5nIHBlcmlvZCIsInNhdmluZy1wZXJpb2QtbWluIjoiTG9nIHNhdmluZyBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiJMb2cgc2F2aW5nIHBlcmlvZCByZXF1aXJlZCIsImJhY2t1cC1jb3VudCI6IkJhY2t1cCBjb3VudCIsImJhY2t1cC1jb3VudC1taW4iOiJCYWNrdXAgY291bnQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IkJhY2t1cCBjb3VudCByZXF1aXJlZCJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiTWluIHBhY2sgc2VuZCBkZWxheSAoaW4gbXMpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgaXMgcmVxdWlyZWQiLCJtaW4tcGFjay1zZW5kLWRlbGF5LW1pbiI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMCIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJLZWVwIGFsaXZlIHBlcm1pdCB3aXRob3V0IGNhbGxzIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtc2hlbGwiOiJSZW1vdGUgc2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IlJlbW90ZSBDb25maWd1cmF0aW9uIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTdG9yYWdlIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIGZpbGUiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBudW1iZXIgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWJlciBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbXVtIHJlY29yZHMgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudCI6IlJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudCI6Ik1heCByZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiTWF4IFJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6IkRhdGEgZm9sZGVyIHBhdGgiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiJEYXRhIGZvbGRlciBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQgaG9zdCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYXhpbXVtIHBvcnQgbnVtYmVyIGlzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluaW11bSBwb3J0IG51bWJlciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgaXMgbm90IHZhbGlkLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGlzIHJlcXVpcmVkLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBjb25maWcgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsaGludHM6eyJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIFRoaW5nc0JvYXJkIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIGZvbGRlciwgdGhhdCB3aWxsIGNvbnRhaW5zIGRhdGEgKFJlbGF0aXZlIG9yIEFic29sdXRlKSIsImxvZy1mb3JtYXQiOiJMb2cgbWVzc2FnZSBmb3JtYXQiLCJyZW1vdGUtbG9nIjoiRW5hYmxlcyByZW1vdGUgbG9nZ2luZyBhbmQgbG9ncyByZWFkaW5nIGZyb20gdGhlIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJJZiBiYWNrdXAgY291bnQgaXMgPiAwLCB3aGVuIGEgcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cCBjb3VudCBmaWxlcyBhcmUga2VwdCAtIHRoZSBvbGRlc3Qgb25lcyBhcmUgZGVsZXRlZCIsc3RvcmFnZToiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3Igc2F2aW5nIGluY29taW5nIGRhdGEgYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIHBsYXRmb3JtIiwibWF4LWZpbGUtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGZpbGUgdGhhdCB3aWxsIGJlIGNyZWF0ZWQiLCJtYXgtcmVhZC1jb3VudCI6IkNvdW50IG9mIG1lc3NhZ2VzIHRvIGdldCBmcm9tIHN0b3JhZ2UgYW5kIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJtYXgtcmVjb3JkcyI6Ik1heGltdW0gY291bnQgb2YgcmVjb3JkcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIG9uZSBmaWxlIiwicmVhZC1yZWNvcmQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGRhdGEgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZCB0byBUaGluZ3NCb2FyZCIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgR2F0ZXdheSBjaGVjayBkYXRhIGZvciBvYnNvbGVzY2VuY2UiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTWF4aW11bSBkYXlzIHRoYXQgc3RvcmFnZSB3aWxsIHNhdmUgZGF0YSIsY29tbWFuZHM6IkNvbW1hbmRzIGZvciBjb2xsZWN0aW5nIGFkZGl0aW9uYWwgc3RhdGlzdGljIixhdHRyaWJ1dGU6IlN0YXRpc3RpYyB0ZWxlbWV0cnkga2V5Iix0aW1lb3V0OiJUaW1lb3V0IGZvciBjb21tYW5kIGV4ZWN1dGluZyIsY29tbWFuZDoiVGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24sIHdpbGwgYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRlbGVtZXRyeSIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6IkVuYWJsZXMgbW9uaXRvciB0aGUgYWN0aXZpdHkgb2YgZWFjaCBjb25uZWN0ZWQgZGV2aWNlIiwiaW5hY3Rpdml0eS10aW1lb3V0IjoiVGltZSBhZnRlciB3aG9zZSB0aGUgZ2F0ZXdheSB3aWxsIGRpc2Nvbm5lY3QgZGV2aWNlIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiJQZXJpb2RpY2l0eSBvZiBkZXZpY2UgYWN0aXZpdHkgY2hlY2siLCJtaW5pbWFsLXBhY2stZGVsYXkiOiJEZWxheSBiZXR3ZWVuIHNlbmRpbmcgcGFja3Mgb2YgbWVzc2FnZXMgKERlY3JlYXNpbmcgdGhpcyBzZXR0aW5nIHJlc3VsdHMgaW4gaW5jcmVhc2VkIENQVSB1c2FnZSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGluIE1RVFQgbWVzc2FnaW5nICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6Ik5ldHdvcmsgcG9ydCBvbiB3aGljaCBHUlBDIHNlcnZlciB3aWxsIGxpc3RlbiBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJNYXhpbXVtIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBmb3IgYSBrZWVwYWxpdmUgcGluZyByZXNwb25zZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLWtlZXAtYWxpdmUiOiJEdXJhdGlvbiBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIFJQQyBjYWxsLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXhpbXVtIG51bWJlciBvZiBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB0aGF0IHRoZSBzZXJ2ZXIgY2FuIHNlbmQgd2l0aG91dCByZWNlaXZpbmcgYW55IGRhdGEgYmVmb3JlIGl0IGNvbnNpZGVycyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgYmVpbmcgc2VudCBvciByZWNlaXZlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IkFsbG93IHNlcnZlciB0byBrZWVwIHRoZSBHUlBDIGNvbm5lY3Rpb24gYWxpdmUgZXZlbiB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgUlBDIGNhbGxzLiJ9fSxXbz17ImFkZC1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB0b2V2b2VnZW4iLCJjb25uZWN0b3ItYWRkIjoiTmlldXdlIGNvbm5lY3RvciB0b2V2b2VnZW4iLCJjb25uZWN0b3ItZW5hYmxlZCI6IkNvbm5lY3RvciBpbnNjaGFrZWxlbiIsImNvbm5lY3Rvci1uYW1lIjoiTmFhbSB2YW4gZGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJEZSBuYWFtIHZhbiBkZSBjb25uZWN0b3IgaXMgdmVyZWlzdC4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cGUgYWFuc2x1aXRpbmciLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkhldCB0eXBlIGNvbm5lY3RvciBpcyB2ZXJlaXN0LiIsY29ubmVjdG9yczoiQ29uZmlndXJhdGllIHZhbiBjb25uZWN0b3JlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkVlbiBuaWV1d2UgZ2F0ZXdheSBtYWtlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiV2VldCB1IHpla2VyIGRhdCB1IGVlbiBuaWV1d2UgZ2F0ZXdheSB3aWx0IG1ha2VuIG1ldCBkZSBuYWFtOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiQ29uZmlndXJhdGllIHZlcndpamRlcmVuIiwiZG93bmxvYWQtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBkb3dubG9hZGVuIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2UgbWV0IGRlemVsZmRlIG5hYW0gYmVzdGFhdCBhbC4iLCJnYXRld2F5LW5hbWUiOiJOYWFtIHZhbiBkZSBnYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiRGUgbmFhbSB2YW4gZGUgZ2F0ZXdheSBpcyB2ZXJlaXN0LiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5Y29uZmlndXJhdGllIHN1Y2Nlc3ZvbCBvcGdlc2xhZ2VuLiIsImpzb24tcGFyc2UiOiJPbmdlbGRpZ2UgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiSGV0IHZlbGQgbWFnIG5pZXQgbGVlZyB6aWpuLiIsIm5vLWNvbm5lY3RvcnMiOiJHZWVuIGNvbm5lY3RvcmVuIiwibm8tZGF0YSI6IkdlZW4gY29uZmlndXJhdGllcyIsIm5vLWdhdGV3YXktZm91bmQiOiJHZWVuIGdhdGV3YXkgZ2V2b25kZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6Iid7e2l0ZW19fScgbmlldCBnZXZvbmRlbi4iLCJwYXRoLWxvZ3MiOiJQYWQgbmFhciBsb2diZXN0YW5kZW4iLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYWQgaXMgdmVyZWlzdC4iLHJlbW90ZToiQ29uZmlndXJhdGllIG9wIGFmc3RhbmQiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJlZ2lzdHJhdGllIG5pdmVhdSIsInJlbW92ZS1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB2ZXJ3aWpkZXJlbiIsInNhdmUtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBvcHNsYWFuIiwic2VjdXJpdHktdHlwZSI6IlNvb3J0IGJldmVpbGlnaW5nIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9lZ2FuZyB0b3QgdG9rZW4iLHRsczoiVExTIChUTFMpIn0sc3RvcmFnZToiT3BzbGFnIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSBhYW50YWwgcmVjb3JkcyBpbiBiZXN0YW5kIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbWFhbCBhYW50YWwgYmVzdGFuZGVuIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBhYW50YWwgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtbWVyIGlzIHZlcmVpc3QuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gYWFudGFsIHJlY29yZHMgaW4gb3BzbGFnIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIGFhbnRhbCByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbWFsZSByZWNvcmRzIHppam4gdmVyZWlzdC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1heGltYWxlIHBha2tldGdyb290dGUgdm9vciBldmVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIGFhbnRhbCBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1tZXIgaXMgbmlldCBnZWxkaWcuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJEZSBtYXhpbWFsZSBwYWtrZXRncm9vdHRlIHZhbiBoZXQgZXZlbnQgaXMgdmVyZWlzdC4iLCJzdG9yYWdlLXBhdGgiOiJPcHNsYWcgcGFkIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiT3BzbGFncGFkIGlzIHZlcmVpc3QuIiwic3RvcmFnZS10eXBlIjoiVHlwZSBvcHNsYWciLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik9wc2xhZyB2YW4gYmVzdGFuZGVuIiwibWVtb3J5LXN0b3JhZ2UiOiJHZWhldWdlbiBvcHNsYWcifSx0aGluZ3Nib2FyZDoiRGluZ2VuIEJvcmQiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQtZ2FzdGhlZXIiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiU2VydmVyIGhvc3QgaXMgdmVyZWlzdC4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmQtcG9vcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkhldCBtYXhpbWFsZSBwb29ydG51bW1lciBpcyA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6IkhldCBtaW5pbWFsZSBwb29ydG51bW1lciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvb3J0IGlzIG5pZXQgZ2VsZGlnLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb29ydCBpcyB2ZXJlaXN0LiIsdGlkeToiT3JkZWxpamsiLCJ0aWR5LXRpcCI6Ik9wZ2VydWltZGUgY29uZmlndXJhdGllIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmF0aWUgdmFuIGNvbm5lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhZCBuYWFyIENBLWNlcnRpZmljYWF0IG9wIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYWQgbmFhciBjbGllbnRjZXJ0aWZpY2FhdCBvcCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYWQgbmFhciBwcml2w6lzbGV1dGVsIG9wIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlZvbGxlZGlnIHNjaGVybSBpbi0gZW4gdWl0c2NoYWtlbGVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aWUgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQ29uZmlndXJhdGllIEpTT04gdG9ldm9lZ2VuL2JpandlcmtlbiJ9LGpvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2rEmSIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3dlIHrFgsSFY3plIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJXxYLEhWN6IHrFgsSFY3plIiwiY29ubmVjdG9yLW5hbWUiOiJOYXp3YSB6xYLEhWN6YSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTmF6d2EgesWCxIVjemEgamVzdCB3eW1hZ2FuYS4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cCB6xYLEhWN6YSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiVHlwIHrFgsSFY3phIGplc3Qgd3ltYWdhbnkuIixjb25uZWN0b3JzOiJLb25maWd1cmFjamEgesWCxIVjenkiLCJjb25uZWN0b3JzLWNvbmZpZyI6IkNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOYW1lIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoiVHlwZSIsImNvbm5lY3RvcnMtdGFibGUtc3RhdHVzIjoiU3RhdHVzIiwiY29ubmVjdG9ycy10YWJsZS1hY3Rpb25zIjoiQWN0aW9ucyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiS2V5IiwiY29ubmVjdG9ycy10YWJsZS1jbGFzcyI6IkNsYXNzIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXN1bHQiLCJycGMtY29tbWFuZC1lZGl0LXBhcmFtcyI6IkVkaXQgcGFyYW1ldGVycyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkdlbmVyYWwgQ29uZmlndXJhdGlvbiIsImRvY2tlci1sYWJlbCI6IkluIG9yZGVyIHRvIHJ1biBUaGluZ3NCb2FyZCBJb1QgZ2F0ZXdheSBpbiBkb2NrZXIgd2l0aCBjcmVkZW50aWFscyBmb3IgdGhpcyBkZXZpY2UgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcy4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJVdHfDs3J6IG5vd3kgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQ3p5IG5hIHBld25vIGNoY2VzeiB1dHdvcnp5xIcgbm93eSBnYXRld2F5IG8gbmF6d2llOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IlVzdcWEIGtvbmZpZ3VyYWNqxJkiLCJkb3dubG9hZC10aXAiOiJQb2JpZXJ6IHBsaWsga29uZmlndXJhY3lqbnkiLCJkcm9wLWZpbGUiOiJEcm9wIGZpbGUgaGVyZSBvciIsZ2F0ZXdheToiV2VqxZtjaWUiLCJnYXRld2F5LWV4aXN0cyI6IlVyesSFZHplbmllIG8gdGVqIHNhbWVqIG5hendpZSBqdcW8IGlzdG5pZWplLiIsImdhdGV3YXktbmFtZSI6Ik5hendhIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOYXp3YSBHYXRld2F5J2EgamVzdCB3eW1hZ2FuYS4iLCJnYXRld2F5LXNhdmVkIjoiS29uZmlndXJhY2phIEdhdGV3ZXknYSB6b3N0YcWCYSBwb215xZtsbmllIHphcGlzYW5hLiIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCAoaW4gc2VjKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoiSW5hY3Rpdml0eSB0aW1lb3V0IChpbiBzZWMpIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgcmVxdWlyZWQiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgbm90IHZhbGlkIiwianNvbi1wYXJzZSI6Ik5pZXByYXdpZMWCb3d5IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmllIG1vxbxlIGJ5xIcgcHVzdGUuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDAiLCJuby1jb25uZWN0b3JzIjoiQnJhayB6xYLEhWN6eSIsIm5vLWRhdGEiOiJCcmFrIGtvbmZpZ3VyYWNqaSIsIm5vLWdhdGV3YXktZm91bmQiOiJOaWUgem5hbGV6aW9ubyBnYXRld2F5J2EuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pZSB6bmFsZXppb25vLiIsInBhdGgtbG9ncyI6IsWaY2llxbxrYSBkbyBwbGlrw7N3IGR6aWVubmlrYSIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IsWaY2llxbxrYSBqZXN0IHd5bWFnYW5hLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiS2VlcCBhbGl2ZSBwZXJtaXQgd2l0aG91dCBjYWxscyIscmVtb3RlOiJaZGFsbmEga29uZmlndXJhY2phIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJQb3ppb20gbG9nb3dhbmlhIiwicmVtb3ZlLWVudHJ5IjoiVXN1xYQga29uZmlndXJhY2rEmSIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLG90aGVyOiJPdGhlciIsInNhdmUtdGlwIjoiWmFwaXN6IHBsaWsga29uZmlndXJhY3lqbnkiLCJzZWN1cml0eS10eXBlIjoiUm9kemFqIHphYmV6cGllY3plbmlhIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9rZW4gZG9zdMSZcHUiLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTa8WCYWRvd2FuaWUiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYWtzeW1hbG5hIGxpY3piYSByZWtvcmTDs3cgdyBwbGlrdSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc3ltYWxuYSBsaWN6YmEgcGxpa8OzdyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWVyIGplc3Qgd3ltYWdhbnkuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyB3IHBhbWnEmWNpIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbWFsbmEgbGljemJhIHJla29yZMOzdyB0byAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWVyIGplc3QgbmllcHJhd2lkxYJvd3kuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiJSZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJNYXggcmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6Ik1heCBSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgiOiJEYXRhIGZvbGRlciBwYXRoIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiRGF0YSBmb2xkZXIgcGF0aCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCBqZXN0IHd5bWFnYW55LiIsInN0b3JhZ2UtcGF0aCI6IsWaY2llxbxrYSBwcnplY2hvd3l3YW5pYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IsWaY2llxbxrYSBkbyBwcnplY2hvd3l3YW5pYSBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCBza8WCYWRvd2FuaWEiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik5vxZtuaWsgZGFueWNoIiwibWVtb3J5LXN0b3JhZ2UiOiJQcnplY2hvd3l3YW5pZSBwYW1pxJljaSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiR29zcG9kYXJ6IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamVzdCB3eW1hZ2FueS4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4IjoiTWFrc3ltYWxueSBudW1lciBwb3J0dSB0byA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltYWxueSBudW1lciBwb3J0dSB0byAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBqZXN0IHd5bWFnYW55LiIsdGlkeToiVXBvcnrEhWRrdWoiLCJ0aWR5LXRpcCI6IlVwb3J6xIVka293YW5hIGtvbmZpZ3VyYWNqYSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiWsWCxIVjemUge3t0eXBlTmFtZX19IGtvbmZpZ3VyYWNqYSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoixZpjaWXFvGthIGRvIGNlcnR5ZmlrYXR1IENBIG5hIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiLFmmNpZcW8a2EgZG8gY2VydHlmaWthdHUga2xpZW50YSBuYSBnYXRld2F5IiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoiTWVzc2FnZXMgVFRMIGluIGRheXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLW1pbiI6Ik1pbiBudW1iZXIgaXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtcXR0LXFvcyI6IlFvUyIsIm1xdHQtcW9zLXJlcXVpcmVkIjoiUW9TIGlzIHJlcXVpcmVkIiwibXF0dC1xb3MtcmFuZ2UiOiJRb1MgdmFsdWVzIHJhbmdlIGlzIGZyb20gMCB0byAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLFmmNpZcW8a2EgZG8ga2x1Y3phIHByeXdhdG5lZ28gbmEgYnJhbWNlIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJQcnplxYLEhWN6IHRyeWIgcGXFgm5vZWtyYW5vd3kiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNqYSBKU09OKiIsInVwZGF0ZS1jb25maWciOiJEb2Rhai96YWt0dWFsaXp1aiBrb25maWd1cmFjasSZIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiJFbmFibGVzIHJlbW90ZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiRW5hYmxlcyByZW1vdGUgY29udHJvbCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIHRoZSBnYXRld2F5IGZyb20gdGhlIFJlbW90ZSBTaGVsbCB3aWRnZXQiLGhvc3Q6Ikhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgVGhpbmdzQm9hcmQgc2VydmVyIixwb3J0OiJQb3J0IG9mIE1RVFQgc2VydmljZSBvbiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHRva2VuOiJBY2Nlc3MgdG9rZW4gZm9yIHRoZSBnYXRld2F5IGZyb20gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2xpZW50LWlkIjoiTVFUVCBjbGllbnQgaWQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIix1c2VybmFtZToiTVFUVCB1c2VybmFtZSBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBhc3N3b3JkOiJNUVRUIHBhc3N3b3JkIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIsImNhLWNlcnQiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUiLCJkYXRlLWZvcm0iOiJEYXRlIGZvcm1hdCBpbiBsb2cgbWVzc2FnZSIsImRhdGEtZm9sZGVyIjoiUGF0aCB0byBmb2xkZXIsIHRoYXQgd2lsbCBjb250YWlucyBkYXRhIChSZWxhdGl2ZSBvciBBYnNvbHV0ZSkiLCJsb2ctZm9ybWF0IjoiTG9nIG1lc3NhZ2UgZm9ybWF0IiwicmVtb3RlLWxvZyI6IkVuYWJsZXMgcmVtb3RlIGxvZ2dpbmcgYW5kIGxvZ3MgcmVhZGluZyBmcm9tIHRoZSBnYXRld2F5IiwiYmFja3VwLWNvdW50IjoiSWYgYmFja3VwIGNvdW50IGlzID4gMCwgd2hlbiBhIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXAgY291bnQgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQiLHN0b3JhZ2U6IlByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gZm9yIHNhdmluZyBpbmNvbWluZyBkYXRhIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBwbGF0Zm9ybSIsIm1heC1maWxlLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBmaWxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiJNYXhpbXVtIGNvdW50IG9mIHJlY29yZHMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiBvbmUgZmlsZSIsInJlYWQtcmVjb3JkLWNvdW50IjoiQ291bnQgb2YgbWVzc2FnZXMgdG8gZ2V0IGZyb20gc3RvcmFnZSBhbmQgc2VuZCB0byBUaGluZ3NCb2FyZCIsIm1heC1yZWNvcmRzLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBkYXRhIGluIHN0b3JhZ2UgYmVmb3JlIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJ0dGwtY2hlY2staG91ciI6IkhvdyBvZnRlbiB3aWxsIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gZGF5cyB0aGF0IHN0b3JhZ2Ugd2lsbCBzYXZlIGRhdGEiLGNvbW1hbmRzOiJDb21tYW5kcyBmb3IgY29sbGVjdGluZyBhZGRpdGlvbmFsIHN0YXRpc3RpYyIsYXR0cmlidXRlOiJTdGF0aXN0aWMgdGVsZW1ldHJ5IGtleSIsdGltZW91dDoiVGltZW91dCBmb3IgY29tbWFuZCBleGVjdXRpbmciLGNvbW1hbmQ6IlRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLCB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciB0ZWxlbWV0cnkiLCJjaGVjay1kZXZpY2UtYWN0aXZpdHkiOiJFbmFibGVzIG1vbml0b3IgdGhlIGFjdGl2aXR5IG9mIGVhY2ggY29ubmVjdGVkIGRldmljZSIsImluYWN0aXZpdHktdGltZW91dCI6IlRpbWUgYWZ0ZXIgd2hvc2UgdGhlIGdhdGV3YXkgd2lsbCBkaXNjb25uZWN0IGRldmljZSIsImluYWN0aXZpdHktcGVyaW9kIjoiUGVyaW9kaWNpdHkgb2YgZGV2aWNlIGFjdGl2aXR5IGNoZWNrIiwibWluaW1hbC1wYWNrLWRlbGF5IjoiRGVsYXkgYmV0d2VlbiBzZW5kaW5nIHBhY2tzIG9mIG1lc3NhZ2VzIChEZWNyZWFzaW5nIHRoaXMgc2V0dGluZyByZXN1bHRzIGluIGluY3JlYXNlZCBDUFUgdXNhZ2UpIixxb3M6IlF1YWxpdHkgb2YgU2VydmljZSBpbiBNUVRUIG1lc3NhZ2luZyAoMCAtIGF0IG1vc3Qgb25jZSwgMSAtIGF0IGxlYXN0IG9uY2UpIiwic2VydmVyLXBvcnQiOiJOZXR3b3JrIHBvcnQgb24gd2hpY2ggR1JQQyBzZXJ2ZXIgd2lsbCBsaXN0ZW4gZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLiIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiTWF4aW11bSB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgZm9yIGEga2VlcGFsaXZlIHBpbmcgcmVzcG9uc2UgYmVmb3JlIGNvbnNpZGVyaW5nIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYXRpb24gYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBSUEMgY2FsbC4iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4aW11bSBudW1iZXIgb2Yga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgdGhhdCB0aGUgc2VydmVyIGNhbiBzZW5kIHdpdGhvdXQgcmVjZWl2aW5nIGFueSBkYXRhIGJlZm9yZSBpdCBjb25zaWRlcnMgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGJlaW5nIHNlbnQgb3IgcmVjZWl2ZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJBbGxvdyBzZXJ2ZXIgdG8ga2VlcCB0aGUgR1JQQyBjb25uZWN0aW9uIGFsaXZlIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIFJQQyBjYWxscy4ifX0sS289eyJhZGQtZW50cnkiOiJBZGljaW9uYXIgY29uZmlndXJhw6fDo28iLCJjb25uZWN0b3ItYWRkIjoiQWRpY2lvbmFyIG5vdm8gY29uZWN0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkhhYmlsaXRhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tZSBkbyBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTyBub21lIGRvIGNvbmVjdG9yIMOpIG9icmlnYXTDs3Jpby4iLCJjb25uZWN0b3ItdHlwZSI6IlRpcG8gZGUgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6Ik8gdGlwbyBkZSBjb25lY3RvciDDqSBvYnJpZ2F0w7NyaW8uIixjb25uZWN0b3JzOiJDb25maWd1cmHDp8OjbyBkZSBjb25lY3RvcmVzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JpYXIgdW0gbm92byBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJUZW0gY2VydGV6YSBkZSBxdWUgZGVzZWphIGNyaWFyIHVtIG5vdm8gZ2F0ZXdheSBjb20gbyBub21lOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiRXhjbHVpciBjb25maWd1cmHDp8OjbyIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGRlIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkrDoSBleGlzdGUgdW0gZGlzcG9zaXRpdm8gY29tIG8gbWVzbW8gbm9tZS4iLCJnYXRld2F5LW5hbWUiOiJOb21lIGRvIGdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJPIG5vbWUgZG8gZ2F0ZXdheSDDqSBvYnJpZ2F0w7NyaW8uIiwiZ2F0ZXdheS1zYXZlZCI6IkEgY29uZmlndXJhw6fDo28gZG8gZ2F0ZXdheSBmb2kgc2FsdmEgY29ycmV0YW1lbnRlLiIsImpzb24tcGFyc2UiOiJKU09OIGludsOhbGlkby4iLCJqc29uLXJlcXVpcmVkIjoiTyBjYW1wbyBuw6NvIHBvZGUgZXN0YXIgZW0gYnJhbmNvLiIsIm5vLWNvbm5lY3RvcnMiOiJTZW0gY29uZWN0b3JlcyIsIm5vLWRhdGEiOiJTZW0gY29uZmlndXJhw6fDtWVzIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5lbmh1bSBnYXRld2F5IGVuY29udHJhZG8uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG7Do28gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJDYW1pbmhvIHBhcmEgYXJxdWl2b3MgZGUgbG9nIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiTyBjYW1pbmhvIMOpIG9icmlnYXTDs3JpbyIscmVtb3RlOiJDb25maWd1cmHDp8OjbyByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik7DrXZlbCBkZSByZWdpc3RybyBlbSBsb2ciLCJyZW1vdmUtZW50cnkiOiJSZW1vdmVyIGNvbmZpZ3VyYcOnw6NvIiwic2F2ZS10aXAiOiJTYWx2YXIgYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyIsInNlY3VyaXR5LXR5cGUiOiJUaXBvIGRlIHNlZ3VyYW7Dp2EiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkZSBBY2Vzc28iLHRsczoiVExTIn0sc3RvcmFnZToiQXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJxdWl2byIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTsO6bWVybyBtw6F4aW1vIGRlIGFycXVpdm9zIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gw6kgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik8gbsO6bWVybyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gZGUgcmVnaXN0cm9zIMOpIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTyBuw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIMOpIG9icmlnYXTDs3Jpby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIMOpIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik8gbsO6bWVybyBuw6NvIMOpIHbDoWxpZG8uIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJPIHRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1wYXRoIjoiQ2FtaW5obyBkZSBhcm1hemVuYW1lbnRvIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiTyBjYW1pbmhvIGRlIGFybWF6ZW5hbWVudG8gw6kgb2JyaWdhdMOzcmlvLiIsInN0b3JhZ2UtdHlwZSI6IlRpcG8gZGUgYXJtYXplbmFtZW50byIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQXJtYXplbmFtZW50byBkZSBhcnF1aXZvIiwibWVtb3J5LXN0b3JhZ2UiOiJBcm1hemVuYW1lbnRvIGRlIG1lbcOzcmlhIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikhvc3QgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiTyBob3N0IMOpIG9icmlnYXTDs3Jpby4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydGEgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik8gbsO6bWVybyBtw6F4aW1vIGRlIHBvcnRhcyDDqSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIGRlIHBvcnRhcyDDqSAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IkEgcG9ydGEgbsOjbyDDqSB2w6FsaWRhLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJBIHBvcnRhIMOpIG9icmlnYXTDs3JpYS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IkNvbmZpZyBUaWR5IEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmHDp8OjbyBkbyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IkNhbWluaG8gcGFyYSBjZXJ0aWZpY2FkbyBkZSBBdXRvcmlkYWRlIGRlIENlcnRpZmljYcOnw6NvIG5vIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDYW1pbmhvIHBhcmEgY2VydGlmaWNhZG8gZGUgY2xpZW50ZSBubyBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJDYW1pbmhvIHBhcmEgY2hhdmUgcHJpdmFkYSBubyBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJBbHRlcm5hciB0ZWxhIGludGVpcmEiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYcOnw6NvIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkaWNpb25hci9hdHVhbGl6YXIgY29uZmlndXJhw6fDo28gZGUgSlNPTiJ9LCRvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2lqbyIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3YgcHJpa2xqdcSNZWsiLCJjb25uZWN0b3ItZW5hYmxlZCI6Ik9tb2dvxI1pIHByaWtsanXEjWVrIiwiY29ubmVjdG9yLW5hbWUiOiJJbWUgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkltZSBwcmlrbGp1xI1rYSBqZSBvYnZlem5vLiIsImNvbm5lY3Rvci10eXBlIjoiVnJzdGEgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IlphaHRldmEgc2UgdnJzdGEgcHJpa2xqdcSNa2EuIixjb25uZWN0b3JzOiJLb25maWd1cmFjaWphIHByaWtsanXEjWtvdiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlVzdHZhcmkgbm92IHByZWhvZCIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQWxpIHN0ZSBwcmVwcmnEjWFuaSwgZGEgxb5lbGl0ZSB1c3R2YXJpdGkgbm92IHByZWhvZCB6IGltZW5vbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6Ikl6YnJpxaFpIGtvbmZpZ3VyYWNpam8iLCJkb3dubG9hZC10aXAiOiJQcmVub3Mga29uZmlndXJhY2lqc2tlIGRhdG90ZWtlIixnYXRld2F5OiJQcmVob2QiLCJnYXRld2F5LWV4aXN0cyI6Ik5hcHJhdmEgeiBpc3RpbSBpbWVub20gxb5lIG9ic3RhamEuIiwiZ2F0ZXdheS1uYW1lIjoiSW1lIHByZWhvZGEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJJbWUgcHJlaG9kYSBqZSBvYnZlem5vLiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjaWphIHByZWhvZGEgamUgdXNwZcWhbm8gc2hyYW5qZW5hLiIsImpzb24tcGFyc2UiOiJOZXZlbGphdmVuIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGplIG5lIHNtZSBiaXRpIHByYXpuby4iLCJuby1jb25uZWN0b3JzIjoiTmkgcHJpa2xqdcSNa292Iiwibm8tZGF0YSI6IkJyZXoga29uZmlndXJhY2lqIiwibm8tZ2F0ZXdheS1mb3VuZCI6IlByZWhvZCBuaSBuYWpkZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pIG1vZ2/EjWUgbmFqdGkuIiwicGF0aC1sb2dzIjoiUG90IGRvIGRuZXZuacWha2loIGRhdG90ZWsiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQb3QgamUgb2J2ZXpuYS4iLHJlbW90ZToiT2RkYWxqZW5hIGtvbmZpZ3VyYWNpamEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJhdmVuIGJlbGXFvmVuamEiLCJyZW1vdmUtZW50cnkiOiJPZHN0cmFuaSBrb25maWd1cmFjaWpvIiwic2F2ZS10aXAiOiJTaHJhbmkga29uZmlndXJhY2lqc2tvIGRhdG90ZWtvIiwic2VjdXJpdHktdHlwZSI6IlZyc3RhIHphxaHEjWl0ZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkRvc3RvcG5pIMW+ZXRvbiIsdGxzOiJUTFMifSxzdG9yYWdlOiJTaHJhbWJhIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgZGF0b3Rla2kiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik5hanZlxI1qZSDFoXRldmlsbyBkYXRvdGVrIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLFoHRldmlsa2EgamUgb2J2ZXpuYS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgcG9tbmlsbmlrdSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyB6YXBpc292IGplIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoixaB0ZXZpbGthIG5pIHZlbGphdm5hLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJaYWh0ZXZhbiBqZSBuYWp2ZcSNIHphcGlzb3YuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJOYWp2ZcSNamEgdmVsaWtvc3QgcGFrZXRhIGRvZ29ka292Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJaYWh0ZXZhbmEgamUgbmFqdmXEjWphIHZlbGlrb3N0IHBha2V0YSBkb2dvZGtvdi4iLCJzdG9yYWdlLXBhdGgiOiJQb3QgcG9tbmlsbmlrYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlphaHRldmFuYSBqZSBwb3QgZG8gcG9tbmlsbmlrYS4iLCJzdG9yYWdlLXR5cGUiOiJWcnN0YSBwb21uaWxuaWthIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJTaHJhbWJhIGRhdG90ZWsiLCJtZW1vcnktc3RvcmFnZSI6IlNwb21pbiBwb21uaWxuaWthIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikdvc3RpdGVsaiBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJQb3RyZWJlbiBqZSBnb3N0aXRlbGouIiwidGhpbmdzYm9hcmQtcG9ydCI6IlZyYXRhIFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJOYWp2ZcSNamEgxaF0ZXZpbGthIHZyYXQgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJOYWptYW5qxaFhIMWhdGV2aWxrYSB2cmF0IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiVnJhdGEgbmlzbyB2ZWxqYXZuYS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG90cmVibmEgc28gdnJhdGEuIix0aWR5OiJVcmVqZW5vIiwidGlkeS10aXAiOiJVcmVqZW5hIGtvbmZpZ3VyYWNpamEgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IktvbmZpZ3VyYWNpamEga29uZWt0b3JqYSB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBvdCBkbyBwb3RyZGlsYSBDQSBuYSBwcmVob2R1IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUG90IGRvIHBvdHJkaWxhIHN0cmFua2UgbmEgcHJlaG9kdSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUG90IGRvIHphc2VibmVnYSBrbGp1xI1hIG5hIHByZWhvZHUiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlByZWtsb3AgbmEgY2Vsb3phc2xvbnNraSBuYcSNaW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNpamEgSlNPTiAqIiwidXBkYXRlLWNvbmZpZyI6IkRvZGFqIC8gcG9zb2RvYmkga29uZmlndXJhY2lqbyBKU09OIn0sWW89eyJhZGQtZW50cnkiOiJZYXDEsWxhbmTEsXJtYSBla2xlIiwiY29ubmVjdG9yLWFkZCI6IlllbmkgYmHEn2xhecSxY8SxIGVrbGUiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkJhxJ9sYXnEsWPEsXnEsSBldGtpbmxlxZ90aXIiLCJjb25uZWN0b3ItbmFtZSI6IkJhxJ9sYXnEsWPEsSBhZMSxIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJCYcSfbGF5xLFjxLEgYWTEsSBnZXJla2xpLiIsImNvbm5lY3Rvci10eXBlIjoiQmHEn2xhecSxY8SxIHRpcGkiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkJhxJ9sYXnEsWPEsSB0w7xyw7wgZ2VyZWtsaS4iLGNvbm5lY3RvcnM6IkJhxJ9sYXnEsWPEsWxhcsSxbiB5YXDEsWxhbmTEsXJtYXPEsSIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVyIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiIne3tnYXRld2F5TmFtZX19JyBhZMSxbmRhIHllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo/IixkZWxldGU6IllhcMSxbGFuZMSxcm1hecSxIHNpbCIsImRvd25sb2FkLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGluZGlyaW4iLGdhdGV3YXk6IkHEnyBnZcOnaWRpIiwiZ2F0ZXdheS1leGlzdHMiOiJBeW7EsSBhZGEgc2FoaXAgY2loYXogemF0ZW4gdmFyLiIsImdhdGV3YXktbmFtZSI6IkHEnyBnZcOnaWRpIGFkxLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJBxJ8gZ2XDp2lkaSBhZMSxIGdlcmVrbGkuIiwiZ2F0ZXdheS1zYXZlZCI6IkHEnyBnZcOnaWRpIHlhcMSxbGFuZMSxcm1hc8SxIGJhxZ9hcsSxeWxhIGtheWRlZGlsZGkuIiwianNvbi1wYXJzZSI6Ikdlw6dlcmxpIGJpciBKU09OIGRlxJ9pbC4iLCJqc29uLXJlcXVpcmVkIjoiQWxhbiBib8WfIG9sYW1hei4iLCJuby1jb25uZWN0b3JzIjoiQmHEn2xhecSxY8SxIHlvayIsIm5vLWRhdGEiOiJZYXDEsWxhbmTEsXJtYSB5b2siLCJuby1nYXRld2F5LWZvdW5kIjoiQcSfIGdlw6dpZGkgYnVsdW5hbWFkxLEuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIGJ1bHVuYW1hZMSxLiIsInBhdGgtbG9ncyI6IkxvZyBkb3N5YWxhcsSxIHlvbHUiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJMb2cgZG9zeWFsYXLEsSBkaXppbmkgZ2VyZWtsaS4iLHJlbW90ZToiVXpha3RhbiB5YXDEsWxhbmTEsXJtYSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nbGFtYSBzZXZpeWVzaSIsInJlbW92ZS1lbnRyeSI6IllhcMSxbGFuZMSxcm1hecSxIGthbGTEsXIiLCJzYXZlLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGtheWRldCIsInNlY3VyaXR5LXR5cGUiOiJHw7x2ZW5saWsgdMO8csO8Iiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiQWNjZXNzIFRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IkRlcG9sYW1hIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiRG9zeWFkYWtpIG1ha3NpbXVtIGthecSxdCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc2ltdW0gZG9zeWEgc2F5xLFzxLEiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIHNhecSxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJTYXnEsSBnZcOnZXJsaSBkZcSfaWwuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJTYXnEsSBnZXJla2xpLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJEZXBvZGFraSBtYWtzaW11bSBrYXnEsXQiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0ga2F5xLF0IHNhecSxc8SxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlNhecSxIGdlw6dlcmxpIGRlxJ9pbC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWFrc2ltdW0ga2F5xLF0IGdlcmVrbGkuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYWtzaW11bSBldGtpbmxpayBwYWtldGkgYm95dXR1Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW11bSBzYXnEsSAxJ2Rpci4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiU2F5xLEgZ2XDp2VybGkgZGXEn2lsLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrc2ltdW0gZXRraW5saWsgcGFrZXRpIGJveXV0dSBnZXJla2xpLiIsInN0b3JhZ2UtcGF0aCI6IkRlcG9sYW1hIHlvbHUiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJEZXBvbGFtYSB5b2x1IGdlcmVrbGkuIiwic3RvcmFnZS10eXBlIjoiRGVwb2xhbWEgdMO8csO8Iiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJEb3N5YSBkZXBvbGFtYSIsIm1lbW9yeS1zdG9yYWdlIjoiQmVsbGVrIGRlcG9sYW1hIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJkIGhvc3QiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiSG9zdCBnZXJla2xpLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzaW11bSBwb3J0IG51bWFyYXPEsSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltdW0gcG9ydCBudW1hcmFzxLEgMSdkaXIuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBnZcOnZXJsaSBkZcSfaWwuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgZ2VyZWtsaS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IlRpZHkgY29uZmlnIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25uZWN0b3Ige3t0eXBlTmFtZX19IGNvbmZpZ3VyYXRpb24iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgb24gZ2F0ZXdheSIsInRvZ2dsZS1mdWxsc2NyZWVuIjoiVG9nZ2xlIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWRkL3VwZGF0ZSBjb25maWd1cmF0aW9uIEpTT04ifSxRbz17ImFkZC1lbnRyeSI6Iua3u+WKoOmFjee9riIsYWR2YW5jZWQ6IumrmOe6pyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IuajgOafpeiuvuWkh+a0u+WKqCIsY29tbWFuZDoiRG9ja2Vy5ZG95LukIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlcuWRveS7pOW3suWkjeWItuWIsOWJqui0tOadvyIsY29uZmlndXJhdGlvbjoi6YWN572uIiwiY29ubmVjdG9yLWFkZCI6Iua3u+WKoOi/nuaOpeWZqCIsImNvbm5lY3Rvci1lbmFibGVkIjoi5ZCv55So6L+e5o6l5ZmoIiwiY29ubmVjdG9yLW5hbWUiOiLov57mjqXlmajlkI3np7AiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Iui/nuaOpeWZqOWQjeensOW/heWhq+OAgiIsImNvbm5lY3Rvci10eXBlIjoi6L+e5o6l5Zmo57G75Z6LIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiLov57mjqXlmajnsbvlnovlv4XloavjgIIiLGNvbm5lY3RvcnM6Iui/nuaOpeWZqOmFjee9riIsImNvbm5lY3RvcnMtY29uZmlnIjoi6L+e5o6l5Zmo6YWN572uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoi5bey5ZCv55SoIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi5ZCN56ewIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoi57G75Z6LIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiLnirbmgIEiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiLmk43kvZwiLCJjb25uZWN0b3JzLXRhYmxlLWtleSI6IumUriIsImNvbm5lY3RvcnMtdGFibGUtY2xhc3MiOiLnsbsiLCJycGMtY29tbWFuZC1zZW5kIjoi5Y+R6YCBIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi57uT5p6cIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLnvJbovpHlj4LmlbAiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLpgJrnlKjphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLliJvlu7rnvZHlhbMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuehruWumuimgeWIm+W7uuWQjeS4uiAne3tnYXRld2F5TmFtZX19JyDnmoTmlrDnvZHlhbPvvJ8iLCJjcmVhdGVkLXRpbWUiOiLliJvlu7rml7bpl7QiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoi6YWN572u5bCG6KKr5Yig6ZmkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiLlj6rmnInlr7nnvZHlhbPov5vooYzniannkIborr/pl67ml7bvvIzmiY3mnInlj6/og73lhbPpl63ov5znqIvphY3nva7jgILmiYDmnInlhYjliY3nmoTphY3nva7pg73lsIbooqvliKDpmaTjgII8YnI+PGJyPlxu6KaB5YWz6Zet6YWN572u77yM6K+35Zyo5LiL6Z2i6L6T5YWl572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0Ijoi572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoi572R5YWz5ZCN56ew5piv5b+F6ZyA55qEIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLlhbPpl60iLGRlbGV0ZToi5Yig6Zmk6YWN572uIiwiZG93bmxvYWQtdGlwIjoi5LiL6L296YWN572uIiwiZHJvcC1maWxlIjoi5bCG5paH5Lu25ouW5pS+5Yiw5q2k5aSE5oiWIixnYXRld2F5OiLnvZHlhbMiLCJnYXRld2F5LWV4aXN0cyI6IuWQjOWQjeiuvuWkh+W3suWtmOWcqOOAgiIsImdhdGV3YXktbmFtZSI6Iue9keWFs+WQjeensCIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Iue9keWFs+WQjeensOW/heWhq+OAgiIsImdhdGV3YXktc2F2ZWQiOiLlt7LmiJDlip/kv53lrZjnvZHlhbPphY3nva7jgIIiLGdycGM6IkdSUEMiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuS/neaMgei/nuaOpei2heaXtu+8iOavq+enku+8iSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoi6ZyA6KaB5L+d5oyB6L+e5o6l6LaF5pe2IiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi5L+d5oyB6L+e5o6l6LaF5pe25LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXBhdHRlcm4iOiLkv53mjIHov57mjqXotoXml7bml6DmlYgiLCJncnBjLWtlZXAtYWxpdmUiOiLkv53mjIHov57mjqXvvIjmr6vnp5LvvIkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLpnIDopoHkv53mjIHov57mjqUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoi5L+d5oyB6L+e5o6l5LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoi5L+d5oyB6L+e5o6l5peg5pWIIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi5pyA5bCPUGluZ+mXtOmalO+8iOavq+enku+8iSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6IumcgOimgeacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoi5pyA5bCPUGluZ+mXtOmalOS4jeiDveWwj+S6jjEiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVybiI6IuacgOWwj1Bpbmfpl7TpmpTml6DmlYgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6IuaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpTvvIjmr6vnp5LvvIkiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5LiN6IO95bCP5LqOMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5peg5pWIIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbAiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsOS4jeiDveWwj+S6jjEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6IuaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbDml6DmlYgiLCJpbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzIjoi5LiN5rS76LeD5qOA5p+l5pyf77yI56eS77yJIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IumcgOimgeS4jea0u+i3g+ajgOafpeacnyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoi5LiN5rS76LeD5qOA5p+l5pyf5LiN6IO95bCP5LqOMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+ajgOafpeacn+aXoOaViCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi5LiN5rS76LeD6LaF5pe277yI56eS77yJIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiLpnIDopoHkuI3mtLvot4PotoXml7YiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiLkuI3mtLvot4PotoXml7bkuI3og73lsI/kuo4xIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+i2heaXtuaXoOaViCIsImpzb24tcGFyc2UiOiLml6DmlYjnmoRKU09O44CCIiwianNvbi1yZXF1aXJlZCI6IuWtl+auteS4jeiDveS4uuepuuOAgiIsbG9nczp7bG9nczoi5pel5b+XIixkYXlzOiLlpKkiLGhvdXJzOiLlsI/ml7YiLG1pbnV0ZXM6IuWIhumSnyIsc2Vjb25kczoi56eSIiwiZGF0ZS1mb3JtYXQiOiLml6XmnJ/moLzlvI8iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IumcgOimgeaXpeacn+agvOW8jyIsImxvZy1mb3JtYXQiOiLml6Xlv5fmoLzlvI8iLCJsb2ctdHlwZSI6IuaXpeW/l+exu+WeiyIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiLpnIDopoHml6Xlv5fmoLzlvI8iLHJlbW90ZToi6L+c56iL5pel5b+X6K6w5b2VIiwicmVtb3RlLWxvZ3MiOiLov5znqIvml6Xlv5ciLGxvY2FsOiLmnKzlnLDml6Xlv5forrDlvZUiLGxldmVsOiLml6Xlv5fnuqfliKsiLCJmaWxlLXBhdGgiOiLmlofku7bot6/lvoQiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHmlofku7bot6/lvoQiLCJzYXZpbmctcGVyaW9kIjoi5pel5b+X5L+d5a2Y5pyf6ZmQIiwic2F2aW5nLXBlcmlvZC1taW4iOiLml6Xlv5fkv53lrZjmnJ/pmZDkuI3og73lsI/kuo4xIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IumcgOimgeaXpeW/l+S/neWtmOacn+mZkCIsImJhY2t1cC1jb3VudCI6IuWkh+S7veaVsOmHjyIsImJhY2t1cC1jb3VudC1taW4iOiLlpIfku73mlbDph4/kuI3og73lsI/kuo4xIiwiYmFja3VwLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB5aSH5Lu95pWw6YePIn0sIm1pbi1wYWNrLXNlbmQtZGVsYXkiOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/vvIjmr6vnp5LvvIkiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoi5pyA5bCP5YyF5Y+R6YCB5bu26L+f5piv5b+F6ZyA55qEIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/kuI3og73lsI/kuo4wIiwibm8tY29ubmVjdG9ycyI6IuaXoOi/nuaOpeWZqCIsIm5vLWRhdGEiOiLmsqHmnInphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw572R5YWz44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IuacquaJvuWIsCAne3tpdGVtfX0nIOOAgiIsInBhdGgtbG9ncyI6IuaXpeW/l+aWh+S7tueahOi3r+W+hCIsInBhdGgtbG9ncy1yZXF1aXJlZCI6Iui3r+W+hOaYr+W/hemcgOeahOOAgiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5L+d5oyB6L+e5o6l6K645Y+v77yM5peg6ZyA5ZON5bqUIixyZW1vdGU6Iui/nOeoi+mFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel5b+X6K6w5b2V57qn5YirIiwicmVtb3ZlLWVudHJ5Ijoi5Yig6Zmk6YWN572uIiwicmVtb3RlLXNoZWxsIjoi6L+c56iLU2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Iui/nOeoi+mFjee9riIsb3RoZXI6IuWFtuS7liIsInNhdmUtdGlwIjoi5L+d5a2Y6YWN572uIiwic2VjdXJpdHktdHlwZSI6IuWuieWFqOexu+WeiyIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Iuiuv+mXruS7pOeJjCIsInVzZXJuYW1lLXBhc3N3b3JkIjoi55So5oi35ZCN5ZKM5a+G56CBIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDorr/pl67ku6TniYwiLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyDnp4HpkqUifSwic2VydmVyLXBvcnQiOiLmnI3liqHlmajnq6/lj6MiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoi57uf6K6h5L+h5oGvIixzdGF0aXN0aWNzOiLnu5/orqHkv6Hmga8iLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLml6Dlj6/nlKjnu5/orqHkv6Hmga8iLGNvbW1hbmRzOiLlkb3ku6QiLCJzZW5kLXBlcmlvZCI6Iue7n+iuoeS/oeaBr+WPkemAgeWRqOacn++8iOenku+8iSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5piv5b+F6ZyA55qEIiwic2VuZC1wZXJpb2QtbWluIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5LiN6IO95bCP5LqONjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5peg5pWIIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u77yI56eS77yJIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u5piv5b+F6ZyA55qEIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IuajgOafpei/nuaOpeWZqOmFjee9ruS4jeiDveWwj+S6jjEiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVybiI6IuajgOafpei/nuaOpeWZqOmFjee9ruaXoOaViCIsYWRkOiLmt7vliqDlkb3ku6QiLHRpbWVvdXQ6Iui2heaXtuaXtumXtCIsInRpbWVvdXQtbXMiOiLotoXml7bml7bpl7TvvIjmr6vnp5LvvIkiLCJ0aW1lb3V0LXJlcXVpcmVkIjoi6LaF5pe25pe26Ze05piv5b+F6ZyA55qEIiwidGltZW91dC1taW4iOiLotoXml7bml7bpl7TkuI3og73lsI/kuo4xIiwidGltZW91dC1wYXR0ZXJuIjoi6LaF5pe25pe26Ze05peg5pWIIiwiYXR0cmlidXRlLW5hbWUiOiLlsZ7mgKflkI3np7AiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IuWxnuaAp+WQjeensOaYr+W/hemcgOeahCIsY29tbWFuZDoi5ZG95LukIiwiY29tbWFuZC1yZXF1aXJlZCI6IuWRveS7pOaYr+W/hemcgOeahCIsImNvbW1hbmQtcGF0dGVybiI6IuWRveS7pOaXoOaViCIscmVtb3ZlOiLliKDpmaTlkb3ku6QifSxzdG9yYWdlOiLlrZjlgqgiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiLmlofku7bkuK3nmoTmnIDlpKforrDlvZXmlbAiLCJzdG9yYWdlLW1heC1maWxlcyI6IuacgOWkp+aWh+S7tuaVsCIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLmlbDlrZfmmK/lv4XpnIDnmoTjgIIiLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoi5a2Y5YKo5Lit55qE5pyA5aSn6K6w5b2V5pWwIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6IuacgOWkp+iusOW9lemhueW/heWhq+OAgiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6IuacgOWwj+iusOW9leaVsOS4ujHjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiLmlbDlrZfkuI3lkIjms5XjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB6K+75Y+W6K6w5b2V5pWw44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTmnIDlpKfor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6IuaVsOWtl+S4jeWQiOazleOAgiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi5pyA5aSn6K+75Y+W6K6w5b2V5pWw5b+F6ZyA44CCIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoi5pWw5o2u5paH5Lu25aS56Lev5b6EIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoi6ZyA6KaB5pWw5o2u5paH5Lu25aS56Lev5b6E44CCIiwic3RvcmFnZS1wYWNrLXNpemUiOiLmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi5pyA5aSn5LqL5Lu25YyF5aSn5bCP5b+F5aGr44CCIiwic3RvcmFnZS1wYXRoIjoi5a2Y5YKo6Lev5b6EIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoi5a2Y5YKo6Lev5b6E5b+F5aGr44CCIiwic3RvcmFnZS10eXBlIjoi5a2Y5YKo57G75Z6LIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiLmlofku7blrZjlgqgiLCJtZW1vcnktc3RvcmFnZSI6IuWGheWtmOWtmOWCqCIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IuW4uOinhCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZOS4u+acuiIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiLkuLvmnLrlv4XloavjgIIiLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmTnq6/lj6MiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IuacgOWkp+err+WPo+WPt+S4ujY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/nq6/lj6Plj7fkuLox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi56uv5Y+j5peg5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Iuerr+WPo+W/heWhq+OAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6L+e5o6l5ZmoIHt7dHlwZU5hbWV9fSDphY3nva4iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6Iue9keWFs+S4ikNB6K+B5Lmm55qE6Lev5b6EIiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoi572R5YWz5LiK5a6i5oi356uv6K+B5Lmm55qE6Lev5b6EIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi5raI5oGvVFRM5qOA5p+l5bCP5pe25pWwIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi6ZyA6KaB5o+Q5L6b5raI5oGvVFRM5qOA5p+l5bCP5pe25pWw44CCIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoi5raI5oGvVFRM5aSp5pWwIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiLpnIDopoHmj5Dkvpvmtojmga9UVEzlpKnmlbDjgIIiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiLpnIDopoHmj5DkvptRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IlFvU+WAvOeahOiMg+WbtOaYr+S7jjDliLAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLnvZHlhbPkuIrnp4HpkqXnmoTot6/lvoQiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IuWIh+aNouWFqOWxjyIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoi6YWN572uSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoi5re75YqgL+abtOaWsOmFjee9rkpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvphY3nva7lkoznrqHnkIYiLCJyZW1vdGUtc2hlbGwiOiLpgJrov4fov5znqItTaGVsbOWwj+mDqOS7tuWQr+eUqOWvuee9keWFs+aTjeS9nOezu+e7n+eahOi/nOeoi+aOp+WItiIsaG9zdDoiVGhpbmdzQm9hcmQg5Li75py65ZCN5oiWSVDlnLDlnYAiLHBvcnQ6IlRoaW5nc0JvYXJkIE1RVFTmnI3liqHnq6/lj6MiLHRva2VuOiJUaGluZ3NCb2FyZCDnvZHlhbPorr/pl67ku6TniYwiLCJjbGllbnQtaWQiOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU5a6i5oi356uvSUQiLHVzZXJuYW1lOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU55So5oi35ZCNIixwYXNzd29yZDoiVGhpbmdzQm9hcmQg572R5YWzTVFUVOWvhueggSIsImNhLWNlcnQiOiJDQeivgeS5puaWh+S7tueahOi3r+W+hCIsImRhdGUtZm9ybSI6IuaXpeW/l+a2iOaBr+S4reeahOaXpeacn+agvOW8jyIsImRhdGEtZm9sZGVyIjoi5YyF5ZCr5pWw5o2u55qE5paH5Lu25aS555qE6Lev5b6E77yI55u45a+55oiW57ud5a+56Lev5b6E77yJIiwibG9nLWZvcm1hdCI6IuaXpeW/l+a2iOaBr+agvOW8jyIsInJlbW90ZS1sb2ciOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvml6Xlv5forrDlvZXlkozml6Xlv5for7vlj5YiLCJiYWNrdXAtY291bnQiOiLlpoLmnpzlpIfku73orqHmlbDlpKfkuo4w77yM5YiZ5Zyo5omn6KGM6L2u5o2i5pe277yM5pyA5aSa5L+d55WZ5aSH5Lu96K6h5pWw5Liq5paH5Lu2LeacgOaXp+eahOaWh+S7tuWwhuiiq+WIoOmZpCIsc3RvcmFnZToi5o+Q5L6b5bCG5pWw5o2u5Y+R6YCB5Yiw5bmz5Y+w5LmL5YmN5L+d5a2Y5Lyg5YWl5pWw5o2u55qE6YWN572uIiwibWF4LWZpbGUtY291bnQiOiLlsIbliJvlu7rnmoTmlofku7bnmoTmnIDlpKfmlbDph48iLCJtYXgtcmVhZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiLkuIDkuKrmlofku7bkuK3lrZjlgqjnmoTmnIDlpKforrDlvZXmlbAiLCJyZWFkLXJlY29yZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiLlnKjlsIbmlbDmja7lj5HpgIHliLBUaGluZ3NCb2FyZOS5i+WJje+8jOWtmOWCqOS4reeahOacgOWkp+aVsOaNruiuoeaVsCIsInR0bC1jaGVjay1ob3VyIjoi572R5YWz5aSa5LmF5qOA5p+l5LiA5qyh5pWw5o2u5piv5ZCm6L+H5pe2IiwidHRsLW1lc3NhZ2VzLWRheSI6IuWtmOWCqOWwhuS/neWtmOaVsOaNrueahOacgOWkp+WkqeaVsCIsY29tbWFuZHM6IueUqOS6juaUtumbhumZhOWKoOe7n+iuoeS/oeaBr+eahOWRveS7pCIsYXR0cmlidXRlOiLnu5/orqHpgaXmtYvplK4iLHRpbWVvdXQ6IuWRveS7pOaJp+ihjOeahOi2heaXtuaXtumXtCIsY29tbWFuZDoi5ZG95Luk5omn6KGM55qE57uT5p6c77yM5bCG55So5L2c6YGl5rWL55qE5YC8IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5Ijoi5ZCv55So55uR6KeG5q+P5Liq6L+e5o6l6K6+5aSH55qE5rS75YqoIiwiaW5hY3Rpdml0eS10aW1lb3V0Ijoi5Zyo5q2k5pe26Ze05ZCO77yM572R5YWz5bCG5pat5byA6K6+5aSH55qE6L+e5o6lIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLorr7lpIfmtLvliqjmo4Dmn6XnmoTlkajmnJ8iLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLlj5HpgIHmtojmga/ljIXkuYvpl7TnmoTlu7bov5/vvIjlh4/lsI/mraTorr7nva7kvJrlr7zoh7Tlop7liqBDUFXkvb/nlKjnjofvvIkiLHFvczoiTVFUVOa2iOaBr+S8oOmAkueahOacjeWKoei0qOmHj++8iDAt6Iez5aSa5LiA5qyh77yMMS3oh7PlsJHkuIDmrKHvvIkiLCJzZXJ2ZXItcG9ydCI6IkdSUEPmnI3liqHlmajkvqblkKzkvKDlhaXov57mjqXnmoTnvZHnu5znq6/lj6MiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuWcqOiAg+iZkei/nuaOpeatu+S6oeS5i+WJje+8jOacjeWKoeWZqOetieW+hWtlZXBhbGl2ZSBwaW5n5ZON5bqU55qE5pyA6ZW/5pe26Ze0IiwiZ3JwYy1rZWVwLWFsaXZlIjoi5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25Lik5Liq6L+e57uta2VlcGFsaXZlIHBpbmfmtojmga/kuYvpl7TnmoTmjIHnu63ml7bpl7QiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6IuWcqOayoeacieaOpeaUtuWIsOS7u+S9leaVsOaNruS5i+WJje+8jOacjeWKoeWZqOWPr+S7peWPkemAgeeahGtlZXBhbGl2ZSBwaW5n5raI5oGv55qE5pyA5aSn5pWw6YeP77yM54S25ZCO5bCG6L+e5o6l6KeG5Li65q275LqhIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiLlnKjmsqHmnInlj5HpgIHmiJbmjqXmlLbmlbDmja7ml7bvvIzmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5YWB6K645pyN5Yqh5Zmo5Zyo5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25L+d5oyBR1JQQ+i/nuaOpea0u+WKqCJ9LCJkb2NrZXItbGFiZWwiOiLkvb/nlKjku6XkuIvmjIfku6TlnKggRG9ja2VyIGNvbXBvc2Ug5Lit6L+Q6KGMIElvVCDnvZHlhbPvvIzlubbkuLrpgInlrprnmoTorr7lpIfmj5Dkvpvlh63mja4iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi5L2/55So5Lul5LiL6K+05piO5LiL6L2944CB5a6J6KOF5ZKM6K6+572uIERvY2tlciBDb21wb3NlIiwiZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlIjoi5LiL6L296YWN572u5paH5Lu2IiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLkuIvovb3mgqjnmoTnvZHlhbPnmoQgZG9ja2VyLWNvbXBvc2UueW1sIOaWh+S7tiIsImxhdW5jaC1nYXRld2F5Ijoi5ZCv5Yqo572R5YWzIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoi5Zyo5YyF5ZCrIGRvY2tlci1jb21wb3NlLnltbCDmlofku7bnmoTmlofku7blpLnkuK3vvIzkvb/nlKjku6XkuIvlkb3ku6TlnKjnu4jnq6/kuK3lkK/liqjnvZHlhbMifSxKbz17ImFkZC1lbnRyeSI6IuWinuWKoOmFjee9riIsImNvbm5lY3Rvci1hZGQiOiLlop7liqDmlrDpgKPmjqXlmagiLCJjb25uZWN0b3ItZW5hYmxlZCI6IuWVn+eUqOmAo+aOpeWZqCIsImNvbm5lY3Rvci1uYW1lIjoi6YCj5o6l5Zmo5ZCN56ixIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiLpnIDopoHpgKPmjqXlmajlkI3nqLHjgIIiLCJjb25uZWN0b3ItdHlwZSI6IumAo+aOpeWZqOmhnuWeiyIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoi6ZyA6KaB6YCj5o6l5Zmo6aGe5Z6L44CCIixjb25uZWN0b3JzOiLpgKPmjqXlmajphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLlu7rnq4vmlrDplpjpgZMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuaCqOeiuuWumuimgeW7uueri+S4gOWAi+WQjeeoseeCuu+8mid7e2dhdGV3YXlOYW1lfX0n55qE5paw6ZaY6YGT5ZeO77yfIixkZWxldGU6IuWIqumZpOmFjee9riIsImRvd25sb2FkLXRpcCI6IuS4i+i8iemFjee9ruaWh+S7tiIsZ2F0ZXdheToi6ZaY6YGTIiwiZ2F0ZXdheS1leGlzdHMiOiLlkIzlkI3oqK3lgpnlt7LlrZjlnKjjgIIiLCJnYXRld2F5LW5hbWUiOiLplpjpgZPlkI3nqLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiLpnIDopoHplpjpgZPlkI3nqLHjgIIiLCJnYXRld2F5LXNhdmVkIjoi6ZaY6YGT6YWN572u5bey5oiQ5Yqf5L+d5a2Y44CCIiwianNvbi1wYXJzZSI6IueEoeaViOeahEpTT04iLCJqc29uLXJlcXVpcmVkIjoi5qyE5L2N5LiN6IO954K656m644CCIiwibm8tY29ubmVjdG9ycyI6IueEoemAo+aOpeWZqCIsIm5vLWRhdGEiOiLnhKHphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw6ZaY6YGT44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiDmnKrmib7liLAne3tpdGVtfX0n44CCIiwicGF0aC1sb2dzIjoi5pel6KqM5paH5Lu255qE6Lev5b6RIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi6ZyA6KaB6Lev5b6R44CCIixyZW1vdGU6Iuenu+mZpOmFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel6KqM6KiY6YyE57Sa5YilIiwicmVtb3ZlLWVudHJ5Ijoi56e76Zmk6YWN572uIiwic2F2ZS10aXAiOiLkv53lrZjphY3nva7mlofku7YiLCJzZWN1cml0eS10eXBlIjoi5a6J5YWo6aGe5Z6LIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoi6Kiq5ZWPVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToi6LKv5a2YIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi5paH5Lu25Lit55qE5pyA5aSn57SA6YyEIiwic3RvcmFnZS1tYXgtZmlsZXMiOiLmnIDlpKfmlofku7bmlbgiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiLmnIDlsI/mlbjph4/ngrox44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoi6ZyA6KaB6Jmf56K844CCIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6IuWtmOWEsuS4reeahOacgOWkp+e0gOmMhCIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoi5pyA5bCP57SA6YyE5pW454K6MeOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfntIDpjITmlbgiLCJzdG9yYWdlLXBhY2stc2l6ZSI6IuacgOWkp+S6i+S7tuWMheWkp+WwjyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6IuacgOWwj+aVuOmHj+eCujHjgIIiLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoi6Jmf56K854Sh5pWI77yOIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhdGgiOiLlrZjlhLLot6/lvpEiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHlrZjlhLLot6/lvpHjgIIiLCJzdG9yYWdlLXR5cGUiOiLlrZjlhLLpoZ7lnosiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IuaWh+S7tuWtmOWEsiIsIm1lbW9yeS1zdG9yYWdlIjoi6KiY5oa26auU5a2Y5YSyIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJk5Li75qmfIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IumcgOimgeS4u+apn+OAgiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZOmAo+aOpeWfoCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4Ijoi5pyA5aSn5Z+g6Jmf54K6IDY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/ln6DomZ/ngrox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi6YCj5o6l5Z+g54Sh5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IumcgOimgemAo+aOpeWfoOOAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6YCj5o6l5Zmoe3t0eXBlTmFtZX196YWN572uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiLplpjpgZPkuIpDQeitieabuOeahOi3r+W+kSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IumWmOmBk+S4iueUqOaItuerr+aGkeaTmueahOi3r+W+kSIsInRscy1wYXRoLXByaXZhdGUta2V5Ijoi6ZaY6YGT5LiK55qE56eB6ZGw6Lev5b6RIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLliIfmj5vlhajonqLluZUiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IumFjee9rkpTT04qIiwidXBkYXRlLWNvbmZpZyI6IuWinuWKoC/mm7TmlrDphY3nva5KU09OIn07Y29uc3QgWG89W2NhLHBhLEZhLERhLEFhLE5hLFBhLGVvLEVvLGlvLGFvLG9vLHFvLHRvLEdvLG5vXTtjbGFzcyBab3tjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lLGZ1bmN0aW9uKGUpe2Uuc2V0VHJhbnNsYXRpb24oImVuX1VTIixPbywhMCksZS5zZXRUcmFuc2xhdGlvbigiYXJfQUUiLFJvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJjYV9FUyIsVm8sITApLGUuc2V0VHJhbnNsYXRpb24oImNzX0NaIixCbywhMCksZS5zZXRUcmFuc2xhdGlvbigiZGFfREsiLFVvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJlc19FUyIsX28sITApLGUuc2V0VHJhbnNsYXRpb24oImtvX0tSIixIbywhMCksZS5zZXRUcmFuc2xhdGlvbigibHRfTFQiLHpvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJubF9CRSIsV28sITApLGUuc2V0VHJhbnNsYXRpb24oInBsX1BMIixqbywhMCksZS5zZXRUcmFuc2xhdGlvbigicHRfQlIiLEtvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJzbF9TSSIsJG8sITApLGUuc2V0VHJhbnNsYXRpb24oInRyX1RSIixZbywhMCksZS5zZXRUcmFuc2xhdGlvbigiemhfQ04iLFFvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJ6aF9UVyIsSm8sITApfShlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5OZ01vZHVsZX0pfXN0YXRpY3t0aGlzLsm1bW9kPXQuybXJtW5nRGVjbGFyZU5nTW9kdWxlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlY2xhcmF0aW9uczpbY2EscGEsRmEsRGEsQWEsTmEsUGEsZW8sRW8saW8sYW8sb28scW8sdG8sR28sbm9dLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOltjYSxwYSxGYSxEYSxBYSxOYSxQYSxlbyxFbyxpbyxhbyxvbyxxbyx0byxHbyxub119KX1zdGF0aWN7dGhpcy7JtWluaj10Lsm1ybVuZ0RlY2xhcmVJbmplY3Rvcih7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpabyxwcm92aWRlcnM6W3ZhXSxpbXBvcnRzOltILEQsUSxNYSxFYSxxYSxJYSxMbyxrbyxGbyxwbyxBbyxObyxnbyxEbyxQb119KX19ZSgiR2F0ZXdheUV4dGVuc2lvbk1vZHVsZSIsWm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Wm8sZGVjb3JhdG9yczpbe3R5cGU6dSxhcmdzOlt7ZGVjbGFyYXRpb25zOlhvLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOlhvLHByb3ZpZGVyczpbdmFdfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSl9fX0pKTsvLyMgc291cmNlTWFwcGluZ1VSTD1nYXRld2F5LW1hbmFnZW1lbnQtZXh0ZW5zaW9uLmpzLm1hcAo=", - "public": false - }, - { - "link": "/api/images/system/gateway_custom_statistics_system_widget_image.png", - "title": "\"Gateway custom statistics\" system widget image", - "type": "IMAGE", - "subType": "IMAGE", - "fileName": "gateway_custom_statistics_system_widget_image.png", - "publicResourceKey": "suDX4BE4lU6vbUeMR3B5vhESpkpNdB0N", - "mediaType": "image/png", - "data": "iVBORw0KGgoAAAANSUhEUgAAAMYAAACfCAYAAACiGqZiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABQaSURBVHgB7Z1pjJVVmsdPiYVgFaaKUajSAZtFHUpjYQuOTSEtLrjMqBFH/dKuX9RuNTrTZoKmI90TdSbTk7gMLX5wQY2Je1wmIjiDg4BG2aPQKlUkoFL4gSKRCrWw9Pk98Nx+63Kq7q2FpYr/j1zuu5z3nPOe8/zPec6t+z63ZG8kCCE6cEwQQhyAhCFEAglDiAQShhAJJAwhEkgYQiSQMIRIcGwxidrad4f23XuC/uIh+jMlJSGUDhoUBpcWng8KCgNRtO3aE4To7zCwt+3abduFxFFQOswUQgwk2nfvLpimoDDkPomBRjE2rcW3EAmKWnx3RVNTU/h02VLbrqisDGN+Nia0tLaEMWPGdki3cWNDqK4+OezcudMWQRUVlR3Or1+/LkyYUBNWrVwRzvn5uUGIw0mvhbF9e1MYMmRIuOjiS8KWLT+E9evWhZaWFjN8FwznVq1cGbaPaTLxDBkyNDQ0rAiNW7ZEsVSHqiiYlStWmJgQmosNEf3DP15l+QtxKOm1MDDmlmjA//e/H4XK4cNtH7FURgFUVFTE7e0mmJ/FmWTM2LGhob4hptt3LecRBeLghQBIv7GhwWaNysqKKLKdEoY45PR6jYELVBEtfUrdVDNoh23EMWbMGBNOPpz7+bmT4gzz1QHnhg4dYoJo2tYUZ42WIMShptfCYF3AjLBs6ZLoMl0cqk+uNleI2WFndKl4IRz2EQvn980mldF9Wh4m1NRYPrhYuGDsT6g50/LYty6pDkIcakoKPcG3Y2d7EGKgUT60tMvz+rhWiAS9XnwLcbjYHt3tfHDJ+wIJQ/RbVq5aaZ+GOvxZ4KKLLg59gVwp0W9BBIjBtvtQFHBQFt8LPpwfxo8fHzZs2GDvZWXlYc2a1XauvLzcPtrtC5bGT8Ia6uvDjBmXhZFVVd26dseOHfZJWpZx48aHcbG+WbY2NubqXhXLOLt2YigGrtu6tbHo9KLn8Oll/jctCnFYFt9bt26Nhtece2+MBrJ27ZpovNXRyNaYcFI88Nt/DsXy9ltvxI9/601kTz89J6zdb7yFwMhfenGebVOf5ubmsHDhh7ZdPqz8gPTU3c9Td8othrI4APASB5/uiqIY+mSNMfvh38X/S+JsUBZ++8C/JtOMHFkVamtr40i6JZSUlJiBMUIzonL9lCl1NsIyinMcYyfP8ePHhl/ddGs05hfMiBvjSPxALKOxcWsc3cfFtOPCXb/+jc1EjNIvvTTPtjl+9tkTw+9n/y6MjfmR9+zZ/xYWLvjQtuvq6qw+IewN9fUb9m+HDuXcdddvOtSd1wP/cn+4duY/WT0XxLyam3dYurfi/dx1192B6XdurPulcRarjzMm9+LtU1U1MtwZ0+ZfS/3EkUWvZwxckptuviUa569Dc9zG6FIsW7Yk/PE//yO8/PKL0WBrTRDLli0148GQZ1x2uRkgMwBGwzt5Ll2y1PL99NNl4dprr7OydjTvK3NtHMExujWrV5u7hkHiVl0787poqG9ZubhYiBWR1Ee3C4NlO2WMzCbMchgvebz99pud3vfLUYAI8k4TxZtR2BdYvcmjdr/7hMBw99if/fs/mEhoH7/2VzfdYteKI49ezxgYLa7JlClTTSSdwXmMmVF97tw54eE4er/UOM9crBkzLu+QFuNhNCWtr0cenv2HOMu8aaM7Iz8ujs9OT/9pjo3ClI+7E/8zgQCC6Q6IE6rie1f3syMa/YIPP7RtDP/sOJv81x/nW3nMAhtiPfe1T3POpbp0f52y1zJTiiOPPpkxGPFrJ9Z2OluAGXo8/9Z+FwowqIUL5ptR5dLF/HzEnXHZZdHQysw9QXw+2q9Zu8ZEgjvmIuK77MxCuHMz42iPK5WiPBquXZMweuq1du1qE9+CWK+/jvz76v70n/473ue+Y2PHjouirbMXdaQNRoyosvfs2mJkdJ/W2kzUGGfMf7dys9eWax1yRDJodqSrBIWe9x4+fLi5DLgp06dfFAYPHmzHcGHodHuPxrh582ZLM2rUqeamwODSwXbtpMnn2X55NDAM6MKYD9+VYvSvqTkzjBo92vJZtnSpfTJ04YXTbSb5LuZJmrq4PWnyZDNkjn3xxRdmwBgo9eH6krDPrWIbd4m68W1gjrPNcdKSx8eLFsVyqk2InN+2rcnqPnny3+dGfb7TRTrqWTd1au6+x0dxZfN1cS2Pdaqru8DKyV47+bzz7FpxaBlcOqjL84ftu1K4SSyw8bXdfRHiUFHo49rDJ4w4M5jbUSZXQhx6jlhhCHE40bdrhegBEoYQCQr+HaNVUQjFAKTQyragMHbtVsQ1MfBoad8ThnQRprNEP04pxIFojSFEAglDiAQShhAJJAwhEkgYQiSQMIRIUNSDSnviJ7rt7YV/hUaIIxkeqS499hh7L5i20N8xdu/eE/8Yslu/rCQGDEOPOzYMOqZrcRR0pVrb9WutYmDR1t4Hv8G3R6oQA4zdewrbtBbfQiSQMIRIIGEIkUDCECKBhCFEAglDiAQShhAJ+kQYbW1t9sP3hKLsKt7roaJp2zYLFi1ET+kTYfz/okVh+N8Mt/CTny5dakI5nFC+xbMVoof0Otr5tjg6W4za/WE2iSHbHg2TEJz82hFxWfld77+rqQn/8/57YXjlcItCOGLkSPsy146fdoRfTp8eln/xuV3f3t4eyo4vs/dtTdvCpEmTLQYt54eVDwutba0Wt5bo5pRL/NeRI0Za/ss//zy072oPra2tFkdWiJ7S6xkDEZSVl+X2CWiMIf95/Xoz+F/U1VkQZUAk7P9iyr4o37xXDq/MRR6fMKEm/PLC6aFpe5OlQxSIyIMt/+2oUeaqefpRo0Zb+s3fbTaBIibyHKcfYhG9pNfCKI1Gmw2pz0xh+5kvL+6N/zpzrzD6tva23HYKW8OsX2fpjht8XIdrO9altMt8hCiWXgsDl6WtrT1s3rTJRMGvHCGWkdFV+nNckHNsVxzJe2OsTdGlsuv37nPdUphbta3JFt7URYje0CdBnRnRv9u8yd5xY0r3i6ChfkOHY7hFrEVscRxnFdwuDBmj37F/f3An6Tyvsv3rGa7z9Jtj2bhVpOVHXzhvaxutM0QnKNq5EAkU7VyIHiBhCJFAwhAigYQhRAIJQ4gEEoYQCSQMIRJIGEIkkDCESFDwa+eN21uDEAONqpKSUD6kc/PXb/AJkUCulBAJJAwhEkgYQiSQMIRIIGEIkUDCECKBhCFEAglDiAQShhAJJAwhEkgYQiSQMIRIIGEIkUDCECKBhCFEgm79PsaqVatCY2Njh2MTJ04MGzZsCBdccEE4UiEQdH/7vYwtW7aE1atXW7sSsBo++eQT2z7nnHOCOLh0a8Yg8DLCeOqpp6zT2LYff+mDnxd78MEHreP7mldffTU88cQT4Ycffgj9Cdr2scceC6+//rrt08YPPfRQeOGFF4I4+HRrxmD04vXBBx+EK664wmYLjBmRVFVVheeffz40NzeHn376KYwfP95mkuuvv95e9957r/2ATF1dnW0jBNLyACHnyYP0jIieT21traW94YYbLD/SXH755WHJkiVWNnn4Oa595JFHwmmnnZarL6KAk08+Obz22muWlu3+AvdCW992223WzrSxk9+ejz76qO3T9k8++aTd75o1a2yfduH6N954w9p31qxZ9o7QHK5fvHixpYH8tjza6PUaw2cRYPZ49tlnrdExwnvuuceMmc7l2OOPP277/rr11lstHR2AcWMAbCO6u+++O8yfP9/y5nX77bebgOh8Oj17DoFwLjuaIgrcpxkzZthPnd1yyy12XX+aORg0EAMurA9G4DOrtyfnaQ/aE5HQJxi479Mvp59+uvUH7cw5XrT1c889l5vxaT9EQ1u6QI5WDsri231i3l04vOg8Zhw6mxGKfUY3Tw/41rgP/vNkqTxT5dHhWZeOci699NLcvoujP601uB8GC9qDbZ8xaEv2vT25fwzc25NZwvd5p00ZFBARIvG8mXWzZfEiTf65o5FD8qkUjUxj04HffvutvTPKe+PjBlVXV9vIt2H/zxDTucWuXXC9eE2dOjV3LOUyIY4hQ4aE/gSjOsbKKO5k2xOjHzZsWK49Oc6gwj6DBWl8YPL0ngdthuj8HMc4r/gYwabrbhOn8r2xAW2bd/ajIds7RAO349lj7Ed3wM51te/X+Ct7PIoql96PxRHT0rGfIn4itTe6VXv7G6n29LaGYtszte95xFnEtqOLlutPb0vKP5rp9+Fzpk2bZovGrmhpael3M8XBhpmBT72YYXDHcNnEX1FcKSES6C/fQiSQMIRIIGEIkUDCECKBhCFEAglDiAQFv0S4a9euIMRA49hjuzb9gsLYvn17EGKgceKJJ3Z5Xn/gEyKB1hhCJJAwhEggYQiRQMIQIoGEIUQCCUOIBBKGEAkGzY5054Lly5db+JqdO3fac9W8L1q0KHz11VfhpJNOCkOHDrXtjz/+uMs0qTxhxIgR9l5fX2/HRo8eHUpLSzukX7BgQYe8vv/+e3vwn3J4rjub3tPyF/xs3jzB5vvF3FuqHuTT1NRkARYK3WNPoD7k19DQkAviQLSQr7/+utO2Tt1Ptl1FcXRrxvjyyy+tIwg6QAgXjOvdd98Nxx9/vHUKD9YTnoZjpKFj6NRsmhdffLFDni4A0pOODqaM9957L4wbNy4pIv4aP2nSpPDMM89Yesrl8UzKXrFiRS4tdeSxVtJ63u+8805YuHChleFwvKt7Q2xc42lh7ty5VkfuDzhPBA7KIsBbX0CeY8eOtRftwD4CoR3ff//9ZFtn29Xvx+9dFE+3hHHKKaeEq6++Ojcy8Rw1I+aZZ55pBkEoTDrwzjvvtDRu1DfeeGM499xzLX2+odO5XE96hIBBYpgYA51LnlnofE8PlE9sKqKM0PnZZ7vJz+NKUS6va665xurqUAYGl7030pGPl0V6jMxFCNwj5xyuxQjz69AbEDXlco/kycvbw9syv62z7cRxXty/RwcRxdGtSIQ0MOCenHXWWbn9ztKwjYEDHcwLA0YMzBJ0Gp2fD4bgxoshYnBc63lljYBtysGdwhgQoePiIZBYVgxZEA8vh3qzT56ImdE2K6ybb745dAblM3JnBdNTENhVV11l9+DB4xAvIqb9vI5e52xbi97T7cU3nYDhejAzN1I60rcxjnXr1tkoCrgpGAsBz3B16Gyu5xgd6tO8vzMa0vE+C7FNesSYHTV9dGYfATF6puqLQWVjThV7b8w2XIfBFQrtycxDOu7RR/ne4OslyuW+yZ+ZFOFTBm0M+W3t0C5Z96kv1jxHE91afNM5GCCG5j46HfDZZ5/ZuVNPPdU6E9+fxeo333xjnUPwNGYIFo0cP+OMM3IjMOk/+uij8OOPP9qISwezUCZP0iMKT89XhXnh2zNqUh7n58yZE0444QQ7hkFSBmA05E1AMurrLoenQ5i+xiHf/Htjwcr1xICdOXOmHaOs888/37bdp6cOXEO0P/IlJM306dNDb3nllVes7RhYrrzyytw9UWfuhQV4fluTljoQPI374l43bdqUC+8piqNb367F7ckfhXydkf1UJDtaehqPGZsaecnXQ/W7f56fZ5auygN3MTqrr7tvXpbvd3ZvWZeR+/By8/Ppqs49BREgVi8jvx3z29pn7my/ZNtVFIe+di5EAv2BT4gEEoYQCSQMIRJIGEIkkDCESCBhCJFAwhAiQcHvSvXFTxULcaSR+i3HLIpEKEQC/eVbiARaYwiRQMIQIoGEIUQCCUOIBBKGEAkkDCESSBhCJOhWlBAgYMDGjRst2gfPZ/NIKs9g85inR7XgoX0e0K+oqLA0PF7paQgukB9Fw/MkmIAHIvBgY1yffbSUvHi2OptXtjyu9+Bk2brV1NRY7CmuJ29iQOUHSMi/N56nznLHHXd02Pf8Scufg7q6x57g9+XtQiQUnkHvqq2zQQ9S7SqKo9sB1wh2hoHw7DGxigjnQjQPOgrD4BllOoM0HheJh/KJuEH8J8LRdJanP8jvoiAiRn6IHs5hEJ4Xhk7+RM4gLUbicJxABYS8oZ6kxZAIYuDPTnOM7dS9sc2Le/N6ZAO1kSf368cRA2Xl32NPoD7ejh7xkAEB47/kkktMIKm2TrUrbaaAa92jWzMGYVx4gQcB492DenmoG4/T5PseBmfx4sUHjKQYoBsdD/27MDg2b948M4Js3CfSk1824MGsWbNydfLZAjykjAeC44VAs1H7uIZtRvn8e3MQ0+TJk3NRErkH8qAsH6GZjSiH430Rqob7YhYA8kME999/v+2z7SGG8ts61a4ecE1xp4qnR2sMAoBljTNFflA2jK21tdW2GZEJcdnZyEraadOm2UjNKImxkT4/TGZ+eZAfWI20uETMKCkQddalyr83DA7heJhMZiqfpVzkXh+MOT+qSE8hb8plcEAIWfeQsrOuUVcB8ETP6FHANTopG3ANY/BR2dPgw3sa9t398QiEBEfz9YMblgdS4xg+u4ehxFBJT34+S4EHJfOgY9kohA6i4LpiQtrk3xsgxnz/3EPkeABoymdWAe4J4ffWdeG+77vvvlzYUNY9tA8DhbuNXudsWzvZdvX8RPF0K+AafitRxfnGrQdPJhgaxsM+nUOAMAKX0Vkcw4jpFNYfq1evNiPPTvl0IOdIS2A0ApVhCMwmHGM0zxo1QdCIKo5RkhfnCILGtQRGwyipE/jClK/OkxeuGunyA64RIHnQoEEH3BsixJd3wXENQqOOXMuLwHDXXXedBWwjEjn1onx3y3oD9SdPbxNmD2YlgqtRR9ouv61x9egD6ubtSkC2zkKUijT6dq0QCfR3DCESSBhCJJAwhEggYQiRQMIQIoGEIUQCCUOIBBKGEAkkDCESSBhCJJAwhEggYQiRQMIQIsFfACqLpuwst386AAAAAElFTkSuQmCC", - "public": true - } ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_general_chart_statistics.json b/application/src/main/data/json/system/widget_types/gateway_general_chart_statistics.json index a5ad8b9a70..1c89f7ae77 100644 --- a/application/src/main/data/json/system/widget_types/gateway_general_chart_statistics.json +++ b/application/src/main/data/json/system/widget_types/gateway_general_chart_statistics.json @@ -43,28 +43,5 @@ "ocpp", "ble", "bluetooth" - ], - "resources": [ - { - "link": "/api/resource/js_module/system/gateway-management-extension.js", - "title": "gateway-management-extension.js", - "type": "JS_MODULE", - "resourceKey": "gateway-management-extension.js", - "fileName": "gateway-management-extension.js", - "mediaType": "application/javascript", - "data": "U3lzdGVtLnJlZ2lzdGVyKFsiQGFuZ3VsYXIvY29yZSIsIkBhbmd1bGFyL21hdGVyaWFsL3NvcnQiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZSIsIkBhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvciIsIkBzaGFyZWQvcHVibGljLWFwaSIsIkBhbmd1bGFyL2NvbW1vbiIsIkBhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXIiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJzIiwiQGFuZ3VsYXIvZmxleC1sYXlvdXQvZmxleCIsIkBhbmd1bGFyL2ZsZXgtbGF5b3V0L2V4dGVuZGVkIiwiQG5neC10cmFuc2xhdGUvY29yZSIsIkBjb3JlL3B1YmxpYy1hcGkiLCJAYW5ndWxhci9mb3JtcyIsIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2NhcmQiLCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCIsIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQiLCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QiLCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlIiwicnhqcyIsInJ4anMvb3BlcmF0b3JzIiwidHNsaWIiLCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwIiwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbiIsIkBzaGFyZWQvZGlyZWN0aXZlcy90cnVuY2F0ZS13aXRoLXRvb2x0aXAuZGlyZWN0aXZlIiwiQHNoYXJlZC9jb21wb25lbnRzL2RpYWxvZy9qc29uLW9iamVjdC1lZGl0LWRpYWxvZy5jb21wb25lbnQiLCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2ciLCJAc2hhcmVkL2NvbXBvbmVudHMvZGlyZWN0aXZlcy90Yi1qc29uLXRvLXN0cmluZy5kaXJlY3RpdmUiLCJAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUiLCJAc2hhcmVkL2NvbXBvbmVudHMvYnV0dG9uL3RvZ2dsZS1wYXNzd29yZC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLWhlYWRlci5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLXNlbGVjdC5jb21wb25lbnQiLCJAbmdyeC9zdG9yZSIsIkBhbmd1bGFyL3JvdXRlciIsIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXIiLCJAc2hhcmVkL2NvbXBvbmVudHMvanNvbi1jb250ZW50LmNvbXBvbmVudCIsIkBzaGFyZWQvaW1wb3J0LWV4cG9ydC9pbXBvcnQtZXhwb3J0LnNlcnZpY2UiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9hc3QuZGlyZWN0aXZlIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3giLCJAc2hhcmVkL2NvbXBvbmVudHMvZW50aXR5L2VudGl0eS1nYXRld2F5LXNlbGVjdC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGVscC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGludC10b29sdGlwLWljb24uY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2hlbHAtcG9wdXAuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL3BvcG92ZXIuc2VydmljZSIsIkBhbmd1bGFyL21hdGVyaWFsL2NoaXBzIiwiQHNoYXJlZC9jb21wb25lbnRzL2ljb24uY29tcG9uZW50IiwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSIsIkBzaGFyZWQvZGVjb3JhdG9ycy9jb2VyY2lvbiIsIkBzaGFyZWQvY29tcG9uZW50cy9qc29uLW9iamVjdC1lZGl0LmNvbXBvbmVudCIsIkBzaGFyZWQvY29tcG9uZW50cy9tYXJrZG93bi5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdGItZXJyb3IuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2ZpbGUtaW5wdXQuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2J1dHRvbi9jb3B5LWJ1dHRvbi5jb21wb25lbnQiXSwoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0LG4sYSxvLGkscixzLGwsYyxwLG0sZCx1LGcsZix5LGIsaCx4LHYsdyxDLFQsUyxrLEwsRixJLEEsTixNLEUscSxELFAsRyxPLFIsVixCLFUsXyxILHosVyxqLEssWSxRLEosWCxaLGVlLHRlLG5lLGFlLG9lLGllLHJlLHNlLGxlLGNlLHBlLG1lLGRlLHVlLGdlLGZlLHllLGJlLGhlLHhlLHZlLHdlLENlLFRlLFNlLGtlLExlLEZlLEllLEFlLE5lLE1lLEVlLHFlLERlLFBlLEdlLE9lLFJlLFZlLEJlLFVlLF9lLEhlLHplLFdlLGplLEtlLCRlLFllLFFlLEplLFhlLFplLGV0LHR0LG50LGF0LG90LGl0LHJ0LHN0LGx0LGN0LHB0LG10LGR0LHV0LGd0LGZ0LHl0LGJ0LGh0LHh0LHZ0LHd0LEN0LFR0LFN0O3JldHVybntzZXR0ZXJzOltmdW5jdGlvbihlKXt0PWUsbj1lLkNvbXBvbmVudCxhPWUuSW5wdXQsbz1lLlZpZXdDaGlsZCxpPWUuRXZlbnRFbWl0dGVyLHI9ZS5pbmplY3Qscz1lLkRpcmVjdGl2ZSxsPWUuT3V0cHV0LGM9ZS5QaXBlLHA9ZS5JbmplY3QsbT1lLmZvcndhcmRSZWYsZD1lLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5LHU9ZS5OZ01vZHVsZX0sZnVuY3Rpb24oZSl7Zz1lLk1hdFNvcnQsZj1lfSxmdW5jdGlvbihlKXt5PWUuTWF0VGFibGVEYXRhU291cmNlLGI9ZX0sZnVuY3Rpb24oZSl7aD1lLk1hdFBhZ2luYXRvcix4PWV9LGZ1bmN0aW9uKGUpe3Y9ZS5oZWxwQmFzZVVybCx3PWUuRGlyZWN0aW9uLEM9ZS5QYWdlTGluayxUPWUuRGF0YUtleVR5cGUsUz1lLkxlZ2VuZFBvc2l0aW9uLGs9ZS5OVUxMX1VVSUQsTD1lLkF0dHJpYnV0ZVNjb3BlLEY9ZS5EYXRhc291cmNlVHlwZSxJPWUuRW50aXR5VHlwZSxBPWUud2lkZ2V0VHlwZSxOPWUuY29lcmNlQm9vbGVhbixNPWUuZW1wdHlQYWdlRGF0YSxFPWUuaXNDbGllbnRTaWRlVGVsZW1ldHJ5VHlwZSxxPWUuVGVsZW1ldHJ5U3Vic2NyaWJlcixEPWUuU2hhcmVkTW9kdWxlLFA9ZS5EaWFsb2dDb21wb25lbnQsRz1lLkNvbnRlbnRUeXBlLE89ZS5QYWdlQ29tcG9uZW50LFI9ZS5UYlRhYmxlRGF0YXNvdXJjZSxWPWUuSE9VUixCPWUuY29lcmNlTnVtYmVyLFU9ZS5EZXZpY2VDcmVkZW50aWFsc1R5cGV9LGZ1bmN0aW9uKGUpe189ZSxIPWUuQ29tbW9uTW9kdWxlfSxmdW5jdGlvbihlKXt6PWV9LGZ1bmN0aW9uKGUpe1c9ZX0sZnVuY3Rpb24oZSl7aj1lfSxmdW5jdGlvbihlKXtLPWV9LGZ1bmN0aW9uKGUpe1k9ZSxRPWUuVHJhbnNsYXRlTW9kdWxlfSxmdW5jdGlvbihlKXtKPWUuZGVlcENsb25lLFg9ZSxaPWUuZGVsZXRlTnVsbFByb3BlcnRpZXMsZWU9ZS5pc0VxdWFsLHRlPWUuaXNOdW1iZXIsbmU9ZS5pc1N0cmluZyxhZT1lLldJTkRPVyxvZT1lLmlzTGl0ZXJhbE9iamVjdCxpZT1lLmlzRGVmaW5lZEFuZE5vdE51bGwscmU9ZS5pc1VuZGVmaW5lZE9yTnVsbCxzZT1lLmdlbmVyYXRlU2VjcmV0LGxlPWUuaXNPYmplY3QsY2U9ZS5jYW1lbENhc2UscGU9ZS5kZWVwVHJpbX0sZnVuY3Rpb24oZSl7bWU9ZSxkZT1lLkZvcm1CdWlsZGVyLHVlPWUuVmFsaWRhdG9ycyxnZT1lLk5HX1ZBTFVFX0FDQ0VTU09SLGZlPWUuTkdfVkFMSURBVE9SUyx5ZT1lLkZvcm1Db250cm9sfSxmdW5jdGlvbihlKXtiZT1lfSxmdW5jdGlvbihlKXtoZT1lfSxmdW5jdGlvbihlKXt4ZT1lfSxmdW5jdGlvbihlKXt2ZT1lfSxmdW5jdGlvbihlKXt3ZT1lfSxmdW5jdGlvbihlKXtDZT1lLFRlPWUuRXJyb3JTdGF0ZU1hdGNoZXJ9LGZ1bmN0aW9uKGUpe1NlPWUuU3ViamVjdCxrZT1lLmZyb21FdmVudCxMZT1lLkJlaGF2aW9yU3ViamVjdCxGZT1lLlJlcGxheVN1YmplY3QsSWU9ZS5vZixBZT1lLmZvcmtKb2lufSxmdW5jdGlvbihlKXtOZT1lLnRha2VVbnRpbCxNZT1lLmZpbHRlcixFZT1lLnRhcCxxZT1lLmNhdGNoRXJyb3IsRGU9ZS5tYXAsUGU9ZS5wdWJsaXNoUmVwbGF5LEdlPWUucmVmQ291bnQsT2U9ZS50YWtlLFJlPWUuc3RhcnRXaXRoLFZlPWUuZGVib3VuY2VUaW1lLEJlPWUuZGlzdGluY3RVbnRpbENoYW5nZWQsVWU9ZS5zd2l0Y2hNYXAsX2U9ZS5tZXJnZU1hcH0sZnVuY3Rpb24oZSl7SGU9ZS5fX2RlY29yYXRlfSxmdW5jdGlvbihlKXt6ZT1lLFdlPWUuTWF0VG9vbHRpcH0sZnVuY3Rpb24oZSl7amU9ZS5TZWxlY3Rpb25Nb2RlbH0sZnVuY3Rpb24oZSl7S2U9ZX0sZnVuY3Rpb24oZSl7JGU9ZX0sZnVuY3Rpb24oZSl7WWU9ZX0sZnVuY3Rpb24oZSl7UWU9ZS5Kc29uT2JqZWN0RWRpdERpYWxvZ0NvbXBvbmVudH0sZnVuY3Rpb24oZSl7SmU9ZSxYZT1lLk1BVF9ESUFMT0dfREFUQX0sZnVuY3Rpb24oZSl7WmU9ZX0sZnVuY3Rpb24oZSl7ZXQ9ZX0sZnVuY3Rpb24oZSl7dHQ9ZX0sZnVuY3Rpb24oZSl7bnQ9ZX0sZnVuY3Rpb24oZSl7YXQ9ZX0sZnVuY3Rpb24oZSl7b3Q9ZX0sZnVuY3Rpb24oZSl7aXQ9ZX0sZnVuY3Rpb24oZSl7cnQ9ZX0sZnVuY3Rpb24oZSl7c3Q9ZX0sZnVuY3Rpb24oZSl7bHQ9ZX0sZnVuY3Rpb24oZSl7Y3Q9ZX0sZnVuY3Rpb24oZSl7cHQ9ZX0sZnVuY3Rpb24oZSl7bXQ9ZX0sZnVuY3Rpb24oZSl7ZHQ9ZX0sZnVuY3Rpb24oZSl7dXQ9ZX0sZnVuY3Rpb24oZSl7Z3Q9ZX0sZnVuY3Rpb24oZSl7ZnQ9ZX0sZnVuY3Rpb24oZSl7eXQ9ZX0sZnVuY3Rpb24oZSl7YnQ9ZX0sZnVuY3Rpb24oZSl7aHQ9ZX0sZnVuY3Rpb24oZSl7eHQ9ZS5jb2VyY2VCb29sZWFufSxmdW5jdGlvbihlKXt2dD1lfSxmdW5jdGlvbihlKXt3dD1lfSxmdW5jdGlvbihlKXtDdD1lfSxmdW5jdGlvbihlKXtUdD1lfSxmdW5jdGlvbihlKXtTdD1lfV0sZXhlY3V0ZTpmdW5jdGlvbigpe2NvbnN0IGt0PWUoIm5vTGVhZFRyYWlsU3BhY2VzUmVnZXgiLC9eXFMrKD86IFxTKykqJC8pLEx0PWUoImludGVnZXJSZWdleCIsL15bLStdP1xkKyQvKSxGdD1lKCJub25aZXJvRmxvYXQiLC9eLT8oPyEwKFwuMCspPyQpXGQrKFwuXGQrKT8kLyksSXQ9ZSgianNvblJlcXVpcmVkIiwoZT0+ZS52YWx1ZT9udWxsOntyZXF1aXJlZDohMH0pKTt2YXIgQXQsTnQsTXQsRXQ7ZSgiU3RvcmFnZVR5cGVzIixBdCksZnVuY3Rpb24oZSl7ZS5NRU1PUlk9Im1lbW9yeSIsZS5GSUxFPSJmaWxlIixlLlNRTElURT0ic3FsaXRlIn0oQXR8fGUoIlN0b3JhZ2VUeXBlcyIsQXQ9e30pKSxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdCksZnVuY3Rpb24oZSl7ZS5FWENFUFRJT049IkVYQ0VQVElPTiJ9KE50fHxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdD17fSkpLGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQpLGZ1bmN0aW9uKGUpe2UuTk9ORT0iTk9ORSIsZS5DUklUSUNBTD0iQ1JJVElDQUwiLGUuRVJST1I9IkVSUk9SIixlLldBUk5JTkc9IldBUk5JTkciLGUuSU5GTz0iSU5GTyIsZS5ERUJVRz0iREVCVUciLGUuVFJBQ0U9IlRSQUNFIn0oTXR8fGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQ9e30pKSxlKCJQb3J0TGltaXRzIixFdCksZnVuY3Rpb24oZSl7ZVtlLk1JTj0xXT0iTUlOIixlW2UuTUFYPTY1NTM1XT0iTUFYIn0oRXR8fGUoIlBvcnRMaW1pdHMiLEV0PXt9KSk7Y29uc3QgcXQ9ZSgiR2F0ZXdheVN0YXR1cyIsey4uLk10LC4uLk50fSk7dmFyIER0LFB0O2UoIkxvZ1NhdmluZ1BlcmlvZCIsRHQpLGZ1bmN0aW9uKGUpe2UuZGF5cz0iRCIsZS5ob3Vycz0iSCIsZS5taW51dGVzPSJNIixlLnNlY29uZHM9IlMifShEdHx8ZSgiTG9nU2F2aW5nUGVyaW9kIixEdD17fSkpLGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0KSxmdW5jdGlvbihlKXtlLnNlcnZpY2U9InNlcnZpY2UiLGUuY29ubmVjdG9yPSJjb25uZWN0b3IiLGUuY29udmVydGVyPSJjb252ZXJ0ZXIiLGUudGJfY29ubmVjdGlvbj0idGJfY29ubmVjdGlvbiIsZS5zdG9yYWdlPSJzdG9yYWdlIixlLmV4dGVuc2lvbj0iZXh0ZW5zaW9uIn0oUHR8fGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0PXt9KSk7Y29uc3QgR3Q9ZSgiTG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwIixuZXcgTWFwKFtbUHQuc2VydmljZSwiU2VydmljZSJdLFtQdC5jb25uZWN0b3IsIkNvbm5lY3RvciJdLFtQdC5jb252ZXJ0ZXIsIkNvbnZlcnRlciJdLFtQdC50Yl9jb25uZWN0aW9uLCJUQiBDb25uZWN0aW9uIl0sW1B0LnN0b3JhZ2UsIlN0b3JhZ2UiXSxbUHQuZXh0ZW5zaW9uLCJFeHRlbnNpb24iXV0pKSxPdD1lKCJMb2dTYXZpbmdQZXJpb2RUcmFuc2xhdGlvbnMiLG5ldyBNYXAoW1tEdC5kYXlzLCJnYXRld2F5LmxvZ3MuZGF5cyJdLFtEdC5ob3VycywiZ2F0ZXdheS5sb2dzLmhvdXJzIl0sW0R0Lm1pbnV0ZXMsImdhdGV3YXkubG9ncy5taW51dGVzIl0sW0R0LnNlY29uZHMsImdhdGV3YXkubG9ncy5zZWNvbmRzIl1dKSksUnQ9ZSgiU3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAiLG5ldyBNYXAoW1tBdC5NRU1PUlksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtBdC5GSUxFLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl0sW0F0LlNRTElURSwiZ2F0ZXdheS5zdG9yYWdlLXR5cGVzLnNxbGl0ZSJdXSkpO3ZhciBWdDtlKCJTZWN1cml0eVR5cGVzIixWdCksZnVuY3Rpb24oZSl7ZS5BQ0NFU1NfVE9LRU49ImFjY2Vzc1Rva2VuIixlLlVTRVJOQU1FX1BBU1NXT1JEPSJ1c2VybmFtZVBhc3N3b3JkIixlLlRMU19BQ0NFU1NfVE9LRU49InRsc0FjY2Vzc1Rva2VuIixlLlRMU19QUklWQVRFX0tFWT0idGxzUHJpdmF0ZUtleSJ9KFZ0fHxlKCJTZWN1cml0eVR5cGVzIixWdD17fSkpO2NvbnN0IEJ0PWUoIkdlY3VyaXR5VHlwZXNUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tWdC5BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl0sW1Z0LlVTRVJOQU1FX1BBU1NXT1JELCJnYXRld2F5LnNlY3VyaXR5LXR5cGVzLnVzZXJuYW1lLXBhc3N3b3JkIl0sW1Z0LlRMU19BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMudGxzLWFjY2Vzcy10b2tlbiJdXSkpO3ZhciBVdCxfdDtlKCJHYXRld2F5VmVyc2lvbiIsVXQpLGZ1bmN0aW9uKGUpe2UuQ3VycmVudD0iMy41LjIiLGUuTGVnYWN5PSJsZWdhY3kifShVdHx8ZSgiR2F0ZXdheVZlcnNpb24iLFV0PXt9KSksZSgiQ29ubmVjdG9yVHlwZSIsX3QpLGZ1bmN0aW9uKGUpe2UuTVFUVD0ibXF0dCIsZS5NT0RCVVM9Im1vZGJ1cyIsZS5HUlBDPSJncnBjIixlLk9QQ1VBPSJvcGN1YSIsZS5CTEU9ImJsZSIsZS5SRVFVRVNUPSJyZXF1ZXN0IixlLkNBTj0iY2FuIixlLkJBQ05FVD0iYmFjbmV0IixlLk9EQkM9Im9kYmMiLGUuUkVTVD0icmVzdCIsZS5TTk1QPSJzbm1wIixlLkZUUD0iZnRwIixlLlNPQ0tFVD0ic29ja2V0IixlLlhNUFA9InhtcHAiLGUuT0NQUD0ib2NwcCIsZS5DVVNUT009ImN1c3RvbSJ9KF90fHxlKCJDb25uZWN0b3JUeXBlIixfdD17fSkpO2NvbnN0IEh0PWUoIkdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIixuZXcgTWFwKFtbX3QuTVFUVCwiTVFUVCJdLFtfdC5NT0RCVVMsIk1PREJVUyJdLFtfdC5HUlBDLCJHUlBDIl0sW190Lk9QQ1VBLCJPUENVQSJdLFtfdC5CTEUsIkJMRSJdLFtfdC5SRVFVRVNULCJSRVFVRVNUIl0sW190LkNBTiwiQ0FOIl0sW190LkJBQ05FVCwiQkFDTkVUIl0sW190Lk9EQkMsIk9EQkMiXSxbX3QuUkVTVCwiUkVTVCJdLFtfdC5TTk1QLCJTTk1QIl0sW190LkZUUCwiRlRQIl0sW190LlNPQ0tFVCwiU09DS0VUIl0sW190LlhNUFAsIlhNUFAiXSxbX3QuT0NQUCwiT0NQUCJdLFtfdC5DVVNUT00sIkNVU1RPTSJdXSkpLHp0PWUoIk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzEsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1jb2lscyJdLFsyLCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtZGlzY3JldGUtaW5wdXRzIl0sWzMsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdLFs0LCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtaW5wdXQtcmVnaXN0ZXJzIl0sWzUsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMud3JpdGUtc2luZ2xlLWNvaWwiXSxbNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1zaW5nbGUtaG9sZGluZy1yZWdpc3RlciJdLFsxNSwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1jb2lscyJdLFsxNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdXSkpO3ZhciBXdDtlKCJCQUNuZXRSZXF1ZXN0VHlwZXMiLFd0KSxmdW5jdGlvbihlKXtlLldyaXRlUHJvcGVydHk9IndyaXRlUHJvcGVydHkiLGUuUmVhZFByb3BlcnR5PSJyZWFkUHJvcGVydHkifShXdHx8ZSgiQkFDbmV0UmVxdWVzdFR5cGVzIixXdD17fSkpO2NvbnN0IGp0PWUoIkJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tXdC5Xcml0ZVByb3BlcnR5LCJnYXRld2F5LnJwYy53cml0ZS1wcm9wZXJ0eSJdLFtXdC5SZWFkUHJvcGVydHksImdhdGV3YXkucnBjLnJlYWQtcHJvcGVydHkiXV0pKTt2YXIgS3Q7ZSgiQkFDbmV0T2JqZWN0VHlwZXMiLEt0KSxmdW5jdGlvbihlKXtlLkJpbmFyeUlucHV0PSJiaW5hcnlJbnB1dCIsZS5CaW5hcnlPdXRwdXQ9ImJpbmFyeU91dHB1dCIsZS5BbmFsb2dJbnB1dD0iYW5hbG9nSW5wdXQiLGUuQW5hbG9nT3V0cHV0PSJhbmFsb2dPdXRwdXQiLGUuQmluYXJ5VmFsdWU9ImJpbmFyeVZhbHVlIixlLkFuYWxvZ1ZhbHVlPSJhbmFsb2dWYWx1ZSJ9KEt0fHxlKCJCQUNuZXRPYmplY3RUeXBlcyIsS3Q9e30pKTtjb25zdCAkdD1lKCJCQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tLdC5BbmFsb2dPdXRwdXQsImdhdGV3YXkucnBjLmFuYWxvZy1vdXRwdXQiXSxbS3QuQW5hbG9nSW5wdXQsImdhdGV3YXkucnBjLmFuYWxvZy1pbnB1dCJdLFtLdC5CaW5hcnlPdXRwdXQsImdhdGV3YXkucnBjLmJpbmFyeS1vdXRwdXQiXSxbS3QuQmluYXJ5SW5wdXQsImdhdGV3YXkucnBjLmJpbmFyeS1pbnB1dCJdLFtLdC5CaW5hcnlWYWx1ZSwiZ2F0ZXdheS5ycGMuYmluYXJ5LXZhbHVlIl0sW0t0LkFuYWxvZ1ZhbHVlLCJnYXRld2F5LnJwYy5hbmFsb2ctdmFsdWUiXV0pKTt2YXIgWXQ7ZSgiQkxFTWV0aG9kcyIsWXQpLGZ1bmN0aW9uKGUpe2UuV1JJVEU9IndyaXRlIixlLlJFQUQ9InJlYWQiLGUuU0NBTj0ic2NhbiJ9KFl0fHxlKCJCTEVNZXRob2RzIixZdD17fSkpO2NvbnN0IFF0PWUoIkJMRU1ldGhvZHNUcmFuc2xhdGVzIixuZXcgTWFwKFtbWXQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl0sW1l0LlJFQUQsImdhdGV3YXkucnBjLnJlYWQiXSxbWXQuU0NBTiwiZ2F0ZXdheS5ycGMuc2NhbiJdXSkpO3ZhciBKdCxYdDtlKCJDQU5CeXRlT3JkZXJzIixKdCksZnVuY3Rpb24oZSl7ZS5MSVRUTEU9IkxJVFRMRSIsZS5CSUc9IkJJRyJ9KEp0fHxlKCJDQU5CeXRlT3JkZXJzIixKdD17fSkpLGUoIlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzIixYdCksZnVuY3Rpb24oZSl7ZS5XUklURT0id3JpdGUifShYdHx8ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3MiLFh0PXt9KSk7Y29uc3QgWnQ9ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzIixuZXcgTWFwKFtbWHQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl1dKSk7dmFyIGVuO2UoIlNOTVBNZXRob2RzIixlbiksZnVuY3Rpb24oZSl7ZS5TRVQ9InNldCIsZS5NVUxUSVNFVD0ibXVsdGlzZXQiLGUuR0VUPSJnZXQiLGUuQlVMS1dBTEs9ImJ1bGt3YWxrIixlLlRBQkxFPSJ0YWJsZSIsZS5NVUxUSUdFVD0ibXVsdGlnZXQiLGUuR0VUTkVYVD0iZ2V0bmV4dCIsZS5CVUxLR0VUPSJidWxrZ2V0IixlLldBTEtTPSJ3YWxrIn0oZW58fGUoIlNOTVBNZXRob2RzIixlbj17fSkpO2NvbnN0IHRuPWUoIlNOTVBNZXRob2RzVHJhbnNsYXRpb25zIixuZXcgTWFwKFtbZW4uU0VULCJnYXRld2F5LnJwYy5zZXQiXSxbZW4uTVVMVElTRVQsImdhdGV3YXkucnBjLm11bHRpc2V0Il0sW2VuLkdFVCwiZ2F0ZXdheS5ycGMuZ2V0Il0sW2VuLkJVTEtXQUxLLCJnYXRld2F5LnJwYy5idWxrLXdhbGsiXSxbZW4uVEFCTEUsImdhdGV3YXkucnBjLnRhYmxlIl0sW2VuLk1VTFRJR0VULCJnYXRld2F5LnJwYy5tdWx0aS1nZXQiXSxbZW4uR0VUTkVYVCwiZ2F0ZXdheS5ycGMuZ2V0LW5leHQiXSxbZW4uQlVMS0dFVCwiZ2F0ZXdheS5ycGMuYnVsay1nZXQiXSxbZW4uV0FMS1MsImdhdGV3YXkucnBjLndhbGsiXV0pKTt2YXIgbm4sYW4sb24scm4sc24sbG47ZSgiSFRUUE1ldGhvZHMiLG5uKSxmdW5jdGlvbihlKXtlLkNPTk5FQ1Q9IkNPTk5FQ1QiLGUuREVMRVRFPSJERUxFVEUiLGUuR0VUPSJHRVQiLGUuSEVBRD0iSEVBRCIsZS5PUFRJT05TPSJPUFRJT05TIixlLlBBVENIPSJQQVRDSCIsZS5QT1NUPSJQT1NUIixlLlBVVD0iUFVUIixlLlRSQUNFPSJUUkFDRSJ9KG5ufHxlKCJIVFRQTWV0aG9kcyIsbm49e30pKSxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuKSxmdW5jdGlvbihlKXtlLlVURl84PSJ1dGYtOCJ9KGFufHxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuPXt9KSksZSgiQ29uZmlndXJhdGlvbk1vZGVzIixvbiksZnVuY3Rpb24oZSl7ZS5CQVNJQz0iYmFzaWMiLGUuQURWQU5DRUQ9ImFkdmFuY2VkIn0ob258fGUoIkNvbmZpZ3VyYXRpb25Nb2RlcyIsb249e30pKSxlKCJTZWN1cml0eVR5cGUiLHJuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyIsZS5DRVJUSUZJQ0FURVM9ImNlcnRpZmljYXRlcyJ9KHJufHxlKCJTZWN1cml0eVR5cGUiLHJuPXt9KSksZSgiUmVwb3J0U3RyYXRlZ3lUeXBlIixzbiksZnVuY3Rpb24oZSl7ZS5PbkNoYW5nZT0iT05fQ0hBTkdFIixlLk9uUmVwb3J0UGVyaW9kPSJPTl9SRVBPUlRfUEVSSU9EIixlLk9uQ2hhbmdlT3JSZXBvcnRQZXJpb2Q9Ik9OX0NIQU5HRV9PUl9SRVBPUlRfUEVSSU9EIn0oc258fGUoIlJlcG9ydFN0cmF0ZWd5VHlwZSIsc249e30pKSxlKCJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZSIsbG4pLGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0b3I9NmU0XT0iQ29ubmVjdG9yIixlW2UuRGV2aWNlPTNlNF09IkRldmljZSIsZVtlLktleT0xNWUzXT0iS2V5In0obG58fGUoIlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlIixsbj17fSkpO2NvbnN0IGNuPWUoIlJlcG9ydFN0cmF0ZWd5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW3NuLk9uQ2hhbmdlLCJnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5vbi1jaGFuZ2UiXSxbc24uT25SZXBvcnRQZXJpb2QsImdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5Lm9uLXJlcG9ydC1wZXJpb2QiXSxbc24uT25DaGFuZ2VPclJlcG9ydFBlcmlvZCwiZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kub24tY2hhbmdlLW9yLXJlcG9ydC1wZXJpb2QiXV0pKTt2YXIgcG47ZSgiTW9kZVR5cGUiLHBuKSxmdW5jdGlvbihlKXtlLk5PTkU9Ik5vbmUiLGUuU0lHTj0iU2lnbiIsZS5TSUdOQU5ERU5DUllQVD0iU2lnbkFuZEVuY3J5cHQifShwbnx8ZSgiTW9kZVR5cGUiLHBuPXt9KSk7Y29uc3QgbW49ZSgiU2VjdXJpdHlUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbcm4uQU5PTllNT1VTLCJnYXRld2F5LmJyb2tlci5zZWN1cml0eS10eXBlcy5hbm9ueW1vdXMiXSxbcm4uQkFTSUMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmJhc2ljIl0sW3JuLkNFUlRJRklDQVRFUywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuY2VydGlmaWNhdGVzIl1dKSk7dmFyIGRuO2UoIlJlc3RTZWN1cml0eVR5cGUiLGRuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyJ9KGRufHxlKCJSZXN0U2VjdXJpdHlUeXBlIixkbj17fSkpO2NvbnN0IHVuPWUoIlJlc3RTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tkbi5BTk9OWU1PVVMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmFub255bW91cyJdLFtkbi5CQVNJQywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuYmFzaWMiXV0pKSxnbj1lKCJNcXR0VmVyc2lvbnMiLFt7bmFtZTozLjEsdmFsdWU6M30se25hbWU6My4xMSx2YWx1ZTo0fSx7bmFtZTo1LHZhbHVlOjV9XSk7dmFyIGZuO2UoIk1hcHBpbmdUeXBlIixmbiksZnVuY3Rpb24oZSl7ZS5EQVRBPSJkYXRhIixlLlJFUVVFU1RTPSJyZXF1ZXN0cyIsZS5PUENVQT0iT1BDdWEifShmbnx8ZSgiTWFwcGluZ1R5cGUiLGZuPXt9KSk7Y29uc3QgeW49ZSgiTWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nIl0sW2ZuLk9QQ1VBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdXSkpLGJuPWUoIk1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbZm4uREFUQSwiZ2F0ZXdheS5kYXRhLW1hcHBpbmctaGludCJdLFtmbi5PUENVQSwiZ2F0ZXdheS5vcGN1YS1kYXRhLW1hcHBpbmctaGludCJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nLWhpbnQiXV0pKSxobj1lKCJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNzZWN0aW9uLW1hcHBpbmciXSxbZm4uT1BDVUEsdisiL2RvY3MvaW90LWdhdGV3YXkvY29uZmlnL29wYy11YS8jc2VjdGlvbi1tYXBwaW5nIl0sW2ZuLlJFUVVFU1RTLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNyZXF1ZXN0cy1tYXBwaW5nIl1dKSkseG49ZSgiUXVhbGl0eVR5cGVzIixbMCwxLDJdKSx2bj1lKCJRdWFsaXR5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzAsImdhdGV3YXkucW9zLmF0LW1vc3Qtb25jZSJdLFsxLCJnYXRld2F5LnFvcy5hdC1sZWFzdC1vbmNlIl0sWzIsImdhdGV3YXkucW9zLmV4YWN0bHktb25jZSJdXSkpO3ZhciB3bjtlKCJDb252ZXJ0b3JUeXBlIix3biksZnVuY3Rpb24oZSl7ZS5KU09OPSJqc29uIixlLkJZVEVTPSJieXRlcyIsZS5DVVNUT009ImN1c3RvbSJ9KHdufHxlKCJDb252ZXJ0b3JUeXBlIix3bj17fSkpO2NvbnN0IENuPWUoIkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1t3bi5KU09OLCJnYXRld2F5LkpTT04iXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMiXSxbd24uQ1VTVE9NLCJnYXRld2F5LmN1c3RvbSJdXSkpO3ZhciBUbixTbixrbjtlKCJTb3VyY2VUeXBlIixUbiksZnVuY3Rpb24oZSl7ZS5NU0c9Im1lc3NhZ2UiLGUuVE9QSUM9InRvcGljIixlLkNPTlNUPSJjb25zdGFudCJ9KFRufHxlKCJTb3VyY2VUeXBlIixUbj17fSkpLGUoIk9QQ1VhU291cmNlVHlwZSIsU24pLGZ1bmN0aW9uKGUpe2UuUEFUSD0icGF0aCIsZS5JREVOVElGSUVSPSJpZGVudGlmaWVyIixlLkNPTlNUPSJjb25zdGFudCJ9KFNufHxlKCJPUENVYVNvdXJjZVR5cGUiLFNuPXt9KSksZSgiRGV2aWNlSW5mb1R5cGUiLGtuKSxmdW5jdGlvbihlKXtlLkZVTEw9ImZ1bGwiLGUuUEFSVElBTD0icGFydGlhbCJ9KGtufHxlKCJEZXZpY2VJbmZvVHlwZSIsa249e30pKTtjb25zdCBMbj1lKCJTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbVG4uTVNHLCJnYXRld2F5LnNvdXJjZS10eXBlLm1zZyJdLFtUbi5UT1BJQywiZ2F0ZXdheS5zb3VyY2UtdHlwZS50b3BpYyJdLFtUbi5DT05TVCwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5jb25zdCJdLFtTbi5QQVRILCJnYXRld2F5LnNvdXJjZS10eXBlLnBhdGgiXSxbU24uSURFTlRJRklFUiwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5pZGVudGlmaWVyIl0sW1NuLkNPTlNULCJnYXRld2F5LnNvdXJjZS10eXBlLmNvbnN0Il1dKSk7dmFyIEZuLEluO2UoIlNlcnZlclNpZGVScGNUeXBlIixGbiksZnVuY3Rpb24oZSl7ZS5XaXRoUmVzcG9uc2U9InR3b1dheSIsZS5XaXRob3V0UmVzcG9uc2U9Im9uZVdheSJ9KEZufHxlKCJTZXJ2ZXJTaWRlUnBjVHlwZSIsRm49e30pKSxlKCJSZXF1ZXN0VHlwZSIsSW4pLGZ1bmN0aW9uKGUpe2UuQ09OTkVDVF9SRVFVRVNUPSJjb25uZWN0UmVxdWVzdHMiLGUuRElTQ09OTkVDVF9SRVFVRVNUPSJkaXNjb25uZWN0UmVxdWVzdHMiLGUuQVRUUklCVVRFX1JFUVVFU1Q9ImF0dHJpYnV0ZVJlcXVlc3RzIixlLkFUVFJJQlVURV9VUERBVEU9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuU0VSVkVSX1NJREVfUlBDPSJzZXJ2ZXJTaWRlUnBjIn0oSW58fGUoIlJlcXVlc3RUeXBlIixJbj17fSkpO2NvbnN0IEFuPWUoIlJlcXVlc3RUeXBlc1RyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW0luLkNPTk5FQ1RfUkVRVUVTVCwiZ2F0ZXdheS5yZXF1ZXN0LmNvbm5lY3QtcmVxdWVzdCJdLFtJbi5ESVNDT05ORUNUX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5kaXNjb25uZWN0LXJlcXVlc3QiXSxbSW4uQVRUUklCVVRFX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5hdHRyaWJ1dGUtcmVxdWVzdCJdLFtJbi5BVFRSSUJVVEVfVVBEQVRFLCJnYXRld2F5LnJlcXVlc3QuYXR0cmlidXRlLXVwZGF0ZSJdLFtJbi5TRVJWRVJfU0lERV9SUEMsImdhdGV3YXkucmVxdWVzdC5ycGMtY29ubmVjdGlvbiJdXSkpO3ZhciBObjtlKCJNYXBwaW5nS2V5c1R5cGUiLE5uKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5DVVNUT009ImV4dGVuc2lvbkNvbmZpZyIsZS5SUENfTUVUSE9EUz0icnBjX21ldGhvZHMiLGUuQVRUUklCVVRFU19VUERBVEVTPSJhdHRyaWJ1dGVzX3VwZGF0ZXMifShObnx8ZSgiTWFwcGluZ0tleXNUeXBlIixObj17fSkpO2NvbnN0IE1uPWUoIk1hcHBpbmdLZXlzUGFuZWxUaXRsZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LnRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5LmtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5LnJwYy1tZXRob2RzIl1dKSksRW49ZSgiTWFwcGluZ0tleXNBZGRLZXlUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tObi5BVFRSSUJVVEVTLCJnYXRld2F5LmFkZC1hdHRyaWJ1dGUiXSxbTm4uVElNRVNFUklFUywiZ2F0ZXdheS5hZGQtdGltZXNlcmllcyJdLFtObi5DVVNUT00sImdhdGV3YXkuYWRkLWtleSJdLFtObi5BVFRSSUJVVEVTX1VQREFURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZS11cGRhdGUiXSxbTm4uUlBDX01FVEhPRFMsImdhdGV3YXkuYWRkLXJwYy1tZXRob2QiXV0pKSxxbj1lKCJNYXBwaW5nS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW05uLkNVU1RPTSwiZ2F0ZXdheS5kZWxldGUta2V5Il0sW05uLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFtObi5SUENfTUVUSE9EUywiZ2F0ZXdheS5kZWxldGUtcnBjLW1ldGhvZCJdXSkpLERuPWUoIk1hcHBpbmdLZXlzTm9LZXlzVGV4dFRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkubm8tYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5Lm5vLXRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5Lm5vLWtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5Lm5vLXJwYy1tZXRob2RzIl1dKSk7dmFyIFBuLEduLE9uO2UoIlNlcnZlclNpZGVSUENUeXBlIixQbiksZnVuY3Rpb24oZSl7ZS5PTkVfV0FZPSJvbmVXYXkiLGUuVFdPX1dBWT0idHdvV2F5In0oUG58fGUoIlNlcnZlclNpZGVSUENUeXBlIixQbj17fSkpLGUoIk1hcHBpbmdWYWx1ZVR5cGUiLEduKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLklOVEVHRVI9ImludGVnZXIiLGUuRE9VQkxFPSJkb3VibGUiLGUuQk9PTEVBTj0iYm9vbGVhbiJ9KEdufHxlKCJNYXBwaW5nVmFsdWVUeXBlIixHbj17fSkpLGUoIk1vZGlmaWVyVHlwZSIsT24pLGZ1bmN0aW9uKGUpe2UuRElWSURFUj0iZGl2aWRlciIsZS5NVUxUSVBMSUVSPSJtdWx0aXBsaWVyIn0oT258fGUoIk1vZGlmaWVyVHlwZSIsT249e30pKTtjb25zdCBSbj1lKCJNb2RpZmllclR5cGVzTWFwIixuZXcgTWFwKFtbT24uRElWSURFUix7bmFtZToiZ2F0ZXdheS5kaXZpZGVyIixpY29uOiJtZGk6ZGl2aXNpb24ifV0sW09uLk1VTFRJUExJRVIse25hbWU6ImdhdGV3YXkubXVsdGlwbGllciIsaWNvbjoibWRpOm11bHRpcGxpY2F0aW9uIn1dXSkpLFZuPWUoIm1hcHBpbmdWYWx1ZVR5cGVzTWFwIixuZXcgTWFwKFtbR24uU1RSSU5HLHtuYW1lOiJ2YWx1ZS5zdHJpbmciLGljb246Im1kaTpmb3JtYXQtdGV4dCJ9XSxbR24uSU5URUdFUix7bmFtZToidmFsdWUuaW50ZWdlciIsaWNvbjoibWRpOm51bWVyaWMifV0sW0duLkRPVUJMRSx7bmFtZToidmFsdWUuZG91YmxlIixpY29uOiJtZGk6bnVtZXJpYyJ9XSxbR24uQk9PTEVBTix7bmFtZToidmFsdWUuYm9vbGVhbiIsaWNvbjoibWRpOmNoZWNrYm94LW1hcmtlZC1vdXRsaW5lIn1dXSkpLEJuPWUoIkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbd24uSlNPTiwiZ2F0ZXdheS5KU09OLWhpbnQiXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMtaGludCJdLFt3bi5DVVNUT00sImdhdGV3YXkuY3VzdG9tLWhpbnQiXV0pKTt2YXIgVW47ZSgiU2VjdXJpdHlQb2xpY3kiLFVuKSxmdW5jdGlvbihlKXtlLkJBU0lDMTI4PSJCYXNpYzEyOFJzYTE1IixlLkJBU0lDMjU2PSJCYXNpYzI1NiIsZS5CQVNJQzI1NlNIQT0iQmFzaWMyNTZTaGEyNTYifShVbnx8ZSgiU2VjdXJpdHlQb2xpY3kiLFVuPXt9KSk7Y29uc3QgX249ZSgiU2VjdXJpdHlQb2xpY3lUeXBlcyIsW3t2YWx1ZTpVbi5CQVNJQzEyOCxuYW1lOiJCYXNpYzEyOFJTQTE1In0se3ZhbHVlOlVuLkJBU0lDMjU2LG5hbWU6IkJhc2ljMjU2In0se3ZhbHVlOlVuLkJBU0lDMjU2U0hBLG5hbWU6IkJhc2ljMjU2U0hBMjU2In1dKTt2YXIgSG47ZSgiTW9kYnVzUHJvdG9jb2xUeXBlIixIbiksZnVuY3Rpb24oZSl7ZS5UQ1A9InRjcCIsZS5VRFA9InVkcCIsZS5TZXJpYWw9InNlcmlhbCJ9KEhufHxlKCJNb2RidXNQcm90b2NvbFR5cGUiLEhuPXt9KSk7Y29uc3Qgem49ZSgiTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAiLG5ldyBNYXAoW1tIbi5UQ1AsIlRDUCJdLFtIbi5VRFAsIlVEUCJdLFtIbi5TZXJpYWwsIlNlcmlhbCJdXSkpO3ZhciBXbixqbjtlKCJNb2RidXNNZXRob2RUeXBlIixXbiksZnVuY3Rpb24oZSl7ZS5TT0NLRVQ9InNvY2tldCIsZS5SVFU9InJ0dSJ9KFdufHxlKCJNb2RidXNNZXRob2RUeXBlIixXbj17fSkpLGUoIk1vZGJ1c1NlcmlhbE1ldGhvZFR5cGUiLGpuKSxmdW5jdGlvbihlKXtlLlJUVT0icnR1IixlLkFTQ0lJPSJhc2NpaSJ9KGpufHxlKCJNb2RidXNTZXJpYWxNZXRob2RUeXBlIixqbj17fSkpO2NvbnN0IEtuPWUoIk1vZGJ1c01ldGhvZExhYmVsc01hcCIsbmV3IE1hcChbW1duLlNPQ0tFVCwiU29ja2V0Il0sW1duLlJUVSwiUlRVIl0sW2puLkFTQ0lJLCJBU0NJSSJdXSkpLCRuPWUoIk1vZGJ1c0J5dGVTaXplcyIsWzUsNiw3LDhdKTt2YXIgWW47ZSgiTW9kYnVzUGFyaXR5IixZbiksZnVuY3Rpb24oZSl7ZS5FdmVuPSJFIixlLk9kZD0iTyIsZS5Ob25lPSJOIn0oWW58fGUoIk1vZGJ1c1Bhcml0eSIsWW49e30pKTtjb25zdCBRbj1lKCJNb2RidXNQYXJpdHlMYWJlbHNNYXAiLG5ldyBNYXAoW1tZbi5FdmVuLCJFdmVuIl0sW1luLk9kZCwiT2RkIl0sW1luLk5vbmUsIk5vbmUiXV0pKTt2YXIgSm4sWG47ZSgiTW9kYnVzT3JkZXJUeXBlIixKbiksZnVuY3Rpb24oZSl7ZS5CSUc9IkJJRyIsZS5MSVRUTEU9IkxJVFRMRSJ9KEpufHxlKCJNb2RidXNPcmRlclR5cGUiLEpuPXt9KSksZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbiksZnVuY3Rpb24oZSl7ZS5Ib2xkaW5nUmVnaXN0ZXJzPSJob2xkaW5nX3JlZ2lzdGVycyIsZS5Db2lsc0luaXRpYWxpemVyPSJjb2lsc19pbml0aWFsaXplciIsZS5JbnB1dFJlZ2lzdGVycz0iaW5wdXRfcmVnaXN0ZXJzIixlLkRpc2NyZXRlSW5wdXRzPSJkaXNjcmV0ZV9pbnB1dHMifShYbnx8ZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbj17fSkpO2NvbnN0IFpuPWUoIk1vZGJ1c1JlZ2lzdGVyVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbWG4uSG9sZGluZ1JlZ2lzdGVycywiZ2F0ZXdheS5ob2xkaW5nX3JlZ2lzdGVycyJdLFtYbi5Db2lsc0luaXRpYWxpemVyLCJnYXRld2F5LmNvaWxzX2luaXRpYWxpemVyIl0sW1huLklucHV0UmVnaXN0ZXJzLCJnYXRld2F5LmlucHV0X3JlZ2lzdGVycyJdLFtYbi5EaXNjcmV0ZUlucHV0cywiZ2F0ZXdheS5kaXNjcmV0ZV9pbnB1dHMiXV0pKTt2YXIgZWE7ZSgiTW9kYnVzRGF0YVR5cGUiLGVhKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLkJZVEVTPSJieXRlcyIsZS5CSVRTPSJiaXRzIixlLklOVDg9IjhpbnQiLGUuVUlOVDg9Ijh1aW50IixlLkZMT0FUOD0iOGZsb2F0IixlLklOVDE2PSIxNmludCIsZS5VSU5UMTY9IjE2dWludCIsZS5GTE9BVDE2PSIxNmZsb2F0IixlLklOVDMyPSIzMmludCIsZS5VSU5UMzI9IjMydWludCIsZS5GTE9BVDMyPSIzMmZsb2F0IixlLklOVDY0PSI2NGludCIsZS5VSU5UNjQ9IjY0dWludCIsZS5GTE9BVDY0PSI2NGZsb2F0In0oZWF8fGUoIk1vZGJ1c0RhdGFUeXBlIixlYT17fSkpO2NvbnN0IHRhPWUoIk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzIixbZWEuQllURVMsZWEuQklUUyxlYS5TVFJJTkddKTt2YXIgbmEsYWE7ZSgiTW9kYnVzT2JqZWN0Q291bnRCeURhdGFUeXBlIixuYSksZnVuY3Rpb24oZSl7ZVtlWyI4aW50Il09MV09IjhpbnQiLGVbZVsiOHVpbnQiXT0xXT0iOHVpbnQiLGVbZVsiOGZsb2F0Il09MV09IjhmbG9hdCIsZVtlWyIxNmludCJdPTFdPSIxNmludCIsZVtlWyIxNnVpbnQiXT0xXT0iMTZ1aW50IixlW2VbIjE2ZmxvYXQiXT0xXT0iMTZmbG9hdCIsZVtlWyIzMmludCJdPTJdPSIzMmludCIsZVtlWyIzMnVpbnQiXT0yXT0iMzJ1aW50IixlW2VbIjMyZmxvYXQiXT0yXT0iMzJmbG9hdCIsZVtlWyI2NGludCJdPTRdPSI2NGludCIsZVtlWyI2NHVpbnQiXT00XT0iNjR1aW50IixlW2VbIjY0ZmxvYXQiXT00XT0iNjRmbG9hdCJ9KG5hfHxlKCJNb2RidXNPYmplY3RDb3VudEJ5RGF0YVR5cGUiLG5hPXt9KSksZSgiTW9kYnVzVmFsdWVLZXkiLGFhKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5BVFRSSUJVVEVTX1VQREFURVM9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuUlBDX1JFUVVFU1RTPSJycGMifShhYXx8ZSgiTW9kYnVzVmFsdWVLZXkiLGFhPXt9KSk7Y29uc3Qgb2E9ZSgiTW9kYnVzS2V5c1BhbmVsVGl0bGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5LmF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS50aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkucnBjLXJlcXVlc3RzIl1dKSksaWE9ZSgiTW9kYnVzS2V5c0FkZEtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmFkZC10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hZGQtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuYWRkLXJwYy1yZXF1ZXN0Il1dKSkscmE9ZSgiTW9kYnVzS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuZGVsZXRlLXJwYy1yZXF1ZXN0Il1dKSksc2E9ZSgiTW9kYnVzS2V5c05vS2V5c1RleHRUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS5uby10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5uby1hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkubm8tcnBjLXJlcXVlc3RzIl1dKSksbGE9ZSgiTW9kYnVzQmF1ZHJhdGVzIixbNDgwMCw5NjAwLDE5MjAwLDM4NDAwLDU3NjAwLDExNTIwMCwyMzA0MDAsNDYwODAwLDkyMTYwMF0pO2NsYXNzIGNhe2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsidHMiLCJzdGF0dXMiLCJtZXNzYWdlIl0sdGhpcy5nYXRld2F5TG9nTGlua3M9W3tuYW1lOiJHZW5lcmFsIixrZXk6IkxPR1MifSx7bmFtZToiU2VydmljZSIsa2V5OiJTRVJWSUNFX0xPR1MifSx7bmFtZToiQ29ubmVjdGlvbiIsa2V5OiJDT05ORUNUSU9OX0xPR1MifSx7bmFtZToiU3RvcmFnZSIsa2V5OiJTVE9SQUdFX0xPR1MifSx7a2V5OiJFWFRFTlNJT05TX0xPR1MiLG5hbWU6IkV4dGVuc2lvbiJ9XTtjb25zdCBlPXtwcm9wZXJ0eToidHMiLGRpcmVjdGlvbjp3LkRFU0N9O3RoaXMucGFnZUxpbms9bmV3IEMoMTAsMCxudWxsLGUpLHRoaXMuZGF0YVNvdXJjZT1uZXcgeShbXSl9bmdPbkluaXQoKXt0aGlzLnVwZGF0ZVdpZGdldFRpdGxlKCl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3I9dGhpcy5wYWdpbmF0b3IsdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vblRpbWV3aW5kb3dDaGFuZ2VGdW5jdGlvbj1lPT4odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vcHRpb25zLnRpbWVXaW5kb3dDb25maWc9ZSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksZSksdGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmxvZ0xpbmtzPVt7a2V5OmAke2Uua2V5fV9MT0dTYCxuYW1lOiJDb25uZWN0b3IiLGZpbHRlckZuOmU9PiFlLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX0se2tleTpgJHtlLmtleX1fTE9HU2AsbmFtZToiQ29udmVydGVyIixmaWx0ZXJGbjplPT5lLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX1dfWVsc2UgdGhpcy5sb2dMaW5rcz10aGlzLmdhdGV3YXlMb2dMaW5rczt0aGlzLmFjdGl2ZUxpbms9dGhpcy5sb2dMaW5rc1swXSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXVwZGF0ZVdpZGdldFRpdGxlKCl7aWYodGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LndpZGdldENvbmZpZy50aXRsZSx0PSIke2Nvbm5lY3Rvck5hbWV9IjtpZihlLmluY2x1ZGVzKHQpKXtjb25zdCBuPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmN0eC53aWRnZXRUaXRsZT1lLnJlcGxhY2UodCxuLmtleSl9fX11cGRhdGVEYXRhKCl7aWYodGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhLmxlbmd0aCYmdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhWzBdKXtsZXQgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGFbMF0uZGF0YS5tYXAoKGU9Pntjb25zdCB0PXt0czplWzBdLGtleTp0aGlzLmFjdGl2ZUxpbmsua2V5LG1lc3NhZ2U6ZVsxXSxzdGF0dXM6IklOVkFMSUQgTE9HIEZPUk1BVCJ9O3RyeXt0Lm1lc3NhZ2U9L1xbKC4qKS8uZXhlYyhlWzFdKVswXX1jYXRjaChuKXt0Lm1lc3NhZ2U9ZVsxXX10cnl7dC5zdGF0dXM9ZVsxXS5tYXRjaCgvXHwoXHcrKVx8LylbMV19Y2F0Y2goZSl7dC5zdGF0dXM9IklOVkFMSUQgTE9HIEZPUk1BVCJ9cmV0dXJuIHR9KSk7dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuJiYoZT1lLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuKGUpKSkpLHRoaXMuZGF0YVNvdXJjZS5kYXRhPWV9fW9uVGFiQ2hhbmdlZChlKXt0aGlzLmFjdGl2ZUxpbms9ZSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXN0YXR1c0NsYXNzKGUpe3N3aXRjaChlKXtjYXNlIHF0LkRFQlVHOnJldHVybiJzdGF0dXMgc3RhdHVzLWRlYnVnIjtjYXNlIHF0LldBUk5JTkc6cmV0dXJuInN0YXR1cyBzdGF0dXMtd2FybmluZyI7Y2FzZSBxdC5FUlJPUjpjYXNlIHF0LkVYQ0VQVElPTjpyZXR1cm4ic3RhdHVzIHN0YXR1cy1lcnJvciI7ZGVmYXVsdDpyZXR1cm4ic3RhdHVzIHN0YXR1cy1pbmZvIn19c3RhdHVzQ2xhc3NNc2coZSl7aWYoZT09PXF0LkVYQ0VQVElPTilyZXR1cm4ibXNnLXN0YXR1cy1leGNlcHRpb24ifXRyYWNrQnlMb2dUcyhlLHQpe3JldHVybiB0LnRzfWNoYW5nZVN1YnNjcmlwdGlvbigpe3RoaXMuY3R4LmRhdGFzb3VyY2VzJiZ0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlcyYmKHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlc1swXS5kYXRhS2V5cz1be25hbWU6dGhpcy5hY3RpdmVMaW5rLmtleSx0eXBlOlQudGltZXNlcmllcyxzZXR0aW5nczp7fX1dLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5jYWxsYmFja3Mub25EYXRhVXBkYXRlZD0oKT0+e3RoaXMudXBkYXRlRGF0YSgpfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjYSxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Y2Esc2VsZWN0b3I6InRiLWdhdGV3YXktbG9ncyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToic2VhcmNoSW5wdXRGaWVsZCIsZmlyc3Q6ITAscHJlZGljYXRlOlsic2VhcmNoSW5wdXQiXSxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic29ydCIsZmlyc3Q6ITAscHJlZGljYXRlOmcsZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InBhZ2luYXRvciIsZmlyc3Q6ITAscHJlZGljYXRlOmgsZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRUYWJsZSxzZWxlY3RvcjoibWF0LXRhYmxlLCB0YWJsZVttYXQtdGFibGVdIixleHBvcnRBczpbIm1hdFRhYmxlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsRGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyQ2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyUm93RGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyUm93RGVmXSIsaW5wdXRzOlsibWF0SGVhZGVyUm93RGVmIiwibWF0SGVhZGVyUm93RGVmU3RpY2t5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDb2x1bW5EZWYsc2VsZWN0b3I6IlttYXRDb2x1bW5EZWZdIixpbnB1dHM6WyJtYXRDb2x1bW5EZWYiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGxEZWYsc2VsZWN0b3I6IlttYXRDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRSb3dEZWYsc2VsZWN0b3I6IlttYXRSb3dEZWZdIixpbnB1dHM6WyJtYXRSb3dEZWZDb2x1bW5zIiwibWF0Um93RGVmV2hlbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbCxzZWxlY3RvcjoibWF0LWhlYWRlci1jZWxsLCB0aFttYXQtaGVhZGVyLWNlbGxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGwsc2VsZWN0b3I6Im1hdC1jZWxsLCB0ZFttYXQtY2VsbF0ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0SGVhZGVyUm93LHNlbGVjdG9yOiJtYXQtaGVhZGVyLXJvdywgdHJbbWF0LWhlYWRlci1yb3ddIixleHBvcnRBczpbIm1hdEhlYWRlclJvdyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0Um93LHNlbGVjdG9yOiJtYXQtcm93LCB0clttYXQtcm93XSIsZXhwb3J0QXM6WyJtYXRSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp4Lk1hdFBhZ2luYXRvcixzZWxlY3RvcjoibWF0LXBhZ2luYXRvciIsaW5wdXRzOlsiY29sb3IiLCJwYWdlSW5kZXgiLCJsZW5ndGgiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImhpZGVQYWdlU2l6ZSIsInNob3dGaXJzdExhc3RCdXR0b25zIiwic2VsZWN0Q29uZmlnIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsicGFnZSJdLGV4cG9ydEFzOlsibWF0UGFnaW5hdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp6Lk1hdERpdmlkZXIsc2VsZWN0b3I6Im1hdC1kaXZpZGVyIixpbnB1dHM6WyJ2ZXJ0aWNhbCIsImluc2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXYsc2VsZWN0b3I6IlttYXQtdGFiLW5hdi1iYXJdIixpbnB1dHM6WyJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJkaXNhYmxlUmlwcGxlIiwiY29sb3IiLCJ0YWJQYW5lbCJdLGV4cG9ydEFzOlsibWF0VGFiTmF2QmFyIiwibWF0VGFiTmF2Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXZQYW5lbCxzZWxlY3RvcjoibWF0LXRhYi1uYXYtcGFuZWwiLGlucHV0czpbImlkIl0sZXhwb3J0QXM6WyJtYXRUYWJOYXZQYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiTGluayxzZWxlY3RvcjoiW21hdC10YWItbGlua10sIFttYXRUYWJMaW5rXSIsaW5wdXRzOlsiYWN0aXZlIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJpZCJdLGV4cG9ydEFzOlsibWF0VGFiTGluayJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUxvZ3NDb21wb25lbnQiLGNhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmNhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWxvZ3MiLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2N0eDpbe3R5cGU6YX1dLGRpYWxvZ1JlZjpbe3R5cGU6YX1dLHNlYXJjaElucHV0RmllbGQ6W3t0eXBlOm8sYXJnczpbInNlYXJjaElucHV0Il19XSxzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0scGFnaW5hdG9yOlt7dHlwZTpvLGFyZ3M6W2hdfV19fSk7Y2xhc3MgcGF7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLnV0aWxzPW4sdGhpcy5pc051bWVyaWNEYXRhPSExLHRoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3RhdGlzdGljc0tleXM9W10sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnM9e2NhbGxiYWNrczp7b25EYXRhVXBkYXRlZDooKT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfSx1c2VEYXNoYm9hcmRUaW1ld2luZG93OiExLGxlZ2VuZENvbmZpZzp7cG9zaXRpb246Uy5ib3R0b219fSx0aGlzLmluaXQ9KCk9Pnt0aGlzLmZsb3RDdHg9eyRzY29wZTp0aGlzLmN0eC4kc2NvcGUsJGluamVjdG9yOnRoaXMuY3R4LiRpbmplY3Rvcix1dGlsczp0aGlzLmN0eC51dGlscyxpc01vYmlsZTp0aGlzLmN0eC5pc01vYmlsZSxpc0VkaXQ6dGhpcy5jdHguaXNFZGl0LHN1YnNjcmlwdGlvbkFwaTp0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGksZGV0ZWN0Q2hhbmdlczp0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzLHNldHRpbmdzOnRoaXMuY3R4LnNldHRpbmdzfX0sdGhpcy51cGRhdGVDaGFydD0oKT0+e30sdGhpcy5yZXNpemU9KCk9Pnt9O2NvbnN0IGE9e3Byb3BlcnR5OiIwIixkaXJlY3Rpb246dy5ERVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwwLG51bGwsYSksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiMCIsIjEiXSx0aGlzLmRhdGFTb3VyY2U9bmV3IHkoW10pLHRoaXMuc3RhdGlzdGljRm9ybT10aGlzLmZiLmdyb3VwKHtzdGF0aXN0aWNLZXk6W251bGwsW11dfSksdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e3RoaXMuY29tbWFuZE9iaj1udWxsLHRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5jb21tYW5kT2JqPXRoaXMuY29tbWFuZHMuZmluZCgodD0+dC5hdHRyaWJ1dGVPbkdhdGV3YXk9PT1lKSkpLHRoaXMuc3Vic2NyaXB0aW9uSW5mbyYmdGhpcy5jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhc291cmNlc1swXS5lbnRpdHksZSl9KSl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKCk9PnRoaXMuc29ydERhdGEoKSkpLHRoaXMuaW5pdCgpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXMubGVuZ3RoKXtjb25zdCBlPXRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZW50aXR5O2lmKGUuaWQuaWQ9PT1rKXJldHVybjt0aGlzLmdlbmVyYWw/dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eVRpbWVzZXJpZXNMYXRlc3QoZS5pZCkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGU9PmUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1Byb2R1Y2VkIil8fGUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1NlbnQiKSkpO3RoaXMuY3JlYXRlR2VuZXJhbENoYXJ0c1N1YnNjcmlwdGlvbihlLG4pfSkpOnRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKGUuaWQsTC5TSEFSRURfU0NPUEUsWyJnZW5lcmFsX2NvbmZpZ3VyYXRpb24iXSkuc3Vic2NyaWJlKCh0PT57dCYmdC5sZW5ndGgmJih0aGlzLmNvbW1hbmRzPXRbMF0udmFsdWUuc3RhdGlzdGljcy5jb21tYW5kcywhdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWUmJnRoaXMuY29tbWFuZHMmJnRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5Iikuc2V0VmFsdWUodGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpLHRoaXMuY3JlYXRlQ2hhcnRzU3Vic2NyaXB0aW9uKGUsdGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpKSl9KSl9fW5hdmlnYXRlVG9TdGF0aXN0aWNzKCl7Y29uc3QgZT1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTt0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIub3BlblN0YXRlKCJjb25maWd1cmF0aW9uIixlKX1zb3J0RGF0YSgpe3RoaXMuZGF0YVNvdXJjZS5zb3J0RGF0YSh0aGlzLmRhdGFTb3VyY2UuZGF0YSx0aGlzLnNvcnQpfW9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGUpe3RoaXMubGVnZW5kRGF0YS5rZXlzW2VdLmRhdGFLZXkuaGlkZGVuPSF0aGlzLmxlZ2VuZERhdGEua2V5c1tlXS5kYXRhS2V5LmhpZGRlbix0aGlzLnN1YnNjcmlwdGlvbi51cGRhdGVEYXRhVmlzaWJpbGl0eShlKX1jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1be25hbWU6dCxsYWJlbDp0fV0sdGhpcy5zdWJzY3JpcHRpb25JbmZvPW4sdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWNyZWF0ZUdlbmVyYWxDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1bXSx0Py5sZW5ndGgmJnQuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUsbGFiZWw6ZX0pfSkpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZGF0YUtleXMuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUubmFtZSxsYWJlbDplLmxhYmVsfSl9KSksdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0KCl7dGhpcy5yZXNpemUkJiZ0aGlzLnJlc2l6ZSQuZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uRGF0YVVwZGF0ZUVycm9yKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5wYXJzZUV4Y2VwdGlvbihlKTtsZXQgbj10Lm5hbWU7dC5tZXNzYWdlJiYobis9IjogIit0Lm1lc3NhZ2UpLGNvbnNvbGUuZXJyb3Iobil9b25EYXRhVXBkYXRlZCgpe3RoaXMuaXNEYXRhT25seU51bWJlcnMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJih0aGlzLmNoYXJ0SW5pdGVkfHx0aGlzLmluaXRDaGFydCgpKX1pbml0Q2hhcnQoKXt0aGlzLmNoYXJ0SW5pdGVkPSEwLHRoaXMuZmxvdEN0eC4kY29udGFpbmVyPSQodGhpcy5zdGF0aXN0aWNDaGFydC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc2l6ZSQub2JzZXJ2ZSh0aGlzLnN0YXRpc3RpY0NoYXJ0Lm5hdGl2ZUVsZW1lbnQpfWlzRGF0YU9ubHlOdW1iZXJzKCl7dGhpcy5nZW5lcmFsP3RoaXMuaXNOdW1lcmljRGF0YT0hMDoodGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5zdWJzY3JpcHRpb24uZGF0YS5sZW5ndGg/dGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhOltdLHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCYmIXRoaXMuZGF0YVR5cGVEZWZpbmVkJiYodGhpcy5kYXRhVHlwZURlZmluZWQ9ITAsdGhpcy5pc051bWVyaWNEYXRhPXRoaXMuZGF0YVNvdXJjZS5kYXRhLmV2ZXJ5KChlPT4haXNOYU4oK2VbMV0pKSkpKX1jaGFuZ2VTdWJzY3JpcHRpb24oZSl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMucmVzZXQoKSx0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LnN1YnNjcmlwdGlvbkFwaS5jcmVhdGVTdWJzY3JpcHRpb25Gcm9tSW5mbyhBLnRpbWVzZXJpZXMsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3Vic2NyaXB0aW9uPWUsdGhpcy5pc0RhdGFPbmx5TnVtYmVycygpLHRoaXMubGVnZW5kRGF0YT10aGlzLnN1YnNjcmlwdGlvbi5sZWdlbmREYXRhLHRoaXMuZmxvdEN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uPWUsdGhpcy5yZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuY3R4LmRldGVjdENoYW5nZXMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJnRoaXMuaW5pdENoYXJ0KCl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpYLlV0aWxzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cGEsc2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsaW5wdXRzOntjdHg6ImN0eCIsZ2VuZXJhbDoiZ2VuZXJhbCJ9LHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzb3J0IixmaXJzdDohMCxwcmVkaWNhdGU6ZyxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic3RhdGlzdGljQ2hhcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInN0YXRpc3RpY0NoYXJ0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0Lmx0LW1kPSJjb2x1bW4iPlxuICA8bWF0LWNhcmQgW2Zvcm1Hcm91cF09InN0YXRpc3RpY0Zvcm0iICpuZ0lmPSIhZ2VuZXJhbCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0YXRpc3RpY0tleSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGtleSBvZiBzdGF0aXN0aWNzS2V5cyIgW3ZhbHVlXT0ia2V5Ij5cbiAgICAgICAgICB7eyBrZXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb21tYW5kIG9mIGNvbW1hbmRzIiBbdmFsdWVdPSJjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSI+XG4gICAgICAgICAge3sgY29tbWFuZC5hdHRyaWJ1dGVPbkdhdGV3YXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1lcnJvclxuICAgICAgKm5nSWY9IiFzdGF0aXN0aWNzS2V5cy5sZW5ndGggJiYgIWNvbW1hbmRzLmxlbmd0aCI+XG4gICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWMtY29tbWFuZHMtZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0ibmF2aWdhdGVUb1N0YXRpc3RpY3MoKSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3MtYnV0dG9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIiAqbmdJZj0iY29tbWFuZE9iaiI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IFt2YWx1ZV09ImNvbW1hbmRPYmouY29tbWFuZCIgZGlzYWJsZWQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9tYXQtY2FyZD5cbiAgPGRpdiBjbGFzcz0iY2hhcnQtYm94IiBmeExheW91dD0iY29sdW1uIj5cbiAgICA8ZGl2IGNsYXNzPSJjaGFydC1jb250YWluZXIiICNzdGF0aXN0aWNDaGFydCBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+PC9kaXY+XG4gICAgPHRhYmxlIFtmeFNob3ddPSIhaXNOdW1lcmljRGF0YSIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgICAgIG1hdFNvcnREaXNhYmxlQ2xlYXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMCI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7IFwnd2lkZ2V0cy5nYXRld2F5LmNyZWF0ZWQtdGltZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCByb3c7IGxldCByb3dJbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICB7eyByb3dbMF18IGRhdGU6XCd5eXl5LU1NLWRkIEhIOm1tOnNzXCcgfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9IjEiPlxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdyI+XG4gICAgICAgICAge3sgcm93WzFdIH19XG4gICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj0iZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IlxuICAgICAgICAgICAgICAgKm1hdFJvd0RlZj0ibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uczsiPjwvbWF0LXJvdz5cbiAgICA8L3RhYmxlPlxuICAgIDxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwICYmICFpc051bWVyaWNEYXRhIlxuICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7IFwnYXR0cmlidXRlLm5vLXRlbGVtZXRyeS10ZXh0XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGRpdiBmeEZsZXggY2xhc3M9ImxlZ2VuZCIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgW2Z4U2hvd109ImlzTnVtZXJpY0RhdGEiPlxuICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWtleXMiICpuZ0Zvcj0ibGV0IGxlZ2VuZEtleSBvZiBsZWdlbmREYXRhPy5rZXlzIiBmeExheW91dD0icm93IlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZ2VuZC1saW5lIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09ImxlZ2VuZEtleS5kYXRhS2V5LmNvbG9yIj48L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1sYWJlbCJcbiAgICAgICAgICAgICAoY2xpY2spPSJvbkxlZ2VuZEtleUhpZGRlbkNoYW5nZShsZWdlbmRLZXkuZGF0YUluZGV4KSJcbiAgICAgICAgICAgICBbY2xhc3NdPSJ7IFwnaGlkZGVuLWxhYmVsXCc6IGxlZ2VuZERhdGEua2V5c1tsZWdlbmRLZXkuZGF0YUluZGV4XS5kYXRhS2V5LmhpZGRlbiB9IlxuICAgICAgICAgICAgIFtpbm5lckhUTUxdPSJsZWdlbmRLZXkuZGF0YUtleS5sYWJlbCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BhZGRpbmc6MH06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXJ7aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDo0MCU7aGVpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OjM1cHg7cGFkZGluZzoxNXB4O2dhcDoyMnB4fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzUwcHgpezpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDoxMDAlfX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveCw6aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtmbGV4LWdyb3c6MX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveHtvdmVyZmxvdzphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcj4qe2hlaWdodDoxMDAlfTpob3N0IC5sZWdlbmR7ZmxleC13cmFwOndyYXA7d2lkdGg6MTAwJTtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206NHB4O21hcmdpbi10b3A6MTVweH06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVse3BhZGRpbmc6MnB4IDIwcHggMnB4IDEwcHg7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWwuaGlkZGVuLWxhYmVse3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7b3BhY2l0eTouNn06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTVweDtoZWlnaHQ6M3B4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7b3V0bGluZTpub25lfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmhlLk1hdENhcmQsc2VsZWN0b3I6Im1hdC1jYXJkIixpbnB1dHM6WyJhcHBlYXJhbmNlIl0sZXhwb3J0QXM6WyJtYXRDYXJkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5EYXRlUGlwZSxuYW1lOiJkYXRlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U3RhdGlzdGljc0NvbXBvbmVudCIscGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtbWQ9ImNvbHVtbiI+XG4gIDxtYXQtY2FyZCBbZm9ybUdyb3VwXT0ic3RhdGlzdGljRm9ybSIgKm5nSWY9IiFnZW5lcmFsIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3RhdGlzdGljS2V5Ij5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQga2V5IG9mIHN0YXRpc3RpY3NLZXlzIiBbdmFsdWVdPSJrZXkiPlxuICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgY29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQuYXR0cmlidXRlT25HYXRld2F5Ij5cbiAgICAgICAgICB7eyBjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iIXN0YXRpc3RpY3NLZXlzLmxlbmd0aCAmJiAhY29tbWFuZHMubGVuZ3RoIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpYy1jb21tYW5kcy1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPGRpdj5cbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJuYXZpZ2F0ZVRvU3RhdGlzdGljcygpIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljcy1idXR0b25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siICpuZ0lmPSJjb21tYW5kT2JqIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW3ZhbHVlXT0iY29tbWFuZE9iai5jb21tYW5kIiBkaXNhYmxlZD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L21hdC1jYXJkPlxuICA8ZGl2IGNsYXNzPSJjaGFydC1ib3giIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgI3N0YXRpc3RpY0NoYXJ0IFtmeFNob3ddPSJpc051bWVyaWNEYXRhIj48L2Rpdj5cbiAgICA8dGFibGUgW2Z4U2hvd109IiFpc051bWVyaWNEYXRhIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIlxuICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSIwIj5cbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdzsgbGV0IHJvd0luZGV4ID0gaW5kZXgiPlxuICAgICAgICAgIHt7IHJvd1swXXwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMSI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiA3MCUiPnt7IFwnd2lkZ2V0cy5nYXRld2F5Lm1lc3NhZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgcm93Ij5cbiAgICAgICAgICB7eyByb3dbMV0gfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG1hdC1oZWFkZXItcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCJcbiAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICA8bWF0LXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgIDwvdGFibGU+XG4gICAgPHNwYW4gW2Z4U2hvd109ImRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDAgJiYgIWlzTnVtZXJpY0RhdGEiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8ZGl2IGZ4RmxleCBjbGFzcz0ibGVnZW5kIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIiBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+XG4gICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQta2V5cyIgKm5nRm9yPSJsZXQgbGVnZW5kS2V5IG9mIGxlZ2VuZERhdGE/LmtleXMiIGZ4TGF5b3V0PSJyb3ciXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiPlxuICAgICAgICA8c3BhbiBjbGFzcz0ibGVnZW5kLWxpbmUiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ibGVnZW5kS2V5LmRhdGFLZXkuY29sb3IiPjwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWxhYmVsIlxuICAgICAgICAgICAgIChjbGljayk9Im9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGxlZ2VuZEtleS5kYXRhSW5kZXgpIlxuICAgICAgICAgICAgIFtjbGFzc109InsgXCdoaWRkZW4tbGFiZWxcJzogbGVnZW5kRGF0YS5rZXlzW2xlZ2VuZEtleS5kYXRhSW5kZXhdLmRhdGFLZXkuaGlkZGVuIH0iXG4gICAgICAgICAgICAgW2lubmVySFRNTF09ImxlZ2VuZEtleS5kYXRhS2V5LmxhYmVsIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzowfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtvdmVyZmxvdy15OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjQwJTtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6MzVweDtwYWRkaW5nOjE1cHg7Z2FwOjIycHh9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NTBweCl7Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjEwMCV9fTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94LDpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtY29udGFpbmVye2hlaWdodDoxMDAlO2ZsZXgtZ3JvdzoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94e292ZXJmbG93OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyPip7aGVpZ2h0OjEwMCV9Omhvc3QgLmxlZ2VuZHtmbGV4LXdyYXA6d3JhcDt3aWR0aDoxMDAlO3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo0cHg7bWFyZ2luLXRvcDoxNXB4fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWx7cGFkZGluZzoycHggMjBweCAycHggMTBweDt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLmxlZ2VuZCAubGVnZW5kLWtleXMgLmxlZ2VuZC1sYWJlbC5oaWRkZW4tbGFiZWx7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtvcGFjaXR5Oi42fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGluZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNXB4O2hlaWdodDozcHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtvdXRsaW5lOm5vbmV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpYLlV0aWxzU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0sc3RhdGlzdGljQ2hhcnQ6W3t0eXBlOm8sYXJnczpbInN0YXRpc3RpY0NoYXJ0Il19XSxjdHg6W3t0eXBlOmF9XSxnZW5lcmFsOlt7dHlwZTphfV19fSk7Y2xhc3MgbWF7c3RhdGlje3RoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1zdGF0aWN7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdPbGRGaWVsZHM9WyJhdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uIiwiZXh0ZW5zaW9uLWNvbmZpZyJdfXN0YXRpY3t0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ05ld0ZpZWxkcz1bImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIiwicmVzcG9uc2VUb3BpY1FvUyIsImV4dGVuc2lvbkNvbmZpZyJdfXN0YXRpYyBtYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGU/Lm1hcCgoKHtjb252ZXJ0ZXI6ZSx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpuPTF9KT0+e2NvbnN0IGE9ZS5kZXZpY2VJbmZvPz90aGlzLmV4dHJhY3RDb252ZXJ0ZXJEZXZpY2VJbmZvKGUpLG89ey4uLmUsZGV2aWNlSW5mbzphLGV4dGVuc2lvbkNvbmZpZzplLmV4dGVuc2lvbkNvbmZpZ3x8ZVsiZXh0ZW5zaW9uLWNvbmZpZyJdfHxudWxsfTtyZXR1cm4gdGhpcy5jbGVhblVwT2xkRmllbGRzKG8pLHtjb252ZXJ0ZXI6byx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpufX0pKX1zdGF0aWMgbWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbihlKXtyZXR1cm4gdGhpcy5tcXR0UmVxdWVzdFR5cGVLZXlzLnJlZHVjZSgoKHQsbik9PmVbbl0/KHRbbl09ZVtuXS5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwUmVxdWVzdFRvVXBncmFkZWRWZXJzaW9uKGUsbik7cmV0dXJuIHRoaXMuY2xlYW5VcE9sZEZpZWxkcyh0KSx0fSkpLHQpOnQpLHt9KX1zdGF0aWMgbWFwUmVxdWVzdHNUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMucmVkdWNlKCgodCxuKT0+ZVtuXT8odFtuXT1lW25dLm1hcCgoZT0+e249PT1Jbi5TRVJWRVJfU0lERV9SUEMmJmRlbGV0ZSBlLnR5cGU7Y29uc3R7YXR0cmlidXRlTmFtZUV4cHJlc3Npb246dCxkZXZpY2VJbmZvOmEsLi4ub309ZSxpPXsuLi5vLGF0dHJpYnV0ZU5hbWVKc29uRXhwcmVzc2lvbjp0fHxudWxsLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZSE9PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGx9O3JldHVybiB0aGlzLmNsZWFuVXBOZXdGaWVsZHMoaSksaX0pKSx0KTp0KSx7fSl9c3RhdGljIG1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlPy5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwQ29udmVydGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLmNvbnZlcnRlcik7cmV0dXJuIHRoaXMuY2xlYW5VcE5ld0ZpZWxkcyh0KSx7Y29udmVydGVyOnQsdG9waWNGaWx0ZXI6ZS50b3BpY0ZpbHRlcn19KSl9c3RhdGljIG1hcENvbnZlcnRlclRvRG93bmdyYWRlZFZlcnNpb24oZSl7Y29uc3R7ZGV2aWNlSW5mbzp0LC4uLm59PWU7cmV0dXJuIGUudHlwZSE9PXduLkJZVEVTP3suLi5uLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjp0Py5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLk1TRz90LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZUpzb25FeHByZXNzaW9uOnQ/LmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlPT09VG4uTVNHP3QuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246bnVsbCxkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uOnQ/LmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIT09VG4uTVNHP3Q/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbjp0Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSE9PVRuLk1TRz90Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbjpudWxsfTp7Li4ubixkZXZpY2VOYW1lRXhwcmVzc2lvbjp0LmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVFeHByZXNzaW9uOnQuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb24sImV4dGVuc2lvbi1jb25maWciOmUuZXh0ZW5zaW9uQ29uZmlnfX1zdGF0aWMgY2xlYW5VcE9sZEZpZWxkcyhlKXt0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ09sZEZpZWxkcy5mb3JFYWNoKCh0PT5kZWxldGUgZVt0XSkpLFooZSl9c3RhdGljIGNsZWFuVXBOZXdGaWVsZHMoZSl7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdOZXdGaWVsZHMuZm9yRWFjaCgodD0+ZGVsZXRlIGVbdF0pKSxaKGUpfXN0YXRpYyBnZXRUeXBlU291cmNlQnlWYWx1ZShlKXtyZXR1cm4gZS5pbmNsdWRlcygiJHsiKT9Ubi5NU0c6ZS5pbmNsdWRlcygiLyIpP1RuLlRPUElDOlRuLkNPTlNUfXN0YXRpYyBleHRyYWN0Q29udmVydGVyRGV2aWNlSW5mbyhlKXtjb25zdCB0PWUuZGV2aWNlTmFtZUV4cHJlc3Npb258fGUuZGV2aWNlTmFtZUpzb25FeHByZXNzaW9ufHxlLmRldmljZU5hbWVUb3BpY0V4cHJlc3Npb258fG51bGwsbj1lLmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6dD90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKHQpOm51bGwsYT1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9ufHxlLmRldmljZVR5cGVUb3BpY0V4cHJlc3Npb258fGUuZGV2aWNlVHlwZUpzb25FeHByZXNzaW9ufHwiZGVmYXVsdCIsbz1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6YT90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKGEpOm51bGw7cmV0dXJuIHR8fGE/e2RldmljZU5hbWVFeHByZXNzaW9uOnQsZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6bixkZXZpY2VQcm9maWxlRXhwcmVzc2lvbjphLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOm99Om51bGx9c3RhdGljIG1hcFJlcXVlc3RUb1VwZ3JhZGVkVmVyc2lvbihlLHQpe2NvbnN0IG49ZS5kZXZpY2VOYW1lSnNvbkV4cHJlc3Npb258fGUuZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbnx8bnVsbCxhPWUuZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbnx8ZS5kZXZpY2VUeXBlSnNvbkV4cHJlc3Npb258fCJkZWZhdWx0IixvPWE/dGhpcy5nZXRUeXBlU291cmNlQnlWYWx1ZShhKTpudWxsLGk9ZS5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZXx8ZS5hdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb258fG51bGwscj10PT09SW4uU0VSVkVSX1NJREVfUlBDPzE6bnVsbCxzPXQ9PT1Jbi5TRVJWRVJfU0lERV9SUEM/ZS5yZXNwb25zZVRvcGljRXhwcmVzc2lvbj9Gbi5XaXRoUmVzcG9uc2U6Rm4uV2l0aG91dFJlc3BvbnNlOm51bGw7cmV0dXJuey4uLmUsYXR0cmlidXRlTmFtZUV4cHJlc3Npb246aSxhdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZTppP3RoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoaSk6bnVsbCxkZXZpY2VJbmZvOmUuZGV2aWNlSW5mbz9lLmRldmljZUluZm86bj97ZGV2aWNlTmFtZUV4cHJlc3Npb246bixkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZTp0aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKG4pLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOmEsZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6b306bnVsbCxyZXNwb25zZVRvcGljUW9TOnIsdHlwZTpzfX19ZSgiTXF0dFZlcnNpb25NYXBwaW5nVXRpbCIsbWEpO2NsYXNzIGRhe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dCx0aGlzLmdhdGV3YXlWZXJzaW9uPWJhLnBhcnNlVmVyc2lvbih0aGlzLmdhdGV3YXlWZXJzaW9uSW4pLHRoaXMuY29uZmlnVmVyc2lvbj1iYS5wYXJzZVZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlnVmVyc2lvbil9Z2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBkYXRlTmVlZGVkKCk/dGhpcy5wcm9jZXNzVmVyc2lvblVwZGF0ZSgpOnRoaXMuY29ubmVjdG9yfXByb2Nlc3NWZXJzaW9uVXBkYXRlKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBncmFkZU5lZWRlZCgpP3RoaXMuZ2V0VXBncmFkZWRWZXJzaW9uKCk6dGhpcy5pc1ZlcnNpb25Eb3duZ3JhZGVOZWVkZWQoKT90aGlzLmdldERvd25ncmFkZWRWZXJzaW9uKCk6dGhpcy5jb25uZWN0b3J9aXNWZXJzaW9uVXBkYXRlTmVlZGVkKCl7cmV0dXJuISF0aGlzLmdhdGV3YXlWZXJzaW9uJiZ0aGlzLmNvbmZpZ1ZlcnNpb24hPT10aGlzLmdhdGV3YXlWZXJzaW9ufWlzVmVyc2lvblVwZ3JhZGVOZWVkZWQoKXtyZXR1cm4gdGhpcy5nYXRld2F5VmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiYoIXRoaXMuY29uZmlnVmVyc2lvbnx8dGhpcy5jb25maWdWZXJzaW9uPHRoaXMuZ2F0ZXdheVZlcnNpb24pfWlzVmVyc2lvbkRvd25ncmFkZU5lZWRlZCgpe3JldHVybiB0aGlzLmNvbmZpZ1ZlcnNpb24mJnRoaXMuY29uZmlnVmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiZ0aGlzLmNvbmZpZ1ZlcnNpb24+dGhpcy5nYXRld2F5VmVyc2lvbn19ZSgiR2F0ZXdheUNvbm5lY3RvclZlcnNpb25Qcm9jZXNzb3IiLGRhKTtjbGFzcyB1YSBleHRlbmRzIGRhe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLmdhdGV3YXlWZXJzaW9uSW49ZSx0aGlzLmNvbm5lY3Rvcj10LHRoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdHtjb25uZWN0UmVxdWVzdHM6ZSxkaXNjb25uZWN0UmVxdWVzdHM6dCxhdHRyaWJ1dGVSZXF1ZXN0czpuLGF0dHJpYnV0ZVVwZGF0ZXM6YSxzZXJ2ZXJTaWRlUnBjOm99PXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO2xldCBpPXsuLi50aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbixyZXF1ZXN0c01hcHBpbmc6bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmUsZGlzY29ubmVjdFJlcXVlc3RzOnQsYXR0cmlidXRlUmVxdWVzdHM6bixhdHRyaWJ1dGVVcGRhdGVzOmEsc2VydmVyU2lkZVJwYzpvfSksbWFwcGluZzptYS5tYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24ubWFwcGluZyl9O3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMuZm9yRWFjaCgoZT0+e2NvbnN0e1tlXTp0LC4uLm59PWk7aT17Li4ubn19KSksdGhpcy5jbGVhblVwQ29uZmlnSnNvbihpKSx7Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246aSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19Z2V0RG93bmdyYWRlZFZlcnNpb24oKXtjb25zdHtyZXF1ZXN0c01hcHBpbmc6ZSxtYXBwaW5nOnQsLi4ubn09dGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24sYT1lP21hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihlKTp7fSxvPW1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7Li4ubiwuLi5hLG1hcHBpbmc6b30sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWNsZWFuVXBDb25maWdKc29uKGUpe2VlKGUucmVxdWVzdHNNYXBwaW5nLHt9KSYmZGVsZXRlIGUucmVxdWVzdHNNYXBwaW5nLGVlKGUubWFwcGluZyxbXSkmJmRlbGV0ZSBlLm1hcHBpbmd9fWUoIk1xdHRWZXJzaW9uUHJvY2Vzc29yIix1YSk7Y2xhc3MgZ2EgZXh0ZW5kcyBkYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dH1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdCBlPXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7bWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZS5tYXN0ZXIpOntzbGF2ZXM6W119LHNsYXZlOmUuc2xhdmU/aGEubWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlLnNsYXZlKTp7fX0sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWdldERvd25ncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbjtyZXR1cm57Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246ey4uLmUsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e30sbWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLm1hc3Rlcik6e3NsYXZlczpbXX19LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX19ZSgiTW9kYnVzVmVyc2lvblByb2Nlc3NvciIsZ2EpO2NsYXNzIGZhIGV4dGVuZHMgZGF7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMuZ2F0ZXdheVZlcnNpb25Jbj1lLHRoaXMuY29ubmVjdG9yPXR9Z2V0VXBncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbi5zZXJ2ZXI7cmV0dXJuey4uLnRoaXMuY29ubmVjdG9yLGNvbmZpZ3VyYXRpb25Kc29uOntzZXJ2ZXI6ZT94YS5tYXBTZXJ2ZXJUb1VwZ3JhZGVkVmVyc2lvbihlKTp7fSxtYXBwaW5nOmU/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUubWFwcGluZyk6W119LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX1nZXREb3duZ3JhZGVkVmVyc2lvbigpe3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24pfSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19fWUoIk9wY1ZlcnNpb25Qcm9jZXNzb3IiLGZhKTtjbGFzcyB5YXtjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9bmV3IGksdGhpcy5mYj1yKGRlKSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmJhc2ljRm9ybUdyb3VwPXRoaXMuaW5pdEJhc2ljRm9ybUdyb3VwKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLm9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVkLmVtaXQoKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnNldFZhbHVlKHRoaXMubWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSkse2VtaXRFdmVudDohMX0pfW9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZSh0aGlzLmdldE1hcHBlZFZhbHVlKGUpKSx0aGlzLm9uVG91Y2hlZCgpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eWEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnlhLGlucHV0czp7Z2VuZXJhbFRhYkNvbnRlbnQ6ImdlbmVyYWxUYWJDb250ZW50In0sb3V0cHV0czp7aW5pdGlhbGl6ZWQ6ImluaXRpYWxpemVkIn0sbmdJbXBvcnQ6dH0pfX1lKCJHYXRld2F5Q29ubmVjdG9yQmFzaWNDb25maWdEaXJlY3RpdmUiLHlhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnlhLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2dlbmVyYWxUYWJDb250ZW50Olt7dHlwZTphfV0saW5pdGlhbGl6ZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBiYXtzdGF0aWMgZ2V0Q29uZmlnKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSBfdC5NUVRUOnJldHVybiBuZXcgdWEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk9QQ1VBOnJldHVybiBuZXcgZmEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk1PREJVUzpyZXR1cm4gbmV3IGdhKHQsZSkuZ2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCk7ZGVmYXVsdDpyZXR1cm4gZX19c3RhdGljIHBhcnNlVmVyc2lvbihlKXtyZXR1cm4gdGUoZSk/ZTpuZShlKT9wYXJzZUZsb2F0KGUucmVwbGFjZSgvXC4vZywiIikuc2xpY2UoMCwzKSkvMTAwOjB9fWUoIkdhdGV3YXlDb25uZWN0b3JWZXJzaW9uTWFwcGluZ1V0aWwiLGJhKTtjbGFzcyBoYXtzdGF0aWMgbWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJue3NsYXZlczplLnNsYXZlcy5tYXAoKGU9Pntjb25zdHtzZW5kRGF0YU9ubHlPbkNoYW5nZTp0LC4uLm59PWU7cmV0dXJuey4uLm4sZGV2aWNlVHlwZTplLmRldmljZVR5cGU/PyJkZWZhdWx0IixyZXBvcnRTdHJhdGVneTp0P3t0eXBlOnNuLk9uQ2hhbmdlfTp7dHlwZTpzbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6ZS5wb2xsUGVyaW9kfX19KSl9fXN0YXRpYyBtYXBNYXN0ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybntzbGF2ZXM6ZS5zbGF2ZXMubWFwKChlPT57Y29uc3R7cmVwb3J0U3RyYXRlZ3k6dCwuLi5ufT1lO3JldHVybnsuLi5uLHNlbmREYXRhT25seU9uQ2hhbmdlOnQ/LnR5cGUhPT1zbi5PblJlcG9ydFBlcmlvZH19KSl9fXN0YXRpYyBtYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZSl7aWYoIWU/LnZhbHVlcylyZXR1cm4gZTtjb25zdCB0PU9iamVjdC5rZXlzKGUudmFsdWVzKS5yZWR1Y2UoKCh0LG4pPT50PXsuLi50LFtuXTpbZS52YWx1ZXNbbl1dfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlKXtpZighZT8udmFsdWVzKXJldHVybiBlO2NvbnN0IHQ9T2JqZWN0LmtleXMoZS52YWx1ZXMpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOnRoaXMubWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZS52YWx1ZXNbbl1bMF0pfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOmVbbl0ubWFwKChlPT4oey4uLmUsdHlwZToiaW50Ij09PWUudHlwZT9lYS5JTlQxNjplLnR5cGV9KSkpfSkse30pfX1lKCJNb2RidXNWZXJzaW9uTWFwcGluZ1V0aWwiLGhhKTtjbGFzcyB4YXtzdGF0aWMgbWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZSl7Y29uc3R7bWFwcGluZzp0LGRpc2FibGVTdWJzY3JpcHRpb25zOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsLi4ub309ZTtyZXR1cm57Li4ubyxwb2xsUGVyaW9kSW5NaWxsaXM6YT8/NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6IW59fXN0YXRpYyBtYXBTZXJ2ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe2NvbnN0e21hcHBpbmc6dCxzZXJ2ZXI6bn09ZSx7ZW5hYmxlU3Vic2NyaXB0aW9uczphLC4uLm99PW4/P3t9O3JldHVybnsuLi5vLG1hcHBpbmc6dD90aGlzLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpOltdLGRpc2FibGVTdWJzY3JpcHRpb25zOiFhfX1zdGF0aWMgbWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlLm1hcCgoZT0+KHsuLi5lLGRldmljZU5vZGVTb3VyY2U6dGhpcy5nZXREZXZpY2VOb2RlU291cmNlQnlWYWx1ZShlLmRldmljZU5vZGVQYXR0ZXJuKSxkZXZpY2VJbmZvOntkZXZpY2VOYW1lRXhwcmVzc2lvbjplLmRldmljZU5hbWVQYXR0ZXJuLGRldmljZU5hbWVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VOYW1lUGF0dGVybiksZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246ZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiKX0sYXR0cmlidXRlczplLmF0dHJpYnV0ZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLGF0dHJpYnV0ZXNfdXBkYXRlczplLmF0dHJpYnV0ZXNfdXBkYXRlcy5tYXAoKGU9Pih7a2V5OmUuYXR0cmlidXRlT25UaGluZ3NCb2FyZCx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5hdHRyaWJ1dGVPbkRldmljZSksdmFsdWU6ZS5hdHRyaWJ1dGVPbkRldmljZX0pKSksdGltZXNlcmllczplLnRpbWVzZXJpZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLHJwY19tZXRob2RzOmUucnBjX21ldGhvZHMubWFwKChlPT4oe21ldGhvZDplLm1ldGhvZCxhcmd1bWVudHM6ZS5hcmd1bWVudHMubWFwKChlPT4oe3ZhbHVlOmUsdHlwZTp0aGlzLmdldEFyZ3VtZW50VHlwZShlKX0pKSl9KSkpfSkpKX1zdGF0aWMgbWFwTWFwcGluZ1RvRG93bmdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGUubWFwKChlPT4oey4uLmUsZGV2aWNlTmFtZVBhdHRlcm46ZS5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVQYXR0ZXJuOmUuZGV2aWNlSW5mby5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbixhdHRyaWJ1dGVzOmUuYXR0cmlidXRlcy5tYXAoKGU9Pih7a2V5OmUua2V5LHBhdGg6ZS52YWx1ZX0pKSksYXR0cmlidXRlc191cGRhdGVzOmUuYXR0cmlidXRlc191cGRhdGVzLm1hcCgoZT0+KHthdHRyaWJ1dGVPblRoaW5nc0JvYXJkOmUua2V5LGF0dHJpYnV0ZU9uRGV2aWNlOmUudmFsdWV9KSkpLHRpbWVzZXJpZXM6ZS50aW1lc2VyaWVzLm1hcCgoZT0+KHtrZXk6ZS5rZXkscGF0aDplLnZhbHVlfSkpKSxycGNfbWV0aG9kczplLnJwY19tZXRob2RzLm1hcCgoZT0+KHttZXRob2Q6ZS5tZXRob2QsYXJndW1lbnRzOmUuYXJndW1lbnRzLm1hcCgoZT0+ZS52YWx1ZSkpfSkpKX0pKSl9c3RhdGljIGdldFR5cGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6ZS5pbmNsdWRlcygiLyIpfHxlLmluY2x1ZGVzKCJcXCIpP1NuLlBBVEg6U24uQ09OU1R9c3RhdGljIGdldERldmljZU5vZGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6U24uUEFUSH1zdGF0aWMgZ2V0QXJndW1lbnRUeXBlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpPyJpbnRlZ2VyIjoiZmxvYXQiO2RlZmF1bHQ6cmV0dXJuInN0cmluZyJ9fX1lKCJPcGNWZXJzaW9uTWFwcGluZ1V0aWwiLHhhKTtjbGFzcyB2YXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGJhLnBhcnNlVmVyc2lvbihlKT49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5QaXBlfSl9c3RhdGlje3RoaXMuybVwaXBlPXQuybXJtW5nRGVjbGFyZVBpcGUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsaXNTdGFuZGFsb25lOiEwLG5hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyJ9KX19ZSgiTGF0ZXN0VmVyc2lvbkNvbmZpZ1BpcGUiLHZhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyB3YXtjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lfXRyYW5zZm9ybShlKXtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnBvcnQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKXx8ZS5oYXNFcnJvcigibWF4Iik/dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5wb3J0LWxpbWl0cy1lcnJvciIse21pbjpFdC5NSU4sbWF4OkV0Lk1BWH0pOiIifXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d2EsZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LlBpcGV9KX1zdGF0aWN7dGhpcy7JtXBpcGU9dC7Jtcm1bmdEZWNsYXJlUGlwZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxpc1N0YW5kYWxvbmU6ITAsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0pfX1lKCJHYXRld2F5UG9ydFRvb2x0aXBQaXBlIix3YSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAiLHN0YW5kYWxvbmU6ITB9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WS5UcmFuc2xhdGVTZXJ2aWNlfV19KTtjbGFzcyBDYXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGUubWFwKCgoe3ZhbHVlOmV9KT0+ZS50b1N0cmluZygpKSkuam9pbigiLCAiKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyJ9KX19ZSgiUnBjVGVtcGxhdGVBcnJheVZpZXdQaXBlIixDYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpDYSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBUYXt0cmFuc2Zvcm0oZSx0LG4pe3JldHVybiFufHxuPy5pbmNsdWRlcyhTbi5QQVRIKT90IT09U24uQ09OU1Q/YHdpZGdldC9saWIvZ2F0ZXdheS8ke2V9LSR7dH1fZm5gOnZvaWQgMDoiYXR0cmlidXRlcyI9PT1lfHwidGltZXNlcmllcyI9PT1lPyJ3aWRnZXQvbGliL2dhdGV3YXkvYXR0cmlidXRlc190aW1lc2VyaWVzX2V4cHJlc3Npb25zX2ZuIjoid2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifSl9fWUoIkdhdGV3YXlIZWxwTGlua1BpcGUiLFRhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImdldEdhdGV3YXlIZWxwTGluayIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBTYXtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbGVtZW50UmVmPWUsdGhpcy5yZW5kZXJlcj10LHRoaXMudG9vbHRpcD1uLHRoaXMudG9vbHRpcEVuYWJsZWQ9ITAsdGhpcy5wb3NpdGlvbj0iYWJvdmUiLHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5vYnNlcnZlTW91c2VFdmVudHMoKSx0aGlzLmFwcGx5VHJ1bmNhdGlvblN0eWxlcygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudG9vbHRpcC5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy50b29sdGlwLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJnRoaXMuaGlkZVRvb2x0aXAoKSx0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9b2JzZXJ2ZU1vdXNlRXZlbnRzKCl7a2UodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiKS5waXBlKE1lKCgoKT0+dGhpcy50b29sdGlwRW5hYmxlZCkpLE1lKCgoKT0+dGhpcy5pc092ZXJmbG93bih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpKSxFZSgoKCk9PnRoaXMuc2hvd1Rvb2x0aXAoKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKSxrZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUoTWUoKCgpPT50aGlzLnRvb2x0aXBFbmFibGVkKSksTWUoKCgpPT50aGlzLnRvb2x0aXAuX2lzVG9vbHRpcFZpc2libGUoKSkpLEVlKCgoKT0+dGhpcy5oaWRlVG9vbHRpcCgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWFwcGx5VHJ1bmNhdGlvblN0eWxlcygpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIndoaXRlLXNwYWNlIiwibm93cmFwIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKX1pc092ZXJmbG93bihlKXtyZXR1cm4gZS5jbGllbnRXaWR0aDxlLnNjcm9sbFdpZHRofXNob3dUb29sdGlwKCl7dGhpcy50b29sdGlwLm1lc3NhZ2U9dGhpcy50ZXh0fHx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lclRleHQsdGhpcy50b29sdGlwLnNob3coKX1oaWRlVG9vbHRpcCgpe3RoaXMudG9vbHRpcC5oaWRlKCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpTYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp6ZS5NYXRUb29sdGlwfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9c3RhdGlje3RoaXMuybVkaXI9dC7Jtcm1bmdEZWNsYXJlRGlyZWN0aXZlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6e3RleHQ6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0ZXh0Il0sdG9vbHRpcEVuYWJsZWQ6InRvb2x0aXBFbmFibGVkIixwb3NpdGlvbjoicG9zaXRpb24ifSxwcm92aWRlcnM6W1dlXSxuZ0ltcG9ydDp0fSl9fWUoIlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUiLFNhKSxIZShbTigpXSxTYS5wcm90b3R5cGUsInRvb2x0aXBFbmFibGVkIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixwcm92aWRlcnM6W1dlXSxzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOnplLk1hdFRvb2x0aXB9XSxwcm9wRGVjb3JhdG9yczp7dGV4dDpbe3R5cGU6YSxhcmdzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIl19XSx0b29sdGlwRW5hYmxlZDpbe3R5cGU6YX1dLHBvc2l0aW9uOlt7dHlwZTphfV19fSk7Y2xhc3Mga2F7c2V0IGNoaXBzKGUpe2VlKHRoaXMuY2hpcHNWYWx1ZSxlKXx8KHRoaXMuY2hpcHNWYWx1ZT1lLHNldFRpbWVvdXQoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSksMCkpfWNvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZWw9ZSx0aGlzLnJlbmRlcmVyPXQsdGhpcy50cmFuc2xhdGU9bix0aGlzLndpbmRvdz1hLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJtYXgtaGVpZ2h0IiwiNDhweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJvdmVyZmxvdyIsImF1dG8iKSxrZShhLCJyZXNpemUiKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSkpLHRoaXMub2JzZXJ2ZUludGVyc2VjdGlvbigpfW9ic2VydmVJbnRlcnNlY3Rpb24oKXt0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZT0+e2UuZm9yRWFjaCgoZT0+e2UuaXNJbnRlcnNlY3RpbmcmJnRoaXMuYWRqdXN0Q2hpcHMoKX0pKX0pKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1hZGp1c3RDaGlwcygpe2NvbnN0IGU9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy1jaGlwIiksbj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUodCkubWFyZ2luTGVmdCl8fDAsYT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIm1hdC1jaGlwOm5vdCguZWxsaXBzaXMtY2hpcCkiKTtpZih0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPjEpe2NvbnN0IG89dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy10ZXh0Iik7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5IiwiaW5saW5lLWZsZXgiKSxvLmlubmVySFRNTD10aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmVsbGlwc2lzLWNoaXBzLXRleHQiLHtjb3VudDp0aGlzLmNoaXBzVmFsdWUubGVuZ3RofSk7Y29uc3QgaT1lLm9mZnNldFdpZHRoLSh0Lm9mZnNldFdpZHRoK24pO2xldCByPTAscz0wO2EuZm9yRWFjaCgoZT0+e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUoZSwiZGlzcGxheSIsImlubGluZS1mbGV4Iik7Y29uc3QgdD1lLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX3RleHQtbGFiZWwiKTt0aGlzLmFwcGx5TWF4Q2hpcFRleHRXaWR0aCh0LGkvMykscisoZS5vZmZzZXRXaWR0aCtuKTw9aSYmczx0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPyhzKysscis9ZS5vZmZzZXRXaWR0aCtuKTp0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsImRpc3BsYXkiLCJub25lIil9KSksby5pbm5lckhUTUw9dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5lbGxpcHNpcy1jaGlwcy10ZXh0Iix7Y291bnQ6dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aC1zfSkscz09PXRoaXMuY2hpcHNWYWx1ZT8ubGVuZ3RoJiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHQsImRpc3BsYXkiLCJub25lIil9ZWxzZSBpZigxPT09dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aCl7Y29uc3Qgbz1hWzBdLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbiIpLGk9by5xdWVyeVNlbGVjdG9yKCIubWRjLWV2b2x1dGlvbi1jaGlwX190ZXh0LWxhYmVsIikscj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUobykucGFkZGluZ0xlZnQpfHwwLHM9cGFyc2VGbG9hdCh0aGlzLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG8pLnBhZGRpbmdSaWdodCl8fDAsbD1lLm9mZnNldFdpZHRoLW4tKHIrcyk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYVswXSwiZGlzcGxheSIsImlubGluZS1mbGV4IiksdGhpcy5hcHBseU1heENoaXBUZXh0V2lkdGgoaSxsKX1lbHNlIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodCwiZGlzcGxheSIsIm5vbmUiKX1hcHBseU1heENoaXBUZXh0V2lkdGgoZSx0KXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm1heC13aWR0aCIsdCsicHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm92ZXJmbG93IiwiaGlkZGVuIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlLCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIndoaXRlLXNwYWNlIiwibm93cmFwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjphZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6a2EsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJbdGItZWxsaXBzaXMtY2hpcC1saXN0XSIsaW5wdXRzOntjaGlwczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCIsImNoaXBzIl19LG5nSW1wb3J0OnR9KX19ZSgiRWxsaXBzaXNDaGlwTGlzdERpcmVjdGl2ZSIsa2EpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6a2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX0se3R5cGU6V2luZG93LGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbYWVdfV19XSxwcm9wRGVjb3JhdG9yczp7Y2hpcHM6W3t0eXBlOmEsYXJnczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfV19fSk7Y2xhc3MgTGF7Y29uc3RydWN0b3IoZSx0LG4sYSl7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWUsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2U9dCx0aGlzLnpvbmU9bix0aGlzLnRyYW5zbGF0ZT1hLHRoaXMuYXR0cmlidXRlc1N1YmplY3Q9bmV3IExlKFtdKSx0aGlzLnBhZ2VEYXRhU3ViamVjdD1uZXcgTGUoTSgpKSx0aGlzLnBhZ2VEYXRhJD10aGlzLnBhZ2VEYXRhU3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlzLnNlbGVjdGlvbj1uZXcgamUoITAsW10pfWNvbm5lY3QoZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCl9ZGlzY29ubmVjdChlKXt0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5wYWdlRGF0YVN1YmplY3QuY29tcGxldGUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXImJih0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIudW5zdWJzY3JpYmUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXI9bnVsbCl9bG9hZEF0dHJpYnV0ZXMoZSx0LG4sYT0hMSl7YSYmKHRoaXMuYWxsQXR0cmlidXRlcz1udWxsLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlciYmKHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlci51bnN1YnNjcmliZSgpLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlcj1udWxsKSksdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtjb25zdCBvPW5ldyBGZTtyZXR1cm4gdGhpcy5mZXRjaEF0dHJpYnV0ZXMoZSx0LG4pLnBpcGUocWUoKCgpPT5JZShNKCkpKSkpLnN1YnNjcmliZSgoZT0+e3RoaXMuYXR0cmlidXRlc1N1YmplY3QubmV4dChlLmRhdGEpLHRoaXMucGFnZURhdGFTdWJqZWN0Lm5leHQoZSksby5uZXh0KGUpfSkpLG99ZmV0Y2hBdHRyaWJ1dGVzKGUsdCxuKXtyZXR1cm4gdGhpcy5nZXRBbGxBdHRyaWJ1dGVzKGUsdCkucGlwZShEZSgoZT0+e2NvbnN0IHQ9ZS5maWx0ZXIoKGU9PjAhPT1lLmxhc3RVcGRhdGVUcykpO3JldHVybiBuLmZpbHRlckRhdGEodCl9KSkpfWdldEFsbEF0dHJpYnV0ZXMoZSx0KXtpZighdGhpcy5hbGxBdHRyaWJ1dGVzKXtsZXQgbjtFLmdldCh0KT8odGhpcy50ZWxlbWV0cnlTdWJzY3JpYmVyPXEuY3JlYXRlRW50aXR5QXR0cmlidXRlc1N1YnNjcmlwdGlvbih0aGlzLnRlbGVtZXRyeVdzU2VydmljZSxlLHQsdGhpcy56b25lKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuc3Vic2NyaWJlKCksbj10aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuYXR0cmlidXRlRGF0YSQoKSk6bj10aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyhlLHQpLHRoaXMuYWxsQXR0cmlidXRlcz1uLnBpcGUoUGUoMSksR2UoKSl9cmV0dXJuIHRoaXMuYWxsQXR0cmlidXRlc31pc0FsbFNlbGVjdGVkKCl7Y29uc3QgZT10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShEZSgodD0+ZT09PXQubGVuZ3RoKSkpfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5waXBlKERlKChlPT4hZS5sZW5ndGgpKSl9dG90YWwoKXtyZXR1cm4gdGhpcy5wYWdlRGF0YVN1YmplY3QucGlwZShEZSgoZT0+ZS50b3RhbEVsZW1lbnRzKSkpfW1hc3RlclRvZ2dsZSgpe3RoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShFZSgoZT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aD09PWUubGVuZ3RoP3RoaXMuc2VsZWN0aW9uLmNsZWFyKCk6ZS5mb3JFYWNoKChlPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0KGUpfSkpfSkpLE9lKDEpKS5zdWJzY3JpYmUoKX19ZSgiQXR0cmlidXRlRGF0YXNvdXJjZSIsTGEpO2NsYXNzIEZhe2NvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlU2VydmljZT1lLHRoaXMuc2F2ZVRlbXBsYXRlPW5ldyBpLHRoaXMudXNlVGVtcGxhdGU9bmV3IGksdGhpcy5vcmlnaW5hbE9yZGVyPSgpPT4wLHRoaXMuaXNPYmplY3Q9ZT0+b2UoZSksdGhpcy5pc0FycmF5PWU9PkFycmF5LmlzQXJyYXkoZSksdGhpcy5TTk1QTWV0aG9kc1RyYW5zbGF0aW9ucz10bn1uZ09uSW5pdCgpe31hcHBseVRlbXBsYXRlKGUsdCl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnVzZVRlbXBsYXRlLmVtaXQodCl9ZGVsZXRlVGVtcGxhdGUoZSx0KXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49dGhpcy5ycGNUZW1wbGF0ZXMuZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO3RoaXMucnBjVGVtcGxhdGVzLnNwbGljZShuLDEpO2NvbnN0IGE9YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5OmEsdmFsdWU6dGhpcy5ycGNUZW1wbGF0ZXN9XSkuc3Vic2NyaWJlKCgoKT0+e30pKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZhLGRlcHM6W3t0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkZhLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXMiLGlucHV0czp7Y29ubmVjdG9yVHlwZToiY29ubmVjdG9yVHlwZSIsY3R4OiJjdHgiLHJwY1RlbXBsYXRlczoicnBjVGVtcGxhdGVzIn0sb3V0cHV0czp7c2F2ZVRlbXBsYXRlOiJzYXZlVGVtcGxhdGUiLHVzZVRlbXBsYXRlOiJ1c2VUZW1wbGF0ZSJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZXMtdGl0bGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuPG1hdC1leHBhbnNpb24tcGFuZWwgaGlkZVRvZ2dsZSAqbmdGb3I9ImxldCB0ZW1wbGF0ZSBvZiBycGNUZW1wbGF0ZXMiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz0idGVtcGxhdGUtbmFtZSI+XG4gICAgICA8c3BhbiBtYXRUb29sdGlwPSJ7e3RlbXBsYXRlLm5hbWV9fSIgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+e3t0ZW1wbGF0ZS5uYW1lfX08L3NwYW4+XG4gICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IkRlbGV0ZSIgKGNsaWNrKT0iZGVsZXRlVGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPSJVc2UiIChjbGljayk9ImFwcGx5VGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9ImxldCBjb25maWcgb2YgdGVtcGxhdGUuY29uZmlnIHwga2V5VmFsdWVJc05vdEVtcHR5IlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IGNvbmZpZywgaW5uZXJWYWx1ZTogZmFsc2UgfSI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI1JQQ1RlbXBsYXRlUmVmIGxldC1jb25maWcgbGV0LWlubmVyVmFsdWU9XCdpbm5lclZhbHVlXCc+XG4gICAgPGRpdiBbZnhMYXlvdXRdPSJpc09iamVjdChjb25maWcudmFsdWUpID8gXCdjb2x1bW5cJzogXCdyb3dcJyJcbiAgICAgICAgIFtmeExheW91dEFsaWduXT0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ3NwYWNlLWJldHdlZW4gY2VudGVyXCcgOiBcJ1wnIlxuICAgICAgICAgW25nU3R5bGVdPSJ7XCdwYWRkaW5nLWxlZnRcJzogaW5uZXJWYWx1ZSA/IFwnMTZweFwnOiBcJzBcJ30iXG4gICAgICAgICBjbGFzcz0icnBjLXBhcmFtcy1yb3ciPlxuICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUta2V5Ij5cbiAgICAgICAge3shaW5uZXJWYWx1ZSA/IChcJ2dhdGV3YXkucnBjLlwnICsgY29uZmlnLmtleSB8IHRyYW5zbGF0ZSkgOiBjb25maWcua2V5fX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iaXNBcnJheShjb25maWcudmFsdWUpIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9ImFycmF5LXZhbHVlIj5cbiAgICAgICAge3sgY29uZmlnLnZhbHVlIHwgZ2V0UnBjVGVtcGxhdGVBcnJheVZpZXcgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iaXNPYmplY3QoY29uZmlnLnZhbHVlKSIgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENPYmplY3RSb3ciPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiAqbmdJZj0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgJiYgIWlzQXJyYXkoY29uZmlnLnZhbHVlKSJcbiAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdib29sZWFuLXRydWVcJzogY29uZmlnLnZhbHVlID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgIFwnYm9vbGVhbi1mYWxzZVwnOiBjb25maWcudmFsdWUgPT09IGZhbHNlICB9Ij5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29uZmlnLmtleSA9PT0gXCdtZXRob2RcJyBlbHNlIHZhbHVlIiBbbmdUZW1wbGF0ZU91dGxldF09IlNOTVBNZXRob2QiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZhbHVlPnt7IGNvbmZpZy52YWx1ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1NOTVBNZXRob2Q+e3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KGNvbmZpZy52YWx1ZSkgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNSUENPYmplY3RSb3c+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9ImxldCBzdWJDb25maWcgb2YgY29uZmlnLnZhbHVlIHwga2V5dmFsdWUgOiBvcmlnaW5hbE9yZGVyIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IHN1YkNvbmZpZywgaW5uZXJWYWx1ZTogdHJ1ZSB9Ij5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjB9Omhvc3QgLnRpdGxle2ZvbnQtd2VpZ2h0OjUwMH06aG9zdCAudGVtcGxhdGUta2V5e2NvbG9yOiMwMDAwMDA2MTtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4fTpob3N0IC5ib29sZWFuLXRydWUsOmhvc3QgLmJvb2xlYW4tZmFsc2V7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDtwYWRkaW5nOjAgMTJweDt3aWR0aDpmaXQtY29udGVudDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfTpob3N0IC5ib29sZWFuLWZhbHNle2NvbG9yOiNkMTI3MzA7YmFja2dyb3VuZC1jb2xvcjojZDEyNzMwMTR9Omhvc3QgLmJvb2xlYW4tdHJ1ZXtjb2xvcjojMTk4MDM4O2JhY2tncm91bmQtY29sb3I6IzE5ODAzODE0fTpob3N0IG1hdC1leHBhbnNpb24tcGFuZWx7bWFyZ2luLXRvcDoxMHB4O292ZXJmbG93OnZpc2libGV9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MDtmbGV4OjB9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uPm1hdC1pY29ue21hcmdpbi1sZWZ0OjE1cHg7Y29sb3I6IzAwMDAwMDYxfTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntwYWRkaW5nOjAgMCAwIDEycHh9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NDhweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgLm1hdC1jb250ZW50Lm1hdC1jb250ZW50LWhpZGUtdG9nZ2xle21hcmdpbi1yaWdodDowfTpob3N0IC5ycGMtcGFyYW1zLXJvd3tvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5ycGMtcGFyYW1zLXJvdyA6bm90KDpmaXJzdC1jaGlsZCl7d2hpdGUtc3BhY2U6cHJlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50ZW1wbGF0ZS1uYW1le292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2t9Omhvc3QgOjpuZy1kZWVwIC5tYXQtY29udGVudHthbGlnbi1pdGVtczpjZW50ZXJ9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2ZsZXg6MTttYXJnaW46MH06aG9zdCAuYXJyYXktdmFsdWV7bWFyZ2luLWxlZnQ6MTBweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3R5bGUsc2VsZWN0b3I6IltuZ1N0eWxlXSIsaW5wdXRzOlsibmdTdHlsZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsRGVzY3JpcHRpb24sc2VsZWN0b3I6Im1hdC1wYW5lbC1kZXNjcmlwdGlvbiJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOkNhLG5hbWU6ImdldFJwY1RlbXBsYXRlQXJyYXlWaWV3In1dfSl9fWUoIkdhdGV3YXlTZXJ2aWNlUlBDQ29ubmVjdG9yVGVtcGxhdGVzQ29tcG9uZW50IixGYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpGYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9Im1hdC1zdWJ0aXRsZS0xIHRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlcy10aXRsZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG48bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlICpuZ0Zvcj0ibGV0IHRlbXBsYXRlIG9mIHJwY1RlbXBsYXRlcyI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8bWF0LXBhbmVsLXRpdGxlIGNsYXNzPSJ0ZW1wbGF0ZS1uYW1lIj5cbiAgICAgIDxzcGFuIG1hdFRvb2x0aXA9Int7dGVtcGxhdGUubmFtZX19IiBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj57e3RlbXBsYXRlLm5hbWV9fTwvc3Bhbj5cbiAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD0iRGVsZXRlIiAoY2xpY2spPSJkZWxldGVUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IlVzZSIgKGNsaWNrKT0iYXBwbHlUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnBsYXlfYXJyb3c8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj0ibGV0IGNvbmZpZyBvZiB0ZW1wbGF0ZS5jb25maWcgfCBrZXlWYWx1ZUlzTm90RW1wdHkiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogY29uZmlnLCBpbm5lclZhbHVlOiBmYWxzZSB9Ij5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjUlBDVGVtcGxhdGVSZWYgbGV0LWNvbmZpZyBsZXQtaW5uZXJWYWx1ZT1cJ2lubmVyVmFsdWVcJz5cbiAgICA8ZGl2IFtmeExheW91dF09ImlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ2NvbHVtblwnOiBcJ3Jvd1wnIlxuICAgICAgICAgW2Z4TGF5b3V0QWxpZ25dPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSA/IFwnc3BhY2UtYmV0d2VlbiBjZW50ZXJcJyA6IFwnXCciXG4gICAgICAgICBbbmdTdHlsZV09IntcJ3BhZGRpbmctbGVmdFwnOiBpbm5lclZhbHVlID8gXCcxNnB4XCc6IFwnMFwnfSJcbiAgICAgICAgIGNsYXNzPSJycGMtcGFyYW1zLXJvdyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1rZXkiPlxuICAgICAgICB7eyFpbm5lclZhbHVlID8gKFwnZ2F0ZXdheS5ycGMuXCcgKyBjb25maWcua2V5IHwgdHJhbnNsYXRlKSA6IGNvbmZpZy5rZXl9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJpc0FycmF5KGNvbmZpZy52YWx1ZSkiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0iYXJyYXktdmFsdWUiPlxuICAgICAgICB7eyBjb25maWcudmFsdWUgfCBnZXRScGNUZW1wbGF0ZUFycmF5VmlldyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJpc09iamVjdChjb25maWcudmFsdWUpIiBbbmdUZW1wbGF0ZU91dGxldF09IlJQQ09iamVjdFJvdyI+PC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2ICpuZ0lmPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSAmJiAhaXNBcnJheShjb25maWcudmFsdWUpIlxuICAgICAgICAgICBbbmdDbGFzc109IntcJ2Jvb2xlYW4tdHJ1ZVwnOiBjb25maWcudmFsdWUgPT09IHRydWUsXG4gICAgICAgICAgICAgICAgICAgXCdib29sZWFuLWZhbHNlXCc6IGNvbmZpZy52YWx1ZSA9PT0gZmFsc2UgIH0iPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJjb25maWcua2V5ID09PSBcJ21ldGhvZFwnIGVsc2UgdmFsdWUiIFtuZ1RlbXBsYXRlT3V0bGV0XT0iU05NUE1ldGhvZCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdmFsdWU+e3sgY29uZmlnLnZhbHVlIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjU05NUE1ldGhvZD57eyBTTk1QTWV0aG9kc1RyYW5zbGF0aW9ucy5nZXQoY29uZmlnLnZhbHVlKSB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1JQQ09iamVjdFJvdz5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj0ibGV0IHN1YkNvbmZpZyBvZiBjb25maWcudmFsdWUgfCBrZXl2YWx1ZSA6IG9yaWdpbmFsT3JkZXIiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogc3ViQ29uZmlnLCBpbm5lclZhbHVlOiB0cnVlIH0iPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1leHBhbnNpb24tcGFuZWw+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC50ZW1wbGF0ZS1rZXl7Y29sb3I6IzAwMDAwMDYxO2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHh9Omhvc3QgLmJvb2xlYW4tdHJ1ZSw6aG9zdCAuYm9vbGVhbi1mYWxzZXtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4O3BhZGRpbmc6MCAxMnB4O3dpZHRoOmZpdC1jb250ZW50O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgLmJvb2xlYW4tZmFsc2V7Y29sb3I6I2QxMjczMDtiYWNrZ3JvdW5kLWNvbG9yOiNkMTI3MzAxNH06aG9zdCAuYm9vbGVhbi10cnVle2NvbG9yOiMxOTgwMzg7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4MTR9Omhvc3QgbWF0LWV4cGFuc2lvbi1wYW5lbHttYXJnaW4tdG9wOjEwcHg7b3ZlcmZsb3c6dmlzaWJsZX06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDowO2ZsZXg6MH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24+bWF0LWljb257bWFyZ2luLWxlZnQ6MTVweDtjb2xvcjojMDAwMDAwNjF9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye3BhZGRpbmc6MCAwIDAgMTJweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo0OHB4fTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAubWF0LWNvbnRlbnQubWF0LWNvbnRlbnQtaGlkZS10b2dnbGV7bWFyZ2luLXJpZ2h0OjB9Omhvc3QgLnJwYy1wYXJhbXMtcm93e292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLnJwYy1wYXJhbXMtcm93IDpub3QoOmZpcnN0LWNoaWxkKXt3aGl0ZS1zcGFjZTpwcmU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRlbXBsYXRlLW5hbWV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9ja306aG9zdCA6Om5nLWRlZXAgLm1hdC1jb250ZW50e2FsaWduLWl0ZW1zOmNlbnRlcn06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZmxleDoxO21hcmdpbjowfTpob3N0IC5hcnJheS12YWx1ZXttYXJnaW4tbGVmdDoxMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Nvbm5lY3RvclR5cGU6W3t0eXBlOmF9XSxjdHg6W3t0eXBlOmF9XSxzYXZlVGVtcGxhdGU6W3t0eXBlOmx9XSx1c2VUZW1wbGF0ZTpbe3R5cGU6bH1dLHJwY1RlbXBsYXRlczpbe3R5cGU6YX1dfX0pO2NsYXNzIElhe2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLkJyb2tlclNlY3VyaXR5VHlwZT1kbix0aGlzLnNlY3VyaXR5VHlwZXM9T2JqZWN0LnZhbHVlcyhkbiksdGhpcy5TZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXA9dW4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e30sdGhpcy5zZWN1cml0eUZvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltkbi5BTk9OWU1PVVMsW11dLHVzZXJuYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV19KSx0aGlzLm9ic2VydmVTZWN1cml0eUZvcm0oKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7ZS50eXBlfHwoZS50eXBlPWRuLkFOT05ZTU9VUyksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlKSx0aGlzLnVwZGF0ZVZpZXcoZSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUZvcm06e3ZhbGlkOiExfX19dXBkYXRlVmlldyhlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZShlKX11cGRhdGVWYWxpZGF0b3JzKGUpe2U9PT1kbi5CQVNJQz8odGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGFzc3dvcmQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfW9ic2VydmVTZWN1cml0eUZvcm0oKXt0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlVmlldyhlKSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PklhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+SWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbRCxIXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBBYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMuc2VuZENvbW1hbmQ9bmV3IGksdGhpcy5zYXZlVGVtcGxhdGU9bmV3IGksdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuYkFDbmV0UmVxdWVzdFR5cGVzPU9iamVjdC52YWx1ZXMoV3QpLHRoaXMuYkFDbmV0T2JqZWN0VHlwZXM9T2JqZWN0LnZhbHVlcyhLdCksdGhpcy5iTEVNZXRob2RzPU9iamVjdC52YWx1ZXMoWXQpLHRoaXMuY0FOQnl0ZU9yZGVycz1PYmplY3QudmFsdWVzKEp0KSx0aGlzLnNvY2tldE1ldGhvZFByb2Nlc3NpbmdzPU9iamVjdC52YWx1ZXMoWHQpLHRoaXMuc29ja2V0RW5jb2RpbmdzPU9iamVjdC52YWx1ZXMoYW4pLHRoaXMuc05NUE1ldGhvZHM9T2JqZWN0LnZhbHVlcyhlbiksdGhpcy5oVFRQTWV0aG9kcz1PYmplY3QudmFsdWVzKG5uKSx0aGlzLmJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXM9anQsdGhpcy5iQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXM9JHQsdGhpcy5iTEVNZXRob2RzVHJhbnNsYXRlcz1RdCx0aGlzLlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzVHJhbnNsYXRlcz1adCx0aGlzLlNOTVBNZXRob2RzVHJhbnNsYXRpb25zPXRuLHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy51cmxQYXR0ZXJuPS9eWy1hLXpBLVpkXyQ6e30/fis9XC8uMC05LV0qJC8sdGhpcy5udW1iZXJzT25seVBhdHRlcm49L15bMC05XSokLyx0aGlzLmhleE9ubHlQYXR0ZXJuPS9eWzAtOUEtRmEtZiBdKyQvLHRoaXMucHJvcGFnYXRlQ2hhbmdlPWU9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5jb21tYW5kRm9ybT10aGlzLmNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZSh0aGlzLmNvbm5lY3RvclR5cGUpLHRoaXMuY29tbWFuZEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9e307c3dpdGNoKHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5SRVNUOmNhc2UgX3QuUkVRVUVTVDplLmh0dHBIZWFkZXJzLmZvckVhY2goKGU9Pnt0W2UuaGVhZGVyTmFtZV09ZS52YWx1ZX0pKSxlLmh0dHBIZWFkZXJzPXR9dGhpcy5jb21tYW5kRm9ybS52YWxpZCYmdGhpcy5wcm9wYWdhdGVDaGFuZ2Uoey4uLnRoaXMuY29tbWFuZEZvcm0udmFsdWUsLi4uZX0pfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZShlKXtsZXQgdDtzd2l0Y2goZSl7Y2FzZSBfdC5CQUNORVQ6dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFR5cGU6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxvYmplY3RUeXBlOltudWxsLFtdXSxpZGVudGlmaWVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxwcm9wZXJ0eUlkOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7YnJlYWs7Y2FzZSBfdC5CTEU6dD10aGlzLmZiLmdyb3VwKHttZXRob2RSUEM6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sY2hhcmFjdGVyaXN0aWNVVUlEOlsiMDAwMDJBMDAtMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIzNEZCIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLHdpdGhSZXNwb25zZTpbITEsW11dfSk7YnJlYWs7Y2FzZSBfdC5DQU46dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbm9kZUlEOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxpc0V4dGVuZGVkSUQ6WyExLFtdXSxpc0ZEOlshMSxbXV0sYml0cmF0ZVN3aXRjaDpbITEsW11dLGRhdGFMZW5ndGg6W251bGwsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLGRhdGFCeXRlb3JkZXI6W251bGwsW11dLGRhdGFCZWZvcmU6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhQWZ0ZXI6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhSW5IRVg6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhRXhwcmVzc2lvbjpbbnVsbCxbdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuRlRQOnQ9dGhpcy5mYi5ncm91cCh7bWV0aG9kRmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuT0NQUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNPQ0tFVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLGVuY29kaW5nOlthbi5VVEZfOCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx3aXRoUmVzcG9uc2U6WyExLFtdXX0pO2JyZWFrO2Nhc2UgX3QuWE1QUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNOTVA6dD10aGlzLmZiLmdyb3VwKHtyZXF1ZXN0RmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx3aXRoUmVzcG9uc2U6WyExLFtdXSxvaWQ6dGhpcy5mYi5hcnJheShbXSxbdWUucmVxdWlyZWRdKX0pO2JyZWFrO2Nhc2UgX3QuUkVTVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwTWV0aG9kOltudWxsLFt1ZS5yZXF1aXJlZF1dLHJlcXVlc3RVcmxFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKHRoaXMudXJsUGF0dGVybildXSxyZXNwb25zZVRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSx0aW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdHJpZXM6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwSGVhZGVyczp0aGlzLmZiLmFycmF5KFtdKSxzZWN1cml0eTpbe30sW3VlLnJlcXVpcmVkXV19KTticmVhaztjYXNlIF90LlJFUVVFU1Q6dD10aGlzLmZiLmdyb3VwKHttZXRob2RGaWx0ZXI6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saHR0cE1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxyZXF1ZXN0VXJsRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybih0aGlzLnVybFBhdHRlcm4pXV0scmVzcG9uc2VUaW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdGltZW91dDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKDEwKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHRyaWVzOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxyZXF1ZXN0VmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5wYXR0ZXJuKGt0KV1dLGh0dHBIZWFkZXJzOnRoaXMuZmIuYXJyYXkoW10pfSk7YnJlYWs7ZGVmYXVsdDp0PXRoaXMuZmIuZ3JvdXAoe2NvbW1hbmQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFyYW1zOlt7fSxbSXRdXX0pfXJldHVybiB0fWFkZFNOTVBvaWQoZT1udWxsKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJvaWQiKTt0JiZ0LnB1c2godGhpcy5mYi5jb250cm9sKGUsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXSkse2VtaXRFdmVudDohMX0pfXJlbW92ZVNOTVBvaWQoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoIm9pZCIpLnJlbW92ZUF0KGUpfWFkZEhUVFBIZWFkZXIoZT17aGVhZGVyTmFtZTpudWxsLHZhbHVlOm51bGx9KXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJodHRwSGVhZGVycyIpLG49dGhpcy5mYi5ncm91cCh7aGVhZGVyTmFtZTpbZS5oZWFkZXJOYW1lLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlOltlLnZhbHVlLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7dCYmdC5wdXNoKG4se2VtaXRFdmVudDohMX0pfXJlbW92ZUhUVFBIZWFkZXIoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoImh0dHBIZWFkZXJzIikucmVtb3ZlQXQoZSl9Z2V0Rm9ybUFycmF5Q29udHJvbHMoZSl7cmV0dXJuIHRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpLmNvbnRyb2xzfW9wZW5FZGl0SlNPTkRpYWxvZyhlKXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlhbG9nLm9wZW4oUWUse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntqc29uVmFsdWU6dGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnZhbHVlLHJlcXVpcmVkOiEwfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnNldFZhbHVlKGUpfSkpfXNhdmUoKXt0aGlzLnNhdmVUZW1wbGF0ZS5lbWl0KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe31jbGVhckZyb21BcnJheUJ5TmFtZShlKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpO2Zvcig7MCE9PXQubGVuZ3RoOyl0LnJlbW92ZUF0KDApfXdyaXRlVmFsdWUoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtzd2l0Y2goZT1KKGUpLHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5TTk1QOnRoaXMuY2xlYXJGcm9tQXJyYXlCeU5hbWUoIm9pZCIpLGUub2lkLmZvckVhY2goKGU9Pnt0aGlzLmFkZFNOTVBvaWQoZSl9KSksZGVsZXRlIGUub2lkO2JyZWFrO2Nhc2UgX3QuUkVRVUVTVDpjYXNlIF90LlJFU1Q6dGhpcy5jbGVhckZyb21BcnJheUJ5TmFtZSgiaHR0cEhlYWRlcnMiKSxlLmh0dHBIZWFkZXJzJiZPYmplY3QuZW50cmllcyhlLmh0dHBIZWFkZXJzKS5mb3JFYWNoKChlPT57dGhpcy5hZGRIVFRQSGVhZGVyKHtoZWFkZXJOYW1lOmVbMF0sdmFsdWU6ZVsxXX0pfSkpLGRlbGV0ZSBlLmh0dHBIZWFkZXJzfXRoaXMuY29tbWFuZEZvcm0ucGF0Y2hWYWx1ZShlLHtvbmx5U2VsZjohMX0pfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6e2Nvbm5lY3RvclR5cGU6ImNvbm5lY3RvclR5cGUifSxvdXRwdXRzOntzZW5kQ29tbWFuZDoic2VuZENvbW1hbmQiLHNhdmVUZW1wbGF0ZToic2F2ZVRlbXBsYXRlIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hEZWZhdWx0LHNlbGVjdG9yOiJbbmdTd2l0Y2hEZWZhdWx0XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WmUuVGJKc29uVG9TdHJpbmdEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi1qc29uLXRvLXN0cmluZ10ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnouTWF0RGl2aWRlcixzZWxlY3RvcjoibWF0LWRpdmlkZXIiLGlucHV0czpbInZlcnRpY2FsIiwiaW5zZXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4QWxpZ25dLCBbZnhGbGV4QWxpZ24ueHNdLCBbZnhGbGV4QWxpZ24uc21dLCBbZnhGbGV4QWxpZ24ubWRdLCAgW2Z4RmxleEFsaWduLmxnXSwgW2Z4RmxleEFsaWduLnhsXSwgW2Z4RmxleEFsaWduLmx0LXNtXSwgW2Z4RmxleEFsaWduLmx0LW1kXSwgIFtmeEZsZXhBbGlnbi5sdC1sZ10sIFtmeEZsZXhBbGlnbi5sdC14bF0sIFtmeEZsZXhBbGlnbi5ndC14c10sIFtmeEZsZXhBbGlnbi5ndC1zbV0sICBbZnhGbGV4QWxpZ24uZ3QtbWRdLCBbZnhGbGV4QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeEZsZXhBbGlnbiIsImZ4RmxleEFsaWduLnhzIiwiZnhGbGV4QWxpZ24uc20iLCJmeEZsZXhBbGlnbi5tZCIsImZ4RmxleEFsaWduLmxnIiwiZnhGbGV4QWxpZ24ueGwiLCJmeEZsZXhBbGlnbi5sdC1zbSIsImZ4RmxleEFsaWduLmx0LW1kIiwiZnhGbGV4QWxpZ24ubHQtbGciLCJmeEZsZXhBbGlnbi5sdC14bCIsImZ4RmxleEFsaWduLmd0LXhzIiwiZnhGbGV4QWxpZ24uZ3Qtc20iLCJmeEZsZXhBbGlnbi5ndC1tZCIsImZ4RmxleEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUFycmF5TmFtZSxzZWxlY3RvcjoiW2Zvcm1BcnJheU5hbWVdIixpbnB1dHM6WyJmb3JtQXJyYXlOYW1lIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6SWEsc2VsZWN0b3I6InRiLXJlc3QtY29ubmVjdG9yLXNlY3VyaXR5In0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U2VydmljZVJQQ0Nvbm5lY3RvckNvbXBvbmVudCIsQWEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6QWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5BYSkpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpKZS5NYXREaWFsb2d9XSxwcm9wRGVjb3JhdG9yczp7Y29ubmVjdG9yVHlwZTpbe3R5cGU6YX1dLHNlbmRDb21tYW5kOlt7dHlwZTpsfV0sc2F2ZVRlbXBsYXRlOlt7dHlwZTpsfV19fSk7Y2xhc3MgTmEgZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LGEpLHRoaXMuc3RvcmU9ZSx0aGlzLnJvdXRlcj10LHRoaXMuZGF0YT1uLHRoaXMuZGlhbG9nUmVmPWEsdGhpcy5mYj1vLHRoaXMuY29uZmlnPXRoaXMuZGF0YS5jb25maWcsdGhpcy50ZW1wbGF0ZXM9dGhpcy5kYXRhLnRlbXBsYXRlcyx0aGlzLnRlbXBsYXRlTmFtZUN0cmw9dGhpcy5mYi5jb250cm9sKCIiLFt1ZS5yZXF1aXJlZF0pfXZhbGlkYXRlRHVwbGljYXRlTmFtZShlKXtjb25zdCB0PWUudmFsdWUudHJpbSgpO3JldHVybiEhdGhpcy50ZW1wbGF0ZXMuZmluZCgoZT0+ZS5uYW1lPT09dCkpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1zYXZlKCl7dGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnNldFZhbHVlKHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWx1ZS50cmltKCkpLHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnZhbHVlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5hLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOk5hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10b29sYmFyIGNvbG9yPSJwcmltYXJ5Ij5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy5zYXZlLXRlbXBsYXRlPC9oMj5cbiAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbWF0LXRvb2xiYXI+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0id2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayB0Yi12YWx1ZS10eXBlIiBzdHlsZT0iZmxleC1ncm93OiAwIj5cbiAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lPC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09InRlbXBsYXRlTmFtZUN0cmwiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0idGVtcGxhdGVOYW1lQ3RybC5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxkaXYgY2xhc3M9Im1hdC1tZGMtZm9ybS1maWVsZC1lcnJvciJcbiAgICAgICBzdHlsZT0ibWFyZ2luLXRvcDogLTE1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgZm9udC1zaXplOiAxNHB4OyJcbiAgICAgICAqbmdJZj0idmFsaWRhdGVEdXBsaWNhdGVOYW1lKHRlbXBsYXRlTmFtZUN0cmwpIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWUtZHVwbGljYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICA8YnV0dG9uIG1hdC1idXR0b25cbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICBbZGlzYWJsZWRdPSIhdGVtcGxhdGVOYW1lQ3RybC52YWxpZCJcbiAgICAgICAgICAoY2xpY2spPSJzYXZlKCkiPlxuICAgIHt7IFwnYWN0aW9uLnNhdmVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0FjdGlvbnMsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWFjdGlvbnNdLCBtYXQtZGlhbG9nLWFjdGlvbnMsIFttYXREaWFsb2dBY3Rpb25zXSIsaW5wdXRzOlsiYWxpZ24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dDb250ZW50LHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1jb250ZW50XSwgbWF0LWRpYWxvZy1jb250ZW50LCBbbWF0RGlhbG9nQ29udGVudF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb25uZWN0b3JUZW1wbGF0ZURpYWxvZ0NvbXBvbmVudCIsTmEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TmEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlLWRpYWxvZyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICA8aDIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnNhdmUtdGVtcGxhdGU8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJ3aWR0aDogNjAwcHgiIGNsYXNzPSJtYXQtY29udGVudCIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIHRiLXZhbHVlLXR5cGUiIHN0eWxlPSJmbGV4LWdyb3c6IDAiPlxuICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0idGVtcGxhdGVOYW1lQ3RybCIgcmVxdWlyZWQvPlxuICAgIDxtYXQtZXJyb3JcbiAgICAgICpuZ0lmPSJ0ZW1wbGF0ZU5hbWVDdHJsLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPGRpdiBjbGFzcz0ibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yIlxuICAgICAgIHN0eWxlPSJtYXJnaW4tdG9wOiAtMTVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDE0cHg7IlxuICAgICAgICpuZ0lmPSJ2YWxpZGF0ZUR1cGxpY2F0ZU5hbWUodGVtcGxhdGVOYW1lQ3RybCkiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1kdXBsaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIj5cbiAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgIFtkaXNhYmxlZF09IiF0ZW1wbGF0ZU5hbWVDdHJsLnZhbGlkIlxuICAgICAgICAgIChjbGljayk9InNhdmUoKSI+XG4gICAge3sgXCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBNYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKEduKSx0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy52YWx1ZVR5cGVzPVZuLHRoaXMub25DaGFuZ2U9ZT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXJndW1lbnRzOnRoaXMuZmIuYXJyYXkoW10pfSksdGhpcy5vYnNlcnZlVmFsdWVDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuY2xlYXJBcmd1bWVudHMoKSxlLmFyZ3VtZW50cz8ubWFwKCgoe3R5cGU6ZSx2YWx1ZTp0fSk9Pih7dHlwZTplLFtlXTp0fSkpKS5mb3JFYWNoKChlPT50aGlzLmFkZEFyZ3VtZW50KGUpKSksdGhpcy5jZHIubWFya0ZvckNoZWNrKCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlLm1ldGhvZCl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmFyZ3VtZW50cy5tYXAoKCh7dHlwZTplLC4uLnR9KT0+KHt0eXBlOmUsdmFsdWU6dFtlXX0pKSk7dGhpcy5vbkNoYW5nZSh7bWV0aG9kOmUubWV0aG9kLGFyZ3VtZW50czp0fSksdGhpcy5vblRvdWNoZWQoKX0pKX1yZW1vdmVBcmd1bWVudChlKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJhcmd1bWVudHMiKS5yZW1vdmVBdChlKX1hZGRBcmd1bWVudChlPXt9KXtjb25zdCB0PXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2UudHlwZT8/R24uU1RSSU5HXSxzdHJpbmc6W2Uuc3RyaW5nPz97dmFsdWU6IiIsZGlzYWJsZWQ6IShlZShlLHt9KXx8ZS5zdHJpbmcpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6ZS5pbnRlZ2VyPz8wLGRpc2FibGVkOiFpZShlLmludGVnZXIpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihMdCldXSxkb3VibGU6W3t2YWx1ZTplLmRvdWJsZT8/MCxkaXNhYmxlZDohaWUoZS5kb3VibGUpfSxbdWUucmVxdWlyZWRdXSxib29sZWFuOlt7dmFsdWU6ZS5ib29sZWFuPz8hMSxkaXNhYmxlZDohaWUoZS5ib29sZWFuKX0sW3VlLnJlcXVpcmVkXV19KTt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKHQpLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpLnB1c2godCx7ZW1pdEV2ZW50OiExfSl9Y2xlYXJBcmd1bWVudHMoKXtjb25zdCBlPXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpO2Zvcig7MCE9PWUubGVuZ3RoOyllLnJlbW92ZUF0KDApfW9ic2VydmVUeXBlQ2hhbmdlKGUpe2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e2UuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoInR5cGUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KHQpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpNYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpNYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+TWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCB0Yi1mbGV4IG5vLXBhZGRpbmctdG9wIGhpbnQtY29udGFpbmVyIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLmhpbnQub3BjLW1ldGhvZFwnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Im11bHRpcGx5Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxmaWVsZHNldCBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIGFyZ3VtZW50cy1jb250YWluZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZvcm1BcnJheU5hbWU9ImFyZ3VtZW50cyI+XG4gICAgPHN0cm9uZz5cbiAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9zdHJvbmc+XG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAqbmdGb3I9ImxldCBhcmd1bWVudEZvcm1Hcm91cCBvZiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FyZ3VtZW50c1wnKVtcJ2NvbnRyb2xzXCddOyBsZXQgaSA9IGluZGV4IiBbZm9ybUdyb3VwXT0iYXJndW1lbnRGb3JtR3JvdXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIHR5cGUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTE4IiBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHZhbHVlVHlwZSBvZiB2YWx1ZVR5cGVLZXlzIiBbdmFsdWVdPSJ2YWx1ZVR5cGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB2YWx1ZS1jb250YWluZXIiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuU1RSSU5HIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9InN0cmluZyJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLkRPVUJMRSIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJkb3VibGUiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5CT09MRUFOIiBmb3JtQ29udHJvbE5hbWU9ImJvb2xlYW4iPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJ0cnVlIj50cnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVBcmd1bWVudChpKSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgIChjbGljayk9ImFkZEFyZ3VtZW50KCkiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy5hZGQtYXJndW1lbnRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2ZpZWxkc2V0PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuYXJndW1lbnRzLWNvbnRhaW5lcnttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnR5cGUtY29udGFpbmVye3dpZHRoOjQwJX06aG9zdCAudmFsdWUtY29udGFpbmVye3dpZHRoOjUwJX06aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp3ZS5NYXRTZWxlY3RUcmlnZ2VyLHNlbGVjdG9yOiJtYXQtc2VsZWN0LXRyaWdnZXIifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEdhcERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRHYXBdLCBbZnhMYXlvdXRHYXAueHNdLCBbZnhMYXlvdXRHYXAuc21dLCBbZnhMYXlvdXRHYXAubWRdLCAgW2Z4TGF5b3V0R2FwLmxnXSwgW2Z4TGF5b3V0R2FwLnhsXSwgW2Z4TGF5b3V0R2FwLmx0LXNtXSwgW2Z4TGF5b3V0R2FwLmx0LW1kXSwgIFtmeExheW91dEdhcC5sdC1sZ10sIFtmeExheW91dEdhcC5sdC14bF0sIFtmeExheW91dEdhcC5ndC14c10sIFtmeExheW91dEdhcC5ndC1zbV0sICBbZnhMYXlvdXRHYXAuZ3QtbWRdLCBbZnhMYXlvdXRHYXAuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEdhcCIsImZ4TGF5b3V0R2FwLnhzIiwiZnhMYXlvdXRHYXAuc20iLCJmeExheW91dEdhcC5tZCIsImZ4TGF5b3V0R2FwLmxnIiwiZnhMYXlvdXRHYXAueGwiLCJmeExheW91dEdhcC5sdC1zbSIsImZ4TGF5b3V0R2FwLmx0LW1kIiwiZnhMYXlvdXRHYXAubHQtbGciLCJmeExheW91dEdhcC5sdC14bCIsImZ4TGF5b3V0R2FwLmd0LXhzIiwiZnhMYXlvdXRHYXAuZ3Qtc20iLCJmeExheW91dEdhcC5ndC1tZCIsImZ4TGF5b3V0R2FwLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhBbGlnbl0sIFtmeEZsZXhBbGlnbi54c10sIFtmeEZsZXhBbGlnbi5zbV0sIFtmeEZsZXhBbGlnbi5tZF0sICBbZnhGbGV4QWxpZ24ubGddLCBbZnhGbGV4QWxpZ24ueGxdLCBbZnhGbGV4QWxpZ24ubHQtc21dLCBbZnhGbGV4QWxpZ24ubHQtbWRdLCAgW2Z4RmxleEFsaWduLmx0LWxnXSwgW2Z4RmxleEFsaWduLmx0LXhsXSwgW2Z4RmxleEFsaWduLmd0LXhzXSwgW2Z4RmxleEFsaWduLmd0LXNtXSwgIFtmeEZsZXhBbGlnbi5ndC1tZF0sIFtmeEZsZXhBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4RmxleEFsaWduIiwiZnhGbGV4QWxpZ24ueHMiLCJmeEZsZXhBbGlnbi5zbSIsImZ4RmxleEFsaWduLm1kIiwiZnhGbGV4QWxpZ24ubGciLCJmeEZsZXhBbGlnbi54bCIsImZ4RmxleEFsaWduLmx0LXNtIiwiZnhGbGV4QWxpZ24ubHQtbWQiLCJmeEZsZXhBbGlnbi5sdC1sZyIsImZ4RmxleEFsaWduLmx0LXhsIiwiZnhGbGV4QWxpZ24uZ3QteHMiLCJmeEZsZXhBbGlnbi5ndC1zbSIsImZ4RmxleEFsaWduLmd0LW1kIiwiZnhGbGV4QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1BcnJheU5hbWUsc2VsZWN0b3I6Iltmb3JtQXJyYXlOYW1lXSIsaW5wdXRzOlsiZm9ybUFycmF5TmFtZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk1hLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk1hKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm9wYy1tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJtdWx0aXBseSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8ZmllbGRzZXQgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBhcmd1bWVudHMtY29udGFpbmVyIiBmeExheW91dD0iY29sdW1uIiBmb3JtQXJyYXlOYW1lPSJhcmd1bWVudHMiPlxuICAgIDxzdHJvbmc+XG4gICAgICA8c3BhbiBjbGFzcz0iZmllbGRzLWxhYmVsIj57eyBcJ2dhdGV3YXkucnBjLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvc3Ryb25nPlxuICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgKm5nRm9yPSJsZXQgYXJndW1lbnRGb3JtR3JvdXAgb2YgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhcmd1bWVudHNcJylbXCdjb250cm9sc1wnXTsgbGV0IGkgPSBpbmRleCIgW2Zvcm1Hcm91cF09ImFyZ3VtZW50Rm9ybUdyb3VwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB0eXBlLWNvbnRhaW5lciIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdmFsdWUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLklOVEVHRVIiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iaW50ZWdlciIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5ET1VCTEUiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iZG91YmxlIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0idHJ1ZSI+dHJ1ZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iZmFsc2UiPmZhbHNlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXJndW1lbnRGb3JtR3JvdXAuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQXJndW1lbnQoaSkiXG4gICAgICAgICAgICAgIGNsYXNzPSJ0Yi1ib3gtYnV0dG9uIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICBmeEZsZXhBbGlnbj0ic3RhcnQiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGRBcmd1bWVudCgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWFyZ3VtZW50XCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9maWVsZHNldD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFyZ3VtZW50cy1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC50eXBlLWNvbnRhaW5lcnt3aWR0aDo0MCV9Omhvc3QgLnZhbHVlLWNvbnRhaW5lcnt3aWR0aDo1MCV9Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyBFYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5vbkNoYW5nZT1lPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXF1ZXN0VG9waWNFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVG9waWNFeHByZXNzaW9uOlt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUaW1lb3V0Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLm1pbigxMCksdWUucGF0dGVybihMdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVXaXRoUmVzcG9uc2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWxpZD9udWxsOntycGNQYXJhbWV0ZXJzRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlLndpdGhSZXNwb25zZSl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW9ic2VydmVXaXRoUmVzcG9uc2UoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ3aXRoUmVzcG9uc2UiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+dGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX10b2dnbGVSZXNwb25zZUZpZWxkcyhlKXtjb25zdCB0PXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInJlc3BvbnNlVG9waWNFeHByZXNzaW9uIiksbj10aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKTtlPyh0LmVuYWJsZSgpLG4uZW5hYmxlKCkpOih0LmRpc2FibGUoKSxuLmRpc2FibGUoKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+RWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXF1ZXN0LyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXJnaW4iIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSIgZm9ybUNvbnRyb2xOYW1lPSJ3aXRoUmVzcG9uc2UiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMud2l0aFJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9InNlbnNvci8ke2RldmljZU5hbWV9L3Jlc3BvbnNlLyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd3aXRoUmVzcG9uc2VcJyk/LnZhbHVlIj5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VUaW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9IjEwMDAwIiBtaW49IjEwIiBzdGVwPSIxIi8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAubWF0LW1kYy1zbGlkZS10b2dnbGUubWFyZ2lue21hcmdpbi1ib3R0b206MTBweDttYXJnaW4tbGVmdDoxMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkVhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9ImVjaG8iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0ic2Vuc29yLyR7ZGV2aWNlTmFtZX0vcmVxdWVzdC8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWFyZ2luIiAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3dpdGhSZXNwb25zZVwnKT8udmFsdWUiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXNwb25zZS8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIxMDAwMCIgbWluPSIxMCIgc3RlcD0iMSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L25nLWNvbnRhaW5lcj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBxYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNFZGl0YWJsZURhdGFUeXBlcz10YSx0aGlzLk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcD16dCx0aGlzLm1vZGJ1c0RhdGFUeXBlcz1PYmplY3QudmFsdWVzKGVhKSx0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcz1bNSw2LDE1LDE2XSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVszLDQsNiwxNl0sdGhpcy5yZWFkRnVuY3Rpb25Db2Rlcz1bMSwyLDMsNF0sdGhpcy5iaXRzRnVuY3Rpb25Db2Rlcz1bLi4udGhpcy5yZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLndyaXRlRnVuY3Rpb25Db2Rlc10sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2VhLkJZVEVTLFt1ZS5yZXF1aXJlZF1dLGZ1bmN0aW9uQ29kZTpbdGhpcy5kZWZhdWx0RnVuY3Rpb25Db2Rlc1swXSxbdWUucmVxdWlyZWRdXSx2YWx1ZTpbe3ZhbHVlOiIiLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxhZGRyZXNzOltudWxsLFt1ZS5yZXF1aXJlZF1dLG9iamVjdHNDb3VudDpbMSxbdWUucmVxdWlyZWRdXX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2Rlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWUpLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpLHRoaXMub2JzZXJ2ZUtleURhdGFUeXBlKCksdGhpcy5vYnNlcnZlRnVuY3Rpb25Db2RlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlS2V5RGF0YVR5cGUoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoIm9iamVjdHNDb3VudCIpLnBhdGNoVmFsdWUobmFbZV0se2VtaXRFdmVudDohMX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlKX0pKX1vYnNlcnZlRnVuY3Rpb25Db2RlKCl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgiZnVuY3Rpb25Db2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWx1ZUVuYWJsaW5nKGUpKSl9dXBkYXRlVmFsdWVFbmFibGluZyhlKXt0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyhlKT90aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ2YWx1ZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6KHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInZhbHVlIikuc2V0VmFsdWUobnVsbCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgidmFsdWUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSl9dXBkYXRlRnVuY3Rpb25Db2RlcyhlKXt0aGlzLmZ1bmN0aW9uQ29kZXM9ZT09PWVhLkJJVFM/dGhpcy5iaXRzRnVuY3Rpb25Db2Rlczp0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzLHRoaXMuZnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJmdW5jdGlvbkNvZGUiKS52YWx1ZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUodGhpcy5mdW5jdGlvbkNvZGVzWzBdLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cWEsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnFhKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy1yZXNwb25zZS1yZWFkaW5nXCcgfCB0cmFuc2xhdGUgfX08YnI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9uc1wnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNEYXRhVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IHR5cGUgfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZnVuY3Rpb25Db2RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29kZSBvZiBmdW5jdGlvbkNvZGVzIiBbdmFsdWVdPSJjb2RlIj57eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iNTAwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImFkZHJlc3MiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYWRkcmVzcy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FkZHJlc3NcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm9iamVjdHNDb3VudFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICBtaW49IjEiXG4gICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJ3cml0ZUZ1bmN0aW9uQ29kZXMuaW5jbHVkZXMocnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdmdW5jdGlvbkNvZGVcJykudmFsdWUpIiBmeEZsZXggZnhMYXlvdXQ9InJvdyI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMTAwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndmFsdWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIlxuICAgICAgPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5xYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggbm8tcGFkZGluZy10b3AgaGludC1jb250YWluZXIiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtcmVzcG9uc2UtcmVhZGluZ1wnIHwgdHJhbnNsYXRlIH19PGJyPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtd3JpdGluZy1mdW5jdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzRGF0YVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyB0eXBlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmZ1bmN0aW9uQ29kZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImZ1bmN0aW9uQ29kZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvZGUgb2YgZnVuY3Rpb25Db2RlcyIgW3ZhbHVlXT0iY29kZSI+e3sgTW9kYnVzRnVuY3Rpb25Db2RlVHJhbnNsYXRpb25zTWFwLmdldChjb2RlKSB8IHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjUwMDAwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJhZGRyZXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmFkZHJlc3MtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnYWRkcmVzc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5vYmplY3RzQ291bnRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9Im51bWJlciJcbiAgICAgICAgbWluPSIxIlxuICAgICAgICBtYXg9IjUwMDAwIlxuICAgICAgICBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJvYmplY3RzQ291bnQiXG4gICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgIFtyZWFkb25seV09IiFNb2RidXNFZGl0YWJsZURhdGFUeXBlcy5pbmNsdWRlcyhycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpIlxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0id3JpdGVGdW5jdGlvbkNvZGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnZnVuY3Rpb25Db2RlXCcpLnZhbHVlKSIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjEwMCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciJcbiAgICAgID5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBEYXtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMudXRpbHM9bix0aGlzLmNkPWEsdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPW8sdGhpcy5jb250ZW50VHlwZXM9Ryx0aGlzLlJQQ0NvbW1hbmRzPVsiUGluZyIsIlN0YXRzIiwiRGV2aWNlcyIsIlVwZGF0ZSIsIlZlcnNpb24iLCJSZXN0YXJ0IiwiUmVib290Il0sdGhpcy50ZW1wbGF0ZXM9W10sdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy50eXBlc1dpdGhVcGRhdGVkUGFyYW1zPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVUZW1wbGF0ZXMoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpLGRhdGFMb2FkaW5nOigpPT57fX19LHRoaXMuY29tbWFuZEZvcm09dGhpcy5mYi5ncm91cCh7Y29tbWFuZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx0aW1lOls2MCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV0scGFyYW1zOlsie30iLFtJdF1dLHJlc3VsdDpbbnVsbF19KX1uZ09uSW5pdCgpe2lmKHRoaXMuaXNDb25uZWN0b3I9dGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3IsdGhpcy5pc0Nvbm5lY3Rvcil7dGhpcy5jb25uZWN0b3JUeXBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpLmNvbm5lY3Rvcl9ycGMudmFsdWUudHlwZTtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udGFyZ2V0RGV2aWNlSWQsZW50aXR5TmFtZToiQ29ubmVjdG9yIixhdHRyaWJ1dGVzOlt7bmFtZTpgJHt0aGlzLmNvbm5lY3RvclR5cGV9X3RlbXBsYXRlYH1dfV07dGhpcy5jdHguc3Vic2NyaXB0aW9uQXBpLmNyZWF0ZVN1YnNjcmlwdGlvbkZyb21JbmZvKEEubGF0ZXN0LGUsdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zLCExLCEwKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnN1YnNjcmlwdGlvbj1lfSkpfWVsc2UgdGhpcy5jb21tYW5kRm9ybS5nZXQoImNvbW1hbmQiKS5zZXRWYWx1ZSh0aGlzLlJQQ0NvbW1hbmRzWzBdKX1zZW5kQ29tbWFuZChlKXt0aGlzLnJlc3VsdFRpbWU9bnVsbDtjb25zdCB0PWV8fHRoaXMuY29tbWFuZEZvcm0udmFsdWUsbj10aGlzLmlzQ29ubmVjdG9yP2Ake3RoaXMuY29ubmVjdG9yVHlwZX1fYDoiZ2F0ZXdheV8iLGE9dGhpcy5pc0Nvbm5lY3Rvcj90aGlzLmdldENvbW1hbmRGcm9tUGFyYW1zQnlUeXBlKHQucGFyYW1zKTp0LmNvbW1hbmQudG9Mb3dlckNhc2UoKSxvPXQucGFyYW1zO3RoaXMuY3R4LmNvbnRyb2xBcGkuc2VuZFR3b1dheUNvbW1hbmQobithLG8sdC50aW1lKS5zdWJzY3JpYmUoe25leHQ6ZT0+e3RoaXMucmVzdWx0VGltZT0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLmNvbW1hbmRGb3JtLmdldCgicmVzdWx0Iikuc2V0VmFsdWUoSlNPTi5zdHJpbmdpZnkoZSkpfSxlcnJvcjplPT57dGhpcy5yZXN1bHRUaW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGNvbnNvbGUuZXJyb3IoZSksdGhpcy5jb21tYW5kRm9ybS5nZXQoInJlc3VsdCIpLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGUuZXJyb3IpKX19KX1nZXRDb21tYW5kRnJvbVBhcmFtc0J5VHlwZShlKXtzd2l0Y2godGhpcy5jb25uZWN0b3JUeXBlKXtjYXNlIF90Lk1RVFQ6Y2FzZSBfdC5GVFA6Y2FzZSBfdC5TTk1QOmNhc2UgX3QuUkVTVDpjYXNlIF90LlJFUVVFU1Q6cmV0dXJuIGUubWV0aG9kRmlsdGVyO2Nhc2UgX3QuTU9EQlVTOnJldHVybiBlLnRhZztjYXNlIF90LkJBQ05FVDpjYXNlIF90LkNBTjpjYXNlIF90Lk9QQ1VBOnJldHVybiBlLm1ldGhvZDtjYXNlIF90LkJMRTpjYXNlIF90Lk9DUFA6Y2FzZSBfdC5TT0NLRVQ6Y2FzZSBfdC5YTVBQOnJldHVybiBlLm1ldGhvZFJQQztkZWZhdWx0OnJldHVybiBlLmNvbW1hbmR9fXNhdmVUZW1wbGF0ZSgpe3RoaXMuZGlhbG9nLm9wZW4oTmEse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntjb25maWc6dGhpcy5jb21tYW5kRm9ybS52YWx1ZS5wYXJhbXMsdGVtcGxhdGVzOnRoaXMudGVtcGxhdGVzfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57aWYoZSl7Y29uc3QgdD17bmFtZTplLGNvbmZpZzp0aGlzLmNvbW1hbmRGb3JtLnZhbHVlLnBhcmFtc30sbj10aGlzLnRlbXBsYXRlcyxhPW4uZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO2E+LTEmJm4uc3BsaWNlKGEsMSksbi5wdXNoKHQpO2NvbnN0IG89YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5Om8sdmFsdWU6bn1dKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9fSkpfXVzZVRlbXBsYXRlKGUpe3RoaXMuY29tbWFuZEZvcm0uZ2V0KCJwYXJhbXMiKS5wYXRjaFZhbHVlKGUuY29uZmlnKX11cGRhdGVUZW1wbGF0ZXMoKXt0aGlzLnRlbXBsYXRlcz10aGlzLnN1YnNjcmlwdGlvbi5kYXRhWzBdLmRhdGFbMF1bMV0ubGVuZ3RoP0pTT04ucGFyc2UodGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhWzBdWzFdKTpbXSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVFcnJvcihlKXtjb25zdCB0PXRoaXMudXRpbHMucGFyc2VFeGNlcHRpb24oZSk7bGV0IG49dC5uYW1lO3QubWVzc2FnZSYmKG4rPSI6ICIrdC5tZXNzYWdlKSxjb25zb2xlLmVycm9yKG4pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RGEsZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpEYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBmeExheW91dD0iY29sdW1uIiBmeEZsZXggW25nQ2xhc3NdPSJ7XCdib3JkZXJcJzogaXNDb25uZWN0b3J9Ij5cbiAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dC5sdC1zbT0iY29sdW1uIiBjbGFzcz0iY29tbWFuZC1mb3JtIiBmeExheW91dEdhcD0iMTBweCIgW2Zvcm1Hcm91cF09ImNvbW1hbmRGb3JtIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSIhaXNDb25uZWN0b3I7IGVsc2UgY29ubmVjdG9yRm9ybSI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29tbWFuZCBvZiBSUENDb21tYW5kcyIgW3ZhbHVlXT0iY29tbWFuZCI+XG4gICAgICAgICAgICB7eyBjb21tYW5kIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LW1zXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiLz5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZEZvcm0uZ2V0KFwndGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5pbnZhbGlkIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNlbmRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb25uZWN0b3JGb3JtPlxuICAgICAgPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yXG4gICAgICAgICpuZ0lmPSIhdHlwZXNXaXRoVXBkYXRlZFBhcmFtcy5oYXMoY29ubmVjdG9yVHlwZSkgZWxzZSB1cGRhdGVkUGFyYW1ldGVycyJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiXG4gICAgICAgIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSJcbiAgICAgICAgKHNlbmRDb21tYW5kKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgKHNhdmVUZW1wbGF0ZSk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgLz5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlZFBhcmFtZXRlcnM+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InJwYy1wYXJhbWV0ZXJzIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0Yi1mb3JtLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRpdGxlXCcgfCB0cmFuc2xhdGU6IHt0eXBlOiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlcy5nZXQoY29ubmVjdG9yVHlwZSl9IH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1xdHQtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NUVRUIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgICAgPHRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuT1BDVUEiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUtYWN0aW9ucyIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2F2ZVRlbXBsYXRlKCkiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmdldChcJ3BhcmFtc1wnKS5pbnZhbGlkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxzZWN0aW9uIGNsYXNzPSJyZXN1bHQtYmxvY2siIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPHNwYW4+e3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXJlc3VsdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8ZGl2ICpuZ0lmPSJyZXN1bHRUaW1lIiBjbGFzcz0icmVzdWx0LXRpbWUiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+c2NoZWR1bGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyByZXN1bHRUaW1lIHwgZGF0ZTogXCd5eXl5L01NL2RkIEhIOm1tOnNzXCcgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG4gICAgPHRiLWpzb24tY29udGVudCBbY29udGVudFR5cGVdPSJjb250ZW50VHlwZXMuSlNPTiIgcmVhZG9ubHk9InRydWUiIGZvcm1Db250cm9sTmFtZT0icmVzdWx0Ij48L3RiLWpzb24tY29udGVudD5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG48dGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIGZ4RmxleD0iMzAiICpuZ0lmPSJpc0Nvbm5lY3RvciIgY2xhc3M9ImJvcmRlciIgW3JwY1RlbXBsYXRlc109InRlbXBsYXRlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N0eF09ImN0eCIgW2Nvbm5lY3RvclR5cGVdPSJjb25uZWN0b3JUeXBlIiAodXNlVGVtcGxhdGUpPSJ1c2VUZW1wbGF0ZSgkZXZlbnQpIj5cbjwvdGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3BhZGRpbmc6MCA1cHh9Omhvc3Q+KntoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfTpob3N0PnRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlczpsYXN0LWNoaWxke21hcmdpbi1sZWZ0OjEwcHh9Omhvc3QgLmNvbW1hbmQtZm9ybXtmbGV4LXdyYXA6bm93cmFwO3BhZGRpbmc6MCA1cHggNXB4fTpob3N0IC5jb21tYW5kLWZvcm0+YnV0dG9ue21hcmdpbi10b3A6MTBweH06aG9zdCAucnBjLXBhcmFtZXRlcnN7d2lkdGg6MTAwJX06aG9zdCAucmVzdWx0LWJsb2Nre3BhZGRpbmc6MCA1cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFue2ZvbnQtd2VpZ2h0OjYwMDtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjI1cHg7ei1pbmRleDo1O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAucmVzdWx0LWJsb2NrPnNwYW4gLnJlc3VsdC10aW1lIHNwYW57cGFkZGluZy1sZWZ0OjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jayB0Yi1qc29uLWNvbnRlbnR7ZmxleDoxfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0NsYXNzLHNlbGVjdG9yOiJbbmdDbGFzc10iLGlucHV0czpbImNsYXNzIiwibmdDbGFzcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6c3QuSnNvbkNvbnRlbnRDb21wb25lbnQsc2VsZWN0b3I6InRiLWpzb24tY29udGVudCIsaW5wdXRzOlsibGFiZWwiLCJjb250ZW50VHlwZSIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwidGJQbGFjZWhvbGRlciIsImhpZGVUb29sYmFyIiwicmVhZG9ubHkiLCJ2YWxpZGF0ZUNvbnRlbnQiLCJ2YWxpZGF0ZU9uQ2hhbmdlIiwicmVxdWlyZWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOk1hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbW9kYnVzLXJwYy1wYXJhbWV0ZXJzIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIiwiY3R4IiwicnBjVGVtcGxhdGVzIl0sb3V0cHV0czpbInNhdmVUZW1wbGF0ZSIsInVzZVRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIl0sb3V0cHV0czpbInNlbmRDb21tYW5kIiwic2F2ZVRlbXBsYXRlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb21wb25lbnQiLERhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkRhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgZnhGbGV4IFtuZ0NsYXNzXT0ie1wnYm9yZGVyXCc6IGlzQ29ubmVjdG9yfSI+XG4gIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtc209ImNvbHVtbiIgY2xhc3M9ImNvbW1hbmQtZm9ybSIgZnhMYXlvdXRHYXA9IjEwcHgiIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIWlzQ29ubmVjdG9yOyBlbHNlIGNvbm5lY3RvckZvcm0iPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgUlBDQ29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQiPlxuICAgICAgICAgICAge3sgY29tbWFuZCB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1tc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InRpbWUiIHR5cGU9Im51bWJlciIgbWluPSIxIi8+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRGb3JtLmdldChcJ3RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29ubmVjdG9yRm9ybT5cbiAgICAgIDx0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3RvclxuICAgICAgICAqbmdJZj0iIXR5cGVzV2l0aFVwZGF0ZWRQYXJhbXMuaGFzKGNvbm5lY3RvclR5cGUpIGVsc2UgdXBkYXRlZFBhcmFtZXRlcnMiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIlxuICAgICAgICBbY29ubmVjdG9yVHlwZV09ImNvbm5lY3RvclR5cGUiXG4gICAgICAgIChzZW5kQ29tbWFuZCk9InNlbmRDb21tYW5kKCkiXG4gICAgICAgIChzYXZlVGVtcGxhdGUpPSJzYXZlVGVtcGxhdGUoKSJcbiAgICAgIC8+XG4gICAgICA8bmctdGVtcGxhdGUgI3VwZGF0ZWRQYXJhbWV0ZXJzPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJycGMtcGFyYW1ldGVycyI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGItZm9ybS1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50aXRsZVwnIHwgdHJhbnNsYXRlOiB7dHlwZTogZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXMuZ2V0KGNvbm5lY3RvclR5cGUpfSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NT0RCVVMiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRlbXBsYXRlLWFjdGlvbnMiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zYXZlLXRlbXBsYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uZ2V0KFwncGFyYW1zXCcpLmludmFsaWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8c2VjdGlvbiBjbGFzcz0icmVzdWx0LWJsb2NrIiBbZm9ybUdyb3VwXT0iY29tbWFuZEZvcm0iPlxuICAgIDxzcGFuPnt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1yZXN1bHRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPGRpdiAqbmdJZj0icmVzdWx0VGltZSIgY2xhc3M9InJlc3VsdC10aW1lIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnNjaGVkdWxlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgcmVzdWx0VGltZSB8IGRhdGU6IFwneXl5eS9NTS9kZCBISDptbTpzc1wnIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9zcGFuPlxuICAgIDx0Yi1qc29uLWNvbnRlbnQgW2NvbnRlbnRUeXBlXT0iY29udGVudFR5cGVzLkpTT04iIHJlYWRvbmx5PSJ0cnVlIiBmb3JtQ29udHJvbE5hbWU9InJlc3VsdCI+PC90Yi1qc29uLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcyBmeEZsZXg9IjMwIiAqbmdJZj0iaXNDb25uZWN0b3IiIGNsYXNzPSJib3JkZXIiIFtycGNUZW1wbGF0ZXNdPSJ0ZW1wbGF0ZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdHhdPSJjdHgiIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSIgKHVzZVRlbXBsYXRlKT0idXNlVGVtcGxhdGUoJGV2ZW50KSI+XG48L3RiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcz5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztwYWRkaW5nOjAgNXB4fTpob3N0Pip7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b306aG9zdD50Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXM6bGFzdC1jaGlsZHttYXJnaW4tbGVmdDoxMHB4fTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcDtwYWRkaW5nOjAgNXB4IDVweH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLnJwYy1wYXJhbWV0ZXJze3dpZHRoOjEwMCV9Omhvc3QgLnJlc3VsdC1ibG9ja3twYWRkaW5nOjAgNXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxfTpob3N0IC5yZXN1bHQtYmxvY2s+c3Bhbntmb250LXdlaWdodDo2MDA7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2s+c3BhbiAucmVzdWx0LXRpbWV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDoyNXB4O3otaW5kZXg6NTtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZSBzcGFue3BhZGRpbmctbGVmdDoxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2sgdGItanNvbi1jb250ZW50e2ZsZXg6MX06aG9zdCAuYm9yZGVye3BhZGRpbmc6MTZweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5VdGlsc1NlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTtjbGFzcyBQYSBleHRlbmRzIFB7Y29uc3RydWN0b3IoZSx0LG4sYSxvKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5nYXRld2F5TmFtZT10aGlzLmRhdGEuZ2F0ZXdheU5hbWUsdGhpcy5nYXRld2F5Q29udHJvbD10aGlzLmZiLmNvbnRyb2woIiIpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX10dXJuT2ZmKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoITApfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6UGEsc2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbicsZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fXZhciBHYTtlKCJHYXRld2F5UmVtb3RlQ29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCIsUGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pLGZ1bmN0aW9uKGUpe2UudGxzPSJ0bHMiLGUuYWNjZXNzVG9rZW49ImFjY2Vzc1Rva2VuIn0oR2F8fChHYT17fSkpO2NvbnN0IE9hPSJjb25maWd1cmF0aW9uX2RyYWZ0cyIsUmE9IlJlbW90ZUxvZ2dpbmdMZXZlbCIsVmE9bmV3IE1hcChbW0dhLnRscywiZ2F0ZXdheS5zZWN1cml0eS10eXBlcy50bHMiXSxbR2EuYWNjZXNzVG9rZW4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl1dKTt2YXIgQmEsVWE7IWZ1bmN0aW9uKGUpe2Uubm9uZT0iTk9ORSIsZS5jcml0aWNhbD0iQ1JJVElDQUwiLGUuZXJyb3I9IkVSUk9SIixlLndhcm5pbmc9IldBUk5JTkciLGUuaW5mbz0iSU5GTyIsZS5kZWJ1Zz0iREVCVUcifShCYXx8KEJhPXt9KSksZnVuY3Rpb24oZSl7ZS5tZW1vcnk9Im1lbW9yeSIsZS5maWxlPSJmaWxlIn0oVWF8fChVYT17fSkpO2NvbnN0IF9hPW5ldyBNYXAoW1tVYS5tZW1vcnksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtVYS5maWxlLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl1dKTt2YXIgSGE7IWZ1bmN0aW9uKGUpe2UubXF0dD0iTVFUVCIsZS5tb2RidXM9Ik1vZGJ1cyIsZS5vcGN1YT0iT1BDLVVBIixlLmJsZT0iQkxFIixlLnJlcXVlc3Q9IlJlcXVlc3QiLGUuY2FuPSJDQU4iLGUuYmFjbmV0PSJCQUNuZXQiLGUuY3VzdG9tPSJDdXN0b20ifShIYXx8KEhhPXt9KSk7Y29uc3QgemE9e2NvbmZpZzp7fSxuYW1lOiIiLGNvbmZpZ1R5cGU6bnVsbCxlbmFibGVkOiExfTtmdW5jdGlvbiBXYShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZS52YWx1ZSk9PT1KU09OLnN0cmluZ2lmeSh7fSk/e3ZhbGlkSlNPTjohMH06bnVsbH1jb25zdCBqYT0nW2xvZ2dlcnNdfX1rZXlzPXJvb3QsIHNlcnZpY2UsIGNvbm5lY3RvciwgY29udmVydGVyLCB0Yl9jb25uZWN0aW9uLCBzdG9yYWdlLCBleHRlbnNpb259fVtoYW5kbGVyc119fWtleXM9Y29uc29sZUhhbmRsZXIsIHNlcnZpY2VIYW5kbGVyLCBjb25uZWN0b3JIYW5kbGVyLCBjb252ZXJ0ZXJIYW5kbGVyLCB0Yl9jb25uZWN0aW9uSGFuZGxlciwgc3RvcmFnZUhhbmRsZXIsIGV4dGVuc2lvbkhhbmRsZXJ9fVtmb3JtYXR0ZXJzXX19a2V5cz1Mb2dGb3JtYXR0ZXJ9fVtsb2dnZXJfcm9vdF19fWxldmVsPUVSUk9SfX1oYW5kbGVycz1jb25zb2xlSGFuZGxlcn19W2xvZ2dlcl9jb25uZWN0b3JdfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz1jb25uZWN0b3JIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1jb25uZWN0b3J9fVtsb2dnZXJfc3RvcmFnZV19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPXN0b3JhZ2VIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1zdG9yYWdlfX1bbG9nZ2VyX3RiX2Nvbm5lY3Rpb25dfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz10Yl9jb25uZWN0aW9uSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9dGJfY29ubmVjdGlvbn19W2xvZ2dlcl9zZXJ2aWNlXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9c2VydmljZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPXNlcnZpY2V9fVtsb2dnZXJfY29udmVydGVyXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9Y29udmVydGVySGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9Y29udmVydGVyfX1bbG9nZ2VyX2V4dGVuc2lvbl19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPWNvbm5lY3RvckhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPWV4dGVuc2lvbn19W2hhbmRsZXJfY29uc29sZUhhbmRsZXJdfX1jbGFzcz1TdHJlYW1IYW5kbGVyfX1sZXZlbD17RVJST1J9fX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1hcmdzPShzeXMuc3Rkb3V0LCl9fVtoYW5kbGVyX2Nvbm5lY3RvckhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWNvbm5lY3Rvci5sb2ciLCAiZCIsIDEsIDcsKX19W2hhbmRsZXJfc3RvcmFnZUhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXN0b3JhZ2UubG9nIiwgImQiLCAxLCA3LCl9fVtoYW5kbGVyX3NlcnZpY2VIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31zZXJ2aWNlLmxvZyIsICJkIiwgMSwgNywpfX1baGFuZGxlcl9jb252ZXJ0ZXJIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31jb252ZXJ0ZXIubG9nIiwgImQiLCAxLCAzLCl9fVtoYW5kbGVyX2V4dGVuc2lvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWV4dGVuc2lvbi5sb2ciLCAiZCIsIDEsIDMsKX19W2hhbmRsZXJfdGJfY29ubmVjdGlvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXRiX2Nvbm5lY3Rpb24ubG9nIiwgImQiLCAxLCAzLCl9fVtmb3JtYXR0ZXJfTG9nRm9ybWF0dGVyXX19Zm9ybWF0PSIlKGFzY3RpbWUpcyAtICUobGV2ZWxuYW1lKXMgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiIH19ZGF0ZWZtdD0iJVktJW0tJWQgJUg6JU06JVMiJztmdW5jdGlvbiBLYShlKXtyZXR1cm4gZS5yZXBsYWNlKCJfIiwiIikucmVwbGFjZSgiLSIsIiIpLnJlcGxhY2UoL15ccyt8XHMrL2csIiIpLnRvTG93ZXJDYXNlKCkrIi5qc29uIn1mdW5jdGlvbiAkYShlLHQpe3JldHVybiBqYS5yZXBsYWNlKC97RVJST1J9L2csZSkucmVwbGFjZSgvey5cL2xvZ3NcL30vZyx0KX1mdW5jdGlvbiBZYShlKXtyZXR1cm57aWQ6ZSxlbnRpdHlUeXBlOkkuREVWSUNFfX1mdW5jdGlvbiBRYShlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwidGhpbmdzYm9hcmQiKSYmKHQuaG9zdD1lLnRoaW5nc2JvYXJkLmhvc3QsdC5wb3J0PWUudGhpbmdzYm9hcmQucG9ydCx0LnJlbW90ZUNvbmZpZ3VyYXRpb249ZS50aGluZ3Nib2FyZC5yZW1vdGVDb25maWd1cmF0aW9uLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnRoaW5nc2JvYXJkLnNlY3VyaXR5LEdhLmFjY2Vzc1Rva2VuKT8odC5zZWN1cml0eVR5cGU9R2EuYWNjZXNzVG9rZW4sdC5hY2Nlc3NUb2tlbj1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuKToodC5zZWN1cml0eVR5cGU9R2EudGxzLHQuY2FDZXJ0UGF0aD1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmNhQ2VydCx0LnByaXZhdGVLZXlQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkucHJpdmF0ZUtleSx0LmNlcnRQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkuY2VydCkpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJzdG9yYWdlIikmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnN0b3JhZ2UsInR5cGUiKSYmKGUuc3RvcmFnZS50eXBlPT09VWEubWVtb3J5Pyh0LnN0b3JhZ2VUeXBlPVVhLm1lbW9yeSx0LnJlYWRSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudCx0Lm1heFJlY29yZHNDb3VudD1lLnN0b3JhZ2UubWF4X3JlY29yZHNfY291bnQpOmUuc3RvcmFnZS50eXBlPT09VWEuZmlsZSYmKHQuc3RvcmFnZVR5cGU9VWEuZmlsZSx0LmRhdGFGb2xkZXJQYXRoPWUuc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoLHQubWF4RmlsZXNDb3VudD1lLnN0b3JhZ2UubWF4X2ZpbGVfY291bnQsdC5yZWFkUmVjb3Jkc0NvdW50PWUuc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnQsdC5tYXhSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50KSksdH1mdW5jdGlvbiBKYShlKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpbi5lbmFibGVkfHwodFtuLm5hbWVdPXtjb25uZWN0b3I6bi5jb25maWdUeXBlLGNvbmZpZzpuLmNvbmZpZ30pO3JldHVybiB0fWZ1bmN0aW9uIFhhKGUpe2NvbnN0IHQ9e3RoaW5nc2JvYXJkOlphKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KWlmKG4uZW5hYmxlZCl7Y29uc3QgdD1uLmNvbmZpZ1R5cGU7QXJyYXkuaXNBcnJheShlW3RdKXx8KGVbdF09W10pO2NvbnN0IGE9e25hbWU6bi5uYW1lLGNvbmZpZzpuLmNvbmZpZ307ZVt0XS5wdXNoKGEpfX0odCxlLmNvbm5lY3RvcnMpLHR9ZnVuY3Rpb24gWmEoZSl7bGV0IHQ7dD1lLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3thY2Nlc3NUb2tlbjplLmFjY2Vzc1Rva2VufTp7Y2FDZXJ0OmUuY2FDZXJ0UGF0aCxwcml2YXRlS2V5OmUucHJpdmF0ZUtleVBhdGgsY2VydDplLmNlcnRQYXRofTtjb25zdCBuPXtob3N0OmUuaG9zdCxyZW1vdGVDb25maWd1cmF0aW9uOmUucmVtb3RlQ29uZmlndXJhdGlvbixwb3J0OmUucG9ydCxzZWN1cml0eTp0fTtsZXQgYTthPWUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/e3R5cGU6VWEubWVtb3J5LHJlYWRfcmVjb3Jkc19jb3VudDplLnJlYWRSZWNvcmRzQ291bnQsbWF4X3JlY29yZHNfY291bnQ6ZS5tYXhSZWNvcmRzQ291bnR9Ont0eXBlOlVhLmZpbGUsZGF0YV9mb2xkZXJfcGF0aDplLmRhdGFGb2xkZXJQYXRoLG1heF9maWxlX2NvdW50OmUubWF4RmlsZXNDb3VudCxtYXhfcmVhZF9yZWNvcmRzX2NvdW50OmUucmVhZFJlY29yZHNDb3VudCxtYXhfcmVjb3Jkc19wZXJfZmlsZTplLm1heFJlY29yZHNDb3VudH07Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBvZiBlLmNvbm5lY3RvcnMpaWYodC5lbmFibGVkKXtjb25zdCBlPXtjb25maWd1cmF0aW9uOkthKHQubmFtZSksbmFtZTp0Lm5hbWUsdHlwZTp0LmNvbmZpZ1R5cGV9O28ucHVzaChlKX1yZXR1cm57dGhpbmdzYm9hcmQ6bixjb25uZWN0b3JzOm8sc3RvcmFnZTphLGxvZ3M6d2luZG93LmJ0b2EoJGEoZS5yZW1vdGVMb2dnaW5nTGV2ZWwsZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncykpfX1jbGFzcyBlbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5lbGVtZW50UmVmPXQsdGhpcy51dGlscz1uLHRoaXMubmdab25lPWEsdGhpcy5mYj1vLHRoaXMud2luZG93PWksdGhpcy5kaWFsb2c9cix0aGlzLnRyYW5zbGF0ZT1zLHRoaXMuZGV2aWNlU2VydmljZT1sLHRoaXMuYXR0cmlidXRlU2VydmljZT1jLHRoaXMuaW1wb3J0RXhwb3J0PXAsdGhpcy5hbGlnbm1lbnQ9InJvdyIsdGhpcy5sYXlvdXRHYXA9IjVweCIsdGhpcy5zZWN1cml0eVR5cGVzPVZhLHRoaXMuZ2F0ZXdheUxvZ0xldmVscz1PYmplY3Qua2V5cyhCYSkubWFwKChlPT5CYVtlXSkpLHRoaXMuY29ubmVjdG9yVHlwZXM9T2JqZWN0LmtleXMoSGEpLHRoaXMuc3RvcmFnZVR5cGVzPV9hLHRoaXMudG9hc3RUYXJnZXRJZD0iZ2F0ZXdheS1jb25maWd1cmF0aW9uLXdpZGdldCIrdGhpcy51dGlscy5ndWlkKCksdGhpcy5pc1JlYWRPbmx5Rm9ybT0hMX1nZXQgY29ubmVjdG9ycygpe3JldHVybiB0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KCJjb25uZWN0b3JzIil9bmdPbkluaXQoKXt0aGlzLmluaXRXaWRnZXRTZXR0aW5ncyh0aGlzLmN0eC5zZXR0aW5ncyksdGhpcy5jdHguZGF0YXNvdXJjZXMmJnRoaXMuY3R4LmRhdGFzb3VyY2VzLmxlbmd0aCYmKHRoaXMuZGV2aWNlTmFtZUZvcm09dGhpcy5jdHguZGF0YXNvdXJjZXNbMF0ubmFtZSksdGhpcy5idWlsZEZvcm0oKSx0aGlzLmN0eC51cGRhdGVXaWRnZXRQYXJhbXMoKSx0aGlzLmZvcm1SZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuZm9ybVJlc2l6ZSQub2JzZXJ2ZSh0aGlzLmZvcm1Db250YWluZXJSZWYubmF0aXZlRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1SZXNpemUkJiZ0aGlzLmZvcm1SZXNpemUkLmRpc2Nvbm5lY3QoKSx0aGlzLnN1YnNjcmliZUdhdGV3YXkkLnVuc3Vic2NyaWJlKCksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQudW5zdWJzY3JpYmUoKX1pbml0V2lkZ2V0U2V0dGluZ3MoZSl7bGV0IHQ7dD1lLmdhdGV3YXlUaXRsZSYmZS5nYXRld2F5VGl0bGUubGVuZ3RoP3RoaXMudXRpbHMuY3VzdG9tVHJhbnNsYXRpb24oZS5nYXRld2F5VGl0bGUsZS5nYXRld2F5VGl0bGUpOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuZ2F0ZXdheSIpLHRoaXMuY3R4LndpZGdldFRpdGxlPXQsdGhpcy5pc1JlYWRPbmx5Rm9ybT0hIWUucmVhZE9ubHkmJmUucmVhZE9ubHksdGhpcy5hcmNoaXZlRmlsZU5hbWU9ZS5hcmNoaXZlRmlsZU5hbWU/Lmxlbmd0aD9lLmFyY2hpdmVGaWxlTmFtZToiZ2F0ZXdheUNvbmZpZ3VyYXRpb24iLHRoaXMuZ2F0ZXdheVR5cGU9ZS5nYXRld2F5VHlwZT8ubGVuZ3RoP2UuZ2F0ZXdheVR5cGU6IkdhdGV3YXkiLHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHM9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLmdhdGV3YXlOYW1lRXhpc3RzLGUuZ2F0ZXdheU5hbWVFeGlzdHMpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktZXhpc3RzIiksdGhpcy5zdWNjZXNzZnVsU2F2ZWQ9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLnN1Y2Nlc3NmdWxTYXZlLGUuc3VjY2Vzc2Z1bFNhdmUpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktc2F2ZWQiKSx0aGlzLnVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKX1yZXNpemUoKXt0aGlzLm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVXaWRnZXREaXNwbGF5aW5nKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpfXVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKXt0aGlzLmN0eC4kY29udGFpbmVyJiZ0aGlzLmN0eC4kY29udGFpbmVyWzBdLm9mZnNldFdpZHRoPD00MjU/KHRoaXMubGF5b3V0R2FwPSIwIix0aGlzLmFsaWdubWVudD0iY29sdW1uIik6KHRoaXMubGF5b3V0R2FwPSI1cHgiLHRoaXMuYWxpZ25tZW50PSJyb3ciKX1zYXZlQXR0cmlidXRlKGUsdCxuKXtjb25zdCBhPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoImdhdGV3YXkiKS52YWx1ZSxvPXtrZXk6ZSx2YWx1ZTp0fTtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKFlhKGEpLG4sW29dKX1jcmVhdGVDb25uZWN0b3IoZT16YSl7dGhpcy5jb25uZWN0b3JzLnB1c2godGhpcy5mYi5ncm91cCh7ZW5hYmxlZDpbZS5lbmFibGVkXSxjb25maWdUeXBlOltlLmNvbmZpZ1R5cGUsW3VlLnJlcXVpcmVkXV0sbmFtZTpbZS5uYW1lLFt1ZS5yZXF1aXJlZF1dLGNvbmZpZzpbZS5jb25maWcsW3VlLm51bGxWYWxpZGF0b3IsV2FdXX0pKX1nZXRGb3JtRmllbGQoZSl7cmV0dXJuIHRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoZSl9YnVpbGRGb3JtKCl7dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwPXRoaXMuZmIuZ3JvdXAoe2dhdGV3YXk6W251bGwsW11dLGFjY2Vzc1Rva2VuOltudWxsLFt1ZS5yZXF1aXJlZF1dLHNlY3VyaXR5VHlwZTpbR2EuYWNjZXNzVG9rZW5dLGhvc3Q6W3RoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFt1ZS5yZXF1aXJlZF1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZUNvbmZpZ3VyYXRpb246WyEwXSxjYUNlcnRQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L2NhLnBlbSJdLHByaXZhdGVLZXlQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L3ByaXZhdGVLZXkucGVtIl0sY2VydFBhdGg6WyIvZXRjL3RoaW5nc2JvYXJkLWdhdGV3YXkvY2VydGlmaWNhdGUucGVtIl0scmVtb3RlTG9nZ2luZ0xldmVsOltCYS5kZWJ1Z10scmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3M6WyIuL2xvZ3MvIixbdWUucmVxdWlyZWRdXSxzdG9yYWdlVHlwZTpbVWEubWVtb3J5XSxyZWFkUmVjb3Jkc0NvdW50OlsxMDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhSZWNvcmRzQ291bnQ6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heEZpbGVzQ291bnQ6WzUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhRm9sZGVyUGF0aDpbIi4vZGF0YS8iLFt1ZS5yZXF1aXJlZF1dLGNvbm5lY3RvcnM6dGhpcy5mYi5hcnJheShbXSl9KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQ9dGhpcy5nZXRGb3JtRmllbGQoInN0b3JhZ2VUeXBlIikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2U9PT1VYS5tZW1vcnk/KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZGlzYWJsZSgpLHRoaXMuZ2V0Rm9ybUZpZWxkKCJkYXRhRm9sZGVyUGF0aCIpLmRpc2FibGUoKSk6KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZW5hYmxlKCksdGhpcy5nZXRGb3JtRmllbGQoImRhdGFGb2xkZXJQYXRoIikuZW5hYmxlKCkpfSkpLHRoaXMuc3Vic2NyaWJlR2F0ZXdheSQ9dGhpcy5nZXRGb3JtRmllbGQoImdhdGV3YXkiKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57bnVsbCE9PWU/QWUoW3RoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyhlKS5waXBlKEVlKChlPT57dGhpcy5nZXRGb3JtRmllbGQoImFjY2Vzc1Rva2VuIikucGF0Y2hWYWx1ZShlLmNyZWRlbnRpYWxzSWQpfSkpKSwuLi50aGlzLmdldEF0dHJpYnV0ZXMoZSldKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLm1hcmtBc1ByaXN0aW5lKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpOnRoaXMuZ2V0Rm9ybUZpZWxkKCJhY2Nlc3NUb2tlbiIpLnBhdGNoVmFsdWUoIiIpfSkpfWdhdGV3YXlFeGlzdCgpe3RoaXMuY3R4LnNob3dFcnJvclRvYXN0KHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHMsInRvcCIsImxlZnQiLHRoaXMudG9hc3RUYXJnZXRJZCl9ZXhwb3J0Q29uZmlnKCl7Y29uc3QgZT10aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUsdD17fTt2YXIgbixhLG87dFsidGJfZ2F0ZXdheS55YW1sIl09ZnVuY3Rpb24oZSl7bGV0IHQ7dD0idGhpbmdzYm9hcmQ6XG4iLHQrPSIgIGhvc3Q6ICIrZS5ob3N0KyJcbiIsdCs9IiAgcmVtb3RlQ29uZmlndXJhdGlvbjogIitlLnJlbW90ZUNvbmZpZ3VyYXRpb24rIlxuIix0Kz0iICBwb3J0OiAiK2UucG9ydCsiXG4iLHQrPSIgIHNlY3VyaXR5OlxuIixlLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3QrPSIgICAgYWNjZXNzLXRva2VuOiAiK2UuYWNjZXNzVG9rZW4rIlxuIjoodCs9IiAgICBjYV9jZXJ0OiAiK2UuY2FDZXJ0UGF0aCsiXG4iLHQrPSIgICAgcHJpdmF0ZUtleTogIitlLnByaXZhdGVLZXlQYXRoKyJcbiIsdCs9IiAgICBjZXJ0OiAiK2UuY2VydFBhdGgrIlxuIiksdCs9InN0b3JhZ2U6XG4iLGUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/KHQrPSIgIHR5cGU6IG1lbW9yeVxuIix0Kz0iICByZWFkX3JlY29yZHNfY291bnQ6ICIrZS5yZWFkUmVjb3Jkc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlY29yZHNfY291bnQ6ICIrZS5tYXhSZWNvcmRzQ291bnQrIlxuIik6KHQrPSIgIHR5cGU6IGZpbGVcbiIsdCs9IiAgZGF0YV9mb2xkZXJfcGF0aDogIitlLmRhdGFGb2xkZXJQYXRoKyJcbiIsdCs9IiAgbWF4X2ZpbGVfY291bnQ6ICIrZS5tYXhGaWxlc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlYWRfcmVjb3Jkc19jb3VudDogIitlLnJlYWRSZWNvcmRzQ291bnQrIlxuIix0Kz0iICBtYXhfcmVjb3Jkc19wZXJfZmlsZTogIitlLm1heFJlY29yZHNDb3VudCsiXG4iKSx0Kz0iY29ubmVjdG9yczpcbiI7Zm9yKGNvbnN0IG4gb2YgZS5jb25uZWN0b3JzKW4uZW5hYmxlZCYmKHQrPSIgIC1cbiIsdCs9IiAgICBuYW1lOiAiK24ubmFtZSsiXG4iLHQrPSIgICAgdHlwZTogIituLmNvbmZpZ1R5cGUrIlxuIix0Kz0iICAgIGNvbmZpZ3VyYXRpb246ICIrS2Eobi5uYW1lKSsiXG4iKTtyZXR1cm4gdH0oZSksZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KW4uZW5hYmxlZCYmKGVbS2Eobi5uYW1lKV09SlNPTi5zdHJpbmdpZnkobi5jb25maWcpKX0odCxlLmNvbm5lY3RvcnMpLG49dCxhPWUucmVtb3RlTG9nZ2luZ0xldmVsLG89ZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncyxuWyJsb2dzLmNvbmYiXT0kYShhLG8pLHRoaXMuaW1wb3J0RXhwb3J0LmV4cG9ydEpTWmlwKHQsdGhpcy5hcmNoaXZlRmlsZU5hbWUpLHRoaXMuc2F2ZUF0dHJpYnV0ZShSYSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUucmVtb3RlTG9nZ2luZ0xldmVsLnRvVXBwZXJDYXNlKCksTC5TSEFSRURfU0NPUEUpfWFkZE5ld0Nvbm5lY3Rvcigpe3RoaXMuY3JlYXRlQ29ubmVjdG9yKCl9cmVtb3ZlQ29ubmVjdG9yKGUpe2U+LTEmJih0aGlzLmNvbm5lY3RvcnMucmVtb3ZlQXQoZSksdGhpcy5jb25uZWN0b3JzLm1hcmtBc0RpcnR5KCkpfW9wZW5Db25maWdEaWFsb2coZSx0LG4sYSl7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpKSx0aGlzLmRpYWxvZy5vcGVuKFFlLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7anNvblZhbHVlOm4scmVxdWlyZWQ6ITAsdGl0bGU6dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS50aXRsZS1jb25uZWN0b3JzLWpzb24iLHt0eXBlTmFtZTphfSl9fSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGU9PntlJiYodGhpcy5jb25uZWN0b3JzLmF0KHQpLmdldCgiY29uZmlnIikucGF0Y2hWYWx1ZShlKSx0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzKCkpfSkpfWNyZWF0ZUNvbm5lY3Rvck5hbWUoZSx0LG49MCl7Y29uc3QgYT1uP3Qrbjp0O3JldHVybi0xPT09ZS5maW5kSW5kZXgoKGU9PmUubmFtZT09PWEpKT9hOnRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShlLHQsKytuKX12YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sYT0wKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3QgaT0wPT09YT90OnQrYTtvIT09biYmZVtvXS5uYW1lPT09aSYmdGhpcy52YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sKythKX1yZXR1cm4gMD09PWE/dDp0K2F9Y2hhbmdlQ29ubmVjdG9yVHlwZShlKXtpZighZS5nZXQoIm5hbWUiKS52YWx1ZSl7Y29uc3QgdD1lLmdldCgiY29uZmlnVHlwZSIpLnZhbHVlLG49dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLmNvbm5lY3RvcnM7ZS5nZXQoIm5hbWUiKS5wYXRjaFZhbHVlKHRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShuLEhhW3RdKSl9fWNoYW5nZUNvbm5lY3Rvck5hbWUoZSx0KXtjb25zdCBuPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZS5jb25uZWN0b3JzO2UuZ2V0KCJuYW1lIikucGF0Y2hWYWx1ZSh0aGlzLnZhbGlkYXRlQ29ubmVjdG9yTmFtZShuLGUuZ2V0KCJuYW1lIikudmFsdWUsdCkpfXNhdmUoKXtjb25zdCBlPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZTtBZShbdGhpcy5zYXZlQXR0cmlidXRlKCJjb25maWd1cmF0aW9uIix3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShYYShlKSkpLEwuU0hBUkVEX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoT2Esd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoSmEoZS5jb25uZWN0b3JzKSkpLEwuU0VSVkVSX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoUmEsdGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLnJlbW90ZUxvZ2dpbmdMZXZlbC50b1VwcGVyQ2FzZSgpLEwuU0hBUkVEX1NDT1BFKV0pLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmN0eC5zaG93U3VjY2Vzc1RvYXN0KHRoaXMuc3VjY2Vzc2Z1bFNhdmVkLDJlMywidG9wIiwibGVmdCIsdGhpcy50b2FzdFRhcmdldElkKSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAubWFya0FzUHJpc3RpbmUoKX0pKX1nZXRBdHRyaWJ1dGVzKGUpe2NvbnN0IHQ9W107cmV0dXJuIHQucHVzaChBZShbdGhpcy5nZXRBdHRyaWJ1dGUoImN1cnJlbnRfY29uZmlndXJhdGlvbiIsTC5DTElFTlRfU0NPUEUsZSksdGhpcy5nZXRBdHRyaWJ1dGUoT2EsTC5TRVJWRVJfU0NPUEUsZSldKS5waXBlKEVlKCgoW2UsdF0pPT57dGhpcy5zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpLHRoaXMuc2V0Rm9ybUNvbm5lY3RvcnNEcmFmdCh0KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSkpKSx0LnB1c2godGhpcy5nZXRBdHRyaWJ1dGUoUmEsTC5TSEFSRURfU0NPUEUsZSkucGlwZShFZSgoZT0+dGhpcy5wcm9jZXNzTG9nZ2luZ0xldmVsKGUpKSkpKSx0fWdldEF0dHJpYnV0ZShlLHQsbil7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKFlhKG4pLHQsW2VdKX1zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpe2lmKHRoaXMuY29ubmVjdG9ycy5jbGVhcigpLGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49dFtlXTtpZigidGhpbmdzYm9hcmQiPT09ZSludWxsIT09biYmT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJnRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5wYXRjaFZhbHVlKFFhKG4pKTtlbHNlIGZvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgYT0iTm8gbmFtZSI7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5bdF0sIm5hbWUiKSYmKGE9blt0XS5uYW1lKTtjb25zdCBvPXtlbmFibGVkOiEwLGNvbmZpZ1R5cGU6ZSxjb25maWc6blt0XS5jb25maWcsbmFtZTphfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihvKX19fX1zZXRGb3JtQ29ubmVjdG9yc0RyYWZ0KGUpe2lmKGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49e2VuYWJsZWQ6ITEsY29uZmlnVHlwZTp0W2VdLmNvbm5lY3Rvcixjb25maWc6dFtlXS5jb25maWcsbmFtZTplfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihuKX19fXByb2Nlc3NMb2dnaW5nTGV2ZWwoZSl7bGV0IHQ9QmEuZGVidWc7ZS5sZW5ndGg+MCYmQmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSYmKHQ9QmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSksdGhpcy5nZXRGb3JtRmllbGQoInJlbW90ZUxvZ2dpbmdMZXZlbCIpLnBhdGNoVmFsdWUodCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjp0LkVsZW1lbnRSZWZ9LHt0b2tlbjpYLlV0aWxzU2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dG9rZW46YWV9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpYLkRldmljZVNlcnZpY2V9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTplbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIixpbnB1dHM6e2N0eDoiY3R4Iixpc1N0YXRlRm9ybToiaXNTdGF0ZUZvcm0ifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToiZm9ybUNvbnRhaW5lclJlZiIsZmlyc3Q6ITAscHJlZGljYXRlOlsiZm9ybUNvbnRhaW5lciJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH0se3Byb3BlcnR5TmFtZToibXVsdGlwbGVJbnB1dEZvcm0iLGZpcnN0OiEwLHByZWRpY2F0ZTpbImdhdGV3YXlDb25maWd1cmF0aW9uRm9ybSJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGZvcm0gI2Zvcm1Db250YWluZXIgY2xhc3M9ImdhdGV3YXktZm9ybSJcbiAgICAgIFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwIlxuICAgICAgdGItdG9hc3QgdG9hc3RUYXJnZXQ9Int7IHRvYXN0VGFyZ2V0SWQgfX0iXG4gICAgICAobmdTdWJtaXQpPSJzYXZlKCkiPlxuICA8bWF0LWFjY29yZGlvbiBtdWx0aT0idHJ1ZSIgY2xhc3M9Im1hdC1ib2R5LTIiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmRcJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDx0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3RcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImdhdGV3YXkiXG4gICAgICAgICAgW2RldmljZU5hbWVdPSJkZXZpY2VOYW1lRm9ybSJcbiAgICAgICAgICBbaXNTdGF0ZUZvcm1dPSJpc1N0YXRlRm9ybSJcbiAgICAgICAgICBbbmV3R2F0ZXdheVR5cGVdPSJnYXRld2F5VHlwZSJcbiAgICAgICAgICAoZ2F0ZXdheU5hbWVFeGlzdCk9ImdhdGV3YXlFeGlzdCgpIlxuICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgID5cbiAgICAgIDwvdGItZW50aXR5LWdhdGV3YXktc2VsZWN0PlxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnNlY3VyaXR5LXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHlUeXBlIiA+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc2VjdXJpdHlUeXBlLnZhbHVlLnRvU3RyaW5nKCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblxuICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc2VjdXJpdHlUeXBlXCcpLnZhbHVlID09IFwndGxzXCciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNhLWNlcnRpZmljYXRlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1wcml2YXRlLWtleVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icHJpdmF0ZUtleVBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2VydFBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj57eyBcJ2dhdGV3YXkucmVtb3RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1jaGVja2JveD5cblxuICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVMb2dnaW5nTGV2ZWwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVscyIgW3ZhbHVlXT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICB7eyBsb2dMZXZlbCB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnBhdGgtbG9nc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3MiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS5wYXRoLWxvZ3MtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zdG9yYWdlXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuc3RvcmFnZS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzdG9yYWdlVHlwZS5rZXkiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0icmVhZFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVhZFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1wYWNrLXNpemUtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsID5cbiAgICAgICAgICAgICAge3sgKGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgIT09IFwnZmlsZVwnID8gXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHNcJyA6IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHNcJykgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4UmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgPT0gXCdmaWxlXCciPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heEZpbGVzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heEZpbGVzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1wYXRoXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImRhdGFGb2xkZXJQYXRoIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnZGF0YUZvbGRlclBhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtY29uZmlnXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJnYXRld2F5LWNvbmZpZyI+XG4gICAgICAgIDxzZWN0aW9uIGZvcm1BcnJheU5hbWU9ImNvbm5lY3RvcnMiICpuZ0Zvcj0ibGV0IGNvbm5lY3RvciBvZiBjb25uZWN0b3JzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4OyI+XG4gICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09ImkiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gc3RyZXRjaCIgZnhMYXlvdXRHYXA9IjhweCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBzdGFydCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIiBmeEZsZXg+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5jb25uZWN0b3ItdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJjb25maWdUeXBlIiAoc2VsZWN0aW9uQ2hhbmdlKT0iY2hhbmdlQ29ubmVjdG9yVHlwZShjb25uZWN0b3IpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbm5lY3RvclR5cGUgb2YgY29ubmVjdG9yVHlwZXMiIFt2YWx1ZV09ImNvbm5lY3RvclR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb25uZWN0b3JUeXBlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCdjb25maWdUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLXR5cGUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LmNvbm5lY3Rvci1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiAoYmx1cik9ImNoYW5nZUNvbm5lY3Rvck5hbWUoY29ubmVjdG9yLCBpKSI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29ubmVjdG9yLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5jb25uZWN0b3ItbmFtZS1yZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIlxuICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJ7e2FsaWdubWVudCA9PSBcJ3Jvd1wnID8gXCdlbmQgY2VudGVyXCcgOiBcJ3NwYWNlLWV2ZW5seSBjZW50ZXJcJ319IiBjbGFzcz0iYWN0aW9uLWJ1dHRvbnMiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0ib3BlbkNvbmZpZ0RpYWxvZygkZXZlbnQsIGksIGNvbm5lY3Rvci5nZXQoXCdjb25maWdcJykudmFsdWUsIGNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLnZhbHVlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkudXBkYXRlLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdtYXQtd2FyblwnOiBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLmludmFsaWR9Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV9ob3JpejwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb25uZWN0b3IoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPHNwYW4gW2Z4U2hvd109IiFjb25uZWN0b3JzLmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7XCdnYXRld2F5Lm5vLWNvbm5lY3RvcnNcJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT0iYnV0dG9uIiAoY2xpY2spPSJhZGROZXdDb25uZWN0b3IoKSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5jb25uZWN0b3ItYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXYgPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPC9tYXQtYWNjb3JkaW9uPlxuICA8c2VjdGlvbiBbZnhTaG93XT0iIWlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBjbGFzcz0iZm9ybS1hY3Rpb24tYnV0dG9ucyI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iZXhwb3J0Q29uZmlnKCkiXG4gICAgICAgICAgICAqbmdJZj0iIWdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LmRvd25sb2FkLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0ic3VibWl0IlxuICAgICAgICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LnNhdmUtdGlwXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAge3tcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9zZWN0aW9uPlxuPC9mb3JtPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5nYXRld2F5LWZvcm17aGVpZ2h0OjEwMCU7cGFkZGluZzo1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW59Omhvc3QgLmdhdGV3YXktZm9ybSAuZm9ybS1hY3Rpb24tYnV0dG9uc3twYWRkaW5nLXRvcDo4cHh9Omhvc3QgLmdhdGV3YXktZm9ybSAuZ2F0ZXdheS1jb25maWcgLm5vLWRhdGEtZm91bmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2hlaWdodDo0MHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Y3QuVG9hc3REaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi10b2FzdF0iLGlucHV0czpbInRvYXN0VGFyZ2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpwdC5NYXRDaGVja2JveCxzZWxlY3RvcjoibWF0LWNoZWNrYm94IixpbnB1dHM6WyJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsImlkIiwicmVxdWlyZWQiLCJsYWJlbFBvc2l0aW9uIiwibmFtZSIsInZhbHVlIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY29sb3IiLCJkaXNhYmxlZEludGVyYWN0aXZlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiaW5kZXRlcm1pbmF0ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJpbmRldGVybWluYXRlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEFjY29yZGlvbixzZWxlY3RvcjoibWF0LWFjY29yZGlvbiIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsImRpc3BsYXlNb2RlIiwidG9nZ2xlUG9zaXRpb24iXSxleHBvcnRBczpbIm1hdEFjY29yZGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0Q2xhc3NEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nQ2xhc3NdLCBbbmdDbGFzcy54c10sIFtuZ0NsYXNzLnNtXSwgW25nQ2xhc3MubWRdLCBbbmdDbGFzcy5sZ10sIFtuZ0NsYXNzLnhsXSwgIFtuZ0NsYXNzLmx0LXNtXSwgW25nQ2xhc3MubHQtbWRdLCBbbmdDbGFzcy5sdC1sZ10sIFtuZ0NsYXNzLmx0LXhsXSwgIFtuZ0NsYXNzLmd0LXhzXSwgW25nQ2xhc3MuZ3Qtc21dLCBbbmdDbGFzcy5ndC1tZF0sIFtuZ0NsYXNzLmd0LWxnXSIsaW5wdXRzOlsibmdDbGFzcyIsIm5nQ2xhc3MueHMiLCJuZ0NsYXNzLnNtIiwibmdDbGFzcy5tZCIsIm5nQ2xhc3MubGciLCJuZ0NsYXNzLnhsIiwibmdDbGFzcy5sdC1zbSIsIm5nQ2xhc3MubHQtbWQiLCJuZ0NsYXNzLmx0LWxnIiwibmdDbGFzcy5sdC14bCIsIm5nQ2xhc3MuZ3QteHMiLCJuZ0NsYXNzLmd0LXNtIiwibmdDbGFzcy5ndC1tZCIsIm5nQ2xhc3MuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS7JtU5nTm9WYWxpZGF0ZSxzZWxlY3RvcjoiZm9ybTpub3QoW25nTm9Gb3JtXSk6bm90KFtuZ05hdGl2ZVZhbGlkYXRlXSkifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTptdC5FbnRpdHlHYXRld2F5U2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3QiLGlucHV0czpbInJlcXVpcmVkIiwibmV3R2F0ZXdheVR5cGUiLCJkZXZpY2VOYW1lIiwiaXNTdGF0ZUZvcm0iXSxvdXRwdXRzOlsiZ2F0ZXdheU5hbWVFeGlzdCJdfSx7a2luZDoicGlwZSIsdHlwZTpfLlVwcGVyQ2FzZVBpcGUsbmFtZToidXBwZXJjYXNlIn0se2tpbmQ6InBpcGUiLHR5cGU6Xy5LZXlWYWx1ZVBpcGUsbmFtZToia2V5dmFsdWUifSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fWUoIkdhdGV3YXlGb3JtQ29tcG9uZW50IixlbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2Vcbjxmb3JtICNmb3JtQ29udGFpbmVyIGNsYXNzPSJnYXRld2F5LWZvcm0iXG4gICAgICBbZm9ybUdyb3VwXT0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cCJcbiAgICAgIHRiLXRvYXN0IHRvYXN0VGFyZ2V0PSJ7eyB0b2FzdFRhcmdldElkIH19IlxuICAgICAgKG5nU3VibWl0KT0ic2F2ZSgpIj5cbiAgPG1hdC1hY2NvcmRpb24gbXVsdGk9InRydWUiIGNsYXNzPSJtYXQtYm9keS0yIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8dGItZW50aXR5LWdhdGV3YXktc2VsZWN0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJnYXRld2F5IlxuICAgICAgICAgIFtkZXZpY2VOYW1lXT0iZGV2aWNlTmFtZUZvcm0iXG4gICAgICAgICAgW2lzU3RhdGVGb3JtXT0iaXNTdGF0ZUZvcm0iXG4gICAgICAgICAgW25ld0dhdGV3YXlUeXBlXT0iZ2F0ZXdheVR5cGUiXG4gICAgICAgICAgKGdhdGV3YXlOYW1lRXhpc3QpPSJnYXRld2F5RXhpc3QoKSJcbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICA+XG4gICAgICA8L3RiLWVudGl0eS1nYXRld2F5LXNlbGVjdD5cbiAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5zZWN1cml0eS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5VHlwZSIgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2VjdXJpdHlUeXBlIG9mIHNlY3VyaXR5VHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic2VjdXJpdHlUeXBlLmtleSI+XG4gICAgICAgICAgICAgIHt7IHNlY3VyaXR5VHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWluXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3NlY3VyaXR5VHlwZVwnKS52YWx1ZSA9PSBcJ3Rsc1wnIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2FDZXJ0UGF0aCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGxzLXBhdGgtcHJpdmF0ZS1rZXlcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InByaXZhdGVLZXlQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT0icmVtb3RlQ29uZmlndXJhdGlvbiI+e3sgXCdnYXRld2F5LnJlbW90ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtY2hlY2tib3g+XG5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ0xldmVsIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbHMiIFt2YWx1ZV09ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAge3sgbG9nTGV2ZWwgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5wYXRoLWxvZ3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzIj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkucGF0aC1sb2dzLXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnN0b3JhZ2UtdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdG9yYWdlVHlwZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGUudmFsdWUudG9TdHJpbmcoKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InJlYWRSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbCA+XG4gICAgICAgICAgICAgIHt7IChnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlICE9PSBcJ2ZpbGVcJyA/IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzXCcgOiBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzXCcpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlID09IFwnZmlsZVwnIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhGaWxlc0NvdW50Ij5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJkYXRhRm9sZGVyUGF0aCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2RhdGFGb2xkZXJQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBjbGFzcz0iZ2F0ZXdheS1jb25maWciPlxuICAgICAgICA8c2VjdGlvbiBmb3JtQXJyYXlOYW1lPSJjb25uZWN0b3JzIiAqbmdGb3I9ImxldCBjb25uZWN0b3Igb2YgY29ubmVjdG9ycy5jb250cm9sczsgbGV0IGkgPSBpbmRleDsiPlxuICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPSJpIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIHN0cmV0Y2giIGZ4TGF5b3V0R2FwPSI4cHgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEFsaWduPSJjZW50ZXIgc3RhcnQiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgZnhGbGV4PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuY29ubmVjdG9yLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29uZmlnVHlwZSIgKHNlbGVjdGlvbkNoYW5nZSk9ImNoYW5nZUNvbm5lY3RvclR5cGUoY29ubmVjdG9yKSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb25uZWN0b3JUeXBlIG9mIGNvbm5lY3RvclR5cGVzIiBbdmFsdWVdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29ubmVjdG9yVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb25uZWN0b3IuZ2V0KFwnY29uZmlnVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rvci10eXBlLXJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3ItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgKGJsdXIpPSJjaGFuZ2VDb25uZWN0b3JOYW1lKGNvbm5lY3RvciwgaSkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLW5hbWUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCJcbiAgICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ie3thbGlnbm1lbnQgPT0gXCdyb3dcJyA/IFwnZW5kIGNlbnRlclwnIDogXCdzcGFjZS1ldmVubHkgY2VudGVyXCd9fSIgY2xhc3M9ImFjdGlvbi1idXR0b25zIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSIgbWF0LWljb24tYnV0dG9uIChjbGljayk9Im9wZW5Db25maWdEaWFsb2coJGV2ZW50LCBpLCBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLnZhbHVlLCBjb25uZWN0b3IuZ2V0KFwnbmFtZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnVwZGF0ZS1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ie1wnbWF0LXdhcm5cJzogY29ubmVjdG9yLmdldChcJ2NvbmZpZ1wnKS5pbnZhbGlkfSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfaG9yaXo8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQ29ubmVjdG9yKGkpIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5kZWxldGVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxzcGFuIFtmeFNob3ddPSIhY29ubmVjdG9ycy5sZW5ndGgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiIGNsYXNzPSJuby1kYXRhLWZvdW5kIj57e1wnZ2F0ZXdheS5uby1jb25uZWN0b3JzXCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uIFtmeFNob3ddPSIhaXNSZWFkT25seUZvcm0iIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9ImJ1dHRvbiIgKGNsaWNrKT0iYWRkTmV3Q29ubmVjdG9yKCkiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuY29ubmVjdG9yLWFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2ID5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gIDwvbWF0LWFjY29yZGlvbj5cbiAgPHNlY3Rpb24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgY2xhc3M9ImZvcm0tYWN0aW9uLWJ1dHRvbnMiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImV4cG9ydENvbmZpZygpIlxuICAgICAgICAgICAgKm5nSWY9IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5kb3dubG9hZC10aXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICB7e1wnYWN0aW9uLmRvd25sb2FkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9InN1Ym1pdCJcbiAgICAgICAgICAgICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5zYXZlLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvc2VjdGlvbj5cbjwvZm9ybT5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuZ2F0ZXdheS1mb3Jte2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufTpob3N0IC5nYXRld2F5LWZvcm0gLmZvcm0tYWN0aW9uLWJ1dHRvbnN7cGFkZGluZy10b3A6OHB4fTpob3N0IC5nYXRld2F5LWZvcm0gLmdhdGV3YXktY29uZmlnIC5uby1kYXRhLWZvdW5ke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTp0LkVsZW1lbnRSZWZ9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp0Lk5nWm9uZX0se3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dHlwZTpXaW5kb3csZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOlthZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Zvcm1Db250YWluZXJSZWY6W3t0eXBlOm8sYXJnczpbImZvcm1Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLG11bHRpcGxlSW5wdXRGb3JtOlt7dHlwZTpvLGFyZ3M6WyJnYXRld2F5Q29uZmlndXJhdGlvbkZvcm0iLHtzdGF0aWM6ITB9XX1dLGN0eDpbe3R5cGU6YX1dLGlzU3RhdGVGb3JtOlt7dHlwZTphfV19fSk7Y2xhc3MgdG8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIpe3N1cGVyKGUsdCxhKSx0aGlzLnN0b3JlPWUsdGhpcy5yb3V0ZXI9dCx0aGlzLmRhdGE9bix0aGlzLmRpYWxvZ1JlZj1hLHRoaXMuZmI9byx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1pLHRoaXMucmVzb3VyY2VzU2VydmljZT1yLHRoaXMuY29ubmVjdG9yVHlwZT1fdCx0aGlzLmdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwPUh0LHRoaXMuZ2F0ZXdheUxvZ0xldmVsPU9iamVjdC52YWx1ZXMoTXQpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHt0eXBlOltfdC5NUVRULFtdXSxuYW1lOlsiIixbdWUucmVxdWlyZWQsdGhpcy51bmlxTmFtZVJlcXVpcmVkKCksdWUucGF0dGVybihrdCldXSxsb2dMZXZlbDpbTXQuSU5GTyxbXV0sdXNlRGVmYXVsdHM6WyEwLFtdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITEsW11dLGNsYXNzOlsiIixbXV0sa2V5OlsiYXV0byIsW11dfSl9bmdPbkluaXQoKXt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1oZWxwTGlua0lkKCl7cmV0dXJuIHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZ3VyYXRpb24vIn1jYW5jZWwoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKX1hZGQoKXt0aGlzLnN1Ym1pdHRlZD0hMDtjb25zdCBlPXRoaXMuY29ubmVjdG9yRm9ybS5nZXRSYXdWYWx1ZSgpO2UudXNlRGVmYXVsdHM/dGhpcy5nZXREZWZhdWx0Q29uZmlnKGUudHlwZSkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj10aGlzLmRhdGEuZ2F0ZXdheVZlcnNpb247biYmKGUuY29uZmlnVmVyc2lvbj1uKSxlLmNvbmZpZ3VyYXRpb25Kc29uPSh0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0obik/dFtVdC5DdXJyZW50XTp0W1V0LkxlZ2FjeV0pPz90LHRoaXMuY29ubmVjdG9yRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UoZSl9KSk6dGhpcy5jb25uZWN0b3JGb3JtLnZhbGlkJiZ0aGlzLmRpYWxvZ1JlZi5jbG9zZShlKX11bmlxTmFtZVJlcXVpcmVkKCl7cmV0dXJuIGU9Pntjb25zdCB0PWUudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHRoaXMuZGF0YS5kYXRhU291cmNlRGF0YS5zb21lKCgoe3ZhbHVlOntuYW1lOmV9fSk9PmUudG9Mb3dlckNhc2UoKT09PXQpKT97ZHVwbGljYXRlTmFtZTp7dmFsaWQ6ITF9fTpudWxsfX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgidXNlRGVmYXVsdHMiKTtlPT09X3QuR1JQQ3x8ZT09PV90LkNVU1RPTT90LnNldFZhbHVlKCExKTp0LnZhbHVlfHx0LnNldFZhbHVlKCEwKX0pKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCl9Z2V0RGVmYXVsdENvbmZpZyhlKXtyZXR1cm4gdGhpcy5yZXNvdXJjZXNTZXJ2aWNlLmxvYWRKc29uUmVzb3VyY2UoYC9hc3NldHMvbWV0YWRhdGEvY29ubmVjdG9yLWRlZmF1bHQtY29uZmlncy8ke2V9Lmpzb25gKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp2YX0se3Rva2VuOlguUmVzb3VyY2VzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6dG8sc2VsZWN0b3I6InRiLWFkZC1jb25uZWN0b3ItZGlhbG9nIixwcm92aWRlcnM6W10sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJjb25uZWN0b3JGb3JtIiBjbGFzcz0iYWRkLWNvbm5lY3RvciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7ICJnYXRld2F5LmFkZC1jb25uZWN0b3IiIHwgdHJhbnNsYXRlfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09ImhlbHBMaW5rSWQoKSI+PC9kaXY+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtdG9vbGJhcj5cbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnR5cGU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIHwga2V5dmFsdWUiIFt2YWx1ZV09InR5cGUua2V5Ij5cbiAgICAgICAgICAgICAgICB7eyB0eXBlLnZhbHVlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJ2dhdGV3YXkuY29ubmVjdG9yLWR1cGxpY2F0ZS1uYW1lXCcgOlwnZ2F0ZXdheS5uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWNsYXNzPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNsYXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5HUlBDIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkdSUEMgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkNVU1RPTSJcbiAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIGZpeGVkLXRpdGxlLXdpZHRoIiBmb3JtQ29udHJvbE5hbWU9InVzZURlZmF1bHRzIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5maWxsLWNvbm5lY3Rvci1kZWZhdWx0c1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLk1RVFQiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGEtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIChjbGljayk9ImFkZCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29ubmVjdG9yRm9ybS5pbnZhbGlkIHx8ICFjb25uZWN0b3JGb3JtLmRpcnR5Ij5cbiAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFkZC1jb25uZWN0b3J7bWluLXdpZHRoOjQwMHB4O3dpZHRoOjUwMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpkdC5IZWxwQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGVscF0iLGlucHV0czpbInRiLWhlbHAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cnQuTWF0VG9vbGJhcixzZWxlY3RvcjoibWF0LXRvb2xiYXIiLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQWN0aW9ucyxzZWxlY3RvcjoiW21hdC1kaWFsb2ctYWN0aW9uc10sIG1hdC1kaWFsb2ctYWN0aW9ucywgW21hdERpYWxvZ0FjdGlvbnNdIixpbnB1dHM6WyJhbGlnbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0NvbnRlbnQsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWNvbnRlbnRdLCBtYXQtZGlhbG9nLWNvbnRlbnQsIFttYXREaWFsb2dDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJBZGRDb25uZWN0b3JEaWFsb2dDb21wb25lbnQiLHRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1hZGQtY29ubmVjdG9yLWRpYWxvZyIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9ImFkZC1jb25uZWN0b3IiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyAiZ2F0ZXdheS5hZGQtY29ubmVjdG9yIiB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJoZWxwTGlua0lkKCkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlc01hcCB8IGtleXZhbHVlIiBbdmFsdWVdPSJ0eXBlLmtleSI+XG4gICAgICAgICAgICAgICAge3sgdHlwZS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkubmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9Im9mZiIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDpcJ2dhdGV3YXkubmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS50b3VjaGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLkNVU1RPTSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuR1JQQyIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1rZXk8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5HUlBDICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5DVVNUT00iXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VEZWZhdWx0cyI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmZpbGwtY29ubmVjdG9yLWRlZmF1bHRzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5NUVRUIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc2VuZC1jaGFuZ2UtZGF0YVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbm5lY3RvckZvcm0uaW52YWxpZCB8fCAhY29ubmVjdG9yRm9ybS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5hZGQtY29ubmVjdG9ye21pbi13aWR0aDo0MDBweDt3aWR0aDo1MDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp2YX0se3R5cGU6WC5SZXNvdXJjZXNTZXJ2aWNlfV19KTtjbGFzcyBub3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy52YWx1ZVR5cGVLZXlzPU9iamVjdC52YWx1ZXMoR24pLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLnZhbHVlTGlzdEZvcm1BcnJheT10aGlzLmZiLmFycmF5KFtdKSx0aGlzLnZhbHVlTGlzdEZvcm1BcnJheS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXRyYWNrQnlLZXkoZSx0KXtyZXR1cm4gdH1hZGRLZXkoKXtjb25zdCBlPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0duLlNUUklOR10sc3RyaW5nOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oTHQpXV0sZG91YmxlOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV0sYm9vbGVhbjpbe3ZhbHVlOiExLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UoZSksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChlKX1vYnNlcnZlVHlwZUNoYW5nZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntlLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KCJ0eXBlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSxlLmdldCh0KS5lbmFibGUoe2VtaXRFdmVudDohMX0pfSkpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkubWFya0FzRGlydHkoKX12YWx1ZVRpdGxlKGUpe3JldHVybiBpZShlKT8ib2JqZWN0Ij09dHlwZW9mIGU/SlNPTi5zdHJpbmdpZnkoZSk6ZToiIn1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT17dHlwZTpbdC50eXBlXSxzdHJpbmc6W3t2YWx1ZToiIixkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saW50ZWdlcjpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKEx0KV1dLGRvdWJsZTpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZF1dLGJvb2xlYW46W3t2YWx1ZTohMSxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV19O2VbdC50eXBlXVswXT17dmFsdWU6dC52YWx1ZSxkaXNhYmxlZDohMX07Y29uc3Qgbj10aGlzLmZiLmdyb3VwKGUpO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UobiksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChuKX19dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkudmFsaWQ/bnVsbDp7dmFsdWVMaXN0Rm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUubWFwKCgoe3R5cGU6ZSwuLi50fSk9Pih7dHlwZTplLHZhbHVlOnRbZV19KSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOm5vLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bm8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJUeXBlVmFsdWVQYW5lbENvbXBvbmVudCIsbm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXR5cGUtdmFsdWUtcGFuZWwiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dfSk7Y2xhc3MgYW8gZXh0ZW5kcyBPe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnZhbHVlVHlwZUtleXM9T2JqZWN0LnZhbHVlcyhHbiksdGhpcy52YWx1ZVR5cGVFbnVtPUduLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLnJhd0RhdGE9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5NYXBwaW5nS2V5c1R5cGU9Tm4sdGhpcy5lcnJvclRleHQ9IiJ9bmdPbkluaXQoKXt0aGlzLmtleXNMaXN0Rm9ybUFycmF5PXRoaXMucHJlcGFyZUtleXNGb3JtQXJyYXkodGhpcy5rZXlzKX10cmFja0J5S2V5KGUsdCl7cmV0dXJuIHR9YWRkS2V5KCl7bGV0IGU7aWYoZT10aGlzLmtleXNUeXBlPT09Tm4uUlBDX01FVEhPRFM/dGhpcy5mYi5ncm91cCh7bWV0aG9kOlsiIixbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1tdLFtdXX0pOnRoaXMuZmIuZ3JvdXAoe2tleTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSksdGhpcy5rZXlzVHlwZSE9PU5uLkNVU1RPTSYmdGhpcy5rZXlzVHlwZSE9PU5uLlJQQ19NRVRIT0RTKXtjb25zdCB0PXRoaXMucmF3RGF0YT8icmF3Ijp0aGlzLnZhbHVlVHlwZUtleXNbMF07ZS5hZGRDb250cm9sKCJ0eXBlIix0aGlzLmZiLmNvbnRyb2wodCkpfXRoaXMua2V5c0xpc3RGb3JtQXJyYXkucHVzaChlKX1kZWxldGVLZXkoZSx0KXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMua2V5c0xpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpfWNhbmNlbCgpe3RoaXMucG9wb3Zlcj8uaGlkZSgpfWFwcGx5S2V5c0RhdGEoKXtsZXQgZT10aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlO2lmKHRoaXMua2V5c1R5cGU9PT1Obi5DVVNUT00pe2U9e307Zm9yKGxldCB0IG9mIHRoaXMua2V5c0xpc3RGb3JtQXJyYXkudmFsdWUpZVt0LmtleV09dC52YWx1ZX10aGlzLmtleXNEYXRhQXBwbGllZC5lbWl0KGUpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJih0aGlzLmtleXNUeXBlPT09Tm4uQ1VTVE9NJiYoZT1PYmplY3Qua2V5cyhlKS5tYXAoKHQ9Pih7a2V5OnQsdmFsdWU6ZVt0XSx0eXBlOiIifSkpKSksZS5mb3JFYWNoKChlPT57bGV0IG47aWYodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTKW49dGhpcy5mYi5ncm91cCh7bWV0aG9kOltlLm1ldGhvZCxbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1suLi5lLmFyZ3VtZW50c10sW11dfSk7ZWxzZXtjb25zdHtrZXk6dCx2YWx1ZTphLHR5cGU6b309ZTtuPXRoaXMuZmIuZ3JvdXAoe2tleTpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbYSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0eXBlOltvLFtdXX0pfXQucHVzaChuKX0pKSksdGhpcy5mYi5hcnJheSh0KX12YWx1ZVRpdGxlKGUpe2NvbnN0IHQ9ZS5nZXQodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTPyJtZXRob2QiOiJ2YWx1ZSIpLnZhbHVlO3JldHVybiBpZSh0KT8ib2JqZWN0Ij09dHlwZW9mIHQ/SlNPTi5zdHJpbmdpZnkodCk6dDoiIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6YW8sc2VsZWN0b3I6InRiLW1hcHBpbmctZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e3BhbmVsVGl0bGU6InBhbmVsVGl0bGUiLGFkZEtleVRpdGxlOiJhZGRLZXlUaXRsZSIsZGVsZXRlS2V5VGl0bGU6ImRlbGV0ZUtleVRpdGxlIixub0tleXNUZXh0OiJub0tleXNUZXh0IixrZXlzOiJrZXlzIixrZXlzVHlwZToia2V5c1R5cGUiLHZhbHVlVHlwZUtleXM6InZhbHVlVHlwZUtleXMiLHZhbHVlVHlwZUVudW06InZhbHVlVHlwZUVudW0iLHZhbHVlVHlwZXM6InZhbHVlVHlwZXMiLHJhd0RhdGE6InJhd0RhdGEiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LHByb3ZpZGVyczpbXSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmcta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUtleTsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImtleXNUeXBlICE9PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ2tleVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCctXCcgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgdmFsdWVUaXRsZShrZXlDb250cm9sKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5DVVNUT00gJiYga2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5KU09OUGF0aC1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmtleVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmtleS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rvci1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAgZmlsbC13aWR0aCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG5hbWU9InZhbHVlVHlwZSIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj0iIXJhd0RhdGEiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiIgY2xhc3M9InRiLW1hdC0xOCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lmljb24iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPSIhcmF3RGF0YTsgZWxzZSByYXdUZXh0Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKHZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd09wdGlvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9InZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiIgY2xhc3M9InRiLW1hdC0yMCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3T3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09IlwncmF3XCciPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJrZXlzVHlwZSA9PT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmtleTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ21ldGhvZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleUNvbnRyb2wuZ2V0KFwnYXJndW1lbnRzXCcpLnZhbHVlPy5sZW5ndGggKyBcJylcJ319XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLXR5cGUtdmFsdWUtcGFuZWwgZm9ybUNvbnRyb2xOYW1lPSJhcmd1bWVudHMiPjwvdGItdHlwZS12YWx1ZS1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUtleSgkZXZlbnQsICRpbmRleCkiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJkZWxldGVLZXlUaXRsZSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0iYWRkS2V5KCkiPlxuICAgICAgICB7eyBhZGRLZXlUaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI25vS2V5cz5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWZsZXggY2VudGVyIGFsaWduLWNlbnRlciBrZXktcGFuZWwiPlxuICAgICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IG5vS2V5c1RleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggZmxleC1lbmQiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iYXBwbHlLZXlzRGF0YSgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0ia2V5c0xpc3RGb3JtQXJyYXkuaW52YWxpZCB8fCAha2V5c0xpc3RGb3JtQXJyYXkuZGlydHkiPlxuICAgICAge3sgXCdhY3Rpb24uYXBwbHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWx7d2lkdGg6Nzd2dzttYXgtd2lkdGg6NzAwcHh9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye21heC13aWR0aDoxMXZ3O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC5rZXktcGFuZWx7aGVpZ2h0OjUwMHB4O292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCB0Yi12YWx1ZS1pbnB1dHt3aWR0aDoxMDAlfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlRhLG5hbWU6ImdldEdhdGV3YXlIZWxwTGluayJ9XX0pfX1lKCJNYXBwaW5nRGF0YUtleXNQYW5lbENvbXBvbmVudCIsYW8pLEhlKFtOKCldLGFvLnByb3RvdHlwZSwicmF3RGF0YSIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRhdGEta2V5cy1wYW5lbCIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy1rZXlzLXBhbmVsIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+e3sgcGFuZWxUaXRsZSAgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCArIFwnKVwnfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIGtleS1wYW5lbCIgKm5nSWY9ImtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aDsgZWxzZSBub0tleXMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgICAqbmdGb3I9ImxldCBrZXlDb250cm9sIG9mIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzOyB0cmFja0J5OiB0cmFja0J5S2V5OyBsZXQgJGluZGV4ID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDsiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ia2V5Q29udHJvbCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiIFtleHBhbmRlZF09Imxhc3QiPlxuICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7eyBcJy1cJyB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSAmJiBrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLlJQQ19NRVRIT0RTIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnBsYXRmb3JtLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ2tleVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgbmFtZT0idmFsdWVUeXBlIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPSIhcmF3RGF0YSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIiBjbGFzcz0idGItbWF0LTE4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdJY29uXT0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd1RleHQiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAodmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8fCB2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIXJhd0RhdGE7IGVsc2UgcmF3T3B0aW9uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIiBjbGFzcz0idGItbWF0LTIwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Z0ljb249Int7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8fCB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdPcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iXCdyYXdcJyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuSlNPTlBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS52YWx1ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkua2V5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0ia2V5c1R5cGUgPT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tZXRob2QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdtZXRob2RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hcmd1bWVudHNcJyB8IHRyYW5zbGF0ZSB9fXt7XCcgKFwnICsga2V5Q29udHJvbC5nZXQoXCdhcmd1bWVudHNcJykudmFsdWU/Lmxlbmd0aCArIFwnKVwnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGItdHlwZS12YWx1ZS1wYW5lbCBmb3JtQ29udHJvbE5hbWU9ImFyZ3VtZW50cyI+PC90Yi10eXBlLXZhbHVlLXBhbmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbHt3aWR0aDo3N3Z3O21heC13aWR0aDo3MDBweH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC50aXRsZS1jb250YWluZXJ7bWF4LXdpZHRoOjExdnc7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIHRiLXZhbHVlLWlucHV0e3dpZHRoOjEwMCV9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGItZm9ybS1wYW5lbCAubWF0LW1kYy1pY29uLWJ1dHRvbnt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MTZweDtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9XSxwcm9wRGVjb3JhdG9yczp7cGFuZWxUaXRsZTpbe3R5cGU6YX1dLGFkZEtleVRpdGxlOlt7dHlwZTphfV0sZGVsZXRlS2V5VGl0bGU6W3t0eXBlOmF9XSxub0tleXNUZXh0Olt7dHlwZTphfV0sa2V5czpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVUeXBlS2V5czpbe3R5cGU6YX1dLHZhbHVlVHlwZUVudW06W3t0eXBlOmF9XSx2YWx1ZVR5cGVzOlt7dHlwZTphfV0scmF3RGF0YTpbe3R5cGU6YX1dLHBvcG92ZXI6W3t0eXBlOmF9XSxrZXlzRGF0YUFwcGxpZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBvbyBleHRlbmRzIE97Z2V0IGRldmljZUluZm9UeXBlKCl7cmV0dXJuIHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZX1zZXQgZGV2aWNlSW5mb1R5cGUoZSl7dGhpcy5kZXZpY2VJbmZvVHlwZVZhbHVlIT09ZSYmKHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZT1lKX1jb25zdHJ1Y3RvcihlLHQsbixhKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy50cmFuc2xhdGU9dCx0aGlzLmRpYWxvZz1uLHRoaXMuZmI9YSx0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLnVzZVNvdXJjZT0hMCx0aGlzLnJlcXVpcmVkPSExLHRoaXMuc291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhUbiksdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLm1hcHBpbmdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldXX0pLHRoaXMudXNlU291cmNlJiZ0aGlzLm1hcHBpbmdGb3JtR3JvdXAuYWRkQ29udHJvbCgiZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiLHRoaXMuZmIuY29udHJvbCh0aGlzLnNvdXJjZVR5cGVzWzBdLFtdKSksdGhpcy5kZXZpY2VJbmZvVHlwZT09PWtuLkZVTEwmJih0aGlzLnVzZVNvdXJjZSYmdGhpcy5tYXBwaW5nRm9ybUdyb3VwLmFkZENvbnRyb2woImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIix0aGlzLmZiLmNvbnRyb2wodGhpcy5zb3VyY2VUeXBlc1swXSxbXSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5hZGRDb250cm9sKCJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGhpcy5mYi5jb250cm9sKCIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldKSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe313cml0ZVZhbHVlKGUpe3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnttYXBwaW5nRm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6b28sZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46WS5UcmFuc2xhdGVTZXJ2aWNlfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOnt1c2VTb3VyY2U6InVzZVNvdXJjZSIscmVxdWlyZWQ6InJlcXVpcmVkIixzb3VyY2VUeXBlczoic291cmNlVHlwZXMiLGRldmljZUluZm9UeXBlOiJkZXZpY2VJbmZvVHlwZSJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm9vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCIgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiBbY2xhc3MudGItcmVxdWlyZWRdPSJyZXF1aXJlZCIgdHJhbnNsYXRlPmRldmljZS5kZXZpY2U8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZSBuby1wYWRkaW5nIG5vLWdhcCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1uYW1lLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uZW50aXR5LWZpZWxkPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJ1c2VTb3VyY2UiIGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uc291cmNlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPlxuICAgICAgICBnYXRld2F5LmRldmljZS1pbmZvLmV4cHJlc3Npb25cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtYm9keSBuby1nYXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyB0b3Atc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICBbY2xhc3MuYm90dG9tLXNhbWUtcGFkZGluZ109ImRldmljZUluZm9UeXBlICE9PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLm5hbWU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgcmF3LXZhbHVlLW9wdGlvbiIgKm5nSWY9InVzZVNvdXJjZSI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93LWNlbGwgdGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLWluZm8uZGV2aWNlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyBib3R0b20tc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICAqbmdJZj0iZGV2aWNlSW5mb1R5cGUgPT09IERldmljZUluZm9UeXBlLkZVTEwiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8ucHJvZmlsZS1uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1wcm9maWxlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwncHJvZmlsZS1uYW1lXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2VcJykudmFsdWUgOiBzb3VyY2VUeXBlcyJcbiAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja306aG9zdCAudGItZm9ybS1yb3cuYm90dG9tLXNhbWUtcGFkZGluZ3twYWRkaW5nLWJvdHRvbToxNnB4fTpob3N0IC50Yi1mb3JtLXJvdy50b3Atc2FtZS1wYWRkaW5ne3BhZGRpbmctdG9wOjE2cHh9Omhvc3QgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHt3aWR0aDoxOSV9Omhvc3QgLnRhYmxlLWNvbHVtbnt3aWR0aDo0MCV9Omhvc3QgLnRhYmxlLW5hbWUtY29sdW1ue3dpZHRoOjIwJX06aG9zdCAucmF3LW5hbWV7d2lkdGg6MTklfTpob3N0IC5yYXctdmFsdWUtb3B0aW9ue21heC13aWR0aDo0MCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7ZGlzcGxheTpmbGV4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpndC5IZWxwUG9wdXBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwLXBvcHVwXSwgW3RiLWhlbHAtcG9wdXAtY29udGVudF0iLGlucHV0czpbInRiLWhlbHAtcG9wdXAiLCJ0Yi1oZWxwLXBvcHVwLWNvbnRlbnQiLCJ0cmlnZ2VyLXRleHQiLCJ0cmlnZ2VyLXN0eWxlIiwidGItaGVscC1wb3B1cC1wbGFjZW1lbnQiLCJ0Yi1oZWxwLXBvcHVwLXN0eWxlIiwiaGludE1vZGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIkRldmljZUluZm9UYWJsZUNvbXBvbmVudCIsb28pLEhlKFtOKCldLG9vLnByb3RvdHlwZSwidXNlU291cmNlIix2b2lkIDApLEhlKFtOKCldLG9vLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpvbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZGV2aWNlLWluZm8tdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+b28pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgW2NsYXNzLnRiLXJlcXVpcmVkXT0icmVxdWlyZWQiIHRyYW5zbGF0ZT5kZXZpY2UuZGV2aWNlPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUgbm8tcGFkZGluZyBuby1nYXAiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyLWNlbGwgdGFibGUtbmFtZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmVudGl0eS1maWVsZDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0idXNlU291cmNlIiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnNvdXJjZTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5cbiAgICAgICAgZ2F0ZXdheS5kZXZpY2UtaW5mby5leHByZXNzaW9uXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWJvZHkgbm8tZ2FwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgdG9wLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgW2NsYXNzLmJvdHRvbS1zYW1lLXBhZGRpbmddPSJkZXZpY2VJbmZvVHlwZSAhPT0gRGV2aWNlSW5mb1R5cGUuRlVMTCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgYm90dG9tLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgKm5nSWY9ImRldmljZUluZm9UeXBlID09PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnByb2ZpbGUtbmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCByYXctdmFsdWUtb3B0aW9uIiAqbmdJZj0idXNlU291cmNlIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3ctY2VsbCB0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdwcm9maWxlLW5hbWVcJyB8IGdldEdhdGV3YXlIZWxwTGluazogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLWZvcm0tcm93LmJvdHRvbS1zYW1lLXBhZGRpbmd7cGFkZGluZy1ib3R0b206MTZweH06aG9zdCAudGItZm9ybS1yb3cudG9wLXNhbWUtcGFkZGluZ3twYWRkaW5nLXRvcDoxNnB4fTpob3N0IC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7d2lkdGg6MTklfTpob3N0IC50YWJsZS1jb2x1bW57d2lkdGg6NDAlfTpob3N0IC50YWJsZS1uYW1lLWNvbHVtbnt3aWR0aDoyMCV9Omhvc3QgLnJhdy1uYW1le3dpZHRoOjE5JX06aG9zdCAucmF3LXZhbHVlLW9wdGlvbnttYXgtd2lkdGg6NDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7dXNlU291cmNlOlt7dHlwZTphfV0scmVxdWlyZWQ6W3t0eXBlOmF9XSxzb3VyY2VUeXBlczpbe3R5cGU6YX1dLGRldmljZUluZm9UeXBlOlt7dHlwZTphfV19fSk7Y2xhc3MgaW8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIscyxsKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5wb3BvdmVyU2VydmljZT1pLHRoaXMucmVuZGVyZXI9cix0aGlzLnZpZXdDb250YWluZXJSZWY9cyx0aGlzLnRyYW5zbGF0ZT1sLHRoaXMuTWFwcGluZ1R5cGU9Zm4sdGhpcy5xdWFsaXR5VHlwZXM9eG4sdGhpcy5RdWFsaXR5VHJhbnNsYXRpb25zTWFwPXZuLHRoaXMuY29udmVydG9yVHlwZXM9T2JqZWN0LnZhbHVlcyh3biksdGhpcy5Db252ZXJ0b3JUeXBlRW51bT13bix0aGlzLkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXA9Q24sdGhpcy5zb3VyY2VUeXBlcz1PYmplY3QudmFsdWVzKFRuKSx0aGlzLk9QQ1VhU291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhTbiksdGhpcy5PUENVYVNvdXJjZVR5cGVzRW51bT1Tbix0aGlzLnNvdXJjZVR5cGVzRW51bT1Ubix0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5yZXF1ZXN0VHlwZXM9T2JqZWN0LnZhbHVlcyhJbiksdGhpcy5SZXF1ZXN0VHlwZUVudW09SW4sdGhpcy5SZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXA9QW4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLlNlcnZlclNpZGVSUENUeXBlPVBuLHRoaXMuTWFwcGluZ0tleXNUeXBlPU5uLHRoaXMuTWFwcGluZ0hpbnRUcmFuc2xhdGlvbnNNYXA9Ym4sdGhpcy5NYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwPUJuLHRoaXMuSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwPWhuLHRoaXMua2V5c1BvcHVwQ2xvc2VkPSEwLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY3JlYXRlTWFwcGluZ0Zvcm0oKX1nZXQgY29udmVydGVyQXR0cmlidXRlcygpe2lmKHRoaXMuY29udmVydGVyVHlwZSlyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCh0aGlzLmNvbnZlcnRlclR5cGUpLnZhbHVlLmF0dHJpYnV0ZXMubWFwKChlPT5lLmtleSkpfWdldCBjb252ZXJ0ZXJUZWxlbWV0cnkoKXtpZih0aGlzLmNvbnZlcnRlclR5cGUpcmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKS52YWx1ZS50aW1lc2VyaWVzLm1hcCgoZT0+ZS5rZXkpKX1nZXQgb3BjQXR0cmlidXRlcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiYXR0cmlidXRlcyIpLnZhbHVlPy5tYXAoKGU9PmUua2V5KSl8fFtdfWdldCBvcGNUZWxlbWV0cnkoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoInRpbWVzZXJpZXMiKS52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgb3BjUnBjTWV0aG9kcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgicnBjX21ldGhvZHMiKS52YWx1ZT8ubWFwKChlPT5lLm1ldGhvZCkpfHxbXX1nZXQgb3BjQXR0cmlidXRlc1VwZGF0ZXMoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImF0dHJpYnV0ZXNfdXBkYXRlcyIpPy52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgY29udmVydGVyVHlwZSgpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyIikuZ2V0KCJ0eXBlIikudmFsdWV9Z2V0IGN1c3RvbUtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCgiY3VzdG9tIikudmFsdWUuZXh0ZW5zaW9uQ29uZmlnKX1nZXQgcmVxdWVzdE1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VHlwZSIpLnZhbHVlfWdldCByZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXQiKTtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtbGltaXRzLWVycm9yIix7bWluOjF9KToiIn1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWNyZWF0ZU1hcHBpbmdGb3JtKCl7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVEYXRhTWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVSZXF1ZXN0TWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMuY3JlYXRlT1BDVUFNYXBwaW5nRm9ybSgpfX1jYW5jZWwoKXt0aGlzLmtleXNQb3B1cENsb3NlZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5tYXBwaW5nRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5wcmVwYXJlTWFwcGluZ0RhdGEoKSl9bWFuYWdlS2V5cyhlLHQsbil7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBhPXQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZih0aGlzLnBvcG92ZXJTZXJ2aWNlLmhhc1BvcG92ZXIoYSkpdGhpcy5wb3BvdmVyU2VydmljZS5oaWRlUG9wb3ZlcihhKTtlbHNle2NvbnN0IGU9KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSE9PWZuLk9QQ1VBP3RoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKTp0aGlzLm1hcHBpbmdGb3JtKS5nZXQobiksdD17a2V5czplLnZhbHVlLGtleXNUeXBlOm4scmF3RGF0YTp0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKT8udmFsdWU9PT13bi5CWVRFUyxwYW5lbFRpdGxlOk1uLmdldChuKSxhZGRLZXlUaXRsZTpFbi5nZXQobiksZGVsZXRlS2V5VGl0bGU6cW4uZ2V0KG4pLG5vS2V5c1RleHQ6RG4uZ2V0KG4pfTt0aGlzLmRhdGEubWFwcGluZ1R5cGU9PT1mbi5PUENVQSYmKHQudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKFNuKSx0LnZhbHVlVHlwZUVudW09U24sdC52YWx1ZVR5cGVzPUxuKSx0aGlzLmtleXNQb3B1cENsb3NlZD0hMTtjb25zdCBvPXRoaXMucG9wb3ZlclNlcnZpY2UuZGlzcGxheVBvcG92ZXIoYSx0aGlzLnJlbmRlcmVyLHRoaXMudmlld0NvbnRhaW5lclJlZixhbywibGVmdEJvdHRvbSIsITEsbnVsbCx0LHt9LHt9LHt9LCEwKTtvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLnBvcG92ZXI9byxvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLmtleXNEYXRhQXBwbGllZC5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntvLmhpZGUoKSxlLnBhdGNoVmFsdWUodCksZS5tYXJrQXNEaXJ0eSgpfSkpLG8udGJIaWRlU3RhcnQucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMua2V5c1BvcHVwQ2xvc2VkPSEwfSkpfX1wcmVwYXJlTWFwcGluZ0RhdGEoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0udmFsdWU7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjp0LHRvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmF9PWU7cmV0dXJue3RvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmEsY29udmVydGVyOnt0eXBlOnQudHlwZSwuLi50W3QudHlwZV19fTtjYXNlIGZuLlJFUVVFU1RTOnJldHVybntyZXF1ZXN0VHlwZTplLnJlcXVlc3RUeXBlLHJlcXVlc3RWYWx1ZTplLnJlcXVlc3RWYWx1ZVtlLnJlcXVlc3RUeXBlXX07ZGVmYXVsdDpyZXR1cm4gZX19Z2V0Rm9ybVZhbHVlRGF0YSgpe2lmKHRoaXMuZGF0YS52YWx1ZSYmT2JqZWN0LmtleXModGhpcy5kYXRhLnZhbHVlKS5sZW5ndGgpc3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjplLHRvcGljRmlsdGVyOnQsc3Vic2NyaXB0aW9uUW9zOm59PXRoaXMuZGF0YS52YWx1ZTtyZXR1cm57dG9waWNGaWx0ZXI6dCxzdWJzY3JpcHRpb25Rb3M6bixjb252ZXJ0ZXI6e3R5cGU6ZS50eXBlLFtlLnR5cGVdOnsuLi5lfX19O2Nhc2UgZm4uUkVRVUVTVFM6cmV0dXJue3JlcXVlc3RUeXBlOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VHlwZSxyZXF1ZXN0VmFsdWU6e1t0aGlzLmRhdGEudmFsdWUucmVxdWVzdFR5cGVdOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VmFsdWV9fTtkZWZhdWx0OnJldHVybiB0aGlzLmRhdGEudmFsdWV9fWNyZWF0ZURhdGFNYXBwaW5nRm9ybSgpe3RoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgidG9waWNGaWx0ZXIiLHRoaXMuZmIuY29udHJvbCgiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJzdWJzY3JpcHRpb25Rb3MiLHRoaXMuZmIuY29udHJvbCgwKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJjb252ZXJ0ZXIiLHRoaXMuZmIuZ3JvdXAoe3R5cGU6W3duLkpTT04sW11dLGpzb246dGhpcy5mYi5ncm91cCh7ZGV2aWNlSW5mbzpbe30sW11dLGF0dHJpYnV0ZXM6W1tdLFtdXSx0aW1lc2VyaWVzOltbXSxbXV19KSxieXRlczp0aGlzLmZiLmdyb3VwKHtkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXX0pLGN1c3RvbTp0aGlzLmZiLmdyb3VwKHtleHRlbnNpb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGV4dGVuc2lvbkNvbmZpZzpbe30sW11dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShSZSh0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpO3QuZ2V0KCJqc29uIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImJ5dGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImN1c3RvbSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KGUpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9Y3JlYXRlUmVxdWVzdE1hcHBpbmdGb3JtKCl7dGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJyZXF1ZXN0VHlwZSIsdGhpcy5mYi5jb250cm9sKEluLkNPTk5FQ1RfUkVRVUVTVCxbXSkpLHRoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgicmVxdWVzdFZhbHVlIix0aGlzLmZiLmdyb3VwKHtjb25uZWN0UmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86W3t9LFtdXX0pLGRpc2Nvbm5lY3RSZXF1ZXN0czp0aGlzLmZiLmdyb3VwKHt0b3BpY0ZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlSW5mbzpbe30sW11dfSksYXR0cmlidXRlUmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZF1dfSksYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sYXR0cmlidXRlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWVFeHByZXNzaW9uOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXRhaW46WyExLFtdXX0pLGF0dHJpYnV0ZVVwZGF0ZXM6dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXR0cmlidXRlRmlsdGVyOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0b3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmV0YWluOlshMCxbXV19KSxzZXJ2ZXJTaWRlUnBjOnRoaXMuZmIuZ3JvdXAoe3R5cGU6W1BuLlRXT19XQVksW11dLGRldmljZU5hbWVGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZEZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY1FvUzpbMCxbXV0scmVzcG9uc2VUaW1lb3V0OlsxZTQsW3VlLnJlcXVpcmVkLHVlLm1pbigxKV1dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoUmUodGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWUpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUiKTt0LmdldCgiY29ubmVjdFJlcXVlc3RzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImRpc2Nvbm5lY3RSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVVcGRhdGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInNlcnZlclNpZGVScGMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldChlKS5lbmFibGUoKX0pKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgicmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYyIpO2U9PT1Qbi5PTkVfV0FZPyh0LmdldCgicmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgicmVzcG9uc2VUb3BpY1FvUyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSk6KHQuZ2V0KCJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInJlc3BvbnNlVG9waWNRb1MiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKX0pKSx0aGlzLm1hcHBpbmdGb3JtLnBhdGNoVmFsdWUodGhpcy5nZXRGb3JtVmFsdWVEYXRhKCkpfWNyZWF0ZU9QQ1VBTWFwcGluZ0Zvcm0oKXt0aGlzLm1hcHBpbmdGb3JtPXRoaXMuZmIuZ3JvdXAoe2RldmljZU5vZGVTb3VyY2U6W1NuLlBBVEgsW11dLGRldmljZU5vZGVQYXR0ZXJuOlsiIixbdWUucmVxdWlyZWRdXSxkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXSxycGNfbWV0aG9kczpbW10sW11dLGF0dHJpYnV0ZXNfdXBkYXRlczpbW10sW11dfSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmlvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmlvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRpYWxvZyIsdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtIiBjbGFzcz0ia2V5LW1hcHBpbmciPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBNYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0iSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwLmdldCh0aGlzLmRhdGEubWFwcGluZ1R5cGUpIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPlxuICAgICAgICB7eyBNYXBwaW5nSGludFRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJkYXRhLm1hcHBpbmdUeXBlIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5EQVRBIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50b3BpYy1maWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZDsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS90b3BpYy1maWx0ZXJfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1Rb3MtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1xdHQtcW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3Vic2NyaXB0aW9uUW9zIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcXVhbGl0eVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9ImNvbnZlcnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGF5bG9hZC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBjb252ZXJ0b3JUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyBDb252ZXJ0b3JUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5kYXRhLWNvbnZlcnNpb248L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgICAgICAgICAge3sgRGF0YUNvbnZlcnNpb25UcmFuc2xhdGlvbnNNYXAuZ2V0KGNvbnZlcnRlclR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iY29udmVydGVyVHlwZSIgW25nU3dpdGNoXT0iY29udmVydGVyVHlwZSI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb252ZXJ0b3JUeXBlRW51bS5KU09OIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkJZVEVTIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvdXJjZVR5cGVzXT0iW3NvdXJjZVR5cGVzRW51bS5NU0csIHNvdXJjZVR5cGVzRW51bS5DT05TVF0iIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkJZVEVTIHx8IGNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJjb252ZXJ0ZXJBdHRyaWJ1dGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2YgY29udmVydGVyQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHRlbGVtZXRyeUJ1dHRvbiwgTWFwcGluZ0tleXNUeXBlLlRJTUVTRVJJRVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmV4dGVuc2lvbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5leHRlbnNpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZXh0ZW5zaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmV4dGVuc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwnY29udmVydGVyLmN1c3RvbS5leHRlbnNpb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5rZXlzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImN1c3RvbUtleXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBjdXN0b21LZXlzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAja2V5c0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwga2V5c0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkNVU1RPTSkiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdHlwZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcXVlc3RUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgUmVxdWVzdFR5cGVzVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0icmVxdWVzdFZhbHVlIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpIiBbbmdTd2l0Y2hdPSJyZXF1ZXN0TWFwcGluZ1R5cGUiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0icmVxdWVzdE1hcHBpbmdUeXBlID09PSBSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5ESVNDT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgW2Zvcm1Db250cm9sXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS50b3BpYy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5QQVJUSUFMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZnJvbS1kZXZpY2UtcmVxdWVzdC1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnRcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiIGZvcm1Hcm91cE5hbWU9ImRldmljZUluZm8iPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMuYXR0cmlidXRlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUgdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS50by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJldGFpbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkFUVFJJQlVURV9VUERBVEUiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmRldmljZU5hbWVGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuYXR0cmlidXRlLWZpbHRlci1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZUZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5hdHRyaWJ1dGVGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0icmV0YWluIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5TRVJWRVJfU0lERV9SUEMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgY2VudGVyIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuVFdPX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IlNlcnZlclNpZGVSUENUeXBlLk9ORV9XQVkiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LndpdGhvdXQtcmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tZXRob2QtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLm1ldGhvZEZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy50eXBlXCcpLnZhbHVlID09PSBTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljUW9TIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFF1YWxpdHlUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVGltZW91dCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0icmVzcG9uc2VUaW1lb3V0RXJyb3JUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iTWFwcGluZ1R5cGUuT1BDVUEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBkZXZpY2UtY29uZmlnIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVTb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBbT1BDVWFTb3VyY2VUeXBlc0VudW0uUEFUSCwgT1BDVWFTb3VyY2VUeXBlc0VudW0uSURFTlRJRklFUl0iIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBkZXZpY2Utbm9kZS1wYXR0ZXJuLWZpZWxkIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOb2RlUGF0dGVybiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVQYXR0ZXJuXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdkZXZpY2Utbm9kZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlU291cmNlXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbc291cmNlVHlwZXNdPSJPUENVYVNvdXJjZVR5cGVzIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY0F0dHJpYnV0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNBdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIG9wY0F0dHJpYnV0ZXNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5BVFRSSUJVVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudGltZXNlcmllczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBvcGNUZWxlbWV0cnkiPlxuICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNUZWxlbWV0cnlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjVGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNBdHRyaWJ1dGVzVXBkYXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlc1VwZGF0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVNfVVBEQVRFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy1tZXRob2RzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNScGNNZXRob2RzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNScGNNZXRob2RzIj5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dHJpYnV0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAjcnBjTWV0aG9kc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBycGNNZXRob2RzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJtYXBwaW5nRm9ybS5pbnZhbGlkIHx8ICFtYXBwaW5nRm9ybS5kaXJ0eSB8fCAha2V5c1BvcHVwQ2xvc2VkIj5cbiAgICAgIHt7IHRoaXMuZGF0YS5idXR0b25UaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJX06aG9zdCAua2V5LW1hcHBpbmd7bWF4LXdpZHRoOjkwMHB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLmtleS1tYXBwaW5nIC5tYXQtdG9vbGJhcnttaW4taGVpZ2h0OjY0cHh9Omhvc3QgLmtleS1tYXBwaW5nIHRiLXRvZ2dsZS1zZWxlY3R7cGFkZGluZzo0cHggMH06aG9zdCAubWF0LW1kYy1kaWFsb2ctY29udGVudHtoZWlnaHQ6NjcwcHh9Omhvc3QgLmVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lcnttYXgtd2lkdGg6NzAlfTpob3N0IDo6bmctZGVlcCAua2V5LW1hcHBpbmcgLm1hdC1tZGMtY2hpcC1saXN0Ym94IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDpub3dyYXB9Omhvc3QgOjpuZy1kZWVwIC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjQwcHg7d2lkdGg6MzUlO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5tYXQtbWRjLWZvcm0tZmllbGR7d2lkdGg6MH06aG9zdCA6Om5nLWRlZXAgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9Omhvc3QgOjpuZy1kZWVwIC5kZXZpY2UtY29uZmlne2dhcDoxMnB4O3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1ub2RlLXBhdHRlcm4tZmllbGR7ZmxleC1iYXNpczozJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcCxzZWxlY3RvcjoibWF0LWJhc2ljLWNoaXAsIFttYXQtYmFzaWMtY2hpcF0sIG1hdC1jaGlwLCBbbWF0LWNoaXBdIixpbnB1dHM6WyJyb2xlIiwiaWQiLCJhcmlhLWxhYmVsIiwiYXJpYS1kZXNjcmlwdGlvbiIsInZhbHVlIiwiY29sb3IiLCJyZW1vdmFibGUiLCJoaWdobGlnaHRlZCIsImRpc2FibGVSaXBwbGUiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJyZW1vdmVkIiwiZGVzdHJveWVkIl0sZXhwb3J0QXM6WyJtYXRDaGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcExpc3Rib3gsc2VsZWN0b3I6Im1hdC1jaGlwLWxpc3Rib3giLGlucHV0czpbIm11bHRpcGxlIiwiYXJpYS1vcmllbnRhdGlvbiIsInNlbGVjdGFibGUiLCJjb21wYXJlV2l0aCIsInJlcXVpcmVkIiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInZhbHVlIl0sb3V0cHV0czpbImNoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTprYSxzZWxlY3RvcjoiW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF0iLGlucHV0czpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOlsidXNlU291cmNlIiwicmVxdWlyZWQiLCJzb3VyY2VUeXBlcyIsImRldmljZUluZm9UeXBlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV19KX19ZSgiTWFwcGluZ0RpYWxvZ0NvbXBvbmVudCIsaW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6aW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1hcHBpbmctZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPGRpdiBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0iIGNsYXNzPSJrZXktbWFwcGluZyI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IE1hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAuZ2V0KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgIHt7IE1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImRhdGEubWFwcGluZ1R5cGUiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLkRBVEEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0ZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudG9waWMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3NcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdWJzY3JpcHRpb25Rb3MiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBRdWFsaXR5VHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0iY29udmVydGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXlsb2FkLXR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGNvbnZlcnRvclR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgIHt7IENvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmRhdGEtY29udmVyc2lvbjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj5cbiAgICAgICAgICAgICAgICB7eyBEYXRhQ29udmVyc2lvblRyYW5zbGF0aW9uc01hcC5nZXQoY29udmVydGVyVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cE5hbWVdPSJjb252ZXJ0ZXJUeXBlIiBbbmdTd2l0Y2hdPSJjb252ZXJ0ZXJUeXBlIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29udmVydG9yVHlwZUVudW0uQllURVMiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc291cmNlVHlwZXNdPSJbc291cmNlVHlwZXNFbnVtLk1TRywgc291cmNlVHlwZXNFbnVtLkNPTlNUXSIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQllURVMgfHwgY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uSlNPTiI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlckF0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBjb252ZXJ0ZXJBdHRyaWJ1dGVzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnRpbWVzZXJpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGVsZW1ldHJ5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJjb252ZXJ0ZXJUeXBlID09PSBDb252ZXJ0b3JUeXBlRW51bS5DVVNUT00iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmV4dGVuc2lvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJleHRlbnNpb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZXh0ZW5zaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2NvbnZlcnRlci5jdXN0b20uZXh0ZW5zaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiBzYW1lLXBhZGRpbmcgdGItZmxleCBjb2x1bW4iPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5leHRlbnNpb24tY29uZmlndXJhdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj57eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24taGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmtleXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY3VzdG9tS2V5cyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGN1c3RvbUtleXMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNrZXlzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBrZXlzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVxdWVzdC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcmVxdWVzdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBSZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJyZXF1ZXN0VmFsdWUiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkiIFtuZ1N3aXRjaF09InJlcXVlc3RNYXBwaW5nVHlwZSI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJyZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG9waWMtZmlsdGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBbZm9ybUNvbnRyb2xdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvdG9waWMtZmlsdGVyX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uRElTQ09OTkVDVF9SRVFVRVNUIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLlBBUlRJQUwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LmZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciIgZm9ybUdyb3VwTmFtZT0iZGV2aWNlSW5mbyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5ncy1oaW50XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldGFpbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1VQREFURSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuYXR0cmlidXRlRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXRhaW4taGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLlNFUlZFUl9TSURFX1JQQyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBjZW50ZXIgYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS53aXRoLXJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuT05FX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aG91dC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWV0aG9kLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5tZXRob2RGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnR5cGVcJykudmFsdWUgPT09IFNlcnZlclNpZGVSUENUeXBlLlRXT19XQVkiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVG9waWNRb1MiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHF1YWxpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJyZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUaW1lb3V0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5PUENVQSI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGRldmljZS1jb25maWciPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTm9kZVNvdXJjZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIFtPUENVYVNvdXJjZVR5cGVzRW51bS5QQVRILCBPUENVYVNvdXJjZVR5cGVzRW51bS5JREVOVElGSUVSXSIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGRldmljZS1ub2RlLXBhdHRlcm4tZmllbGQiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVQYXR0ZXJuIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlUGF0dGVyblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ2RldmljZS1ub2RlXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVTb3VyY2VcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtzb3VyY2VUeXBlc109Ik9QQ1VhU291cmNlVHlwZXMiIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjQXR0cmlidXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY0F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjQXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIG9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY1RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBvcGNUZWxlbWV0cnlCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5USU1FU0VSSUVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlLXVwZGF0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXNVcGRhdGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNBdHRyaWJ1dGVzVXBkYXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIGF0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFU19VUERBVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLW1ldGhvZHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1JwY01ldGhvZHMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY1JwY01ldGhvZHMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNycGNNZXRob2RzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY01ldGhvZHNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09Im1hcHBpbmdGb3JtLmludmFsaWQgfHwgIW1hcHBpbmdGb3JtLmRpcnR5IHx8ICFrZXlzUG9wdXBDbG9zZWQiPlxuICAgICAge3sgdGhpcy5kYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpncmlkO2hlaWdodDoxMDAlfTpob3N0IC5rZXktbWFwcGluZ3ttYXgtd2lkdGg6OTAwcHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAua2V5LW1hcHBpbmcgLm1hdC10b29sYmFye21pbi1oZWlnaHQ6NjRweH06aG9zdCAua2V5LW1hcHBpbmcgdGItdG9nZ2xlLXNlbGVjdHtwYWRkaW5nOjRweCAwfTpob3N0IC5tYXQtbWRjLWRpYWxvZy1jb250ZW50e2hlaWdodDo2NzBweH06aG9zdCAuZWxsaXBzaXMtY2hpcHMtY29udGFpbmVye21heC13aWR0aDo3MCV9Omhvc3QgOjpuZy1kZWVwIC5rZXktbWFwcGluZyAubWF0LW1kYy1jaGlwLWxpc3Rib3ggLm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBze2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOm5vd3JhcH06aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6NDBweDt3aWR0aDozNSU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAudGItZm9ybS1yb3cgLm1hdC1tZGMtZm9ybS1maWVsZHt3aWR0aDowfTpob3N0IDo6bmctZGVlcCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1jb25maWd7Z2FwOjEycHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fTpob3N0IDo6bmctZGVlcCAuZGV2aWNlLW5vZGUtcGF0dGVybi1maWVsZHtmbGV4LWJhc2lzOjMlfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSk7Y2xhc3Mgcm97c2V0IG1hcHBpbmdUeXBlKGUpe3RoaXMubWFwcGluZ1R5cGVWYWx1ZSE9PWUmJih0aGlzLm1hcHBpbmdUeXBlVmFsdWU9ZSl9Z2V0IG1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ1R5cGVWYWx1ZX1jb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLnRyYW5zbGF0ZT1lLHRoaXMuZGlhbG9nPXQsdGhpcy5kaWFsb2dTZXJ2aWNlPW4sdGhpcy5mYj1hLHRoaXMucmVxdWlyZWQ9ITEsdGhpcy5tYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLm1hcHBpbmdUeXBlRW51bT1mbix0aGlzLmRpc3BsYXllZENvbHVtbnM9W10sdGhpcy5tYXBwaW5nQ29sdW1ucz1bXSx0aGlzLnRleHRTZWFyY2hNb2RlPSExLHRoaXMuaGlkZVBhZ2VTaXplPSExLHRoaXMuYWN0aXZlVmFsdWU9ITEsdGhpcy5kaXJ0eVZhbHVlPSExLHRoaXMudGV4dFNlYXJjaD10aGlzLmZiLmNvbnRyb2woIiIse25vbk51bGxhYmxlOiEwfSksdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFwcGluZ0Zvcm1Hcm91cD10aGlzLmZiLmFycmF5KFtdKSx0aGlzLmRpcnR5VmFsdWU9IXRoaXMuYWN0aXZlVmFsdWUsdGhpcy5kYXRhU291cmNlPW5ldyBzb31uZ09uSW5pdCgpe3RoaXMuc2V0TWFwcGluZ0NvbHVtbnMoKSx0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCguLi50aGlzLm1hcHBpbmdDb2x1bW5zLm1hcCgoZT0+ZS5kZWYpKSwiYWN0aW9ucyIpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVUYWJsZURhdGEoZSksdGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGV4dFNlYXJjaC52YWx1ZUNoYW5nZXMucGlwZShWZSgxNTApLEJlKCgoZSx0KT0+KGU/PyIiKT09PXQudHJpbSgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9ZS50cmltKCk7dGhpcy51cGRhdGVUYWJsZURhdGEodGhpcy5tYXBwaW5nRm9ybUdyb3VwLnZhbHVlLHQudHJpbSgpKX0pKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5tYXBwaW5nRm9ybUdyb3VwLmNsZWFyKCksdGhpcy5wdXNoRGF0YUFzRm9ybUFycmF5cyhlKX12YWxpZGF0ZSgpe3JldHVybiF0aGlzLnJlcXVpcmVkfHx0aGlzLm1hcHBpbmdGb3JtR3JvdXAuY29udHJvbHMubGVuZ3RoP251bGw6e21hcHBpbmdGb3JtR3JvdXA6e3ZhbGlkOiExfX19ZW50ZXJGaWx0ZXJNb2RlKCl7dGhpcy50ZXh0U2VhcmNoTW9kZT0hMCxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5zZWFyY2hJbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKX0pLDEwKX1leGl0RmlsdGVyTW9kZSgpe3RoaXMudXBkYXRlVGFibGVEYXRhKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VNYXBwaW5nKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPWllKHQpP3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5hdCh0KS52YWx1ZTp7fTt0aGlzLmRpYWxvZy5vcGVuKGlvLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7bWFwcGluZ1R5cGU6dGhpcy5tYXBwaW5nVHlwZSx2YWx1ZTpuLGJ1dHRvblRpdGxlOnJlKHQpPyJhY3Rpb24uYWRkIjoiYWN0aW9uLmFwcGx5In19KS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihpZSh0KT90aGlzLm1hcHBpbmdGb3JtR3JvdXAuYXQodCkucGF0Y2hWYWx1ZShlKTp0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKFtlXSksdGhpcy5tYXBwaW5nRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfXVwZGF0ZVRhYmxlRGF0YShlLHQpe2xldCBuPWUubWFwKChlPT50aGlzLmdldE1hcHBpbmdWYWx1ZShlKSkpO3QmJihuPW4uZmlsdGVyKChlPT5PYmplY3QudmFsdWVzKGUpLnNvbWUoKGU9PmUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSkpKSkpKSx0aGlzLmRhdGFTb3VyY2UubG9hZERhdGEobil9ZGVsZXRlTWFwcGluZyhlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtbWFwcGluZy10aXRsZSIpLCIiLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi5ubyIpLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi55ZXMiKSwhMCkuc3Vic2NyaWJlKChlPT57ZSYmKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5yZW1vdmVBdCh0KSx0aGlzLm1hcHBpbmdGb3JtR3JvdXAubWFya0FzRGlydHkoKSl9KSl9cHVzaERhdGFBc0Zvcm1BcnJheXMoZSl7ZT8ubGVuZ3RoJiZlLmZvckVhY2goKGU9PnRoaXMubWFwcGluZ0Zvcm1Hcm91cC5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1nZXRNYXBwaW5nVmFsdWUoZSl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTpjb25zdCB0PUNuLmdldChlLmNvbnZlcnRlcj8udHlwZSk7cmV0dXJue3RvcGljRmlsdGVyOmUudG9waWNGaWx0ZXIsUW9TOmUuc3Vic2NyaXB0aW9uUW9zLGNvbnZlcnRlcjp0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQodCk6IiJ9O2Nhc2UgZm4uUkVRVUVTVFM6bGV0IG47Y29uc3QgYT1lO3JldHVybiBuPWEucmVxdWVzdFR5cGU9PT1Jbi5BVFRSSUJVVEVfVVBEQVRFP2EucmVxdWVzdFZhbHVlLmF0dHJpYnV0ZUZpbHRlcjphLnJlcXVlc3RUeXBlPT09SW4uU0VSVkVSX1NJREVfUlBDP2EucmVxdWVzdFZhbHVlLm1ldGhvZEZpbHRlcjphLnJlcXVlc3RWYWx1ZS50b3BpY0ZpbHRlcix7cmVxdWVzdFR5cGU6ZS5yZXF1ZXN0VHlwZSx0eXBlOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoQW4uZ2V0KGUucmVxdWVzdFR5cGUpKSxkZXRhaWxzOm59O2Nhc2UgZm4uT1BDVUE6Y29uc3Qgbz1lLmRldmljZUluZm8/LmRldmljZU5hbWVFeHByZXNzaW9uLGk9ZS5kZXZpY2VJbmZvPy5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbix7ZGV2aWNlTm9kZVBhdHRlcm46cn09ZTtyZXR1cm57ZGV2aWNlTm9kZVBhdHRlcm46cixkZXZpY2VOYW1lUGF0dGVybjpvLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOml9O2RlZmF1bHQ6cmV0dXJue319fXNldE1hcHBpbmdDb2x1bW5zKCl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTp0aGlzLm1hcHBpbmdDb2x1bW5zLnB1c2goe2RlZjoidG9waWNGaWx0ZXIiLHRpdGxlOiJnYXRld2F5LnRvcGljLWZpbHRlciJ9LHtkZWY6IlFvUyIsdGl0bGU6ImdhdGV3YXkubXF0dC1xb3MifSx7ZGVmOiJjb252ZXJ0ZXIiLHRpdGxlOiJnYXRld2F5LnBheWxvYWQtdHlwZSJ9KTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJ0eXBlIix0aXRsZToiZ2F0ZXdheS50eXBlIn0se2RlZjoiZGV0YWlscyIsdGl0bGU6ImdhdGV3YXkuZGV0YWlscyJ9KTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJkZXZpY2VOb2RlUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5vZGUifSx7ZGVmOiJkZXZpY2VOYW1lUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5hbWUifSx7ZGVmOiJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLXByb2ZpbGUifSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cm8sZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpybyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIixtYXBwaW5nVHlwZToibWFwcGluZ1R5cGUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cm8pKSxtdWx0aTohMH1dLHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzZWFyY2hJbnB1dEZpZWxkIixmaXJzdDohMCxwcmVkaWNhdGU6WyJzZWFyY2hJbnB1dCJdLGRlc2NlbmRhbnRzOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmctdGFibGUgdGItYWJzb2x1dGUtZmlsbCI+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLXRpdGxlIj57e21hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldChtYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJlbnRlckZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5zZWFyY2hcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0idGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPiZuYnNwOzwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0idGV4dFNlYXJjaCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnY29tbW9uLmVudGVyLXNlYXJjaFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9ImV4aXRGaWx0ZXJNb2RlKCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uY2xvc2VcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPGRpdiBjbGFzcz0idGFibGUtY29udGFpbmVyIj5cbiAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iY29sdW1uLmRlZiIgKm5nRm9yPSJsZXQgY29sdW1uIG9mIG1hcHBpbmdDb2x1bW5zOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCB0YlRydW5jYXRlV2l0aFRvb2x0aXAgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IG1hcHBpbmdbY29sdW1uLmRlZl0gfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImFjdGlvbnMiIHN0aWNreUVuZD5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJywgdGV4dEFsaWduOiBcJ2NlbnRlclwnfSI+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgbWFwcGluZzsgbGV0IGkgPSBpbmRleCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCd9Ij5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcm93QWN0aW9ucz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlTWFwcGluZygkZXZlbnQsIGkpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbj5kZWxldGU8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cubHQtbGcgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09ImNlbGxBY3Rpb25zTWVudSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjY2VsbEFjdGlvbnNNZW51PSJtYXRNZW51IiB4UG9zaXRpb249ImJlZm9yZSI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBbbmdDbGFzc109IntcJ21hdC1yb3ctc2VsZWN0XCc6IHRydWV9IiAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9ImxldCBtYXBwaW5nOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDxzZWN0aW9uIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUgJiYgKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpIiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1oZWFkbGluZS01IHRiLWFic29sdXRlLWZpbGwgdGItYWRkLW5ldyI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz0iY29ubmVjdG9yIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnR7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQudGItb3V0bGluZWQtYm9yZGVye2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRpdGxlLWNvbnRhaW5lcntvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGItbWFwcGluZy10YWJsZS10aXRsZXtwYWRkaW5nLXJpZ2h0OjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1ue3BhZGRpbmc6MCAxMnB4O3dpZHRoOjIzJX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbi5yZXF1ZXN0LWNvbHVtbnt3aWR0aDozOCV9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAuZWxsaXBzaXN7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctYm90dG9tOjVweDt3aWR0aDoxMDAlfX06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbHtjdXJzb3I6cG9pbnRlcn06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbCAubWF0LWljb257aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtmb250LXNpemU6MjRweDtjb2xvcjojNzU3NTc1fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5Bc3luY1BpcGUsbmFtZToiYXN5bmMifSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdENsYXNzRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ0NsYXNzXSwgW25nQ2xhc3MueHNdLCBbbmdDbGFzcy5zbV0sIFtuZ0NsYXNzLm1kXSwgW25nQ2xhc3MubGddLCBbbmdDbGFzcy54bF0sICBbbmdDbGFzcy5sdC1zbV0sIFtuZ0NsYXNzLmx0LW1kXSwgW25nQ2xhc3MubHQtbGddLCBbbmdDbGFzcy5sdC14bF0sICBbbmdDbGFzcy5ndC14c10sIFtuZ0NsYXNzLmd0LXNtXSwgW25nQ2xhc3MuZ3QtbWRdLCBbbmdDbGFzcy5ndC1sZ10iLGlucHV0czpbIm5nQ2xhc3MiLCJuZ0NsYXNzLnhzIiwibmdDbGFzcy5zbSIsIm5nQ2xhc3MubWQiLCJuZ0NsYXNzLmxnIiwibmdDbGFzcy54bCIsIm5nQ2xhc3MubHQtc20iLCJuZ0NsYXNzLmx0LW1kIiwibmdDbGFzcy5sdC1sZyIsIm5nQ2xhc3MubHQteGwiLCJuZ0NsYXNzLmd0LXhzIiwibmdDbGFzcy5ndC1zbSIsIm5nQ2xhc3MuZ3QtbWQiLCJuZ0NsYXNzLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U3R5bGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nU3R5bGVdLCAgW25nU3R5bGUueHNdLCBbbmdTdHlsZS5zbV0sIFtuZ1N0eWxlLm1kXSwgW25nU3R5bGUubGddLCBbbmdTdHlsZS54bF0sICBbbmdTdHlsZS5sdC1zbV0sIFtuZ1N0eWxlLmx0LW1kXSwgW25nU3R5bGUubHQtbGddLCBbbmdTdHlsZS5sdC14bF0sICBbbmdTdHlsZS5ndC14c10sIFtuZ1N0eWxlLmd0LXNtXSwgW25nU3R5bGUuZ3QtbWRdLCBbbmdTdHlsZS5ndC1sZ10iLGlucHV0czpbIm5nU3R5bGUiLCJuZ1N0eWxlLnhzIiwibmdTdHlsZS5zbSIsIm5nU3R5bGUubWQiLCJuZ1N0eWxlLmxnIiwibmdTdHlsZS54bCIsIm5nU3R5bGUubHQtc20iLCJuZ1N0eWxlLmx0LW1kIiwibmdTdHlsZS5sdC1sZyIsIm5nU3R5bGUubHQteGwiLCJuZ1N0eWxlLmd0LXhzIiwibmdTdHlsZS5ndC1zbSIsIm5nU3R5bGUuZ3QtbWQiLCJuZ1N0eWxlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJ0LlRiSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItaWNvbiIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbInRiSWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIk1hcHBpbmdUYWJsZUNvbXBvbmVudCIscm8pLEhlKFtOKCldLHJvLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpybyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbWFwcGluZy10YWJsZSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy10YWJsZSB0Yi1hYnNvbHV0ZS1maWxsIj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InRiLW1hcHBpbmctdGFibGUtY29udGVudCI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiICpuZ0lmPSIoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykgPT09IGZhbHNlIj5cbiAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzdGFydCBjZW50ZXIiIGZ4TGF5b3V0LnhzPSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ24ueHM9ImNlbnRlciBzdGFydCIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9InRiLW1hcHBpbmctdGFibGUtdGl0bGUiPnt7bWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KG1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJjb2x1bW4uZGVmIiAqbmdGb3I9ImxldCBjb2x1bW4gb2YgbWFwcGluZ0NvbHVtbnM7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgY29sdW1uLnRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCAqbWF0Q2VsbERlZj0ibGV0IG1hcHBpbmciIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgbWFwcGluZ1tjb2x1bW4uZGVmXSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCc5NnB4XCcsIG1heFdpZHRoOiBcJzk2cHhcJywgd2lkdGg6IFwnOTZweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZGVsZXRlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmRlbGV0ZTwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmd0LW1kIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5sdC1sZyBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT0iY2VsbEFjdGlvbnNNZW51Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNjZWxsQWN0aW9uc01lbnU9Im1hdE1lbnUiIHhQb3NpdGlvbj0iYmVmb3JlIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG1hdC1oZWFkZXItcm93IFtuZ0NsYXNzXT0ie1wnbWF0LXJvdy1zZWxlY3RcJzogdHJ1ZX0iICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj0ibGV0IG1hcHBpbmc7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7Ij48L21hdC1yb3c+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPHNlY3Rpb24gW2Z4U2hvd109IiF0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgICAgICBjbGFzcz0ibWF0LWhlYWRsaW5lLTUgdGItYWJzb2x1dGUtZmlsbCB0Yi1hZGQtbmV3Ij5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPSJjb25uZWN0b3IiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gW2Z4U2hvd109InRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSJcbiAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgIGNsYXNzPSJuby1kYXRhLWZvdW5kIiB0cmFuc2xhdGU+XG4gICAgICB3aWRnZXQubm8tZGF0YS1mb3VuZFxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudC50Yi1vdXRsaW5lZC1ib3JkZXJ7Ym94LXNoYWRvdzowIDAgIzAwMDMsMCAwICMwMDAwMDAyNCwwIDAgIzAwMDAwMDFmO2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMDtib3JkZXItcmFkaXVzOjRweH06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5tYXQtdG9vbGJhci10b29sc3ttaW4taGVpZ2h0OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGl0bGUtY29udGFpbmVye292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctcmlnaHQ6MjBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxle3RhYmxlLWxheW91dDpmaXhlZDttaW4td2lkdGg6NDUwcHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxlIC50YWJsZS12YWx1ZS1jb2x1bW57cGFkZGluZzowIDEycHg7d2lkdGg6MjMlfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1uLnJlcXVlc3QtY29sdW1ue3dpZHRoOjM4JX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5lbGxpcHNpc3tvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAubm8tZGF0YS1mb3VuZHtoZWlnaHQ6Y2FsYygxMDAlIC0gMTIwcHgpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5OXB4KXs6aG9zdCAubWF0LXRvb2xiYXJ7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxMDBweH06aG9zdCAubWF0LXRvb2xiYXIgLnRiLW1hcHBpbmctdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntyZXF1aXJlZDpbe3R5cGU6YX1dLG1hcHBpbmdUeXBlOlt7dHlwZTphfV0sc2VhcmNoSW5wdXRGaWVsZDpbe3R5cGU6byxhcmdzOlsic2VhcmNoSW5wdXQiXX1dfX0pO2NsYXNzIHNvIGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9fWUoIk1hcHBpbmdEYXRhc291cmNlIixzbyk7Y2xhc3MgbG97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLnRpdGxlPSJnYXRld2F5LnNlY3VyaXR5Iix0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsPSExLHRoaXMuQnJva2VyU2VjdXJpdHlUeXBlPXJuLHRoaXMuc2VjdXJpdHlUeXBlcz1PYmplY3QudmFsdWVzKHJuKSx0aGlzLm1vZGVUeXBlcz1PYmplY3QudmFsdWVzKHBuKSx0aGlzLlNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcD1tbix0aGlzLmRlc3Ryb3kkPW5ldyBTZX1uZ09uSW5pdCgpe3RoaXMuc2VjdXJpdHlGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dHlwZTpbcm4uQU5PTllNT1VTLFtdXSx1c2VybmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFzc3dvcmQ6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHBhdGhUb0NBQ2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvUHJpdmF0ZUtleTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvQ2xpZW50Q2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsJiZ0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmFkZENvbnRyb2woIm1vZGUiLHRoaXMuZmIuY29udHJvbChwbi5OT05FLFtdKSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXtpZihlKWUudHlwZXx8KGUudHlwZT1ybi5BTk9OWU1PVVMpLHRoaXMudXBkYXRlVmFsaWRhdG9ycyhlLnR5cGUpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAucmVzZXQoZSx7ZW1pdEV2ZW50OiExfSk7ZWxzZXtjb25zdCBlPXt0eXBlOnJuLkFOT05ZTU9VU307dGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlLHtlbWl0RXZlbnQ6ITF9KX10aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlIT09cm4uQkFTSUN8fHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VjdXJpdHlGb3JtOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dXBkYXRlVmFsaWRhdG9ycyhlKXtpZihlKWlmKHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DQUNlcnQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DbGllbnRDZXJ0IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoIm1vZGUiKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZT09PXJuLkJBU0lDKXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTtlbHNlIGlmKGU9PT1ybi5DRVJUSUZJQ0FURVMmJih0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvQ0FDZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhdGhUb0NsaWVudENlcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwpKXtjb25zdCBlPXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJtb2RlIik7ZSYmIWUudmFsdWUmJmUuc2V0VmFsdWUocG4uTk9ORSx7ZW1pdEV2ZW50OiExfSksZT8uZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidXNlcm5hbWUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6bG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czp7dGl0bGU6InRpdGxlIixleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDoiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHNhbWUtcGFkZGluZyB0Yi1mbGV4IGNvbHVtbiIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Rm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5CQVNJQyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJCcm9rZXJTZWN1cml0eVR5cGUuQ0VSVElGSUNBVEVTIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5wYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuQ0EtY2VydGlmaWNhdGUtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DQUNlcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9Qcml2YXRlS2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGF0aFRvQ2xpZW50Q2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibW9kZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAge3sgdHlwZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja31cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2gsc2VsZWN0b3I6IltuZ1N3aXRjaF0iLGlucHV0czpbIm5nU3dpdGNoIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaENhc2Usc2VsZWN0b3I6IltuZ1N3aXRjaENhc2VdIixpbnB1dHM6WyJuZ1N3aXRjaENhc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIlNlY3VyaXR5Q29uZmlnQ29tcG9uZW50IixsbyksSGUoW04oKV0sbG8ucHJvdG90eXBlLCJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmxvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc2VjdXJpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgIHt7IFNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnVzZXJuYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5DRVJUSUZJQ0FURVMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LnBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5DQS1jZXJ0aWZpY2F0ZS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb0NBQ2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb1ByaXZhdGVLZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DbGllbnRDZXJ0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImV4dGVuZENlcnRpZmljYXRlc01vZGVsIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5tb2RlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGVUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyB0eXBlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7dGl0bGU6W3t0eXBlOmF9XSxleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDpbe3R5cGU6YX1dfX0pO2NsYXNzIGNve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5zZWN1cml0eVBvbGljeVR5cGVzPV9uLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3VybDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdGltZW91dEluTWlsbGlzOlsxZTMsW3VlLnJlcXVpcmVkLHVlLm1pbigxZTMpXV0sc2NhblBlcmlvZEluTWlsbGlzOltWLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMWUzKV1dLHBvbGxQZXJpb2RJbk1pbGxpczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oNTApXV0sZW5hYmxlU3Vic2NyaXB0aW9uczpbITAsW11dLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEwMCldXSxzaG93TWFwOlshMSxbXV0sc2VjdXJpdHk6W1VuLkJBU0lDMTI4LFtdXSxpZGVudGl0eTpbXX0pLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5oaWRlTmV3RmllbGRzJiZ0aGlzLnNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoInBvbGxQZXJpb2RJbk1pbGxpcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VydmVyQ29uZmlnRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7Y29uc3R7dGltZW91dEluTWlsbGlzOnQ9MWUzLHNjYW5QZXJpb2RJbk1pbGxpczpuPVYscG9sbFBlcmlvZEluTWlsbGlzOmE9NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6bz0hMCxzdWJDaGVja1BlcmlvZEluTWlsbGlzOmk9MTAwLHNob3dNYXA6cj0hMSxzZWN1cml0eTpzPVVuLkJBU0lDMTI4LGlkZW50aXR5Omw9e319PWU7dGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAucmVzZXQoey4uLmUsdGltZW91dEluTWlsbGlzOnQsc2NhblBlcmlvZEluTWlsbGlzOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsZW5hYmxlU3Vic2NyaXB0aW9uczpvLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6aSxzaG93TWFwOnIsc2VjdXJpdHk6cyxpZGVudGl0eTpsfSx7ZW1pdEV2ZW50OiExfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmNvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czp7aGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmxvLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czpbInRpdGxlIiwiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNTZXJ2ZXJDb25maWdDb21wb25lbnQiLGNvKSxIZShbTigpXSxjby5wcm90b3R5cGUsImhpZGVOZXdGaWVsZHMiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Y28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7aGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dfX0pO2NsYXNzIHBvIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWFwcGluZ1R5cGVzPWZuLHRoaXMuaXNMZWdhY3k9ITF9aW5pdEJhc2ljRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe21hcHBpbmc6W10sc2VydmVyOltdfSl9bWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSl7cmV0dXJue3NlcnZlcjplLnNlcnZlcj8/e30sbWFwcGluZzplLm1hcHBpbmc/P1tdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOmUuc2VydmVyLG1hcHBpbmc6ZS5tYXBwaW5nfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnBvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnBvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNVYUJhc2ljQ29uZmlnQ29tcG9uZW50IixwbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5wbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgbW97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLm1xdHRWZXJzaW9ucz1nbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5icm9rZXJDb25maWdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7aG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSx2ZXJzaW9uOls1LFtdXSxjbGllbnRJZDpbInRiX2d3XyIrc2UoNSksW3VlLnBhdHRlcm4oa3QpXV0sc2VjdXJpdHk6W119KSx0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWdlbmVyYXRlKGUpe3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLmdldChlKT8ucGF0Y2hWYWx1ZSgidGJfZ3dfIitzZSg1KSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2NvbnN0e3ZlcnNpb246dD01LGNsaWVudElkOm49YHRiX2d3XyR7c2UoNSl9YCxzZWN1cml0eTphPXt9fT1lO3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLnJlc2V0KHsuLi5lLHZlcnNpb246dCxjbGllbnRJZDpuLHNlY3VyaXR5OmF9LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnticm9rZXJDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTptbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTptbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9Pm1vKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpsbyxzZWxlY3RvcjoidGItc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJ0aXRsZSIsImV4dGVuZENlcnRpZmljYXRlc01vZGVsIl19LHtraW5kOiJwaXBlIix0eXBlOndhLG5hbWU6ImdldEdhdGV3YXlQb3J0VG9vbHRpcCJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiQnJva2VyQ29uZmlnQ29udHJvbENvbXBvbmVudCIsbW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLHdhXSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5tbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyB1b3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21heE51bWJlck9mV29ya2VyczpbMTAwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSldXSxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOlsxMCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV19KSx0aGlzLndvcmtlcnNDb25maWdGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7Y29uc3R7bWF4TnVtYmVyT2ZXb3JrZXJzOnQsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjpufT1lO3RoaXMud29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5yZXNldCh7bWF4TnVtYmVyT2ZXb3JrZXJzOnR8fDEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOm58fDEwfSx7ZW1pdEV2ZW50OiExfSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwLnZhbGlkP251bGw6e3dvcmtlcnNDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp1byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnVvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+dW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09IndvcmtlcnNDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9Im1heE51bWJlck9mV29ya2VycyJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TnVtYmVyT2ZXb3JrZXJzXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIFtzdHlsZS53aWR0aC4lXT0iNTAiXG4gICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXJcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TWVzc2FnZU51bWJlclBlcldvcmtlciJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiV29ya2Vyc0NvbmZpZ0NvbnRyb2xDb21wb25lbnQiLHVvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnVvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT51bykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBbZm9ybUdyb3VwXT0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiBbc3R5bGUud2lkdGguJV09IjUwIlxuICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TnVtYmVyT2ZXb3JrZXJzIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1udW1iZXItb2Ytd29ya2Vycy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiB0eXBlPSJudW1iZXIiIG1pbj0iMSIgZm9ybUNvbnRyb2xOYW1lPSJtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IndvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS50b3VjaGVkKSJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIGdve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmlzRXhwYW5zaW9uTW9kZT0hMSx0aGlzLmRlZmF1bHRWYWx1ZT1sbi5LZXksdGhpcy5yZXBvcnRTdHJhdGVneVR5cGVzPU9iamVjdC52YWx1ZXMoc24pLHRoaXMuUmVwb3J0VHlwZVRyYW5zbGF0ZU1hcD1jbix0aGlzLlJlcG9ydFN0cmF0ZWd5VHlwZT1zbix0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTdHJhdGVneUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W3t2YWx1ZTpzbi5PblJlcG9ydFBlcmlvZCxkaXNhYmxlZDohMH0sW11dLHJlcG9ydFBlcmlvZDpbe3ZhbHVlOnRoaXMuZGVmYXVsdFZhbHVlLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5Rm9ybUNoYW5nZSgpLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5VG9nZ2xlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmlzRXhwYW5zaW9uTW9kZSYmdGhpcy5zaG93U3RyYXRlZ3lDb250cm9sLnNldFZhbHVlKCEhZSx7ZW1pdEV2ZW50OiExfSksZSYmdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pO2NvbnN0e3R5cGU6dD1zbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6bj10aGlzLmRlZmF1bHRWYWx1ZX09ZT8/e307dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5zZXRWYWx1ZSh7dHlwZTp0LHJlcG9ydFBlcmlvZDpufSx7ZW1pdEV2ZW50OiExfSksdGhpcy5vblR5cGVDaGFuZ2UodCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWxpZHx8dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5kaXNhYmxlZD9udWxsOntyZXBvcnRTdHJhdGVneUZvcm06e3ZhbGlkOiExfX19cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX1vYnNlcnZlU3RyYXRlZ3lGb3JtQ2hhbmdlKCl7dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy5vblR5cGVDaGFuZ2UoZSkpKX1vYnNlcnZlU3RyYXRlZ3lUb2dnbGUoKXt0aGlzLnNob3dTdHJhdGVneUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCksTWUoKCgpPT50aGlzLmlzRXhwYW5zaW9uTW9kZSkpKS5zdWJzY3JpYmUoKGU9PntlPyh0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoInJlcG9ydFBlcmlvZCIpLmFkZFZhbGlkYXRvcnModWUucmVxdWlyZWQpLHRoaXMub25DaGFuZ2UodGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZSkpOih0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKS5yZW1vdmVWYWxpZGF0b3JzKHVlLnJlcXVpcmVkKSx0aGlzLm9uQ2hhbmdlKG51bGwpKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfW9uVHlwZUNoYW5nZShlKXtjb25zdCB0PXRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKTtlPT09c24uT25DaGFuZ2U/dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmlzRXhwYW5zaW9uTW9kZSYmIXRoaXMuc2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZXx8dC5lbmFibGUoe2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpnbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsaW5wdXRzOntpc0V4cGFuc2lvbk1vZGU6ImlzRXhwYW5zaW9uTW9kZSIsZGVmYXVsdFZhbHVlOiJkZWZhdWx0VmFsdWUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Z28pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0lmPSJpc0V4cGFuc2lvbk1vZGUgZWxzZSBkZWZhdWx0TW9kZSIgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U3RyYXRlZ3lDb250cm9sLnZhbHVlIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1N0cmF0ZWd5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InN0cmF0ZWd5RmllbGRzIj48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNb2RlPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjc3RyYXRlZ3lGaWVsZHM+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcG9ydFN0cmF0ZWd5VHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IFJlcG9ydFR5cGVUcmFuc2xhdGVNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUgIT09IFJlcG9ydFN0cmF0ZWd5VHlwZS5PbkNoYW5nZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPlxuICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgIGdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5LnJlcG9ydC1wZXJpb2RcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJSZXBvcnRTdHJhdGVneUNvbXBvbmVudCIsZ28pLEhlKFtOKCldLGdvLnByb3RvdHlwZSwiaXNFeHBhbnNpb25Nb2RlIix2b2lkIDApLEhlKFtCKCldLGdvLnByb3RvdHlwZSwiZGVmYXVsdFZhbHVlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmdvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0icmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdJZj0iaXNFeHBhbnNpb25Nb2RlIGVsc2UgZGVmYXVsdE1vZGUiIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZSI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTdHJhdGVneUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TW9kZT5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWw8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0ic3RyYXRlZ3lGaWVsZHMiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3N0cmF0ZWd5RmllbGRzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiPnt7IFwnZ2F0ZXdheS50eXBlXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiByZXBvcnRTdHJhdGVneVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBSZXBvcnRUeXBlVHJhbnNsYXRlTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBSZXBvcnRTdHJhdGVneVR5cGUuT25DaGFuZ2UiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj5cbiAgICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5cbiAgICAgICAgICBnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5yZXBvcnQtcGVyaW9kXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0UGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntpc0V4cGFuc2lvbk1vZGU6W3t0eXBlOmF9XSxkZWZhdWx0VmFsdWU6W3t0eXBlOmF9XX19KTtjbGFzcyBmb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5pc01hc3Rlcj0hMSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5tb2RidXNEYXRhVHlwZXM9T2JqZWN0LnZhbHVlcyhlYSksdGhpcy5tb2RpZmllclR5cGVzPU9iamVjdC52YWx1ZXMoT24pLHRoaXMud2l0aEZ1bmN0aW9uQ29kZT0hMCx0aGlzLndpdGhSZXBvcnRTdHJhdGVneT0hMCx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXA9bmV3IE1hcCx0aGlzLnNob3dNb2RpZmllcnNNYXA9bmV3IE1hcCx0aGlzLmZ1bmN0aW9uQ29kZXNNYXA9bmV3IE1hcCx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVtdLHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXM9dGEsdGhpcy5Nb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXA9enQsdGhpcy5Nb2RpZmllclR5cGVzTWFwPVJuLHRoaXMuUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWU9bG4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5kZWZhdWx0UmVhZEZ1bmN0aW9uQ29kZXM9WzMsNF0sdGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXM9WzEsMl0sdGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzPVs2LDE2XSx0aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM9WzUsMTVdfW5nT25Jbml0KCl7dGhpcy53aXRoRnVuY3Rpb25Db2RlPSF0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVMsdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3k9ISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuaGlkZU5ld0ZpZWxkcyksdGhpcy5rZXlzTGlzdEZvcm1BcnJheT10aGlzLnByZXBhcmVLZXlzRm9ybUFycmF5KHRoaXMudmFsdWVzKSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPXRoaXMuZ2V0RGVmYXVsdEZ1bmN0aW9uQ29kZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX10cmFja0J5Q29udHJvbElkKGUsdCl7cmV0dXJuIHQudmFsdWUuaWR9YWRkS2V5KCl7Y29uc3QgZT1zZSg1KSx0PXRoaXMuZmIuZ3JvdXAoe3RhZzpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6W3t2YWx1ZToiIixkaXNhYmxlZDohdGhpcy5pc01hc3Rlcn0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbZWEuQllURVMsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbnVsbCxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6WzEsW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6dGhpcy5nZXREZWZhdWx0RnVuY3Rpb25Db2RlcygpWzBdLGRpc2FibGVkOiF0aGlzLndpdGhGdW5jdGlvbkNvZGV9LFt1ZS5yZXF1aXJlZF1dLHJlcG9ydFN0cmF0ZWd5Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3l9XSxtb2RpZmllclR5cGU6W3t2YWx1ZTpPbi5NVUxUSVBMSUVSLGRpc2FibGVkOiEwfV0sbW9kaWZpZXJWYWx1ZTpbe3ZhbHVlOjEsZGlzYWJsZWQ6ITB9LFt1ZS5wYXR0ZXJuKEZ0KV1dLGlkOlt7dmFsdWU6ZSxkaXNhYmxlZDohMH1dfSk7dGhpcy5zaG93TW9kaWZpZXJzTWFwLnNldChlLCExKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KGUsdGhpcy5mYi5jb250cm9sKCExKSksdGhpcy5vYnNlcnZlS2V5RGF0YVR5cGUodCksdGhpcy5vYnNlcnZlRW5hYmxlTW9kaWZpZXIodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5wdXNoKHQpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5yZW1vdmVBdCh0KSx0aGlzLmtleXNMaXN0Rm9ybUFycmF5Lm1hcmtBc0RpcnR5KCl9Y2FuY2VsKCl7dGhpcy5wb3BvdmVyLmhpZGUoKX1hcHBseUtleXNEYXRhKCl7dGhpcy5rZXlzRGF0YUFwcGxpZWQuZW1pdCh0aGlzLmdldEZvcm1WYWx1ZSgpKX1nZXRGb3JtVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXBLZXlzV2l0aE1vZGlmaWVyKHRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5P3RoaXMuY2xlYW5VcEVtcHR5U3RyYXRlZ2llcyh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKTp0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKX1jbGVhblVwRW1wdHlTdHJhdGVnaWVzKGUpe3JldHVybiBlLm1hcCgoZT0+e2NvbnN0e3JlcG9ydFN0cmF0ZWd5OnQsLi4ubn09ZTtyZXR1cm4gdD9lOm59KSl9bWFwS2V5c1dpdGhNb2RpZmllcihlKXtyZXR1cm4gZS5tYXAoKChlLHQpPT57aWYodGhpcy5zaG93TW9kaWZpZXJzTWFwLmdldCh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzW3RdLmdldCgiaWQiKS52YWx1ZSkpe2NvbnN0e21vZGlmaWVyVHlwZTp0LG1vZGlmaWVyVmFsdWU6biwuLi5hfT1lO3JldHVybiB0P3suLi5hLFt0XTpufTphfXJldHVybiBlfSkpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJmUuZm9yRWFjaCgoZT0+e2NvbnN0IG49dGhpcy5jcmVhdGVEYXRhS2V5Rm9ybUdyb3VwKGUpO3RoaXMub2JzZXJ2ZUtleURhdGFUeXBlKG4pLHRoaXMub2JzZXJ2ZUVuYWJsZU1vZGlmaWVyKG4pLHRoaXMuZnVuY3Rpb25Db2Rlc01hcC5zZXQobi5nZXQoImlkIikudmFsdWUsdGhpcy5nZXRGdW5jdGlvbkNvZGVzKGUudHlwZSkpLHQucHVzaChuKX0pKSx0aGlzLmZiLmFycmF5KHQpfWNyZWF0ZURhdGFLZXlGb3JtR3JvdXAoZSl7Y29uc3R7dGFnOnQsdmFsdWU6bix0eXBlOmEsYWRkcmVzczpvLG9iamVjdHNDb3VudDppLGZ1bmN0aW9uQ29kZTpyLG11bHRpcGxpZXI6cyxkaXZpZGVyOmwscmVwb3J0U3RyYXRlZ3k6Y309ZSxwPXNlKDUpLG09dGhpcy5zaG91bGRTaG93TW9kaWZpZXIoYSk7cmV0dXJuIHRoaXMuc2hvd01vZGlmaWVyc01hcC5zZXQocCxtKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KHAsdGhpcy5mYi5jb250cm9sKChzfHxsKSYmbSkpLHRoaXMuZmIuZ3JvdXAoe3RhZzpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbe3ZhbHVlOm4sZGlzYWJsZWQ6IXRoaXMuaXNNYXN0ZXJ9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHR5cGU6W2EsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbyxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6W2ksW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6cixkaXNhYmxlZDohdGhpcy53aXRoRnVuY3Rpb25Db2RlfSxbdWUucmVxdWlyZWRdXSxtb2RpZmllclR5cGU6W3t2YWx1ZTpsP09uLkRJVklERVI6T24uTVVMVElQTElFUixkaXNhYmxlZDohdGhpcy5lbmFibGVNb2RpZmllcnNDb250cm9sTWFwLmdldChwKS52YWx1ZX1dLG1vZGlmaWVyVmFsdWU6W3t2YWx1ZTpzPz9sPz8xLGRpc2FibGVkOiF0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KHApLnZhbHVlfSxbdWUucGF0dGVybihGdCldXSxpZDpbe3ZhbHVlOnAsZGlzYWJsZWQ6ITB9XSxyZXBvcnRTdHJhdGVneTpbe3ZhbHVlOmMsZGlzYWJsZWQ6IXRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5fV19KX1zaG91bGRTaG93TW9kaWZpZXIoZSl7cmV0dXJuISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSkpfW9ic2VydmVLZXlEYXRhVHlwZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHQpfHxlLmdldCgib2JqZWN0c0NvdW50IikucGF0Y2hWYWx1ZShuYVt0XSx7ZW1pdEV2ZW50OiExfSk7Y29uc3Qgbj10aGlzLnNob3VsZFNob3dNb2RpZmllcih0KTt0aGlzLnNob3dNb2RpZmllcnNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlLHQpfSkpfW9ic2VydmVFbmFibGVNb2RpZmllcihlKXt0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KGUuZ2V0KCJpZCIpLnZhbHVlKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT50aGlzLnRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KSkpfXRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KXtjb25zdCBuPWUuZ2V0KCJtb2RpZmllclR5cGUiKSxhPWUuZ2V0KCJtb2RpZmllclZhbHVlIik7dD8obi5lbmFibGUoKSxhLmVuYWJsZSgpKToobi5kaXNhYmxlKCksYS5kaXNhYmxlKCkpfXVwZGF0ZUZ1bmN0aW9uQ29kZXMoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RnVuY3Rpb25Db2Rlcyh0KTt0aGlzLmZ1bmN0aW9uQ29kZXNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLG4uaW5jbHVkZXMoZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnZhbHVlKXx8ZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUoblswXSx7ZW1pdEV2ZW50OiExfSl9Z2V0RnVuY3Rpb25Db2RlcyhlKXtjb25zdCB0PVsuLi5lPT09ZWEuQklUUz90aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM6W10sLi4udGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzXTtpZih0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTKXJldHVybiB0LnNvcnQoKChlLHQpPT5lLXQpKTtjb25zdCBuPVsuLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2Rlc107cmV0dXJuIGU9PT1lYS5CSVRTJiZuLnB1c2goLi4udGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXMpLHRoaXMua2V5c1R5cGU9PT1hYS5SUENfUkVRVUVTVFMmJm4ucHVzaCguLi50KSxuLnNvcnQoKChlLHQpPT5lLXQpKX1nZXREZWZhdWx0RnVuY3Rpb25Db2Rlcygpe3JldHVybiB0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTP3RoaXMuZGVmYXVsdFdyaXRlRnVuY3Rpb25Db2Rlczp0aGlzLmtleXNUeXBlPT09YWEuUlBDX1JFUVVFU1RTP1suLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLmRlZmF1bHRXcml0ZUZ1bmN0aW9uQ29kZXNdOnRoaXMuZGVmYXVsdFJlYWRGdW5jdGlvbkNvZGVzfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Zm8sZGVwczpbe3Rva2VuOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Zm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyIscGFuZWxUaXRsZToicGFuZWxUaXRsZSIsYWRkS2V5VGl0bGU6ImFkZEtleVRpdGxlIixkZWxldGVLZXlUaXRsZToiZGVsZXRlS2V5VGl0bGUiLG5vS2V5c1RleHQ6Im5vS2V5c1RleHQiLGtleXNUeXBlOiJrZXlzVHlwZSIsdmFsdWVzOiJ2YWx1ZXMiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmV0Lk1hdFNsaWRlVG9nZ2xlLHNlbGVjdG9yOiJtYXQtc2xpZGUtdG9nZ2xlIixpbnB1dHM6WyJuYW1lIiwiaWQiLCJsYWJlbFBvc2l0aW9uIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJyZXF1aXJlZCIsImNvbG9yIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJjaGVja2VkIiwiaGlkZUljb24iLCJkaXNhYmxlZEludGVyYWN0aXZlIl0sb3V0cHV0czpbImNoYW5nZSIsInRvZ2dsZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2xpZGVUb2dnbGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsQ29udGVudCxzZWxlY3RvcjoibmctdGVtcGxhdGVbbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dfSl9fWUoIk1vZGJ1c0RhdGFLZXlzUGFuZWxDb21wb25lbnQiLGZvKSxIZShbTigpXSxmby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLEhlKFtOKCldLGZvLnByb3RvdHlwZSwiaGlkZU5ld0ZpZWxkcyIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxUYSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfV0scHJvcERlY29yYXRvcnM6e2lzTWFzdGVyOlt7dHlwZTphfV0saGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dLHBhbmVsVGl0bGU6W3t0eXBlOmF9XSxhZGRLZXlUaXRsZTpbe3R5cGU6YX1dLGRlbGV0ZUtleVRpdGxlOlt7dHlwZTphfV0sbm9LZXlzVGV4dDpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVzOlt7dHlwZTphfV0scG9wb3Zlcjpbe3R5cGU6YX1dLGtleXNEYXRhQXBwbGllZDpbe3R5cGU6bH1dfX0pO2NsYXNzIHlve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy5mYj1lLHRoaXMucG9wb3ZlclNlcnZpY2U9dCx0aGlzLnJlbmRlcmVyPW4sdGhpcy52aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5jZHI9byx0aGlzLnNpbmdsZU1vZGU9ITEsdGhpcy5oaWRlTmV3RmllbGRzPSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5tb2RidXNSZWdpc3RlclR5cGVzPU9iamVjdC52YWx1ZXMoWG4pLHRoaXMubW9kYnVzVmFsdWVLZXlzPU9iamVjdC52YWx1ZXMoYWEpLHRoaXMuTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwPVpuLHRoaXMuTW9kYnVzVmFsdWVLZXk9YWEsdGhpcy5kZXN0cm95JD1uZXcgU2V9bmdPbkluaXQoKXt0aGlzLmluaXRpYWxpemVWYWx1ZXNGb3JtR3JvdXAoKSx0aGlzLm9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2lmKHRoaXMuc2luZ2xlTW9kZSl0aGlzLnZhbHVlc0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoZSkse2VtaXRFdmVudDohMX0pO2Vsc2V7Y29uc3R7aG9sZGluZ19yZWdpc3RlcnM6dCxjb2lsc19pbml0aWFsaXplcjpuLGlucHV0X3JlZ2lzdGVyczphLGRpc2NyZXRlX2lucHV0czpvfT1lO3RoaXMudmFsdWVzRm9ybUdyb3VwLnNldFZhbHVlKHtob2xkaW5nX3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUodCksY29pbHNfaW5pdGlhbGl6ZXI6dGhpcy5nZXRTaW5nbGVSZWdpc3RlclN0YXRlKG4pLGlucHV0X3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoYSksZGlzY3JldGVfaW5wdXRzOnRoaXMuZ2V0U2luZ2xlUmVnaXN0ZXJTdGF0ZShvKX0se2VtaXRFdmVudDohMX0pfXRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMudmFsdWVzRm9ybUdyb3VwLnZhbGlkP251bGw6e3ZhbHVlc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX1nZXRWYWx1ZUdyb3VwKGUsdCl7cmV0dXJuIHQ/dGhpcy52YWx1ZXNGb3JtR3JvdXAuZ2V0KHQpLmdldChlKTp0aGlzLnZhbHVlc0Zvcm1Hcm91cC5nZXQoZSl9bWFuYWdlS2V5cyhlLHQsbixhKXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG89dC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKHRoaXMucG9wb3ZlclNlcnZpY2UuaGFzUG9wb3ZlcihvKSlyZXR1cm4gdm9pZCB0aGlzLnBvcG92ZXJTZXJ2aWNlLmhpZGVQb3BvdmVyKG8pO2NvbnN0IGk9dGhpcy5nZXRWYWx1ZUdyb3VwKG4sYSkscj17dmFsdWVzOmkudmFsdWUsaXNNYXN0ZXI6IXRoaXMuc2luZ2xlTW9kZSxrZXlzVHlwZTpuLHBhbmVsVGl0bGU6b2EuZ2V0KG4pLGFkZEtleVRpdGxlOmlhLmdldChuKSxkZWxldGVLZXlUaXRsZTpyYS5nZXQobiksbm9LZXlzVGV4dDpzYS5nZXQobiksaGlkZU5ld0ZpZWxkczp0aGlzLmhpZGVOZXdGaWVsZHN9LHM9dGhpcy5wb3BvdmVyU2VydmljZS5kaXNwbGF5UG9wb3ZlcihvLHRoaXMucmVuZGVyZXIsdGhpcy52aWV3Q29udGFpbmVyUmVmLGZvLCJsZWZ0Qm90dG9tIiwhMSxudWxsLHIse30se30se30sITApO3MudGJDb21wb25lbnRSZWYuaW5zdGFuY2UucG9wb3Zlcj1zLHMudGJDb21wb25lbnRSZWYuaW5zdGFuY2Uua2V5c0RhdGFBcHBsaWVkLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3MuaGlkZSgpLGkucGF0Y2hWYWx1ZShlKSxpLm1hcmtBc0RpcnR5KCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9KSl9aW5pdGlhbGl6ZVZhbHVlc0Zvcm1Hcm91cCgpe2NvbnN0IGU9KCk9PnRoaXMuZmIuZ3JvdXAodGhpcy5tb2RidXNWYWx1ZUtleXMucmVkdWNlKCgoZSx0KT0+KGVbdF09dGhpcy5mYi5jb250cm9sKFtbXSxbXV0pLGUpKSx7fSkpO3RoaXMuc2luZ2xlTW9kZT90aGlzLnZhbHVlc0Zvcm1Hcm91cD1lKCk6dGhpcy52YWx1ZXNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh0aGlzLm1vZGJ1c1JlZ2lzdGVyVHlwZXMucmVkdWNlKCgodCxuKT0+KHRbbl09ZSgpLHQpKSx7fSkpfW9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl7dGhpcy52YWx1ZXNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1nZXRTaW5nbGVSZWdpc3RlclN0YXRlKGUpe3JldHVybnthdHRyaWJ1dGVzOmU/LmF0dHJpYnV0ZXM/P1tdLHRpbWVzZXJpZXM6ZT8udGltZXNlcmllcz8/W10sYXR0cmlidXRlVXBkYXRlczplPy5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6ZT8ucnBjPz9bXX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp5byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp5byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGlucHV0czp7c2luZ2xlTW9kZToic2luZ2xlTW9kZSIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnlvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwLHNlbGVjdG9yOiJtYXQtYmFzaWMtY2hpcCwgW21hdC1iYXNpYy1jaGlwXSwgbWF0LWNoaXAsIFttYXQtY2hpcF0iLGlucHV0czpbInJvbGUiLCJpZCIsImFyaWEtbGFiZWwiLCJhcmlhLWRlc2NyaXB0aW9uIiwidmFsdWUiLCJjb2xvciIsInJlbW92YWJsZSIsImhpZ2hsaWdodGVkIiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVkIl0sb3V0cHV0czpbInJlbW92ZWQiLCJkZXN0cm95ZWQiXSxleHBvcnRBczpbIm1hdENoaXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwTGlzdGJveCxzZWxlY3RvcjoibWF0LWNoaXAtbGlzdGJveCIsaW5wdXRzOlsibXVsdGlwbGUiLCJhcmlhLW9yaWVudGF0aW9uIiwic2VsZWN0YWJsZSIsImNvbXBhcmVXaXRoIiwicmVxdWlyZWQiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwidmFsdWUiXSxvdXRwdXRzOlsiY2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YnQuVGJJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1pY29uIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsidGJJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6a2Esc2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixpbnB1dHM6WyJ0Yi1lbGxpcHNpcy1jaGlwLWxpc3QiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNWYWx1ZXNDb21wb25lbnQiLHlvKSxIZShbTigpXSx5by5wcm90b3R5cGUsInNpbmdsZU1vZGUiLHZvaWQgMCksSGUoW04oKV0seW8ucHJvdG90eXBlLCJoaWRlTmV3RmllbGRzIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+eW8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGthXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7c2luZ2xlTW9kZTpbe3R5cGU6YX1dLGhpZGVOZXdGaWVsZHM6W3t0eXBlOmF9XX19KTtjbGFzcyBib3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMuaXNNYXN0ZXI9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe2NlcnRmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxrZXlmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0sc2VydmVyX2hvc3RuYW1lOlsiIixbdWUucGF0dGVybihrdCldXSxyZXFjbGljZXJ0Olt7dmFsdWU6ITEsZGlzYWJsZWQ6ITB9XX0pLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVNYXN0ZXJFbmFibGluZygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWUsdGhpcy5kaXNhYmxlZD90aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pOnRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnVwZGF0ZU1hc3RlckVuYWJsaW5nKCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe2NvbnN0e2NlcnRmaWxlOnQscGFzc3dvcmQ6bixrZXlmaWxlOmEsc2VydmVyX2hvc3RuYW1lOm99PWUsaT17Y2VydGZpbGU6dD8/IiIscGFzc3dvcmQ6bj8/IiIsa2V5ZmlsZTphPz8iIixzZXJ2ZXJfaG9zdG5hbWU6bz8/IiIscmVxY2xpY2VydDohIWUucmVxY2xpY2VydH07dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC5yZXNldChpLHtlbWl0RXZlbnQ6ITF9KX11cGRhdGVNYXN0ZXJFbmFibGluZygpe3RoaXMuaXNNYXN0ZXI/KHRoaXMuZGlzYWJsZWR8fHRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZ2V0KCJyZXFjbGljZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0aGlzLmRpc2FibGVkfHx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgicmVxY2xpY2VydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pKX1vYnNlcnZlVmFsdWVDaGFuZ2VzKCl7dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Ym8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfV0sdXNlc09uQ2hhbmdlczohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmhpbnRzLnBhdGgtaW4tb3NcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2VydGZpbGUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucHJpdmF0ZS1rZXktcGF0aFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXlmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSIhaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1ob3N0bmFtZTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJfaG9zdG5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJpc01hc3RlciIgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXFjbGljZXJ0Ij5cbiAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5yZXF1ZXN0LWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1IZShbTigpXSxiby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Ym8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIFtmb3JtR3JvdXBdPSJzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5oaW50cy5wYXRoLWluLW9zXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jYS1jZXJ0XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNlcnRmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnByaXZhdGUta2V5LXBhdGhcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5ZmlsZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iIWlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItaG9zdG5hbWU8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ic2VydmVyX2hvc3RuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmVxY2xpY2VydCI+XG4gICAgICA8bWF0LWxhYmVsPlxuICAgICAgICB7eyBcJ2dhdGV3YXkucmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtbGFiZWw+XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntpc01hc3Rlcjpbe3R5cGU6YX1dfX0pO2NsYXNzIGhvIGV4dGVuZHMgUHtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKHQsbixvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9byx0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c1Bhcml0aWVzPU9iamVjdC52YWx1ZXMoWW4pLHRoaXMubW9kYnVzQnl0ZVNpemVzPSRuLHRoaXMubW9kYnVzQmF1ZHJhdGVzPWxhLHRoaXMubW9kYnVzT3JkZXJUeXBlPU9iamVjdC52YWx1ZXMoSm4pLHRoaXMuTW9kYnVzUHJvdG9jb2xUeXBlPUhuLHRoaXMuTW9kYnVzUGFyaXR5TGFiZWxzTWFwPVFuLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5Nb2RidXNNZXRob2RMYWJlbHNNYXA9S24sdGhpcy5SZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZT1sbix0aGlzLm1vZGJ1c0hlbHBMaW5rPXYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tb2RidXMvI3NlY3Rpb24tbWFzdGVyLWRlc2NyaXB0aW9uLWFuZC1jb25maWd1cmF0aW9uLXBhcmFtZXRlcnMiLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSIsInN0b3BiaXRzIiwiYnl0ZXNpemUiLCJwYXJpdHkiLCJzdHJpY3QiXSx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXM9WyJwb3J0Iiwic2VjdXJpdHkiLCJob3N0Il0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5zaG93U2VjdXJpdHlDb250cm9sPXRoaXMuZmIuY29udHJvbCghMSksdGhpcy5pbml0aWFsaXplU2xhdmVGb3JtR3JvdXAoKSx0aGlzLnVwZGF0ZVNsYXZlRm9ybUdyb3VwKCksdGhpcy51cGRhdGVDb250cm9sc0VuYWJsaW5nKHRoaXMuZGF0YS52YWx1ZS50eXBlKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCksdGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnBhdGNoVmFsdWUoISF0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkmJiFlZSh0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkse30pKX1nZXQgcHJvdG9jb2xUeXBlKCl7cmV0dXJuIHRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5nZXRTbGF2ZVJlc3VsdERhdGEoKSl9aW5pdGlhbGl6ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltIbi5UQ1BdLGhvc3Q6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHBvcnQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbihFdC5NSU4pLHVlLm1heChFdC5NQVgpXV0sc2VyaWFsUG9ydDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbWV0aG9kOltXbi5TT0NLRVQsW3VlLnJlcXVpcmVkXV0sYmF1ZHJhdGU6W3RoaXMubW9kYnVzQmF1ZHJhdGVzWzBdXSxzdG9wYml0czpbMV0sYnl0ZXNpemU6WyRuWzBdXSxwYXJpdHk6W1luLk5vbmVdLHN0cmljdDpbITBdLHVuaXRJZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxkZXZpY2VOYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxkZXZpY2VUeXBlOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0aW1lb3V0OlszNV0sYnl0ZU9yZGVyOltKbi5CSUddLHdvcmRPcmRlcjpbSm4uQklHXSxyZXRyaWVzOlshMF0scmV0cnlPbkVtcHR5OlshMF0scmV0cnlPbkludmFsaWQ6WyEwXSxwb2xsUGVyaW9kOls1ZTMsW3VlLnJlcXVpcmVkXV0sY29ubmVjdEF0dGVtcHRUaW1lTXM6WzVlMyxbdWUucmVxdWlyZWRdXSxjb25uZWN0QXR0ZW1wdENvdW50Ols1LFt1ZS5yZXF1aXJlZF1dLHdhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXM6WzNlNSxbdWUucmVxdWlyZWRdXSx2YWx1ZXM6W3t9XSxzZWN1cml0eTpbe31dfSksdGhpcy5hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpfXVwZGF0ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKHsuLi50aGlzLmRhdGEudmFsdWUscG9ydDp0aGlzLmRhdGEudmFsdWUudHlwZT09PUhuLlNlcmlhbD9udWxsOnRoaXMuZGF0YS52YWx1ZS5wb3J0LHNlcmlhbFBvcnQ6dGhpcy5kYXRhLnZhbHVlLnR5cGU9PT1Ibi5TZXJpYWw/dGhpcy5kYXRhLnZhbHVlLnBvcnQ6IiIsdmFsdWVzOnthdHRyaWJ1dGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVzPz9bXSx0aW1lc2VyaWVzOnRoaXMuZGF0YS52YWx1ZS50aW1lc2VyaWVzPz9bXSxhdHRyaWJ1dGVVcGRhdGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6dGhpcy5kYXRhLnZhbHVlLnJwYz8/W119fSl9b2JzZXJ2ZVR5cGVDaGFuZ2UoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbnRyb2xzRW5hYmxpbmcoZSksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlQ29udHJvbHNFbmFibGluZyhlKXtjb25zdFt0LG5dPWU9PT1Ibi5TZXJpYWw/W3RoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cyx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXNdOlt0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXMsdGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzXTt0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKSx0aGlzLnVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcodGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlKX1vYnNlcnZlU2hvd1NlY3VyaXR5KCl7dGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlU2VjdXJpdHlFbmFibGluZyhlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcoZSl7ZSYmdGhpcy5wcm90b2NvbFR5cGUhPT1Ibi5TZXJpYWw/dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgic2VjdXJpdHkiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmhvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fWUoIk1vZGJ1c1NsYXZlRGlhbG9nQWJzdHJhY3QiLGhvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpvdC5TdG9yZX0se3R5cGU6aXQuUm91dGVyfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOltYZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nUmVmfV19KTtjbGFzcyB4byBleHRlbmRzIGhve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LG4sYSxvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9b31nZXRTbGF2ZVJlc3VsdERhdGEoKXtjb25zdHt2YWx1ZXM6ZSx0eXBlOnQsc2VyaWFsUG9ydDpuLC4uLmF9PXRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAudmFsdWUsbz17Li4uYSx0eXBlOnQsLi4uZX07cmV0dXJuIHQ9PT1Ibi5TZXJpYWwmJihvLnBvcnQ9biksby5yZXBvcnRTdHJhdGVneXx8ZGVsZXRlIG8ucmVwb3J0U3RyYXRlZ3ksb31hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuYWRkQ29udHJvbCgicmVwb3J0U3RyYXRlZ3kiLHRoaXMuZmIuY29udHJvbChudWxsKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp4byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp4byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNTbGF2ZURpYWxvZ0NvbXBvbmVudCIseG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCx5byxibyx3YSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzbGF2ZXMtY29uZmlnLWNvbnRhaW5lciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IFwnZ2F0ZXdheS5zZXJ2ZXItc2xhdmVcJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0ibW9kYnVzSGVscExpbmsiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IFtmb3JtR3JvdXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgIDxkaXYgY2xhc3M9InN0cm9rZWQgdGItZm9ybS1wYW5lbCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItY29ubmVjdGlvbjwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c1Byb3RvY29sVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldCh0eXBlKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgZWxzZSBzZXJpYWxQb3J0IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zZXJpYWwtcG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InNlcmlhbFBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3NlcmlhbFBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZnJhbWVyLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5Lm1ldGhvZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIHByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCA/IG1vZGJ1c1NlcmlhbE1ldGhvZFR5cGVzIDogbW9kYnVzTWV0aG9kVHlwZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJtZXRob2QiPnt7IE1vZGJ1c01ldGhvZExhYmVsc01hcC5nZXQobWV0aG9kKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYmF1ZHJhdGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYmF1ZHJhdGU8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJhdWRyYXRlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHJhdGUgb2YgbW9kYnVzQmF1ZHJhdGVzIiBbdmFsdWVdPSJyYXRlIj57eyByYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGVzaXplXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGVzaXplPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlc2l6ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzaXplIG9mIG1vZGJ1c0J5dGVTaXplcyIgW3ZhbHVlXT0ic2l6ZSI+e3sgc2l6ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdG9wYml0c1wnIHwgdHJhbnNsYXRlIH19IiAgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcGJpdHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InN0b3BiaXRzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wYXJpdHlcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucGFyaXR5PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJwYXJpdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgcGFyaXR5IG9mIG1vZGJ1c1Bhcml0aWVzIiBbdmFsdWVdPSJwYXJpdHkiPnt7IE1vZGJ1c1Bhcml0eUxhYmVsc01hcC5nZXQocGFyaXR5KSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzdHJpY3QiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnN0cmljdFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RyaWN0XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMudW5pdC1pZFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS51bml0LWlkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1bml0SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51bml0LWlkLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwndW5pdElkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtcHJvZmlsZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VUeXBlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0iZGF0YS5oaWRlTmV3RmllbGRzIGVsc2UgcmVwb3J0U3RyYXRlZ3kiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtZGF0YS1vbi1jaGFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZXBvcnRTdHJhdGVneT5cbiAgICAgICAgICA8dGItcmVwb3J0LXN0cmF0ZWd5IFtkZWZhdWx0VmFsdWVdPSJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZS5EZXZpY2UiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0U3RyYXRlZ3kiIFtpc0V4cGFuc2lvbk1vZGVdPSJ0cnVlIi8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdGlvbi10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rpb24tdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlLW9yZGVyXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGUtb3JkZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJ5dGVPcmRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgb3JkZXIgb2YgbW9kYnVzT3JkZXJUeXBlIiBbdmFsdWVdPSJvcmRlciI+e3sgb3JkZXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud29yZC1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS53b3JkLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ3b3JkT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50bHMtY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIGNsYXNzPSJzZWN1cml0eS1jb25maWciIGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHkiPjwvdGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZz5cbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cmllcyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnJldHJpZXNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRyeU9uRW1wdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWVtcHR5XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkludmFsaWQiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb2xsLXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXkucG9sbC1wZXJpb2RcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC10aW1lXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC10aW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjb25uZWN0QXR0ZW1wdFRpbWVNcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdC1hdHRlbXB0LWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC1jb3VudDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRDb3VudCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHNcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9IndhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICA8dGItbW9kYnVzLXZhbHVlcyBbc2luZ2xlTW9kZV09InRydWUiIFtoaWRlTmV3RmllbGRzXT0iZGF0YS5oaWRlTmV3RmllbGRzIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmludmFsaWQgfHwgIXNsYXZlQ29uZmlnRm9ybUdyb3VwLmRpcnR5Ij5cbiAgICAgIHt7IGRhdGEuYnV0dG9uVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuc2xhdmVzLWNvbmZpZy1jb250YWluZXJ7d2lkdGg6ODB2dzttYXgtd2lkdGg6OTAwcHh9Omhvc3QgLnNsYXZlLW5hbWUtbGFiZWx7bWFyZ2luLXJpZ2h0OjE2cHg7Y29sb3I6IzAwMDAwMGRlfTpob3N0IC5maXhlZC10aXRsZS13aWR0aC0yNjB7bWluLXdpZHRoOjI2MHB4fTpob3N0IDo6bmctZGVlcCAuc2VjdXJpdHktY29uZmlnIC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6MjMwcHh9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn1dfSk7Y2xhc3Mgdm8gZXh0ZW5kcyBob3tjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKGUsdCxuLGEsbyksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnJvdXRlcj1uLHRoaXMuZGF0YT1hLHRoaXMuZGlhbG9nUmVmPW99Z2V0U2xhdmVSZXN1bHREYXRhKCl7Y29uc3R7dmFsdWVzOmUsdHlwZTp0LHNlcmlhbFBvcnQ6biwuLi5hfT10aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlLG89ey4uLmEsdHlwZTp0LC4uLmV9O3JldHVybiB0PT09SG4uU2VyaWFsJiYoby5wb3J0PW4pLG99YWRkRmllbGRzVG9Gb3JtR3JvdXAoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmFkZENvbnRyb2woInNlbmREYXRhT25seU9uQ2hhbmdlIix0aGlzLmZiLmNvbnRyb2woITEpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnZvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lTbGF2ZURpYWxvZ0NvbXBvbmVudCIsdm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktc2xhdmUtZGlhbG9nIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQseW8sYm8sd2EsZ29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9XX0pO2NsYXNzIHdve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy50cmFuc2xhdGU9ZSx0aGlzLmRpYWxvZz10LHRoaXMuZGlhbG9nU2VydmljZT1uLHRoaXMuZmI9YSx0aGlzLmNkcj1vLHRoaXMuaXNMZWdhY3k9ITEsdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2g9dGhpcy5mYi5jb250cm9sKCIiLHtub25OdWxsYWJsZTohMH0pLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFzdGVyRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3NsYXZlczp0aGlzLmZiLmFycmF5KFtdKX0pLHRoaXMuZGF0YVNvdXJjZT1uZXcgQ299Z2V0IHNsYXZlcygpe3JldHVybiB0aGlzLm1hc3RlckZvcm1Hcm91cC5nZXQoInNsYXZlcyIpfW5nT25Jbml0KCl7dGhpcy5tYXN0ZXJGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlVGFibGVEYXRhKGUuc2xhdmVzKSx0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50ZXh0U2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFZlKDE1MCksQmUoKChlLHQpPT4oZT8/IiIpPT09dC50cmltKCkpKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSxlLnRyaW0oKSkpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5zbGF2ZXMuY2xlYXIoKSx0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKGUuc2xhdmVzKX1lbnRlckZpbHRlck1vZGUoKXt0aGlzLnRleHRTZWFyY2hNb2RlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtjb25zdCBlPXRoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50O2UuZm9jdXMoKSxlLnNldFNlbGVjdGlvblJhbmdlKDAsMCl9ZXhpdEZpbHRlck1vZGUoKXt0aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1pZSh0KSxhPW4/dGhpcy5zbGF2ZXMuYXQodCkudmFsdWU6e307dGhpcy5nZXRTbGF2ZURpYWxvZyhhLG4/ImFjdGlvbi5hcHBseSI6ImFjdGlvbi5hZGQiKS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihuP3RoaXMuc2xhdmVzLmF0KHQpLnBhdGNoVmFsdWUoZSk6dGhpcy5zbGF2ZXMucHVzaCh0aGlzLmZiLmNvbnRyb2woZSkpLHRoaXMubWFzdGVyRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfWdldFNsYXZlRGlhbG9nKGUsdCl7cmV0dXJuIHRoaXMuaXNMZWdhY3k/dGhpcy5kaWFsb2cub3Blbih2byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e3ZhbHVlOmUsaGlkZU5ld0ZpZWxkczohMCxidXR0b25UaXRsZTp0fX0pOnRoaXMuZGlhbG9nLm9wZW4oeG8se2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOnt2YWx1ZTplLGJ1dHRvblRpdGxlOnQsaGlkZU5ld0ZpZWxkczohMX19KX1kZWxldGVTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtc2xhdmUtdGl0bGUiKSwiIix0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJih0aGlzLnNsYXZlcy5yZW1vdmVBdCh0KSx0aGlzLm1hc3RlckZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpKX0pKX11cGRhdGVUYWJsZURhdGEoZSx0KXt0JiYoZT1lLmZpbHRlcigoZT0+T2JqZWN0LnZhbHVlcyhlKS5zb21lKChlPT5lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpKSkpKSksdGhpcy5kYXRhU291cmNlLmxvYWREYXRhKGUpfXB1c2hEYXRhQXNGb3JtQXJyYXlzKGUpe2U/Lmxlbmd0aCYmZS5mb3JFYWNoKChlPT50aGlzLnNsYXZlcy5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOndvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpYLkRpYWxvZ1NlcnZpY2V9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOndvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOntpc0xlZ2FjeToiaXNMZWdhY3kifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6InNlYXJjaElucHV0RmllbGQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInNlYXJjaElucHV0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJwaXBlIix0eXBlOl8uQXN5bmNQaXBlLG5hbWU6ImFzeW5jIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpodC5NYXRNZW51LHNlbGVjdG9yOiJtYXQtbWVudSIsaW5wdXRzOlsiYmFja2Ryb3BDbGFzcyIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwieFBvc2l0aW9uIiwieVBvc2l0aW9uIiwib3ZlcmxhcFRyaWdnZXIiLCJoYXNCYWNrZHJvcCIsImNsYXNzIiwiY2xhc3NMaXN0Il0sb3V0cHV0czpbImNsb3NlZCIsImNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6aHQuTWF0TWVudVRyaWdnZXIsc2VsZWN0b3I6IlttYXQtbWVudS10cmlnZ2VyLWZvcl0sIFttYXRNZW51VHJpZ2dlckZvcl0iLGlucHV0czpbIm1hdC1tZW51LXRyaWdnZXItZm9yIiwibWF0TWVudVRyaWdnZXJGb3IiLCJtYXRNZW51VHJpZ2dlckRhdGEiLCJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyJdLG91dHB1dHM6WyJtZW51T3BlbmVkIiwib25NZW51T3BlbiIsIm1lbnVDbG9zZWQiLCJvbk1lbnVDbG9zZSJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFRhYmxlLHNlbGVjdG9yOiJtYXQtdGFibGUsIHRhYmxlW21hdC10YWJsZV0iLGV4cG9ydEFzOlsibWF0VGFibGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGxEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJSb3dEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJSb3dEZWZdIixpbnB1dHM6WyJtYXRIZWFkZXJSb3dEZWYiLCJtYXRIZWFkZXJSb3dEZWZTdGlja3kiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENvbHVtbkRlZixzZWxlY3RvcjoiW21hdENvbHVtbkRlZl0iLGlucHV0czpbIm1hdENvbHVtbkRlZiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbERlZixzZWxlY3RvcjoiW21hdENlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdFJvd0RlZixzZWxlY3RvcjoiW21hdFJvd0RlZl0iLGlucHV0czpbIm1hdFJvd0RlZkNvbHVtbnMiLCJtYXRSb3dEZWZXaGVuIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsLHNlbGVjdG9yOiJtYXQtaGVhZGVyLWNlbGwsIHRoW21hdC1oZWFkZXItY2VsbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbCxzZWxlY3RvcjoibWF0LWNlbGwsIHRkW21hdC1jZWxsXSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRIZWFkZXJSb3csc2VsZWN0b3I6Im1hdC1oZWFkZXItcm93LCB0clttYXQtaGVhZGVyLXJvd10iLGV4cG9ydEFzOlsibWF0SGVhZGVyUm93Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRSb3csc2VsZWN0b3I6Im1hdC1yb3csIHRyW21hdC1yb3ddIixleHBvcnRBczpbIm1hdFJvdyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFNob3dIaWRlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeFNob3ddLCBbZnhTaG93LnByaW50XSwgIFtmeFNob3cueHNdLCBbZnhTaG93LnNtXSwgW2Z4U2hvdy5tZF0sIFtmeFNob3cubGddLCBbZnhTaG93LnhsXSwgIFtmeFNob3cubHQtc21dLCBbZnhTaG93Lmx0LW1kXSwgW2Z4U2hvdy5sdC1sZ10sIFtmeFNob3cubHQteGxdLCAgW2Z4U2hvdy5ndC14c10sIFtmeFNob3cuZ3Qtc21dLCBbZnhTaG93Lmd0LW1kXSwgW2Z4U2hvdy5ndC1sZ10sICBbZnhIaWRlXSwgW2Z4SGlkZS5wcmludF0sICBbZnhIaWRlLnhzXSwgW2Z4SGlkZS5zbV0sIFtmeEhpZGUubWRdLCBbZnhIaWRlLmxnXSwgW2Z4SGlkZS54bF0sICBbZnhIaWRlLmx0LXNtXSwgW2Z4SGlkZS5sdC1tZF0sIFtmeEhpZGUubHQtbGddLCBbZnhIaWRlLmx0LXhsXSwgIFtmeEhpZGUuZ3QteHNdLCBbZnhIaWRlLmd0LXNtXSwgW2Z4SGlkZS5ndC1tZF0sIFtmeEhpZGUuZ3QtbGddIixpbnB1dHM6WyJmeFNob3ciLCJmeFNob3cucHJpbnQiLCJmeFNob3cueHMiLCJmeFNob3cuc20iLCJmeFNob3cubWQiLCJmeFNob3cubGciLCJmeFNob3cueGwiLCJmeFNob3cubHQtc20iLCJmeFNob3cubHQtbWQiLCJmeFNob3cubHQtbGciLCJmeFNob3cubHQteGwiLCJmeFNob3cuZ3QteHMiLCJmeFNob3cuZ3Qtc20iLCJmeFNob3cuZ3QtbWQiLCJmeFNob3cuZ3QtbGciLCJmeEhpZGUiLCJmeEhpZGUucHJpbnQiLCJmeEhpZGUueHMiLCJmeEhpZGUuc20iLCJmeEhpZGUubWQiLCJmeEhpZGUubGciLCJmeEhpZGUueGwiLCJmeEhpZGUubHQtc20iLCJmeEhpZGUubHQtbWQiLCJmeEhpZGUubHQtbGciLCJmeEhpZGUubHQteGwiLCJmeEhpZGUuZ3QteHMiLCJmeEhpZGUuZ3Qtc20iLCJmeEhpZGUuZ3QtbWQiLCJmeEhpZGUuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNNYXN0ZXJUYWJsZUNvbXBvbmVudCIsd28pLEhlKFt4dCgpXSx3by5wcm90b3R5cGUsImlzTGVnYWN5Iix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntzZWFyY2hJbnB1dEZpZWxkOlt7dHlwZTpvLGFyZ3M6WyJzZWFyY2hJbnB1dCJdfV0saXNMZWdhY3k6W3t0eXBlOmF9XX19KTtjbGFzcyBDbyBleHRlbmRzIFJ7Y29uc3RydWN0b3IoKXtzdXBlcigpfX1lKCJTbGF2ZXNEYXRhc291cmNlIixDbyk7Y2xhc3MgVG8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5lbmFibGVTbGF2ZUNvbnRyb2w9bmV3IHllKCExKSx0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVTbGF2ZUVuYWJsaW5nKGUpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzbGF2ZSIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohIXRoaXMub25DaGFuZ2V9KX0pKX13cml0ZVZhbHVlKGUpe3N1cGVyLndyaXRlVmFsdWUoZSksdGhpcy5vbkVuYWJsZVNsYXZlQ29udHJvbChlKX12YWxpZGF0ZSgpe2NvbnN0e21hc3RlcjplLHNsYXZlOnR9PXRoaXMuYmFzaWNGb3JtR3JvdXAudmFsdWUsbj0hZT8uc2xhdmVzPy5sZW5ndGgmJihlZSh0LHt9KXx8IXQpO3JldHVybiF0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkfHxuP3tiYXNpY0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fTpudWxsfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXN0ZXI6W10sc2xhdmU6W119KX11cGRhdGVTbGF2ZUVuYWJsaW5nKGUpe2U/dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInNsYXZlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgic2xhdmUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1vbkVuYWJsZVNsYXZlQ29udHJvbChlKXt0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC5zZXRWYWx1ZSghIWUuc2xhdmUmJiFlZShlLnNsYXZlLHt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpUbyxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6VG8sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnR9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdEaXJlY3RpdmUiLFRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W119KTtjbGFzcyBTb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNQcm90b2NvbExhYmVsc01hcD16bix0aGlzLk1vZGJ1c01ldGhvZExhYmVsc01hcD1Lbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c09yZGVyVHlwZT1PYmplY3QudmFsdWVzKEpuKSx0aGlzLk1vZGJ1c1Byb3RvY29sVHlwZT1Ibix0aGlzLm1vZGJ1c0JhdWRyYXRlcz1sYSx0aGlzLmlzU2xhdmVFbmFibGVkPSExLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSJdLHRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cz1bInBvcnQiLCJzZWN1cml0eSIsImhvc3QiXSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0huLlRDUF0saG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSxzZXJpYWxQb3J0OlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2Q6W1duLlNPQ0tFVF0sdW5pdElkOltudWxsLFt1ZS5yZXF1aXJlZF1dLGJhdWRyYXRlOlt0aGlzLm1vZGJ1c0JhdWRyYXRlc1swXV0sZGV2aWNlTmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlVHlwZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9sbFBlcmlvZDpbNWUzLFt1ZS5yZXF1aXJlZF1dLHNlbmREYXRhVG9UaGluZ3NCb2FyZDpbITFdLGJ5dGVPcmRlcjpbSm4uQklHXSx3b3JkT3JkZXI6W0puLkJJR10sc2VjdXJpdHk6W10saWRlbnRpdHk6dGhpcy5mYi5ncm91cCh7dmVuZG9yTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdENvZGU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHZlbmRvclVybDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdE5hbWU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLG1vZGVsTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx2YWx1ZXM6W119KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCl9Z2V0IHByb3RvY29sVHlwZSgpe3JldHVybiB0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzbGF2ZUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5wYXRjaFZhbHVlKCEhZS5zZWN1cml0eSYmIWVlKGUuc2VjdXJpdHkse30pKSx0aGlzLnVwZGF0ZVNsYXZlQ29uZmlnKGUpfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5pc1NsYXZlRW5hYmxlZD0hZSx0aGlzLnVwZGF0ZUZvcm1FbmFibGVTdGF0ZSgpfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PntlLnR5cGU9PT1Ibi5TZXJpYWwmJihlLnBvcnQ9ZS5zZXJpYWxQb3J0LGRlbGV0ZSBlLnNlcmlhbFBvcnQpLHRoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlRm9ybUVuYWJsZVN0YXRlKCksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUVuYWJsZVN0YXRlKCl7dGhpcy5pc1NsYXZlRW5hYmxlZD8odGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpLHRoaXMudXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCksdGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZSh0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWUpfW9ic2VydmVTaG93U2VjdXJpdHkoKXt0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZShlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxlKGUpe2UmJnRoaXMuaXNTbGF2ZUVuYWJsZWQmJnRoaXMucHJvdG9jb2xUeXBlIT09SG4uU2VyaWFsP3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJzZWN1cml0eSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCl7Y29uc3QgZT10aGlzLnByb3RvY29sVHlwZT09PUhuLlNlcmlhbCx0PWU/dGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cyxuPWU/dGhpcy50Y3BVZHBTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5czt0aGlzLmlzU2xhdmVFbmFibGVkJiZ0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKX11cGRhdGVTbGF2ZUNvbmZpZyhlKXtjb25zdHt0eXBlOnQ9SG4uVENQLG1ldGhvZDpuPVduLlJUVSx1bml0SWQ6YT0wLGRldmljZU5hbWU6bz0iIixkZXZpY2VUeXBlOmk9IiIscG9sbFBlcmlvZDpyPTVlMyxzZW5kRGF0YVRvVGhpbmdzQm9hcmQ6cz0hMSxieXRlT3JkZXI6bD1Kbi5CSUcsd29yZE9yZGVyOmM9Sm4uQklHLHNlY3VyaXR5OnA9e30saWRlbnRpdHk6bT17dmVuZG9yTmFtZToiIixwcm9kdWN0Q29kZToiIix2ZW5kb3JVcmw6IiIscHJvZHVjdE5hbWU6IiIsbW9kZWxOYW1lOiIifSx2YWx1ZXM6ZD17fSxiYXVkcmF0ZTp1PXRoaXMubW9kYnVzQmF1ZHJhdGVzWzBdLGhvc3Q6Zz0iIixwb3J0OmY9bnVsbH09ZSx5PXt0eXBlOnQsbWV0aG9kOm4sdW5pdElkOmEsZGV2aWNlTmFtZTpvLGRldmljZVR5cGU6aSxwb2xsUGVyaW9kOnIsc2VuZERhdGFUb1RoaW5nc0JvYXJkOiEhcyxieXRlT3JkZXI6bCx3b3JkT3JkZXI6YyxzZWN1cml0eTpwLGlkZW50aXR5Om0sdmFsdWVzOmQsYmF1ZHJhdGU6dSxob3N0OnQ9PT1Ibi5TZXJpYWw/IiI6Zyxwb3J0OnQ9PT1Ibi5TZXJpYWw/bnVsbDpmLHNlcmlhbFBvcnQ6dD09PUhuLlNlcmlhbD9mOiIifTt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnNldFZhbHVlKHkse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnlvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtdmFsdWVzIixpbnB1dHM6WyJzaW5nbGVNb2RlIiwiaGlkZU5ld0ZpZWxkcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJpc01hc3RlciJdfSx7a2luZDoicGlwZSIsdHlwZTp3YSxuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+U28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELHlvLGJvLHdhLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dfSk7Y2xhc3Mga28gZXh0ZW5kcyBUb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc0xlZ2FjeT0hMX1tYXBDb25maWdUb0Zvcm1WYWx1ZSh7bWFzdGVyOmUsc2xhdmU6dH0pe3JldHVybnttYXN0ZXI6ZT8uc2xhdmVzP2U6e3NsYXZlczpbXX0sc2xhdmU6dD8/e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTprbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1iYXNpYy1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5rbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpTbyxzZWxlY3RvcjoidGItbW9kYnVzLXNsYXZlLWNvbmZpZyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d28sc2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGlucHV0czpbImlzTGVnYWN5Il19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdDb21wb25lbnQiLGtvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmtvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+a28pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBMbyBleHRlbmRzIFRve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzTGVnYWN5PSEwfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXI/LnNsYXZlcz9lLm1hc3Rlcjp7c2xhdmVzOltdfSxzbGF2ZTplLnNsYXZlP2hhLm1hcFNsYXZlVG9VcGdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6TG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubWFzdGVyLWNvbm5lY3Rpb25zXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDx0Yi1tb2RidXMtbWFzdGVyLXRhYmxlIFtpc0xlZ2FjeV09ImlzTGVnYWN5IiBmb3JtQ29udHJvbE5hbWU9Im1hc3RlciI+PC90Yi1tb2RidXMtbWFzdGVyLXRhYmxlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIiPnt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMtc2VydmVyXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIFtmb3JtQ29udHJvbF09ImVuYWJsZVNsYXZlQ29udHJvbCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8dGItbW9kYnVzLXNsYXZlLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNsYXZlIj48L3RiLW1vZGJ1cy1zbGF2ZS1jb25maWc+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlNvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2xhdmUtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3byxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOlsiaXNMZWdhY3kiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lCYXNpY0NvbmZpZ0NvbXBvbmVudCIsTG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBGbyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm1hcHBpbmdUeXBlcz1mbix0aGlzLmlzTGVnYWN5PSEwfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXBwaW5nOltdLHNlcnZlcjpbXX0pfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybntzZXJ2ZXI6ZS5zZXJ2ZXI/eGEubWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZS5zZXJ2ZXIpOnt9LG1hcHBpbmc6ZS5zZXJ2ZXI/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUuc2VydmVyLm1hcHBpbmcpOltdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24oZSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Rm8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Rm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+Rm8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5GbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgSW8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5NYXBwaW5nVHlwZT1mbn1pbml0QmFzaWNGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7bWFwcGluZzpbXSxyZXF1ZXN0c01hcHBpbmc6W10sYnJva2VyOltdLHdvcmtlcnM6W119KX1nZXRSZXF1ZXN0RGF0YUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGxlKGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChuPT57Zm9yKGNvbnN0IGEgb2YgZVtuXSl0LnB1c2goe3JlcXVlc3RUeXBlOm4scmVxdWVzdFZhbHVlOmF9KX0pKSx0fWdldFJlcXVlc3REYXRhT2JqZWN0KGUpe3JldHVybiBlLnJlZHVjZSgoKGUse3JlcXVlc3RUeXBlOnQscmVxdWVzdFZhbHVlOm59KT0+KGVbdF0ucHVzaChuKSxlKSkse2Nvbm5lY3RSZXF1ZXN0czpbXSxkaXNjb25uZWN0UmVxdWVzdHM6W10sYXR0cmlidXRlUmVxdWVzdHM6W10sYXR0cmlidXRlVXBkYXRlczpbXSxzZXJ2ZXJTaWRlUnBjOltdfSl9Z2V0QnJva2VyTWFwcGVkVmFsdWUoZSx0KXtyZXR1cm57Li4uZSxtYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnM/PzEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcj8/MTB9fXdyaXRlVmFsdWUoZSl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLm1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOklvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6SW8sZGVjb3JhdG9yczpbe3R5cGU6c31dfSk7Y2xhc3MgQW8gZXh0ZW5kcyBJb3ttYXBDb25maWdUb0Zvcm1WYWx1ZShlKXtjb25zdHticm9rZXI6dCxtYXBwaW5nOm49W10sY29ubmVjdFJlcXVlc3RzOmE9W10sZGlzY29ubmVjdFJlcXVlc3RzOm89W10sYXR0cmlidXRlUmVxdWVzdHM6aT1bXSxhdHRyaWJ1dGVVcGRhdGVzOnI9W10sc2VydmVyU2lkZVJwYzpzPVtdfT1lLGw9bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmEsZGlzY29ubmVjdFJlcXVlc3RzOm8sYXR0cmlidXRlUmVxdWVzdHM6aSxhdHRyaWJ1dGVVcGRhdGVzOnIsc2VydmVyU2lkZVJwYzpzfSk7cmV0dXJue3dvcmtlcnM6dCYmKHQubWF4TnVtYmVyT2ZXb3JrZXJzfHx0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXIpP3ttYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnMsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjp0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJ9Ont9LG1hcHBpbmc6bWEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKG4pfHxbXSxicm9rZXI6dHx8e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShsKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e30saT1vPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fTtyZXR1cm57YnJva2VyOnRoaXMuZ2V0QnJva2VyTWFwcGVkVmFsdWUodCxuKSxtYXBwaW5nOm1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGEpLC4uLm1hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihpKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpBbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuYnJva2VyLmNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJicm9rZXIiPjwvdGItYnJva2VyLWNvbmZpZy1jb250cm9sPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZGF0YS1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJtYXBwaW5nIiBbcmVxdWlyZWRdPSJ0cnVlIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5EQVRBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RzTWFwcGluZyIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuUkVRVUVTVFMiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LndvcmtlcnMtc2V0dGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICA8dGItd29ya2Vycy1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9IndvcmtlcnMiPjwvdGItd29ya2Vycy1jb25maWctY29udHJvbD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuPC9tYXQtdGFiLWdyb3VwPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dW8sc2VsZWN0b3I6InRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm1vLHNlbGVjdG9yOiJ0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLXRhYmxlIixpbnB1dHM6WyJyZXF1aXJlZCIsIm1hcHBpbmdUeXBlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxsbyx1byxtbyxyb10sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmJyb2tlci5jb25uZWN0aW9uXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItYnJva2VyLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0iYnJva2VyIj48L3RiLWJyb2tlci1jb25maWctY29udHJvbD5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuREFUQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkucmVxdWVzdHMtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0c01hcHBpbmciIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS53b3JrZXJzLXNldHRpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgPHRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJ3b3JrZXJzIj48L3RiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2w+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2hlaWdodDoxMDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBObyBleHRlbmRzIElve21hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe2NvbnN0e2Jyb2tlcjp0LG1hcHBpbmc6bj1bXSxyZXF1ZXN0c01hcHBpbmc6YX09ZTtyZXR1cm57d29ya2Vyczp0JiYodC5tYXhOdW1iZXJPZldvcmtlcnN8fHQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcik/e21heE51bWJlck9mV29ya2Vyczp0Lm1heE51bWJlck9mV29ya2VycyxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcn06e30sbWFwcGluZzpuPz9bXSxicm9rZXI6dD8/e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShhKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e307cmV0dXJue2Jyb2tlcjp0aGlzLmdldEJyb2tlck1hcHBlZFZhbHVlKHQsbiksbWFwcGluZzphLHJlcXVlc3RzTWFwcGluZzpvPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpObyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpObyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtYmFzaWMtY29uZmlnIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Tm8pKSxtdWx0aTohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiLHNlbGVjdG9yOiJtYXQtdGFiIixpbnB1dHM6WyJkaXNhYmxlZCIsImxhYmVsIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImxhYmVsQ2xhc3MiLCJib2R5Q2xhc3MiXSxleHBvcnRBczpbIm1hdFRhYiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiR3JvdXAsc2VsZWN0b3I6Im1hdC10YWItZ3JvdXAiLGlucHV0czpbImNvbG9yIiwiZml0SW5rQmFyVG9Db250ZW50IiwibWF0LXN0cmV0Y2gtdGFicyIsImR5bmFtaWNIZWlnaHQiLCJzZWxlY3RlZEluZGV4IiwiaGVhZGVyUG9zaXRpb24iLCJhbmltYXRpb25EdXJhdGlvbiIsImNvbnRlbnRUYWJJbmRleCIsImRpc2FibGVQYWdpbmF0aW9uIiwiZGlzYWJsZVJpcHBsZSIsInByZXNlcnZlQ29udGVudCIsImJhY2tncm91bmRDb2xvciIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiXSxvdXRwdXRzOlsic2VsZWN0ZWRJbmRleENoYW5nZSIsImZvY3VzQ2hhbmdlIiwiYW5pbWF0aW9uRG9uZSIsInNlbGVjdGVkVGFiQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1byxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6bW8sc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5vLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tcXR0LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8sdW8sbW8scm9dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgTW97aXNFcnJvclN0YXRlKGUpe3JldHVybiBlJiZlLmludmFsaWR9fWUoIkZvcmNlRXJyb3JTdGF0ZU1hdGNoZXIiLE1vKTtjbGFzcyBFbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5mYj10LHRoaXMudHJhbnNsYXRlPW4sdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWEsdGhpcy5kaWFsb2dTZXJ2aWNlPW8sdGhpcy5kaWFsb2c9aSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZT1yLHRoaXMuem9uZT1zLHRoaXMudXRpbHM9bCx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1jLHRoaXMuY2Q9cCx0aGlzLkNvbm5lY3RvclR5cGU9X3QsdGhpcy5hbGxvd0Jhc2ljQ29uZmlnPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5nYXRld2F5TG9nTGV2ZWw9T2JqZWN0LnZhbHVlcyhNdCksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiZW5hYmxlZCIsImtleSIsInR5cGUiLCJzeW5jU3RhdHVzIiwiZXJyb3JzIiwiYWN0aW9ucyJdLHRoaXMuR2F0ZXdheUNvbm5lY3RvclR5cGVzVHJhbnNsYXRlc01hcD1IdCx0aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcz1vbix0aGlzLlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlPWxuLHRoaXMubW9kZT10aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyx0aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3Q9bmV3IFNlLHRoaXMuYWN0aXZlRGF0YT1bXSx0aGlzLmluYWN0aXZlRGF0YT1bXSx0aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGE9W10sdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy5vbkVycm9yc1VwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfX0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0PW5ldyBTZSx0aGlzLmluaXREYXRhU291cmNlcygpLHRoaXMuaW5pdENvbm5lY3RvckZvcm0oKSx0aGlzLm9ic2VydmVBdHRyaWJ1dGVDaGFuZ2UoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGFTb3VyY2Uuc29ydD10aGlzLnNvcnQsdGhpcy5kYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3I9dGhpcy5nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCksdGhpcy5jdHguJHNjb3BlLmdhdGV3YXlDb25uZWN0b3JzPXRoaXMsdGhpcy5sb2FkQ29ubmVjdG9ycygpLHRoaXMubG9hZEdhdGV3YXlTdGF0ZSgpLHRoaXMub2JzZXJ2ZU1vZGVDaGFuZ2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfW9uU2F2ZUNvbm5lY3Rvcigpe3RoaXMuc2F2ZUNvbm5lY3Rvcih0aGlzLmdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKHRoaXMuY29ubmVjdG9yRm9ybS52YWx1ZSksITEpfXNhdmVDb25uZWN0b3IoZSx0PSEwKXtjb25zdCBuPXR8fHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyh0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSk/TC5TSEFSRURfU0NPUEU6TC5TRVJWRVJfU0NPUEU7QWUodGhpcy5nZXRFbnRpdHlBdHRyaWJ1dGVUYXNrcyhlLG4pKS5waXBlKE9lKDEpKS5zdWJzY3JpYmUoKG49Pnt0aGlzLnNob3dUb2FzdCh0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuY29ubmVjdG9yLWNyZWF0ZWQiKTp0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmNvbm5lY3Rvci11cGRhdGVkIikpLHRoaXMuaW5pdGlhbENvbm5lY3Rvcj1lLHRoaXMudXBkYXRlRGF0YSghMCksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9KSl9Z2V0RW50aXR5QXR0cmlidXRlVGFza3MoZSx0KXtjb25zdCBuPVtdLGE9W3trZXk6ZS5uYW1lLHZhbHVlOmV9XSxvPVtdLGk9IXRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TSEFSRURfU0NPUEV8fCF0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TRVJWRVJfU0NPUEUscj10aGlzLmluaXRpYWxDb25uZWN0b3ImJnRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lIT09ZS5uYW1lO3JldHVybiByJiYoby5wdXNoKHtrZXk6dGhpcy5pbml0aWFsQ29ubmVjdG9yLm5hbWV9KSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCExKSksaSYmKHQ9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnMucHVzaChlLm5hbWUpOnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLnB1c2goZS5uYW1lKSksKHJ8fGkpJiZuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2sodCkpLG4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsdCxhKSksby5sZW5ndGgmJm4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSx0LG8pKSxufWdldFNhdmVFbnRpdHlBdHRyaWJ1dGVzVGFzayhlKXtjb25zdCB0PWU9PT1MLlNIQVJFRF9TQ09QRT8iYWN0aXZlX2Nvbm5lY3RvcnMiOiJpbmFjdGl2ZV9jb25uZWN0b3JzIixuPWU9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5zYXZlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxlLFt7a2V5OnQsdmFsdWU6bn1dKX1yZW1vdmVDb25uZWN0b3JGcm9tTGlzdChlLHQpe2NvbnN0IG49dD90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMsYT1uLmluZGV4T2YoZSk7LTEhPT1hJiZuLnNwbGljZShhLDEpfWdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKGUpe2NvbnN0IHQ9ey4uLmV9O3JldHVybiB0LmNvbmZpZ3VyYXRpb249YCR7Y2UodC5uYW1lKX0uanNvbmAsZGVsZXRlIHQuYmFzaWNDb25maWcsdC50eXBlIT09X3QuR1JQQyYmZGVsZXRlIHQua2V5LHQudHlwZSE9PV90LkNVU1RPTSYmZGVsZXRlIHQuY2xhc3MsdC50eXBlPT09X3QuTU9EQlVTJiZ0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0odC5jb25maWdWZXJzaW9uKSYmKHQucmVwb3J0U3RyYXRlZ3l8fCh0LnJlcG9ydFN0cmF0ZWd5PXt0eXBlOnNuLk9uUmVwb3J0UGVyaW9kLHJlcG9ydFBlcmlvZDpsbi5Db25uZWN0b3J9LGRlbGV0ZSB0LnNlbmREYXRhT25seU9uQ2hhbmdlKSksdGhpcy5nYXRld2F5VmVyc2lvbiYmIXQuY29uZmlnVmVyc2lvbiYmKHQuY29uZmlnVmVyc2lvbj10aGlzLmdhdGV3YXlWZXJzaW9uKSx0LnRzPURhdGUubm93KCksdH11cGRhdGVEYXRhKGU9ITEpe3RoaXMucGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5PXRoaXMuc29ydC5hY3RpdmUsdGhpcy5wYWdlTGluay5zb3J0T3JkZXIuZGlyZWN0aW9uPXdbdGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpXSx0aGlzLmF0dHJpYnV0ZURhdGFTb3VyY2UubG9hZEF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5DTElFTlRfU0NPUEUsdGhpcy5wYWdlTGluayxlKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZURhdGE9ZS5kYXRhLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKSx0aGlzLmdlbmVyYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5zZXRDbGllbnREYXRhKGUpfSkpLHRoaXMuaW5hY3RpdmVDb25uZWN0b3JzRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuc2hhcmVkQXR0cmlidXRlRGF0YT1lLmRhdGEuZmlsdGVyKChlPT50aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5jbHVkZXMoZS5rZXkpKSksdGhpcy5jb21iaW5lRGF0YSgpfSkpLHRoaXMuc2VydmVyRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuaW5hY3RpdmVEYXRhPWUuZGF0YS5maWx0ZXIoKGU9PnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKX0pKX1pc0Nvbm5lY3RvclN5bmNlZChlKXtjb25zdCB0PWUudmFsdWU7aWYoIXQudHN8fGUuc2tpcFN5bmN8fCF0aGlzLmlzR2F0ZXdheUFjdGl2ZSlyZXR1cm4hMTtpZigtMT09PXRoaXMuYWN0aXZlRGF0YS5maW5kSW5kZXgoKGU9Pigic3RyaW5nIj09dHlwZW9mIGUudmFsdWU/SlNPTi5wYXJzZShlLnZhbHVlKTplLnZhbHVlKS5uYW1lPT09dC5uYW1lKSkpcmV0dXJuITE7cmV0dXJuLTEhPT10aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGEuZmluZEluZGV4KChlPT57Y29uc3Qgbj1lLnZhbHVlLGE9bi5uYW1lPT09dC5uYW1lLG89ZWUobi5jb25maWd1cmF0aW9uSnNvbix7fSkmJmEsaT10aGlzLmhhc1NhbWVDb25maWcobi5jb25maWd1cmF0aW9uSnNvbix0LmNvbmZpZ3VyYXRpb25Kc29uKSxyPW4udHMmJm4udHM8PXQudHM7cmV0dXJuIGEmJnImJihpfHxvKX0pKX1oYXNTYW1lQ29uZmlnKGUsdCl7Y29uc3R7bmFtZTpuLGlkOmEsZW5hYmxlUmVtb3RlTG9nZ2luZzpvLGxvZ0xldmVsOmkscmVwb3J0U3RyYXRlZ3k6cixjb25maWdWZXJzaW9uOnMsLi4ubH09ZSx7bmFtZTpjLGlkOnAsZW5hYmxlUmVtb3RlTG9nZ2luZzptLGxvZ0xldmVsOmQscmVwb3J0U3RyYXRlZ3k6dSxjb25maWdWZXJzaW9uOmcsLi4uZn09dDtyZXR1cm4gZWUobCxmKX1jb21iaW5lRGF0YSgpe2NvbnN0IGU9Wy4uLnRoaXMuYWN0aXZlRGF0YSwuLi50aGlzLmluYWN0aXZlRGF0YSwuLi50aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGFdLnJlZHVjZSgoKGUsdCk9Pntjb25zdCBuPWUuZmluZEluZGV4KChlPT5lLmtleT09PXQua2V5KSk7cmV0dXJuLTE9PT1uP2UucHVzaCh0KTp0Lmxhc3RVcGRhdGVUcz5lW25dLmxhc3RVcGRhdGVUcyYmIXRoaXMuaXNDb25uZWN0b3JTeW5jZWQoZVtuXSkmJihlW25dPXsuLi50LHNraXBTeW5jOiEwfSksZX0pLFtdKTt0aGlzLmRhdGFTb3VyY2UuZGF0YT1lLm1hcCgoZT0+KHsuLi5lLHZhbHVlOiJzdHJpbmciPT10eXBlb2YgZS52YWx1ZT9KU09OLnBhcnNlKGUudmFsdWUpOmUudmFsdWV9KSkpfWNsZWFyT3V0Q29ubmVjdG9yRm9ybSgpe3RoaXMuaW5pdGlhbENvbm5lY3Rvcj1udWxsLHRoaXMuY29ubmVjdG9yRm9ybS5zZXRWYWx1ZSh7bW9kZTpvbi5CQVNJQyxuYW1lOiIiLHR5cGU6X3QuTVFUVCxzZW5kRGF0YU9ubHlPbkNoYW5nZTohMSxlbmFibGVSZW1vdGVMb2dnaW5nOiExLGxvZ0xldmVsOk10LklORk8sa2V5OiJhdXRvIixjbGFzczoiIixjb25maWd1cmF0aW9uOiIiLGNvbmZpZ3VyYXRpb25Kc29uOnt9LGJhc2ljQ29uZmlnOnt9LGNvbmZpZ1ZlcnNpb246IiIscmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9c2VsZWN0Q29ubmVjdG9yKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPXQudmFsdWU7bj8ubmFtZSE9PXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZSYmdGhpcy5jb25maXJtQ29ubmVjdG9yQ2hhbmdlKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5zZXRGb3JtVmFsdWUobil9KSl9aXNTYW1lQ29ubmVjdG9yKGUpe2lmKCF0aGlzLmluaXRpYWxDb25uZWN0b3IpcmV0dXJuITE7Y29uc3QgdD1lLnZhbHVlO3JldHVybiB0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZT09PXQubmFtZX1zaG93VG9hc3QoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh7dHlwZToiW05vdGlmaWNhdGlvbl0gU2hvdyIsbm90aWZpY2F0aW9uOnttZXNzYWdlOmUsdHlwZToic3VjY2VzcyIsZHVyYXRpb246MWUzLHZlcnRpY2FsUG9zaXRpb246InRvcCIsaG9yaXpvbnRhbFBvc2l0aW9uOiJsZWZ0Iix0YXJnZXQ6ImRhc2hib2FyZFJvb3QiLGZvcmNlRGlzbWlzczohMH19KX1yZXR1cm5UeXBlKGUpe2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4gdGhpcy5HYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldCh0LnR5cGUpfWRlbGV0ZUNvbm5lY3RvcihlLHQpe3Q/LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49YERlbGV0ZSBjb25uZWN0b3IgIiR7ZS5rZXl9Ij9gO3RoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG4sIkFsbCBjb25uZWN0b3IgZGF0YSB3aWxsIGJlIGRlbGV0ZWQuIiwiQ2FuY2VsIiwiRGVsZXRlIikucGlwZShPZSgxKSxVZSgodD0+e2lmKCF0KXJldHVybjtjb25zdCBuPVtdLGE9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUudmFsdWU/Lm5hbWUpP0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVybiBuLnB1c2godGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmRlbGV0ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsYSxbZV0pKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCExKSxuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2soYSkpLEFlKG4pfSkpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSE9PWUua2V5fHwodGhpcy5jbGVhck91dENvbm5lY3RvckZvcm0oKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSx0aGlzLmNvbm5lY3RvckZvcm0uZGlzYWJsZSgpKSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWNvbm5lY3RvckxvZ3MoZSx0KXt0JiZ0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49Sih0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIuZ2V0U3RhdGVQYXJhbXMoKSk7bi5jb25uZWN0b3JfbG9ncz1lLG4udGFyZ2V0RW50aXR5UGFyYW1OYW1lPSJjb25uZWN0b3JfbG9ncyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX2xvZ3MiLG4pfWNvbm5lY3RvclJwYyhlLHQpe3QmJnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTtuLmNvbm5lY3Rvcl9ycGM9ZSxuLnRhcmdldEVudGl0eVBhcmFtTmFtZT0iY29ubmVjdG9yX3JwYyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX3JwYyIsbil9b25FbmFibGVDb25uZWN0b3IoZSl7ZS52YWx1ZS50cz0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLnVwZGF0ZUFjdGl2ZUNvbm5lY3RvcktleXMoZS5rZXkpLHRoaXMuYXR0cmlidXRlVXBkYXRlU3ViamVjdC5uZXh0KGUpfWdldEVycm9yc0NvdW50KGUpe2NvbnN0IHQ9ZS5rZXksbj10aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24uZGF0YS5maW5kKChlPT5lJiZlLmRhdGFLZXkubmFtZT09PWAke3R9X0VSUk9SU19DT1VOVGApKTtyZXR1cm4gbiYmdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKHQpP24uZGF0YVswXVsxXXx8MDoiSW5hY3RpdmUifW9uQWRkQ29ubmVjdG9yKGUpe2U/LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29uZmlybUNvbm5lY3RvckNoYW5nZSgpLnBpcGUoT2UoMSksTWUoQm9vbGVhbiksVWUoKCgpPT50aGlzLm9wZW5BZGRDb25uZWN0b3JEaWFsb2coKSkpLE1lKEJvb2xlYW4pKS5zdWJzY3JpYmUoKGU9PnRoaXMuYWRkQ29ubmVjdG9yKGUpKSl9YWRkQ29ubmVjdG9yKGUpe3RoaXMuY29ubmVjdG9yRm9ybS5kaXNhYmxlZCYmdGhpcy5jb25uZWN0b3JGb3JtLmVuYWJsZSgpLGUuY29uZmlndXJhdGlvbkpzb258fChlLmNvbmZpZ3VyYXRpb25Kc29uPXt9KSx0aGlzLmdhdGV3YXlWZXJzaW9uJiYhZS5jb25maWdWZXJzaW9uJiYoZS5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLGUuYmFzaWNDb25maWc9ZS5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9ZTtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZTt0aGlzLnNldEluaXRpYWxDb25uZWN0b3JWYWx1ZXMoZSksdGhpcy5zYXZlQ29ubmVjdG9yKHRoaXMuZ2V0VXBkYXRlZENvbm5lY3RvckRhdGEoZSkpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9c2V0SW5pdGlhbENvbm5lY3RvclZhbHVlcyhlKXtjb25zdHtiYXNpY0NvbmZpZzp0LG1vZGU6biwuLi5hfT1lO3RoaXMudG9nZ2xlUmVwb3J0U3RyYXRlZ3koZS50eXBlKSx0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikuc2V0VmFsdWUodGhpcy5hbGxvd0Jhc2ljQ29uZmlnLmhhcyhlLnR5cGUpP2UubW9kZT8/b24uQkFTSUM6bnVsbCx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLnBhdGNoVmFsdWUoYSx7ZW1pdEV2ZW50OiExfSl9b3BlbkFkZENvbm5lY3RvckRpYWxvZygpe3JldHVybiB0aGlzLmN0eC5uZ1pvbmUucnVuKCgoKT0+dGhpcy5kaWFsb2cub3Blbih0byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e2RhdGFTb3VyY2VEYXRhOnRoaXMuZGF0YVNvdXJjZS5kYXRhLGdhdGV3YXlWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb259fSkuYWZ0ZXJDbG9zZWQoKSkpfXVuaXFOYW1lUmVxdWlyZWQoKXtyZXR1cm4gZT0+e2NvbnN0IHQ9ZS52YWx1ZT8udHJpbSgpLnRvTG93ZXJDYXNlKCksbj10aGlzLmRhdGFTb3VyY2UuZGF0YS5zb21lKChlPT5lLnZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKT09PXQpKSxhPXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZS50b0xvd2VyQ2FzZSgpPT09dDtyZXR1cm4gbiYmIWE/e2R1cGxpY2F0ZU5hbWU6e3ZhbGlkOiExfX06bnVsbH19aW5pdERhdGFTb3VyY2VzKCl7Y29uc3QgZT17cHJvcGVydHk6ImtleSIsZGlyZWN0aW9uOncuQVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKDFlMywwLG51bGwsZSksdGhpcy5hdHRyaWJ1dGVEYXRhU291cmNlPW5ldyBMYSh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2UsdGhpcy56b25lLHRoaXMudHJhbnNsYXRlKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9yc0RhdGFTb3VyY2U9bmV3IExhKHRoaXMuYXR0cmlidXRlU2VydmljZSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZSx0aGlzLnpvbmUsdGhpcy50cmFuc2xhdGUpLHRoaXMuc2VydmVyRGF0YVNvdXJjZT1uZXcgTGEodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLHRoaXMudGVsZW1ldHJ5V3NTZXJ2aWNlLHRoaXMuem9uZSx0aGlzLnRyYW5zbGF0ZSksdGhpcy5kYXRhU291cmNlPW5ldyB5KFtdKX1pbml0Q29ubmVjdG9yRm9ybSgpe3RoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHttb2RlOltvbi5CQVNJQ10sbmFtZTpbIiIsW3VlLnJlcXVpcmVkLHRoaXMudW5pcU5hbWVSZXF1aXJlZCgpLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbIiIsW3VlLnJlcXVpcmVkXV0sZW5hYmxlUmVtb3RlTG9nZ2luZzpbITFdLGxvZ0xldmVsOlsiIixbdWUucmVxdWlyZWRdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITFdLGtleTpbImF1dG8iXSxjbGFzczpbIiJdLGNvbmZpZ3VyYXRpb246WyIiXSxjb25maWd1cmF0aW9uSnNvbjpbe30sW3VlLnJlcXVpcmVkXV0sYmFzaWNDb25maWc6W3t9XSxjb25maWdWZXJzaW9uOlsiIl0scmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSksdGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGUoKX1nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCl7cmV0dXJuKGUsdCk9Pntzd2l0Y2godCl7Y2FzZSJzeW5jU3RhdHVzIjpyZXR1cm4gdGhpcy5pc0Nvbm5lY3RvclN5bmNlZChlKT8xOjA7Y2FzZSJlbmFibGVkIjpyZXR1cm4gdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KT8xOjA7Y2FzZSJlcnJvcnMiOmNvbnN0IG49dGhpcy5nZXRFcnJvcnNDb3VudChlKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpPT09dy5ERVNDPy0xOjEvMDpuO2RlZmF1bHQ6cmV0dXJuIGVbdF18fGUudmFsdWVbdF19fX1sb2FkQ29ubmVjdG9ycygpe3RoaXMuZGV2aWNlJiZ0aGlzLmRldmljZS5pZCE9PWsmJkFlKFt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSxbImFjdGl2ZV9jb25uZWN0b3JzIl0pLHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFsiaW5hY3RpdmVfY29ubmVjdG9ycyJdKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLkNMSUVOVF9TQ09QRSxbIlZlcnNpb24iXSldKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVswXSksdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVsxXSksdGhpcy5nYXRld2F5VmVyc2lvbj1lWzJdWzBdPy52YWx1ZSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWxvYWRHYXRld2F5U3RhdGUoKXt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5rZXkpKS52YWx1ZSxuPWUuZmluZCgoZT0+Imxhc3REaXNjb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZTt0aGlzLmlzR2F0ZXdheUFjdGl2ZT10aGlzLmdldEdhdGV3YXlTdGF0dXModCxhLG4pfSkpfXBhcnNlQ29ubmVjdG9ycyhlKXtjb25zdCB0PWU/LlswXT8udmFsdWV8fFtdO3JldHVybiBuZSh0KT9KU09OLnBhcnNlKHQpOnR9b2JzZXJ2ZU1vZGVDaGFuZ2UoKXt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikubWFya0FzUHJpc3RpbmUoKX0pKX1vYnNlcnZlQXR0cmlidXRlQ2hhbmdlKCl7dGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0LnBpcGUoVmUoMzAwKSxFZSgoZT0+dGhpcy5leGVjdXRlQXR0cmlidXRlVXBkYXRlcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX11cGRhdGVBY3RpdmVDb25uZWN0b3JLZXlzKGUpe2lmKHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlKSl7Y29uc3QgdD10aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuYWN0aXZlQ29ubmVjdG9ycy5zcGxpY2UodCwxKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5wdXNoKGUpfWVsc2V7Y29uc3QgdD10aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMuc3BsaWNlKHQsMSksdGhpcy5hY3RpdmVDb25uZWN0b3JzLnB1c2goZSl9fWV4ZWN1dGVBdHRyaWJ1dGVVcGRhdGVzKGUpe0FlKHRoaXMuZ2V0QXR0cmlidXRlRXhlY3V0aW9uVGFza3MoZSkpLnBpcGUoT2UoMSksRWUoKCgpPT50aGlzLnVwZGF0ZURhdGEoITApKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWdldEF0dHJpYnV0ZUV4ZWN1dGlvblRhc2tzKGUpe2NvbnN0IHQ9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSxuPXQ/TC5TRVJWRVJfU0NPUEU6TC5TSEFSRURfU0NPUEUsYT10P0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVyblt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsW3trZXk6ImFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmFjdGl2ZUNvbm5lY3RvcnN9XSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFt7a2V5OiJpbmFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmluYWN0aXZlQ29ubmVjdG9yc31dKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxuLFtlXSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLGEsW2VdKV19b25EYXRhVXBkYXRlRXJyb3IoZSl7Y29uc3QgdD10aGlzLnV0aWxzLnBhcnNlRXhjZXB0aW9uKGUpO2xldCBuPXQubmFtZTt0Lm1lc3NhZ2UmJihuKz0iOiAiK3QubWVzc2FnZSksY29uc29sZS5lcnJvcihuKX1vbkVycm9yc1VwZGF0ZWQoKXt0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVkKCl7Y29uc3QgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGEsdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5kYXRhS2V5Lm5hbWUpKS5kYXRhWzBdWzFdLG49ZS5maW5kKChlPT4ibGFzdERpc2Nvbm5lY3RUaW1lIj09PWUuZGF0YUtleS5uYW1lKSkuZGF0YVswXVsxXSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmRhdGFLZXkubmFtZSkpLmRhdGFbMF1bMV07dGhpcy5pc0dhdGV3YXlBY3RpdmU9dGhpcy5nZXRHYXRld2F5U3RhdHVzKHQsYSxuKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1nZXRHYXRld2F5U3RhdHVzKGUsdCxuKXtyZXR1cm4hIWUmJighbnx8dD5uKX1nZW5lcmF0ZVN1YnNjcmlwdGlvbigpe2lmKHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuZGV2aWNlKXtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuZGV2aWNlLmlkLGVudGl0eU5hbWU6IkdhdGV3YXkiLHRpbWVzZXJpZXM6W119XTt0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKCh0PT57ZVswXS50aW1lc2VyaWVzLnB1c2goe25hbWU6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGAsbGFiZWw6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGB9KX0pKSx0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGkuY3JlYXRlU3Vic2NyaXB0aW9uRnJvbUluZm8oQS5sYXRlc3QsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuc3Vic2NyaXB0aW9uPWV9KSl9fWNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpe3RoaXMuYmFzaWNDb25maWdTdWImJnRoaXMuYmFzaWNDb25maWdTdWIudW5zdWJzY3JpYmUoKSx0aGlzLmJhc2ljQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImJhc2ljQ29uZmlnIikudmFsdWVDaGFuZ2VzLnBpcGUoTWUoKCgpPT4hIXRoaXMuaW5pdGlhbENvbm5lY3RvcikpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIiksbj10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWUsYT10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU7aWYoIWVlKGUsdD8udmFsdWUpJiZ0aGlzLmFsbG93QmFzaWNDb25maWcuaGFzKG4pJiZhPT09b24uQkFTSUMpe2NvbnN0IG49ey4uLnQudmFsdWUsLi4uZX07dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiY29uZmlndXJhdGlvbkpzb24iKS5wYXRjaFZhbHVlKG4se2VtaXRFdmVudDohMX0pfX0pKX1jcmVhdGVKc29uQ29uZmlnV2F0Y2hlcigpe3RoaXMuanNvbkNvbmZpZ1N1YiYmdGhpcy5qc29uQ29uZmlnU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5qc29uQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKSxuPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZSxhPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoIm1vZGUiKS52YWx1ZTshZWUoZSx0Py52YWx1ZSkmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMobikmJmE9PT1vbi5BRFZBTkNFRCYmdGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKS5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWNvbmZpcm1Db25uZWN0b3JDaGFuZ2UoKXtyZXR1cm4gdGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmNvbm5lY3RvckZvcm0uZGlydHk/dGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRpdGxlIiksdGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRleHQiKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApOkllKCEwKX1zZXRGb3JtVmFsdWUoZSl7dGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGVkJiZ0aGlzLmNvbm5lY3RvckZvcm0uZW5hYmxlKCk7Y29uc3QgdD1iYS5nZXRDb25maWcoe2NvbmZpZ3VyYXRpb246IiIsa2V5OiJhdXRvIixjb25maWd1cmF0aW9uSnNvbjp7fSwuLi5lfSx0aGlzLmdhdGV3YXlWZXJzaW9uKTt0aGlzLmdhdGV3YXlWZXJzaW9uJiYhdC5jb25maWdWZXJzaW9uJiYodC5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLHQuYmFzaWNDb25maWc9dC5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9dCx0aGlzLnVwZGF0ZUNvbm5lY3Rvcih0KX11cGRhdGVDb25uZWN0b3IoZSl7c3dpdGNoKHRoaXMuanNvbkNvbmZpZ1N1Yj8udW5zdWJzY3JpYmUoKSxlLnR5cGUpe2Nhc2UgX3QuTVFUVDpjYXNlIF90Lk9QQ1VBOmNhc2UgX3QuTU9EQlVTOnRoaXMudXBkYXRlQmFzaWNDb25maWdDb25uZWN0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZSh7Li4uZSxtb2RlOm51bGx9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUpzb25Db25maWdXYXRjaGVyKCl9fXVwZGF0ZUJhc2ljQ29uZmlnQ29ubmVjdG9yKGUpe3RoaXMuYmFzaWNDb25maWdTdWI/LnVuc3Vic2NyaWJlKCk7Y29uc3QgdD10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWU7dGhpcy5zZXRJbml0aWFsQ29ubmVjdG9yVmFsdWVzKGUpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9cGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKXt0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZShlLHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpLHRoaXMuY3JlYXRlSnNvbkNvbmZpZ1dhdGNoZXIoKX10b2dnbGVSZXBvcnRTdHJhdGVneShlKXtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInJlcG9ydFN0cmF0ZWd5Iik7ZT09PV90Lk1PREJVUz90LmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zZXRDbGllbnREYXRhKGUpe2lmKHRoaXMuaW5pdGlhbENvbm5lY3Rvcil7Y29uc3QgdD1lLmRhdGEuZmluZCgoZT0+ZS5rZXk9PT10aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSkpO3QmJih0LnZhbHVlPSJzdHJpbmciPT10eXBlb2YgdC52YWx1ZT9KU09OLnBhcnNlKHQudmFsdWUpOnQudmFsdWUsdGhpcy5pc0Nvbm5lY3RvclN5bmNlZCh0KSYmdC52YWx1ZS5jb25maWd1cmF0aW9uSnNvbiYmdGhpcy5zZXRGb3JtVmFsdWUoey4uLnQudmFsdWUsbW9kZTp0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU/P3QudmFsdWUubW9kZX0pKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOlguQXR0cmlidXRlU2VydmljZX0se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp2YX0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVvLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbm5lY3RvciIsaW5wdXRzOntjdHg6ImN0eCIsZGV2aWNlOiJkZXZpY2UifSxwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6Im5hbWVJbnB1dCIsZmlyc3Q6ITAscHJlZGljYXRlOlsibmFtZUlucHV0Il0sZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InNvcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpnLGRlc2NlbmRhbnRzOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpMbyxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmtvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGbyxzZWxlY3RvcjoidGItb3BjLXVhLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnBvLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpBbyxzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpObyxzZWxlY3RvcjoidGItbXF0dC1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmdvLHNlbGVjdG9yOiJ0Yi1yZXBvcnQtc3RyYXRlZ3kiLGlucHV0czpbImlzRXhwYW5zaW9uTW9kZSIsImRlZmF1bHRWYWx1ZSJdfSx7a2luZDoicGlwZSIsdHlwZTpfLkFzeW5jUGlwZSxuYW1lOiJhc3luYyJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTp2YSxuYW1lOiJpc0xhdGVzdFZlcnNpb25Db25maWcifV19KX19ZSgiR2F0ZXdheUNvbm5lY3RvckNvbXBvbmVudCIsRW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX0se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTpKZS5NYXREaWFsb2d9LHt0eXBlOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3R5cGU6dC5OZ1pvbmV9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp2YX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkZXZpY2U6W3t0eXBlOmF9XSxuYW1lSW5wdXQ6W3t0eXBlOm8sYXJnczpbIm5hbWVJbnB1dCJdfV0sc29ydDpbe3R5cGU6byxhcmdzOltnLHtzdGF0aWM6ITF9XX1dfX0pO2NsYXNzIHFve2NvbnN0cnVjdG9yKGUpe3RoaXMuZGV2aWNlU2VydmljZT1lfWRvd25sb2FkKGUpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kZXZpY2VJZCYmdGhpcy5kZXZpY2VTZXJ2aWNlLmRvd25sb2FkR2F0ZXdheURvY2tlckNvbXBvc2VGaWxlKHRoaXMuZGV2aWNlSWQpLnN1YnNjcmliZSgoKCk9Pnt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxbyxkZXBzOlt7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpxbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1jb21tYW5kIixpbnB1dHM6e2RldmljZUlkOiJkZXZpY2VJZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJjb21wb25lbnQiLHR5cGU6d3QuVGJNYXJrZG93bkNvbXBvbmVudCxzZWxlY3RvcjoidGItbWFya2Rvd24iLGlucHV0czpbImRhdGEiLCJjb250ZXh0IiwiYWRkaXRpb25hbENvbXBpbGVNb2R1bGVzIiwibWFya2Rvd25DbGFzcyIsImNvbnRhaW5lckNsYXNzIiwic3R5bGUiLCJhcHBseURlZmF1bHRNYXJrZG93blN0eWxlIiwiYWRkaXRpb25hbFN0eWxlcyIsImxpbmVOdW1iZXJzIiwiZmFsbGJhY2tUb1BsYWluTWFya2Rvd24iLCJ1c2VQbGFpbk1hcmtkb3duIl0sb3V0cHV0czpbInJlYWR5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QW5jaG9yLHNlbGVjdG9yOiJhW21hdC1idXR0b25dLCBhW21hdC1yYWlzZWQtYnV0dG9uXSwgYVttYXQtZmxhdC1idXR0b25dLCBhW21hdC1zdHJva2VkLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJEZXZpY2VHYXRld2F5Q29tbWFuZENvbXBvbmVudCIscW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29tbWFuZCIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpYLkRldmljZVNlcnZpY2V9XSxwcm9wRGVjb3JhdG9yczp7ZGV2aWNlSWQ6W3t0eXBlOmF9XX19KTtjbGFzcyBEb3tjb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLmZiPWUsdGhpcy5kZXZpY2VTZXJ2aWNlPXQsdGhpcy5jZD1uLHRoaXMuZGlhbG9nPWEsdGhpcy5kaWFsb2dNb2RlPSExLHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZD1uZXcgaSx0aGlzLlN0b3JhZ2VUeXBlcz1BdCx0aGlzLnN0b3JhZ2VUeXBlcz1PYmplY3QudmFsdWVzKEF0KSx0aGlzLnN0b3JhZ2VUeXBlc1RyYW5zbGF0aW9uTWFwPVJ0LHRoaXMubG9nU2F2aW5nUGVyaW9kcz1PdCx0aGlzLmxvY2FsTG9nc0NvbmZpZ3M9T2JqZWN0LmtleXMoUHQpLHRoaXMubG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwPUd0LHRoaXMuc2VjdXJpdHlUeXBlcz1CdCx0aGlzLmdhdGV3YXlMb2dMZXZlbD1PYmplY3QudmFsdWVzKE10KSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmluaXRCYXNpY0Zvcm1Hcm91cCgpLHRoaXMub2JzZXJ2ZUZvcm1DaGFuZ2VzKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jaGVja0FuZEZldGNoQ3JlZGVudGlhbHMoZT8udGhpbmdzYm9hcmQ/LnNlY3VyaXR5Pz97fSksZT8uZ3JwYyYmdGhpcy50b2dnbGVScGNGaWVsZHMoZS5ncnBjLmVuYWJsZWQpOyhlPy50aGluZ3Nib2FyZD8uc3RhdGlzdGljcz8uY29tbWFuZHM/P1tdKS5mb3JFYWNoKChlPT50aGlzLmFkZENvbW1hbmQoZSwhMSkpKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fWF0TGVhc3RPbmVSZXF1aXJlZChlLHQ9bnVsbCl7cmV0dXJuIG49Pnt0fHwodD1PYmplY3Qua2V5cyhuLmNvbnRyb2xzKSk7cmV0dXJuIG4/LmNvbnRyb2xzJiZ0LnNvbWUoKHQ9PiFlKG4uY29udHJvbHNbdF0pKSk/bnVsbDp7YXRMZWFzdE9uZTohMH19fXRvZ2dsZVJwY0ZpZWxkcyhlKXtjb25zdCB0PXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjIik7ZT8odC5nZXQoInNlcnZlclBvcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lb3V0TXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluVGltZUJldHdlZW5QaW5nc01zIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNcyIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0LmdldCgic2VydmVyUG9ydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgia2VlcEFsaXZlVGltZW91dE1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoIm1pblRpbWVCZXR3ZWVuUGluZ3NNcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfWFkZExvY2FsTG9nQ29uZmlnKGUsdCl7Y29uc3Qgbj10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgibG9ncy5sb2NhbCIpLGE9dGhpcy5mYi5ncm91cCh7bG9nTGV2ZWw6W3QubG9nTGV2ZWx8fE10LklORk8sW3VlLnJlcXVpcmVkXV0sZmlsZVBhdGg6W3QuZmlsZVBhdGh8fCIuL2xvZ3MiLFt1ZS5yZXF1aXJlZF1dLGJhY2t1cENvdW50Olt0LmJhY2t1cENvdW50fHw3LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCldXSxzYXZpbmdUaW1lOlt0LnNhdmluZ1RpbWV8fDMsW3VlLnJlcXVpcmVkLHVlLm1pbigwKV1dLHNhdmluZ1BlcmlvZDpbdC5zYXZpbmdQZXJpb2R8fER0LmRheXMsW3VlLnJlcXVpcmVkXV19KTtuLmFkZENvbnRyb2woZSxhKX1nZXRMb2dGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KGBsb2dzLmxvY2FsLiR7ZX1gKX1jb21tYW5kRm9ybUFycmF5KCl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzIil9cmVtb3ZlQ29tbWFuZENvbnRyb2woZSx0KXsiIiE9PXQucG9pbnRlclR5cGUmJih0aGlzLmNvbW1hbmRGb3JtQXJyYXkoKS5yZW1vdmVBdChlKSx0aGlzLmJhc2ljRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfXJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5Iik7ZS5jbGVhclZhbGlkYXRvcnMoKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1yZW1vdmVBbGxTdG9yYWdlVmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInN0b3JhZ2UiKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKXt0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGV2aWNlKHRoaXMuZGV2aWNlLmlkKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmRpYWxvZy5vcGVuKFBhLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7Z2F0ZXdheU5hbWU6ZS5uYW1lfX0pLmFmdGVyQ2xvc2VkKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS5zZXRWYWx1ZSghMCx7ZW1pdEV2ZW50OiExfSl9KSl9KSl9YWRkQ29tbWFuZChlLHQ9ITApe2NvbnN0e2F0dHJpYnV0ZU9uR2F0ZXdheTpuPW51bGwsY29tbWFuZDphPW51bGwsdGltZW91dDpvPW51bGx9PWV8fHt9LGk9dGhpcy5mYi5ncm91cCh7YXR0cmlidXRlT25HYXRld2F5OltuLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dLGNvbW1hbmQ6W2EsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14oPz1cUykuKlxTJC8pXV0sdGltZW91dDpbbyxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKSx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dfSk7dGhpcy5jb21tYW5kRm9ybUFycmF5KCkucHVzaChpLHtlbWl0RXZlbnQ6dH0pfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3RoaXMuYmFzaWNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dGhpbmdzYm9hcmQ6dGhpcy5pbml0VGhpbmdzYm9hcmRGb3JtR3JvdXAoKSxzdG9yYWdlOnRoaXMuaW5pdFN0b3JhZ2VGb3JtR3JvdXAoKSxncnBjOnRoaXMuaW5pdEdycGNGb3JtR3JvdXAoKSxjb25uZWN0b3JzOnRoaXMuZmIuYXJyYXkoW10pLGxvZ3M6dGhpcy5pbml0TG9nc0Zvcm1Hcm91cCgpfSl9aW5pdFRoaW5nc2JvYXJkRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2hvc3Q6W3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteXHNdKyQvKV1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZVNoZWxsOlshMV0scmVtb3RlQ29uZmlndXJhdGlvbjpbITBdLGNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHM6WzYwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sc3RhdGlzdGljczp0aGlzLmZiLmdyb3VwKHtlbmFibGU6WyEwXSxzdGF0c1NlbmRQZXJpb2RJblNlY29uZHM6WzM2MDAsW3VlLnJlcXVpcmVkLHVlLm1pbig2MCksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sY29tbWFuZHM6dGhpcy5mYi5hcnJheShbXSl9KSxtYXhQYXlsb2FkU2l6ZUJ5dGVzOls4MTk2LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTAwKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtaW5QYWNrU2VuZERlbGF5TVM6WzUwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblBhY2tTaXplVG9TZW5kOls1MDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxMDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGhhbmRsZURldmljZVJlbmFtaW5nOlshMF0sY2hlY2tpbmdEZXZpY2VBY3Rpdml0eTp0aGlzLmluaXRDaGVja2luZ0RldmljZUFjdGl2aXR5Rm9ybUdyb3VwKCksc2VjdXJpdHk6dGhpcy5pbml0U2VjdXJpdHlGb3JtR3JvdXAoKSxxb3M6WzEsW3VlLnJlcXVpcmVkLHVlLm1pbigwKSx1ZS5tYXgoMSksdWUucGF0dGVybigvXlteLlxzXSskLyldXX0pfWluaXRTdG9yYWdlRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe3R5cGU6W0F0Lk1FTU9SWSxbdWUucmVxdWlyZWRdXSxyZWFkX3JlY29yZHNfY291bnQ6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heF9yZWNvcmRzX2NvdW50OlsxZTUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhX2ZvbGRlcl9wYXRoOlsiLi9kYXRhLyIsW3VlLnJlcXVpcmVkXV0sbWF4X2ZpbGVfY291bnQ6WzEwLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWF4X3JlYWRfcmVjb3Jkc19jb3VudDpbMTAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhfcmVjb3Jkc19wZXJfZmlsZTpbMWU0LFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sZGF0YV9maWxlX3BhdGg6WyIuL2RhdGEvZGF0YS5kYiIsW3VlLnJlcXVpcmVkXV0sbWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzOlsxLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWVzc2FnZXNfdHRsX2luX2RheXM6WzcsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRHcnBjRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxzZXJ2ZXJQb3J0Ols5NTk1LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUubWF4KDY1NTM1KSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxrZWVwQWxpdmVUaW1lTXM6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGtlZXBBbGl2ZVRpbWVvdXRNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sa2VlcGFsaXZlUGVybWl0V2l0aG91dENhbGxzOlshMF0sbWF4UGluZ3NXaXRob3V0RGF0YTpbMCxbdWUucmVxdWlyZWQsdWUubWluKDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblRpbWVCZXR3ZWVuUGluZ3NNczpbMWU0LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV19KX1pbml0TG9nc0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHtkYXRlRm9ybWF0OlsiJVktJW0tJWQgJUg6JU06JVMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sbG9nRm9ybWF0OlsiJShhc2N0aW1lKXMgLSB8JShsZXZlbG5hbWUpc3wgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGZ1bmNOYW1lKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sdHlwZTpbInJlbW90ZSIsW3VlLnJlcXVpcmVkXV0scmVtb3RlOnRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxsb2dMZXZlbDpbTXQuSU5GTyxbdWUucmVxdWlyZWRdXX0pLGxvY2FsOnRoaXMuZmIuZ3JvdXAoe30pfSl9aW5pdENoZWNraW5nRGV2aWNlQWN0aXZpdHlGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7Y2hlY2tEZXZpY2VJbmFjdGl2aXR5OlshMV0saW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzOlsyMDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzOls1MDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRTZWN1cml0eUZvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHt0eXBlOltWdC5BQ0NFU1NfVE9LRU4sW3VlLnJlcXVpcmVkXV0sYWNjZXNzVG9rZW46W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2xpZW50SWQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sdXNlcm5hbWU6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0scGFzc3dvcmQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2FDZXJ0OltudWxsXSxjZXJ0OltudWxsXSxwcml2YXRlS2V5OltudWxsXX0pfW9ic2VydmVGb3JtQ2hhbmdlcygpe3RoaXMub2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCksdGhpcy5vYnNlcnZlUmVtb3RlQ29uZmlndXJhdGlvbkNoYW5nZXMoKSx0aGlzLm9ic2VydmVEZXZpY2VBY3Rpdml0eUNoYW5nZXMoKSx0aGlzLm9ic2VydmVTZWN1cml0eVR5cGVDaGFuZ2VzKCksdGhpcy5vYnNlcnZlU3RvcmFnZVR5cGVDaGFuZ2VzKCl9b2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWUiKTt0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dCYmIiIhPT10P2Uuc2V0VmFsaWRhdG9ycyhbdWUucmVxdWlyZWRdKTplLmNsZWFyVmFsaWRhdG9ycygpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9b2JzZXJ2ZVJlbW90ZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKX0pKSx0aGlzLmxvZ1NlbGVjdG9yPXRoaXMuZmIuY29udHJvbChQdC5zZXJ2aWNlKTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhQdCkpdGhpcy5hZGRMb2NhbExvZ0NvbmZpZyhlLHt9KX1vYnNlcnZlRGV2aWNlQWN0aXZpdHlDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSIpO2UuZ2V0KCJjaGVja0RldmljZUluYWN0aXZpdHkiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7Y29uc3Qgbj1bdWUubWluKDEpLHVlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV07dD8oZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLnNldFZhbGlkYXRvcnMobiksZS5nZXQoImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiKS5zZXRWYWxpZGF0b3JzKG4pKTooZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLmNsZWFyVmFsaWRhdG9ycygpLGUuZ2V0KCJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIikuY2xlYXJWYWxpZGF0b3JzKCkpLGUuZ2V0KCJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSxlLmdldCgiaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kcyIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjLmVuYWJsZWQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy50b2dnbGVScGNGaWVsZHMoZSl9KSl9b2JzZXJ2ZVNlY3VyaXR5VHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eSIpO2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e3N3aXRjaCh0aGlzLnJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpLHQpe2Nhc2UgVnQuQUNDRVNTX1RPS0VOOnRoaXMuYWRkQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVExTX1BSSVZBVEVfS0VZOnRoaXMuYWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSk7YnJlYWs7Y2FzZSBWdC5UTFNfQUNDRVNTX1RPS0VOOnRoaXMuYWRkVGxzQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVVNFUk5BTUVfUEFTU1dPUkQ6ZS5hZGRWYWxpZGF0b3JzKFt0aGlzLmF0TGVhc3RPbmVSZXF1aXJlZCh1ZS5yZXF1aXJlZCxbImNsaWVudElkIiwidXNlcm5hbWUiXSldKX1lLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKSxbImNhQ2VydCIsInByaXZhdGVLZXkiLCJjZXJ0Il0uZm9yRWFjaCgodD0+e2UuZ2V0KHQpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT50aGlzLmNkLmRldGVjdENoYW5nZXMoKSkpfSkpfW9ic2VydmVTdG9yYWdlVHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzdG9yYWdlIik7ZS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57c3dpdGNoKHRoaXMucmVtb3ZlQWxsU3RvcmFnZVZhbGlkYXRvcnMoKSx0KXtjYXNlIEF0Lk1FTU9SWTp0aGlzLmFkZE1lbW9yeVN0b3JhZ2VWYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgQXQuRklMRTp0aGlzLmFkZEZpbGVTdG9yYWdlVmFsaWRhdG9ycyhlKTticmVhaztjYXNlIEF0LlNRTElURTp0aGlzLmFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpfX0pKX1hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7ZS5nZXQoImFjY2Vzc1Rva2VuIikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteLlxzXSskLyldKSxlLmdldCgiYWNjZXNzVG9rZW4iKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9YWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSl7WyJjYUNlcnQiLCJwcml2YXRlS2V5IiwiY2VydCJdLmZvckVhY2goKHQ9PntlLmdldCh0KS5hZGRWYWxpZGF0b3JzKFt1ZS5yZXF1aXJlZF0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKX1hZGRUbHNBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7dGhpcy5hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSksZS5nZXQoImNhQ2VydCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkXSksZS5nZXQoImNhQ2VydCIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1hZGRNZW1vcnlTdG9yYWdlVmFsaWRhdG9ycyhlKXtlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KCJtYXhfcmVjb3Jkc19jb3VudCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldKSxlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoIm1heF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9YWRkRmlsZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWF4X2ZpbGVfY291bnQiLCJtYXhfcmVhZF9yZWNvcmRzX2NvdW50IiwibWF4X3JlY29yZHNfcGVyX2ZpbGUiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIiwibWVzc2FnZXNfdHRsX2luX2RheXMiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWNoZWNrQW5kRmV0Y2hDcmVkZW50aWFscyhlKXtlLnR5cGUhPT1WdC5UTFNfUFJJVkFURV9LRVkmJnRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyh0aGlzLmRldmljZS5pZCkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5pbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkLmVtaXQodCksdGhpcy51cGRhdGVTZWN1cml0eVR5cGUoZSx0KSx0aGlzLnVwZGF0ZUNyZWRlbnRpYWxzKHQsZSl9KSl9dXBkYXRlU2VjdXJpdHlUeXBlKGUsdCl7Y29uc3Qgbj10LmNyZWRlbnRpYWxzVHlwZT09PVUuQUNDRVNTX1RPS0VOfHxlLnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOP2UudHlwZT09PVZ0LlRMU19BQ0NFU1NfVE9LRU4/VnQuVExTX0FDQ0VTU19UT0tFTjpWdC5BQ0NFU1NfVE9LRU46dC5jcmVkZW50aWFsc1R5cGU9PT1VLk1RVFRfQkFTSUM/VnQuVVNFUk5BTUVfUEFTU1dPUkQ6bnVsbDtuJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZSIpLnNldFZhbHVlKG4se2VtaXRFdmVudDohMX0pfXVwZGF0ZUNyZWRlbnRpYWxzKGUsdCl7c3dpdGNoKGUuY3JlZGVudGlhbHNUeXBlKXtjYXNlIFUuQUNDRVNTX1RPS0VOOnRoaXMudXBkYXRlQWNjZXNzVG9rZW5DcmVkZW50aWFscyhlLHQpO2JyZWFrO2Nhc2UgVS5NUVRUX0JBU0lDOnRoaXMudXBkYXRlTXF0dEJhc2ljQ3JlZGVudGlhbHMoZSk7Y2FzZSBVLlg1MDlfQ0VSVElGSUNBVEU6fX11cGRhdGVBY2Nlc3NUb2tlbkNyZWRlbnRpYWxzKGUsdCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuIikuc2V0VmFsdWUoZS5jcmVkZW50aWFsc0lkLHtlbWl0RXZlbnQ6ITF9KSx0LnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkuY2FDZXJ0Iikuc2V0VmFsdWUodC5jYUNlcnQse2VtaXRFdmVudDohMX0pfXVwZGF0ZU1xdHRCYXNpY0NyZWRlbnRpYWxzKGUpe2NvbnN0IHQ9SlNPTi5wYXJzZShlLmNyZWRlbnRpYWxzVmFsdWUpO3RoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZCIpLnNldFZhbHVlKHQuY2xpZW50SWQse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZSIpLnNldFZhbHVlKHQudXNlck5hbWUse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZCIpLnNldFZhbHVlKHQucGFzc3dvcmQse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6RG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWJhc2ljLWNvbmZpZ3VyYXRpb24iLGlucHV0czp7ZGV2aWNlOiJkZXZpY2UiLGRpYWxvZ01vZGU6ImRpYWxvZ01vZGUifSxvdXRwdXRzOntpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkOiJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+RG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgY2xhc3M9InRhYi1ncm91cC1ibG9jayIgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIiBbY2xhc3MuZGlhbG9nLW1vZGVdPSJkaWFsb2dNb2RlIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1jb25maWd1cmF0aW9uXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZVNoZWxsIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtaG9zdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaG9zdFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmhvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnNlY3VyaXR5LnNlY3VyaXR5PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzZWN1cml0eSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij57eyBzZWN1cml0eVR5cGUudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ2FjY2Vzc3Rva2VuXCcpIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuYWNjZXNzLXRva2VuPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImFjY2Vzc1Rva2VuIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkuYWNjZXNzLXRva2VuLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdkZXZpY2UuY29weS1hY2Nlc3MtdG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuY2xpZW50SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNsaWVudElkIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5jbGllbnRJZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgW2NvcHlUZXh0XT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuY2xpZW50SWRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS51c2VybmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LnVzZXJuYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZVwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXVzZXJuYW1lXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgc3R5bGU9IndpZHRoOiAxMDAlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiLz5cbiAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucGFzc3dvcmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8dGItZXJyb3Igc3R5bGU9Im1hcmdpbi10b3A6IC0xMnB4OyBkaXNwbGF5OiBibG9jazsiIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS50eXBlXCcpLnZhbHVlID09PSBcJ3VzZXJuYW1lUGFzc3dvcmRcJyJcbiAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eVwnKS5oYXNFcnJvcihcJ2F0TGVhc3RPbmVcJykgP1xuICAgICAgICAgIChcJ2RldmljZS5jbGllbnQtaWQtb3ItdXNlci1uYW1lLW5lY2Vzc2FyeVwnIHwgdHJhbnNsYXRlKSA6IFwnXCciPjwvdGItZXJyb3I+XG4gICAgICAgICAgICA8dGItZmlsZS1pbnB1dFxuICAgICAgICAgICAgICBmeEZsZXg9IjEwMCJcbiAgICAgICAgICAgICAgaGludD0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ3Rsc1wnKSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnQiXG4gICAgICAgICAgICAgIGxhYmVsPSJ7eyBcJ3NlY3VyaXR5LmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgW2FsbG93ZWRFeHRlbnNpb25zXT0iXCdwZW0sIGNlcnQsIGtleVwnIlxuICAgICAgICAgICAgICBbYWNjZXB0XT0iXCcucGVtLCBhcHBsaWNhdGlvbi9wZW0sLmNlcnQsIGFwcGxpY2F0aW9uL2NlcnQsIC5rZXksYXBwbGljYXRpb24va2V5XCciXG4gICAgICAgICAgICAgIGRyb3BMYWJlbD0ie3sgXCdnYXRld2F5LmRyb3AtZmlsZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIDwvdGItZmlsZS1pbnB1dD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubG9ncy5sb2dzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJsb2dzIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5kYXRlLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRlRm9ybWF0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MuZGF0ZUZvcm1hdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5kYXRlLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGUtZm9ybVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubG9nLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJsb2dGb3JtYXQiIHJvd3M9IjIiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9nRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmxvZy1mb3JtYXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5sb2ctZm9ybWF0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJyZW1vdGUiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MucmVtb3RlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1sb2dcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MucmVtb3RlLWxvZ3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ibG9jYWwiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MubG9jYWw8L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBbZm9ybUNvbnRyb2xdPSJsb2dTZWxlY3RvciI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBsb2dDb25maWcgb2YgbG9jYWxMb2dzQ29uZmlncyIgW3ZhbHVlXT0ibG9nQ29uZmlnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZpcnN0LWNhcGl0YWwiPnt7IGxvY2FsTG9nc0NvbmZpZ1RyYW5zbGF0ZU1hcC5nZXQobG9nQ29uZmlnKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0iZ2V0TG9nRm9ybUdyb3VwKGxvZ1NlbGVjdG9yLnZhbHVlKSI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MuZmlsZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZmlsZVBhdGgiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5maWxlUGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmZpbGUtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgc2F2aW5nLXBlcmlvZCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdUaW1lIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3Muc2F2aW5nLXBlcmlvZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLnNhdmluZ1RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBoaWRlUmVxdWlyZWRNYXJrZXIgc3R5bGU9Im1pbi13aWR0aDogMTEwcHg7IHdpZHRoOiAzMCUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdQZXJpb2QiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBwZXJpb2Qgb2YgbG9nU2F2aW5nUGVyaW9kcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJwZXJpb2Qua2V5Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwZXJpb2QudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5iYWNrdXAtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJiYWNrdXBDb3VudCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuYmFja3VwQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYmFja3VwLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0b3JhZ2VcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InN0b3JhZ2UiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPmdhdGV3YXkuaGludHMuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMiIFt2YWx1ZV09InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAuZ2V0KHN0b3JhZ2VUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPnt7IFwnZ2F0ZXdheS5oaW50cy5cJyArIGJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UudHlwZVwnKS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxzZWN0aW9uICpuZ1N3aXRjaENhc2U9IlN0b3JhZ2VUeXBlcy5NRU1PUlkiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlYWRfcmVjb3Jkc19jb3VudCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5yZWFkLXJlY29yZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLkZJTEUiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFfZm9sZGVyX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9mb2xkZXJfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtaW5maXggcG9pbnRlci1ldmVudCBzdWZmaXgtaWNvbiIgYXJpYS1oaWRkZW49ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9ImhlbHAtaWNvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0YS1mb2xkZXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9maWxlX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtZmlsZS1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhfcmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVhZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX3Blcl9maWxlIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVjb3Jkc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLlNRTElURSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9maWxlX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9maWxlX3BhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3VycyIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLWNoZWNrLWhvdXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9pbl9kYXlzIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnR0bC1tZXNzYWdlcy1kYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdycGNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImdycGMiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwY1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucGVybWl0LXdpdGhvdXQtY2FsbHNcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucGVybWl0LXdpdGhvdXQtY2FsbHNcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1wb3J0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ic2VydmVyUG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2VydmVyLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVvdXRNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJrZWVwQWxpdmVUaW1lTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMta2VlcC1hbGl2ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5nczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblRpbWVCZXR3ZWVuUGluZ3NNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGluZ3NXaXRob3V0RGF0YSIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY29sb3I9InByaW1hcnkiIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzdGF0c1NlbmRQZXJpb2RJblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSI2MCIvPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5oaW50cy5jb21tYW5kczwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZvcm1BcnJheU5hbWU9ImNvbW1hbmRzIiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiXG4gICAgICAgICAgICAgICAgICpuZ0Zvcj0ibGV0IGNvbW1hbmRDb250cm9sIG9mIGNvbW1hbmRGb3JtQXJyYXkoKS5jb250cm9sczsgbGV0ICRpbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gW2Zvcm1Hcm91cE5hbWVdPSIkaW5kZXgiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgbm8tcGFkZGluZy1ib3R0b20gbm8tZ2FwIGNvbW1hbmQtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuYXR0cmlidXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlT25HYXRld2F5Ii8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2F0dHJpYnV0ZU9uR2F0ZXdheVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmF0dHJpYnV0ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjb21tYW5kIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnY29tbWFuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jb21tYW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb21tYW5kQ29udHJvbCgkaW5kZXgsICRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3MucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiBmaXQtY29udGVudDsiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZENvbW1hbmQoKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkub3RoZXJcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiIGZvcm1Hcm91cE5hbWU9ImNoZWNraW5nRGV2aWNlQWN0aXZpdHkiXG4gICAgICAgICAgICAgW2NsYXNzLm5vLXBhZGRpbmctYm90dG9tXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jaGVjay1kZXZpY2UtYWN0aXZpdHlcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0RldmljZUluYWN0aXZpdHkiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5XCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuY2hlY2tEZXZpY2VJbmFjdGl2aXR5XCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmluYWN0aXZpdHktdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QYWNrU2VuZERlbGF5TVMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2VuZERlbGF5TVNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5taW5pbWFsLXBhY2stZGVsYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubXF0dC1xb3M8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icW9zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSIxIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnFvc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5xb3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heFBheWxvYWRTaXplQnl0ZXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXBheWxvYWQtc2l6ZS1ieXRlc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTaXplVG9TZW5kIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbi1wYWNrLXNpemUtdG8tc2VuZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1yb3dzOm1pbi1jb250ZW50IG1pbm1heChhdXRvLDFmcikgbWluLWNvbnRlbnR9Omhvc3QgLmNvbmZpZ3VyYXRpb24tYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTZweDttYXgtaGVpZ2h0Ojcwdmh9Omhvc3QgLmRpYWxvZy1tb2RlIC5jb25maWd1cmF0aW9uLWJsb2Nre21heC1oZWlnaHQ6NjB2aH06aG9zdCAubWF0LXRvb2xiYXJ7Z3JpZC1yb3c6MTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLnRhYi1ncm91cC1ibG9ja3ttaW4td2lkdGg6MDtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OjA7Z3JpZC1yb3c6Mn06aG9zdCAudG9nZ2xlLWdyb3Vwe21hcmdpbi1yaWdodDphdXRvfTpob3N0IC5maXJzdC1jYXBpdGFse3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgdGV4dGFyZWF7cmVzaXplOm5vbmV9Omhvc3QgLnNhdmluZy1wZXJpb2R7ZmxleDoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY29tbWFuZC1jb250YWluZXJ7d2lkdGg6MTAwJX06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3J7ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3I6Zmlyc3QtY2hpbGR7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QgOjpuZy1kZWVwIC5wb2ludGVyLWV2ZW50e3BvaW50ZXItZXZlbnRzOmFsbH06aG9zdCA6Om5nLWRlZXAgLnRvZ2dsZS1ncm91cCBzcGFue3BhZGRpbmc6MCAyNXB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2NvbG9yOiNlMGUwZTB9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXg6aG92ZXJ7Y29sb3I6IzllOWU5ZX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q3QuVGJFcnJvckNvbXBvbmVudCxzZWxlY3RvcjoidGItZXJyb3IiLGlucHV0czpbIm5vTWFyZ2luIiwiZXJyb3IiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpXLk1hdFRhYkNvbnRlbnQsc2VsZWN0b3I6IlttYXRUYWJDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpUdC5GaWxlSW5wdXRDb21wb25lbnQsc2VsZWN0b3I6InRiLWZpbGUtaW5wdXQiLGlucHV0czpbImxhYmVsIiwiaGludCIsImFjY2VwdCIsIm5vRmlsZVRleHQiLCJpbnB1dElkIiwiYWxsb3dlZEV4dGVuc2lvbnMiLCJkcm9wTGFiZWwiLCJtYXhTaXplQnl0ZSIsImNvbnRlbnRDb252ZXJ0RnVuY3Rpb24iLCJyZXF1aXJlZCIsInJlcXVpcmVkQXNFcnJvciIsImRpc2FibGVkIiwiZXhpc3RpbmdGaWxlTmFtZSIsInJlYWRBc0JpbmFyeSIsIndvcmtGcm9tRmlsZU9iaiIsIm11bHRpcGxlRmlsZSJdLG91dHB1dHM6WyJmaWxlTmFtZUNoYW5nZWQiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6U3QuQ29weUJ1dHRvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItY29weS1idXR0b24iLGlucHV0czpbImNvcHlUZXh0IiwiZGlzYWJsZWQiLCJtZGlJY29uIiwiaWNvbiIsInRvb2x0aXBUZXh0IiwidG9vbHRpcFBvc2l0aW9uIiwic3R5bGUiLCJjb2xvciIsIm1pbmlCdXR0b24iXSxvdXRwdXRzOlsic3VjY2Vzc0NvcGllZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19XX0pfX1lKCJHYXRld2F5QmFzaWNDb25maWd1cmF0aW9uQ29tcG9uZW50IixEbyksSGUoW04oKV0sRG8ucHJvdG90eXBlLCJkaWFsb2dNb2RlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5EbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBjbGFzcz0idGFiLWdyb3VwLWJsb2NrIiBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiIFtjbGFzcy5kaWFsb2ctbW9kZV09ImRpYWxvZ01vZGUiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5yZW1vdGUtY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUNvbmZpZ3VyYXRpb24iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlU2hlbGwiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Imhvc3QiLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+c2VjdXJpdHkuc2VjdXJpdHk8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHNlY3VyaXR5VHlwZSBvZiBzZWN1cml0eVR5cGVzIHwga2V5dmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09InNlY3VyaXR5VHlwZS5rZXkiPnt7IHNlY3VyaXR5VHlwZS52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwnYWNjZXNzdG9rZW5cJykiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5hY2Nlc3MtdG9rZW48L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYWNjZXNzVG9rZW4iLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuYWNjZXNzVG9rZW5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5hY2Nlc3MtdG9rZW4tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2RldmljZS5jb3B5LWFjY2Vzcy10b2tlblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50b2tlblwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPHNlY3Rpb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5jbGllbnRJZDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LmNsaWVudElkLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBpY29uPSJjb250ZW50X2NvcHkiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPnNlY3VyaXR5LnVzZXJuYW1lPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkudXNlcm5hbWUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdnYXRld2F5LmNvcHktdXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy51c2VybmFtZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBzdHlsZT0id2lkdGg6IDEwMCUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIvPlxuICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnBhc3N3b3JkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXBhc3N3b3JkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDx0Yi1lcnJvciBzdHlsZT0ibWFyZ2luLXRvcDogLTEycHg7IGRpc3BsYXk6IGJsb2NrOyIgZnhGbGV4PSIxMDAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIlxuICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5XCcpLmhhc0Vycm9yKFwnYXRMZWFzdE9uZVwnKSA/XG4gICAgICAgICAgKFwnZGV2aWNlLmNsaWVudC1pZC1vci11c2VyLW5hbWUtbmVjZXNzYXJ5XCcgfCB0cmFuc2xhdGUpIDogXCdcJyI+PC90Yi1lcnJvcj5cbiAgICAgICAgICAgIDx0Yi1maWxlLWlucHV0XG4gICAgICAgICAgICAgIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICBoaW50PSJ7eyBcJ2dhdGV3YXkuaGludHMuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwndGxzXCcpIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImNhQ2VydCJcbiAgICAgICAgICAgICAgbGFiZWw9Int7IFwnc2VjdXJpdHkuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBbYWxsb3dlZEV4dGVuc2lvbnNdPSJcJ3BlbSwgY2VydCwga2V5XCciXG4gICAgICAgICAgICAgIFthY2NlcHRdPSJcJy5wZW0sIGFwcGxpY2F0aW9uL3BlbSwuY2VydCwgYXBwbGljYXRpb24vY2VydCwgLmtleSxhcHBsaWNhdGlvbi9rZXlcJyJcbiAgICAgICAgICAgICAgZHJvcExhYmVsPSJ7eyBcJ2dhdGV3YXkuZHJvcC1maWxlXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgPC90Yi1maWxlLWlucHV0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5sb2dzLmxvZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImxvZ3MiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGVGb3JtYXQiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5kYXRlRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0ZS1mb3JtXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sb2ctZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImxvZ0Zvcm1hdCIgcm93cz0iMiI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2dGb3JtYXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MubG9nLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmxvZy1mb3JtYXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iIGZvcm1Hcm91cE5hbWU9InJlbW90ZSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5yZW1vdGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWxvZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5yZW1vdGUtbG9nc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJsb2dMZXZlbCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJsb2NhbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5sb2NhbDwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIFtmb3JtQ29udHJvbF09ImxvZ1NlbGVjdG9yIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0NvbmZpZyBvZiBsb2NhbExvZ3NDb25maWdzIiBbdmFsdWVdPSJsb2dDb25maWciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmlyc3QtY2FwaXRhbCI+e3sgbG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwLmdldChsb2dDb25maWcpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJnZXRMb2dGb3JtR3JvdXAobG9nU2VsZWN0b3IudmFsdWUpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5maWxlLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaWxlUGF0aCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmZpbGVQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MuZmlsZS1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBzYXZpbmctcGVyaW9kIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1RpbWUiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5zYXZpbmdUaW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2QtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGhpZGVSZXF1aXJlZE1hcmtlciBzdHlsZT0ibWluLXdpZHRoOiAxMTBweDsgd2lkdGg6IDMwJSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1BlcmlvZCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBlcmlvZCBvZiBsb2dTYXZpbmdQZXJpb2RzIHwga2V5dmFsdWUiIFt2YWx1ZV09InBlcmlvZC5rZXkiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBlcmlvZC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImJhY2t1cENvdW50IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmJhY2t1cENvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5iYWNrdXAtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0ic3RvcmFnZSIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+Z2F0ZXdheS5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+Z2F0ZXdheS5oaW50cy5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgY2xhc3M9InRvZ2dsZS1ncm91cCIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZXNUcmFuc2xhdGlvbk1hcC5nZXQoc3RvcmFnZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+e3sgXCdnYXRld2F5LmhpbnRzLlwnICsgYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnR5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLk1FTU9SWSIgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnJlYWQtcmVjb3JkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3JkczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXJlY29yZHMtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuRklMRSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9mb2xkZXJfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXQtZm9ybS1maWVsZC1pbmZpeCBwb2ludGVyLWV2ZW50IHN1ZmZpeC1pY29uIiBhcmlhLWhpZGRlbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iaGVscC1pY29uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X2ZpbGVfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfZmlsZV9jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1maWxlLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWFkX3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWFkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfcGVyX2ZpbGUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19wZXJfZmlsZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuU1FMSVRFIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRhX2ZpbGVfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZpbGVfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGEtZm9sZGVyXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50dGwtY2hlY2staG91clwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5czwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2luX2RheXMiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2luX2RheXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLW1lc3NhZ2VzLWRheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ3JwY1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0iZ3JwYyIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5wZXJtaXQtd2l0aG91dC1jYWxsc1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5wZXJtaXQtd2l0aG91dC1jYWxsc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJQb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5zZXJ2ZXItcG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLnNlcnZlclBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1heFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ia2VlcEFsaXZlVGltZW91dE1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLWtlZXAtYWxpdmUtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVvdXRNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluVGltZUJldHdlZW5QaW5nc01zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblRpbWVCZXR3ZWVuUGluZ3NNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtYXhQaW5nc1dpdGhvdXREYXRhIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGFcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1heFBpbmdzV2l0aG91dERhdGFcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWNzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj0icHJpbWFyeSIgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InN0YXRzU2VuZFBlcmlvZEluU2Vjb25kcyIgdHlwZT0ibnVtYmVyIiBtaW49IjYwIi8+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnN0YXRpc3RpY3Muc3RhdHNTZW5kUGVyaW9kSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZHM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiIHRyYW5zbGF0ZT5nYXRld2F5LmhpbnRzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZm9ybUFycmF5TmFtZT0iY29tbWFuZHMiIGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29tbWFuZENvbnRyb2wgb2YgY29tbWFuZEZvcm1BcnJheSgpLmNvbnRyb2xzOyBsZXQgJGluZGV4ID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8c2VjdGlvbiBbZm9ybUdyb3VwTmFtZV09IiRpbmRleCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBuby1wYWRkaW5nLWJvdHRvbSBuby1nYXAgY29tbWFuZC1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJhdHRyaWJ1dGVPbkdhdGV3YXkiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnYXR0cmlidXRlT25HYXRld2F5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXR0cmlidXRlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MudGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCd0aW1lb3V0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2NvbW1hbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9InJlbW92ZUNvbW1hbmRDb250cm9sKCRpbmRleCwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItYm94LWJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IGZpdC1jb250ZW50OyJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkQ29tbWFuZCgpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuYWRkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5vdGhlclwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCIgZm9ybUdyb3VwTmFtZT0iY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSJcbiAgICAgICAgICAgICBbY2xhc3Mubm8tcGFkZGluZy1ib3R0b21dPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmNoZWNrRGV2aWNlSW5hY3Rpdml0eVwnKS52YWx1ZSI+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNoZWNrLWRldmljZS1hY3Rpdml0eVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImNoZWNrRGV2aWNlSW5hY3Rpdml0eSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jaGVja2luZy1kZXZpY2UtYWN0aXZpdHlcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlUaW1lb3V0U2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBmb3JtQ29udHJvbE5hbWU9ImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5pbmFjdGl2aXR5LXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmFkdmFuY2VkPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTZW5kRGVsYXlNUyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbmltYWwtcGFjay1kZWxheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tcXR0LXFvczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJxb3MiIHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjEiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtYXhcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnFvc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGF5bG9hZFNpemVCeXRlcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1heFBheWxvYWRTaXplQnl0ZXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluUGFja1NpemVUb1NlbmQiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2l6ZVRvU2VuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWluLXBhY2stc2l6ZS10by1zZW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLXJvd3M6bWluLWNvbnRlbnQgbWlubWF4KGF1dG8sMWZyKSBtaW4tY29udGVudH06aG9zdCAuY29uZmlndXJhdGlvbi1ibG9ja3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxNnB4O21heC1oZWlnaHQ6NzB2aH06aG9zdCAuZGlhbG9nLW1vZGUgLmNvbmZpZ3VyYXRpb24tYmxvY2t7bWF4LWhlaWdodDo2MHZofTpob3N0IC5tYXQtdG9vbGJhcntncmlkLXJvdzoxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzAwMDAwMGRlIWltcG9ydGFudH06aG9zdCAudGFiLWdyb3VwLWJsb2Nre21pbi13aWR0aDowO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6MDtncmlkLXJvdzoyfTpob3N0IC50b2dnbGUtZ3JvdXB7bWFyZ2luLXJpZ2h0OmF1dG99Omhvc3QgLmZpcnN0LWNhcGl0YWx7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZX06aG9zdCB0ZXh0YXJlYXtyZXNpemU6bm9uZX06aG9zdCAuc2F2aW5nLXBlcmlvZHtmbGV4OjF9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVye3dpZHRoOjEwMCV9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIC5jb21tYW5kLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcjpmaXJzdC1jaGlsZHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH06aG9zdCA6Om5nLWRlZXAgLnBvaW50ZXItZXZlbnR7cG9pbnRlci1ldmVudHM6YWxsfTpob3N0IDo6bmctZGVlcCAudG9nZ2xlLWdyb3VwIHNwYW57cGFkZGluZzowIDI1cHh9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7Y29sb3I6I2UwZTBlMH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeDpob3Zlcntjb2xvcjojOWU5ZTllfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkRldmljZVNlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOkplLk1hdERpYWxvZ31dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dNb2RlOlt7dHlwZTphfV0saW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZDpbe3R5cGU6bH1dfX0pO2NsYXNzIFBve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCIiKSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5hZHZhbmNlZEZvcm1Db250cm9sLnJlc2V0KGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMuYWR2YW5jZWRGb3JtQ29udHJvbC52YWxpZD9udWxsOnthZHZhbmNlZEZvcm1Db250cm9sOnt2YWxpZDohMX19fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpQbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+UG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48dGItanNvbi1vYmplY3QtZWRpdFxuICBmaWxsSGVpZ2h0PSJ0cnVlIlxuICBjbGFzcz0idGItZmxleCBjb25maWctY29udGFpbmVyIlxuICBmeExheW91dD0iY29sdW1uIlxuICBqc29uUmVxdWlyZWRcbiAgbGFiZWw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX0iXG4gIFtmb3JtQ29udHJvbF09ImFkdmFuY2VkRm9ybUNvbnRyb2wiXG4vPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5jb25maWctY29udGFpbmVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KTtwYWRkaW5nOjhweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUFkdmFuY2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudCIsUG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5QbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjx0Yi1qc29uLW9iamVjdC1lZGl0XG4gIGZpbGxIZWlnaHQ9InRydWUiXG4gIGNsYXNzPSJ0Yi1mbGV4IGNvbmZpZy1jb250YWluZXIiXG4gIGZ4TGF5b3V0PSJjb2x1bW4iXG4gIGpzb25SZXF1aXJlZFxuICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgW2Zvcm1Db250cm9sXT0iYWR2YW5jZWRGb3JtQ29udHJvbCJcbi8+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmNvbmZpZy1jb250YWluZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpO3BhZGRpbmc6OHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIEdve2NvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLmRldmljZVNlcnZpY2U9bix0aGlzLmNkPWEsdGhpcy5Db25maWd1cmF0aW9uTW9kZXM9b24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5nYXRld2F5Q29uZmlnQXR0cmlidXRlS2V5cz1bImdlbmVyYWxfY29uZmlndXJhdGlvbiIsImdycGNfY29uZmlndXJhdGlvbiIsImxvZ3NfY29uZmlndXJhdGlvbiIsInN0b3JhZ2VfY29uZmlndXJhdGlvbiIsIlJlbW90ZUxvZ2dpbmdMZXZlbCIsIm1vZGUiXSx0aGlzLmdhdGV3YXlDb25maWdHcm91cD10aGlzLmZiLmdyb3VwKHtiYXNpY0NvbmZpZzpbXSxhZHZhbmNlZENvbmZpZzpbXSxtb2RlOltvbi5CQVNJQ119KSx0aGlzLm9ic2VydmVBbGlnbkNvbmZpZ3MoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmZldGNoQ29uZmlnQXR0cmlidXRlKHRoaXMuZGV2aWNlKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1zYXZlQ29uZmlnKCl7Y29uc3R7bW9kZTplLGFkdmFuY2VkQ29uZmlnOnR9PXBlKHRoaXMucmVtb3ZlRW1wdHkodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAudmFsdWUpKSxuPXttb2RlOmUsLi4udH07bi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPU9iamVjdC52YWx1ZXMobi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPz9bXSk7Y29uc3QgYT10aGlzLmdlbmVyYXRlQXR0cmlidXRlcyhuKTt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsYSkucGlwZShVZSgoZT0+dGhpcy51cGRhdGVDcmVkZW50aWFscyhuLnRoaW5nc2JvYXJkLnNlY3VyaXR5KSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5kaWFsb2dSZWY/dGhpcy5kaWFsb2dSZWYuY2xvc2UoKToodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSl9KSl9b2JzZXJ2ZUFsaWduQ29uZmlncygpe3RoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5CQVNJQ3x8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYWR2YW5jZWRDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImJhc2ljQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5BRFZBTkNFRHx8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWdlbmVyYXRlQXR0cmlidXRlcyhlKXtjb25zdCB0PVtdLG49KGUsbik9Pnt0LnB1c2goe2tleTplLHZhbHVlOm59KX0sYT0oZSx0KT0+e3Q9ey4uLnQsdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LG4oZSx0KX07cmV0dXJuIG4oIlJlbW90ZUxvZ2dpbmdMZXZlbCIsZS5sb2dzPy5yZW1vdGU/LmVuYWJsZWQ/ZS5sb2dzLnJlbW90ZS5sb2dMZXZlbDpNdC5OT05FKSxkZWxldGUgZS5jb25uZWN0b3JzLG4oImxvZ3NfY29uZmlndXJhdGlvbiIsdGhpcy5nZW5lcmF0ZUxvZ3NGaWxlKGUubG9ncykpLGEoImdycGNfY29uZmlndXJhdGlvbiIsZS5ncnBjKSxhKCJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iLGUuc3RvcmFnZSksYSgiZ2VuZXJhbF9jb25maWd1cmF0aW9uIixlLnRoaW5nc2JvYXJkKSxuKCJtb2RlIixlLm1vZGUpLHR9dXBkYXRlQ3JlZGVudGlhbHMoZSl7bGV0IHQ9e307c3dpdGNoKGUudHlwZSl7Y2FzZSBWdC5VU0VSTkFNRV9QQVNTV09SRDp0aGlzLnNob3VsZFVwZGF0ZUNyZWRlbnRpYWxzKGUpJiYodD10aGlzLmdlbmVyYXRlTXF0dENyZWRlbnRpYWxzKGUpKTticmVhaztjYXNlIFZ0LkFDQ0VTU19UT0tFTjpjYXNlIFZ0LlRMU19BQ0NFU1NfVE9LRU46dGhpcy5zaG91bGRVcGRhdGVBY2Nlc3NUb2tlbihlKSYmKHQ9e2NyZWRlbnRpYWxzVHlwZTpVLkFDQ0VTU19UT0tFTixjcmVkZW50aWFsc0lkOmUuYWNjZXNzVG9rZW59KX1yZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoP3RoaXMuZGV2aWNlU2VydmljZS5zYXZlRGV2aWNlQ3JlZGVudGlhbHMoey4uLnRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLC4uLnR9KTpJZShudWxsKX1zaG91bGRVcGRhdGVDcmVkZW50aWFscyhlKXtpZih0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLk1RVFRfQkFTSUMpcmV0dXJuITA7Y29uc3QgdD1KU09OLnBhcnNlKHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLmNyZWRlbnRpYWxzVmFsdWUpO3JldHVybiEodC5jbGllbnRJZD09PWUuY2xpZW50SWQmJnQudXNlck5hbWU9PT1lLnVzZXJuYW1lJiZ0LnBhc3N3b3JkPT09ZS5wYXNzd29yZCl9Z2VuZXJhdGVNcXR0Q3JlZGVudGlhbHMoZSl7Y29uc3R7Y2xpZW50SWQ6dCx1c2VybmFtZTpuLHBhc3N3b3JkOmF9PWUsbz17Li4udCYme2NsaWVudElkOnR9LC4uLm4mJnt1c2VyTmFtZTpufSwuLi5hJiZ7cGFzc3dvcmQ6YX19O3JldHVybntjcmVkZW50aWFsc1R5cGU6VS5NUVRUX0JBU0lDLGNyZWRlbnRpYWxzVmFsdWU6SlNPTi5zdHJpbmdpZnkobyl9fXNob3VsZFVwZGF0ZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLkFDQ0VTU19UT0tFTnx8dGhpcy5pbml0aWFsQ3JlZGVudGlhbHMuY3JlZGVudGlhbHNJZCE9PWUuYWNjZXNzVG9rZW59Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYmJnRoaXMuZGlhbG9nUmVmLmNsb3NlKCl9cmVtb3ZlRW1wdHkoZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKChbZSx0XSk9Pm51bGwhPXQpKS5tYXAoKChbZSx0XSk9PltlLHQ9PT1PYmplY3QodCk/dGhpcy5yZW1vdmVFbXB0eSh0KTp0XSkpKX1nZW5lcmF0ZUxvZ3NGaWxlKGUpe2NvbnN0IHQ9e3ZlcnNpb246MSxkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM6ITEsZm9ybWF0dGVyczp7TG9nRm9ybWF0dGVyOntjbGFzczoibG9nZ2luZy5Gb3JtYXR0ZXIiLGZvcm1hdDplLmxvZ0Zvcm1hdCxkYXRlZm10OmUuZGF0ZUZvcm1hdH19LGhhbmRsZXJzOntjb25zb2xlSGFuZGxlcjp7Y2xhc3M6ImxvZ2dpbmcuU3RyZWFtSGFuZGxlciIsZm9ybWF0dGVyOiJMb2dGb3JtYXR0ZXIiLGxldmVsOjAsc3RyZWFtOiJleHQ6Ly9zeXMuc3Rkb3V0In0sZGF0YWJhc2VIYW5kbGVyOntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6Ii4vbG9ncy9kYXRhYmFzZS5sb2ciLGJhY2t1cENvdW50OjEsZW5jb2Rpbmc6InV0Zi04In19LGxvZ2dlcnM6e2RhdGFiYXNlOntoYW5kbGVyczpbImRhdGFiYXNlSGFuZGxlciIsImNvbnNvbGVIYW5kbGVyIl0sbGV2ZWw6IkRFQlVHIixwcm9wYWdhdGU6ITF9fSxyb290OntsZXZlbDoiRVJST1IiLGhhbmRsZXJzOlsiY29uc29sZUhhbmRsZXIiXX0sdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9O3JldHVybiB0aGlzLmFkZExvY2FsTG9nZ2Vycyh0LGUubG9jYWwpLHR9YWRkTG9jYWxMb2dnZXJzKGUsdCl7Zm9yKGNvbnN0IG4gb2YgT2JqZWN0LmtleXModCkpZS5oYW5kbGVyc1tuKyJIYW5kbGVyIl09dGhpcy5jcmVhdGVIYW5kbGVyT2JqKHRbbl0sbiksZS5sb2dnZXJzW25dPXRoaXMuY3JlYXRlTG9nZ2VyT2JqKHRbbl0sbil9Y3JlYXRlSGFuZGxlck9iaihlLHQpe3JldHVybntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6YCR7ZS5maWxlUGF0aH0vJHt0fS5sb2dgLGJhY2t1cENvdW50OmUuYmFja3VwQ291bnQsaW50ZXJ2YWw6ZS5zYXZpbmdUaW1lLHdoZW46ZS5zYXZpbmdQZXJpb2QsZW5jb2Rpbmc6InV0Zi04In19Y3JlYXRlTG9nZ2VyT2JqKGUsdCl7cmV0dXJue2hhbmRsZXJzOltgJHt0fUhhbmRsZXJgLCJjb25zb2xlSGFuZGxlciJdLGxldmVsOmUubG9nTGV2ZWwscHJvcGFnYXRlOiExfX1mZXRjaENvbmZpZ0F0dHJpYnV0ZShlKXtlLmlkIT09ayYmdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLkNMSUVOVF9TQ09QRSkucGlwZShfZSgodD0+dC5sZW5ndGg/SWUodCk6dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLlNIQVJFRF9TQ09QRSx0aGlzLmdhdGV3YXlDb25maWdBdHRyaWJ1dGVLZXlzKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbmZpZ3MoZSksdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9dXBkYXRlQ29uZmlncyhlKXtjb25zdCB0PXt0aGluZ3Nib2FyZDp7fSxncnBjOnt9LGxvZ3M6e30sc3RvcmFnZTp7fSxtb2RlOm9uLkJBU0lDfTtlLmZvckVhY2goKGU9Pntzd2l0Y2goZS5rZXkpe2Nhc2UiZ2VuZXJhbF9jb25maWd1cmF0aW9uIjp0LnRoaW5nc2JvYXJkPWUudmFsdWUsdGhpcy51cGRhdGVGb3JtQ29udHJvbHMoZS52YWx1ZSk7YnJlYWs7Y2FzZSJncnBjX2NvbmZpZ3VyYXRpb24iOnQuZ3JwYz1lLnZhbHVlO2JyZWFrO2Nhc2UibG9nc19jb25maWd1cmF0aW9uIjp0LmxvZ3M9dGhpcy5sb2dzVG9PYmooZS52YWx1ZSk7YnJlYWs7Y2FzZSJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iOnQuc3RvcmFnZT1lLnZhbHVlO2JyZWFrO2Nhc2UibW9kZSI6dC5tb2RlPWUudmFsdWU7YnJlYWs7Y2FzZSJSZW1vdGVMb2dnaW5nTGV2ZWwiOnQubG9ncz17Li4udC5sb2dzLHJlbW90ZTp7ZW5hYmxlZDplLnZhbHVlIT09TXQuTk9ORSxsb2dMZXZlbDplLnZhbHVlfX19fSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS5zZXRWYWx1ZSh0LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIikuc2V0VmFsdWUodCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUNvbnRyb2xzKGUpe2NvbnN0e3R5cGU6dCxhY2Nlc3NUb2tlbjpuLC4uLmF9PWUuc2VjdXJpdHk/P3t9O3RoaXMuaW5pdGlhbENyZWRlbnRpYWxzPXtkZXZpY2VJZDp0aGlzLmRldmljZSxjcmVkZW50aWFsc1R5cGU6dCxjcmVkZW50aWFsc0lkOm4sY3JlZGVudGlhbHNWYWx1ZTpKU09OLnN0cmluZ2lmeShhKX19bG9nc1RvT2JqKGUpe2NvbnN0e2Zvcm1hdDp0LGRhdGVmbXQ6bn09ZS5mb3JtYXR0ZXJzLkxvZ0Zvcm1hdHRlcjtyZXR1cm57bG9jYWw6T2JqZWN0LmtleXMoUHQpLnJlZHVjZSgoKHQsbik9Pntjb25zdCBhPWUuaGFuZGxlcnNbYCR7bn1IYW5kbGVyYF18fHt9LG89ZS5sb2dnZXJzW25dfHx7fTtyZXR1cm4gdFtuXT17bG9nTGV2ZWw6by5sZXZlbHx8TXQuSU5GTyxmaWxlUGF0aDphLmZpbGVuYW1lPy5zcGxpdChgLyR7bn1gKVswXXx8Ii4vbG9ncyIsYmFja3VwQ291bnQ6YS5iYWNrdXBDb3VudHx8NyxzYXZpbmdUaW1lOmEuaW50ZXJ2YWx8fDMsc2F2aW5nUGVyaW9kOmEud2hlbnx8RHQuZGF5c30sdH0pLHt9KSxsb2dGb3JtYXQ6dCxkYXRlRm9ybWF0Om59fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6R28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6R28sc2VsZWN0b3I6InRiLWdhdGV3YXktY29uZmlndXJhdGlvbiIsaW5wdXRzOntkZXZpY2U6ImRldmljZSIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsaW5wdXRzOlsiZGV2aWNlIiwiZGlhbG9nTW9kZSJdLG91dHB1dHM6WyJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6UG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUNvbmZpZ3VyYXRpb25Db21wb25lbnQiLEdvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkdvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbmZpZ3VyYXRpb24iLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTt2YXIgT289e2dhdGV3YXk6e2FkZHJlc3M6IkFkZHJlc3MiLCJhZGRyZXNzLXJlcXVpcmVkIjoiQWRkcmVzcyByZXF1aXJlZCIsImFkZC1lbnRyeSI6IkFkZCBjb25maWd1cmF0aW9uIiwiYWRkLWF0dHJpYnV0ZSI6IkFkZCBhdHRyaWJ1dGUiLCJhZGQtYXR0cmlidXRlLXVwZGF0ZSI6IkFkZCBhdHRyaWJ1dGUgdXBkYXRlIiwiYWRkLWtleSI6IkFkZCBrZXkiLCJhZGQtdGltZXNlcmllcyI6IkFkZCB0aW1lIHNlcmllcyIsImFkZC1tYXBwaW5nIjoiQWRkIG1hcHBpbmciLCJhZGQtc2xhdmUiOiJBZGQgU2xhdmUiLGFyZ3VtZW50czoiQXJndW1lbnRzIiwiYWRkLXJwYy1tZXRob2QiOiJBZGQgbWV0aG9kIiwiYWRkLXJwYy1yZXF1ZXN0IjoiQWRkIHJlcXVlc3QiLCJhZGQtdmFsdWUiOiJBZGQgYXJndW1lbnQiLGJhdWRyYXRlOiJCYXVkcmF0ZSIsYnl0ZXNpemU6IkJ5dGVzaXplIiwiZGVsZXRlLXZhbHVlIjoiRGVsZXRlIHZhbHVlIiwiZGVsZXRlLXJwYy1tZXRob2QiOiJEZWxldGUgbWV0aG9kIiwiZGVsZXRlLXJwYy1yZXF1ZXN0IjoiRGVsZXRlIHJlcXVlc3QiLCJkZWxldGUtYXR0cmlidXRlLXVwZGF0ZSI6IkRlbGV0ZSBhdHRyaWJ1dGUgdXBkYXRlIixhZHZhbmNlZDoiQWR2YW5jZWQiLCJhZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzIjoiQWR2YW5jZWQgY29ubmVjdGlvbiBzZXR0aW5ncyIsYXR0cmlidXRlczoiQXR0cmlidXRlcyIsImF0dHJpYnV0ZS11cGRhdGVzIjoiQXR0cmlidXRlIHVwZGF0ZXMiLCJhdHRyaWJ1dGUtZmlsdGVyIjoiQXR0cmlidXRlIGZpbHRlciIsImF0dHJpYnV0ZS1maWx0ZXItaGludCI6IkZpbHRlciBmb3IgaW5jb21pbmcgYXR0cmlidXRlIG5hbWUgZnJvbSBwbGF0Zm9ybSwgc3VwcG9ydHMgcmVndWxhciBleHByZXNzaW9uLiIsImF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWQiOiJBdHRyaWJ1dGUgZmlsdGVyIHJlcXVpcmVkLiIsImF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb24iOiJBdHRyaWJ1dGUgbmFtZSBleHByZXNzaW9uIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGV4cHJlc3Npb24gcmVxdWlyZWQuIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1oaW50IjoiSGludCBmb3IgQXR0cmlidXRlIG5hbWUgZXhwcmVzc2lvbiIsYmFzaWM6IkJhc2ljIiwiYnl0ZS1vcmRlciI6IkJ5dGUgb3JkZXIiLCJ3b3JkLW9yZGVyIjoiV29yZCBvcmRlciIsYnJva2VyOntjb25uZWN0aW9uOiJDb25uZWN0aW9uIHRvIGJyb2tlciIsbmFtZToiQnJva2VyIG5hbWUiLCJuYW1lLXJlcXVpcmVkIjoiQnJva2VyIG5hbWUgcmVxdWlyZWQuIiwic2VjdXJpdHktdHlwZXMiOnthbm9ueW1vdXM6IkFub255bW91cyIsYmFzaWM6IkJhc2ljIixjZXJ0aWZpY2F0ZXM6IkNlcnRpZmljYXRlcyJ9fSwiQ0EtY2VydGlmaWNhdGUtcGF0aCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsInBhdGgtdG8tQ0EtY2VydC1yZXF1aXJlZCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjaGFuZ2UtY29ubmVjdG9yLXRpdGxlIjoiQ29uZmlybSBjb25uZWN0b3IgY2hhbmdlIiwiY2hhbmdlLWNvbm5lY3Rvci10ZXh0IjoiU3dpdGNoaW5nIGNvbm5lY3RvcnMgd2lsbCBkaXNjYXJkIGFueSB1bnNhdmVkIGNoYW5nZXMuIENvbnRpbnVlPyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IkNoZWNraW5nIGRldmljZSBhY3Rpdml0eSIsY29tbWFuZDoiRG9ja2VyIGNvbW1hbmRzIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlciBjb21tYW5kIGhhcyBiZWVuIGNvcGllZCB0byBjbGlwYm9hcmQiLGNvbmZpZ3VyYXRpb246IkNvbmZpZ3VyYXRpb24iLCJhZGQtY29ubmVjdG9yIjoiQWRkIGNvbm5lY3RvciIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKHMpIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJDb25uZWN0IGF0dGVtcHQgdGltZSAobXMpIiwiY29ubmVjdC1hdHRlbXB0LWNvdW50IjoiQ29ubmVjdCBhdHRlbXB0IGNvdW50IiwiY29weS11c2VybmFtZSI6IkNvcHkgdXNlcm5hbWUiLCJjb3B5LXBhc3N3b3JkIjoiQ29weSBwYXNzd29yZCIsImNvcHktY2xpZW50LWlkIjoiQ29weSBjbGllbnQgSUQiLCJjb25uZWN0b3ItY3JlYXRlZCI6IkNvbm5lY3RvciBjcmVhdGVkIiwiY29ubmVjdG9yLXVwZGF0ZWQiOiJDb25uZWN0b3IgdXBkYXRlZCIsInJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGUiOiJTYXZlIFRlbXBsYXRlIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXNwb25zZSIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiVXNlIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gdG8gcnVuIElvVCBHYXRld2F5IGluIERvY2tlciBjb21wb3NlIHdpdGggY3JlZGVudGlhbHMgZm9yIHNlbGVjdGVkIGRldmljZSIsImluc3RhbGwtZG9ja2VyLWNvbXBvc2UiOiJVc2UgdGhlIGluc3RydWN0aW9ucyB0byBkb3dubG9hZCwgaW5zdGFsbCBhbmQgc2V0dXAgZG9ja2VyIGNvbXBvc2UiLCJkZXZpY2UtaW5mby1zZXR0aW5ncyI6IkRldmljZSBpbmZvIHNldHRpbmdzIiwiZGV2aWNlLWluZm8iOnsiZW50aXR5LWZpZWxkIjoiRW50aXR5IGZpZWxkIixzb3VyY2U6IlNvdXJjZSIsZXhwcmVzc2lvbjoiVmFsdWUgLyBFeHByZXNzaW9uIiwiZXhwcmVzc2lvbi1oaW50IjoiU2hvdyBoZWxwIixuYW1lOiJOYW1lIiwicHJvZmlsZS1uYW1lIjoiUHJvZmlsZSBuYW1lIiwiZGV2aWNlLW5hbWUtZXhwcmVzc2lvbiI6IkRldmljZSBuYW1lIGV4cHJlc3Npb24iLCJkZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJkZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIHByb2ZpbGUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4ifSwiZGV2aWNlLW5hbWUtZmlsdGVyIjoiRGV2aWNlIG5hbWUgZmlsdGVyIiwiZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZmlsdGVyIGluY29taW5nIGRhdGEgYnkgZGV2aWNlIG5hbWUuIiwiZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZmlsdGVyIGlzIHJlcXVpcmVkLiIsZGV0YWlsczoiRGV0YWlscyIsImRlbGV0ZS1tYXBwaW5nLXRpdGxlIjoiRGVsZXRlIG1hcHBpbmc/IiwiZGVsZXRlLXNsYXZlLXRpdGxlIjoiRGVsZXRlIHNsYXZlPyIsZGl2aWRlcjoiRGl2aWRlciIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6IkRvd25sb2FkIGNvbmZpZ3VyYXRpb24gZmlsZSIsImRvd25sb2FkLWRvY2tlci1jb21wb3NlIjoiRG93bmxvYWQgZG9ja2VyLWNvbXBvc2UueW1sIGZvciB5b3VyIGdhdGV3YXkiLCJlbmFibGUtcmVtb3RlLWxvZ2dpbmciOiJFbmFibGUgcmVtb3RlIGxvZ2dpbmciLCJlbGxpcHNpcy1jaGlwcy10ZXh0IjoiKyB7e2NvdW50fX0gbW9yZSIsImxhdW5jaC1nYXRld2F5IjoiTGF1bmNoIGdhdGV3YXkiLCJsYXVuY2gtY29tbWFuZCI6IkxhdW5jaCBjb21tYW5kIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoiU3RhcnQgdGhlIGdhdGV3YXkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSB0ZXJtaW5hbCBmcm9tIGZvbGRlciB3aXRoIGRvY2tlci1jb21wb3NlLnltbCBmaWxlIiwibG9ncy1jb25maWd1cmF0aW9uIjoiTG9ncyBjb25maWd1cmF0aW9uIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXRlIGEgbmV3IGdhdGV3YXkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgZ2F0ZXdheSB3aXRoIG5hbWU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkNyZWF0ZWQgdGltZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXIiOiJDb25maWd1cmF0aW9ucyB3aWxsIGJlIGRlbGV0ZWQiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6IlR1cm5pbmcgb2ZmIFJlbW90ZSBDb25maWd1cmF0aW9uIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgaXMgcGh5c2ljYWwgYWNjZXNzIHRvIHRoZSBHYXRld2F5LiBBbGwgcHJldmlvdXMgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkLjxicj48YnI+IFxuVG8gdHVybiBvZmYgY29uZmlndXJhdGlvbiwgZW50ZXIgZ2F0ZXdheSBuYW1lIGJlbG93IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0IjoiR2F0ZXdheSBuYW1lIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIG1hbmRhdG9yeSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtIjoiVHVybiBPZmYiLCJjb25uZWN0b3ItZHVwbGljYXRlLW5hbWUiOiJDb25uZWN0b3Igd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMuIiwiY29ubmVjdG9yLXNpZGUiOiJDb25uZWN0b3Igc2lkZSIsInBheWxvYWQtdHlwZSI6IlBheWxvYWQgdHlwZSIsInBsYXRmb3JtLXNpZGUiOiJQbGF0Zm9ybSBzaWRlIixKU09OOiJKU09OIiwiSlNPTi1oaW50IjoiQ29udmVydGVyIGZvciB0aGlzIHBheWxvYWQgdHlwZSBwcm9jZXNzZXMgTVFUVCBtZXNzYWdlcyBpbiBKU09OIGZvcm1hdC4gSXQgdXNlcyBKU09OIFBhdGggZXhwcmVzc2lvbnMgdG8gZXh0cmFjdCB2aXRhbCBkZXRhaWxzIHN1Y2ggYXMgZGV2aWNlIG5hbWVzLCBkZXZpY2UgcHJvZmlsZSBuYW1lcywgYXR0cmlidXRlcywgYW5kIHRpbWUgc2VyaWVzIGZyb20gdGhlIG1lc3NhZ2UuIEFuZCByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGdldCBkZXZpY2UgZGV0YWlscyBmcm9tIHRvcGljcy4iLGJ5dGVzOiJCeXRlcyIsImJ5dGVzLWhpbnQiOiJDb252ZXJ0ZXIgZm9yIHRoaXMgcGF5bG9hZCB0eXBlIGRlc2lnbmVkIGZvciBiaW5hcnkgTVFUVCBwYXlsb2FkcywgdGhpcyBjb252ZXJ0ZXIgZGlyZWN0bHkgaW50ZXJwcmV0cyBiaW5hcnkgZGF0YSB0byByZXRyaWV2ZSBkZXZpY2UgbmFtZXMgYW5kIGRldmljZSBwcm9maWxlIG5hbWVzLCBhbG9uZyB3aXRoIGF0dHJpYnV0ZXMgYW5kIHRpbWUgc2VyaWVzLCB1c2luZyBzcGVjaWZpYyBieXRlIHBvc2l0aW9ucyBmb3IgZGF0YSBleHRyYWN0aW9uLiIsY3VzdG9tOiJDdXN0b20iLCJjdXN0b20taGludCI6IlRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gdXNlIGEgY3VzdG9tIGNvbnZlcnRlciBmb3Igc3BlY2lmaWMgZGF0YSB0YXNrcy4gWW91IG5lZWQgdG8gYWRkIHlvdXIgY3VzdG9tIGNvbnZlcnRlciB0byB0aGUgZXh0ZW5zaW9uIGZvbGRlciBhbmQgZW50ZXIgaXRzIGNsYXNzIG5hbWUgaW4gdGhlIFVJIHNldHRpbmdzLiBBbnkga2V5cyB5b3UgcHJvdmlkZSB3aWxsIGJlIHNlbnQgYXMgY29uZmlndXJhdGlvbiB0byB5b3VyIGN1c3RvbSBjb252ZXJ0ZXIuIiwiY2xpZW50LWNlcnQtcGF0aCI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIGZpbGUiLCJwYXRoLXRvLWNsaWVudC1jZXJ0LXJlcXVpcmVkIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjbGllbnQtaWQiOiJDbGllbnQgSUQiLCJkYXRhLWNvbnZlcnNpb24iOiJEYXRhIGNvbnZlcnNpb24iLCJkYXRhLW1hcHBpbmciOiJEYXRhIG1hcHBpbmciLCJkYXRhLW1hcHBpbmctaGludCI6IkRhdGEgbWFwcGluZyBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSB0byBwYXJzZSBhbmQgY29udmVydCB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIGEgTVFUVCBjbGllbnQgaW4gaW5jb21pbmcgbWVzc2FnZXMgaW50byBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBkYXRhIGtleXMuIiwib3BjdWEtZGF0YS1tYXBwaW5nLWhpbnQiOiJEYXRhIG1hcHBpbmcgcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgdG8gcGFyc2UgYW5kIGNvbnZlcnQgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBhIE9QQ1VBIHNlcnZlciBpbnRvIHNwZWNpZmljIGRhdGEga2V5cy4iLGRlbGV0ZToiRGVsZXRlIGNvbmZpZ3VyYXRpb24iLCJkZWxldGUtYXR0cmlidXRlIjoiRGVsZXRlIGF0dHJpYnV0ZSIsImRlbGV0ZS1rZXkiOiJEZWxldGUga2V5IiwiZGVsZXRlLXRpbWVzZXJpZXMiOiJEZWxldGUgdGltZSBzZXJpZXMiLGRlZmF1bHQ6IkRlZmF1bHQiLCJkZXZpY2Utbm9kZSI6IkRldmljZSBub2RlIiwiZGV2aWNlLW5vZGUtcmVxdWlyZWQiOiJEZXZpY2Ugbm9kZSByZXF1aXJlZC4iLCJkZXZpY2Utbm9kZS1oaW50IjoiUGF0aCBvciBpZGVudGlmaWVyIGZvciBkZXZpY2Ugbm9kZSBvbiBPUEMgVUEgc2VydmVyLiBSZWxhdGl2ZSBwYXRocyBmcm9tIGl0IGZvciBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBjYW4gYmUgdXNlZC4iLCJkZXZpY2UtbmFtZSI6IkRldmljZSBuYW1lIiwiZGV2aWNlLXByb2ZpbGUtbGFiZWwiOiJEZXZpY2UgcHJvZmlsZSIsImRldmljZS1uYW1lLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgcmVxdWlyZWQiLCJkZXZpY2UtcHJvZmlsZS1yZXF1aXJlZCI6IkRldmljZSBwcm9maWxlIHJlcXVpcmVkIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGVuYWJsZToiRW5hYmxlIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IkVuYWJsZSBzdWJzY3JpcHRpb24iLGV4dGVuc2lvbjoiRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uLWhpbnQiOiJQdXQgeW91ciBjb252ZXJ0ZXIgY2xhc3NuYW1lIGluIHRoZSBmaWVsZC4gQ3VzdG9tIGNvbnZlcnRlciB3aXRoIHN1Y2ggY2xhc3Mgc2hvdWxkIGJlIGluIGV4dGVuc2lvbi9tcXR0IGZvbGRlci4iLCJleHRlbnNpb24tcmVxdWlyZWQiOiJFeHRlbnNpb24gaXMgcmVxdWlyZWQuIiwiZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24iOiJFeHRlbnNpb24gY29uZmlndXJhdGlvbiIsImV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnQiOiJDb25maWd1cmF0aW9uIGZvciBjb252ZXJ0b3IiLCJmaWxsLWNvbm5lY3Rvci1kZWZhdWx0cyI6IkZpbGwgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHQgdmFsdWVzIiwiZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludCI6IlRoaXMgcHJvcGVydHkgYWxsb3dzIHRvIGZpbGwgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0IHZhbHVlcyBvbiBpdCdzIGNyZWF0aW9uLiIsImZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MiOiJJbnB1dCByZXF1ZXN0IHBhcnNpbmciLCJmcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnQiOiJUaGVzZSBmaWVsZHMgc3VwcG9ydCBKU09OUGF0aCBleHByZXNzaW9ucyB0byBleHRyYWN0IGEgbmFtZSBmcm9tIGluY29taW5nIG1lc3NhZ2UuIiwiZnVuY3Rpb24tY29kZSI6IkZ1bmN0aW9uIGNvZGUiLCJmdW5jdGlvbi1jb2RlcyI6eyJyZWFkLWNvaWxzIjoiMDEgLSBSZWFkIENvaWxzIiwicmVhZC1kaXNjcmV0ZS1pbnB1dHMiOiIwMiAtIFJlYWQgRGlzY3JldGUgSW5wdXRzIiwicmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyI6IjAzIC0gUmVhZCBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyIsInJlYWQtaW5wdXQtcmVnaXN0ZXJzIjoiMDQgLSBSZWFkIElucHV0IFJlZ2lzdGVycyIsIndyaXRlLXNpbmdsZS1jb2lsIjoiMDUgLSBXcml0ZSBTaW5nbGUgQ29pbCIsIndyaXRlLXNpbmdsZS1ob2xkaW5nLXJlZ2lzdGVyIjoiMDYgLSBXcml0ZSBTaW5nbGUgSG9sZGluZyBSZWdpc3RlciIsIndyaXRlLW11bHRpcGxlLWNvaWxzIjoiMTUgLSBXcml0ZSBNdWx0aXBsZSBDb2lscyIsIndyaXRlLW11bHRpcGxlLWhvbGRpbmctcmVnaXN0ZXJzIjoiMTYgLSBXcml0ZSBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyJ9LCJ0by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MiOiJPdXRwdXQgcmVxdWVzdCBwcm9jZXNzaW5nIiwidG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzLWhpbnQiOiJGb3IgdGhlc2UgZmllbGRzIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFuZCB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhY3R1YWwgdmFsdWVzOiAke2RldmljZU5hbWV9LCAke2F0dHJpYnV0ZUtleX0sICR7YXR0cmlidXRlVmFsdWV9IixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImdlbmVyYXRlLWNsaWVudC1pZCI6IkdlbmVyYXRlIENsaWVudCBJRCIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsaW5mbzoiSW5mbyIsaWRlbnRpdHk6IklkZW50aXR5IiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJ1bml0LWlkIjoiVW5pdCBJRCIsaG9zdDoiSG9zdCIsImhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsaG9sZGluZ19yZWdpc3RlcnM6IkhvbGRpbmcgcmVnaXN0ZXJzIixjb2lsc19pbml0aWFsaXplcjoiQ29pbHMgaW5pdGlhbGl6ZXIiLGlucHV0X3JlZ2lzdGVyczoiSW5wdXQgcmVnaXN0ZXJzIixkaXNjcmV0ZV9pbnB1dHM6IkRpc2NyZXRlIGlucHV0cyIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIkpTT05QYXRoLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIGNvbnN0YW50cyBhbmQgSlNPTlBhdGggZXhwcmVzc2lvbnMuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWF4LW51bWJlci1vZi13b3JrZXJzIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIiwibWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnQiOiJNYXhpbWFsIG51bWJlciBvZiB3b3JrZXJzIHRocmVhZHMgZm9yIGNvbnZlcnRlcnMgXG4oVGhlIGFtb3VudCBvZiB3b3JrZXJzIGNoYW5nZXMgZHluYW1pY2FsbHksIGRlcGVuZGluZyBvbiBsb2FkKSBcblJlY29tbWVuZGVkIGFtb3VudCA1MC0xNTAuIiwibWF4LW51bWJlci1vZi13b3JrZXJzLXJlcXVpcmVkIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIGlzIHJlcXVpcmVkLiIsIm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyIjoiTWF4IG1lc3NhZ2VzIHF1ZXVlIHBlciB3b3JrZXIiLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1oaW50IjoiTWF4aW1hbCBtZXNzYWdlcyBjb3VudCB0aGF0IHdpbGwgYmUgaW4gdGhlIHF1ZXVlIFxuZm9yIGVhY2ggY29udmVydGVyIHdvcmtlci4iLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZCI6Ik1heCBtZXNzYWdlcyBxdWV1ZSBwZXIgd29ya2VyIGlzIHJlcXVpcmVkLiIsbWV0aG9kOiJNZXRob2QiLCJtZXRob2QtbmFtZSI6Ik1ldGhvZCBuYW1lIiwibWV0aG9kLXJlcXVpcmVkIjoiTWV0aG9kIG5hbWUgaXMgcmVxdWlyZWQuIiwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwIiwibWluLXBhY2stc2VuZC1kZWxheS1wYXR0ZXJuIjoiTWluIHBhY2sgc2VuZCBkZWxheSBpcyBub3QgdmFsaWQiLG11bHRpcGxpZXI6Ik11bHRpcGxpZXIiLG1vZGU6Ik1vZGUiLCJtb2RlbC1uYW1lIjoiTW9kZWwgbmFtZSIsbW9kaWZpZXI6Ik1vZGlmaWVyIiwibW9kaWZpZXItaW52YWxpZCI6Ik1vZGlmaWVyIGlzIG5vdCB2YWxpZCIsIm1xdHQtdmVyc2lvbiI6Ik1RVFQgdmVyc2lvbiIsbmFtZToiTmFtZSIsIm5hbWUtcmVxdWlyZWQiOiJOYW1lIGlzIHJlcXVpcmVkLiIsIm5vLWF0dHJpYnV0ZXMiOiJObyBhdHRyaWJ1dGVzIiwibm8tYXR0cmlidXRlLXVwZGF0ZXMiOiJObyBhdHRyaWJ1dGUgdXBkYXRlcyIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJuby10aW1lc2VyaWVzIjoiTm8gdGltZSBzZXJpZXMiLCJuby1rZXlzIjoiTm8ga2V5cyIsIm5vLXZhbHVlIjoiTm8gYXJndW1lbnRzIiwibm8tcnBjLW1ldGhvZHMiOiJObyBSUEMgbWV0aG9kcyIsIm5vLXJwYy1yZXF1ZXN0cyI6Ik5vIFJQQyByZXF1ZXN0cyIsInBhdGgtaGludCI6IlRoZSBwYXRoIGlzIGxvY2FsIHRvIHRoZSBnYXRld2F5IGZpbGUgc3lzdGVtIiwicGF0aC1sb2dzIjoiUGF0aCB0byBsb2cgZmlsZXMiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYXRoIGlzIHJlcXVpcmVkLiIscGFzc3dvcmQ6IlBhc3N3b3JkIiwicGFzc3dvcmQtcmVxdWlyZWQiOiJQYXNzd29yZCBpcyByZXF1aXJlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IktlZXAgYWxpdmUgcGVybWl0IHdpdGhvdXQgY2FsbHMiLCJwb2xsLXBlcmlvZCI6IlBvbGwgcGVyaW9kIChtcykiLCJwb2xsLXBlcmlvZC1lcnJvciI6IlBvbGwgcGVyaW9kIHNob3VsZCBiZSBhdCBsZWFzdCB7e21pbn19IChtcykuIixwb3J0OiJQb3J0IiwicG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIiwicG9ydC1saW1pdHMtZXJyb3IiOiJQb3J0IHNob3VsZCBiZSBudW1iZXIgZnJvbSB7e21pbn19IHRvIHt7bWF4fX0uIiwicHJpdmF0ZS1rZXktcGF0aCI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgZmlsZSIsInBhdGgtdG8tcHJpdmF0ZS1rZXktcmVxdWlyZWQiOiJQYXRoIHRvIHByaXZhdGUga2V5IGZpbGUgaXMgcmVxdWlyZWQuIixwYXJpdHk6IlBhcml0eSIsInByb2R1Y3QtY29kZSI6IlByb2R1Y3QgY29kZSIsInByb2R1Y3QtbmFtZSI6IlByb2R1Y3QgbmFtZSIscmF3OiJSYXciLHJldGFpbjoiUmV0YWluIiwicmV0YWluLWhpbnQiOiJUaGlzIGZsYWcgdGVsbHMgdGhlIGJyb2tlciB0byBzdG9yZSB0aGUgbWVzc2FnZSBmb3IgYSB0b3BpY1xuYW5kIGVuc3VyZXMgYW55IG5ldyBjbGllbnQgc3Vic2NyaWJpbmcgdG8gdGhhdCB0b3BpY1xud2lsbCByZWNlaXZlIHRoZSBzdG9yZWQgbWVzc2FnZS4iLHJlbW90ZToiUmVtb3RlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IkxvZ2dpbmcgbGV2ZWwiLCJyZW1vdmUtZW50cnkiOiJSZW1vdmUgY29uZmlndXJhdGlvbiIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLHJldHJpZXM6IlJldHJpZXMiLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cmllcyBvbiBlbXB0eSIsInJldHJpZXMtb24taW52YWxpZCI6IlJldHJpZXMgb24gaW52YWxpZCIscnBjOnt0aXRsZToie3t0eXBlfX0gQ29ubmVjdG9yIFJQQyBwYXJhbWV0ZXJzIiwidGVtcGxhdGVzLXRpdGxlIjoiQ29ubmVjdG9yIFJQQyBUZW1wbGF0ZXMiLG1ldGhvZEZpbHRlcjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1uYW1lIjoiTWV0aG9kIG5hbWUiLHJlcXVlc3RUb3BpY0V4cHJlc3Npb246IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiIscmVzcG9uc2VUb3BpY0V4cHJlc3Npb246IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLHJlc3BvbnNlVGltZW91dDoiUmVzcG9uc2UgdGltZW91dCIsdmFsdWVFeHByZXNzaW9uOiJWYWx1ZSBleHByZXNzaW9uIix0YWc6IlRhZyIsdHlwZToiVHlwZSIsZnVuY3Rpb25Db2RlOiJGdW5jdGlvbiBDb2RlIixvYmplY3RzQ291bnQ6Ik9iamVjdHMgQ291bnQiLGFkZHJlc3M6IkFkZHJlc3MiLG1ldGhvZDoiTWV0aG9kIixyZXF1ZXN0VHlwZToiUmVxdWVzdCBUeXBlIixyZXF1ZXN0VGltZW91dDoiUmVxdWVzdCBUaW1lb3V0IixvYmplY3RUeXBlOiJPYmplY3QgdHlwZSIsaWRlbnRpZmllcjoiSWRlbnRpZmllciIscHJvcGVydHlJZDoiUHJvcGVydHkgSUQiLG1ldGhvZFJQQzoiTWV0aG9kIFJQQyBuYW1lIix3aXRoUmVzcG9uc2U6IldpdGggUmVzcG9uc2UiLGNoYXJhY3RlcmlzdGljVVVJRDoiQ2hhcmFjdGVyaXN0aWMgVVVJRCIsbWV0aG9kUHJvY2Vzc2luZzoiTWV0aG9kIFByb2Nlc3NpbmciLG5vZGVJRDoiTm9kZSBJRCIsaXNFeHRlbmRlZElEOiJJcyBFeHRlbmRlZCBJRCIsaXNGRDoiSXMgRkQiLGJpdHJhdGVTd2l0Y2g6IkJpdHJhdGUgU3dpdGNoIixkYXRhSW5IRVg6IkRhdGEgSW4gSEVYIixkYXRhTGVuZ3RoOiJEYXRhIExlbmd0aCIsZGF0YUJ5dGVvcmRlcjoiRGF0YSBCeXRlIE9yZGVyIixkYXRhQmVmb3JlOiJEYXRhIEJlZm9yZSIsZGF0YUFmdGVyOiJEYXRhIEFmdGVyIixkYXRhRXhwcmVzc2lvbjoiRGF0YSBFeHByZXNzaW9uIixlbmNvZGluZzoiRW5jb2RpbmciLG9pZDoiT0lEIiwiYWRkLW9pZCI6IkFkZCBPSUQiLCJhZGQtaGVhZGVyIjoiQWRkIGhlYWRlciIsImFkZC1zZWN1cml0eSI6IkFkZCBzZWN1cml0eSIscmVtb3ZlOiJSZW1vdmUiLHJlcXVlc3RGaWx0ZXI6IlJlcXVlc3QgRmlsdGVyIixyZXF1ZXN0VXJsRXhwcmVzc2lvbjoiUmVxdWVzdCBVUkwgRXhwcmVzc2lvbiIsaHR0cE1ldGhvZDoiSFRUUCBNZXRob2QiLHRpbWVvdXQ6IlRpbWVvdXQiLHRyaWVzOiJUcmllcyIsaHR0cEhlYWRlcnM6IkhUVFAgSGVhZGVycyIsImhlYWRlci1uYW1lIjoiSGVhZGVyIG5hbWUiLGhpbnQ6eyJtb2RidXMtcmVzcG9uc2UtcmVhZGluZyI6IlJQQyByZXNwb25zZSB3aWxsIHJldHVybiBhbGwgc3VidHJhY3RlZCB2YWx1ZXMgZnJvbSBhbGwgY29ubmVjdGVkIGRldmljZXMgd2hlbiB0aGUgcmVhZGluZyBmdW5jdGlvbnMgYXJlIHNlbGVjdGVkLiIsIm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9ucyI6IlJQQyB3aWxsIHdyaXRlIGEgZmlsbGVkIHZhbHVlIHRvIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyB3aGVuIHRoZSB3cml0aW5nIGZ1bmN0aW9ucyBhcmUgc2VsZWN0ZWQuIiwib3BjLW1ldGhvZCI6IkEgZmlsbGVkIG1ldGhvZCBuYW1lIGlzIHRoZSBPUEMtVUEgbWV0aG9kIHRoYXQgd2lsbCBwcm9jZXNzZWQgb24gdGhlIHNlcnZlciBzaWRlIChtYWtlIHN1cmUgeW91ciBub2RlIGhhcyB0aGUgcmVxdWVzdGVkIG1ldGhvZCkuIn0sInNlY3VyaXR5LW5hbWUiOiJTZWN1cml0eSBuYW1lIix2YWx1ZToiVmFsdWUiLHNlY3VyaXR5OiJTZWN1cml0eSIscmVzcG9uc2VWYWx1ZUV4cHJlc3Npb246IlJlc3BvbnNlIFZhbHVlIEV4cHJlc3Npb24iLHJlcXVlc3RWYWx1ZUV4cHJlc3Npb246IlJlcXVlc3QgVmFsdWUgRXhwcmVzc2lvbiIsYXJndW1lbnRzOiJBcmd1bWVudHMiLCJhZGQtYXJndW1lbnQiOiJBZGQgYXJndW1lbnQiLCJ3cml0ZS1wcm9wZXJ0eSI6IldyaXRlIHByb3BlcnR5IiwicmVhZC1wcm9wZXJ0eSI6IlJlYWQgcHJvcGVydHkiLCJhbmFsb2ctb3V0cHV0IjoiQW5hbG9nIG91dHB1dCIsImFuYWxvZy1pbnB1dCI6IkFuYWxvZyBpbnB1dCIsImJpbmFyeS1vdXRwdXQiOiJCaW5hcnkgb3V0cHV0IiwiYmluYXJ5LWlucHV0IjoiQmluYXJ5IGlucHV0IiwiYmluYXJ5LXZhbHVlIjoiQmluYXJ5IHZhbHVlIiwiYW5hbG9nLXZhbHVlIjoiQW5hbG9nIHZhbHVlIix3cml0ZToiV3JpdGUiLHJlYWQ6IlJlYWQiLHNjYW46IlNjYW4iLG9pZHM6Ik9JRFMiLHNldDoiU2V0IixtdWx0aXNldDoiTXVsdGlzZXQiLGdldDoiR2V0IiwiYnVsay13YWxrIjoiQnVsayB3YWxrIix0YWJsZToiVGFibGUiLCJtdWx0aS1nZXQiOiJNdWx0aWdldCIsImdldC1uZXh0IjoiR2V0IG5leHQiLCJidWxrLWdldCI6IkJ1bGsgZ2V0Iix3YWxrOiJXYWxrIiwic2F2ZS10ZW1wbGF0ZSI6IlNhdmUgdGVtcGxhdGUiLCJ0ZW1wbGF0ZS1uYW1lIjoiVGVtcGxhdGUgbmFtZSIsInRlbXBsYXRlLW5hbWUtcmVxdWlyZWQiOiJUZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLiIsInRlbXBsYXRlLW5hbWUtZHVwbGljYXRlIjoiVGVtcGxhdGUgd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgdXBkYXRlZC4iLGNvbW1hbmQ6IkNvbW1hbmQiLHBhcmFtczoiUGFyYW1zIiwianNvbi12YWx1ZS1pbnZhbGlkIjoiSlNPTiB2YWx1ZSBoYXMgYW4gaW52YWxpZCBmb3JtYXQifSwicnBjLW1ldGhvZHMiOiJSUEMgbWV0aG9kcyIsInJwYy1yZXF1ZXN0cyI6IlJQQyByZXF1ZXN0cyIscmVxdWVzdDp7ImNvbm5lY3QtcmVxdWVzdCI6IkNvbm5lY3QgcmVxdWVzdCIsImRpc2Nvbm5lY3QtcmVxdWVzdCI6IkRpc2Nvbm5lY3QgcmVxdWVzdCIsImF0dHJpYnV0ZS1yZXF1ZXN0IjoiQXR0cmlidXRlIHJlcXVlc3QiLCJhdHRyaWJ1dGUtdXBkYXRlIjoiQXR0cmlidXRlIHVwZGF0ZSIsInJwYy1jb25uZWN0aW9uIjoiUlBDIGNvbW1hbmQifSwicmVxdWVzdC10eXBlIjoiUmVxdWVzdCB0eXBlIiwicmVxdWVzdHMtbWFwcGluZyI6IlJlcXVlc3RzIG1hcHBpbmciLCJyZXF1ZXN0cy1tYXBwaW5nLWhpbnQiOiJNUVRUIENvbm5lY3RvciByZXF1ZXN0cyBhbGxvd3MgeW91IHRvIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHByb2Nlc3MgYXR0cmlidXRlIHJlcXVlc3RzIGZyb20gdGhlIGRldmljZSwgaGFuZGxlIGF0dHJpYnV0ZSB1cGRhdGVzIG9uIHRoZSBzZXJ2ZXIgYW5kIFJQQyBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24uIiwicmVxdWVzdC10b3BpYy1leHByZXNzaW9uIjoiUmVxdWVzdCB0b3BpYyBleHByZXNzaW9uIiwicmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGUiOiJSZXF1ZXN0IGNsaWVudCBjZXJ0aWZpY2F0ZSIsInJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS10aW1lb3V0IjoiUmVzcG9uc2UgdGltZW91dCAobXMpIiwicmVzcG9uc2UtdGltZW91dC1yZXF1aXJlZCI6IlJlc3BvbnNlIHRpbWVvdXQgaXMgcmVxdWlyZWQuIiwicmVzcG9uc2UtdGltZW91dC1saW1pdHMtZXJyb3IiOiJUaW1lb3V0IG11c3QgYmUgbW9yZSB0aGVuIHt7bWlufX0gbXMuIiwicmVzcG9uc2UtdG9waWMtUW9zIjoiUmVzcG9uc2UgdG9waWMgUW9TIiwicmVzcG9uc2UtdG9waWMtUW9zLWhpbnQiOiJNUVRUIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBpcyBhbiBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgbWVzc2FnZSBzZW5kZXIgYW5kIHJlY2VpdmVyIHRoYXQgZGVmaW5lcyB0aGUgbGV2ZWwgb2YgZGVsaXZlcnkgZ3VhcmFudGVlIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UuIiwicmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbiI6IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLCJyZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkIjoiUmVzcG9uc2UgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS12YWx1ZS1leHByZXNzaW9uIjoiUmVzcG9uc2UgdmFsdWUgZXhwcmVzc2lvbiIsInJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWQiOiJSZXNwb25zZSB2YWx1ZSBleHByZXNzaW9uIGlzIHJlcXVpcmVkLiIsInZlbmRvci1uYW1lIjoiVmVuZG9yIG5hbWUiLCJ2ZW5kb3ItdXJsIjoiVmVuZG9yIFVSTCIsdmFsdWU6IlZhbHVlIix2YWx1ZXM6IlZhbHVlcyIsInZhbHVlLXJlcXVpcmVkIjoiVmFsdWUgaXMgcmVxdWlyZWQuIiwidmFsdWUtZXhwcmVzc2lvbiI6IlZhbHVlIGV4cHJlc3Npb24iLCJ2YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiVmFsdWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJ3aXRoLXJlc3BvbnNlIjoiV2l0aCByZXNwb25zZSIsIndpdGhvdXQtcmVzcG9uc2UiOiJXaXRob3V0IHJlc3BvbnNlIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2Nhbi1wZXJpb2QiOiJTY2FuIHBlcmlvZCAobXMpIiwic2Nhbi1wZXJpb2QtZXJyb3IiOiJTY2FuIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJTdWJzY3JpcHRpb24gY2hlY2sgcGVyaW9kIChtcykiLCJzdWItY2hlY2stcGVyaW9kLWVycm9yIjoiU3Vic2NyaXB0aW9uIGNoZWNrIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInNlY3VyaXR5LWxhYmVsIjoiU2VjdXJpdHkiLCJzZWN1cml0eS1wb2xpY3kiOiJTZWN1cml0eSBwb2xpY3kiLCJzZWN1cml0eS10eXBlIjoiU2VjdXJpdHkgdHlwZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkFjY2VzcyBUb2tlbiIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXNlcm5hbWUgYW5kIFBhc3N3b3JkIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBBY2Nlc3MgVG9rZW4iLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyBQcml2YXRlIEtleSJ9LCJzZWxlY3QtY29ubmVjdG9yIjoiU2VsZWN0IGNvbm5lY3RvciB0byBkaXNwbGF5IGNvbmZpZyIsInNlbmQtY2hhbmdlLWRhdGEiOiJTZW5kIGRhdGEgb25seSBvbiBjaGFuZ2UiLCJzZW5kLWRhdGEtdG8tcGxhdGZvcm0iOiJTZW5kIGRhdGEgdG8gcGxhdGZvcm0iLCJzZW5kLWRhdGEtb24tY2hhbmdlIjoiU2VuZCBkYXRhIG9ubHkgb24gY2hhbmdlIiwic2VuZC1jaGFuZ2UtZGF0YS1oaW50IjoiVGhlIHZhbHVlcyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBkYXRhYmFzZSBvbmx5IGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgcHJldmlvdXMgY29udmVydGVkIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb25hbGl0eSBhcHBsaWVzIHRvIGJvdGggYXR0cmlidXRlcyBhbmQgdGltZSBzZXJpZXMgaW4gdGhlIGNvbnZlcnRlciBvdXRwdXQuIixzZXJ2ZXI6IlNlcnZlciIsInNlcnZlci1ob3N0bmFtZSI6IlNlcnZlciBob3N0bmFtZSIsInNlcnZlci1zbGF2ZSI6IlNlcnZlciAoU2xhdmUpIiwic2VydmVycy1zbGF2ZXMiOiJTZXJ2ZXJzIChTbGF2ZXMpIiwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsInNlcnZlci11cmwiOiJTZXJ2ZXIgZW5kcG9pbnQgdXJsIiwic2VydmVyLWNvbm5lY3Rpb24iOiJTZXJ2ZXIgQ29ubmVjdGlvbiIsInNlcnZlci1jb25maWciOiJTZXJ2ZXIgY29uZmlndXJhdGlvbiIsInNlcnZlci1zbGF2ZS1jb25maWciOiJTZXJ2ZXIgKFNsYXZlKSBjb25maWd1cmF0aW9uIiwic2VydmVyLXVybC1yZXF1aXJlZCI6IlNlcnZlciBlbmRwb2ludCB1cmwgaXMgcmVxdWlyZWQuIixzdG9wYml0czoiU3RvcGJpdHMiLHN0cmljdDoiU3RyaWN0IixzZXQ6IlNldCIsInNob3ctbWFwIjoiU2hvdyBtYXAiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiU3RhdGlzdGljIixzdGF0aXN0aWNzOiJTdGF0aXN0aWNzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjonTm8gY29uZmlndXJlZCBzdGF0aXN0aWMga2V5cyBmb3VuZC4gWW91IGNhbiBjb25maWd1cmUgdGhlbSBpbiAiU3RhdGlzdGljcyIgdGFiIGluIGdlbmVyYWwgY29uZmlndXJhdGlvbi4nLCJzdGF0aXN0aWNzLWJ1dHRvbiI6IkdvIHRvIGNvbmZpZ3VyYXRpb24iLGNvbW1hbmRzOiJDb21tYW5kcyIsInNlbmQtcGVyaW9kIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIChpbiBzZWMpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgcmVxdWlyZWQiLCJzZW5kLXBlcmlvZC1taW4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gNjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiAoaW4gc2VjKSIsIm1heC1wYXlsb2FkLXNpemUtYnl0ZXMiOiJNYXggcGF5bG9hZCBzaXplIGluIGJ5dGVzIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1yZXF1aXJlZCI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgaXMgcmVxdWlyZWQiLCJtYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pbiI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMTAwIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuIjoiTWF4IHBheWxvYWQgc2l6ZSBpbiBieXRlcyBpcyBub3QgdmFsaWQiLCJtaW4tcGFjay1zaXplLXRvLXNlbmQiOiJNaW4gcGFja2V0IHNpemUgdG8gc2VuZCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZCI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2l6ZS10by1zZW5kLW1pbiI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwMCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuIjoiTWluIHBhY2tldCBzaXplIHRvIHNlbmQgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IChpbiBzZWMpIiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLCJjb21tYW5kLXBhdHRlcm4iOiJDb21tYW5kIGlzIG5vdCB2YWxpZCIscmVtb3ZlOiJSZW1vdmUgY29tbWFuZCJ9LHN0b3JhZ2U6IlN0b3JhZ2UiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gZmlsZSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWF4aW11bSBudW1iZXIgb2YgZmlsZXMiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtYmVyIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1heGltdW0gcmVjb3JkcyBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiUmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50IjoiTWF4IHJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJNYXggUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiRGF0YSBmb2xkZXIgcGF0aCIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZCI6IkRhdGEgZm9sZGVyIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhdGgiOiJTdG9yYWdlIHBhdGgiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJTdG9yYWdlIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS10eXBlIjoiU3RvcmFnZSB0eXBlIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJGaWxlIHN0b3JhZ2UiLCJtZW1vcnktc3RvcmFnZSI6Ik1lbW9yeSBzdG9yYWdlIixzcWxpdGU6IlNRTElURSJ9LCJyZXBvcnQtc3RyYXRlZ3kiOntsYWJlbDoiUmVwb3J0IHN0cmF0ZWd5Iiwib24tY2hhbmdlIjoiT24gdmFsdWUgY2hhbmdlIiwib24tcmVwb3J0LXBlcmlvZCI6Ik9uIHJlcG9ydCBwZXJpb2QiLCJvbi1jaGFuZ2Utb3ItcmVwb3J0LXBlcmlvZCI6Ik9uIHZhbHVlIGNoYW5nZSBvciByZXBvcnQgcGVyaW9kIiwicmVwb3J0LXBlcmlvZCI6IlJlcG9ydCBwZXJpb2QifSwic291cmNlLXR5cGUiOnttc2c6IkV4dHJhY3QgZnJvbSBtZXNzYWdlIix0b3BpYzoiRXh0cmFjdCBmcm9tIHRvcGljIixjb25zdDoiQ29uc3RhbnQiLGlkZW50aWZpZXI6IklkZW50aWZpZXIiLHBhdGg6IlBhdGgifSwid29ya2Vycy1zZXR0aW5ncyI6IldvcmtlcnMgc2V0dGluZ3MiLHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsZ2VuZXJhbDoiR2VuZXJhbCIsdGltZXNlcmllczoiVGltZSBzZXJpZXMiLGtleToiS2V5IixrZXlzOiJLZXlzIiwia2V5LXJlcXVpcmVkIjoiS2V5IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLWhvc3QiOiJQbGF0Zm9ybSBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBsYXRmb3JtIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIix0aW1lb3V0OiJUaW1lb3V0IChtcykiLCJ0aW1lb3V0LWVycm9yIjoiVGltZW91dCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsdHlwZToiVHlwZSIsInRvcGljLWZpbHRlciI6IlRvcGljIGZpbHRlciIsInRvcGljLXJlcXVpcmVkIjoiVG9waWMgZmlsdGVyIGlzIHJlcXVpcmVkLiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1jb25uZWN0aW9uIjoiVExTIENvbm5lY3Rpb24iLCJtYXN0ZXItY29ubmVjdGlvbnMiOiJNYXN0ZXIgQ29ubmVjdGlvbnMiLCJtZXRob2QtZmlsdGVyIjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1maWx0ZXItaGludCI6IlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgaW5jb21pbmcgUlBDIG1ldGhvZCBmcm9tIHBsYXRmb3JtLiIsIm1ldGhvZC1maWx0ZXItcmVxdWlyZWQiOiJNZXRob2QgZmlsdGVyIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIscW9zOnsiYXQtbW9zdC1vbmNlIjoiMCAtIEF0IG1vc3Qgb25jZSIsImF0LWxlYXN0LW9uY2UiOiIxIC0gQXQgbGVhc3Qgb25jZSIsImV4YWN0bHktb25jZSI6IjIgLSBFeGFjdGx5IG9uY2UifSwib2JqZWN0cy1jb3VudCI6Ik9iamVjdHMgY291bnQiLCJvYmplY3RzLWNvdW50LXJlcXVpcmVkIjoiT2JqZWN0cyBjb3VudCBpcyByZXF1aXJlZCIsIndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzIjoiV2FpdCBhZnRlciBmYWlsZWQgYXR0ZW1wdHMgKG1zKSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsdXNlcm5hbWU6IlVzZXJuYW1lIiwidXNlcm5hbWUtcmVxdWlyZWQiOiJVc2VybmFtZSBpcyByZXF1aXJlZC4iLCJ1bml0LWlkLXJlcXVpcmVkIjoiVW5pdCBJRCBpcyByZXF1aXJlZC4iLCJ3cml0ZS1jb2lsIjoiV3JpdGUgQ29pbCIsIndyaXRlLWNvaWxzIjoiV3JpdGUgQ29pbHMiLCJ3cml0ZS1yZWdpc3RlciI6IldyaXRlIFJlZ2lzdGVyIiwid3JpdGUtcmVnaXN0ZXJzIjoiV3JpdGUgUmVnaXN0ZXJzIixoaW50czp7Im1vZGJ1cy1tYXN0ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb25zIGZvciBjb25uZWN0aW5nIHRvIE1vZGJ1cyBzZXJ2ZXJzIGFuZCByZWFkaW5nIGRhdGEgZnJvbSB0aGVtLiIsIm1vZGJ1cy1zZXJ2ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yIHRoZSBNb2RidXMgc2VydmVyLCBzdG9yaW5nIGRhdGEgYW5kIHNlbmRpbmcgdXBkYXRlcyB0byB0aGUgcGxhdGZvcm0gd2hlbiBjaGFuZ2VzIG9jY3VyIG9yIGF0IGZpeGVkIGludGVydmFscy4iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBwbGF0Zm9ybSBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIHBsYXRmb3JtIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBwbGF0Zm9ybSBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBwbGF0Zm9ybSBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIHBsYXRmb3JtIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gcGxhdGZvcm0gc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIHRoZSBmb2xkZXIgdGhhdCB3aWxsIGNvbnRhaW4gZGF0YSAoUmVsYXRpdmUgb3IgQWJzb2x1dGUpIiwibG9nLWZvcm1hdCI6IkxvZyBtZXNzYWdlIGZvcm1hdCIsInJlbW90ZS1sb2ciOiJFbmFibGVzIHJlbW90ZSBsb2dnaW5nIGFuZCBsb2dzIHJlYWRpbmcgZnJvbSB0aGUgZ2F0ZXdheSIsImJhY2t1cC1jb3VudCI6IklmIGJhY2t1cCBjb3VudCBpcyA+IDAsIHdoZW4gYSByb2xsb3ZlciBpcyBkb25lLCBubyBtb3JlIHRoYW4gYmFja3VwIGNvdW50IGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkIixzdG9yYWdlOiJQcm92aWRlcyBjb25maWd1cmF0aW9uIGZvciBzYXZpbmcgaW5jb21pbmcgZGF0YSBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgcGxhdGZvcm0iLCJtYXgtZmlsZS1jb3VudCI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJOdW1iZXIgb2YgbWVzc2FnZXMgdG8gcmV0cmlldmUgZnJvbSB0aGUgc3RvcmFnZSBhbmQgc2VuZCB0byBwbGF0Zm9ybSIsIm1heC1yZWNvcmRzIjoiTWF4aW11bSBjb3VudCBvZiByZWNvcmRzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gb25lIGZpbGUiLCJyZWFkLXJlY29yZC1jb3VudCI6Ik51bWJlciBvZiBtZXNzYWdlcyB0byByZXRyaWV2ZSBmcm9tIHRoZSBzdG9yYWdlIGFuZCBzZW5kIHRvIHBsYXRmb3JtIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIG51bWJlciBvZiBkYXRhIGVudHJpZXMgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZGluZyB0byBwbGF0Zm9ybSIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgdGhlIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gbnVtYmVyIG9mIGRheXMgdGhhdCB0aGUgc3RvcmFnZSB3aWxsIHJldGFpbiBkYXRhIixjb21tYW5kczoiQ29tbWFuZHMgZm9yIGNvbGxlY3RpbmcgYWRkaXRpb25hbCBzdGF0aXN0aWMiLGF0dHJpYnV0ZToiU3RhdGlzdGljIHRlbGVtZXRyeSBrZXkiLHRpbWVvdXQ6IlRpbWVvdXQgZm9yIGNvbW1hbmQgZXhlY3V0aW5nIixjb21tYW5kOiJUaGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kIGV4ZWN1dGlvbiwgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGVsZW1ldHJ5IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiRW5hYmxlcyBtb25pdG9yIHRoZSBhY3Rpdml0eSBvZiBlYWNoIGNvbm5lY3RlZCBkZXZpY2UiLCJpbmFjdGl2aXR5LXRpbWVvdXQiOiJUaW1lIGFmdGVyIHdob3NlIHRoZSBnYXRld2F5IHdpbGwgZGlzY29ubmVjdCBkZXZpY2UiLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZGljaXR5IG9mIGRldmljZSBhY3Rpdml0eSBjaGVjayIsIm1pbmltYWwtcGFjay1kZWxheSI6IkRlbGF5IGJldHdlZW4gc2VuZGluZyBwYWNrcyBvZiBtZXNzYWdlcyAoRGVjcmVhc2luZyB0aGlzIHNldHRpbmcgcmVzdWx0cyBpbiBpbmNyZWFzZWQgQ1BVIHVzYWdlKSIscW9zOiJRdWFsaXR5IG9mIFNlcnZpY2UgaW4gTVFUVCBtZXNzYWdpbmcgKDAgLSBhdCBtb3N0IG9uY2UsIDEgLSBhdCBsZWFzdCBvbmNlKSIsInNlcnZlci1wb3J0IjoiTmV0d29yayBwb3J0IG9uIHdoaWNoIEdSUEMgc2VydmVyIHdpbGwgbGlzdGVuIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Ik1heGltdW0gdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGZvciBhIGtlZXBhbGl2ZSBwaW5nIHJlc3BvbnNlIGJlZm9yZSBjb25zaWRlcmluZyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMta2VlcC1hbGl2ZSI6IkR1cmF0aW9uIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgUlBDIGNhbGwuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6Ik1heGltdW0gbnVtYmVyIG9mIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHRoYXQgdGhlIHNlcnZlciBjYW4gc2VuZCB3aXRob3V0IHJlY2VpdmluZyBhbnkgZGF0YSBiZWZvcmUgaXQgY29uc2lkZXJzIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gZGF0YSBiZWluZyBzZW50IG9yIHJlY2VpdmVkLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiQWxsb3cgc2VydmVyIHRvIGtlZXAgdGhlIEdSUEMgY29ubmVjdGlvbiBhbGl2ZSBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSBSUEMgY2FsbHMuIiwicGF0aC1pbi1vcyI6IlBhdGggaW4gZ2F0ZXdheSBvcy4iLG1lbW9yeToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBpbi1tZW1vcnkgcXVldWUsIGl0IGlzIGEgZmFzdGVzdCBidXQgbm8gcGVyc2lzdGVuY2UgZ3VhcmFudGVlLiIsZmlsZToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHNlcGFyYXRlZCBmaWxlcyBhbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIixzcWxpdGU6IllvdXIgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBmaWxlIGJhc2VkIGRhdGFiYXNlLiBBbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIiwib3BjLXRpbWVvdXQiOiJUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgY29ubmVjdGluZyB0byBPUEMtVUEgc2VydmVyLiIsInNlY3VyaXR5LXBvbGljeSI6IlNlY3VyaXR5IFBvbGljeSBkZWZpbmVzIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHRvIGJlIGFwcGxpZWQuIiwic2Nhbi1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlc2NhbiB0aGUgc2VydmVyLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJQZXJpb2QgdG8gY2hlY2sgdGhlIHN1YnNjcmlwdGlvbnMgaW4gdGhlIE9QQy1VQSBzZXJ2ZXIuIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IklmIHRydWUgLSB0aGUgZ2F0ZXdheSB3aWxsIHN1YnNjcmliZSB0byBpbnRlcmVzdGluZyBub2RlcyBhbmQgd2FpdCBmb3IgZGF0YSB1cGRhdGUgYW5kIGlmIGZhbHNlIC0gdGhlIGdhdGV3YXkgd2lsbCByZXNjYW4gT1BDLVVBIHNlcnZlciBldmVyeSBzY2FuUGVyaW9kSW5NaWxsaXMuIiwic2hvdy1tYXAiOiJTaG93IG5vZGVzIG9uIHNjYW5uaW5nLiIsIm1ldGhvZC1uYW1lIjoiTmFtZSBvZiBtZXRob2Qgb24gT1BDLVVBIHNlcnZlci4iLGFyZ3VtZW50czoiQXJndW1lbnRzIGZvciB0aGUgbWV0aG9kICh3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGFyZ3VtZW50cyBmcm9tIHRoZSBSUEMgcmVxdWVzdCkuIiwibWluLXBhY2stc2l6ZS10by1zZW5kIjoiTWluaW11bSBwYWNrYWdlIHNpemUgZm9yIHNlbmRpbmcuIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcyI6Ik1heGltdW0gcGFja2FnZSBzaXplIGluIGJ5dGVzIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlYWQgZGF0YSBmcm9tIG5vZGVzLiIsbW9kYnVzOnsiZnJhbWVyLXR5cGUiOiJUeXBlIG9mIGEgZnJhbWVyIChTb2NrZXQsIFJUVSwgb3IgQVNDSUkpLCBpZiBuZWVkZWQuIixob3N0OiJIb3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIE1vZGJ1cyBzZXJ2ZXIuIixwb3J0OiJNb2RidXMgc2VydmVyIHBvcnQgZm9yIGNvbm5lY3Rpb24uIiwidW5pdC1pZCI6Ik1vZGJ1cyBzbGF2ZSBJRC4iLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKGluIHNlY29uZHMpIGZvciB0aGUgTW9kYnVzIHNlcnZlci4iLCJieXRlLW9yZGVyIjoiQnl0ZSBvcmRlciBmb3IgcmVhZGluZyBkYXRhLiIsIndvcmQtb3JkZXIiOiJXb3JkIG9yZGVyIHdoZW4gcmVhZGluZyBtdWx0aXBsZSByZWdpc3RlcnMuIixyZXRyaWVzOiJSZXRyeWluZyBkYXRhIHRyYW5zbWlzc2lvbiB0byB0aGUgbWFzdGVyLiBBY2NlcHRhYmxlIHZhbHVlczogdHJ1ZSBvciBmYWxzZS4iLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgdGhlIGRhdGEgaXMgZW1wdHkuIiwicmV0cmllcy1vbi1pbnZhbGlkIjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgaXQgZmFpbHMuIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIGNoZWNrIGF0dHJpYnV0ZXMgYW5kIHRlbGVtZXRyeSBvbiB0aGUgc2xhdmUuIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgbWFzdGVyLiIsImNvbm5lY3QtYXR0ZW1wdC1jb3VudCI6IlRoZSBudW1iZXIgb2YgY29ubmVjdGlvbiBhdHRlbXB0cyBtYWRlIHRocm91Z2ggdGhlIGdhdGV3YXkuIiwid2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHMiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIGRhdGEgdG8gdGhlIG1hc3Rlci4iLCJzZXJpYWwtcG9ydCI6IlNlcmlhbCBwb3J0IGZvciBjb25uZWN0aW9uLiIsYmF1ZHJhdGU6IkJhdWQgcmF0ZSBmb3IgdGhlIHNlcmlhbCBkZXZpY2UuIixzdG9wYml0czoiVGhlIG51bWJlciBvZiBzdG9wIGJpdHMgc2VudCBhZnRlciBlYWNoIGNoYXJhY3RlciBpbiBhIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgYnl0ZS4iLGJ5dGVzaXplOiJUaGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBieXRlIG9mIHNlcmlhbCBkYXRhLiBUaGlzIGNhbiBiZSBvbmUgb2YgNSwgNiwgNywgb3IgOC4iLHBhcml0eToiVGhlIHR5cGUgb2YgY2hlY2tzdW0gdXNlZCB0byB2ZXJpZnkgZGF0YSBpbnRlZ3JpdHkuIE9wdGlvbnM6IChFKXZlbiwgKE8pZGQsIChOKW9uZS4iLHN0cmljdDoiVXNlIGludGVyLWNoYXJhY3RlciB0aW1lb3V0IGZvciBiYXVkcmF0ZXMg4omkIDE5MjAwLiIsIm9iamVjdHMtY291bnQiOiJEZXBlbmRzIG9uIHRoZSBzZWxlY3RlZCB0eXBlLiIsYWRkcmVzczoiUmVnaXN0ZXIgYWRkcmVzcyB0byB2ZXJpZnkuIixrZXk6IktleSB0byBiZSB1c2VkIGFzIHRoZSBhdHRyaWJ1dGUga2V5IGZvciB0aGUgcGxhdGZvcm0gaW5zdGFuY2UuIiwiZGF0YS1rZXlzIjoiRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZnVuY3Rpb24gY29kZXMgYW5kIGRhdGEgdHlwZXMgY2xpY2sgb24gaGVscCBpY29uIixtb2RpZmllcjoiVGhlIHJldHJpZXZlZCB2YWx1ZSB3aWxsIGJlIGFkanVzdGVkIChieSBtdWx0aXBseWluZyBvciBkaXZpZGluZyBpdCkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtb2RpZmllciB2YWx1ZS4ifX19fSxSbz17ImFkZC1lbnRyeSI6Itil2LbYp9mB2Kkg2KrZg9mI2YrZhiIsYWR2YW5jZWQ6ItmF2KrZgtiv2YUiLCJjaGVja2luZy1kZXZpY2UtYWN0aXZpdHkiOiLZgdit2LUg2YbYtNin2Lcg2KfZhNis2YfYp9iyIixjb21tYW5kOiLYo9mI2KfZhdixIERvY2tlciIsImNvbW1hbmQtY29waWVkLW1lc3NhZ2UiOiLYqtmFINmG2LPYriDYo9mF2LEgRG9ja2VyINil2YTZiSDYp9mE2K3Yp9mB2LjYqSIsY29uZmlndXJhdGlvbjoi2KfZhNiq2YPZiNmK2YYiLCJjb25uZWN0b3ItYWRkIjoi2KXYttin2YHYqSDZhdmI2LXZhCDYrNiv2YrYryIsImNvbm5lY3Rvci1lbmFibGVkIjoi2KrZhdmD2YrZhiDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZSI6Itin2LPZhSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLCJjb25uZWN0b3ItdHlwZSI6ItmG2YjYuSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6ItmG2YjYuSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLGNvbm5lY3RvcnM6Itin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLWNvbmZpZyI6Itiq2YPZiNmK2YbYp9iqINin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLXRhYmxlLWVuYWJsZWQiOiLZhdmF2YPZkdmGIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi2KfZhNin2LPZhSIsImNvbm5lY3RvcnMtdGFibGUtdHlwZSI6Itin2YTZhtmI2LkiLCJjb25uZWN0b3JzLXRhYmxlLXN0YXR1cyI6Itin2YTYrdin2YTYqSIsImNvbm5lY3RvcnMtdGFibGUtYWN0aW9ucyI6Itin2YTYpdis2LHYp9ih2KfYqiIsImNvbm5lY3RvcnMtdGFibGUta2V5Ijoi2KfZhNmF2YHYqtin2K0iLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoi2KfZhNmB2KbYqSIsInJwYy1jb21tYW5kLXNlbmQiOiLYpdix2LPYp9mEIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi2KfZhNin2LPYqtis2KfYqNipIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLYqtit2LHZitixINin2YTZhdi52YTZhdin2KoiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLYqtmD2YjZitmGINi52KfZhSIsImRvY2tlci1sYWJlbCI6Itin2LPYqtiu2K/ZhSDYp9mE2KrYudmE2YrZhdin2Kog2KfZhNiq2KfZhNmK2Kkg2YTYqti02LrZitmEIElvVCBHYXRld2F5INmB2YogRG9ja2VyIGNvbXBvc2Ug2YXYuSDYqNmK2KfZhtin2Kog2KfYudiq2YXYp9ivINmE2YTYrNmH2KfYsiDYp9mE2YXYrdiv2K8iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi2KfYs9iq2K7Yr9mFINin2YTYqti52YTZitmF2KfYqiDZhNiq2YbYstmK2YQg2YjYqtir2KjZitiqINmI2KXYudiv2KfYryBkb2NrZXIgY29tcG9zZSIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLYqtmG2LLZitmEIGRvY2tlci1jb21wb3NlLnltbCDZhNio2YjYp9io2KrZgyIsImxhdW5jaC1nYXRld2F5Ijoi2KrYtNi62YrZhCDYp9mE2KjZiNin2KjYqSIsImxhdW5jaC1kb2NrZXItY29tcG9zZSI6Itio2K/YoSDYqti02LrZitmEINin2YTYqNmI2KfYqNipINio2KfYs9iq2K7Yr9in2YUg2KfZhNij2YXYsSDYp9mE2KrYp9mE2Yog2YHZiiDYp9mE2LfYsdmB2YrYqSDZhdmGINin2YTZhdis2YTYryDYp9mE2LDZiiDZitit2KrZiNmKINi52YTZiSDZhdmE2YEgZG9ja2VyLWNvbXBvc2UueW1sIiwiY3JlYXRlLW5ldy1nYXRld2F5Ijoi2KXZhti02KfYoSDYqNmI2KfYqNipINis2K/Zitiv2KkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6ItmH2YQg2KPZhtiqINmF2KrYo9mD2K8g2KPZhtmDINiq2LHZitivINil2YbYtNin2KEg2KjZiNin2KjYqSDYrNiv2YrYr9ipINio2KfYs9mFOiAne3tnYXRld2F5TmFtZX19J9ifIiwiY3JlYXRlZC10aW1lIjoi2YjZgtiqINin2YTYpdmG2LTYp9ihIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6Itiz2YrYqtmFINit2LDZgSDYp9mE2KrZg9mI2YrZhtin2KoiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6ItmK2YXZg9mGINiq2LnYt9mK2YQg2KfZhNiq2YPZiNmK2YYg2LnZhiDYqNmP2LnYryDZgdmC2Lcg2KXYsNinINmD2KfZhiDZh9mG2KfZgyDZiNi12YjZhCDYrNiz2K/ZiiDYpdmE2Ykg2KfZhNio2YjYp9io2KkuINiz2KrYqtmFINit2LDZgSDYrNmF2YrYuSDYp9mE2KrZg9mI2YrZhtin2Kog2KfZhNiz2KfYqNmC2KkuPGJyPjxicj4gXG4g2YTYqti52LfZitmEINin2YTYqtmD2YjZitmG2Iwg2KPYr9iu2YQg2KfYs9mFINin2YTYqNmI2KfYqNipINij2K/Zhtin2YciLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQiOiLYp9iz2YUg2KfZhNio2YjYp9io2KkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNio2YjYp9io2Kkg2KXZhNiy2KfZhdmKIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLYpdmK2YLYp9mBINin2YTYqti02LrZitmEIixkZWxldGU6Itit2LDZgSDYp9mE2KrZg9mI2YrZhiIsImRvd25sb2FkLXRpcCI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZHJvcC1maWxlIjoi2KPZgdmE2YIg2KfZhNmF2YTZgSDZh9mG2Kcg2KPZiCIsZ2F0ZXdheToi2KfZhNio2YjYp9io2KkiLCJnYXRld2F5LWV4aXN0cyI6Itin2YTYrNmH2KfYsiDYqNmG2YHYsyDYp9mE2KfYs9mFINmF2YjYrNmI2K8g2KjYp9mE2YHYudmELiIsImdhdGV3YXktbmFtZSI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSDZhdi32YTZiNioLiIsImdhdGV3YXktc2F2ZWQiOiLYqtmFINit2YHYuCDYqtmD2YjZitmGINin2YTYqNmI2KfYqNipINio2YbYrNin2K0uIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqNipIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi2YXZh9mE2Kkg2KfZhNio2YLYp9ihINi52YTZiSDZgtmK2K8g2KfZhNit2YrYp9ipINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6ItmF2YfZhNipINin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K3YqSIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqCIsImdycGMta2VlcC1hbGl2ZS1taW4iOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINij2YLZhCDZhdmGIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDZhdi32YTZiNioIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmE2YjZgtiqINio2YrZhiDYp9mE2KjZitmG2LrYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2KogKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNio2YrZhti62KfYqiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQgKNio2KfZhNir2YjYp9mG2YopIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQg2YXYt9mE2YjYqNipIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiLZgdiq2LHYqSDZgdit2LUg2KfZhNiu2YXZiNmEINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoi2YHYqtix2Kkg2YHYrdi1INin2YTYrtmF2YjZhCDYutmK2LEg2LXYp9mE2K3YqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEICjYqNin2YTYq9mI2KfZhtmKKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEINmF2LfZhNmI2KjYqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6ItmB2KrYsdipINin2YTYrtmF2YjZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiLZgdiq2LHYqSDYp9mE2K7ZhdmI2YQg2LrZitixINi12KfZhNit2KkiLCJqc29uLXBhcnNlIjoiSlNPTiDYutmK2LEg2LXYp9mE2K0uIiwianNvbi1yZXF1aXJlZCI6Itin2YTYrdmC2YQg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINmB2KfYsdi62YvYpy4iLGxvZ3M6e2xvZ3M6Itin2YTYs9is2YTYp9iqIixkYXlzOiLYo9mK2KfZhSIsaG91cnM6Itiz2KfYudin2KoiLG1pbnV0ZXM6Itiv2YLYp9im2YIiLHNlY29uZHM6Itir2YjYp9mG2YoiLCJkYXRlLWZvcm1hdCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4g2YXYt9mE2YjYqCIsImxvZy1mb3JtYXQiOiLYqtmG2LPZitmCINin2YTYs9is2YQiLCJsb2ctdHlwZSI6ItmG2YjYuSDYp9mE2LPYrNmEIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiz2KzZhCDZhdi32YTZiNioIixyZW1vdGU6Itin2YTYqtiz2KzZitmEINi52YYg2KjZj9i52K8iLCJyZW1vdGUtbG9ncyI6Itin2YTYs9is2YTYp9iqINi52YYg2KjZj9i52K8iLGxvY2FsOiLYp9mE2KrYs9is2YrZhCDYp9mE2YXYrdmE2YoiLGxldmVsOiLZhdiz2KrZiNmJINin2YTYs9is2YQiLCJmaWxlLXBhdGgiOiLZhdiz2KfYsSDYp9mE2YXZhNmBIiwiZmlsZS1wYXRoLXJlcXVpcmVkIjoi2YXYs9in2LEg2KfZhNmF2YTZgSDZhdi32YTZiNioIiwic2F2aW5nLXBlcmlvZCI6ItmB2KrYsdipINit2YHYuCDYp9mE2LPYrNmEIiwic2F2aW5nLXBlcmlvZC1taW4iOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhdi32YTZiNio2KkiLCJiYWNrdXAtY291bnQiOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSIsImJhY2t1cC1jb3VudC1taW4iOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDZhNinINmK2YXZg9mGINij2YYg2YrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6Iti52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipINmF2LfZhNmI2KgifSwibWluLXBhY2stc2VuZC1kZWxheSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2YXYt9mE2YjYqCIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoi2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2KPZgtmEINmF2YYgMCIsIm5vLWNvbm5lY3RvcnMiOiLZhNinINiq2YjYrNivINmF2YjYtdmE2KfYqiIsIm5vLWRhdGEiOiLZhNinINiq2YjYrNivINiq2YPZiNmK2YbYp9iqIiwibm8tZ2F0ZXdheS1mb3VuZCI6ItmE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KjZiNin2KjYqS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiJ3t7aXRlbX19JyDYutmK2LEg2YXZiNis2YjYry4iLCJwYXRoLWxvZ3MiOiLZhdiz2KfYsSDYpdmE2Ykg2YXZhNmB2KfYqiDYp9mE2LPYrNmEIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi2KfZhNmF2LPYp9ixINmF2LfZhNmI2KguIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2KjZgtin2KEg2LnZhNmJINin2YTYrdmK2KfYqSDZitiz2YXYrSDYqNiv2YjZhiDZhdmD2KfZhNmF2KfYqiIscmVtb3RlOiLYp9mE2KrZg9mI2YrZhiDYudmGINio2Y/YudivIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiLZhdiz2KrZiNmJINin2YTYqtiz2KzZitmEIiwicmVtb3ZlLWVudHJ5Ijoi2KXYstin2YTYqSDYp9mE2KrZg9mI2YrZhiIsInJlbW90ZS1zaGVsbCI6ItmC2LTYsdipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Itin2YTYqtmD2YjZitmGINi52YYg2KjZj9i52K8iLG90aGVyOiLYotiu2LEiLCJzYXZlLXRpcCI6Itit2YHYuCDZhdmE2YEg2KfZhNiq2YPZiNmK2YYiLCJzZWN1cml0eS10eXBlIjoi2YbZiNi5INin2YTYo9mF2KfZhiIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Itix2YXYsiDYp9mE2YjYtdmI2YQiLCJ1c2VybmFtZS1wYXNzd29yZCI6Itin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINmI2YPZhNmF2Kkg2KfZhNmF2LHZiNixIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDYsdmF2LIg2KfZhNmI2LXZiNmEIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsg2KfZhNmF2YHYqtin2K0g2KfZhNiu2KfYtSJ9LCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYrtin2K/ZhSIsc3RhdGlzdGljczp7c3RhdGlzdGljOiLYpdit2LXYp9im2YrYqSIsc3RhdGlzdGljczoi2KfZhNil2K3Ytdin2KbZitin2KoiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLZhNinINiq2KrZiNmB2LEg2KXYrdi12KfYptmK2KfYqiIsY29tbWFuZHM6Itin2YTYo9mI2KfZhdixIiwic2VuZC1wZXJpb2QiOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqICjYqNin2YTYq9mI2KfZhtmKKSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDZhdi32YTZiNio2KkiLCJzZW5kLXBlcmlvZC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDYo9mC2YQg2YXZhiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqINi62YrYsSDYtdin2YTYrdipIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiAo2KjYp9mE2KvZiNin2YbZiikiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINmF2LfZhNmI2KjYqSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiDYo9mC2YQg2YXZhiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINi62YrYsSDYtdin2YTYrdipIixhZGQ6Itil2LbYp9mB2Kkg2KPZhdixIix0aW1lb3V0OiLYp9mE2YXZh9mE2KkiLCJ0aW1lb3V0LW1zIjoi2KfZhNmF2YfZhNipICjYqNin2YTZhdmE2YTZiiDYq9in2YbZitipKSIsInRpbWVvdXQtcmVxdWlyZWQiOiLYp9mE2YXZh9mE2Kkg2YXYt9mE2YjYqNipIiwidGltZW91dC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KfZhNmF2YfZhNipINij2YLZhCDZhdmGIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiLYp9mE2YXZh9mE2Kkg2LrZitixINi12KfZhNit2KkiLCJhdHRyaWJ1dGUtbmFtZSI6Itin2LPZhSDYp9mE2LPZhdipIiwiYXR0cmlidXRlLW5hbWUtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNiz2YXYqSDZhdi32YTZiNioIixjb21tYW5kOiLYp9mE2KPZhdixIiwiY29tbWFuZC1yZXF1aXJlZCI6Itin2YTYo9mF2LEg2YXYt9mE2YjYqCIsImNvbW1hbmQtcGF0dGVybiI6Itin2YTYo9mF2LEg2LrZitixINi12KfZhNitIixyZW1vdmU6Itil2LLYp9mE2Kkg2KfZhNij2YXYsSJ9LHN0b3JhZ2U6Itin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi2KfZhNiz2KzZhNin2Kog2KfZhNmC2LXZiNmJINmB2Yog2KfZhNmF2YTZgSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTZhdmE2YHYp9iqIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmH2YggMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi2KfZhNi52K/YryDYutmK2LEg2LXYp9mE2K0uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLYp9mE2LnYr9ivINmF2LfZhNmI2KguIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Itin2YTYs9is2YTYp9iqINin2YTZgti12YjZiSDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLYp9mE2LPYrNmE2KfYqiDYp9mE2YLYtdmI2Ykg2YXYt9mE2YjYqNipLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZhdi32YTZiNioLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50Ijoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINmC2LHYp9ih2Kkg2KfZhNiz2KzZhNin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNi52K/YryDYp9mE2LPYrNmE2KfYqiDZh9mIIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi2LnYr9ivINin2YTZgtix2KfYodipINin2YTZgti12YjZiSDZhdi32YTZiNioLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6ItmF2LPYp9ixINmF2KzZhNivINin2YTYqNmK2KfZhtin2KoiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDZhdis2YTYryDYp9mE2KjZitin2YbYp9iqINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYWNrLXNpemUiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYrdis2YUg2K3YstmF2Kkg2KfZhNit2K/YqyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZh9mIIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi2KfZhNit2KzZhSDYp9mE2KPZgti12Ykg2YTYrdiy2YXYqSDYp9mE2K3Yr9irINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYXRoIjoi2YXYs9in2LEg2KfZhNiq2K7YstmK2YYiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDYp9mE2KrYrtiy2YrZhiDZhdi32YTZiNioLiIsInN0b3JhZ2UtdHlwZSI6ItmG2YjYuSDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2YXZhNmB2KfYqiIsIm1lbW9yeS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2LDYp9mD2LHYqSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoi2KvZitmG2LrYstio2YjYsdivIixnZW5lcmFsOiLYudin2YUiLCJ0aGluZ3Nib2FyZC1ob3N0Ijoi2YXYttmK2YEg2KvZitmG2LrYstio2YjYsdivIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Itin2YTZhdi22YrZgSDZhdi32YTZiNioLiIsInRoaW5nc2JvYXJkLXBvcnQiOiLZhdmG2YHYsCDYq9mK2YbYutiy2KjZiNix2K8iLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6Itin2YTZhdmG2YHYsCDYutmK2LEg2LXYp9mE2K0uIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Itin2YTZhdmG2YHYsCDZhdi32YTZiNioLiIsdGlkeToi2KrYsdiq2YrYqCIsInRpZHktdGlwIjoi2KrYsdiq2YrYqCDYqtmD2YjZitmGIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiLYqtmD2YjZitmGINmF2YjYtdmEIHt7dHlwZU5hbWV9fSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoi2KfZhNmF2LPYp9ixINil2YTZiSDYtNmH2KfYr9ipIENBINi52YTZiSDYp9mE2KjZiNin2KjYqSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2LTZh9in2K/YqSDYp9mE2LnZhdmK2YQg2LnZhNmJINin2YTYqNmI2KfYqNipIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi2YrYrNioINiq2K3Yr9mK2K8g2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoi2KfZhNix2YLZhSDYutmK2LEg2LXYp9mE2K0uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwg2KfZhNix2LPYp9im2YQg2KjYp9mE2KPZitin2YUiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6ItmK2KzYqCDYqtit2K/ZitivIFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYo9mK2KfZhS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXBhdHRlcm4iOiLYp9mE2LHZgtmFINi62YrYsSDYtdin2YTYrS4iLCJtcXR0LXFvcyI6Itis2YjYr9ipINin2YTYrtiv2YXYqSAoUW9TKSIsIm1xdHQtcW9zLXJlcXVpcmVkIjoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipIChRb1MpINmF2LfZhNmI2KjYqSIsIm1xdHQtcW9zLXJhbmdlIjoi2KrYqtix2KfZiNitINmC2YrZhSDYrNmI2K/YqSDYp9mE2K7Yr9mF2KkgKFFvUykg2YXZhiAwINil2YTZiSAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdmB2KrYp9itINin2YTYrtin2LUg2LnZhNmJINin2YTYqNmI2KfYqNipIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLYqtio2K/ZitmEINmI2LbYuSDZhdmE2KEg2KfZhNi02KfYtNipIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiLYqtmD2YjZitmGIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6Itil2LbYp9mB2Kkv2KrYrdiv2YrYqyDYqtmD2YjZitmGIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2YPZiNmK2YYg2YjYpdiv2KfYsdipINin2YTYqNmI2KfYqNipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtc2hlbGwiOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2K3Zg9mFINin2YTYqNi52YrYryDZgdmKINmG2LjYp9mFINin2YTYqti02LrZitmEINmF2Lkg2KfZhNio2YjYp9io2Kkg2YXZhiDYudmG2LXYsSDZiNin2KzZh9ipINin2YTZhdiz2KrYrtiv2YUg2YLYtNix2Kkg2LnZhiDYqNmP2LnYryIsaG9zdDoi2KfYs9mFINin2YTZhdi22YrZgSDYo9mIINi52YbZiNin2YYgSVAg2YTYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLHBvcnQ6ItmF2YbZgdiwINiu2K/ZhdipIE1RVFQg2LnZhNmJINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIsdG9rZW46Itix2YXYsiDYp9mE2YjYtdmI2YQg2YTZhNio2YjYp9io2Kkg2YXZhiDYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLCJjbGllbnQtaWQiOiLZhdi52LHZgSDYudmF2YrZhCBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIix1c2VybmFtZToi2KfYs9mFINin2YTZhdiz2KrYrtiv2YUgTVFUVCDZhNmE2KjZiNin2KjYqSDZhdmGINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIscGFzc3dvcmQ6ItmD2YTZhdipINin2YTZhdix2YjYsSBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIiwiY2EtY2VydCI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2YXZhNmBINi02YfYp9iv2KkgQ0EiLCJkYXRlLWZvcm0iOiLYqtmG2LPZitmCINin2YTYqtin2LHZitiuINmB2Yog2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwiZGF0YS1mb2xkZXIiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdis2YTYryDYp9mE2LDZiiDYs9mK2K3YqtmI2Yog2LnZhNmJINin2YTYqNmK2KfZhtin2KogKNmG2LPYqNmKINij2Ygg2YXYt9mE2YIpIiwibG9nLWZvcm1hdCI6Itiq2YbYs9mK2YIg2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwicmVtb3RlLWxvZyI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDYp9mE2KrYs9is2YrZhCDYp9mE2KjYudmK2K8g2YjZgtix2KfYodipINin2YTYs9is2YTYp9iqINmF2YYg2KfZhNio2YjYp9io2KkiLCJiYWNrdXAtY291bnQiOiLYpdiw2Kcg2YPYp9mGINi52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipID4gMNiMINi52YbYryDYudmF2YTZitipINiq2K/ZiNmK2LHYjCDZhNinINmK2KrZhSDYp9mE2KfYrdiq2YHYp9i4INio2KPZg9ir2LEg2YXZhiDYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDYp9mE2YXYrdiv2K/YqSAtINmK2KrZhSDYrdiw2YEg2KfZhNij2YLYr9mFIixzdG9yYWdlOiLZitmI2YHYsSDYqtmD2YjZitmG2YvYpyDZhNit2YHYuCDYp9mE2KjZitin2YbYp9iqINin2YTZiNin2LHYr9ipINmC2KjZhCDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KfZhNmF2YbYtdipIiwibWF4LWZpbGUtY291bnQiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNi52K/YryDYp9mE2YXZhNmB2KfYqiDYp9mE2KrZiiDYs9mK2KrZhSDYpdmG2LTYp9ik2YfYpyIsIm1heC1yZWFkLWNvdW50Ijoi2LnYr9ivINin2YTYsdiz2KfYptmEINmE2YTYrdi12YjZhCDYudmE2YrZh9inINmF2YYg2KfZhNiq2K7YstmK2YYg2YjYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KvZitmG2LrYstio2YjYsdivIiwibWF4LXJlY29yZHMiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNmE2LPYrNmE2KfYqiDYp9mE2KrZiiDYs9iq2K7YstmGINmB2Yog2YXZhNmBINmI2KfYrdivIiwicmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2KfZhNix2LPYp9im2YQg2YTZhNit2LXZiNmEINi52YTZitmH2Kcg2YXZhiDYp9mE2KrYrtiy2YrZhiDZiNil2LHYs9in2YTZh9inINil2YTZiSDYq9mK2YbYutiy2KjZiNix2K8iLCJtYXgtcmVjb3Jkcy1jb3VudCI6Itin2YTYudiv2K8g2KfZhNij2YLYtdmJINmE2YTYqNmK2KfZhtin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiDZgtio2YQg2KXYsdiz2KfZhNmH2Kcg2KXZhNmJINir2YrZhti62LLYqNmI2LHYryIsInR0bC1jaGVjay1ob3VyIjoi2YPZhSDZhdix2Kkg2LPZitiq2K3ZgtmCINin2YTYqNmI2KfYqNipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDYp9mE2YLYr9mK2YXYqSIsInR0bC1tZXNzYWdlcy1kYXkiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNij2YrYp9mFINin2YTYqtmKINiz2KrYrdiq2YHYuCDZgdmK2YfYpyDYp9mE2KrYrtiy2YrZhiDYqNin2YTYqNmK2KfZhtin2KoiLGNvbW1hbmRzOiLYp9mE2KPZiNin2YXYsSDZhNis2YXYuSDYp9mE2KXYrdi12KfYptmK2KfYqiDYp9mE2KXYttin2YHZitipIixhdHRyaWJ1dGU6ItmF2YHYqtin2K0g2KrZhNmC2Yog2KfZhNil2K3Ytdin2KbZitin2KoiLHRpbWVvdXQ6ItmF2YfZhNipINiy2YXZhtmK2Kkg2YTYqtmG2YHZitiwINin2YTYo9mF2LEiLGNvbW1hbmQ6Itiz2YrYqtmFINin2LPYqtiu2K/Yp9mFINmG2KrZitis2Kkg2KrZhtmB2YrYsCDYp9mE2KPZhdixINmD2YLZitmF2Kkg2YTYqtmE2YLZiiDYp9mE2KXYrdi12KfYptmK2KfYqiIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDZhdix2KfZgtio2Kkg2YbYtNin2Lcg2YPZhCDYrNmH2KfYsiDZhdiq2LXZhCIsImluYWN0aXZpdHktdGltZW91dCI6Itin2YTZiNmC2Kog2KjYudivINin2YTYsNmKINiz2KrZgdi12YQg2KfZhNio2YjYp9io2Kkg2KfZhNis2YfYp9iyIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLYqtmD2LHYp9ixINmB2K3YtSDZhti02KfYtyDYp9mE2KzZh9in2LIiLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLYp9mE2KrYo9iu2YrYsSDYqNmK2YYg2KXYsdiz2KfZhCDYrdiy2YUg2KfZhNix2LPYp9im2YQgKNmK2KTYr9mKINiq2YLZhNmK2YQg2YfYsNinINin2YTYpdi52K/Yp9ivINil2YTZiSDYstmK2KfYr9ipINin2LPYqtiu2K/Yp9mFINmI2K3Yr9ipINin2YTZhdi52KfZhNis2Kkg2KfZhNmF2LHZg9iy2YrYqSkiLHFvczoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipINmB2Yog2LHYs9in2KbZhCBNUVRUICgwIC0g2LnZhNmJINin2YTYo9mD2KvYsSDZhdix2Kkg2YjYp9it2K/YqdiMIDEgLSDYudmE2Ykg2KfZhNij2YLZhCDZhdix2Kkg2YjYp9it2K/YqSkiLCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYtNio2YPYqSDYp9mE2LDZiiDYs9mK2LPYqtmF2Lkg2YHZitmHINiu2KfYr9mFIEdSUEMg2YTZhNin2LPYqtmB2LPYp9ix2KfYqiDYp9mE2YjYp9ix2K/YqS4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNmE2YjZgtiqINin2YTYsNmKINmK2KzYqCDYo9mGINmK2YbYqti42LHZhyDYp9mE2K7Yp9iv2YUg2YTYp9iz2KrYrNin2KjYqSDYsdiz2KfZhNipINin2YTYrdmB2KfYuCDYudmE2Ykg2KfZhNin2KrYtdin2YQg2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTZhdiv2Kkg2KjZitmGINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTZhdiq2LnYp9mC2KjYqSDYudmG2K8g2LnYr9mFINmI2KzZiNivINin2LPYqtiv2LnYp9ihIFJQQyDZhti02LcuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTYqtmKINmK2YXZg9mGINmE2YTYrtin2K/ZhSDYpdix2LPYp9mE2YfYpyDYr9mI2YYg2KrZhNmC2Yog2KPZiiDYqNmK2KfZhtin2Kog2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINi52YbYryDYudiv2YUg2KXYsdiz2KfZhCDYo9mIINin2LPYqtmE2KfZhSDYqNmK2KfZhtin2KouIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2LPZhdin2K0g2YTZhNiu2KfYr9mFINio2KXYqNmC2KfYoSDYp9iq2LXYp9mEIEdSUEMg2K3ZitmL2Kcg2K3YqtmJINi52YbYr9mF2Kcg2YTYpyDYqtmD2YjZhiDZh9mG2KfZgyDYp9iz2KrYr9i52KfYodin2KogUlBDINmG2LTYt9ipLiJ9fSxWbz17ImFkZC1lbnRyeSI6IkFmZWdpciBjb25maWd1cmFjacOzIiwiY29ubmVjdG9yLWFkZCI6IkFmZWdpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJDYWwgbm9tIGNvbmVjdG9yLiIsImNvbm5lY3Rvci10eXBlIjoiVGlwdXMgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNhbCB0aXB1cyBjb25lY3Rvci4iLGNvbm5lY3RvcnM6IkNvbmZpZ3VyYWNpw7MgZGUgY29uZWN0b3JzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXIgdW4gZ2F0ZXdheSBub3UiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkNyZWFyIHVuIG5vdSBnYXRld2F5IGFtYiBlbCBub206ICd7e2dhdGV3YXlOYW1lfX0nPyIsZGVsZXRlOiJFc2JvcnJhciBjb25maWd1cmFjacOzIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FycmVnYXIgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkphIGV4aXN0ZWl4IHVuIGRpc3Bvc2l0aXUgYW1iIGVsIG1hdGVpeCBub20uIiwiZ2F0ZXdheS1uYW1lIjoiTm9tIGRlIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJDYWwgdW4gbm9tIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7MgZGUgZ2F0ZXdheSBncmF2YWRhIHNhdGlzZmFjdMOycmlhbWVudC4iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6BsaWQuIiwianNvbi1yZXF1aXJlZCI6IkVsIGNhbXAgbm8gcG90IHNlciBidWl0LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBoaSBoYSBjb25lY3RvcnMiLCJuby1kYXRhIjoiTm8gaGkgaGEgY29uZmlndXJhY2lvbnMiLCJuby1nYXRld2F5LWZvdW5kIjoiTm8gcydoYSB0cm9iYXQgY2FwIGdhdGV3YXkuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vIHRyb2JhdC4iLCJwYXRoLWxvZ3MiOiJSdXRhIGFscyBmaXR4ZXJzIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IkNhbCBydXRhLiIscmVtb3RlOiJDb25maWd1cmFjacOzIHJlbW90YSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTml2ZWwgZGUgbG9nZ2luZyIsInJlbW92ZS1lbnRyeSI6IkVzYm9ycmFyIGNvbmZpZ3VyYWNpw7MiLCJzYXZlLXRpcCI6IkdyYXZhciBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIsInNlY3VyaXR5LXR5cGUiOiJUaXB1cyBkZSBzZWd1cmV0YXQiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkJ2FjY8OpcyIsdGxzOiJUTFMifSxzdG9yYWdlOiJHcmFiYWNpw7MiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJOw7ptZXJvIG3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZml0eGVyIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoHhpbSBkZSBmaXR4ZXJzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiRWwgbsO6bWVybyBtw61uaW0gw6lzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiQ2FsIG7Dum1lcm8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZWwgbWFnYXR6ZW0iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltIMOpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1pZGEgbcOgeGltIGRlIGVzZGV2ZW5pbWVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbSDDqXMgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6BsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhdGgiOiJSdXRhIGRlIG1hZ2F0emVtIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiQ2FsIHJ1dGEgZGUgbWFnYXR6ZW0uIiwic3RvcmFnZS10eXBlIjoiVGlwdXMgZGUgbWFnYXR6ZW0iLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik1hZ2F0emVtIGZpdHhlciIsIm1lbW9yeS1zdG9yYWdlIjoiTWFnYXR6ZW0gZW4gbWVtb3JpYSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IkNhbCBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQb3J0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJFbCBwb3J0IG3DoHhpbSDDqXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJFbCBwb3J0IG3DrW5pbSDDqXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQb3J0IG5vIHbDoGxpZC4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiQ2FsIHBvcnQuIix0aWR5OiJFbmRyZcOnYXQiLCJ0aWR5LXRpcCI6IkVuZHJlw6dhdCBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDsyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlJ1dGEgYWwgY2VydGlmaWNhdCBDQSBhbCBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUnV0YSBhbCBjZXJ0aWZpY2F0IGNsaWVudCBhbCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJSdXRhIGEgbGEgY2xhdSBwcml2YWRhIGFsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7MgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWZlZ2lyL2FjdHVhbGl6YXIgY29uZmlndXJhY2nDsyBKU09OIn0sQm89eyJhZGQtZW50cnkiOiJQxZlpZGF0IGtvbmZpZ3VyYWNpIiwiY29ubmVjdG9yLWFkZCI6IlDFmWlkYXQgbm92w70ga29uZWt0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IlBvdm9saXQga29uZWt0b3IiLCJjb25uZWN0b3ItbmFtZSI6Ik7DoXpldiBrb25la3RvcnUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Ik7DoXpldiBrb25la3RvcnUgamUgcG92aW5uw70uIiwiY29ubmVjdG9yLXR5cGUiOiJUeXAga29uZWt0b3J1IiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJUeXAga29uZWt0b3J1IGplIHBvdmlubsO9LiIsY29ubmVjdG9yczoiS29uZmlndXJhY2Uga29uZWt0b3J1IiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiVnl0dm/FmWl0IG5vdm91IGJyw6FudSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiSnN0ZSBzaSBqaXN0aSwgxb5lIGNoY2V0ZSB2eXR2b8WZaXQgbm92b3UgYnLDoW51IHMgbsOhenZlbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IlNtYXphdCBrb25maWd1cmFjaSIsImRvd25sb2FkLXRpcCI6IlN0w6Fobm91dCBzb3Vib3Iga29uZmlndXJhY2UiLGdhdGV3YXk6IkJyw6FuYSIsImdhdGV3YXktZXhpc3RzIjoiWmHFmcOtemVuw60gc2Ugc2hvZG7DvW0gbsOhenZlbSBqacW+IGV4aXN0dWplLiIsImdhdGV3YXktbmFtZSI6Ik7DoXpldiBicsOhbnkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOw6F6ZXYgYnLDoW55IGplIHBvdmlubsO9LiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjZSBicsOhbnkgYnlsYSDDunNwxJvFoW7EmyB1bG/FvmVuYS4iLCJqc29uLXBhcnNlIjoiTmVwbGF0bsO9IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmVtxa/FvmUgYsO9dCBwcsOhemRuw6kuIiwibm8tY29ubmVjdG9ycyI6IsW9w6FkbsOpIGtvbmVrdG9yeSIsIm5vLWRhdGEiOiLFvcOhZG7DqSBrb25maWd1cmFjZSIsIm5vLWdhdGV3YXktZm91bmQiOiLFvcOhZG7DqSBicsOhbnkgbmVieWx5IG5hbGV6ZW55LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIgJ3t7aXRlbX19JyBuZW5hbGV6ZW5hLiIsInBhdGgtbG9ncyI6IkNlc3RhIGsgc291Ym9yxa9tIGxvZ3UiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJDZXN0YSBqZSBwb3Zpbm7DoS4iLHJlbW90ZToiVnpkw6FsZW7DoSBrb25maWd1cmFjZSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiw5pyb3ZlxYggbG9nb3bDoW7DrSIsInJlbW92ZS1lbnRyeSI6Ik9kc3RyYW5pdCBrb25maWd1cmFjaSIsInNhdmUtdGlwIjoiVWxvxb5pdCBzb3Vib3Iga29uZmlndXJhY2UiLCJzZWN1cml0eS10eXBlIjoiVHlwIHphYmV6cGXEjWVuw60iLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJQxZnDrXN0dXBvdsO9IHRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IsOabG/FvmnFoXTEmyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiBzb3Vib3J1Iiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbcOhbG7DrSBwb8SNZXQgc291Ym9yxa8iLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbcOhbG7DrSBwb8SNZXQgamUgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiUG/EjWV0IG5lbsOtIHBsYXRuw70uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJQb8SNZXQgamUgcG92aW5uw70uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiDDumxvxb5pxaF0aSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IHrDoXpuYW3FryBqZSAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbcOhbG7DrSBwb8SNZXQgesOhem5hbcWvIGplIHBvdmlubsO9LiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IGplIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtcGF0aCI6IkNlc3RhIGsgw7psb8W+acWhdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJDZXN0YSBrIMO6bG/FvmnFoXRpIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCDDumxvxb5pxaF0xJsiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IlNvdWJvciIsIm1lbW9yeS1zdG9yYWdlIjoiUGFtxJvFpSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamUgcG92aW5uw70uIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBvcnQgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltw6FsbsOtIMSNw61zbG8gcG9ydHUgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbcOhbG7DrSDEjcOtc2xvIHBvcnR1IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBuZW7DrSBwbGF0bsO9LiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGplIHBvdmlubsO9LiIsdGlkeToiVXNwb8WZw6FkYXQiLCJ0aWR5LXRpcCI6IlVzcG/FmcOhZGF0IEpTT04ga29uZmlndXJhY2kiLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJLb25maWd1cmFjZSB7e3R5cGVOYW1lfX0ga29uZWt0b3J1IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBDQSBicsOhbnkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBrbGllbnRhIGJyw6FueSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiQ2VzdGEgayBwcml2w6F0bsOtbXUga2zDrcSNaSBicsOhbnkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlDFmWVwbm91dCBkbyByZcW+aW11IGNlbMOpIG9icmF6b3ZreSIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiSlNPTioga29uZmlndXJhY2UiLCJ1cGRhdGUtY29uZmlnIjoiUMWZaWRhdC9lZGl0b3ZhdCBKU09OIGtvbmZpZ3VyYWNpIn0sVW89eyJhZGQtZW50cnkiOiJUaWxmw7hqIGtvbmZpZ3VyYXRpb24iLCJjb25uZWN0b3ItYWRkIjoiVGlsZsO4aiBueSBzdGlrZm9yYmluZGVsc2UiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkFrdGl2w6lyIHN0aWtmb3JiaW5kZWxzZSIsImNvbm5lY3Rvci1uYW1lIjoiTmF2biBww6Ugc3Rpa2ZvcmJpbmRlbHNlIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJOYXZuIHDDpSBzdGlrZm9yYmluZGVsc2UgZXIgcMOla3LDpnZldC4iLCJjb25uZWN0b3ItdHlwZSI6IlN0aWtmb3JiaW5kZWxzZXN0eXBlIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTdGlrZm9yYmluZGVsc2VzdHlwZSBlciBww6VrcsOmdmV0LiIsY29ubmVjdG9yczoiS29uZmlndXJhdGlvbiBhZiBzdGlrZm9yYmluZGVsc2VyIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiT3ByZXQgZW4gbnkgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiIixkZWxldGU6IlNsZXQga29uZmlndXJhdGlvbiIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGtvbmZpZ3VyYXRpb25zZmlsIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJFbmhlZCBtZWQgc2FtbWUgbmF2biBmaW5kZXMgYWxsZXJlZGUuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheS1uYXZuIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheS1uYXZuIGVyIHDDpWtyw6Z2ZXQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkta29uZmlndXJhdGlvbmVuIGJsZXYgZ2VtdC4iLCJqc29uLXBhcnNlIjoiSWtrZSBneWxkaWcgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmVsdGV0IG3DpSBpa2tlIHbDpnJlIHRvbXQuIiwibm8tY29ubmVjdG9ycyI6IkluZ2VuIHN0aWtmb3JiaW5kZWxzZXIiLCJuby1kYXRhIjoiSW5nZW4ga29uZmlndXJhdGlvbmVyIiwibm8tZ2F0ZXdheS1mb3VuZCI6IkluZ2VuIGdhdGV3YXkgZnVuZGV0LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIiLCJwYXRoLWxvZ3MiOiJTdGkgdGlsIGxvZ2ZpbGVyIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiU3RpIGVyIHDDpWtyw6Z2ZXQuIixyZW1vdGU6IkZqZXJua29uZmlndXJhdGlvbiIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nZsO4cmluZ3NuaXZlYXUiLCJyZW1vdmUtZW50cnkiOiJGamVybiBrb25maWd1cmF0aW9uIiwic2F2ZS10aXAiOiJHZW0ga29uZmlndXJhdGlvbnNmaWwiLCJzZWN1cml0eS10eXBlIjoiU2lra2VyaGVkc3R5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBZGdhbmdzdG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiTGFncmluZyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGZpbCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrcy4gYW50YWwgZmlsZXIiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW4uIGFudGFsIGVyIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IkFudGFsIGVyIGlra2UgZ3lsZGlndC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6IkFudGFsIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGxhZ3JpbmciLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbi4gYW50YWwgcG9zdGVyIGVyIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYWtzLiBhbnRhbCBwb3N0ZXIgZXIgcMOla3LDpnZldC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3MuIGFudGFsIHBha2tlc3TDuHJyZWxzZSBmb3IgYmVnaXZlbmhlZCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbi4gYW50YWwgZXIgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrcy4gYW50YWwgcGFra2VzdMO4cnJlbHNlIGZvciBiZWdpdmVuaGVkIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1wYXRoIjoiTGFncmluZ3NzdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJMYWdyaW5nc3N0aSBlciBww6VrcsOmdmV0LiIsInN0b3JhZ2UtdHlwZSI6IkxhZ3JpbmdzdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiTGFncmluZyBhZiBmaWx0ZXIiLCJtZW1vcnktc3RvcmFnZSI6IkxhZ3JpbmcgYWYgaHVrb21tZWxzZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZC12w6ZydCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJWw6ZydCBlciBww6VrcsOmdmV0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZC1wb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzLiBwb3J0bnVtbWVyIGVyIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluLiBwb3J0bnVtbWVyIGVyIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBlciBpa2tlIGd5bGRpZy4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBlciBww6VrcsOmdmV0LiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBrb25maWcuIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiIiLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwgQ0EtY2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwga2xpZW50Y2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiU3RpIHRpbCBwcml2YXQgbsO4Z2xlIHDDpSBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJTa2lmdCB0aWwgZnVsZCBza8Omcm0iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiVGlsZsO4ai9vcGRhdGVyIGtvbmZpZ3VyYXRpb24gSlNPTiJ9LF9vPXsiYWRkLWVudHJ5IjoiQcOxYWRpciBjb25maWd1cmFjacOzbiIsYWR2YW5jZWQ6IkF2YW56YWRvIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiUHJvYmFuZG8gYWN0aXZpZGFkIGRlIGRpc3Bvc2l0aXZvIixjb21tYW5kOiJDb21hbmRvcyBEb2NrZXIiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiU2UgaGFuIGNvcGlhZG8gbG9zIGNvbWFuZG9zIGFsIHBvcnRhcGFwZWxlcyIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhY2nDs24iLCJjb25uZWN0b3ItYWRkIjoiQcOxYWRpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tYnJlIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBub21icmUgY29uZWN0b3IuIiwiY29ubmVjdG9yLXR5cGUiOiJUaXBvIGNvbmVjdG9yIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aXBvIGNvbmVjdG9yLiIsY29ubmVjdG9yczoiQ29uZWN0b3JlcyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29uZmlndXJhY2nDs24gZGUgY29uZWN0b3JlcyIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOb21icmUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUaXBvIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJFc3RhZG8iLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY2Npb25lcyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiQ2xhdmUiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc2UiLCJycGMtY29tbWFuZC1zZW5kIjoiRW52aWFyIiwicnBjLWNvbW1hbmQtcmVzdWx0IjoiUmVzdWx0YWRvIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiJFZGl0YXIgcGFyYW1ldHJvcyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkNvbmZpZ3VyYWNpw7NuIEdlbmVyYWwiLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhciB1biBnYXRld2F5IG51ZXZvIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJDcmVhciB1biBudWV2byBnYXRld2F5IGNvbiBlbCBub21icmU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkhvcmEgZGUgY3JlYWNpw7NuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6IkxhcyBjb25maWd1cmFjaW9uZXMgc2UgYm9ycmFyw6FuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJTw7NsbyBlcyBwb3NpYmxlIGRlc2FjdGl2YXIgbGEgY29uZmlndXJhY2nDs24gcmVtb3RhLCBzaSBoYXkgYWNjZXNvIGbDrXNpY28gYWwgZ2F0ZXdheS4gU2UgYm9ycmFyw6FuIHRvZGFzIGxhcyBjb25maWd1cmFjaW9uZXMgcHJldmlhcy48YnI+PGJyPiBcblBhcmEgZGVzYWN0aXZhciBsYSBjb25maWd1cmFjacOzbiwgaW50cm9kdWNlIGVsIG5vbWJyZSBkZWwgZ2F0ZXdheSBhcXXDrSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6Ik5vbWJyZSBHYXRld2F5IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGdhdGV3YXkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IkRlc2FjdGl2YXIiLGRlbGV0ZToiQm9ycmFyIGNvbmZpZ3VyYWNpw7NuIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FyZ2FyIGZpY2hlcm8gZGUgY29uZmlndXJhY2nDs24iLCJkcm9wLWZpbGUiOiJBcnJhc3RyYSB1biBmaWNoZXJvIG8iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IllhIGV4aXN0ZSB1biBkaXNwb3NpdGl2byBjb24gZWwgbWlzbW8gbm9tYnJlLiIsImdhdGV3YXktbmFtZSI6Ik5vbWJyZSBkZSBHYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdW4gbm9tYnJlIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7NuIGRlIGdhdGV3YXkgZ3JhYmFkYSBzYXRpc2ZhY3RvcmlhbWVudGUuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaW1lb3V0IEtlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgVGltZW91dCBLZWVwIGFsaXZlIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiRWwgdmFsb3Igbm8gZXMgdsOhbGlkbyIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGtlZXAgYWxpdmUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6IkVsIHZhbG9yIGtlZXAgYWxpdmUgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6IlRpZW1wbyBtw61uaW1vIGVudHJlIHBpbmdzIChlbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aWVtcG8gbcOtbmltbyBlbnRyZSBwaW5ncyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiRWwgdmFsb3IgZGUgdGllbXBvIG3DrW5pbW8gZW50cmUgcGluZ3Mgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DrW5pbW8gc2luIGRhdG9zIChlbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGludGVydmFsbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGludGVydmFsbyBubyBlcyB2w6FsaWRvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DoXhpbW8gc2luIGRhdG9zIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgaW50ZXJ2YWxvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJFbCB2YWxvciBkZSBpbnRlcnZhbG8gbm8gZXMgdsOhbGlkbyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJQZXJpb2RvIGRlIGNvbnRyb2wgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlbCBwZXJpb2RvIG5vIGVzIHbDoWxpZG8iLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcyI6IlRpbWVvdXQgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGltZW91dCBkZSBpbmFjdGl2aWRhZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGluYWN0aXZpZGFkIG5vIGVzIHbDoWxpZG8iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6FsaWRvLiIsImpzb24tcmVxdWlyZWQiOiJFbCBjYW1wbyBubyBwdWVkZSBlc3RhciB2YWPDrW8uIixsb2dzOntsb2dzOiJSZWdpc3Ryb3MiLGRheXM6ImTDrWFzIixob3VyczoiaG9yYXMiLG1pbnV0ZXM6Im1pbnV0b3MiLHNlY29uZHM6InNlZ3VuZG9zIiwiZGF0ZS1mb3JtYXQiOiJGb3JtYXRvIGRlIGZlY2hhIiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBmb3JtYXRvIGRlIGZlY2hhIiwibG9nLWZvcm1hdCI6IkZvcm1hdG8gZGUgcmVnaXN0cm8iLCJsb2ctdHlwZSI6IlRpcG8gZGUgcmVnaXN0cm8iLCJsb2ctZm9ybWF0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGlwbyBkZSByZWdpc3RybyIscmVtb3RlOiJSZWdpc3RybyByZW1vdG8iLCJyZW1vdGUtbG9ncyI6IlJlZ2lzdHJvIHJlbW90byIsbG9jYWw6IlJlZ2lzdHJvIGxvY2FsIixsZXZlbDoiTml2ZWwgZGUgcmVnaXN0cm8iLCJmaWxlLXBhdGgiOiJSdXRhIGRlIGZpY2hlcm8iLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBydXRhIGRlIGZpY2hlcm8iLCJzYXZpbmctcGVyaW9kIjoiUGVyaW9kbyBkZSBndWFyZGFkbyBkZSByZWdpc3Ryb3MiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gbm8gcHVlZGUgc2VyIG1lbm9yIHF1ZSAxIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHBlcmlvZG8gZGUgZ3VhcmRhZG8iLCJiYWNrdXAtY291bnQiOiJOw7ptZXJvIGRlIGJhY2t1cHMiLCJiYWNrdXAtY291bnQtbWluIjoiRWwgbsO6bWVybyBkZSBiYWNrdXBzIG5vIHB1ZWRlIHNlciBtZW5vciBxdWUgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgYmFja3VwcyJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiVGllbXBvIGRlIGVzcGVyYSwgZW52w61vIGRlIHBhcXVldGVzIChlbiBtcykiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGllbXBvIGRlIGVzcGVyYSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoiRWwgdGllbXBvIGRlIGVzcGVyYSBubyBwdWVkZSBzZXIgbWVub3IgcXVlIDAiLCJuby1jb25uZWN0b3JzIjoiTm8gaGF5IGNvbmVjdG9yZXMiLCJuby1kYXRhIjoiTm8gaGF5IGNvbmZpZ3VyYWNpb25lcyIsIm5vLWdhdGV3YXktZm91bmQiOiJObyBzZSBoYSBlbmNvbnRyYWRvIG5pbmfDum4gZ2F0ZXdheS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiICd7e2l0ZW19fScgbm8gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJSdXRhIGEgbG9zIGFyY2hpdm9zIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlJ1dGEgcmVxdWVyaWRhLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiUGVybWl0aXIgS2VlcCBhbGl2ZSBzaSBsbGFtYWRhcyIscmVtb3RlOiJDb25maWd1cmFjacOzbiByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik5pdmVsIGRlIGxvZ2dpbmciLCJyZW1vdmUtZW50cnkiOiJCb3JyYXIgY29uZmlndXJhY2nDs24iLCJyZW1vdGUtc2hlbGwiOiJDb25zb2xhIHJlbW90YSIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiQ29uZmlndXJhY2nDs24gcmVtb3RhIixvdGhlcjoib3Ryb3MiLCJzYXZlLXRpcCI6IkdyYWJhciBmaWNoZXJvIGRlIGNvbmZpZ3VyYWNpw7NuIiwic2VjdXJpdHktdHlwZSI6IlRpcG8gZGUgc2VndXJpZGFkIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVMOza2VuIGRlIGFjY2VzbyIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXN1YXJpbyB5IGNvbnRyYXNlw7FhIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBUw7NrZW4gZGUgYWNjZXNvIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgQ2xhdmUgcHJpdmFkYSJ9LCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZWwgc2Vydmlkb3IiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiRXN0YWTDrXN0aWNhIixzdGF0aXN0aWNzOiJFc3RhZMOtc3RpY2FzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjoiTm8gaGF5IGVzdGFkw61zdGljYXMiLGNvbW1hbmRzOiJDb21hbmRvcyIsInNlbmQtcGVyaW9kIjoiUGVyaW9kbyBkZSBlbnbDrW8gZGUgZXN0YWTDrXN0aWNhcyAoZW4gc2VndW5kb3MpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIGRlIGVudsOtbyIsInNlbmQtcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gZGUgZW52w61vIG5vIHB1ZWRlIHNlciBtZW5vciBkZSA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJFbCBwZXJpb2RvIGRlIGVudsOtbyBubyBlcyB2w6FsaWRvIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiUmV2aXNhciBjb25maWd1cmFjacOzbiBkZSBjb25lY3RvcmVzIChlbiBzZWd1bmRvcykiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB1biB2YWxvciIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuIjoiTGEgY29uZmlndXJhY2nDs24gbm8gZXMgdsOhbGlkYSIsYWRkOiJBw7FhZGlyIGNvbWFuZG8iLHRpbWVvdXQ6IlRpbWVvdXQiLCJ0aW1lb3V0LW1zIjoiVGltZW91dCAoZW4gbXMpIiwidGltZW91dC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHRpbWVvdXQiLCJ0aW1lb3V0LW1pbiI6IkVsIHRpbWVvdXQgbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJFbCB0aW1lb3V0IG5vIGVzIHbDoWxpZG8iLCJhdHRyaWJ1dGUtbmFtZSI6Ik5vbWJyZSBkZSBhdHJpYnV0byIsImF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGF0cmlidXRvIixjb21tYW5kOiJDb21hbmRvIiwiY29tbWFuZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGNvbWFuZG8iLHJlbW92ZToiQm9ycmFyIGNvbWFuZG8ifSxzdG9yYWdlOiJHcmFiYWNpw7NuIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTsO6bWVybyBtw6F4aW1vIGRlIHJlZ2lzdHJvcyBlbiBmaWNoZXJvIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZmljaGVyb3MiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6FsaWRvLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTcOheGltbyBkZSByZWdpc3Ryb3MgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltbyBlcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiTGVlciBuw7ptZXJvIGRlIGVudHJhZGFzIGVuIGFsbWFjw6luIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgZW50cmFkYXMgZXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBuw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiUnV0YSBkZSBjYXJwZXRhIGRlIGRhdG9zIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcnV0YS4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWHDsW8gbcOheGltbyBkZSBldmVudG9zIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiRWwgbsO6bWVybyBtw61uaW1vIGVzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8uIiwic3RvcmFnZS1wYXRoIjoiUnV0YSBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHJ1dGEgZGUgYWxtYWPDqW4uIiwic3RvcmFnZS10eXBlIjoiVGlwbyBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gZmljaGVybyIsIm1lbW9yeS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gbWVtb3JpYSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiSG9zdCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQdWVydG8gVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkVsIHB1ZXJ0byBtw6F4aW1vIGVzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiRWwgcHVlcnRvIG3DrW5pbW8gZXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQdWVydG8gbm8gdsOhbGlkby4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcHVlcnRvLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDs24gY29uZWN0b3Ige3t0eXBlTmFtZX19IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIENBIGVuIGVsIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIGNsaWVudGUgZW4gZWwgZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6IkNvbXByb2JhY2nDs24gZGUgVFRMIGRlIG1lbnNhamVzIGVuIGhvcmFzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiQ2FtcG8gcmVxdWVyaWRvLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJFbCBtw61uaW1vIGVzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwgKFRpbWUgdG8gbGl2ZSkgZGUgbWVuc2FnZXMgZW4gZMOtYXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIFRUTCBkZSBtZW5zYWplcy4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvLiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IkVsIHJhbmdvIGRlIHZhbG9yZXMgZXMgZGVzZGUgMCBhIDEiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlJ1dGEgYSBsYSBjbGF2ZSBwcml2YWRhIGVuIGVsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7NuIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkHDsWFkaXIvYWN0dWFsaXphciBjb25maWd1cmFjacOzbiBKU09OIixoaW50czp7InJlbW90ZS1jb25maWd1cmF0aW9uIjoiSGFiaWxpdGEgbGEgYWRtaW5pc3RyYWNpw7NuIHkgY29uZmlndXJhY2nDs24gcmVtb3RhIGRlbCBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiSGFiaWxpdGEgZWwgY29udHJvbCByZW1vdG8gZGVsIHNpc3RlbWEgb3BlcmF0aXZvIGRlbCBnYXRld2F5IGRlc2RlIGVsIHdpZGdldCB0ZXJtaW5hbCByZW1vdG8iLGhvc3Q6Ikhvc3RuYW1lIG8gZGlyZWNjacOzbiBJUCBkZWwgc2Vydmlkb3IgVGhpbmdzYm9hcmQiLHBvcnQ6IlB1ZXJ0byBkZWwgc2VydmljaW8gTVFUVCBlbiBlbCBzZXJ2aWRvciBUaGluZ3Nib2FyZCIsdG9rZW46IkFjY2VzcyB0b2tlbiBwYXJhIGVsIGdhdGV3YXkiLCJjbGllbnQtaWQiOiJJRCBkZSBjbGllbnRlIE1RVFQgcGFyYSBlbCBnYXRld2F5Iix1c2VybmFtZToiVXN1YXJpbyBNUVRUIHBhcmEgZWwgZ2F0ZXdheSIscGFzc3dvcmQ6IkNvbnRyYXNlw7FhIE1RVFQgcGFyYSBlbCBnYXRld2F5IiwiY2EtY2VydCI6IlJ1dGEgYWwgZmljaGVybyBkZWwgY2VydGlmaWNhZG8gQ0EiLCJkYXRlLWZvcm0iOiJGb3JtYXRvIGRlIGZlY2hhIGVuIGxvcyBtZW5zYWplcyBkZSByZWdpc3RybyIsImRhdGEtZm9sZGVyIjoiUnV0YSBhIGxhIGNhcnBldGEgcXVlIGNvbnRlbmRyw6EgbG9zIGRhdG9zIChSZWxhdGl2YSBvIGFic29sdXRhKSIsImxvZy1mb3JtYXQiOiJGb3JtYXRvIGRlIG1lbnNhamVzIGVuIHJlZ2lzdHJvIiwicmVtb3RlLWxvZyI6IkhhYmlsaXRhIGVsIHJlZ2lzdHJvIHJlbW90byB5IGxhIHBvc3RlcmlvciBsZWN0dXJhIGRlc2RlIGVsIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJTaSBlbCBjb250YWplIGRlIGNvcGlhcyBkZSBzZWd1cmlkYWQgZXMgbWF5b3IgcXVlIDAsIGN1YW5kbyBzZSByZWFsaWNlIHVuYSByZW5vdmFjacOzbiwgbm8gc2UgY29uc2VydmFuIG3DoXMgcXVlIGxvcyBhcmNoaXZvcyBkZSByZWN1ZW50byBkZSBjb3BpYXMgZGUgc2VndXJpZGFkLCBsb3MgbcOhcyBhbnTDrWd1b3Mgc2UgZWxpbWluYXLDoW4iLHN0b3JhZ2U6IlByb3ZlZSBsYSBjb25maWd1cmFjacOzbiBwYXJhIGVsIGdyYWJhZG8gZGUgZGF0b3MgZW50cmFudGVzIGFudGVzIGRlIHF1ZSBzZSBlbnbDrWVuIGEgbGEgcGxhdGFmb3JtYSIsIm1heC1maWxlLWNvdW50IjoiTsO6bWVybyBtw6F4aW1vIGRlIGZpY2hlcm9zIHF1ZSBzZSBjcmVhcsOhbiIsIm1heC1yZWFkLWNvdW50IjoiTsO6bWVvIG3DoXhpbW8gZGUgbWVuc2FqZXMgYSBvYnRlbmVyIGRlc2RlIGVsIGRpc2NvIHkgZW52aWFkb3MgYSBsYSBwbGF0YWZvcm1hIiwibWF4LXJlY29yZHMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIHF1ZSBzZSBndWFyZGFyw6FuIGVuIHVuIHNvbG8gZmljaGVybyIsInJlYWQtcmVjb3JkLWNvdW50IjoiTsO6bWVybyBkZSBtZW5zYWdlcyBhIG9idGVuZXIgZGVzZGUgZWwgYWxtYWNlbmFtaWVudG8geSBlbnZpYWRvcyBhIGxhIHBsYXRhZm9ybWEiLCJtYXgtcmVjb3Jkcy1jb3VudCI6Ik7Dum1lcm8gbcOheGltbyBkZSBkYXRvcyBlbiBhbG1hY2VuYW1pZW50byBhbnRlcyBkZSBlbnZpYXIgYSBsYSBwbGF0YWZvcm1hIiwidHRsLWNoZWNrLWhvdXIiOiJDb24gcXXDqSBmcmVjdWVuY2lhIGVsIGdhdGV3YXkgY29tcHJvYmFyw6Egc2kgbG9zIGRhdG9zIGVzdMOhbiBvYnNvbGV0b3MiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTsO6bWVybyBtw6F4aW1vIGRlIGTDrWFzIHBhcmEgbGEgcmV0ZW5jacOzbiBkZSBkYXRvcyBlbiBlbCBhbG1hY8OpbiIsY29tbWFuZHM6IkNvbWFuZG9zIHBhcmEgcmVjb2dlciBlc3RhZMOtc3RpY2FzIGFkaWNpb25hbGVzIixhdHRyaWJ1dGU6IkNsYXZlIGRlIHRlbGVtZXRyw61hIHBhcmEgZXN0YWTDrXN0aWNhcyIsdGltZW91dDoiVGltZW91dCBwYXJhIGxhIGVqZWN1Y2nDs24gZGUgY29tYW5kb3MiLGNvbW1hbmQ6IkVsIHJlc3VsdGFkbyBkZSBsYSBlamVjdWNpw7NuIGRlbCBjb21hbmRvLCBzZSB1c2Fyw6EgY29tbyB2YWxvciBwYXJhIGxhIHRlbGVtZXRyw61hIiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiSGFiaWxpdGEgbGEgbW9uaXRvcml6YWNpw7NuIGRlIGNhZGEgdW5vIGRlIGxvcyBkaXNwb3NpdGl2b3MgY29uZWN0YWRvcyIsImluYWN0aXZpdHktdGltZW91dCI6IlRpZW1wbyB0cmFzIHF1ZSBlbCBnYXRld2F5IGRlc2NvbmVjdGFyw6EgZWwgZGlzcG9zaXRpdm8iLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZG8gZGUgbW9uaXRvcml6YWNpw7NuIGRlIGFjdGl2aWRhZCBlbiBlbCBkaXNwb3NpdGl2byIsIm1pbmltYWwtcGFjay1kZWxheSI6IlRpZW1wbyBkZSBlc3BlcmEgZW50cmUgZW52w61vIGRlIHBhcXVldGVzIGRlIG1lbnNhamVzIChVbiB2YWxvciBtdXkgYmFqbywgcmVzdWx0YXLDoSBlbiB1biBhdW1lbnRvIGRlIHVzbyBkZSBsYSBDUFUgZW4gZWwgZ2F0ZXdheSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGVuIGxvcyBtZW5zYWplcyBNUVRUICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZSByZWQgZW4gZWwgY3VhbCBlbCBzZXJ2aWRvciBHUlBDIGVzY3VjaGFyw6EgY29uZXhpb25lcyBlbnRyYW50ZXMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaWVtcG8gbcOheGltbywgZWwgY3VhbCBlbCBzZXJ2aWRvciBlc3BlcmFyYSB1biBwaW5nIGtlZXBhbGl2ZSBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYWNpw7NuIGVudHJlIGRvcyBwaW5ncyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbGxhbWFkYSBSUEMgYWN0aXZhLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik3DrW5pbW8gdGllbXBvIHF1ZSBlbCBzZXJ2aWRvciBkZWJlIGVzcGVyYXIgZW50cmUgZW52w61vcyBkZSBtZW5zYWplcyBkZSBwaW5nIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTsO6bWVybyBtw6F4aW1vIGRlIHBpbmdzIGtlZXBhbGl2ZSBxdWUgZWwgc2Vydmlkb3IgcHVlZGUgZW52aWFyIHNpbiByZWNpYmlyIG5pbmfDum4gZGF0byBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNw61uaW1vIHRpZW1wbyBxdWUgZWwgc2Vydmlkb3IgZGViZSBlc3BlcmFyIGVudHJlIGVudsOtb3MgZGUgcGluZyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbmluZ8O6biBkYXRvIGVuIGVudsOtbyBvIHJlY2VwY2nDs24uIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJQZXJtaXRpciBhbCBzZXJ2aWRvciBtYW50ZW5lciBsYSBjb25leGnDs24gR1JQQyBhYmllcnRhLCBjdWFuZG8gbm8gaGF5YSBsbGFtYWRhcyBSUEMgYWN0aXZhcy4ifX0sSG89eyJhZGQtZW50cnkiOiLshKTsoJUg7LaU6rCAIiwiY29ubmVjdG9yLWFkZCI6IuyDiOuhnOyatCDsl7DqsrDsnpAg7LaU6rCAIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJFbmFibGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUiOiJDb25uZWN0b3IgbmFtZSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiQ29ubmVjdG9yIG5hbWUgaXMgcmVxdWlyZWQuIiwiY29ubmVjdG9yLXR5cGUiOiJDb25uZWN0b3IgdHlwZSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiQ29ubmVjdG9yIHR5cGUgaXMgcmVxdWlyZWQuIixjb25uZWN0b3JzOiJDb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhdGUgYSBuZXcgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQXJlIHlvdSBzdXJlIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBnYXRld2F5IHdpdGggbmFtZTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiU3RvcmFnZSIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBmaWxlIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbXVtIG51bWJlciBvZiBmaWxlcyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJOdW1iZXIgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWF4aW11bSByZWNvcmRzIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZCBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlRoaW5nc0JvYXJkIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29ubmVjdG9yIHt7dHlwZU5hbWV9fSBjb25maWd1cmF0aW9uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYXRoIHRvIHByaXZhdGUga2V5IG9uIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlRvZ2dsZSBmdWxsc2NyZWVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aW9uIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkZC91cGRhdGUgY29uZmlndXJhdGlvbiBKU09OIn0sem89eyJhZGQtZW50cnkiOiJBZGQgY29uZmlndXJhdGlvbiIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJycGMtY29tbWFuZC1zZW5kIjoiU2VuZCIsInJwYy1jb21tYW5kLXJlc3VsdCI6IlJlc3VsdCIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiSW4gb3JkZXIgdG8gcnVuIFRoaW5nc0JvYXJkIElvVCBnYXRld2F5IGluIGRvY2tlciB3aXRoIGNyZWRlbnRpYWxzIGZvciB0aGlzIGRldmljZSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkNyZWF0ZSBhIG5ldyBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJBcmUgeW91IHN1cmUgeW91IHdhbnQgY3JlYXRlIGEgbmV3IGdhdGV3YXkgd2l0aCBuYW1lOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkRldmljZSB3aXRoIHNhbWUgbmFtZSBpcyBhbHJlYWR5IGV4aXN0cy4iLCJnYXRld2F5LW5hbWUiOiJHYXRld2F5IG5hbWUiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJHYXRld2F5IG5hbWUgaXMgcmVxdWlyZWQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHkgc2F2ZWQuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJLZWVwIGFsaXZlIHRpbWVvdXQgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIG5vdCB2YWxpZCIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IktlZXAgYWxpdmUgaXMgcmVxdWlyZWQiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiS2VlcCBhbGl2ZSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm4iOiJLZWVwIGFsaXZlIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgKGluIG1zKSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluIHBpbmcgaW50ZXJ2YWwgd2l0aG91dCBkYXRhIChpbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyBub3QgdmFsaWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1taW4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJqc29uLXBhcnNlIjoiTm90IHZhbGlkIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IkZpZWxkIGNhbm5vdCBiZSBlbXB0eS4iLGxvZ3M6e2xvZ3M6IkxvZ3MiLGRheXM6ImRheXMiLGhvdXJzOiJob3VycyIsbWludXRlczoibWludXRlcyIsc2Vjb25kczoic2Vjb25kcyIsImRhdGUtZm9ybWF0IjoiRGF0ZSBmb3JtYXQiLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IkRhdGUgZm9ybWF0IHJlcXVpcmVkIiwibG9nLWZvcm1hdCI6IkxvZyBmb3JtYXQiLCJsb2ctdHlwZSI6IkxvZyB0eXBlIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6IkxvZyBmb3JtYXQgcmVxdWlyZWQiLHJlbW90ZToiUmVtb3RlIGxvZ2dpbmciLCJyZW1vdGUtbG9ncyI6IlJlbW90ZSBsb2dzIixsb2NhbDoiTG9jYWwgbG9nZ2luZyIsbGV2ZWw6IkxvZyBsZXZlbCIsImZpbGUtcGF0aCI6IkZpbGUgcGF0aCIsImZpbGUtcGF0aC1yZXF1aXJlZCI6IkZpbGUgcGF0aCByZXF1aXJlZCIsInNhdmluZy1wZXJpb2QiOiJMb2cgc2F2aW5nIHBlcmlvZCIsInNhdmluZy1wZXJpb2QtbWluIjoiTG9nIHNhdmluZyBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiJMb2cgc2F2aW5nIHBlcmlvZCByZXF1aXJlZCIsImJhY2t1cC1jb3VudCI6IkJhY2t1cCBjb3VudCIsImJhY2t1cC1jb3VudC1taW4iOiJCYWNrdXAgY291bnQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IkJhY2t1cCBjb3VudCByZXF1aXJlZCJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiTWluIHBhY2sgc2VuZCBkZWxheSAoaW4gbXMpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgaXMgcmVxdWlyZWQiLCJtaW4tcGFjay1zZW5kLWRlbGF5LW1pbiI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMCIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJLZWVwIGFsaXZlIHBlcm1pdCB3aXRob3V0IGNhbGxzIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtc2hlbGwiOiJSZW1vdGUgc2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IlJlbW90ZSBDb25maWd1cmF0aW9uIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTdG9yYWdlIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIGZpbGUiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBudW1iZXIgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWJlciBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbXVtIHJlY29yZHMgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudCI6IlJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudCI6Ik1heCByZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiTWF4IFJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6IkRhdGEgZm9sZGVyIHBhdGgiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiJEYXRhIGZvbGRlciBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQgaG9zdCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYXhpbXVtIHBvcnQgbnVtYmVyIGlzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluaW11bSBwb3J0IG51bWJlciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgaXMgbm90IHZhbGlkLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGlzIHJlcXVpcmVkLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBjb25maWcgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsaGludHM6eyJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIFRoaW5nc0JvYXJkIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIGZvbGRlciwgdGhhdCB3aWxsIGNvbnRhaW5zIGRhdGEgKFJlbGF0aXZlIG9yIEFic29sdXRlKSIsImxvZy1mb3JtYXQiOiJMb2cgbWVzc2FnZSBmb3JtYXQiLCJyZW1vdGUtbG9nIjoiRW5hYmxlcyByZW1vdGUgbG9nZ2luZyBhbmQgbG9ncyByZWFkaW5nIGZyb20gdGhlIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJJZiBiYWNrdXAgY291bnQgaXMgPiAwLCB3aGVuIGEgcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cCBjb3VudCBmaWxlcyBhcmUga2VwdCAtIHRoZSBvbGRlc3Qgb25lcyBhcmUgZGVsZXRlZCIsc3RvcmFnZToiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3Igc2F2aW5nIGluY29taW5nIGRhdGEgYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIHBsYXRmb3JtIiwibWF4LWZpbGUtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGZpbGUgdGhhdCB3aWxsIGJlIGNyZWF0ZWQiLCJtYXgtcmVhZC1jb3VudCI6IkNvdW50IG9mIG1lc3NhZ2VzIHRvIGdldCBmcm9tIHN0b3JhZ2UgYW5kIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJtYXgtcmVjb3JkcyI6Ik1heGltdW0gY291bnQgb2YgcmVjb3JkcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIG9uZSBmaWxlIiwicmVhZC1yZWNvcmQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGRhdGEgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZCB0byBUaGluZ3NCb2FyZCIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgR2F0ZXdheSBjaGVjayBkYXRhIGZvciBvYnNvbGVzY2VuY2UiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTWF4aW11bSBkYXlzIHRoYXQgc3RvcmFnZSB3aWxsIHNhdmUgZGF0YSIsY29tbWFuZHM6IkNvbW1hbmRzIGZvciBjb2xsZWN0aW5nIGFkZGl0aW9uYWwgc3RhdGlzdGljIixhdHRyaWJ1dGU6IlN0YXRpc3RpYyB0ZWxlbWV0cnkga2V5Iix0aW1lb3V0OiJUaW1lb3V0IGZvciBjb21tYW5kIGV4ZWN1dGluZyIsY29tbWFuZDoiVGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24sIHdpbGwgYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRlbGVtZXRyeSIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6IkVuYWJsZXMgbW9uaXRvciB0aGUgYWN0aXZpdHkgb2YgZWFjaCBjb25uZWN0ZWQgZGV2aWNlIiwiaW5hY3Rpdml0eS10aW1lb3V0IjoiVGltZSBhZnRlciB3aG9zZSB0aGUgZ2F0ZXdheSB3aWxsIGRpc2Nvbm5lY3QgZGV2aWNlIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiJQZXJpb2RpY2l0eSBvZiBkZXZpY2UgYWN0aXZpdHkgY2hlY2siLCJtaW5pbWFsLXBhY2stZGVsYXkiOiJEZWxheSBiZXR3ZWVuIHNlbmRpbmcgcGFja3Mgb2YgbWVzc2FnZXMgKERlY3JlYXNpbmcgdGhpcyBzZXR0aW5nIHJlc3VsdHMgaW4gaW5jcmVhc2VkIENQVSB1c2FnZSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGluIE1RVFQgbWVzc2FnaW5nICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6Ik5ldHdvcmsgcG9ydCBvbiB3aGljaCBHUlBDIHNlcnZlciB3aWxsIGxpc3RlbiBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJNYXhpbXVtIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBmb3IgYSBrZWVwYWxpdmUgcGluZyByZXNwb25zZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLWtlZXAtYWxpdmUiOiJEdXJhdGlvbiBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIFJQQyBjYWxsLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXhpbXVtIG51bWJlciBvZiBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB0aGF0IHRoZSBzZXJ2ZXIgY2FuIHNlbmQgd2l0aG91dCByZWNlaXZpbmcgYW55IGRhdGEgYmVmb3JlIGl0IGNvbnNpZGVycyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgYmVpbmcgc2VudCBvciByZWNlaXZlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IkFsbG93IHNlcnZlciB0byBrZWVwIHRoZSBHUlBDIGNvbm5lY3Rpb24gYWxpdmUgZXZlbiB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgUlBDIGNhbGxzLiJ9fSxXbz17ImFkZC1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB0b2V2b2VnZW4iLCJjb25uZWN0b3ItYWRkIjoiTmlldXdlIGNvbm5lY3RvciB0b2V2b2VnZW4iLCJjb25uZWN0b3ItZW5hYmxlZCI6IkNvbm5lY3RvciBpbnNjaGFrZWxlbiIsImNvbm5lY3Rvci1uYW1lIjoiTmFhbSB2YW4gZGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJEZSBuYWFtIHZhbiBkZSBjb25uZWN0b3IgaXMgdmVyZWlzdC4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cGUgYWFuc2x1aXRpbmciLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkhldCB0eXBlIGNvbm5lY3RvciBpcyB2ZXJlaXN0LiIsY29ubmVjdG9yczoiQ29uZmlndXJhdGllIHZhbiBjb25uZWN0b3JlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkVlbiBuaWV1d2UgZ2F0ZXdheSBtYWtlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiV2VldCB1IHpla2VyIGRhdCB1IGVlbiBuaWV1d2UgZ2F0ZXdheSB3aWx0IG1ha2VuIG1ldCBkZSBuYWFtOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiQ29uZmlndXJhdGllIHZlcndpamRlcmVuIiwiZG93bmxvYWQtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBkb3dubG9hZGVuIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2UgbWV0IGRlemVsZmRlIG5hYW0gYmVzdGFhdCBhbC4iLCJnYXRld2F5LW5hbWUiOiJOYWFtIHZhbiBkZSBnYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiRGUgbmFhbSB2YW4gZGUgZ2F0ZXdheSBpcyB2ZXJlaXN0LiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5Y29uZmlndXJhdGllIHN1Y2Nlc3ZvbCBvcGdlc2xhZ2VuLiIsImpzb24tcGFyc2UiOiJPbmdlbGRpZ2UgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiSGV0IHZlbGQgbWFnIG5pZXQgbGVlZyB6aWpuLiIsIm5vLWNvbm5lY3RvcnMiOiJHZWVuIGNvbm5lY3RvcmVuIiwibm8tZGF0YSI6IkdlZW4gY29uZmlndXJhdGllcyIsIm5vLWdhdGV3YXktZm91bmQiOiJHZWVuIGdhdGV3YXkgZ2V2b25kZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6Iid7e2l0ZW19fScgbmlldCBnZXZvbmRlbi4iLCJwYXRoLWxvZ3MiOiJQYWQgbmFhciBsb2diZXN0YW5kZW4iLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYWQgaXMgdmVyZWlzdC4iLHJlbW90ZToiQ29uZmlndXJhdGllIG9wIGFmc3RhbmQiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJlZ2lzdHJhdGllIG5pdmVhdSIsInJlbW92ZS1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB2ZXJ3aWpkZXJlbiIsInNhdmUtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBvcHNsYWFuIiwic2VjdXJpdHktdHlwZSI6IlNvb3J0IGJldmVpbGlnaW5nIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9lZ2FuZyB0b3QgdG9rZW4iLHRsczoiVExTIChUTFMpIn0sc3RvcmFnZToiT3BzbGFnIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSBhYW50YWwgcmVjb3JkcyBpbiBiZXN0YW5kIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbWFhbCBhYW50YWwgYmVzdGFuZGVuIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBhYW50YWwgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtbWVyIGlzIHZlcmVpc3QuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gYWFudGFsIHJlY29yZHMgaW4gb3BzbGFnIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIGFhbnRhbCByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbWFsZSByZWNvcmRzIHppam4gdmVyZWlzdC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1heGltYWxlIHBha2tldGdyb290dGUgdm9vciBldmVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIGFhbnRhbCBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1tZXIgaXMgbmlldCBnZWxkaWcuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJEZSBtYXhpbWFsZSBwYWtrZXRncm9vdHRlIHZhbiBoZXQgZXZlbnQgaXMgdmVyZWlzdC4iLCJzdG9yYWdlLXBhdGgiOiJPcHNsYWcgcGFkIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiT3BzbGFncGFkIGlzIHZlcmVpc3QuIiwic3RvcmFnZS10eXBlIjoiVHlwZSBvcHNsYWciLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik9wc2xhZyB2YW4gYmVzdGFuZGVuIiwibWVtb3J5LXN0b3JhZ2UiOiJHZWhldWdlbiBvcHNsYWcifSx0aGluZ3Nib2FyZDoiRGluZ2VuIEJvcmQiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQtZ2FzdGhlZXIiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiU2VydmVyIGhvc3QgaXMgdmVyZWlzdC4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmQtcG9vcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkhldCBtYXhpbWFsZSBwb29ydG51bW1lciBpcyA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6IkhldCBtaW5pbWFsZSBwb29ydG51bW1lciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvb3J0IGlzIG5pZXQgZ2VsZGlnLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb29ydCBpcyB2ZXJlaXN0LiIsdGlkeToiT3JkZWxpamsiLCJ0aWR5LXRpcCI6Ik9wZ2VydWltZGUgY29uZmlndXJhdGllIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmF0aWUgdmFuIGNvbm5lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhZCBuYWFyIENBLWNlcnRpZmljYWF0IG9wIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYWQgbmFhciBjbGllbnRjZXJ0aWZpY2FhdCBvcCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYWQgbmFhciBwcml2w6lzbGV1dGVsIG9wIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlZvbGxlZGlnIHNjaGVybSBpbi0gZW4gdWl0c2NoYWtlbGVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aWUgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQ29uZmlndXJhdGllIEpTT04gdG9ldm9lZ2VuL2JpandlcmtlbiJ9LGpvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2rEmSIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3dlIHrFgsSFY3plIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJXxYLEhWN6IHrFgsSFY3plIiwiY29ubmVjdG9yLW5hbWUiOiJOYXp3YSB6xYLEhWN6YSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTmF6d2EgesWCxIVjemEgamVzdCB3eW1hZ2FuYS4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cCB6xYLEhWN6YSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiVHlwIHrFgsSFY3phIGplc3Qgd3ltYWdhbnkuIixjb25uZWN0b3JzOiJLb25maWd1cmFjamEgesWCxIVjenkiLCJjb25uZWN0b3JzLWNvbmZpZyI6IkNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOYW1lIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoiVHlwZSIsImNvbm5lY3RvcnMtdGFibGUtc3RhdHVzIjoiU3RhdHVzIiwiY29ubmVjdG9ycy10YWJsZS1hY3Rpb25zIjoiQWN0aW9ucyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiS2V5IiwiY29ubmVjdG9ycy10YWJsZS1jbGFzcyI6IkNsYXNzIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXN1bHQiLCJycGMtY29tbWFuZC1lZGl0LXBhcmFtcyI6IkVkaXQgcGFyYW1ldGVycyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkdlbmVyYWwgQ29uZmlndXJhdGlvbiIsImRvY2tlci1sYWJlbCI6IkluIG9yZGVyIHRvIHJ1biBUaGluZ3NCb2FyZCBJb1QgZ2F0ZXdheSBpbiBkb2NrZXIgd2l0aCBjcmVkZW50aWFscyBmb3IgdGhpcyBkZXZpY2UgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcy4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJVdHfDs3J6IG5vd3kgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQ3p5IG5hIHBld25vIGNoY2VzeiB1dHdvcnp5xIcgbm93eSBnYXRld2F5IG8gbmF6d2llOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IlVzdcWEIGtvbmZpZ3VyYWNqxJkiLCJkb3dubG9hZC10aXAiOiJQb2JpZXJ6IHBsaWsga29uZmlndXJhY3lqbnkiLCJkcm9wLWZpbGUiOiJEcm9wIGZpbGUgaGVyZSBvciIsZ2F0ZXdheToiV2VqxZtjaWUiLCJnYXRld2F5LWV4aXN0cyI6IlVyesSFZHplbmllIG8gdGVqIHNhbWVqIG5hendpZSBqdcW8IGlzdG5pZWplLiIsImdhdGV3YXktbmFtZSI6Ik5hendhIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOYXp3YSBHYXRld2F5J2EgamVzdCB3eW1hZ2FuYS4iLCJnYXRld2F5LXNhdmVkIjoiS29uZmlndXJhY2phIEdhdGV3ZXknYSB6b3N0YcWCYSBwb215xZtsbmllIHphcGlzYW5hLiIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCAoaW4gc2VjKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoiSW5hY3Rpdml0eSB0aW1lb3V0IChpbiBzZWMpIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgcmVxdWlyZWQiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgbm90IHZhbGlkIiwianNvbi1wYXJzZSI6Ik5pZXByYXdpZMWCb3d5IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmllIG1vxbxlIGJ5xIcgcHVzdGUuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDAiLCJuby1jb25uZWN0b3JzIjoiQnJhayB6xYLEhWN6eSIsIm5vLWRhdGEiOiJCcmFrIGtvbmZpZ3VyYWNqaSIsIm5vLWdhdGV3YXktZm91bmQiOiJOaWUgem5hbGV6aW9ubyBnYXRld2F5J2EuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pZSB6bmFsZXppb25vLiIsInBhdGgtbG9ncyI6IsWaY2llxbxrYSBkbyBwbGlrw7N3IGR6aWVubmlrYSIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IsWaY2llxbxrYSBqZXN0IHd5bWFnYW5hLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiS2VlcCBhbGl2ZSBwZXJtaXQgd2l0aG91dCBjYWxscyIscmVtb3RlOiJaZGFsbmEga29uZmlndXJhY2phIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJQb3ppb20gbG9nb3dhbmlhIiwicmVtb3ZlLWVudHJ5IjoiVXN1xYQga29uZmlndXJhY2rEmSIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLG90aGVyOiJPdGhlciIsInNhdmUtdGlwIjoiWmFwaXN6IHBsaWsga29uZmlndXJhY3lqbnkiLCJzZWN1cml0eS10eXBlIjoiUm9kemFqIHphYmV6cGllY3plbmlhIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9rZW4gZG9zdMSZcHUiLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTa8WCYWRvd2FuaWUiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYWtzeW1hbG5hIGxpY3piYSByZWtvcmTDs3cgdyBwbGlrdSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc3ltYWxuYSBsaWN6YmEgcGxpa8OzdyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWVyIGplc3Qgd3ltYWdhbnkuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyB3IHBhbWnEmWNpIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbWFsbmEgbGljemJhIHJla29yZMOzdyB0byAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWVyIGplc3QgbmllcHJhd2lkxYJvd3kuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiJSZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJNYXggcmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6Ik1heCBSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgiOiJEYXRhIGZvbGRlciBwYXRoIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiRGF0YSBmb2xkZXIgcGF0aCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCBqZXN0IHd5bWFnYW55LiIsInN0b3JhZ2UtcGF0aCI6IsWaY2llxbxrYSBwcnplY2hvd3l3YW5pYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IsWaY2llxbxrYSBkbyBwcnplY2hvd3l3YW5pYSBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCBza8WCYWRvd2FuaWEiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik5vxZtuaWsgZGFueWNoIiwibWVtb3J5LXN0b3JhZ2UiOiJQcnplY2hvd3l3YW5pZSBwYW1pxJljaSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiR29zcG9kYXJ6IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamVzdCB3eW1hZ2FueS4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4IjoiTWFrc3ltYWxueSBudW1lciBwb3J0dSB0byA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltYWxueSBudW1lciBwb3J0dSB0byAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBqZXN0IHd5bWFnYW55LiIsdGlkeToiVXBvcnrEhWRrdWoiLCJ0aWR5LXRpcCI6IlVwb3J6xIVka293YW5hIGtvbmZpZ3VyYWNqYSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiWsWCxIVjemUge3t0eXBlTmFtZX19IGtvbmZpZ3VyYWNqYSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoixZpjaWXFvGthIGRvIGNlcnR5ZmlrYXR1IENBIG5hIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiLFmmNpZcW8a2EgZG8gY2VydHlmaWthdHUga2xpZW50YSBuYSBnYXRld2F5IiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoiTWVzc2FnZXMgVFRMIGluIGRheXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLW1pbiI6Ik1pbiBudW1iZXIgaXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtcXR0LXFvcyI6IlFvUyIsIm1xdHQtcW9zLXJlcXVpcmVkIjoiUW9TIGlzIHJlcXVpcmVkIiwibXF0dC1xb3MtcmFuZ2UiOiJRb1MgdmFsdWVzIHJhbmdlIGlzIGZyb20gMCB0byAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLFmmNpZcW8a2EgZG8ga2x1Y3phIHByeXdhdG5lZ28gbmEgYnJhbWNlIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJQcnplxYLEhWN6IHRyeWIgcGXFgm5vZWtyYW5vd3kiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNqYSBKU09OKiIsInVwZGF0ZS1jb25maWciOiJEb2Rhai96YWt0dWFsaXp1aiBrb25maWd1cmFjasSZIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiJFbmFibGVzIHJlbW90ZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiRW5hYmxlcyByZW1vdGUgY29udHJvbCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIHRoZSBnYXRld2F5IGZyb20gdGhlIFJlbW90ZSBTaGVsbCB3aWRnZXQiLGhvc3Q6Ikhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgVGhpbmdzQm9hcmQgc2VydmVyIixwb3J0OiJQb3J0IG9mIE1RVFQgc2VydmljZSBvbiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHRva2VuOiJBY2Nlc3MgdG9rZW4gZm9yIHRoZSBnYXRld2F5IGZyb20gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2xpZW50LWlkIjoiTVFUVCBjbGllbnQgaWQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIix1c2VybmFtZToiTVFUVCB1c2VybmFtZSBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBhc3N3b3JkOiJNUVRUIHBhc3N3b3JkIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIsImNhLWNlcnQiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUiLCJkYXRlLWZvcm0iOiJEYXRlIGZvcm1hdCBpbiBsb2cgbWVzc2FnZSIsImRhdGEtZm9sZGVyIjoiUGF0aCB0byBmb2xkZXIsIHRoYXQgd2lsbCBjb250YWlucyBkYXRhIChSZWxhdGl2ZSBvciBBYnNvbHV0ZSkiLCJsb2ctZm9ybWF0IjoiTG9nIG1lc3NhZ2UgZm9ybWF0IiwicmVtb3RlLWxvZyI6IkVuYWJsZXMgcmVtb3RlIGxvZ2dpbmcgYW5kIGxvZ3MgcmVhZGluZyBmcm9tIHRoZSBnYXRld2F5IiwiYmFja3VwLWNvdW50IjoiSWYgYmFja3VwIGNvdW50IGlzID4gMCwgd2hlbiBhIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXAgY291bnQgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQiLHN0b3JhZ2U6IlByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gZm9yIHNhdmluZyBpbmNvbWluZyBkYXRhIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBwbGF0Zm9ybSIsIm1heC1maWxlLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBmaWxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiJNYXhpbXVtIGNvdW50IG9mIHJlY29yZHMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiBvbmUgZmlsZSIsInJlYWQtcmVjb3JkLWNvdW50IjoiQ291bnQgb2YgbWVzc2FnZXMgdG8gZ2V0IGZyb20gc3RvcmFnZSBhbmQgc2VuZCB0byBUaGluZ3NCb2FyZCIsIm1heC1yZWNvcmRzLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBkYXRhIGluIHN0b3JhZ2UgYmVmb3JlIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJ0dGwtY2hlY2staG91ciI6IkhvdyBvZnRlbiB3aWxsIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gZGF5cyB0aGF0IHN0b3JhZ2Ugd2lsbCBzYXZlIGRhdGEiLGNvbW1hbmRzOiJDb21tYW5kcyBmb3IgY29sbGVjdGluZyBhZGRpdGlvbmFsIHN0YXRpc3RpYyIsYXR0cmlidXRlOiJTdGF0aXN0aWMgdGVsZW1ldHJ5IGtleSIsdGltZW91dDoiVGltZW91dCBmb3IgY29tbWFuZCBleGVjdXRpbmciLGNvbW1hbmQ6IlRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLCB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciB0ZWxlbWV0cnkiLCJjaGVjay1kZXZpY2UtYWN0aXZpdHkiOiJFbmFibGVzIG1vbml0b3IgdGhlIGFjdGl2aXR5IG9mIGVhY2ggY29ubmVjdGVkIGRldmljZSIsImluYWN0aXZpdHktdGltZW91dCI6IlRpbWUgYWZ0ZXIgd2hvc2UgdGhlIGdhdGV3YXkgd2lsbCBkaXNjb25uZWN0IGRldmljZSIsImluYWN0aXZpdHktcGVyaW9kIjoiUGVyaW9kaWNpdHkgb2YgZGV2aWNlIGFjdGl2aXR5IGNoZWNrIiwibWluaW1hbC1wYWNrLWRlbGF5IjoiRGVsYXkgYmV0d2VlbiBzZW5kaW5nIHBhY2tzIG9mIG1lc3NhZ2VzIChEZWNyZWFzaW5nIHRoaXMgc2V0dGluZyByZXN1bHRzIGluIGluY3JlYXNlZCBDUFUgdXNhZ2UpIixxb3M6IlF1YWxpdHkgb2YgU2VydmljZSBpbiBNUVRUIG1lc3NhZ2luZyAoMCAtIGF0IG1vc3Qgb25jZSwgMSAtIGF0IGxlYXN0IG9uY2UpIiwic2VydmVyLXBvcnQiOiJOZXR3b3JrIHBvcnQgb24gd2hpY2ggR1JQQyBzZXJ2ZXIgd2lsbCBsaXN0ZW4gZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLiIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiTWF4aW11bSB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgZm9yIGEga2VlcGFsaXZlIHBpbmcgcmVzcG9uc2UgYmVmb3JlIGNvbnNpZGVyaW5nIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYXRpb24gYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBSUEMgY2FsbC4iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4aW11bSBudW1iZXIgb2Yga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgdGhhdCB0aGUgc2VydmVyIGNhbiBzZW5kIHdpdGhvdXQgcmVjZWl2aW5nIGFueSBkYXRhIGJlZm9yZSBpdCBjb25zaWRlcnMgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGJlaW5nIHNlbnQgb3IgcmVjZWl2ZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJBbGxvdyBzZXJ2ZXIgdG8ga2VlcCB0aGUgR1JQQyBjb25uZWN0aW9uIGFsaXZlIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIFJQQyBjYWxscy4ifX0sS289eyJhZGQtZW50cnkiOiJBZGljaW9uYXIgY29uZmlndXJhw6fDo28iLCJjb25uZWN0b3ItYWRkIjoiQWRpY2lvbmFyIG5vdm8gY29uZWN0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkhhYmlsaXRhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tZSBkbyBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTyBub21lIGRvIGNvbmVjdG9yIMOpIG9icmlnYXTDs3Jpby4iLCJjb25uZWN0b3ItdHlwZSI6IlRpcG8gZGUgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6Ik8gdGlwbyBkZSBjb25lY3RvciDDqSBvYnJpZ2F0w7NyaW8uIixjb25uZWN0b3JzOiJDb25maWd1cmHDp8OjbyBkZSBjb25lY3RvcmVzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JpYXIgdW0gbm92byBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJUZW0gY2VydGV6YSBkZSBxdWUgZGVzZWphIGNyaWFyIHVtIG5vdm8gZ2F0ZXdheSBjb20gbyBub21lOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiRXhjbHVpciBjb25maWd1cmHDp8OjbyIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGRlIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkrDoSBleGlzdGUgdW0gZGlzcG9zaXRpdm8gY29tIG8gbWVzbW8gbm9tZS4iLCJnYXRld2F5LW5hbWUiOiJOb21lIGRvIGdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJPIG5vbWUgZG8gZ2F0ZXdheSDDqSBvYnJpZ2F0w7NyaW8uIiwiZ2F0ZXdheS1zYXZlZCI6IkEgY29uZmlndXJhw6fDo28gZG8gZ2F0ZXdheSBmb2kgc2FsdmEgY29ycmV0YW1lbnRlLiIsImpzb24tcGFyc2UiOiJKU09OIGludsOhbGlkby4iLCJqc29uLXJlcXVpcmVkIjoiTyBjYW1wbyBuw6NvIHBvZGUgZXN0YXIgZW0gYnJhbmNvLiIsIm5vLWNvbm5lY3RvcnMiOiJTZW0gY29uZWN0b3JlcyIsIm5vLWRhdGEiOiJTZW0gY29uZmlndXJhw6fDtWVzIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5lbmh1bSBnYXRld2F5IGVuY29udHJhZG8uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG7Do28gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJDYW1pbmhvIHBhcmEgYXJxdWl2b3MgZGUgbG9nIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiTyBjYW1pbmhvIMOpIG9icmlnYXTDs3JpbyIscmVtb3RlOiJDb25maWd1cmHDp8OjbyByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik7DrXZlbCBkZSByZWdpc3RybyBlbSBsb2ciLCJyZW1vdmUtZW50cnkiOiJSZW1vdmVyIGNvbmZpZ3VyYcOnw6NvIiwic2F2ZS10aXAiOiJTYWx2YXIgYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyIsInNlY3VyaXR5LXR5cGUiOiJUaXBvIGRlIHNlZ3VyYW7Dp2EiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkZSBBY2Vzc28iLHRsczoiVExTIn0sc3RvcmFnZToiQXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJxdWl2byIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTsO6bWVybyBtw6F4aW1vIGRlIGFycXVpdm9zIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gw6kgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik8gbsO6bWVybyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gZGUgcmVnaXN0cm9zIMOpIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTyBuw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIMOpIG9icmlnYXTDs3Jpby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIMOpIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik8gbsO6bWVybyBuw6NvIMOpIHbDoWxpZG8uIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJPIHRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1wYXRoIjoiQ2FtaW5obyBkZSBhcm1hemVuYW1lbnRvIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiTyBjYW1pbmhvIGRlIGFybWF6ZW5hbWVudG8gw6kgb2JyaWdhdMOzcmlvLiIsInN0b3JhZ2UtdHlwZSI6IlRpcG8gZGUgYXJtYXplbmFtZW50byIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQXJtYXplbmFtZW50byBkZSBhcnF1aXZvIiwibWVtb3J5LXN0b3JhZ2UiOiJBcm1hemVuYW1lbnRvIGRlIG1lbcOzcmlhIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikhvc3QgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiTyBob3N0IMOpIG9icmlnYXTDs3Jpby4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydGEgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik8gbsO6bWVybyBtw6F4aW1vIGRlIHBvcnRhcyDDqSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIGRlIHBvcnRhcyDDqSAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IkEgcG9ydGEgbsOjbyDDqSB2w6FsaWRhLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJBIHBvcnRhIMOpIG9icmlnYXTDs3JpYS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IkNvbmZpZyBUaWR5IEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmHDp8OjbyBkbyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IkNhbWluaG8gcGFyYSBjZXJ0aWZpY2FkbyBkZSBBdXRvcmlkYWRlIGRlIENlcnRpZmljYcOnw6NvIG5vIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDYW1pbmhvIHBhcmEgY2VydGlmaWNhZG8gZGUgY2xpZW50ZSBubyBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJDYW1pbmhvIHBhcmEgY2hhdmUgcHJpdmFkYSBubyBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJBbHRlcm5hciB0ZWxhIGludGVpcmEiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYcOnw6NvIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkaWNpb25hci9hdHVhbGl6YXIgY29uZmlndXJhw6fDo28gZGUgSlNPTiJ9LCRvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2lqbyIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3YgcHJpa2xqdcSNZWsiLCJjb25uZWN0b3ItZW5hYmxlZCI6Ik9tb2dvxI1pIHByaWtsanXEjWVrIiwiY29ubmVjdG9yLW5hbWUiOiJJbWUgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkltZSBwcmlrbGp1xI1rYSBqZSBvYnZlem5vLiIsImNvbm5lY3Rvci10eXBlIjoiVnJzdGEgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IlphaHRldmEgc2UgdnJzdGEgcHJpa2xqdcSNa2EuIixjb25uZWN0b3JzOiJLb25maWd1cmFjaWphIHByaWtsanXEjWtvdiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlVzdHZhcmkgbm92IHByZWhvZCIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQWxpIHN0ZSBwcmVwcmnEjWFuaSwgZGEgxb5lbGl0ZSB1c3R2YXJpdGkgbm92IHByZWhvZCB6IGltZW5vbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6Ikl6YnJpxaFpIGtvbmZpZ3VyYWNpam8iLCJkb3dubG9hZC10aXAiOiJQcmVub3Mga29uZmlndXJhY2lqc2tlIGRhdG90ZWtlIixnYXRld2F5OiJQcmVob2QiLCJnYXRld2F5LWV4aXN0cyI6Ik5hcHJhdmEgeiBpc3RpbSBpbWVub20gxb5lIG9ic3RhamEuIiwiZ2F0ZXdheS1uYW1lIjoiSW1lIHByZWhvZGEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJJbWUgcHJlaG9kYSBqZSBvYnZlem5vLiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjaWphIHByZWhvZGEgamUgdXNwZcWhbm8gc2hyYW5qZW5hLiIsImpzb24tcGFyc2UiOiJOZXZlbGphdmVuIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGplIG5lIHNtZSBiaXRpIHByYXpuby4iLCJuby1jb25uZWN0b3JzIjoiTmkgcHJpa2xqdcSNa292Iiwibm8tZGF0YSI6IkJyZXoga29uZmlndXJhY2lqIiwibm8tZ2F0ZXdheS1mb3VuZCI6IlByZWhvZCBuaSBuYWpkZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pIG1vZ2/EjWUgbmFqdGkuIiwicGF0aC1sb2dzIjoiUG90IGRvIGRuZXZuacWha2loIGRhdG90ZWsiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQb3QgamUgb2J2ZXpuYS4iLHJlbW90ZToiT2RkYWxqZW5hIGtvbmZpZ3VyYWNpamEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJhdmVuIGJlbGXFvmVuamEiLCJyZW1vdmUtZW50cnkiOiJPZHN0cmFuaSBrb25maWd1cmFjaWpvIiwic2F2ZS10aXAiOiJTaHJhbmkga29uZmlndXJhY2lqc2tvIGRhdG90ZWtvIiwic2VjdXJpdHktdHlwZSI6IlZyc3RhIHphxaHEjWl0ZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkRvc3RvcG5pIMW+ZXRvbiIsdGxzOiJUTFMifSxzdG9yYWdlOiJTaHJhbWJhIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgZGF0b3Rla2kiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik5hanZlxI1qZSDFoXRldmlsbyBkYXRvdGVrIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLFoHRldmlsa2EgamUgb2J2ZXpuYS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgcG9tbmlsbmlrdSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyB6YXBpc292IGplIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoixaB0ZXZpbGthIG5pIHZlbGphdm5hLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJaYWh0ZXZhbiBqZSBuYWp2ZcSNIHphcGlzb3YuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJOYWp2ZcSNamEgdmVsaWtvc3QgcGFrZXRhIGRvZ29ka292Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJaYWh0ZXZhbmEgamUgbmFqdmXEjWphIHZlbGlrb3N0IHBha2V0YSBkb2dvZGtvdi4iLCJzdG9yYWdlLXBhdGgiOiJQb3QgcG9tbmlsbmlrYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlphaHRldmFuYSBqZSBwb3QgZG8gcG9tbmlsbmlrYS4iLCJzdG9yYWdlLXR5cGUiOiJWcnN0YSBwb21uaWxuaWthIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJTaHJhbWJhIGRhdG90ZWsiLCJtZW1vcnktc3RvcmFnZSI6IlNwb21pbiBwb21uaWxuaWthIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikdvc3RpdGVsaiBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJQb3RyZWJlbiBqZSBnb3N0aXRlbGouIiwidGhpbmdzYm9hcmQtcG9ydCI6IlZyYXRhIFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJOYWp2ZcSNamEgxaF0ZXZpbGthIHZyYXQgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJOYWptYW5qxaFhIMWhdGV2aWxrYSB2cmF0IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiVnJhdGEgbmlzbyB2ZWxqYXZuYS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG90cmVibmEgc28gdnJhdGEuIix0aWR5OiJVcmVqZW5vIiwidGlkeS10aXAiOiJVcmVqZW5hIGtvbmZpZ3VyYWNpamEgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IktvbmZpZ3VyYWNpamEga29uZWt0b3JqYSB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBvdCBkbyBwb3RyZGlsYSBDQSBuYSBwcmVob2R1IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUG90IGRvIHBvdHJkaWxhIHN0cmFua2UgbmEgcHJlaG9kdSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUG90IGRvIHphc2VibmVnYSBrbGp1xI1hIG5hIHByZWhvZHUiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlByZWtsb3AgbmEgY2Vsb3phc2xvbnNraSBuYcSNaW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNpamEgSlNPTiAqIiwidXBkYXRlLWNvbmZpZyI6IkRvZGFqIC8gcG9zb2RvYmkga29uZmlndXJhY2lqbyBKU09OIn0sWW89eyJhZGQtZW50cnkiOiJZYXDEsWxhbmTEsXJtYSBla2xlIiwiY29ubmVjdG9yLWFkZCI6IlllbmkgYmHEn2xhecSxY8SxIGVrbGUiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkJhxJ9sYXnEsWPEsXnEsSBldGtpbmxlxZ90aXIiLCJjb25uZWN0b3ItbmFtZSI6IkJhxJ9sYXnEsWPEsSBhZMSxIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJCYcSfbGF5xLFjxLEgYWTEsSBnZXJla2xpLiIsImNvbm5lY3Rvci10eXBlIjoiQmHEn2xhecSxY8SxIHRpcGkiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkJhxJ9sYXnEsWPEsSB0w7xyw7wgZ2VyZWtsaS4iLGNvbm5lY3RvcnM6IkJhxJ9sYXnEsWPEsWxhcsSxbiB5YXDEsWxhbmTEsXJtYXPEsSIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVyIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiIne3tnYXRld2F5TmFtZX19JyBhZMSxbmRhIHllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo/IixkZWxldGU6IllhcMSxbGFuZMSxcm1hecSxIHNpbCIsImRvd25sb2FkLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGluZGlyaW4iLGdhdGV3YXk6IkHEnyBnZcOnaWRpIiwiZ2F0ZXdheS1leGlzdHMiOiJBeW7EsSBhZGEgc2FoaXAgY2loYXogemF0ZW4gdmFyLiIsImdhdGV3YXktbmFtZSI6IkHEnyBnZcOnaWRpIGFkxLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJBxJ8gZ2XDp2lkaSBhZMSxIGdlcmVrbGkuIiwiZ2F0ZXdheS1zYXZlZCI6IkHEnyBnZcOnaWRpIHlhcMSxbGFuZMSxcm1hc8SxIGJhxZ9hcsSxeWxhIGtheWRlZGlsZGkuIiwianNvbi1wYXJzZSI6Ikdlw6dlcmxpIGJpciBKU09OIGRlxJ9pbC4iLCJqc29uLXJlcXVpcmVkIjoiQWxhbiBib8WfIG9sYW1hei4iLCJuby1jb25uZWN0b3JzIjoiQmHEn2xhecSxY8SxIHlvayIsIm5vLWRhdGEiOiJZYXDEsWxhbmTEsXJtYSB5b2siLCJuby1nYXRld2F5LWZvdW5kIjoiQcSfIGdlw6dpZGkgYnVsdW5hbWFkxLEuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIGJ1bHVuYW1hZMSxLiIsInBhdGgtbG9ncyI6IkxvZyBkb3N5YWxhcsSxIHlvbHUiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJMb2cgZG9zeWFsYXLEsSBkaXppbmkgZ2VyZWtsaS4iLHJlbW90ZToiVXpha3RhbiB5YXDEsWxhbmTEsXJtYSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nbGFtYSBzZXZpeWVzaSIsInJlbW92ZS1lbnRyeSI6IllhcMSxbGFuZMSxcm1hecSxIGthbGTEsXIiLCJzYXZlLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGtheWRldCIsInNlY3VyaXR5LXR5cGUiOiJHw7x2ZW5saWsgdMO8csO8Iiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiQWNjZXNzIFRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IkRlcG9sYW1hIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiRG9zeWFkYWtpIG1ha3NpbXVtIGthecSxdCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc2ltdW0gZG9zeWEgc2F5xLFzxLEiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIHNhecSxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJTYXnEsSBnZcOnZXJsaSBkZcSfaWwuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJTYXnEsSBnZXJla2xpLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJEZXBvZGFraSBtYWtzaW11bSBrYXnEsXQiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0ga2F5xLF0IHNhecSxc8SxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlNhecSxIGdlw6dlcmxpIGRlxJ9pbC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWFrc2ltdW0ga2F5xLF0IGdlcmVrbGkuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYWtzaW11bSBldGtpbmxpayBwYWtldGkgYm95dXR1Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW11bSBzYXnEsSAxJ2Rpci4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiU2F5xLEgZ2XDp2VybGkgZGXEn2lsLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrc2ltdW0gZXRraW5saWsgcGFrZXRpIGJveXV0dSBnZXJla2xpLiIsInN0b3JhZ2UtcGF0aCI6IkRlcG9sYW1hIHlvbHUiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJEZXBvbGFtYSB5b2x1IGdlcmVrbGkuIiwic3RvcmFnZS10eXBlIjoiRGVwb2xhbWEgdMO8csO8Iiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJEb3N5YSBkZXBvbGFtYSIsIm1lbW9yeS1zdG9yYWdlIjoiQmVsbGVrIGRlcG9sYW1hIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJkIGhvc3QiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiSG9zdCBnZXJla2xpLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzaW11bSBwb3J0IG51bWFyYXPEsSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltdW0gcG9ydCBudW1hcmFzxLEgMSdkaXIuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBnZcOnZXJsaSBkZcSfaWwuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgZ2VyZWtsaS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IlRpZHkgY29uZmlnIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25uZWN0b3Ige3t0eXBlTmFtZX19IGNvbmZpZ3VyYXRpb24iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgb24gZ2F0ZXdheSIsInRvZ2dsZS1mdWxsc2NyZWVuIjoiVG9nZ2xlIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWRkL3VwZGF0ZSBjb25maWd1cmF0aW9uIEpTT04ifSxRbz17ImFkZC1lbnRyeSI6Iua3u+WKoOmFjee9riIsYWR2YW5jZWQ6IumrmOe6pyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IuajgOafpeiuvuWkh+a0u+WKqCIsY29tbWFuZDoiRG9ja2Vy5ZG95LukIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlcuWRveS7pOW3suWkjeWItuWIsOWJqui0tOadvyIsY29uZmlndXJhdGlvbjoi6YWN572uIiwiY29ubmVjdG9yLWFkZCI6Iua3u+WKoOi/nuaOpeWZqCIsImNvbm5lY3Rvci1lbmFibGVkIjoi5ZCv55So6L+e5o6l5ZmoIiwiY29ubmVjdG9yLW5hbWUiOiLov57mjqXlmajlkI3np7AiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Iui/nuaOpeWZqOWQjeensOW/heWhq+OAgiIsImNvbm5lY3Rvci10eXBlIjoi6L+e5o6l5Zmo57G75Z6LIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiLov57mjqXlmajnsbvlnovlv4XloavjgIIiLGNvbm5lY3RvcnM6Iui/nuaOpeWZqOmFjee9riIsImNvbm5lY3RvcnMtY29uZmlnIjoi6L+e5o6l5Zmo6YWN572uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoi5bey5ZCv55SoIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi5ZCN56ewIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoi57G75Z6LIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiLnirbmgIEiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiLmk43kvZwiLCJjb25uZWN0b3JzLXRhYmxlLWtleSI6IumUriIsImNvbm5lY3RvcnMtdGFibGUtY2xhc3MiOiLnsbsiLCJycGMtY29tbWFuZC1zZW5kIjoi5Y+R6YCBIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi57uT5p6cIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLnvJbovpHlj4LmlbAiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLpgJrnlKjphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLliJvlu7rnvZHlhbMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuehruWumuimgeWIm+W7uuWQjeS4uiAne3tnYXRld2F5TmFtZX19JyDnmoTmlrDnvZHlhbPvvJ8iLCJjcmVhdGVkLXRpbWUiOiLliJvlu7rml7bpl7QiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoi6YWN572u5bCG6KKr5Yig6ZmkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiLlj6rmnInlr7nnvZHlhbPov5vooYzniannkIborr/pl67ml7bvvIzmiY3mnInlj6/og73lhbPpl63ov5znqIvphY3nva7jgILmiYDmnInlhYjliY3nmoTphY3nva7pg73lsIbooqvliKDpmaTjgII8YnI+PGJyPlxu6KaB5YWz6Zet6YWN572u77yM6K+35Zyo5LiL6Z2i6L6T5YWl572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0Ijoi572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoi572R5YWz5ZCN56ew5piv5b+F6ZyA55qEIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLlhbPpl60iLGRlbGV0ZToi5Yig6Zmk6YWN572uIiwiZG93bmxvYWQtdGlwIjoi5LiL6L296YWN572uIiwiZHJvcC1maWxlIjoi5bCG5paH5Lu25ouW5pS+5Yiw5q2k5aSE5oiWIixnYXRld2F5OiLnvZHlhbMiLCJnYXRld2F5LWV4aXN0cyI6IuWQjOWQjeiuvuWkh+W3suWtmOWcqOOAgiIsImdhdGV3YXktbmFtZSI6Iue9keWFs+WQjeensCIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Iue9keWFs+WQjeensOW/heWhq+OAgiIsImdhdGV3YXktc2F2ZWQiOiLlt7LmiJDlip/kv53lrZjnvZHlhbPphY3nva7jgIIiLGdycGM6IkdSUEMiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuS/neaMgei/nuaOpei2heaXtu+8iOavq+enku+8iSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoi6ZyA6KaB5L+d5oyB6L+e5o6l6LaF5pe2IiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi5L+d5oyB6L+e5o6l6LaF5pe25LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXBhdHRlcm4iOiLkv53mjIHov57mjqXotoXml7bml6DmlYgiLCJncnBjLWtlZXAtYWxpdmUiOiLkv53mjIHov57mjqXvvIjmr6vnp5LvvIkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLpnIDopoHkv53mjIHov57mjqUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoi5L+d5oyB6L+e5o6l5LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoi5L+d5oyB6L+e5o6l5peg5pWIIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi5pyA5bCPUGluZ+mXtOmalO+8iOavq+enku+8iSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6IumcgOimgeacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoi5pyA5bCPUGluZ+mXtOmalOS4jeiDveWwj+S6jjEiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVybiI6IuacgOWwj1Bpbmfpl7TpmpTml6DmlYgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6IuaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpTvvIjmr6vnp5LvvIkiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5LiN6IO95bCP5LqOMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5peg5pWIIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbAiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsOS4jeiDveWwj+S6jjEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6IuaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbDml6DmlYgiLCJpbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzIjoi5LiN5rS76LeD5qOA5p+l5pyf77yI56eS77yJIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IumcgOimgeS4jea0u+i3g+ajgOafpeacnyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoi5LiN5rS76LeD5qOA5p+l5pyf5LiN6IO95bCP5LqOMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+ajgOafpeacn+aXoOaViCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi5LiN5rS76LeD6LaF5pe277yI56eS77yJIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiLpnIDopoHkuI3mtLvot4PotoXml7YiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiLkuI3mtLvot4PotoXml7bkuI3og73lsI/kuo4xIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+i2heaXtuaXoOaViCIsImpzb24tcGFyc2UiOiLml6DmlYjnmoRKU09O44CCIiwianNvbi1yZXF1aXJlZCI6IuWtl+auteS4jeiDveS4uuepuuOAgiIsbG9nczp7bG9nczoi5pel5b+XIixkYXlzOiLlpKkiLGhvdXJzOiLlsI/ml7YiLG1pbnV0ZXM6IuWIhumSnyIsc2Vjb25kczoi56eSIiwiZGF0ZS1mb3JtYXQiOiLml6XmnJ/moLzlvI8iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IumcgOimgeaXpeacn+agvOW8jyIsImxvZy1mb3JtYXQiOiLml6Xlv5fmoLzlvI8iLCJsb2ctdHlwZSI6IuaXpeW/l+exu+WeiyIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiLpnIDopoHml6Xlv5fmoLzlvI8iLHJlbW90ZToi6L+c56iL5pel5b+X6K6w5b2VIiwicmVtb3RlLWxvZ3MiOiLov5znqIvml6Xlv5ciLGxvY2FsOiLmnKzlnLDml6Xlv5forrDlvZUiLGxldmVsOiLml6Xlv5fnuqfliKsiLCJmaWxlLXBhdGgiOiLmlofku7bot6/lvoQiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHmlofku7bot6/lvoQiLCJzYXZpbmctcGVyaW9kIjoi5pel5b+X5L+d5a2Y5pyf6ZmQIiwic2F2aW5nLXBlcmlvZC1taW4iOiLml6Xlv5fkv53lrZjmnJ/pmZDkuI3og73lsI/kuo4xIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IumcgOimgeaXpeW/l+S/neWtmOacn+mZkCIsImJhY2t1cC1jb3VudCI6IuWkh+S7veaVsOmHjyIsImJhY2t1cC1jb3VudC1taW4iOiLlpIfku73mlbDph4/kuI3og73lsI/kuo4xIiwiYmFja3VwLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB5aSH5Lu95pWw6YePIn0sIm1pbi1wYWNrLXNlbmQtZGVsYXkiOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/vvIjmr6vnp5LvvIkiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoi5pyA5bCP5YyF5Y+R6YCB5bu26L+f5piv5b+F6ZyA55qEIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/kuI3og73lsI/kuo4wIiwibm8tY29ubmVjdG9ycyI6IuaXoOi/nuaOpeWZqCIsIm5vLWRhdGEiOiLmsqHmnInphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw572R5YWz44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IuacquaJvuWIsCAne3tpdGVtfX0nIOOAgiIsInBhdGgtbG9ncyI6IuaXpeW/l+aWh+S7tueahOi3r+W+hCIsInBhdGgtbG9ncy1yZXF1aXJlZCI6Iui3r+W+hOaYr+W/hemcgOeahOOAgiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5L+d5oyB6L+e5o6l6K645Y+v77yM5peg6ZyA5ZON5bqUIixyZW1vdGU6Iui/nOeoi+mFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel5b+X6K6w5b2V57qn5YirIiwicmVtb3ZlLWVudHJ5Ijoi5Yig6Zmk6YWN572uIiwicmVtb3RlLXNoZWxsIjoi6L+c56iLU2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Iui/nOeoi+mFjee9riIsb3RoZXI6IuWFtuS7liIsInNhdmUtdGlwIjoi5L+d5a2Y6YWN572uIiwic2VjdXJpdHktdHlwZSI6IuWuieWFqOexu+WeiyIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Iuiuv+mXruS7pOeJjCIsInVzZXJuYW1lLXBhc3N3b3JkIjoi55So5oi35ZCN5ZKM5a+G56CBIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDorr/pl67ku6TniYwiLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyDnp4HpkqUifSwic2VydmVyLXBvcnQiOiLmnI3liqHlmajnq6/lj6MiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoi57uf6K6h5L+h5oGvIixzdGF0aXN0aWNzOiLnu5/orqHkv6Hmga8iLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLml6Dlj6/nlKjnu5/orqHkv6Hmga8iLGNvbW1hbmRzOiLlkb3ku6QiLCJzZW5kLXBlcmlvZCI6Iue7n+iuoeS/oeaBr+WPkemAgeWRqOacn++8iOenku+8iSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5piv5b+F6ZyA55qEIiwic2VuZC1wZXJpb2QtbWluIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5LiN6IO95bCP5LqONjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5peg5pWIIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u77yI56eS77yJIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u5piv5b+F6ZyA55qEIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IuajgOafpei/nuaOpeWZqOmFjee9ruS4jeiDveWwj+S6jjEiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVybiI6IuajgOafpei/nuaOpeWZqOmFjee9ruaXoOaViCIsYWRkOiLmt7vliqDlkb3ku6QiLHRpbWVvdXQ6Iui2heaXtuaXtumXtCIsInRpbWVvdXQtbXMiOiLotoXml7bml7bpl7TvvIjmr6vnp5LvvIkiLCJ0aW1lb3V0LXJlcXVpcmVkIjoi6LaF5pe25pe26Ze05piv5b+F6ZyA55qEIiwidGltZW91dC1taW4iOiLotoXml7bml7bpl7TkuI3og73lsI/kuo4xIiwidGltZW91dC1wYXR0ZXJuIjoi6LaF5pe25pe26Ze05peg5pWIIiwiYXR0cmlidXRlLW5hbWUiOiLlsZ7mgKflkI3np7AiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IuWxnuaAp+WQjeensOaYr+W/hemcgOeahCIsY29tbWFuZDoi5ZG95LukIiwiY29tbWFuZC1yZXF1aXJlZCI6IuWRveS7pOaYr+W/hemcgOeahCIsImNvbW1hbmQtcGF0dGVybiI6IuWRveS7pOaXoOaViCIscmVtb3ZlOiLliKDpmaTlkb3ku6QifSxzdG9yYWdlOiLlrZjlgqgiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiLmlofku7bkuK3nmoTmnIDlpKforrDlvZXmlbAiLCJzdG9yYWdlLW1heC1maWxlcyI6IuacgOWkp+aWh+S7tuaVsCIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLmlbDlrZfmmK/lv4XpnIDnmoTjgIIiLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoi5a2Y5YKo5Lit55qE5pyA5aSn6K6w5b2V5pWwIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6IuacgOWkp+iusOW9lemhueW/heWhq+OAgiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6IuacgOWwj+iusOW9leaVsOS4ujHjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiLmlbDlrZfkuI3lkIjms5XjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB6K+75Y+W6K6w5b2V5pWw44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTmnIDlpKfor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6IuaVsOWtl+S4jeWQiOazleOAgiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi5pyA5aSn6K+75Y+W6K6w5b2V5pWw5b+F6ZyA44CCIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoi5pWw5o2u5paH5Lu25aS56Lev5b6EIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoi6ZyA6KaB5pWw5o2u5paH5Lu25aS56Lev5b6E44CCIiwic3RvcmFnZS1wYWNrLXNpemUiOiLmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi5pyA5aSn5LqL5Lu25YyF5aSn5bCP5b+F5aGr44CCIiwic3RvcmFnZS1wYXRoIjoi5a2Y5YKo6Lev5b6EIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoi5a2Y5YKo6Lev5b6E5b+F5aGr44CCIiwic3RvcmFnZS10eXBlIjoi5a2Y5YKo57G75Z6LIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiLmlofku7blrZjlgqgiLCJtZW1vcnktc3RvcmFnZSI6IuWGheWtmOWtmOWCqCIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IuW4uOinhCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZOS4u+acuiIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiLkuLvmnLrlv4XloavjgIIiLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmTnq6/lj6MiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IuacgOWkp+err+WPo+WPt+S4ujY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/nq6/lj6Plj7fkuLox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi56uv5Y+j5peg5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Iuerr+WPo+W/heWhq+OAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6L+e5o6l5ZmoIHt7dHlwZU5hbWV9fSDphY3nva4iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6Iue9keWFs+S4ikNB6K+B5Lmm55qE6Lev5b6EIiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoi572R5YWz5LiK5a6i5oi356uv6K+B5Lmm55qE6Lev5b6EIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi5raI5oGvVFRM5qOA5p+l5bCP5pe25pWwIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi6ZyA6KaB5o+Q5L6b5raI5oGvVFRM5qOA5p+l5bCP5pe25pWw44CCIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoi5raI5oGvVFRM5aSp5pWwIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiLpnIDopoHmj5Dkvpvmtojmga9UVEzlpKnmlbDjgIIiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiLpnIDopoHmj5DkvptRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IlFvU+WAvOeahOiMg+WbtOaYr+S7jjDliLAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLnvZHlhbPkuIrnp4HpkqXnmoTot6/lvoQiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IuWIh+aNouWFqOWxjyIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoi6YWN572uSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoi5re75YqgL+abtOaWsOmFjee9rkpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvphY3nva7lkoznrqHnkIYiLCJyZW1vdGUtc2hlbGwiOiLpgJrov4fov5znqItTaGVsbOWwj+mDqOS7tuWQr+eUqOWvuee9keWFs+aTjeS9nOezu+e7n+eahOi/nOeoi+aOp+WItiIsaG9zdDoiVGhpbmdzQm9hcmQg5Li75py65ZCN5oiWSVDlnLDlnYAiLHBvcnQ6IlRoaW5nc0JvYXJkIE1RVFTmnI3liqHnq6/lj6MiLHRva2VuOiJUaGluZ3NCb2FyZCDnvZHlhbPorr/pl67ku6TniYwiLCJjbGllbnQtaWQiOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU5a6i5oi356uvSUQiLHVzZXJuYW1lOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU55So5oi35ZCNIixwYXNzd29yZDoiVGhpbmdzQm9hcmQg572R5YWzTVFUVOWvhueggSIsImNhLWNlcnQiOiJDQeivgeS5puaWh+S7tueahOi3r+W+hCIsImRhdGUtZm9ybSI6IuaXpeW/l+a2iOaBr+S4reeahOaXpeacn+agvOW8jyIsImRhdGEtZm9sZGVyIjoi5YyF5ZCr5pWw5o2u55qE5paH5Lu25aS555qE6Lev5b6E77yI55u45a+55oiW57ud5a+56Lev5b6E77yJIiwibG9nLWZvcm1hdCI6IuaXpeW/l+a2iOaBr+agvOW8jyIsInJlbW90ZS1sb2ciOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvml6Xlv5forrDlvZXlkozml6Xlv5for7vlj5YiLCJiYWNrdXAtY291bnQiOiLlpoLmnpzlpIfku73orqHmlbDlpKfkuo4w77yM5YiZ5Zyo5omn6KGM6L2u5o2i5pe277yM5pyA5aSa5L+d55WZ5aSH5Lu96K6h5pWw5Liq5paH5Lu2LeacgOaXp+eahOaWh+S7tuWwhuiiq+WIoOmZpCIsc3RvcmFnZToi5o+Q5L6b5bCG5pWw5o2u5Y+R6YCB5Yiw5bmz5Y+w5LmL5YmN5L+d5a2Y5Lyg5YWl5pWw5o2u55qE6YWN572uIiwibWF4LWZpbGUtY291bnQiOiLlsIbliJvlu7rnmoTmlofku7bnmoTmnIDlpKfmlbDph48iLCJtYXgtcmVhZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiLkuIDkuKrmlofku7bkuK3lrZjlgqjnmoTmnIDlpKforrDlvZXmlbAiLCJyZWFkLXJlY29yZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiLlnKjlsIbmlbDmja7lj5HpgIHliLBUaGluZ3NCb2FyZOS5i+WJje+8jOWtmOWCqOS4reeahOacgOWkp+aVsOaNruiuoeaVsCIsInR0bC1jaGVjay1ob3VyIjoi572R5YWz5aSa5LmF5qOA5p+l5LiA5qyh5pWw5o2u5piv5ZCm6L+H5pe2IiwidHRsLW1lc3NhZ2VzLWRheSI6IuWtmOWCqOWwhuS/neWtmOaVsOaNrueahOacgOWkp+WkqeaVsCIsY29tbWFuZHM6IueUqOS6juaUtumbhumZhOWKoOe7n+iuoeS/oeaBr+eahOWRveS7pCIsYXR0cmlidXRlOiLnu5/orqHpgaXmtYvplK4iLHRpbWVvdXQ6IuWRveS7pOaJp+ihjOeahOi2heaXtuaXtumXtCIsY29tbWFuZDoi5ZG95Luk5omn6KGM55qE57uT5p6c77yM5bCG55So5L2c6YGl5rWL55qE5YC8IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5Ijoi5ZCv55So55uR6KeG5q+P5Liq6L+e5o6l6K6+5aSH55qE5rS75YqoIiwiaW5hY3Rpdml0eS10aW1lb3V0Ijoi5Zyo5q2k5pe26Ze05ZCO77yM572R5YWz5bCG5pat5byA6K6+5aSH55qE6L+e5o6lIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLorr7lpIfmtLvliqjmo4Dmn6XnmoTlkajmnJ8iLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLlj5HpgIHmtojmga/ljIXkuYvpl7TnmoTlu7bov5/vvIjlh4/lsI/mraTorr7nva7kvJrlr7zoh7Tlop7liqBDUFXkvb/nlKjnjofvvIkiLHFvczoiTVFUVOa2iOaBr+S8oOmAkueahOacjeWKoei0qOmHj++8iDAt6Iez5aSa5LiA5qyh77yMMS3oh7PlsJHkuIDmrKHvvIkiLCJzZXJ2ZXItcG9ydCI6IkdSUEPmnI3liqHlmajkvqblkKzkvKDlhaXov57mjqXnmoTnvZHnu5znq6/lj6MiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuWcqOiAg+iZkei/nuaOpeatu+S6oeS5i+WJje+8jOacjeWKoeWZqOetieW+hWtlZXBhbGl2ZSBwaW5n5ZON5bqU55qE5pyA6ZW/5pe26Ze0IiwiZ3JwYy1rZWVwLWFsaXZlIjoi5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25Lik5Liq6L+e57uta2VlcGFsaXZlIHBpbmfmtojmga/kuYvpl7TnmoTmjIHnu63ml7bpl7QiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6IuWcqOayoeacieaOpeaUtuWIsOS7u+S9leaVsOaNruS5i+WJje+8jOacjeWKoeWZqOWPr+S7peWPkemAgeeahGtlZXBhbGl2ZSBwaW5n5raI5oGv55qE5pyA5aSn5pWw6YeP77yM54S25ZCO5bCG6L+e5o6l6KeG5Li65q275LqhIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiLlnKjmsqHmnInlj5HpgIHmiJbmjqXmlLbmlbDmja7ml7bvvIzmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5YWB6K645pyN5Yqh5Zmo5Zyo5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25L+d5oyBR1JQQ+i/nuaOpea0u+WKqCJ9LCJkb2NrZXItbGFiZWwiOiLkvb/nlKjku6XkuIvmjIfku6TlnKggRG9ja2VyIGNvbXBvc2Ug5Lit6L+Q6KGMIElvVCDnvZHlhbPvvIzlubbkuLrpgInlrprnmoTorr7lpIfmj5Dkvpvlh63mja4iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi5L2/55So5Lul5LiL6K+05piO5LiL6L2944CB5a6J6KOF5ZKM6K6+572uIERvY2tlciBDb21wb3NlIiwiZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlIjoi5LiL6L296YWN572u5paH5Lu2IiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLkuIvovb3mgqjnmoTnvZHlhbPnmoQgZG9ja2VyLWNvbXBvc2UueW1sIOaWh+S7tiIsImxhdW5jaC1nYXRld2F5Ijoi5ZCv5Yqo572R5YWzIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoi5Zyo5YyF5ZCrIGRvY2tlci1jb21wb3NlLnltbCDmlofku7bnmoTmlofku7blpLnkuK3vvIzkvb/nlKjku6XkuIvlkb3ku6TlnKjnu4jnq6/kuK3lkK/liqjnvZHlhbMifSxKbz17ImFkZC1lbnRyeSI6IuWinuWKoOmFjee9riIsImNvbm5lY3Rvci1hZGQiOiLlop7liqDmlrDpgKPmjqXlmagiLCJjb25uZWN0b3ItZW5hYmxlZCI6IuWVn+eUqOmAo+aOpeWZqCIsImNvbm5lY3Rvci1uYW1lIjoi6YCj5o6l5Zmo5ZCN56ixIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiLpnIDopoHpgKPmjqXlmajlkI3nqLHjgIIiLCJjb25uZWN0b3ItdHlwZSI6IumAo+aOpeWZqOmhnuWeiyIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoi6ZyA6KaB6YCj5o6l5Zmo6aGe5Z6L44CCIixjb25uZWN0b3JzOiLpgKPmjqXlmajphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLlu7rnq4vmlrDplpjpgZMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuaCqOeiuuWumuimgeW7uueri+S4gOWAi+WQjeeoseeCuu+8mid7e2dhdGV3YXlOYW1lfX0n55qE5paw6ZaY6YGT5ZeO77yfIixkZWxldGU6IuWIqumZpOmFjee9riIsImRvd25sb2FkLXRpcCI6IuS4i+i8iemFjee9ruaWh+S7tiIsZ2F0ZXdheToi6ZaY6YGTIiwiZ2F0ZXdheS1leGlzdHMiOiLlkIzlkI3oqK3lgpnlt7LlrZjlnKjjgIIiLCJnYXRld2F5LW5hbWUiOiLplpjpgZPlkI3nqLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiLpnIDopoHplpjpgZPlkI3nqLHjgIIiLCJnYXRld2F5LXNhdmVkIjoi6ZaY6YGT6YWN572u5bey5oiQ5Yqf5L+d5a2Y44CCIiwianNvbi1wYXJzZSI6IueEoeaViOeahEpTT04iLCJqc29uLXJlcXVpcmVkIjoi5qyE5L2N5LiN6IO954K656m644CCIiwibm8tY29ubmVjdG9ycyI6IueEoemAo+aOpeWZqCIsIm5vLWRhdGEiOiLnhKHphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw6ZaY6YGT44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiDmnKrmib7liLAne3tpdGVtfX0n44CCIiwicGF0aC1sb2dzIjoi5pel6KqM5paH5Lu255qE6Lev5b6RIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi6ZyA6KaB6Lev5b6R44CCIixyZW1vdGU6Iuenu+mZpOmFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel6KqM6KiY6YyE57Sa5YilIiwicmVtb3ZlLWVudHJ5Ijoi56e76Zmk6YWN572uIiwic2F2ZS10aXAiOiLkv53lrZjphY3nva7mlofku7YiLCJzZWN1cml0eS10eXBlIjoi5a6J5YWo6aGe5Z6LIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoi6Kiq5ZWPVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToi6LKv5a2YIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi5paH5Lu25Lit55qE5pyA5aSn57SA6YyEIiwic3RvcmFnZS1tYXgtZmlsZXMiOiLmnIDlpKfmlofku7bmlbgiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiLmnIDlsI/mlbjph4/ngrox44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoi6ZyA6KaB6Jmf56K844CCIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6IuWtmOWEsuS4reeahOacgOWkp+e0gOmMhCIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoi5pyA5bCP57SA6YyE5pW454K6MeOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfntIDpjITmlbgiLCJzdG9yYWdlLXBhY2stc2l6ZSI6IuacgOWkp+S6i+S7tuWMheWkp+WwjyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6IuacgOWwj+aVuOmHj+eCujHjgIIiLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoi6Jmf56K854Sh5pWI77yOIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhdGgiOiLlrZjlhLLot6/lvpEiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHlrZjlhLLot6/lvpHjgIIiLCJzdG9yYWdlLXR5cGUiOiLlrZjlhLLpoZ7lnosiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IuaWh+S7tuWtmOWEsiIsIm1lbW9yeS1zdG9yYWdlIjoi6KiY5oa26auU5a2Y5YSyIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJk5Li75qmfIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IumcgOimgeS4u+apn+OAgiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZOmAo+aOpeWfoCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4Ijoi5pyA5aSn5Z+g6Jmf54K6IDY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/ln6DomZ/ngrox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi6YCj5o6l5Z+g54Sh5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IumcgOimgemAo+aOpeWfoOOAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6YCj5o6l5Zmoe3t0eXBlTmFtZX196YWN572uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiLplpjpgZPkuIpDQeitieabuOeahOi3r+W+kSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IumWmOmBk+S4iueUqOaItuerr+aGkeaTmueahOi3r+W+kSIsInRscy1wYXRoLXByaXZhdGUta2V5Ijoi6ZaY6YGT5LiK55qE56eB6ZGw6Lev5b6RIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLliIfmj5vlhajonqLluZUiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IumFjee9rkpTT04qIiwidXBkYXRlLWNvbmZpZyI6IuWinuWKoC/mm7TmlrDphY3nva5KU09OIn07Y29uc3QgWG89W2NhLHBhLEZhLERhLEFhLE5hLFBhLGVvLEVvLGlvLGFvLG9vLHFvLHRvLEdvLG5vXTtjbGFzcyBab3tjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lLGZ1bmN0aW9uKGUpe2Uuc2V0VHJhbnNsYXRpb24oImVuX1VTIixPbywhMCksZS5zZXRUcmFuc2xhdGlvbigiYXJfQUUiLFJvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJjYV9FUyIsVm8sITApLGUuc2V0VHJhbnNsYXRpb24oImNzX0NaIixCbywhMCksZS5zZXRUcmFuc2xhdGlvbigiZGFfREsiLFVvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJlc19FUyIsX28sITApLGUuc2V0VHJhbnNsYXRpb24oImtvX0tSIixIbywhMCksZS5zZXRUcmFuc2xhdGlvbigibHRfTFQiLHpvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJubF9CRSIsV28sITApLGUuc2V0VHJhbnNsYXRpb24oInBsX1BMIixqbywhMCksZS5zZXRUcmFuc2xhdGlvbigicHRfQlIiLEtvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJzbF9TSSIsJG8sITApLGUuc2V0VHJhbnNsYXRpb24oInRyX1RSIixZbywhMCksZS5zZXRUcmFuc2xhdGlvbigiemhfQ04iLFFvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJ6aF9UVyIsSm8sITApfShlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5OZ01vZHVsZX0pfXN0YXRpY3t0aGlzLsm1bW9kPXQuybXJtW5nRGVjbGFyZU5nTW9kdWxlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlY2xhcmF0aW9uczpbY2EscGEsRmEsRGEsQWEsTmEsUGEsZW8sRW8saW8sYW8sb28scW8sdG8sR28sbm9dLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOltjYSxwYSxGYSxEYSxBYSxOYSxQYSxlbyxFbyxpbyxhbyxvbyxxbyx0byxHbyxub119KX1zdGF0aWN7dGhpcy7JtWluaj10Lsm1ybVuZ0RlY2xhcmVJbmplY3Rvcih7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpabyxwcm92aWRlcnM6W3ZhXSxpbXBvcnRzOltILEQsUSxNYSxFYSxxYSxJYSxMbyxrbyxGbyxwbyxBbyxObyxnbyxEbyxQb119KX19ZSgiR2F0ZXdheUV4dGVuc2lvbk1vZHVsZSIsWm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Wm8sZGVjb3JhdG9yczpbe3R5cGU6dSxhcmdzOlt7ZGVjbGFyYXRpb25zOlhvLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOlhvLHByb3ZpZGVyczpbdmFdfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSl9fX0pKTsvLyMgc291cmNlTWFwcGluZ1VSTD1nYXRld2F5LW1hbmFnZW1lbnQtZXh0ZW5zaW9uLmpzLm1hcAo=", - "public": false - }, - { - "link": "/api/images/system/gateway_general_chart_statistics_system_widget_image.png", - "title": "\"Gateway general chart statistics\" system widget image", - "type": "IMAGE", - "subType": "IMAGE", - "fileName": "gateway_general_chart_statistics_system_widget_image.png", - "publicResourceKey": "oqVqZHqFa7xwnYv3XXvsnYDTUPOFxXcd", - "mediaType": "image/png", - "data": "iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAIAAADGnbT+AAAABmJLR0QA/wD/AP+gvaeTAAAXk0lEQVR42u2deXwb1bXH+Y+lfY/utK98WkogZSk7LcujBF4pAT6lLaWvlBZeCrTw4AGFvrbQkPYRwlIWfyCr7WA7XrN4wzZx7DjxIu+2vEteZHmTJdmOd8faR9K838y1FUWWZVmaGQM585mPPmNZR/fOvV+de+455849iw/7OOuss/gojpaWFhI8cwQFVlQqVbp4JCUlzc3NaTSaveKhVqsJLBKMHCx2eDyeuLg4r9ebl5c3NjZGGosEpQEL+qm+vh4XKSkp0F4ZGRkWi4XAIsFowdqzZw/HcbiAurLb7Z2dndnZ2QQWCUYFVnd3d1FRkU914XV2djY5OZnAIsGowIqPj/cNfOXl5bDiY2Nj+/v7/anC0UIHHeEdwZUQxkRY8WS8k6AENhb5sUiQwCJBAosancAisEiQwCJBAosancAisEiQwCJBAosancAisEiQwCJBAosancAisEiQwCJBAosECSwCiwQJLBIksEiQwCKwSJDAIkECiwQJLAKLBAksEiSwSJDAIrBIkMAiQQKLBAksAosECSwSJLBIkMAisEiQwCJBAuuzK5jV7SKwCCyJBd+pd35nz7x6xE1gEViSCb7XIFCF84lCO4FFYEkj+IFaoOqSuPn1cfMX75nvnvQQWARWtIKvFg6CqnWx8+83Op8ptuP6hWN2AovAikowsd3FqIppcDaOuIv7uUtj5y+JnR+a9RBYBFaEgvs6BKow9r1V6wBV7PzdYRve3KJyEFgEViSC6VrXxSJVL+YN+6jC+ZHOBQV2Wfz8uNW75lXVTni2q50/zbLWGN0E1qdAEP4q0AOqXq92ZKi6/cHC+auPBKX1dp1zTarq9vBweWytctyaamETVZy3pFim7V6FwMKOX2yPQmwup9Pp0tLScnJy2J5NBFaII7uHA1Xora3Vwgi4FKz9ncIQeXWC5aTTq1hVwU1OD/fMUfv3PjzF0w1JlieL7HcftOIaF0qA5Xa7ExISfG/t2LED79SJB4EV4ijs4+BWQD+9orIzjJaChfMnWUJfxrY45a6qYc6T1O56pMB2ady8j6cfpllfOOZI1bgaxMpgSnGVSNtbRf2ygzU9Pf3mm29iYybs+wUthe2Z8KbRaMSOmATWcgd6iFH1t3K7j6GgYCWIs8Ub91nsnPRVbWpu0Yx7Pmh03i/iy851cfP3HLS+WuU40s8trc/OJsHTtj52ric8H1vkYLlcLrPZDC21fft2QIZ9VvGmyWTKzc0lsIIeRwc4phX+Umb377OgYOH80X5BSaRpXBJW1eXhXy53XL131scTBtxNH9t2qJ2Vw1zQavjOxw8LPrb7DlkdbjnBws6XBoMBF9hVdXx8fOfOnbjGRpilpaUE1tKjwuD+brzQkc+V2AM6bDmwdoju+NvTrW6PZFVl4UicN6dY4YyFF63O5A7Nk+8Eed9PnIHstmqHjGBhp8Jdu3YdOHAAJjx2kysuLsbWvbt378ZemP5U0X6FOJLKdevjTqJLHs0cAUZhnukV3awjPyjRS1KNA6qudXtOrgMZhYPhV8P/fLe4/5LYk5jMJpTp5N2vEANi0GvSWL4DHqDL9wpKAhoiqCZYTmPhfLvOAcG7D1g93miranV578wQLKo/lTpClBj6hOAWlTAg3rDPsqKbjfxYMgo2jbqvFOdTyFloWL63lutIjFPf3yeIlw5xUVZ1c4XA6J0ZllqzOxqw6s3un4omPywzL4G1JoLNY27mE3rssB390bh6sHD+X6UAxC9ybNFUtXLYjfELqRPZ3dyKJYYGC6/HBrlrE4X7golGYCkniN9xy5h7W42DUYXYXwiqVuxmmMyYuOF7GszuyKoKz+dNycI3/KPSEU6J4VR1T4sTpGI60jnhIbBkF+ydEpxDd2Sccg49nG+rN4XbW8udfy1ziGrPFllVnz0qWEX3HrL6+I4eLJxPiRk+Pz5gtXEEljyCjKd/3zd9KhKyzwJT3ee5jhKsMgN3+V5B5cCrudqq5uo4CF7xoQUe//BLDKeqNSb3hnSLtIkYBJZwwAeNJKr/2G/1j6yBpzRtWDytqpuZ1nm+xL6qqo7Me68RjaF36hyrLTGcqsJiWy+6fIsHuGhatc7sZhH3Mxos/bQHmcQYAnw8wZLFuPDGkYHQtlQ0YBUtJgAitBdmVWHq/bZAyJJArkQEJYZZ1deqhWH6+iTLqCWSePngrOepIjtrRrTemQWW082PznvbTgjxsnsOWf2DIU8ese9rdzGeJOytEBGVVyocYd5jkhhtBPTHBzn5wIJu/kWugO9v8m2nnG1el3CGbNVZh/f1GgdTeBjoETxFVFResMb82JcbLLTFpM0LIwnauEDPJXe4/ppvQOfhZ/TLXBuGuasSTuWQsBNx/scL7QltrgCrXG6wPupdSAA8seiZDHGPUKvMK4vpW8QlhikIcK9LspyWi9H7DF/1Rb7jXn74XX6+GaD5V5Xz8Cka1/WiCO4IjYkoaqO46E1esKC64VeUFawdTc6NB63wPbK8qNAnxiAYT3ekWx4rtMe3LhtckxssnL/OE3TDPxcTAJe7R/QcS1tAnylT1Q/bhGxYhNih13nj+7zq7NPO2gtnau/jRxJ4x3DZEHfXolWK1KDM7lPaVF6wgD8zC+QDyzzvZfFgdkIbIyKLjJEHc23wJm/KHEHqyHv1Tnj/cns4mKVhWk4KgHWgU2gcuMfmHN4Q9xgjLlG8KcW6XMKCHFV9tkQYqV/K+YivPI9XncOP7uPHMviex/m6i/wh6z16TVLu83/Oyo1tnAr4BhnBwsDkM2KqZUuy/psY3IBNUAJoTGvAx3KC7QbdaMfLjSOh0ldYOGVXk3O5e2wdcyPlC5oYzg4lfwPwPjyRqZ4v+4oAkOGN0zy009pDha+XHb7fWv4lH2Heys+fbLzTpHmta6BGbXbICxZSY9m46wtiSA4WZlXQ2Ehqy+91rZXiWU5wuvnXaPHxtqcbR5ZlImkxARBuyaX3iDeZ++OPxxwKK9cW45i1ej3qX1DwcIF+wXJH5hYML2anAvfnik826yrN2q3zDbd7Kz/ng8xd9dWZpgd554gsYCEHbUO60Chv1DpYKAqRV8nB+suCF9u+hiNaUMHOgXphBBEberLlUfYjDnqyDHQopKX3+HcxsIjE4hqToqO22mw/qb4LNR+tvPmKuBOYLxtPemDVsA7FeVfKBOwKf5Em01xP37GRjs2W+ptx457K83mPTRawEtuE3yKcubBpYOWwZEUk0UoIFrwm+N1cFj+tbXt/qvm3zaaZTwxYHH7E6Jjp5l+5q74iXjykHrEF/fwuMUv4tjSLurk1aKQ5q4dT2BycaP096uysubh12PSQOMO4cnFFBiY90LKhS2wbNuj6imUZCi0u741ifgimXWzAZn/uOq6XECwsXX8k5bC5/FqmGGz117cZBj4JYOl7s1AfV/WFYL1zoJGr/gb+nG26v8k8v/TzcB1BJ6Fx3i/p890azHm2WmuLyq7wPGO4813U1lP5hc6BBvxZbuBYqg/0FhRE+E4+WcBiE5n7Mq2+Yt6sFZTWbUlTbq80YA2NaisL72VI2WuvstddLfRlzbfRkWsL1gGVxl57JSoz2B3P3tEONnPV38Q7c+q7m0yzS0XeqRca5/bkKV/bPF8SGGlWBqxefQGvOhdjmb43x/cmVnj/6bjDf066NmDBRckyTDK0tq6BamPnWzp9Yb3RCS8A3sQqvGjB4qZ4/YselWAtWisuMHR9AJug2TQ517hR/Kl90b9RlAerSfV3QX3WXeNvV2mGNK5qYaKOIbLZOLVcAiBSo3B/Bb0c81/DalbSM6IZbGcDt0n7RvQlSg9WjKpn84Hddccecldd4JspQJc01Lx8R0IH1L7LEylYXk7wy9UKv35Pxbl5BY+W6Uf8TE7HifbnxOLOMWtfWxOwwLdDJdx1r/7jgH+1G/odtZcJP4b6H2DOFZgAKJqhD+TYEKi4TpzrvF3nUGwCK04Dxx11l6N6Uy0Ph3aRKAuWtZs3x/KdD3lqvuHvQLPVXTve+hSGqgVvh+qc+iN31jan8B7rqsGaOsqrr2Hf01V+z8bExv85GsT+MHa+Iyrzs1EuNJnCYGFahKIxpVrGqh1ko6St/rrWYXNAAuCV8XPChEv0LyAAFV6JLoyz0d+j2mydb9ggKNTG25rMFkkaJwqwnKP8eLYQSKq/xB+mE6XfUpc+NNi9t214yFdM56AaHh1nxaJLrfqrfM9j/HSpGLZf6bD1CjEEJth45XBfFkt3LB4I/sPS9+ZiQBRsmsaNWapGxcDCbEgs95wAO8//bB0esdbdgLo5ar/bbujz/9cT2WZfOLxkgFsRqT5dJgZcfNWM6qqBnlS12RnxPeJHKM42LmobHpaqcVYP1vghvvdpvvHy0+JHdd/muzeN6JM2JHRihlzUH7xdDqmaYvLjmotuOyWovlaIRrnGg5fHTfN9/8tXfl74ZM3XhE96nQiZregzxIwGg6/AlurydoNeGbAmWzYJNrvqgdAfazGesNbfJMznay9tH+o9FaEr07EEQKxADCEO7YJpAbhcdHl/zjc49OvSQzjMlrtHUcef7an6knawRcLGWT1Yi34/vvrL/hFv/PcRMWEoRJejQvEtwoTxgfQ218Brp1QdAlL4Kug/X3rGgjl1ofiBc6dqf8Y7T+DtjnHPxaJhuzR7ZIn+GGb9h9l+d79KbrDQK6gnHIN5qrKVTTHjFHN0uWq+BZPZVyIidI8V2kMitRfuJdZoMInwJzyTtap3HbVXLLxZu97QtT2c4YyVqNMf8YrRwD7dIWkbZ/Vg9T7LG2NEmE4zwrHgjoVUkXobukIbDy4GyEDP5Me89kHeFxCA5ht4hR/P4tXXLbzTvpG3dPhmhYgrC4vpjjvCM6VnzKofiVPF8/t0+2UFC64EwVXd8XKYgvA7zKl/LHL/TaYqIIiEk4pgrddsmsbkmvksBPO/7kaMg75IEQRhTQ707LPXfo99APAZunYEdZv5n4WqfE/Vl/F5fLnkjSON8Q59hRmN/0NXQlQI4Qt8Elm2M45FA8s5xpt28k03nja8Qp+NpfvPCptH3cwLHILdwEcIqbRj7S+yqSIs6xXnO5GBhTmggEjV11tM4+ELQgMJMTUhuHZB10BtUEFM1jDD5aoWpkSYUYpIcctU1QVHlBhUOZshC1lMVJcbkedV68Rp4G/CbxalwTrcx7Ek8SpjWBVij/WBHzXwi+bqeN1TfP13+OH3eE9gdiVSGCCFVS6rbQJD105R4SNstwndKS1YsJph3+DLMQatlkjEeRDtEdn6yjFVeoCZD/3HNAqbaSIYF15VuV59nqXh1gW8qr4OvEB8ANNsLJ5v+GGY4+YagIWnXLBJsv+zN0NXCKlIF4u6ZzK89bcAC4+lY0NtuYGLoAkQvXJXf401ZatxVEKwYOiIxs1lDNnVjqHgcqL1CYEA1fmoJPNKQMuyia1Y4Q09faURVLWrv2qm6efsSwAovrPVaFycBj6JNy2qi4CvTDMbCcDC4zfR5bemWle15u5BMbcaidJhgsXyLf2fRLXaJtAOtTlr1jGzt8PQJQlYMJXY9FMcoSJ2gLngixGneP8K/6RX9S9syjLd/J9w00TZzd39lbNNP1nAq/ILY20vjHS8wlCDjSWfLyZasJAzjwdaosuxNmFVFcJiI5b0jaUNK5abVNbDHDwrPvYpdBMgXG9puIUNEJGpgYATowzTgj4zJVJ3JdetenzRg3DeZMt/aQY7JOxmuNamm355akavOrdXny+r9zhasFjWx10HLBEs5nw4P9xHVW9MnQgz1L9iEzSZT0ITMA8Qpk7RtB0whftHiAQMVEsSYDFrXp1o/QNST2WawAJWIAtw4buSO94VFVhY9MOS+LBqKoIKIe0TyZ9IAfVfXrf0QMY+m0WuVl0t3wQucTgQfr4TrY8HtV7Dabvxtv9mSVefkJzVsCMEQwqUGBVYsJDE0Kk14gptEp+vj0TQEIX+PFv4DMK00jYBxgIk0bI5fASJXJohLXQecr07DD2fLrCUEYwcLCyWxWI3TO4OdkXuHCrsc7E1wVg6F7RE+AwF62rvbLVR+iaA15tlHHDV/xZgcq3YdkjcgyCmWp9tPtYArD+XCjE7hHGirBDWH7OHeQb1u94nrvN5/iOjTE0AB8+s+j5mchk73w5TsKevjDmflnouCKyowOqbEfLNcX4cXjJaiAohSQGpCtB8Sx/OVCj6XZHWnFLRI18TwJMkprucwzyoLBISUtDFvNv+IBJY0oD1e1HNPF1sl6RCbHnkH47Ygy5LRFqzAm3X13uQTfEQuoaLMoQgclRYPA4TTAJLSrCwipKlGBwblCbGhJVhLGMEz87zlZUvZuj+IDnax2yuIkNhqI2loyDKdlyVFtwjarY4a4SkDOSonAl8KArWw3mrjtmtWCEkLDCLbSFM5F0IE2GhgZJth6DvnPpeMdn1vKAjHRIBWH7BcstQCawIwTomPo4BTnCVgZOwQogAsg1eak1CnbLFVdS3pCyEiZRsu0WTS1xr2vo7/+QTZASwgONy8WACK3Kw2DSN7XQlbYVeLrezdG9ucRU126d0TdquWvU+CwMLQethE3vzRNsfhVTgpp+dOXwoB5Zo96yw6DviJwqzRyE+J9ryt6VJ/PzW1Qoi/46ZXEgGR74U0ogRHkY8JHQUj8A6DSybzZaZmZmamqrVavGnRqNhexdiM7AAsGC2v9fglKlC/xCfVsDOD/xSv9eq7bBOiz3FAHkHWGnNFv+cUXxEC1Z+fr5er8cWmDExMezP0dHRoBoL1k9kD+cMp0Jwr98gLt3ckGHxL2UN2w7LE3wmF1JNfMMigbWKoRBbNSUmJvLibqvYpAk7geGdALAiq0r4FXpdfL7qrtOTcNa87fp1GTC5TJqtZxofEoDFNlmdmJjgxV3m7HY7tpXLzs5WGCysN0dOX8Mnr+2Qcxf0yQsEViiwsJXc/v37MRoygJhphT3lkpOTFQaLsUW99RkBS6VSbdu2LV08oLTKy8uxjS828O3v7/enCkdkW+PReaadp+1XeNoiZI6DGltqvCugsUjwTPRjEVgkSGCRIIFFggQWgUWCBBYJElgkSGBR25EggUWCBBYJEljUdiRIYJEggUWCBBY1OgkSWCRIYJEggUWNToIEFgkSWCRIYFGjkyCBRYIEFgkSWNToJEhgkSCBRYIEFjU6CRJYJEhgkSCBRY1OggQWCRJYJEhgUaOTIIFFggQWCRJY1OgkSGCRIIFFggQWNToJElgkSGCRIIFFjU5gEVgkqBRYOp0uLS0tJycH+1MQWCQoGVg7duzAZmB14kFgkaA0YEFLYXsmXBiNxry8PAKLBKUBy+VyxcXF4cJkMuXm5hJYJCjZULhz5068YiPM0tJSAosEJQOruLgYGxfu3r0be2EG7FdIBx3hHkE9CxgQQzgdeGUPKvHTWKLS90PHGXIQWHR8AsCqqKiA+YVXxepXVlaGEvEqd0HYqri3t7egoMD3Z3V19ZEjR+Qr0Wq1ZmZmpqamYp7k8/WkpKR4PB6ZSrTZbIcOHYL3G3eKP5ubm9G2WVlZISwfJcCanJxEK+ACNz81NaUAVdPT04mJibjA68zMjKxlDQ4O4gcTExPD/iwqKqqvr5e1RLgJ+/r6gJGv0MOHD2/ZsiUg4CHhgZ/KwMAASty+fbvdbt+zZw9+P1VVVQGecKXB6urqYg6I48eP41oBsNDEmJyirPj4ePma2/9Ai7MLdPbBgwfx+0YHyFqixWJJSkpijkOghvuV9U7n5uZaW1uzs7P9+TYYDGsJlkajYUMSXrVarQLd7HA4kpOToUjw6nQ6lQRr69atKL2jo0PW0RChs4SEhImJCWgRXOAe5QYLAZXCwkKoRvZnd3d3gBt8DcAaHh5mQR5UBT8vBboZ4fCSkhJcHD16lJkFioHFLkZGRvx/3JJbdfv378doyNQV9BYsns2bN/t6XfIDGEFB4mLXrl14haKSz6Q7a1UNAVsHowNeca2MxkLgEl2LV1wrCVZDQwN6GlYI2JKpLGjibdu2pYsH7Ff2pqwaS6/XoyVBM9gFTy+99BKGAplmY/8Pl7O7ukBGoYYAAAAASUVORK5CYII=", - "public": true - } ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_general_configuration.json b/application/src/main/data/json/system/widget_types/gateway_general_configuration.json index ab17290a3e..600f689786 100644 --- a/application/src/main/data/json/system/widget_types/gateway_general_configuration.json +++ b/application/src/main/data/json/system/widget_types/gateway_general_configuration.json @@ -14,10 +14,9 @@ "isModule": true } ], - "templateHtml": "", + "templateHtml": "", "templateCss": "", - "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", - "settingsSchema": "{}", + "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n self.ctx.$scope.defaultTab = self.ctx.stateController\n .getStateParams()?.defaultTab;\n }\n};\n\nself.typeParameters = function() {\n return {\n dataKeysOptional: true,\n singleEntity: true\n };\n}", "settingsSchema": "{}", "dataKeySettingsSchema": "{}\n", "defaultConfig": "{\"datasources\":[{\"type\":\"function\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"#fff\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{},\"title\":\"Gateway configuration\",\"showTitleIcon\":false,\"titleTooltip\":\"\",\"dropShadow\":true,\"enableFullscreen\":false,\"enableDataExport\":false,\"widgetStyle\":{},\"widgetCss\":\"\",\"titleStyle\":{\"fontSize\":\"16px\",\"fontWeight\":500},\"pageSize\":1024,\"noDataDisplayMessage\":\"\",\"showLegend\":false}" }, @@ -39,28 +38,5 @@ "ocpp", "ble", "bluetooth" - ], - "resources": [ - { - "link": "/api/resource/js_module/system/gateway-management-extension.js", - "title": "gateway-management-extension.js", - "type": "JS_MODULE", - "resourceKey": "gateway-management-extension.js", - "fileName": "gateway-management-extension.js", - "mediaType": "application/javascript", - "data": "U3lzdGVtLnJlZ2lzdGVyKFsiQGFuZ3VsYXIvY29yZSIsIkBhbmd1bGFyL21hdGVyaWFsL3NvcnQiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZSIsIkBhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvciIsIkBzaGFyZWQvcHVibGljLWFwaSIsIkBhbmd1bGFyL2NvbW1vbiIsIkBhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXIiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJzIiwiQGFuZ3VsYXIvZmxleC1sYXlvdXQvZmxleCIsIkBhbmd1bGFyL2ZsZXgtbGF5b3V0L2V4dGVuZGVkIiwiQG5neC10cmFuc2xhdGUvY29yZSIsIkBjb3JlL3B1YmxpYy1hcGkiLCJAYW5ndWxhci9mb3JtcyIsIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2NhcmQiLCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCIsIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQiLCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QiLCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlIiwicnhqcyIsInJ4anMvb3BlcmF0b3JzIiwidHNsaWIiLCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwIiwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbiIsIkBzaGFyZWQvZGlyZWN0aXZlcy90cnVuY2F0ZS13aXRoLXRvb2x0aXAuZGlyZWN0aXZlIiwiQHNoYXJlZC9jb21wb25lbnRzL2RpYWxvZy9qc29uLW9iamVjdC1lZGl0LWRpYWxvZy5jb21wb25lbnQiLCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2ciLCJAc2hhcmVkL2NvbXBvbmVudHMvZGlyZWN0aXZlcy90Yi1qc29uLXRvLXN0cmluZy5kaXJlY3RpdmUiLCJAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUiLCJAc2hhcmVkL2NvbXBvbmVudHMvYnV0dG9uL3RvZ2dsZS1wYXNzd29yZC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLWhlYWRlci5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLXNlbGVjdC5jb21wb25lbnQiLCJAbmdyeC9zdG9yZSIsIkBhbmd1bGFyL3JvdXRlciIsIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXIiLCJAc2hhcmVkL2NvbXBvbmVudHMvanNvbi1jb250ZW50LmNvbXBvbmVudCIsIkBzaGFyZWQvaW1wb3J0LWV4cG9ydC9pbXBvcnQtZXhwb3J0LnNlcnZpY2UiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9hc3QuZGlyZWN0aXZlIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3giLCJAc2hhcmVkL2NvbXBvbmVudHMvZW50aXR5L2VudGl0eS1nYXRld2F5LXNlbGVjdC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGVscC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGludC10b29sdGlwLWljb24uY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2hlbHAtcG9wdXAuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL3BvcG92ZXIuc2VydmljZSIsIkBhbmd1bGFyL21hdGVyaWFsL2NoaXBzIiwiQHNoYXJlZC9jb21wb25lbnRzL2ljb24uY29tcG9uZW50IiwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSIsIkBzaGFyZWQvZGVjb3JhdG9ycy9jb2VyY2lvbiIsIkBzaGFyZWQvY29tcG9uZW50cy9qc29uLW9iamVjdC1lZGl0LmNvbXBvbmVudCIsIkBzaGFyZWQvY29tcG9uZW50cy9tYXJrZG93bi5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdGItZXJyb3IuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2ZpbGUtaW5wdXQuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2J1dHRvbi9jb3B5LWJ1dHRvbi5jb21wb25lbnQiXSwoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0LG4sYSxvLGkscixzLGwsYyxwLG0sZCx1LGcsZix5LGIsaCx4LHYsdyxDLFQsUyxrLEwsRixJLEEsTixNLEUscSxELFAsRyxPLFIsVixCLFUsXyxILHosVyxqLEssWSxRLEosWCxaLGVlLHRlLG5lLGFlLG9lLGllLHJlLHNlLGxlLGNlLHBlLG1lLGRlLHVlLGdlLGZlLHllLGJlLGhlLHhlLHZlLHdlLENlLFRlLFNlLGtlLExlLEZlLEllLEFlLE5lLE1lLEVlLHFlLERlLFBlLEdlLE9lLFJlLFZlLEJlLFVlLF9lLEhlLHplLFdlLGplLEtlLCRlLFllLFFlLEplLFhlLFplLGV0LHR0LG50LGF0LG90LGl0LHJ0LHN0LGx0LGN0LHB0LG10LGR0LHV0LGd0LGZ0LHl0LGJ0LGh0LHh0LHZ0LHd0LEN0LFR0LFN0O3JldHVybntzZXR0ZXJzOltmdW5jdGlvbihlKXt0PWUsbj1lLkNvbXBvbmVudCxhPWUuSW5wdXQsbz1lLlZpZXdDaGlsZCxpPWUuRXZlbnRFbWl0dGVyLHI9ZS5pbmplY3Qscz1lLkRpcmVjdGl2ZSxsPWUuT3V0cHV0LGM9ZS5QaXBlLHA9ZS5JbmplY3QsbT1lLmZvcndhcmRSZWYsZD1lLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5LHU9ZS5OZ01vZHVsZX0sZnVuY3Rpb24oZSl7Zz1lLk1hdFNvcnQsZj1lfSxmdW5jdGlvbihlKXt5PWUuTWF0VGFibGVEYXRhU291cmNlLGI9ZX0sZnVuY3Rpb24oZSl7aD1lLk1hdFBhZ2luYXRvcix4PWV9LGZ1bmN0aW9uKGUpe3Y9ZS5oZWxwQmFzZVVybCx3PWUuRGlyZWN0aW9uLEM9ZS5QYWdlTGluayxUPWUuRGF0YUtleVR5cGUsUz1lLkxlZ2VuZFBvc2l0aW9uLGs9ZS5OVUxMX1VVSUQsTD1lLkF0dHJpYnV0ZVNjb3BlLEY9ZS5EYXRhc291cmNlVHlwZSxJPWUuRW50aXR5VHlwZSxBPWUud2lkZ2V0VHlwZSxOPWUuY29lcmNlQm9vbGVhbixNPWUuZW1wdHlQYWdlRGF0YSxFPWUuaXNDbGllbnRTaWRlVGVsZW1ldHJ5VHlwZSxxPWUuVGVsZW1ldHJ5U3Vic2NyaWJlcixEPWUuU2hhcmVkTW9kdWxlLFA9ZS5EaWFsb2dDb21wb25lbnQsRz1lLkNvbnRlbnRUeXBlLE89ZS5QYWdlQ29tcG9uZW50LFI9ZS5UYlRhYmxlRGF0YXNvdXJjZSxWPWUuSE9VUixCPWUuY29lcmNlTnVtYmVyLFU9ZS5EZXZpY2VDcmVkZW50aWFsc1R5cGV9LGZ1bmN0aW9uKGUpe189ZSxIPWUuQ29tbW9uTW9kdWxlfSxmdW5jdGlvbihlKXt6PWV9LGZ1bmN0aW9uKGUpe1c9ZX0sZnVuY3Rpb24oZSl7aj1lfSxmdW5jdGlvbihlKXtLPWV9LGZ1bmN0aW9uKGUpe1k9ZSxRPWUuVHJhbnNsYXRlTW9kdWxlfSxmdW5jdGlvbihlKXtKPWUuZGVlcENsb25lLFg9ZSxaPWUuZGVsZXRlTnVsbFByb3BlcnRpZXMsZWU9ZS5pc0VxdWFsLHRlPWUuaXNOdW1iZXIsbmU9ZS5pc1N0cmluZyxhZT1lLldJTkRPVyxvZT1lLmlzTGl0ZXJhbE9iamVjdCxpZT1lLmlzRGVmaW5lZEFuZE5vdE51bGwscmU9ZS5pc1VuZGVmaW5lZE9yTnVsbCxzZT1lLmdlbmVyYXRlU2VjcmV0LGxlPWUuaXNPYmplY3QsY2U9ZS5jYW1lbENhc2UscGU9ZS5kZWVwVHJpbX0sZnVuY3Rpb24oZSl7bWU9ZSxkZT1lLkZvcm1CdWlsZGVyLHVlPWUuVmFsaWRhdG9ycyxnZT1lLk5HX1ZBTFVFX0FDQ0VTU09SLGZlPWUuTkdfVkFMSURBVE9SUyx5ZT1lLkZvcm1Db250cm9sfSxmdW5jdGlvbihlKXtiZT1lfSxmdW5jdGlvbihlKXtoZT1lfSxmdW5jdGlvbihlKXt4ZT1lfSxmdW5jdGlvbihlKXt2ZT1lfSxmdW5jdGlvbihlKXt3ZT1lfSxmdW5jdGlvbihlKXtDZT1lLFRlPWUuRXJyb3JTdGF0ZU1hdGNoZXJ9LGZ1bmN0aW9uKGUpe1NlPWUuU3ViamVjdCxrZT1lLmZyb21FdmVudCxMZT1lLkJlaGF2aW9yU3ViamVjdCxGZT1lLlJlcGxheVN1YmplY3QsSWU9ZS5vZixBZT1lLmZvcmtKb2lufSxmdW5jdGlvbihlKXtOZT1lLnRha2VVbnRpbCxNZT1lLmZpbHRlcixFZT1lLnRhcCxxZT1lLmNhdGNoRXJyb3IsRGU9ZS5tYXAsUGU9ZS5wdWJsaXNoUmVwbGF5LEdlPWUucmVmQ291bnQsT2U9ZS50YWtlLFJlPWUuc3RhcnRXaXRoLFZlPWUuZGVib3VuY2VUaW1lLEJlPWUuZGlzdGluY3RVbnRpbENoYW5nZWQsVWU9ZS5zd2l0Y2hNYXAsX2U9ZS5tZXJnZU1hcH0sZnVuY3Rpb24oZSl7SGU9ZS5fX2RlY29yYXRlfSxmdW5jdGlvbihlKXt6ZT1lLFdlPWUuTWF0VG9vbHRpcH0sZnVuY3Rpb24oZSl7amU9ZS5TZWxlY3Rpb25Nb2RlbH0sZnVuY3Rpb24oZSl7S2U9ZX0sZnVuY3Rpb24oZSl7JGU9ZX0sZnVuY3Rpb24oZSl7WWU9ZX0sZnVuY3Rpb24oZSl7UWU9ZS5Kc29uT2JqZWN0RWRpdERpYWxvZ0NvbXBvbmVudH0sZnVuY3Rpb24oZSl7SmU9ZSxYZT1lLk1BVF9ESUFMT0dfREFUQX0sZnVuY3Rpb24oZSl7WmU9ZX0sZnVuY3Rpb24oZSl7ZXQ9ZX0sZnVuY3Rpb24oZSl7dHQ9ZX0sZnVuY3Rpb24oZSl7bnQ9ZX0sZnVuY3Rpb24oZSl7YXQ9ZX0sZnVuY3Rpb24oZSl7b3Q9ZX0sZnVuY3Rpb24oZSl7aXQ9ZX0sZnVuY3Rpb24oZSl7cnQ9ZX0sZnVuY3Rpb24oZSl7c3Q9ZX0sZnVuY3Rpb24oZSl7bHQ9ZX0sZnVuY3Rpb24oZSl7Y3Q9ZX0sZnVuY3Rpb24oZSl7cHQ9ZX0sZnVuY3Rpb24oZSl7bXQ9ZX0sZnVuY3Rpb24oZSl7ZHQ9ZX0sZnVuY3Rpb24oZSl7dXQ9ZX0sZnVuY3Rpb24oZSl7Z3Q9ZX0sZnVuY3Rpb24oZSl7ZnQ9ZX0sZnVuY3Rpb24oZSl7eXQ9ZX0sZnVuY3Rpb24oZSl7YnQ9ZX0sZnVuY3Rpb24oZSl7aHQ9ZX0sZnVuY3Rpb24oZSl7eHQ9ZS5jb2VyY2VCb29sZWFufSxmdW5jdGlvbihlKXt2dD1lfSxmdW5jdGlvbihlKXt3dD1lfSxmdW5jdGlvbihlKXtDdD1lfSxmdW5jdGlvbihlKXtUdD1lfSxmdW5jdGlvbihlKXtTdD1lfV0sZXhlY3V0ZTpmdW5jdGlvbigpe2NvbnN0IGt0PWUoIm5vTGVhZFRyYWlsU3BhY2VzUmVnZXgiLC9eXFMrKD86IFxTKykqJC8pLEx0PWUoImludGVnZXJSZWdleCIsL15bLStdP1xkKyQvKSxGdD1lKCJub25aZXJvRmxvYXQiLC9eLT8oPyEwKFwuMCspPyQpXGQrKFwuXGQrKT8kLyksSXQ9ZSgianNvblJlcXVpcmVkIiwoZT0+ZS52YWx1ZT9udWxsOntyZXF1aXJlZDohMH0pKTt2YXIgQXQsTnQsTXQsRXQ7ZSgiU3RvcmFnZVR5cGVzIixBdCksZnVuY3Rpb24oZSl7ZS5NRU1PUlk9Im1lbW9yeSIsZS5GSUxFPSJmaWxlIixlLlNRTElURT0ic3FsaXRlIn0oQXR8fGUoIlN0b3JhZ2VUeXBlcyIsQXQ9e30pKSxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdCksZnVuY3Rpb24oZSl7ZS5FWENFUFRJT049IkVYQ0VQVElPTiJ9KE50fHxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdD17fSkpLGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQpLGZ1bmN0aW9uKGUpe2UuTk9ORT0iTk9ORSIsZS5DUklUSUNBTD0iQ1JJVElDQUwiLGUuRVJST1I9IkVSUk9SIixlLldBUk5JTkc9IldBUk5JTkciLGUuSU5GTz0iSU5GTyIsZS5ERUJVRz0iREVCVUciLGUuVFJBQ0U9IlRSQUNFIn0oTXR8fGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQ9e30pKSxlKCJQb3J0TGltaXRzIixFdCksZnVuY3Rpb24oZSl7ZVtlLk1JTj0xXT0iTUlOIixlW2UuTUFYPTY1NTM1XT0iTUFYIn0oRXR8fGUoIlBvcnRMaW1pdHMiLEV0PXt9KSk7Y29uc3QgcXQ9ZSgiR2F0ZXdheVN0YXR1cyIsey4uLk10LC4uLk50fSk7dmFyIER0LFB0O2UoIkxvZ1NhdmluZ1BlcmlvZCIsRHQpLGZ1bmN0aW9uKGUpe2UuZGF5cz0iRCIsZS5ob3Vycz0iSCIsZS5taW51dGVzPSJNIixlLnNlY29uZHM9IlMifShEdHx8ZSgiTG9nU2F2aW5nUGVyaW9kIixEdD17fSkpLGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0KSxmdW5jdGlvbihlKXtlLnNlcnZpY2U9InNlcnZpY2UiLGUuY29ubmVjdG9yPSJjb25uZWN0b3IiLGUuY29udmVydGVyPSJjb252ZXJ0ZXIiLGUudGJfY29ubmVjdGlvbj0idGJfY29ubmVjdGlvbiIsZS5zdG9yYWdlPSJzdG9yYWdlIixlLmV4dGVuc2lvbj0iZXh0ZW5zaW9uIn0oUHR8fGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0PXt9KSk7Y29uc3QgR3Q9ZSgiTG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwIixuZXcgTWFwKFtbUHQuc2VydmljZSwiU2VydmljZSJdLFtQdC5jb25uZWN0b3IsIkNvbm5lY3RvciJdLFtQdC5jb252ZXJ0ZXIsIkNvbnZlcnRlciJdLFtQdC50Yl9jb25uZWN0aW9uLCJUQiBDb25uZWN0aW9uIl0sW1B0LnN0b3JhZ2UsIlN0b3JhZ2UiXSxbUHQuZXh0ZW5zaW9uLCJFeHRlbnNpb24iXV0pKSxPdD1lKCJMb2dTYXZpbmdQZXJpb2RUcmFuc2xhdGlvbnMiLG5ldyBNYXAoW1tEdC5kYXlzLCJnYXRld2F5LmxvZ3MuZGF5cyJdLFtEdC5ob3VycywiZ2F0ZXdheS5sb2dzLmhvdXJzIl0sW0R0Lm1pbnV0ZXMsImdhdGV3YXkubG9ncy5taW51dGVzIl0sW0R0LnNlY29uZHMsImdhdGV3YXkubG9ncy5zZWNvbmRzIl1dKSksUnQ9ZSgiU3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAiLG5ldyBNYXAoW1tBdC5NRU1PUlksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtBdC5GSUxFLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl0sW0F0LlNRTElURSwiZ2F0ZXdheS5zdG9yYWdlLXR5cGVzLnNxbGl0ZSJdXSkpO3ZhciBWdDtlKCJTZWN1cml0eVR5cGVzIixWdCksZnVuY3Rpb24oZSl7ZS5BQ0NFU1NfVE9LRU49ImFjY2Vzc1Rva2VuIixlLlVTRVJOQU1FX1BBU1NXT1JEPSJ1c2VybmFtZVBhc3N3b3JkIixlLlRMU19BQ0NFU1NfVE9LRU49InRsc0FjY2Vzc1Rva2VuIixlLlRMU19QUklWQVRFX0tFWT0idGxzUHJpdmF0ZUtleSJ9KFZ0fHxlKCJTZWN1cml0eVR5cGVzIixWdD17fSkpO2NvbnN0IEJ0PWUoIkdlY3VyaXR5VHlwZXNUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tWdC5BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl0sW1Z0LlVTRVJOQU1FX1BBU1NXT1JELCJnYXRld2F5LnNlY3VyaXR5LXR5cGVzLnVzZXJuYW1lLXBhc3N3b3JkIl0sW1Z0LlRMU19BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMudGxzLWFjY2Vzcy10b2tlbiJdXSkpO3ZhciBVdCxfdDtlKCJHYXRld2F5VmVyc2lvbiIsVXQpLGZ1bmN0aW9uKGUpe2UuQ3VycmVudD0iMy41LjIiLGUuTGVnYWN5PSJsZWdhY3kifShVdHx8ZSgiR2F0ZXdheVZlcnNpb24iLFV0PXt9KSksZSgiQ29ubmVjdG9yVHlwZSIsX3QpLGZ1bmN0aW9uKGUpe2UuTVFUVD0ibXF0dCIsZS5NT0RCVVM9Im1vZGJ1cyIsZS5HUlBDPSJncnBjIixlLk9QQ1VBPSJvcGN1YSIsZS5CTEU9ImJsZSIsZS5SRVFVRVNUPSJyZXF1ZXN0IixlLkNBTj0iY2FuIixlLkJBQ05FVD0iYmFjbmV0IixlLk9EQkM9Im9kYmMiLGUuUkVTVD0icmVzdCIsZS5TTk1QPSJzbm1wIixlLkZUUD0iZnRwIixlLlNPQ0tFVD0ic29ja2V0IixlLlhNUFA9InhtcHAiLGUuT0NQUD0ib2NwcCIsZS5DVVNUT009ImN1c3RvbSJ9KF90fHxlKCJDb25uZWN0b3JUeXBlIixfdD17fSkpO2NvbnN0IEh0PWUoIkdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIixuZXcgTWFwKFtbX3QuTVFUVCwiTVFUVCJdLFtfdC5NT0RCVVMsIk1PREJVUyJdLFtfdC5HUlBDLCJHUlBDIl0sW190Lk9QQ1VBLCJPUENVQSJdLFtfdC5CTEUsIkJMRSJdLFtfdC5SRVFVRVNULCJSRVFVRVNUIl0sW190LkNBTiwiQ0FOIl0sW190LkJBQ05FVCwiQkFDTkVUIl0sW190Lk9EQkMsIk9EQkMiXSxbX3QuUkVTVCwiUkVTVCJdLFtfdC5TTk1QLCJTTk1QIl0sW190LkZUUCwiRlRQIl0sW190LlNPQ0tFVCwiU09DS0VUIl0sW190LlhNUFAsIlhNUFAiXSxbX3QuT0NQUCwiT0NQUCJdLFtfdC5DVVNUT00sIkNVU1RPTSJdXSkpLHp0PWUoIk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzEsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1jb2lscyJdLFsyLCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtZGlzY3JldGUtaW5wdXRzIl0sWzMsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdLFs0LCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtaW5wdXQtcmVnaXN0ZXJzIl0sWzUsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMud3JpdGUtc2luZ2xlLWNvaWwiXSxbNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1zaW5nbGUtaG9sZGluZy1yZWdpc3RlciJdLFsxNSwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1jb2lscyJdLFsxNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdXSkpO3ZhciBXdDtlKCJCQUNuZXRSZXF1ZXN0VHlwZXMiLFd0KSxmdW5jdGlvbihlKXtlLldyaXRlUHJvcGVydHk9IndyaXRlUHJvcGVydHkiLGUuUmVhZFByb3BlcnR5PSJyZWFkUHJvcGVydHkifShXdHx8ZSgiQkFDbmV0UmVxdWVzdFR5cGVzIixXdD17fSkpO2NvbnN0IGp0PWUoIkJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tXdC5Xcml0ZVByb3BlcnR5LCJnYXRld2F5LnJwYy53cml0ZS1wcm9wZXJ0eSJdLFtXdC5SZWFkUHJvcGVydHksImdhdGV3YXkucnBjLnJlYWQtcHJvcGVydHkiXV0pKTt2YXIgS3Q7ZSgiQkFDbmV0T2JqZWN0VHlwZXMiLEt0KSxmdW5jdGlvbihlKXtlLkJpbmFyeUlucHV0PSJiaW5hcnlJbnB1dCIsZS5CaW5hcnlPdXRwdXQ9ImJpbmFyeU91dHB1dCIsZS5BbmFsb2dJbnB1dD0iYW5hbG9nSW5wdXQiLGUuQW5hbG9nT3V0cHV0PSJhbmFsb2dPdXRwdXQiLGUuQmluYXJ5VmFsdWU9ImJpbmFyeVZhbHVlIixlLkFuYWxvZ1ZhbHVlPSJhbmFsb2dWYWx1ZSJ9KEt0fHxlKCJCQUNuZXRPYmplY3RUeXBlcyIsS3Q9e30pKTtjb25zdCAkdD1lKCJCQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tLdC5BbmFsb2dPdXRwdXQsImdhdGV3YXkucnBjLmFuYWxvZy1vdXRwdXQiXSxbS3QuQW5hbG9nSW5wdXQsImdhdGV3YXkucnBjLmFuYWxvZy1pbnB1dCJdLFtLdC5CaW5hcnlPdXRwdXQsImdhdGV3YXkucnBjLmJpbmFyeS1vdXRwdXQiXSxbS3QuQmluYXJ5SW5wdXQsImdhdGV3YXkucnBjLmJpbmFyeS1pbnB1dCJdLFtLdC5CaW5hcnlWYWx1ZSwiZ2F0ZXdheS5ycGMuYmluYXJ5LXZhbHVlIl0sW0t0LkFuYWxvZ1ZhbHVlLCJnYXRld2F5LnJwYy5hbmFsb2ctdmFsdWUiXV0pKTt2YXIgWXQ7ZSgiQkxFTWV0aG9kcyIsWXQpLGZ1bmN0aW9uKGUpe2UuV1JJVEU9IndyaXRlIixlLlJFQUQ9InJlYWQiLGUuU0NBTj0ic2NhbiJ9KFl0fHxlKCJCTEVNZXRob2RzIixZdD17fSkpO2NvbnN0IFF0PWUoIkJMRU1ldGhvZHNUcmFuc2xhdGVzIixuZXcgTWFwKFtbWXQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl0sW1l0LlJFQUQsImdhdGV3YXkucnBjLnJlYWQiXSxbWXQuU0NBTiwiZ2F0ZXdheS5ycGMuc2NhbiJdXSkpO3ZhciBKdCxYdDtlKCJDQU5CeXRlT3JkZXJzIixKdCksZnVuY3Rpb24oZSl7ZS5MSVRUTEU9IkxJVFRMRSIsZS5CSUc9IkJJRyJ9KEp0fHxlKCJDQU5CeXRlT3JkZXJzIixKdD17fSkpLGUoIlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzIixYdCksZnVuY3Rpb24oZSl7ZS5XUklURT0id3JpdGUifShYdHx8ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3MiLFh0PXt9KSk7Y29uc3QgWnQ9ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzIixuZXcgTWFwKFtbWHQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl1dKSk7dmFyIGVuO2UoIlNOTVBNZXRob2RzIixlbiksZnVuY3Rpb24oZSl7ZS5TRVQ9InNldCIsZS5NVUxUSVNFVD0ibXVsdGlzZXQiLGUuR0VUPSJnZXQiLGUuQlVMS1dBTEs9ImJ1bGt3YWxrIixlLlRBQkxFPSJ0YWJsZSIsZS5NVUxUSUdFVD0ibXVsdGlnZXQiLGUuR0VUTkVYVD0iZ2V0bmV4dCIsZS5CVUxLR0VUPSJidWxrZ2V0IixlLldBTEtTPSJ3YWxrIn0oZW58fGUoIlNOTVBNZXRob2RzIixlbj17fSkpO2NvbnN0IHRuPWUoIlNOTVBNZXRob2RzVHJhbnNsYXRpb25zIixuZXcgTWFwKFtbZW4uU0VULCJnYXRld2F5LnJwYy5zZXQiXSxbZW4uTVVMVElTRVQsImdhdGV3YXkucnBjLm11bHRpc2V0Il0sW2VuLkdFVCwiZ2F0ZXdheS5ycGMuZ2V0Il0sW2VuLkJVTEtXQUxLLCJnYXRld2F5LnJwYy5idWxrLXdhbGsiXSxbZW4uVEFCTEUsImdhdGV3YXkucnBjLnRhYmxlIl0sW2VuLk1VTFRJR0VULCJnYXRld2F5LnJwYy5tdWx0aS1nZXQiXSxbZW4uR0VUTkVYVCwiZ2F0ZXdheS5ycGMuZ2V0LW5leHQiXSxbZW4uQlVMS0dFVCwiZ2F0ZXdheS5ycGMuYnVsay1nZXQiXSxbZW4uV0FMS1MsImdhdGV3YXkucnBjLndhbGsiXV0pKTt2YXIgbm4sYW4sb24scm4sc24sbG47ZSgiSFRUUE1ldGhvZHMiLG5uKSxmdW5jdGlvbihlKXtlLkNPTk5FQ1Q9IkNPTk5FQ1QiLGUuREVMRVRFPSJERUxFVEUiLGUuR0VUPSJHRVQiLGUuSEVBRD0iSEVBRCIsZS5PUFRJT05TPSJPUFRJT05TIixlLlBBVENIPSJQQVRDSCIsZS5QT1NUPSJQT1NUIixlLlBVVD0iUFVUIixlLlRSQUNFPSJUUkFDRSJ9KG5ufHxlKCJIVFRQTWV0aG9kcyIsbm49e30pKSxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuKSxmdW5jdGlvbihlKXtlLlVURl84PSJ1dGYtOCJ9KGFufHxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuPXt9KSksZSgiQ29uZmlndXJhdGlvbk1vZGVzIixvbiksZnVuY3Rpb24oZSl7ZS5CQVNJQz0iYmFzaWMiLGUuQURWQU5DRUQ9ImFkdmFuY2VkIn0ob258fGUoIkNvbmZpZ3VyYXRpb25Nb2RlcyIsb249e30pKSxlKCJTZWN1cml0eVR5cGUiLHJuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyIsZS5DRVJUSUZJQ0FURVM9ImNlcnRpZmljYXRlcyJ9KHJufHxlKCJTZWN1cml0eVR5cGUiLHJuPXt9KSksZSgiUmVwb3J0U3RyYXRlZ3lUeXBlIixzbiksZnVuY3Rpb24oZSl7ZS5PbkNoYW5nZT0iT05fQ0hBTkdFIixlLk9uUmVwb3J0UGVyaW9kPSJPTl9SRVBPUlRfUEVSSU9EIixlLk9uQ2hhbmdlT3JSZXBvcnRQZXJpb2Q9Ik9OX0NIQU5HRV9PUl9SRVBPUlRfUEVSSU9EIn0oc258fGUoIlJlcG9ydFN0cmF0ZWd5VHlwZSIsc249e30pKSxlKCJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZSIsbG4pLGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0b3I9NmU0XT0iQ29ubmVjdG9yIixlW2UuRGV2aWNlPTNlNF09IkRldmljZSIsZVtlLktleT0xNWUzXT0iS2V5In0obG58fGUoIlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlIixsbj17fSkpO2NvbnN0IGNuPWUoIlJlcG9ydFN0cmF0ZWd5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW3NuLk9uQ2hhbmdlLCJnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5vbi1jaGFuZ2UiXSxbc24uT25SZXBvcnRQZXJpb2QsImdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5Lm9uLXJlcG9ydC1wZXJpb2QiXSxbc24uT25DaGFuZ2VPclJlcG9ydFBlcmlvZCwiZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kub24tY2hhbmdlLW9yLXJlcG9ydC1wZXJpb2QiXV0pKTt2YXIgcG47ZSgiTW9kZVR5cGUiLHBuKSxmdW5jdGlvbihlKXtlLk5PTkU9Ik5vbmUiLGUuU0lHTj0iU2lnbiIsZS5TSUdOQU5ERU5DUllQVD0iU2lnbkFuZEVuY3J5cHQifShwbnx8ZSgiTW9kZVR5cGUiLHBuPXt9KSk7Y29uc3QgbW49ZSgiU2VjdXJpdHlUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbcm4uQU5PTllNT1VTLCJnYXRld2F5LmJyb2tlci5zZWN1cml0eS10eXBlcy5hbm9ueW1vdXMiXSxbcm4uQkFTSUMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmJhc2ljIl0sW3JuLkNFUlRJRklDQVRFUywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuY2VydGlmaWNhdGVzIl1dKSk7dmFyIGRuO2UoIlJlc3RTZWN1cml0eVR5cGUiLGRuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyJ9KGRufHxlKCJSZXN0U2VjdXJpdHlUeXBlIixkbj17fSkpO2NvbnN0IHVuPWUoIlJlc3RTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tkbi5BTk9OWU1PVVMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmFub255bW91cyJdLFtkbi5CQVNJQywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuYmFzaWMiXV0pKSxnbj1lKCJNcXR0VmVyc2lvbnMiLFt7bmFtZTozLjEsdmFsdWU6M30se25hbWU6My4xMSx2YWx1ZTo0fSx7bmFtZTo1LHZhbHVlOjV9XSk7dmFyIGZuO2UoIk1hcHBpbmdUeXBlIixmbiksZnVuY3Rpb24oZSl7ZS5EQVRBPSJkYXRhIixlLlJFUVVFU1RTPSJyZXF1ZXN0cyIsZS5PUENVQT0iT1BDdWEifShmbnx8ZSgiTWFwcGluZ1R5cGUiLGZuPXt9KSk7Y29uc3QgeW49ZSgiTWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nIl0sW2ZuLk9QQ1VBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdXSkpLGJuPWUoIk1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbZm4uREFUQSwiZ2F0ZXdheS5kYXRhLW1hcHBpbmctaGludCJdLFtmbi5PUENVQSwiZ2F0ZXdheS5vcGN1YS1kYXRhLW1hcHBpbmctaGludCJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nLWhpbnQiXV0pKSxobj1lKCJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNzZWN0aW9uLW1hcHBpbmciXSxbZm4uT1BDVUEsdisiL2RvY3MvaW90LWdhdGV3YXkvY29uZmlnL29wYy11YS8jc2VjdGlvbi1tYXBwaW5nIl0sW2ZuLlJFUVVFU1RTLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNyZXF1ZXN0cy1tYXBwaW5nIl1dKSkseG49ZSgiUXVhbGl0eVR5cGVzIixbMCwxLDJdKSx2bj1lKCJRdWFsaXR5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzAsImdhdGV3YXkucW9zLmF0LW1vc3Qtb25jZSJdLFsxLCJnYXRld2F5LnFvcy5hdC1sZWFzdC1vbmNlIl0sWzIsImdhdGV3YXkucW9zLmV4YWN0bHktb25jZSJdXSkpO3ZhciB3bjtlKCJDb252ZXJ0b3JUeXBlIix3biksZnVuY3Rpb24oZSl7ZS5KU09OPSJqc29uIixlLkJZVEVTPSJieXRlcyIsZS5DVVNUT009ImN1c3RvbSJ9KHdufHxlKCJDb252ZXJ0b3JUeXBlIix3bj17fSkpO2NvbnN0IENuPWUoIkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1t3bi5KU09OLCJnYXRld2F5LkpTT04iXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMiXSxbd24uQ1VTVE9NLCJnYXRld2F5LmN1c3RvbSJdXSkpO3ZhciBUbixTbixrbjtlKCJTb3VyY2VUeXBlIixUbiksZnVuY3Rpb24oZSl7ZS5NU0c9Im1lc3NhZ2UiLGUuVE9QSUM9InRvcGljIixlLkNPTlNUPSJjb25zdGFudCJ9KFRufHxlKCJTb3VyY2VUeXBlIixUbj17fSkpLGUoIk9QQ1VhU291cmNlVHlwZSIsU24pLGZ1bmN0aW9uKGUpe2UuUEFUSD0icGF0aCIsZS5JREVOVElGSUVSPSJpZGVudGlmaWVyIixlLkNPTlNUPSJjb25zdGFudCJ9KFNufHxlKCJPUENVYVNvdXJjZVR5cGUiLFNuPXt9KSksZSgiRGV2aWNlSW5mb1R5cGUiLGtuKSxmdW5jdGlvbihlKXtlLkZVTEw9ImZ1bGwiLGUuUEFSVElBTD0icGFydGlhbCJ9KGtufHxlKCJEZXZpY2VJbmZvVHlwZSIsa249e30pKTtjb25zdCBMbj1lKCJTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbVG4uTVNHLCJnYXRld2F5LnNvdXJjZS10eXBlLm1zZyJdLFtUbi5UT1BJQywiZ2F0ZXdheS5zb3VyY2UtdHlwZS50b3BpYyJdLFtUbi5DT05TVCwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5jb25zdCJdLFtTbi5QQVRILCJnYXRld2F5LnNvdXJjZS10eXBlLnBhdGgiXSxbU24uSURFTlRJRklFUiwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5pZGVudGlmaWVyIl0sW1NuLkNPTlNULCJnYXRld2F5LnNvdXJjZS10eXBlLmNvbnN0Il1dKSk7dmFyIEZuLEluO2UoIlNlcnZlclNpZGVScGNUeXBlIixGbiksZnVuY3Rpb24oZSl7ZS5XaXRoUmVzcG9uc2U9InR3b1dheSIsZS5XaXRob3V0UmVzcG9uc2U9Im9uZVdheSJ9KEZufHxlKCJTZXJ2ZXJTaWRlUnBjVHlwZSIsRm49e30pKSxlKCJSZXF1ZXN0VHlwZSIsSW4pLGZ1bmN0aW9uKGUpe2UuQ09OTkVDVF9SRVFVRVNUPSJjb25uZWN0UmVxdWVzdHMiLGUuRElTQ09OTkVDVF9SRVFVRVNUPSJkaXNjb25uZWN0UmVxdWVzdHMiLGUuQVRUUklCVVRFX1JFUVVFU1Q9ImF0dHJpYnV0ZVJlcXVlc3RzIixlLkFUVFJJQlVURV9VUERBVEU9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuU0VSVkVSX1NJREVfUlBDPSJzZXJ2ZXJTaWRlUnBjIn0oSW58fGUoIlJlcXVlc3RUeXBlIixJbj17fSkpO2NvbnN0IEFuPWUoIlJlcXVlc3RUeXBlc1RyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW0luLkNPTk5FQ1RfUkVRVUVTVCwiZ2F0ZXdheS5yZXF1ZXN0LmNvbm5lY3QtcmVxdWVzdCJdLFtJbi5ESVNDT05ORUNUX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5kaXNjb25uZWN0LXJlcXVlc3QiXSxbSW4uQVRUUklCVVRFX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5hdHRyaWJ1dGUtcmVxdWVzdCJdLFtJbi5BVFRSSUJVVEVfVVBEQVRFLCJnYXRld2F5LnJlcXVlc3QuYXR0cmlidXRlLXVwZGF0ZSJdLFtJbi5TRVJWRVJfU0lERV9SUEMsImdhdGV3YXkucmVxdWVzdC5ycGMtY29ubmVjdGlvbiJdXSkpO3ZhciBObjtlKCJNYXBwaW5nS2V5c1R5cGUiLE5uKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5DVVNUT009ImV4dGVuc2lvbkNvbmZpZyIsZS5SUENfTUVUSE9EUz0icnBjX21ldGhvZHMiLGUuQVRUUklCVVRFU19VUERBVEVTPSJhdHRyaWJ1dGVzX3VwZGF0ZXMifShObnx8ZSgiTWFwcGluZ0tleXNUeXBlIixObj17fSkpO2NvbnN0IE1uPWUoIk1hcHBpbmdLZXlzUGFuZWxUaXRsZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LnRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5LmtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5LnJwYy1tZXRob2RzIl1dKSksRW49ZSgiTWFwcGluZ0tleXNBZGRLZXlUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tObi5BVFRSSUJVVEVTLCJnYXRld2F5LmFkZC1hdHRyaWJ1dGUiXSxbTm4uVElNRVNFUklFUywiZ2F0ZXdheS5hZGQtdGltZXNlcmllcyJdLFtObi5DVVNUT00sImdhdGV3YXkuYWRkLWtleSJdLFtObi5BVFRSSUJVVEVTX1VQREFURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZS11cGRhdGUiXSxbTm4uUlBDX01FVEhPRFMsImdhdGV3YXkuYWRkLXJwYy1tZXRob2QiXV0pKSxxbj1lKCJNYXBwaW5nS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW05uLkNVU1RPTSwiZ2F0ZXdheS5kZWxldGUta2V5Il0sW05uLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFtObi5SUENfTUVUSE9EUywiZ2F0ZXdheS5kZWxldGUtcnBjLW1ldGhvZCJdXSkpLERuPWUoIk1hcHBpbmdLZXlzTm9LZXlzVGV4dFRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkubm8tYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5Lm5vLXRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5Lm5vLWtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5Lm5vLXJwYy1tZXRob2RzIl1dKSk7dmFyIFBuLEduLE9uO2UoIlNlcnZlclNpZGVSUENUeXBlIixQbiksZnVuY3Rpb24oZSl7ZS5PTkVfV0FZPSJvbmVXYXkiLGUuVFdPX1dBWT0idHdvV2F5In0oUG58fGUoIlNlcnZlclNpZGVSUENUeXBlIixQbj17fSkpLGUoIk1hcHBpbmdWYWx1ZVR5cGUiLEduKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLklOVEVHRVI9ImludGVnZXIiLGUuRE9VQkxFPSJkb3VibGUiLGUuQk9PTEVBTj0iYm9vbGVhbiJ9KEdufHxlKCJNYXBwaW5nVmFsdWVUeXBlIixHbj17fSkpLGUoIk1vZGlmaWVyVHlwZSIsT24pLGZ1bmN0aW9uKGUpe2UuRElWSURFUj0iZGl2aWRlciIsZS5NVUxUSVBMSUVSPSJtdWx0aXBsaWVyIn0oT258fGUoIk1vZGlmaWVyVHlwZSIsT249e30pKTtjb25zdCBSbj1lKCJNb2RpZmllclR5cGVzTWFwIixuZXcgTWFwKFtbT24uRElWSURFUix7bmFtZToiZ2F0ZXdheS5kaXZpZGVyIixpY29uOiJtZGk6ZGl2aXNpb24ifV0sW09uLk1VTFRJUExJRVIse25hbWU6ImdhdGV3YXkubXVsdGlwbGllciIsaWNvbjoibWRpOm11bHRpcGxpY2F0aW9uIn1dXSkpLFZuPWUoIm1hcHBpbmdWYWx1ZVR5cGVzTWFwIixuZXcgTWFwKFtbR24uU1RSSU5HLHtuYW1lOiJ2YWx1ZS5zdHJpbmciLGljb246Im1kaTpmb3JtYXQtdGV4dCJ9XSxbR24uSU5URUdFUix7bmFtZToidmFsdWUuaW50ZWdlciIsaWNvbjoibWRpOm51bWVyaWMifV0sW0duLkRPVUJMRSx7bmFtZToidmFsdWUuZG91YmxlIixpY29uOiJtZGk6bnVtZXJpYyJ9XSxbR24uQk9PTEVBTix7bmFtZToidmFsdWUuYm9vbGVhbiIsaWNvbjoibWRpOmNoZWNrYm94LW1hcmtlZC1vdXRsaW5lIn1dXSkpLEJuPWUoIkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbd24uSlNPTiwiZ2F0ZXdheS5KU09OLWhpbnQiXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMtaGludCJdLFt3bi5DVVNUT00sImdhdGV3YXkuY3VzdG9tLWhpbnQiXV0pKTt2YXIgVW47ZSgiU2VjdXJpdHlQb2xpY3kiLFVuKSxmdW5jdGlvbihlKXtlLkJBU0lDMTI4PSJCYXNpYzEyOFJzYTE1IixlLkJBU0lDMjU2PSJCYXNpYzI1NiIsZS5CQVNJQzI1NlNIQT0iQmFzaWMyNTZTaGEyNTYifShVbnx8ZSgiU2VjdXJpdHlQb2xpY3kiLFVuPXt9KSk7Y29uc3QgX249ZSgiU2VjdXJpdHlQb2xpY3lUeXBlcyIsW3t2YWx1ZTpVbi5CQVNJQzEyOCxuYW1lOiJCYXNpYzEyOFJTQTE1In0se3ZhbHVlOlVuLkJBU0lDMjU2LG5hbWU6IkJhc2ljMjU2In0se3ZhbHVlOlVuLkJBU0lDMjU2U0hBLG5hbWU6IkJhc2ljMjU2U0hBMjU2In1dKTt2YXIgSG47ZSgiTW9kYnVzUHJvdG9jb2xUeXBlIixIbiksZnVuY3Rpb24oZSl7ZS5UQ1A9InRjcCIsZS5VRFA9InVkcCIsZS5TZXJpYWw9InNlcmlhbCJ9KEhufHxlKCJNb2RidXNQcm90b2NvbFR5cGUiLEhuPXt9KSk7Y29uc3Qgem49ZSgiTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAiLG5ldyBNYXAoW1tIbi5UQ1AsIlRDUCJdLFtIbi5VRFAsIlVEUCJdLFtIbi5TZXJpYWwsIlNlcmlhbCJdXSkpO3ZhciBXbixqbjtlKCJNb2RidXNNZXRob2RUeXBlIixXbiksZnVuY3Rpb24oZSl7ZS5TT0NLRVQ9InNvY2tldCIsZS5SVFU9InJ0dSJ9KFdufHxlKCJNb2RidXNNZXRob2RUeXBlIixXbj17fSkpLGUoIk1vZGJ1c1NlcmlhbE1ldGhvZFR5cGUiLGpuKSxmdW5jdGlvbihlKXtlLlJUVT0icnR1IixlLkFTQ0lJPSJhc2NpaSJ9KGpufHxlKCJNb2RidXNTZXJpYWxNZXRob2RUeXBlIixqbj17fSkpO2NvbnN0IEtuPWUoIk1vZGJ1c01ldGhvZExhYmVsc01hcCIsbmV3IE1hcChbW1duLlNPQ0tFVCwiU29ja2V0Il0sW1duLlJUVSwiUlRVIl0sW2puLkFTQ0lJLCJBU0NJSSJdXSkpLCRuPWUoIk1vZGJ1c0J5dGVTaXplcyIsWzUsNiw3LDhdKTt2YXIgWW47ZSgiTW9kYnVzUGFyaXR5IixZbiksZnVuY3Rpb24oZSl7ZS5FdmVuPSJFIixlLk9kZD0iTyIsZS5Ob25lPSJOIn0oWW58fGUoIk1vZGJ1c1Bhcml0eSIsWW49e30pKTtjb25zdCBRbj1lKCJNb2RidXNQYXJpdHlMYWJlbHNNYXAiLG5ldyBNYXAoW1tZbi5FdmVuLCJFdmVuIl0sW1luLk9kZCwiT2RkIl0sW1luLk5vbmUsIk5vbmUiXV0pKTt2YXIgSm4sWG47ZSgiTW9kYnVzT3JkZXJUeXBlIixKbiksZnVuY3Rpb24oZSl7ZS5CSUc9IkJJRyIsZS5MSVRUTEU9IkxJVFRMRSJ9KEpufHxlKCJNb2RidXNPcmRlclR5cGUiLEpuPXt9KSksZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbiksZnVuY3Rpb24oZSl7ZS5Ib2xkaW5nUmVnaXN0ZXJzPSJob2xkaW5nX3JlZ2lzdGVycyIsZS5Db2lsc0luaXRpYWxpemVyPSJjb2lsc19pbml0aWFsaXplciIsZS5JbnB1dFJlZ2lzdGVycz0iaW5wdXRfcmVnaXN0ZXJzIixlLkRpc2NyZXRlSW5wdXRzPSJkaXNjcmV0ZV9pbnB1dHMifShYbnx8ZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbj17fSkpO2NvbnN0IFpuPWUoIk1vZGJ1c1JlZ2lzdGVyVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbWG4uSG9sZGluZ1JlZ2lzdGVycywiZ2F0ZXdheS5ob2xkaW5nX3JlZ2lzdGVycyJdLFtYbi5Db2lsc0luaXRpYWxpemVyLCJnYXRld2F5LmNvaWxzX2luaXRpYWxpemVyIl0sW1huLklucHV0UmVnaXN0ZXJzLCJnYXRld2F5LmlucHV0X3JlZ2lzdGVycyJdLFtYbi5EaXNjcmV0ZUlucHV0cywiZ2F0ZXdheS5kaXNjcmV0ZV9pbnB1dHMiXV0pKTt2YXIgZWE7ZSgiTW9kYnVzRGF0YVR5cGUiLGVhKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLkJZVEVTPSJieXRlcyIsZS5CSVRTPSJiaXRzIixlLklOVDg9IjhpbnQiLGUuVUlOVDg9Ijh1aW50IixlLkZMT0FUOD0iOGZsb2F0IixlLklOVDE2PSIxNmludCIsZS5VSU5UMTY9IjE2dWludCIsZS5GTE9BVDE2PSIxNmZsb2F0IixlLklOVDMyPSIzMmludCIsZS5VSU5UMzI9IjMydWludCIsZS5GTE9BVDMyPSIzMmZsb2F0IixlLklOVDY0PSI2NGludCIsZS5VSU5UNjQ9IjY0dWludCIsZS5GTE9BVDY0PSI2NGZsb2F0In0oZWF8fGUoIk1vZGJ1c0RhdGFUeXBlIixlYT17fSkpO2NvbnN0IHRhPWUoIk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzIixbZWEuQllURVMsZWEuQklUUyxlYS5TVFJJTkddKTt2YXIgbmEsYWE7ZSgiTW9kYnVzT2JqZWN0Q291bnRCeURhdGFUeXBlIixuYSksZnVuY3Rpb24oZSl7ZVtlWyI4aW50Il09MV09IjhpbnQiLGVbZVsiOHVpbnQiXT0xXT0iOHVpbnQiLGVbZVsiOGZsb2F0Il09MV09IjhmbG9hdCIsZVtlWyIxNmludCJdPTFdPSIxNmludCIsZVtlWyIxNnVpbnQiXT0xXT0iMTZ1aW50IixlW2VbIjE2ZmxvYXQiXT0xXT0iMTZmbG9hdCIsZVtlWyIzMmludCJdPTJdPSIzMmludCIsZVtlWyIzMnVpbnQiXT0yXT0iMzJ1aW50IixlW2VbIjMyZmxvYXQiXT0yXT0iMzJmbG9hdCIsZVtlWyI2NGludCJdPTRdPSI2NGludCIsZVtlWyI2NHVpbnQiXT00XT0iNjR1aW50IixlW2VbIjY0ZmxvYXQiXT00XT0iNjRmbG9hdCJ9KG5hfHxlKCJNb2RidXNPYmplY3RDb3VudEJ5RGF0YVR5cGUiLG5hPXt9KSksZSgiTW9kYnVzVmFsdWVLZXkiLGFhKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5BVFRSSUJVVEVTX1VQREFURVM9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuUlBDX1JFUVVFU1RTPSJycGMifShhYXx8ZSgiTW9kYnVzVmFsdWVLZXkiLGFhPXt9KSk7Y29uc3Qgb2E9ZSgiTW9kYnVzS2V5c1BhbmVsVGl0bGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5LmF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS50aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkucnBjLXJlcXVlc3RzIl1dKSksaWE9ZSgiTW9kYnVzS2V5c0FkZEtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmFkZC10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hZGQtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuYWRkLXJwYy1yZXF1ZXN0Il1dKSkscmE9ZSgiTW9kYnVzS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuZGVsZXRlLXJwYy1yZXF1ZXN0Il1dKSksc2E9ZSgiTW9kYnVzS2V5c05vS2V5c1RleHRUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS5uby10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5uby1hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkubm8tcnBjLXJlcXVlc3RzIl1dKSksbGE9ZSgiTW9kYnVzQmF1ZHJhdGVzIixbNDgwMCw5NjAwLDE5MjAwLDM4NDAwLDU3NjAwLDExNTIwMCwyMzA0MDAsNDYwODAwLDkyMTYwMF0pO2NsYXNzIGNhe2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsidHMiLCJzdGF0dXMiLCJtZXNzYWdlIl0sdGhpcy5nYXRld2F5TG9nTGlua3M9W3tuYW1lOiJHZW5lcmFsIixrZXk6IkxPR1MifSx7bmFtZToiU2VydmljZSIsa2V5OiJTRVJWSUNFX0xPR1MifSx7bmFtZToiQ29ubmVjdGlvbiIsa2V5OiJDT05ORUNUSU9OX0xPR1MifSx7bmFtZToiU3RvcmFnZSIsa2V5OiJTVE9SQUdFX0xPR1MifSx7a2V5OiJFWFRFTlNJT05TX0xPR1MiLG5hbWU6IkV4dGVuc2lvbiJ9XTtjb25zdCBlPXtwcm9wZXJ0eToidHMiLGRpcmVjdGlvbjp3LkRFU0N9O3RoaXMucGFnZUxpbms9bmV3IEMoMTAsMCxudWxsLGUpLHRoaXMuZGF0YVNvdXJjZT1uZXcgeShbXSl9bmdPbkluaXQoKXt0aGlzLnVwZGF0ZVdpZGdldFRpdGxlKCl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3I9dGhpcy5wYWdpbmF0b3IsdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vblRpbWV3aW5kb3dDaGFuZ2VGdW5jdGlvbj1lPT4odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vcHRpb25zLnRpbWVXaW5kb3dDb25maWc9ZSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksZSksdGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmxvZ0xpbmtzPVt7a2V5OmAke2Uua2V5fV9MT0dTYCxuYW1lOiJDb25uZWN0b3IiLGZpbHRlckZuOmU9PiFlLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX0se2tleTpgJHtlLmtleX1fTE9HU2AsbmFtZToiQ29udmVydGVyIixmaWx0ZXJGbjplPT5lLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX1dfWVsc2UgdGhpcy5sb2dMaW5rcz10aGlzLmdhdGV3YXlMb2dMaW5rczt0aGlzLmFjdGl2ZUxpbms9dGhpcy5sb2dMaW5rc1swXSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXVwZGF0ZVdpZGdldFRpdGxlKCl7aWYodGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LndpZGdldENvbmZpZy50aXRsZSx0PSIke2Nvbm5lY3Rvck5hbWV9IjtpZihlLmluY2x1ZGVzKHQpKXtjb25zdCBuPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmN0eC53aWRnZXRUaXRsZT1lLnJlcGxhY2UodCxuLmtleSl9fX11cGRhdGVEYXRhKCl7aWYodGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhLmxlbmd0aCYmdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhWzBdKXtsZXQgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGFbMF0uZGF0YS5tYXAoKGU9Pntjb25zdCB0PXt0czplWzBdLGtleTp0aGlzLmFjdGl2ZUxpbmsua2V5LG1lc3NhZ2U6ZVsxXSxzdGF0dXM6IklOVkFMSUQgTE9HIEZPUk1BVCJ9O3RyeXt0Lm1lc3NhZ2U9L1xbKC4qKS8uZXhlYyhlWzFdKVswXX1jYXRjaChuKXt0Lm1lc3NhZ2U9ZVsxXX10cnl7dC5zdGF0dXM9ZVsxXS5tYXRjaCgvXHwoXHcrKVx8LylbMV19Y2F0Y2goZSl7dC5zdGF0dXM9IklOVkFMSUQgTE9HIEZPUk1BVCJ9cmV0dXJuIHR9KSk7dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuJiYoZT1lLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuKGUpKSkpLHRoaXMuZGF0YVNvdXJjZS5kYXRhPWV9fW9uVGFiQ2hhbmdlZChlKXt0aGlzLmFjdGl2ZUxpbms9ZSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXN0YXR1c0NsYXNzKGUpe3N3aXRjaChlKXtjYXNlIHF0LkRFQlVHOnJldHVybiJzdGF0dXMgc3RhdHVzLWRlYnVnIjtjYXNlIHF0LldBUk5JTkc6cmV0dXJuInN0YXR1cyBzdGF0dXMtd2FybmluZyI7Y2FzZSBxdC5FUlJPUjpjYXNlIHF0LkVYQ0VQVElPTjpyZXR1cm4ic3RhdHVzIHN0YXR1cy1lcnJvciI7ZGVmYXVsdDpyZXR1cm4ic3RhdHVzIHN0YXR1cy1pbmZvIn19c3RhdHVzQ2xhc3NNc2coZSl7aWYoZT09PXF0LkVYQ0VQVElPTilyZXR1cm4ibXNnLXN0YXR1cy1leGNlcHRpb24ifXRyYWNrQnlMb2dUcyhlLHQpe3JldHVybiB0LnRzfWNoYW5nZVN1YnNjcmlwdGlvbigpe3RoaXMuY3R4LmRhdGFzb3VyY2VzJiZ0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlcyYmKHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlc1swXS5kYXRhS2V5cz1be25hbWU6dGhpcy5hY3RpdmVMaW5rLmtleSx0eXBlOlQudGltZXNlcmllcyxzZXR0aW5nczp7fX1dLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5jYWxsYmFja3Mub25EYXRhVXBkYXRlZD0oKT0+e3RoaXMudXBkYXRlRGF0YSgpfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjYSxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Y2Esc2VsZWN0b3I6InRiLWdhdGV3YXktbG9ncyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToic2VhcmNoSW5wdXRGaWVsZCIsZmlyc3Q6ITAscHJlZGljYXRlOlsic2VhcmNoSW5wdXQiXSxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic29ydCIsZmlyc3Q6ITAscHJlZGljYXRlOmcsZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InBhZ2luYXRvciIsZmlyc3Q6ITAscHJlZGljYXRlOmgsZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRUYWJsZSxzZWxlY3RvcjoibWF0LXRhYmxlLCB0YWJsZVttYXQtdGFibGVdIixleHBvcnRBczpbIm1hdFRhYmxlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsRGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyQ2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyUm93RGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyUm93RGVmXSIsaW5wdXRzOlsibWF0SGVhZGVyUm93RGVmIiwibWF0SGVhZGVyUm93RGVmU3RpY2t5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDb2x1bW5EZWYsc2VsZWN0b3I6IlttYXRDb2x1bW5EZWZdIixpbnB1dHM6WyJtYXRDb2x1bW5EZWYiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGxEZWYsc2VsZWN0b3I6IlttYXRDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRSb3dEZWYsc2VsZWN0b3I6IlttYXRSb3dEZWZdIixpbnB1dHM6WyJtYXRSb3dEZWZDb2x1bW5zIiwibWF0Um93RGVmV2hlbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbCxzZWxlY3RvcjoibWF0LWhlYWRlci1jZWxsLCB0aFttYXQtaGVhZGVyLWNlbGxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGwsc2VsZWN0b3I6Im1hdC1jZWxsLCB0ZFttYXQtY2VsbF0ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0SGVhZGVyUm93LHNlbGVjdG9yOiJtYXQtaGVhZGVyLXJvdywgdHJbbWF0LWhlYWRlci1yb3ddIixleHBvcnRBczpbIm1hdEhlYWRlclJvdyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0Um93LHNlbGVjdG9yOiJtYXQtcm93LCB0clttYXQtcm93XSIsZXhwb3J0QXM6WyJtYXRSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp4Lk1hdFBhZ2luYXRvcixzZWxlY3RvcjoibWF0LXBhZ2luYXRvciIsaW5wdXRzOlsiY29sb3IiLCJwYWdlSW5kZXgiLCJsZW5ndGgiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImhpZGVQYWdlU2l6ZSIsInNob3dGaXJzdExhc3RCdXR0b25zIiwic2VsZWN0Q29uZmlnIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsicGFnZSJdLGV4cG9ydEFzOlsibWF0UGFnaW5hdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp6Lk1hdERpdmlkZXIsc2VsZWN0b3I6Im1hdC1kaXZpZGVyIixpbnB1dHM6WyJ2ZXJ0aWNhbCIsImluc2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXYsc2VsZWN0b3I6IlttYXQtdGFiLW5hdi1iYXJdIixpbnB1dHM6WyJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJkaXNhYmxlUmlwcGxlIiwiY29sb3IiLCJ0YWJQYW5lbCJdLGV4cG9ydEFzOlsibWF0VGFiTmF2QmFyIiwibWF0VGFiTmF2Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXZQYW5lbCxzZWxlY3RvcjoibWF0LXRhYi1uYXYtcGFuZWwiLGlucHV0czpbImlkIl0sZXhwb3J0QXM6WyJtYXRUYWJOYXZQYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiTGluayxzZWxlY3RvcjoiW21hdC10YWItbGlua10sIFttYXRUYWJMaW5rXSIsaW5wdXRzOlsiYWN0aXZlIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJpZCJdLGV4cG9ydEFzOlsibWF0VGFiTGluayJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUxvZ3NDb21wb25lbnQiLGNhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmNhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWxvZ3MiLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2N0eDpbe3R5cGU6YX1dLGRpYWxvZ1JlZjpbe3R5cGU6YX1dLHNlYXJjaElucHV0RmllbGQ6W3t0eXBlOm8sYXJnczpbInNlYXJjaElucHV0Il19XSxzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0scGFnaW5hdG9yOlt7dHlwZTpvLGFyZ3M6W2hdfV19fSk7Y2xhc3MgcGF7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLnV0aWxzPW4sdGhpcy5pc051bWVyaWNEYXRhPSExLHRoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3RhdGlzdGljc0tleXM9W10sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnM9e2NhbGxiYWNrczp7b25EYXRhVXBkYXRlZDooKT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfSx1c2VEYXNoYm9hcmRUaW1ld2luZG93OiExLGxlZ2VuZENvbmZpZzp7cG9zaXRpb246Uy5ib3R0b219fSx0aGlzLmluaXQ9KCk9Pnt0aGlzLmZsb3RDdHg9eyRzY29wZTp0aGlzLmN0eC4kc2NvcGUsJGluamVjdG9yOnRoaXMuY3R4LiRpbmplY3Rvcix1dGlsczp0aGlzLmN0eC51dGlscyxpc01vYmlsZTp0aGlzLmN0eC5pc01vYmlsZSxpc0VkaXQ6dGhpcy5jdHguaXNFZGl0LHN1YnNjcmlwdGlvbkFwaTp0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGksZGV0ZWN0Q2hhbmdlczp0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzLHNldHRpbmdzOnRoaXMuY3R4LnNldHRpbmdzfX0sdGhpcy51cGRhdGVDaGFydD0oKT0+e30sdGhpcy5yZXNpemU9KCk9Pnt9O2NvbnN0IGE9e3Byb3BlcnR5OiIwIixkaXJlY3Rpb246dy5ERVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwwLG51bGwsYSksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiMCIsIjEiXSx0aGlzLmRhdGFTb3VyY2U9bmV3IHkoW10pLHRoaXMuc3RhdGlzdGljRm9ybT10aGlzLmZiLmdyb3VwKHtzdGF0aXN0aWNLZXk6W251bGwsW11dfSksdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e3RoaXMuY29tbWFuZE9iaj1udWxsLHRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5jb21tYW5kT2JqPXRoaXMuY29tbWFuZHMuZmluZCgodD0+dC5hdHRyaWJ1dGVPbkdhdGV3YXk9PT1lKSkpLHRoaXMuc3Vic2NyaXB0aW9uSW5mbyYmdGhpcy5jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhc291cmNlc1swXS5lbnRpdHksZSl9KSl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKCk9PnRoaXMuc29ydERhdGEoKSkpLHRoaXMuaW5pdCgpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXMubGVuZ3RoKXtjb25zdCBlPXRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZW50aXR5O2lmKGUuaWQuaWQ9PT1rKXJldHVybjt0aGlzLmdlbmVyYWw/dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eVRpbWVzZXJpZXNMYXRlc3QoZS5pZCkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGU9PmUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1Byb2R1Y2VkIil8fGUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1NlbnQiKSkpO3RoaXMuY3JlYXRlR2VuZXJhbENoYXJ0c1N1YnNjcmlwdGlvbihlLG4pfSkpOnRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKGUuaWQsTC5TSEFSRURfU0NPUEUsWyJnZW5lcmFsX2NvbmZpZ3VyYXRpb24iXSkuc3Vic2NyaWJlKCh0PT57dCYmdC5sZW5ndGgmJih0aGlzLmNvbW1hbmRzPXRbMF0udmFsdWUuc3RhdGlzdGljcy5jb21tYW5kcywhdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWUmJnRoaXMuY29tbWFuZHMmJnRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5Iikuc2V0VmFsdWUodGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpLHRoaXMuY3JlYXRlQ2hhcnRzU3Vic2NyaXB0aW9uKGUsdGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpKSl9KSl9fW5hdmlnYXRlVG9TdGF0aXN0aWNzKCl7Y29uc3QgZT1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTt0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIub3BlblN0YXRlKCJjb25maWd1cmF0aW9uIixlKX1zb3J0RGF0YSgpe3RoaXMuZGF0YVNvdXJjZS5zb3J0RGF0YSh0aGlzLmRhdGFTb3VyY2UuZGF0YSx0aGlzLnNvcnQpfW9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGUpe3RoaXMubGVnZW5kRGF0YS5rZXlzW2VdLmRhdGFLZXkuaGlkZGVuPSF0aGlzLmxlZ2VuZERhdGEua2V5c1tlXS5kYXRhS2V5LmhpZGRlbix0aGlzLnN1YnNjcmlwdGlvbi51cGRhdGVEYXRhVmlzaWJpbGl0eShlKX1jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1be25hbWU6dCxsYWJlbDp0fV0sdGhpcy5zdWJzY3JpcHRpb25JbmZvPW4sdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWNyZWF0ZUdlbmVyYWxDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1bXSx0Py5sZW5ndGgmJnQuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUsbGFiZWw6ZX0pfSkpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZGF0YUtleXMuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUubmFtZSxsYWJlbDplLmxhYmVsfSl9KSksdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0KCl7dGhpcy5yZXNpemUkJiZ0aGlzLnJlc2l6ZSQuZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uRGF0YVVwZGF0ZUVycm9yKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5wYXJzZUV4Y2VwdGlvbihlKTtsZXQgbj10Lm5hbWU7dC5tZXNzYWdlJiYobis9IjogIit0Lm1lc3NhZ2UpLGNvbnNvbGUuZXJyb3Iobil9b25EYXRhVXBkYXRlZCgpe3RoaXMuaXNEYXRhT25seU51bWJlcnMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJih0aGlzLmNoYXJ0SW5pdGVkfHx0aGlzLmluaXRDaGFydCgpKX1pbml0Q2hhcnQoKXt0aGlzLmNoYXJ0SW5pdGVkPSEwLHRoaXMuZmxvdEN0eC4kY29udGFpbmVyPSQodGhpcy5zdGF0aXN0aWNDaGFydC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc2l6ZSQub2JzZXJ2ZSh0aGlzLnN0YXRpc3RpY0NoYXJ0Lm5hdGl2ZUVsZW1lbnQpfWlzRGF0YU9ubHlOdW1iZXJzKCl7dGhpcy5nZW5lcmFsP3RoaXMuaXNOdW1lcmljRGF0YT0hMDoodGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5zdWJzY3JpcHRpb24uZGF0YS5sZW5ndGg/dGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhOltdLHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCYmIXRoaXMuZGF0YVR5cGVEZWZpbmVkJiYodGhpcy5kYXRhVHlwZURlZmluZWQ9ITAsdGhpcy5pc051bWVyaWNEYXRhPXRoaXMuZGF0YVNvdXJjZS5kYXRhLmV2ZXJ5KChlPT4haXNOYU4oK2VbMV0pKSkpKX1jaGFuZ2VTdWJzY3JpcHRpb24oZSl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMucmVzZXQoKSx0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LnN1YnNjcmlwdGlvbkFwaS5jcmVhdGVTdWJzY3JpcHRpb25Gcm9tSW5mbyhBLnRpbWVzZXJpZXMsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3Vic2NyaXB0aW9uPWUsdGhpcy5pc0RhdGFPbmx5TnVtYmVycygpLHRoaXMubGVnZW5kRGF0YT10aGlzLnN1YnNjcmlwdGlvbi5sZWdlbmREYXRhLHRoaXMuZmxvdEN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uPWUsdGhpcy5yZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuY3R4LmRldGVjdENoYW5nZXMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJnRoaXMuaW5pdENoYXJ0KCl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpYLlV0aWxzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cGEsc2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsaW5wdXRzOntjdHg6ImN0eCIsZ2VuZXJhbDoiZ2VuZXJhbCJ9LHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzb3J0IixmaXJzdDohMCxwcmVkaWNhdGU6ZyxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic3RhdGlzdGljQ2hhcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInN0YXRpc3RpY0NoYXJ0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0Lmx0LW1kPSJjb2x1bW4iPlxuICA8bWF0LWNhcmQgW2Zvcm1Hcm91cF09InN0YXRpc3RpY0Zvcm0iICpuZ0lmPSIhZ2VuZXJhbCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0YXRpc3RpY0tleSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGtleSBvZiBzdGF0aXN0aWNzS2V5cyIgW3ZhbHVlXT0ia2V5Ij5cbiAgICAgICAgICB7eyBrZXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb21tYW5kIG9mIGNvbW1hbmRzIiBbdmFsdWVdPSJjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSI+XG4gICAgICAgICAge3sgY29tbWFuZC5hdHRyaWJ1dGVPbkdhdGV3YXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1lcnJvclxuICAgICAgKm5nSWY9IiFzdGF0aXN0aWNzS2V5cy5sZW5ndGggJiYgIWNvbW1hbmRzLmxlbmd0aCI+XG4gICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWMtY29tbWFuZHMtZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0ibmF2aWdhdGVUb1N0YXRpc3RpY3MoKSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3MtYnV0dG9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIiAqbmdJZj0iY29tbWFuZE9iaiI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IFt2YWx1ZV09ImNvbW1hbmRPYmouY29tbWFuZCIgZGlzYWJsZWQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9tYXQtY2FyZD5cbiAgPGRpdiBjbGFzcz0iY2hhcnQtYm94IiBmeExheW91dD0iY29sdW1uIj5cbiAgICA8ZGl2IGNsYXNzPSJjaGFydC1jb250YWluZXIiICNzdGF0aXN0aWNDaGFydCBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+PC9kaXY+XG4gICAgPHRhYmxlIFtmeFNob3ddPSIhaXNOdW1lcmljRGF0YSIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgICAgIG1hdFNvcnREaXNhYmxlQ2xlYXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMCI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7IFwnd2lkZ2V0cy5nYXRld2F5LmNyZWF0ZWQtdGltZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCByb3c7IGxldCByb3dJbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICB7eyByb3dbMF18IGRhdGU6XCd5eXl5LU1NLWRkIEhIOm1tOnNzXCcgfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9IjEiPlxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdyI+XG4gICAgICAgICAge3sgcm93WzFdIH19XG4gICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj0iZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IlxuICAgICAgICAgICAgICAgKm1hdFJvd0RlZj0ibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uczsiPjwvbWF0LXJvdz5cbiAgICA8L3RhYmxlPlxuICAgIDxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwICYmICFpc051bWVyaWNEYXRhIlxuICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7IFwnYXR0cmlidXRlLm5vLXRlbGVtZXRyeS10ZXh0XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGRpdiBmeEZsZXggY2xhc3M9ImxlZ2VuZCIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgW2Z4U2hvd109ImlzTnVtZXJpY0RhdGEiPlxuICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWtleXMiICpuZ0Zvcj0ibGV0IGxlZ2VuZEtleSBvZiBsZWdlbmREYXRhPy5rZXlzIiBmeExheW91dD0icm93IlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZ2VuZC1saW5lIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09ImxlZ2VuZEtleS5kYXRhS2V5LmNvbG9yIj48L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1sYWJlbCJcbiAgICAgICAgICAgICAoY2xpY2spPSJvbkxlZ2VuZEtleUhpZGRlbkNoYW5nZShsZWdlbmRLZXkuZGF0YUluZGV4KSJcbiAgICAgICAgICAgICBbY2xhc3NdPSJ7IFwnaGlkZGVuLWxhYmVsXCc6IGxlZ2VuZERhdGEua2V5c1tsZWdlbmRLZXkuZGF0YUluZGV4XS5kYXRhS2V5LmhpZGRlbiB9IlxuICAgICAgICAgICAgIFtpbm5lckhUTUxdPSJsZWdlbmRLZXkuZGF0YUtleS5sYWJlbCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BhZGRpbmc6MH06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXJ7aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDo0MCU7aGVpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OjM1cHg7cGFkZGluZzoxNXB4O2dhcDoyMnB4fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzUwcHgpezpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDoxMDAlfX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveCw6aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtmbGV4LWdyb3c6MX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveHtvdmVyZmxvdzphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcj4qe2hlaWdodDoxMDAlfTpob3N0IC5sZWdlbmR7ZmxleC13cmFwOndyYXA7d2lkdGg6MTAwJTtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206NHB4O21hcmdpbi10b3A6MTVweH06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVse3BhZGRpbmc6MnB4IDIwcHggMnB4IDEwcHg7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWwuaGlkZGVuLWxhYmVse3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7b3BhY2l0eTouNn06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTVweDtoZWlnaHQ6M3B4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7b3V0bGluZTpub25lfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmhlLk1hdENhcmQsc2VsZWN0b3I6Im1hdC1jYXJkIixpbnB1dHM6WyJhcHBlYXJhbmNlIl0sZXhwb3J0QXM6WyJtYXRDYXJkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5EYXRlUGlwZSxuYW1lOiJkYXRlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U3RhdGlzdGljc0NvbXBvbmVudCIscGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtbWQ9ImNvbHVtbiI+XG4gIDxtYXQtY2FyZCBbZm9ybUdyb3VwXT0ic3RhdGlzdGljRm9ybSIgKm5nSWY9IiFnZW5lcmFsIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3RhdGlzdGljS2V5Ij5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQga2V5IG9mIHN0YXRpc3RpY3NLZXlzIiBbdmFsdWVdPSJrZXkiPlxuICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgY29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQuYXR0cmlidXRlT25HYXRld2F5Ij5cbiAgICAgICAgICB7eyBjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iIXN0YXRpc3RpY3NLZXlzLmxlbmd0aCAmJiAhY29tbWFuZHMubGVuZ3RoIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpYy1jb21tYW5kcy1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPGRpdj5cbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJuYXZpZ2F0ZVRvU3RhdGlzdGljcygpIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljcy1idXR0b25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siICpuZ0lmPSJjb21tYW5kT2JqIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW3ZhbHVlXT0iY29tbWFuZE9iai5jb21tYW5kIiBkaXNhYmxlZD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L21hdC1jYXJkPlxuICA8ZGl2IGNsYXNzPSJjaGFydC1ib3giIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgI3N0YXRpc3RpY0NoYXJ0IFtmeFNob3ddPSJpc051bWVyaWNEYXRhIj48L2Rpdj5cbiAgICA8dGFibGUgW2Z4U2hvd109IiFpc051bWVyaWNEYXRhIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIlxuICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSIwIj5cbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdzsgbGV0IHJvd0luZGV4ID0gaW5kZXgiPlxuICAgICAgICAgIHt7IHJvd1swXXwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMSI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiA3MCUiPnt7IFwnd2lkZ2V0cy5nYXRld2F5Lm1lc3NhZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgcm93Ij5cbiAgICAgICAgICB7eyByb3dbMV0gfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG1hdC1oZWFkZXItcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCJcbiAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICA8bWF0LXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgIDwvdGFibGU+XG4gICAgPHNwYW4gW2Z4U2hvd109ImRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDAgJiYgIWlzTnVtZXJpY0RhdGEiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8ZGl2IGZ4RmxleCBjbGFzcz0ibGVnZW5kIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIiBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+XG4gICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQta2V5cyIgKm5nRm9yPSJsZXQgbGVnZW5kS2V5IG9mIGxlZ2VuZERhdGE/LmtleXMiIGZ4TGF5b3V0PSJyb3ciXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiPlxuICAgICAgICA8c3BhbiBjbGFzcz0ibGVnZW5kLWxpbmUiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ibGVnZW5kS2V5LmRhdGFLZXkuY29sb3IiPjwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWxhYmVsIlxuICAgICAgICAgICAgIChjbGljayk9Im9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGxlZ2VuZEtleS5kYXRhSW5kZXgpIlxuICAgICAgICAgICAgIFtjbGFzc109InsgXCdoaWRkZW4tbGFiZWxcJzogbGVnZW5kRGF0YS5rZXlzW2xlZ2VuZEtleS5kYXRhSW5kZXhdLmRhdGFLZXkuaGlkZGVuIH0iXG4gICAgICAgICAgICAgW2lubmVySFRNTF09ImxlZ2VuZEtleS5kYXRhS2V5LmxhYmVsIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzowfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtvdmVyZmxvdy15OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjQwJTtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6MzVweDtwYWRkaW5nOjE1cHg7Z2FwOjIycHh9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NTBweCl7Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjEwMCV9fTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94LDpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtY29udGFpbmVye2hlaWdodDoxMDAlO2ZsZXgtZ3JvdzoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94e292ZXJmbG93OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyPip7aGVpZ2h0OjEwMCV9Omhvc3QgLmxlZ2VuZHtmbGV4LXdyYXA6d3JhcDt3aWR0aDoxMDAlO3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo0cHg7bWFyZ2luLXRvcDoxNXB4fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWx7cGFkZGluZzoycHggMjBweCAycHggMTBweDt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLmxlZ2VuZCAubGVnZW5kLWtleXMgLmxlZ2VuZC1sYWJlbC5oaWRkZW4tbGFiZWx7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtvcGFjaXR5Oi42fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGluZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNXB4O2hlaWdodDozcHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtvdXRsaW5lOm5vbmV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpYLlV0aWxzU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0sc3RhdGlzdGljQ2hhcnQ6W3t0eXBlOm8sYXJnczpbInN0YXRpc3RpY0NoYXJ0Il19XSxjdHg6W3t0eXBlOmF9XSxnZW5lcmFsOlt7dHlwZTphfV19fSk7Y2xhc3MgbWF7c3RhdGlje3RoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1zdGF0aWN7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdPbGRGaWVsZHM9WyJhdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uIiwiZXh0ZW5zaW9uLWNvbmZpZyJdfXN0YXRpY3t0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ05ld0ZpZWxkcz1bImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIiwicmVzcG9uc2VUb3BpY1FvUyIsImV4dGVuc2lvbkNvbmZpZyJdfXN0YXRpYyBtYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGU/Lm1hcCgoKHtjb252ZXJ0ZXI6ZSx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpuPTF9KT0+e2NvbnN0IGE9ZS5kZXZpY2VJbmZvPz90aGlzLmV4dHJhY3RDb252ZXJ0ZXJEZXZpY2VJbmZvKGUpLG89ey4uLmUsZGV2aWNlSW5mbzphLGV4dGVuc2lvbkNvbmZpZzplLmV4dGVuc2lvbkNvbmZpZ3x8ZVsiZXh0ZW5zaW9uLWNvbmZpZyJdfHxudWxsfTtyZXR1cm4gdGhpcy5jbGVhblVwT2xkRmllbGRzKG8pLHtjb252ZXJ0ZXI6byx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpufX0pKX1zdGF0aWMgbWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbihlKXtyZXR1cm4gdGhpcy5tcXR0UmVxdWVzdFR5cGVLZXlzLnJlZHVjZSgoKHQsbik9PmVbbl0/KHRbbl09ZVtuXS5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwUmVxdWVzdFRvVXBncmFkZWRWZXJzaW9uKGUsbik7cmV0dXJuIHRoaXMuY2xlYW5VcE9sZEZpZWxkcyh0KSx0fSkpLHQpOnQpLHt9KX1zdGF0aWMgbWFwUmVxdWVzdHNUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMucmVkdWNlKCgodCxuKT0+ZVtuXT8odFtuXT1lW25dLm1hcCgoZT0+e249PT1Jbi5TRVJWRVJfU0lERV9SUEMmJmRlbGV0ZSBlLnR5cGU7Y29uc3R7YXR0cmlidXRlTmFtZUV4cHJlc3Npb246dCxkZXZpY2VJbmZvOmEsLi4ub309ZSxpPXsuLi5vLGF0dHJpYnV0ZU5hbWVKc29uRXhwcmVzc2lvbjp0fHxudWxsLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZSE9PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGx9O3JldHVybiB0aGlzLmNsZWFuVXBOZXdGaWVsZHMoaSksaX0pKSx0KTp0KSx7fSl9c3RhdGljIG1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlPy5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwQ29udmVydGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLmNvbnZlcnRlcik7cmV0dXJuIHRoaXMuY2xlYW5VcE5ld0ZpZWxkcyh0KSx7Y29udmVydGVyOnQsdG9waWNGaWx0ZXI6ZS50b3BpY0ZpbHRlcn19KSl9c3RhdGljIG1hcENvbnZlcnRlclRvRG93bmdyYWRlZFZlcnNpb24oZSl7Y29uc3R7ZGV2aWNlSW5mbzp0LC4uLm59PWU7cmV0dXJuIGUudHlwZSE9PXduLkJZVEVTP3suLi5uLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjp0Py5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLk1TRz90LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZUpzb25FeHByZXNzaW9uOnQ/LmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlPT09VG4uTVNHP3QuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246bnVsbCxkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uOnQ/LmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIT09VG4uTVNHP3Q/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbjp0Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSE9PVRuLk1TRz90Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbjpudWxsfTp7Li4ubixkZXZpY2VOYW1lRXhwcmVzc2lvbjp0LmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVFeHByZXNzaW9uOnQuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb24sImV4dGVuc2lvbi1jb25maWciOmUuZXh0ZW5zaW9uQ29uZmlnfX1zdGF0aWMgY2xlYW5VcE9sZEZpZWxkcyhlKXt0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ09sZEZpZWxkcy5mb3JFYWNoKCh0PT5kZWxldGUgZVt0XSkpLFooZSl9c3RhdGljIGNsZWFuVXBOZXdGaWVsZHMoZSl7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdOZXdGaWVsZHMuZm9yRWFjaCgodD0+ZGVsZXRlIGVbdF0pKSxaKGUpfXN0YXRpYyBnZXRUeXBlU291cmNlQnlWYWx1ZShlKXtyZXR1cm4gZS5pbmNsdWRlcygiJHsiKT9Ubi5NU0c6ZS5pbmNsdWRlcygiLyIpP1RuLlRPUElDOlRuLkNPTlNUfXN0YXRpYyBleHRyYWN0Q29udmVydGVyRGV2aWNlSW5mbyhlKXtjb25zdCB0PWUuZGV2aWNlTmFtZUV4cHJlc3Npb258fGUuZGV2aWNlTmFtZUpzb25FeHByZXNzaW9ufHxlLmRldmljZU5hbWVUb3BpY0V4cHJlc3Npb258fG51bGwsbj1lLmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6dD90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKHQpOm51bGwsYT1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9ufHxlLmRldmljZVR5cGVUb3BpY0V4cHJlc3Npb258fGUuZGV2aWNlVHlwZUpzb25FeHByZXNzaW9ufHwiZGVmYXVsdCIsbz1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6YT90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKGEpOm51bGw7cmV0dXJuIHR8fGE/e2RldmljZU5hbWVFeHByZXNzaW9uOnQsZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6bixkZXZpY2VQcm9maWxlRXhwcmVzc2lvbjphLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOm99Om51bGx9c3RhdGljIG1hcFJlcXVlc3RUb1VwZ3JhZGVkVmVyc2lvbihlLHQpe2NvbnN0IG49ZS5kZXZpY2VOYW1lSnNvbkV4cHJlc3Npb258fGUuZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbnx8bnVsbCxhPWUuZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbnx8ZS5kZXZpY2VUeXBlSnNvbkV4cHJlc3Npb258fCJkZWZhdWx0IixvPWE/dGhpcy5nZXRUeXBlU291cmNlQnlWYWx1ZShhKTpudWxsLGk9ZS5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZXx8ZS5hdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb258fG51bGwscj10PT09SW4uU0VSVkVSX1NJREVfUlBDPzE6bnVsbCxzPXQ9PT1Jbi5TRVJWRVJfU0lERV9SUEM/ZS5yZXNwb25zZVRvcGljRXhwcmVzc2lvbj9Gbi5XaXRoUmVzcG9uc2U6Rm4uV2l0aG91dFJlc3BvbnNlOm51bGw7cmV0dXJuey4uLmUsYXR0cmlidXRlTmFtZUV4cHJlc3Npb246aSxhdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZTppP3RoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoaSk6bnVsbCxkZXZpY2VJbmZvOmUuZGV2aWNlSW5mbz9lLmRldmljZUluZm86bj97ZGV2aWNlTmFtZUV4cHJlc3Npb246bixkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZTp0aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKG4pLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOmEsZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6b306bnVsbCxyZXNwb25zZVRvcGljUW9TOnIsdHlwZTpzfX19ZSgiTXF0dFZlcnNpb25NYXBwaW5nVXRpbCIsbWEpO2NsYXNzIGRhe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dCx0aGlzLmdhdGV3YXlWZXJzaW9uPWJhLnBhcnNlVmVyc2lvbih0aGlzLmdhdGV3YXlWZXJzaW9uSW4pLHRoaXMuY29uZmlnVmVyc2lvbj1iYS5wYXJzZVZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlnVmVyc2lvbil9Z2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBkYXRlTmVlZGVkKCk/dGhpcy5wcm9jZXNzVmVyc2lvblVwZGF0ZSgpOnRoaXMuY29ubmVjdG9yfXByb2Nlc3NWZXJzaW9uVXBkYXRlKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBncmFkZU5lZWRlZCgpP3RoaXMuZ2V0VXBncmFkZWRWZXJzaW9uKCk6dGhpcy5pc1ZlcnNpb25Eb3duZ3JhZGVOZWVkZWQoKT90aGlzLmdldERvd25ncmFkZWRWZXJzaW9uKCk6dGhpcy5jb25uZWN0b3J9aXNWZXJzaW9uVXBkYXRlTmVlZGVkKCl7cmV0dXJuISF0aGlzLmdhdGV3YXlWZXJzaW9uJiZ0aGlzLmNvbmZpZ1ZlcnNpb24hPT10aGlzLmdhdGV3YXlWZXJzaW9ufWlzVmVyc2lvblVwZ3JhZGVOZWVkZWQoKXtyZXR1cm4gdGhpcy5nYXRld2F5VmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiYoIXRoaXMuY29uZmlnVmVyc2lvbnx8dGhpcy5jb25maWdWZXJzaW9uPHRoaXMuZ2F0ZXdheVZlcnNpb24pfWlzVmVyc2lvbkRvd25ncmFkZU5lZWRlZCgpe3JldHVybiB0aGlzLmNvbmZpZ1ZlcnNpb24mJnRoaXMuY29uZmlnVmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiZ0aGlzLmNvbmZpZ1ZlcnNpb24+dGhpcy5nYXRld2F5VmVyc2lvbn19ZSgiR2F0ZXdheUNvbm5lY3RvclZlcnNpb25Qcm9jZXNzb3IiLGRhKTtjbGFzcyB1YSBleHRlbmRzIGRhe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLmdhdGV3YXlWZXJzaW9uSW49ZSx0aGlzLmNvbm5lY3Rvcj10LHRoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdHtjb25uZWN0UmVxdWVzdHM6ZSxkaXNjb25uZWN0UmVxdWVzdHM6dCxhdHRyaWJ1dGVSZXF1ZXN0czpuLGF0dHJpYnV0ZVVwZGF0ZXM6YSxzZXJ2ZXJTaWRlUnBjOm99PXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO2xldCBpPXsuLi50aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbixyZXF1ZXN0c01hcHBpbmc6bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmUsZGlzY29ubmVjdFJlcXVlc3RzOnQsYXR0cmlidXRlUmVxdWVzdHM6bixhdHRyaWJ1dGVVcGRhdGVzOmEsc2VydmVyU2lkZVJwYzpvfSksbWFwcGluZzptYS5tYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24ubWFwcGluZyl9O3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMuZm9yRWFjaCgoZT0+e2NvbnN0e1tlXTp0LC4uLm59PWk7aT17Li4ubn19KSksdGhpcy5jbGVhblVwQ29uZmlnSnNvbihpKSx7Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246aSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19Z2V0RG93bmdyYWRlZFZlcnNpb24oKXtjb25zdHtyZXF1ZXN0c01hcHBpbmc6ZSxtYXBwaW5nOnQsLi4ubn09dGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24sYT1lP21hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihlKTp7fSxvPW1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7Li4ubiwuLi5hLG1hcHBpbmc6b30sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWNsZWFuVXBDb25maWdKc29uKGUpe2VlKGUucmVxdWVzdHNNYXBwaW5nLHt9KSYmZGVsZXRlIGUucmVxdWVzdHNNYXBwaW5nLGVlKGUubWFwcGluZyxbXSkmJmRlbGV0ZSBlLm1hcHBpbmd9fWUoIk1xdHRWZXJzaW9uUHJvY2Vzc29yIix1YSk7Y2xhc3MgZ2EgZXh0ZW5kcyBkYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dH1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdCBlPXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7bWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZS5tYXN0ZXIpOntzbGF2ZXM6W119LHNsYXZlOmUuc2xhdmU/aGEubWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlLnNsYXZlKTp7fX0sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWdldERvd25ncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbjtyZXR1cm57Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246ey4uLmUsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e30sbWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLm1hc3Rlcik6e3NsYXZlczpbXX19LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX19ZSgiTW9kYnVzVmVyc2lvblByb2Nlc3NvciIsZ2EpO2NsYXNzIGZhIGV4dGVuZHMgZGF7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMuZ2F0ZXdheVZlcnNpb25Jbj1lLHRoaXMuY29ubmVjdG9yPXR9Z2V0VXBncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbi5zZXJ2ZXI7cmV0dXJuey4uLnRoaXMuY29ubmVjdG9yLGNvbmZpZ3VyYXRpb25Kc29uOntzZXJ2ZXI6ZT94YS5tYXBTZXJ2ZXJUb1VwZ3JhZGVkVmVyc2lvbihlKTp7fSxtYXBwaW5nOmU/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUubWFwcGluZyk6W119LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX1nZXREb3duZ3JhZGVkVmVyc2lvbigpe3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24pfSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19fWUoIk9wY1ZlcnNpb25Qcm9jZXNzb3IiLGZhKTtjbGFzcyB5YXtjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9bmV3IGksdGhpcy5mYj1yKGRlKSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmJhc2ljRm9ybUdyb3VwPXRoaXMuaW5pdEJhc2ljRm9ybUdyb3VwKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLm9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVkLmVtaXQoKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnNldFZhbHVlKHRoaXMubWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSkse2VtaXRFdmVudDohMX0pfW9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZSh0aGlzLmdldE1hcHBlZFZhbHVlKGUpKSx0aGlzLm9uVG91Y2hlZCgpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eWEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnlhLGlucHV0czp7Z2VuZXJhbFRhYkNvbnRlbnQ6ImdlbmVyYWxUYWJDb250ZW50In0sb3V0cHV0czp7aW5pdGlhbGl6ZWQ6ImluaXRpYWxpemVkIn0sbmdJbXBvcnQ6dH0pfX1lKCJHYXRld2F5Q29ubmVjdG9yQmFzaWNDb25maWdEaXJlY3RpdmUiLHlhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnlhLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2dlbmVyYWxUYWJDb250ZW50Olt7dHlwZTphfV0saW5pdGlhbGl6ZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBiYXtzdGF0aWMgZ2V0Q29uZmlnKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSBfdC5NUVRUOnJldHVybiBuZXcgdWEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk9QQ1VBOnJldHVybiBuZXcgZmEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk1PREJVUzpyZXR1cm4gbmV3IGdhKHQsZSkuZ2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCk7ZGVmYXVsdDpyZXR1cm4gZX19c3RhdGljIHBhcnNlVmVyc2lvbihlKXtyZXR1cm4gdGUoZSk/ZTpuZShlKT9wYXJzZUZsb2F0KGUucmVwbGFjZSgvXC4vZywiIikuc2xpY2UoMCwzKSkvMTAwOjB9fWUoIkdhdGV3YXlDb25uZWN0b3JWZXJzaW9uTWFwcGluZ1V0aWwiLGJhKTtjbGFzcyBoYXtzdGF0aWMgbWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJue3NsYXZlczplLnNsYXZlcy5tYXAoKGU9Pntjb25zdHtzZW5kRGF0YU9ubHlPbkNoYW5nZTp0LC4uLm59PWU7cmV0dXJuey4uLm4sZGV2aWNlVHlwZTplLmRldmljZVR5cGU/PyJkZWZhdWx0IixyZXBvcnRTdHJhdGVneTp0P3t0eXBlOnNuLk9uQ2hhbmdlfTp7dHlwZTpzbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6ZS5wb2xsUGVyaW9kfX19KSl9fXN0YXRpYyBtYXBNYXN0ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybntzbGF2ZXM6ZS5zbGF2ZXMubWFwKChlPT57Y29uc3R7cmVwb3J0U3RyYXRlZ3k6dCwuLi5ufT1lO3JldHVybnsuLi5uLHNlbmREYXRhT25seU9uQ2hhbmdlOnQ/LnR5cGUhPT1zbi5PblJlcG9ydFBlcmlvZH19KSl9fXN0YXRpYyBtYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZSl7aWYoIWU/LnZhbHVlcylyZXR1cm4gZTtjb25zdCB0PU9iamVjdC5rZXlzKGUudmFsdWVzKS5yZWR1Y2UoKCh0LG4pPT50PXsuLi50LFtuXTpbZS52YWx1ZXNbbl1dfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlKXtpZighZT8udmFsdWVzKXJldHVybiBlO2NvbnN0IHQ9T2JqZWN0LmtleXMoZS52YWx1ZXMpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOnRoaXMubWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZS52YWx1ZXNbbl1bMF0pfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOmVbbl0ubWFwKChlPT4oey4uLmUsdHlwZToiaW50Ij09PWUudHlwZT9lYS5JTlQxNjplLnR5cGV9KSkpfSkse30pfX1lKCJNb2RidXNWZXJzaW9uTWFwcGluZ1V0aWwiLGhhKTtjbGFzcyB4YXtzdGF0aWMgbWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZSl7Y29uc3R7bWFwcGluZzp0LGRpc2FibGVTdWJzY3JpcHRpb25zOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsLi4ub309ZTtyZXR1cm57Li4ubyxwb2xsUGVyaW9kSW5NaWxsaXM6YT8/NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6IW59fXN0YXRpYyBtYXBTZXJ2ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe2NvbnN0e21hcHBpbmc6dCxzZXJ2ZXI6bn09ZSx7ZW5hYmxlU3Vic2NyaXB0aW9uczphLC4uLm99PW4/P3t9O3JldHVybnsuLi5vLG1hcHBpbmc6dD90aGlzLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpOltdLGRpc2FibGVTdWJzY3JpcHRpb25zOiFhfX1zdGF0aWMgbWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlLm1hcCgoZT0+KHsuLi5lLGRldmljZU5vZGVTb3VyY2U6dGhpcy5nZXREZXZpY2VOb2RlU291cmNlQnlWYWx1ZShlLmRldmljZU5vZGVQYXR0ZXJuKSxkZXZpY2VJbmZvOntkZXZpY2VOYW1lRXhwcmVzc2lvbjplLmRldmljZU5hbWVQYXR0ZXJuLGRldmljZU5hbWVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VOYW1lUGF0dGVybiksZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246ZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiKX0sYXR0cmlidXRlczplLmF0dHJpYnV0ZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLGF0dHJpYnV0ZXNfdXBkYXRlczplLmF0dHJpYnV0ZXNfdXBkYXRlcy5tYXAoKGU9Pih7a2V5OmUuYXR0cmlidXRlT25UaGluZ3NCb2FyZCx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5hdHRyaWJ1dGVPbkRldmljZSksdmFsdWU6ZS5hdHRyaWJ1dGVPbkRldmljZX0pKSksdGltZXNlcmllczplLnRpbWVzZXJpZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLHJwY19tZXRob2RzOmUucnBjX21ldGhvZHMubWFwKChlPT4oe21ldGhvZDplLm1ldGhvZCxhcmd1bWVudHM6ZS5hcmd1bWVudHMubWFwKChlPT4oe3ZhbHVlOmUsdHlwZTp0aGlzLmdldEFyZ3VtZW50VHlwZShlKX0pKSl9KSkpfSkpKX1zdGF0aWMgbWFwTWFwcGluZ1RvRG93bmdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGUubWFwKChlPT4oey4uLmUsZGV2aWNlTmFtZVBhdHRlcm46ZS5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVQYXR0ZXJuOmUuZGV2aWNlSW5mby5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbixhdHRyaWJ1dGVzOmUuYXR0cmlidXRlcy5tYXAoKGU9Pih7a2V5OmUua2V5LHBhdGg6ZS52YWx1ZX0pKSksYXR0cmlidXRlc191cGRhdGVzOmUuYXR0cmlidXRlc191cGRhdGVzLm1hcCgoZT0+KHthdHRyaWJ1dGVPblRoaW5nc0JvYXJkOmUua2V5LGF0dHJpYnV0ZU9uRGV2aWNlOmUudmFsdWV9KSkpLHRpbWVzZXJpZXM6ZS50aW1lc2VyaWVzLm1hcCgoZT0+KHtrZXk6ZS5rZXkscGF0aDplLnZhbHVlfSkpKSxycGNfbWV0aG9kczplLnJwY19tZXRob2RzLm1hcCgoZT0+KHttZXRob2Q6ZS5tZXRob2QsYXJndW1lbnRzOmUuYXJndW1lbnRzLm1hcCgoZT0+ZS52YWx1ZSkpfSkpKX0pKSl9c3RhdGljIGdldFR5cGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6ZS5pbmNsdWRlcygiLyIpfHxlLmluY2x1ZGVzKCJcXCIpP1NuLlBBVEg6U24uQ09OU1R9c3RhdGljIGdldERldmljZU5vZGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6U24uUEFUSH1zdGF0aWMgZ2V0QXJndW1lbnRUeXBlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpPyJpbnRlZ2VyIjoiZmxvYXQiO2RlZmF1bHQ6cmV0dXJuInN0cmluZyJ9fX1lKCJPcGNWZXJzaW9uTWFwcGluZ1V0aWwiLHhhKTtjbGFzcyB2YXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGJhLnBhcnNlVmVyc2lvbihlKT49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5QaXBlfSl9c3RhdGlje3RoaXMuybVwaXBlPXQuybXJtW5nRGVjbGFyZVBpcGUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsaXNTdGFuZGFsb25lOiEwLG5hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyJ9KX19ZSgiTGF0ZXN0VmVyc2lvbkNvbmZpZ1BpcGUiLHZhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyB3YXtjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lfXRyYW5zZm9ybShlKXtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnBvcnQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKXx8ZS5oYXNFcnJvcigibWF4Iik/dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5wb3J0LWxpbWl0cy1lcnJvciIse21pbjpFdC5NSU4sbWF4OkV0Lk1BWH0pOiIifXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d2EsZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LlBpcGV9KX1zdGF0aWN7dGhpcy7JtXBpcGU9dC7Jtcm1bmdEZWNsYXJlUGlwZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxpc1N0YW5kYWxvbmU6ITAsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0pfX1lKCJHYXRld2F5UG9ydFRvb2x0aXBQaXBlIix3YSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAiLHN0YW5kYWxvbmU6ITB9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WS5UcmFuc2xhdGVTZXJ2aWNlfV19KTtjbGFzcyBDYXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGUubWFwKCgoe3ZhbHVlOmV9KT0+ZS50b1N0cmluZygpKSkuam9pbigiLCAiKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyJ9KX19ZSgiUnBjVGVtcGxhdGVBcnJheVZpZXdQaXBlIixDYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpDYSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBUYXt0cmFuc2Zvcm0oZSx0LG4pe3JldHVybiFufHxuPy5pbmNsdWRlcyhTbi5QQVRIKT90IT09U24uQ09OU1Q/YHdpZGdldC9saWIvZ2F0ZXdheS8ke2V9LSR7dH1fZm5gOnZvaWQgMDoiYXR0cmlidXRlcyI9PT1lfHwidGltZXNlcmllcyI9PT1lPyJ3aWRnZXQvbGliL2dhdGV3YXkvYXR0cmlidXRlc190aW1lc2VyaWVzX2V4cHJlc3Npb25zX2ZuIjoid2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifSl9fWUoIkdhdGV3YXlIZWxwTGlua1BpcGUiLFRhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImdldEdhdGV3YXlIZWxwTGluayIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBTYXtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbGVtZW50UmVmPWUsdGhpcy5yZW5kZXJlcj10LHRoaXMudG9vbHRpcD1uLHRoaXMudG9vbHRpcEVuYWJsZWQ9ITAsdGhpcy5wb3NpdGlvbj0iYWJvdmUiLHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5vYnNlcnZlTW91c2VFdmVudHMoKSx0aGlzLmFwcGx5VHJ1bmNhdGlvblN0eWxlcygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudG9vbHRpcC5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy50b29sdGlwLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJnRoaXMuaGlkZVRvb2x0aXAoKSx0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9b2JzZXJ2ZU1vdXNlRXZlbnRzKCl7a2UodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiKS5waXBlKE1lKCgoKT0+dGhpcy50b29sdGlwRW5hYmxlZCkpLE1lKCgoKT0+dGhpcy5pc092ZXJmbG93bih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpKSxFZSgoKCk9PnRoaXMuc2hvd1Rvb2x0aXAoKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKSxrZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUoTWUoKCgpPT50aGlzLnRvb2x0aXBFbmFibGVkKSksTWUoKCgpPT50aGlzLnRvb2x0aXAuX2lzVG9vbHRpcFZpc2libGUoKSkpLEVlKCgoKT0+dGhpcy5oaWRlVG9vbHRpcCgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWFwcGx5VHJ1bmNhdGlvblN0eWxlcygpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIndoaXRlLXNwYWNlIiwibm93cmFwIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKX1pc092ZXJmbG93bihlKXtyZXR1cm4gZS5jbGllbnRXaWR0aDxlLnNjcm9sbFdpZHRofXNob3dUb29sdGlwKCl7dGhpcy50b29sdGlwLm1lc3NhZ2U9dGhpcy50ZXh0fHx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lclRleHQsdGhpcy50b29sdGlwLnNob3coKX1oaWRlVG9vbHRpcCgpe3RoaXMudG9vbHRpcC5oaWRlKCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpTYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp6ZS5NYXRUb29sdGlwfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9c3RhdGlje3RoaXMuybVkaXI9dC7Jtcm1bmdEZWNsYXJlRGlyZWN0aXZlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6e3RleHQ6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0ZXh0Il0sdG9vbHRpcEVuYWJsZWQ6InRvb2x0aXBFbmFibGVkIixwb3NpdGlvbjoicG9zaXRpb24ifSxwcm92aWRlcnM6W1dlXSxuZ0ltcG9ydDp0fSl9fWUoIlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUiLFNhKSxIZShbTigpXSxTYS5wcm90b3R5cGUsInRvb2x0aXBFbmFibGVkIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixwcm92aWRlcnM6W1dlXSxzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOnplLk1hdFRvb2x0aXB9XSxwcm9wRGVjb3JhdG9yczp7dGV4dDpbe3R5cGU6YSxhcmdzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIl19XSx0b29sdGlwRW5hYmxlZDpbe3R5cGU6YX1dLHBvc2l0aW9uOlt7dHlwZTphfV19fSk7Y2xhc3Mga2F7c2V0IGNoaXBzKGUpe2VlKHRoaXMuY2hpcHNWYWx1ZSxlKXx8KHRoaXMuY2hpcHNWYWx1ZT1lLHNldFRpbWVvdXQoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSksMCkpfWNvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZWw9ZSx0aGlzLnJlbmRlcmVyPXQsdGhpcy50cmFuc2xhdGU9bix0aGlzLndpbmRvdz1hLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJtYXgtaGVpZ2h0IiwiNDhweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJvdmVyZmxvdyIsImF1dG8iKSxrZShhLCJyZXNpemUiKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSkpLHRoaXMub2JzZXJ2ZUludGVyc2VjdGlvbigpfW9ic2VydmVJbnRlcnNlY3Rpb24oKXt0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZT0+e2UuZm9yRWFjaCgoZT0+e2UuaXNJbnRlcnNlY3RpbmcmJnRoaXMuYWRqdXN0Q2hpcHMoKX0pKX0pKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1hZGp1c3RDaGlwcygpe2NvbnN0IGU9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy1jaGlwIiksbj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUodCkubWFyZ2luTGVmdCl8fDAsYT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIm1hdC1jaGlwOm5vdCguZWxsaXBzaXMtY2hpcCkiKTtpZih0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPjEpe2NvbnN0IG89dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy10ZXh0Iik7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5IiwiaW5saW5lLWZsZXgiKSxvLmlubmVySFRNTD10aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmVsbGlwc2lzLWNoaXBzLXRleHQiLHtjb3VudDp0aGlzLmNoaXBzVmFsdWUubGVuZ3RofSk7Y29uc3QgaT1lLm9mZnNldFdpZHRoLSh0Lm9mZnNldFdpZHRoK24pO2xldCByPTAscz0wO2EuZm9yRWFjaCgoZT0+e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUoZSwiZGlzcGxheSIsImlubGluZS1mbGV4Iik7Y29uc3QgdD1lLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX3RleHQtbGFiZWwiKTt0aGlzLmFwcGx5TWF4Q2hpcFRleHRXaWR0aCh0LGkvMykscisoZS5vZmZzZXRXaWR0aCtuKTw9aSYmczx0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPyhzKysscis9ZS5vZmZzZXRXaWR0aCtuKTp0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsImRpc3BsYXkiLCJub25lIil9KSksby5pbm5lckhUTUw9dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5lbGxpcHNpcy1jaGlwcy10ZXh0Iix7Y291bnQ6dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aC1zfSkscz09PXRoaXMuY2hpcHNWYWx1ZT8ubGVuZ3RoJiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHQsImRpc3BsYXkiLCJub25lIil9ZWxzZSBpZigxPT09dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aCl7Y29uc3Qgbz1hWzBdLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbiIpLGk9by5xdWVyeVNlbGVjdG9yKCIubWRjLWV2b2x1dGlvbi1jaGlwX190ZXh0LWxhYmVsIikscj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUobykucGFkZGluZ0xlZnQpfHwwLHM9cGFyc2VGbG9hdCh0aGlzLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG8pLnBhZGRpbmdSaWdodCl8fDAsbD1lLm9mZnNldFdpZHRoLW4tKHIrcyk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYVswXSwiZGlzcGxheSIsImlubGluZS1mbGV4IiksdGhpcy5hcHBseU1heENoaXBUZXh0V2lkdGgoaSxsKX1lbHNlIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodCwiZGlzcGxheSIsIm5vbmUiKX1hcHBseU1heENoaXBUZXh0V2lkdGgoZSx0KXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm1heC13aWR0aCIsdCsicHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm92ZXJmbG93IiwiaGlkZGVuIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlLCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIndoaXRlLXNwYWNlIiwibm93cmFwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjphZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6a2EsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJbdGItZWxsaXBzaXMtY2hpcC1saXN0XSIsaW5wdXRzOntjaGlwczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCIsImNoaXBzIl19LG5nSW1wb3J0OnR9KX19ZSgiRWxsaXBzaXNDaGlwTGlzdERpcmVjdGl2ZSIsa2EpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6a2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX0se3R5cGU6V2luZG93LGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbYWVdfV19XSxwcm9wRGVjb3JhdG9yczp7Y2hpcHM6W3t0eXBlOmEsYXJnczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfV19fSk7Y2xhc3MgTGF7Y29uc3RydWN0b3IoZSx0LG4sYSl7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWUsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2U9dCx0aGlzLnpvbmU9bix0aGlzLnRyYW5zbGF0ZT1hLHRoaXMuYXR0cmlidXRlc1N1YmplY3Q9bmV3IExlKFtdKSx0aGlzLnBhZ2VEYXRhU3ViamVjdD1uZXcgTGUoTSgpKSx0aGlzLnBhZ2VEYXRhJD10aGlzLnBhZ2VEYXRhU3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlzLnNlbGVjdGlvbj1uZXcgamUoITAsW10pfWNvbm5lY3QoZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCl9ZGlzY29ubmVjdChlKXt0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5wYWdlRGF0YVN1YmplY3QuY29tcGxldGUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXImJih0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIudW5zdWJzY3JpYmUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXI9bnVsbCl9bG9hZEF0dHJpYnV0ZXMoZSx0LG4sYT0hMSl7YSYmKHRoaXMuYWxsQXR0cmlidXRlcz1udWxsLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlciYmKHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlci51bnN1YnNjcmliZSgpLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlcj1udWxsKSksdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtjb25zdCBvPW5ldyBGZTtyZXR1cm4gdGhpcy5mZXRjaEF0dHJpYnV0ZXMoZSx0LG4pLnBpcGUocWUoKCgpPT5JZShNKCkpKSkpLnN1YnNjcmliZSgoZT0+e3RoaXMuYXR0cmlidXRlc1N1YmplY3QubmV4dChlLmRhdGEpLHRoaXMucGFnZURhdGFTdWJqZWN0Lm5leHQoZSksby5uZXh0KGUpfSkpLG99ZmV0Y2hBdHRyaWJ1dGVzKGUsdCxuKXtyZXR1cm4gdGhpcy5nZXRBbGxBdHRyaWJ1dGVzKGUsdCkucGlwZShEZSgoZT0+e2NvbnN0IHQ9ZS5maWx0ZXIoKGU9PjAhPT1lLmxhc3RVcGRhdGVUcykpO3JldHVybiBuLmZpbHRlckRhdGEodCl9KSkpfWdldEFsbEF0dHJpYnV0ZXMoZSx0KXtpZighdGhpcy5hbGxBdHRyaWJ1dGVzKXtsZXQgbjtFLmdldCh0KT8odGhpcy50ZWxlbWV0cnlTdWJzY3JpYmVyPXEuY3JlYXRlRW50aXR5QXR0cmlidXRlc1N1YnNjcmlwdGlvbih0aGlzLnRlbGVtZXRyeVdzU2VydmljZSxlLHQsdGhpcy56b25lKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuc3Vic2NyaWJlKCksbj10aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuYXR0cmlidXRlRGF0YSQoKSk6bj10aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyhlLHQpLHRoaXMuYWxsQXR0cmlidXRlcz1uLnBpcGUoUGUoMSksR2UoKSl9cmV0dXJuIHRoaXMuYWxsQXR0cmlidXRlc31pc0FsbFNlbGVjdGVkKCl7Y29uc3QgZT10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShEZSgodD0+ZT09PXQubGVuZ3RoKSkpfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5waXBlKERlKChlPT4hZS5sZW5ndGgpKSl9dG90YWwoKXtyZXR1cm4gdGhpcy5wYWdlRGF0YVN1YmplY3QucGlwZShEZSgoZT0+ZS50b3RhbEVsZW1lbnRzKSkpfW1hc3RlclRvZ2dsZSgpe3RoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShFZSgoZT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aD09PWUubGVuZ3RoP3RoaXMuc2VsZWN0aW9uLmNsZWFyKCk6ZS5mb3JFYWNoKChlPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0KGUpfSkpfSkpLE9lKDEpKS5zdWJzY3JpYmUoKX19ZSgiQXR0cmlidXRlRGF0YXNvdXJjZSIsTGEpO2NsYXNzIEZhe2NvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlU2VydmljZT1lLHRoaXMuc2F2ZVRlbXBsYXRlPW5ldyBpLHRoaXMudXNlVGVtcGxhdGU9bmV3IGksdGhpcy5vcmlnaW5hbE9yZGVyPSgpPT4wLHRoaXMuaXNPYmplY3Q9ZT0+b2UoZSksdGhpcy5pc0FycmF5PWU9PkFycmF5LmlzQXJyYXkoZSksdGhpcy5TTk1QTWV0aG9kc1RyYW5zbGF0aW9ucz10bn1uZ09uSW5pdCgpe31hcHBseVRlbXBsYXRlKGUsdCl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnVzZVRlbXBsYXRlLmVtaXQodCl9ZGVsZXRlVGVtcGxhdGUoZSx0KXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49dGhpcy5ycGNUZW1wbGF0ZXMuZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO3RoaXMucnBjVGVtcGxhdGVzLnNwbGljZShuLDEpO2NvbnN0IGE9YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5OmEsdmFsdWU6dGhpcy5ycGNUZW1wbGF0ZXN9XSkuc3Vic2NyaWJlKCgoKT0+e30pKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZhLGRlcHM6W3t0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkZhLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXMiLGlucHV0czp7Y29ubmVjdG9yVHlwZToiY29ubmVjdG9yVHlwZSIsY3R4OiJjdHgiLHJwY1RlbXBsYXRlczoicnBjVGVtcGxhdGVzIn0sb3V0cHV0czp7c2F2ZVRlbXBsYXRlOiJzYXZlVGVtcGxhdGUiLHVzZVRlbXBsYXRlOiJ1c2VUZW1wbGF0ZSJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZXMtdGl0bGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuPG1hdC1leHBhbnNpb24tcGFuZWwgaGlkZVRvZ2dsZSAqbmdGb3I9ImxldCB0ZW1wbGF0ZSBvZiBycGNUZW1wbGF0ZXMiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz0idGVtcGxhdGUtbmFtZSI+XG4gICAgICA8c3BhbiBtYXRUb29sdGlwPSJ7e3RlbXBsYXRlLm5hbWV9fSIgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+e3t0ZW1wbGF0ZS5uYW1lfX08L3NwYW4+XG4gICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IkRlbGV0ZSIgKGNsaWNrKT0iZGVsZXRlVGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPSJVc2UiIChjbGljayk9ImFwcGx5VGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9ImxldCBjb25maWcgb2YgdGVtcGxhdGUuY29uZmlnIHwga2V5VmFsdWVJc05vdEVtcHR5IlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IGNvbmZpZywgaW5uZXJWYWx1ZTogZmFsc2UgfSI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI1JQQ1RlbXBsYXRlUmVmIGxldC1jb25maWcgbGV0LWlubmVyVmFsdWU9XCdpbm5lclZhbHVlXCc+XG4gICAgPGRpdiBbZnhMYXlvdXRdPSJpc09iamVjdChjb25maWcudmFsdWUpID8gXCdjb2x1bW5cJzogXCdyb3dcJyJcbiAgICAgICAgIFtmeExheW91dEFsaWduXT0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ3NwYWNlLWJldHdlZW4gY2VudGVyXCcgOiBcJ1wnIlxuICAgICAgICAgW25nU3R5bGVdPSJ7XCdwYWRkaW5nLWxlZnRcJzogaW5uZXJWYWx1ZSA/IFwnMTZweFwnOiBcJzBcJ30iXG4gICAgICAgICBjbGFzcz0icnBjLXBhcmFtcy1yb3ciPlxuICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUta2V5Ij5cbiAgICAgICAge3shaW5uZXJWYWx1ZSA/IChcJ2dhdGV3YXkucnBjLlwnICsgY29uZmlnLmtleSB8IHRyYW5zbGF0ZSkgOiBjb25maWcua2V5fX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iaXNBcnJheShjb25maWcudmFsdWUpIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9ImFycmF5LXZhbHVlIj5cbiAgICAgICAge3sgY29uZmlnLnZhbHVlIHwgZ2V0UnBjVGVtcGxhdGVBcnJheVZpZXcgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iaXNPYmplY3QoY29uZmlnLnZhbHVlKSIgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENPYmplY3RSb3ciPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiAqbmdJZj0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgJiYgIWlzQXJyYXkoY29uZmlnLnZhbHVlKSJcbiAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdib29sZWFuLXRydWVcJzogY29uZmlnLnZhbHVlID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgIFwnYm9vbGVhbi1mYWxzZVwnOiBjb25maWcudmFsdWUgPT09IGZhbHNlICB9Ij5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29uZmlnLmtleSA9PT0gXCdtZXRob2RcJyBlbHNlIHZhbHVlIiBbbmdUZW1wbGF0ZU91dGxldF09IlNOTVBNZXRob2QiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZhbHVlPnt7IGNvbmZpZy52YWx1ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1NOTVBNZXRob2Q+e3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KGNvbmZpZy52YWx1ZSkgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNSUENPYmplY3RSb3c+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9ImxldCBzdWJDb25maWcgb2YgY29uZmlnLnZhbHVlIHwga2V5dmFsdWUgOiBvcmlnaW5hbE9yZGVyIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IHN1YkNvbmZpZywgaW5uZXJWYWx1ZTogdHJ1ZSB9Ij5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjB9Omhvc3QgLnRpdGxle2ZvbnQtd2VpZ2h0OjUwMH06aG9zdCAudGVtcGxhdGUta2V5e2NvbG9yOiMwMDAwMDA2MTtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4fTpob3N0IC5ib29sZWFuLXRydWUsOmhvc3QgLmJvb2xlYW4tZmFsc2V7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDtwYWRkaW5nOjAgMTJweDt3aWR0aDpmaXQtY29udGVudDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfTpob3N0IC5ib29sZWFuLWZhbHNle2NvbG9yOiNkMTI3MzA7YmFja2dyb3VuZC1jb2xvcjojZDEyNzMwMTR9Omhvc3QgLmJvb2xlYW4tdHJ1ZXtjb2xvcjojMTk4MDM4O2JhY2tncm91bmQtY29sb3I6IzE5ODAzODE0fTpob3N0IG1hdC1leHBhbnNpb24tcGFuZWx7bWFyZ2luLXRvcDoxMHB4O292ZXJmbG93OnZpc2libGV9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MDtmbGV4OjB9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uPm1hdC1pY29ue21hcmdpbi1sZWZ0OjE1cHg7Y29sb3I6IzAwMDAwMDYxfTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntwYWRkaW5nOjAgMCAwIDEycHh9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NDhweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgLm1hdC1jb250ZW50Lm1hdC1jb250ZW50LWhpZGUtdG9nZ2xle21hcmdpbi1yaWdodDowfTpob3N0IC5ycGMtcGFyYW1zLXJvd3tvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5ycGMtcGFyYW1zLXJvdyA6bm90KDpmaXJzdC1jaGlsZCl7d2hpdGUtc3BhY2U6cHJlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50ZW1wbGF0ZS1uYW1le292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2t9Omhvc3QgOjpuZy1kZWVwIC5tYXQtY29udGVudHthbGlnbi1pdGVtczpjZW50ZXJ9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2ZsZXg6MTttYXJnaW46MH06aG9zdCAuYXJyYXktdmFsdWV7bWFyZ2luLWxlZnQ6MTBweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3R5bGUsc2VsZWN0b3I6IltuZ1N0eWxlXSIsaW5wdXRzOlsibmdTdHlsZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsRGVzY3JpcHRpb24sc2VsZWN0b3I6Im1hdC1wYW5lbC1kZXNjcmlwdGlvbiJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOkNhLG5hbWU6ImdldFJwY1RlbXBsYXRlQXJyYXlWaWV3In1dfSl9fWUoIkdhdGV3YXlTZXJ2aWNlUlBDQ29ubmVjdG9yVGVtcGxhdGVzQ29tcG9uZW50IixGYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpGYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9Im1hdC1zdWJ0aXRsZS0xIHRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlcy10aXRsZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG48bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlICpuZ0Zvcj0ibGV0IHRlbXBsYXRlIG9mIHJwY1RlbXBsYXRlcyI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8bWF0LXBhbmVsLXRpdGxlIGNsYXNzPSJ0ZW1wbGF0ZS1uYW1lIj5cbiAgICAgIDxzcGFuIG1hdFRvb2x0aXA9Int7dGVtcGxhdGUubmFtZX19IiBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj57e3RlbXBsYXRlLm5hbWV9fTwvc3Bhbj5cbiAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD0iRGVsZXRlIiAoY2xpY2spPSJkZWxldGVUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IlVzZSIgKGNsaWNrKT0iYXBwbHlUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnBsYXlfYXJyb3c8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj0ibGV0IGNvbmZpZyBvZiB0ZW1wbGF0ZS5jb25maWcgfCBrZXlWYWx1ZUlzTm90RW1wdHkiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogY29uZmlnLCBpbm5lclZhbHVlOiBmYWxzZSB9Ij5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjUlBDVGVtcGxhdGVSZWYgbGV0LWNvbmZpZyBsZXQtaW5uZXJWYWx1ZT1cJ2lubmVyVmFsdWVcJz5cbiAgICA8ZGl2IFtmeExheW91dF09ImlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ2NvbHVtblwnOiBcJ3Jvd1wnIlxuICAgICAgICAgW2Z4TGF5b3V0QWxpZ25dPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSA/IFwnc3BhY2UtYmV0d2VlbiBjZW50ZXJcJyA6IFwnXCciXG4gICAgICAgICBbbmdTdHlsZV09IntcJ3BhZGRpbmctbGVmdFwnOiBpbm5lclZhbHVlID8gXCcxNnB4XCc6IFwnMFwnfSJcbiAgICAgICAgIGNsYXNzPSJycGMtcGFyYW1zLXJvdyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1rZXkiPlxuICAgICAgICB7eyFpbm5lclZhbHVlID8gKFwnZ2F0ZXdheS5ycGMuXCcgKyBjb25maWcua2V5IHwgdHJhbnNsYXRlKSA6IGNvbmZpZy5rZXl9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJpc0FycmF5KGNvbmZpZy52YWx1ZSkiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0iYXJyYXktdmFsdWUiPlxuICAgICAgICB7eyBjb25maWcudmFsdWUgfCBnZXRScGNUZW1wbGF0ZUFycmF5VmlldyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJpc09iamVjdChjb25maWcudmFsdWUpIiBbbmdUZW1wbGF0ZU91dGxldF09IlJQQ09iamVjdFJvdyI+PC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2ICpuZ0lmPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSAmJiAhaXNBcnJheShjb25maWcudmFsdWUpIlxuICAgICAgICAgICBbbmdDbGFzc109IntcJ2Jvb2xlYW4tdHJ1ZVwnOiBjb25maWcudmFsdWUgPT09IHRydWUsXG4gICAgICAgICAgICAgICAgICAgXCdib29sZWFuLWZhbHNlXCc6IGNvbmZpZy52YWx1ZSA9PT0gZmFsc2UgIH0iPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJjb25maWcua2V5ID09PSBcJ21ldGhvZFwnIGVsc2UgdmFsdWUiIFtuZ1RlbXBsYXRlT3V0bGV0XT0iU05NUE1ldGhvZCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdmFsdWU+e3sgY29uZmlnLnZhbHVlIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjU05NUE1ldGhvZD57eyBTTk1QTWV0aG9kc1RyYW5zbGF0aW9ucy5nZXQoY29uZmlnLnZhbHVlKSB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1JQQ09iamVjdFJvdz5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj0ibGV0IHN1YkNvbmZpZyBvZiBjb25maWcudmFsdWUgfCBrZXl2YWx1ZSA6IG9yaWdpbmFsT3JkZXIiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogc3ViQ29uZmlnLCBpbm5lclZhbHVlOiB0cnVlIH0iPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1leHBhbnNpb24tcGFuZWw+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC50ZW1wbGF0ZS1rZXl7Y29sb3I6IzAwMDAwMDYxO2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHh9Omhvc3QgLmJvb2xlYW4tdHJ1ZSw6aG9zdCAuYm9vbGVhbi1mYWxzZXtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4O3BhZGRpbmc6MCAxMnB4O3dpZHRoOmZpdC1jb250ZW50O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgLmJvb2xlYW4tZmFsc2V7Y29sb3I6I2QxMjczMDtiYWNrZ3JvdW5kLWNvbG9yOiNkMTI3MzAxNH06aG9zdCAuYm9vbGVhbi10cnVle2NvbG9yOiMxOTgwMzg7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4MTR9Omhvc3QgbWF0LWV4cGFuc2lvbi1wYW5lbHttYXJnaW4tdG9wOjEwcHg7b3ZlcmZsb3c6dmlzaWJsZX06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDowO2ZsZXg6MH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24+bWF0LWljb257bWFyZ2luLWxlZnQ6MTVweDtjb2xvcjojMDAwMDAwNjF9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye3BhZGRpbmc6MCAwIDAgMTJweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo0OHB4fTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAubWF0LWNvbnRlbnQubWF0LWNvbnRlbnQtaGlkZS10b2dnbGV7bWFyZ2luLXJpZ2h0OjB9Omhvc3QgLnJwYy1wYXJhbXMtcm93e292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLnJwYy1wYXJhbXMtcm93IDpub3QoOmZpcnN0LWNoaWxkKXt3aGl0ZS1zcGFjZTpwcmU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRlbXBsYXRlLW5hbWV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9ja306aG9zdCA6Om5nLWRlZXAgLm1hdC1jb250ZW50e2FsaWduLWl0ZW1zOmNlbnRlcn06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZmxleDoxO21hcmdpbjowfTpob3N0IC5hcnJheS12YWx1ZXttYXJnaW4tbGVmdDoxMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Nvbm5lY3RvclR5cGU6W3t0eXBlOmF9XSxjdHg6W3t0eXBlOmF9XSxzYXZlVGVtcGxhdGU6W3t0eXBlOmx9XSx1c2VUZW1wbGF0ZTpbe3R5cGU6bH1dLHJwY1RlbXBsYXRlczpbe3R5cGU6YX1dfX0pO2NsYXNzIElhe2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLkJyb2tlclNlY3VyaXR5VHlwZT1kbix0aGlzLnNlY3VyaXR5VHlwZXM9T2JqZWN0LnZhbHVlcyhkbiksdGhpcy5TZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXA9dW4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e30sdGhpcy5zZWN1cml0eUZvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltkbi5BTk9OWU1PVVMsW11dLHVzZXJuYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV19KSx0aGlzLm9ic2VydmVTZWN1cml0eUZvcm0oKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7ZS50eXBlfHwoZS50eXBlPWRuLkFOT05ZTU9VUyksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlKSx0aGlzLnVwZGF0ZVZpZXcoZSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUZvcm06e3ZhbGlkOiExfX19dXBkYXRlVmlldyhlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZShlKX11cGRhdGVWYWxpZGF0b3JzKGUpe2U9PT1kbi5CQVNJQz8odGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGFzc3dvcmQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfW9ic2VydmVTZWN1cml0eUZvcm0oKXt0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlVmlldyhlKSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PklhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+SWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbRCxIXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBBYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMuc2VuZENvbW1hbmQ9bmV3IGksdGhpcy5zYXZlVGVtcGxhdGU9bmV3IGksdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuYkFDbmV0UmVxdWVzdFR5cGVzPU9iamVjdC52YWx1ZXMoV3QpLHRoaXMuYkFDbmV0T2JqZWN0VHlwZXM9T2JqZWN0LnZhbHVlcyhLdCksdGhpcy5iTEVNZXRob2RzPU9iamVjdC52YWx1ZXMoWXQpLHRoaXMuY0FOQnl0ZU9yZGVycz1PYmplY3QudmFsdWVzKEp0KSx0aGlzLnNvY2tldE1ldGhvZFByb2Nlc3NpbmdzPU9iamVjdC52YWx1ZXMoWHQpLHRoaXMuc29ja2V0RW5jb2RpbmdzPU9iamVjdC52YWx1ZXMoYW4pLHRoaXMuc05NUE1ldGhvZHM9T2JqZWN0LnZhbHVlcyhlbiksdGhpcy5oVFRQTWV0aG9kcz1PYmplY3QudmFsdWVzKG5uKSx0aGlzLmJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXM9anQsdGhpcy5iQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXM9JHQsdGhpcy5iTEVNZXRob2RzVHJhbnNsYXRlcz1RdCx0aGlzLlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzVHJhbnNsYXRlcz1adCx0aGlzLlNOTVBNZXRob2RzVHJhbnNsYXRpb25zPXRuLHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy51cmxQYXR0ZXJuPS9eWy1hLXpBLVpkXyQ6e30/fis9XC8uMC05LV0qJC8sdGhpcy5udW1iZXJzT25seVBhdHRlcm49L15bMC05XSokLyx0aGlzLmhleE9ubHlQYXR0ZXJuPS9eWzAtOUEtRmEtZiBdKyQvLHRoaXMucHJvcGFnYXRlQ2hhbmdlPWU9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5jb21tYW5kRm9ybT10aGlzLmNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZSh0aGlzLmNvbm5lY3RvclR5cGUpLHRoaXMuY29tbWFuZEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9e307c3dpdGNoKHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5SRVNUOmNhc2UgX3QuUkVRVUVTVDplLmh0dHBIZWFkZXJzLmZvckVhY2goKGU9Pnt0W2UuaGVhZGVyTmFtZV09ZS52YWx1ZX0pKSxlLmh0dHBIZWFkZXJzPXR9dGhpcy5jb21tYW5kRm9ybS52YWxpZCYmdGhpcy5wcm9wYWdhdGVDaGFuZ2Uoey4uLnRoaXMuY29tbWFuZEZvcm0udmFsdWUsLi4uZX0pfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZShlKXtsZXQgdDtzd2l0Y2goZSl7Y2FzZSBfdC5CQUNORVQ6dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFR5cGU6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxvYmplY3RUeXBlOltudWxsLFtdXSxpZGVudGlmaWVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxwcm9wZXJ0eUlkOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7YnJlYWs7Y2FzZSBfdC5CTEU6dD10aGlzLmZiLmdyb3VwKHttZXRob2RSUEM6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sY2hhcmFjdGVyaXN0aWNVVUlEOlsiMDAwMDJBMDAtMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIzNEZCIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLHdpdGhSZXNwb25zZTpbITEsW11dfSk7YnJlYWs7Y2FzZSBfdC5DQU46dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbm9kZUlEOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxpc0V4dGVuZGVkSUQ6WyExLFtdXSxpc0ZEOlshMSxbXV0sYml0cmF0ZVN3aXRjaDpbITEsW11dLGRhdGFMZW5ndGg6W251bGwsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLGRhdGFCeXRlb3JkZXI6W251bGwsW11dLGRhdGFCZWZvcmU6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhQWZ0ZXI6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhSW5IRVg6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhRXhwcmVzc2lvbjpbbnVsbCxbdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuRlRQOnQ9dGhpcy5mYi5ncm91cCh7bWV0aG9kRmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuT0NQUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNPQ0tFVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLGVuY29kaW5nOlthbi5VVEZfOCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx3aXRoUmVzcG9uc2U6WyExLFtdXX0pO2JyZWFrO2Nhc2UgX3QuWE1QUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNOTVA6dD10aGlzLmZiLmdyb3VwKHtyZXF1ZXN0RmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx3aXRoUmVzcG9uc2U6WyExLFtdXSxvaWQ6dGhpcy5mYi5hcnJheShbXSxbdWUucmVxdWlyZWRdKX0pO2JyZWFrO2Nhc2UgX3QuUkVTVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwTWV0aG9kOltudWxsLFt1ZS5yZXF1aXJlZF1dLHJlcXVlc3RVcmxFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKHRoaXMudXJsUGF0dGVybildXSxyZXNwb25zZVRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSx0aW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdHJpZXM6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwSGVhZGVyczp0aGlzLmZiLmFycmF5KFtdKSxzZWN1cml0eTpbe30sW3VlLnJlcXVpcmVkXV19KTticmVhaztjYXNlIF90LlJFUVVFU1Q6dD10aGlzLmZiLmdyb3VwKHttZXRob2RGaWx0ZXI6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saHR0cE1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxyZXF1ZXN0VXJsRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybih0aGlzLnVybFBhdHRlcm4pXV0scmVzcG9uc2VUaW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdGltZW91dDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKDEwKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHRyaWVzOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxyZXF1ZXN0VmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5wYXR0ZXJuKGt0KV1dLGh0dHBIZWFkZXJzOnRoaXMuZmIuYXJyYXkoW10pfSk7YnJlYWs7ZGVmYXVsdDp0PXRoaXMuZmIuZ3JvdXAoe2NvbW1hbmQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFyYW1zOlt7fSxbSXRdXX0pfXJldHVybiB0fWFkZFNOTVBvaWQoZT1udWxsKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJvaWQiKTt0JiZ0LnB1c2godGhpcy5mYi5jb250cm9sKGUsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXSkse2VtaXRFdmVudDohMX0pfXJlbW92ZVNOTVBvaWQoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoIm9pZCIpLnJlbW92ZUF0KGUpfWFkZEhUVFBIZWFkZXIoZT17aGVhZGVyTmFtZTpudWxsLHZhbHVlOm51bGx9KXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJodHRwSGVhZGVycyIpLG49dGhpcy5mYi5ncm91cCh7aGVhZGVyTmFtZTpbZS5oZWFkZXJOYW1lLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlOltlLnZhbHVlLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7dCYmdC5wdXNoKG4se2VtaXRFdmVudDohMX0pfXJlbW92ZUhUVFBIZWFkZXIoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoImh0dHBIZWFkZXJzIikucmVtb3ZlQXQoZSl9Z2V0Rm9ybUFycmF5Q29udHJvbHMoZSl7cmV0dXJuIHRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpLmNvbnRyb2xzfW9wZW5FZGl0SlNPTkRpYWxvZyhlKXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlhbG9nLm9wZW4oUWUse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntqc29uVmFsdWU6dGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnZhbHVlLHJlcXVpcmVkOiEwfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnNldFZhbHVlKGUpfSkpfXNhdmUoKXt0aGlzLnNhdmVUZW1wbGF0ZS5lbWl0KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe31jbGVhckZyb21BcnJheUJ5TmFtZShlKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpO2Zvcig7MCE9PXQubGVuZ3RoOyl0LnJlbW92ZUF0KDApfXdyaXRlVmFsdWUoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtzd2l0Y2goZT1KKGUpLHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5TTk1QOnRoaXMuY2xlYXJGcm9tQXJyYXlCeU5hbWUoIm9pZCIpLGUub2lkLmZvckVhY2goKGU9Pnt0aGlzLmFkZFNOTVBvaWQoZSl9KSksZGVsZXRlIGUub2lkO2JyZWFrO2Nhc2UgX3QuUkVRVUVTVDpjYXNlIF90LlJFU1Q6dGhpcy5jbGVhckZyb21BcnJheUJ5TmFtZSgiaHR0cEhlYWRlcnMiKSxlLmh0dHBIZWFkZXJzJiZPYmplY3QuZW50cmllcyhlLmh0dHBIZWFkZXJzKS5mb3JFYWNoKChlPT57dGhpcy5hZGRIVFRQSGVhZGVyKHtoZWFkZXJOYW1lOmVbMF0sdmFsdWU6ZVsxXX0pfSkpLGRlbGV0ZSBlLmh0dHBIZWFkZXJzfXRoaXMuY29tbWFuZEZvcm0ucGF0Y2hWYWx1ZShlLHtvbmx5U2VsZjohMX0pfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6e2Nvbm5lY3RvclR5cGU6ImNvbm5lY3RvclR5cGUifSxvdXRwdXRzOntzZW5kQ29tbWFuZDoic2VuZENvbW1hbmQiLHNhdmVUZW1wbGF0ZToic2F2ZVRlbXBsYXRlIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hEZWZhdWx0LHNlbGVjdG9yOiJbbmdTd2l0Y2hEZWZhdWx0XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WmUuVGJKc29uVG9TdHJpbmdEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi1qc29uLXRvLXN0cmluZ10ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnouTWF0RGl2aWRlcixzZWxlY3RvcjoibWF0LWRpdmlkZXIiLGlucHV0czpbInZlcnRpY2FsIiwiaW5zZXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4QWxpZ25dLCBbZnhGbGV4QWxpZ24ueHNdLCBbZnhGbGV4QWxpZ24uc21dLCBbZnhGbGV4QWxpZ24ubWRdLCAgW2Z4RmxleEFsaWduLmxnXSwgW2Z4RmxleEFsaWduLnhsXSwgW2Z4RmxleEFsaWduLmx0LXNtXSwgW2Z4RmxleEFsaWduLmx0LW1kXSwgIFtmeEZsZXhBbGlnbi5sdC1sZ10sIFtmeEZsZXhBbGlnbi5sdC14bF0sIFtmeEZsZXhBbGlnbi5ndC14c10sIFtmeEZsZXhBbGlnbi5ndC1zbV0sICBbZnhGbGV4QWxpZ24uZ3QtbWRdLCBbZnhGbGV4QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeEZsZXhBbGlnbiIsImZ4RmxleEFsaWduLnhzIiwiZnhGbGV4QWxpZ24uc20iLCJmeEZsZXhBbGlnbi5tZCIsImZ4RmxleEFsaWduLmxnIiwiZnhGbGV4QWxpZ24ueGwiLCJmeEZsZXhBbGlnbi5sdC1zbSIsImZ4RmxleEFsaWduLmx0LW1kIiwiZnhGbGV4QWxpZ24ubHQtbGciLCJmeEZsZXhBbGlnbi5sdC14bCIsImZ4RmxleEFsaWduLmd0LXhzIiwiZnhGbGV4QWxpZ24uZ3Qtc20iLCJmeEZsZXhBbGlnbi5ndC1tZCIsImZ4RmxleEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUFycmF5TmFtZSxzZWxlY3RvcjoiW2Zvcm1BcnJheU5hbWVdIixpbnB1dHM6WyJmb3JtQXJyYXlOYW1lIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6SWEsc2VsZWN0b3I6InRiLXJlc3QtY29ubmVjdG9yLXNlY3VyaXR5In0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U2VydmljZVJQQ0Nvbm5lY3RvckNvbXBvbmVudCIsQWEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6QWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5BYSkpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpKZS5NYXREaWFsb2d9XSxwcm9wRGVjb3JhdG9yczp7Y29ubmVjdG9yVHlwZTpbe3R5cGU6YX1dLHNlbmRDb21tYW5kOlt7dHlwZTpsfV0sc2F2ZVRlbXBsYXRlOlt7dHlwZTpsfV19fSk7Y2xhc3MgTmEgZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LGEpLHRoaXMuc3RvcmU9ZSx0aGlzLnJvdXRlcj10LHRoaXMuZGF0YT1uLHRoaXMuZGlhbG9nUmVmPWEsdGhpcy5mYj1vLHRoaXMuY29uZmlnPXRoaXMuZGF0YS5jb25maWcsdGhpcy50ZW1wbGF0ZXM9dGhpcy5kYXRhLnRlbXBsYXRlcyx0aGlzLnRlbXBsYXRlTmFtZUN0cmw9dGhpcy5mYi5jb250cm9sKCIiLFt1ZS5yZXF1aXJlZF0pfXZhbGlkYXRlRHVwbGljYXRlTmFtZShlKXtjb25zdCB0PWUudmFsdWUudHJpbSgpO3JldHVybiEhdGhpcy50ZW1wbGF0ZXMuZmluZCgoZT0+ZS5uYW1lPT09dCkpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1zYXZlKCl7dGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnNldFZhbHVlKHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWx1ZS50cmltKCkpLHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnZhbHVlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5hLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOk5hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10b29sYmFyIGNvbG9yPSJwcmltYXJ5Ij5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy5zYXZlLXRlbXBsYXRlPC9oMj5cbiAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbWF0LXRvb2xiYXI+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0id2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayB0Yi12YWx1ZS10eXBlIiBzdHlsZT0iZmxleC1ncm93OiAwIj5cbiAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lPC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09InRlbXBsYXRlTmFtZUN0cmwiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0idGVtcGxhdGVOYW1lQ3RybC5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxkaXYgY2xhc3M9Im1hdC1tZGMtZm9ybS1maWVsZC1lcnJvciJcbiAgICAgICBzdHlsZT0ibWFyZ2luLXRvcDogLTE1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgZm9udC1zaXplOiAxNHB4OyJcbiAgICAgICAqbmdJZj0idmFsaWRhdGVEdXBsaWNhdGVOYW1lKHRlbXBsYXRlTmFtZUN0cmwpIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWUtZHVwbGljYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICA8YnV0dG9uIG1hdC1idXR0b25cbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICBbZGlzYWJsZWRdPSIhdGVtcGxhdGVOYW1lQ3RybC52YWxpZCJcbiAgICAgICAgICAoY2xpY2spPSJzYXZlKCkiPlxuICAgIHt7IFwnYWN0aW9uLnNhdmVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0FjdGlvbnMsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWFjdGlvbnNdLCBtYXQtZGlhbG9nLWFjdGlvbnMsIFttYXREaWFsb2dBY3Rpb25zXSIsaW5wdXRzOlsiYWxpZ24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dDb250ZW50LHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1jb250ZW50XSwgbWF0LWRpYWxvZy1jb250ZW50LCBbbWF0RGlhbG9nQ29udGVudF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb25uZWN0b3JUZW1wbGF0ZURpYWxvZ0NvbXBvbmVudCIsTmEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TmEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlLWRpYWxvZyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICA8aDIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnNhdmUtdGVtcGxhdGU8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJ3aWR0aDogNjAwcHgiIGNsYXNzPSJtYXQtY29udGVudCIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIHRiLXZhbHVlLXR5cGUiIHN0eWxlPSJmbGV4LWdyb3c6IDAiPlxuICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0idGVtcGxhdGVOYW1lQ3RybCIgcmVxdWlyZWQvPlxuICAgIDxtYXQtZXJyb3JcbiAgICAgICpuZ0lmPSJ0ZW1wbGF0ZU5hbWVDdHJsLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPGRpdiBjbGFzcz0ibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yIlxuICAgICAgIHN0eWxlPSJtYXJnaW4tdG9wOiAtMTVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDE0cHg7IlxuICAgICAgICpuZ0lmPSJ2YWxpZGF0ZUR1cGxpY2F0ZU5hbWUodGVtcGxhdGVOYW1lQ3RybCkiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1kdXBsaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIj5cbiAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgIFtkaXNhYmxlZF09IiF0ZW1wbGF0ZU5hbWVDdHJsLnZhbGlkIlxuICAgICAgICAgIChjbGljayk9InNhdmUoKSI+XG4gICAge3sgXCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBNYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKEduKSx0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy52YWx1ZVR5cGVzPVZuLHRoaXMub25DaGFuZ2U9ZT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXJndW1lbnRzOnRoaXMuZmIuYXJyYXkoW10pfSksdGhpcy5vYnNlcnZlVmFsdWVDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuY2xlYXJBcmd1bWVudHMoKSxlLmFyZ3VtZW50cz8ubWFwKCgoe3R5cGU6ZSx2YWx1ZTp0fSk9Pih7dHlwZTplLFtlXTp0fSkpKS5mb3JFYWNoKChlPT50aGlzLmFkZEFyZ3VtZW50KGUpKSksdGhpcy5jZHIubWFya0ZvckNoZWNrKCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlLm1ldGhvZCl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmFyZ3VtZW50cy5tYXAoKCh7dHlwZTplLC4uLnR9KT0+KHt0eXBlOmUsdmFsdWU6dFtlXX0pKSk7dGhpcy5vbkNoYW5nZSh7bWV0aG9kOmUubWV0aG9kLGFyZ3VtZW50czp0fSksdGhpcy5vblRvdWNoZWQoKX0pKX1yZW1vdmVBcmd1bWVudChlKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJhcmd1bWVudHMiKS5yZW1vdmVBdChlKX1hZGRBcmd1bWVudChlPXt9KXtjb25zdCB0PXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2UudHlwZT8/R24uU1RSSU5HXSxzdHJpbmc6W2Uuc3RyaW5nPz97dmFsdWU6IiIsZGlzYWJsZWQ6IShlZShlLHt9KXx8ZS5zdHJpbmcpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6ZS5pbnRlZ2VyPz8wLGRpc2FibGVkOiFpZShlLmludGVnZXIpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihMdCldXSxkb3VibGU6W3t2YWx1ZTplLmRvdWJsZT8/MCxkaXNhYmxlZDohaWUoZS5kb3VibGUpfSxbdWUucmVxdWlyZWRdXSxib29sZWFuOlt7dmFsdWU6ZS5ib29sZWFuPz8hMSxkaXNhYmxlZDohaWUoZS5ib29sZWFuKX0sW3VlLnJlcXVpcmVkXV19KTt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKHQpLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpLnB1c2godCx7ZW1pdEV2ZW50OiExfSl9Y2xlYXJBcmd1bWVudHMoKXtjb25zdCBlPXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpO2Zvcig7MCE9PWUubGVuZ3RoOyllLnJlbW92ZUF0KDApfW9ic2VydmVUeXBlQ2hhbmdlKGUpe2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e2UuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoInR5cGUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KHQpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpNYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpNYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+TWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCB0Yi1mbGV4IG5vLXBhZGRpbmctdG9wIGhpbnQtY29udGFpbmVyIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLmhpbnQub3BjLW1ldGhvZFwnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Im11bHRpcGx5Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxmaWVsZHNldCBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIGFyZ3VtZW50cy1jb250YWluZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZvcm1BcnJheU5hbWU9ImFyZ3VtZW50cyI+XG4gICAgPHN0cm9uZz5cbiAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9zdHJvbmc+XG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAqbmdGb3I9ImxldCBhcmd1bWVudEZvcm1Hcm91cCBvZiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FyZ3VtZW50c1wnKVtcJ2NvbnRyb2xzXCddOyBsZXQgaSA9IGluZGV4IiBbZm9ybUdyb3VwXT0iYXJndW1lbnRGb3JtR3JvdXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIHR5cGUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTE4IiBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHZhbHVlVHlwZSBvZiB2YWx1ZVR5cGVLZXlzIiBbdmFsdWVdPSJ2YWx1ZVR5cGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB2YWx1ZS1jb250YWluZXIiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuU1RSSU5HIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9InN0cmluZyJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLkRPVUJMRSIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJkb3VibGUiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5CT09MRUFOIiBmb3JtQ29udHJvbE5hbWU9ImJvb2xlYW4iPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJ0cnVlIj50cnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVBcmd1bWVudChpKSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgIChjbGljayk9ImFkZEFyZ3VtZW50KCkiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy5hZGQtYXJndW1lbnRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2ZpZWxkc2V0PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuYXJndW1lbnRzLWNvbnRhaW5lcnttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnR5cGUtY29udGFpbmVye3dpZHRoOjQwJX06aG9zdCAudmFsdWUtY29udGFpbmVye3dpZHRoOjUwJX06aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp3ZS5NYXRTZWxlY3RUcmlnZ2VyLHNlbGVjdG9yOiJtYXQtc2VsZWN0LXRyaWdnZXIifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEdhcERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRHYXBdLCBbZnhMYXlvdXRHYXAueHNdLCBbZnhMYXlvdXRHYXAuc21dLCBbZnhMYXlvdXRHYXAubWRdLCAgW2Z4TGF5b3V0R2FwLmxnXSwgW2Z4TGF5b3V0R2FwLnhsXSwgW2Z4TGF5b3V0R2FwLmx0LXNtXSwgW2Z4TGF5b3V0R2FwLmx0LW1kXSwgIFtmeExheW91dEdhcC5sdC1sZ10sIFtmeExheW91dEdhcC5sdC14bF0sIFtmeExheW91dEdhcC5ndC14c10sIFtmeExheW91dEdhcC5ndC1zbV0sICBbZnhMYXlvdXRHYXAuZ3QtbWRdLCBbZnhMYXlvdXRHYXAuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEdhcCIsImZ4TGF5b3V0R2FwLnhzIiwiZnhMYXlvdXRHYXAuc20iLCJmeExheW91dEdhcC5tZCIsImZ4TGF5b3V0R2FwLmxnIiwiZnhMYXlvdXRHYXAueGwiLCJmeExheW91dEdhcC5sdC1zbSIsImZ4TGF5b3V0R2FwLmx0LW1kIiwiZnhMYXlvdXRHYXAubHQtbGciLCJmeExheW91dEdhcC5sdC14bCIsImZ4TGF5b3V0R2FwLmd0LXhzIiwiZnhMYXlvdXRHYXAuZ3Qtc20iLCJmeExheW91dEdhcC5ndC1tZCIsImZ4TGF5b3V0R2FwLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhBbGlnbl0sIFtmeEZsZXhBbGlnbi54c10sIFtmeEZsZXhBbGlnbi5zbV0sIFtmeEZsZXhBbGlnbi5tZF0sICBbZnhGbGV4QWxpZ24ubGddLCBbZnhGbGV4QWxpZ24ueGxdLCBbZnhGbGV4QWxpZ24ubHQtc21dLCBbZnhGbGV4QWxpZ24ubHQtbWRdLCAgW2Z4RmxleEFsaWduLmx0LWxnXSwgW2Z4RmxleEFsaWduLmx0LXhsXSwgW2Z4RmxleEFsaWduLmd0LXhzXSwgW2Z4RmxleEFsaWduLmd0LXNtXSwgIFtmeEZsZXhBbGlnbi5ndC1tZF0sIFtmeEZsZXhBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4RmxleEFsaWduIiwiZnhGbGV4QWxpZ24ueHMiLCJmeEZsZXhBbGlnbi5zbSIsImZ4RmxleEFsaWduLm1kIiwiZnhGbGV4QWxpZ24ubGciLCJmeEZsZXhBbGlnbi54bCIsImZ4RmxleEFsaWduLmx0LXNtIiwiZnhGbGV4QWxpZ24ubHQtbWQiLCJmeEZsZXhBbGlnbi5sdC1sZyIsImZ4RmxleEFsaWduLmx0LXhsIiwiZnhGbGV4QWxpZ24uZ3QteHMiLCJmeEZsZXhBbGlnbi5ndC1zbSIsImZ4RmxleEFsaWduLmd0LW1kIiwiZnhGbGV4QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1BcnJheU5hbWUsc2VsZWN0b3I6Iltmb3JtQXJyYXlOYW1lXSIsaW5wdXRzOlsiZm9ybUFycmF5TmFtZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk1hLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk1hKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm9wYy1tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJtdWx0aXBseSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8ZmllbGRzZXQgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBhcmd1bWVudHMtY29udGFpbmVyIiBmeExheW91dD0iY29sdW1uIiBmb3JtQXJyYXlOYW1lPSJhcmd1bWVudHMiPlxuICAgIDxzdHJvbmc+XG4gICAgICA8c3BhbiBjbGFzcz0iZmllbGRzLWxhYmVsIj57eyBcJ2dhdGV3YXkucnBjLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvc3Ryb25nPlxuICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgKm5nRm9yPSJsZXQgYXJndW1lbnRGb3JtR3JvdXAgb2YgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhcmd1bWVudHNcJylbXCdjb250cm9sc1wnXTsgbGV0IGkgPSBpbmRleCIgW2Zvcm1Hcm91cF09ImFyZ3VtZW50Rm9ybUdyb3VwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB0eXBlLWNvbnRhaW5lciIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdmFsdWUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLklOVEVHRVIiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iaW50ZWdlciIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5ET1VCTEUiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iZG91YmxlIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0idHJ1ZSI+dHJ1ZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iZmFsc2UiPmZhbHNlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXJndW1lbnRGb3JtR3JvdXAuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQXJndW1lbnQoaSkiXG4gICAgICAgICAgICAgIGNsYXNzPSJ0Yi1ib3gtYnV0dG9uIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICBmeEZsZXhBbGlnbj0ic3RhcnQiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGRBcmd1bWVudCgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWFyZ3VtZW50XCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9maWVsZHNldD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFyZ3VtZW50cy1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC50eXBlLWNvbnRhaW5lcnt3aWR0aDo0MCV9Omhvc3QgLnZhbHVlLWNvbnRhaW5lcnt3aWR0aDo1MCV9Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyBFYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5vbkNoYW5nZT1lPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXF1ZXN0VG9waWNFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVG9waWNFeHByZXNzaW9uOlt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUaW1lb3V0Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLm1pbigxMCksdWUucGF0dGVybihMdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVXaXRoUmVzcG9uc2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWxpZD9udWxsOntycGNQYXJhbWV0ZXJzRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlLndpdGhSZXNwb25zZSl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW9ic2VydmVXaXRoUmVzcG9uc2UoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ3aXRoUmVzcG9uc2UiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+dGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX10b2dnbGVSZXNwb25zZUZpZWxkcyhlKXtjb25zdCB0PXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInJlc3BvbnNlVG9waWNFeHByZXNzaW9uIiksbj10aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKTtlPyh0LmVuYWJsZSgpLG4uZW5hYmxlKCkpOih0LmRpc2FibGUoKSxuLmRpc2FibGUoKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+RWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXF1ZXN0LyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXJnaW4iIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSIgZm9ybUNvbnRyb2xOYW1lPSJ3aXRoUmVzcG9uc2UiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMud2l0aFJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9InNlbnNvci8ke2RldmljZU5hbWV9L3Jlc3BvbnNlLyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd3aXRoUmVzcG9uc2VcJyk/LnZhbHVlIj5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VUaW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9IjEwMDAwIiBtaW49IjEwIiBzdGVwPSIxIi8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAubWF0LW1kYy1zbGlkZS10b2dnbGUubWFyZ2lue21hcmdpbi1ib3R0b206MTBweDttYXJnaW4tbGVmdDoxMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkVhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9ImVjaG8iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0ic2Vuc29yLyR7ZGV2aWNlTmFtZX0vcmVxdWVzdC8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWFyZ2luIiAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3dpdGhSZXNwb25zZVwnKT8udmFsdWUiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXNwb25zZS8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIxMDAwMCIgbWluPSIxMCIgc3RlcD0iMSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L25nLWNvbnRhaW5lcj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBxYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNFZGl0YWJsZURhdGFUeXBlcz10YSx0aGlzLk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcD16dCx0aGlzLm1vZGJ1c0RhdGFUeXBlcz1PYmplY3QudmFsdWVzKGVhKSx0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcz1bNSw2LDE1LDE2XSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVszLDQsNiwxNl0sdGhpcy5yZWFkRnVuY3Rpb25Db2Rlcz1bMSwyLDMsNF0sdGhpcy5iaXRzRnVuY3Rpb25Db2Rlcz1bLi4udGhpcy5yZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLndyaXRlRnVuY3Rpb25Db2Rlc10sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2VhLkJZVEVTLFt1ZS5yZXF1aXJlZF1dLGZ1bmN0aW9uQ29kZTpbdGhpcy5kZWZhdWx0RnVuY3Rpb25Db2Rlc1swXSxbdWUucmVxdWlyZWRdXSx2YWx1ZTpbe3ZhbHVlOiIiLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxhZGRyZXNzOltudWxsLFt1ZS5yZXF1aXJlZF1dLG9iamVjdHNDb3VudDpbMSxbdWUucmVxdWlyZWRdXX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2Rlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWUpLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpLHRoaXMub2JzZXJ2ZUtleURhdGFUeXBlKCksdGhpcy5vYnNlcnZlRnVuY3Rpb25Db2RlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlS2V5RGF0YVR5cGUoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoIm9iamVjdHNDb3VudCIpLnBhdGNoVmFsdWUobmFbZV0se2VtaXRFdmVudDohMX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlKX0pKX1vYnNlcnZlRnVuY3Rpb25Db2RlKCl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgiZnVuY3Rpb25Db2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWx1ZUVuYWJsaW5nKGUpKSl9dXBkYXRlVmFsdWVFbmFibGluZyhlKXt0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyhlKT90aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ2YWx1ZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6KHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInZhbHVlIikuc2V0VmFsdWUobnVsbCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgidmFsdWUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSl9dXBkYXRlRnVuY3Rpb25Db2RlcyhlKXt0aGlzLmZ1bmN0aW9uQ29kZXM9ZT09PWVhLkJJVFM/dGhpcy5iaXRzRnVuY3Rpb25Db2Rlczp0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzLHRoaXMuZnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJmdW5jdGlvbkNvZGUiKS52YWx1ZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUodGhpcy5mdW5jdGlvbkNvZGVzWzBdLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cWEsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnFhKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy1yZXNwb25zZS1yZWFkaW5nXCcgfCB0cmFuc2xhdGUgfX08YnI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9uc1wnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNEYXRhVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IHR5cGUgfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZnVuY3Rpb25Db2RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29kZSBvZiBmdW5jdGlvbkNvZGVzIiBbdmFsdWVdPSJjb2RlIj57eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iNTAwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImFkZHJlc3MiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYWRkcmVzcy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FkZHJlc3NcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm9iamVjdHNDb3VudFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICBtaW49IjEiXG4gICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJ3cml0ZUZ1bmN0aW9uQ29kZXMuaW5jbHVkZXMocnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdmdW5jdGlvbkNvZGVcJykudmFsdWUpIiBmeEZsZXggZnhMYXlvdXQ9InJvdyI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMTAwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndmFsdWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIlxuICAgICAgPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5xYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggbm8tcGFkZGluZy10b3AgaGludC1jb250YWluZXIiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtcmVzcG9uc2UtcmVhZGluZ1wnIHwgdHJhbnNsYXRlIH19PGJyPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtd3JpdGluZy1mdW5jdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzRGF0YVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyB0eXBlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmZ1bmN0aW9uQ29kZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImZ1bmN0aW9uQ29kZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvZGUgb2YgZnVuY3Rpb25Db2RlcyIgW3ZhbHVlXT0iY29kZSI+e3sgTW9kYnVzRnVuY3Rpb25Db2RlVHJhbnNsYXRpb25zTWFwLmdldChjb2RlKSB8IHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjUwMDAwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJhZGRyZXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmFkZHJlc3MtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnYWRkcmVzc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5vYmplY3RzQ291bnRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9Im51bWJlciJcbiAgICAgICAgbWluPSIxIlxuICAgICAgICBtYXg9IjUwMDAwIlxuICAgICAgICBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJvYmplY3RzQ291bnQiXG4gICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgIFtyZWFkb25seV09IiFNb2RidXNFZGl0YWJsZURhdGFUeXBlcy5pbmNsdWRlcyhycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpIlxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0id3JpdGVGdW5jdGlvbkNvZGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnZnVuY3Rpb25Db2RlXCcpLnZhbHVlKSIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjEwMCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciJcbiAgICAgID5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBEYXtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMudXRpbHM9bix0aGlzLmNkPWEsdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPW8sdGhpcy5jb250ZW50VHlwZXM9Ryx0aGlzLlJQQ0NvbW1hbmRzPVsiUGluZyIsIlN0YXRzIiwiRGV2aWNlcyIsIlVwZGF0ZSIsIlZlcnNpb24iLCJSZXN0YXJ0IiwiUmVib290Il0sdGhpcy50ZW1wbGF0ZXM9W10sdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy50eXBlc1dpdGhVcGRhdGVkUGFyYW1zPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVUZW1wbGF0ZXMoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpLGRhdGFMb2FkaW5nOigpPT57fX19LHRoaXMuY29tbWFuZEZvcm09dGhpcy5mYi5ncm91cCh7Y29tbWFuZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx0aW1lOls2MCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV0scGFyYW1zOlsie30iLFtJdF1dLHJlc3VsdDpbbnVsbF19KX1uZ09uSW5pdCgpe2lmKHRoaXMuaXNDb25uZWN0b3I9dGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3IsdGhpcy5pc0Nvbm5lY3Rvcil7dGhpcy5jb25uZWN0b3JUeXBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpLmNvbm5lY3Rvcl9ycGMudmFsdWUudHlwZTtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udGFyZ2V0RGV2aWNlSWQsZW50aXR5TmFtZToiQ29ubmVjdG9yIixhdHRyaWJ1dGVzOlt7bmFtZTpgJHt0aGlzLmNvbm5lY3RvclR5cGV9X3RlbXBsYXRlYH1dfV07dGhpcy5jdHguc3Vic2NyaXB0aW9uQXBpLmNyZWF0ZVN1YnNjcmlwdGlvbkZyb21JbmZvKEEubGF0ZXN0LGUsdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zLCExLCEwKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnN1YnNjcmlwdGlvbj1lfSkpfWVsc2UgdGhpcy5jb21tYW5kRm9ybS5nZXQoImNvbW1hbmQiKS5zZXRWYWx1ZSh0aGlzLlJQQ0NvbW1hbmRzWzBdKX1zZW5kQ29tbWFuZChlKXt0aGlzLnJlc3VsdFRpbWU9bnVsbDtjb25zdCB0PWV8fHRoaXMuY29tbWFuZEZvcm0udmFsdWUsbj10aGlzLmlzQ29ubmVjdG9yP2Ake3RoaXMuY29ubmVjdG9yVHlwZX1fYDoiZ2F0ZXdheV8iLGE9dGhpcy5pc0Nvbm5lY3Rvcj90aGlzLmdldENvbW1hbmRGcm9tUGFyYW1zQnlUeXBlKHQucGFyYW1zKTp0LmNvbW1hbmQudG9Mb3dlckNhc2UoKSxvPXQucGFyYW1zO3RoaXMuY3R4LmNvbnRyb2xBcGkuc2VuZFR3b1dheUNvbW1hbmQobithLG8sdC50aW1lKS5zdWJzY3JpYmUoe25leHQ6ZT0+e3RoaXMucmVzdWx0VGltZT0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLmNvbW1hbmRGb3JtLmdldCgicmVzdWx0Iikuc2V0VmFsdWUoSlNPTi5zdHJpbmdpZnkoZSkpfSxlcnJvcjplPT57dGhpcy5yZXN1bHRUaW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGNvbnNvbGUuZXJyb3IoZSksdGhpcy5jb21tYW5kRm9ybS5nZXQoInJlc3VsdCIpLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGUuZXJyb3IpKX19KX1nZXRDb21tYW5kRnJvbVBhcmFtc0J5VHlwZShlKXtzd2l0Y2godGhpcy5jb25uZWN0b3JUeXBlKXtjYXNlIF90Lk1RVFQ6Y2FzZSBfdC5GVFA6Y2FzZSBfdC5TTk1QOmNhc2UgX3QuUkVTVDpjYXNlIF90LlJFUVVFU1Q6cmV0dXJuIGUubWV0aG9kRmlsdGVyO2Nhc2UgX3QuTU9EQlVTOnJldHVybiBlLnRhZztjYXNlIF90LkJBQ05FVDpjYXNlIF90LkNBTjpjYXNlIF90Lk9QQ1VBOnJldHVybiBlLm1ldGhvZDtjYXNlIF90LkJMRTpjYXNlIF90Lk9DUFA6Y2FzZSBfdC5TT0NLRVQ6Y2FzZSBfdC5YTVBQOnJldHVybiBlLm1ldGhvZFJQQztkZWZhdWx0OnJldHVybiBlLmNvbW1hbmR9fXNhdmVUZW1wbGF0ZSgpe3RoaXMuZGlhbG9nLm9wZW4oTmEse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntjb25maWc6dGhpcy5jb21tYW5kRm9ybS52YWx1ZS5wYXJhbXMsdGVtcGxhdGVzOnRoaXMudGVtcGxhdGVzfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57aWYoZSl7Y29uc3QgdD17bmFtZTplLGNvbmZpZzp0aGlzLmNvbW1hbmRGb3JtLnZhbHVlLnBhcmFtc30sbj10aGlzLnRlbXBsYXRlcyxhPW4uZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO2E+LTEmJm4uc3BsaWNlKGEsMSksbi5wdXNoKHQpO2NvbnN0IG89YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5Om8sdmFsdWU6bn1dKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9fSkpfXVzZVRlbXBsYXRlKGUpe3RoaXMuY29tbWFuZEZvcm0uZ2V0KCJwYXJhbXMiKS5wYXRjaFZhbHVlKGUuY29uZmlnKX11cGRhdGVUZW1wbGF0ZXMoKXt0aGlzLnRlbXBsYXRlcz10aGlzLnN1YnNjcmlwdGlvbi5kYXRhWzBdLmRhdGFbMF1bMV0ubGVuZ3RoP0pTT04ucGFyc2UodGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhWzBdWzFdKTpbXSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVFcnJvcihlKXtjb25zdCB0PXRoaXMudXRpbHMucGFyc2VFeGNlcHRpb24oZSk7bGV0IG49dC5uYW1lO3QubWVzc2FnZSYmKG4rPSI6ICIrdC5tZXNzYWdlKSxjb25zb2xlLmVycm9yKG4pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RGEsZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpEYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBmeExheW91dD0iY29sdW1uIiBmeEZsZXggW25nQ2xhc3NdPSJ7XCdib3JkZXJcJzogaXNDb25uZWN0b3J9Ij5cbiAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dC5sdC1zbT0iY29sdW1uIiBjbGFzcz0iY29tbWFuZC1mb3JtIiBmeExheW91dEdhcD0iMTBweCIgW2Zvcm1Hcm91cF09ImNvbW1hbmRGb3JtIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSIhaXNDb25uZWN0b3I7IGVsc2UgY29ubmVjdG9yRm9ybSI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29tbWFuZCBvZiBSUENDb21tYW5kcyIgW3ZhbHVlXT0iY29tbWFuZCI+XG4gICAgICAgICAgICB7eyBjb21tYW5kIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LW1zXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiLz5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZEZvcm0uZ2V0KFwndGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5pbnZhbGlkIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNlbmRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb25uZWN0b3JGb3JtPlxuICAgICAgPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yXG4gICAgICAgICpuZ0lmPSIhdHlwZXNXaXRoVXBkYXRlZFBhcmFtcy5oYXMoY29ubmVjdG9yVHlwZSkgZWxzZSB1cGRhdGVkUGFyYW1ldGVycyJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiXG4gICAgICAgIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSJcbiAgICAgICAgKHNlbmRDb21tYW5kKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgKHNhdmVUZW1wbGF0ZSk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgLz5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlZFBhcmFtZXRlcnM+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InJwYy1wYXJhbWV0ZXJzIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0Yi1mb3JtLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRpdGxlXCcgfCB0cmFuc2xhdGU6IHt0eXBlOiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlcy5nZXQoY29ubmVjdG9yVHlwZSl9IH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1xdHQtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NUVRUIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgICAgPHRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuT1BDVUEiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUtYWN0aW9ucyIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2F2ZVRlbXBsYXRlKCkiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmdldChcJ3BhcmFtc1wnKS5pbnZhbGlkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxzZWN0aW9uIGNsYXNzPSJyZXN1bHQtYmxvY2siIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPHNwYW4+e3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXJlc3VsdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8ZGl2ICpuZ0lmPSJyZXN1bHRUaW1lIiBjbGFzcz0icmVzdWx0LXRpbWUiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+c2NoZWR1bGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyByZXN1bHRUaW1lIHwgZGF0ZTogXCd5eXl5L01NL2RkIEhIOm1tOnNzXCcgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG4gICAgPHRiLWpzb24tY29udGVudCBbY29udGVudFR5cGVdPSJjb250ZW50VHlwZXMuSlNPTiIgcmVhZG9ubHk9InRydWUiIGZvcm1Db250cm9sTmFtZT0icmVzdWx0Ij48L3RiLWpzb24tY29udGVudD5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG48dGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIGZ4RmxleD0iMzAiICpuZ0lmPSJpc0Nvbm5lY3RvciIgY2xhc3M9ImJvcmRlciIgW3JwY1RlbXBsYXRlc109InRlbXBsYXRlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N0eF09ImN0eCIgW2Nvbm5lY3RvclR5cGVdPSJjb25uZWN0b3JUeXBlIiAodXNlVGVtcGxhdGUpPSJ1c2VUZW1wbGF0ZSgkZXZlbnQpIj5cbjwvdGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3BhZGRpbmc6MCA1cHh9Omhvc3Q+KntoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfTpob3N0PnRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlczpsYXN0LWNoaWxke21hcmdpbi1sZWZ0OjEwcHh9Omhvc3QgLmNvbW1hbmQtZm9ybXtmbGV4LXdyYXA6bm93cmFwO3BhZGRpbmc6MCA1cHggNXB4fTpob3N0IC5jb21tYW5kLWZvcm0+YnV0dG9ue21hcmdpbi10b3A6MTBweH06aG9zdCAucnBjLXBhcmFtZXRlcnN7d2lkdGg6MTAwJX06aG9zdCAucmVzdWx0LWJsb2Nre3BhZGRpbmc6MCA1cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFue2ZvbnQtd2VpZ2h0OjYwMDtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjI1cHg7ei1pbmRleDo1O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAucmVzdWx0LWJsb2NrPnNwYW4gLnJlc3VsdC10aW1lIHNwYW57cGFkZGluZy1sZWZ0OjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jayB0Yi1qc29uLWNvbnRlbnR7ZmxleDoxfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0NsYXNzLHNlbGVjdG9yOiJbbmdDbGFzc10iLGlucHV0czpbImNsYXNzIiwibmdDbGFzcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6c3QuSnNvbkNvbnRlbnRDb21wb25lbnQsc2VsZWN0b3I6InRiLWpzb24tY29udGVudCIsaW5wdXRzOlsibGFiZWwiLCJjb250ZW50VHlwZSIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwidGJQbGFjZWhvbGRlciIsImhpZGVUb29sYmFyIiwicmVhZG9ubHkiLCJ2YWxpZGF0ZUNvbnRlbnQiLCJ2YWxpZGF0ZU9uQ2hhbmdlIiwicmVxdWlyZWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOk1hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbW9kYnVzLXJwYy1wYXJhbWV0ZXJzIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIiwiY3R4IiwicnBjVGVtcGxhdGVzIl0sb3V0cHV0czpbInNhdmVUZW1wbGF0ZSIsInVzZVRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIl0sb3V0cHV0czpbInNlbmRDb21tYW5kIiwic2F2ZVRlbXBsYXRlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb21wb25lbnQiLERhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkRhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgZnhGbGV4IFtuZ0NsYXNzXT0ie1wnYm9yZGVyXCc6IGlzQ29ubmVjdG9yfSI+XG4gIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtc209ImNvbHVtbiIgY2xhc3M9ImNvbW1hbmQtZm9ybSIgZnhMYXlvdXRHYXA9IjEwcHgiIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIWlzQ29ubmVjdG9yOyBlbHNlIGNvbm5lY3RvckZvcm0iPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgUlBDQ29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQiPlxuICAgICAgICAgICAge3sgY29tbWFuZCB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1tc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InRpbWUiIHR5cGU9Im51bWJlciIgbWluPSIxIi8+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRGb3JtLmdldChcJ3RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29ubmVjdG9yRm9ybT5cbiAgICAgIDx0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3RvclxuICAgICAgICAqbmdJZj0iIXR5cGVzV2l0aFVwZGF0ZWRQYXJhbXMuaGFzKGNvbm5lY3RvclR5cGUpIGVsc2UgdXBkYXRlZFBhcmFtZXRlcnMiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIlxuICAgICAgICBbY29ubmVjdG9yVHlwZV09ImNvbm5lY3RvclR5cGUiXG4gICAgICAgIChzZW5kQ29tbWFuZCk9InNlbmRDb21tYW5kKCkiXG4gICAgICAgIChzYXZlVGVtcGxhdGUpPSJzYXZlVGVtcGxhdGUoKSJcbiAgICAgIC8+XG4gICAgICA8bmctdGVtcGxhdGUgI3VwZGF0ZWRQYXJhbWV0ZXJzPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJycGMtcGFyYW1ldGVycyI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGItZm9ybS1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50aXRsZVwnIHwgdHJhbnNsYXRlOiB7dHlwZTogZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXMuZ2V0KGNvbm5lY3RvclR5cGUpfSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NT0RCVVMiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRlbXBsYXRlLWFjdGlvbnMiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zYXZlLXRlbXBsYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uZ2V0KFwncGFyYW1zXCcpLmludmFsaWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8c2VjdGlvbiBjbGFzcz0icmVzdWx0LWJsb2NrIiBbZm9ybUdyb3VwXT0iY29tbWFuZEZvcm0iPlxuICAgIDxzcGFuPnt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1yZXN1bHRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPGRpdiAqbmdJZj0icmVzdWx0VGltZSIgY2xhc3M9InJlc3VsdC10aW1lIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnNjaGVkdWxlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgcmVzdWx0VGltZSB8IGRhdGU6IFwneXl5eS9NTS9kZCBISDptbTpzc1wnIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9zcGFuPlxuICAgIDx0Yi1qc29uLWNvbnRlbnQgW2NvbnRlbnRUeXBlXT0iY29udGVudFR5cGVzLkpTT04iIHJlYWRvbmx5PSJ0cnVlIiBmb3JtQ29udHJvbE5hbWU9InJlc3VsdCI+PC90Yi1qc29uLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcyBmeEZsZXg9IjMwIiAqbmdJZj0iaXNDb25uZWN0b3IiIGNsYXNzPSJib3JkZXIiIFtycGNUZW1wbGF0ZXNdPSJ0ZW1wbGF0ZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdHhdPSJjdHgiIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSIgKHVzZVRlbXBsYXRlKT0idXNlVGVtcGxhdGUoJGV2ZW50KSI+XG48L3RiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcz5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztwYWRkaW5nOjAgNXB4fTpob3N0Pip7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b306aG9zdD50Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXM6bGFzdC1jaGlsZHttYXJnaW4tbGVmdDoxMHB4fTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcDtwYWRkaW5nOjAgNXB4IDVweH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLnJwYy1wYXJhbWV0ZXJze3dpZHRoOjEwMCV9Omhvc3QgLnJlc3VsdC1ibG9ja3twYWRkaW5nOjAgNXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxfTpob3N0IC5yZXN1bHQtYmxvY2s+c3Bhbntmb250LXdlaWdodDo2MDA7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2s+c3BhbiAucmVzdWx0LXRpbWV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDoyNXB4O3otaW5kZXg6NTtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZSBzcGFue3BhZGRpbmctbGVmdDoxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2sgdGItanNvbi1jb250ZW50e2ZsZXg6MX06aG9zdCAuYm9yZGVye3BhZGRpbmc6MTZweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5VdGlsc1NlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTtjbGFzcyBQYSBleHRlbmRzIFB7Y29uc3RydWN0b3IoZSx0LG4sYSxvKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5nYXRld2F5TmFtZT10aGlzLmRhdGEuZ2F0ZXdheU5hbWUsdGhpcy5nYXRld2F5Q29udHJvbD10aGlzLmZiLmNvbnRyb2woIiIpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX10dXJuT2ZmKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoITApfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6UGEsc2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbicsZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fXZhciBHYTtlKCJHYXRld2F5UmVtb3RlQ29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCIsUGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pLGZ1bmN0aW9uKGUpe2UudGxzPSJ0bHMiLGUuYWNjZXNzVG9rZW49ImFjY2Vzc1Rva2VuIn0oR2F8fChHYT17fSkpO2NvbnN0IE9hPSJjb25maWd1cmF0aW9uX2RyYWZ0cyIsUmE9IlJlbW90ZUxvZ2dpbmdMZXZlbCIsVmE9bmV3IE1hcChbW0dhLnRscywiZ2F0ZXdheS5zZWN1cml0eS10eXBlcy50bHMiXSxbR2EuYWNjZXNzVG9rZW4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl1dKTt2YXIgQmEsVWE7IWZ1bmN0aW9uKGUpe2Uubm9uZT0iTk9ORSIsZS5jcml0aWNhbD0iQ1JJVElDQUwiLGUuZXJyb3I9IkVSUk9SIixlLndhcm5pbmc9IldBUk5JTkciLGUuaW5mbz0iSU5GTyIsZS5kZWJ1Zz0iREVCVUcifShCYXx8KEJhPXt9KSksZnVuY3Rpb24oZSl7ZS5tZW1vcnk9Im1lbW9yeSIsZS5maWxlPSJmaWxlIn0oVWF8fChVYT17fSkpO2NvbnN0IF9hPW5ldyBNYXAoW1tVYS5tZW1vcnksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtVYS5maWxlLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl1dKTt2YXIgSGE7IWZ1bmN0aW9uKGUpe2UubXF0dD0iTVFUVCIsZS5tb2RidXM9Ik1vZGJ1cyIsZS5vcGN1YT0iT1BDLVVBIixlLmJsZT0iQkxFIixlLnJlcXVlc3Q9IlJlcXVlc3QiLGUuY2FuPSJDQU4iLGUuYmFjbmV0PSJCQUNuZXQiLGUuY3VzdG9tPSJDdXN0b20ifShIYXx8KEhhPXt9KSk7Y29uc3QgemE9e2NvbmZpZzp7fSxuYW1lOiIiLGNvbmZpZ1R5cGU6bnVsbCxlbmFibGVkOiExfTtmdW5jdGlvbiBXYShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZS52YWx1ZSk9PT1KU09OLnN0cmluZ2lmeSh7fSk/e3ZhbGlkSlNPTjohMH06bnVsbH1jb25zdCBqYT0nW2xvZ2dlcnNdfX1rZXlzPXJvb3QsIHNlcnZpY2UsIGNvbm5lY3RvciwgY29udmVydGVyLCB0Yl9jb25uZWN0aW9uLCBzdG9yYWdlLCBleHRlbnNpb259fVtoYW5kbGVyc119fWtleXM9Y29uc29sZUhhbmRsZXIsIHNlcnZpY2VIYW5kbGVyLCBjb25uZWN0b3JIYW5kbGVyLCBjb252ZXJ0ZXJIYW5kbGVyLCB0Yl9jb25uZWN0aW9uSGFuZGxlciwgc3RvcmFnZUhhbmRsZXIsIGV4dGVuc2lvbkhhbmRsZXJ9fVtmb3JtYXR0ZXJzXX19a2V5cz1Mb2dGb3JtYXR0ZXJ9fVtsb2dnZXJfcm9vdF19fWxldmVsPUVSUk9SfX1oYW5kbGVycz1jb25zb2xlSGFuZGxlcn19W2xvZ2dlcl9jb25uZWN0b3JdfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz1jb25uZWN0b3JIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1jb25uZWN0b3J9fVtsb2dnZXJfc3RvcmFnZV19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPXN0b3JhZ2VIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1zdG9yYWdlfX1bbG9nZ2VyX3RiX2Nvbm5lY3Rpb25dfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz10Yl9jb25uZWN0aW9uSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9dGJfY29ubmVjdGlvbn19W2xvZ2dlcl9zZXJ2aWNlXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9c2VydmljZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPXNlcnZpY2V9fVtsb2dnZXJfY29udmVydGVyXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9Y29udmVydGVySGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9Y29udmVydGVyfX1bbG9nZ2VyX2V4dGVuc2lvbl19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPWNvbm5lY3RvckhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPWV4dGVuc2lvbn19W2hhbmRsZXJfY29uc29sZUhhbmRsZXJdfX1jbGFzcz1TdHJlYW1IYW5kbGVyfX1sZXZlbD17RVJST1J9fX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1hcmdzPShzeXMuc3Rkb3V0LCl9fVtoYW5kbGVyX2Nvbm5lY3RvckhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWNvbm5lY3Rvci5sb2ciLCAiZCIsIDEsIDcsKX19W2hhbmRsZXJfc3RvcmFnZUhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXN0b3JhZ2UubG9nIiwgImQiLCAxLCA3LCl9fVtoYW5kbGVyX3NlcnZpY2VIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31zZXJ2aWNlLmxvZyIsICJkIiwgMSwgNywpfX1baGFuZGxlcl9jb252ZXJ0ZXJIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31jb252ZXJ0ZXIubG9nIiwgImQiLCAxLCAzLCl9fVtoYW5kbGVyX2V4dGVuc2lvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWV4dGVuc2lvbi5sb2ciLCAiZCIsIDEsIDMsKX19W2hhbmRsZXJfdGJfY29ubmVjdGlvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXRiX2Nvbm5lY3Rpb24ubG9nIiwgImQiLCAxLCAzLCl9fVtmb3JtYXR0ZXJfTG9nRm9ybWF0dGVyXX19Zm9ybWF0PSIlKGFzY3RpbWUpcyAtICUobGV2ZWxuYW1lKXMgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiIH19ZGF0ZWZtdD0iJVktJW0tJWQgJUg6JU06JVMiJztmdW5jdGlvbiBLYShlKXtyZXR1cm4gZS5yZXBsYWNlKCJfIiwiIikucmVwbGFjZSgiLSIsIiIpLnJlcGxhY2UoL15ccyt8XHMrL2csIiIpLnRvTG93ZXJDYXNlKCkrIi5qc29uIn1mdW5jdGlvbiAkYShlLHQpe3JldHVybiBqYS5yZXBsYWNlKC97RVJST1J9L2csZSkucmVwbGFjZSgvey5cL2xvZ3NcL30vZyx0KX1mdW5jdGlvbiBZYShlKXtyZXR1cm57aWQ6ZSxlbnRpdHlUeXBlOkkuREVWSUNFfX1mdW5jdGlvbiBRYShlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwidGhpbmdzYm9hcmQiKSYmKHQuaG9zdD1lLnRoaW5nc2JvYXJkLmhvc3QsdC5wb3J0PWUudGhpbmdzYm9hcmQucG9ydCx0LnJlbW90ZUNvbmZpZ3VyYXRpb249ZS50aGluZ3Nib2FyZC5yZW1vdGVDb25maWd1cmF0aW9uLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnRoaW5nc2JvYXJkLnNlY3VyaXR5LEdhLmFjY2Vzc1Rva2VuKT8odC5zZWN1cml0eVR5cGU9R2EuYWNjZXNzVG9rZW4sdC5hY2Nlc3NUb2tlbj1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuKToodC5zZWN1cml0eVR5cGU9R2EudGxzLHQuY2FDZXJ0UGF0aD1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmNhQ2VydCx0LnByaXZhdGVLZXlQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkucHJpdmF0ZUtleSx0LmNlcnRQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkuY2VydCkpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJzdG9yYWdlIikmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnN0b3JhZ2UsInR5cGUiKSYmKGUuc3RvcmFnZS50eXBlPT09VWEubWVtb3J5Pyh0LnN0b3JhZ2VUeXBlPVVhLm1lbW9yeSx0LnJlYWRSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudCx0Lm1heFJlY29yZHNDb3VudD1lLnN0b3JhZ2UubWF4X3JlY29yZHNfY291bnQpOmUuc3RvcmFnZS50eXBlPT09VWEuZmlsZSYmKHQuc3RvcmFnZVR5cGU9VWEuZmlsZSx0LmRhdGFGb2xkZXJQYXRoPWUuc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoLHQubWF4RmlsZXNDb3VudD1lLnN0b3JhZ2UubWF4X2ZpbGVfY291bnQsdC5yZWFkUmVjb3Jkc0NvdW50PWUuc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnQsdC5tYXhSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50KSksdH1mdW5jdGlvbiBKYShlKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpbi5lbmFibGVkfHwodFtuLm5hbWVdPXtjb25uZWN0b3I6bi5jb25maWdUeXBlLGNvbmZpZzpuLmNvbmZpZ30pO3JldHVybiB0fWZ1bmN0aW9uIFhhKGUpe2NvbnN0IHQ9e3RoaW5nc2JvYXJkOlphKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KWlmKG4uZW5hYmxlZCl7Y29uc3QgdD1uLmNvbmZpZ1R5cGU7QXJyYXkuaXNBcnJheShlW3RdKXx8KGVbdF09W10pO2NvbnN0IGE9e25hbWU6bi5uYW1lLGNvbmZpZzpuLmNvbmZpZ307ZVt0XS5wdXNoKGEpfX0odCxlLmNvbm5lY3RvcnMpLHR9ZnVuY3Rpb24gWmEoZSl7bGV0IHQ7dD1lLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3thY2Nlc3NUb2tlbjplLmFjY2Vzc1Rva2VufTp7Y2FDZXJ0OmUuY2FDZXJ0UGF0aCxwcml2YXRlS2V5OmUucHJpdmF0ZUtleVBhdGgsY2VydDplLmNlcnRQYXRofTtjb25zdCBuPXtob3N0OmUuaG9zdCxyZW1vdGVDb25maWd1cmF0aW9uOmUucmVtb3RlQ29uZmlndXJhdGlvbixwb3J0OmUucG9ydCxzZWN1cml0eTp0fTtsZXQgYTthPWUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/e3R5cGU6VWEubWVtb3J5LHJlYWRfcmVjb3Jkc19jb3VudDplLnJlYWRSZWNvcmRzQ291bnQsbWF4X3JlY29yZHNfY291bnQ6ZS5tYXhSZWNvcmRzQ291bnR9Ont0eXBlOlVhLmZpbGUsZGF0YV9mb2xkZXJfcGF0aDplLmRhdGFGb2xkZXJQYXRoLG1heF9maWxlX2NvdW50OmUubWF4RmlsZXNDb3VudCxtYXhfcmVhZF9yZWNvcmRzX2NvdW50OmUucmVhZFJlY29yZHNDb3VudCxtYXhfcmVjb3Jkc19wZXJfZmlsZTplLm1heFJlY29yZHNDb3VudH07Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBvZiBlLmNvbm5lY3RvcnMpaWYodC5lbmFibGVkKXtjb25zdCBlPXtjb25maWd1cmF0aW9uOkthKHQubmFtZSksbmFtZTp0Lm5hbWUsdHlwZTp0LmNvbmZpZ1R5cGV9O28ucHVzaChlKX1yZXR1cm57dGhpbmdzYm9hcmQ6bixjb25uZWN0b3JzOm8sc3RvcmFnZTphLGxvZ3M6d2luZG93LmJ0b2EoJGEoZS5yZW1vdGVMb2dnaW5nTGV2ZWwsZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncykpfX1jbGFzcyBlbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5lbGVtZW50UmVmPXQsdGhpcy51dGlscz1uLHRoaXMubmdab25lPWEsdGhpcy5mYj1vLHRoaXMud2luZG93PWksdGhpcy5kaWFsb2c9cix0aGlzLnRyYW5zbGF0ZT1zLHRoaXMuZGV2aWNlU2VydmljZT1sLHRoaXMuYXR0cmlidXRlU2VydmljZT1jLHRoaXMuaW1wb3J0RXhwb3J0PXAsdGhpcy5hbGlnbm1lbnQ9InJvdyIsdGhpcy5sYXlvdXRHYXA9IjVweCIsdGhpcy5zZWN1cml0eVR5cGVzPVZhLHRoaXMuZ2F0ZXdheUxvZ0xldmVscz1PYmplY3Qua2V5cyhCYSkubWFwKChlPT5CYVtlXSkpLHRoaXMuY29ubmVjdG9yVHlwZXM9T2JqZWN0LmtleXMoSGEpLHRoaXMuc3RvcmFnZVR5cGVzPV9hLHRoaXMudG9hc3RUYXJnZXRJZD0iZ2F0ZXdheS1jb25maWd1cmF0aW9uLXdpZGdldCIrdGhpcy51dGlscy5ndWlkKCksdGhpcy5pc1JlYWRPbmx5Rm9ybT0hMX1nZXQgY29ubmVjdG9ycygpe3JldHVybiB0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KCJjb25uZWN0b3JzIil9bmdPbkluaXQoKXt0aGlzLmluaXRXaWRnZXRTZXR0aW5ncyh0aGlzLmN0eC5zZXR0aW5ncyksdGhpcy5jdHguZGF0YXNvdXJjZXMmJnRoaXMuY3R4LmRhdGFzb3VyY2VzLmxlbmd0aCYmKHRoaXMuZGV2aWNlTmFtZUZvcm09dGhpcy5jdHguZGF0YXNvdXJjZXNbMF0ubmFtZSksdGhpcy5idWlsZEZvcm0oKSx0aGlzLmN0eC51cGRhdGVXaWRnZXRQYXJhbXMoKSx0aGlzLmZvcm1SZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuZm9ybVJlc2l6ZSQub2JzZXJ2ZSh0aGlzLmZvcm1Db250YWluZXJSZWYubmF0aXZlRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1SZXNpemUkJiZ0aGlzLmZvcm1SZXNpemUkLmRpc2Nvbm5lY3QoKSx0aGlzLnN1YnNjcmliZUdhdGV3YXkkLnVuc3Vic2NyaWJlKCksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQudW5zdWJzY3JpYmUoKX1pbml0V2lkZ2V0U2V0dGluZ3MoZSl7bGV0IHQ7dD1lLmdhdGV3YXlUaXRsZSYmZS5nYXRld2F5VGl0bGUubGVuZ3RoP3RoaXMudXRpbHMuY3VzdG9tVHJhbnNsYXRpb24oZS5nYXRld2F5VGl0bGUsZS5nYXRld2F5VGl0bGUpOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuZ2F0ZXdheSIpLHRoaXMuY3R4LndpZGdldFRpdGxlPXQsdGhpcy5pc1JlYWRPbmx5Rm9ybT0hIWUucmVhZE9ubHkmJmUucmVhZE9ubHksdGhpcy5hcmNoaXZlRmlsZU5hbWU9ZS5hcmNoaXZlRmlsZU5hbWU/Lmxlbmd0aD9lLmFyY2hpdmVGaWxlTmFtZToiZ2F0ZXdheUNvbmZpZ3VyYXRpb24iLHRoaXMuZ2F0ZXdheVR5cGU9ZS5nYXRld2F5VHlwZT8ubGVuZ3RoP2UuZ2F0ZXdheVR5cGU6IkdhdGV3YXkiLHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHM9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLmdhdGV3YXlOYW1lRXhpc3RzLGUuZ2F0ZXdheU5hbWVFeGlzdHMpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktZXhpc3RzIiksdGhpcy5zdWNjZXNzZnVsU2F2ZWQ9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLnN1Y2Nlc3NmdWxTYXZlLGUuc3VjY2Vzc2Z1bFNhdmUpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktc2F2ZWQiKSx0aGlzLnVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKX1yZXNpemUoKXt0aGlzLm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVXaWRnZXREaXNwbGF5aW5nKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpfXVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKXt0aGlzLmN0eC4kY29udGFpbmVyJiZ0aGlzLmN0eC4kY29udGFpbmVyWzBdLm9mZnNldFdpZHRoPD00MjU/KHRoaXMubGF5b3V0R2FwPSIwIix0aGlzLmFsaWdubWVudD0iY29sdW1uIik6KHRoaXMubGF5b3V0R2FwPSI1cHgiLHRoaXMuYWxpZ25tZW50PSJyb3ciKX1zYXZlQXR0cmlidXRlKGUsdCxuKXtjb25zdCBhPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoImdhdGV3YXkiKS52YWx1ZSxvPXtrZXk6ZSx2YWx1ZTp0fTtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKFlhKGEpLG4sW29dKX1jcmVhdGVDb25uZWN0b3IoZT16YSl7dGhpcy5jb25uZWN0b3JzLnB1c2godGhpcy5mYi5ncm91cCh7ZW5hYmxlZDpbZS5lbmFibGVkXSxjb25maWdUeXBlOltlLmNvbmZpZ1R5cGUsW3VlLnJlcXVpcmVkXV0sbmFtZTpbZS5uYW1lLFt1ZS5yZXF1aXJlZF1dLGNvbmZpZzpbZS5jb25maWcsW3VlLm51bGxWYWxpZGF0b3IsV2FdXX0pKX1nZXRGb3JtRmllbGQoZSl7cmV0dXJuIHRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoZSl9YnVpbGRGb3JtKCl7dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwPXRoaXMuZmIuZ3JvdXAoe2dhdGV3YXk6W251bGwsW11dLGFjY2Vzc1Rva2VuOltudWxsLFt1ZS5yZXF1aXJlZF1dLHNlY3VyaXR5VHlwZTpbR2EuYWNjZXNzVG9rZW5dLGhvc3Q6W3RoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFt1ZS5yZXF1aXJlZF1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZUNvbmZpZ3VyYXRpb246WyEwXSxjYUNlcnRQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L2NhLnBlbSJdLHByaXZhdGVLZXlQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L3ByaXZhdGVLZXkucGVtIl0sY2VydFBhdGg6WyIvZXRjL3RoaW5nc2JvYXJkLWdhdGV3YXkvY2VydGlmaWNhdGUucGVtIl0scmVtb3RlTG9nZ2luZ0xldmVsOltCYS5kZWJ1Z10scmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3M6WyIuL2xvZ3MvIixbdWUucmVxdWlyZWRdXSxzdG9yYWdlVHlwZTpbVWEubWVtb3J5XSxyZWFkUmVjb3Jkc0NvdW50OlsxMDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhSZWNvcmRzQ291bnQ6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heEZpbGVzQ291bnQ6WzUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhRm9sZGVyUGF0aDpbIi4vZGF0YS8iLFt1ZS5yZXF1aXJlZF1dLGNvbm5lY3RvcnM6dGhpcy5mYi5hcnJheShbXSl9KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQ9dGhpcy5nZXRGb3JtRmllbGQoInN0b3JhZ2VUeXBlIikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2U9PT1VYS5tZW1vcnk/KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZGlzYWJsZSgpLHRoaXMuZ2V0Rm9ybUZpZWxkKCJkYXRhRm9sZGVyUGF0aCIpLmRpc2FibGUoKSk6KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZW5hYmxlKCksdGhpcy5nZXRGb3JtRmllbGQoImRhdGFGb2xkZXJQYXRoIikuZW5hYmxlKCkpfSkpLHRoaXMuc3Vic2NyaWJlR2F0ZXdheSQ9dGhpcy5nZXRGb3JtRmllbGQoImdhdGV3YXkiKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57bnVsbCE9PWU/QWUoW3RoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyhlKS5waXBlKEVlKChlPT57dGhpcy5nZXRGb3JtRmllbGQoImFjY2Vzc1Rva2VuIikucGF0Y2hWYWx1ZShlLmNyZWRlbnRpYWxzSWQpfSkpKSwuLi50aGlzLmdldEF0dHJpYnV0ZXMoZSldKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLm1hcmtBc1ByaXN0aW5lKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpOnRoaXMuZ2V0Rm9ybUZpZWxkKCJhY2Nlc3NUb2tlbiIpLnBhdGNoVmFsdWUoIiIpfSkpfWdhdGV3YXlFeGlzdCgpe3RoaXMuY3R4LnNob3dFcnJvclRvYXN0KHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHMsInRvcCIsImxlZnQiLHRoaXMudG9hc3RUYXJnZXRJZCl9ZXhwb3J0Q29uZmlnKCl7Y29uc3QgZT10aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUsdD17fTt2YXIgbixhLG87dFsidGJfZ2F0ZXdheS55YW1sIl09ZnVuY3Rpb24oZSl7bGV0IHQ7dD0idGhpbmdzYm9hcmQ6XG4iLHQrPSIgIGhvc3Q6ICIrZS5ob3N0KyJcbiIsdCs9IiAgcmVtb3RlQ29uZmlndXJhdGlvbjogIitlLnJlbW90ZUNvbmZpZ3VyYXRpb24rIlxuIix0Kz0iICBwb3J0OiAiK2UucG9ydCsiXG4iLHQrPSIgIHNlY3VyaXR5OlxuIixlLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3QrPSIgICAgYWNjZXNzLXRva2VuOiAiK2UuYWNjZXNzVG9rZW4rIlxuIjoodCs9IiAgICBjYV9jZXJ0OiAiK2UuY2FDZXJ0UGF0aCsiXG4iLHQrPSIgICAgcHJpdmF0ZUtleTogIitlLnByaXZhdGVLZXlQYXRoKyJcbiIsdCs9IiAgICBjZXJ0OiAiK2UuY2VydFBhdGgrIlxuIiksdCs9InN0b3JhZ2U6XG4iLGUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/KHQrPSIgIHR5cGU6IG1lbW9yeVxuIix0Kz0iICByZWFkX3JlY29yZHNfY291bnQ6ICIrZS5yZWFkUmVjb3Jkc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlY29yZHNfY291bnQ6ICIrZS5tYXhSZWNvcmRzQ291bnQrIlxuIik6KHQrPSIgIHR5cGU6IGZpbGVcbiIsdCs9IiAgZGF0YV9mb2xkZXJfcGF0aDogIitlLmRhdGFGb2xkZXJQYXRoKyJcbiIsdCs9IiAgbWF4X2ZpbGVfY291bnQ6ICIrZS5tYXhGaWxlc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlYWRfcmVjb3Jkc19jb3VudDogIitlLnJlYWRSZWNvcmRzQ291bnQrIlxuIix0Kz0iICBtYXhfcmVjb3Jkc19wZXJfZmlsZTogIitlLm1heFJlY29yZHNDb3VudCsiXG4iKSx0Kz0iY29ubmVjdG9yczpcbiI7Zm9yKGNvbnN0IG4gb2YgZS5jb25uZWN0b3JzKW4uZW5hYmxlZCYmKHQrPSIgIC1cbiIsdCs9IiAgICBuYW1lOiAiK24ubmFtZSsiXG4iLHQrPSIgICAgdHlwZTogIituLmNvbmZpZ1R5cGUrIlxuIix0Kz0iICAgIGNvbmZpZ3VyYXRpb246ICIrS2Eobi5uYW1lKSsiXG4iKTtyZXR1cm4gdH0oZSksZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KW4uZW5hYmxlZCYmKGVbS2Eobi5uYW1lKV09SlNPTi5zdHJpbmdpZnkobi5jb25maWcpKX0odCxlLmNvbm5lY3RvcnMpLG49dCxhPWUucmVtb3RlTG9nZ2luZ0xldmVsLG89ZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncyxuWyJsb2dzLmNvbmYiXT0kYShhLG8pLHRoaXMuaW1wb3J0RXhwb3J0LmV4cG9ydEpTWmlwKHQsdGhpcy5hcmNoaXZlRmlsZU5hbWUpLHRoaXMuc2F2ZUF0dHJpYnV0ZShSYSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUucmVtb3RlTG9nZ2luZ0xldmVsLnRvVXBwZXJDYXNlKCksTC5TSEFSRURfU0NPUEUpfWFkZE5ld0Nvbm5lY3Rvcigpe3RoaXMuY3JlYXRlQ29ubmVjdG9yKCl9cmVtb3ZlQ29ubmVjdG9yKGUpe2U+LTEmJih0aGlzLmNvbm5lY3RvcnMucmVtb3ZlQXQoZSksdGhpcy5jb25uZWN0b3JzLm1hcmtBc0RpcnR5KCkpfW9wZW5Db25maWdEaWFsb2coZSx0LG4sYSl7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpKSx0aGlzLmRpYWxvZy5vcGVuKFFlLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7anNvblZhbHVlOm4scmVxdWlyZWQ6ITAsdGl0bGU6dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS50aXRsZS1jb25uZWN0b3JzLWpzb24iLHt0eXBlTmFtZTphfSl9fSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGU9PntlJiYodGhpcy5jb25uZWN0b3JzLmF0KHQpLmdldCgiY29uZmlnIikucGF0Y2hWYWx1ZShlKSx0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzKCkpfSkpfWNyZWF0ZUNvbm5lY3Rvck5hbWUoZSx0LG49MCl7Y29uc3QgYT1uP3Qrbjp0O3JldHVybi0xPT09ZS5maW5kSW5kZXgoKGU9PmUubmFtZT09PWEpKT9hOnRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShlLHQsKytuKX12YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sYT0wKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3QgaT0wPT09YT90OnQrYTtvIT09biYmZVtvXS5uYW1lPT09aSYmdGhpcy52YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sKythKX1yZXR1cm4gMD09PWE/dDp0K2F9Y2hhbmdlQ29ubmVjdG9yVHlwZShlKXtpZighZS5nZXQoIm5hbWUiKS52YWx1ZSl7Y29uc3QgdD1lLmdldCgiY29uZmlnVHlwZSIpLnZhbHVlLG49dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLmNvbm5lY3RvcnM7ZS5nZXQoIm5hbWUiKS5wYXRjaFZhbHVlKHRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShuLEhhW3RdKSl9fWNoYW5nZUNvbm5lY3Rvck5hbWUoZSx0KXtjb25zdCBuPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZS5jb25uZWN0b3JzO2UuZ2V0KCJuYW1lIikucGF0Y2hWYWx1ZSh0aGlzLnZhbGlkYXRlQ29ubmVjdG9yTmFtZShuLGUuZ2V0KCJuYW1lIikudmFsdWUsdCkpfXNhdmUoKXtjb25zdCBlPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZTtBZShbdGhpcy5zYXZlQXR0cmlidXRlKCJjb25maWd1cmF0aW9uIix3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShYYShlKSkpLEwuU0hBUkVEX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoT2Esd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoSmEoZS5jb25uZWN0b3JzKSkpLEwuU0VSVkVSX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoUmEsdGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLnJlbW90ZUxvZ2dpbmdMZXZlbC50b1VwcGVyQ2FzZSgpLEwuU0hBUkVEX1NDT1BFKV0pLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmN0eC5zaG93U3VjY2Vzc1RvYXN0KHRoaXMuc3VjY2Vzc2Z1bFNhdmVkLDJlMywidG9wIiwibGVmdCIsdGhpcy50b2FzdFRhcmdldElkKSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAubWFya0FzUHJpc3RpbmUoKX0pKX1nZXRBdHRyaWJ1dGVzKGUpe2NvbnN0IHQ9W107cmV0dXJuIHQucHVzaChBZShbdGhpcy5nZXRBdHRyaWJ1dGUoImN1cnJlbnRfY29uZmlndXJhdGlvbiIsTC5DTElFTlRfU0NPUEUsZSksdGhpcy5nZXRBdHRyaWJ1dGUoT2EsTC5TRVJWRVJfU0NPUEUsZSldKS5waXBlKEVlKCgoW2UsdF0pPT57dGhpcy5zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpLHRoaXMuc2V0Rm9ybUNvbm5lY3RvcnNEcmFmdCh0KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSkpKSx0LnB1c2godGhpcy5nZXRBdHRyaWJ1dGUoUmEsTC5TSEFSRURfU0NPUEUsZSkucGlwZShFZSgoZT0+dGhpcy5wcm9jZXNzTG9nZ2luZ0xldmVsKGUpKSkpKSx0fWdldEF0dHJpYnV0ZShlLHQsbil7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKFlhKG4pLHQsW2VdKX1zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpe2lmKHRoaXMuY29ubmVjdG9ycy5jbGVhcigpLGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49dFtlXTtpZigidGhpbmdzYm9hcmQiPT09ZSludWxsIT09biYmT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJnRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5wYXRjaFZhbHVlKFFhKG4pKTtlbHNlIGZvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgYT0iTm8gbmFtZSI7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5bdF0sIm5hbWUiKSYmKGE9blt0XS5uYW1lKTtjb25zdCBvPXtlbmFibGVkOiEwLGNvbmZpZ1R5cGU6ZSxjb25maWc6blt0XS5jb25maWcsbmFtZTphfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihvKX19fX1zZXRGb3JtQ29ubmVjdG9yc0RyYWZ0KGUpe2lmKGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49e2VuYWJsZWQ6ITEsY29uZmlnVHlwZTp0W2VdLmNvbm5lY3Rvcixjb25maWc6dFtlXS5jb25maWcsbmFtZTplfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihuKX19fXByb2Nlc3NMb2dnaW5nTGV2ZWwoZSl7bGV0IHQ9QmEuZGVidWc7ZS5sZW5ndGg+MCYmQmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSYmKHQ9QmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSksdGhpcy5nZXRGb3JtRmllbGQoInJlbW90ZUxvZ2dpbmdMZXZlbCIpLnBhdGNoVmFsdWUodCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjp0LkVsZW1lbnRSZWZ9LHt0b2tlbjpYLlV0aWxzU2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dG9rZW46YWV9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpYLkRldmljZVNlcnZpY2V9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTplbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIixpbnB1dHM6e2N0eDoiY3R4Iixpc1N0YXRlRm9ybToiaXNTdGF0ZUZvcm0ifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToiZm9ybUNvbnRhaW5lclJlZiIsZmlyc3Q6ITAscHJlZGljYXRlOlsiZm9ybUNvbnRhaW5lciJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH0se3Byb3BlcnR5TmFtZToibXVsdGlwbGVJbnB1dEZvcm0iLGZpcnN0OiEwLHByZWRpY2F0ZTpbImdhdGV3YXlDb25maWd1cmF0aW9uRm9ybSJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGZvcm0gI2Zvcm1Db250YWluZXIgY2xhc3M9ImdhdGV3YXktZm9ybSJcbiAgICAgIFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwIlxuICAgICAgdGItdG9hc3QgdG9hc3RUYXJnZXQ9Int7IHRvYXN0VGFyZ2V0SWQgfX0iXG4gICAgICAobmdTdWJtaXQpPSJzYXZlKCkiPlxuICA8bWF0LWFjY29yZGlvbiBtdWx0aT0idHJ1ZSIgY2xhc3M9Im1hdC1ib2R5LTIiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmRcJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDx0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3RcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImdhdGV3YXkiXG4gICAgICAgICAgW2RldmljZU5hbWVdPSJkZXZpY2VOYW1lRm9ybSJcbiAgICAgICAgICBbaXNTdGF0ZUZvcm1dPSJpc1N0YXRlRm9ybSJcbiAgICAgICAgICBbbmV3R2F0ZXdheVR5cGVdPSJnYXRld2F5VHlwZSJcbiAgICAgICAgICAoZ2F0ZXdheU5hbWVFeGlzdCk9ImdhdGV3YXlFeGlzdCgpIlxuICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgID5cbiAgICAgIDwvdGItZW50aXR5LWdhdGV3YXktc2VsZWN0PlxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnNlY3VyaXR5LXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHlUeXBlIiA+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc2VjdXJpdHlUeXBlLnZhbHVlLnRvU3RyaW5nKCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblxuICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc2VjdXJpdHlUeXBlXCcpLnZhbHVlID09IFwndGxzXCciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNhLWNlcnRpZmljYXRlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1wcml2YXRlLWtleVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icHJpdmF0ZUtleVBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2VydFBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj57eyBcJ2dhdGV3YXkucmVtb3RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1jaGVja2JveD5cblxuICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVMb2dnaW5nTGV2ZWwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVscyIgW3ZhbHVlXT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICB7eyBsb2dMZXZlbCB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnBhdGgtbG9nc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3MiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS5wYXRoLWxvZ3MtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zdG9yYWdlXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuc3RvcmFnZS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzdG9yYWdlVHlwZS5rZXkiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0icmVhZFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVhZFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1wYWNrLXNpemUtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsID5cbiAgICAgICAgICAgICAge3sgKGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgIT09IFwnZmlsZVwnID8gXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHNcJyA6IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHNcJykgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4UmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgPT0gXCdmaWxlXCciPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heEZpbGVzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heEZpbGVzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1wYXRoXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImRhdGFGb2xkZXJQYXRoIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnZGF0YUZvbGRlclBhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtY29uZmlnXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJnYXRld2F5LWNvbmZpZyI+XG4gICAgICAgIDxzZWN0aW9uIGZvcm1BcnJheU5hbWU9ImNvbm5lY3RvcnMiICpuZ0Zvcj0ibGV0IGNvbm5lY3RvciBvZiBjb25uZWN0b3JzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4OyI+XG4gICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09ImkiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gc3RyZXRjaCIgZnhMYXlvdXRHYXA9IjhweCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBzdGFydCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIiBmeEZsZXg+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5jb25uZWN0b3ItdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJjb25maWdUeXBlIiAoc2VsZWN0aW9uQ2hhbmdlKT0iY2hhbmdlQ29ubmVjdG9yVHlwZShjb25uZWN0b3IpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbm5lY3RvclR5cGUgb2YgY29ubmVjdG9yVHlwZXMiIFt2YWx1ZV09ImNvbm5lY3RvclR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb25uZWN0b3JUeXBlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCdjb25maWdUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLXR5cGUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LmNvbm5lY3Rvci1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiAoYmx1cik9ImNoYW5nZUNvbm5lY3Rvck5hbWUoY29ubmVjdG9yLCBpKSI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29ubmVjdG9yLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5jb25uZWN0b3ItbmFtZS1yZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIlxuICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJ7e2FsaWdubWVudCA9PSBcJ3Jvd1wnID8gXCdlbmQgY2VudGVyXCcgOiBcJ3NwYWNlLWV2ZW5seSBjZW50ZXJcJ319IiBjbGFzcz0iYWN0aW9uLWJ1dHRvbnMiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0ib3BlbkNvbmZpZ0RpYWxvZygkZXZlbnQsIGksIGNvbm5lY3Rvci5nZXQoXCdjb25maWdcJykudmFsdWUsIGNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLnZhbHVlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkudXBkYXRlLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdtYXQtd2FyblwnOiBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLmludmFsaWR9Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV9ob3JpejwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb25uZWN0b3IoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPHNwYW4gW2Z4U2hvd109IiFjb25uZWN0b3JzLmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7XCdnYXRld2F5Lm5vLWNvbm5lY3RvcnNcJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT0iYnV0dG9uIiAoY2xpY2spPSJhZGROZXdDb25uZWN0b3IoKSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5jb25uZWN0b3ItYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXYgPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPC9tYXQtYWNjb3JkaW9uPlxuICA8c2VjdGlvbiBbZnhTaG93XT0iIWlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBjbGFzcz0iZm9ybS1hY3Rpb24tYnV0dG9ucyI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iZXhwb3J0Q29uZmlnKCkiXG4gICAgICAgICAgICAqbmdJZj0iIWdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LmRvd25sb2FkLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0ic3VibWl0IlxuICAgICAgICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LnNhdmUtdGlwXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAge3tcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9zZWN0aW9uPlxuPC9mb3JtPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5nYXRld2F5LWZvcm17aGVpZ2h0OjEwMCU7cGFkZGluZzo1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW59Omhvc3QgLmdhdGV3YXktZm9ybSAuZm9ybS1hY3Rpb24tYnV0dG9uc3twYWRkaW5nLXRvcDo4cHh9Omhvc3QgLmdhdGV3YXktZm9ybSAuZ2F0ZXdheS1jb25maWcgLm5vLWRhdGEtZm91bmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2hlaWdodDo0MHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Y3QuVG9hc3REaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi10b2FzdF0iLGlucHV0czpbInRvYXN0VGFyZ2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpwdC5NYXRDaGVja2JveCxzZWxlY3RvcjoibWF0LWNoZWNrYm94IixpbnB1dHM6WyJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsImlkIiwicmVxdWlyZWQiLCJsYWJlbFBvc2l0aW9uIiwibmFtZSIsInZhbHVlIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY29sb3IiLCJkaXNhYmxlZEludGVyYWN0aXZlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiaW5kZXRlcm1pbmF0ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJpbmRldGVybWluYXRlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEFjY29yZGlvbixzZWxlY3RvcjoibWF0LWFjY29yZGlvbiIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsImRpc3BsYXlNb2RlIiwidG9nZ2xlUG9zaXRpb24iXSxleHBvcnRBczpbIm1hdEFjY29yZGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0Q2xhc3NEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nQ2xhc3NdLCBbbmdDbGFzcy54c10sIFtuZ0NsYXNzLnNtXSwgW25nQ2xhc3MubWRdLCBbbmdDbGFzcy5sZ10sIFtuZ0NsYXNzLnhsXSwgIFtuZ0NsYXNzLmx0LXNtXSwgW25nQ2xhc3MubHQtbWRdLCBbbmdDbGFzcy5sdC1sZ10sIFtuZ0NsYXNzLmx0LXhsXSwgIFtuZ0NsYXNzLmd0LXhzXSwgW25nQ2xhc3MuZ3Qtc21dLCBbbmdDbGFzcy5ndC1tZF0sIFtuZ0NsYXNzLmd0LWxnXSIsaW5wdXRzOlsibmdDbGFzcyIsIm5nQ2xhc3MueHMiLCJuZ0NsYXNzLnNtIiwibmdDbGFzcy5tZCIsIm5nQ2xhc3MubGciLCJuZ0NsYXNzLnhsIiwibmdDbGFzcy5sdC1zbSIsIm5nQ2xhc3MubHQtbWQiLCJuZ0NsYXNzLmx0LWxnIiwibmdDbGFzcy5sdC14bCIsIm5nQ2xhc3MuZ3QteHMiLCJuZ0NsYXNzLmd0LXNtIiwibmdDbGFzcy5ndC1tZCIsIm5nQ2xhc3MuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS7JtU5nTm9WYWxpZGF0ZSxzZWxlY3RvcjoiZm9ybTpub3QoW25nTm9Gb3JtXSk6bm90KFtuZ05hdGl2ZVZhbGlkYXRlXSkifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTptdC5FbnRpdHlHYXRld2F5U2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3QiLGlucHV0czpbInJlcXVpcmVkIiwibmV3R2F0ZXdheVR5cGUiLCJkZXZpY2VOYW1lIiwiaXNTdGF0ZUZvcm0iXSxvdXRwdXRzOlsiZ2F0ZXdheU5hbWVFeGlzdCJdfSx7a2luZDoicGlwZSIsdHlwZTpfLlVwcGVyQ2FzZVBpcGUsbmFtZToidXBwZXJjYXNlIn0se2tpbmQ6InBpcGUiLHR5cGU6Xy5LZXlWYWx1ZVBpcGUsbmFtZToia2V5dmFsdWUifSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fWUoIkdhdGV3YXlGb3JtQ29tcG9uZW50IixlbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2Vcbjxmb3JtICNmb3JtQ29udGFpbmVyIGNsYXNzPSJnYXRld2F5LWZvcm0iXG4gICAgICBbZm9ybUdyb3VwXT0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cCJcbiAgICAgIHRiLXRvYXN0IHRvYXN0VGFyZ2V0PSJ7eyB0b2FzdFRhcmdldElkIH19IlxuICAgICAgKG5nU3VibWl0KT0ic2F2ZSgpIj5cbiAgPG1hdC1hY2NvcmRpb24gbXVsdGk9InRydWUiIGNsYXNzPSJtYXQtYm9keS0yIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8dGItZW50aXR5LWdhdGV3YXktc2VsZWN0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJnYXRld2F5IlxuICAgICAgICAgIFtkZXZpY2VOYW1lXT0iZGV2aWNlTmFtZUZvcm0iXG4gICAgICAgICAgW2lzU3RhdGVGb3JtXT0iaXNTdGF0ZUZvcm0iXG4gICAgICAgICAgW25ld0dhdGV3YXlUeXBlXT0iZ2F0ZXdheVR5cGUiXG4gICAgICAgICAgKGdhdGV3YXlOYW1lRXhpc3QpPSJnYXRld2F5RXhpc3QoKSJcbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICA+XG4gICAgICA8L3RiLWVudGl0eS1nYXRld2F5LXNlbGVjdD5cbiAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5zZWN1cml0eS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5VHlwZSIgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2VjdXJpdHlUeXBlIG9mIHNlY3VyaXR5VHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic2VjdXJpdHlUeXBlLmtleSI+XG4gICAgICAgICAgICAgIHt7IHNlY3VyaXR5VHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWluXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3NlY3VyaXR5VHlwZVwnKS52YWx1ZSA9PSBcJ3Rsc1wnIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2FDZXJ0UGF0aCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGxzLXBhdGgtcHJpdmF0ZS1rZXlcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InByaXZhdGVLZXlQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT0icmVtb3RlQ29uZmlndXJhdGlvbiI+e3sgXCdnYXRld2F5LnJlbW90ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtY2hlY2tib3g+XG5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ0xldmVsIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbHMiIFt2YWx1ZV09ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAge3sgbG9nTGV2ZWwgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5wYXRoLWxvZ3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzIj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkucGF0aC1sb2dzLXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnN0b3JhZ2UtdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdG9yYWdlVHlwZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGUudmFsdWUudG9TdHJpbmcoKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InJlYWRSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbCA+XG4gICAgICAgICAgICAgIHt7IChnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlICE9PSBcJ2ZpbGVcJyA/IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzXCcgOiBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzXCcpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlID09IFwnZmlsZVwnIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhGaWxlc0NvdW50Ij5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJkYXRhRm9sZGVyUGF0aCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2RhdGFGb2xkZXJQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBjbGFzcz0iZ2F0ZXdheS1jb25maWciPlxuICAgICAgICA8c2VjdGlvbiBmb3JtQXJyYXlOYW1lPSJjb25uZWN0b3JzIiAqbmdGb3I9ImxldCBjb25uZWN0b3Igb2YgY29ubmVjdG9ycy5jb250cm9sczsgbGV0IGkgPSBpbmRleDsiPlxuICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPSJpIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIHN0cmV0Y2giIGZ4TGF5b3V0R2FwPSI4cHgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEFsaWduPSJjZW50ZXIgc3RhcnQiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgZnhGbGV4PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuY29ubmVjdG9yLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29uZmlnVHlwZSIgKHNlbGVjdGlvbkNoYW5nZSk9ImNoYW5nZUNvbm5lY3RvclR5cGUoY29ubmVjdG9yKSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb25uZWN0b3JUeXBlIG9mIGNvbm5lY3RvclR5cGVzIiBbdmFsdWVdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29ubmVjdG9yVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb25uZWN0b3IuZ2V0KFwnY29uZmlnVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rvci10eXBlLXJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3ItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgKGJsdXIpPSJjaGFuZ2VDb25uZWN0b3JOYW1lKGNvbm5lY3RvciwgaSkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLW5hbWUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCJcbiAgICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ie3thbGlnbm1lbnQgPT0gXCdyb3dcJyA/IFwnZW5kIGNlbnRlclwnIDogXCdzcGFjZS1ldmVubHkgY2VudGVyXCd9fSIgY2xhc3M9ImFjdGlvbi1idXR0b25zIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSIgbWF0LWljb24tYnV0dG9uIChjbGljayk9Im9wZW5Db25maWdEaWFsb2coJGV2ZW50LCBpLCBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLnZhbHVlLCBjb25uZWN0b3IuZ2V0KFwnbmFtZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnVwZGF0ZS1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ie1wnbWF0LXdhcm5cJzogY29ubmVjdG9yLmdldChcJ2NvbmZpZ1wnKS5pbnZhbGlkfSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfaG9yaXo8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQ29ubmVjdG9yKGkpIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5kZWxldGVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxzcGFuIFtmeFNob3ddPSIhY29ubmVjdG9ycy5sZW5ndGgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiIGNsYXNzPSJuby1kYXRhLWZvdW5kIj57e1wnZ2F0ZXdheS5uby1jb25uZWN0b3JzXCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uIFtmeFNob3ddPSIhaXNSZWFkT25seUZvcm0iIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9ImJ1dHRvbiIgKGNsaWNrKT0iYWRkTmV3Q29ubmVjdG9yKCkiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuY29ubmVjdG9yLWFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2ID5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gIDwvbWF0LWFjY29yZGlvbj5cbiAgPHNlY3Rpb24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgY2xhc3M9ImZvcm0tYWN0aW9uLWJ1dHRvbnMiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImV4cG9ydENvbmZpZygpIlxuICAgICAgICAgICAgKm5nSWY9IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5kb3dubG9hZC10aXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICB7e1wnYWN0aW9uLmRvd25sb2FkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9InN1Ym1pdCJcbiAgICAgICAgICAgICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5zYXZlLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvc2VjdGlvbj5cbjwvZm9ybT5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuZ2F0ZXdheS1mb3Jte2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufTpob3N0IC5nYXRld2F5LWZvcm0gLmZvcm0tYWN0aW9uLWJ1dHRvbnN7cGFkZGluZy10b3A6OHB4fTpob3N0IC5nYXRld2F5LWZvcm0gLmdhdGV3YXktY29uZmlnIC5uby1kYXRhLWZvdW5ke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTp0LkVsZW1lbnRSZWZ9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp0Lk5nWm9uZX0se3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dHlwZTpXaW5kb3csZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOlthZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Zvcm1Db250YWluZXJSZWY6W3t0eXBlOm8sYXJnczpbImZvcm1Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLG11bHRpcGxlSW5wdXRGb3JtOlt7dHlwZTpvLGFyZ3M6WyJnYXRld2F5Q29uZmlndXJhdGlvbkZvcm0iLHtzdGF0aWM6ITB9XX1dLGN0eDpbe3R5cGU6YX1dLGlzU3RhdGVGb3JtOlt7dHlwZTphfV19fSk7Y2xhc3MgdG8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIpe3N1cGVyKGUsdCxhKSx0aGlzLnN0b3JlPWUsdGhpcy5yb3V0ZXI9dCx0aGlzLmRhdGE9bix0aGlzLmRpYWxvZ1JlZj1hLHRoaXMuZmI9byx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1pLHRoaXMucmVzb3VyY2VzU2VydmljZT1yLHRoaXMuY29ubmVjdG9yVHlwZT1fdCx0aGlzLmdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwPUh0LHRoaXMuZ2F0ZXdheUxvZ0xldmVsPU9iamVjdC52YWx1ZXMoTXQpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHt0eXBlOltfdC5NUVRULFtdXSxuYW1lOlsiIixbdWUucmVxdWlyZWQsdGhpcy51bmlxTmFtZVJlcXVpcmVkKCksdWUucGF0dGVybihrdCldXSxsb2dMZXZlbDpbTXQuSU5GTyxbXV0sdXNlRGVmYXVsdHM6WyEwLFtdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITEsW11dLGNsYXNzOlsiIixbXV0sa2V5OlsiYXV0byIsW11dfSl9bmdPbkluaXQoKXt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1oZWxwTGlua0lkKCl7cmV0dXJuIHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZ3VyYXRpb24vIn1jYW5jZWwoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKX1hZGQoKXt0aGlzLnN1Ym1pdHRlZD0hMDtjb25zdCBlPXRoaXMuY29ubmVjdG9yRm9ybS5nZXRSYXdWYWx1ZSgpO2UudXNlRGVmYXVsdHM/dGhpcy5nZXREZWZhdWx0Q29uZmlnKGUudHlwZSkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj10aGlzLmRhdGEuZ2F0ZXdheVZlcnNpb247biYmKGUuY29uZmlnVmVyc2lvbj1uKSxlLmNvbmZpZ3VyYXRpb25Kc29uPSh0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0obik/dFtVdC5DdXJyZW50XTp0W1V0LkxlZ2FjeV0pPz90LHRoaXMuY29ubmVjdG9yRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UoZSl9KSk6dGhpcy5jb25uZWN0b3JGb3JtLnZhbGlkJiZ0aGlzLmRpYWxvZ1JlZi5jbG9zZShlKX11bmlxTmFtZVJlcXVpcmVkKCl7cmV0dXJuIGU9Pntjb25zdCB0PWUudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHRoaXMuZGF0YS5kYXRhU291cmNlRGF0YS5zb21lKCgoe3ZhbHVlOntuYW1lOmV9fSk9PmUudG9Mb3dlckNhc2UoKT09PXQpKT97ZHVwbGljYXRlTmFtZTp7dmFsaWQ6ITF9fTpudWxsfX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgidXNlRGVmYXVsdHMiKTtlPT09X3QuR1JQQ3x8ZT09PV90LkNVU1RPTT90LnNldFZhbHVlKCExKTp0LnZhbHVlfHx0LnNldFZhbHVlKCEwKX0pKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCl9Z2V0RGVmYXVsdENvbmZpZyhlKXtyZXR1cm4gdGhpcy5yZXNvdXJjZXNTZXJ2aWNlLmxvYWRKc29uUmVzb3VyY2UoYC9hc3NldHMvbWV0YWRhdGEvY29ubmVjdG9yLWRlZmF1bHQtY29uZmlncy8ke2V9Lmpzb25gKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp2YX0se3Rva2VuOlguUmVzb3VyY2VzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6dG8sc2VsZWN0b3I6InRiLWFkZC1jb25uZWN0b3ItZGlhbG9nIixwcm92aWRlcnM6W10sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJjb25uZWN0b3JGb3JtIiBjbGFzcz0iYWRkLWNvbm5lY3RvciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7ICJnYXRld2F5LmFkZC1jb25uZWN0b3IiIHwgdHJhbnNsYXRlfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09ImhlbHBMaW5rSWQoKSI+PC9kaXY+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtdG9vbGJhcj5cbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnR5cGU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIHwga2V5dmFsdWUiIFt2YWx1ZV09InR5cGUua2V5Ij5cbiAgICAgICAgICAgICAgICB7eyB0eXBlLnZhbHVlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJ2dhdGV3YXkuY29ubmVjdG9yLWR1cGxpY2F0ZS1uYW1lXCcgOlwnZ2F0ZXdheS5uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWNsYXNzPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNsYXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5HUlBDIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkdSUEMgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkNVU1RPTSJcbiAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIGZpeGVkLXRpdGxlLXdpZHRoIiBmb3JtQ29udHJvbE5hbWU9InVzZURlZmF1bHRzIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5maWxsLWNvbm5lY3Rvci1kZWZhdWx0c1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLk1RVFQiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGEtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIChjbGljayk9ImFkZCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29ubmVjdG9yRm9ybS5pbnZhbGlkIHx8ICFjb25uZWN0b3JGb3JtLmRpcnR5Ij5cbiAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFkZC1jb25uZWN0b3J7bWluLXdpZHRoOjQwMHB4O3dpZHRoOjUwMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpkdC5IZWxwQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGVscF0iLGlucHV0czpbInRiLWhlbHAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cnQuTWF0VG9vbGJhcixzZWxlY3RvcjoibWF0LXRvb2xiYXIiLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQWN0aW9ucyxzZWxlY3RvcjoiW21hdC1kaWFsb2ctYWN0aW9uc10sIG1hdC1kaWFsb2ctYWN0aW9ucywgW21hdERpYWxvZ0FjdGlvbnNdIixpbnB1dHM6WyJhbGlnbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0NvbnRlbnQsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWNvbnRlbnRdLCBtYXQtZGlhbG9nLWNvbnRlbnQsIFttYXREaWFsb2dDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJBZGRDb25uZWN0b3JEaWFsb2dDb21wb25lbnQiLHRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1hZGQtY29ubmVjdG9yLWRpYWxvZyIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9ImFkZC1jb25uZWN0b3IiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyAiZ2F0ZXdheS5hZGQtY29ubmVjdG9yIiB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJoZWxwTGlua0lkKCkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlc01hcCB8IGtleXZhbHVlIiBbdmFsdWVdPSJ0eXBlLmtleSI+XG4gICAgICAgICAgICAgICAge3sgdHlwZS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkubmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9Im9mZiIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDpcJ2dhdGV3YXkubmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS50b3VjaGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLkNVU1RPTSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuR1JQQyIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1rZXk8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5HUlBDICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5DVVNUT00iXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VEZWZhdWx0cyI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmZpbGwtY29ubmVjdG9yLWRlZmF1bHRzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5NUVRUIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc2VuZC1jaGFuZ2UtZGF0YVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbm5lY3RvckZvcm0uaW52YWxpZCB8fCAhY29ubmVjdG9yRm9ybS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5hZGQtY29ubmVjdG9ye21pbi13aWR0aDo0MDBweDt3aWR0aDo1MDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp2YX0se3R5cGU6WC5SZXNvdXJjZXNTZXJ2aWNlfV19KTtjbGFzcyBub3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy52YWx1ZVR5cGVLZXlzPU9iamVjdC52YWx1ZXMoR24pLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLnZhbHVlTGlzdEZvcm1BcnJheT10aGlzLmZiLmFycmF5KFtdKSx0aGlzLnZhbHVlTGlzdEZvcm1BcnJheS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXRyYWNrQnlLZXkoZSx0KXtyZXR1cm4gdH1hZGRLZXkoKXtjb25zdCBlPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0duLlNUUklOR10sc3RyaW5nOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oTHQpXV0sZG91YmxlOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV0sYm9vbGVhbjpbe3ZhbHVlOiExLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UoZSksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChlKX1vYnNlcnZlVHlwZUNoYW5nZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntlLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KCJ0eXBlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSxlLmdldCh0KS5lbmFibGUoe2VtaXRFdmVudDohMX0pfSkpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkubWFya0FzRGlydHkoKX12YWx1ZVRpdGxlKGUpe3JldHVybiBpZShlKT8ib2JqZWN0Ij09dHlwZW9mIGU/SlNPTi5zdHJpbmdpZnkoZSk6ZToiIn1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT17dHlwZTpbdC50eXBlXSxzdHJpbmc6W3t2YWx1ZToiIixkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saW50ZWdlcjpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKEx0KV1dLGRvdWJsZTpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZF1dLGJvb2xlYW46W3t2YWx1ZTohMSxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV19O2VbdC50eXBlXVswXT17dmFsdWU6dC52YWx1ZSxkaXNhYmxlZDohMX07Y29uc3Qgbj10aGlzLmZiLmdyb3VwKGUpO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UobiksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChuKX19dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkudmFsaWQ/bnVsbDp7dmFsdWVMaXN0Rm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUubWFwKCgoe3R5cGU6ZSwuLi50fSk9Pih7dHlwZTplLHZhbHVlOnRbZV19KSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOm5vLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bm8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJUeXBlVmFsdWVQYW5lbENvbXBvbmVudCIsbm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXR5cGUtdmFsdWUtcGFuZWwiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dfSk7Y2xhc3MgYW8gZXh0ZW5kcyBPe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnZhbHVlVHlwZUtleXM9T2JqZWN0LnZhbHVlcyhHbiksdGhpcy52YWx1ZVR5cGVFbnVtPUduLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLnJhd0RhdGE9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5NYXBwaW5nS2V5c1R5cGU9Tm4sdGhpcy5lcnJvclRleHQ9IiJ9bmdPbkluaXQoKXt0aGlzLmtleXNMaXN0Rm9ybUFycmF5PXRoaXMucHJlcGFyZUtleXNGb3JtQXJyYXkodGhpcy5rZXlzKX10cmFja0J5S2V5KGUsdCl7cmV0dXJuIHR9YWRkS2V5KCl7bGV0IGU7aWYoZT10aGlzLmtleXNUeXBlPT09Tm4uUlBDX01FVEhPRFM/dGhpcy5mYi5ncm91cCh7bWV0aG9kOlsiIixbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1tdLFtdXX0pOnRoaXMuZmIuZ3JvdXAoe2tleTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSksdGhpcy5rZXlzVHlwZSE9PU5uLkNVU1RPTSYmdGhpcy5rZXlzVHlwZSE9PU5uLlJQQ19NRVRIT0RTKXtjb25zdCB0PXRoaXMucmF3RGF0YT8icmF3Ijp0aGlzLnZhbHVlVHlwZUtleXNbMF07ZS5hZGRDb250cm9sKCJ0eXBlIix0aGlzLmZiLmNvbnRyb2wodCkpfXRoaXMua2V5c0xpc3RGb3JtQXJyYXkucHVzaChlKX1kZWxldGVLZXkoZSx0KXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMua2V5c0xpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpfWNhbmNlbCgpe3RoaXMucG9wb3Zlcj8uaGlkZSgpfWFwcGx5S2V5c0RhdGEoKXtsZXQgZT10aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlO2lmKHRoaXMua2V5c1R5cGU9PT1Obi5DVVNUT00pe2U9e307Zm9yKGxldCB0IG9mIHRoaXMua2V5c0xpc3RGb3JtQXJyYXkudmFsdWUpZVt0LmtleV09dC52YWx1ZX10aGlzLmtleXNEYXRhQXBwbGllZC5lbWl0KGUpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJih0aGlzLmtleXNUeXBlPT09Tm4uQ1VTVE9NJiYoZT1PYmplY3Qua2V5cyhlKS5tYXAoKHQ9Pih7a2V5OnQsdmFsdWU6ZVt0XSx0eXBlOiIifSkpKSksZS5mb3JFYWNoKChlPT57bGV0IG47aWYodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTKW49dGhpcy5mYi5ncm91cCh7bWV0aG9kOltlLm1ldGhvZCxbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1suLi5lLmFyZ3VtZW50c10sW11dfSk7ZWxzZXtjb25zdHtrZXk6dCx2YWx1ZTphLHR5cGU6b309ZTtuPXRoaXMuZmIuZ3JvdXAoe2tleTpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbYSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0eXBlOltvLFtdXX0pfXQucHVzaChuKX0pKSksdGhpcy5mYi5hcnJheSh0KX12YWx1ZVRpdGxlKGUpe2NvbnN0IHQ9ZS5nZXQodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTPyJtZXRob2QiOiJ2YWx1ZSIpLnZhbHVlO3JldHVybiBpZSh0KT8ib2JqZWN0Ij09dHlwZW9mIHQ/SlNPTi5zdHJpbmdpZnkodCk6dDoiIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6YW8sc2VsZWN0b3I6InRiLW1hcHBpbmctZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e3BhbmVsVGl0bGU6InBhbmVsVGl0bGUiLGFkZEtleVRpdGxlOiJhZGRLZXlUaXRsZSIsZGVsZXRlS2V5VGl0bGU6ImRlbGV0ZUtleVRpdGxlIixub0tleXNUZXh0OiJub0tleXNUZXh0IixrZXlzOiJrZXlzIixrZXlzVHlwZToia2V5c1R5cGUiLHZhbHVlVHlwZUtleXM6InZhbHVlVHlwZUtleXMiLHZhbHVlVHlwZUVudW06InZhbHVlVHlwZUVudW0iLHZhbHVlVHlwZXM6InZhbHVlVHlwZXMiLHJhd0RhdGE6InJhd0RhdGEiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LHByb3ZpZGVyczpbXSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmcta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUtleTsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImtleXNUeXBlICE9PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ2tleVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCctXCcgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgdmFsdWVUaXRsZShrZXlDb250cm9sKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5DVVNUT00gJiYga2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5KU09OUGF0aC1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmtleVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmtleS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rvci1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAgZmlsbC13aWR0aCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG5hbWU9InZhbHVlVHlwZSIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj0iIXJhd0RhdGEiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiIgY2xhc3M9InRiLW1hdC0xOCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lmljb24iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPSIhcmF3RGF0YTsgZWxzZSByYXdUZXh0Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKHZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd09wdGlvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9InZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiIgY2xhc3M9InRiLW1hdC0yMCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3T3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09IlwncmF3XCciPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJrZXlzVHlwZSA9PT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmtleTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ21ldGhvZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleUNvbnRyb2wuZ2V0KFwnYXJndW1lbnRzXCcpLnZhbHVlPy5sZW5ndGggKyBcJylcJ319XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLXR5cGUtdmFsdWUtcGFuZWwgZm9ybUNvbnRyb2xOYW1lPSJhcmd1bWVudHMiPjwvdGItdHlwZS12YWx1ZS1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUtleSgkZXZlbnQsICRpbmRleCkiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJkZWxldGVLZXlUaXRsZSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0iYWRkS2V5KCkiPlxuICAgICAgICB7eyBhZGRLZXlUaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI25vS2V5cz5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWZsZXggY2VudGVyIGFsaWduLWNlbnRlciBrZXktcGFuZWwiPlxuICAgICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IG5vS2V5c1RleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggZmxleC1lbmQiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iYXBwbHlLZXlzRGF0YSgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0ia2V5c0xpc3RGb3JtQXJyYXkuaW52YWxpZCB8fCAha2V5c0xpc3RGb3JtQXJyYXkuZGlydHkiPlxuICAgICAge3sgXCdhY3Rpb24uYXBwbHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWx7d2lkdGg6Nzd2dzttYXgtd2lkdGg6NzAwcHh9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye21heC13aWR0aDoxMXZ3O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC5rZXktcGFuZWx7aGVpZ2h0OjUwMHB4O292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCB0Yi12YWx1ZS1pbnB1dHt3aWR0aDoxMDAlfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlRhLG5hbWU6ImdldEdhdGV3YXlIZWxwTGluayJ9XX0pfX1lKCJNYXBwaW5nRGF0YUtleXNQYW5lbENvbXBvbmVudCIsYW8pLEhlKFtOKCldLGFvLnByb3RvdHlwZSwicmF3RGF0YSIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRhdGEta2V5cy1wYW5lbCIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy1rZXlzLXBhbmVsIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+e3sgcGFuZWxUaXRsZSAgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCArIFwnKVwnfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIGtleS1wYW5lbCIgKm5nSWY9ImtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aDsgZWxzZSBub0tleXMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgICAqbmdGb3I9ImxldCBrZXlDb250cm9sIG9mIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzOyB0cmFja0J5OiB0cmFja0J5S2V5OyBsZXQgJGluZGV4ID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDsiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ia2V5Q29udHJvbCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiIFtleHBhbmRlZF09Imxhc3QiPlxuICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7eyBcJy1cJyB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSAmJiBrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLlJQQ19NRVRIT0RTIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnBsYXRmb3JtLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ2tleVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgbmFtZT0idmFsdWVUeXBlIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPSIhcmF3RGF0YSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIiBjbGFzcz0idGItbWF0LTE4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdJY29uXT0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd1RleHQiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAodmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8fCB2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIXJhd0RhdGE7IGVsc2UgcmF3T3B0aW9uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIiBjbGFzcz0idGItbWF0LTIwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Z0ljb249Int7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8fCB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdPcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iXCdyYXdcJyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuSlNPTlBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS52YWx1ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkua2V5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0ia2V5c1R5cGUgPT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tZXRob2QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdtZXRob2RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hcmd1bWVudHNcJyB8IHRyYW5zbGF0ZSB9fXt7XCcgKFwnICsga2V5Q29udHJvbC5nZXQoXCdhcmd1bWVudHNcJykudmFsdWU/Lmxlbmd0aCArIFwnKVwnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGItdHlwZS12YWx1ZS1wYW5lbCBmb3JtQ29udHJvbE5hbWU9ImFyZ3VtZW50cyI+PC90Yi10eXBlLXZhbHVlLXBhbmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbHt3aWR0aDo3N3Z3O21heC13aWR0aDo3MDBweH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC50aXRsZS1jb250YWluZXJ7bWF4LXdpZHRoOjExdnc7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIHRiLXZhbHVlLWlucHV0e3dpZHRoOjEwMCV9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGItZm9ybS1wYW5lbCAubWF0LW1kYy1pY29uLWJ1dHRvbnt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MTZweDtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9XSxwcm9wRGVjb3JhdG9yczp7cGFuZWxUaXRsZTpbe3R5cGU6YX1dLGFkZEtleVRpdGxlOlt7dHlwZTphfV0sZGVsZXRlS2V5VGl0bGU6W3t0eXBlOmF9XSxub0tleXNUZXh0Olt7dHlwZTphfV0sa2V5czpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVUeXBlS2V5czpbe3R5cGU6YX1dLHZhbHVlVHlwZUVudW06W3t0eXBlOmF9XSx2YWx1ZVR5cGVzOlt7dHlwZTphfV0scmF3RGF0YTpbe3R5cGU6YX1dLHBvcG92ZXI6W3t0eXBlOmF9XSxrZXlzRGF0YUFwcGxpZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBvbyBleHRlbmRzIE97Z2V0IGRldmljZUluZm9UeXBlKCl7cmV0dXJuIHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZX1zZXQgZGV2aWNlSW5mb1R5cGUoZSl7dGhpcy5kZXZpY2VJbmZvVHlwZVZhbHVlIT09ZSYmKHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZT1lKX1jb25zdHJ1Y3RvcihlLHQsbixhKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy50cmFuc2xhdGU9dCx0aGlzLmRpYWxvZz1uLHRoaXMuZmI9YSx0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLnVzZVNvdXJjZT0hMCx0aGlzLnJlcXVpcmVkPSExLHRoaXMuc291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhUbiksdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLm1hcHBpbmdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldXX0pLHRoaXMudXNlU291cmNlJiZ0aGlzLm1hcHBpbmdGb3JtR3JvdXAuYWRkQ29udHJvbCgiZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiLHRoaXMuZmIuY29udHJvbCh0aGlzLnNvdXJjZVR5cGVzWzBdLFtdKSksdGhpcy5kZXZpY2VJbmZvVHlwZT09PWtuLkZVTEwmJih0aGlzLnVzZVNvdXJjZSYmdGhpcy5tYXBwaW5nRm9ybUdyb3VwLmFkZENvbnRyb2woImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIix0aGlzLmZiLmNvbnRyb2wodGhpcy5zb3VyY2VUeXBlc1swXSxbXSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5hZGRDb250cm9sKCJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGhpcy5mYi5jb250cm9sKCIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldKSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe313cml0ZVZhbHVlKGUpe3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnttYXBwaW5nRm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6b28sZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46WS5UcmFuc2xhdGVTZXJ2aWNlfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOnt1c2VTb3VyY2U6InVzZVNvdXJjZSIscmVxdWlyZWQ6InJlcXVpcmVkIixzb3VyY2VUeXBlczoic291cmNlVHlwZXMiLGRldmljZUluZm9UeXBlOiJkZXZpY2VJbmZvVHlwZSJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm9vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCIgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiBbY2xhc3MudGItcmVxdWlyZWRdPSJyZXF1aXJlZCIgdHJhbnNsYXRlPmRldmljZS5kZXZpY2U8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZSBuby1wYWRkaW5nIG5vLWdhcCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1uYW1lLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uZW50aXR5LWZpZWxkPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJ1c2VTb3VyY2UiIGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uc291cmNlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPlxuICAgICAgICBnYXRld2F5LmRldmljZS1pbmZvLmV4cHJlc3Npb25cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtYm9keSBuby1nYXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyB0b3Atc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICBbY2xhc3MuYm90dG9tLXNhbWUtcGFkZGluZ109ImRldmljZUluZm9UeXBlICE9PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLm5hbWU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgcmF3LXZhbHVlLW9wdGlvbiIgKm5nSWY9InVzZVNvdXJjZSI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93LWNlbGwgdGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLWluZm8uZGV2aWNlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyBib3R0b20tc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICAqbmdJZj0iZGV2aWNlSW5mb1R5cGUgPT09IERldmljZUluZm9UeXBlLkZVTEwiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8ucHJvZmlsZS1uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1wcm9maWxlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwncHJvZmlsZS1uYW1lXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2VcJykudmFsdWUgOiBzb3VyY2VUeXBlcyJcbiAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja306aG9zdCAudGItZm9ybS1yb3cuYm90dG9tLXNhbWUtcGFkZGluZ3twYWRkaW5nLWJvdHRvbToxNnB4fTpob3N0IC50Yi1mb3JtLXJvdy50b3Atc2FtZS1wYWRkaW5ne3BhZGRpbmctdG9wOjE2cHh9Omhvc3QgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHt3aWR0aDoxOSV9Omhvc3QgLnRhYmxlLWNvbHVtbnt3aWR0aDo0MCV9Omhvc3QgLnRhYmxlLW5hbWUtY29sdW1ue3dpZHRoOjIwJX06aG9zdCAucmF3LW5hbWV7d2lkdGg6MTklfTpob3N0IC5yYXctdmFsdWUtb3B0aW9ue21heC13aWR0aDo0MCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7ZGlzcGxheTpmbGV4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpndC5IZWxwUG9wdXBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwLXBvcHVwXSwgW3RiLWhlbHAtcG9wdXAtY29udGVudF0iLGlucHV0czpbInRiLWhlbHAtcG9wdXAiLCJ0Yi1oZWxwLXBvcHVwLWNvbnRlbnQiLCJ0cmlnZ2VyLXRleHQiLCJ0cmlnZ2VyLXN0eWxlIiwidGItaGVscC1wb3B1cC1wbGFjZW1lbnQiLCJ0Yi1oZWxwLXBvcHVwLXN0eWxlIiwiaGludE1vZGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIkRldmljZUluZm9UYWJsZUNvbXBvbmVudCIsb28pLEhlKFtOKCldLG9vLnByb3RvdHlwZSwidXNlU291cmNlIix2b2lkIDApLEhlKFtOKCldLG9vLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpvbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZGV2aWNlLWluZm8tdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+b28pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgW2NsYXNzLnRiLXJlcXVpcmVkXT0icmVxdWlyZWQiIHRyYW5zbGF0ZT5kZXZpY2UuZGV2aWNlPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUgbm8tcGFkZGluZyBuby1nYXAiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyLWNlbGwgdGFibGUtbmFtZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmVudGl0eS1maWVsZDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0idXNlU291cmNlIiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnNvdXJjZTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5cbiAgICAgICAgZ2F0ZXdheS5kZXZpY2UtaW5mby5leHByZXNzaW9uXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWJvZHkgbm8tZ2FwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgdG9wLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgW2NsYXNzLmJvdHRvbS1zYW1lLXBhZGRpbmddPSJkZXZpY2VJbmZvVHlwZSAhPT0gRGV2aWNlSW5mb1R5cGUuRlVMTCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgYm90dG9tLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgKm5nSWY9ImRldmljZUluZm9UeXBlID09PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnByb2ZpbGUtbmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCByYXctdmFsdWUtb3B0aW9uIiAqbmdJZj0idXNlU291cmNlIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3ctY2VsbCB0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdwcm9maWxlLW5hbWVcJyB8IGdldEdhdGV3YXlIZWxwTGluazogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLWZvcm0tcm93LmJvdHRvbS1zYW1lLXBhZGRpbmd7cGFkZGluZy1ib3R0b206MTZweH06aG9zdCAudGItZm9ybS1yb3cudG9wLXNhbWUtcGFkZGluZ3twYWRkaW5nLXRvcDoxNnB4fTpob3N0IC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7d2lkdGg6MTklfTpob3N0IC50YWJsZS1jb2x1bW57d2lkdGg6NDAlfTpob3N0IC50YWJsZS1uYW1lLWNvbHVtbnt3aWR0aDoyMCV9Omhvc3QgLnJhdy1uYW1le3dpZHRoOjE5JX06aG9zdCAucmF3LXZhbHVlLW9wdGlvbnttYXgtd2lkdGg6NDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7dXNlU291cmNlOlt7dHlwZTphfV0scmVxdWlyZWQ6W3t0eXBlOmF9XSxzb3VyY2VUeXBlczpbe3R5cGU6YX1dLGRldmljZUluZm9UeXBlOlt7dHlwZTphfV19fSk7Y2xhc3MgaW8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIscyxsKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5wb3BvdmVyU2VydmljZT1pLHRoaXMucmVuZGVyZXI9cix0aGlzLnZpZXdDb250YWluZXJSZWY9cyx0aGlzLnRyYW5zbGF0ZT1sLHRoaXMuTWFwcGluZ1R5cGU9Zm4sdGhpcy5xdWFsaXR5VHlwZXM9eG4sdGhpcy5RdWFsaXR5VHJhbnNsYXRpb25zTWFwPXZuLHRoaXMuY29udmVydG9yVHlwZXM9T2JqZWN0LnZhbHVlcyh3biksdGhpcy5Db252ZXJ0b3JUeXBlRW51bT13bix0aGlzLkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXA9Q24sdGhpcy5zb3VyY2VUeXBlcz1PYmplY3QudmFsdWVzKFRuKSx0aGlzLk9QQ1VhU291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhTbiksdGhpcy5PUENVYVNvdXJjZVR5cGVzRW51bT1Tbix0aGlzLnNvdXJjZVR5cGVzRW51bT1Ubix0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5yZXF1ZXN0VHlwZXM9T2JqZWN0LnZhbHVlcyhJbiksdGhpcy5SZXF1ZXN0VHlwZUVudW09SW4sdGhpcy5SZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXA9QW4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLlNlcnZlclNpZGVSUENUeXBlPVBuLHRoaXMuTWFwcGluZ0tleXNUeXBlPU5uLHRoaXMuTWFwcGluZ0hpbnRUcmFuc2xhdGlvbnNNYXA9Ym4sdGhpcy5NYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwPUJuLHRoaXMuSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwPWhuLHRoaXMua2V5c1BvcHVwQ2xvc2VkPSEwLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY3JlYXRlTWFwcGluZ0Zvcm0oKX1nZXQgY29udmVydGVyQXR0cmlidXRlcygpe2lmKHRoaXMuY29udmVydGVyVHlwZSlyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCh0aGlzLmNvbnZlcnRlclR5cGUpLnZhbHVlLmF0dHJpYnV0ZXMubWFwKChlPT5lLmtleSkpfWdldCBjb252ZXJ0ZXJUZWxlbWV0cnkoKXtpZih0aGlzLmNvbnZlcnRlclR5cGUpcmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKS52YWx1ZS50aW1lc2VyaWVzLm1hcCgoZT0+ZS5rZXkpKX1nZXQgb3BjQXR0cmlidXRlcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiYXR0cmlidXRlcyIpLnZhbHVlPy5tYXAoKGU9PmUua2V5KSl8fFtdfWdldCBvcGNUZWxlbWV0cnkoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoInRpbWVzZXJpZXMiKS52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgb3BjUnBjTWV0aG9kcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgicnBjX21ldGhvZHMiKS52YWx1ZT8ubWFwKChlPT5lLm1ldGhvZCkpfHxbXX1nZXQgb3BjQXR0cmlidXRlc1VwZGF0ZXMoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImF0dHJpYnV0ZXNfdXBkYXRlcyIpPy52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgY29udmVydGVyVHlwZSgpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyIikuZ2V0KCJ0eXBlIikudmFsdWV9Z2V0IGN1c3RvbUtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCgiY3VzdG9tIikudmFsdWUuZXh0ZW5zaW9uQ29uZmlnKX1nZXQgcmVxdWVzdE1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VHlwZSIpLnZhbHVlfWdldCByZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXQiKTtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtbGltaXRzLWVycm9yIix7bWluOjF9KToiIn1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWNyZWF0ZU1hcHBpbmdGb3JtKCl7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVEYXRhTWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVSZXF1ZXN0TWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMuY3JlYXRlT1BDVUFNYXBwaW5nRm9ybSgpfX1jYW5jZWwoKXt0aGlzLmtleXNQb3B1cENsb3NlZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5tYXBwaW5nRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5wcmVwYXJlTWFwcGluZ0RhdGEoKSl9bWFuYWdlS2V5cyhlLHQsbil7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBhPXQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZih0aGlzLnBvcG92ZXJTZXJ2aWNlLmhhc1BvcG92ZXIoYSkpdGhpcy5wb3BvdmVyU2VydmljZS5oaWRlUG9wb3ZlcihhKTtlbHNle2NvbnN0IGU9KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSE9PWZuLk9QQ1VBP3RoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKTp0aGlzLm1hcHBpbmdGb3JtKS5nZXQobiksdD17a2V5czplLnZhbHVlLGtleXNUeXBlOm4scmF3RGF0YTp0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKT8udmFsdWU9PT13bi5CWVRFUyxwYW5lbFRpdGxlOk1uLmdldChuKSxhZGRLZXlUaXRsZTpFbi5nZXQobiksZGVsZXRlS2V5VGl0bGU6cW4uZ2V0KG4pLG5vS2V5c1RleHQ6RG4uZ2V0KG4pfTt0aGlzLmRhdGEubWFwcGluZ1R5cGU9PT1mbi5PUENVQSYmKHQudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKFNuKSx0LnZhbHVlVHlwZUVudW09U24sdC52YWx1ZVR5cGVzPUxuKSx0aGlzLmtleXNQb3B1cENsb3NlZD0hMTtjb25zdCBvPXRoaXMucG9wb3ZlclNlcnZpY2UuZGlzcGxheVBvcG92ZXIoYSx0aGlzLnJlbmRlcmVyLHRoaXMudmlld0NvbnRhaW5lclJlZixhbywibGVmdEJvdHRvbSIsITEsbnVsbCx0LHt9LHt9LHt9LCEwKTtvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLnBvcG92ZXI9byxvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLmtleXNEYXRhQXBwbGllZC5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntvLmhpZGUoKSxlLnBhdGNoVmFsdWUodCksZS5tYXJrQXNEaXJ0eSgpfSkpLG8udGJIaWRlU3RhcnQucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMua2V5c1BvcHVwQ2xvc2VkPSEwfSkpfX1wcmVwYXJlTWFwcGluZ0RhdGEoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0udmFsdWU7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjp0LHRvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmF9PWU7cmV0dXJue3RvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmEsY29udmVydGVyOnt0eXBlOnQudHlwZSwuLi50W3QudHlwZV19fTtjYXNlIGZuLlJFUVVFU1RTOnJldHVybntyZXF1ZXN0VHlwZTplLnJlcXVlc3RUeXBlLHJlcXVlc3RWYWx1ZTplLnJlcXVlc3RWYWx1ZVtlLnJlcXVlc3RUeXBlXX07ZGVmYXVsdDpyZXR1cm4gZX19Z2V0Rm9ybVZhbHVlRGF0YSgpe2lmKHRoaXMuZGF0YS52YWx1ZSYmT2JqZWN0LmtleXModGhpcy5kYXRhLnZhbHVlKS5sZW5ndGgpc3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjplLHRvcGljRmlsdGVyOnQsc3Vic2NyaXB0aW9uUW9zOm59PXRoaXMuZGF0YS52YWx1ZTtyZXR1cm57dG9waWNGaWx0ZXI6dCxzdWJzY3JpcHRpb25Rb3M6bixjb252ZXJ0ZXI6e3R5cGU6ZS50eXBlLFtlLnR5cGVdOnsuLi5lfX19O2Nhc2UgZm4uUkVRVUVTVFM6cmV0dXJue3JlcXVlc3RUeXBlOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VHlwZSxyZXF1ZXN0VmFsdWU6e1t0aGlzLmRhdGEudmFsdWUucmVxdWVzdFR5cGVdOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VmFsdWV9fTtkZWZhdWx0OnJldHVybiB0aGlzLmRhdGEudmFsdWV9fWNyZWF0ZURhdGFNYXBwaW5nRm9ybSgpe3RoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgidG9waWNGaWx0ZXIiLHRoaXMuZmIuY29udHJvbCgiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJzdWJzY3JpcHRpb25Rb3MiLHRoaXMuZmIuY29udHJvbCgwKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJjb252ZXJ0ZXIiLHRoaXMuZmIuZ3JvdXAoe3R5cGU6W3duLkpTT04sW11dLGpzb246dGhpcy5mYi5ncm91cCh7ZGV2aWNlSW5mbzpbe30sW11dLGF0dHJpYnV0ZXM6W1tdLFtdXSx0aW1lc2VyaWVzOltbXSxbXV19KSxieXRlczp0aGlzLmZiLmdyb3VwKHtkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXX0pLGN1c3RvbTp0aGlzLmZiLmdyb3VwKHtleHRlbnNpb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGV4dGVuc2lvbkNvbmZpZzpbe30sW11dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShSZSh0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpO3QuZ2V0KCJqc29uIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImJ5dGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImN1c3RvbSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KGUpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9Y3JlYXRlUmVxdWVzdE1hcHBpbmdGb3JtKCl7dGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJyZXF1ZXN0VHlwZSIsdGhpcy5mYi5jb250cm9sKEluLkNPTk5FQ1RfUkVRVUVTVCxbXSkpLHRoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgicmVxdWVzdFZhbHVlIix0aGlzLmZiLmdyb3VwKHtjb25uZWN0UmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86W3t9LFtdXX0pLGRpc2Nvbm5lY3RSZXF1ZXN0czp0aGlzLmZiLmdyb3VwKHt0b3BpY0ZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlSW5mbzpbe30sW11dfSksYXR0cmlidXRlUmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZF1dfSksYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sYXR0cmlidXRlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWVFeHByZXNzaW9uOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXRhaW46WyExLFtdXX0pLGF0dHJpYnV0ZVVwZGF0ZXM6dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXR0cmlidXRlRmlsdGVyOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0b3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmV0YWluOlshMCxbXV19KSxzZXJ2ZXJTaWRlUnBjOnRoaXMuZmIuZ3JvdXAoe3R5cGU6W1BuLlRXT19XQVksW11dLGRldmljZU5hbWVGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZEZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY1FvUzpbMCxbXV0scmVzcG9uc2VUaW1lb3V0OlsxZTQsW3VlLnJlcXVpcmVkLHVlLm1pbigxKV1dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoUmUodGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWUpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUiKTt0LmdldCgiY29ubmVjdFJlcXVlc3RzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImRpc2Nvbm5lY3RSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVVcGRhdGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInNlcnZlclNpZGVScGMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldChlKS5lbmFibGUoKX0pKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgicmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYyIpO2U9PT1Qbi5PTkVfV0FZPyh0LmdldCgicmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgicmVzcG9uc2VUb3BpY1FvUyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSk6KHQuZ2V0KCJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInJlc3BvbnNlVG9waWNRb1MiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKX0pKSx0aGlzLm1hcHBpbmdGb3JtLnBhdGNoVmFsdWUodGhpcy5nZXRGb3JtVmFsdWVEYXRhKCkpfWNyZWF0ZU9QQ1VBTWFwcGluZ0Zvcm0oKXt0aGlzLm1hcHBpbmdGb3JtPXRoaXMuZmIuZ3JvdXAoe2RldmljZU5vZGVTb3VyY2U6W1NuLlBBVEgsW11dLGRldmljZU5vZGVQYXR0ZXJuOlsiIixbdWUucmVxdWlyZWRdXSxkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXSxycGNfbWV0aG9kczpbW10sW11dLGF0dHJpYnV0ZXNfdXBkYXRlczpbW10sW11dfSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmlvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmlvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRpYWxvZyIsdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtIiBjbGFzcz0ia2V5LW1hcHBpbmciPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBNYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0iSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwLmdldCh0aGlzLmRhdGEubWFwcGluZ1R5cGUpIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPlxuICAgICAgICB7eyBNYXBwaW5nSGludFRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJkYXRhLm1hcHBpbmdUeXBlIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5EQVRBIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50b3BpYy1maWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZDsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS90b3BpYy1maWx0ZXJfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1Rb3MtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1xdHQtcW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3Vic2NyaXB0aW9uUW9zIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcXVhbGl0eVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9ImNvbnZlcnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGF5bG9hZC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBjb252ZXJ0b3JUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyBDb252ZXJ0b3JUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5kYXRhLWNvbnZlcnNpb248L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgICAgICAgICAge3sgRGF0YUNvbnZlcnNpb25UcmFuc2xhdGlvbnNNYXAuZ2V0KGNvbnZlcnRlclR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iY29udmVydGVyVHlwZSIgW25nU3dpdGNoXT0iY29udmVydGVyVHlwZSI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb252ZXJ0b3JUeXBlRW51bS5KU09OIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkJZVEVTIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvdXJjZVR5cGVzXT0iW3NvdXJjZVR5cGVzRW51bS5NU0csIHNvdXJjZVR5cGVzRW51bS5DT05TVF0iIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkJZVEVTIHx8IGNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJjb252ZXJ0ZXJBdHRyaWJ1dGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2YgY29udmVydGVyQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHRlbGVtZXRyeUJ1dHRvbiwgTWFwcGluZ0tleXNUeXBlLlRJTUVTRVJJRVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmV4dGVuc2lvbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5leHRlbnNpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZXh0ZW5zaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmV4dGVuc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwnY29udmVydGVyLmN1c3RvbS5leHRlbnNpb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5rZXlzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImN1c3RvbUtleXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBjdXN0b21LZXlzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAja2V5c0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwga2V5c0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkNVU1RPTSkiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdHlwZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcXVlc3RUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgUmVxdWVzdFR5cGVzVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0icmVxdWVzdFZhbHVlIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpIiBbbmdTd2l0Y2hdPSJyZXF1ZXN0TWFwcGluZ1R5cGUiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0icmVxdWVzdE1hcHBpbmdUeXBlID09PSBSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5ESVNDT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgW2Zvcm1Db250cm9sXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS50b3BpYy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5QQVJUSUFMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZnJvbS1kZXZpY2UtcmVxdWVzdC1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnRcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiIGZvcm1Hcm91cE5hbWU9ImRldmljZUluZm8iPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMuYXR0cmlidXRlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUgdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS50by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJldGFpbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkFUVFJJQlVURV9VUERBVEUiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmRldmljZU5hbWVGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuYXR0cmlidXRlLWZpbHRlci1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZUZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5hdHRyaWJ1dGVGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0icmV0YWluIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5TRVJWRVJfU0lERV9SUEMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgY2VudGVyIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuVFdPX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IlNlcnZlclNpZGVSUENUeXBlLk9ORV9XQVkiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LndpdGhvdXQtcmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tZXRob2QtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLm1ldGhvZEZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy50eXBlXCcpLnZhbHVlID09PSBTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljUW9TIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFF1YWxpdHlUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVGltZW91dCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0icmVzcG9uc2VUaW1lb3V0RXJyb3JUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iTWFwcGluZ1R5cGUuT1BDVUEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBkZXZpY2UtY29uZmlnIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVTb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBbT1BDVWFTb3VyY2VUeXBlc0VudW0uUEFUSCwgT1BDVWFTb3VyY2VUeXBlc0VudW0uSURFTlRJRklFUl0iIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBkZXZpY2Utbm9kZS1wYXR0ZXJuLWZpZWxkIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOb2RlUGF0dGVybiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVQYXR0ZXJuXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdkZXZpY2Utbm9kZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlU291cmNlXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbc291cmNlVHlwZXNdPSJPUENVYVNvdXJjZVR5cGVzIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY0F0dHJpYnV0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNBdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIG9wY0F0dHJpYnV0ZXNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5BVFRSSUJVVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudGltZXNlcmllczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBvcGNUZWxlbWV0cnkiPlxuICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNUZWxlbWV0cnlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjVGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNBdHRyaWJ1dGVzVXBkYXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlc1VwZGF0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVNfVVBEQVRFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy1tZXRob2RzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNScGNNZXRob2RzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNScGNNZXRob2RzIj5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dHJpYnV0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAjcnBjTWV0aG9kc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBycGNNZXRob2RzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJtYXBwaW5nRm9ybS5pbnZhbGlkIHx8ICFtYXBwaW5nRm9ybS5kaXJ0eSB8fCAha2V5c1BvcHVwQ2xvc2VkIj5cbiAgICAgIHt7IHRoaXMuZGF0YS5idXR0b25UaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJX06aG9zdCAua2V5LW1hcHBpbmd7bWF4LXdpZHRoOjkwMHB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLmtleS1tYXBwaW5nIC5tYXQtdG9vbGJhcnttaW4taGVpZ2h0OjY0cHh9Omhvc3QgLmtleS1tYXBwaW5nIHRiLXRvZ2dsZS1zZWxlY3R7cGFkZGluZzo0cHggMH06aG9zdCAubWF0LW1kYy1kaWFsb2ctY29udGVudHtoZWlnaHQ6NjcwcHh9Omhvc3QgLmVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lcnttYXgtd2lkdGg6NzAlfTpob3N0IDo6bmctZGVlcCAua2V5LW1hcHBpbmcgLm1hdC1tZGMtY2hpcC1saXN0Ym94IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDpub3dyYXB9Omhvc3QgOjpuZy1kZWVwIC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjQwcHg7d2lkdGg6MzUlO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5tYXQtbWRjLWZvcm0tZmllbGR7d2lkdGg6MH06aG9zdCA6Om5nLWRlZXAgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9Omhvc3QgOjpuZy1kZWVwIC5kZXZpY2UtY29uZmlne2dhcDoxMnB4O3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1ub2RlLXBhdHRlcm4tZmllbGR7ZmxleC1iYXNpczozJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcCxzZWxlY3RvcjoibWF0LWJhc2ljLWNoaXAsIFttYXQtYmFzaWMtY2hpcF0sIG1hdC1jaGlwLCBbbWF0LWNoaXBdIixpbnB1dHM6WyJyb2xlIiwiaWQiLCJhcmlhLWxhYmVsIiwiYXJpYS1kZXNjcmlwdGlvbiIsInZhbHVlIiwiY29sb3IiLCJyZW1vdmFibGUiLCJoaWdobGlnaHRlZCIsImRpc2FibGVSaXBwbGUiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJyZW1vdmVkIiwiZGVzdHJveWVkIl0sZXhwb3J0QXM6WyJtYXRDaGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcExpc3Rib3gsc2VsZWN0b3I6Im1hdC1jaGlwLWxpc3Rib3giLGlucHV0czpbIm11bHRpcGxlIiwiYXJpYS1vcmllbnRhdGlvbiIsInNlbGVjdGFibGUiLCJjb21wYXJlV2l0aCIsInJlcXVpcmVkIiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInZhbHVlIl0sb3V0cHV0czpbImNoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTprYSxzZWxlY3RvcjoiW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF0iLGlucHV0czpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOlsidXNlU291cmNlIiwicmVxdWlyZWQiLCJzb3VyY2VUeXBlcyIsImRldmljZUluZm9UeXBlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV19KX19ZSgiTWFwcGluZ0RpYWxvZ0NvbXBvbmVudCIsaW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6aW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1hcHBpbmctZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPGRpdiBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0iIGNsYXNzPSJrZXktbWFwcGluZyI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IE1hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAuZ2V0KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgIHt7IE1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImRhdGEubWFwcGluZ1R5cGUiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLkRBVEEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0ZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudG9waWMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3NcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdWJzY3JpcHRpb25Rb3MiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBRdWFsaXR5VHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0iY29udmVydGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXlsb2FkLXR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGNvbnZlcnRvclR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgIHt7IENvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmRhdGEtY29udmVyc2lvbjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj5cbiAgICAgICAgICAgICAgICB7eyBEYXRhQ29udmVyc2lvblRyYW5zbGF0aW9uc01hcC5nZXQoY29udmVydGVyVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cE5hbWVdPSJjb252ZXJ0ZXJUeXBlIiBbbmdTd2l0Y2hdPSJjb252ZXJ0ZXJUeXBlIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29udmVydG9yVHlwZUVudW0uQllURVMiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc291cmNlVHlwZXNdPSJbc291cmNlVHlwZXNFbnVtLk1TRywgc291cmNlVHlwZXNFbnVtLkNPTlNUXSIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQllURVMgfHwgY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uSlNPTiI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlckF0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBjb252ZXJ0ZXJBdHRyaWJ1dGVzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnRpbWVzZXJpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGVsZW1ldHJ5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJjb252ZXJ0ZXJUeXBlID09PSBDb252ZXJ0b3JUeXBlRW51bS5DVVNUT00iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmV4dGVuc2lvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJleHRlbnNpb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZXh0ZW5zaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2NvbnZlcnRlci5jdXN0b20uZXh0ZW5zaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiBzYW1lLXBhZGRpbmcgdGItZmxleCBjb2x1bW4iPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5leHRlbnNpb24tY29uZmlndXJhdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj57eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24taGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmtleXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY3VzdG9tS2V5cyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGN1c3RvbUtleXMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNrZXlzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBrZXlzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVxdWVzdC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcmVxdWVzdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBSZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJyZXF1ZXN0VmFsdWUiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkiIFtuZ1N3aXRjaF09InJlcXVlc3RNYXBwaW5nVHlwZSI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJyZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG9waWMtZmlsdGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBbZm9ybUNvbnRyb2xdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvdG9waWMtZmlsdGVyX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uRElTQ09OTkVDVF9SRVFVRVNUIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLlBBUlRJQUwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LmZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciIgZm9ybUdyb3VwTmFtZT0iZGV2aWNlSW5mbyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5ncy1oaW50XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldGFpbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1VQREFURSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuYXR0cmlidXRlRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXRhaW4taGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLlNFUlZFUl9TSURFX1JQQyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBjZW50ZXIgYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS53aXRoLXJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuT05FX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aG91dC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWV0aG9kLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5tZXRob2RGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnR5cGVcJykudmFsdWUgPT09IFNlcnZlclNpZGVSUENUeXBlLlRXT19XQVkiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVG9waWNRb1MiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHF1YWxpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJyZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUaW1lb3V0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5PUENVQSI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGRldmljZS1jb25maWciPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTm9kZVNvdXJjZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIFtPUENVYVNvdXJjZVR5cGVzRW51bS5QQVRILCBPUENVYVNvdXJjZVR5cGVzRW51bS5JREVOVElGSUVSXSIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGRldmljZS1ub2RlLXBhdHRlcm4tZmllbGQiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVQYXR0ZXJuIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlUGF0dGVyblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ2RldmljZS1ub2RlXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVTb3VyY2VcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtzb3VyY2VUeXBlc109Ik9QQ1VhU291cmNlVHlwZXMiIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjQXR0cmlidXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY0F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjQXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIG9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY1RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBvcGNUZWxlbWV0cnlCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5USU1FU0VSSUVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlLXVwZGF0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXNVcGRhdGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNBdHRyaWJ1dGVzVXBkYXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIGF0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFU19VUERBVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLW1ldGhvZHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1JwY01ldGhvZHMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY1JwY01ldGhvZHMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNycGNNZXRob2RzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY01ldGhvZHNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09Im1hcHBpbmdGb3JtLmludmFsaWQgfHwgIW1hcHBpbmdGb3JtLmRpcnR5IHx8ICFrZXlzUG9wdXBDbG9zZWQiPlxuICAgICAge3sgdGhpcy5kYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpncmlkO2hlaWdodDoxMDAlfTpob3N0IC5rZXktbWFwcGluZ3ttYXgtd2lkdGg6OTAwcHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAua2V5LW1hcHBpbmcgLm1hdC10b29sYmFye21pbi1oZWlnaHQ6NjRweH06aG9zdCAua2V5LW1hcHBpbmcgdGItdG9nZ2xlLXNlbGVjdHtwYWRkaW5nOjRweCAwfTpob3N0IC5tYXQtbWRjLWRpYWxvZy1jb250ZW50e2hlaWdodDo2NzBweH06aG9zdCAuZWxsaXBzaXMtY2hpcHMtY29udGFpbmVye21heC13aWR0aDo3MCV9Omhvc3QgOjpuZy1kZWVwIC5rZXktbWFwcGluZyAubWF0LW1kYy1jaGlwLWxpc3Rib3ggLm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBze2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOm5vd3JhcH06aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6NDBweDt3aWR0aDozNSU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAudGItZm9ybS1yb3cgLm1hdC1tZGMtZm9ybS1maWVsZHt3aWR0aDowfTpob3N0IDo6bmctZGVlcCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1jb25maWd7Z2FwOjEycHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fTpob3N0IDo6bmctZGVlcCAuZGV2aWNlLW5vZGUtcGF0dGVybi1maWVsZHtmbGV4LWJhc2lzOjMlfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSk7Y2xhc3Mgcm97c2V0IG1hcHBpbmdUeXBlKGUpe3RoaXMubWFwcGluZ1R5cGVWYWx1ZSE9PWUmJih0aGlzLm1hcHBpbmdUeXBlVmFsdWU9ZSl9Z2V0IG1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ1R5cGVWYWx1ZX1jb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLnRyYW5zbGF0ZT1lLHRoaXMuZGlhbG9nPXQsdGhpcy5kaWFsb2dTZXJ2aWNlPW4sdGhpcy5mYj1hLHRoaXMucmVxdWlyZWQ9ITEsdGhpcy5tYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLm1hcHBpbmdUeXBlRW51bT1mbix0aGlzLmRpc3BsYXllZENvbHVtbnM9W10sdGhpcy5tYXBwaW5nQ29sdW1ucz1bXSx0aGlzLnRleHRTZWFyY2hNb2RlPSExLHRoaXMuaGlkZVBhZ2VTaXplPSExLHRoaXMuYWN0aXZlVmFsdWU9ITEsdGhpcy5kaXJ0eVZhbHVlPSExLHRoaXMudGV4dFNlYXJjaD10aGlzLmZiLmNvbnRyb2woIiIse25vbk51bGxhYmxlOiEwfSksdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFwcGluZ0Zvcm1Hcm91cD10aGlzLmZiLmFycmF5KFtdKSx0aGlzLmRpcnR5VmFsdWU9IXRoaXMuYWN0aXZlVmFsdWUsdGhpcy5kYXRhU291cmNlPW5ldyBzb31uZ09uSW5pdCgpe3RoaXMuc2V0TWFwcGluZ0NvbHVtbnMoKSx0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCguLi50aGlzLm1hcHBpbmdDb2x1bW5zLm1hcCgoZT0+ZS5kZWYpKSwiYWN0aW9ucyIpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVUYWJsZURhdGEoZSksdGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGV4dFNlYXJjaC52YWx1ZUNoYW5nZXMucGlwZShWZSgxNTApLEJlKCgoZSx0KT0+KGU/PyIiKT09PXQudHJpbSgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9ZS50cmltKCk7dGhpcy51cGRhdGVUYWJsZURhdGEodGhpcy5tYXBwaW5nRm9ybUdyb3VwLnZhbHVlLHQudHJpbSgpKX0pKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5tYXBwaW5nRm9ybUdyb3VwLmNsZWFyKCksdGhpcy5wdXNoRGF0YUFzRm9ybUFycmF5cyhlKX12YWxpZGF0ZSgpe3JldHVybiF0aGlzLnJlcXVpcmVkfHx0aGlzLm1hcHBpbmdGb3JtR3JvdXAuY29udHJvbHMubGVuZ3RoP251bGw6e21hcHBpbmdGb3JtR3JvdXA6e3ZhbGlkOiExfX19ZW50ZXJGaWx0ZXJNb2RlKCl7dGhpcy50ZXh0U2VhcmNoTW9kZT0hMCxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5zZWFyY2hJbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKX0pLDEwKX1leGl0RmlsdGVyTW9kZSgpe3RoaXMudXBkYXRlVGFibGVEYXRhKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VNYXBwaW5nKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPWllKHQpP3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5hdCh0KS52YWx1ZTp7fTt0aGlzLmRpYWxvZy5vcGVuKGlvLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7bWFwcGluZ1R5cGU6dGhpcy5tYXBwaW5nVHlwZSx2YWx1ZTpuLGJ1dHRvblRpdGxlOnJlKHQpPyJhY3Rpb24uYWRkIjoiYWN0aW9uLmFwcGx5In19KS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihpZSh0KT90aGlzLm1hcHBpbmdGb3JtR3JvdXAuYXQodCkucGF0Y2hWYWx1ZShlKTp0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKFtlXSksdGhpcy5tYXBwaW5nRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfXVwZGF0ZVRhYmxlRGF0YShlLHQpe2xldCBuPWUubWFwKChlPT50aGlzLmdldE1hcHBpbmdWYWx1ZShlKSkpO3QmJihuPW4uZmlsdGVyKChlPT5PYmplY3QudmFsdWVzKGUpLnNvbWUoKGU9PmUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSkpKSkpKSx0aGlzLmRhdGFTb3VyY2UubG9hZERhdGEobil9ZGVsZXRlTWFwcGluZyhlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtbWFwcGluZy10aXRsZSIpLCIiLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi5ubyIpLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi55ZXMiKSwhMCkuc3Vic2NyaWJlKChlPT57ZSYmKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5yZW1vdmVBdCh0KSx0aGlzLm1hcHBpbmdGb3JtR3JvdXAubWFya0FzRGlydHkoKSl9KSl9cHVzaERhdGFBc0Zvcm1BcnJheXMoZSl7ZT8ubGVuZ3RoJiZlLmZvckVhY2goKGU9PnRoaXMubWFwcGluZ0Zvcm1Hcm91cC5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1nZXRNYXBwaW5nVmFsdWUoZSl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTpjb25zdCB0PUNuLmdldChlLmNvbnZlcnRlcj8udHlwZSk7cmV0dXJue3RvcGljRmlsdGVyOmUudG9waWNGaWx0ZXIsUW9TOmUuc3Vic2NyaXB0aW9uUW9zLGNvbnZlcnRlcjp0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQodCk6IiJ9O2Nhc2UgZm4uUkVRVUVTVFM6bGV0IG47Y29uc3QgYT1lO3JldHVybiBuPWEucmVxdWVzdFR5cGU9PT1Jbi5BVFRSSUJVVEVfVVBEQVRFP2EucmVxdWVzdFZhbHVlLmF0dHJpYnV0ZUZpbHRlcjphLnJlcXVlc3RUeXBlPT09SW4uU0VSVkVSX1NJREVfUlBDP2EucmVxdWVzdFZhbHVlLm1ldGhvZEZpbHRlcjphLnJlcXVlc3RWYWx1ZS50b3BpY0ZpbHRlcix7cmVxdWVzdFR5cGU6ZS5yZXF1ZXN0VHlwZSx0eXBlOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoQW4uZ2V0KGUucmVxdWVzdFR5cGUpKSxkZXRhaWxzOm59O2Nhc2UgZm4uT1BDVUE6Y29uc3Qgbz1lLmRldmljZUluZm8/LmRldmljZU5hbWVFeHByZXNzaW9uLGk9ZS5kZXZpY2VJbmZvPy5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbix7ZGV2aWNlTm9kZVBhdHRlcm46cn09ZTtyZXR1cm57ZGV2aWNlTm9kZVBhdHRlcm46cixkZXZpY2VOYW1lUGF0dGVybjpvLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOml9O2RlZmF1bHQ6cmV0dXJue319fXNldE1hcHBpbmdDb2x1bW5zKCl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTp0aGlzLm1hcHBpbmdDb2x1bW5zLnB1c2goe2RlZjoidG9waWNGaWx0ZXIiLHRpdGxlOiJnYXRld2F5LnRvcGljLWZpbHRlciJ9LHtkZWY6IlFvUyIsdGl0bGU6ImdhdGV3YXkubXF0dC1xb3MifSx7ZGVmOiJjb252ZXJ0ZXIiLHRpdGxlOiJnYXRld2F5LnBheWxvYWQtdHlwZSJ9KTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJ0eXBlIix0aXRsZToiZ2F0ZXdheS50eXBlIn0se2RlZjoiZGV0YWlscyIsdGl0bGU6ImdhdGV3YXkuZGV0YWlscyJ9KTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJkZXZpY2VOb2RlUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5vZGUifSx7ZGVmOiJkZXZpY2VOYW1lUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5hbWUifSx7ZGVmOiJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLXByb2ZpbGUifSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cm8sZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpybyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIixtYXBwaW5nVHlwZToibWFwcGluZ1R5cGUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cm8pKSxtdWx0aTohMH1dLHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzZWFyY2hJbnB1dEZpZWxkIixmaXJzdDohMCxwcmVkaWNhdGU6WyJzZWFyY2hJbnB1dCJdLGRlc2NlbmRhbnRzOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmctdGFibGUgdGItYWJzb2x1dGUtZmlsbCI+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLXRpdGxlIj57e21hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldChtYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJlbnRlckZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5zZWFyY2hcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0idGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPiZuYnNwOzwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0idGV4dFNlYXJjaCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnY29tbW9uLmVudGVyLXNlYXJjaFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9ImV4aXRGaWx0ZXJNb2RlKCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uY2xvc2VcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPGRpdiBjbGFzcz0idGFibGUtY29udGFpbmVyIj5cbiAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iY29sdW1uLmRlZiIgKm5nRm9yPSJsZXQgY29sdW1uIG9mIG1hcHBpbmdDb2x1bW5zOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCB0YlRydW5jYXRlV2l0aFRvb2x0aXAgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IG1hcHBpbmdbY29sdW1uLmRlZl0gfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImFjdGlvbnMiIHN0aWNreUVuZD5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJywgdGV4dEFsaWduOiBcJ2NlbnRlclwnfSI+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgbWFwcGluZzsgbGV0IGkgPSBpbmRleCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCd9Ij5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcm93QWN0aW9ucz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlTWFwcGluZygkZXZlbnQsIGkpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbj5kZWxldGU8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cubHQtbGcgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09ImNlbGxBY3Rpb25zTWVudSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjY2VsbEFjdGlvbnNNZW51PSJtYXRNZW51IiB4UG9zaXRpb249ImJlZm9yZSI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBbbmdDbGFzc109IntcJ21hdC1yb3ctc2VsZWN0XCc6IHRydWV9IiAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9ImxldCBtYXBwaW5nOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDxzZWN0aW9uIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUgJiYgKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpIiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1oZWFkbGluZS01IHRiLWFic29sdXRlLWZpbGwgdGItYWRkLW5ldyI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz0iY29ubmVjdG9yIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnR7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQudGItb3V0bGluZWQtYm9yZGVye2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRpdGxlLWNvbnRhaW5lcntvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGItbWFwcGluZy10YWJsZS10aXRsZXtwYWRkaW5nLXJpZ2h0OjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1ue3BhZGRpbmc6MCAxMnB4O3dpZHRoOjIzJX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbi5yZXF1ZXN0LWNvbHVtbnt3aWR0aDozOCV9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAuZWxsaXBzaXN7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctYm90dG9tOjVweDt3aWR0aDoxMDAlfX06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbHtjdXJzb3I6cG9pbnRlcn06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbCAubWF0LWljb257aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtmb250LXNpemU6MjRweDtjb2xvcjojNzU3NTc1fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5Bc3luY1BpcGUsbmFtZToiYXN5bmMifSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdENsYXNzRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ0NsYXNzXSwgW25nQ2xhc3MueHNdLCBbbmdDbGFzcy5zbV0sIFtuZ0NsYXNzLm1kXSwgW25nQ2xhc3MubGddLCBbbmdDbGFzcy54bF0sICBbbmdDbGFzcy5sdC1zbV0sIFtuZ0NsYXNzLmx0LW1kXSwgW25nQ2xhc3MubHQtbGddLCBbbmdDbGFzcy5sdC14bF0sICBbbmdDbGFzcy5ndC14c10sIFtuZ0NsYXNzLmd0LXNtXSwgW25nQ2xhc3MuZ3QtbWRdLCBbbmdDbGFzcy5ndC1sZ10iLGlucHV0czpbIm5nQ2xhc3MiLCJuZ0NsYXNzLnhzIiwibmdDbGFzcy5zbSIsIm5nQ2xhc3MubWQiLCJuZ0NsYXNzLmxnIiwibmdDbGFzcy54bCIsIm5nQ2xhc3MubHQtc20iLCJuZ0NsYXNzLmx0LW1kIiwibmdDbGFzcy5sdC1sZyIsIm5nQ2xhc3MubHQteGwiLCJuZ0NsYXNzLmd0LXhzIiwibmdDbGFzcy5ndC1zbSIsIm5nQ2xhc3MuZ3QtbWQiLCJuZ0NsYXNzLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U3R5bGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nU3R5bGVdLCAgW25nU3R5bGUueHNdLCBbbmdTdHlsZS5zbV0sIFtuZ1N0eWxlLm1kXSwgW25nU3R5bGUubGddLCBbbmdTdHlsZS54bF0sICBbbmdTdHlsZS5sdC1zbV0sIFtuZ1N0eWxlLmx0LW1kXSwgW25nU3R5bGUubHQtbGddLCBbbmdTdHlsZS5sdC14bF0sICBbbmdTdHlsZS5ndC14c10sIFtuZ1N0eWxlLmd0LXNtXSwgW25nU3R5bGUuZ3QtbWRdLCBbbmdTdHlsZS5ndC1sZ10iLGlucHV0czpbIm5nU3R5bGUiLCJuZ1N0eWxlLnhzIiwibmdTdHlsZS5zbSIsIm5nU3R5bGUubWQiLCJuZ1N0eWxlLmxnIiwibmdTdHlsZS54bCIsIm5nU3R5bGUubHQtc20iLCJuZ1N0eWxlLmx0LW1kIiwibmdTdHlsZS5sdC1sZyIsIm5nU3R5bGUubHQteGwiLCJuZ1N0eWxlLmd0LXhzIiwibmdTdHlsZS5ndC1zbSIsIm5nU3R5bGUuZ3QtbWQiLCJuZ1N0eWxlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJ0LlRiSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItaWNvbiIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbInRiSWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIk1hcHBpbmdUYWJsZUNvbXBvbmVudCIscm8pLEhlKFtOKCldLHJvLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpybyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbWFwcGluZy10YWJsZSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy10YWJsZSB0Yi1hYnNvbHV0ZS1maWxsIj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InRiLW1hcHBpbmctdGFibGUtY29udGVudCI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiICpuZ0lmPSIoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykgPT09IGZhbHNlIj5cbiAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzdGFydCBjZW50ZXIiIGZ4TGF5b3V0LnhzPSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ24ueHM9ImNlbnRlciBzdGFydCIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9InRiLW1hcHBpbmctdGFibGUtdGl0bGUiPnt7bWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KG1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJjb2x1bW4uZGVmIiAqbmdGb3I9ImxldCBjb2x1bW4gb2YgbWFwcGluZ0NvbHVtbnM7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgY29sdW1uLnRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCAqbWF0Q2VsbERlZj0ibGV0IG1hcHBpbmciIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgbWFwcGluZ1tjb2x1bW4uZGVmXSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCc5NnB4XCcsIG1heFdpZHRoOiBcJzk2cHhcJywgd2lkdGg6IFwnOTZweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZGVsZXRlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmRlbGV0ZTwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmd0LW1kIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5sdC1sZyBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT0iY2VsbEFjdGlvbnNNZW51Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNjZWxsQWN0aW9uc01lbnU9Im1hdE1lbnUiIHhQb3NpdGlvbj0iYmVmb3JlIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG1hdC1oZWFkZXItcm93IFtuZ0NsYXNzXT0ie1wnbWF0LXJvdy1zZWxlY3RcJzogdHJ1ZX0iICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj0ibGV0IG1hcHBpbmc7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7Ij48L21hdC1yb3c+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPHNlY3Rpb24gW2Z4U2hvd109IiF0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgICAgICBjbGFzcz0ibWF0LWhlYWRsaW5lLTUgdGItYWJzb2x1dGUtZmlsbCB0Yi1hZGQtbmV3Ij5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPSJjb25uZWN0b3IiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gW2Z4U2hvd109InRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSJcbiAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgIGNsYXNzPSJuby1kYXRhLWZvdW5kIiB0cmFuc2xhdGU+XG4gICAgICB3aWRnZXQubm8tZGF0YS1mb3VuZFxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudC50Yi1vdXRsaW5lZC1ib3JkZXJ7Ym94LXNoYWRvdzowIDAgIzAwMDMsMCAwICMwMDAwMDAyNCwwIDAgIzAwMDAwMDFmO2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMDtib3JkZXItcmFkaXVzOjRweH06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5tYXQtdG9vbGJhci10b29sc3ttaW4taGVpZ2h0OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGl0bGUtY29udGFpbmVye292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctcmlnaHQ6MjBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxle3RhYmxlLWxheW91dDpmaXhlZDttaW4td2lkdGg6NDUwcHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxlIC50YWJsZS12YWx1ZS1jb2x1bW57cGFkZGluZzowIDEycHg7d2lkdGg6MjMlfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1uLnJlcXVlc3QtY29sdW1ue3dpZHRoOjM4JX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5lbGxpcHNpc3tvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAubm8tZGF0YS1mb3VuZHtoZWlnaHQ6Y2FsYygxMDAlIC0gMTIwcHgpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5OXB4KXs6aG9zdCAubWF0LXRvb2xiYXJ7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxMDBweH06aG9zdCAubWF0LXRvb2xiYXIgLnRiLW1hcHBpbmctdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntyZXF1aXJlZDpbe3R5cGU6YX1dLG1hcHBpbmdUeXBlOlt7dHlwZTphfV0sc2VhcmNoSW5wdXRGaWVsZDpbe3R5cGU6byxhcmdzOlsic2VhcmNoSW5wdXQiXX1dfX0pO2NsYXNzIHNvIGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9fWUoIk1hcHBpbmdEYXRhc291cmNlIixzbyk7Y2xhc3MgbG97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLnRpdGxlPSJnYXRld2F5LnNlY3VyaXR5Iix0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsPSExLHRoaXMuQnJva2VyU2VjdXJpdHlUeXBlPXJuLHRoaXMuc2VjdXJpdHlUeXBlcz1PYmplY3QudmFsdWVzKHJuKSx0aGlzLm1vZGVUeXBlcz1PYmplY3QudmFsdWVzKHBuKSx0aGlzLlNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcD1tbix0aGlzLmRlc3Ryb3kkPW5ldyBTZX1uZ09uSW5pdCgpe3RoaXMuc2VjdXJpdHlGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dHlwZTpbcm4uQU5PTllNT1VTLFtdXSx1c2VybmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFzc3dvcmQ6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHBhdGhUb0NBQ2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvUHJpdmF0ZUtleTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvQ2xpZW50Q2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsJiZ0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmFkZENvbnRyb2woIm1vZGUiLHRoaXMuZmIuY29udHJvbChwbi5OT05FLFtdKSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXtpZihlKWUudHlwZXx8KGUudHlwZT1ybi5BTk9OWU1PVVMpLHRoaXMudXBkYXRlVmFsaWRhdG9ycyhlLnR5cGUpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAucmVzZXQoZSx7ZW1pdEV2ZW50OiExfSk7ZWxzZXtjb25zdCBlPXt0eXBlOnJuLkFOT05ZTU9VU307dGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlLHtlbWl0RXZlbnQ6ITF9KX10aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlIT09cm4uQkFTSUN8fHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VjdXJpdHlGb3JtOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dXBkYXRlVmFsaWRhdG9ycyhlKXtpZihlKWlmKHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DQUNlcnQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DbGllbnRDZXJ0IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoIm1vZGUiKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZT09PXJuLkJBU0lDKXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTtlbHNlIGlmKGU9PT1ybi5DRVJUSUZJQ0FURVMmJih0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvQ0FDZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhdGhUb0NsaWVudENlcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwpKXtjb25zdCBlPXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJtb2RlIik7ZSYmIWUudmFsdWUmJmUuc2V0VmFsdWUocG4uTk9ORSx7ZW1pdEV2ZW50OiExfSksZT8uZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidXNlcm5hbWUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6bG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czp7dGl0bGU6InRpdGxlIixleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDoiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHNhbWUtcGFkZGluZyB0Yi1mbGV4IGNvbHVtbiIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Rm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5CQVNJQyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJCcm9rZXJTZWN1cml0eVR5cGUuQ0VSVElGSUNBVEVTIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5wYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuQ0EtY2VydGlmaWNhdGUtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DQUNlcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9Qcml2YXRlS2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGF0aFRvQ2xpZW50Q2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibW9kZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAge3sgdHlwZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja31cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2gsc2VsZWN0b3I6IltuZ1N3aXRjaF0iLGlucHV0czpbIm5nU3dpdGNoIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaENhc2Usc2VsZWN0b3I6IltuZ1N3aXRjaENhc2VdIixpbnB1dHM6WyJuZ1N3aXRjaENhc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIlNlY3VyaXR5Q29uZmlnQ29tcG9uZW50IixsbyksSGUoW04oKV0sbG8ucHJvdG90eXBlLCJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmxvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc2VjdXJpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgIHt7IFNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnVzZXJuYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5DRVJUSUZJQ0FURVMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LnBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5DQS1jZXJ0aWZpY2F0ZS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb0NBQ2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb1ByaXZhdGVLZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DbGllbnRDZXJ0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImV4dGVuZENlcnRpZmljYXRlc01vZGVsIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5tb2RlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGVUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyB0eXBlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7dGl0bGU6W3t0eXBlOmF9XSxleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDpbe3R5cGU6YX1dfX0pO2NsYXNzIGNve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5zZWN1cml0eVBvbGljeVR5cGVzPV9uLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3VybDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdGltZW91dEluTWlsbGlzOlsxZTMsW3VlLnJlcXVpcmVkLHVlLm1pbigxZTMpXV0sc2NhblBlcmlvZEluTWlsbGlzOltWLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMWUzKV1dLHBvbGxQZXJpb2RJbk1pbGxpczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oNTApXV0sZW5hYmxlU3Vic2NyaXB0aW9uczpbITAsW11dLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEwMCldXSxzaG93TWFwOlshMSxbXV0sc2VjdXJpdHk6W1VuLkJBU0lDMTI4LFtdXSxpZGVudGl0eTpbXX0pLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5oaWRlTmV3RmllbGRzJiZ0aGlzLnNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoInBvbGxQZXJpb2RJbk1pbGxpcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VydmVyQ29uZmlnRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7Y29uc3R7dGltZW91dEluTWlsbGlzOnQ9MWUzLHNjYW5QZXJpb2RJbk1pbGxpczpuPVYscG9sbFBlcmlvZEluTWlsbGlzOmE9NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6bz0hMCxzdWJDaGVja1BlcmlvZEluTWlsbGlzOmk9MTAwLHNob3dNYXA6cj0hMSxzZWN1cml0eTpzPVVuLkJBU0lDMTI4LGlkZW50aXR5Omw9e319PWU7dGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAucmVzZXQoey4uLmUsdGltZW91dEluTWlsbGlzOnQsc2NhblBlcmlvZEluTWlsbGlzOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsZW5hYmxlU3Vic2NyaXB0aW9uczpvLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6aSxzaG93TWFwOnIsc2VjdXJpdHk6cyxpZGVudGl0eTpsfSx7ZW1pdEV2ZW50OiExfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmNvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czp7aGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmxvLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czpbInRpdGxlIiwiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNTZXJ2ZXJDb25maWdDb21wb25lbnQiLGNvKSxIZShbTigpXSxjby5wcm90b3R5cGUsImhpZGVOZXdGaWVsZHMiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Y28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7aGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dfX0pO2NsYXNzIHBvIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWFwcGluZ1R5cGVzPWZuLHRoaXMuaXNMZWdhY3k9ITF9aW5pdEJhc2ljRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe21hcHBpbmc6W10sc2VydmVyOltdfSl9bWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSl7cmV0dXJue3NlcnZlcjplLnNlcnZlcj8/e30sbWFwcGluZzplLm1hcHBpbmc/P1tdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOmUuc2VydmVyLG1hcHBpbmc6ZS5tYXBwaW5nfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnBvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnBvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNVYUJhc2ljQ29uZmlnQ29tcG9uZW50IixwbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5wbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgbW97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLm1xdHRWZXJzaW9ucz1nbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5icm9rZXJDb25maWdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7aG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSx2ZXJzaW9uOls1LFtdXSxjbGllbnRJZDpbInRiX2d3XyIrc2UoNSksW3VlLnBhdHRlcm4oa3QpXV0sc2VjdXJpdHk6W119KSx0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWdlbmVyYXRlKGUpe3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLmdldChlKT8ucGF0Y2hWYWx1ZSgidGJfZ3dfIitzZSg1KSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2NvbnN0e3ZlcnNpb246dD01LGNsaWVudElkOm49YHRiX2d3XyR7c2UoNSl9YCxzZWN1cml0eTphPXt9fT1lO3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLnJlc2V0KHsuLi5lLHZlcnNpb246dCxjbGllbnRJZDpuLHNlY3VyaXR5OmF9LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnticm9rZXJDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTptbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTptbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9Pm1vKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpsbyxzZWxlY3RvcjoidGItc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJ0aXRsZSIsImV4dGVuZENlcnRpZmljYXRlc01vZGVsIl19LHtraW5kOiJwaXBlIix0eXBlOndhLG5hbWU6ImdldEdhdGV3YXlQb3J0VG9vbHRpcCJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiQnJva2VyQ29uZmlnQ29udHJvbENvbXBvbmVudCIsbW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLHdhXSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5tbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyB1b3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21heE51bWJlck9mV29ya2VyczpbMTAwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSldXSxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOlsxMCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV19KSx0aGlzLndvcmtlcnNDb25maWdGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7Y29uc3R7bWF4TnVtYmVyT2ZXb3JrZXJzOnQsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjpufT1lO3RoaXMud29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5yZXNldCh7bWF4TnVtYmVyT2ZXb3JrZXJzOnR8fDEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOm58fDEwfSx7ZW1pdEV2ZW50OiExfSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwLnZhbGlkP251bGw6e3dvcmtlcnNDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp1byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnVvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+dW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09IndvcmtlcnNDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9Im1heE51bWJlck9mV29ya2VycyJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TnVtYmVyT2ZXb3JrZXJzXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIFtzdHlsZS53aWR0aC4lXT0iNTAiXG4gICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXJcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TWVzc2FnZU51bWJlclBlcldvcmtlciJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiV29ya2Vyc0NvbmZpZ0NvbnRyb2xDb21wb25lbnQiLHVvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnVvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT51bykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBbZm9ybUdyb3VwXT0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiBbc3R5bGUud2lkdGguJV09IjUwIlxuICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TnVtYmVyT2ZXb3JrZXJzIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1udW1iZXItb2Ytd29ya2Vycy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiB0eXBlPSJudW1iZXIiIG1pbj0iMSIgZm9ybUNvbnRyb2xOYW1lPSJtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IndvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS50b3VjaGVkKSJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIGdve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmlzRXhwYW5zaW9uTW9kZT0hMSx0aGlzLmRlZmF1bHRWYWx1ZT1sbi5LZXksdGhpcy5yZXBvcnRTdHJhdGVneVR5cGVzPU9iamVjdC52YWx1ZXMoc24pLHRoaXMuUmVwb3J0VHlwZVRyYW5zbGF0ZU1hcD1jbix0aGlzLlJlcG9ydFN0cmF0ZWd5VHlwZT1zbix0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTdHJhdGVneUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W3t2YWx1ZTpzbi5PblJlcG9ydFBlcmlvZCxkaXNhYmxlZDohMH0sW11dLHJlcG9ydFBlcmlvZDpbe3ZhbHVlOnRoaXMuZGVmYXVsdFZhbHVlLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5Rm9ybUNoYW5nZSgpLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5VG9nZ2xlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmlzRXhwYW5zaW9uTW9kZSYmdGhpcy5zaG93U3RyYXRlZ3lDb250cm9sLnNldFZhbHVlKCEhZSx7ZW1pdEV2ZW50OiExfSksZSYmdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pO2NvbnN0e3R5cGU6dD1zbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6bj10aGlzLmRlZmF1bHRWYWx1ZX09ZT8/e307dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5zZXRWYWx1ZSh7dHlwZTp0LHJlcG9ydFBlcmlvZDpufSx7ZW1pdEV2ZW50OiExfSksdGhpcy5vblR5cGVDaGFuZ2UodCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWxpZHx8dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5kaXNhYmxlZD9udWxsOntyZXBvcnRTdHJhdGVneUZvcm06e3ZhbGlkOiExfX19cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX1vYnNlcnZlU3RyYXRlZ3lGb3JtQ2hhbmdlKCl7dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy5vblR5cGVDaGFuZ2UoZSkpKX1vYnNlcnZlU3RyYXRlZ3lUb2dnbGUoKXt0aGlzLnNob3dTdHJhdGVneUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCksTWUoKCgpPT50aGlzLmlzRXhwYW5zaW9uTW9kZSkpKS5zdWJzY3JpYmUoKGU9PntlPyh0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoInJlcG9ydFBlcmlvZCIpLmFkZFZhbGlkYXRvcnModWUucmVxdWlyZWQpLHRoaXMub25DaGFuZ2UodGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZSkpOih0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKS5yZW1vdmVWYWxpZGF0b3JzKHVlLnJlcXVpcmVkKSx0aGlzLm9uQ2hhbmdlKG51bGwpKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfW9uVHlwZUNoYW5nZShlKXtjb25zdCB0PXRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKTtlPT09c24uT25DaGFuZ2U/dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmlzRXhwYW5zaW9uTW9kZSYmIXRoaXMuc2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZXx8dC5lbmFibGUoe2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpnbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsaW5wdXRzOntpc0V4cGFuc2lvbk1vZGU6ImlzRXhwYW5zaW9uTW9kZSIsZGVmYXVsdFZhbHVlOiJkZWZhdWx0VmFsdWUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Z28pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0lmPSJpc0V4cGFuc2lvbk1vZGUgZWxzZSBkZWZhdWx0TW9kZSIgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U3RyYXRlZ3lDb250cm9sLnZhbHVlIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1N0cmF0ZWd5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InN0cmF0ZWd5RmllbGRzIj48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNb2RlPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjc3RyYXRlZ3lGaWVsZHM+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcG9ydFN0cmF0ZWd5VHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IFJlcG9ydFR5cGVUcmFuc2xhdGVNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUgIT09IFJlcG9ydFN0cmF0ZWd5VHlwZS5PbkNoYW5nZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPlxuICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgIGdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5LnJlcG9ydC1wZXJpb2RcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJSZXBvcnRTdHJhdGVneUNvbXBvbmVudCIsZ28pLEhlKFtOKCldLGdvLnByb3RvdHlwZSwiaXNFeHBhbnNpb25Nb2RlIix2b2lkIDApLEhlKFtCKCldLGdvLnByb3RvdHlwZSwiZGVmYXVsdFZhbHVlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmdvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0icmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdJZj0iaXNFeHBhbnNpb25Nb2RlIGVsc2UgZGVmYXVsdE1vZGUiIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZSI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTdHJhdGVneUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TW9kZT5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWw8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0ic3RyYXRlZ3lGaWVsZHMiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3N0cmF0ZWd5RmllbGRzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiPnt7IFwnZ2F0ZXdheS50eXBlXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiByZXBvcnRTdHJhdGVneVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBSZXBvcnRUeXBlVHJhbnNsYXRlTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBSZXBvcnRTdHJhdGVneVR5cGUuT25DaGFuZ2UiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj5cbiAgICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5cbiAgICAgICAgICBnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5yZXBvcnQtcGVyaW9kXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0UGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntpc0V4cGFuc2lvbk1vZGU6W3t0eXBlOmF9XSxkZWZhdWx0VmFsdWU6W3t0eXBlOmF9XX19KTtjbGFzcyBmb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5pc01hc3Rlcj0hMSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5tb2RidXNEYXRhVHlwZXM9T2JqZWN0LnZhbHVlcyhlYSksdGhpcy5tb2RpZmllclR5cGVzPU9iamVjdC52YWx1ZXMoT24pLHRoaXMud2l0aEZ1bmN0aW9uQ29kZT0hMCx0aGlzLndpdGhSZXBvcnRTdHJhdGVneT0hMCx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXA9bmV3IE1hcCx0aGlzLnNob3dNb2RpZmllcnNNYXA9bmV3IE1hcCx0aGlzLmZ1bmN0aW9uQ29kZXNNYXA9bmV3IE1hcCx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVtdLHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXM9dGEsdGhpcy5Nb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXA9enQsdGhpcy5Nb2RpZmllclR5cGVzTWFwPVJuLHRoaXMuUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWU9bG4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5kZWZhdWx0UmVhZEZ1bmN0aW9uQ29kZXM9WzMsNF0sdGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXM9WzEsMl0sdGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzPVs2LDE2XSx0aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM9WzUsMTVdfW5nT25Jbml0KCl7dGhpcy53aXRoRnVuY3Rpb25Db2RlPSF0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVMsdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3k9ISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuaGlkZU5ld0ZpZWxkcyksdGhpcy5rZXlzTGlzdEZvcm1BcnJheT10aGlzLnByZXBhcmVLZXlzRm9ybUFycmF5KHRoaXMudmFsdWVzKSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPXRoaXMuZ2V0RGVmYXVsdEZ1bmN0aW9uQ29kZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX10cmFja0J5Q29udHJvbElkKGUsdCl7cmV0dXJuIHQudmFsdWUuaWR9YWRkS2V5KCl7Y29uc3QgZT1zZSg1KSx0PXRoaXMuZmIuZ3JvdXAoe3RhZzpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6W3t2YWx1ZToiIixkaXNhYmxlZDohdGhpcy5pc01hc3Rlcn0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbZWEuQllURVMsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbnVsbCxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6WzEsW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6dGhpcy5nZXREZWZhdWx0RnVuY3Rpb25Db2RlcygpWzBdLGRpc2FibGVkOiF0aGlzLndpdGhGdW5jdGlvbkNvZGV9LFt1ZS5yZXF1aXJlZF1dLHJlcG9ydFN0cmF0ZWd5Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3l9XSxtb2RpZmllclR5cGU6W3t2YWx1ZTpPbi5NVUxUSVBMSUVSLGRpc2FibGVkOiEwfV0sbW9kaWZpZXJWYWx1ZTpbe3ZhbHVlOjEsZGlzYWJsZWQ6ITB9LFt1ZS5wYXR0ZXJuKEZ0KV1dLGlkOlt7dmFsdWU6ZSxkaXNhYmxlZDohMH1dfSk7dGhpcy5zaG93TW9kaWZpZXJzTWFwLnNldChlLCExKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KGUsdGhpcy5mYi5jb250cm9sKCExKSksdGhpcy5vYnNlcnZlS2V5RGF0YVR5cGUodCksdGhpcy5vYnNlcnZlRW5hYmxlTW9kaWZpZXIodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5wdXNoKHQpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5yZW1vdmVBdCh0KSx0aGlzLmtleXNMaXN0Rm9ybUFycmF5Lm1hcmtBc0RpcnR5KCl9Y2FuY2VsKCl7dGhpcy5wb3BvdmVyLmhpZGUoKX1hcHBseUtleXNEYXRhKCl7dGhpcy5rZXlzRGF0YUFwcGxpZWQuZW1pdCh0aGlzLmdldEZvcm1WYWx1ZSgpKX1nZXRGb3JtVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXBLZXlzV2l0aE1vZGlmaWVyKHRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5P3RoaXMuY2xlYW5VcEVtcHR5U3RyYXRlZ2llcyh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKTp0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKX1jbGVhblVwRW1wdHlTdHJhdGVnaWVzKGUpe3JldHVybiBlLm1hcCgoZT0+e2NvbnN0e3JlcG9ydFN0cmF0ZWd5OnQsLi4ubn09ZTtyZXR1cm4gdD9lOm59KSl9bWFwS2V5c1dpdGhNb2RpZmllcihlKXtyZXR1cm4gZS5tYXAoKChlLHQpPT57aWYodGhpcy5zaG93TW9kaWZpZXJzTWFwLmdldCh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzW3RdLmdldCgiaWQiKS52YWx1ZSkpe2NvbnN0e21vZGlmaWVyVHlwZTp0LG1vZGlmaWVyVmFsdWU6biwuLi5hfT1lO3JldHVybiB0P3suLi5hLFt0XTpufTphfXJldHVybiBlfSkpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJmUuZm9yRWFjaCgoZT0+e2NvbnN0IG49dGhpcy5jcmVhdGVEYXRhS2V5Rm9ybUdyb3VwKGUpO3RoaXMub2JzZXJ2ZUtleURhdGFUeXBlKG4pLHRoaXMub2JzZXJ2ZUVuYWJsZU1vZGlmaWVyKG4pLHRoaXMuZnVuY3Rpb25Db2Rlc01hcC5zZXQobi5nZXQoImlkIikudmFsdWUsdGhpcy5nZXRGdW5jdGlvbkNvZGVzKGUudHlwZSkpLHQucHVzaChuKX0pKSx0aGlzLmZiLmFycmF5KHQpfWNyZWF0ZURhdGFLZXlGb3JtR3JvdXAoZSl7Y29uc3R7dGFnOnQsdmFsdWU6bix0eXBlOmEsYWRkcmVzczpvLG9iamVjdHNDb3VudDppLGZ1bmN0aW9uQ29kZTpyLG11bHRpcGxpZXI6cyxkaXZpZGVyOmwscmVwb3J0U3RyYXRlZ3k6Y309ZSxwPXNlKDUpLG09dGhpcy5zaG91bGRTaG93TW9kaWZpZXIoYSk7cmV0dXJuIHRoaXMuc2hvd01vZGlmaWVyc01hcC5zZXQocCxtKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KHAsdGhpcy5mYi5jb250cm9sKChzfHxsKSYmbSkpLHRoaXMuZmIuZ3JvdXAoe3RhZzpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbe3ZhbHVlOm4sZGlzYWJsZWQ6IXRoaXMuaXNNYXN0ZXJ9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHR5cGU6W2EsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbyxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6W2ksW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6cixkaXNhYmxlZDohdGhpcy53aXRoRnVuY3Rpb25Db2RlfSxbdWUucmVxdWlyZWRdXSxtb2RpZmllclR5cGU6W3t2YWx1ZTpsP09uLkRJVklERVI6T24uTVVMVElQTElFUixkaXNhYmxlZDohdGhpcy5lbmFibGVNb2RpZmllcnNDb250cm9sTWFwLmdldChwKS52YWx1ZX1dLG1vZGlmaWVyVmFsdWU6W3t2YWx1ZTpzPz9sPz8xLGRpc2FibGVkOiF0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KHApLnZhbHVlfSxbdWUucGF0dGVybihGdCldXSxpZDpbe3ZhbHVlOnAsZGlzYWJsZWQ6ITB9XSxyZXBvcnRTdHJhdGVneTpbe3ZhbHVlOmMsZGlzYWJsZWQ6IXRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5fV19KX1zaG91bGRTaG93TW9kaWZpZXIoZSl7cmV0dXJuISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSkpfW9ic2VydmVLZXlEYXRhVHlwZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHQpfHxlLmdldCgib2JqZWN0c0NvdW50IikucGF0Y2hWYWx1ZShuYVt0XSx7ZW1pdEV2ZW50OiExfSk7Y29uc3Qgbj10aGlzLnNob3VsZFNob3dNb2RpZmllcih0KTt0aGlzLnNob3dNb2RpZmllcnNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlLHQpfSkpfW9ic2VydmVFbmFibGVNb2RpZmllcihlKXt0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KGUuZ2V0KCJpZCIpLnZhbHVlKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT50aGlzLnRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KSkpfXRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KXtjb25zdCBuPWUuZ2V0KCJtb2RpZmllclR5cGUiKSxhPWUuZ2V0KCJtb2RpZmllclZhbHVlIik7dD8obi5lbmFibGUoKSxhLmVuYWJsZSgpKToobi5kaXNhYmxlKCksYS5kaXNhYmxlKCkpfXVwZGF0ZUZ1bmN0aW9uQ29kZXMoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RnVuY3Rpb25Db2Rlcyh0KTt0aGlzLmZ1bmN0aW9uQ29kZXNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLG4uaW5jbHVkZXMoZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnZhbHVlKXx8ZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUoblswXSx7ZW1pdEV2ZW50OiExfSl9Z2V0RnVuY3Rpb25Db2RlcyhlKXtjb25zdCB0PVsuLi5lPT09ZWEuQklUUz90aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM6W10sLi4udGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzXTtpZih0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTKXJldHVybiB0LnNvcnQoKChlLHQpPT5lLXQpKTtjb25zdCBuPVsuLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2Rlc107cmV0dXJuIGU9PT1lYS5CSVRTJiZuLnB1c2goLi4udGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXMpLHRoaXMua2V5c1R5cGU9PT1hYS5SUENfUkVRVUVTVFMmJm4ucHVzaCguLi50KSxuLnNvcnQoKChlLHQpPT5lLXQpKX1nZXREZWZhdWx0RnVuY3Rpb25Db2Rlcygpe3JldHVybiB0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTP3RoaXMuZGVmYXVsdFdyaXRlRnVuY3Rpb25Db2Rlczp0aGlzLmtleXNUeXBlPT09YWEuUlBDX1JFUVVFU1RTP1suLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLmRlZmF1bHRXcml0ZUZ1bmN0aW9uQ29kZXNdOnRoaXMuZGVmYXVsdFJlYWRGdW5jdGlvbkNvZGVzfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Zm8sZGVwczpbe3Rva2VuOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Zm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyIscGFuZWxUaXRsZToicGFuZWxUaXRsZSIsYWRkS2V5VGl0bGU6ImFkZEtleVRpdGxlIixkZWxldGVLZXlUaXRsZToiZGVsZXRlS2V5VGl0bGUiLG5vS2V5c1RleHQ6Im5vS2V5c1RleHQiLGtleXNUeXBlOiJrZXlzVHlwZSIsdmFsdWVzOiJ2YWx1ZXMiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmV0Lk1hdFNsaWRlVG9nZ2xlLHNlbGVjdG9yOiJtYXQtc2xpZGUtdG9nZ2xlIixpbnB1dHM6WyJuYW1lIiwiaWQiLCJsYWJlbFBvc2l0aW9uIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJyZXF1aXJlZCIsImNvbG9yIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJjaGVja2VkIiwiaGlkZUljb24iLCJkaXNhYmxlZEludGVyYWN0aXZlIl0sb3V0cHV0czpbImNoYW5nZSIsInRvZ2dsZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2xpZGVUb2dnbGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsQ29udGVudCxzZWxlY3RvcjoibmctdGVtcGxhdGVbbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dfSl9fWUoIk1vZGJ1c0RhdGFLZXlzUGFuZWxDb21wb25lbnQiLGZvKSxIZShbTigpXSxmby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLEhlKFtOKCldLGZvLnByb3RvdHlwZSwiaGlkZU5ld0ZpZWxkcyIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxUYSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfV0scHJvcERlY29yYXRvcnM6e2lzTWFzdGVyOlt7dHlwZTphfV0saGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dLHBhbmVsVGl0bGU6W3t0eXBlOmF9XSxhZGRLZXlUaXRsZTpbe3R5cGU6YX1dLGRlbGV0ZUtleVRpdGxlOlt7dHlwZTphfV0sbm9LZXlzVGV4dDpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVzOlt7dHlwZTphfV0scG9wb3Zlcjpbe3R5cGU6YX1dLGtleXNEYXRhQXBwbGllZDpbe3R5cGU6bH1dfX0pO2NsYXNzIHlve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy5mYj1lLHRoaXMucG9wb3ZlclNlcnZpY2U9dCx0aGlzLnJlbmRlcmVyPW4sdGhpcy52aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5jZHI9byx0aGlzLnNpbmdsZU1vZGU9ITEsdGhpcy5oaWRlTmV3RmllbGRzPSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5tb2RidXNSZWdpc3RlclR5cGVzPU9iamVjdC52YWx1ZXMoWG4pLHRoaXMubW9kYnVzVmFsdWVLZXlzPU9iamVjdC52YWx1ZXMoYWEpLHRoaXMuTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwPVpuLHRoaXMuTW9kYnVzVmFsdWVLZXk9YWEsdGhpcy5kZXN0cm95JD1uZXcgU2V9bmdPbkluaXQoKXt0aGlzLmluaXRpYWxpemVWYWx1ZXNGb3JtR3JvdXAoKSx0aGlzLm9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2lmKHRoaXMuc2luZ2xlTW9kZSl0aGlzLnZhbHVlc0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoZSkse2VtaXRFdmVudDohMX0pO2Vsc2V7Y29uc3R7aG9sZGluZ19yZWdpc3RlcnM6dCxjb2lsc19pbml0aWFsaXplcjpuLGlucHV0X3JlZ2lzdGVyczphLGRpc2NyZXRlX2lucHV0czpvfT1lO3RoaXMudmFsdWVzRm9ybUdyb3VwLnNldFZhbHVlKHtob2xkaW5nX3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUodCksY29pbHNfaW5pdGlhbGl6ZXI6dGhpcy5nZXRTaW5nbGVSZWdpc3RlclN0YXRlKG4pLGlucHV0X3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoYSksZGlzY3JldGVfaW5wdXRzOnRoaXMuZ2V0U2luZ2xlUmVnaXN0ZXJTdGF0ZShvKX0se2VtaXRFdmVudDohMX0pfXRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMudmFsdWVzRm9ybUdyb3VwLnZhbGlkP251bGw6e3ZhbHVlc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX1nZXRWYWx1ZUdyb3VwKGUsdCl7cmV0dXJuIHQ/dGhpcy52YWx1ZXNGb3JtR3JvdXAuZ2V0KHQpLmdldChlKTp0aGlzLnZhbHVlc0Zvcm1Hcm91cC5nZXQoZSl9bWFuYWdlS2V5cyhlLHQsbixhKXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG89dC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKHRoaXMucG9wb3ZlclNlcnZpY2UuaGFzUG9wb3ZlcihvKSlyZXR1cm4gdm9pZCB0aGlzLnBvcG92ZXJTZXJ2aWNlLmhpZGVQb3BvdmVyKG8pO2NvbnN0IGk9dGhpcy5nZXRWYWx1ZUdyb3VwKG4sYSkscj17dmFsdWVzOmkudmFsdWUsaXNNYXN0ZXI6IXRoaXMuc2luZ2xlTW9kZSxrZXlzVHlwZTpuLHBhbmVsVGl0bGU6b2EuZ2V0KG4pLGFkZEtleVRpdGxlOmlhLmdldChuKSxkZWxldGVLZXlUaXRsZTpyYS5nZXQobiksbm9LZXlzVGV4dDpzYS5nZXQobiksaGlkZU5ld0ZpZWxkczp0aGlzLmhpZGVOZXdGaWVsZHN9LHM9dGhpcy5wb3BvdmVyU2VydmljZS5kaXNwbGF5UG9wb3ZlcihvLHRoaXMucmVuZGVyZXIsdGhpcy52aWV3Q29udGFpbmVyUmVmLGZvLCJsZWZ0Qm90dG9tIiwhMSxudWxsLHIse30se30se30sITApO3MudGJDb21wb25lbnRSZWYuaW5zdGFuY2UucG9wb3Zlcj1zLHMudGJDb21wb25lbnRSZWYuaW5zdGFuY2Uua2V5c0RhdGFBcHBsaWVkLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3MuaGlkZSgpLGkucGF0Y2hWYWx1ZShlKSxpLm1hcmtBc0RpcnR5KCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9KSl9aW5pdGlhbGl6ZVZhbHVlc0Zvcm1Hcm91cCgpe2NvbnN0IGU9KCk9PnRoaXMuZmIuZ3JvdXAodGhpcy5tb2RidXNWYWx1ZUtleXMucmVkdWNlKCgoZSx0KT0+KGVbdF09dGhpcy5mYi5jb250cm9sKFtbXSxbXV0pLGUpKSx7fSkpO3RoaXMuc2luZ2xlTW9kZT90aGlzLnZhbHVlc0Zvcm1Hcm91cD1lKCk6dGhpcy52YWx1ZXNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh0aGlzLm1vZGJ1c1JlZ2lzdGVyVHlwZXMucmVkdWNlKCgodCxuKT0+KHRbbl09ZSgpLHQpKSx7fSkpfW9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl7dGhpcy52YWx1ZXNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1nZXRTaW5nbGVSZWdpc3RlclN0YXRlKGUpe3JldHVybnthdHRyaWJ1dGVzOmU/LmF0dHJpYnV0ZXM/P1tdLHRpbWVzZXJpZXM6ZT8udGltZXNlcmllcz8/W10sYXR0cmlidXRlVXBkYXRlczplPy5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6ZT8ucnBjPz9bXX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp5byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp5byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGlucHV0czp7c2luZ2xlTW9kZToic2luZ2xlTW9kZSIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnlvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwLHNlbGVjdG9yOiJtYXQtYmFzaWMtY2hpcCwgW21hdC1iYXNpYy1jaGlwXSwgbWF0LWNoaXAsIFttYXQtY2hpcF0iLGlucHV0czpbInJvbGUiLCJpZCIsImFyaWEtbGFiZWwiLCJhcmlhLWRlc2NyaXB0aW9uIiwidmFsdWUiLCJjb2xvciIsInJlbW92YWJsZSIsImhpZ2hsaWdodGVkIiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVkIl0sb3V0cHV0czpbInJlbW92ZWQiLCJkZXN0cm95ZWQiXSxleHBvcnRBczpbIm1hdENoaXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwTGlzdGJveCxzZWxlY3RvcjoibWF0LWNoaXAtbGlzdGJveCIsaW5wdXRzOlsibXVsdGlwbGUiLCJhcmlhLW9yaWVudGF0aW9uIiwic2VsZWN0YWJsZSIsImNvbXBhcmVXaXRoIiwicmVxdWlyZWQiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwidmFsdWUiXSxvdXRwdXRzOlsiY2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YnQuVGJJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1pY29uIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsidGJJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6a2Esc2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixpbnB1dHM6WyJ0Yi1lbGxpcHNpcy1jaGlwLWxpc3QiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNWYWx1ZXNDb21wb25lbnQiLHlvKSxIZShbTigpXSx5by5wcm90b3R5cGUsInNpbmdsZU1vZGUiLHZvaWQgMCksSGUoW04oKV0seW8ucHJvdG90eXBlLCJoaWRlTmV3RmllbGRzIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+eW8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGthXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7c2luZ2xlTW9kZTpbe3R5cGU6YX1dLGhpZGVOZXdGaWVsZHM6W3t0eXBlOmF9XX19KTtjbGFzcyBib3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMuaXNNYXN0ZXI9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe2NlcnRmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxrZXlmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0sc2VydmVyX2hvc3RuYW1lOlsiIixbdWUucGF0dGVybihrdCldXSxyZXFjbGljZXJ0Olt7dmFsdWU6ITEsZGlzYWJsZWQ6ITB9XX0pLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVNYXN0ZXJFbmFibGluZygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWUsdGhpcy5kaXNhYmxlZD90aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pOnRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnVwZGF0ZU1hc3RlckVuYWJsaW5nKCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe2NvbnN0e2NlcnRmaWxlOnQscGFzc3dvcmQ6bixrZXlmaWxlOmEsc2VydmVyX2hvc3RuYW1lOm99PWUsaT17Y2VydGZpbGU6dD8/IiIscGFzc3dvcmQ6bj8/IiIsa2V5ZmlsZTphPz8iIixzZXJ2ZXJfaG9zdG5hbWU6bz8/IiIscmVxY2xpY2VydDohIWUucmVxY2xpY2VydH07dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC5yZXNldChpLHtlbWl0RXZlbnQ6ITF9KX11cGRhdGVNYXN0ZXJFbmFibGluZygpe3RoaXMuaXNNYXN0ZXI/KHRoaXMuZGlzYWJsZWR8fHRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZ2V0KCJyZXFjbGljZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0aGlzLmRpc2FibGVkfHx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgicmVxY2xpY2VydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pKX1vYnNlcnZlVmFsdWVDaGFuZ2VzKCl7dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Ym8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfV0sdXNlc09uQ2hhbmdlczohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmhpbnRzLnBhdGgtaW4tb3NcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2VydGZpbGUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucHJpdmF0ZS1rZXktcGF0aFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXlmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSIhaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1ob3N0bmFtZTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJfaG9zdG5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJpc01hc3RlciIgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXFjbGljZXJ0Ij5cbiAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5yZXF1ZXN0LWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1IZShbTigpXSxiby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Ym8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIFtmb3JtR3JvdXBdPSJzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5oaW50cy5wYXRoLWluLW9zXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jYS1jZXJ0XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNlcnRmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnByaXZhdGUta2V5LXBhdGhcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5ZmlsZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iIWlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItaG9zdG5hbWU8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ic2VydmVyX2hvc3RuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmVxY2xpY2VydCI+XG4gICAgICA8bWF0LWxhYmVsPlxuICAgICAgICB7eyBcJ2dhdGV3YXkucmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtbGFiZWw+XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntpc01hc3Rlcjpbe3R5cGU6YX1dfX0pO2NsYXNzIGhvIGV4dGVuZHMgUHtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKHQsbixvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9byx0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c1Bhcml0aWVzPU9iamVjdC52YWx1ZXMoWW4pLHRoaXMubW9kYnVzQnl0ZVNpemVzPSRuLHRoaXMubW9kYnVzQmF1ZHJhdGVzPWxhLHRoaXMubW9kYnVzT3JkZXJUeXBlPU9iamVjdC52YWx1ZXMoSm4pLHRoaXMuTW9kYnVzUHJvdG9jb2xUeXBlPUhuLHRoaXMuTW9kYnVzUGFyaXR5TGFiZWxzTWFwPVFuLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5Nb2RidXNNZXRob2RMYWJlbHNNYXA9S24sdGhpcy5SZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZT1sbix0aGlzLm1vZGJ1c0hlbHBMaW5rPXYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tb2RidXMvI3NlY3Rpb24tbWFzdGVyLWRlc2NyaXB0aW9uLWFuZC1jb25maWd1cmF0aW9uLXBhcmFtZXRlcnMiLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSIsInN0b3BiaXRzIiwiYnl0ZXNpemUiLCJwYXJpdHkiLCJzdHJpY3QiXSx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXM9WyJwb3J0Iiwic2VjdXJpdHkiLCJob3N0Il0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5zaG93U2VjdXJpdHlDb250cm9sPXRoaXMuZmIuY29udHJvbCghMSksdGhpcy5pbml0aWFsaXplU2xhdmVGb3JtR3JvdXAoKSx0aGlzLnVwZGF0ZVNsYXZlRm9ybUdyb3VwKCksdGhpcy51cGRhdGVDb250cm9sc0VuYWJsaW5nKHRoaXMuZGF0YS52YWx1ZS50eXBlKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCksdGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnBhdGNoVmFsdWUoISF0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkmJiFlZSh0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkse30pKX1nZXQgcHJvdG9jb2xUeXBlKCl7cmV0dXJuIHRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5nZXRTbGF2ZVJlc3VsdERhdGEoKSl9aW5pdGlhbGl6ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltIbi5UQ1BdLGhvc3Q6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHBvcnQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbihFdC5NSU4pLHVlLm1heChFdC5NQVgpXV0sc2VyaWFsUG9ydDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbWV0aG9kOltXbi5TT0NLRVQsW3VlLnJlcXVpcmVkXV0sYmF1ZHJhdGU6W3RoaXMubW9kYnVzQmF1ZHJhdGVzWzBdXSxzdG9wYml0czpbMV0sYnl0ZXNpemU6WyRuWzBdXSxwYXJpdHk6W1luLk5vbmVdLHN0cmljdDpbITBdLHVuaXRJZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxkZXZpY2VOYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxkZXZpY2VUeXBlOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0aW1lb3V0OlszNV0sYnl0ZU9yZGVyOltKbi5CSUddLHdvcmRPcmRlcjpbSm4uQklHXSxyZXRyaWVzOlshMF0scmV0cnlPbkVtcHR5OlshMF0scmV0cnlPbkludmFsaWQ6WyEwXSxwb2xsUGVyaW9kOls1ZTMsW3VlLnJlcXVpcmVkXV0sY29ubmVjdEF0dGVtcHRUaW1lTXM6WzVlMyxbdWUucmVxdWlyZWRdXSxjb25uZWN0QXR0ZW1wdENvdW50Ols1LFt1ZS5yZXF1aXJlZF1dLHdhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXM6WzNlNSxbdWUucmVxdWlyZWRdXSx2YWx1ZXM6W3t9XSxzZWN1cml0eTpbe31dfSksdGhpcy5hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpfXVwZGF0ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKHsuLi50aGlzLmRhdGEudmFsdWUscG9ydDp0aGlzLmRhdGEudmFsdWUudHlwZT09PUhuLlNlcmlhbD9udWxsOnRoaXMuZGF0YS52YWx1ZS5wb3J0LHNlcmlhbFBvcnQ6dGhpcy5kYXRhLnZhbHVlLnR5cGU9PT1Ibi5TZXJpYWw/dGhpcy5kYXRhLnZhbHVlLnBvcnQ6IiIsdmFsdWVzOnthdHRyaWJ1dGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVzPz9bXSx0aW1lc2VyaWVzOnRoaXMuZGF0YS52YWx1ZS50aW1lc2VyaWVzPz9bXSxhdHRyaWJ1dGVVcGRhdGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6dGhpcy5kYXRhLnZhbHVlLnJwYz8/W119fSl9b2JzZXJ2ZVR5cGVDaGFuZ2UoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbnRyb2xzRW5hYmxpbmcoZSksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlQ29udHJvbHNFbmFibGluZyhlKXtjb25zdFt0LG5dPWU9PT1Ibi5TZXJpYWw/W3RoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cyx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXNdOlt0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXMsdGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzXTt0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKSx0aGlzLnVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcodGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlKX1vYnNlcnZlU2hvd1NlY3VyaXR5KCl7dGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlU2VjdXJpdHlFbmFibGluZyhlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcoZSl7ZSYmdGhpcy5wcm90b2NvbFR5cGUhPT1Ibi5TZXJpYWw/dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgic2VjdXJpdHkiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmhvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fWUoIk1vZGJ1c1NsYXZlRGlhbG9nQWJzdHJhY3QiLGhvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpvdC5TdG9yZX0se3R5cGU6aXQuUm91dGVyfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOltYZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nUmVmfV19KTtjbGFzcyB4byBleHRlbmRzIGhve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LG4sYSxvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9b31nZXRTbGF2ZVJlc3VsdERhdGEoKXtjb25zdHt2YWx1ZXM6ZSx0eXBlOnQsc2VyaWFsUG9ydDpuLC4uLmF9PXRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAudmFsdWUsbz17Li4uYSx0eXBlOnQsLi4uZX07cmV0dXJuIHQ9PT1Ibi5TZXJpYWwmJihvLnBvcnQ9biksby5yZXBvcnRTdHJhdGVneXx8ZGVsZXRlIG8ucmVwb3J0U3RyYXRlZ3ksb31hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuYWRkQ29udHJvbCgicmVwb3J0U3RyYXRlZ3kiLHRoaXMuZmIuY29udHJvbChudWxsKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp4byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp4byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNTbGF2ZURpYWxvZ0NvbXBvbmVudCIseG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCx5byxibyx3YSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzbGF2ZXMtY29uZmlnLWNvbnRhaW5lciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IFwnZ2F0ZXdheS5zZXJ2ZXItc2xhdmVcJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0ibW9kYnVzSGVscExpbmsiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IFtmb3JtR3JvdXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgIDxkaXYgY2xhc3M9InN0cm9rZWQgdGItZm9ybS1wYW5lbCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItY29ubmVjdGlvbjwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c1Byb3RvY29sVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldCh0eXBlKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgZWxzZSBzZXJpYWxQb3J0IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zZXJpYWwtcG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InNlcmlhbFBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3NlcmlhbFBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZnJhbWVyLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5Lm1ldGhvZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIHByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCA/IG1vZGJ1c1NlcmlhbE1ldGhvZFR5cGVzIDogbW9kYnVzTWV0aG9kVHlwZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJtZXRob2QiPnt7IE1vZGJ1c01ldGhvZExhYmVsc01hcC5nZXQobWV0aG9kKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYmF1ZHJhdGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYmF1ZHJhdGU8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJhdWRyYXRlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHJhdGUgb2YgbW9kYnVzQmF1ZHJhdGVzIiBbdmFsdWVdPSJyYXRlIj57eyByYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGVzaXplXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGVzaXplPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlc2l6ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzaXplIG9mIG1vZGJ1c0J5dGVTaXplcyIgW3ZhbHVlXT0ic2l6ZSI+e3sgc2l6ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdG9wYml0c1wnIHwgdHJhbnNsYXRlIH19IiAgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcGJpdHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InN0b3BiaXRzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wYXJpdHlcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucGFyaXR5PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJwYXJpdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgcGFyaXR5IG9mIG1vZGJ1c1Bhcml0aWVzIiBbdmFsdWVdPSJwYXJpdHkiPnt7IE1vZGJ1c1Bhcml0eUxhYmVsc01hcC5nZXQocGFyaXR5KSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzdHJpY3QiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnN0cmljdFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RyaWN0XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMudW5pdC1pZFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS51bml0LWlkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1bml0SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51bml0LWlkLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwndW5pdElkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtcHJvZmlsZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VUeXBlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0iZGF0YS5oaWRlTmV3RmllbGRzIGVsc2UgcmVwb3J0U3RyYXRlZ3kiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtZGF0YS1vbi1jaGFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZXBvcnRTdHJhdGVneT5cbiAgICAgICAgICA8dGItcmVwb3J0LXN0cmF0ZWd5IFtkZWZhdWx0VmFsdWVdPSJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZS5EZXZpY2UiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0U3RyYXRlZ3kiIFtpc0V4cGFuc2lvbk1vZGVdPSJ0cnVlIi8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdGlvbi10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rpb24tdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlLW9yZGVyXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGUtb3JkZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJ5dGVPcmRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgb3JkZXIgb2YgbW9kYnVzT3JkZXJUeXBlIiBbdmFsdWVdPSJvcmRlciI+e3sgb3JkZXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud29yZC1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS53b3JkLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ3b3JkT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50bHMtY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIGNsYXNzPSJzZWN1cml0eS1jb25maWciIGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHkiPjwvdGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZz5cbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cmllcyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnJldHJpZXNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRyeU9uRW1wdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWVtcHR5XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkludmFsaWQiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb2xsLXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXkucG9sbC1wZXJpb2RcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC10aW1lXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC10aW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjb25uZWN0QXR0ZW1wdFRpbWVNcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdC1hdHRlbXB0LWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC1jb3VudDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRDb3VudCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHNcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9IndhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICA8dGItbW9kYnVzLXZhbHVlcyBbc2luZ2xlTW9kZV09InRydWUiIFtoaWRlTmV3RmllbGRzXT0iZGF0YS5oaWRlTmV3RmllbGRzIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmludmFsaWQgfHwgIXNsYXZlQ29uZmlnRm9ybUdyb3VwLmRpcnR5Ij5cbiAgICAgIHt7IGRhdGEuYnV0dG9uVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuc2xhdmVzLWNvbmZpZy1jb250YWluZXJ7d2lkdGg6ODB2dzttYXgtd2lkdGg6OTAwcHh9Omhvc3QgLnNsYXZlLW5hbWUtbGFiZWx7bWFyZ2luLXJpZ2h0OjE2cHg7Y29sb3I6IzAwMDAwMGRlfTpob3N0IC5maXhlZC10aXRsZS13aWR0aC0yNjB7bWluLXdpZHRoOjI2MHB4fTpob3N0IDo6bmctZGVlcCAuc2VjdXJpdHktY29uZmlnIC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6MjMwcHh9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn1dfSk7Y2xhc3Mgdm8gZXh0ZW5kcyBob3tjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKGUsdCxuLGEsbyksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnJvdXRlcj1uLHRoaXMuZGF0YT1hLHRoaXMuZGlhbG9nUmVmPW99Z2V0U2xhdmVSZXN1bHREYXRhKCl7Y29uc3R7dmFsdWVzOmUsdHlwZTp0LHNlcmlhbFBvcnQ6biwuLi5hfT10aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlLG89ey4uLmEsdHlwZTp0LC4uLmV9O3JldHVybiB0PT09SG4uU2VyaWFsJiYoby5wb3J0PW4pLG99YWRkRmllbGRzVG9Gb3JtR3JvdXAoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmFkZENvbnRyb2woInNlbmREYXRhT25seU9uQ2hhbmdlIix0aGlzLmZiLmNvbnRyb2woITEpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnZvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lTbGF2ZURpYWxvZ0NvbXBvbmVudCIsdm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktc2xhdmUtZGlhbG9nIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQseW8sYm8sd2EsZ29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9XX0pO2NsYXNzIHdve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy50cmFuc2xhdGU9ZSx0aGlzLmRpYWxvZz10LHRoaXMuZGlhbG9nU2VydmljZT1uLHRoaXMuZmI9YSx0aGlzLmNkcj1vLHRoaXMuaXNMZWdhY3k9ITEsdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2g9dGhpcy5mYi5jb250cm9sKCIiLHtub25OdWxsYWJsZTohMH0pLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFzdGVyRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3NsYXZlczp0aGlzLmZiLmFycmF5KFtdKX0pLHRoaXMuZGF0YVNvdXJjZT1uZXcgQ299Z2V0IHNsYXZlcygpe3JldHVybiB0aGlzLm1hc3RlckZvcm1Hcm91cC5nZXQoInNsYXZlcyIpfW5nT25Jbml0KCl7dGhpcy5tYXN0ZXJGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlVGFibGVEYXRhKGUuc2xhdmVzKSx0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50ZXh0U2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFZlKDE1MCksQmUoKChlLHQpPT4oZT8/IiIpPT09dC50cmltKCkpKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSxlLnRyaW0oKSkpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5zbGF2ZXMuY2xlYXIoKSx0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKGUuc2xhdmVzKX1lbnRlckZpbHRlck1vZGUoKXt0aGlzLnRleHRTZWFyY2hNb2RlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtjb25zdCBlPXRoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50O2UuZm9jdXMoKSxlLnNldFNlbGVjdGlvblJhbmdlKDAsMCl9ZXhpdEZpbHRlck1vZGUoKXt0aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1pZSh0KSxhPW4/dGhpcy5zbGF2ZXMuYXQodCkudmFsdWU6e307dGhpcy5nZXRTbGF2ZURpYWxvZyhhLG4/ImFjdGlvbi5hcHBseSI6ImFjdGlvbi5hZGQiKS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihuP3RoaXMuc2xhdmVzLmF0KHQpLnBhdGNoVmFsdWUoZSk6dGhpcy5zbGF2ZXMucHVzaCh0aGlzLmZiLmNvbnRyb2woZSkpLHRoaXMubWFzdGVyRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfWdldFNsYXZlRGlhbG9nKGUsdCl7cmV0dXJuIHRoaXMuaXNMZWdhY3k/dGhpcy5kaWFsb2cub3Blbih2byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e3ZhbHVlOmUsaGlkZU5ld0ZpZWxkczohMCxidXR0b25UaXRsZTp0fX0pOnRoaXMuZGlhbG9nLm9wZW4oeG8se2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOnt2YWx1ZTplLGJ1dHRvblRpdGxlOnQsaGlkZU5ld0ZpZWxkczohMX19KX1kZWxldGVTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtc2xhdmUtdGl0bGUiKSwiIix0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJih0aGlzLnNsYXZlcy5yZW1vdmVBdCh0KSx0aGlzLm1hc3RlckZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpKX0pKX11cGRhdGVUYWJsZURhdGEoZSx0KXt0JiYoZT1lLmZpbHRlcigoZT0+T2JqZWN0LnZhbHVlcyhlKS5zb21lKChlPT5lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpKSkpKSksdGhpcy5kYXRhU291cmNlLmxvYWREYXRhKGUpfXB1c2hEYXRhQXNGb3JtQXJyYXlzKGUpe2U/Lmxlbmd0aCYmZS5mb3JFYWNoKChlPT50aGlzLnNsYXZlcy5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOndvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpYLkRpYWxvZ1NlcnZpY2V9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOndvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOntpc0xlZ2FjeToiaXNMZWdhY3kifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6InNlYXJjaElucHV0RmllbGQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInNlYXJjaElucHV0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJwaXBlIix0eXBlOl8uQXN5bmNQaXBlLG5hbWU6ImFzeW5jIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpodC5NYXRNZW51LHNlbGVjdG9yOiJtYXQtbWVudSIsaW5wdXRzOlsiYmFja2Ryb3BDbGFzcyIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwieFBvc2l0aW9uIiwieVBvc2l0aW9uIiwib3ZlcmxhcFRyaWdnZXIiLCJoYXNCYWNrZHJvcCIsImNsYXNzIiwiY2xhc3NMaXN0Il0sb3V0cHV0czpbImNsb3NlZCIsImNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6aHQuTWF0TWVudVRyaWdnZXIsc2VsZWN0b3I6IlttYXQtbWVudS10cmlnZ2VyLWZvcl0sIFttYXRNZW51VHJpZ2dlckZvcl0iLGlucHV0czpbIm1hdC1tZW51LXRyaWdnZXItZm9yIiwibWF0TWVudVRyaWdnZXJGb3IiLCJtYXRNZW51VHJpZ2dlckRhdGEiLCJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyJdLG91dHB1dHM6WyJtZW51T3BlbmVkIiwib25NZW51T3BlbiIsIm1lbnVDbG9zZWQiLCJvbk1lbnVDbG9zZSJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFRhYmxlLHNlbGVjdG9yOiJtYXQtdGFibGUsIHRhYmxlW21hdC10YWJsZV0iLGV4cG9ydEFzOlsibWF0VGFibGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGxEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJSb3dEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJSb3dEZWZdIixpbnB1dHM6WyJtYXRIZWFkZXJSb3dEZWYiLCJtYXRIZWFkZXJSb3dEZWZTdGlja3kiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENvbHVtbkRlZixzZWxlY3RvcjoiW21hdENvbHVtbkRlZl0iLGlucHV0czpbIm1hdENvbHVtbkRlZiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbERlZixzZWxlY3RvcjoiW21hdENlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdFJvd0RlZixzZWxlY3RvcjoiW21hdFJvd0RlZl0iLGlucHV0czpbIm1hdFJvd0RlZkNvbHVtbnMiLCJtYXRSb3dEZWZXaGVuIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsLHNlbGVjdG9yOiJtYXQtaGVhZGVyLWNlbGwsIHRoW21hdC1oZWFkZXItY2VsbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbCxzZWxlY3RvcjoibWF0LWNlbGwsIHRkW21hdC1jZWxsXSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRIZWFkZXJSb3csc2VsZWN0b3I6Im1hdC1oZWFkZXItcm93LCB0clttYXQtaGVhZGVyLXJvd10iLGV4cG9ydEFzOlsibWF0SGVhZGVyUm93Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRSb3csc2VsZWN0b3I6Im1hdC1yb3csIHRyW21hdC1yb3ddIixleHBvcnRBczpbIm1hdFJvdyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFNob3dIaWRlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeFNob3ddLCBbZnhTaG93LnByaW50XSwgIFtmeFNob3cueHNdLCBbZnhTaG93LnNtXSwgW2Z4U2hvdy5tZF0sIFtmeFNob3cubGddLCBbZnhTaG93LnhsXSwgIFtmeFNob3cubHQtc21dLCBbZnhTaG93Lmx0LW1kXSwgW2Z4U2hvdy5sdC1sZ10sIFtmeFNob3cubHQteGxdLCAgW2Z4U2hvdy5ndC14c10sIFtmeFNob3cuZ3Qtc21dLCBbZnhTaG93Lmd0LW1kXSwgW2Z4U2hvdy5ndC1sZ10sICBbZnhIaWRlXSwgW2Z4SGlkZS5wcmludF0sICBbZnhIaWRlLnhzXSwgW2Z4SGlkZS5zbV0sIFtmeEhpZGUubWRdLCBbZnhIaWRlLmxnXSwgW2Z4SGlkZS54bF0sICBbZnhIaWRlLmx0LXNtXSwgW2Z4SGlkZS5sdC1tZF0sIFtmeEhpZGUubHQtbGddLCBbZnhIaWRlLmx0LXhsXSwgIFtmeEhpZGUuZ3QteHNdLCBbZnhIaWRlLmd0LXNtXSwgW2Z4SGlkZS5ndC1tZF0sIFtmeEhpZGUuZ3QtbGddIixpbnB1dHM6WyJmeFNob3ciLCJmeFNob3cucHJpbnQiLCJmeFNob3cueHMiLCJmeFNob3cuc20iLCJmeFNob3cubWQiLCJmeFNob3cubGciLCJmeFNob3cueGwiLCJmeFNob3cubHQtc20iLCJmeFNob3cubHQtbWQiLCJmeFNob3cubHQtbGciLCJmeFNob3cubHQteGwiLCJmeFNob3cuZ3QteHMiLCJmeFNob3cuZ3Qtc20iLCJmeFNob3cuZ3QtbWQiLCJmeFNob3cuZ3QtbGciLCJmeEhpZGUiLCJmeEhpZGUucHJpbnQiLCJmeEhpZGUueHMiLCJmeEhpZGUuc20iLCJmeEhpZGUubWQiLCJmeEhpZGUubGciLCJmeEhpZGUueGwiLCJmeEhpZGUubHQtc20iLCJmeEhpZGUubHQtbWQiLCJmeEhpZGUubHQtbGciLCJmeEhpZGUubHQteGwiLCJmeEhpZGUuZ3QteHMiLCJmeEhpZGUuZ3Qtc20iLCJmeEhpZGUuZ3QtbWQiLCJmeEhpZGUuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNNYXN0ZXJUYWJsZUNvbXBvbmVudCIsd28pLEhlKFt4dCgpXSx3by5wcm90b3R5cGUsImlzTGVnYWN5Iix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntzZWFyY2hJbnB1dEZpZWxkOlt7dHlwZTpvLGFyZ3M6WyJzZWFyY2hJbnB1dCJdfV0saXNMZWdhY3k6W3t0eXBlOmF9XX19KTtjbGFzcyBDbyBleHRlbmRzIFJ7Y29uc3RydWN0b3IoKXtzdXBlcigpfX1lKCJTbGF2ZXNEYXRhc291cmNlIixDbyk7Y2xhc3MgVG8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5lbmFibGVTbGF2ZUNvbnRyb2w9bmV3IHllKCExKSx0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVTbGF2ZUVuYWJsaW5nKGUpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzbGF2ZSIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohIXRoaXMub25DaGFuZ2V9KX0pKX13cml0ZVZhbHVlKGUpe3N1cGVyLndyaXRlVmFsdWUoZSksdGhpcy5vbkVuYWJsZVNsYXZlQ29udHJvbChlKX12YWxpZGF0ZSgpe2NvbnN0e21hc3RlcjplLHNsYXZlOnR9PXRoaXMuYmFzaWNGb3JtR3JvdXAudmFsdWUsbj0hZT8uc2xhdmVzPy5sZW5ndGgmJihlZSh0LHt9KXx8IXQpO3JldHVybiF0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkfHxuP3tiYXNpY0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fTpudWxsfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXN0ZXI6W10sc2xhdmU6W119KX11cGRhdGVTbGF2ZUVuYWJsaW5nKGUpe2U/dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInNsYXZlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgic2xhdmUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1vbkVuYWJsZVNsYXZlQ29udHJvbChlKXt0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC5zZXRWYWx1ZSghIWUuc2xhdmUmJiFlZShlLnNsYXZlLHt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpUbyxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6VG8sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnR9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdEaXJlY3RpdmUiLFRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W119KTtjbGFzcyBTb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNQcm90b2NvbExhYmVsc01hcD16bix0aGlzLk1vZGJ1c01ldGhvZExhYmVsc01hcD1Lbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c09yZGVyVHlwZT1PYmplY3QudmFsdWVzKEpuKSx0aGlzLk1vZGJ1c1Byb3RvY29sVHlwZT1Ibix0aGlzLm1vZGJ1c0JhdWRyYXRlcz1sYSx0aGlzLmlzU2xhdmVFbmFibGVkPSExLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSJdLHRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cz1bInBvcnQiLCJzZWN1cml0eSIsImhvc3QiXSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0huLlRDUF0saG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSxzZXJpYWxQb3J0OlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2Q6W1duLlNPQ0tFVF0sdW5pdElkOltudWxsLFt1ZS5yZXF1aXJlZF1dLGJhdWRyYXRlOlt0aGlzLm1vZGJ1c0JhdWRyYXRlc1swXV0sZGV2aWNlTmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlVHlwZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9sbFBlcmlvZDpbNWUzLFt1ZS5yZXF1aXJlZF1dLHNlbmREYXRhVG9UaGluZ3NCb2FyZDpbITFdLGJ5dGVPcmRlcjpbSm4uQklHXSx3b3JkT3JkZXI6W0puLkJJR10sc2VjdXJpdHk6W10saWRlbnRpdHk6dGhpcy5mYi5ncm91cCh7dmVuZG9yTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdENvZGU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHZlbmRvclVybDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdE5hbWU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLG1vZGVsTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx2YWx1ZXM6W119KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCl9Z2V0IHByb3RvY29sVHlwZSgpe3JldHVybiB0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzbGF2ZUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5wYXRjaFZhbHVlKCEhZS5zZWN1cml0eSYmIWVlKGUuc2VjdXJpdHkse30pKSx0aGlzLnVwZGF0ZVNsYXZlQ29uZmlnKGUpfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5pc1NsYXZlRW5hYmxlZD0hZSx0aGlzLnVwZGF0ZUZvcm1FbmFibGVTdGF0ZSgpfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PntlLnR5cGU9PT1Ibi5TZXJpYWwmJihlLnBvcnQ9ZS5zZXJpYWxQb3J0LGRlbGV0ZSBlLnNlcmlhbFBvcnQpLHRoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlRm9ybUVuYWJsZVN0YXRlKCksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUVuYWJsZVN0YXRlKCl7dGhpcy5pc1NsYXZlRW5hYmxlZD8odGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpLHRoaXMudXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCksdGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZSh0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWUpfW9ic2VydmVTaG93U2VjdXJpdHkoKXt0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZShlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxlKGUpe2UmJnRoaXMuaXNTbGF2ZUVuYWJsZWQmJnRoaXMucHJvdG9jb2xUeXBlIT09SG4uU2VyaWFsP3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJzZWN1cml0eSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCl7Y29uc3QgZT10aGlzLnByb3RvY29sVHlwZT09PUhuLlNlcmlhbCx0PWU/dGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cyxuPWU/dGhpcy50Y3BVZHBTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5czt0aGlzLmlzU2xhdmVFbmFibGVkJiZ0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKX11cGRhdGVTbGF2ZUNvbmZpZyhlKXtjb25zdHt0eXBlOnQ9SG4uVENQLG1ldGhvZDpuPVduLlJUVSx1bml0SWQ6YT0wLGRldmljZU5hbWU6bz0iIixkZXZpY2VUeXBlOmk9IiIscG9sbFBlcmlvZDpyPTVlMyxzZW5kRGF0YVRvVGhpbmdzQm9hcmQ6cz0hMSxieXRlT3JkZXI6bD1Kbi5CSUcsd29yZE9yZGVyOmM9Sm4uQklHLHNlY3VyaXR5OnA9e30saWRlbnRpdHk6bT17dmVuZG9yTmFtZToiIixwcm9kdWN0Q29kZToiIix2ZW5kb3JVcmw6IiIscHJvZHVjdE5hbWU6IiIsbW9kZWxOYW1lOiIifSx2YWx1ZXM6ZD17fSxiYXVkcmF0ZTp1PXRoaXMubW9kYnVzQmF1ZHJhdGVzWzBdLGhvc3Q6Zz0iIixwb3J0OmY9bnVsbH09ZSx5PXt0eXBlOnQsbWV0aG9kOm4sdW5pdElkOmEsZGV2aWNlTmFtZTpvLGRldmljZVR5cGU6aSxwb2xsUGVyaW9kOnIsc2VuZERhdGFUb1RoaW5nc0JvYXJkOiEhcyxieXRlT3JkZXI6bCx3b3JkT3JkZXI6YyxzZWN1cml0eTpwLGlkZW50aXR5Om0sdmFsdWVzOmQsYmF1ZHJhdGU6dSxob3N0OnQ9PT1Ibi5TZXJpYWw/IiI6Zyxwb3J0OnQ9PT1Ibi5TZXJpYWw/bnVsbDpmLHNlcmlhbFBvcnQ6dD09PUhuLlNlcmlhbD9mOiIifTt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnNldFZhbHVlKHkse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnlvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtdmFsdWVzIixpbnB1dHM6WyJzaW5nbGVNb2RlIiwiaGlkZU5ld0ZpZWxkcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJpc01hc3RlciJdfSx7a2luZDoicGlwZSIsdHlwZTp3YSxuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+U28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELHlvLGJvLHdhLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dfSk7Y2xhc3Mga28gZXh0ZW5kcyBUb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc0xlZ2FjeT0hMX1tYXBDb25maWdUb0Zvcm1WYWx1ZSh7bWFzdGVyOmUsc2xhdmU6dH0pe3JldHVybnttYXN0ZXI6ZT8uc2xhdmVzP2U6e3NsYXZlczpbXX0sc2xhdmU6dD8/e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTprbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1iYXNpYy1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5rbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpTbyxzZWxlY3RvcjoidGItbW9kYnVzLXNsYXZlLWNvbmZpZyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d28sc2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGlucHV0czpbImlzTGVnYWN5Il19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdDb21wb25lbnQiLGtvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmtvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+a28pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBMbyBleHRlbmRzIFRve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzTGVnYWN5PSEwfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXI/LnNsYXZlcz9lLm1hc3Rlcjp7c2xhdmVzOltdfSxzbGF2ZTplLnNsYXZlP2hhLm1hcFNsYXZlVG9VcGdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6TG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubWFzdGVyLWNvbm5lY3Rpb25zXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDx0Yi1tb2RidXMtbWFzdGVyLXRhYmxlIFtpc0xlZ2FjeV09ImlzTGVnYWN5IiBmb3JtQ29udHJvbE5hbWU9Im1hc3RlciI+PC90Yi1tb2RidXMtbWFzdGVyLXRhYmxlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIiPnt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMtc2VydmVyXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIFtmb3JtQ29udHJvbF09ImVuYWJsZVNsYXZlQ29udHJvbCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8dGItbW9kYnVzLXNsYXZlLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNsYXZlIj48L3RiLW1vZGJ1cy1zbGF2ZS1jb25maWc+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlNvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2xhdmUtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3byxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOlsiaXNMZWdhY3kiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lCYXNpY0NvbmZpZ0NvbXBvbmVudCIsTG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBGbyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm1hcHBpbmdUeXBlcz1mbix0aGlzLmlzTGVnYWN5PSEwfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXBwaW5nOltdLHNlcnZlcjpbXX0pfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybntzZXJ2ZXI6ZS5zZXJ2ZXI/eGEubWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZS5zZXJ2ZXIpOnt9LG1hcHBpbmc6ZS5zZXJ2ZXI/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUuc2VydmVyLm1hcHBpbmcpOltdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24oZSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Rm8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Rm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+Rm8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5GbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgSW8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5NYXBwaW5nVHlwZT1mbn1pbml0QmFzaWNGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7bWFwcGluZzpbXSxyZXF1ZXN0c01hcHBpbmc6W10sYnJva2VyOltdLHdvcmtlcnM6W119KX1nZXRSZXF1ZXN0RGF0YUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGxlKGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChuPT57Zm9yKGNvbnN0IGEgb2YgZVtuXSl0LnB1c2goe3JlcXVlc3RUeXBlOm4scmVxdWVzdFZhbHVlOmF9KX0pKSx0fWdldFJlcXVlc3REYXRhT2JqZWN0KGUpe3JldHVybiBlLnJlZHVjZSgoKGUse3JlcXVlc3RUeXBlOnQscmVxdWVzdFZhbHVlOm59KT0+KGVbdF0ucHVzaChuKSxlKSkse2Nvbm5lY3RSZXF1ZXN0czpbXSxkaXNjb25uZWN0UmVxdWVzdHM6W10sYXR0cmlidXRlUmVxdWVzdHM6W10sYXR0cmlidXRlVXBkYXRlczpbXSxzZXJ2ZXJTaWRlUnBjOltdfSl9Z2V0QnJva2VyTWFwcGVkVmFsdWUoZSx0KXtyZXR1cm57Li4uZSxtYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnM/PzEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcj8/MTB9fXdyaXRlVmFsdWUoZSl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLm1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOklvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6SW8sZGVjb3JhdG9yczpbe3R5cGU6c31dfSk7Y2xhc3MgQW8gZXh0ZW5kcyBJb3ttYXBDb25maWdUb0Zvcm1WYWx1ZShlKXtjb25zdHticm9rZXI6dCxtYXBwaW5nOm49W10sY29ubmVjdFJlcXVlc3RzOmE9W10sZGlzY29ubmVjdFJlcXVlc3RzOm89W10sYXR0cmlidXRlUmVxdWVzdHM6aT1bXSxhdHRyaWJ1dGVVcGRhdGVzOnI9W10sc2VydmVyU2lkZVJwYzpzPVtdfT1lLGw9bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmEsZGlzY29ubmVjdFJlcXVlc3RzOm8sYXR0cmlidXRlUmVxdWVzdHM6aSxhdHRyaWJ1dGVVcGRhdGVzOnIsc2VydmVyU2lkZVJwYzpzfSk7cmV0dXJue3dvcmtlcnM6dCYmKHQubWF4TnVtYmVyT2ZXb3JrZXJzfHx0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXIpP3ttYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnMsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjp0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJ9Ont9LG1hcHBpbmc6bWEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKG4pfHxbXSxicm9rZXI6dHx8e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShsKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e30saT1vPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fTtyZXR1cm57YnJva2VyOnRoaXMuZ2V0QnJva2VyTWFwcGVkVmFsdWUodCxuKSxtYXBwaW5nOm1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGEpLC4uLm1hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihpKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpBbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuYnJva2VyLmNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJicm9rZXIiPjwvdGItYnJva2VyLWNvbmZpZy1jb250cm9sPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZGF0YS1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJtYXBwaW5nIiBbcmVxdWlyZWRdPSJ0cnVlIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5EQVRBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RzTWFwcGluZyIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuUkVRVUVTVFMiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LndvcmtlcnMtc2V0dGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICA8dGItd29ya2Vycy1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9IndvcmtlcnMiPjwvdGItd29ya2Vycy1jb25maWctY29udHJvbD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuPC9tYXQtdGFiLWdyb3VwPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dW8sc2VsZWN0b3I6InRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm1vLHNlbGVjdG9yOiJ0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLXRhYmxlIixpbnB1dHM6WyJyZXF1aXJlZCIsIm1hcHBpbmdUeXBlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxsbyx1byxtbyxyb10sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmJyb2tlci5jb25uZWN0aW9uXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItYnJva2VyLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0iYnJva2VyIj48L3RiLWJyb2tlci1jb25maWctY29udHJvbD5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuREFUQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkucmVxdWVzdHMtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0c01hcHBpbmciIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS53b3JrZXJzLXNldHRpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgPHRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJ3b3JrZXJzIj48L3RiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2w+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2hlaWdodDoxMDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBObyBleHRlbmRzIElve21hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe2NvbnN0e2Jyb2tlcjp0LG1hcHBpbmc6bj1bXSxyZXF1ZXN0c01hcHBpbmc6YX09ZTtyZXR1cm57d29ya2Vyczp0JiYodC5tYXhOdW1iZXJPZldvcmtlcnN8fHQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcik/e21heE51bWJlck9mV29ya2Vyczp0Lm1heE51bWJlck9mV29ya2VycyxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcn06e30sbWFwcGluZzpuPz9bXSxicm9rZXI6dD8/e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShhKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e307cmV0dXJue2Jyb2tlcjp0aGlzLmdldEJyb2tlck1hcHBlZFZhbHVlKHQsbiksbWFwcGluZzphLHJlcXVlc3RzTWFwcGluZzpvPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpObyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpObyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtYmFzaWMtY29uZmlnIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Tm8pKSxtdWx0aTohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiLHNlbGVjdG9yOiJtYXQtdGFiIixpbnB1dHM6WyJkaXNhYmxlZCIsImxhYmVsIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImxhYmVsQ2xhc3MiLCJib2R5Q2xhc3MiXSxleHBvcnRBczpbIm1hdFRhYiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiR3JvdXAsc2VsZWN0b3I6Im1hdC10YWItZ3JvdXAiLGlucHV0czpbImNvbG9yIiwiZml0SW5rQmFyVG9Db250ZW50IiwibWF0LXN0cmV0Y2gtdGFicyIsImR5bmFtaWNIZWlnaHQiLCJzZWxlY3RlZEluZGV4IiwiaGVhZGVyUG9zaXRpb24iLCJhbmltYXRpb25EdXJhdGlvbiIsImNvbnRlbnRUYWJJbmRleCIsImRpc2FibGVQYWdpbmF0aW9uIiwiZGlzYWJsZVJpcHBsZSIsInByZXNlcnZlQ29udGVudCIsImJhY2tncm91bmRDb2xvciIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiXSxvdXRwdXRzOlsic2VsZWN0ZWRJbmRleENoYW5nZSIsImZvY3VzQ2hhbmdlIiwiYW5pbWF0aW9uRG9uZSIsInNlbGVjdGVkVGFiQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1byxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6bW8sc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5vLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tcXR0LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8sdW8sbW8scm9dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgTW97aXNFcnJvclN0YXRlKGUpe3JldHVybiBlJiZlLmludmFsaWR9fWUoIkZvcmNlRXJyb3JTdGF0ZU1hdGNoZXIiLE1vKTtjbGFzcyBFbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5mYj10LHRoaXMudHJhbnNsYXRlPW4sdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWEsdGhpcy5kaWFsb2dTZXJ2aWNlPW8sdGhpcy5kaWFsb2c9aSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZT1yLHRoaXMuem9uZT1zLHRoaXMudXRpbHM9bCx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1jLHRoaXMuY2Q9cCx0aGlzLkNvbm5lY3RvclR5cGU9X3QsdGhpcy5hbGxvd0Jhc2ljQ29uZmlnPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5nYXRld2F5TG9nTGV2ZWw9T2JqZWN0LnZhbHVlcyhNdCksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiZW5hYmxlZCIsImtleSIsInR5cGUiLCJzeW5jU3RhdHVzIiwiZXJyb3JzIiwiYWN0aW9ucyJdLHRoaXMuR2F0ZXdheUNvbm5lY3RvclR5cGVzVHJhbnNsYXRlc01hcD1IdCx0aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcz1vbix0aGlzLlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlPWxuLHRoaXMubW9kZT10aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyx0aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3Q9bmV3IFNlLHRoaXMuYWN0aXZlRGF0YT1bXSx0aGlzLmluYWN0aXZlRGF0YT1bXSx0aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGE9W10sdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy5vbkVycm9yc1VwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfX0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0PW5ldyBTZSx0aGlzLmluaXREYXRhU291cmNlcygpLHRoaXMuaW5pdENvbm5lY3RvckZvcm0oKSx0aGlzLm9ic2VydmVBdHRyaWJ1dGVDaGFuZ2UoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGFTb3VyY2Uuc29ydD10aGlzLnNvcnQsdGhpcy5kYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3I9dGhpcy5nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCksdGhpcy5jdHguJHNjb3BlLmdhdGV3YXlDb25uZWN0b3JzPXRoaXMsdGhpcy5sb2FkQ29ubmVjdG9ycygpLHRoaXMubG9hZEdhdGV3YXlTdGF0ZSgpLHRoaXMub2JzZXJ2ZU1vZGVDaGFuZ2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfW9uU2F2ZUNvbm5lY3Rvcigpe3RoaXMuc2F2ZUNvbm5lY3Rvcih0aGlzLmdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKHRoaXMuY29ubmVjdG9yRm9ybS52YWx1ZSksITEpfXNhdmVDb25uZWN0b3IoZSx0PSEwKXtjb25zdCBuPXR8fHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyh0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSk/TC5TSEFSRURfU0NPUEU6TC5TRVJWRVJfU0NPUEU7QWUodGhpcy5nZXRFbnRpdHlBdHRyaWJ1dGVUYXNrcyhlLG4pKS5waXBlKE9lKDEpKS5zdWJzY3JpYmUoKG49Pnt0aGlzLnNob3dUb2FzdCh0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuY29ubmVjdG9yLWNyZWF0ZWQiKTp0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmNvbm5lY3Rvci11cGRhdGVkIikpLHRoaXMuaW5pdGlhbENvbm5lY3Rvcj1lLHRoaXMudXBkYXRlRGF0YSghMCksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9KSl9Z2V0RW50aXR5QXR0cmlidXRlVGFza3MoZSx0KXtjb25zdCBuPVtdLGE9W3trZXk6ZS5uYW1lLHZhbHVlOmV9XSxvPVtdLGk9IXRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TSEFSRURfU0NPUEV8fCF0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TRVJWRVJfU0NPUEUscj10aGlzLmluaXRpYWxDb25uZWN0b3ImJnRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lIT09ZS5uYW1lO3JldHVybiByJiYoby5wdXNoKHtrZXk6dGhpcy5pbml0aWFsQ29ubmVjdG9yLm5hbWV9KSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCExKSksaSYmKHQ9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnMucHVzaChlLm5hbWUpOnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLnB1c2goZS5uYW1lKSksKHJ8fGkpJiZuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2sodCkpLG4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsdCxhKSksby5sZW5ndGgmJm4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSx0LG8pKSxufWdldFNhdmVFbnRpdHlBdHRyaWJ1dGVzVGFzayhlKXtjb25zdCB0PWU9PT1MLlNIQVJFRF9TQ09QRT8iYWN0aXZlX2Nvbm5lY3RvcnMiOiJpbmFjdGl2ZV9jb25uZWN0b3JzIixuPWU9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5zYXZlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxlLFt7a2V5OnQsdmFsdWU6bn1dKX1yZW1vdmVDb25uZWN0b3JGcm9tTGlzdChlLHQpe2NvbnN0IG49dD90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMsYT1uLmluZGV4T2YoZSk7LTEhPT1hJiZuLnNwbGljZShhLDEpfWdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKGUpe2NvbnN0IHQ9ey4uLmV9O3JldHVybiB0LmNvbmZpZ3VyYXRpb249YCR7Y2UodC5uYW1lKX0uanNvbmAsZGVsZXRlIHQuYmFzaWNDb25maWcsdC50eXBlIT09X3QuR1JQQyYmZGVsZXRlIHQua2V5LHQudHlwZSE9PV90LkNVU1RPTSYmZGVsZXRlIHQuY2xhc3MsdC50eXBlPT09X3QuTU9EQlVTJiZ0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0odC5jb25maWdWZXJzaW9uKSYmKHQucmVwb3J0U3RyYXRlZ3l8fCh0LnJlcG9ydFN0cmF0ZWd5PXt0eXBlOnNuLk9uUmVwb3J0UGVyaW9kLHJlcG9ydFBlcmlvZDpsbi5Db25uZWN0b3J9LGRlbGV0ZSB0LnNlbmREYXRhT25seU9uQ2hhbmdlKSksdGhpcy5nYXRld2F5VmVyc2lvbiYmIXQuY29uZmlnVmVyc2lvbiYmKHQuY29uZmlnVmVyc2lvbj10aGlzLmdhdGV3YXlWZXJzaW9uKSx0LnRzPURhdGUubm93KCksdH11cGRhdGVEYXRhKGU9ITEpe3RoaXMucGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5PXRoaXMuc29ydC5hY3RpdmUsdGhpcy5wYWdlTGluay5zb3J0T3JkZXIuZGlyZWN0aW9uPXdbdGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpXSx0aGlzLmF0dHJpYnV0ZURhdGFTb3VyY2UubG9hZEF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5DTElFTlRfU0NPUEUsdGhpcy5wYWdlTGluayxlKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZURhdGE9ZS5kYXRhLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKSx0aGlzLmdlbmVyYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5zZXRDbGllbnREYXRhKGUpfSkpLHRoaXMuaW5hY3RpdmVDb25uZWN0b3JzRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuc2hhcmVkQXR0cmlidXRlRGF0YT1lLmRhdGEuZmlsdGVyKChlPT50aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5jbHVkZXMoZS5rZXkpKSksdGhpcy5jb21iaW5lRGF0YSgpfSkpLHRoaXMuc2VydmVyRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuaW5hY3RpdmVEYXRhPWUuZGF0YS5maWx0ZXIoKGU9PnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKX0pKX1pc0Nvbm5lY3RvclN5bmNlZChlKXtjb25zdCB0PWUudmFsdWU7aWYoIXQudHN8fGUuc2tpcFN5bmN8fCF0aGlzLmlzR2F0ZXdheUFjdGl2ZSlyZXR1cm4hMTtpZigtMT09PXRoaXMuYWN0aXZlRGF0YS5maW5kSW5kZXgoKGU9Pigic3RyaW5nIj09dHlwZW9mIGUudmFsdWU/SlNPTi5wYXJzZShlLnZhbHVlKTplLnZhbHVlKS5uYW1lPT09dC5uYW1lKSkpcmV0dXJuITE7cmV0dXJuLTEhPT10aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGEuZmluZEluZGV4KChlPT57Y29uc3Qgbj1lLnZhbHVlLGE9bi5uYW1lPT09dC5uYW1lLG89ZWUobi5jb25maWd1cmF0aW9uSnNvbix7fSkmJmEsaT10aGlzLmhhc1NhbWVDb25maWcobi5jb25maWd1cmF0aW9uSnNvbix0LmNvbmZpZ3VyYXRpb25Kc29uKSxyPW4udHMmJm4udHM8PXQudHM7cmV0dXJuIGEmJnImJihpfHxvKX0pKX1oYXNTYW1lQ29uZmlnKGUsdCl7Y29uc3R7bmFtZTpuLGlkOmEsZW5hYmxlUmVtb3RlTG9nZ2luZzpvLGxvZ0xldmVsOmkscmVwb3J0U3RyYXRlZ3k6cixjb25maWdWZXJzaW9uOnMsLi4ubH09ZSx7bmFtZTpjLGlkOnAsZW5hYmxlUmVtb3RlTG9nZ2luZzptLGxvZ0xldmVsOmQscmVwb3J0U3RyYXRlZ3k6dSxjb25maWdWZXJzaW9uOmcsLi4uZn09dDtyZXR1cm4gZWUobCxmKX1jb21iaW5lRGF0YSgpe2NvbnN0IGU9Wy4uLnRoaXMuYWN0aXZlRGF0YSwuLi50aGlzLmluYWN0aXZlRGF0YSwuLi50aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGFdLnJlZHVjZSgoKGUsdCk9Pntjb25zdCBuPWUuZmluZEluZGV4KChlPT5lLmtleT09PXQua2V5KSk7cmV0dXJuLTE9PT1uP2UucHVzaCh0KTp0Lmxhc3RVcGRhdGVUcz5lW25dLmxhc3RVcGRhdGVUcyYmIXRoaXMuaXNDb25uZWN0b3JTeW5jZWQoZVtuXSkmJihlW25dPXsuLi50LHNraXBTeW5jOiEwfSksZX0pLFtdKTt0aGlzLmRhdGFTb3VyY2UuZGF0YT1lLm1hcCgoZT0+KHsuLi5lLHZhbHVlOiJzdHJpbmciPT10eXBlb2YgZS52YWx1ZT9KU09OLnBhcnNlKGUudmFsdWUpOmUudmFsdWV9KSkpfWNsZWFyT3V0Q29ubmVjdG9yRm9ybSgpe3RoaXMuaW5pdGlhbENvbm5lY3Rvcj1udWxsLHRoaXMuY29ubmVjdG9yRm9ybS5zZXRWYWx1ZSh7bW9kZTpvbi5CQVNJQyxuYW1lOiIiLHR5cGU6X3QuTVFUVCxzZW5kRGF0YU9ubHlPbkNoYW5nZTohMSxlbmFibGVSZW1vdGVMb2dnaW5nOiExLGxvZ0xldmVsOk10LklORk8sa2V5OiJhdXRvIixjbGFzczoiIixjb25maWd1cmF0aW9uOiIiLGNvbmZpZ3VyYXRpb25Kc29uOnt9LGJhc2ljQ29uZmlnOnt9LGNvbmZpZ1ZlcnNpb246IiIscmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9c2VsZWN0Q29ubmVjdG9yKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPXQudmFsdWU7bj8ubmFtZSE9PXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZSYmdGhpcy5jb25maXJtQ29ubmVjdG9yQ2hhbmdlKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5zZXRGb3JtVmFsdWUobil9KSl9aXNTYW1lQ29ubmVjdG9yKGUpe2lmKCF0aGlzLmluaXRpYWxDb25uZWN0b3IpcmV0dXJuITE7Y29uc3QgdD1lLnZhbHVlO3JldHVybiB0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZT09PXQubmFtZX1zaG93VG9hc3QoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh7dHlwZToiW05vdGlmaWNhdGlvbl0gU2hvdyIsbm90aWZpY2F0aW9uOnttZXNzYWdlOmUsdHlwZToic3VjY2VzcyIsZHVyYXRpb246MWUzLHZlcnRpY2FsUG9zaXRpb246InRvcCIsaG9yaXpvbnRhbFBvc2l0aW9uOiJsZWZ0Iix0YXJnZXQ6ImRhc2hib2FyZFJvb3QiLGZvcmNlRGlzbWlzczohMH19KX1yZXR1cm5UeXBlKGUpe2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4gdGhpcy5HYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldCh0LnR5cGUpfWRlbGV0ZUNvbm5lY3RvcihlLHQpe3Q/LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49YERlbGV0ZSBjb25uZWN0b3IgIiR7ZS5rZXl9Ij9gO3RoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG4sIkFsbCBjb25uZWN0b3IgZGF0YSB3aWxsIGJlIGRlbGV0ZWQuIiwiQ2FuY2VsIiwiRGVsZXRlIikucGlwZShPZSgxKSxVZSgodD0+e2lmKCF0KXJldHVybjtjb25zdCBuPVtdLGE9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUudmFsdWU/Lm5hbWUpP0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVybiBuLnB1c2godGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmRlbGV0ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsYSxbZV0pKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCExKSxuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2soYSkpLEFlKG4pfSkpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSE9PWUua2V5fHwodGhpcy5jbGVhck91dENvbm5lY3RvckZvcm0oKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSx0aGlzLmNvbm5lY3RvckZvcm0uZGlzYWJsZSgpKSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWNvbm5lY3RvckxvZ3MoZSx0KXt0JiZ0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49Sih0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIuZ2V0U3RhdGVQYXJhbXMoKSk7bi5jb25uZWN0b3JfbG9ncz1lLG4udGFyZ2V0RW50aXR5UGFyYW1OYW1lPSJjb25uZWN0b3JfbG9ncyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX2xvZ3MiLG4pfWNvbm5lY3RvclJwYyhlLHQpe3QmJnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTtuLmNvbm5lY3Rvcl9ycGM9ZSxuLnRhcmdldEVudGl0eVBhcmFtTmFtZT0iY29ubmVjdG9yX3JwYyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX3JwYyIsbil9b25FbmFibGVDb25uZWN0b3IoZSl7ZS52YWx1ZS50cz0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLnVwZGF0ZUFjdGl2ZUNvbm5lY3RvcktleXMoZS5rZXkpLHRoaXMuYXR0cmlidXRlVXBkYXRlU3ViamVjdC5uZXh0KGUpfWdldEVycm9yc0NvdW50KGUpe2NvbnN0IHQ9ZS5rZXksbj10aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24uZGF0YS5maW5kKChlPT5lJiZlLmRhdGFLZXkubmFtZT09PWAke3R9X0VSUk9SU19DT1VOVGApKTtyZXR1cm4gbiYmdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKHQpP24uZGF0YVswXVsxXXx8MDoiSW5hY3RpdmUifW9uQWRkQ29ubmVjdG9yKGUpe2U/LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29uZmlybUNvbm5lY3RvckNoYW5nZSgpLnBpcGUoT2UoMSksTWUoQm9vbGVhbiksVWUoKCgpPT50aGlzLm9wZW5BZGRDb25uZWN0b3JEaWFsb2coKSkpLE1lKEJvb2xlYW4pKS5zdWJzY3JpYmUoKGU9PnRoaXMuYWRkQ29ubmVjdG9yKGUpKSl9YWRkQ29ubmVjdG9yKGUpe3RoaXMuY29ubmVjdG9yRm9ybS5kaXNhYmxlZCYmdGhpcy5jb25uZWN0b3JGb3JtLmVuYWJsZSgpLGUuY29uZmlndXJhdGlvbkpzb258fChlLmNvbmZpZ3VyYXRpb25Kc29uPXt9KSx0aGlzLmdhdGV3YXlWZXJzaW9uJiYhZS5jb25maWdWZXJzaW9uJiYoZS5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLGUuYmFzaWNDb25maWc9ZS5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9ZTtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZTt0aGlzLnNldEluaXRpYWxDb25uZWN0b3JWYWx1ZXMoZSksdGhpcy5zYXZlQ29ubmVjdG9yKHRoaXMuZ2V0VXBkYXRlZENvbm5lY3RvckRhdGEoZSkpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9c2V0SW5pdGlhbENvbm5lY3RvclZhbHVlcyhlKXtjb25zdHtiYXNpY0NvbmZpZzp0LG1vZGU6biwuLi5hfT1lO3RoaXMudG9nZ2xlUmVwb3J0U3RyYXRlZ3koZS50eXBlKSx0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikuc2V0VmFsdWUodGhpcy5hbGxvd0Jhc2ljQ29uZmlnLmhhcyhlLnR5cGUpP2UubW9kZT8/b24uQkFTSUM6bnVsbCx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLnBhdGNoVmFsdWUoYSx7ZW1pdEV2ZW50OiExfSl9b3BlbkFkZENvbm5lY3RvckRpYWxvZygpe3JldHVybiB0aGlzLmN0eC5uZ1pvbmUucnVuKCgoKT0+dGhpcy5kaWFsb2cub3Blbih0byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e2RhdGFTb3VyY2VEYXRhOnRoaXMuZGF0YVNvdXJjZS5kYXRhLGdhdGV3YXlWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb259fSkuYWZ0ZXJDbG9zZWQoKSkpfXVuaXFOYW1lUmVxdWlyZWQoKXtyZXR1cm4gZT0+e2NvbnN0IHQ9ZS52YWx1ZT8udHJpbSgpLnRvTG93ZXJDYXNlKCksbj10aGlzLmRhdGFTb3VyY2UuZGF0YS5zb21lKChlPT5lLnZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKT09PXQpKSxhPXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZS50b0xvd2VyQ2FzZSgpPT09dDtyZXR1cm4gbiYmIWE/e2R1cGxpY2F0ZU5hbWU6e3ZhbGlkOiExfX06bnVsbH19aW5pdERhdGFTb3VyY2VzKCl7Y29uc3QgZT17cHJvcGVydHk6ImtleSIsZGlyZWN0aW9uOncuQVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKDFlMywwLG51bGwsZSksdGhpcy5hdHRyaWJ1dGVEYXRhU291cmNlPW5ldyBMYSh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2UsdGhpcy56b25lLHRoaXMudHJhbnNsYXRlKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9yc0RhdGFTb3VyY2U9bmV3IExhKHRoaXMuYXR0cmlidXRlU2VydmljZSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZSx0aGlzLnpvbmUsdGhpcy50cmFuc2xhdGUpLHRoaXMuc2VydmVyRGF0YVNvdXJjZT1uZXcgTGEodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLHRoaXMudGVsZW1ldHJ5V3NTZXJ2aWNlLHRoaXMuem9uZSx0aGlzLnRyYW5zbGF0ZSksdGhpcy5kYXRhU291cmNlPW5ldyB5KFtdKX1pbml0Q29ubmVjdG9yRm9ybSgpe3RoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHttb2RlOltvbi5CQVNJQ10sbmFtZTpbIiIsW3VlLnJlcXVpcmVkLHRoaXMudW5pcU5hbWVSZXF1aXJlZCgpLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbIiIsW3VlLnJlcXVpcmVkXV0sZW5hYmxlUmVtb3RlTG9nZ2luZzpbITFdLGxvZ0xldmVsOlsiIixbdWUucmVxdWlyZWRdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITFdLGtleTpbImF1dG8iXSxjbGFzczpbIiJdLGNvbmZpZ3VyYXRpb246WyIiXSxjb25maWd1cmF0aW9uSnNvbjpbe30sW3VlLnJlcXVpcmVkXV0sYmFzaWNDb25maWc6W3t9XSxjb25maWdWZXJzaW9uOlsiIl0scmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSksdGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGUoKX1nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCl7cmV0dXJuKGUsdCk9Pntzd2l0Y2godCl7Y2FzZSJzeW5jU3RhdHVzIjpyZXR1cm4gdGhpcy5pc0Nvbm5lY3RvclN5bmNlZChlKT8xOjA7Y2FzZSJlbmFibGVkIjpyZXR1cm4gdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KT8xOjA7Y2FzZSJlcnJvcnMiOmNvbnN0IG49dGhpcy5nZXRFcnJvcnNDb3VudChlKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpPT09dy5ERVNDPy0xOjEvMDpuO2RlZmF1bHQ6cmV0dXJuIGVbdF18fGUudmFsdWVbdF19fX1sb2FkQ29ubmVjdG9ycygpe3RoaXMuZGV2aWNlJiZ0aGlzLmRldmljZS5pZCE9PWsmJkFlKFt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSxbImFjdGl2ZV9jb25uZWN0b3JzIl0pLHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFsiaW5hY3RpdmVfY29ubmVjdG9ycyJdKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLkNMSUVOVF9TQ09QRSxbIlZlcnNpb24iXSldKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVswXSksdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVsxXSksdGhpcy5nYXRld2F5VmVyc2lvbj1lWzJdWzBdPy52YWx1ZSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWxvYWRHYXRld2F5U3RhdGUoKXt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5rZXkpKS52YWx1ZSxuPWUuZmluZCgoZT0+Imxhc3REaXNjb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZTt0aGlzLmlzR2F0ZXdheUFjdGl2ZT10aGlzLmdldEdhdGV3YXlTdGF0dXModCxhLG4pfSkpfXBhcnNlQ29ubmVjdG9ycyhlKXtjb25zdCB0PWU/LlswXT8udmFsdWV8fFtdO3JldHVybiBuZSh0KT9KU09OLnBhcnNlKHQpOnR9b2JzZXJ2ZU1vZGVDaGFuZ2UoKXt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikubWFya0FzUHJpc3RpbmUoKX0pKX1vYnNlcnZlQXR0cmlidXRlQ2hhbmdlKCl7dGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0LnBpcGUoVmUoMzAwKSxFZSgoZT0+dGhpcy5leGVjdXRlQXR0cmlidXRlVXBkYXRlcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX11cGRhdGVBY3RpdmVDb25uZWN0b3JLZXlzKGUpe2lmKHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlKSl7Y29uc3QgdD10aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuYWN0aXZlQ29ubmVjdG9ycy5zcGxpY2UodCwxKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5wdXNoKGUpfWVsc2V7Y29uc3QgdD10aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMuc3BsaWNlKHQsMSksdGhpcy5hY3RpdmVDb25uZWN0b3JzLnB1c2goZSl9fWV4ZWN1dGVBdHRyaWJ1dGVVcGRhdGVzKGUpe0FlKHRoaXMuZ2V0QXR0cmlidXRlRXhlY3V0aW9uVGFza3MoZSkpLnBpcGUoT2UoMSksRWUoKCgpPT50aGlzLnVwZGF0ZURhdGEoITApKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWdldEF0dHJpYnV0ZUV4ZWN1dGlvblRhc2tzKGUpe2NvbnN0IHQ9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSxuPXQ/TC5TRVJWRVJfU0NPUEU6TC5TSEFSRURfU0NPUEUsYT10P0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVyblt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsW3trZXk6ImFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmFjdGl2ZUNvbm5lY3RvcnN9XSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFt7a2V5OiJpbmFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmluYWN0aXZlQ29ubmVjdG9yc31dKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxuLFtlXSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLGEsW2VdKV19b25EYXRhVXBkYXRlRXJyb3IoZSl7Y29uc3QgdD10aGlzLnV0aWxzLnBhcnNlRXhjZXB0aW9uKGUpO2xldCBuPXQubmFtZTt0Lm1lc3NhZ2UmJihuKz0iOiAiK3QubWVzc2FnZSksY29uc29sZS5lcnJvcihuKX1vbkVycm9yc1VwZGF0ZWQoKXt0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVkKCl7Y29uc3QgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGEsdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5kYXRhS2V5Lm5hbWUpKS5kYXRhWzBdWzFdLG49ZS5maW5kKChlPT4ibGFzdERpc2Nvbm5lY3RUaW1lIj09PWUuZGF0YUtleS5uYW1lKSkuZGF0YVswXVsxXSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmRhdGFLZXkubmFtZSkpLmRhdGFbMF1bMV07dGhpcy5pc0dhdGV3YXlBY3RpdmU9dGhpcy5nZXRHYXRld2F5U3RhdHVzKHQsYSxuKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1nZXRHYXRld2F5U3RhdHVzKGUsdCxuKXtyZXR1cm4hIWUmJighbnx8dD5uKX1nZW5lcmF0ZVN1YnNjcmlwdGlvbigpe2lmKHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuZGV2aWNlKXtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuZGV2aWNlLmlkLGVudGl0eU5hbWU6IkdhdGV3YXkiLHRpbWVzZXJpZXM6W119XTt0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKCh0PT57ZVswXS50aW1lc2VyaWVzLnB1c2goe25hbWU6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGAsbGFiZWw6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGB9KX0pKSx0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGkuY3JlYXRlU3Vic2NyaXB0aW9uRnJvbUluZm8oQS5sYXRlc3QsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuc3Vic2NyaXB0aW9uPWV9KSl9fWNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpe3RoaXMuYmFzaWNDb25maWdTdWImJnRoaXMuYmFzaWNDb25maWdTdWIudW5zdWJzY3JpYmUoKSx0aGlzLmJhc2ljQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImJhc2ljQ29uZmlnIikudmFsdWVDaGFuZ2VzLnBpcGUoTWUoKCgpPT4hIXRoaXMuaW5pdGlhbENvbm5lY3RvcikpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIiksbj10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWUsYT10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU7aWYoIWVlKGUsdD8udmFsdWUpJiZ0aGlzLmFsbG93QmFzaWNDb25maWcuaGFzKG4pJiZhPT09b24uQkFTSUMpe2NvbnN0IG49ey4uLnQudmFsdWUsLi4uZX07dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiY29uZmlndXJhdGlvbkpzb24iKS5wYXRjaFZhbHVlKG4se2VtaXRFdmVudDohMX0pfX0pKX1jcmVhdGVKc29uQ29uZmlnV2F0Y2hlcigpe3RoaXMuanNvbkNvbmZpZ1N1YiYmdGhpcy5qc29uQ29uZmlnU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5qc29uQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKSxuPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZSxhPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoIm1vZGUiKS52YWx1ZTshZWUoZSx0Py52YWx1ZSkmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMobikmJmE9PT1vbi5BRFZBTkNFRCYmdGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKS5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWNvbmZpcm1Db25uZWN0b3JDaGFuZ2UoKXtyZXR1cm4gdGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmNvbm5lY3RvckZvcm0uZGlydHk/dGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRpdGxlIiksdGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRleHQiKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApOkllKCEwKX1zZXRGb3JtVmFsdWUoZSl7dGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGVkJiZ0aGlzLmNvbm5lY3RvckZvcm0uZW5hYmxlKCk7Y29uc3QgdD1iYS5nZXRDb25maWcoe2NvbmZpZ3VyYXRpb246IiIsa2V5OiJhdXRvIixjb25maWd1cmF0aW9uSnNvbjp7fSwuLi5lfSx0aGlzLmdhdGV3YXlWZXJzaW9uKTt0aGlzLmdhdGV3YXlWZXJzaW9uJiYhdC5jb25maWdWZXJzaW9uJiYodC5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLHQuYmFzaWNDb25maWc9dC5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9dCx0aGlzLnVwZGF0ZUNvbm5lY3Rvcih0KX11cGRhdGVDb25uZWN0b3IoZSl7c3dpdGNoKHRoaXMuanNvbkNvbmZpZ1N1Yj8udW5zdWJzY3JpYmUoKSxlLnR5cGUpe2Nhc2UgX3QuTVFUVDpjYXNlIF90Lk9QQ1VBOmNhc2UgX3QuTU9EQlVTOnRoaXMudXBkYXRlQmFzaWNDb25maWdDb25uZWN0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZSh7Li4uZSxtb2RlOm51bGx9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUpzb25Db25maWdXYXRjaGVyKCl9fXVwZGF0ZUJhc2ljQ29uZmlnQ29ubmVjdG9yKGUpe3RoaXMuYmFzaWNDb25maWdTdWI/LnVuc3Vic2NyaWJlKCk7Y29uc3QgdD10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWU7dGhpcy5zZXRJbml0aWFsQ29ubmVjdG9yVmFsdWVzKGUpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9cGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKXt0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZShlLHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpLHRoaXMuY3JlYXRlSnNvbkNvbmZpZ1dhdGNoZXIoKX10b2dnbGVSZXBvcnRTdHJhdGVneShlKXtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInJlcG9ydFN0cmF0ZWd5Iik7ZT09PV90Lk1PREJVUz90LmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zZXRDbGllbnREYXRhKGUpe2lmKHRoaXMuaW5pdGlhbENvbm5lY3Rvcil7Y29uc3QgdD1lLmRhdGEuZmluZCgoZT0+ZS5rZXk9PT10aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSkpO3QmJih0LnZhbHVlPSJzdHJpbmciPT10eXBlb2YgdC52YWx1ZT9KU09OLnBhcnNlKHQudmFsdWUpOnQudmFsdWUsdGhpcy5pc0Nvbm5lY3RvclN5bmNlZCh0KSYmdC52YWx1ZS5jb25maWd1cmF0aW9uSnNvbiYmdGhpcy5zZXRGb3JtVmFsdWUoey4uLnQudmFsdWUsbW9kZTp0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU/P3QudmFsdWUubW9kZX0pKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOlguQXR0cmlidXRlU2VydmljZX0se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp2YX0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVvLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbm5lY3RvciIsaW5wdXRzOntjdHg6ImN0eCIsZGV2aWNlOiJkZXZpY2UifSxwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6Im5hbWVJbnB1dCIsZmlyc3Q6ITAscHJlZGljYXRlOlsibmFtZUlucHV0Il0sZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InNvcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpnLGRlc2NlbmRhbnRzOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpMbyxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmtvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGbyxzZWxlY3RvcjoidGItb3BjLXVhLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnBvLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpBbyxzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpObyxzZWxlY3RvcjoidGItbXF0dC1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmdvLHNlbGVjdG9yOiJ0Yi1yZXBvcnQtc3RyYXRlZ3kiLGlucHV0czpbImlzRXhwYW5zaW9uTW9kZSIsImRlZmF1bHRWYWx1ZSJdfSx7a2luZDoicGlwZSIsdHlwZTpfLkFzeW5jUGlwZSxuYW1lOiJhc3luYyJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTp2YSxuYW1lOiJpc0xhdGVzdFZlcnNpb25Db25maWcifV19KX19ZSgiR2F0ZXdheUNvbm5lY3RvckNvbXBvbmVudCIsRW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX0se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTpKZS5NYXREaWFsb2d9LHt0eXBlOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3R5cGU6dC5OZ1pvbmV9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp2YX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkZXZpY2U6W3t0eXBlOmF9XSxuYW1lSW5wdXQ6W3t0eXBlOm8sYXJnczpbIm5hbWVJbnB1dCJdfV0sc29ydDpbe3R5cGU6byxhcmdzOltnLHtzdGF0aWM6ITF9XX1dfX0pO2NsYXNzIHFve2NvbnN0cnVjdG9yKGUpe3RoaXMuZGV2aWNlU2VydmljZT1lfWRvd25sb2FkKGUpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kZXZpY2VJZCYmdGhpcy5kZXZpY2VTZXJ2aWNlLmRvd25sb2FkR2F0ZXdheURvY2tlckNvbXBvc2VGaWxlKHRoaXMuZGV2aWNlSWQpLnN1YnNjcmliZSgoKCk9Pnt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxbyxkZXBzOlt7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpxbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1jb21tYW5kIixpbnB1dHM6e2RldmljZUlkOiJkZXZpY2VJZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJjb21wb25lbnQiLHR5cGU6d3QuVGJNYXJrZG93bkNvbXBvbmVudCxzZWxlY3RvcjoidGItbWFya2Rvd24iLGlucHV0czpbImRhdGEiLCJjb250ZXh0IiwiYWRkaXRpb25hbENvbXBpbGVNb2R1bGVzIiwibWFya2Rvd25DbGFzcyIsImNvbnRhaW5lckNsYXNzIiwic3R5bGUiLCJhcHBseURlZmF1bHRNYXJrZG93blN0eWxlIiwiYWRkaXRpb25hbFN0eWxlcyIsImxpbmVOdW1iZXJzIiwiZmFsbGJhY2tUb1BsYWluTWFya2Rvd24iLCJ1c2VQbGFpbk1hcmtkb3duIl0sb3V0cHV0czpbInJlYWR5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QW5jaG9yLHNlbGVjdG9yOiJhW21hdC1idXR0b25dLCBhW21hdC1yYWlzZWQtYnV0dG9uXSwgYVttYXQtZmxhdC1idXR0b25dLCBhW21hdC1zdHJva2VkLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJEZXZpY2VHYXRld2F5Q29tbWFuZENvbXBvbmVudCIscW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29tbWFuZCIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpYLkRldmljZVNlcnZpY2V9XSxwcm9wRGVjb3JhdG9yczp7ZGV2aWNlSWQ6W3t0eXBlOmF9XX19KTtjbGFzcyBEb3tjb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLmZiPWUsdGhpcy5kZXZpY2VTZXJ2aWNlPXQsdGhpcy5jZD1uLHRoaXMuZGlhbG9nPWEsdGhpcy5kaWFsb2dNb2RlPSExLHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZD1uZXcgaSx0aGlzLlN0b3JhZ2VUeXBlcz1BdCx0aGlzLnN0b3JhZ2VUeXBlcz1PYmplY3QudmFsdWVzKEF0KSx0aGlzLnN0b3JhZ2VUeXBlc1RyYW5zbGF0aW9uTWFwPVJ0LHRoaXMubG9nU2F2aW5nUGVyaW9kcz1PdCx0aGlzLmxvY2FsTG9nc0NvbmZpZ3M9T2JqZWN0LmtleXMoUHQpLHRoaXMubG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwPUd0LHRoaXMuc2VjdXJpdHlUeXBlcz1CdCx0aGlzLmdhdGV3YXlMb2dMZXZlbD1PYmplY3QudmFsdWVzKE10KSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmluaXRCYXNpY0Zvcm1Hcm91cCgpLHRoaXMub2JzZXJ2ZUZvcm1DaGFuZ2VzKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jaGVja0FuZEZldGNoQ3JlZGVudGlhbHMoZT8udGhpbmdzYm9hcmQ/LnNlY3VyaXR5Pz97fSksZT8uZ3JwYyYmdGhpcy50b2dnbGVScGNGaWVsZHMoZS5ncnBjLmVuYWJsZWQpOyhlPy50aGluZ3Nib2FyZD8uc3RhdGlzdGljcz8uY29tbWFuZHM/P1tdKS5mb3JFYWNoKChlPT50aGlzLmFkZENvbW1hbmQoZSwhMSkpKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fWF0TGVhc3RPbmVSZXF1aXJlZChlLHQ9bnVsbCl7cmV0dXJuIG49Pnt0fHwodD1PYmplY3Qua2V5cyhuLmNvbnRyb2xzKSk7cmV0dXJuIG4/LmNvbnRyb2xzJiZ0LnNvbWUoKHQ9PiFlKG4uY29udHJvbHNbdF0pKSk/bnVsbDp7YXRMZWFzdE9uZTohMH19fXRvZ2dsZVJwY0ZpZWxkcyhlKXtjb25zdCB0PXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjIik7ZT8odC5nZXQoInNlcnZlclBvcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lb3V0TXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluVGltZUJldHdlZW5QaW5nc01zIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNcyIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0LmdldCgic2VydmVyUG9ydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgia2VlcEFsaXZlVGltZW91dE1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoIm1pblRpbWVCZXR3ZWVuUGluZ3NNcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfWFkZExvY2FsTG9nQ29uZmlnKGUsdCl7Y29uc3Qgbj10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgibG9ncy5sb2NhbCIpLGE9dGhpcy5mYi5ncm91cCh7bG9nTGV2ZWw6W3QubG9nTGV2ZWx8fE10LklORk8sW3VlLnJlcXVpcmVkXV0sZmlsZVBhdGg6W3QuZmlsZVBhdGh8fCIuL2xvZ3MiLFt1ZS5yZXF1aXJlZF1dLGJhY2t1cENvdW50Olt0LmJhY2t1cENvdW50fHw3LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCldXSxzYXZpbmdUaW1lOlt0LnNhdmluZ1RpbWV8fDMsW3VlLnJlcXVpcmVkLHVlLm1pbigwKV1dLHNhdmluZ1BlcmlvZDpbdC5zYXZpbmdQZXJpb2R8fER0LmRheXMsW3VlLnJlcXVpcmVkXV19KTtuLmFkZENvbnRyb2woZSxhKX1nZXRMb2dGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KGBsb2dzLmxvY2FsLiR7ZX1gKX1jb21tYW5kRm9ybUFycmF5KCl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzIil9cmVtb3ZlQ29tbWFuZENvbnRyb2woZSx0KXsiIiE9PXQucG9pbnRlclR5cGUmJih0aGlzLmNvbW1hbmRGb3JtQXJyYXkoKS5yZW1vdmVBdChlKSx0aGlzLmJhc2ljRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfXJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5Iik7ZS5jbGVhclZhbGlkYXRvcnMoKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1yZW1vdmVBbGxTdG9yYWdlVmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInN0b3JhZ2UiKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKXt0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGV2aWNlKHRoaXMuZGV2aWNlLmlkKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmRpYWxvZy5vcGVuKFBhLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7Z2F0ZXdheU5hbWU6ZS5uYW1lfX0pLmFmdGVyQ2xvc2VkKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS5zZXRWYWx1ZSghMCx7ZW1pdEV2ZW50OiExfSl9KSl9KSl9YWRkQ29tbWFuZChlLHQ9ITApe2NvbnN0e2F0dHJpYnV0ZU9uR2F0ZXdheTpuPW51bGwsY29tbWFuZDphPW51bGwsdGltZW91dDpvPW51bGx9PWV8fHt9LGk9dGhpcy5mYi5ncm91cCh7YXR0cmlidXRlT25HYXRld2F5OltuLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dLGNvbW1hbmQ6W2EsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14oPz1cUykuKlxTJC8pXV0sdGltZW91dDpbbyxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKSx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dfSk7dGhpcy5jb21tYW5kRm9ybUFycmF5KCkucHVzaChpLHtlbWl0RXZlbnQ6dH0pfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3RoaXMuYmFzaWNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dGhpbmdzYm9hcmQ6dGhpcy5pbml0VGhpbmdzYm9hcmRGb3JtR3JvdXAoKSxzdG9yYWdlOnRoaXMuaW5pdFN0b3JhZ2VGb3JtR3JvdXAoKSxncnBjOnRoaXMuaW5pdEdycGNGb3JtR3JvdXAoKSxjb25uZWN0b3JzOnRoaXMuZmIuYXJyYXkoW10pLGxvZ3M6dGhpcy5pbml0TG9nc0Zvcm1Hcm91cCgpfSl9aW5pdFRoaW5nc2JvYXJkRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2hvc3Q6W3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteXHNdKyQvKV1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZVNoZWxsOlshMV0scmVtb3RlQ29uZmlndXJhdGlvbjpbITBdLGNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHM6WzYwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sc3RhdGlzdGljczp0aGlzLmZiLmdyb3VwKHtlbmFibGU6WyEwXSxzdGF0c1NlbmRQZXJpb2RJblNlY29uZHM6WzM2MDAsW3VlLnJlcXVpcmVkLHVlLm1pbig2MCksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sY29tbWFuZHM6dGhpcy5mYi5hcnJheShbXSl9KSxtYXhQYXlsb2FkU2l6ZUJ5dGVzOls4MTk2LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTAwKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtaW5QYWNrU2VuZERlbGF5TVM6WzUwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblBhY2tTaXplVG9TZW5kOls1MDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxMDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGhhbmRsZURldmljZVJlbmFtaW5nOlshMF0sY2hlY2tpbmdEZXZpY2VBY3Rpdml0eTp0aGlzLmluaXRDaGVja2luZ0RldmljZUFjdGl2aXR5Rm9ybUdyb3VwKCksc2VjdXJpdHk6dGhpcy5pbml0U2VjdXJpdHlGb3JtR3JvdXAoKSxxb3M6WzEsW3VlLnJlcXVpcmVkLHVlLm1pbigwKSx1ZS5tYXgoMSksdWUucGF0dGVybigvXlteLlxzXSskLyldXX0pfWluaXRTdG9yYWdlRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe3R5cGU6W0F0Lk1FTU9SWSxbdWUucmVxdWlyZWRdXSxyZWFkX3JlY29yZHNfY291bnQ6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heF9yZWNvcmRzX2NvdW50OlsxZTUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhX2ZvbGRlcl9wYXRoOlsiLi9kYXRhLyIsW3VlLnJlcXVpcmVkXV0sbWF4X2ZpbGVfY291bnQ6WzEwLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWF4X3JlYWRfcmVjb3Jkc19jb3VudDpbMTAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhfcmVjb3Jkc19wZXJfZmlsZTpbMWU0LFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sZGF0YV9maWxlX3BhdGg6WyIuL2RhdGEvZGF0YS5kYiIsW3VlLnJlcXVpcmVkXV0sbWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzOlsxLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWVzc2FnZXNfdHRsX2luX2RheXM6WzcsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRHcnBjRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxzZXJ2ZXJQb3J0Ols5NTk1LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUubWF4KDY1NTM1KSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxrZWVwQWxpdmVUaW1lTXM6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGtlZXBBbGl2ZVRpbWVvdXRNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sa2VlcGFsaXZlUGVybWl0V2l0aG91dENhbGxzOlshMF0sbWF4UGluZ3NXaXRob3V0RGF0YTpbMCxbdWUucmVxdWlyZWQsdWUubWluKDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblRpbWVCZXR3ZWVuUGluZ3NNczpbMWU0LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV19KX1pbml0TG9nc0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHtkYXRlRm9ybWF0OlsiJVktJW0tJWQgJUg6JU06JVMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sbG9nRm9ybWF0OlsiJShhc2N0aW1lKXMgLSB8JShsZXZlbG5hbWUpc3wgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGZ1bmNOYW1lKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sdHlwZTpbInJlbW90ZSIsW3VlLnJlcXVpcmVkXV0scmVtb3RlOnRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxsb2dMZXZlbDpbTXQuSU5GTyxbdWUucmVxdWlyZWRdXX0pLGxvY2FsOnRoaXMuZmIuZ3JvdXAoe30pfSl9aW5pdENoZWNraW5nRGV2aWNlQWN0aXZpdHlGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7Y2hlY2tEZXZpY2VJbmFjdGl2aXR5OlshMV0saW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzOlsyMDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzOls1MDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRTZWN1cml0eUZvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHt0eXBlOltWdC5BQ0NFU1NfVE9LRU4sW3VlLnJlcXVpcmVkXV0sYWNjZXNzVG9rZW46W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2xpZW50SWQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sdXNlcm5hbWU6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0scGFzc3dvcmQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2FDZXJ0OltudWxsXSxjZXJ0OltudWxsXSxwcml2YXRlS2V5OltudWxsXX0pfW9ic2VydmVGb3JtQ2hhbmdlcygpe3RoaXMub2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCksdGhpcy5vYnNlcnZlUmVtb3RlQ29uZmlndXJhdGlvbkNoYW5nZXMoKSx0aGlzLm9ic2VydmVEZXZpY2VBY3Rpdml0eUNoYW5nZXMoKSx0aGlzLm9ic2VydmVTZWN1cml0eVR5cGVDaGFuZ2VzKCksdGhpcy5vYnNlcnZlU3RvcmFnZVR5cGVDaGFuZ2VzKCl9b2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWUiKTt0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dCYmIiIhPT10P2Uuc2V0VmFsaWRhdG9ycyhbdWUucmVxdWlyZWRdKTplLmNsZWFyVmFsaWRhdG9ycygpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9b2JzZXJ2ZVJlbW90ZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKX0pKSx0aGlzLmxvZ1NlbGVjdG9yPXRoaXMuZmIuY29udHJvbChQdC5zZXJ2aWNlKTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhQdCkpdGhpcy5hZGRMb2NhbExvZ0NvbmZpZyhlLHt9KX1vYnNlcnZlRGV2aWNlQWN0aXZpdHlDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSIpO2UuZ2V0KCJjaGVja0RldmljZUluYWN0aXZpdHkiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7Y29uc3Qgbj1bdWUubWluKDEpLHVlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV07dD8oZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLnNldFZhbGlkYXRvcnMobiksZS5nZXQoImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiKS5zZXRWYWxpZGF0b3JzKG4pKTooZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLmNsZWFyVmFsaWRhdG9ycygpLGUuZ2V0KCJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIikuY2xlYXJWYWxpZGF0b3JzKCkpLGUuZ2V0KCJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSxlLmdldCgiaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kcyIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjLmVuYWJsZWQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy50b2dnbGVScGNGaWVsZHMoZSl9KSl9b2JzZXJ2ZVNlY3VyaXR5VHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eSIpO2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e3N3aXRjaCh0aGlzLnJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpLHQpe2Nhc2UgVnQuQUNDRVNTX1RPS0VOOnRoaXMuYWRkQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVExTX1BSSVZBVEVfS0VZOnRoaXMuYWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSk7YnJlYWs7Y2FzZSBWdC5UTFNfQUNDRVNTX1RPS0VOOnRoaXMuYWRkVGxzQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVVNFUk5BTUVfUEFTU1dPUkQ6ZS5hZGRWYWxpZGF0b3JzKFt0aGlzLmF0TGVhc3RPbmVSZXF1aXJlZCh1ZS5yZXF1aXJlZCxbImNsaWVudElkIiwidXNlcm5hbWUiXSldKX1lLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKSxbImNhQ2VydCIsInByaXZhdGVLZXkiLCJjZXJ0Il0uZm9yRWFjaCgodD0+e2UuZ2V0KHQpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT50aGlzLmNkLmRldGVjdENoYW5nZXMoKSkpfSkpfW9ic2VydmVTdG9yYWdlVHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzdG9yYWdlIik7ZS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57c3dpdGNoKHRoaXMucmVtb3ZlQWxsU3RvcmFnZVZhbGlkYXRvcnMoKSx0KXtjYXNlIEF0Lk1FTU9SWTp0aGlzLmFkZE1lbW9yeVN0b3JhZ2VWYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgQXQuRklMRTp0aGlzLmFkZEZpbGVTdG9yYWdlVmFsaWRhdG9ycyhlKTticmVhaztjYXNlIEF0LlNRTElURTp0aGlzLmFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpfX0pKX1hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7ZS5nZXQoImFjY2Vzc1Rva2VuIikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteLlxzXSskLyldKSxlLmdldCgiYWNjZXNzVG9rZW4iKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9YWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSl7WyJjYUNlcnQiLCJwcml2YXRlS2V5IiwiY2VydCJdLmZvckVhY2goKHQ9PntlLmdldCh0KS5hZGRWYWxpZGF0b3JzKFt1ZS5yZXF1aXJlZF0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKX1hZGRUbHNBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7dGhpcy5hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSksZS5nZXQoImNhQ2VydCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkXSksZS5nZXQoImNhQ2VydCIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1hZGRNZW1vcnlTdG9yYWdlVmFsaWRhdG9ycyhlKXtlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KCJtYXhfcmVjb3Jkc19jb3VudCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldKSxlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoIm1heF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9YWRkRmlsZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWF4X2ZpbGVfY291bnQiLCJtYXhfcmVhZF9yZWNvcmRzX2NvdW50IiwibWF4X3JlY29yZHNfcGVyX2ZpbGUiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIiwibWVzc2FnZXNfdHRsX2luX2RheXMiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWNoZWNrQW5kRmV0Y2hDcmVkZW50aWFscyhlKXtlLnR5cGUhPT1WdC5UTFNfUFJJVkFURV9LRVkmJnRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyh0aGlzLmRldmljZS5pZCkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5pbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkLmVtaXQodCksdGhpcy51cGRhdGVTZWN1cml0eVR5cGUoZSx0KSx0aGlzLnVwZGF0ZUNyZWRlbnRpYWxzKHQsZSl9KSl9dXBkYXRlU2VjdXJpdHlUeXBlKGUsdCl7Y29uc3Qgbj10LmNyZWRlbnRpYWxzVHlwZT09PVUuQUNDRVNTX1RPS0VOfHxlLnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOP2UudHlwZT09PVZ0LlRMU19BQ0NFU1NfVE9LRU4/VnQuVExTX0FDQ0VTU19UT0tFTjpWdC5BQ0NFU1NfVE9LRU46dC5jcmVkZW50aWFsc1R5cGU9PT1VLk1RVFRfQkFTSUM/VnQuVVNFUk5BTUVfUEFTU1dPUkQ6bnVsbDtuJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZSIpLnNldFZhbHVlKG4se2VtaXRFdmVudDohMX0pfXVwZGF0ZUNyZWRlbnRpYWxzKGUsdCl7c3dpdGNoKGUuY3JlZGVudGlhbHNUeXBlKXtjYXNlIFUuQUNDRVNTX1RPS0VOOnRoaXMudXBkYXRlQWNjZXNzVG9rZW5DcmVkZW50aWFscyhlLHQpO2JyZWFrO2Nhc2UgVS5NUVRUX0JBU0lDOnRoaXMudXBkYXRlTXF0dEJhc2ljQ3JlZGVudGlhbHMoZSk7Y2FzZSBVLlg1MDlfQ0VSVElGSUNBVEU6fX11cGRhdGVBY2Nlc3NUb2tlbkNyZWRlbnRpYWxzKGUsdCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuIikuc2V0VmFsdWUoZS5jcmVkZW50aWFsc0lkLHtlbWl0RXZlbnQ6ITF9KSx0LnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkuY2FDZXJ0Iikuc2V0VmFsdWUodC5jYUNlcnQse2VtaXRFdmVudDohMX0pfXVwZGF0ZU1xdHRCYXNpY0NyZWRlbnRpYWxzKGUpe2NvbnN0IHQ9SlNPTi5wYXJzZShlLmNyZWRlbnRpYWxzVmFsdWUpO3RoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZCIpLnNldFZhbHVlKHQuY2xpZW50SWQse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZSIpLnNldFZhbHVlKHQudXNlck5hbWUse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZCIpLnNldFZhbHVlKHQucGFzc3dvcmQse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6RG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWJhc2ljLWNvbmZpZ3VyYXRpb24iLGlucHV0czp7ZGV2aWNlOiJkZXZpY2UiLGRpYWxvZ01vZGU6ImRpYWxvZ01vZGUifSxvdXRwdXRzOntpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkOiJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+RG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgY2xhc3M9InRhYi1ncm91cC1ibG9jayIgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIiBbY2xhc3MuZGlhbG9nLW1vZGVdPSJkaWFsb2dNb2RlIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1jb25maWd1cmF0aW9uXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZVNoZWxsIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtaG9zdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaG9zdFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmhvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnNlY3VyaXR5LnNlY3VyaXR5PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzZWN1cml0eSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij57eyBzZWN1cml0eVR5cGUudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ2FjY2Vzc3Rva2VuXCcpIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuYWNjZXNzLXRva2VuPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImFjY2Vzc1Rva2VuIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkuYWNjZXNzLXRva2VuLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdkZXZpY2UuY29weS1hY2Nlc3MtdG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuY2xpZW50SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNsaWVudElkIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5jbGllbnRJZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgW2NvcHlUZXh0XT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuY2xpZW50SWRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS51c2VybmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LnVzZXJuYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZVwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXVzZXJuYW1lXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgc3R5bGU9IndpZHRoOiAxMDAlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiLz5cbiAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucGFzc3dvcmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8dGItZXJyb3Igc3R5bGU9Im1hcmdpbi10b3A6IC0xMnB4OyBkaXNwbGF5OiBibG9jazsiIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS50eXBlXCcpLnZhbHVlID09PSBcJ3VzZXJuYW1lUGFzc3dvcmRcJyJcbiAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eVwnKS5oYXNFcnJvcihcJ2F0TGVhc3RPbmVcJykgP1xuICAgICAgICAgIChcJ2RldmljZS5jbGllbnQtaWQtb3ItdXNlci1uYW1lLW5lY2Vzc2FyeVwnIHwgdHJhbnNsYXRlKSA6IFwnXCciPjwvdGItZXJyb3I+XG4gICAgICAgICAgICA8dGItZmlsZS1pbnB1dFxuICAgICAgICAgICAgICBmeEZsZXg9IjEwMCJcbiAgICAgICAgICAgICAgaGludD0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ3Rsc1wnKSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnQiXG4gICAgICAgICAgICAgIGxhYmVsPSJ7eyBcJ3NlY3VyaXR5LmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgW2FsbG93ZWRFeHRlbnNpb25zXT0iXCdwZW0sIGNlcnQsIGtleVwnIlxuICAgICAgICAgICAgICBbYWNjZXB0XT0iXCcucGVtLCBhcHBsaWNhdGlvbi9wZW0sLmNlcnQsIGFwcGxpY2F0aW9uL2NlcnQsIC5rZXksYXBwbGljYXRpb24va2V5XCciXG4gICAgICAgICAgICAgIGRyb3BMYWJlbD0ie3sgXCdnYXRld2F5LmRyb3AtZmlsZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIDwvdGItZmlsZS1pbnB1dD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubG9ncy5sb2dzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJsb2dzIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5kYXRlLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRlRm9ybWF0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MuZGF0ZUZvcm1hdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5kYXRlLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGUtZm9ybVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubG9nLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJsb2dGb3JtYXQiIHJvd3M9IjIiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9nRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmxvZy1mb3JtYXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5sb2ctZm9ybWF0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJyZW1vdGUiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MucmVtb3RlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1sb2dcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MucmVtb3RlLWxvZ3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ibG9jYWwiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MubG9jYWw8L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBbZm9ybUNvbnRyb2xdPSJsb2dTZWxlY3RvciI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBsb2dDb25maWcgb2YgbG9jYWxMb2dzQ29uZmlncyIgW3ZhbHVlXT0ibG9nQ29uZmlnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZpcnN0LWNhcGl0YWwiPnt7IGxvY2FsTG9nc0NvbmZpZ1RyYW5zbGF0ZU1hcC5nZXQobG9nQ29uZmlnKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0iZ2V0TG9nRm9ybUdyb3VwKGxvZ1NlbGVjdG9yLnZhbHVlKSI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MuZmlsZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZmlsZVBhdGgiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5maWxlUGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmZpbGUtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgc2F2aW5nLXBlcmlvZCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdUaW1lIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3Muc2F2aW5nLXBlcmlvZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLnNhdmluZ1RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBoaWRlUmVxdWlyZWRNYXJrZXIgc3R5bGU9Im1pbi13aWR0aDogMTEwcHg7IHdpZHRoOiAzMCUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdQZXJpb2QiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBwZXJpb2Qgb2YgbG9nU2F2aW5nUGVyaW9kcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJwZXJpb2Qua2V5Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwZXJpb2QudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5iYWNrdXAtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJiYWNrdXBDb3VudCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuYmFja3VwQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYmFja3VwLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0b3JhZ2VcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InN0b3JhZ2UiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPmdhdGV3YXkuaGludHMuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMiIFt2YWx1ZV09InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAuZ2V0KHN0b3JhZ2VUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPnt7IFwnZ2F0ZXdheS5oaW50cy5cJyArIGJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UudHlwZVwnKS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxzZWN0aW9uICpuZ1N3aXRjaENhc2U9IlN0b3JhZ2VUeXBlcy5NRU1PUlkiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlYWRfcmVjb3Jkc19jb3VudCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5yZWFkLXJlY29yZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLkZJTEUiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFfZm9sZGVyX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9mb2xkZXJfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtaW5maXggcG9pbnRlci1ldmVudCBzdWZmaXgtaWNvbiIgYXJpYS1oaWRkZW49ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9ImhlbHAtaWNvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0YS1mb2xkZXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9maWxlX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtZmlsZS1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhfcmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVhZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX3Blcl9maWxlIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVjb3Jkc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLlNRTElURSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9maWxlX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9maWxlX3BhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3VycyIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLWNoZWNrLWhvdXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9pbl9kYXlzIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnR0bC1tZXNzYWdlcy1kYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdycGNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImdycGMiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwY1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucGVybWl0LXdpdGhvdXQtY2FsbHNcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucGVybWl0LXdpdGhvdXQtY2FsbHNcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1wb3J0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ic2VydmVyUG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2VydmVyLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVvdXRNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJrZWVwQWxpdmVUaW1lTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMta2VlcC1hbGl2ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5nczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblRpbWVCZXR3ZWVuUGluZ3NNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGluZ3NXaXRob3V0RGF0YSIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY29sb3I9InByaW1hcnkiIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzdGF0c1NlbmRQZXJpb2RJblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSI2MCIvPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5oaW50cy5jb21tYW5kczwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZvcm1BcnJheU5hbWU9ImNvbW1hbmRzIiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiXG4gICAgICAgICAgICAgICAgICpuZ0Zvcj0ibGV0IGNvbW1hbmRDb250cm9sIG9mIGNvbW1hbmRGb3JtQXJyYXkoKS5jb250cm9sczsgbGV0ICRpbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gW2Zvcm1Hcm91cE5hbWVdPSIkaW5kZXgiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgbm8tcGFkZGluZy1ib3R0b20gbm8tZ2FwIGNvbW1hbmQtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuYXR0cmlidXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlT25HYXRld2F5Ii8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2F0dHJpYnV0ZU9uR2F0ZXdheVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmF0dHJpYnV0ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjb21tYW5kIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnY29tbWFuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jb21tYW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb21tYW5kQ29udHJvbCgkaW5kZXgsICRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3MucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiBmaXQtY29udGVudDsiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZENvbW1hbmQoKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkub3RoZXJcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiIGZvcm1Hcm91cE5hbWU9ImNoZWNraW5nRGV2aWNlQWN0aXZpdHkiXG4gICAgICAgICAgICAgW2NsYXNzLm5vLXBhZGRpbmctYm90dG9tXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jaGVjay1kZXZpY2UtYWN0aXZpdHlcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0RldmljZUluYWN0aXZpdHkiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5XCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuY2hlY2tEZXZpY2VJbmFjdGl2aXR5XCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmluYWN0aXZpdHktdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QYWNrU2VuZERlbGF5TVMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2VuZERlbGF5TVNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5taW5pbWFsLXBhY2stZGVsYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubXF0dC1xb3M8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icW9zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSIxIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnFvc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5xb3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heFBheWxvYWRTaXplQnl0ZXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXBheWxvYWQtc2l6ZS1ieXRlc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTaXplVG9TZW5kIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbi1wYWNrLXNpemUtdG8tc2VuZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1yb3dzOm1pbi1jb250ZW50IG1pbm1heChhdXRvLDFmcikgbWluLWNvbnRlbnR9Omhvc3QgLmNvbmZpZ3VyYXRpb24tYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTZweDttYXgtaGVpZ2h0Ojcwdmh9Omhvc3QgLmRpYWxvZy1tb2RlIC5jb25maWd1cmF0aW9uLWJsb2Nre21heC1oZWlnaHQ6NjB2aH06aG9zdCAubWF0LXRvb2xiYXJ7Z3JpZC1yb3c6MTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLnRhYi1ncm91cC1ibG9ja3ttaW4td2lkdGg6MDtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OjA7Z3JpZC1yb3c6Mn06aG9zdCAudG9nZ2xlLWdyb3Vwe21hcmdpbi1yaWdodDphdXRvfTpob3N0IC5maXJzdC1jYXBpdGFse3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgdGV4dGFyZWF7cmVzaXplOm5vbmV9Omhvc3QgLnNhdmluZy1wZXJpb2R7ZmxleDoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY29tbWFuZC1jb250YWluZXJ7d2lkdGg6MTAwJX06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3J7ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3I6Zmlyc3QtY2hpbGR7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QgOjpuZy1kZWVwIC5wb2ludGVyLWV2ZW50e3BvaW50ZXItZXZlbnRzOmFsbH06aG9zdCA6Om5nLWRlZXAgLnRvZ2dsZS1ncm91cCBzcGFue3BhZGRpbmc6MCAyNXB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2NvbG9yOiNlMGUwZTB9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXg6aG92ZXJ7Y29sb3I6IzllOWU5ZX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q3QuVGJFcnJvckNvbXBvbmVudCxzZWxlY3RvcjoidGItZXJyb3IiLGlucHV0czpbIm5vTWFyZ2luIiwiZXJyb3IiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpXLk1hdFRhYkNvbnRlbnQsc2VsZWN0b3I6IlttYXRUYWJDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpUdC5GaWxlSW5wdXRDb21wb25lbnQsc2VsZWN0b3I6InRiLWZpbGUtaW5wdXQiLGlucHV0czpbImxhYmVsIiwiaGludCIsImFjY2VwdCIsIm5vRmlsZVRleHQiLCJpbnB1dElkIiwiYWxsb3dlZEV4dGVuc2lvbnMiLCJkcm9wTGFiZWwiLCJtYXhTaXplQnl0ZSIsImNvbnRlbnRDb252ZXJ0RnVuY3Rpb24iLCJyZXF1aXJlZCIsInJlcXVpcmVkQXNFcnJvciIsImRpc2FibGVkIiwiZXhpc3RpbmdGaWxlTmFtZSIsInJlYWRBc0JpbmFyeSIsIndvcmtGcm9tRmlsZU9iaiIsIm11bHRpcGxlRmlsZSJdLG91dHB1dHM6WyJmaWxlTmFtZUNoYW5nZWQiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6U3QuQ29weUJ1dHRvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItY29weS1idXR0b24iLGlucHV0czpbImNvcHlUZXh0IiwiZGlzYWJsZWQiLCJtZGlJY29uIiwiaWNvbiIsInRvb2x0aXBUZXh0IiwidG9vbHRpcFBvc2l0aW9uIiwic3R5bGUiLCJjb2xvciIsIm1pbmlCdXR0b24iXSxvdXRwdXRzOlsic3VjY2Vzc0NvcGllZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19XX0pfX1lKCJHYXRld2F5QmFzaWNDb25maWd1cmF0aW9uQ29tcG9uZW50IixEbyksSGUoW04oKV0sRG8ucHJvdG90eXBlLCJkaWFsb2dNb2RlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5EbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBjbGFzcz0idGFiLWdyb3VwLWJsb2NrIiBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiIFtjbGFzcy5kaWFsb2ctbW9kZV09ImRpYWxvZ01vZGUiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5yZW1vdGUtY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUNvbmZpZ3VyYXRpb24iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlU2hlbGwiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Imhvc3QiLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+c2VjdXJpdHkuc2VjdXJpdHk8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHNlY3VyaXR5VHlwZSBvZiBzZWN1cml0eVR5cGVzIHwga2V5dmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09InNlY3VyaXR5VHlwZS5rZXkiPnt7IHNlY3VyaXR5VHlwZS52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwnYWNjZXNzdG9rZW5cJykiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5hY2Nlc3MtdG9rZW48L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYWNjZXNzVG9rZW4iLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuYWNjZXNzVG9rZW5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5hY2Nlc3MtdG9rZW4tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2RldmljZS5jb3B5LWFjY2Vzcy10b2tlblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50b2tlblwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPHNlY3Rpb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5jbGllbnRJZDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LmNsaWVudElkLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBpY29uPSJjb250ZW50X2NvcHkiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPnNlY3VyaXR5LnVzZXJuYW1lPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkudXNlcm5hbWUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdnYXRld2F5LmNvcHktdXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy51c2VybmFtZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBzdHlsZT0id2lkdGg6IDEwMCUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIvPlxuICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnBhc3N3b3JkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXBhc3N3b3JkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDx0Yi1lcnJvciBzdHlsZT0ibWFyZ2luLXRvcDogLTEycHg7IGRpc3BsYXk6IGJsb2NrOyIgZnhGbGV4PSIxMDAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIlxuICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5XCcpLmhhc0Vycm9yKFwnYXRMZWFzdE9uZVwnKSA/XG4gICAgICAgICAgKFwnZGV2aWNlLmNsaWVudC1pZC1vci11c2VyLW5hbWUtbmVjZXNzYXJ5XCcgfCB0cmFuc2xhdGUpIDogXCdcJyI+PC90Yi1lcnJvcj5cbiAgICAgICAgICAgIDx0Yi1maWxlLWlucHV0XG4gICAgICAgICAgICAgIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICBoaW50PSJ7eyBcJ2dhdGV3YXkuaGludHMuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwndGxzXCcpIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImNhQ2VydCJcbiAgICAgICAgICAgICAgbGFiZWw9Int7IFwnc2VjdXJpdHkuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBbYWxsb3dlZEV4dGVuc2lvbnNdPSJcJ3BlbSwgY2VydCwga2V5XCciXG4gICAgICAgICAgICAgIFthY2NlcHRdPSJcJy5wZW0sIGFwcGxpY2F0aW9uL3BlbSwuY2VydCwgYXBwbGljYXRpb24vY2VydCwgLmtleSxhcHBsaWNhdGlvbi9rZXlcJyJcbiAgICAgICAgICAgICAgZHJvcExhYmVsPSJ7eyBcJ2dhdGV3YXkuZHJvcC1maWxlXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgPC90Yi1maWxlLWlucHV0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5sb2dzLmxvZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImxvZ3MiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGVGb3JtYXQiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5kYXRlRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0ZS1mb3JtXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sb2ctZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImxvZ0Zvcm1hdCIgcm93cz0iMiI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2dGb3JtYXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MubG9nLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmxvZy1mb3JtYXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iIGZvcm1Hcm91cE5hbWU9InJlbW90ZSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5yZW1vdGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWxvZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5yZW1vdGUtbG9nc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJsb2dMZXZlbCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJsb2NhbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5sb2NhbDwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIFtmb3JtQ29udHJvbF09ImxvZ1NlbGVjdG9yIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0NvbmZpZyBvZiBsb2NhbExvZ3NDb25maWdzIiBbdmFsdWVdPSJsb2dDb25maWciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmlyc3QtY2FwaXRhbCI+e3sgbG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwLmdldChsb2dDb25maWcpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJnZXRMb2dGb3JtR3JvdXAobG9nU2VsZWN0b3IudmFsdWUpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5maWxlLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaWxlUGF0aCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmZpbGVQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MuZmlsZS1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBzYXZpbmctcGVyaW9kIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1RpbWUiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5zYXZpbmdUaW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2QtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGhpZGVSZXF1aXJlZE1hcmtlciBzdHlsZT0ibWluLXdpZHRoOiAxMTBweDsgd2lkdGg6IDMwJSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1BlcmlvZCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBlcmlvZCBvZiBsb2dTYXZpbmdQZXJpb2RzIHwga2V5dmFsdWUiIFt2YWx1ZV09InBlcmlvZC5rZXkiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBlcmlvZC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImJhY2t1cENvdW50IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmJhY2t1cENvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5iYWNrdXAtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0ic3RvcmFnZSIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+Z2F0ZXdheS5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+Z2F0ZXdheS5oaW50cy5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgY2xhc3M9InRvZ2dsZS1ncm91cCIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZXNUcmFuc2xhdGlvbk1hcC5nZXQoc3RvcmFnZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+e3sgXCdnYXRld2F5LmhpbnRzLlwnICsgYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnR5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLk1FTU9SWSIgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnJlYWQtcmVjb3JkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3JkczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXJlY29yZHMtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuRklMRSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9mb2xkZXJfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXQtZm9ybS1maWVsZC1pbmZpeCBwb2ludGVyLWV2ZW50IHN1ZmZpeC1pY29uIiBhcmlhLWhpZGRlbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iaGVscC1pY29uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X2ZpbGVfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfZmlsZV9jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1maWxlLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWFkX3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWFkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfcGVyX2ZpbGUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19wZXJfZmlsZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuU1FMSVRFIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRhX2ZpbGVfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZpbGVfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGEtZm9sZGVyXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50dGwtY2hlY2staG91clwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5czwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2luX2RheXMiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2luX2RheXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLW1lc3NhZ2VzLWRheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ3JwY1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0iZ3JwYyIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5wZXJtaXQtd2l0aG91dC1jYWxsc1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5wZXJtaXQtd2l0aG91dC1jYWxsc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJQb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5zZXJ2ZXItcG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLnNlcnZlclBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1heFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ia2VlcEFsaXZlVGltZW91dE1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLWtlZXAtYWxpdmUtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVvdXRNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluVGltZUJldHdlZW5QaW5nc01zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblRpbWVCZXR3ZWVuUGluZ3NNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtYXhQaW5nc1dpdGhvdXREYXRhIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGFcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1heFBpbmdzV2l0aG91dERhdGFcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWNzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj0icHJpbWFyeSIgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InN0YXRzU2VuZFBlcmlvZEluU2Vjb25kcyIgdHlwZT0ibnVtYmVyIiBtaW49IjYwIi8+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnN0YXRpc3RpY3Muc3RhdHNTZW5kUGVyaW9kSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZHM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiIHRyYW5zbGF0ZT5nYXRld2F5LmhpbnRzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZm9ybUFycmF5TmFtZT0iY29tbWFuZHMiIGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29tbWFuZENvbnRyb2wgb2YgY29tbWFuZEZvcm1BcnJheSgpLmNvbnRyb2xzOyBsZXQgJGluZGV4ID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8c2VjdGlvbiBbZm9ybUdyb3VwTmFtZV09IiRpbmRleCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBuby1wYWRkaW5nLWJvdHRvbSBuby1nYXAgY29tbWFuZC1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJhdHRyaWJ1dGVPbkdhdGV3YXkiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnYXR0cmlidXRlT25HYXRld2F5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXR0cmlidXRlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MudGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCd0aW1lb3V0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2NvbW1hbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9InJlbW92ZUNvbW1hbmRDb250cm9sKCRpbmRleCwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItYm94LWJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IGZpdC1jb250ZW50OyJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkQ29tbWFuZCgpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuYWRkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5vdGhlclwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCIgZm9ybUdyb3VwTmFtZT0iY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSJcbiAgICAgICAgICAgICBbY2xhc3Mubm8tcGFkZGluZy1ib3R0b21dPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmNoZWNrRGV2aWNlSW5hY3Rpdml0eVwnKS52YWx1ZSI+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNoZWNrLWRldmljZS1hY3Rpdml0eVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImNoZWNrRGV2aWNlSW5hY3Rpdml0eSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jaGVja2luZy1kZXZpY2UtYWN0aXZpdHlcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlUaW1lb3V0U2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBmb3JtQ29udHJvbE5hbWU9ImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5pbmFjdGl2aXR5LXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmFkdmFuY2VkPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTZW5kRGVsYXlNUyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbmltYWwtcGFjay1kZWxheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tcXR0LXFvczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJxb3MiIHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjEiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtYXhcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnFvc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGF5bG9hZFNpemVCeXRlcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1heFBheWxvYWRTaXplQnl0ZXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluUGFja1NpemVUb1NlbmQiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2l6ZVRvU2VuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWluLXBhY2stc2l6ZS10by1zZW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLXJvd3M6bWluLWNvbnRlbnQgbWlubWF4KGF1dG8sMWZyKSBtaW4tY29udGVudH06aG9zdCAuY29uZmlndXJhdGlvbi1ibG9ja3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxNnB4O21heC1oZWlnaHQ6NzB2aH06aG9zdCAuZGlhbG9nLW1vZGUgLmNvbmZpZ3VyYXRpb24tYmxvY2t7bWF4LWhlaWdodDo2MHZofTpob3N0IC5tYXQtdG9vbGJhcntncmlkLXJvdzoxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzAwMDAwMGRlIWltcG9ydGFudH06aG9zdCAudGFiLWdyb3VwLWJsb2Nre21pbi13aWR0aDowO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6MDtncmlkLXJvdzoyfTpob3N0IC50b2dnbGUtZ3JvdXB7bWFyZ2luLXJpZ2h0OmF1dG99Omhvc3QgLmZpcnN0LWNhcGl0YWx7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZX06aG9zdCB0ZXh0YXJlYXtyZXNpemU6bm9uZX06aG9zdCAuc2F2aW5nLXBlcmlvZHtmbGV4OjF9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVye3dpZHRoOjEwMCV9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIC5jb21tYW5kLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcjpmaXJzdC1jaGlsZHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH06aG9zdCA6Om5nLWRlZXAgLnBvaW50ZXItZXZlbnR7cG9pbnRlci1ldmVudHM6YWxsfTpob3N0IDo6bmctZGVlcCAudG9nZ2xlLWdyb3VwIHNwYW57cGFkZGluZzowIDI1cHh9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7Y29sb3I6I2UwZTBlMH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeDpob3Zlcntjb2xvcjojOWU5ZTllfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkRldmljZVNlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOkplLk1hdERpYWxvZ31dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dNb2RlOlt7dHlwZTphfV0saW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZDpbe3R5cGU6bH1dfX0pO2NsYXNzIFBve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCIiKSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5hZHZhbmNlZEZvcm1Db250cm9sLnJlc2V0KGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMuYWR2YW5jZWRGb3JtQ29udHJvbC52YWxpZD9udWxsOnthZHZhbmNlZEZvcm1Db250cm9sOnt2YWxpZDohMX19fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpQbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+UG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48dGItanNvbi1vYmplY3QtZWRpdFxuICBmaWxsSGVpZ2h0PSJ0cnVlIlxuICBjbGFzcz0idGItZmxleCBjb25maWctY29udGFpbmVyIlxuICBmeExheW91dD0iY29sdW1uIlxuICBqc29uUmVxdWlyZWRcbiAgbGFiZWw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX0iXG4gIFtmb3JtQ29udHJvbF09ImFkdmFuY2VkRm9ybUNvbnRyb2wiXG4vPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5jb25maWctY29udGFpbmVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KTtwYWRkaW5nOjhweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUFkdmFuY2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudCIsUG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5QbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjx0Yi1qc29uLW9iamVjdC1lZGl0XG4gIGZpbGxIZWlnaHQ9InRydWUiXG4gIGNsYXNzPSJ0Yi1mbGV4IGNvbmZpZy1jb250YWluZXIiXG4gIGZ4TGF5b3V0PSJjb2x1bW4iXG4gIGpzb25SZXF1aXJlZFxuICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgW2Zvcm1Db250cm9sXT0iYWR2YW5jZWRGb3JtQ29udHJvbCJcbi8+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmNvbmZpZy1jb250YWluZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpO3BhZGRpbmc6OHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIEdve2NvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLmRldmljZVNlcnZpY2U9bix0aGlzLmNkPWEsdGhpcy5Db25maWd1cmF0aW9uTW9kZXM9b24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5nYXRld2F5Q29uZmlnQXR0cmlidXRlS2V5cz1bImdlbmVyYWxfY29uZmlndXJhdGlvbiIsImdycGNfY29uZmlndXJhdGlvbiIsImxvZ3NfY29uZmlndXJhdGlvbiIsInN0b3JhZ2VfY29uZmlndXJhdGlvbiIsIlJlbW90ZUxvZ2dpbmdMZXZlbCIsIm1vZGUiXSx0aGlzLmdhdGV3YXlDb25maWdHcm91cD10aGlzLmZiLmdyb3VwKHtiYXNpY0NvbmZpZzpbXSxhZHZhbmNlZENvbmZpZzpbXSxtb2RlOltvbi5CQVNJQ119KSx0aGlzLm9ic2VydmVBbGlnbkNvbmZpZ3MoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmZldGNoQ29uZmlnQXR0cmlidXRlKHRoaXMuZGV2aWNlKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1zYXZlQ29uZmlnKCl7Y29uc3R7bW9kZTplLGFkdmFuY2VkQ29uZmlnOnR9PXBlKHRoaXMucmVtb3ZlRW1wdHkodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAudmFsdWUpKSxuPXttb2RlOmUsLi4udH07bi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPU9iamVjdC52YWx1ZXMobi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPz9bXSk7Y29uc3QgYT10aGlzLmdlbmVyYXRlQXR0cmlidXRlcyhuKTt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsYSkucGlwZShVZSgoZT0+dGhpcy51cGRhdGVDcmVkZW50aWFscyhuLnRoaW5nc2JvYXJkLnNlY3VyaXR5KSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5kaWFsb2dSZWY/dGhpcy5kaWFsb2dSZWYuY2xvc2UoKToodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSl9KSl9b2JzZXJ2ZUFsaWduQ29uZmlncygpe3RoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5CQVNJQ3x8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYWR2YW5jZWRDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImJhc2ljQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5BRFZBTkNFRHx8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWdlbmVyYXRlQXR0cmlidXRlcyhlKXtjb25zdCB0PVtdLG49KGUsbik9Pnt0LnB1c2goe2tleTplLHZhbHVlOm59KX0sYT0oZSx0KT0+e3Q9ey4uLnQsdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LG4oZSx0KX07cmV0dXJuIG4oIlJlbW90ZUxvZ2dpbmdMZXZlbCIsZS5sb2dzPy5yZW1vdGU/LmVuYWJsZWQ/ZS5sb2dzLnJlbW90ZS5sb2dMZXZlbDpNdC5OT05FKSxkZWxldGUgZS5jb25uZWN0b3JzLG4oImxvZ3NfY29uZmlndXJhdGlvbiIsdGhpcy5nZW5lcmF0ZUxvZ3NGaWxlKGUubG9ncykpLGEoImdycGNfY29uZmlndXJhdGlvbiIsZS5ncnBjKSxhKCJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iLGUuc3RvcmFnZSksYSgiZ2VuZXJhbF9jb25maWd1cmF0aW9uIixlLnRoaW5nc2JvYXJkKSxuKCJtb2RlIixlLm1vZGUpLHR9dXBkYXRlQ3JlZGVudGlhbHMoZSl7bGV0IHQ9e307c3dpdGNoKGUudHlwZSl7Y2FzZSBWdC5VU0VSTkFNRV9QQVNTV09SRDp0aGlzLnNob3VsZFVwZGF0ZUNyZWRlbnRpYWxzKGUpJiYodD10aGlzLmdlbmVyYXRlTXF0dENyZWRlbnRpYWxzKGUpKTticmVhaztjYXNlIFZ0LkFDQ0VTU19UT0tFTjpjYXNlIFZ0LlRMU19BQ0NFU1NfVE9LRU46dGhpcy5zaG91bGRVcGRhdGVBY2Nlc3NUb2tlbihlKSYmKHQ9e2NyZWRlbnRpYWxzVHlwZTpVLkFDQ0VTU19UT0tFTixjcmVkZW50aWFsc0lkOmUuYWNjZXNzVG9rZW59KX1yZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoP3RoaXMuZGV2aWNlU2VydmljZS5zYXZlRGV2aWNlQ3JlZGVudGlhbHMoey4uLnRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLC4uLnR9KTpJZShudWxsKX1zaG91bGRVcGRhdGVDcmVkZW50aWFscyhlKXtpZih0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLk1RVFRfQkFTSUMpcmV0dXJuITA7Y29uc3QgdD1KU09OLnBhcnNlKHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLmNyZWRlbnRpYWxzVmFsdWUpO3JldHVybiEodC5jbGllbnRJZD09PWUuY2xpZW50SWQmJnQudXNlck5hbWU9PT1lLnVzZXJuYW1lJiZ0LnBhc3N3b3JkPT09ZS5wYXNzd29yZCl9Z2VuZXJhdGVNcXR0Q3JlZGVudGlhbHMoZSl7Y29uc3R7Y2xpZW50SWQ6dCx1c2VybmFtZTpuLHBhc3N3b3JkOmF9PWUsbz17Li4udCYme2NsaWVudElkOnR9LC4uLm4mJnt1c2VyTmFtZTpufSwuLi5hJiZ7cGFzc3dvcmQ6YX19O3JldHVybntjcmVkZW50aWFsc1R5cGU6VS5NUVRUX0JBU0lDLGNyZWRlbnRpYWxzVmFsdWU6SlNPTi5zdHJpbmdpZnkobyl9fXNob3VsZFVwZGF0ZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLkFDQ0VTU19UT0tFTnx8dGhpcy5pbml0aWFsQ3JlZGVudGlhbHMuY3JlZGVudGlhbHNJZCE9PWUuYWNjZXNzVG9rZW59Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYmJnRoaXMuZGlhbG9nUmVmLmNsb3NlKCl9cmVtb3ZlRW1wdHkoZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKChbZSx0XSk9Pm51bGwhPXQpKS5tYXAoKChbZSx0XSk9PltlLHQ9PT1PYmplY3QodCk/dGhpcy5yZW1vdmVFbXB0eSh0KTp0XSkpKX1nZW5lcmF0ZUxvZ3NGaWxlKGUpe2NvbnN0IHQ9e3ZlcnNpb246MSxkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM6ITEsZm9ybWF0dGVyczp7TG9nRm9ybWF0dGVyOntjbGFzczoibG9nZ2luZy5Gb3JtYXR0ZXIiLGZvcm1hdDplLmxvZ0Zvcm1hdCxkYXRlZm10OmUuZGF0ZUZvcm1hdH19LGhhbmRsZXJzOntjb25zb2xlSGFuZGxlcjp7Y2xhc3M6ImxvZ2dpbmcuU3RyZWFtSGFuZGxlciIsZm9ybWF0dGVyOiJMb2dGb3JtYXR0ZXIiLGxldmVsOjAsc3RyZWFtOiJleHQ6Ly9zeXMuc3Rkb3V0In0sZGF0YWJhc2VIYW5kbGVyOntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6Ii4vbG9ncy9kYXRhYmFzZS5sb2ciLGJhY2t1cENvdW50OjEsZW5jb2Rpbmc6InV0Zi04In19LGxvZ2dlcnM6e2RhdGFiYXNlOntoYW5kbGVyczpbImRhdGFiYXNlSGFuZGxlciIsImNvbnNvbGVIYW5kbGVyIl0sbGV2ZWw6IkRFQlVHIixwcm9wYWdhdGU6ITF9fSxyb290OntsZXZlbDoiRVJST1IiLGhhbmRsZXJzOlsiY29uc29sZUhhbmRsZXIiXX0sdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9O3JldHVybiB0aGlzLmFkZExvY2FsTG9nZ2Vycyh0LGUubG9jYWwpLHR9YWRkTG9jYWxMb2dnZXJzKGUsdCl7Zm9yKGNvbnN0IG4gb2YgT2JqZWN0LmtleXModCkpZS5oYW5kbGVyc1tuKyJIYW5kbGVyIl09dGhpcy5jcmVhdGVIYW5kbGVyT2JqKHRbbl0sbiksZS5sb2dnZXJzW25dPXRoaXMuY3JlYXRlTG9nZ2VyT2JqKHRbbl0sbil9Y3JlYXRlSGFuZGxlck9iaihlLHQpe3JldHVybntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6YCR7ZS5maWxlUGF0aH0vJHt0fS5sb2dgLGJhY2t1cENvdW50OmUuYmFja3VwQ291bnQsaW50ZXJ2YWw6ZS5zYXZpbmdUaW1lLHdoZW46ZS5zYXZpbmdQZXJpb2QsZW5jb2Rpbmc6InV0Zi04In19Y3JlYXRlTG9nZ2VyT2JqKGUsdCl7cmV0dXJue2hhbmRsZXJzOltgJHt0fUhhbmRsZXJgLCJjb25zb2xlSGFuZGxlciJdLGxldmVsOmUubG9nTGV2ZWwscHJvcGFnYXRlOiExfX1mZXRjaENvbmZpZ0F0dHJpYnV0ZShlKXtlLmlkIT09ayYmdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLkNMSUVOVF9TQ09QRSkucGlwZShfZSgodD0+dC5sZW5ndGg/SWUodCk6dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLlNIQVJFRF9TQ09QRSx0aGlzLmdhdGV3YXlDb25maWdBdHRyaWJ1dGVLZXlzKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbmZpZ3MoZSksdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9dXBkYXRlQ29uZmlncyhlKXtjb25zdCB0PXt0aGluZ3Nib2FyZDp7fSxncnBjOnt9LGxvZ3M6e30sc3RvcmFnZTp7fSxtb2RlOm9uLkJBU0lDfTtlLmZvckVhY2goKGU9Pntzd2l0Y2goZS5rZXkpe2Nhc2UiZ2VuZXJhbF9jb25maWd1cmF0aW9uIjp0LnRoaW5nc2JvYXJkPWUudmFsdWUsdGhpcy51cGRhdGVGb3JtQ29udHJvbHMoZS52YWx1ZSk7YnJlYWs7Y2FzZSJncnBjX2NvbmZpZ3VyYXRpb24iOnQuZ3JwYz1lLnZhbHVlO2JyZWFrO2Nhc2UibG9nc19jb25maWd1cmF0aW9uIjp0LmxvZ3M9dGhpcy5sb2dzVG9PYmooZS52YWx1ZSk7YnJlYWs7Y2FzZSJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iOnQuc3RvcmFnZT1lLnZhbHVlO2JyZWFrO2Nhc2UibW9kZSI6dC5tb2RlPWUudmFsdWU7YnJlYWs7Y2FzZSJSZW1vdGVMb2dnaW5nTGV2ZWwiOnQubG9ncz17Li4udC5sb2dzLHJlbW90ZTp7ZW5hYmxlZDplLnZhbHVlIT09TXQuTk9ORSxsb2dMZXZlbDplLnZhbHVlfX19fSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS5zZXRWYWx1ZSh0LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIikuc2V0VmFsdWUodCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUNvbnRyb2xzKGUpe2NvbnN0e3R5cGU6dCxhY2Nlc3NUb2tlbjpuLC4uLmF9PWUuc2VjdXJpdHk/P3t9O3RoaXMuaW5pdGlhbENyZWRlbnRpYWxzPXtkZXZpY2VJZDp0aGlzLmRldmljZSxjcmVkZW50aWFsc1R5cGU6dCxjcmVkZW50aWFsc0lkOm4sY3JlZGVudGlhbHNWYWx1ZTpKU09OLnN0cmluZ2lmeShhKX19bG9nc1RvT2JqKGUpe2NvbnN0e2Zvcm1hdDp0LGRhdGVmbXQ6bn09ZS5mb3JtYXR0ZXJzLkxvZ0Zvcm1hdHRlcjtyZXR1cm57bG9jYWw6T2JqZWN0LmtleXMoUHQpLnJlZHVjZSgoKHQsbik9Pntjb25zdCBhPWUuaGFuZGxlcnNbYCR7bn1IYW5kbGVyYF18fHt9LG89ZS5sb2dnZXJzW25dfHx7fTtyZXR1cm4gdFtuXT17bG9nTGV2ZWw6by5sZXZlbHx8TXQuSU5GTyxmaWxlUGF0aDphLmZpbGVuYW1lPy5zcGxpdChgLyR7bn1gKVswXXx8Ii4vbG9ncyIsYmFja3VwQ291bnQ6YS5iYWNrdXBDb3VudHx8NyxzYXZpbmdUaW1lOmEuaW50ZXJ2YWx8fDMsc2F2aW5nUGVyaW9kOmEud2hlbnx8RHQuZGF5c30sdH0pLHt9KSxsb2dGb3JtYXQ6dCxkYXRlRm9ybWF0Om59fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6R28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6R28sc2VsZWN0b3I6InRiLWdhdGV3YXktY29uZmlndXJhdGlvbiIsaW5wdXRzOntkZXZpY2U6ImRldmljZSIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsaW5wdXRzOlsiZGV2aWNlIiwiZGlhbG9nTW9kZSJdLG91dHB1dHM6WyJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6UG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUNvbmZpZ3VyYXRpb25Db21wb25lbnQiLEdvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkdvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbmZpZ3VyYXRpb24iLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTt2YXIgT289e2dhdGV3YXk6e2FkZHJlc3M6IkFkZHJlc3MiLCJhZGRyZXNzLXJlcXVpcmVkIjoiQWRkcmVzcyByZXF1aXJlZCIsImFkZC1lbnRyeSI6IkFkZCBjb25maWd1cmF0aW9uIiwiYWRkLWF0dHJpYnV0ZSI6IkFkZCBhdHRyaWJ1dGUiLCJhZGQtYXR0cmlidXRlLXVwZGF0ZSI6IkFkZCBhdHRyaWJ1dGUgdXBkYXRlIiwiYWRkLWtleSI6IkFkZCBrZXkiLCJhZGQtdGltZXNlcmllcyI6IkFkZCB0aW1lIHNlcmllcyIsImFkZC1tYXBwaW5nIjoiQWRkIG1hcHBpbmciLCJhZGQtc2xhdmUiOiJBZGQgU2xhdmUiLGFyZ3VtZW50czoiQXJndW1lbnRzIiwiYWRkLXJwYy1tZXRob2QiOiJBZGQgbWV0aG9kIiwiYWRkLXJwYy1yZXF1ZXN0IjoiQWRkIHJlcXVlc3QiLCJhZGQtdmFsdWUiOiJBZGQgYXJndW1lbnQiLGJhdWRyYXRlOiJCYXVkcmF0ZSIsYnl0ZXNpemU6IkJ5dGVzaXplIiwiZGVsZXRlLXZhbHVlIjoiRGVsZXRlIHZhbHVlIiwiZGVsZXRlLXJwYy1tZXRob2QiOiJEZWxldGUgbWV0aG9kIiwiZGVsZXRlLXJwYy1yZXF1ZXN0IjoiRGVsZXRlIHJlcXVlc3QiLCJkZWxldGUtYXR0cmlidXRlLXVwZGF0ZSI6IkRlbGV0ZSBhdHRyaWJ1dGUgdXBkYXRlIixhZHZhbmNlZDoiQWR2YW5jZWQiLCJhZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzIjoiQWR2YW5jZWQgY29ubmVjdGlvbiBzZXR0aW5ncyIsYXR0cmlidXRlczoiQXR0cmlidXRlcyIsImF0dHJpYnV0ZS11cGRhdGVzIjoiQXR0cmlidXRlIHVwZGF0ZXMiLCJhdHRyaWJ1dGUtZmlsdGVyIjoiQXR0cmlidXRlIGZpbHRlciIsImF0dHJpYnV0ZS1maWx0ZXItaGludCI6IkZpbHRlciBmb3IgaW5jb21pbmcgYXR0cmlidXRlIG5hbWUgZnJvbSBwbGF0Zm9ybSwgc3VwcG9ydHMgcmVndWxhciBleHByZXNzaW9uLiIsImF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWQiOiJBdHRyaWJ1dGUgZmlsdGVyIHJlcXVpcmVkLiIsImF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb24iOiJBdHRyaWJ1dGUgbmFtZSBleHByZXNzaW9uIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGV4cHJlc3Npb24gcmVxdWlyZWQuIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1oaW50IjoiSGludCBmb3IgQXR0cmlidXRlIG5hbWUgZXhwcmVzc2lvbiIsYmFzaWM6IkJhc2ljIiwiYnl0ZS1vcmRlciI6IkJ5dGUgb3JkZXIiLCJ3b3JkLW9yZGVyIjoiV29yZCBvcmRlciIsYnJva2VyOntjb25uZWN0aW9uOiJDb25uZWN0aW9uIHRvIGJyb2tlciIsbmFtZToiQnJva2VyIG5hbWUiLCJuYW1lLXJlcXVpcmVkIjoiQnJva2VyIG5hbWUgcmVxdWlyZWQuIiwic2VjdXJpdHktdHlwZXMiOnthbm9ueW1vdXM6IkFub255bW91cyIsYmFzaWM6IkJhc2ljIixjZXJ0aWZpY2F0ZXM6IkNlcnRpZmljYXRlcyJ9fSwiQ0EtY2VydGlmaWNhdGUtcGF0aCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsInBhdGgtdG8tQ0EtY2VydC1yZXF1aXJlZCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjaGFuZ2UtY29ubmVjdG9yLXRpdGxlIjoiQ29uZmlybSBjb25uZWN0b3IgY2hhbmdlIiwiY2hhbmdlLWNvbm5lY3Rvci10ZXh0IjoiU3dpdGNoaW5nIGNvbm5lY3RvcnMgd2lsbCBkaXNjYXJkIGFueSB1bnNhdmVkIGNoYW5nZXMuIENvbnRpbnVlPyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IkNoZWNraW5nIGRldmljZSBhY3Rpdml0eSIsY29tbWFuZDoiRG9ja2VyIGNvbW1hbmRzIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlciBjb21tYW5kIGhhcyBiZWVuIGNvcGllZCB0byBjbGlwYm9hcmQiLGNvbmZpZ3VyYXRpb246IkNvbmZpZ3VyYXRpb24iLCJhZGQtY29ubmVjdG9yIjoiQWRkIGNvbm5lY3RvciIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKHMpIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJDb25uZWN0IGF0dGVtcHQgdGltZSAobXMpIiwiY29ubmVjdC1hdHRlbXB0LWNvdW50IjoiQ29ubmVjdCBhdHRlbXB0IGNvdW50IiwiY29weS11c2VybmFtZSI6IkNvcHkgdXNlcm5hbWUiLCJjb3B5LXBhc3N3b3JkIjoiQ29weSBwYXNzd29yZCIsImNvcHktY2xpZW50LWlkIjoiQ29weSBjbGllbnQgSUQiLCJjb25uZWN0b3ItY3JlYXRlZCI6IkNvbm5lY3RvciBjcmVhdGVkIiwiY29ubmVjdG9yLXVwZGF0ZWQiOiJDb25uZWN0b3IgdXBkYXRlZCIsInJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGUiOiJTYXZlIFRlbXBsYXRlIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXNwb25zZSIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiVXNlIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gdG8gcnVuIElvVCBHYXRld2F5IGluIERvY2tlciBjb21wb3NlIHdpdGggY3JlZGVudGlhbHMgZm9yIHNlbGVjdGVkIGRldmljZSIsImluc3RhbGwtZG9ja2VyLWNvbXBvc2UiOiJVc2UgdGhlIGluc3RydWN0aW9ucyB0byBkb3dubG9hZCwgaW5zdGFsbCBhbmQgc2V0dXAgZG9ja2VyIGNvbXBvc2UiLCJkZXZpY2UtaW5mby1zZXR0aW5ncyI6IkRldmljZSBpbmZvIHNldHRpbmdzIiwiZGV2aWNlLWluZm8iOnsiZW50aXR5LWZpZWxkIjoiRW50aXR5IGZpZWxkIixzb3VyY2U6IlNvdXJjZSIsZXhwcmVzc2lvbjoiVmFsdWUgLyBFeHByZXNzaW9uIiwiZXhwcmVzc2lvbi1oaW50IjoiU2hvdyBoZWxwIixuYW1lOiJOYW1lIiwicHJvZmlsZS1uYW1lIjoiUHJvZmlsZSBuYW1lIiwiZGV2aWNlLW5hbWUtZXhwcmVzc2lvbiI6IkRldmljZSBuYW1lIGV4cHJlc3Npb24iLCJkZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJkZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIHByb2ZpbGUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4ifSwiZGV2aWNlLW5hbWUtZmlsdGVyIjoiRGV2aWNlIG5hbWUgZmlsdGVyIiwiZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZmlsdGVyIGluY29taW5nIGRhdGEgYnkgZGV2aWNlIG5hbWUuIiwiZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZmlsdGVyIGlzIHJlcXVpcmVkLiIsZGV0YWlsczoiRGV0YWlscyIsImRlbGV0ZS1tYXBwaW5nLXRpdGxlIjoiRGVsZXRlIG1hcHBpbmc/IiwiZGVsZXRlLXNsYXZlLXRpdGxlIjoiRGVsZXRlIHNsYXZlPyIsZGl2aWRlcjoiRGl2aWRlciIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6IkRvd25sb2FkIGNvbmZpZ3VyYXRpb24gZmlsZSIsImRvd25sb2FkLWRvY2tlci1jb21wb3NlIjoiRG93bmxvYWQgZG9ja2VyLWNvbXBvc2UueW1sIGZvciB5b3VyIGdhdGV3YXkiLCJlbmFibGUtcmVtb3RlLWxvZ2dpbmciOiJFbmFibGUgcmVtb3RlIGxvZ2dpbmciLCJlbGxpcHNpcy1jaGlwcy10ZXh0IjoiKyB7e2NvdW50fX0gbW9yZSIsImxhdW5jaC1nYXRld2F5IjoiTGF1bmNoIGdhdGV3YXkiLCJsYXVuY2gtY29tbWFuZCI6IkxhdW5jaCBjb21tYW5kIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoiU3RhcnQgdGhlIGdhdGV3YXkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSB0ZXJtaW5hbCBmcm9tIGZvbGRlciB3aXRoIGRvY2tlci1jb21wb3NlLnltbCBmaWxlIiwibG9ncy1jb25maWd1cmF0aW9uIjoiTG9ncyBjb25maWd1cmF0aW9uIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXRlIGEgbmV3IGdhdGV3YXkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgZ2F0ZXdheSB3aXRoIG5hbWU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkNyZWF0ZWQgdGltZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXIiOiJDb25maWd1cmF0aW9ucyB3aWxsIGJlIGRlbGV0ZWQiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6IlR1cm5pbmcgb2ZmIFJlbW90ZSBDb25maWd1cmF0aW9uIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgaXMgcGh5c2ljYWwgYWNjZXNzIHRvIHRoZSBHYXRld2F5LiBBbGwgcHJldmlvdXMgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkLjxicj48YnI+IFxuVG8gdHVybiBvZmYgY29uZmlndXJhdGlvbiwgZW50ZXIgZ2F0ZXdheSBuYW1lIGJlbG93IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0IjoiR2F0ZXdheSBuYW1lIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIG1hbmRhdG9yeSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtIjoiVHVybiBPZmYiLCJjb25uZWN0b3ItZHVwbGljYXRlLW5hbWUiOiJDb25uZWN0b3Igd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMuIiwiY29ubmVjdG9yLXNpZGUiOiJDb25uZWN0b3Igc2lkZSIsInBheWxvYWQtdHlwZSI6IlBheWxvYWQgdHlwZSIsInBsYXRmb3JtLXNpZGUiOiJQbGF0Zm9ybSBzaWRlIixKU09OOiJKU09OIiwiSlNPTi1oaW50IjoiQ29udmVydGVyIGZvciB0aGlzIHBheWxvYWQgdHlwZSBwcm9jZXNzZXMgTVFUVCBtZXNzYWdlcyBpbiBKU09OIGZvcm1hdC4gSXQgdXNlcyBKU09OIFBhdGggZXhwcmVzc2lvbnMgdG8gZXh0cmFjdCB2aXRhbCBkZXRhaWxzIHN1Y2ggYXMgZGV2aWNlIG5hbWVzLCBkZXZpY2UgcHJvZmlsZSBuYW1lcywgYXR0cmlidXRlcywgYW5kIHRpbWUgc2VyaWVzIGZyb20gdGhlIG1lc3NhZ2UuIEFuZCByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGdldCBkZXZpY2UgZGV0YWlscyBmcm9tIHRvcGljcy4iLGJ5dGVzOiJCeXRlcyIsImJ5dGVzLWhpbnQiOiJDb252ZXJ0ZXIgZm9yIHRoaXMgcGF5bG9hZCB0eXBlIGRlc2lnbmVkIGZvciBiaW5hcnkgTVFUVCBwYXlsb2FkcywgdGhpcyBjb252ZXJ0ZXIgZGlyZWN0bHkgaW50ZXJwcmV0cyBiaW5hcnkgZGF0YSB0byByZXRyaWV2ZSBkZXZpY2UgbmFtZXMgYW5kIGRldmljZSBwcm9maWxlIG5hbWVzLCBhbG9uZyB3aXRoIGF0dHJpYnV0ZXMgYW5kIHRpbWUgc2VyaWVzLCB1c2luZyBzcGVjaWZpYyBieXRlIHBvc2l0aW9ucyBmb3IgZGF0YSBleHRyYWN0aW9uLiIsY3VzdG9tOiJDdXN0b20iLCJjdXN0b20taGludCI6IlRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gdXNlIGEgY3VzdG9tIGNvbnZlcnRlciBmb3Igc3BlY2lmaWMgZGF0YSB0YXNrcy4gWW91IG5lZWQgdG8gYWRkIHlvdXIgY3VzdG9tIGNvbnZlcnRlciB0byB0aGUgZXh0ZW5zaW9uIGZvbGRlciBhbmQgZW50ZXIgaXRzIGNsYXNzIG5hbWUgaW4gdGhlIFVJIHNldHRpbmdzLiBBbnkga2V5cyB5b3UgcHJvdmlkZSB3aWxsIGJlIHNlbnQgYXMgY29uZmlndXJhdGlvbiB0byB5b3VyIGN1c3RvbSBjb252ZXJ0ZXIuIiwiY2xpZW50LWNlcnQtcGF0aCI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIGZpbGUiLCJwYXRoLXRvLWNsaWVudC1jZXJ0LXJlcXVpcmVkIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjbGllbnQtaWQiOiJDbGllbnQgSUQiLCJkYXRhLWNvbnZlcnNpb24iOiJEYXRhIGNvbnZlcnNpb24iLCJkYXRhLW1hcHBpbmciOiJEYXRhIG1hcHBpbmciLCJkYXRhLW1hcHBpbmctaGludCI6IkRhdGEgbWFwcGluZyBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSB0byBwYXJzZSBhbmQgY29udmVydCB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIGEgTVFUVCBjbGllbnQgaW4gaW5jb21pbmcgbWVzc2FnZXMgaW50byBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBkYXRhIGtleXMuIiwib3BjdWEtZGF0YS1tYXBwaW5nLWhpbnQiOiJEYXRhIG1hcHBpbmcgcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgdG8gcGFyc2UgYW5kIGNvbnZlcnQgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBhIE9QQ1VBIHNlcnZlciBpbnRvIHNwZWNpZmljIGRhdGEga2V5cy4iLGRlbGV0ZToiRGVsZXRlIGNvbmZpZ3VyYXRpb24iLCJkZWxldGUtYXR0cmlidXRlIjoiRGVsZXRlIGF0dHJpYnV0ZSIsImRlbGV0ZS1rZXkiOiJEZWxldGUga2V5IiwiZGVsZXRlLXRpbWVzZXJpZXMiOiJEZWxldGUgdGltZSBzZXJpZXMiLGRlZmF1bHQ6IkRlZmF1bHQiLCJkZXZpY2Utbm9kZSI6IkRldmljZSBub2RlIiwiZGV2aWNlLW5vZGUtcmVxdWlyZWQiOiJEZXZpY2Ugbm9kZSByZXF1aXJlZC4iLCJkZXZpY2Utbm9kZS1oaW50IjoiUGF0aCBvciBpZGVudGlmaWVyIGZvciBkZXZpY2Ugbm9kZSBvbiBPUEMgVUEgc2VydmVyLiBSZWxhdGl2ZSBwYXRocyBmcm9tIGl0IGZvciBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBjYW4gYmUgdXNlZC4iLCJkZXZpY2UtbmFtZSI6IkRldmljZSBuYW1lIiwiZGV2aWNlLXByb2ZpbGUtbGFiZWwiOiJEZXZpY2UgcHJvZmlsZSIsImRldmljZS1uYW1lLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgcmVxdWlyZWQiLCJkZXZpY2UtcHJvZmlsZS1yZXF1aXJlZCI6IkRldmljZSBwcm9maWxlIHJlcXVpcmVkIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGVuYWJsZToiRW5hYmxlIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IkVuYWJsZSBzdWJzY3JpcHRpb24iLGV4dGVuc2lvbjoiRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uLWhpbnQiOiJQdXQgeW91ciBjb252ZXJ0ZXIgY2xhc3NuYW1lIGluIHRoZSBmaWVsZC4gQ3VzdG9tIGNvbnZlcnRlciB3aXRoIHN1Y2ggY2xhc3Mgc2hvdWxkIGJlIGluIGV4dGVuc2lvbi9tcXR0IGZvbGRlci4iLCJleHRlbnNpb24tcmVxdWlyZWQiOiJFeHRlbnNpb24gaXMgcmVxdWlyZWQuIiwiZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24iOiJFeHRlbnNpb24gY29uZmlndXJhdGlvbiIsImV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnQiOiJDb25maWd1cmF0aW9uIGZvciBjb252ZXJ0b3IiLCJmaWxsLWNvbm5lY3Rvci1kZWZhdWx0cyI6IkZpbGwgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHQgdmFsdWVzIiwiZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludCI6IlRoaXMgcHJvcGVydHkgYWxsb3dzIHRvIGZpbGwgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0IHZhbHVlcyBvbiBpdCdzIGNyZWF0aW9uLiIsImZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MiOiJJbnB1dCByZXF1ZXN0IHBhcnNpbmciLCJmcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnQiOiJUaGVzZSBmaWVsZHMgc3VwcG9ydCBKU09OUGF0aCBleHByZXNzaW9ucyB0byBleHRyYWN0IGEgbmFtZSBmcm9tIGluY29taW5nIG1lc3NhZ2UuIiwiZnVuY3Rpb24tY29kZSI6IkZ1bmN0aW9uIGNvZGUiLCJmdW5jdGlvbi1jb2RlcyI6eyJyZWFkLWNvaWxzIjoiMDEgLSBSZWFkIENvaWxzIiwicmVhZC1kaXNjcmV0ZS1pbnB1dHMiOiIwMiAtIFJlYWQgRGlzY3JldGUgSW5wdXRzIiwicmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyI6IjAzIC0gUmVhZCBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyIsInJlYWQtaW5wdXQtcmVnaXN0ZXJzIjoiMDQgLSBSZWFkIElucHV0IFJlZ2lzdGVycyIsIndyaXRlLXNpbmdsZS1jb2lsIjoiMDUgLSBXcml0ZSBTaW5nbGUgQ29pbCIsIndyaXRlLXNpbmdsZS1ob2xkaW5nLXJlZ2lzdGVyIjoiMDYgLSBXcml0ZSBTaW5nbGUgSG9sZGluZyBSZWdpc3RlciIsIndyaXRlLW11bHRpcGxlLWNvaWxzIjoiMTUgLSBXcml0ZSBNdWx0aXBsZSBDb2lscyIsIndyaXRlLW11bHRpcGxlLWhvbGRpbmctcmVnaXN0ZXJzIjoiMTYgLSBXcml0ZSBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyJ9LCJ0by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MiOiJPdXRwdXQgcmVxdWVzdCBwcm9jZXNzaW5nIiwidG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzLWhpbnQiOiJGb3IgdGhlc2UgZmllbGRzIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFuZCB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhY3R1YWwgdmFsdWVzOiAke2RldmljZU5hbWV9LCAke2F0dHJpYnV0ZUtleX0sICR7YXR0cmlidXRlVmFsdWV9IixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImdlbmVyYXRlLWNsaWVudC1pZCI6IkdlbmVyYXRlIENsaWVudCBJRCIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsaW5mbzoiSW5mbyIsaWRlbnRpdHk6IklkZW50aXR5IiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJ1bml0LWlkIjoiVW5pdCBJRCIsaG9zdDoiSG9zdCIsImhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsaG9sZGluZ19yZWdpc3RlcnM6IkhvbGRpbmcgcmVnaXN0ZXJzIixjb2lsc19pbml0aWFsaXplcjoiQ29pbHMgaW5pdGlhbGl6ZXIiLGlucHV0X3JlZ2lzdGVyczoiSW5wdXQgcmVnaXN0ZXJzIixkaXNjcmV0ZV9pbnB1dHM6IkRpc2NyZXRlIGlucHV0cyIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIkpTT05QYXRoLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIGNvbnN0YW50cyBhbmQgSlNPTlBhdGggZXhwcmVzc2lvbnMuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWF4LW51bWJlci1vZi13b3JrZXJzIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIiwibWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnQiOiJNYXhpbWFsIG51bWJlciBvZiB3b3JrZXJzIHRocmVhZHMgZm9yIGNvbnZlcnRlcnMgXG4oVGhlIGFtb3VudCBvZiB3b3JrZXJzIGNoYW5nZXMgZHluYW1pY2FsbHksIGRlcGVuZGluZyBvbiBsb2FkKSBcblJlY29tbWVuZGVkIGFtb3VudCA1MC0xNTAuIiwibWF4LW51bWJlci1vZi13b3JrZXJzLXJlcXVpcmVkIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIGlzIHJlcXVpcmVkLiIsIm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyIjoiTWF4IG1lc3NhZ2VzIHF1ZXVlIHBlciB3b3JrZXIiLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1oaW50IjoiTWF4aW1hbCBtZXNzYWdlcyBjb3VudCB0aGF0IHdpbGwgYmUgaW4gdGhlIHF1ZXVlIFxuZm9yIGVhY2ggY29udmVydGVyIHdvcmtlci4iLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZCI6Ik1heCBtZXNzYWdlcyBxdWV1ZSBwZXIgd29ya2VyIGlzIHJlcXVpcmVkLiIsbWV0aG9kOiJNZXRob2QiLCJtZXRob2QtbmFtZSI6Ik1ldGhvZCBuYW1lIiwibWV0aG9kLXJlcXVpcmVkIjoiTWV0aG9kIG5hbWUgaXMgcmVxdWlyZWQuIiwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwIiwibWluLXBhY2stc2VuZC1kZWxheS1wYXR0ZXJuIjoiTWluIHBhY2sgc2VuZCBkZWxheSBpcyBub3QgdmFsaWQiLG11bHRpcGxpZXI6Ik11bHRpcGxpZXIiLG1vZGU6Ik1vZGUiLCJtb2RlbC1uYW1lIjoiTW9kZWwgbmFtZSIsbW9kaWZpZXI6Ik1vZGlmaWVyIiwibW9kaWZpZXItaW52YWxpZCI6Ik1vZGlmaWVyIGlzIG5vdCB2YWxpZCIsIm1xdHQtdmVyc2lvbiI6Ik1RVFQgdmVyc2lvbiIsbmFtZToiTmFtZSIsIm5hbWUtcmVxdWlyZWQiOiJOYW1lIGlzIHJlcXVpcmVkLiIsIm5vLWF0dHJpYnV0ZXMiOiJObyBhdHRyaWJ1dGVzIiwibm8tYXR0cmlidXRlLXVwZGF0ZXMiOiJObyBhdHRyaWJ1dGUgdXBkYXRlcyIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJuby10aW1lc2VyaWVzIjoiTm8gdGltZSBzZXJpZXMiLCJuby1rZXlzIjoiTm8ga2V5cyIsIm5vLXZhbHVlIjoiTm8gYXJndW1lbnRzIiwibm8tcnBjLW1ldGhvZHMiOiJObyBSUEMgbWV0aG9kcyIsIm5vLXJwYy1yZXF1ZXN0cyI6Ik5vIFJQQyByZXF1ZXN0cyIsInBhdGgtaGludCI6IlRoZSBwYXRoIGlzIGxvY2FsIHRvIHRoZSBnYXRld2F5IGZpbGUgc3lzdGVtIiwicGF0aC1sb2dzIjoiUGF0aCB0byBsb2cgZmlsZXMiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYXRoIGlzIHJlcXVpcmVkLiIscGFzc3dvcmQ6IlBhc3N3b3JkIiwicGFzc3dvcmQtcmVxdWlyZWQiOiJQYXNzd29yZCBpcyByZXF1aXJlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IktlZXAgYWxpdmUgcGVybWl0IHdpdGhvdXQgY2FsbHMiLCJwb2xsLXBlcmlvZCI6IlBvbGwgcGVyaW9kIChtcykiLCJwb2xsLXBlcmlvZC1lcnJvciI6IlBvbGwgcGVyaW9kIHNob3VsZCBiZSBhdCBsZWFzdCB7e21pbn19IChtcykuIixwb3J0OiJQb3J0IiwicG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIiwicG9ydC1saW1pdHMtZXJyb3IiOiJQb3J0IHNob3VsZCBiZSBudW1iZXIgZnJvbSB7e21pbn19IHRvIHt7bWF4fX0uIiwicHJpdmF0ZS1rZXktcGF0aCI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgZmlsZSIsInBhdGgtdG8tcHJpdmF0ZS1rZXktcmVxdWlyZWQiOiJQYXRoIHRvIHByaXZhdGUga2V5IGZpbGUgaXMgcmVxdWlyZWQuIixwYXJpdHk6IlBhcml0eSIsInByb2R1Y3QtY29kZSI6IlByb2R1Y3QgY29kZSIsInByb2R1Y3QtbmFtZSI6IlByb2R1Y3QgbmFtZSIscmF3OiJSYXciLHJldGFpbjoiUmV0YWluIiwicmV0YWluLWhpbnQiOiJUaGlzIGZsYWcgdGVsbHMgdGhlIGJyb2tlciB0byBzdG9yZSB0aGUgbWVzc2FnZSBmb3IgYSB0b3BpY1xuYW5kIGVuc3VyZXMgYW55IG5ldyBjbGllbnQgc3Vic2NyaWJpbmcgdG8gdGhhdCB0b3BpY1xud2lsbCByZWNlaXZlIHRoZSBzdG9yZWQgbWVzc2FnZS4iLHJlbW90ZToiUmVtb3RlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IkxvZ2dpbmcgbGV2ZWwiLCJyZW1vdmUtZW50cnkiOiJSZW1vdmUgY29uZmlndXJhdGlvbiIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLHJldHJpZXM6IlJldHJpZXMiLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cmllcyBvbiBlbXB0eSIsInJldHJpZXMtb24taW52YWxpZCI6IlJldHJpZXMgb24gaW52YWxpZCIscnBjOnt0aXRsZToie3t0eXBlfX0gQ29ubmVjdG9yIFJQQyBwYXJhbWV0ZXJzIiwidGVtcGxhdGVzLXRpdGxlIjoiQ29ubmVjdG9yIFJQQyBUZW1wbGF0ZXMiLG1ldGhvZEZpbHRlcjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1uYW1lIjoiTWV0aG9kIG5hbWUiLHJlcXVlc3RUb3BpY0V4cHJlc3Npb246IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiIscmVzcG9uc2VUb3BpY0V4cHJlc3Npb246IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLHJlc3BvbnNlVGltZW91dDoiUmVzcG9uc2UgdGltZW91dCIsdmFsdWVFeHByZXNzaW9uOiJWYWx1ZSBleHByZXNzaW9uIix0YWc6IlRhZyIsdHlwZToiVHlwZSIsZnVuY3Rpb25Db2RlOiJGdW5jdGlvbiBDb2RlIixvYmplY3RzQ291bnQ6Ik9iamVjdHMgQ291bnQiLGFkZHJlc3M6IkFkZHJlc3MiLG1ldGhvZDoiTWV0aG9kIixyZXF1ZXN0VHlwZToiUmVxdWVzdCBUeXBlIixyZXF1ZXN0VGltZW91dDoiUmVxdWVzdCBUaW1lb3V0IixvYmplY3RUeXBlOiJPYmplY3QgdHlwZSIsaWRlbnRpZmllcjoiSWRlbnRpZmllciIscHJvcGVydHlJZDoiUHJvcGVydHkgSUQiLG1ldGhvZFJQQzoiTWV0aG9kIFJQQyBuYW1lIix3aXRoUmVzcG9uc2U6IldpdGggUmVzcG9uc2UiLGNoYXJhY3RlcmlzdGljVVVJRDoiQ2hhcmFjdGVyaXN0aWMgVVVJRCIsbWV0aG9kUHJvY2Vzc2luZzoiTWV0aG9kIFByb2Nlc3NpbmciLG5vZGVJRDoiTm9kZSBJRCIsaXNFeHRlbmRlZElEOiJJcyBFeHRlbmRlZCBJRCIsaXNGRDoiSXMgRkQiLGJpdHJhdGVTd2l0Y2g6IkJpdHJhdGUgU3dpdGNoIixkYXRhSW5IRVg6IkRhdGEgSW4gSEVYIixkYXRhTGVuZ3RoOiJEYXRhIExlbmd0aCIsZGF0YUJ5dGVvcmRlcjoiRGF0YSBCeXRlIE9yZGVyIixkYXRhQmVmb3JlOiJEYXRhIEJlZm9yZSIsZGF0YUFmdGVyOiJEYXRhIEFmdGVyIixkYXRhRXhwcmVzc2lvbjoiRGF0YSBFeHByZXNzaW9uIixlbmNvZGluZzoiRW5jb2RpbmciLG9pZDoiT0lEIiwiYWRkLW9pZCI6IkFkZCBPSUQiLCJhZGQtaGVhZGVyIjoiQWRkIGhlYWRlciIsImFkZC1zZWN1cml0eSI6IkFkZCBzZWN1cml0eSIscmVtb3ZlOiJSZW1vdmUiLHJlcXVlc3RGaWx0ZXI6IlJlcXVlc3QgRmlsdGVyIixyZXF1ZXN0VXJsRXhwcmVzc2lvbjoiUmVxdWVzdCBVUkwgRXhwcmVzc2lvbiIsaHR0cE1ldGhvZDoiSFRUUCBNZXRob2QiLHRpbWVvdXQ6IlRpbWVvdXQiLHRyaWVzOiJUcmllcyIsaHR0cEhlYWRlcnM6IkhUVFAgSGVhZGVycyIsImhlYWRlci1uYW1lIjoiSGVhZGVyIG5hbWUiLGhpbnQ6eyJtb2RidXMtcmVzcG9uc2UtcmVhZGluZyI6IlJQQyByZXNwb25zZSB3aWxsIHJldHVybiBhbGwgc3VidHJhY3RlZCB2YWx1ZXMgZnJvbSBhbGwgY29ubmVjdGVkIGRldmljZXMgd2hlbiB0aGUgcmVhZGluZyBmdW5jdGlvbnMgYXJlIHNlbGVjdGVkLiIsIm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9ucyI6IlJQQyB3aWxsIHdyaXRlIGEgZmlsbGVkIHZhbHVlIHRvIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyB3aGVuIHRoZSB3cml0aW5nIGZ1bmN0aW9ucyBhcmUgc2VsZWN0ZWQuIiwib3BjLW1ldGhvZCI6IkEgZmlsbGVkIG1ldGhvZCBuYW1lIGlzIHRoZSBPUEMtVUEgbWV0aG9kIHRoYXQgd2lsbCBwcm9jZXNzZWQgb24gdGhlIHNlcnZlciBzaWRlIChtYWtlIHN1cmUgeW91ciBub2RlIGhhcyB0aGUgcmVxdWVzdGVkIG1ldGhvZCkuIn0sInNlY3VyaXR5LW5hbWUiOiJTZWN1cml0eSBuYW1lIix2YWx1ZToiVmFsdWUiLHNlY3VyaXR5OiJTZWN1cml0eSIscmVzcG9uc2VWYWx1ZUV4cHJlc3Npb246IlJlc3BvbnNlIFZhbHVlIEV4cHJlc3Npb24iLHJlcXVlc3RWYWx1ZUV4cHJlc3Npb246IlJlcXVlc3QgVmFsdWUgRXhwcmVzc2lvbiIsYXJndW1lbnRzOiJBcmd1bWVudHMiLCJhZGQtYXJndW1lbnQiOiJBZGQgYXJndW1lbnQiLCJ3cml0ZS1wcm9wZXJ0eSI6IldyaXRlIHByb3BlcnR5IiwicmVhZC1wcm9wZXJ0eSI6IlJlYWQgcHJvcGVydHkiLCJhbmFsb2ctb3V0cHV0IjoiQW5hbG9nIG91dHB1dCIsImFuYWxvZy1pbnB1dCI6IkFuYWxvZyBpbnB1dCIsImJpbmFyeS1vdXRwdXQiOiJCaW5hcnkgb3V0cHV0IiwiYmluYXJ5LWlucHV0IjoiQmluYXJ5IGlucHV0IiwiYmluYXJ5LXZhbHVlIjoiQmluYXJ5IHZhbHVlIiwiYW5hbG9nLXZhbHVlIjoiQW5hbG9nIHZhbHVlIix3cml0ZToiV3JpdGUiLHJlYWQ6IlJlYWQiLHNjYW46IlNjYW4iLG9pZHM6Ik9JRFMiLHNldDoiU2V0IixtdWx0aXNldDoiTXVsdGlzZXQiLGdldDoiR2V0IiwiYnVsay13YWxrIjoiQnVsayB3YWxrIix0YWJsZToiVGFibGUiLCJtdWx0aS1nZXQiOiJNdWx0aWdldCIsImdldC1uZXh0IjoiR2V0IG5leHQiLCJidWxrLWdldCI6IkJ1bGsgZ2V0Iix3YWxrOiJXYWxrIiwic2F2ZS10ZW1wbGF0ZSI6IlNhdmUgdGVtcGxhdGUiLCJ0ZW1wbGF0ZS1uYW1lIjoiVGVtcGxhdGUgbmFtZSIsInRlbXBsYXRlLW5hbWUtcmVxdWlyZWQiOiJUZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLiIsInRlbXBsYXRlLW5hbWUtZHVwbGljYXRlIjoiVGVtcGxhdGUgd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgdXBkYXRlZC4iLGNvbW1hbmQ6IkNvbW1hbmQiLHBhcmFtczoiUGFyYW1zIiwianNvbi12YWx1ZS1pbnZhbGlkIjoiSlNPTiB2YWx1ZSBoYXMgYW4gaW52YWxpZCBmb3JtYXQifSwicnBjLW1ldGhvZHMiOiJSUEMgbWV0aG9kcyIsInJwYy1yZXF1ZXN0cyI6IlJQQyByZXF1ZXN0cyIscmVxdWVzdDp7ImNvbm5lY3QtcmVxdWVzdCI6IkNvbm5lY3QgcmVxdWVzdCIsImRpc2Nvbm5lY3QtcmVxdWVzdCI6IkRpc2Nvbm5lY3QgcmVxdWVzdCIsImF0dHJpYnV0ZS1yZXF1ZXN0IjoiQXR0cmlidXRlIHJlcXVlc3QiLCJhdHRyaWJ1dGUtdXBkYXRlIjoiQXR0cmlidXRlIHVwZGF0ZSIsInJwYy1jb25uZWN0aW9uIjoiUlBDIGNvbW1hbmQifSwicmVxdWVzdC10eXBlIjoiUmVxdWVzdCB0eXBlIiwicmVxdWVzdHMtbWFwcGluZyI6IlJlcXVlc3RzIG1hcHBpbmciLCJyZXF1ZXN0cy1tYXBwaW5nLWhpbnQiOiJNUVRUIENvbm5lY3RvciByZXF1ZXN0cyBhbGxvd3MgeW91IHRvIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHByb2Nlc3MgYXR0cmlidXRlIHJlcXVlc3RzIGZyb20gdGhlIGRldmljZSwgaGFuZGxlIGF0dHJpYnV0ZSB1cGRhdGVzIG9uIHRoZSBzZXJ2ZXIgYW5kIFJQQyBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24uIiwicmVxdWVzdC10b3BpYy1leHByZXNzaW9uIjoiUmVxdWVzdCB0b3BpYyBleHByZXNzaW9uIiwicmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGUiOiJSZXF1ZXN0IGNsaWVudCBjZXJ0aWZpY2F0ZSIsInJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS10aW1lb3V0IjoiUmVzcG9uc2UgdGltZW91dCAobXMpIiwicmVzcG9uc2UtdGltZW91dC1yZXF1aXJlZCI6IlJlc3BvbnNlIHRpbWVvdXQgaXMgcmVxdWlyZWQuIiwicmVzcG9uc2UtdGltZW91dC1saW1pdHMtZXJyb3IiOiJUaW1lb3V0IG11c3QgYmUgbW9yZSB0aGVuIHt7bWlufX0gbXMuIiwicmVzcG9uc2UtdG9waWMtUW9zIjoiUmVzcG9uc2UgdG9waWMgUW9TIiwicmVzcG9uc2UtdG9waWMtUW9zLWhpbnQiOiJNUVRUIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBpcyBhbiBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgbWVzc2FnZSBzZW5kZXIgYW5kIHJlY2VpdmVyIHRoYXQgZGVmaW5lcyB0aGUgbGV2ZWwgb2YgZGVsaXZlcnkgZ3VhcmFudGVlIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UuIiwicmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbiI6IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLCJyZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkIjoiUmVzcG9uc2UgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS12YWx1ZS1leHByZXNzaW9uIjoiUmVzcG9uc2UgdmFsdWUgZXhwcmVzc2lvbiIsInJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWQiOiJSZXNwb25zZSB2YWx1ZSBleHByZXNzaW9uIGlzIHJlcXVpcmVkLiIsInZlbmRvci1uYW1lIjoiVmVuZG9yIG5hbWUiLCJ2ZW5kb3ItdXJsIjoiVmVuZG9yIFVSTCIsdmFsdWU6IlZhbHVlIix2YWx1ZXM6IlZhbHVlcyIsInZhbHVlLXJlcXVpcmVkIjoiVmFsdWUgaXMgcmVxdWlyZWQuIiwidmFsdWUtZXhwcmVzc2lvbiI6IlZhbHVlIGV4cHJlc3Npb24iLCJ2YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiVmFsdWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJ3aXRoLXJlc3BvbnNlIjoiV2l0aCByZXNwb25zZSIsIndpdGhvdXQtcmVzcG9uc2UiOiJXaXRob3V0IHJlc3BvbnNlIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2Nhbi1wZXJpb2QiOiJTY2FuIHBlcmlvZCAobXMpIiwic2Nhbi1wZXJpb2QtZXJyb3IiOiJTY2FuIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJTdWJzY3JpcHRpb24gY2hlY2sgcGVyaW9kIChtcykiLCJzdWItY2hlY2stcGVyaW9kLWVycm9yIjoiU3Vic2NyaXB0aW9uIGNoZWNrIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInNlY3VyaXR5LWxhYmVsIjoiU2VjdXJpdHkiLCJzZWN1cml0eS1wb2xpY3kiOiJTZWN1cml0eSBwb2xpY3kiLCJzZWN1cml0eS10eXBlIjoiU2VjdXJpdHkgdHlwZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkFjY2VzcyBUb2tlbiIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXNlcm5hbWUgYW5kIFBhc3N3b3JkIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBBY2Nlc3MgVG9rZW4iLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyBQcml2YXRlIEtleSJ9LCJzZWxlY3QtY29ubmVjdG9yIjoiU2VsZWN0IGNvbm5lY3RvciB0byBkaXNwbGF5IGNvbmZpZyIsInNlbmQtY2hhbmdlLWRhdGEiOiJTZW5kIGRhdGEgb25seSBvbiBjaGFuZ2UiLCJzZW5kLWRhdGEtdG8tcGxhdGZvcm0iOiJTZW5kIGRhdGEgdG8gcGxhdGZvcm0iLCJzZW5kLWRhdGEtb24tY2hhbmdlIjoiU2VuZCBkYXRhIG9ubHkgb24gY2hhbmdlIiwic2VuZC1jaGFuZ2UtZGF0YS1oaW50IjoiVGhlIHZhbHVlcyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBkYXRhYmFzZSBvbmx5IGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgcHJldmlvdXMgY29udmVydGVkIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb25hbGl0eSBhcHBsaWVzIHRvIGJvdGggYXR0cmlidXRlcyBhbmQgdGltZSBzZXJpZXMgaW4gdGhlIGNvbnZlcnRlciBvdXRwdXQuIixzZXJ2ZXI6IlNlcnZlciIsInNlcnZlci1ob3N0bmFtZSI6IlNlcnZlciBob3N0bmFtZSIsInNlcnZlci1zbGF2ZSI6IlNlcnZlciAoU2xhdmUpIiwic2VydmVycy1zbGF2ZXMiOiJTZXJ2ZXJzIChTbGF2ZXMpIiwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsInNlcnZlci11cmwiOiJTZXJ2ZXIgZW5kcG9pbnQgdXJsIiwic2VydmVyLWNvbm5lY3Rpb24iOiJTZXJ2ZXIgQ29ubmVjdGlvbiIsInNlcnZlci1jb25maWciOiJTZXJ2ZXIgY29uZmlndXJhdGlvbiIsInNlcnZlci1zbGF2ZS1jb25maWciOiJTZXJ2ZXIgKFNsYXZlKSBjb25maWd1cmF0aW9uIiwic2VydmVyLXVybC1yZXF1aXJlZCI6IlNlcnZlciBlbmRwb2ludCB1cmwgaXMgcmVxdWlyZWQuIixzdG9wYml0czoiU3RvcGJpdHMiLHN0cmljdDoiU3RyaWN0IixzZXQ6IlNldCIsInNob3ctbWFwIjoiU2hvdyBtYXAiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiU3RhdGlzdGljIixzdGF0aXN0aWNzOiJTdGF0aXN0aWNzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjonTm8gY29uZmlndXJlZCBzdGF0aXN0aWMga2V5cyBmb3VuZC4gWW91IGNhbiBjb25maWd1cmUgdGhlbSBpbiAiU3RhdGlzdGljcyIgdGFiIGluIGdlbmVyYWwgY29uZmlndXJhdGlvbi4nLCJzdGF0aXN0aWNzLWJ1dHRvbiI6IkdvIHRvIGNvbmZpZ3VyYXRpb24iLGNvbW1hbmRzOiJDb21tYW5kcyIsInNlbmQtcGVyaW9kIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIChpbiBzZWMpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgcmVxdWlyZWQiLCJzZW5kLXBlcmlvZC1taW4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gNjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiAoaW4gc2VjKSIsIm1heC1wYXlsb2FkLXNpemUtYnl0ZXMiOiJNYXggcGF5bG9hZCBzaXplIGluIGJ5dGVzIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1yZXF1aXJlZCI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgaXMgcmVxdWlyZWQiLCJtYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pbiI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMTAwIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuIjoiTWF4IHBheWxvYWQgc2l6ZSBpbiBieXRlcyBpcyBub3QgdmFsaWQiLCJtaW4tcGFjay1zaXplLXRvLXNlbmQiOiJNaW4gcGFja2V0IHNpemUgdG8gc2VuZCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZCI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2l6ZS10by1zZW5kLW1pbiI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwMCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuIjoiTWluIHBhY2tldCBzaXplIHRvIHNlbmQgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IChpbiBzZWMpIiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLCJjb21tYW5kLXBhdHRlcm4iOiJDb21tYW5kIGlzIG5vdCB2YWxpZCIscmVtb3ZlOiJSZW1vdmUgY29tbWFuZCJ9LHN0b3JhZ2U6IlN0b3JhZ2UiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gZmlsZSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWF4aW11bSBudW1iZXIgb2YgZmlsZXMiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtYmVyIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1heGltdW0gcmVjb3JkcyBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiUmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50IjoiTWF4IHJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJNYXggUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiRGF0YSBmb2xkZXIgcGF0aCIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZCI6IkRhdGEgZm9sZGVyIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhdGgiOiJTdG9yYWdlIHBhdGgiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJTdG9yYWdlIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS10eXBlIjoiU3RvcmFnZSB0eXBlIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJGaWxlIHN0b3JhZ2UiLCJtZW1vcnktc3RvcmFnZSI6Ik1lbW9yeSBzdG9yYWdlIixzcWxpdGU6IlNRTElURSJ9LCJyZXBvcnQtc3RyYXRlZ3kiOntsYWJlbDoiUmVwb3J0IHN0cmF0ZWd5Iiwib24tY2hhbmdlIjoiT24gdmFsdWUgY2hhbmdlIiwib24tcmVwb3J0LXBlcmlvZCI6Ik9uIHJlcG9ydCBwZXJpb2QiLCJvbi1jaGFuZ2Utb3ItcmVwb3J0LXBlcmlvZCI6Ik9uIHZhbHVlIGNoYW5nZSBvciByZXBvcnQgcGVyaW9kIiwicmVwb3J0LXBlcmlvZCI6IlJlcG9ydCBwZXJpb2QifSwic291cmNlLXR5cGUiOnttc2c6IkV4dHJhY3QgZnJvbSBtZXNzYWdlIix0b3BpYzoiRXh0cmFjdCBmcm9tIHRvcGljIixjb25zdDoiQ29uc3RhbnQiLGlkZW50aWZpZXI6IklkZW50aWZpZXIiLHBhdGg6IlBhdGgifSwid29ya2Vycy1zZXR0aW5ncyI6IldvcmtlcnMgc2V0dGluZ3MiLHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsZ2VuZXJhbDoiR2VuZXJhbCIsdGltZXNlcmllczoiVGltZSBzZXJpZXMiLGtleToiS2V5IixrZXlzOiJLZXlzIiwia2V5LXJlcXVpcmVkIjoiS2V5IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLWhvc3QiOiJQbGF0Zm9ybSBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBsYXRmb3JtIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIix0aW1lb3V0OiJUaW1lb3V0IChtcykiLCJ0aW1lb3V0LWVycm9yIjoiVGltZW91dCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsdHlwZToiVHlwZSIsInRvcGljLWZpbHRlciI6IlRvcGljIGZpbHRlciIsInRvcGljLXJlcXVpcmVkIjoiVG9waWMgZmlsdGVyIGlzIHJlcXVpcmVkLiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1jb25uZWN0aW9uIjoiVExTIENvbm5lY3Rpb24iLCJtYXN0ZXItY29ubmVjdGlvbnMiOiJNYXN0ZXIgQ29ubmVjdGlvbnMiLCJtZXRob2QtZmlsdGVyIjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1maWx0ZXItaGludCI6IlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgaW5jb21pbmcgUlBDIG1ldGhvZCBmcm9tIHBsYXRmb3JtLiIsIm1ldGhvZC1maWx0ZXItcmVxdWlyZWQiOiJNZXRob2QgZmlsdGVyIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIscW9zOnsiYXQtbW9zdC1vbmNlIjoiMCAtIEF0IG1vc3Qgb25jZSIsImF0LWxlYXN0LW9uY2UiOiIxIC0gQXQgbGVhc3Qgb25jZSIsImV4YWN0bHktb25jZSI6IjIgLSBFeGFjdGx5IG9uY2UifSwib2JqZWN0cy1jb3VudCI6Ik9iamVjdHMgY291bnQiLCJvYmplY3RzLWNvdW50LXJlcXVpcmVkIjoiT2JqZWN0cyBjb3VudCBpcyByZXF1aXJlZCIsIndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzIjoiV2FpdCBhZnRlciBmYWlsZWQgYXR0ZW1wdHMgKG1zKSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsdXNlcm5hbWU6IlVzZXJuYW1lIiwidXNlcm5hbWUtcmVxdWlyZWQiOiJVc2VybmFtZSBpcyByZXF1aXJlZC4iLCJ1bml0LWlkLXJlcXVpcmVkIjoiVW5pdCBJRCBpcyByZXF1aXJlZC4iLCJ3cml0ZS1jb2lsIjoiV3JpdGUgQ29pbCIsIndyaXRlLWNvaWxzIjoiV3JpdGUgQ29pbHMiLCJ3cml0ZS1yZWdpc3RlciI6IldyaXRlIFJlZ2lzdGVyIiwid3JpdGUtcmVnaXN0ZXJzIjoiV3JpdGUgUmVnaXN0ZXJzIixoaW50czp7Im1vZGJ1cy1tYXN0ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb25zIGZvciBjb25uZWN0aW5nIHRvIE1vZGJ1cyBzZXJ2ZXJzIGFuZCByZWFkaW5nIGRhdGEgZnJvbSB0aGVtLiIsIm1vZGJ1cy1zZXJ2ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yIHRoZSBNb2RidXMgc2VydmVyLCBzdG9yaW5nIGRhdGEgYW5kIHNlbmRpbmcgdXBkYXRlcyB0byB0aGUgcGxhdGZvcm0gd2hlbiBjaGFuZ2VzIG9jY3VyIG9yIGF0IGZpeGVkIGludGVydmFscy4iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBwbGF0Zm9ybSBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIHBsYXRmb3JtIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBwbGF0Zm9ybSBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBwbGF0Zm9ybSBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIHBsYXRmb3JtIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gcGxhdGZvcm0gc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIHRoZSBmb2xkZXIgdGhhdCB3aWxsIGNvbnRhaW4gZGF0YSAoUmVsYXRpdmUgb3IgQWJzb2x1dGUpIiwibG9nLWZvcm1hdCI6IkxvZyBtZXNzYWdlIGZvcm1hdCIsInJlbW90ZS1sb2ciOiJFbmFibGVzIHJlbW90ZSBsb2dnaW5nIGFuZCBsb2dzIHJlYWRpbmcgZnJvbSB0aGUgZ2F0ZXdheSIsImJhY2t1cC1jb3VudCI6IklmIGJhY2t1cCBjb3VudCBpcyA+IDAsIHdoZW4gYSByb2xsb3ZlciBpcyBkb25lLCBubyBtb3JlIHRoYW4gYmFja3VwIGNvdW50IGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkIixzdG9yYWdlOiJQcm92aWRlcyBjb25maWd1cmF0aW9uIGZvciBzYXZpbmcgaW5jb21pbmcgZGF0YSBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgcGxhdGZvcm0iLCJtYXgtZmlsZS1jb3VudCI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJOdW1iZXIgb2YgbWVzc2FnZXMgdG8gcmV0cmlldmUgZnJvbSB0aGUgc3RvcmFnZSBhbmQgc2VuZCB0byBwbGF0Zm9ybSIsIm1heC1yZWNvcmRzIjoiTWF4aW11bSBjb3VudCBvZiByZWNvcmRzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gb25lIGZpbGUiLCJyZWFkLXJlY29yZC1jb3VudCI6Ik51bWJlciBvZiBtZXNzYWdlcyB0byByZXRyaWV2ZSBmcm9tIHRoZSBzdG9yYWdlIGFuZCBzZW5kIHRvIHBsYXRmb3JtIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIG51bWJlciBvZiBkYXRhIGVudHJpZXMgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZGluZyB0byBwbGF0Zm9ybSIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgdGhlIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gbnVtYmVyIG9mIGRheXMgdGhhdCB0aGUgc3RvcmFnZSB3aWxsIHJldGFpbiBkYXRhIixjb21tYW5kczoiQ29tbWFuZHMgZm9yIGNvbGxlY3RpbmcgYWRkaXRpb25hbCBzdGF0aXN0aWMiLGF0dHJpYnV0ZToiU3RhdGlzdGljIHRlbGVtZXRyeSBrZXkiLHRpbWVvdXQ6IlRpbWVvdXQgZm9yIGNvbW1hbmQgZXhlY3V0aW5nIixjb21tYW5kOiJUaGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kIGV4ZWN1dGlvbiwgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGVsZW1ldHJ5IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiRW5hYmxlcyBtb25pdG9yIHRoZSBhY3Rpdml0eSBvZiBlYWNoIGNvbm5lY3RlZCBkZXZpY2UiLCJpbmFjdGl2aXR5LXRpbWVvdXQiOiJUaW1lIGFmdGVyIHdob3NlIHRoZSBnYXRld2F5IHdpbGwgZGlzY29ubmVjdCBkZXZpY2UiLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZGljaXR5IG9mIGRldmljZSBhY3Rpdml0eSBjaGVjayIsIm1pbmltYWwtcGFjay1kZWxheSI6IkRlbGF5IGJldHdlZW4gc2VuZGluZyBwYWNrcyBvZiBtZXNzYWdlcyAoRGVjcmVhc2luZyB0aGlzIHNldHRpbmcgcmVzdWx0cyBpbiBpbmNyZWFzZWQgQ1BVIHVzYWdlKSIscW9zOiJRdWFsaXR5IG9mIFNlcnZpY2UgaW4gTVFUVCBtZXNzYWdpbmcgKDAgLSBhdCBtb3N0IG9uY2UsIDEgLSBhdCBsZWFzdCBvbmNlKSIsInNlcnZlci1wb3J0IjoiTmV0d29yayBwb3J0IG9uIHdoaWNoIEdSUEMgc2VydmVyIHdpbGwgbGlzdGVuIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Ik1heGltdW0gdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGZvciBhIGtlZXBhbGl2ZSBwaW5nIHJlc3BvbnNlIGJlZm9yZSBjb25zaWRlcmluZyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMta2VlcC1hbGl2ZSI6IkR1cmF0aW9uIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgUlBDIGNhbGwuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6Ik1heGltdW0gbnVtYmVyIG9mIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHRoYXQgdGhlIHNlcnZlciBjYW4gc2VuZCB3aXRob3V0IHJlY2VpdmluZyBhbnkgZGF0YSBiZWZvcmUgaXQgY29uc2lkZXJzIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gZGF0YSBiZWluZyBzZW50IG9yIHJlY2VpdmVkLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiQWxsb3cgc2VydmVyIHRvIGtlZXAgdGhlIEdSUEMgY29ubmVjdGlvbiBhbGl2ZSBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSBSUEMgY2FsbHMuIiwicGF0aC1pbi1vcyI6IlBhdGggaW4gZ2F0ZXdheSBvcy4iLG1lbW9yeToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBpbi1tZW1vcnkgcXVldWUsIGl0IGlzIGEgZmFzdGVzdCBidXQgbm8gcGVyc2lzdGVuY2UgZ3VhcmFudGVlLiIsZmlsZToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHNlcGFyYXRlZCBmaWxlcyBhbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIixzcWxpdGU6IllvdXIgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBmaWxlIGJhc2VkIGRhdGFiYXNlLiBBbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIiwib3BjLXRpbWVvdXQiOiJUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgY29ubmVjdGluZyB0byBPUEMtVUEgc2VydmVyLiIsInNlY3VyaXR5LXBvbGljeSI6IlNlY3VyaXR5IFBvbGljeSBkZWZpbmVzIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHRvIGJlIGFwcGxpZWQuIiwic2Nhbi1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlc2NhbiB0aGUgc2VydmVyLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJQZXJpb2QgdG8gY2hlY2sgdGhlIHN1YnNjcmlwdGlvbnMgaW4gdGhlIE9QQy1VQSBzZXJ2ZXIuIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IklmIHRydWUgLSB0aGUgZ2F0ZXdheSB3aWxsIHN1YnNjcmliZSB0byBpbnRlcmVzdGluZyBub2RlcyBhbmQgd2FpdCBmb3IgZGF0YSB1cGRhdGUgYW5kIGlmIGZhbHNlIC0gdGhlIGdhdGV3YXkgd2lsbCByZXNjYW4gT1BDLVVBIHNlcnZlciBldmVyeSBzY2FuUGVyaW9kSW5NaWxsaXMuIiwic2hvdy1tYXAiOiJTaG93IG5vZGVzIG9uIHNjYW5uaW5nLiIsIm1ldGhvZC1uYW1lIjoiTmFtZSBvZiBtZXRob2Qgb24gT1BDLVVBIHNlcnZlci4iLGFyZ3VtZW50czoiQXJndW1lbnRzIGZvciB0aGUgbWV0aG9kICh3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGFyZ3VtZW50cyBmcm9tIHRoZSBSUEMgcmVxdWVzdCkuIiwibWluLXBhY2stc2l6ZS10by1zZW5kIjoiTWluaW11bSBwYWNrYWdlIHNpemUgZm9yIHNlbmRpbmcuIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcyI6Ik1heGltdW0gcGFja2FnZSBzaXplIGluIGJ5dGVzIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlYWQgZGF0YSBmcm9tIG5vZGVzLiIsbW9kYnVzOnsiZnJhbWVyLXR5cGUiOiJUeXBlIG9mIGEgZnJhbWVyIChTb2NrZXQsIFJUVSwgb3IgQVNDSUkpLCBpZiBuZWVkZWQuIixob3N0OiJIb3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIE1vZGJ1cyBzZXJ2ZXIuIixwb3J0OiJNb2RidXMgc2VydmVyIHBvcnQgZm9yIGNvbm5lY3Rpb24uIiwidW5pdC1pZCI6Ik1vZGJ1cyBzbGF2ZSBJRC4iLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKGluIHNlY29uZHMpIGZvciB0aGUgTW9kYnVzIHNlcnZlci4iLCJieXRlLW9yZGVyIjoiQnl0ZSBvcmRlciBmb3IgcmVhZGluZyBkYXRhLiIsIndvcmQtb3JkZXIiOiJXb3JkIG9yZGVyIHdoZW4gcmVhZGluZyBtdWx0aXBsZSByZWdpc3RlcnMuIixyZXRyaWVzOiJSZXRyeWluZyBkYXRhIHRyYW5zbWlzc2lvbiB0byB0aGUgbWFzdGVyLiBBY2NlcHRhYmxlIHZhbHVlczogdHJ1ZSBvciBmYWxzZS4iLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgdGhlIGRhdGEgaXMgZW1wdHkuIiwicmV0cmllcy1vbi1pbnZhbGlkIjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgaXQgZmFpbHMuIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIGNoZWNrIGF0dHJpYnV0ZXMgYW5kIHRlbGVtZXRyeSBvbiB0aGUgc2xhdmUuIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgbWFzdGVyLiIsImNvbm5lY3QtYXR0ZW1wdC1jb3VudCI6IlRoZSBudW1iZXIgb2YgY29ubmVjdGlvbiBhdHRlbXB0cyBtYWRlIHRocm91Z2ggdGhlIGdhdGV3YXkuIiwid2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHMiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIGRhdGEgdG8gdGhlIG1hc3Rlci4iLCJzZXJpYWwtcG9ydCI6IlNlcmlhbCBwb3J0IGZvciBjb25uZWN0aW9uLiIsYmF1ZHJhdGU6IkJhdWQgcmF0ZSBmb3IgdGhlIHNlcmlhbCBkZXZpY2UuIixzdG9wYml0czoiVGhlIG51bWJlciBvZiBzdG9wIGJpdHMgc2VudCBhZnRlciBlYWNoIGNoYXJhY3RlciBpbiBhIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgYnl0ZS4iLGJ5dGVzaXplOiJUaGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBieXRlIG9mIHNlcmlhbCBkYXRhLiBUaGlzIGNhbiBiZSBvbmUgb2YgNSwgNiwgNywgb3IgOC4iLHBhcml0eToiVGhlIHR5cGUgb2YgY2hlY2tzdW0gdXNlZCB0byB2ZXJpZnkgZGF0YSBpbnRlZ3JpdHkuIE9wdGlvbnM6IChFKXZlbiwgKE8pZGQsIChOKW9uZS4iLHN0cmljdDoiVXNlIGludGVyLWNoYXJhY3RlciB0aW1lb3V0IGZvciBiYXVkcmF0ZXMg4omkIDE5MjAwLiIsIm9iamVjdHMtY291bnQiOiJEZXBlbmRzIG9uIHRoZSBzZWxlY3RlZCB0eXBlLiIsYWRkcmVzczoiUmVnaXN0ZXIgYWRkcmVzcyB0byB2ZXJpZnkuIixrZXk6IktleSB0byBiZSB1c2VkIGFzIHRoZSBhdHRyaWJ1dGUga2V5IGZvciB0aGUgcGxhdGZvcm0gaW5zdGFuY2UuIiwiZGF0YS1rZXlzIjoiRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZnVuY3Rpb24gY29kZXMgYW5kIGRhdGEgdHlwZXMgY2xpY2sgb24gaGVscCBpY29uIixtb2RpZmllcjoiVGhlIHJldHJpZXZlZCB2YWx1ZSB3aWxsIGJlIGFkanVzdGVkIChieSBtdWx0aXBseWluZyBvciBkaXZpZGluZyBpdCkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtb2RpZmllciB2YWx1ZS4ifX19fSxSbz17ImFkZC1lbnRyeSI6Itil2LbYp9mB2Kkg2KrZg9mI2YrZhiIsYWR2YW5jZWQ6ItmF2KrZgtiv2YUiLCJjaGVja2luZy1kZXZpY2UtYWN0aXZpdHkiOiLZgdit2LUg2YbYtNin2Lcg2KfZhNis2YfYp9iyIixjb21tYW5kOiLYo9mI2KfZhdixIERvY2tlciIsImNvbW1hbmQtY29waWVkLW1lc3NhZ2UiOiLYqtmFINmG2LPYriDYo9mF2LEgRG9ja2VyINil2YTZiSDYp9mE2K3Yp9mB2LjYqSIsY29uZmlndXJhdGlvbjoi2KfZhNiq2YPZiNmK2YYiLCJjb25uZWN0b3ItYWRkIjoi2KXYttin2YHYqSDZhdmI2LXZhCDYrNiv2YrYryIsImNvbm5lY3Rvci1lbmFibGVkIjoi2KrZhdmD2YrZhiDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZSI6Itin2LPZhSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLCJjb25uZWN0b3ItdHlwZSI6ItmG2YjYuSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6ItmG2YjYuSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLGNvbm5lY3RvcnM6Itin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLWNvbmZpZyI6Itiq2YPZiNmK2YbYp9iqINin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLXRhYmxlLWVuYWJsZWQiOiLZhdmF2YPZkdmGIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi2KfZhNin2LPZhSIsImNvbm5lY3RvcnMtdGFibGUtdHlwZSI6Itin2YTZhtmI2LkiLCJjb25uZWN0b3JzLXRhYmxlLXN0YXR1cyI6Itin2YTYrdin2YTYqSIsImNvbm5lY3RvcnMtdGFibGUtYWN0aW9ucyI6Itin2YTYpdis2LHYp9ih2KfYqiIsImNvbm5lY3RvcnMtdGFibGUta2V5Ijoi2KfZhNmF2YHYqtin2K0iLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoi2KfZhNmB2KbYqSIsInJwYy1jb21tYW5kLXNlbmQiOiLYpdix2LPYp9mEIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi2KfZhNin2LPYqtis2KfYqNipIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLYqtit2LHZitixINin2YTZhdi52YTZhdin2KoiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLYqtmD2YjZitmGINi52KfZhSIsImRvY2tlci1sYWJlbCI6Itin2LPYqtiu2K/ZhSDYp9mE2KrYudmE2YrZhdin2Kog2KfZhNiq2KfZhNmK2Kkg2YTYqti02LrZitmEIElvVCBHYXRld2F5INmB2YogRG9ja2VyIGNvbXBvc2Ug2YXYuSDYqNmK2KfZhtin2Kog2KfYudiq2YXYp9ivINmE2YTYrNmH2KfYsiDYp9mE2YXYrdiv2K8iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi2KfYs9iq2K7Yr9mFINin2YTYqti52YTZitmF2KfYqiDZhNiq2YbYstmK2YQg2YjYqtir2KjZitiqINmI2KXYudiv2KfYryBkb2NrZXIgY29tcG9zZSIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLYqtmG2LLZitmEIGRvY2tlci1jb21wb3NlLnltbCDZhNio2YjYp9io2KrZgyIsImxhdW5jaC1nYXRld2F5Ijoi2KrYtNi62YrZhCDYp9mE2KjZiNin2KjYqSIsImxhdW5jaC1kb2NrZXItY29tcG9zZSI6Itio2K/YoSDYqti02LrZitmEINin2YTYqNmI2KfYqNipINio2KfYs9iq2K7Yr9in2YUg2KfZhNij2YXYsSDYp9mE2KrYp9mE2Yog2YHZiiDYp9mE2LfYsdmB2YrYqSDZhdmGINin2YTZhdis2YTYryDYp9mE2LDZiiDZitit2KrZiNmKINi52YTZiSDZhdmE2YEgZG9ja2VyLWNvbXBvc2UueW1sIiwiY3JlYXRlLW5ldy1nYXRld2F5Ijoi2KXZhti02KfYoSDYqNmI2KfYqNipINis2K/Zitiv2KkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6ItmH2YQg2KPZhtiqINmF2KrYo9mD2K8g2KPZhtmDINiq2LHZitivINil2YbYtNin2KEg2KjZiNin2KjYqSDYrNiv2YrYr9ipINio2KfYs9mFOiAne3tnYXRld2F5TmFtZX19J9ifIiwiY3JlYXRlZC10aW1lIjoi2YjZgtiqINin2YTYpdmG2LTYp9ihIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6Itiz2YrYqtmFINit2LDZgSDYp9mE2KrZg9mI2YrZhtin2KoiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6ItmK2YXZg9mGINiq2LnYt9mK2YQg2KfZhNiq2YPZiNmK2YYg2LnZhiDYqNmP2LnYryDZgdmC2Lcg2KXYsNinINmD2KfZhiDZh9mG2KfZgyDZiNi12YjZhCDYrNiz2K/ZiiDYpdmE2Ykg2KfZhNio2YjYp9io2KkuINiz2KrYqtmFINit2LDZgSDYrNmF2YrYuSDYp9mE2KrZg9mI2YrZhtin2Kog2KfZhNiz2KfYqNmC2KkuPGJyPjxicj4gXG4g2YTYqti52LfZitmEINin2YTYqtmD2YjZitmG2Iwg2KPYr9iu2YQg2KfYs9mFINin2YTYqNmI2KfYqNipINij2K/Zhtin2YciLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQiOiLYp9iz2YUg2KfZhNio2YjYp9io2KkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNio2YjYp9io2Kkg2KXZhNiy2KfZhdmKIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLYpdmK2YLYp9mBINin2YTYqti02LrZitmEIixkZWxldGU6Itit2LDZgSDYp9mE2KrZg9mI2YrZhiIsImRvd25sb2FkLXRpcCI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZHJvcC1maWxlIjoi2KPZgdmE2YIg2KfZhNmF2YTZgSDZh9mG2Kcg2KPZiCIsZ2F0ZXdheToi2KfZhNio2YjYp9io2KkiLCJnYXRld2F5LWV4aXN0cyI6Itin2YTYrNmH2KfYsiDYqNmG2YHYsyDYp9mE2KfYs9mFINmF2YjYrNmI2K8g2KjYp9mE2YHYudmELiIsImdhdGV3YXktbmFtZSI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSDZhdi32YTZiNioLiIsImdhdGV3YXktc2F2ZWQiOiLYqtmFINit2YHYuCDYqtmD2YjZitmGINin2YTYqNmI2KfYqNipINio2YbYrNin2K0uIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqNipIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi2YXZh9mE2Kkg2KfZhNio2YLYp9ihINi52YTZiSDZgtmK2K8g2KfZhNit2YrYp9ipINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6ItmF2YfZhNipINin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K3YqSIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqCIsImdycGMta2VlcC1hbGl2ZS1taW4iOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINij2YLZhCDZhdmGIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDZhdi32YTZiNioIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmE2YjZgtiqINio2YrZhiDYp9mE2KjZitmG2LrYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2KogKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNio2YrZhti62KfYqiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQgKNio2KfZhNir2YjYp9mG2YopIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQg2YXYt9mE2YjYqNipIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiLZgdiq2LHYqSDZgdit2LUg2KfZhNiu2YXZiNmEINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoi2YHYqtix2Kkg2YHYrdi1INin2YTYrtmF2YjZhCDYutmK2LEg2LXYp9mE2K3YqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEICjYqNin2YTYq9mI2KfZhtmKKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEINmF2LfZhNmI2KjYqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6ItmB2KrYsdipINin2YTYrtmF2YjZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiLZgdiq2LHYqSDYp9mE2K7ZhdmI2YQg2LrZitixINi12KfZhNit2KkiLCJqc29uLXBhcnNlIjoiSlNPTiDYutmK2LEg2LXYp9mE2K0uIiwianNvbi1yZXF1aXJlZCI6Itin2YTYrdmC2YQg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINmB2KfYsdi62YvYpy4iLGxvZ3M6e2xvZ3M6Itin2YTYs9is2YTYp9iqIixkYXlzOiLYo9mK2KfZhSIsaG91cnM6Itiz2KfYudin2KoiLG1pbnV0ZXM6Itiv2YLYp9im2YIiLHNlY29uZHM6Itir2YjYp9mG2YoiLCJkYXRlLWZvcm1hdCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4g2YXYt9mE2YjYqCIsImxvZy1mb3JtYXQiOiLYqtmG2LPZitmCINin2YTYs9is2YQiLCJsb2ctdHlwZSI6ItmG2YjYuSDYp9mE2LPYrNmEIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiz2KzZhCDZhdi32YTZiNioIixyZW1vdGU6Itin2YTYqtiz2KzZitmEINi52YYg2KjZj9i52K8iLCJyZW1vdGUtbG9ncyI6Itin2YTYs9is2YTYp9iqINi52YYg2KjZj9i52K8iLGxvY2FsOiLYp9mE2KrYs9is2YrZhCDYp9mE2YXYrdmE2YoiLGxldmVsOiLZhdiz2KrZiNmJINin2YTYs9is2YQiLCJmaWxlLXBhdGgiOiLZhdiz2KfYsSDYp9mE2YXZhNmBIiwiZmlsZS1wYXRoLXJlcXVpcmVkIjoi2YXYs9in2LEg2KfZhNmF2YTZgSDZhdi32YTZiNioIiwic2F2aW5nLXBlcmlvZCI6ItmB2KrYsdipINit2YHYuCDYp9mE2LPYrNmEIiwic2F2aW5nLXBlcmlvZC1taW4iOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhdi32YTZiNio2KkiLCJiYWNrdXAtY291bnQiOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSIsImJhY2t1cC1jb3VudC1taW4iOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDZhNinINmK2YXZg9mGINij2YYg2YrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6Iti52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipINmF2LfZhNmI2KgifSwibWluLXBhY2stc2VuZC1kZWxheSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2YXYt9mE2YjYqCIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoi2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2KPZgtmEINmF2YYgMCIsIm5vLWNvbm5lY3RvcnMiOiLZhNinINiq2YjYrNivINmF2YjYtdmE2KfYqiIsIm5vLWRhdGEiOiLZhNinINiq2YjYrNivINiq2YPZiNmK2YbYp9iqIiwibm8tZ2F0ZXdheS1mb3VuZCI6ItmE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KjZiNin2KjYqS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiJ3t7aXRlbX19JyDYutmK2LEg2YXZiNis2YjYry4iLCJwYXRoLWxvZ3MiOiLZhdiz2KfYsSDYpdmE2Ykg2YXZhNmB2KfYqiDYp9mE2LPYrNmEIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi2KfZhNmF2LPYp9ixINmF2LfZhNmI2KguIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2KjZgtin2KEg2LnZhNmJINin2YTYrdmK2KfYqSDZitiz2YXYrSDYqNiv2YjZhiDZhdmD2KfZhNmF2KfYqiIscmVtb3RlOiLYp9mE2KrZg9mI2YrZhiDYudmGINio2Y/YudivIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiLZhdiz2KrZiNmJINin2YTYqtiz2KzZitmEIiwicmVtb3ZlLWVudHJ5Ijoi2KXYstin2YTYqSDYp9mE2KrZg9mI2YrZhiIsInJlbW90ZS1zaGVsbCI6ItmC2LTYsdipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Itin2YTYqtmD2YjZitmGINi52YYg2KjZj9i52K8iLG90aGVyOiLYotiu2LEiLCJzYXZlLXRpcCI6Itit2YHYuCDZhdmE2YEg2KfZhNiq2YPZiNmK2YYiLCJzZWN1cml0eS10eXBlIjoi2YbZiNi5INin2YTYo9mF2KfZhiIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Itix2YXYsiDYp9mE2YjYtdmI2YQiLCJ1c2VybmFtZS1wYXNzd29yZCI6Itin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINmI2YPZhNmF2Kkg2KfZhNmF2LHZiNixIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDYsdmF2LIg2KfZhNmI2LXZiNmEIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsg2KfZhNmF2YHYqtin2K0g2KfZhNiu2KfYtSJ9LCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYrtin2K/ZhSIsc3RhdGlzdGljczp7c3RhdGlzdGljOiLYpdit2LXYp9im2YrYqSIsc3RhdGlzdGljczoi2KfZhNil2K3Ytdin2KbZitin2KoiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLZhNinINiq2KrZiNmB2LEg2KXYrdi12KfYptmK2KfYqiIsY29tbWFuZHM6Itin2YTYo9mI2KfZhdixIiwic2VuZC1wZXJpb2QiOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqICjYqNin2YTYq9mI2KfZhtmKKSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDZhdi32YTZiNio2KkiLCJzZW5kLXBlcmlvZC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDYo9mC2YQg2YXZhiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqINi62YrYsSDYtdin2YTYrdipIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiAo2KjYp9mE2KvZiNin2YbZiikiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINmF2LfZhNmI2KjYqSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiDYo9mC2YQg2YXZhiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINi62YrYsSDYtdin2YTYrdipIixhZGQ6Itil2LbYp9mB2Kkg2KPZhdixIix0aW1lb3V0OiLYp9mE2YXZh9mE2KkiLCJ0aW1lb3V0LW1zIjoi2KfZhNmF2YfZhNipICjYqNin2YTZhdmE2YTZiiDYq9in2YbZitipKSIsInRpbWVvdXQtcmVxdWlyZWQiOiLYp9mE2YXZh9mE2Kkg2YXYt9mE2YjYqNipIiwidGltZW91dC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KfZhNmF2YfZhNipINij2YLZhCDZhdmGIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiLYp9mE2YXZh9mE2Kkg2LrZitixINi12KfZhNit2KkiLCJhdHRyaWJ1dGUtbmFtZSI6Itin2LPZhSDYp9mE2LPZhdipIiwiYXR0cmlidXRlLW5hbWUtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNiz2YXYqSDZhdi32YTZiNioIixjb21tYW5kOiLYp9mE2KPZhdixIiwiY29tbWFuZC1yZXF1aXJlZCI6Itin2YTYo9mF2LEg2YXYt9mE2YjYqCIsImNvbW1hbmQtcGF0dGVybiI6Itin2YTYo9mF2LEg2LrZitixINi12KfZhNitIixyZW1vdmU6Itil2LLYp9mE2Kkg2KfZhNij2YXYsSJ9LHN0b3JhZ2U6Itin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi2KfZhNiz2KzZhNin2Kog2KfZhNmC2LXZiNmJINmB2Yog2KfZhNmF2YTZgSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTZhdmE2YHYp9iqIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmH2YggMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi2KfZhNi52K/YryDYutmK2LEg2LXYp9mE2K0uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLYp9mE2LnYr9ivINmF2LfZhNmI2KguIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Itin2YTYs9is2YTYp9iqINin2YTZgti12YjZiSDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLYp9mE2LPYrNmE2KfYqiDYp9mE2YLYtdmI2Ykg2YXYt9mE2YjYqNipLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZhdi32YTZiNioLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50Ijoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINmC2LHYp9ih2Kkg2KfZhNiz2KzZhNin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNi52K/YryDYp9mE2LPYrNmE2KfYqiDZh9mIIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi2LnYr9ivINin2YTZgtix2KfYodipINin2YTZgti12YjZiSDZhdi32YTZiNioLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6ItmF2LPYp9ixINmF2KzZhNivINin2YTYqNmK2KfZhtin2KoiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDZhdis2YTYryDYp9mE2KjZitin2YbYp9iqINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYWNrLXNpemUiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYrdis2YUg2K3YstmF2Kkg2KfZhNit2K/YqyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZh9mIIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi2KfZhNit2KzZhSDYp9mE2KPZgti12Ykg2YTYrdiy2YXYqSDYp9mE2K3Yr9irINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYXRoIjoi2YXYs9in2LEg2KfZhNiq2K7YstmK2YYiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDYp9mE2KrYrtiy2YrZhiDZhdi32YTZiNioLiIsInN0b3JhZ2UtdHlwZSI6ItmG2YjYuSDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2YXZhNmB2KfYqiIsIm1lbW9yeS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2LDYp9mD2LHYqSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoi2KvZitmG2LrYstio2YjYsdivIixnZW5lcmFsOiLYudin2YUiLCJ0aGluZ3Nib2FyZC1ob3N0Ijoi2YXYttmK2YEg2KvZitmG2LrYstio2YjYsdivIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Itin2YTZhdi22YrZgSDZhdi32YTZiNioLiIsInRoaW5nc2JvYXJkLXBvcnQiOiLZhdmG2YHYsCDYq9mK2YbYutiy2KjZiNix2K8iLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6Itin2YTZhdmG2YHYsCDYutmK2LEg2LXYp9mE2K0uIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Itin2YTZhdmG2YHYsCDZhdi32YTZiNioLiIsdGlkeToi2KrYsdiq2YrYqCIsInRpZHktdGlwIjoi2KrYsdiq2YrYqCDYqtmD2YjZitmGIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiLYqtmD2YjZitmGINmF2YjYtdmEIHt7dHlwZU5hbWV9fSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoi2KfZhNmF2LPYp9ixINil2YTZiSDYtNmH2KfYr9ipIENBINi52YTZiSDYp9mE2KjZiNin2KjYqSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2LTZh9in2K/YqSDYp9mE2LnZhdmK2YQg2LnZhNmJINin2YTYqNmI2KfYqNipIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi2YrYrNioINiq2K3Yr9mK2K8g2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoi2KfZhNix2YLZhSDYutmK2LEg2LXYp9mE2K0uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwg2KfZhNix2LPYp9im2YQg2KjYp9mE2KPZitin2YUiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6ItmK2KzYqCDYqtit2K/ZitivIFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYo9mK2KfZhS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXBhdHRlcm4iOiLYp9mE2LHZgtmFINi62YrYsSDYtdin2YTYrS4iLCJtcXR0LXFvcyI6Itis2YjYr9ipINin2YTYrtiv2YXYqSAoUW9TKSIsIm1xdHQtcW9zLXJlcXVpcmVkIjoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipIChRb1MpINmF2LfZhNmI2KjYqSIsIm1xdHQtcW9zLXJhbmdlIjoi2KrYqtix2KfZiNitINmC2YrZhSDYrNmI2K/YqSDYp9mE2K7Yr9mF2KkgKFFvUykg2YXZhiAwINil2YTZiSAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdmB2KrYp9itINin2YTYrtin2LUg2LnZhNmJINin2YTYqNmI2KfYqNipIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLYqtio2K/ZitmEINmI2LbYuSDZhdmE2KEg2KfZhNi02KfYtNipIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiLYqtmD2YjZitmGIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6Itil2LbYp9mB2Kkv2KrYrdiv2YrYqyDYqtmD2YjZitmGIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2YPZiNmK2YYg2YjYpdiv2KfYsdipINin2YTYqNmI2KfYqNipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtc2hlbGwiOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2K3Zg9mFINin2YTYqNi52YrYryDZgdmKINmG2LjYp9mFINin2YTYqti02LrZitmEINmF2Lkg2KfZhNio2YjYp9io2Kkg2YXZhiDYudmG2LXYsSDZiNin2KzZh9ipINin2YTZhdiz2KrYrtiv2YUg2YLYtNix2Kkg2LnZhiDYqNmP2LnYryIsaG9zdDoi2KfYs9mFINin2YTZhdi22YrZgSDYo9mIINi52YbZiNin2YYgSVAg2YTYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLHBvcnQ6ItmF2YbZgdiwINiu2K/ZhdipIE1RVFQg2LnZhNmJINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIsdG9rZW46Itix2YXYsiDYp9mE2YjYtdmI2YQg2YTZhNio2YjYp9io2Kkg2YXZhiDYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLCJjbGllbnQtaWQiOiLZhdi52LHZgSDYudmF2YrZhCBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIix1c2VybmFtZToi2KfYs9mFINin2YTZhdiz2KrYrtiv2YUgTVFUVCDZhNmE2KjZiNin2KjYqSDZhdmGINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIscGFzc3dvcmQ6ItmD2YTZhdipINin2YTZhdix2YjYsSBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIiwiY2EtY2VydCI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2YXZhNmBINi02YfYp9iv2KkgQ0EiLCJkYXRlLWZvcm0iOiLYqtmG2LPZitmCINin2YTYqtin2LHZitiuINmB2Yog2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwiZGF0YS1mb2xkZXIiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdis2YTYryDYp9mE2LDZiiDYs9mK2K3YqtmI2Yog2LnZhNmJINin2YTYqNmK2KfZhtin2KogKNmG2LPYqNmKINij2Ygg2YXYt9mE2YIpIiwibG9nLWZvcm1hdCI6Itiq2YbYs9mK2YIg2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwicmVtb3RlLWxvZyI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDYp9mE2KrYs9is2YrZhCDYp9mE2KjYudmK2K8g2YjZgtix2KfYodipINin2YTYs9is2YTYp9iqINmF2YYg2KfZhNio2YjYp9io2KkiLCJiYWNrdXAtY291bnQiOiLYpdiw2Kcg2YPYp9mGINi52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipID4gMNiMINi52YbYryDYudmF2YTZitipINiq2K/ZiNmK2LHYjCDZhNinINmK2KrZhSDYp9mE2KfYrdiq2YHYp9i4INio2KPZg9ir2LEg2YXZhiDYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDYp9mE2YXYrdiv2K/YqSAtINmK2KrZhSDYrdiw2YEg2KfZhNij2YLYr9mFIixzdG9yYWdlOiLZitmI2YHYsSDYqtmD2YjZitmG2YvYpyDZhNit2YHYuCDYp9mE2KjZitin2YbYp9iqINin2YTZiNin2LHYr9ipINmC2KjZhCDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KfZhNmF2YbYtdipIiwibWF4LWZpbGUtY291bnQiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNi52K/YryDYp9mE2YXZhNmB2KfYqiDYp9mE2KrZiiDYs9mK2KrZhSDYpdmG2LTYp9ik2YfYpyIsIm1heC1yZWFkLWNvdW50Ijoi2LnYr9ivINin2YTYsdiz2KfYptmEINmE2YTYrdi12YjZhCDYudmE2YrZh9inINmF2YYg2KfZhNiq2K7YstmK2YYg2YjYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KvZitmG2LrYstio2YjYsdivIiwibWF4LXJlY29yZHMiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNmE2LPYrNmE2KfYqiDYp9mE2KrZiiDYs9iq2K7YstmGINmB2Yog2YXZhNmBINmI2KfYrdivIiwicmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2KfZhNix2LPYp9im2YQg2YTZhNit2LXZiNmEINi52YTZitmH2Kcg2YXZhiDYp9mE2KrYrtiy2YrZhiDZiNil2LHYs9in2YTZh9inINil2YTZiSDYq9mK2YbYutiy2KjZiNix2K8iLCJtYXgtcmVjb3Jkcy1jb3VudCI6Itin2YTYudiv2K8g2KfZhNij2YLYtdmJINmE2YTYqNmK2KfZhtin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiDZgtio2YQg2KXYsdiz2KfZhNmH2Kcg2KXZhNmJINir2YrZhti62LLYqNmI2LHYryIsInR0bC1jaGVjay1ob3VyIjoi2YPZhSDZhdix2Kkg2LPZitiq2K3ZgtmCINin2YTYqNmI2KfYqNipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDYp9mE2YLYr9mK2YXYqSIsInR0bC1tZXNzYWdlcy1kYXkiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNij2YrYp9mFINin2YTYqtmKINiz2KrYrdiq2YHYuCDZgdmK2YfYpyDYp9mE2KrYrtiy2YrZhiDYqNin2YTYqNmK2KfZhtin2KoiLGNvbW1hbmRzOiLYp9mE2KPZiNin2YXYsSDZhNis2YXYuSDYp9mE2KXYrdi12KfYptmK2KfYqiDYp9mE2KXYttin2YHZitipIixhdHRyaWJ1dGU6ItmF2YHYqtin2K0g2KrZhNmC2Yog2KfZhNil2K3Ytdin2KbZitin2KoiLHRpbWVvdXQ6ItmF2YfZhNipINiy2YXZhtmK2Kkg2YTYqtmG2YHZitiwINin2YTYo9mF2LEiLGNvbW1hbmQ6Itiz2YrYqtmFINin2LPYqtiu2K/Yp9mFINmG2KrZitis2Kkg2KrZhtmB2YrYsCDYp9mE2KPZhdixINmD2YLZitmF2Kkg2YTYqtmE2YLZiiDYp9mE2KXYrdi12KfYptmK2KfYqiIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDZhdix2KfZgtio2Kkg2YbYtNin2Lcg2YPZhCDYrNmH2KfYsiDZhdiq2LXZhCIsImluYWN0aXZpdHktdGltZW91dCI6Itin2YTZiNmC2Kog2KjYudivINin2YTYsNmKINiz2KrZgdi12YQg2KfZhNio2YjYp9io2Kkg2KfZhNis2YfYp9iyIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLYqtmD2LHYp9ixINmB2K3YtSDZhti02KfYtyDYp9mE2KzZh9in2LIiLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLYp9mE2KrYo9iu2YrYsSDYqNmK2YYg2KXYsdiz2KfZhCDYrdiy2YUg2KfZhNix2LPYp9im2YQgKNmK2KTYr9mKINiq2YLZhNmK2YQg2YfYsNinINin2YTYpdi52K/Yp9ivINil2YTZiSDYstmK2KfYr9ipINin2LPYqtiu2K/Yp9mFINmI2K3Yr9ipINin2YTZhdi52KfZhNis2Kkg2KfZhNmF2LHZg9iy2YrYqSkiLHFvczoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipINmB2Yog2LHYs9in2KbZhCBNUVRUICgwIC0g2LnZhNmJINin2YTYo9mD2KvYsSDZhdix2Kkg2YjYp9it2K/YqdiMIDEgLSDYudmE2Ykg2KfZhNij2YLZhCDZhdix2Kkg2YjYp9it2K/YqSkiLCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYtNio2YPYqSDYp9mE2LDZiiDYs9mK2LPYqtmF2Lkg2YHZitmHINiu2KfYr9mFIEdSUEMg2YTZhNin2LPYqtmB2LPYp9ix2KfYqiDYp9mE2YjYp9ix2K/YqS4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNmE2YjZgtiqINin2YTYsNmKINmK2KzYqCDYo9mGINmK2YbYqti42LHZhyDYp9mE2K7Yp9iv2YUg2YTYp9iz2KrYrNin2KjYqSDYsdiz2KfZhNipINin2YTYrdmB2KfYuCDYudmE2Ykg2KfZhNin2KrYtdin2YQg2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTZhdiv2Kkg2KjZitmGINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTZhdiq2LnYp9mC2KjYqSDYudmG2K8g2LnYr9mFINmI2KzZiNivINin2LPYqtiv2LnYp9ihIFJQQyDZhti02LcuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTYqtmKINmK2YXZg9mGINmE2YTYrtin2K/ZhSDYpdix2LPYp9mE2YfYpyDYr9mI2YYg2KrZhNmC2Yog2KPZiiDYqNmK2KfZhtin2Kog2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINi52YbYryDYudiv2YUg2KXYsdiz2KfZhCDYo9mIINin2LPYqtmE2KfZhSDYqNmK2KfZhtin2KouIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2LPZhdin2K0g2YTZhNiu2KfYr9mFINio2KXYqNmC2KfYoSDYp9iq2LXYp9mEIEdSUEMg2K3ZitmL2Kcg2K3YqtmJINi52YbYr9mF2Kcg2YTYpyDYqtmD2YjZhiDZh9mG2KfZgyDYp9iz2KrYr9i52KfYodin2KogUlBDINmG2LTYt9ipLiJ9fSxWbz17ImFkZC1lbnRyeSI6IkFmZWdpciBjb25maWd1cmFjacOzIiwiY29ubmVjdG9yLWFkZCI6IkFmZWdpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJDYWwgbm9tIGNvbmVjdG9yLiIsImNvbm5lY3Rvci10eXBlIjoiVGlwdXMgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNhbCB0aXB1cyBjb25lY3Rvci4iLGNvbm5lY3RvcnM6IkNvbmZpZ3VyYWNpw7MgZGUgY29uZWN0b3JzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXIgdW4gZ2F0ZXdheSBub3UiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkNyZWFyIHVuIG5vdSBnYXRld2F5IGFtYiBlbCBub206ICd7e2dhdGV3YXlOYW1lfX0nPyIsZGVsZXRlOiJFc2JvcnJhciBjb25maWd1cmFjacOzIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FycmVnYXIgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkphIGV4aXN0ZWl4IHVuIGRpc3Bvc2l0aXUgYW1iIGVsIG1hdGVpeCBub20uIiwiZ2F0ZXdheS1uYW1lIjoiTm9tIGRlIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJDYWwgdW4gbm9tIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7MgZGUgZ2F0ZXdheSBncmF2YWRhIHNhdGlzZmFjdMOycmlhbWVudC4iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6BsaWQuIiwianNvbi1yZXF1aXJlZCI6IkVsIGNhbXAgbm8gcG90IHNlciBidWl0LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBoaSBoYSBjb25lY3RvcnMiLCJuby1kYXRhIjoiTm8gaGkgaGEgY29uZmlndXJhY2lvbnMiLCJuby1nYXRld2F5LWZvdW5kIjoiTm8gcydoYSB0cm9iYXQgY2FwIGdhdGV3YXkuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vIHRyb2JhdC4iLCJwYXRoLWxvZ3MiOiJSdXRhIGFscyBmaXR4ZXJzIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IkNhbCBydXRhLiIscmVtb3RlOiJDb25maWd1cmFjacOzIHJlbW90YSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTml2ZWwgZGUgbG9nZ2luZyIsInJlbW92ZS1lbnRyeSI6IkVzYm9ycmFyIGNvbmZpZ3VyYWNpw7MiLCJzYXZlLXRpcCI6IkdyYXZhciBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIsInNlY3VyaXR5LXR5cGUiOiJUaXB1cyBkZSBzZWd1cmV0YXQiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkJ2FjY8OpcyIsdGxzOiJUTFMifSxzdG9yYWdlOiJHcmFiYWNpw7MiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJOw7ptZXJvIG3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZml0eGVyIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoHhpbSBkZSBmaXR4ZXJzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiRWwgbsO6bWVybyBtw61uaW0gw6lzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiQ2FsIG7Dum1lcm8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZWwgbWFnYXR6ZW0iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltIMOpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1pZGEgbcOgeGltIGRlIGVzZGV2ZW5pbWVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbSDDqXMgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6BsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhdGgiOiJSdXRhIGRlIG1hZ2F0emVtIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiQ2FsIHJ1dGEgZGUgbWFnYXR6ZW0uIiwic3RvcmFnZS10eXBlIjoiVGlwdXMgZGUgbWFnYXR6ZW0iLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik1hZ2F0emVtIGZpdHhlciIsIm1lbW9yeS1zdG9yYWdlIjoiTWFnYXR6ZW0gZW4gbWVtb3JpYSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IkNhbCBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQb3J0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJFbCBwb3J0IG3DoHhpbSDDqXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJFbCBwb3J0IG3DrW5pbSDDqXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQb3J0IG5vIHbDoGxpZC4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiQ2FsIHBvcnQuIix0aWR5OiJFbmRyZcOnYXQiLCJ0aWR5LXRpcCI6IkVuZHJlw6dhdCBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDsyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlJ1dGEgYWwgY2VydGlmaWNhdCBDQSBhbCBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUnV0YSBhbCBjZXJ0aWZpY2F0IGNsaWVudCBhbCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJSdXRhIGEgbGEgY2xhdSBwcml2YWRhIGFsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7MgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWZlZ2lyL2FjdHVhbGl6YXIgY29uZmlndXJhY2nDsyBKU09OIn0sQm89eyJhZGQtZW50cnkiOiJQxZlpZGF0IGtvbmZpZ3VyYWNpIiwiY29ubmVjdG9yLWFkZCI6IlDFmWlkYXQgbm92w70ga29uZWt0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IlBvdm9saXQga29uZWt0b3IiLCJjb25uZWN0b3ItbmFtZSI6Ik7DoXpldiBrb25la3RvcnUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Ik7DoXpldiBrb25la3RvcnUgamUgcG92aW5uw70uIiwiY29ubmVjdG9yLXR5cGUiOiJUeXAga29uZWt0b3J1IiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJUeXAga29uZWt0b3J1IGplIHBvdmlubsO9LiIsY29ubmVjdG9yczoiS29uZmlndXJhY2Uga29uZWt0b3J1IiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiVnl0dm/FmWl0IG5vdm91IGJyw6FudSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiSnN0ZSBzaSBqaXN0aSwgxb5lIGNoY2V0ZSB2eXR2b8WZaXQgbm92b3UgYnLDoW51IHMgbsOhenZlbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IlNtYXphdCBrb25maWd1cmFjaSIsImRvd25sb2FkLXRpcCI6IlN0w6Fobm91dCBzb3Vib3Iga29uZmlndXJhY2UiLGdhdGV3YXk6IkJyw6FuYSIsImdhdGV3YXktZXhpc3RzIjoiWmHFmcOtemVuw60gc2Ugc2hvZG7DvW0gbsOhenZlbSBqacW+IGV4aXN0dWplLiIsImdhdGV3YXktbmFtZSI6Ik7DoXpldiBicsOhbnkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOw6F6ZXYgYnLDoW55IGplIHBvdmlubsO9LiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjZSBicsOhbnkgYnlsYSDDunNwxJvFoW7EmyB1bG/FvmVuYS4iLCJqc29uLXBhcnNlIjoiTmVwbGF0bsO9IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmVtxa/FvmUgYsO9dCBwcsOhemRuw6kuIiwibm8tY29ubmVjdG9ycyI6IsW9w6FkbsOpIGtvbmVrdG9yeSIsIm5vLWRhdGEiOiLFvcOhZG7DqSBrb25maWd1cmFjZSIsIm5vLWdhdGV3YXktZm91bmQiOiLFvcOhZG7DqSBicsOhbnkgbmVieWx5IG5hbGV6ZW55LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIgJ3t7aXRlbX19JyBuZW5hbGV6ZW5hLiIsInBhdGgtbG9ncyI6IkNlc3RhIGsgc291Ym9yxa9tIGxvZ3UiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJDZXN0YSBqZSBwb3Zpbm7DoS4iLHJlbW90ZToiVnpkw6FsZW7DoSBrb25maWd1cmFjZSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiw5pyb3ZlxYggbG9nb3bDoW7DrSIsInJlbW92ZS1lbnRyeSI6Ik9kc3RyYW5pdCBrb25maWd1cmFjaSIsInNhdmUtdGlwIjoiVWxvxb5pdCBzb3Vib3Iga29uZmlndXJhY2UiLCJzZWN1cml0eS10eXBlIjoiVHlwIHphYmV6cGXEjWVuw60iLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJQxZnDrXN0dXBvdsO9IHRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IsOabG/FvmnFoXTEmyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiBzb3Vib3J1Iiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbcOhbG7DrSBwb8SNZXQgc291Ym9yxa8iLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbcOhbG7DrSBwb8SNZXQgamUgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiUG/EjWV0IG5lbsOtIHBsYXRuw70uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJQb8SNZXQgamUgcG92aW5uw70uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiDDumxvxb5pxaF0aSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IHrDoXpuYW3FryBqZSAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbcOhbG7DrSBwb8SNZXQgesOhem5hbcWvIGplIHBvdmlubsO9LiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IGplIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtcGF0aCI6IkNlc3RhIGsgw7psb8W+acWhdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJDZXN0YSBrIMO6bG/FvmnFoXRpIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCDDumxvxb5pxaF0xJsiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IlNvdWJvciIsIm1lbW9yeS1zdG9yYWdlIjoiUGFtxJvFpSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamUgcG92aW5uw70uIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBvcnQgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltw6FsbsOtIMSNw61zbG8gcG9ydHUgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbcOhbG7DrSDEjcOtc2xvIHBvcnR1IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBuZW7DrSBwbGF0bsO9LiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGplIHBvdmlubsO9LiIsdGlkeToiVXNwb8WZw6FkYXQiLCJ0aWR5LXRpcCI6IlVzcG/FmcOhZGF0IEpTT04ga29uZmlndXJhY2kiLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJLb25maWd1cmFjZSB7e3R5cGVOYW1lfX0ga29uZWt0b3J1IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBDQSBicsOhbnkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBrbGllbnRhIGJyw6FueSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiQ2VzdGEgayBwcml2w6F0bsOtbXUga2zDrcSNaSBicsOhbnkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlDFmWVwbm91dCBkbyByZcW+aW11IGNlbMOpIG9icmF6b3ZreSIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiSlNPTioga29uZmlndXJhY2UiLCJ1cGRhdGUtY29uZmlnIjoiUMWZaWRhdC9lZGl0b3ZhdCBKU09OIGtvbmZpZ3VyYWNpIn0sVW89eyJhZGQtZW50cnkiOiJUaWxmw7hqIGtvbmZpZ3VyYXRpb24iLCJjb25uZWN0b3ItYWRkIjoiVGlsZsO4aiBueSBzdGlrZm9yYmluZGVsc2UiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkFrdGl2w6lyIHN0aWtmb3JiaW5kZWxzZSIsImNvbm5lY3Rvci1uYW1lIjoiTmF2biBww6Ugc3Rpa2ZvcmJpbmRlbHNlIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJOYXZuIHDDpSBzdGlrZm9yYmluZGVsc2UgZXIgcMOla3LDpnZldC4iLCJjb25uZWN0b3ItdHlwZSI6IlN0aWtmb3JiaW5kZWxzZXN0eXBlIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTdGlrZm9yYmluZGVsc2VzdHlwZSBlciBww6VrcsOmdmV0LiIsY29ubmVjdG9yczoiS29uZmlndXJhdGlvbiBhZiBzdGlrZm9yYmluZGVsc2VyIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiT3ByZXQgZW4gbnkgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiIixkZWxldGU6IlNsZXQga29uZmlndXJhdGlvbiIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGtvbmZpZ3VyYXRpb25zZmlsIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJFbmhlZCBtZWQgc2FtbWUgbmF2biBmaW5kZXMgYWxsZXJlZGUuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheS1uYXZuIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheS1uYXZuIGVyIHDDpWtyw6Z2ZXQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkta29uZmlndXJhdGlvbmVuIGJsZXYgZ2VtdC4iLCJqc29uLXBhcnNlIjoiSWtrZSBneWxkaWcgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmVsdGV0IG3DpSBpa2tlIHbDpnJlIHRvbXQuIiwibm8tY29ubmVjdG9ycyI6IkluZ2VuIHN0aWtmb3JiaW5kZWxzZXIiLCJuby1kYXRhIjoiSW5nZW4ga29uZmlndXJhdGlvbmVyIiwibm8tZ2F0ZXdheS1mb3VuZCI6IkluZ2VuIGdhdGV3YXkgZnVuZGV0LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIiLCJwYXRoLWxvZ3MiOiJTdGkgdGlsIGxvZ2ZpbGVyIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiU3RpIGVyIHDDpWtyw6Z2ZXQuIixyZW1vdGU6IkZqZXJua29uZmlndXJhdGlvbiIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nZsO4cmluZ3NuaXZlYXUiLCJyZW1vdmUtZW50cnkiOiJGamVybiBrb25maWd1cmF0aW9uIiwic2F2ZS10aXAiOiJHZW0ga29uZmlndXJhdGlvbnNmaWwiLCJzZWN1cml0eS10eXBlIjoiU2lra2VyaGVkc3R5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBZGdhbmdzdG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiTGFncmluZyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGZpbCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrcy4gYW50YWwgZmlsZXIiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW4uIGFudGFsIGVyIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IkFudGFsIGVyIGlra2UgZ3lsZGlndC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6IkFudGFsIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGxhZ3JpbmciLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbi4gYW50YWwgcG9zdGVyIGVyIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYWtzLiBhbnRhbCBwb3N0ZXIgZXIgcMOla3LDpnZldC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3MuIGFudGFsIHBha2tlc3TDuHJyZWxzZSBmb3IgYmVnaXZlbmhlZCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbi4gYW50YWwgZXIgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrcy4gYW50YWwgcGFra2VzdMO4cnJlbHNlIGZvciBiZWdpdmVuaGVkIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1wYXRoIjoiTGFncmluZ3NzdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJMYWdyaW5nc3N0aSBlciBww6VrcsOmdmV0LiIsInN0b3JhZ2UtdHlwZSI6IkxhZ3JpbmdzdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiTGFncmluZyBhZiBmaWx0ZXIiLCJtZW1vcnktc3RvcmFnZSI6IkxhZ3JpbmcgYWYgaHVrb21tZWxzZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZC12w6ZydCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJWw6ZydCBlciBww6VrcsOmdmV0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZC1wb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzLiBwb3J0bnVtbWVyIGVyIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluLiBwb3J0bnVtbWVyIGVyIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBlciBpa2tlIGd5bGRpZy4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBlciBww6VrcsOmdmV0LiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBrb25maWcuIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiIiLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwgQ0EtY2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwga2xpZW50Y2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiU3RpIHRpbCBwcml2YXQgbsO4Z2xlIHDDpSBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJTa2lmdCB0aWwgZnVsZCBza8Omcm0iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiVGlsZsO4ai9vcGRhdGVyIGtvbmZpZ3VyYXRpb24gSlNPTiJ9LF9vPXsiYWRkLWVudHJ5IjoiQcOxYWRpciBjb25maWd1cmFjacOzbiIsYWR2YW5jZWQ6IkF2YW56YWRvIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiUHJvYmFuZG8gYWN0aXZpZGFkIGRlIGRpc3Bvc2l0aXZvIixjb21tYW5kOiJDb21hbmRvcyBEb2NrZXIiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiU2UgaGFuIGNvcGlhZG8gbG9zIGNvbWFuZG9zIGFsIHBvcnRhcGFwZWxlcyIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhY2nDs24iLCJjb25uZWN0b3ItYWRkIjoiQcOxYWRpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tYnJlIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBub21icmUgY29uZWN0b3IuIiwiY29ubmVjdG9yLXR5cGUiOiJUaXBvIGNvbmVjdG9yIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aXBvIGNvbmVjdG9yLiIsY29ubmVjdG9yczoiQ29uZWN0b3JlcyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29uZmlndXJhY2nDs24gZGUgY29uZWN0b3JlcyIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOb21icmUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUaXBvIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJFc3RhZG8iLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY2Npb25lcyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiQ2xhdmUiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc2UiLCJycGMtY29tbWFuZC1zZW5kIjoiRW52aWFyIiwicnBjLWNvbW1hbmQtcmVzdWx0IjoiUmVzdWx0YWRvIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiJFZGl0YXIgcGFyYW1ldHJvcyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkNvbmZpZ3VyYWNpw7NuIEdlbmVyYWwiLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhciB1biBnYXRld2F5IG51ZXZvIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJDcmVhciB1biBudWV2byBnYXRld2F5IGNvbiBlbCBub21icmU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkhvcmEgZGUgY3JlYWNpw7NuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6IkxhcyBjb25maWd1cmFjaW9uZXMgc2UgYm9ycmFyw6FuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJTw7NsbyBlcyBwb3NpYmxlIGRlc2FjdGl2YXIgbGEgY29uZmlndXJhY2nDs24gcmVtb3RhLCBzaSBoYXkgYWNjZXNvIGbDrXNpY28gYWwgZ2F0ZXdheS4gU2UgYm9ycmFyw6FuIHRvZGFzIGxhcyBjb25maWd1cmFjaW9uZXMgcHJldmlhcy48YnI+PGJyPiBcblBhcmEgZGVzYWN0aXZhciBsYSBjb25maWd1cmFjacOzbiwgaW50cm9kdWNlIGVsIG5vbWJyZSBkZWwgZ2F0ZXdheSBhcXXDrSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6Ik5vbWJyZSBHYXRld2F5IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGdhdGV3YXkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IkRlc2FjdGl2YXIiLGRlbGV0ZToiQm9ycmFyIGNvbmZpZ3VyYWNpw7NuIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FyZ2FyIGZpY2hlcm8gZGUgY29uZmlndXJhY2nDs24iLCJkcm9wLWZpbGUiOiJBcnJhc3RyYSB1biBmaWNoZXJvIG8iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IllhIGV4aXN0ZSB1biBkaXNwb3NpdGl2byBjb24gZWwgbWlzbW8gbm9tYnJlLiIsImdhdGV3YXktbmFtZSI6Ik5vbWJyZSBkZSBHYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdW4gbm9tYnJlIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7NuIGRlIGdhdGV3YXkgZ3JhYmFkYSBzYXRpc2ZhY3RvcmlhbWVudGUuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaW1lb3V0IEtlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgVGltZW91dCBLZWVwIGFsaXZlIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiRWwgdmFsb3Igbm8gZXMgdsOhbGlkbyIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGtlZXAgYWxpdmUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6IkVsIHZhbG9yIGtlZXAgYWxpdmUgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6IlRpZW1wbyBtw61uaW1vIGVudHJlIHBpbmdzIChlbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aWVtcG8gbcOtbmltbyBlbnRyZSBwaW5ncyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiRWwgdmFsb3IgZGUgdGllbXBvIG3DrW5pbW8gZW50cmUgcGluZ3Mgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DrW5pbW8gc2luIGRhdG9zIChlbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGludGVydmFsbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGludGVydmFsbyBubyBlcyB2w6FsaWRvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DoXhpbW8gc2luIGRhdG9zIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgaW50ZXJ2YWxvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJFbCB2YWxvciBkZSBpbnRlcnZhbG8gbm8gZXMgdsOhbGlkbyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJQZXJpb2RvIGRlIGNvbnRyb2wgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlbCBwZXJpb2RvIG5vIGVzIHbDoWxpZG8iLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcyI6IlRpbWVvdXQgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGltZW91dCBkZSBpbmFjdGl2aWRhZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGluYWN0aXZpZGFkIG5vIGVzIHbDoWxpZG8iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6FsaWRvLiIsImpzb24tcmVxdWlyZWQiOiJFbCBjYW1wbyBubyBwdWVkZSBlc3RhciB2YWPDrW8uIixsb2dzOntsb2dzOiJSZWdpc3Ryb3MiLGRheXM6ImTDrWFzIixob3VyczoiaG9yYXMiLG1pbnV0ZXM6Im1pbnV0b3MiLHNlY29uZHM6InNlZ3VuZG9zIiwiZGF0ZS1mb3JtYXQiOiJGb3JtYXRvIGRlIGZlY2hhIiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBmb3JtYXRvIGRlIGZlY2hhIiwibG9nLWZvcm1hdCI6IkZvcm1hdG8gZGUgcmVnaXN0cm8iLCJsb2ctdHlwZSI6IlRpcG8gZGUgcmVnaXN0cm8iLCJsb2ctZm9ybWF0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGlwbyBkZSByZWdpc3RybyIscmVtb3RlOiJSZWdpc3RybyByZW1vdG8iLCJyZW1vdGUtbG9ncyI6IlJlZ2lzdHJvIHJlbW90byIsbG9jYWw6IlJlZ2lzdHJvIGxvY2FsIixsZXZlbDoiTml2ZWwgZGUgcmVnaXN0cm8iLCJmaWxlLXBhdGgiOiJSdXRhIGRlIGZpY2hlcm8iLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBydXRhIGRlIGZpY2hlcm8iLCJzYXZpbmctcGVyaW9kIjoiUGVyaW9kbyBkZSBndWFyZGFkbyBkZSByZWdpc3Ryb3MiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gbm8gcHVlZGUgc2VyIG1lbm9yIHF1ZSAxIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHBlcmlvZG8gZGUgZ3VhcmRhZG8iLCJiYWNrdXAtY291bnQiOiJOw7ptZXJvIGRlIGJhY2t1cHMiLCJiYWNrdXAtY291bnQtbWluIjoiRWwgbsO6bWVybyBkZSBiYWNrdXBzIG5vIHB1ZWRlIHNlciBtZW5vciBxdWUgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgYmFja3VwcyJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiVGllbXBvIGRlIGVzcGVyYSwgZW52w61vIGRlIHBhcXVldGVzIChlbiBtcykiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGllbXBvIGRlIGVzcGVyYSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoiRWwgdGllbXBvIGRlIGVzcGVyYSBubyBwdWVkZSBzZXIgbWVub3IgcXVlIDAiLCJuby1jb25uZWN0b3JzIjoiTm8gaGF5IGNvbmVjdG9yZXMiLCJuby1kYXRhIjoiTm8gaGF5IGNvbmZpZ3VyYWNpb25lcyIsIm5vLWdhdGV3YXktZm91bmQiOiJObyBzZSBoYSBlbmNvbnRyYWRvIG5pbmfDum4gZ2F0ZXdheS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiICd7e2l0ZW19fScgbm8gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJSdXRhIGEgbG9zIGFyY2hpdm9zIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlJ1dGEgcmVxdWVyaWRhLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiUGVybWl0aXIgS2VlcCBhbGl2ZSBzaSBsbGFtYWRhcyIscmVtb3RlOiJDb25maWd1cmFjacOzbiByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik5pdmVsIGRlIGxvZ2dpbmciLCJyZW1vdmUtZW50cnkiOiJCb3JyYXIgY29uZmlndXJhY2nDs24iLCJyZW1vdGUtc2hlbGwiOiJDb25zb2xhIHJlbW90YSIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiQ29uZmlndXJhY2nDs24gcmVtb3RhIixvdGhlcjoib3Ryb3MiLCJzYXZlLXRpcCI6IkdyYWJhciBmaWNoZXJvIGRlIGNvbmZpZ3VyYWNpw7NuIiwic2VjdXJpdHktdHlwZSI6IlRpcG8gZGUgc2VndXJpZGFkIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVMOza2VuIGRlIGFjY2VzbyIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXN1YXJpbyB5IGNvbnRyYXNlw7FhIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBUw7NrZW4gZGUgYWNjZXNvIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgQ2xhdmUgcHJpdmFkYSJ9LCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZWwgc2Vydmlkb3IiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiRXN0YWTDrXN0aWNhIixzdGF0aXN0aWNzOiJFc3RhZMOtc3RpY2FzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjoiTm8gaGF5IGVzdGFkw61zdGljYXMiLGNvbW1hbmRzOiJDb21hbmRvcyIsInNlbmQtcGVyaW9kIjoiUGVyaW9kbyBkZSBlbnbDrW8gZGUgZXN0YWTDrXN0aWNhcyAoZW4gc2VndW5kb3MpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIGRlIGVudsOtbyIsInNlbmQtcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gZGUgZW52w61vIG5vIHB1ZWRlIHNlciBtZW5vciBkZSA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJFbCBwZXJpb2RvIGRlIGVudsOtbyBubyBlcyB2w6FsaWRvIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiUmV2aXNhciBjb25maWd1cmFjacOzbiBkZSBjb25lY3RvcmVzIChlbiBzZWd1bmRvcykiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB1biB2YWxvciIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuIjoiTGEgY29uZmlndXJhY2nDs24gbm8gZXMgdsOhbGlkYSIsYWRkOiJBw7FhZGlyIGNvbWFuZG8iLHRpbWVvdXQ6IlRpbWVvdXQiLCJ0aW1lb3V0LW1zIjoiVGltZW91dCAoZW4gbXMpIiwidGltZW91dC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHRpbWVvdXQiLCJ0aW1lb3V0LW1pbiI6IkVsIHRpbWVvdXQgbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJFbCB0aW1lb3V0IG5vIGVzIHbDoWxpZG8iLCJhdHRyaWJ1dGUtbmFtZSI6Ik5vbWJyZSBkZSBhdHJpYnV0byIsImF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGF0cmlidXRvIixjb21tYW5kOiJDb21hbmRvIiwiY29tbWFuZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGNvbWFuZG8iLHJlbW92ZToiQm9ycmFyIGNvbWFuZG8ifSxzdG9yYWdlOiJHcmFiYWNpw7NuIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTsO6bWVybyBtw6F4aW1vIGRlIHJlZ2lzdHJvcyBlbiBmaWNoZXJvIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZmljaGVyb3MiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6FsaWRvLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTcOheGltbyBkZSByZWdpc3Ryb3MgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltbyBlcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiTGVlciBuw7ptZXJvIGRlIGVudHJhZGFzIGVuIGFsbWFjw6luIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgZW50cmFkYXMgZXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBuw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiUnV0YSBkZSBjYXJwZXRhIGRlIGRhdG9zIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcnV0YS4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWHDsW8gbcOheGltbyBkZSBldmVudG9zIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiRWwgbsO6bWVybyBtw61uaW1vIGVzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8uIiwic3RvcmFnZS1wYXRoIjoiUnV0YSBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHJ1dGEgZGUgYWxtYWPDqW4uIiwic3RvcmFnZS10eXBlIjoiVGlwbyBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gZmljaGVybyIsIm1lbW9yeS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gbWVtb3JpYSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiSG9zdCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQdWVydG8gVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkVsIHB1ZXJ0byBtw6F4aW1vIGVzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiRWwgcHVlcnRvIG3DrW5pbW8gZXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQdWVydG8gbm8gdsOhbGlkby4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcHVlcnRvLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDs24gY29uZWN0b3Ige3t0eXBlTmFtZX19IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIENBIGVuIGVsIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIGNsaWVudGUgZW4gZWwgZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6IkNvbXByb2JhY2nDs24gZGUgVFRMIGRlIG1lbnNhamVzIGVuIGhvcmFzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiQ2FtcG8gcmVxdWVyaWRvLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJFbCBtw61uaW1vIGVzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwgKFRpbWUgdG8gbGl2ZSkgZGUgbWVuc2FnZXMgZW4gZMOtYXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIFRUTCBkZSBtZW5zYWplcy4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvLiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IkVsIHJhbmdvIGRlIHZhbG9yZXMgZXMgZGVzZGUgMCBhIDEiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlJ1dGEgYSBsYSBjbGF2ZSBwcml2YWRhIGVuIGVsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7NuIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkHDsWFkaXIvYWN0dWFsaXphciBjb25maWd1cmFjacOzbiBKU09OIixoaW50czp7InJlbW90ZS1jb25maWd1cmF0aW9uIjoiSGFiaWxpdGEgbGEgYWRtaW5pc3RyYWNpw7NuIHkgY29uZmlndXJhY2nDs24gcmVtb3RhIGRlbCBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiSGFiaWxpdGEgZWwgY29udHJvbCByZW1vdG8gZGVsIHNpc3RlbWEgb3BlcmF0aXZvIGRlbCBnYXRld2F5IGRlc2RlIGVsIHdpZGdldCB0ZXJtaW5hbCByZW1vdG8iLGhvc3Q6Ikhvc3RuYW1lIG8gZGlyZWNjacOzbiBJUCBkZWwgc2Vydmlkb3IgVGhpbmdzYm9hcmQiLHBvcnQ6IlB1ZXJ0byBkZWwgc2VydmljaW8gTVFUVCBlbiBlbCBzZXJ2aWRvciBUaGluZ3Nib2FyZCIsdG9rZW46IkFjY2VzcyB0b2tlbiBwYXJhIGVsIGdhdGV3YXkiLCJjbGllbnQtaWQiOiJJRCBkZSBjbGllbnRlIE1RVFQgcGFyYSBlbCBnYXRld2F5Iix1c2VybmFtZToiVXN1YXJpbyBNUVRUIHBhcmEgZWwgZ2F0ZXdheSIscGFzc3dvcmQ6IkNvbnRyYXNlw7FhIE1RVFQgcGFyYSBlbCBnYXRld2F5IiwiY2EtY2VydCI6IlJ1dGEgYWwgZmljaGVybyBkZWwgY2VydGlmaWNhZG8gQ0EiLCJkYXRlLWZvcm0iOiJGb3JtYXRvIGRlIGZlY2hhIGVuIGxvcyBtZW5zYWplcyBkZSByZWdpc3RybyIsImRhdGEtZm9sZGVyIjoiUnV0YSBhIGxhIGNhcnBldGEgcXVlIGNvbnRlbmRyw6EgbG9zIGRhdG9zIChSZWxhdGl2YSBvIGFic29sdXRhKSIsImxvZy1mb3JtYXQiOiJGb3JtYXRvIGRlIG1lbnNhamVzIGVuIHJlZ2lzdHJvIiwicmVtb3RlLWxvZyI6IkhhYmlsaXRhIGVsIHJlZ2lzdHJvIHJlbW90byB5IGxhIHBvc3RlcmlvciBsZWN0dXJhIGRlc2RlIGVsIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJTaSBlbCBjb250YWplIGRlIGNvcGlhcyBkZSBzZWd1cmlkYWQgZXMgbWF5b3IgcXVlIDAsIGN1YW5kbyBzZSByZWFsaWNlIHVuYSByZW5vdmFjacOzbiwgbm8gc2UgY29uc2VydmFuIG3DoXMgcXVlIGxvcyBhcmNoaXZvcyBkZSByZWN1ZW50byBkZSBjb3BpYXMgZGUgc2VndXJpZGFkLCBsb3MgbcOhcyBhbnTDrWd1b3Mgc2UgZWxpbWluYXLDoW4iLHN0b3JhZ2U6IlByb3ZlZSBsYSBjb25maWd1cmFjacOzbiBwYXJhIGVsIGdyYWJhZG8gZGUgZGF0b3MgZW50cmFudGVzIGFudGVzIGRlIHF1ZSBzZSBlbnbDrWVuIGEgbGEgcGxhdGFmb3JtYSIsIm1heC1maWxlLWNvdW50IjoiTsO6bWVybyBtw6F4aW1vIGRlIGZpY2hlcm9zIHF1ZSBzZSBjcmVhcsOhbiIsIm1heC1yZWFkLWNvdW50IjoiTsO6bWVvIG3DoXhpbW8gZGUgbWVuc2FqZXMgYSBvYnRlbmVyIGRlc2RlIGVsIGRpc2NvIHkgZW52aWFkb3MgYSBsYSBwbGF0YWZvcm1hIiwibWF4LXJlY29yZHMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIHF1ZSBzZSBndWFyZGFyw6FuIGVuIHVuIHNvbG8gZmljaGVybyIsInJlYWQtcmVjb3JkLWNvdW50IjoiTsO6bWVybyBkZSBtZW5zYWdlcyBhIG9idGVuZXIgZGVzZGUgZWwgYWxtYWNlbmFtaWVudG8geSBlbnZpYWRvcyBhIGxhIHBsYXRhZm9ybWEiLCJtYXgtcmVjb3Jkcy1jb3VudCI6Ik7Dum1lcm8gbcOheGltbyBkZSBkYXRvcyBlbiBhbG1hY2VuYW1pZW50byBhbnRlcyBkZSBlbnZpYXIgYSBsYSBwbGF0YWZvcm1hIiwidHRsLWNoZWNrLWhvdXIiOiJDb24gcXXDqSBmcmVjdWVuY2lhIGVsIGdhdGV3YXkgY29tcHJvYmFyw6Egc2kgbG9zIGRhdG9zIGVzdMOhbiBvYnNvbGV0b3MiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTsO6bWVybyBtw6F4aW1vIGRlIGTDrWFzIHBhcmEgbGEgcmV0ZW5jacOzbiBkZSBkYXRvcyBlbiBlbCBhbG1hY8OpbiIsY29tbWFuZHM6IkNvbWFuZG9zIHBhcmEgcmVjb2dlciBlc3RhZMOtc3RpY2FzIGFkaWNpb25hbGVzIixhdHRyaWJ1dGU6IkNsYXZlIGRlIHRlbGVtZXRyw61hIHBhcmEgZXN0YWTDrXN0aWNhcyIsdGltZW91dDoiVGltZW91dCBwYXJhIGxhIGVqZWN1Y2nDs24gZGUgY29tYW5kb3MiLGNvbW1hbmQ6IkVsIHJlc3VsdGFkbyBkZSBsYSBlamVjdWNpw7NuIGRlbCBjb21hbmRvLCBzZSB1c2Fyw6EgY29tbyB2YWxvciBwYXJhIGxhIHRlbGVtZXRyw61hIiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiSGFiaWxpdGEgbGEgbW9uaXRvcml6YWNpw7NuIGRlIGNhZGEgdW5vIGRlIGxvcyBkaXNwb3NpdGl2b3MgY29uZWN0YWRvcyIsImluYWN0aXZpdHktdGltZW91dCI6IlRpZW1wbyB0cmFzIHF1ZSBlbCBnYXRld2F5IGRlc2NvbmVjdGFyw6EgZWwgZGlzcG9zaXRpdm8iLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZG8gZGUgbW9uaXRvcml6YWNpw7NuIGRlIGFjdGl2aWRhZCBlbiBlbCBkaXNwb3NpdGl2byIsIm1pbmltYWwtcGFjay1kZWxheSI6IlRpZW1wbyBkZSBlc3BlcmEgZW50cmUgZW52w61vIGRlIHBhcXVldGVzIGRlIG1lbnNhamVzIChVbiB2YWxvciBtdXkgYmFqbywgcmVzdWx0YXLDoSBlbiB1biBhdW1lbnRvIGRlIHVzbyBkZSBsYSBDUFUgZW4gZWwgZ2F0ZXdheSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGVuIGxvcyBtZW5zYWplcyBNUVRUICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZSByZWQgZW4gZWwgY3VhbCBlbCBzZXJ2aWRvciBHUlBDIGVzY3VjaGFyw6EgY29uZXhpb25lcyBlbnRyYW50ZXMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaWVtcG8gbcOheGltbywgZWwgY3VhbCBlbCBzZXJ2aWRvciBlc3BlcmFyYSB1biBwaW5nIGtlZXBhbGl2ZSBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYWNpw7NuIGVudHJlIGRvcyBwaW5ncyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbGxhbWFkYSBSUEMgYWN0aXZhLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik3DrW5pbW8gdGllbXBvIHF1ZSBlbCBzZXJ2aWRvciBkZWJlIGVzcGVyYXIgZW50cmUgZW52w61vcyBkZSBtZW5zYWplcyBkZSBwaW5nIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTsO6bWVybyBtw6F4aW1vIGRlIHBpbmdzIGtlZXBhbGl2ZSBxdWUgZWwgc2Vydmlkb3IgcHVlZGUgZW52aWFyIHNpbiByZWNpYmlyIG5pbmfDum4gZGF0byBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNw61uaW1vIHRpZW1wbyBxdWUgZWwgc2Vydmlkb3IgZGViZSBlc3BlcmFyIGVudHJlIGVudsOtb3MgZGUgcGluZyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbmluZ8O6biBkYXRvIGVuIGVudsOtbyBvIHJlY2VwY2nDs24uIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJQZXJtaXRpciBhbCBzZXJ2aWRvciBtYW50ZW5lciBsYSBjb25leGnDs24gR1JQQyBhYmllcnRhLCBjdWFuZG8gbm8gaGF5YSBsbGFtYWRhcyBSUEMgYWN0aXZhcy4ifX0sSG89eyJhZGQtZW50cnkiOiLshKTsoJUg7LaU6rCAIiwiY29ubmVjdG9yLWFkZCI6IuyDiOuhnOyatCDsl7DqsrDsnpAg7LaU6rCAIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJFbmFibGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUiOiJDb25uZWN0b3IgbmFtZSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiQ29ubmVjdG9yIG5hbWUgaXMgcmVxdWlyZWQuIiwiY29ubmVjdG9yLXR5cGUiOiJDb25uZWN0b3IgdHlwZSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiQ29ubmVjdG9yIHR5cGUgaXMgcmVxdWlyZWQuIixjb25uZWN0b3JzOiJDb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhdGUgYSBuZXcgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQXJlIHlvdSBzdXJlIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBnYXRld2F5IHdpdGggbmFtZTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiU3RvcmFnZSIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBmaWxlIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbXVtIG51bWJlciBvZiBmaWxlcyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJOdW1iZXIgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWF4aW11bSByZWNvcmRzIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZCBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlRoaW5nc0JvYXJkIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29ubmVjdG9yIHt7dHlwZU5hbWV9fSBjb25maWd1cmF0aW9uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYXRoIHRvIHByaXZhdGUga2V5IG9uIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlRvZ2dsZSBmdWxsc2NyZWVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aW9uIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkZC91cGRhdGUgY29uZmlndXJhdGlvbiBKU09OIn0sem89eyJhZGQtZW50cnkiOiJBZGQgY29uZmlndXJhdGlvbiIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJycGMtY29tbWFuZC1zZW5kIjoiU2VuZCIsInJwYy1jb21tYW5kLXJlc3VsdCI6IlJlc3VsdCIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiSW4gb3JkZXIgdG8gcnVuIFRoaW5nc0JvYXJkIElvVCBnYXRld2F5IGluIGRvY2tlciB3aXRoIGNyZWRlbnRpYWxzIGZvciB0aGlzIGRldmljZSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkNyZWF0ZSBhIG5ldyBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJBcmUgeW91IHN1cmUgeW91IHdhbnQgY3JlYXRlIGEgbmV3IGdhdGV3YXkgd2l0aCBuYW1lOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkRldmljZSB3aXRoIHNhbWUgbmFtZSBpcyBhbHJlYWR5IGV4aXN0cy4iLCJnYXRld2F5LW5hbWUiOiJHYXRld2F5IG5hbWUiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJHYXRld2F5IG5hbWUgaXMgcmVxdWlyZWQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHkgc2F2ZWQuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJLZWVwIGFsaXZlIHRpbWVvdXQgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIG5vdCB2YWxpZCIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IktlZXAgYWxpdmUgaXMgcmVxdWlyZWQiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiS2VlcCBhbGl2ZSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm4iOiJLZWVwIGFsaXZlIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgKGluIG1zKSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluIHBpbmcgaW50ZXJ2YWwgd2l0aG91dCBkYXRhIChpbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyBub3QgdmFsaWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1taW4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJqc29uLXBhcnNlIjoiTm90IHZhbGlkIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IkZpZWxkIGNhbm5vdCBiZSBlbXB0eS4iLGxvZ3M6e2xvZ3M6IkxvZ3MiLGRheXM6ImRheXMiLGhvdXJzOiJob3VycyIsbWludXRlczoibWludXRlcyIsc2Vjb25kczoic2Vjb25kcyIsImRhdGUtZm9ybWF0IjoiRGF0ZSBmb3JtYXQiLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IkRhdGUgZm9ybWF0IHJlcXVpcmVkIiwibG9nLWZvcm1hdCI6IkxvZyBmb3JtYXQiLCJsb2ctdHlwZSI6IkxvZyB0eXBlIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6IkxvZyBmb3JtYXQgcmVxdWlyZWQiLHJlbW90ZToiUmVtb3RlIGxvZ2dpbmciLCJyZW1vdGUtbG9ncyI6IlJlbW90ZSBsb2dzIixsb2NhbDoiTG9jYWwgbG9nZ2luZyIsbGV2ZWw6IkxvZyBsZXZlbCIsImZpbGUtcGF0aCI6IkZpbGUgcGF0aCIsImZpbGUtcGF0aC1yZXF1aXJlZCI6IkZpbGUgcGF0aCByZXF1aXJlZCIsInNhdmluZy1wZXJpb2QiOiJMb2cgc2F2aW5nIHBlcmlvZCIsInNhdmluZy1wZXJpb2QtbWluIjoiTG9nIHNhdmluZyBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiJMb2cgc2F2aW5nIHBlcmlvZCByZXF1aXJlZCIsImJhY2t1cC1jb3VudCI6IkJhY2t1cCBjb3VudCIsImJhY2t1cC1jb3VudC1taW4iOiJCYWNrdXAgY291bnQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IkJhY2t1cCBjb3VudCByZXF1aXJlZCJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiTWluIHBhY2sgc2VuZCBkZWxheSAoaW4gbXMpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgaXMgcmVxdWlyZWQiLCJtaW4tcGFjay1zZW5kLWRlbGF5LW1pbiI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMCIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJLZWVwIGFsaXZlIHBlcm1pdCB3aXRob3V0IGNhbGxzIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtc2hlbGwiOiJSZW1vdGUgc2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IlJlbW90ZSBDb25maWd1cmF0aW9uIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTdG9yYWdlIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIGZpbGUiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBudW1iZXIgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWJlciBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbXVtIHJlY29yZHMgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudCI6IlJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudCI6Ik1heCByZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiTWF4IFJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6IkRhdGEgZm9sZGVyIHBhdGgiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiJEYXRhIGZvbGRlciBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQgaG9zdCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYXhpbXVtIHBvcnQgbnVtYmVyIGlzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluaW11bSBwb3J0IG51bWJlciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgaXMgbm90IHZhbGlkLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGlzIHJlcXVpcmVkLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBjb25maWcgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsaGludHM6eyJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIFRoaW5nc0JvYXJkIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIGZvbGRlciwgdGhhdCB3aWxsIGNvbnRhaW5zIGRhdGEgKFJlbGF0aXZlIG9yIEFic29sdXRlKSIsImxvZy1mb3JtYXQiOiJMb2cgbWVzc2FnZSBmb3JtYXQiLCJyZW1vdGUtbG9nIjoiRW5hYmxlcyByZW1vdGUgbG9nZ2luZyBhbmQgbG9ncyByZWFkaW5nIGZyb20gdGhlIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJJZiBiYWNrdXAgY291bnQgaXMgPiAwLCB3aGVuIGEgcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cCBjb3VudCBmaWxlcyBhcmUga2VwdCAtIHRoZSBvbGRlc3Qgb25lcyBhcmUgZGVsZXRlZCIsc3RvcmFnZToiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3Igc2F2aW5nIGluY29taW5nIGRhdGEgYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIHBsYXRmb3JtIiwibWF4LWZpbGUtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGZpbGUgdGhhdCB3aWxsIGJlIGNyZWF0ZWQiLCJtYXgtcmVhZC1jb3VudCI6IkNvdW50IG9mIG1lc3NhZ2VzIHRvIGdldCBmcm9tIHN0b3JhZ2UgYW5kIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJtYXgtcmVjb3JkcyI6Ik1heGltdW0gY291bnQgb2YgcmVjb3JkcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIG9uZSBmaWxlIiwicmVhZC1yZWNvcmQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGRhdGEgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZCB0byBUaGluZ3NCb2FyZCIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgR2F0ZXdheSBjaGVjayBkYXRhIGZvciBvYnNvbGVzY2VuY2UiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTWF4aW11bSBkYXlzIHRoYXQgc3RvcmFnZSB3aWxsIHNhdmUgZGF0YSIsY29tbWFuZHM6IkNvbW1hbmRzIGZvciBjb2xsZWN0aW5nIGFkZGl0aW9uYWwgc3RhdGlzdGljIixhdHRyaWJ1dGU6IlN0YXRpc3RpYyB0ZWxlbWV0cnkga2V5Iix0aW1lb3V0OiJUaW1lb3V0IGZvciBjb21tYW5kIGV4ZWN1dGluZyIsY29tbWFuZDoiVGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24sIHdpbGwgYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRlbGVtZXRyeSIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6IkVuYWJsZXMgbW9uaXRvciB0aGUgYWN0aXZpdHkgb2YgZWFjaCBjb25uZWN0ZWQgZGV2aWNlIiwiaW5hY3Rpdml0eS10aW1lb3V0IjoiVGltZSBhZnRlciB3aG9zZSB0aGUgZ2F0ZXdheSB3aWxsIGRpc2Nvbm5lY3QgZGV2aWNlIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiJQZXJpb2RpY2l0eSBvZiBkZXZpY2UgYWN0aXZpdHkgY2hlY2siLCJtaW5pbWFsLXBhY2stZGVsYXkiOiJEZWxheSBiZXR3ZWVuIHNlbmRpbmcgcGFja3Mgb2YgbWVzc2FnZXMgKERlY3JlYXNpbmcgdGhpcyBzZXR0aW5nIHJlc3VsdHMgaW4gaW5jcmVhc2VkIENQVSB1c2FnZSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGluIE1RVFQgbWVzc2FnaW5nICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6Ik5ldHdvcmsgcG9ydCBvbiB3aGljaCBHUlBDIHNlcnZlciB3aWxsIGxpc3RlbiBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJNYXhpbXVtIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBmb3IgYSBrZWVwYWxpdmUgcGluZyByZXNwb25zZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLWtlZXAtYWxpdmUiOiJEdXJhdGlvbiBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIFJQQyBjYWxsLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXhpbXVtIG51bWJlciBvZiBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB0aGF0IHRoZSBzZXJ2ZXIgY2FuIHNlbmQgd2l0aG91dCByZWNlaXZpbmcgYW55IGRhdGEgYmVmb3JlIGl0IGNvbnNpZGVycyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgYmVpbmcgc2VudCBvciByZWNlaXZlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IkFsbG93IHNlcnZlciB0byBrZWVwIHRoZSBHUlBDIGNvbm5lY3Rpb24gYWxpdmUgZXZlbiB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgUlBDIGNhbGxzLiJ9fSxXbz17ImFkZC1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB0b2V2b2VnZW4iLCJjb25uZWN0b3ItYWRkIjoiTmlldXdlIGNvbm5lY3RvciB0b2V2b2VnZW4iLCJjb25uZWN0b3ItZW5hYmxlZCI6IkNvbm5lY3RvciBpbnNjaGFrZWxlbiIsImNvbm5lY3Rvci1uYW1lIjoiTmFhbSB2YW4gZGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJEZSBuYWFtIHZhbiBkZSBjb25uZWN0b3IgaXMgdmVyZWlzdC4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cGUgYWFuc2x1aXRpbmciLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkhldCB0eXBlIGNvbm5lY3RvciBpcyB2ZXJlaXN0LiIsY29ubmVjdG9yczoiQ29uZmlndXJhdGllIHZhbiBjb25uZWN0b3JlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkVlbiBuaWV1d2UgZ2F0ZXdheSBtYWtlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiV2VldCB1IHpla2VyIGRhdCB1IGVlbiBuaWV1d2UgZ2F0ZXdheSB3aWx0IG1ha2VuIG1ldCBkZSBuYWFtOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiQ29uZmlndXJhdGllIHZlcndpamRlcmVuIiwiZG93bmxvYWQtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBkb3dubG9hZGVuIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2UgbWV0IGRlemVsZmRlIG5hYW0gYmVzdGFhdCBhbC4iLCJnYXRld2F5LW5hbWUiOiJOYWFtIHZhbiBkZSBnYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiRGUgbmFhbSB2YW4gZGUgZ2F0ZXdheSBpcyB2ZXJlaXN0LiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5Y29uZmlndXJhdGllIHN1Y2Nlc3ZvbCBvcGdlc2xhZ2VuLiIsImpzb24tcGFyc2UiOiJPbmdlbGRpZ2UgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiSGV0IHZlbGQgbWFnIG5pZXQgbGVlZyB6aWpuLiIsIm5vLWNvbm5lY3RvcnMiOiJHZWVuIGNvbm5lY3RvcmVuIiwibm8tZGF0YSI6IkdlZW4gY29uZmlndXJhdGllcyIsIm5vLWdhdGV3YXktZm91bmQiOiJHZWVuIGdhdGV3YXkgZ2V2b25kZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6Iid7e2l0ZW19fScgbmlldCBnZXZvbmRlbi4iLCJwYXRoLWxvZ3MiOiJQYWQgbmFhciBsb2diZXN0YW5kZW4iLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYWQgaXMgdmVyZWlzdC4iLHJlbW90ZToiQ29uZmlndXJhdGllIG9wIGFmc3RhbmQiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJlZ2lzdHJhdGllIG5pdmVhdSIsInJlbW92ZS1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB2ZXJ3aWpkZXJlbiIsInNhdmUtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBvcHNsYWFuIiwic2VjdXJpdHktdHlwZSI6IlNvb3J0IGJldmVpbGlnaW5nIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9lZ2FuZyB0b3QgdG9rZW4iLHRsczoiVExTIChUTFMpIn0sc3RvcmFnZToiT3BzbGFnIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSBhYW50YWwgcmVjb3JkcyBpbiBiZXN0YW5kIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbWFhbCBhYW50YWwgYmVzdGFuZGVuIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBhYW50YWwgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtbWVyIGlzIHZlcmVpc3QuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gYWFudGFsIHJlY29yZHMgaW4gb3BzbGFnIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIGFhbnRhbCByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbWFsZSByZWNvcmRzIHppam4gdmVyZWlzdC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1heGltYWxlIHBha2tldGdyb290dGUgdm9vciBldmVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIGFhbnRhbCBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1tZXIgaXMgbmlldCBnZWxkaWcuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJEZSBtYXhpbWFsZSBwYWtrZXRncm9vdHRlIHZhbiBoZXQgZXZlbnQgaXMgdmVyZWlzdC4iLCJzdG9yYWdlLXBhdGgiOiJPcHNsYWcgcGFkIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiT3BzbGFncGFkIGlzIHZlcmVpc3QuIiwic3RvcmFnZS10eXBlIjoiVHlwZSBvcHNsYWciLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik9wc2xhZyB2YW4gYmVzdGFuZGVuIiwibWVtb3J5LXN0b3JhZ2UiOiJHZWhldWdlbiBvcHNsYWcifSx0aGluZ3Nib2FyZDoiRGluZ2VuIEJvcmQiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQtZ2FzdGhlZXIiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiU2VydmVyIGhvc3QgaXMgdmVyZWlzdC4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmQtcG9vcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkhldCBtYXhpbWFsZSBwb29ydG51bW1lciBpcyA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6IkhldCBtaW5pbWFsZSBwb29ydG51bW1lciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvb3J0IGlzIG5pZXQgZ2VsZGlnLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb29ydCBpcyB2ZXJlaXN0LiIsdGlkeToiT3JkZWxpamsiLCJ0aWR5LXRpcCI6Ik9wZ2VydWltZGUgY29uZmlndXJhdGllIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmF0aWUgdmFuIGNvbm5lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhZCBuYWFyIENBLWNlcnRpZmljYWF0IG9wIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYWQgbmFhciBjbGllbnRjZXJ0aWZpY2FhdCBvcCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYWQgbmFhciBwcml2w6lzbGV1dGVsIG9wIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlZvbGxlZGlnIHNjaGVybSBpbi0gZW4gdWl0c2NoYWtlbGVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aWUgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQ29uZmlndXJhdGllIEpTT04gdG9ldm9lZ2VuL2JpandlcmtlbiJ9LGpvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2rEmSIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3dlIHrFgsSFY3plIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJXxYLEhWN6IHrFgsSFY3plIiwiY29ubmVjdG9yLW5hbWUiOiJOYXp3YSB6xYLEhWN6YSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTmF6d2EgesWCxIVjemEgamVzdCB3eW1hZ2FuYS4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cCB6xYLEhWN6YSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiVHlwIHrFgsSFY3phIGplc3Qgd3ltYWdhbnkuIixjb25uZWN0b3JzOiJLb25maWd1cmFjamEgesWCxIVjenkiLCJjb25uZWN0b3JzLWNvbmZpZyI6IkNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOYW1lIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoiVHlwZSIsImNvbm5lY3RvcnMtdGFibGUtc3RhdHVzIjoiU3RhdHVzIiwiY29ubmVjdG9ycy10YWJsZS1hY3Rpb25zIjoiQWN0aW9ucyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiS2V5IiwiY29ubmVjdG9ycy10YWJsZS1jbGFzcyI6IkNsYXNzIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXN1bHQiLCJycGMtY29tbWFuZC1lZGl0LXBhcmFtcyI6IkVkaXQgcGFyYW1ldGVycyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkdlbmVyYWwgQ29uZmlndXJhdGlvbiIsImRvY2tlci1sYWJlbCI6IkluIG9yZGVyIHRvIHJ1biBUaGluZ3NCb2FyZCBJb1QgZ2F0ZXdheSBpbiBkb2NrZXIgd2l0aCBjcmVkZW50aWFscyBmb3IgdGhpcyBkZXZpY2UgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcy4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJVdHfDs3J6IG5vd3kgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQ3p5IG5hIHBld25vIGNoY2VzeiB1dHdvcnp5xIcgbm93eSBnYXRld2F5IG8gbmF6d2llOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IlVzdcWEIGtvbmZpZ3VyYWNqxJkiLCJkb3dubG9hZC10aXAiOiJQb2JpZXJ6IHBsaWsga29uZmlndXJhY3lqbnkiLCJkcm9wLWZpbGUiOiJEcm9wIGZpbGUgaGVyZSBvciIsZ2F0ZXdheToiV2VqxZtjaWUiLCJnYXRld2F5LWV4aXN0cyI6IlVyesSFZHplbmllIG8gdGVqIHNhbWVqIG5hendpZSBqdcW8IGlzdG5pZWplLiIsImdhdGV3YXktbmFtZSI6Ik5hendhIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOYXp3YSBHYXRld2F5J2EgamVzdCB3eW1hZ2FuYS4iLCJnYXRld2F5LXNhdmVkIjoiS29uZmlndXJhY2phIEdhdGV3ZXknYSB6b3N0YcWCYSBwb215xZtsbmllIHphcGlzYW5hLiIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCAoaW4gc2VjKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoiSW5hY3Rpdml0eSB0aW1lb3V0IChpbiBzZWMpIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgcmVxdWlyZWQiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgbm90IHZhbGlkIiwianNvbi1wYXJzZSI6Ik5pZXByYXdpZMWCb3d5IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmllIG1vxbxlIGJ5xIcgcHVzdGUuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDAiLCJuby1jb25uZWN0b3JzIjoiQnJhayB6xYLEhWN6eSIsIm5vLWRhdGEiOiJCcmFrIGtvbmZpZ3VyYWNqaSIsIm5vLWdhdGV3YXktZm91bmQiOiJOaWUgem5hbGV6aW9ubyBnYXRld2F5J2EuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pZSB6bmFsZXppb25vLiIsInBhdGgtbG9ncyI6IsWaY2llxbxrYSBkbyBwbGlrw7N3IGR6aWVubmlrYSIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IsWaY2llxbxrYSBqZXN0IHd5bWFnYW5hLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiS2VlcCBhbGl2ZSBwZXJtaXQgd2l0aG91dCBjYWxscyIscmVtb3RlOiJaZGFsbmEga29uZmlndXJhY2phIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJQb3ppb20gbG9nb3dhbmlhIiwicmVtb3ZlLWVudHJ5IjoiVXN1xYQga29uZmlndXJhY2rEmSIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLG90aGVyOiJPdGhlciIsInNhdmUtdGlwIjoiWmFwaXN6IHBsaWsga29uZmlndXJhY3lqbnkiLCJzZWN1cml0eS10eXBlIjoiUm9kemFqIHphYmV6cGllY3plbmlhIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9rZW4gZG9zdMSZcHUiLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTa8WCYWRvd2FuaWUiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYWtzeW1hbG5hIGxpY3piYSByZWtvcmTDs3cgdyBwbGlrdSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc3ltYWxuYSBsaWN6YmEgcGxpa8OzdyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWVyIGplc3Qgd3ltYWdhbnkuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyB3IHBhbWnEmWNpIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbWFsbmEgbGljemJhIHJla29yZMOzdyB0byAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWVyIGplc3QgbmllcHJhd2lkxYJvd3kuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiJSZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJNYXggcmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6Ik1heCBSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgiOiJEYXRhIGZvbGRlciBwYXRoIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiRGF0YSBmb2xkZXIgcGF0aCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCBqZXN0IHd5bWFnYW55LiIsInN0b3JhZ2UtcGF0aCI6IsWaY2llxbxrYSBwcnplY2hvd3l3YW5pYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IsWaY2llxbxrYSBkbyBwcnplY2hvd3l3YW5pYSBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCBza8WCYWRvd2FuaWEiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik5vxZtuaWsgZGFueWNoIiwibWVtb3J5LXN0b3JhZ2UiOiJQcnplY2hvd3l3YW5pZSBwYW1pxJljaSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiR29zcG9kYXJ6IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamVzdCB3eW1hZ2FueS4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4IjoiTWFrc3ltYWxueSBudW1lciBwb3J0dSB0byA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltYWxueSBudW1lciBwb3J0dSB0byAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBqZXN0IHd5bWFnYW55LiIsdGlkeToiVXBvcnrEhWRrdWoiLCJ0aWR5LXRpcCI6IlVwb3J6xIVka293YW5hIGtvbmZpZ3VyYWNqYSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiWsWCxIVjemUge3t0eXBlTmFtZX19IGtvbmZpZ3VyYWNqYSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoixZpjaWXFvGthIGRvIGNlcnR5ZmlrYXR1IENBIG5hIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiLFmmNpZcW8a2EgZG8gY2VydHlmaWthdHUga2xpZW50YSBuYSBnYXRld2F5IiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoiTWVzc2FnZXMgVFRMIGluIGRheXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLW1pbiI6Ik1pbiBudW1iZXIgaXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtcXR0LXFvcyI6IlFvUyIsIm1xdHQtcW9zLXJlcXVpcmVkIjoiUW9TIGlzIHJlcXVpcmVkIiwibXF0dC1xb3MtcmFuZ2UiOiJRb1MgdmFsdWVzIHJhbmdlIGlzIGZyb20gMCB0byAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLFmmNpZcW8a2EgZG8ga2x1Y3phIHByeXdhdG5lZ28gbmEgYnJhbWNlIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJQcnplxYLEhWN6IHRyeWIgcGXFgm5vZWtyYW5vd3kiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNqYSBKU09OKiIsInVwZGF0ZS1jb25maWciOiJEb2Rhai96YWt0dWFsaXp1aiBrb25maWd1cmFjasSZIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiJFbmFibGVzIHJlbW90ZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiRW5hYmxlcyByZW1vdGUgY29udHJvbCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIHRoZSBnYXRld2F5IGZyb20gdGhlIFJlbW90ZSBTaGVsbCB3aWRnZXQiLGhvc3Q6Ikhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgVGhpbmdzQm9hcmQgc2VydmVyIixwb3J0OiJQb3J0IG9mIE1RVFQgc2VydmljZSBvbiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHRva2VuOiJBY2Nlc3MgdG9rZW4gZm9yIHRoZSBnYXRld2F5IGZyb20gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2xpZW50LWlkIjoiTVFUVCBjbGllbnQgaWQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIix1c2VybmFtZToiTVFUVCB1c2VybmFtZSBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBhc3N3b3JkOiJNUVRUIHBhc3N3b3JkIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIsImNhLWNlcnQiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUiLCJkYXRlLWZvcm0iOiJEYXRlIGZvcm1hdCBpbiBsb2cgbWVzc2FnZSIsImRhdGEtZm9sZGVyIjoiUGF0aCB0byBmb2xkZXIsIHRoYXQgd2lsbCBjb250YWlucyBkYXRhIChSZWxhdGl2ZSBvciBBYnNvbHV0ZSkiLCJsb2ctZm9ybWF0IjoiTG9nIG1lc3NhZ2UgZm9ybWF0IiwicmVtb3RlLWxvZyI6IkVuYWJsZXMgcmVtb3RlIGxvZ2dpbmcgYW5kIGxvZ3MgcmVhZGluZyBmcm9tIHRoZSBnYXRld2F5IiwiYmFja3VwLWNvdW50IjoiSWYgYmFja3VwIGNvdW50IGlzID4gMCwgd2hlbiBhIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXAgY291bnQgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQiLHN0b3JhZ2U6IlByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gZm9yIHNhdmluZyBpbmNvbWluZyBkYXRhIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBwbGF0Zm9ybSIsIm1heC1maWxlLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBmaWxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiJNYXhpbXVtIGNvdW50IG9mIHJlY29yZHMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiBvbmUgZmlsZSIsInJlYWQtcmVjb3JkLWNvdW50IjoiQ291bnQgb2YgbWVzc2FnZXMgdG8gZ2V0IGZyb20gc3RvcmFnZSBhbmQgc2VuZCB0byBUaGluZ3NCb2FyZCIsIm1heC1yZWNvcmRzLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBkYXRhIGluIHN0b3JhZ2UgYmVmb3JlIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJ0dGwtY2hlY2staG91ciI6IkhvdyBvZnRlbiB3aWxsIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gZGF5cyB0aGF0IHN0b3JhZ2Ugd2lsbCBzYXZlIGRhdGEiLGNvbW1hbmRzOiJDb21tYW5kcyBmb3IgY29sbGVjdGluZyBhZGRpdGlvbmFsIHN0YXRpc3RpYyIsYXR0cmlidXRlOiJTdGF0aXN0aWMgdGVsZW1ldHJ5IGtleSIsdGltZW91dDoiVGltZW91dCBmb3IgY29tbWFuZCBleGVjdXRpbmciLGNvbW1hbmQ6IlRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLCB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciB0ZWxlbWV0cnkiLCJjaGVjay1kZXZpY2UtYWN0aXZpdHkiOiJFbmFibGVzIG1vbml0b3IgdGhlIGFjdGl2aXR5IG9mIGVhY2ggY29ubmVjdGVkIGRldmljZSIsImluYWN0aXZpdHktdGltZW91dCI6IlRpbWUgYWZ0ZXIgd2hvc2UgdGhlIGdhdGV3YXkgd2lsbCBkaXNjb25uZWN0IGRldmljZSIsImluYWN0aXZpdHktcGVyaW9kIjoiUGVyaW9kaWNpdHkgb2YgZGV2aWNlIGFjdGl2aXR5IGNoZWNrIiwibWluaW1hbC1wYWNrLWRlbGF5IjoiRGVsYXkgYmV0d2VlbiBzZW5kaW5nIHBhY2tzIG9mIG1lc3NhZ2VzIChEZWNyZWFzaW5nIHRoaXMgc2V0dGluZyByZXN1bHRzIGluIGluY3JlYXNlZCBDUFUgdXNhZ2UpIixxb3M6IlF1YWxpdHkgb2YgU2VydmljZSBpbiBNUVRUIG1lc3NhZ2luZyAoMCAtIGF0IG1vc3Qgb25jZSwgMSAtIGF0IGxlYXN0IG9uY2UpIiwic2VydmVyLXBvcnQiOiJOZXR3b3JrIHBvcnQgb24gd2hpY2ggR1JQQyBzZXJ2ZXIgd2lsbCBsaXN0ZW4gZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLiIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiTWF4aW11bSB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgZm9yIGEga2VlcGFsaXZlIHBpbmcgcmVzcG9uc2UgYmVmb3JlIGNvbnNpZGVyaW5nIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYXRpb24gYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBSUEMgY2FsbC4iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4aW11bSBudW1iZXIgb2Yga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgdGhhdCB0aGUgc2VydmVyIGNhbiBzZW5kIHdpdGhvdXQgcmVjZWl2aW5nIGFueSBkYXRhIGJlZm9yZSBpdCBjb25zaWRlcnMgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGJlaW5nIHNlbnQgb3IgcmVjZWl2ZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJBbGxvdyBzZXJ2ZXIgdG8ga2VlcCB0aGUgR1JQQyBjb25uZWN0aW9uIGFsaXZlIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIFJQQyBjYWxscy4ifX0sS289eyJhZGQtZW50cnkiOiJBZGljaW9uYXIgY29uZmlndXJhw6fDo28iLCJjb25uZWN0b3ItYWRkIjoiQWRpY2lvbmFyIG5vdm8gY29uZWN0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkhhYmlsaXRhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tZSBkbyBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTyBub21lIGRvIGNvbmVjdG9yIMOpIG9icmlnYXTDs3Jpby4iLCJjb25uZWN0b3ItdHlwZSI6IlRpcG8gZGUgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6Ik8gdGlwbyBkZSBjb25lY3RvciDDqSBvYnJpZ2F0w7NyaW8uIixjb25uZWN0b3JzOiJDb25maWd1cmHDp8OjbyBkZSBjb25lY3RvcmVzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JpYXIgdW0gbm92byBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJUZW0gY2VydGV6YSBkZSBxdWUgZGVzZWphIGNyaWFyIHVtIG5vdm8gZ2F0ZXdheSBjb20gbyBub21lOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiRXhjbHVpciBjb25maWd1cmHDp8OjbyIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGRlIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkrDoSBleGlzdGUgdW0gZGlzcG9zaXRpdm8gY29tIG8gbWVzbW8gbm9tZS4iLCJnYXRld2F5LW5hbWUiOiJOb21lIGRvIGdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJPIG5vbWUgZG8gZ2F0ZXdheSDDqSBvYnJpZ2F0w7NyaW8uIiwiZ2F0ZXdheS1zYXZlZCI6IkEgY29uZmlndXJhw6fDo28gZG8gZ2F0ZXdheSBmb2kgc2FsdmEgY29ycmV0YW1lbnRlLiIsImpzb24tcGFyc2UiOiJKU09OIGludsOhbGlkby4iLCJqc29uLXJlcXVpcmVkIjoiTyBjYW1wbyBuw6NvIHBvZGUgZXN0YXIgZW0gYnJhbmNvLiIsIm5vLWNvbm5lY3RvcnMiOiJTZW0gY29uZWN0b3JlcyIsIm5vLWRhdGEiOiJTZW0gY29uZmlndXJhw6fDtWVzIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5lbmh1bSBnYXRld2F5IGVuY29udHJhZG8uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG7Do28gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJDYW1pbmhvIHBhcmEgYXJxdWl2b3MgZGUgbG9nIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiTyBjYW1pbmhvIMOpIG9icmlnYXTDs3JpbyIscmVtb3RlOiJDb25maWd1cmHDp8OjbyByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik7DrXZlbCBkZSByZWdpc3RybyBlbSBsb2ciLCJyZW1vdmUtZW50cnkiOiJSZW1vdmVyIGNvbmZpZ3VyYcOnw6NvIiwic2F2ZS10aXAiOiJTYWx2YXIgYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyIsInNlY3VyaXR5LXR5cGUiOiJUaXBvIGRlIHNlZ3VyYW7Dp2EiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkZSBBY2Vzc28iLHRsczoiVExTIn0sc3RvcmFnZToiQXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJxdWl2byIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTsO6bWVybyBtw6F4aW1vIGRlIGFycXVpdm9zIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gw6kgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik8gbsO6bWVybyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gZGUgcmVnaXN0cm9zIMOpIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTyBuw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIMOpIG9icmlnYXTDs3Jpby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIMOpIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik8gbsO6bWVybyBuw6NvIMOpIHbDoWxpZG8uIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJPIHRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1wYXRoIjoiQ2FtaW5obyBkZSBhcm1hemVuYW1lbnRvIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiTyBjYW1pbmhvIGRlIGFybWF6ZW5hbWVudG8gw6kgb2JyaWdhdMOzcmlvLiIsInN0b3JhZ2UtdHlwZSI6IlRpcG8gZGUgYXJtYXplbmFtZW50byIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQXJtYXplbmFtZW50byBkZSBhcnF1aXZvIiwibWVtb3J5LXN0b3JhZ2UiOiJBcm1hemVuYW1lbnRvIGRlIG1lbcOzcmlhIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikhvc3QgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiTyBob3N0IMOpIG9icmlnYXTDs3Jpby4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydGEgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik8gbsO6bWVybyBtw6F4aW1vIGRlIHBvcnRhcyDDqSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIGRlIHBvcnRhcyDDqSAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IkEgcG9ydGEgbsOjbyDDqSB2w6FsaWRhLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJBIHBvcnRhIMOpIG9icmlnYXTDs3JpYS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IkNvbmZpZyBUaWR5IEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmHDp8OjbyBkbyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IkNhbWluaG8gcGFyYSBjZXJ0aWZpY2FkbyBkZSBBdXRvcmlkYWRlIGRlIENlcnRpZmljYcOnw6NvIG5vIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDYW1pbmhvIHBhcmEgY2VydGlmaWNhZG8gZGUgY2xpZW50ZSBubyBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJDYW1pbmhvIHBhcmEgY2hhdmUgcHJpdmFkYSBubyBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJBbHRlcm5hciB0ZWxhIGludGVpcmEiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYcOnw6NvIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkaWNpb25hci9hdHVhbGl6YXIgY29uZmlndXJhw6fDo28gZGUgSlNPTiJ9LCRvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2lqbyIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3YgcHJpa2xqdcSNZWsiLCJjb25uZWN0b3ItZW5hYmxlZCI6Ik9tb2dvxI1pIHByaWtsanXEjWVrIiwiY29ubmVjdG9yLW5hbWUiOiJJbWUgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkltZSBwcmlrbGp1xI1rYSBqZSBvYnZlem5vLiIsImNvbm5lY3Rvci10eXBlIjoiVnJzdGEgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IlphaHRldmEgc2UgdnJzdGEgcHJpa2xqdcSNa2EuIixjb25uZWN0b3JzOiJLb25maWd1cmFjaWphIHByaWtsanXEjWtvdiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlVzdHZhcmkgbm92IHByZWhvZCIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQWxpIHN0ZSBwcmVwcmnEjWFuaSwgZGEgxb5lbGl0ZSB1c3R2YXJpdGkgbm92IHByZWhvZCB6IGltZW5vbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6Ikl6YnJpxaFpIGtvbmZpZ3VyYWNpam8iLCJkb3dubG9hZC10aXAiOiJQcmVub3Mga29uZmlndXJhY2lqc2tlIGRhdG90ZWtlIixnYXRld2F5OiJQcmVob2QiLCJnYXRld2F5LWV4aXN0cyI6Ik5hcHJhdmEgeiBpc3RpbSBpbWVub20gxb5lIG9ic3RhamEuIiwiZ2F0ZXdheS1uYW1lIjoiSW1lIHByZWhvZGEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJJbWUgcHJlaG9kYSBqZSBvYnZlem5vLiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjaWphIHByZWhvZGEgamUgdXNwZcWhbm8gc2hyYW5qZW5hLiIsImpzb24tcGFyc2UiOiJOZXZlbGphdmVuIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGplIG5lIHNtZSBiaXRpIHByYXpuby4iLCJuby1jb25uZWN0b3JzIjoiTmkgcHJpa2xqdcSNa292Iiwibm8tZGF0YSI6IkJyZXoga29uZmlndXJhY2lqIiwibm8tZ2F0ZXdheS1mb3VuZCI6IlByZWhvZCBuaSBuYWpkZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pIG1vZ2/EjWUgbmFqdGkuIiwicGF0aC1sb2dzIjoiUG90IGRvIGRuZXZuacWha2loIGRhdG90ZWsiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQb3QgamUgb2J2ZXpuYS4iLHJlbW90ZToiT2RkYWxqZW5hIGtvbmZpZ3VyYWNpamEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJhdmVuIGJlbGXFvmVuamEiLCJyZW1vdmUtZW50cnkiOiJPZHN0cmFuaSBrb25maWd1cmFjaWpvIiwic2F2ZS10aXAiOiJTaHJhbmkga29uZmlndXJhY2lqc2tvIGRhdG90ZWtvIiwic2VjdXJpdHktdHlwZSI6IlZyc3RhIHphxaHEjWl0ZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkRvc3RvcG5pIMW+ZXRvbiIsdGxzOiJUTFMifSxzdG9yYWdlOiJTaHJhbWJhIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgZGF0b3Rla2kiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik5hanZlxI1qZSDFoXRldmlsbyBkYXRvdGVrIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLFoHRldmlsa2EgamUgb2J2ZXpuYS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgcG9tbmlsbmlrdSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyB6YXBpc292IGplIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoixaB0ZXZpbGthIG5pIHZlbGphdm5hLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJaYWh0ZXZhbiBqZSBuYWp2ZcSNIHphcGlzb3YuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJOYWp2ZcSNamEgdmVsaWtvc3QgcGFrZXRhIGRvZ29ka292Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJaYWh0ZXZhbmEgamUgbmFqdmXEjWphIHZlbGlrb3N0IHBha2V0YSBkb2dvZGtvdi4iLCJzdG9yYWdlLXBhdGgiOiJQb3QgcG9tbmlsbmlrYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlphaHRldmFuYSBqZSBwb3QgZG8gcG9tbmlsbmlrYS4iLCJzdG9yYWdlLXR5cGUiOiJWcnN0YSBwb21uaWxuaWthIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJTaHJhbWJhIGRhdG90ZWsiLCJtZW1vcnktc3RvcmFnZSI6IlNwb21pbiBwb21uaWxuaWthIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikdvc3RpdGVsaiBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJQb3RyZWJlbiBqZSBnb3N0aXRlbGouIiwidGhpbmdzYm9hcmQtcG9ydCI6IlZyYXRhIFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJOYWp2ZcSNamEgxaF0ZXZpbGthIHZyYXQgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJOYWptYW5qxaFhIMWhdGV2aWxrYSB2cmF0IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiVnJhdGEgbmlzbyB2ZWxqYXZuYS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG90cmVibmEgc28gdnJhdGEuIix0aWR5OiJVcmVqZW5vIiwidGlkeS10aXAiOiJVcmVqZW5hIGtvbmZpZ3VyYWNpamEgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IktvbmZpZ3VyYWNpamEga29uZWt0b3JqYSB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBvdCBkbyBwb3RyZGlsYSBDQSBuYSBwcmVob2R1IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUG90IGRvIHBvdHJkaWxhIHN0cmFua2UgbmEgcHJlaG9kdSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUG90IGRvIHphc2VibmVnYSBrbGp1xI1hIG5hIHByZWhvZHUiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlByZWtsb3AgbmEgY2Vsb3phc2xvbnNraSBuYcSNaW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNpamEgSlNPTiAqIiwidXBkYXRlLWNvbmZpZyI6IkRvZGFqIC8gcG9zb2RvYmkga29uZmlndXJhY2lqbyBKU09OIn0sWW89eyJhZGQtZW50cnkiOiJZYXDEsWxhbmTEsXJtYSBla2xlIiwiY29ubmVjdG9yLWFkZCI6IlllbmkgYmHEn2xhecSxY8SxIGVrbGUiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkJhxJ9sYXnEsWPEsXnEsSBldGtpbmxlxZ90aXIiLCJjb25uZWN0b3ItbmFtZSI6IkJhxJ9sYXnEsWPEsSBhZMSxIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJCYcSfbGF5xLFjxLEgYWTEsSBnZXJla2xpLiIsImNvbm5lY3Rvci10eXBlIjoiQmHEn2xhecSxY8SxIHRpcGkiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkJhxJ9sYXnEsWPEsSB0w7xyw7wgZ2VyZWtsaS4iLGNvbm5lY3RvcnM6IkJhxJ9sYXnEsWPEsWxhcsSxbiB5YXDEsWxhbmTEsXJtYXPEsSIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVyIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiIne3tnYXRld2F5TmFtZX19JyBhZMSxbmRhIHllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo/IixkZWxldGU6IllhcMSxbGFuZMSxcm1hecSxIHNpbCIsImRvd25sb2FkLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGluZGlyaW4iLGdhdGV3YXk6IkHEnyBnZcOnaWRpIiwiZ2F0ZXdheS1leGlzdHMiOiJBeW7EsSBhZGEgc2FoaXAgY2loYXogemF0ZW4gdmFyLiIsImdhdGV3YXktbmFtZSI6IkHEnyBnZcOnaWRpIGFkxLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJBxJ8gZ2XDp2lkaSBhZMSxIGdlcmVrbGkuIiwiZ2F0ZXdheS1zYXZlZCI6IkHEnyBnZcOnaWRpIHlhcMSxbGFuZMSxcm1hc8SxIGJhxZ9hcsSxeWxhIGtheWRlZGlsZGkuIiwianNvbi1wYXJzZSI6Ikdlw6dlcmxpIGJpciBKU09OIGRlxJ9pbC4iLCJqc29uLXJlcXVpcmVkIjoiQWxhbiBib8WfIG9sYW1hei4iLCJuby1jb25uZWN0b3JzIjoiQmHEn2xhecSxY8SxIHlvayIsIm5vLWRhdGEiOiJZYXDEsWxhbmTEsXJtYSB5b2siLCJuby1nYXRld2F5LWZvdW5kIjoiQcSfIGdlw6dpZGkgYnVsdW5hbWFkxLEuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIGJ1bHVuYW1hZMSxLiIsInBhdGgtbG9ncyI6IkxvZyBkb3N5YWxhcsSxIHlvbHUiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJMb2cgZG9zeWFsYXLEsSBkaXppbmkgZ2VyZWtsaS4iLHJlbW90ZToiVXpha3RhbiB5YXDEsWxhbmTEsXJtYSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nbGFtYSBzZXZpeWVzaSIsInJlbW92ZS1lbnRyeSI6IllhcMSxbGFuZMSxcm1hecSxIGthbGTEsXIiLCJzYXZlLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGtheWRldCIsInNlY3VyaXR5LXR5cGUiOiJHw7x2ZW5saWsgdMO8csO8Iiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiQWNjZXNzIFRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IkRlcG9sYW1hIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiRG9zeWFkYWtpIG1ha3NpbXVtIGthecSxdCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc2ltdW0gZG9zeWEgc2F5xLFzxLEiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIHNhecSxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJTYXnEsSBnZcOnZXJsaSBkZcSfaWwuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJTYXnEsSBnZXJla2xpLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJEZXBvZGFraSBtYWtzaW11bSBrYXnEsXQiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0ga2F5xLF0IHNhecSxc8SxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlNhecSxIGdlw6dlcmxpIGRlxJ9pbC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWFrc2ltdW0ga2F5xLF0IGdlcmVrbGkuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYWtzaW11bSBldGtpbmxpayBwYWtldGkgYm95dXR1Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW11bSBzYXnEsSAxJ2Rpci4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiU2F5xLEgZ2XDp2VybGkgZGXEn2lsLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrc2ltdW0gZXRraW5saWsgcGFrZXRpIGJveXV0dSBnZXJla2xpLiIsInN0b3JhZ2UtcGF0aCI6IkRlcG9sYW1hIHlvbHUiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJEZXBvbGFtYSB5b2x1IGdlcmVrbGkuIiwic3RvcmFnZS10eXBlIjoiRGVwb2xhbWEgdMO8csO8Iiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJEb3N5YSBkZXBvbGFtYSIsIm1lbW9yeS1zdG9yYWdlIjoiQmVsbGVrIGRlcG9sYW1hIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJkIGhvc3QiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiSG9zdCBnZXJla2xpLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzaW11bSBwb3J0IG51bWFyYXPEsSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltdW0gcG9ydCBudW1hcmFzxLEgMSdkaXIuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBnZcOnZXJsaSBkZcSfaWwuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgZ2VyZWtsaS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IlRpZHkgY29uZmlnIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25uZWN0b3Ige3t0eXBlTmFtZX19IGNvbmZpZ3VyYXRpb24iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgb24gZ2F0ZXdheSIsInRvZ2dsZS1mdWxsc2NyZWVuIjoiVG9nZ2xlIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWRkL3VwZGF0ZSBjb25maWd1cmF0aW9uIEpTT04ifSxRbz17ImFkZC1lbnRyeSI6Iua3u+WKoOmFjee9riIsYWR2YW5jZWQ6IumrmOe6pyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IuajgOafpeiuvuWkh+a0u+WKqCIsY29tbWFuZDoiRG9ja2Vy5ZG95LukIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlcuWRveS7pOW3suWkjeWItuWIsOWJqui0tOadvyIsY29uZmlndXJhdGlvbjoi6YWN572uIiwiY29ubmVjdG9yLWFkZCI6Iua3u+WKoOi/nuaOpeWZqCIsImNvbm5lY3Rvci1lbmFibGVkIjoi5ZCv55So6L+e5o6l5ZmoIiwiY29ubmVjdG9yLW5hbWUiOiLov57mjqXlmajlkI3np7AiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Iui/nuaOpeWZqOWQjeensOW/heWhq+OAgiIsImNvbm5lY3Rvci10eXBlIjoi6L+e5o6l5Zmo57G75Z6LIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiLov57mjqXlmajnsbvlnovlv4XloavjgIIiLGNvbm5lY3RvcnM6Iui/nuaOpeWZqOmFjee9riIsImNvbm5lY3RvcnMtY29uZmlnIjoi6L+e5o6l5Zmo6YWN572uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoi5bey5ZCv55SoIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi5ZCN56ewIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoi57G75Z6LIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiLnirbmgIEiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiLmk43kvZwiLCJjb25uZWN0b3JzLXRhYmxlLWtleSI6IumUriIsImNvbm5lY3RvcnMtdGFibGUtY2xhc3MiOiLnsbsiLCJycGMtY29tbWFuZC1zZW5kIjoi5Y+R6YCBIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi57uT5p6cIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLnvJbovpHlj4LmlbAiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLpgJrnlKjphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLliJvlu7rnvZHlhbMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuehruWumuimgeWIm+W7uuWQjeS4uiAne3tnYXRld2F5TmFtZX19JyDnmoTmlrDnvZHlhbPvvJ8iLCJjcmVhdGVkLXRpbWUiOiLliJvlu7rml7bpl7QiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoi6YWN572u5bCG6KKr5Yig6ZmkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiLlj6rmnInlr7nnvZHlhbPov5vooYzniannkIborr/pl67ml7bvvIzmiY3mnInlj6/og73lhbPpl63ov5znqIvphY3nva7jgILmiYDmnInlhYjliY3nmoTphY3nva7pg73lsIbooqvliKDpmaTjgII8YnI+PGJyPlxu6KaB5YWz6Zet6YWN572u77yM6K+35Zyo5LiL6Z2i6L6T5YWl572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0Ijoi572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoi572R5YWz5ZCN56ew5piv5b+F6ZyA55qEIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLlhbPpl60iLGRlbGV0ZToi5Yig6Zmk6YWN572uIiwiZG93bmxvYWQtdGlwIjoi5LiL6L296YWN572uIiwiZHJvcC1maWxlIjoi5bCG5paH5Lu25ouW5pS+5Yiw5q2k5aSE5oiWIixnYXRld2F5OiLnvZHlhbMiLCJnYXRld2F5LWV4aXN0cyI6IuWQjOWQjeiuvuWkh+W3suWtmOWcqOOAgiIsImdhdGV3YXktbmFtZSI6Iue9keWFs+WQjeensCIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Iue9keWFs+WQjeensOW/heWhq+OAgiIsImdhdGV3YXktc2F2ZWQiOiLlt7LmiJDlip/kv53lrZjnvZHlhbPphY3nva7jgIIiLGdycGM6IkdSUEMiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuS/neaMgei/nuaOpei2heaXtu+8iOavq+enku+8iSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoi6ZyA6KaB5L+d5oyB6L+e5o6l6LaF5pe2IiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi5L+d5oyB6L+e5o6l6LaF5pe25LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXBhdHRlcm4iOiLkv53mjIHov57mjqXotoXml7bml6DmlYgiLCJncnBjLWtlZXAtYWxpdmUiOiLkv53mjIHov57mjqXvvIjmr6vnp5LvvIkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLpnIDopoHkv53mjIHov57mjqUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoi5L+d5oyB6L+e5o6l5LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoi5L+d5oyB6L+e5o6l5peg5pWIIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi5pyA5bCPUGluZ+mXtOmalO+8iOavq+enku+8iSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6IumcgOimgeacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoi5pyA5bCPUGluZ+mXtOmalOS4jeiDveWwj+S6jjEiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVybiI6IuacgOWwj1Bpbmfpl7TpmpTml6DmlYgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6IuaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpTvvIjmr6vnp5LvvIkiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5LiN6IO95bCP5LqOMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5peg5pWIIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbAiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsOS4jeiDveWwj+S6jjEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6IuaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbDml6DmlYgiLCJpbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzIjoi5LiN5rS76LeD5qOA5p+l5pyf77yI56eS77yJIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IumcgOimgeS4jea0u+i3g+ajgOafpeacnyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoi5LiN5rS76LeD5qOA5p+l5pyf5LiN6IO95bCP5LqOMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+ajgOafpeacn+aXoOaViCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi5LiN5rS76LeD6LaF5pe277yI56eS77yJIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiLpnIDopoHkuI3mtLvot4PotoXml7YiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiLkuI3mtLvot4PotoXml7bkuI3og73lsI/kuo4xIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+i2heaXtuaXoOaViCIsImpzb24tcGFyc2UiOiLml6DmlYjnmoRKU09O44CCIiwianNvbi1yZXF1aXJlZCI6IuWtl+auteS4jeiDveS4uuepuuOAgiIsbG9nczp7bG9nczoi5pel5b+XIixkYXlzOiLlpKkiLGhvdXJzOiLlsI/ml7YiLG1pbnV0ZXM6IuWIhumSnyIsc2Vjb25kczoi56eSIiwiZGF0ZS1mb3JtYXQiOiLml6XmnJ/moLzlvI8iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IumcgOimgeaXpeacn+agvOW8jyIsImxvZy1mb3JtYXQiOiLml6Xlv5fmoLzlvI8iLCJsb2ctdHlwZSI6IuaXpeW/l+exu+WeiyIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiLpnIDopoHml6Xlv5fmoLzlvI8iLHJlbW90ZToi6L+c56iL5pel5b+X6K6w5b2VIiwicmVtb3RlLWxvZ3MiOiLov5znqIvml6Xlv5ciLGxvY2FsOiLmnKzlnLDml6Xlv5forrDlvZUiLGxldmVsOiLml6Xlv5fnuqfliKsiLCJmaWxlLXBhdGgiOiLmlofku7bot6/lvoQiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHmlofku7bot6/lvoQiLCJzYXZpbmctcGVyaW9kIjoi5pel5b+X5L+d5a2Y5pyf6ZmQIiwic2F2aW5nLXBlcmlvZC1taW4iOiLml6Xlv5fkv53lrZjmnJ/pmZDkuI3og73lsI/kuo4xIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IumcgOimgeaXpeW/l+S/neWtmOacn+mZkCIsImJhY2t1cC1jb3VudCI6IuWkh+S7veaVsOmHjyIsImJhY2t1cC1jb3VudC1taW4iOiLlpIfku73mlbDph4/kuI3og73lsI/kuo4xIiwiYmFja3VwLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB5aSH5Lu95pWw6YePIn0sIm1pbi1wYWNrLXNlbmQtZGVsYXkiOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/vvIjmr6vnp5LvvIkiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoi5pyA5bCP5YyF5Y+R6YCB5bu26L+f5piv5b+F6ZyA55qEIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/kuI3og73lsI/kuo4wIiwibm8tY29ubmVjdG9ycyI6IuaXoOi/nuaOpeWZqCIsIm5vLWRhdGEiOiLmsqHmnInphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw572R5YWz44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IuacquaJvuWIsCAne3tpdGVtfX0nIOOAgiIsInBhdGgtbG9ncyI6IuaXpeW/l+aWh+S7tueahOi3r+W+hCIsInBhdGgtbG9ncy1yZXF1aXJlZCI6Iui3r+W+hOaYr+W/hemcgOeahOOAgiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5L+d5oyB6L+e5o6l6K645Y+v77yM5peg6ZyA5ZON5bqUIixyZW1vdGU6Iui/nOeoi+mFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel5b+X6K6w5b2V57qn5YirIiwicmVtb3ZlLWVudHJ5Ijoi5Yig6Zmk6YWN572uIiwicmVtb3RlLXNoZWxsIjoi6L+c56iLU2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Iui/nOeoi+mFjee9riIsb3RoZXI6IuWFtuS7liIsInNhdmUtdGlwIjoi5L+d5a2Y6YWN572uIiwic2VjdXJpdHktdHlwZSI6IuWuieWFqOexu+WeiyIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Iuiuv+mXruS7pOeJjCIsInVzZXJuYW1lLXBhc3N3b3JkIjoi55So5oi35ZCN5ZKM5a+G56CBIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDorr/pl67ku6TniYwiLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyDnp4HpkqUifSwic2VydmVyLXBvcnQiOiLmnI3liqHlmajnq6/lj6MiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoi57uf6K6h5L+h5oGvIixzdGF0aXN0aWNzOiLnu5/orqHkv6Hmga8iLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLml6Dlj6/nlKjnu5/orqHkv6Hmga8iLGNvbW1hbmRzOiLlkb3ku6QiLCJzZW5kLXBlcmlvZCI6Iue7n+iuoeS/oeaBr+WPkemAgeWRqOacn++8iOenku+8iSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5piv5b+F6ZyA55qEIiwic2VuZC1wZXJpb2QtbWluIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5LiN6IO95bCP5LqONjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5peg5pWIIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u77yI56eS77yJIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u5piv5b+F6ZyA55qEIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IuajgOafpei/nuaOpeWZqOmFjee9ruS4jeiDveWwj+S6jjEiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVybiI6IuajgOafpei/nuaOpeWZqOmFjee9ruaXoOaViCIsYWRkOiLmt7vliqDlkb3ku6QiLHRpbWVvdXQ6Iui2heaXtuaXtumXtCIsInRpbWVvdXQtbXMiOiLotoXml7bml7bpl7TvvIjmr6vnp5LvvIkiLCJ0aW1lb3V0LXJlcXVpcmVkIjoi6LaF5pe25pe26Ze05piv5b+F6ZyA55qEIiwidGltZW91dC1taW4iOiLotoXml7bml7bpl7TkuI3og73lsI/kuo4xIiwidGltZW91dC1wYXR0ZXJuIjoi6LaF5pe25pe26Ze05peg5pWIIiwiYXR0cmlidXRlLW5hbWUiOiLlsZ7mgKflkI3np7AiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IuWxnuaAp+WQjeensOaYr+W/hemcgOeahCIsY29tbWFuZDoi5ZG95LukIiwiY29tbWFuZC1yZXF1aXJlZCI6IuWRveS7pOaYr+W/hemcgOeahCIsImNvbW1hbmQtcGF0dGVybiI6IuWRveS7pOaXoOaViCIscmVtb3ZlOiLliKDpmaTlkb3ku6QifSxzdG9yYWdlOiLlrZjlgqgiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiLmlofku7bkuK3nmoTmnIDlpKforrDlvZXmlbAiLCJzdG9yYWdlLW1heC1maWxlcyI6IuacgOWkp+aWh+S7tuaVsCIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLmlbDlrZfmmK/lv4XpnIDnmoTjgIIiLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoi5a2Y5YKo5Lit55qE5pyA5aSn6K6w5b2V5pWwIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6IuacgOWkp+iusOW9lemhueW/heWhq+OAgiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6IuacgOWwj+iusOW9leaVsOS4ujHjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiLmlbDlrZfkuI3lkIjms5XjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB6K+75Y+W6K6w5b2V5pWw44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTmnIDlpKfor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6IuaVsOWtl+S4jeWQiOazleOAgiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi5pyA5aSn6K+75Y+W6K6w5b2V5pWw5b+F6ZyA44CCIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoi5pWw5o2u5paH5Lu25aS56Lev5b6EIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoi6ZyA6KaB5pWw5o2u5paH5Lu25aS56Lev5b6E44CCIiwic3RvcmFnZS1wYWNrLXNpemUiOiLmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi5pyA5aSn5LqL5Lu25YyF5aSn5bCP5b+F5aGr44CCIiwic3RvcmFnZS1wYXRoIjoi5a2Y5YKo6Lev5b6EIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoi5a2Y5YKo6Lev5b6E5b+F5aGr44CCIiwic3RvcmFnZS10eXBlIjoi5a2Y5YKo57G75Z6LIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiLmlofku7blrZjlgqgiLCJtZW1vcnktc3RvcmFnZSI6IuWGheWtmOWtmOWCqCIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IuW4uOinhCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZOS4u+acuiIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiLkuLvmnLrlv4XloavjgIIiLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmTnq6/lj6MiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IuacgOWkp+err+WPo+WPt+S4ujY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/nq6/lj6Plj7fkuLox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi56uv5Y+j5peg5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Iuerr+WPo+W/heWhq+OAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6L+e5o6l5ZmoIHt7dHlwZU5hbWV9fSDphY3nva4iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6Iue9keWFs+S4ikNB6K+B5Lmm55qE6Lev5b6EIiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoi572R5YWz5LiK5a6i5oi356uv6K+B5Lmm55qE6Lev5b6EIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi5raI5oGvVFRM5qOA5p+l5bCP5pe25pWwIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi6ZyA6KaB5o+Q5L6b5raI5oGvVFRM5qOA5p+l5bCP5pe25pWw44CCIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoi5raI5oGvVFRM5aSp5pWwIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiLpnIDopoHmj5Dkvpvmtojmga9UVEzlpKnmlbDjgIIiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiLpnIDopoHmj5DkvptRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IlFvU+WAvOeahOiMg+WbtOaYr+S7jjDliLAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLnvZHlhbPkuIrnp4HpkqXnmoTot6/lvoQiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IuWIh+aNouWFqOWxjyIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoi6YWN572uSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoi5re75YqgL+abtOaWsOmFjee9rkpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvphY3nva7lkoznrqHnkIYiLCJyZW1vdGUtc2hlbGwiOiLpgJrov4fov5znqItTaGVsbOWwj+mDqOS7tuWQr+eUqOWvuee9keWFs+aTjeS9nOezu+e7n+eahOi/nOeoi+aOp+WItiIsaG9zdDoiVGhpbmdzQm9hcmQg5Li75py65ZCN5oiWSVDlnLDlnYAiLHBvcnQ6IlRoaW5nc0JvYXJkIE1RVFTmnI3liqHnq6/lj6MiLHRva2VuOiJUaGluZ3NCb2FyZCDnvZHlhbPorr/pl67ku6TniYwiLCJjbGllbnQtaWQiOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU5a6i5oi356uvSUQiLHVzZXJuYW1lOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU55So5oi35ZCNIixwYXNzd29yZDoiVGhpbmdzQm9hcmQg572R5YWzTVFUVOWvhueggSIsImNhLWNlcnQiOiJDQeivgeS5puaWh+S7tueahOi3r+W+hCIsImRhdGUtZm9ybSI6IuaXpeW/l+a2iOaBr+S4reeahOaXpeacn+agvOW8jyIsImRhdGEtZm9sZGVyIjoi5YyF5ZCr5pWw5o2u55qE5paH5Lu25aS555qE6Lev5b6E77yI55u45a+55oiW57ud5a+56Lev5b6E77yJIiwibG9nLWZvcm1hdCI6IuaXpeW/l+a2iOaBr+agvOW8jyIsInJlbW90ZS1sb2ciOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvml6Xlv5forrDlvZXlkozml6Xlv5for7vlj5YiLCJiYWNrdXAtY291bnQiOiLlpoLmnpzlpIfku73orqHmlbDlpKfkuo4w77yM5YiZ5Zyo5omn6KGM6L2u5o2i5pe277yM5pyA5aSa5L+d55WZ5aSH5Lu96K6h5pWw5Liq5paH5Lu2LeacgOaXp+eahOaWh+S7tuWwhuiiq+WIoOmZpCIsc3RvcmFnZToi5o+Q5L6b5bCG5pWw5o2u5Y+R6YCB5Yiw5bmz5Y+w5LmL5YmN5L+d5a2Y5Lyg5YWl5pWw5o2u55qE6YWN572uIiwibWF4LWZpbGUtY291bnQiOiLlsIbliJvlu7rnmoTmlofku7bnmoTmnIDlpKfmlbDph48iLCJtYXgtcmVhZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiLkuIDkuKrmlofku7bkuK3lrZjlgqjnmoTmnIDlpKforrDlvZXmlbAiLCJyZWFkLXJlY29yZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiLlnKjlsIbmlbDmja7lj5HpgIHliLBUaGluZ3NCb2FyZOS5i+WJje+8jOWtmOWCqOS4reeahOacgOWkp+aVsOaNruiuoeaVsCIsInR0bC1jaGVjay1ob3VyIjoi572R5YWz5aSa5LmF5qOA5p+l5LiA5qyh5pWw5o2u5piv5ZCm6L+H5pe2IiwidHRsLW1lc3NhZ2VzLWRheSI6IuWtmOWCqOWwhuS/neWtmOaVsOaNrueahOacgOWkp+WkqeaVsCIsY29tbWFuZHM6IueUqOS6juaUtumbhumZhOWKoOe7n+iuoeS/oeaBr+eahOWRveS7pCIsYXR0cmlidXRlOiLnu5/orqHpgaXmtYvplK4iLHRpbWVvdXQ6IuWRveS7pOaJp+ihjOeahOi2heaXtuaXtumXtCIsY29tbWFuZDoi5ZG95Luk5omn6KGM55qE57uT5p6c77yM5bCG55So5L2c6YGl5rWL55qE5YC8IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5Ijoi5ZCv55So55uR6KeG5q+P5Liq6L+e5o6l6K6+5aSH55qE5rS75YqoIiwiaW5hY3Rpdml0eS10aW1lb3V0Ijoi5Zyo5q2k5pe26Ze05ZCO77yM572R5YWz5bCG5pat5byA6K6+5aSH55qE6L+e5o6lIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLorr7lpIfmtLvliqjmo4Dmn6XnmoTlkajmnJ8iLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLlj5HpgIHmtojmga/ljIXkuYvpl7TnmoTlu7bov5/vvIjlh4/lsI/mraTorr7nva7kvJrlr7zoh7Tlop7liqBDUFXkvb/nlKjnjofvvIkiLHFvczoiTVFUVOa2iOaBr+S8oOmAkueahOacjeWKoei0qOmHj++8iDAt6Iez5aSa5LiA5qyh77yMMS3oh7PlsJHkuIDmrKHvvIkiLCJzZXJ2ZXItcG9ydCI6IkdSUEPmnI3liqHlmajkvqblkKzkvKDlhaXov57mjqXnmoTnvZHnu5znq6/lj6MiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuWcqOiAg+iZkei/nuaOpeatu+S6oeS5i+WJje+8jOacjeWKoeWZqOetieW+hWtlZXBhbGl2ZSBwaW5n5ZON5bqU55qE5pyA6ZW/5pe26Ze0IiwiZ3JwYy1rZWVwLWFsaXZlIjoi5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25Lik5Liq6L+e57uta2VlcGFsaXZlIHBpbmfmtojmga/kuYvpl7TnmoTmjIHnu63ml7bpl7QiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6IuWcqOayoeacieaOpeaUtuWIsOS7u+S9leaVsOaNruS5i+WJje+8jOacjeWKoeWZqOWPr+S7peWPkemAgeeahGtlZXBhbGl2ZSBwaW5n5raI5oGv55qE5pyA5aSn5pWw6YeP77yM54S25ZCO5bCG6L+e5o6l6KeG5Li65q275LqhIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiLlnKjmsqHmnInlj5HpgIHmiJbmjqXmlLbmlbDmja7ml7bvvIzmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5YWB6K645pyN5Yqh5Zmo5Zyo5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25L+d5oyBR1JQQ+i/nuaOpea0u+WKqCJ9LCJkb2NrZXItbGFiZWwiOiLkvb/nlKjku6XkuIvmjIfku6TlnKggRG9ja2VyIGNvbXBvc2Ug5Lit6L+Q6KGMIElvVCDnvZHlhbPvvIzlubbkuLrpgInlrprnmoTorr7lpIfmj5Dkvpvlh63mja4iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi5L2/55So5Lul5LiL6K+05piO5LiL6L2944CB5a6J6KOF5ZKM6K6+572uIERvY2tlciBDb21wb3NlIiwiZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlIjoi5LiL6L296YWN572u5paH5Lu2IiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLkuIvovb3mgqjnmoTnvZHlhbPnmoQgZG9ja2VyLWNvbXBvc2UueW1sIOaWh+S7tiIsImxhdW5jaC1nYXRld2F5Ijoi5ZCv5Yqo572R5YWzIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoi5Zyo5YyF5ZCrIGRvY2tlci1jb21wb3NlLnltbCDmlofku7bnmoTmlofku7blpLnkuK3vvIzkvb/nlKjku6XkuIvlkb3ku6TlnKjnu4jnq6/kuK3lkK/liqjnvZHlhbMifSxKbz17ImFkZC1lbnRyeSI6IuWinuWKoOmFjee9riIsImNvbm5lY3Rvci1hZGQiOiLlop7liqDmlrDpgKPmjqXlmagiLCJjb25uZWN0b3ItZW5hYmxlZCI6IuWVn+eUqOmAo+aOpeWZqCIsImNvbm5lY3Rvci1uYW1lIjoi6YCj5o6l5Zmo5ZCN56ixIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiLpnIDopoHpgKPmjqXlmajlkI3nqLHjgIIiLCJjb25uZWN0b3ItdHlwZSI6IumAo+aOpeWZqOmhnuWeiyIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoi6ZyA6KaB6YCj5o6l5Zmo6aGe5Z6L44CCIixjb25uZWN0b3JzOiLpgKPmjqXlmajphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLlu7rnq4vmlrDplpjpgZMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuaCqOeiuuWumuimgeW7uueri+S4gOWAi+WQjeeoseeCuu+8mid7e2dhdGV3YXlOYW1lfX0n55qE5paw6ZaY6YGT5ZeO77yfIixkZWxldGU6IuWIqumZpOmFjee9riIsImRvd25sb2FkLXRpcCI6IuS4i+i8iemFjee9ruaWh+S7tiIsZ2F0ZXdheToi6ZaY6YGTIiwiZ2F0ZXdheS1leGlzdHMiOiLlkIzlkI3oqK3lgpnlt7LlrZjlnKjjgIIiLCJnYXRld2F5LW5hbWUiOiLplpjpgZPlkI3nqLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiLpnIDopoHplpjpgZPlkI3nqLHjgIIiLCJnYXRld2F5LXNhdmVkIjoi6ZaY6YGT6YWN572u5bey5oiQ5Yqf5L+d5a2Y44CCIiwianNvbi1wYXJzZSI6IueEoeaViOeahEpTT04iLCJqc29uLXJlcXVpcmVkIjoi5qyE5L2N5LiN6IO954K656m644CCIiwibm8tY29ubmVjdG9ycyI6IueEoemAo+aOpeWZqCIsIm5vLWRhdGEiOiLnhKHphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw6ZaY6YGT44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiDmnKrmib7liLAne3tpdGVtfX0n44CCIiwicGF0aC1sb2dzIjoi5pel6KqM5paH5Lu255qE6Lev5b6RIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi6ZyA6KaB6Lev5b6R44CCIixyZW1vdGU6Iuenu+mZpOmFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel6KqM6KiY6YyE57Sa5YilIiwicmVtb3ZlLWVudHJ5Ijoi56e76Zmk6YWN572uIiwic2F2ZS10aXAiOiLkv53lrZjphY3nva7mlofku7YiLCJzZWN1cml0eS10eXBlIjoi5a6J5YWo6aGe5Z6LIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoi6Kiq5ZWPVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToi6LKv5a2YIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi5paH5Lu25Lit55qE5pyA5aSn57SA6YyEIiwic3RvcmFnZS1tYXgtZmlsZXMiOiLmnIDlpKfmlofku7bmlbgiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiLmnIDlsI/mlbjph4/ngrox44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoi6ZyA6KaB6Jmf56K844CCIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6IuWtmOWEsuS4reeahOacgOWkp+e0gOmMhCIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoi5pyA5bCP57SA6YyE5pW454K6MeOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfntIDpjITmlbgiLCJzdG9yYWdlLXBhY2stc2l6ZSI6IuacgOWkp+S6i+S7tuWMheWkp+WwjyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6IuacgOWwj+aVuOmHj+eCujHjgIIiLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoi6Jmf56K854Sh5pWI77yOIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhdGgiOiLlrZjlhLLot6/lvpEiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHlrZjlhLLot6/lvpHjgIIiLCJzdG9yYWdlLXR5cGUiOiLlrZjlhLLpoZ7lnosiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IuaWh+S7tuWtmOWEsiIsIm1lbW9yeS1zdG9yYWdlIjoi6KiY5oa26auU5a2Y5YSyIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJk5Li75qmfIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IumcgOimgeS4u+apn+OAgiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZOmAo+aOpeWfoCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4Ijoi5pyA5aSn5Z+g6Jmf54K6IDY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/ln6DomZ/ngrox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi6YCj5o6l5Z+g54Sh5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IumcgOimgemAo+aOpeWfoOOAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6YCj5o6l5Zmoe3t0eXBlTmFtZX196YWN572uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiLplpjpgZPkuIpDQeitieabuOeahOi3r+W+kSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IumWmOmBk+S4iueUqOaItuerr+aGkeaTmueahOi3r+W+kSIsInRscy1wYXRoLXByaXZhdGUta2V5Ijoi6ZaY6YGT5LiK55qE56eB6ZGw6Lev5b6RIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLliIfmj5vlhajonqLluZUiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IumFjee9rkpTT04qIiwidXBkYXRlLWNvbmZpZyI6IuWinuWKoC/mm7TmlrDphY3nva5KU09OIn07Y29uc3QgWG89W2NhLHBhLEZhLERhLEFhLE5hLFBhLGVvLEVvLGlvLGFvLG9vLHFvLHRvLEdvLG5vXTtjbGFzcyBab3tjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lLGZ1bmN0aW9uKGUpe2Uuc2V0VHJhbnNsYXRpb24oImVuX1VTIixPbywhMCksZS5zZXRUcmFuc2xhdGlvbigiYXJfQUUiLFJvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJjYV9FUyIsVm8sITApLGUuc2V0VHJhbnNsYXRpb24oImNzX0NaIixCbywhMCksZS5zZXRUcmFuc2xhdGlvbigiZGFfREsiLFVvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJlc19FUyIsX28sITApLGUuc2V0VHJhbnNsYXRpb24oImtvX0tSIixIbywhMCksZS5zZXRUcmFuc2xhdGlvbigibHRfTFQiLHpvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJubF9CRSIsV28sITApLGUuc2V0VHJhbnNsYXRpb24oInBsX1BMIixqbywhMCksZS5zZXRUcmFuc2xhdGlvbigicHRfQlIiLEtvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJzbF9TSSIsJG8sITApLGUuc2V0VHJhbnNsYXRpb24oInRyX1RSIixZbywhMCksZS5zZXRUcmFuc2xhdGlvbigiemhfQ04iLFFvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJ6aF9UVyIsSm8sITApfShlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5OZ01vZHVsZX0pfXN0YXRpY3t0aGlzLsm1bW9kPXQuybXJtW5nRGVjbGFyZU5nTW9kdWxlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlY2xhcmF0aW9uczpbY2EscGEsRmEsRGEsQWEsTmEsUGEsZW8sRW8saW8sYW8sb28scW8sdG8sR28sbm9dLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOltjYSxwYSxGYSxEYSxBYSxOYSxQYSxlbyxFbyxpbyxhbyxvbyxxbyx0byxHbyxub119KX1zdGF0aWN7dGhpcy7JtWluaj10Lsm1ybVuZ0RlY2xhcmVJbmplY3Rvcih7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpabyxwcm92aWRlcnM6W3ZhXSxpbXBvcnRzOltILEQsUSxNYSxFYSxxYSxJYSxMbyxrbyxGbyxwbyxBbyxObyxnbyxEbyxQb119KX19ZSgiR2F0ZXdheUV4dGVuc2lvbk1vZHVsZSIsWm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Wm8sZGVjb3JhdG9yczpbe3R5cGU6dSxhcmdzOlt7ZGVjbGFyYXRpb25zOlhvLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOlhvLHByb3ZpZGVyczpbdmFdfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSl9fX0pKTsvLyMgc291cmNlTWFwcGluZ1VSTD1nYXRld2F5LW1hbmFnZW1lbnQtZXh0ZW5zaW9uLmpzLm1hcAo=", - "public": false - }, - { - "link": "/api/images/system/gateway_general_configuration_system_widget_image.png", - "title": "\"Gateway general configuration\" system widget image", - "type": "IMAGE", - "subType": "IMAGE", - "fileName": "gateway_general_configuration_system_widget_image.png", - "publicResourceKey": "NBFT3zmjYOCH7cJ7VPNxQBu3yGJx97A7", - "mediaType": "image/png", - "data": "iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAYAAABJ/yOpAAAdjUlEQVR4Ae2dCZQV1ZnHvwZatkYWWbpBWQQCQmRRjDo2GIMbqOhEEUMyiiYTmSQiyUEP6FGiOWJG40QkyUjGiJ4z4rB4jooKQZQgrQhhc0EB2RFoFuludoXuN/W78D2rH+/Vq/e66YX3/c6pfq+qbt2l3ve/33dvVVdlicfGjRs7ZmVlTfG+9vGWZmIYmc2rkUjk1506ddqUdUIcK5o2bdrszDPPlDp16ohhZCplZWVy4MABKSoqKvZE0reet+3p5s2bO3EYRqaDg0ALnlCalZSUTKnjeY8bc3JyxDCMbznhMPq4eMrCKsMozwlNNDNlGEYAJhDDCMAEYhgBmEAMIwATiGEEYAIxjABMIIYRgAnEMAIwgRhGACYQwwignqTJ/kNH5PV/rJS1mwolp3FD6dezg1zRr7vUBAb/aqJc1KODPPKLm6Q6Wbp0qbRt29YtpzsLFy6UHTt2SMOGni306yd5eXlyOpC2B7nt/sky9a3FnjgayP6Dh+U3T06Tl2Z/KMa3IJDt27fL6c706dNl/fr10qNHDyeMF154wbUdioqK5PHHH5faSloe5PUFK2X77mJ580/3SttW3/5/1eQZC+THgy6Jri/9bJMsXbXJ8y4dpV+PjtFt0KRRA/e9betm5TyPeia44qLu0fzn/3O1dOuY6z51O8ev8TxYE0+k5O+vS21gw4YNsm3bNmnRooX07NnzpH0YXefOneXw4cNy7rnnut452XFVDXVDDOPGjZPmzZu7bQ0aNJBVq1a5un/66adOJKShrtoG9tN5kIa2KaTT4/r37++2hTlPeC3y858nyiWfipynuqNHj/5ts2apGdYfXpwjea2ay48HfysGRDBkQB9nrDD+v19zgjkju55MevkdaZLTQHp1PVuenfEPmTxzgfzjn2tkT/EBeeG1951IMH5E98Nf/9mJZNP2Pc5DIQby/OXjL7n1ZZ9tlvO9fD5Z96X85g/T5KxmOTJrwUduGfL9PlLfK+8lL107TywcW50EhVhz586VgoIC9+OtWbPGLd/97nejx73++uvuOH78+fPnS5cuXZwB6r7WrVu7YxYvXuyMo7rIzs6OegsMG6gbbTly5Iir45YtW1xb2rdv79I//fTTTli0Z/bs2ZKVleX2Afsw9NLSUmfUep44HlH528u+t99+2+1DCP7zRB5Tp06NnsP3338/5fNUUlKS/hhEwajVK8CQ1n3cOl5APYwTRYx3YR8Qqi3zvMyQy/t46RY4sTw3fkR0H8Z+3x3XuPUrLuoWHVfgxR75jxudKKjDdd64Y/6S1W69pkPPNm/ePBk7dqwTCDz88MOuN6QH5EcfNmxYtGf94x//GD0WI6Fnzc/Pd0aG8VQ3d999twuzGIcgDOpHqIWh8p06XnXVVS6tion2ASKYOHGiXHjhhdGef8iQIdFOBdFh2JwnPsePHx8td9myZXLHHXdE0/pDuWnTprmyVRScQz2/qVBhgew/eDwk2rG7xBkqhk5YBeP/8trxNJ5HIB37gfBKadK4fvQ7wsryPv/9kRfdOunzdhdF9+f5QihCKsSDMGobe/fudT+8igMwLA0REJB/kKuGAxjaiy++6IRCzF+d3kOhHSNHjnTtwggZg6iIY6FtfiPlWEIytms7/e1lPx0G54Z0/nxYEk2AMGGAgFg0PfWrEoF8p0OuzHrvI2f4hEb0+Bo6gQrg7lsuL3dcmDFCtw5tZLgvdNOQLZbxf3lVIt7n/z1xtxNfbRIKPT9L7LYwYBDE+4QNhBXPPvuseGFyOaOqSjBcRIEYMGY1+FmzZsUVSDyC2o7Y6ARuvfVWt37//fe7TxULx8ZrO/vpTHRc5D8mFdKaxSKMwSgJm+jlWdZu2hnd361Trvtc9vlmNzbBLazdsjN5vpf3lqXeMW5M4uWxZnOhOzYe2zyP1c4bByFGBu61CbyH9rZA76YeATTM0n0sioYK5HHNNdeU21cdYIDU1V8PROP3jn5oG726picsw8ATeQLStWvXzn3X8wUcQ16cN03nF5qOS6gfCx1KOqTlQfAa/zVmmDdY/7sX5hyf2sVQx5wYKxD+jLn9Gpk6e7HzLOy7e+jlSfNl0K/jCS0n0UB7pJcfIRxjkQu9ax6AR6tpMKBWYwd6VcIPQhJCJQwJsdxwww1Ro6K3nDx5svvxY3tHYnc9jpkdesnq8h5A2UOHDnWejO86+NYen++Ei4yxaDPCvuyyy5zQaQPpb7/99oT50z7yVkPXcIzvjFU4F5zf2HNA+exj0A9MRKUVjm7atClSEbbtLHJL0P59Bw9HUoH0QXnG5l+b8cRx0jbPaMrtmzBhQsTrAU867tChQ5GaBPVJVKd47Yy3LVG+Yc7TQw89FPE6jdB1SgbaqPAgnXCoIvvjgcfxD+QrO/+ahD9GVgg7dDBLWKHhRLLjqpsgTxavvmHbQL7x8maal6lkDbXiTalX1LtmoZIOHTqIUbMgfmYmBiPyX2AzyuM/T5U9o7d582YTiGEkAoHY3byGEYAJxDACMIEYRgAmEMMIwARiGAGYQAwjABOIYQRgAjGMAEwghhGACcQwAjCBGEYAJhDDCMDd7t532CNiiLz6xAgxDD8V/n+Q0wm7q9nww928TiArpo0XwzBOxsYghhGACcQwAjCBGEYAJhDDCMAEYhgBmEAMIwATiGEEYAIxjABMIIYRgAnEMAIwgRhGACYQwwjABGIYAVTL7e67ig/Jbm9p3CBbOuY2FcOoqVSpQKbP/1zmr9jsBOLnir4dZNgV50mrZo3EMGoSVfL6g91FB+U/X/5QNhaWBKZDJLd6i1F5FBYWSk5OjluM1Ij+w1Q6LPt4j6z4ZI9s2Lw/MF1ZJCKbvimUo5Fjkoxpnodp5IVd11/aRcIwZcqUcuuDBg2S3NxcqW2sXLlSZs+e7b736dPHtaMyuPfee+WLL75w3++5555KyzddeI859ahNYk1rkP7Owm3yyhsbk4oDikr3hRIH4RXiIAzbHROCJQKBcLIRBZ+jRo2KGlptgTZMmDDBCYMXfM6YMeMk4acDr3Hbv3+/vPXWW24J+0rmyoQXjuLBlMaNG7s61Sbqjh49+re8ATQseI43520NlbY0Uibbj33l3mceBOJ49K4BcuxYmazatMcN3nt2aiXJwJDGjBkjffv2da8pg8WLF8vAgQPd9wMHDsi7774rK1askLPOOivac9Fj6yfp2Qfx0mo+r732mmzZskWaNGni9mneXbp86+0KCgrcm1vPOOOMhGX7wXgefPBB+dvf/ubaQKjLq6CfeuopufHGG10+Wk+Ef/DgQWnfvn258kjDp78c8uXtukePHpWsrCxXx/nz57uOxJ8nIiKNGjHHsp266xt3tQz/viVLljhD5+218dqp26gzZdIu8uC9i127do3WgXJJ4z+vsG7dOvfmX7azn32JXit9KikpKUndgxBWheXryDcuxApCxcHg/Y1F69w2vqcLP45+3nXXXbJ8+XL3He+i4QYn/YEHHnD72EY61teuXevWSav58GOxH4PACNincf0zzzzjtgHbWFcDjS3b35MqlIXnwNAUDOixxx6LGgudAPnC9OnTnbdR2E7e/noDddWF9/cBx2mbtP2s4134ru1gH8JR8Gj+fZTx3nvvuWO1nbwXHfiu51jLJY16DX8dKEPrq+fVv486UTdgn9ahqkl5DBImrFKORI4G7veLg9BK2RUyxAJOJj0MPwg/5rhx46LbMT5OtDJnzhxngMC7yu+88073nR+Wdd73Dbxjmx+aXn3SpEkuncbvGCzlEEuTnh6WdFoe8GP6y+aH12P8qEHEQn6AcXEcHgYRUR51I39NQ57UHQYPHuyOoY1so8fXNvrRumibaH9YCNW0XZxzf/l0JpwPymThXFHneONCzqv/WMRDvbS+eD0thzaRt7a5KknZgzSoX1fSYdj3u8ut3qIkEkeqcPL4oejd/Ccc42BhoMrCfu3VYvG791j8xgj8cNpLYmA65uFTBYaR8INq2YgnkRiCoBzKUw9DHWmf3xv56x128BtrbLQ/LH5vx3fqou1MpZfnOH8d+K7nNV6d0jl/lUHKHiSvTSPZuCWcF2mQlR39vmT1DicImL9yS6A4OuaFHxNpD8VCD+Sfqbn22msrPHMTZHSUiQEjDn5A9U4cQ0/rLztePhyPscaCsaknjDUMDe8qQmXNItFulokTJzqDZpYqXapLAMlI2YNcdlGb0GnrZ50hdbxBInAN5OHn35Mb/qWrPPWLgYGeI52r6xgjPzwiAUIcenJ+OHo6Brjp/Ag6s6QQpvkNnx5dQwklXtnxxiD0mtTZP2tFWXg6xMN+jtOele/00v6JgXTgeG0T58TvWXUMFW9fLOynfbST76l4EM6RtltDUPX+NYmUPUiPbs3lB/lt5d2C7UnT1s2qI83rNpGvju1z6yoSZqh0QB6PYWleLCR+ZVYIA2bhxyW+5gdkoEhPl06e9Iw//elPXX6xnoHvxNP+aVS26eA/Wdlsp84ICkNp06ZNNC3Giidhv+YzduzYcmFOOpAnXooQNHba9ZZbbnH7mKKNeBMsQdeVtPPwp/V3QoiAc0B71LvGqwPntTK8/akg7SvpTPd+sGSn7NgVPKAujZR6Fwp3yjHvMwxDL+8mtw3sKZUFBqA9XUXzgVTi9VTKTpY/RlTRNijUCfFpnhgqwvD34KmUF5Q2WT7pnNeqgivpVXKrybZdxfLIi+/LV/u/Dkz3r/ldZPiV35U6dewm41OJTuUOGDDAhUUsTCEb5akygeB+9+3bJ3OXrJM5y7dL8cFvp38bZNeRti0ayk2XdZZLzu8kdeumN0tmpAaiILzBkxDe1MQevLqpMoEAIuGqLVdI9xTtky+/OiQNPXG0aZEjrc9qJk2bNjVxGDWKCt2smCrc8sAtBgxCW7ZsKd/pXOa2E04hjKwTs12GUZOo8n+YQgj16tlrSYzagY2GDSMAE4hhBGACMYwATCCGEYAJxDACMIEYRgAmEMMIwARiGAGcFgKJxPzfeySS7DERFcu/NlKZbQiTV7rlpXJcUNrKam9Kl7QplCvhWng8w4y9ZcS/LXZ/7D6It+4vN1H+8eoStmz/tkRllpWVxb0dJl4+yfJT4tVbt8cer5/x6pGoDonOaSKCznNsOUGdkr9dydqYqPxEZfI9kQ0GneN4duBPr3eQ+/PlXKckEM2MA1nUCJMZX5ChJDrh8U5sIoOOd1yi4xPlGXQSY9MlyiuojKA8Y0lURrxzmoh4RpCszkGdT7LzGps+TD1iPzFSfweQTnmxbfKn97crUdv937m5NrRANNPS0lI5duyYawjfVSD+dP4KJWpAbOVihebvLbOyEvfgWmbs/5DEnmj2B53IeEII43H89Y2XfzIxxKuH1jXWiPz5+fMM02PH1jlMJ5CojET1D/Ky4BdAovSxbSGN/7dLZDPx2hPrFfztT9Qm/7ZvvvkmNQ+CIFAVla5fv77dhWuc1hQXF4cTiIZV6jkaNWpkwjAygtCzWIgEgfA/HSYOI1MILRAdb2RnZ4thZApJBeIfwBJeGUYmkVQg8WY2DCNTSOlKuonEyDTsXizDCCCUQMxzGJmKeRDDCCCUQOy6h5GppDTNaxiZRuhpXr3BLB14Li/vgrjvvvvkd7/7nXz22WdSVVD2yJEjq7RM4/QhpVtN0vUk119/vTz//PNy9tlnO4Nl/e2335aqgreVfvnll+47QuWp5oYRhqQ3K8a7nTgVPvzwQ2ecb7zxhnvFMbCOoV511VVuHdG88sorcuaZZ8rFF1/shKTwmmby4FhNzzrvldB1xMbTyS+55BK3D6gr+ZKGd19wPF5E60N5lEX+/jLZft5550XramQ4PN09iLKyskhpaWnk8OHDkaKiokiqeL13pFOnTpExY8ZEtm7detJ+z2AjvXv3jtx2222R/Pz8SP/+/d0x8Oijj0Z69eoV+fnPf+72sQ7kRTqFY9mm+yhPjwPWZ86cGZkxY4bLh3WOoRzSab6LFi1y+1atWhUxDLQRegySLniFZ5991vXchDbDhw93vbTCmIRe/uWXX5Y333zThUPsVy/z17/+VSZPnixPPvmk8xR4hWS0a9fOvSCG4/zgSViA8qgb6xruUS7HmvcwlCp5zPrVV1/tFkSCETJYx9B5/x9hD98RDhA6sU1DHgwWCJ94gX0YzjnnHGf8YUCcCJFQi4V6GoYSagxSEeidEcZDDz3kjJwF7+CFPE4gjB0YA9x8880u/ahRo5w4Pv+8/BtwERGLf3xSGVAf6sAkAvXSF9kbBoQKsSJpDtAB46OHZsHA8Q7btm1zb5QCwhl6bgxfvwOi0WMBA77uuutcHngHPjFozS+V+oDOagGiQMgMzitbgEbtJtSFQv9nqtBD4xUwcF4LzBQvYdMTTzzh9jO2YJ3xCft1FgoR4HXmzp0r5557rhMK62xXz8MxP/rRj1J6vx710fJUJBpWmfcwYgn1jkJ9WMPXX38d7fnTAYPEwOOND4JCKI5LZXsyYsvCCyFcxjjmQQwl1DsKIzGPTKkIQcaXSDhBx6VrzP6yeMk9EweMgUwcRiwZ/7JARDFixIjo9K9h+EkqkNP9Tl6dPTOMeIQapNvt7kamEvo/Ck0kRiaS0lNNTCRGppHS7e6GkWmE/pfbZE/3NozTkdAexMIrIxOxEMswAkjpsT/mRYxMI/SV9FM1BuGVCvpSHn2CvGHUBPjfpNAv0Klsw0UY3PzIJxR+tU/Wbd0tBw59Lac7OY3qS27LM6XL2a3EqNmEfmhDZUF+CIMFMcx8Z4W8v3KDNG7cQLq2b+MZTlNp0qiBnK7sP3REdhYXy5wPV0vh7mLpck4rGXHDJZJ7Vrj/gDSqltAepDIgjDp06JALpRDGzHkrZOg135OJ435yWosiiLcKPpbRT70i1156nhOKUbMI9f8gGDY9Pm/9TPf/QRDZgQMHXF5/mrZAsurWkztv6p+xwojl+Vffky827ZCxI652IZhR/WzdujW16yAV8SSHDx924nhh1ofSpEljGTX8KhOHj7tuGiBdO+bJ71+YK0bNoUqe7o7nYaZqzgefycGvS50xGCejIiH8NGoGof8nHdIdrBOeFe7ZJ3MWfe7CKiMxiOT9jza6WT2j+knp4dXphFj6bvWVa7+UQf17W1gVAjoRJjCM6if0hcJ0xx+EVjDznZUyady/Baad8NwbMvTqi9x0b3VCPWLp2729DMrvddL2HXtK5NYxf5bpf/il5LVM/4EW5cvqIM9MfdtNgycasPPACgaRsVx66aWyYcMGycnJkdatW5fbd/DgQfn444/dZ5s2baRbt27uvffpoHlRXnWzc+dO1+ZYLrzwwrjtY7KIp+dceeWVkoxT/go2vAfhVY53nSNodmbF6i0y25vynDS16p76ngjEwLJy9WbPSA+777mVZPzh69DBXThNBMbfq1cv90gkjJXvLIDBYASxzJs3z6XHMPhNP/nkk7h5k1888fmhDF2qm+bNm8c9F+mK308oD1KRGSyueRTu3ed+8CAQB6HFlFcXlus5Z8xd4i1L3TrehV680Ou16eX57OMZLzNi7PenJa/+F3xH1m3Z6dKSZ763Pmr4leWOx/Af+Nn15QSgnmJ2wSfSpX1udD1eXn4of+HyL2TCqFu8NEdOquMX3vG0D9geLw8FL7ruy93Sp1v8J63w47Po79K4cWMJgokSFowJunfvntC4ERceike4JmL16tVy/vnnO5HhjfzbERc2Qw9OeRjt0qVLXfl4NvU6pKXnpx3kRT6xadUL+PPF8/nrFnQu/GVwDMf6wQsCgvKXnZubK82aNTv1t7tTaedBAsYeGAsCGZR/vuutp3uGptufmTpPJo4dLo+NujlqnHz26X6OF9b8wktT7NLjgabP/adLe49ndBomTXhullzrGfjzj97lGWihFxIVy3vL1zgRcTz5sB6GB56Z6eV1vitj5epN3rWLhdF9BcvXuvV7hg90ecerI6zwvNK4n13nteeHTlCEaPEgj8q87QYDwThmz54tixYtcqFvrAAwkPXr1zvh+L/Hwj7y69y5s/t9MSjAgIuKitzzjnlAH+XABx984AyQ7dnZ2c5oyYPPwYMHl3ttBY+cRSikxdDJj/xJq/n6n4oZhJaBx2SJbQ/7yEs9Lx4WQVJOYWGh7NmzJ7WbFU8VGE0XN+7Icr0+PfddngdgO71vXstmLt3CFx6Ipr/zpnz3/ZmxP3Gfz5/wPFNeLXDr9OAYH+KY6RniSk9Ag73v5IUIZ3hiGvX7l5wo+1/QLUQdtxwfb1z9Pbee7x2DR1GmeBf6BuX39nr+3Ggdve4hKupCnxC0PUHkNGoolQ2GgOfAkPVRq7E9KkbFglGqEGKh19XeHg+xZs0a5wEwZvUm9P4YP+zatSvqufr16+c+Mdb69etHRaTlIbply5a5vHgkk+bHdwyYTzXoZGDkhF3aBo6lDBUeYtE6qofVsJPJJe76OOWDdISV07C+rN+eOFZFEMeNaZZbp5c/bmBSzrAwUkIPf+/K/v0nQjLCJBUOnwyaMVi8zxdbdrmBL2kw0EmesCiHkId8CbOC0BBMw7/CmJ4fIeIREJzWkdAMgQMedJ1Xh7Dg7SrzijoGwYLBYIQYHgbnFwiGg/HpoDeRIRYXF7tPDU9YRyAYonoTLRNh6HY+8VyahhBGy+BTQyN6e45FKNgPde3du7ezQeq1YMGCqGEnQyeJQAUNeDK8EWXoYJ1t/jZzHk75/4PUrVvXxdHrvB88HhgaYiBux2hZ6OGJ5fEmMMkLsxi8I6DjY5HvOcNGWKN+/7/OmEhLKDPTG4MQ7jz+3JvuWHr2OQWfer4pKzrFTEhFuPRt6Jdc/IiNelEHhFDg5eG/pkOdCO0e9PJFRFpH6oJXw4OlAmKqyN2+/Lj00hpWYHwaj7NOr+8fO/jBkDHeeOB92Mc4QhcMlzzpoTdu3Oi+0xNTHiBCymM7xo1ACO+0F9+7d29UbNSXY0mDweqd5IiZ9MnGWn4og/x1xs8vEDwc+2kLIqHNnA/OD2MwPvEgdUePHv3bRCdDYSaKBbfToEFq1zE4rq4nw4IV6+SSXl3ljOzyTouBax9vAH+BbxDfPu8sZ2QM7DH8zTu+khZNG8uYOwZJfe94tmd7n4iLgfsAL9zB+Ade3MOl/eZoqfMgbKMH/6rkgOwtOejScmzPzu2ix1PWyKE/SFh/vIGGRNQFKZHXj6+71OVDl0GbqD95sx/RXenVpbH3SVrCR9azTuzzT1hwXOw5gRl/Xxz65sU6depIixYtym3T5ylrD9qqVSvJy8tzPz6Gxu/Yt2/fuPk1bNjQpY8HzzTm3j1/6IWxAXWgDAwS4+7Zs6frIDE8LRcP1rJlS7edtBjwkSNHXOinRqppO3bsKG3bto2mJV/aRZjGtmTnQo/bvn27O476aF01HfnrGwMoT8umHrQh6c2KqmAUTUOSiSkWRIVyuQcrq262G1sYwTBhsfyzDe7GRaP6CHWzYkUH5/Xq1XPLLQP7ysJlazLiH6Iqyoy/L7Fb32sIVXIvFrMVjB1+deuA6EDciA/jlst6n2v/QFVDCP2GqYr8ZyEehPiSwXrnti2iF8uM8nBe9u0/ICOGmPeoKYT2IIiDAXe6MPBj0MSPX3bs6IlZpBIxjk8dM0uHOH417HIxag6hXn9QWRcJmaJjwI5IClaslwn/87r0Pa+ju15Q1fc61QQQBlPGsxd+JDd7Y7RbruwrRs0i9L/cMl3ILFZFXsGmkA//IwL8E5X7R6ojR910aCYIBc/JEikrlfy+neXaS3vYv9nWQNy9X6lM81b0HYV+EB1C0Xl6etOgu1dPJ9xVf28QbqKo2SCQUCGWjkMqMgaJhQs1jRo1il6AZCB/wXkN7cFxRo0B20/pHYWn4oZFhKK3KxtGTYKr7lXy0AbDqK2YQAwjgJSupBtGphH6Srp+N4xMIvQr2AwjE0lpDGLhlpFpnPLH/hhGbcZmsQwjgNBjkMp+kY5h1Aaq7PUHhlEbQSDFye6xMmEYmYZqAoGs5G2eQVhoZWQaPN3Ecwyv1fH+3FnswaNPEnkSu1BoZApooKSkhEf/8HS80c7iN27c2NH7eNoTwI2JDuL/Nvh/EJ4fZBinMcWeQ/jI+xzRqVOnTf8PTbGHfeX24CAAAAAASUVORK5CYII=", - "public": true - } ] -} \ No newline at end of file +} diff --git a/application/src/main/data/json/system/widget_types/gateway_logs.json b/application/src/main/data/json/system/widget_types/gateway_logs.json index 963162f06f..314f7e8d0c 100644 --- a/application/src/main/data/json/system/widget_types/gateway_logs.json +++ b/application/src/main/data/json/system/widget_types/gateway_logs.json @@ -40,28 +40,5 @@ "ocpp", "ble", "bluetooth" - ], - "resources": [ - { - "link": "/api/resource/js_module/system/gateway-management-extension.js", - "title": "gateway-management-extension.js", - "type": "JS_MODULE", - "resourceKey": "gateway-management-extension.js", - "fileName": "gateway-management-extension.js", - "mediaType": "application/javascript", - "data": "U3lzdGVtLnJlZ2lzdGVyKFsiQGFuZ3VsYXIvY29yZSIsIkBhbmd1bGFyL21hdGVyaWFsL3NvcnQiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZSIsIkBhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvciIsIkBzaGFyZWQvcHVibGljLWFwaSIsIkBhbmd1bGFyL2NvbW1vbiIsIkBhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXIiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJzIiwiQGFuZ3VsYXIvZmxleC1sYXlvdXQvZmxleCIsIkBhbmd1bGFyL2ZsZXgtbGF5b3V0L2V4dGVuZGVkIiwiQG5neC10cmFuc2xhdGUvY29yZSIsIkBjb3JlL3B1YmxpYy1hcGkiLCJAYW5ndWxhci9mb3JtcyIsIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2NhcmQiLCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCIsIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQiLCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QiLCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlIiwicnhqcyIsInJ4anMvb3BlcmF0b3JzIiwidHNsaWIiLCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwIiwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbiIsIkBzaGFyZWQvZGlyZWN0aXZlcy90cnVuY2F0ZS13aXRoLXRvb2x0aXAuZGlyZWN0aXZlIiwiQHNoYXJlZC9jb21wb25lbnRzL2RpYWxvZy9qc29uLW9iamVjdC1lZGl0LWRpYWxvZy5jb21wb25lbnQiLCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2ciLCJAc2hhcmVkL2NvbXBvbmVudHMvZGlyZWN0aXZlcy90Yi1qc29uLXRvLXN0cmluZy5kaXJlY3RpdmUiLCJAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUiLCJAc2hhcmVkL2NvbXBvbmVudHMvYnV0dG9uL3RvZ2dsZS1wYXNzd29yZC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLWhlYWRlci5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLXNlbGVjdC5jb21wb25lbnQiLCJAbmdyeC9zdG9yZSIsIkBhbmd1bGFyL3JvdXRlciIsIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXIiLCJAc2hhcmVkL2NvbXBvbmVudHMvanNvbi1jb250ZW50LmNvbXBvbmVudCIsIkBzaGFyZWQvaW1wb3J0LWV4cG9ydC9pbXBvcnQtZXhwb3J0LnNlcnZpY2UiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9hc3QuZGlyZWN0aXZlIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3giLCJAc2hhcmVkL2NvbXBvbmVudHMvZW50aXR5L2VudGl0eS1nYXRld2F5LXNlbGVjdC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGVscC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGludC10b29sdGlwLWljb24uY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2hlbHAtcG9wdXAuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL3BvcG92ZXIuc2VydmljZSIsIkBhbmd1bGFyL21hdGVyaWFsL2NoaXBzIiwiQHNoYXJlZC9jb21wb25lbnRzL2ljb24uY29tcG9uZW50IiwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSIsIkBzaGFyZWQvZGVjb3JhdG9ycy9jb2VyY2lvbiIsIkBzaGFyZWQvY29tcG9uZW50cy9qc29uLW9iamVjdC1lZGl0LmNvbXBvbmVudCIsIkBzaGFyZWQvY29tcG9uZW50cy9tYXJrZG93bi5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdGItZXJyb3IuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2ZpbGUtaW5wdXQuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2J1dHRvbi9jb3B5LWJ1dHRvbi5jb21wb25lbnQiXSwoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0LG4sYSxvLGkscixzLGwsYyxwLG0sZCx1LGcsZix5LGIsaCx4LHYsdyxDLFQsUyxrLEwsRixJLEEsTixNLEUscSxELFAsRyxPLFIsVixCLFUsXyxILHosVyxqLEssWSxRLEosWCxaLGVlLHRlLG5lLGFlLG9lLGllLHJlLHNlLGxlLGNlLHBlLG1lLGRlLHVlLGdlLGZlLHllLGJlLGhlLHhlLHZlLHdlLENlLFRlLFNlLGtlLExlLEZlLEllLEFlLE5lLE1lLEVlLHFlLERlLFBlLEdlLE9lLFJlLFZlLEJlLFVlLF9lLEhlLHplLFdlLGplLEtlLCRlLFllLFFlLEplLFhlLFplLGV0LHR0LG50LGF0LG90LGl0LHJ0LHN0LGx0LGN0LHB0LG10LGR0LHV0LGd0LGZ0LHl0LGJ0LGh0LHh0LHZ0LHd0LEN0LFR0LFN0O3JldHVybntzZXR0ZXJzOltmdW5jdGlvbihlKXt0PWUsbj1lLkNvbXBvbmVudCxhPWUuSW5wdXQsbz1lLlZpZXdDaGlsZCxpPWUuRXZlbnRFbWl0dGVyLHI9ZS5pbmplY3Qscz1lLkRpcmVjdGl2ZSxsPWUuT3V0cHV0LGM9ZS5QaXBlLHA9ZS5JbmplY3QsbT1lLmZvcndhcmRSZWYsZD1lLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5LHU9ZS5OZ01vZHVsZX0sZnVuY3Rpb24oZSl7Zz1lLk1hdFNvcnQsZj1lfSxmdW5jdGlvbihlKXt5PWUuTWF0VGFibGVEYXRhU291cmNlLGI9ZX0sZnVuY3Rpb24oZSl7aD1lLk1hdFBhZ2luYXRvcix4PWV9LGZ1bmN0aW9uKGUpe3Y9ZS5oZWxwQmFzZVVybCx3PWUuRGlyZWN0aW9uLEM9ZS5QYWdlTGluayxUPWUuRGF0YUtleVR5cGUsUz1lLkxlZ2VuZFBvc2l0aW9uLGs9ZS5OVUxMX1VVSUQsTD1lLkF0dHJpYnV0ZVNjb3BlLEY9ZS5EYXRhc291cmNlVHlwZSxJPWUuRW50aXR5VHlwZSxBPWUud2lkZ2V0VHlwZSxOPWUuY29lcmNlQm9vbGVhbixNPWUuZW1wdHlQYWdlRGF0YSxFPWUuaXNDbGllbnRTaWRlVGVsZW1ldHJ5VHlwZSxxPWUuVGVsZW1ldHJ5U3Vic2NyaWJlcixEPWUuU2hhcmVkTW9kdWxlLFA9ZS5EaWFsb2dDb21wb25lbnQsRz1lLkNvbnRlbnRUeXBlLE89ZS5QYWdlQ29tcG9uZW50LFI9ZS5UYlRhYmxlRGF0YXNvdXJjZSxWPWUuSE9VUixCPWUuY29lcmNlTnVtYmVyLFU9ZS5EZXZpY2VDcmVkZW50aWFsc1R5cGV9LGZ1bmN0aW9uKGUpe189ZSxIPWUuQ29tbW9uTW9kdWxlfSxmdW5jdGlvbihlKXt6PWV9LGZ1bmN0aW9uKGUpe1c9ZX0sZnVuY3Rpb24oZSl7aj1lfSxmdW5jdGlvbihlKXtLPWV9LGZ1bmN0aW9uKGUpe1k9ZSxRPWUuVHJhbnNsYXRlTW9kdWxlfSxmdW5jdGlvbihlKXtKPWUuZGVlcENsb25lLFg9ZSxaPWUuZGVsZXRlTnVsbFByb3BlcnRpZXMsZWU9ZS5pc0VxdWFsLHRlPWUuaXNOdW1iZXIsbmU9ZS5pc1N0cmluZyxhZT1lLldJTkRPVyxvZT1lLmlzTGl0ZXJhbE9iamVjdCxpZT1lLmlzRGVmaW5lZEFuZE5vdE51bGwscmU9ZS5pc1VuZGVmaW5lZE9yTnVsbCxzZT1lLmdlbmVyYXRlU2VjcmV0LGxlPWUuaXNPYmplY3QsY2U9ZS5jYW1lbENhc2UscGU9ZS5kZWVwVHJpbX0sZnVuY3Rpb24oZSl7bWU9ZSxkZT1lLkZvcm1CdWlsZGVyLHVlPWUuVmFsaWRhdG9ycyxnZT1lLk5HX1ZBTFVFX0FDQ0VTU09SLGZlPWUuTkdfVkFMSURBVE9SUyx5ZT1lLkZvcm1Db250cm9sfSxmdW5jdGlvbihlKXtiZT1lfSxmdW5jdGlvbihlKXtoZT1lfSxmdW5jdGlvbihlKXt4ZT1lfSxmdW5jdGlvbihlKXt2ZT1lfSxmdW5jdGlvbihlKXt3ZT1lfSxmdW5jdGlvbihlKXtDZT1lLFRlPWUuRXJyb3JTdGF0ZU1hdGNoZXJ9LGZ1bmN0aW9uKGUpe1NlPWUuU3ViamVjdCxrZT1lLmZyb21FdmVudCxMZT1lLkJlaGF2aW9yU3ViamVjdCxGZT1lLlJlcGxheVN1YmplY3QsSWU9ZS5vZixBZT1lLmZvcmtKb2lufSxmdW5jdGlvbihlKXtOZT1lLnRha2VVbnRpbCxNZT1lLmZpbHRlcixFZT1lLnRhcCxxZT1lLmNhdGNoRXJyb3IsRGU9ZS5tYXAsUGU9ZS5wdWJsaXNoUmVwbGF5LEdlPWUucmVmQ291bnQsT2U9ZS50YWtlLFJlPWUuc3RhcnRXaXRoLFZlPWUuZGVib3VuY2VUaW1lLEJlPWUuZGlzdGluY3RVbnRpbENoYW5nZWQsVWU9ZS5zd2l0Y2hNYXAsX2U9ZS5tZXJnZU1hcH0sZnVuY3Rpb24oZSl7SGU9ZS5fX2RlY29yYXRlfSxmdW5jdGlvbihlKXt6ZT1lLFdlPWUuTWF0VG9vbHRpcH0sZnVuY3Rpb24oZSl7amU9ZS5TZWxlY3Rpb25Nb2RlbH0sZnVuY3Rpb24oZSl7S2U9ZX0sZnVuY3Rpb24oZSl7JGU9ZX0sZnVuY3Rpb24oZSl7WWU9ZX0sZnVuY3Rpb24oZSl7UWU9ZS5Kc29uT2JqZWN0RWRpdERpYWxvZ0NvbXBvbmVudH0sZnVuY3Rpb24oZSl7SmU9ZSxYZT1lLk1BVF9ESUFMT0dfREFUQX0sZnVuY3Rpb24oZSl7WmU9ZX0sZnVuY3Rpb24oZSl7ZXQ9ZX0sZnVuY3Rpb24oZSl7dHQ9ZX0sZnVuY3Rpb24oZSl7bnQ9ZX0sZnVuY3Rpb24oZSl7YXQ9ZX0sZnVuY3Rpb24oZSl7b3Q9ZX0sZnVuY3Rpb24oZSl7aXQ9ZX0sZnVuY3Rpb24oZSl7cnQ9ZX0sZnVuY3Rpb24oZSl7c3Q9ZX0sZnVuY3Rpb24oZSl7bHQ9ZX0sZnVuY3Rpb24oZSl7Y3Q9ZX0sZnVuY3Rpb24oZSl7cHQ9ZX0sZnVuY3Rpb24oZSl7bXQ9ZX0sZnVuY3Rpb24oZSl7ZHQ9ZX0sZnVuY3Rpb24oZSl7dXQ9ZX0sZnVuY3Rpb24oZSl7Z3Q9ZX0sZnVuY3Rpb24oZSl7ZnQ9ZX0sZnVuY3Rpb24oZSl7eXQ9ZX0sZnVuY3Rpb24oZSl7YnQ9ZX0sZnVuY3Rpb24oZSl7aHQ9ZX0sZnVuY3Rpb24oZSl7eHQ9ZS5jb2VyY2VCb29sZWFufSxmdW5jdGlvbihlKXt2dD1lfSxmdW5jdGlvbihlKXt3dD1lfSxmdW5jdGlvbihlKXtDdD1lfSxmdW5jdGlvbihlKXtUdD1lfSxmdW5jdGlvbihlKXtTdD1lfV0sZXhlY3V0ZTpmdW5jdGlvbigpe2NvbnN0IGt0PWUoIm5vTGVhZFRyYWlsU3BhY2VzUmVnZXgiLC9eXFMrKD86IFxTKykqJC8pLEx0PWUoImludGVnZXJSZWdleCIsL15bLStdP1xkKyQvKSxGdD1lKCJub25aZXJvRmxvYXQiLC9eLT8oPyEwKFwuMCspPyQpXGQrKFwuXGQrKT8kLyksSXQ9ZSgianNvblJlcXVpcmVkIiwoZT0+ZS52YWx1ZT9udWxsOntyZXF1aXJlZDohMH0pKTt2YXIgQXQsTnQsTXQsRXQ7ZSgiU3RvcmFnZVR5cGVzIixBdCksZnVuY3Rpb24oZSl7ZS5NRU1PUlk9Im1lbW9yeSIsZS5GSUxFPSJmaWxlIixlLlNRTElURT0ic3FsaXRlIn0oQXR8fGUoIlN0b3JhZ2VUeXBlcyIsQXQ9e30pKSxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdCksZnVuY3Rpb24oZSl7ZS5FWENFUFRJT049IkVYQ0VQVElPTiJ9KE50fHxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdD17fSkpLGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQpLGZ1bmN0aW9uKGUpe2UuTk9ORT0iTk9ORSIsZS5DUklUSUNBTD0iQ1JJVElDQUwiLGUuRVJST1I9IkVSUk9SIixlLldBUk5JTkc9IldBUk5JTkciLGUuSU5GTz0iSU5GTyIsZS5ERUJVRz0iREVCVUciLGUuVFJBQ0U9IlRSQUNFIn0oTXR8fGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQ9e30pKSxlKCJQb3J0TGltaXRzIixFdCksZnVuY3Rpb24oZSl7ZVtlLk1JTj0xXT0iTUlOIixlW2UuTUFYPTY1NTM1XT0iTUFYIn0oRXR8fGUoIlBvcnRMaW1pdHMiLEV0PXt9KSk7Y29uc3QgcXQ9ZSgiR2F0ZXdheVN0YXR1cyIsey4uLk10LC4uLk50fSk7dmFyIER0LFB0O2UoIkxvZ1NhdmluZ1BlcmlvZCIsRHQpLGZ1bmN0aW9uKGUpe2UuZGF5cz0iRCIsZS5ob3Vycz0iSCIsZS5taW51dGVzPSJNIixlLnNlY29uZHM9IlMifShEdHx8ZSgiTG9nU2F2aW5nUGVyaW9kIixEdD17fSkpLGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0KSxmdW5jdGlvbihlKXtlLnNlcnZpY2U9InNlcnZpY2UiLGUuY29ubmVjdG9yPSJjb25uZWN0b3IiLGUuY29udmVydGVyPSJjb252ZXJ0ZXIiLGUudGJfY29ubmVjdGlvbj0idGJfY29ubmVjdGlvbiIsZS5zdG9yYWdlPSJzdG9yYWdlIixlLmV4dGVuc2lvbj0iZXh0ZW5zaW9uIn0oUHR8fGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0PXt9KSk7Y29uc3QgR3Q9ZSgiTG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwIixuZXcgTWFwKFtbUHQuc2VydmljZSwiU2VydmljZSJdLFtQdC5jb25uZWN0b3IsIkNvbm5lY3RvciJdLFtQdC5jb252ZXJ0ZXIsIkNvbnZlcnRlciJdLFtQdC50Yl9jb25uZWN0aW9uLCJUQiBDb25uZWN0aW9uIl0sW1B0LnN0b3JhZ2UsIlN0b3JhZ2UiXSxbUHQuZXh0ZW5zaW9uLCJFeHRlbnNpb24iXV0pKSxPdD1lKCJMb2dTYXZpbmdQZXJpb2RUcmFuc2xhdGlvbnMiLG5ldyBNYXAoW1tEdC5kYXlzLCJnYXRld2F5LmxvZ3MuZGF5cyJdLFtEdC5ob3VycywiZ2F0ZXdheS5sb2dzLmhvdXJzIl0sW0R0Lm1pbnV0ZXMsImdhdGV3YXkubG9ncy5taW51dGVzIl0sW0R0LnNlY29uZHMsImdhdGV3YXkubG9ncy5zZWNvbmRzIl1dKSksUnQ9ZSgiU3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAiLG5ldyBNYXAoW1tBdC5NRU1PUlksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtBdC5GSUxFLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl0sW0F0LlNRTElURSwiZ2F0ZXdheS5zdG9yYWdlLXR5cGVzLnNxbGl0ZSJdXSkpO3ZhciBWdDtlKCJTZWN1cml0eVR5cGVzIixWdCksZnVuY3Rpb24oZSl7ZS5BQ0NFU1NfVE9LRU49ImFjY2Vzc1Rva2VuIixlLlVTRVJOQU1FX1BBU1NXT1JEPSJ1c2VybmFtZVBhc3N3b3JkIixlLlRMU19BQ0NFU1NfVE9LRU49InRsc0FjY2Vzc1Rva2VuIixlLlRMU19QUklWQVRFX0tFWT0idGxzUHJpdmF0ZUtleSJ9KFZ0fHxlKCJTZWN1cml0eVR5cGVzIixWdD17fSkpO2NvbnN0IEJ0PWUoIkdlY3VyaXR5VHlwZXNUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tWdC5BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl0sW1Z0LlVTRVJOQU1FX1BBU1NXT1JELCJnYXRld2F5LnNlY3VyaXR5LXR5cGVzLnVzZXJuYW1lLXBhc3N3b3JkIl0sW1Z0LlRMU19BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMudGxzLWFjY2Vzcy10b2tlbiJdXSkpO3ZhciBVdCxfdDtlKCJHYXRld2F5VmVyc2lvbiIsVXQpLGZ1bmN0aW9uKGUpe2UuQ3VycmVudD0iMy41LjIiLGUuTGVnYWN5PSJsZWdhY3kifShVdHx8ZSgiR2F0ZXdheVZlcnNpb24iLFV0PXt9KSksZSgiQ29ubmVjdG9yVHlwZSIsX3QpLGZ1bmN0aW9uKGUpe2UuTVFUVD0ibXF0dCIsZS5NT0RCVVM9Im1vZGJ1cyIsZS5HUlBDPSJncnBjIixlLk9QQ1VBPSJvcGN1YSIsZS5CTEU9ImJsZSIsZS5SRVFVRVNUPSJyZXF1ZXN0IixlLkNBTj0iY2FuIixlLkJBQ05FVD0iYmFjbmV0IixlLk9EQkM9Im9kYmMiLGUuUkVTVD0icmVzdCIsZS5TTk1QPSJzbm1wIixlLkZUUD0iZnRwIixlLlNPQ0tFVD0ic29ja2V0IixlLlhNUFA9InhtcHAiLGUuT0NQUD0ib2NwcCIsZS5DVVNUT009ImN1c3RvbSJ9KF90fHxlKCJDb25uZWN0b3JUeXBlIixfdD17fSkpO2NvbnN0IEh0PWUoIkdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIixuZXcgTWFwKFtbX3QuTVFUVCwiTVFUVCJdLFtfdC5NT0RCVVMsIk1PREJVUyJdLFtfdC5HUlBDLCJHUlBDIl0sW190Lk9QQ1VBLCJPUENVQSJdLFtfdC5CTEUsIkJMRSJdLFtfdC5SRVFVRVNULCJSRVFVRVNUIl0sW190LkNBTiwiQ0FOIl0sW190LkJBQ05FVCwiQkFDTkVUIl0sW190Lk9EQkMsIk9EQkMiXSxbX3QuUkVTVCwiUkVTVCJdLFtfdC5TTk1QLCJTTk1QIl0sW190LkZUUCwiRlRQIl0sW190LlNPQ0tFVCwiU09DS0VUIl0sW190LlhNUFAsIlhNUFAiXSxbX3QuT0NQUCwiT0NQUCJdLFtfdC5DVVNUT00sIkNVU1RPTSJdXSkpLHp0PWUoIk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzEsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1jb2lscyJdLFsyLCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtZGlzY3JldGUtaW5wdXRzIl0sWzMsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdLFs0LCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtaW5wdXQtcmVnaXN0ZXJzIl0sWzUsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMud3JpdGUtc2luZ2xlLWNvaWwiXSxbNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1zaW5nbGUtaG9sZGluZy1yZWdpc3RlciJdLFsxNSwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1jb2lscyJdLFsxNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdXSkpO3ZhciBXdDtlKCJCQUNuZXRSZXF1ZXN0VHlwZXMiLFd0KSxmdW5jdGlvbihlKXtlLldyaXRlUHJvcGVydHk9IndyaXRlUHJvcGVydHkiLGUuUmVhZFByb3BlcnR5PSJyZWFkUHJvcGVydHkifShXdHx8ZSgiQkFDbmV0UmVxdWVzdFR5cGVzIixXdD17fSkpO2NvbnN0IGp0PWUoIkJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tXdC5Xcml0ZVByb3BlcnR5LCJnYXRld2F5LnJwYy53cml0ZS1wcm9wZXJ0eSJdLFtXdC5SZWFkUHJvcGVydHksImdhdGV3YXkucnBjLnJlYWQtcHJvcGVydHkiXV0pKTt2YXIgS3Q7ZSgiQkFDbmV0T2JqZWN0VHlwZXMiLEt0KSxmdW5jdGlvbihlKXtlLkJpbmFyeUlucHV0PSJiaW5hcnlJbnB1dCIsZS5CaW5hcnlPdXRwdXQ9ImJpbmFyeU91dHB1dCIsZS5BbmFsb2dJbnB1dD0iYW5hbG9nSW5wdXQiLGUuQW5hbG9nT3V0cHV0PSJhbmFsb2dPdXRwdXQiLGUuQmluYXJ5VmFsdWU9ImJpbmFyeVZhbHVlIixlLkFuYWxvZ1ZhbHVlPSJhbmFsb2dWYWx1ZSJ9KEt0fHxlKCJCQUNuZXRPYmplY3RUeXBlcyIsS3Q9e30pKTtjb25zdCAkdD1lKCJCQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tLdC5BbmFsb2dPdXRwdXQsImdhdGV3YXkucnBjLmFuYWxvZy1vdXRwdXQiXSxbS3QuQW5hbG9nSW5wdXQsImdhdGV3YXkucnBjLmFuYWxvZy1pbnB1dCJdLFtLdC5CaW5hcnlPdXRwdXQsImdhdGV3YXkucnBjLmJpbmFyeS1vdXRwdXQiXSxbS3QuQmluYXJ5SW5wdXQsImdhdGV3YXkucnBjLmJpbmFyeS1pbnB1dCJdLFtLdC5CaW5hcnlWYWx1ZSwiZ2F0ZXdheS5ycGMuYmluYXJ5LXZhbHVlIl0sW0t0LkFuYWxvZ1ZhbHVlLCJnYXRld2F5LnJwYy5hbmFsb2ctdmFsdWUiXV0pKTt2YXIgWXQ7ZSgiQkxFTWV0aG9kcyIsWXQpLGZ1bmN0aW9uKGUpe2UuV1JJVEU9IndyaXRlIixlLlJFQUQ9InJlYWQiLGUuU0NBTj0ic2NhbiJ9KFl0fHxlKCJCTEVNZXRob2RzIixZdD17fSkpO2NvbnN0IFF0PWUoIkJMRU1ldGhvZHNUcmFuc2xhdGVzIixuZXcgTWFwKFtbWXQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl0sW1l0LlJFQUQsImdhdGV3YXkucnBjLnJlYWQiXSxbWXQuU0NBTiwiZ2F0ZXdheS5ycGMuc2NhbiJdXSkpO3ZhciBKdCxYdDtlKCJDQU5CeXRlT3JkZXJzIixKdCksZnVuY3Rpb24oZSl7ZS5MSVRUTEU9IkxJVFRMRSIsZS5CSUc9IkJJRyJ9KEp0fHxlKCJDQU5CeXRlT3JkZXJzIixKdD17fSkpLGUoIlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzIixYdCksZnVuY3Rpb24oZSl7ZS5XUklURT0id3JpdGUifShYdHx8ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3MiLFh0PXt9KSk7Y29uc3QgWnQ9ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzIixuZXcgTWFwKFtbWHQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl1dKSk7dmFyIGVuO2UoIlNOTVBNZXRob2RzIixlbiksZnVuY3Rpb24oZSl7ZS5TRVQ9InNldCIsZS5NVUxUSVNFVD0ibXVsdGlzZXQiLGUuR0VUPSJnZXQiLGUuQlVMS1dBTEs9ImJ1bGt3YWxrIixlLlRBQkxFPSJ0YWJsZSIsZS5NVUxUSUdFVD0ibXVsdGlnZXQiLGUuR0VUTkVYVD0iZ2V0bmV4dCIsZS5CVUxLR0VUPSJidWxrZ2V0IixlLldBTEtTPSJ3YWxrIn0oZW58fGUoIlNOTVBNZXRob2RzIixlbj17fSkpO2NvbnN0IHRuPWUoIlNOTVBNZXRob2RzVHJhbnNsYXRpb25zIixuZXcgTWFwKFtbZW4uU0VULCJnYXRld2F5LnJwYy5zZXQiXSxbZW4uTVVMVElTRVQsImdhdGV3YXkucnBjLm11bHRpc2V0Il0sW2VuLkdFVCwiZ2F0ZXdheS5ycGMuZ2V0Il0sW2VuLkJVTEtXQUxLLCJnYXRld2F5LnJwYy5idWxrLXdhbGsiXSxbZW4uVEFCTEUsImdhdGV3YXkucnBjLnRhYmxlIl0sW2VuLk1VTFRJR0VULCJnYXRld2F5LnJwYy5tdWx0aS1nZXQiXSxbZW4uR0VUTkVYVCwiZ2F0ZXdheS5ycGMuZ2V0LW5leHQiXSxbZW4uQlVMS0dFVCwiZ2F0ZXdheS5ycGMuYnVsay1nZXQiXSxbZW4uV0FMS1MsImdhdGV3YXkucnBjLndhbGsiXV0pKTt2YXIgbm4sYW4sb24scm4sc24sbG47ZSgiSFRUUE1ldGhvZHMiLG5uKSxmdW5jdGlvbihlKXtlLkNPTk5FQ1Q9IkNPTk5FQ1QiLGUuREVMRVRFPSJERUxFVEUiLGUuR0VUPSJHRVQiLGUuSEVBRD0iSEVBRCIsZS5PUFRJT05TPSJPUFRJT05TIixlLlBBVENIPSJQQVRDSCIsZS5QT1NUPSJQT1NUIixlLlBVVD0iUFVUIixlLlRSQUNFPSJUUkFDRSJ9KG5ufHxlKCJIVFRQTWV0aG9kcyIsbm49e30pKSxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuKSxmdW5jdGlvbihlKXtlLlVURl84PSJ1dGYtOCJ9KGFufHxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuPXt9KSksZSgiQ29uZmlndXJhdGlvbk1vZGVzIixvbiksZnVuY3Rpb24oZSl7ZS5CQVNJQz0iYmFzaWMiLGUuQURWQU5DRUQ9ImFkdmFuY2VkIn0ob258fGUoIkNvbmZpZ3VyYXRpb25Nb2RlcyIsb249e30pKSxlKCJTZWN1cml0eVR5cGUiLHJuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyIsZS5DRVJUSUZJQ0FURVM9ImNlcnRpZmljYXRlcyJ9KHJufHxlKCJTZWN1cml0eVR5cGUiLHJuPXt9KSksZSgiUmVwb3J0U3RyYXRlZ3lUeXBlIixzbiksZnVuY3Rpb24oZSl7ZS5PbkNoYW5nZT0iT05fQ0hBTkdFIixlLk9uUmVwb3J0UGVyaW9kPSJPTl9SRVBPUlRfUEVSSU9EIixlLk9uQ2hhbmdlT3JSZXBvcnRQZXJpb2Q9Ik9OX0NIQU5HRV9PUl9SRVBPUlRfUEVSSU9EIn0oc258fGUoIlJlcG9ydFN0cmF0ZWd5VHlwZSIsc249e30pKSxlKCJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZSIsbG4pLGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0b3I9NmU0XT0iQ29ubmVjdG9yIixlW2UuRGV2aWNlPTNlNF09IkRldmljZSIsZVtlLktleT0xNWUzXT0iS2V5In0obG58fGUoIlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlIixsbj17fSkpO2NvbnN0IGNuPWUoIlJlcG9ydFN0cmF0ZWd5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW3NuLk9uQ2hhbmdlLCJnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5vbi1jaGFuZ2UiXSxbc24uT25SZXBvcnRQZXJpb2QsImdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5Lm9uLXJlcG9ydC1wZXJpb2QiXSxbc24uT25DaGFuZ2VPclJlcG9ydFBlcmlvZCwiZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kub24tY2hhbmdlLW9yLXJlcG9ydC1wZXJpb2QiXV0pKTt2YXIgcG47ZSgiTW9kZVR5cGUiLHBuKSxmdW5jdGlvbihlKXtlLk5PTkU9Ik5vbmUiLGUuU0lHTj0iU2lnbiIsZS5TSUdOQU5ERU5DUllQVD0iU2lnbkFuZEVuY3J5cHQifShwbnx8ZSgiTW9kZVR5cGUiLHBuPXt9KSk7Y29uc3QgbW49ZSgiU2VjdXJpdHlUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbcm4uQU5PTllNT1VTLCJnYXRld2F5LmJyb2tlci5zZWN1cml0eS10eXBlcy5hbm9ueW1vdXMiXSxbcm4uQkFTSUMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmJhc2ljIl0sW3JuLkNFUlRJRklDQVRFUywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuY2VydGlmaWNhdGVzIl1dKSk7dmFyIGRuO2UoIlJlc3RTZWN1cml0eVR5cGUiLGRuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyJ9KGRufHxlKCJSZXN0U2VjdXJpdHlUeXBlIixkbj17fSkpO2NvbnN0IHVuPWUoIlJlc3RTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tkbi5BTk9OWU1PVVMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmFub255bW91cyJdLFtkbi5CQVNJQywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuYmFzaWMiXV0pKSxnbj1lKCJNcXR0VmVyc2lvbnMiLFt7bmFtZTozLjEsdmFsdWU6M30se25hbWU6My4xMSx2YWx1ZTo0fSx7bmFtZTo1LHZhbHVlOjV9XSk7dmFyIGZuO2UoIk1hcHBpbmdUeXBlIixmbiksZnVuY3Rpb24oZSl7ZS5EQVRBPSJkYXRhIixlLlJFUVVFU1RTPSJyZXF1ZXN0cyIsZS5PUENVQT0iT1BDdWEifShmbnx8ZSgiTWFwcGluZ1R5cGUiLGZuPXt9KSk7Y29uc3QgeW49ZSgiTWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nIl0sW2ZuLk9QQ1VBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdXSkpLGJuPWUoIk1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbZm4uREFUQSwiZ2F0ZXdheS5kYXRhLW1hcHBpbmctaGludCJdLFtmbi5PUENVQSwiZ2F0ZXdheS5vcGN1YS1kYXRhLW1hcHBpbmctaGludCJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nLWhpbnQiXV0pKSxobj1lKCJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNzZWN0aW9uLW1hcHBpbmciXSxbZm4uT1BDVUEsdisiL2RvY3MvaW90LWdhdGV3YXkvY29uZmlnL29wYy11YS8jc2VjdGlvbi1tYXBwaW5nIl0sW2ZuLlJFUVVFU1RTLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNyZXF1ZXN0cy1tYXBwaW5nIl1dKSkseG49ZSgiUXVhbGl0eVR5cGVzIixbMCwxLDJdKSx2bj1lKCJRdWFsaXR5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzAsImdhdGV3YXkucW9zLmF0LW1vc3Qtb25jZSJdLFsxLCJnYXRld2F5LnFvcy5hdC1sZWFzdC1vbmNlIl0sWzIsImdhdGV3YXkucW9zLmV4YWN0bHktb25jZSJdXSkpO3ZhciB3bjtlKCJDb252ZXJ0b3JUeXBlIix3biksZnVuY3Rpb24oZSl7ZS5KU09OPSJqc29uIixlLkJZVEVTPSJieXRlcyIsZS5DVVNUT009ImN1c3RvbSJ9KHdufHxlKCJDb252ZXJ0b3JUeXBlIix3bj17fSkpO2NvbnN0IENuPWUoIkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1t3bi5KU09OLCJnYXRld2F5LkpTT04iXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMiXSxbd24uQ1VTVE9NLCJnYXRld2F5LmN1c3RvbSJdXSkpO3ZhciBUbixTbixrbjtlKCJTb3VyY2VUeXBlIixUbiksZnVuY3Rpb24oZSl7ZS5NU0c9Im1lc3NhZ2UiLGUuVE9QSUM9InRvcGljIixlLkNPTlNUPSJjb25zdGFudCJ9KFRufHxlKCJTb3VyY2VUeXBlIixUbj17fSkpLGUoIk9QQ1VhU291cmNlVHlwZSIsU24pLGZ1bmN0aW9uKGUpe2UuUEFUSD0icGF0aCIsZS5JREVOVElGSUVSPSJpZGVudGlmaWVyIixlLkNPTlNUPSJjb25zdGFudCJ9KFNufHxlKCJPUENVYVNvdXJjZVR5cGUiLFNuPXt9KSksZSgiRGV2aWNlSW5mb1R5cGUiLGtuKSxmdW5jdGlvbihlKXtlLkZVTEw9ImZ1bGwiLGUuUEFSVElBTD0icGFydGlhbCJ9KGtufHxlKCJEZXZpY2VJbmZvVHlwZSIsa249e30pKTtjb25zdCBMbj1lKCJTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbVG4uTVNHLCJnYXRld2F5LnNvdXJjZS10eXBlLm1zZyJdLFtUbi5UT1BJQywiZ2F0ZXdheS5zb3VyY2UtdHlwZS50b3BpYyJdLFtUbi5DT05TVCwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5jb25zdCJdLFtTbi5QQVRILCJnYXRld2F5LnNvdXJjZS10eXBlLnBhdGgiXSxbU24uSURFTlRJRklFUiwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5pZGVudGlmaWVyIl0sW1NuLkNPTlNULCJnYXRld2F5LnNvdXJjZS10eXBlLmNvbnN0Il1dKSk7dmFyIEZuLEluO2UoIlNlcnZlclNpZGVScGNUeXBlIixGbiksZnVuY3Rpb24oZSl7ZS5XaXRoUmVzcG9uc2U9InR3b1dheSIsZS5XaXRob3V0UmVzcG9uc2U9Im9uZVdheSJ9KEZufHxlKCJTZXJ2ZXJTaWRlUnBjVHlwZSIsRm49e30pKSxlKCJSZXF1ZXN0VHlwZSIsSW4pLGZ1bmN0aW9uKGUpe2UuQ09OTkVDVF9SRVFVRVNUPSJjb25uZWN0UmVxdWVzdHMiLGUuRElTQ09OTkVDVF9SRVFVRVNUPSJkaXNjb25uZWN0UmVxdWVzdHMiLGUuQVRUUklCVVRFX1JFUVVFU1Q9ImF0dHJpYnV0ZVJlcXVlc3RzIixlLkFUVFJJQlVURV9VUERBVEU9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuU0VSVkVSX1NJREVfUlBDPSJzZXJ2ZXJTaWRlUnBjIn0oSW58fGUoIlJlcXVlc3RUeXBlIixJbj17fSkpO2NvbnN0IEFuPWUoIlJlcXVlc3RUeXBlc1RyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW0luLkNPTk5FQ1RfUkVRVUVTVCwiZ2F0ZXdheS5yZXF1ZXN0LmNvbm5lY3QtcmVxdWVzdCJdLFtJbi5ESVNDT05ORUNUX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5kaXNjb25uZWN0LXJlcXVlc3QiXSxbSW4uQVRUUklCVVRFX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5hdHRyaWJ1dGUtcmVxdWVzdCJdLFtJbi5BVFRSSUJVVEVfVVBEQVRFLCJnYXRld2F5LnJlcXVlc3QuYXR0cmlidXRlLXVwZGF0ZSJdLFtJbi5TRVJWRVJfU0lERV9SUEMsImdhdGV3YXkucmVxdWVzdC5ycGMtY29ubmVjdGlvbiJdXSkpO3ZhciBObjtlKCJNYXBwaW5nS2V5c1R5cGUiLE5uKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5DVVNUT009ImV4dGVuc2lvbkNvbmZpZyIsZS5SUENfTUVUSE9EUz0icnBjX21ldGhvZHMiLGUuQVRUUklCVVRFU19VUERBVEVTPSJhdHRyaWJ1dGVzX3VwZGF0ZXMifShObnx8ZSgiTWFwcGluZ0tleXNUeXBlIixObj17fSkpO2NvbnN0IE1uPWUoIk1hcHBpbmdLZXlzUGFuZWxUaXRsZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LnRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5LmtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5LnJwYy1tZXRob2RzIl1dKSksRW49ZSgiTWFwcGluZ0tleXNBZGRLZXlUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tObi5BVFRSSUJVVEVTLCJnYXRld2F5LmFkZC1hdHRyaWJ1dGUiXSxbTm4uVElNRVNFUklFUywiZ2F0ZXdheS5hZGQtdGltZXNlcmllcyJdLFtObi5DVVNUT00sImdhdGV3YXkuYWRkLWtleSJdLFtObi5BVFRSSUJVVEVTX1VQREFURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZS11cGRhdGUiXSxbTm4uUlBDX01FVEhPRFMsImdhdGV3YXkuYWRkLXJwYy1tZXRob2QiXV0pKSxxbj1lKCJNYXBwaW5nS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW05uLkNVU1RPTSwiZ2F0ZXdheS5kZWxldGUta2V5Il0sW05uLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFtObi5SUENfTUVUSE9EUywiZ2F0ZXdheS5kZWxldGUtcnBjLW1ldGhvZCJdXSkpLERuPWUoIk1hcHBpbmdLZXlzTm9LZXlzVGV4dFRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkubm8tYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5Lm5vLXRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5Lm5vLWtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5Lm5vLXJwYy1tZXRob2RzIl1dKSk7dmFyIFBuLEduLE9uO2UoIlNlcnZlclNpZGVSUENUeXBlIixQbiksZnVuY3Rpb24oZSl7ZS5PTkVfV0FZPSJvbmVXYXkiLGUuVFdPX1dBWT0idHdvV2F5In0oUG58fGUoIlNlcnZlclNpZGVSUENUeXBlIixQbj17fSkpLGUoIk1hcHBpbmdWYWx1ZVR5cGUiLEduKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLklOVEVHRVI9ImludGVnZXIiLGUuRE9VQkxFPSJkb3VibGUiLGUuQk9PTEVBTj0iYm9vbGVhbiJ9KEdufHxlKCJNYXBwaW5nVmFsdWVUeXBlIixHbj17fSkpLGUoIk1vZGlmaWVyVHlwZSIsT24pLGZ1bmN0aW9uKGUpe2UuRElWSURFUj0iZGl2aWRlciIsZS5NVUxUSVBMSUVSPSJtdWx0aXBsaWVyIn0oT258fGUoIk1vZGlmaWVyVHlwZSIsT249e30pKTtjb25zdCBSbj1lKCJNb2RpZmllclR5cGVzTWFwIixuZXcgTWFwKFtbT24uRElWSURFUix7bmFtZToiZ2F0ZXdheS5kaXZpZGVyIixpY29uOiJtZGk6ZGl2aXNpb24ifV0sW09uLk1VTFRJUExJRVIse25hbWU6ImdhdGV3YXkubXVsdGlwbGllciIsaWNvbjoibWRpOm11bHRpcGxpY2F0aW9uIn1dXSkpLFZuPWUoIm1hcHBpbmdWYWx1ZVR5cGVzTWFwIixuZXcgTWFwKFtbR24uU1RSSU5HLHtuYW1lOiJ2YWx1ZS5zdHJpbmciLGljb246Im1kaTpmb3JtYXQtdGV4dCJ9XSxbR24uSU5URUdFUix7bmFtZToidmFsdWUuaW50ZWdlciIsaWNvbjoibWRpOm51bWVyaWMifV0sW0duLkRPVUJMRSx7bmFtZToidmFsdWUuZG91YmxlIixpY29uOiJtZGk6bnVtZXJpYyJ9XSxbR24uQk9PTEVBTix7bmFtZToidmFsdWUuYm9vbGVhbiIsaWNvbjoibWRpOmNoZWNrYm94LW1hcmtlZC1vdXRsaW5lIn1dXSkpLEJuPWUoIkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbd24uSlNPTiwiZ2F0ZXdheS5KU09OLWhpbnQiXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMtaGludCJdLFt3bi5DVVNUT00sImdhdGV3YXkuY3VzdG9tLWhpbnQiXV0pKTt2YXIgVW47ZSgiU2VjdXJpdHlQb2xpY3kiLFVuKSxmdW5jdGlvbihlKXtlLkJBU0lDMTI4PSJCYXNpYzEyOFJzYTE1IixlLkJBU0lDMjU2PSJCYXNpYzI1NiIsZS5CQVNJQzI1NlNIQT0iQmFzaWMyNTZTaGEyNTYifShVbnx8ZSgiU2VjdXJpdHlQb2xpY3kiLFVuPXt9KSk7Y29uc3QgX249ZSgiU2VjdXJpdHlQb2xpY3lUeXBlcyIsW3t2YWx1ZTpVbi5CQVNJQzEyOCxuYW1lOiJCYXNpYzEyOFJTQTE1In0se3ZhbHVlOlVuLkJBU0lDMjU2LG5hbWU6IkJhc2ljMjU2In0se3ZhbHVlOlVuLkJBU0lDMjU2U0hBLG5hbWU6IkJhc2ljMjU2U0hBMjU2In1dKTt2YXIgSG47ZSgiTW9kYnVzUHJvdG9jb2xUeXBlIixIbiksZnVuY3Rpb24oZSl7ZS5UQ1A9InRjcCIsZS5VRFA9InVkcCIsZS5TZXJpYWw9InNlcmlhbCJ9KEhufHxlKCJNb2RidXNQcm90b2NvbFR5cGUiLEhuPXt9KSk7Y29uc3Qgem49ZSgiTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAiLG5ldyBNYXAoW1tIbi5UQ1AsIlRDUCJdLFtIbi5VRFAsIlVEUCJdLFtIbi5TZXJpYWwsIlNlcmlhbCJdXSkpO3ZhciBXbixqbjtlKCJNb2RidXNNZXRob2RUeXBlIixXbiksZnVuY3Rpb24oZSl7ZS5TT0NLRVQ9InNvY2tldCIsZS5SVFU9InJ0dSJ9KFdufHxlKCJNb2RidXNNZXRob2RUeXBlIixXbj17fSkpLGUoIk1vZGJ1c1NlcmlhbE1ldGhvZFR5cGUiLGpuKSxmdW5jdGlvbihlKXtlLlJUVT0icnR1IixlLkFTQ0lJPSJhc2NpaSJ9KGpufHxlKCJNb2RidXNTZXJpYWxNZXRob2RUeXBlIixqbj17fSkpO2NvbnN0IEtuPWUoIk1vZGJ1c01ldGhvZExhYmVsc01hcCIsbmV3IE1hcChbW1duLlNPQ0tFVCwiU29ja2V0Il0sW1duLlJUVSwiUlRVIl0sW2puLkFTQ0lJLCJBU0NJSSJdXSkpLCRuPWUoIk1vZGJ1c0J5dGVTaXplcyIsWzUsNiw3LDhdKTt2YXIgWW47ZSgiTW9kYnVzUGFyaXR5IixZbiksZnVuY3Rpb24oZSl7ZS5FdmVuPSJFIixlLk9kZD0iTyIsZS5Ob25lPSJOIn0oWW58fGUoIk1vZGJ1c1Bhcml0eSIsWW49e30pKTtjb25zdCBRbj1lKCJNb2RidXNQYXJpdHlMYWJlbHNNYXAiLG5ldyBNYXAoW1tZbi5FdmVuLCJFdmVuIl0sW1luLk9kZCwiT2RkIl0sW1luLk5vbmUsIk5vbmUiXV0pKTt2YXIgSm4sWG47ZSgiTW9kYnVzT3JkZXJUeXBlIixKbiksZnVuY3Rpb24oZSl7ZS5CSUc9IkJJRyIsZS5MSVRUTEU9IkxJVFRMRSJ9KEpufHxlKCJNb2RidXNPcmRlclR5cGUiLEpuPXt9KSksZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbiksZnVuY3Rpb24oZSl7ZS5Ib2xkaW5nUmVnaXN0ZXJzPSJob2xkaW5nX3JlZ2lzdGVycyIsZS5Db2lsc0luaXRpYWxpemVyPSJjb2lsc19pbml0aWFsaXplciIsZS5JbnB1dFJlZ2lzdGVycz0iaW5wdXRfcmVnaXN0ZXJzIixlLkRpc2NyZXRlSW5wdXRzPSJkaXNjcmV0ZV9pbnB1dHMifShYbnx8ZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbj17fSkpO2NvbnN0IFpuPWUoIk1vZGJ1c1JlZ2lzdGVyVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbWG4uSG9sZGluZ1JlZ2lzdGVycywiZ2F0ZXdheS5ob2xkaW5nX3JlZ2lzdGVycyJdLFtYbi5Db2lsc0luaXRpYWxpemVyLCJnYXRld2F5LmNvaWxzX2luaXRpYWxpemVyIl0sW1huLklucHV0UmVnaXN0ZXJzLCJnYXRld2F5LmlucHV0X3JlZ2lzdGVycyJdLFtYbi5EaXNjcmV0ZUlucHV0cywiZ2F0ZXdheS5kaXNjcmV0ZV9pbnB1dHMiXV0pKTt2YXIgZWE7ZSgiTW9kYnVzRGF0YVR5cGUiLGVhKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLkJZVEVTPSJieXRlcyIsZS5CSVRTPSJiaXRzIixlLklOVDg9IjhpbnQiLGUuVUlOVDg9Ijh1aW50IixlLkZMT0FUOD0iOGZsb2F0IixlLklOVDE2PSIxNmludCIsZS5VSU5UMTY9IjE2dWludCIsZS5GTE9BVDE2PSIxNmZsb2F0IixlLklOVDMyPSIzMmludCIsZS5VSU5UMzI9IjMydWludCIsZS5GTE9BVDMyPSIzMmZsb2F0IixlLklOVDY0PSI2NGludCIsZS5VSU5UNjQ9IjY0dWludCIsZS5GTE9BVDY0PSI2NGZsb2F0In0oZWF8fGUoIk1vZGJ1c0RhdGFUeXBlIixlYT17fSkpO2NvbnN0IHRhPWUoIk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzIixbZWEuQllURVMsZWEuQklUUyxlYS5TVFJJTkddKTt2YXIgbmEsYWE7ZSgiTW9kYnVzT2JqZWN0Q291bnRCeURhdGFUeXBlIixuYSksZnVuY3Rpb24oZSl7ZVtlWyI4aW50Il09MV09IjhpbnQiLGVbZVsiOHVpbnQiXT0xXT0iOHVpbnQiLGVbZVsiOGZsb2F0Il09MV09IjhmbG9hdCIsZVtlWyIxNmludCJdPTFdPSIxNmludCIsZVtlWyIxNnVpbnQiXT0xXT0iMTZ1aW50IixlW2VbIjE2ZmxvYXQiXT0xXT0iMTZmbG9hdCIsZVtlWyIzMmludCJdPTJdPSIzMmludCIsZVtlWyIzMnVpbnQiXT0yXT0iMzJ1aW50IixlW2VbIjMyZmxvYXQiXT0yXT0iMzJmbG9hdCIsZVtlWyI2NGludCJdPTRdPSI2NGludCIsZVtlWyI2NHVpbnQiXT00XT0iNjR1aW50IixlW2VbIjY0ZmxvYXQiXT00XT0iNjRmbG9hdCJ9KG5hfHxlKCJNb2RidXNPYmplY3RDb3VudEJ5RGF0YVR5cGUiLG5hPXt9KSksZSgiTW9kYnVzVmFsdWVLZXkiLGFhKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5BVFRSSUJVVEVTX1VQREFURVM9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuUlBDX1JFUVVFU1RTPSJycGMifShhYXx8ZSgiTW9kYnVzVmFsdWVLZXkiLGFhPXt9KSk7Y29uc3Qgb2E9ZSgiTW9kYnVzS2V5c1BhbmVsVGl0bGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5LmF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS50aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkucnBjLXJlcXVlc3RzIl1dKSksaWE9ZSgiTW9kYnVzS2V5c0FkZEtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmFkZC10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hZGQtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuYWRkLXJwYy1yZXF1ZXN0Il1dKSkscmE9ZSgiTW9kYnVzS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuZGVsZXRlLXJwYy1yZXF1ZXN0Il1dKSksc2E9ZSgiTW9kYnVzS2V5c05vS2V5c1RleHRUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS5uby10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5uby1hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkubm8tcnBjLXJlcXVlc3RzIl1dKSksbGE9ZSgiTW9kYnVzQmF1ZHJhdGVzIixbNDgwMCw5NjAwLDE5MjAwLDM4NDAwLDU3NjAwLDExNTIwMCwyMzA0MDAsNDYwODAwLDkyMTYwMF0pO2NsYXNzIGNhe2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsidHMiLCJzdGF0dXMiLCJtZXNzYWdlIl0sdGhpcy5nYXRld2F5TG9nTGlua3M9W3tuYW1lOiJHZW5lcmFsIixrZXk6IkxPR1MifSx7bmFtZToiU2VydmljZSIsa2V5OiJTRVJWSUNFX0xPR1MifSx7bmFtZToiQ29ubmVjdGlvbiIsa2V5OiJDT05ORUNUSU9OX0xPR1MifSx7bmFtZToiU3RvcmFnZSIsa2V5OiJTVE9SQUdFX0xPR1MifSx7a2V5OiJFWFRFTlNJT05TX0xPR1MiLG5hbWU6IkV4dGVuc2lvbiJ9XTtjb25zdCBlPXtwcm9wZXJ0eToidHMiLGRpcmVjdGlvbjp3LkRFU0N9O3RoaXMucGFnZUxpbms9bmV3IEMoMTAsMCxudWxsLGUpLHRoaXMuZGF0YVNvdXJjZT1uZXcgeShbXSl9bmdPbkluaXQoKXt0aGlzLnVwZGF0ZVdpZGdldFRpdGxlKCl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3I9dGhpcy5wYWdpbmF0b3IsdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vblRpbWV3aW5kb3dDaGFuZ2VGdW5jdGlvbj1lPT4odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vcHRpb25zLnRpbWVXaW5kb3dDb25maWc9ZSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksZSksdGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmxvZ0xpbmtzPVt7a2V5OmAke2Uua2V5fV9MT0dTYCxuYW1lOiJDb25uZWN0b3IiLGZpbHRlckZuOmU9PiFlLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX0se2tleTpgJHtlLmtleX1fTE9HU2AsbmFtZToiQ29udmVydGVyIixmaWx0ZXJGbjplPT5lLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX1dfWVsc2UgdGhpcy5sb2dMaW5rcz10aGlzLmdhdGV3YXlMb2dMaW5rczt0aGlzLmFjdGl2ZUxpbms9dGhpcy5sb2dMaW5rc1swXSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXVwZGF0ZVdpZGdldFRpdGxlKCl7aWYodGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LndpZGdldENvbmZpZy50aXRsZSx0PSIke2Nvbm5lY3Rvck5hbWV9IjtpZihlLmluY2x1ZGVzKHQpKXtjb25zdCBuPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmN0eC53aWRnZXRUaXRsZT1lLnJlcGxhY2UodCxuLmtleSl9fX11cGRhdGVEYXRhKCl7aWYodGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhLmxlbmd0aCYmdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhWzBdKXtsZXQgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGFbMF0uZGF0YS5tYXAoKGU9Pntjb25zdCB0PXt0czplWzBdLGtleTp0aGlzLmFjdGl2ZUxpbmsua2V5LG1lc3NhZ2U6ZVsxXSxzdGF0dXM6IklOVkFMSUQgTE9HIEZPUk1BVCJ9O3RyeXt0Lm1lc3NhZ2U9L1xbKC4qKS8uZXhlYyhlWzFdKVswXX1jYXRjaChuKXt0Lm1lc3NhZ2U9ZVsxXX10cnl7dC5zdGF0dXM9ZVsxXS5tYXRjaCgvXHwoXHcrKVx8LylbMV19Y2F0Y2goZSl7dC5zdGF0dXM9IklOVkFMSUQgTE9HIEZPUk1BVCJ9cmV0dXJuIHR9KSk7dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuJiYoZT1lLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuKGUpKSkpLHRoaXMuZGF0YVNvdXJjZS5kYXRhPWV9fW9uVGFiQ2hhbmdlZChlKXt0aGlzLmFjdGl2ZUxpbms9ZSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXN0YXR1c0NsYXNzKGUpe3N3aXRjaChlKXtjYXNlIHF0LkRFQlVHOnJldHVybiJzdGF0dXMgc3RhdHVzLWRlYnVnIjtjYXNlIHF0LldBUk5JTkc6cmV0dXJuInN0YXR1cyBzdGF0dXMtd2FybmluZyI7Y2FzZSBxdC5FUlJPUjpjYXNlIHF0LkVYQ0VQVElPTjpyZXR1cm4ic3RhdHVzIHN0YXR1cy1lcnJvciI7ZGVmYXVsdDpyZXR1cm4ic3RhdHVzIHN0YXR1cy1pbmZvIn19c3RhdHVzQ2xhc3NNc2coZSl7aWYoZT09PXF0LkVYQ0VQVElPTilyZXR1cm4ibXNnLXN0YXR1cy1leGNlcHRpb24ifXRyYWNrQnlMb2dUcyhlLHQpe3JldHVybiB0LnRzfWNoYW5nZVN1YnNjcmlwdGlvbigpe3RoaXMuY3R4LmRhdGFzb3VyY2VzJiZ0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlcyYmKHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlc1swXS5kYXRhS2V5cz1be25hbWU6dGhpcy5hY3RpdmVMaW5rLmtleSx0eXBlOlQudGltZXNlcmllcyxzZXR0aW5nczp7fX1dLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5jYWxsYmFja3Mub25EYXRhVXBkYXRlZD0oKT0+e3RoaXMudXBkYXRlRGF0YSgpfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjYSxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Y2Esc2VsZWN0b3I6InRiLWdhdGV3YXktbG9ncyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToic2VhcmNoSW5wdXRGaWVsZCIsZmlyc3Q6ITAscHJlZGljYXRlOlsic2VhcmNoSW5wdXQiXSxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic29ydCIsZmlyc3Q6ITAscHJlZGljYXRlOmcsZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InBhZ2luYXRvciIsZmlyc3Q6ITAscHJlZGljYXRlOmgsZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRUYWJsZSxzZWxlY3RvcjoibWF0LXRhYmxlLCB0YWJsZVttYXQtdGFibGVdIixleHBvcnRBczpbIm1hdFRhYmxlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsRGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyQ2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyUm93RGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyUm93RGVmXSIsaW5wdXRzOlsibWF0SGVhZGVyUm93RGVmIiwibWF0SGVhZGVyUm93RGVmU3RpY2t5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDb2x1bW5EZWYsc2VsZWN0b3I6IlttYXRDb2x1bW5EZWZdIixpbnB1dHM6WyJtYXRDb2x1bW5EZWYiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGxEZWYsc2VsZWN0b3I6IlttYXRDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRSb3dEZWYsc2VsZWN0b3I6IlttYXRSb3dEZWZdIixpbnB1dHM6WyJtYXRSb3dEZWZDb2x1bW5zIiwibWF0Um93RGVmV2hlbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbCxzZWxlY3RvcjoibWF0LWhlYWRlci1jZWxsLCB0aFttYXQtaGVhZGVyLWNlbGxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGwsc2VsZWN0b3I6Im1hdC1jZWxsLCB0ZFttYXQtY2VsbF0ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0SGVhZGVyUm93LHNlbGVjdG9yOiJtYXQtaGVhZGVyLXJvdywgdHJbbWF0LWhlYWRlci1yb3ddIixleHBvcnRBczpbIm1hdEhlYWRlclJvdyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0Um93LHNlbGVjdG9yOiJtYXQtcm93LCB0clttYXQtcm93XSIsZXhwb3J0QXM6WyJtYXRSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp4Lk1hdFBhZ2luYXRvcixzZWxlY3RvcjoibWF0LXBhZ2luYXRvciIsaW5wdXRzOlsiY29sb3IiLCJwYWdlSW5kZXgiLCJsZW5ndGgiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImhpZGVQYWdlU2l6ZSIsInNob3dGaXJzdExhc3RCdXR0b25zIiwic2VsZWN0Q29uZmlnIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsicGFnZSJdLGV4cG9ydEFzOlsibWF0UGFnaW5hdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp6Lk1hdERpdmlkZXIsc2VsZWN0b3I6Im1hdC1kaXZpZGVyIixpbnB1dHM6WyJ2ZXJ0aWNhbCIsImluc2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXYsc2VsZWN0b3I6IlttYXQtdGFiLW5hdi1iYXJdIixpbnB1dHM6WyJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJkaXNhYmxlUmlwcGxlIiwiY29sb3IiLCJ0YWJQYW5lbCJdLGV4cG9ydEFzOlsibWF0VGFiTmF2QmFyIiwibWF0VGFiTmF2Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXZQYW5lbCxzZWxlY3RvcjoibWF0LXRhYi1uYXYtcGFuZWwiLGlucHV0czpbImlkIl0sZXhwb3J0QXM6WyJtYXRUYWJOYXZQYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiTGluayxzZWxlY3RvcjoiW21hdC10YWItbGlua10sIFttYXRUYWJMaW5rXSIsaW5wdXRzOlsiYWN0aXZlIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJpZCJdLGV4cG9ydEFzOlsibWF0VGFiTGluayJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUxvZ3NDb21wb25lbnQiLGNhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmNhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWxvZ3MiLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2N0eDpbe3R5cGU6YX1dLGRpYWxvZ1JlZjpbe3R5cGU6YX1dLHNlYXJjaElucHV0RmllbGQ6W3t0eXBlOm8sYXJnczpbInNlYXJjaElucHV0Il19XSxzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0scGFnaW5hdG9yOlt7dHlwZTpvLGFyZ3M6W2hdfV19fSk7Y2xhc3MgcGF7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLnV0aWxzPW4sdGhpcy5pc051bWVyaWNEYXRhPSExLHRoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3RhdGlzdGljc0tleXM9W10sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnM9e2NhbGxiYWNrczp7b25EYXRhVXBkYXRlZDooKT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfSx1c2VEYXNoYm9hcmRUaW1ld2luZG93OiExLGxlZ2VuZENvbmZpZzp7cG9zaXRpb246Uy5ib3R0b219fSx0aGlzLmluaXQ9KCk9Pnt0aGlzLmZsb3RDdHg9eyRzY29wZTp0aGlzLmN0eC4kc2NvcGUsJGluamVjdG9yOnRoaXMuY3R4LiRpbmplY3Rvcix1dGlsczp0aGlzLmN0eC51dGlscyxpc01vYmlsZTp0aGlzLmN0eC5pc01vYmlsZSxpc0VkaXQ6dGhpcy5jdHguaXNFZGl0LHN1YnNjcmlwdGlvbkFwaTp0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGksZGV0ZWN0Q2hhbmdlczp0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzLHNldHRpbmdzOnRoaXMuY3R4LnNldHRpbmdzfX0sdGhpcy51cGRhdGVDaGFydD0oKT0+e30sdGhpcy5yZXNpemU9KCk9Pnt9O2NvbnN0IGE9e3Byb3BlcnR5OiIwIixkaXJlY3Rpb246dy5ERVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwwLG51bGwsYSksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiMCIsIjEiXSx0aGlzLmRhdGFTb3VyY2U9bmV3IHkoW10pLHRoaXMuc3RhdGlzdGljRm9ybT10aGlzLmZiLmdyb3VwKHtzdGF0aXN0aWNLZXk6W251bGwsW11dfSksdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e3RoaXMuY29tbWFuZE9iaj1udWxsLHRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5jb21tYW5kT2JqPXRoaXMuY29tbWFuZHMuZmluZCgodD0+dC5hdHRyaWJ1dGVPbkdhdGV3YXk9PT1lKSkpLHRoaXMuc3Vic2NyaXB0aW9uSW5mbyYmdGhpcy5jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhc291cmNlc1swXS5lbnRpdHksZSl9KSl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKCk9PnRoaXMuc29ydERhdGEoKSkpLHRoaXMuaW5pdCgpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXMubGVuZ3RoKXtjb25zdCBlPXRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZW50aXR5O2lmKGUuaWQuaWQ9PT1rKXJldHVybjt0aGlzLmdlbmVyYWw/dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eVRpbWVzZXJpZXNMYXRlc3QoZS5pZCkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGU9PmUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1Byb2R1Y2VkIil8fGUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1NlbnQiKSkpO3RoaXMuY3JlYXRlR2VuZXJhbENoYXJ0c1N1YnNjcmlwdGlvbihlLG4pfSkpOnRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKGUuaWQsTC5TSEFSRURfU0NPUEUsWyJnZW5lcmFsX2NvbmZpZ3VyYXRpb24iXSkuc3Vic2NyaWJlKCh0PT57dCYmdC5sZW5ndGgmJih0aGlzLmNvbW1hbmRzPXRbMF0udmFsdWUuc3RhdGlzdGljcy5jb21tYW5kcywhdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWUmJnRoaXMuY29tbWFuZHMmJnRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5Iikuc2V0VmFsdWUodGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpLHRoaXMuY3JlYXRlQ2hhcnRzU3Vic2NyaXB0aW9uKGUsdGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpKSl9KSl9fW5hdmlnYXRlVG9TdGF0aXN0aWNzKCl7Y29uc3QgZT1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTt0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIub3BlblN0YXRlKCJjb25maWd1cmF0aW9uIixlKX1zb3J0RGF0YSgpe3RoaXMuZGF0YVNvdXJjZS5zb3J0RGF0YSh0aGlzLmRhdGFTb3VyY2UuZGF0YSx0aGlzLnNvcnQpfW9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGUpe3RoaXMubGVnZW5kRGF0YS5rZXlzW2VdLmRhdGFLZXkuaGlkZGVuPSF0aGlzLmxlZ2VuZERhdGEua2V5c1tlXS5kYXRhS2V5LmhpZGRlbix0aGlzLnN1YnNjcmlwdGlvbi51cGRhdGVEYXRhVmlzaWJpbGl0eShlKX1jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1be25hbWU6dCxsYWJlbDp0fV0sdGhpcy5zdWJzY3JpcHRpb25JbmZvPW4sdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWNyZWF0ZUdlbmVyYWxDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1bXSx0Py5sZW5ndGgmJnQuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUsbGFiZWw6ZX0pfSkpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZGF0YUtleXMuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUubmFtZSxsYWJlbDplLmxhYmVsfSl9KSksdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0KCl7dGhpcy5yZXNpemUkJiZ0aGlzLnJlc2l6ZSQuZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uRGF0YVVwZGF0ZUVycm9yKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5wYXJzZUV4Y2VwdGlvbihlKTtsZXQgbj10Lm5hbWU7dC5tZXNzYWdlJiYobis9IjogIit0Lm1lc3NhZ2UpLGNvbnNvbGUuZXJyb3Iobil9b25EYXRhVXBkYXRlZCgpe3RoaXMuaXNEYXRhT25seU51bWJlcnMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJih0aGlzLmNoYXJ0SW5pdGVkfHx0aGlzLmluaXRDaGFydCgpKX1pbml0Q2hhcnQoKXt0aGlzLmNoYXJ0SW5pdGVkPSEwLHRoaXMuZmxvdEN0eC4kY29udGFpbmVyPSQodGhpcy5zdGF0aXN0aWNDaGFydC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc2l6ZSQub2JzZXJ2ZSh0aGlzLnN0YXRpc3RpY0NoYXJ0Lm5hdGl2ZUVsZW1lbnQpfWlzRGF0YU9ubHlOdW1iZXJzKCl7dGhpcy5nZW5lcmFsP3RoaXMuaXNOdW1lcmljRGF0YT0hMDoodGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5zdWJzY3JpcHRpb24uZGF0YS5sZW5ndGg/dGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhOltdLHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCYmIXRoaXMuZGF0YVR5cGVEZWZpbmVkJiYodGhpcy5kYXRhVHlwZURlZmluZWQ9ITAsdGhpcy5pc051bWVyaWNEYXRhPXRoaXMuZGF0YVNvdXJjZS5kYXRhLmV2ZXJ5KChlPT4haXNOYU4oK2VbMV0pKSkpKX1jaGFuZ2VTdWJzY3JpcHRpb24oZSl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMucmVzZXQoKSx0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LnN1YnNjcmlwdGlvbkFwaS5jcmVhdGVTdWJzY3JpcHRpb25Gcm9tSW5mbyhBLnRpbWVzZXJpZXMsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3Vic2NyaXB0aW9uPWUsdGhpcy5pc0RhdGFPbmx5TnVtYmVycygpLHRoaXMubGVnZW5kRGF0YT10aGlzLnN1YnNjcmlwdGlvbi5sZWdlbmREYXRhLHRoaXMuZmxvdEN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uPWUsdGhpcy5yZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuY3R4LmRldGVjdENoYW5nZXMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJnRoaXMuaW5pdENoYXJ0KCl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpYLlV0aWxzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cGEsc2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsaW5wdXRzOntjdHg6ImN0eCIsZ2VuZXJhbDoiZ2VuZXJhbCJ9LHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzb3J0IixmaXJzdDohMCxwcmVkaWNhdGU6ZyxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic3RhdGlzdGljQ2hhcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInN0YXRpc3RpY0NoYXJ0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0Lmx0LW1kPSJjb2x1bW4iPlxuICA8bWF0LWNhcmQgW2Zvcm1Hcm91cF09InN0YXRpc3RpY0Zvcm0iICpuZ0lmPSIhZ2VuZXJhbCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0YXRpc3RpY0tleSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGtleSBvZiBzdGF0aXN0aWNzS2V5cyIgW3ZhbHVlXT0ia2V5Ij5cbiAgICAgICAgICB7eyBrZXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb21tYW5kIG9mIGNvbW1hbmRzIiBbdmFsdWVdPSJjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSI+XG4gICAgICAgICAge3sgY29tbWFuZC5hdHRyaWJ1dGVPbkdhdGV3YXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1lcnJvclxuICAgICAgKm5nSWY9IiFzdGF0aXN0aWNzS2V5cy5sZW5ndGggJiYgIWNvbW1hbmRzLmxlbmd0aCI+XG4gICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWMtY29tbWFuZHMtZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0ibmF2aWdhdGVUb1N0YXRpc3RpY3MoKSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3MtYnV0dG9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIiAqbmdJZj0iY29tbWFuZE9iaiI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IFt2YWx1ZV09ImNvbW1hbmRPYmouY29tbWFuZCIgZGlzYWJsZWQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9tYXQtY2FyZD5cbiAgPGRpdiBjbGFzcz0iY2hhcnQtYm94IiBmeExheW91dD0iY29sdW1uIj5cbiAgICA8ZGl2IGNsYXNzPSJjaGFydC1jb250YWluZXIiICNzdGF0aXN0aWNDaGFydCBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+PC9kaXY+XG4gICAgPHRhYmxlIFtmeFNob3ddPSIhaXNOdW1lcmljRGF0YSIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgICAgIG1hdFNvcnREaXNhYmxlQ2xlYXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMCI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7IFwnd2lkZ2V0cy5nYXRld2F5LmNyZWF0ZWQtdGltZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCByb3c7IGxldCByb3dJbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICB7eyByb3dbMF18IGRhdGU6XCd5eXl5LU1NLWRkIEhIOm1tOnNzXCcgfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9IjEiPlxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdyI+XG4gICAgICAgICAge3sgcm93WzFdIH19XG4gICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj0iZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IlxuICAgICAgICAgICAgICAgKm1hdFJvd0RlZj0ibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uczsiPjwvbWF0LXJvdz5cbiAgICA8L3RhYmxlPlxuICAgIDxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwICYmICFpc051bWVyaWNEYXRhIlxuICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7IFwnYXR0cmlidXRlLm5vLXRlbGVtZXRyeS10ZXh0XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGRpdiBmeEZsZXggY2xhc3M9ImxlZ2VuZCIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgW2Z4U2hvd109ImlzTnVtZXJpY0RhdGEiPlxuICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWtleXMiICpuZ0Zvcj0ibGV0IGxlZ2VuZEtleSBvZiBsZWdlbmREYXRhPy5rZXlzIiBmeExheW91dD0icm93IlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZ2VuZC1saW5lIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09ImxlZ2VuZEtleS5kYXRhS2V5LmNvbG9yIj48L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1sYWJlbCJcbiAgICAgICAgICAgICAoY2xpY2spPSJvbkxlZ2VuZEtleUhpZGRlbkNoYW5nZShsZWdlbmRLZXkuZGF0YUluZGV4KSJcbiAgICAgICAgICAgICBbY2xhc3NdPSJ7IFwnaGlkZGVuLWxhYmVsXCc6IGxlZ2VuZERhdGEua2V5c1tsZWdlbmRLZXkuZGF0YUluZGV4XS5kYXRhS2V5LmhpZGRlbiB9IlxuICAgICAgICAgICAgIFtpbm5lckhUTUxdPSJsZWdlbmRLZXkuZGF0YUtleS5sYWJlbCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BhZGRpbmc6MH06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXJ7aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDo0MCU7aGVpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OjM1cHg7cGFkZGluZzoxNXB4O2dhcDoyMnB4fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzUwcHgpezpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDoxMDAlfX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveCw6aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtmbGV4LWdyb3c6MX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveHtvdmVyZmxvdzphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcj4qe2hlaWdodDoxMDAlfTpob3N0IC5sZWdlbmR7ZmxleC13cmFwOndyYXA7d2lkdGg6MTAwJTtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206NHB4O21hcmdpbi10b3A6MTVweH06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVse3BhZGRpbmc6MnB4IDIwcHggMnB4IDEwcHg7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWwuaGlkZGVuLWxhYmVse3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7b3BhY2l0eTouNn06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTVweDtoZWlnaHQ6M3B4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7b3V0bGluZTpub25lfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmhlLk1hdENhcmQsc2VsZWN0b3I6Im1hdC1jYXJkIixpbnB1dHM6WyJhcHBlYXJhbmNlIl0sZXhwb3J0QXM6WyJtYXRDYXJkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5EYXRlUGlwZSxuYW1lOiJkYXRlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U3RhdGlzdGljc0NvbXBvbmVudCIscGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtbWQ9ImNvbHVtbiI+XG4gIDxtYXQtY2FyZCBbZm9ybUdyb3VwXT0ic3RhdGlzdGljRm9ybSIgKm5nSWY9IiFnZW5lcmFsIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3RhdGlzdGljS2V5Ij5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQga2V5IG9mIHN0YXRpc3RpY3NLZXlzIiBbdmFsdWVdPSJrZXkiPlxuICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgY29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQuYXR0cmlidXRlT25HYXRld2F5Ij5cbiAgICAgICAgICB7eyBjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iIXN0YXRpc3RpY3NLZXlzLmxlbmd0aCAmJiAhY29tbWFuZHMubGVuZ3RoIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpYy1jb21tYW5kcy1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPGRpdj5cbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJuYXZpZ2F0ZVRvU3RhdGlzdGljcygpIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljcy1idXR0b25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siICpuZ0lmPSJjb21tYW5kT2JqIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW3ZhbHVlXT0iY29tbWFuZE9iai5jb21tYW5kIiBkaXNhYmxlZD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L21hdC1jYXJkPlxuICA8ZGl2IGNsYXNzPSJjaGFydC1ib3giIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgI3N0YXRpc3RpY0NoYXJ0IFtmeFNob3ddPSJpc051bWVyaWNEYXRhIj48L2Rpdj5cbiAgICA8dGFibGUgW2Z4U2hvd109IiFpc051bWVyaWNEYXRhIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIlxuICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSIwIj5cbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdzsgbGV0IHJvd0luZGV4ID0gaW5kZXgiPlxuICAgICAgICAgIHt7IHJvd1swXXwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMSI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiA3MCUiPnt7IFwnd2lkZ2V0cy5nYXRld2F5Lm1lc3NhZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgcm93Ij5cbiAgICAgICAgICB7eyByb3dbMV0gfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG1hdC1oZWFkZXItcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCJcbiAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICA8bWF0LXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgIDwvdGFibGU+XG4gICAgPHNwYW4gW2Z4U2hvd109ImRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDAgJiYgIWlzTnVtZXJpY0RhdGEiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8ZGl2IGZ4RmxleCBjbGFzcz0ibGVnZW5kIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIiBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+XG4gICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQta2V5cyIgKm5nRm9yPSJsZXQgbGVnZW5kS2V5IG9mIGxlZ2VuZERhdGE/LmtleXMiIGZ4TGF5b3V0PSJyb3ciXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiPlxuICAgICAgICA8c3BhbiBjbGFzcz0ibGVnZW5kLWxpbmUiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ibGVnZW5kS2V5LmRhdGFLZXkuY29sb3IiPjwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWxhYmVsIlxuICAgICAgICAgICAgIChjbGljayk9Im9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGxlZ2VuZEtleS5kYXRhSW5kZXgpIlxuICAgICAgICAgICAgIFtjbGFzc109InsgXCdoaWRkZW4tbGFiZWxcJzogbGVnZW5kRGF0YS5rZXlzW2xlZ2VuZEtleS5kYXRhSW5kZXhdLmRhdGFLZXkuaGlkZGVuIH0iXG4gICAgICAgICAgICAgW2lubmVySFRNTF09ImxlZ2VuZEtleS5kYXRhS2V5LmxhYmVsIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzowfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtvdmVyZmxvdy15OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjQwJTtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6MzVweDtwYWRkaW5nOjE1cHg7Z2FwOjIycHh9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NTBweCl7Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjEwMCV9fTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94LDpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtY29udGFpbmVye2hlaWdodDoxMDAlO2ZsZXgtZ3JvdzoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94e292ZXJmbG93OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyPip7aGVpZ2h0OjEwMCV9Omhvc3QgLmxlZ2VuZHtmbGV4LXdyYXA6d3JhcDt3aWR0aDoxMDAlO3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo0cHg7bWFyZ2luLXRvcDoxNXB4fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWx7cGFkZGluZzoycHggMjBweCAycHggMTBweDt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLmxlZ2VuZCAubGVnZW5kLWtleXMgLmxlZ2VuZC1sYWJlbC5oaWRkZW4tbGFiZWx7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtvcGFjaXR5Oi42fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGluZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNXB4O2hlaWdodDozcHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtvdXRsaW5lOm5vbmV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpYLlV0aWxzU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0sc3RhdGlzdGljQ2hhcnQ6W3t0eXBlOm8sYXJnczpbInN0YXRpc3RpY0NoYXJ0Il19XSxjdHg6W3t0eXBlOmF9XSxnZW5lcmFsOlt7dHlwZTphfV19fSk7Y2xhc3MgbWF7c3RhdGlje3RoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1zdGF0aWN7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdPbGRGaWVsZHM9WyJhdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uIiwiZXh0ZW5zaW9uLWNvbmZpZyJdfXN0YXRpY3t0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ05ld0ZpZWxkcz1bImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIiwicmVzcG9uc2VUb3BpY1FvUyIsImV4dGVuc2lvbkNvbmZpZyJdfXN0YXRpYyBtYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGU/Lm1hcCgoKHtjb252ZXJ0ZXI6ZSx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpuPTF9KT0+e2NvbnN0IGE9ZS5kZXZpY2VJbmZvPz90aGlzLmV4dHJhY3RDb252ZXJ0ZXJEZXZpY2VJbmZvKGUpLG89ey4uLmUsZGV2aWNlSW5mbzphLGV4dGVuc2lvbkNvbmZpZzplLmV4dGVuc2lvbkNvbmZpZ3x8ZVsiZXh0ZW5zaW9uLWNvbmZpZyJdfHxudWxsfTtyZXR1cm4gdGhpcy5jbGVhblVwT2xkRmllbGRzKG8pLHtjb252ZXJ0ZXI6byx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpufX0pKX1zdGF0aWMgbWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbihlKXtyZXR1cm4gdGhpcy5tcXR0UmVxdWVzdFR5cGVLZXlzLnJlZHVjZSgoKHQsbik9PmVbbl0/KHRbbl09ZVtuXS5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwUmVxdWVzdFRvVXBncmFkZWRWZXJzaW9uKGUsbik7cmV0dXJuIHRoaXMuY2xlYW5VcE9sZEZpZWxkcyh0KSx0fSkpLHQpOnQpLHt9KX1zdGF0aWMgbWFwUmVxdWVzdHNUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMucmVkdWNlKCgodCxuKT0+ZVtuXT8odFtuXT1lW25dLm1hcCgoZT0+e249PT1Jbi5TRVJWRVJfU0lERV9SUEMmJmRlbGV0ZSBlLnR5cGU7Y29uc3R7YXR0cmlidXRlTmFtZUV4cHJlc3Npb246dCxkZXZpY2VJbmZvOmEsLi4ub309ZSxpPXsuLi5vLGF0dHJpYnV0ZU5hbWVKc29uRXhwcmVzc2lvbjp0fHxudWxsLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZSE9PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGx9O3JldHVybiB0aGlzLmNsZWFuVXBOZXdGaWVsZHMoaSksaX0pKSx0KTp0KSx7fSl9c3RhdGljIG1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlPy5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwQ29udmVydGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLmNvbnZlcnRlcik7cmV0dXJuIHRoaXMuY2xlYW5VcE5ld0ZpZWxkcyh0KSx7Y29udmVydGVyOnQsdG9waWNGaWx0ZXI6ZS50b3BpY0ZpbHRlcn19KSl9c3RhdGljIG1hcENvbnZlcnRlclRvRG93bmdyYWRlZFZlcnNpb24oZSl7Y29uc3R7ZGV2aWNlSW5mbzp0LC4uLm59PWU7cmV0dXJuIGUudHlwZSE9PXduLkJZVEVTP3suLi5uLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjp0Py5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLk1TRz90LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZUpzb25FeHByZXNzaW9uOnQ/LmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlPT09VG4uTVNHP3QuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246bnVsbCxkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uOnQ/LmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIT09VG4uTVNHP3Q/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbjp0Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSE9PVRuLk1TRz90Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbjpudWxsfTp7Li4ubixkZXZpY2VOYW1lRXhwcmVzc2lvbjp0LmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVFeHByZXNzaW9uOnQuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb24sImV4dGVuc2lvbi1jb25maWciOmUuZXh0ZW5zaW9uQ29uZmlnfX1zdGF0aWMgY2xlYW5VcE9sZEZpZWxkcyhlKXt0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ09sZEZpZWxkcy5mb3JFYWNoKCh0PT5kZWxldGUgZVt0XSkpLFooZSl9c3RhdGljIGNsZWFuVXBOZXdGaWVsZHMoZSl7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdOZXdGaWVsZHMuZm9yRWFjaCgodD0+ZGVsZXRlIGVbdF0pKSxaKGUpfXN0YXRpYyBnZXRUeXBlU291cmNlQnlWYWx1ZShlKXtyZXR1cm4gZS5pbmNsdWRlcygiJHsiKT9Ubi5NU0c6ZS5pbmNsdWRlcygiLyIpP1RuLlRPUElDOlRuLkNPTlNUfXN0YXRpYyBleHRyYWN0Q29udmVydGVyRGV2aWNlSW5mbyhlKXtjb25zdCB0PWUuZGV2aWNlTmFtZUV4cHJlc3Npb258fGUuZGV2aWNlTmFtZUpzb25FeHByZXNzaW9ufHxlLmRldmljZU5hbWVUb3BpY0V4cHJlc3Npb258fG51bGwsbj1lLmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6dD90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKHQpOm51bGwsYT1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9ufHxlLmRldmljZVR5cGVUb3BpY0V4cHJlc3Npb258fGUuZGV2aWNlVHlwZUpzb25FeHByZXNzaW9ufHwiZGVmYXVsdCIsbz1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6YT90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKGEpOm51bGw7cmV0dXJuIHR8fGE/e2RldmljZU5hbWVFeHByZXNzaW9uOnQsZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6bixkZXZpY2VQcm9maWxlRXhwcmVzc2lvbjphLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOm99Om51bGx9c3RhdGljIG1hcFJlcXVlc3RUb1VwZ3JhZGVkVmVyc2lvbihlLHQpe2NvbnN0IG49ZS5kZXZpY2VOYW1lSnNvbkV4cHJlc3Npb258fGUuZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbnx8bnVsbCxhPWUuZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbnx8ZS5kZXZpY2VUeXBlSnNvbkV4cHJlc3Npb258fCJkZWZhdWx0IixvPWE/dGhpcy5nZXRUeXBlU291cmNlQnlWYWx1ZShhKTpudWxsLGk9ZS5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZXx8ZS5hdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb258fG51bGwscj10PT09SW4uU0VSVkVSX1NJREVfUlBDPzE6bnVsbCxzPXQ9PT1Jbi5TRVJWRVJfU0lERV9SUEM/ZS5yZXNwb25zZVRvcGljRXhwcmVzc2lvbj9Gbi5XaXRoUmVzcG9uc2U6Rm4uV2l0aG91dFJlc3BvbnNlOm51bGw7cmV0dXJuey4uLmUsYXR0cmlidXRlTmFtZUV4cHJlc3Npb246aSxhdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZTppP3RoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoaSk6bnVsbCxkZXZpY2VJbmZvOmUuZGV2aWNlSW5mbz9lLmRldmljZUluZm86bj97ZGV2aWNlTmFtZUV4cHJlc3Npb246bixkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZTp0aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKG4pLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOmEsZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6b306bnVsbCxyZXNwb25zZVRvcGljUW9TOnIsdHlwZTpzfX19ZSgiTXF0dFZlcnNpb25NYXBwaW5nVXRpbCIsbWEpO2NsYXNzIGRhe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dCx0aGlzLmdhdGV3YXlWZXJzaW9uPWJhLnBhcnNlVmVyc2lvbih0aGlzLmdhdGV3YXlWZXJzaW9uSW4pLHRoaXMuY29uZmlnVmVyc2lvbj1iYS5wYXJzZVZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlnVmVyc2lvbil9Z2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBkYXRlTmVlZGVkKCk/dGhpcy5wcm9jZXNzVmVyc2lvblVwZGF0ZSgpOnRoaXMuY29ubmVjdG9yfXByb2Nlc3NWZXJzaW9uVXBkYXRlKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBncmFkZU5lZWRlZCgpP3RoaXMuZ2V0VXBncmFkZWRWZXJzaW9uKCk6dGhpcy5pc1ZlcnNpb25Eb3duZ3JhZGVOZWVkZWQoKT90aGlzLmdldERvd25ncmFkZWRWZXJzaW9uKCk6dGhpcy5jb25uZWN0b3J9aXNWZXJzaW9uVXBkYXRlTmVlZGVkKCl7cmV0dXJuISF0aGlzLmdhdGV3YXlWZXJzaW9uJiZ0aGlzLmNvbmZpZ1ZlcnNpb24hPT10aGlzLmdhdGV3YXlWZXJzaW9ufWlzVmVyc2lvblVwZ3JhZGVOZWVkZWQoKXtyZXR1cm4gdGhpcy5nYXRld2F5VmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiYoIXRoaXMuY29uZmlnVmVyc2lvbnx8dGhpcy5jb25maWdWZXJzaW9uPHRoaXMuZ2F0ZXdheVZlcnNpb24pfWlzVmVyc2lvbkRvd25ncmFkZU5lZWRlZCgpe3JldHVybiB0aGlzLmNvbmZpZ1ZlcnNpb24mJnRoaXMuY29uZmlnVmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiZ0aGlzLmNvbmZpZ1ZlcnNpb24+dGhpcy5nYXRld2F5VmVyc2lvbn19ZSgiR2F0ZXdheUNvbm5lY3RvclZlcnNpb25Qcm9jZXNzb3IiLGRhKTtjbGFzcyB1YSBleHRlbmRzIGRhe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLmdhdGV3YXlWZXJzaW9uSW49ZSx0aGlzLmNvbm5lY3Rvcj10LHRoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdHtjb25uZWN0UmVxdWVzdHM6ZSxkaXNjb25uZWN0UmVxdWVzdHM6dCxhdHRyaWJ1dGVSZXF1ZXN0czpuLGF0dHJpYnV0ZVVwZGF0ZXM6YSxzZXJ2ZXJTaWRlUnBjOm99PXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO2xldCBpPXsuLi50aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbixyZXF1ZXN0c01hcHBpbmc6bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmUsZGlzY29ubmVjdFJlcXVlc3RzOnQsYXR0cmlidXRlUmVxdWVzdHM6bixhdHRyaWJ1dGVVcGRhdGVzOmEsc2VydmVyU2lkZVJwYzpvfSksbWFwcGluZzptYS5tYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24ubWFwcGluZyl9O3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMuZm9yRWFjaCgoZT0+e2NvbnN0e1tlXTp0LC4uLm59PWk7aT17Li4ubn19KSksdGhpcy5jbGVhblVwQ29uZmlnSnNvbihpKSx7Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246aSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19Z2V0RG93bmdyYWRlZFZlcnNpb24oKXtjb25zdHtyZXF1ZXN0c01hcHBpbmc6ZSxtYXBwaW5nOnQsLi4ubn09dGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24sYT1lP21hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihlKTp7fSxvPW1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7Li4ubiwuLi5hLG1hcHBpbmc6b30sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWNsZWFuVXBDb25maWdKc29uKGUpe2VlKGUucmVxdWVzdHNNYXBwaW5nLHt9KSYmZGVsZXRlIGUucmVxdWVzdHNNYXBwaW5nLGVlKGUubWFwcGluZyxbXSkmJmRlbGV0ZSBlLm1hcHBpbmd9fWUoIk1xdHRWZXJzaW9uUHJvY2Vzc29yIix1YSk7Y2xhc3MgZ2EgZXh0ZW5kcyBkYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dH1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdCBlPXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7bWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZS5tYXN0ZXIpOntzbGF2ZXM6W119LHNsYXZlOmUuc2xhdmU/aGEubWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlLnNsYXZlKTp7fX0sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWdldERvd25ncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbjtyZXR1cm57Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246ey4uLmUsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e30sbWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLm1hc3Rlcik6e3NsYXZlczpbXX19LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX19ZSgiTW9kYnVzVmVyc2lvblByb2Nlc3NvciIsZ2EpO2NsYXNzIGZhIGV4dGVuZHMgZGF7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMuZ2F0ZXdheVZlcnNpb25Jbj1lLHRoaXMuY29ubmVjdG9yPXR9Z2V0VXBncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbi5zZXJ2ZXI7cmV0dXJuey4uLnRoaXMuY29ubmVjdG9yLGNvbmZpZ3VyYXRpb25Kc29uOntzZXJ2ZXI6ZT94YS5tYXBTZXJ2ZXJUb1VwZ3JhZGVkVmVyc2lvbihlKTp7fSxtYXBwaW5nOmU/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUubWFwcGluZyk6W119LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX1nZXREb3duZ3JhZGVkVmVyc2lvbigpe3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24pfSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19fWUoIk9wY1ZlcnNpb25Qcm9jZXNzb3IiLGZhKTtjbGFzcyB5YXtjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9bmV3IGksdGhpcy5mYj1yKGRlKSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmJhc2ljRm9ybUdyb3VwPXRoaXMuaW5pdEJhc2ljRm9ybUdyb3VwKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLm9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVkLmVtaXQoKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnNldFZhbHVlKHRoaXMubWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSkse2VtaXRFdmVudDohMX0pfW9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZSh0aGlzLmdldE1hcHBlZFZhbHVlKGUpKSx0aGlzLm9uVG91Y2hlZCgpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eWEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnlhLGlucHV0czp7Z2VuZXJhbFRhYkNvbnRlbnQ6ImdlbmVyYWxUYWJDb250ZW50In0sb3V0cHV0czp7aW5pdGlhbGl6ZWQ6ImluaXRpYWxpemVkIn0sbmdJbXBvcnQ6dH0pfX1lKCJHYXRld2F5Q29ubmVjdG9yQmFzaWNDb25maWdEaXJlY3RpdmUiLHlhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnlhLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2dlbmVyYWxUYWJDb250ZW50Olt7dHlwZTphfV0saW5pdGlhbGl6ZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBiYXtzdGF0aWMgZ2V0Q29uZmlnKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSBfdC5NUVRUOnJldHVybiBuZXcgdWEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk9QQ1VBOnJldHVybiBuZXcgZmEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk1PREJVUzpyZXR1cm4gbmV3IGdhKHQsZSkuZ2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCk7ZGVmYXVsdDpyZXR1cm4gZX19c3RhdGljIHBhcnNlVmVyc2lvbihlKXtyZXR1cm4gdGUoZSk/ZTpuZShlKT9wYXJzZUZsb2F0KGUucmVwbGFjZSgvXC4vZywiIikuc2xpY2UoMCwzKSkvMTAwOjB9fWUoIkdhdGV3YXlDb25uZWN0b3JWZXJzaW9uTWFwcGluZ1V0aWwiLGJhKTtjbGFzcyBoYXtzdGF0aWMgbWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJue3NsYXZlczplLnNsYXZlcy5tYXAoKGU9Pntjb25zdHtzZW5kRGF0YU9ubHlPbkNoYW5nZTp0LC4uLm59PWU7cmV0dXJuey4uLm4sZGV2aWNlVHlwZTplLmRldmljZVR5cGU/PyJkZWZhdWx0IixyZXBvcnRTdHJhdGVneTp0P3t0eXBlOnNuLk9uQ2hhbmdlfTp7dHlwZTpzbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6ZS5wb2xsUGVyaW9kfX19KSl9fXN0YXRpYyBtYXBNYXN0ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybntzbGF2ZXM6ZS5zbGF2ZXMubWFwKChlPT57Y29uc3R7cmVwb3J0U3RyYXRlZ3k6dCwuLi5ufT1lO3JldHVybnsuLi5uLHNlbmREYXRhT25seU9uQ2hhbmdlOnQ/LnR5cGUhPT1zbi5PblJlcG9ydFBlcmlvZH19KSl9fXN0YXRpYyBtYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZSl7aWYoIWU/LnZhbHVlcylyZXR1cm4gZTtjb25zdCB0PU9iamVjdC5rZXlzKGUudmFsdWVzKS5yZWR1Y2UoKCh0LG4pPT50PXsuLi50LFtuXTpbZS52YWx1ZXNbbl1dfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlKXtpZighZT8udmFsdWVzKXJldHVybiBlO2NvbnN0IHQ9T2JqZWN0LmtleXMoZS52YWx1ZXMpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOnRoaXMubWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZS52YWx1ZXNbbl1bMF0pfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOmVbbl0ubWFwKChlPT4oey4uLmUsdHlwZToiaW50Ij09PWUudHlwZT9lYS5JTlQxNjplLnR5cGV9KSkpfSkse30pfX1lKCJNb2RidXNWZXJzaW9uTWFwcGluZ1V0aWwiLGhhKTtjbGFzcyB4YXtzdGF0aWMgbWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZSl7Y29uc3R7bWFwcGluZzp0LGRpc2FibGVTdWJzY3JpcHRpb25zOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsLi4ub309ZTtyZXR1cm57Li4ubyxwb2xsUGVyaW9kSW5NaWxsaXM6YT8/NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6IW59fXN0YXRpYyBtYXBTZXJ2ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe2NvbnN0e21hcHBpbmc6dCxzZXJ2ZXI6bn09ZSx7ZW5hYmxlU3Vic2NyaXB0aW9uczphLC4uLm99PW4/P3t9O3JldHVybnsuLi5vLG1hcHBpbmc6dD90aGlzLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpOltdLGRpc2FibGVTdWJzY3JpcHRpb25zOiFhfX1zdGF0aWMgbWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlLm1hcCgoZT0+KHsuLi5lLGRldmljZU5vZGVTb3VyY2U6dGhpcy5nZXREZXZpY2VOb2RlU291cmNlQnlWYWx1ZShlLmRldmljZU5vZGVQYXR0ZXJuKSxkZXZpY2VJbmZvOntkZXZpY2VOYW1lRXhwcmVzc2lvbjplLmRldmljZU5hbWVQYXR0ZXJuLGRldmljZU5hbWVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VOYW1lUGF0dGVybiksZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246ZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiKX0sYXR0cmlidXRlczplLmF0dHJpYnV0ZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLGF0dHJpYnV0ZXNfdXBkYXRlczplLmF0dHJpYnV0ZXNfdXBkYXRlcy5tYXAoKGU9Pih7a2V5OmUuYXR0cmlidXRlT25UaGluZ3NCb2FyZCx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5hdHRyaWJ1dGVPbkRldmljZSksdmFsdWU6ZS5hdHRyaWJ1dGVPbkRldmljZX0pKSksdGltZXNlcmllczplLnRpbWVzZXJpZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLHJwY19tZXRob2RzOmUucnBjX21ldGhvZHMubWFwKChlPT4oe21ldGhvZDplLm1ldGhvZCxhcmd1bWVudHM6ZS5hcmd1bWVudHMubWFwKChlPT4oe3ZhbHVlOmUsdHlwZTp0aGlzLmdldEFyZ3VtZW50VHlwZShlKX0pKSl9KSkpfSkpKX1zdGF0aWMgbWFwTWFwcGluZ1RvRG93bmdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGUubWFwKChlPT4oey4uLmUsZGV2aWNlTmFtZVBhdHRlcm46ZS5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVQYXR0ZXJuOmUuZGV2aWNlSW5mby5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbixhdHRyaWJ1dGVzOmUuYXR0cmlidXRlcy5tYXAoKGU9Pih7a2V5OmUua2V5LHBhdGg6ZS52YWx1ZX0pKSksYXR0cmlidXRlc191cGRhdGVzOmUuYXR0cmlidXRlc191cGRhdGVzLm1hcCgoZT0+KHthdHRyaWJ1dGVPblRoaW5nc0JvYXJkOmUua2V5LGF0dHJpYnV0ZU9uRGV2aWNlOmUudmFsdWV9KSkpLHRpbWVzZXJpZXM6ZS50aW1lc2VyaWVzLm1hcCgoZT0+KHtrZXk6ZS5rZXkscGF0aDplLnZhbHVlfSkpKSxycGNfbWV0aG9kczplLnJwY19tZXRob2RzLm1hcCgoZT0+KHttZXRob2Q6ZS5tZXRob2QsYXJndW1lbnRzOmUuYXJndW1lbnRzLm1hcCgoZT0+ZS52YWx1ZSkpfSkpKX0pKSl9c3RhdGljIGdldFR5cGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6ZS5pbmNsdWRlcygiLyIpfHxlLmluY2x1ZGVzKCJcXCIpP1NuLlBBVEg6U24uQ09OU1R9c3RhdGljIGdldERldmljZU5vZGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6U24uUEFUSH1zdGF0aWMgZ2V0QXJndW1lbnRUeXBlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpPyJpbnRlZ2VyIjoiZmxvYXQiO2RlZmF1bHQ6cmV0dXJuInN0cmluZyJ9fX1lKCJPcGNWZXJzaW9uTWFwcGluZ1V0aWwiLHhhKTtjbGFzcyB2YXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGJhLnBhcnNlVmVyc2lvbihlKT49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5QaXBlfSl9c3RhdGlje3RoaXMuybVwaXBlPXQuybXJtW5nRGVjbGFyZVBpcGUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsaXNTdGFuZGFsb25lOiEwLG5hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyJ9KX19ZSgiTGF0ZXN0VmVyc2lvbkNvbmZpZ1BpcGUiLHZhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyB3YXtjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lfXRyYW5zZm9ybShlKXtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnBvcnQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKXx8ZS5oYXNFcnJvcigibWF4Iik/dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5wb3J0LWxpbWl0cy1lcnJvciIse21pbjpFdC5NSU4sbWF4OkV0Lk1BWH0pOiIifXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d2EsZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LlBpcGV9KX1zdGF0aWN7dGhpcy7JtXBpcGU9dC7Jtcm1bmdEZWNsYXJlUGlwZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxpc1N0YW5kYWxvbmU6ITAsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0pfX1lKCJHYXRld2F5UG9ydFRvb2x0aXBQaXBlIix3YSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAiLHN0YW5kYWxvbmU6ITB9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WS5UcmFuc2xhdGVTZXJ2aWNlfV19KTtjbGFzcyBDYXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGUubWFwKCgoe3ZhbHVlOmV9KT0+ZS50b1N0cmluZygpKSkuam9pbigiLCAiKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyJ9KX19ZSgiUnBjVGVtcGxhdGVBcnJheVZpZXdQaXBlIixDYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpDYSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBUYXt0cmFuc2Zvcm0oZSx0LG4pe3JldHVybiFufHxuPy5pbmNsdWRlcyhTbi5QQVRIKT90IT09U24uQ09OU1Q/YHdpZGdldC9saWIvZ2F0ZXdheS8ke2V9LSR7dH1fZm5gOnZvaWQgMDoiYXR0cmlidXRlcyI9PT1lfHwidGltZXNlcmllcyI9PT1lPyJ3aWRnZXQvbGliL2dhdGV3YXkvYXR0cmlidXRlc190aW1lc2VyaWVzX2V4cHJlc3Npb25zX2ZuIjoid2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifSl9fWUoIkdhdGV3YXlIZWxwTGlua1BpcGUiLFRhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImdldEdhdGV3YXlIZWxwTGluayIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBTYXtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbGVtZW50UmVmPWUsdGhpcy5yZW5kZXJlcj10LHRoaXMudG9vbHRpcD1uLHRoaXMudG9vbHRpcEVuYWJsZWQ9ITAsdGhpcy5wb3NpdGlvbj0iYWJvdmUiLHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5vYnNlcnZlTW91c2VFdmVudHMoKSx0aGlzLmFwcGx5VHJ1bmNhdGlvblN0eWxlcygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudG9vbHRpcC5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy50b29sdGlwLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJnRoaXMuaGlkZVRvb2x0aXAoKSx0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9b2JzZXJ2ZU1vdXNlRXZlbnRzKCl7a2UodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiKS5waXBlKE1lKCgoKT0+dGhpcy50b29sdGlwRW5hYmxlZCkpLE1lKCgoKT0+dGhpcy5pc092ZXJmbG93bih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpKSxFZSgoKCk9PnRoaXMuc2hvd1Rvb2x0aXAoKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKSxrZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUoTWUoKCgpPT50aGlzLnRvb2x0aXBFbmFibGVkKSksTWUoKCgpPT50aGlzLnRvb2x0aXAuX2lzVG9vbHRpcFZpc2libGUoKSkpLEVlKCgoKT0+dGhpcy5oaWRlVG9vbHRpcCgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWFwcGx5VHJ1bmNhdGlvblN0eWxlcygpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIndoaXRlLXNwYWNlIiwibm93cmFwIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKX1pc092ZXJmbG93bihlKXtyZXR1cm4gZS5jbGllbnRXaWR0aDxlLnNjcm9sbFdpZHRofXNob3dUb29sdGlwKCl7dGhpcy50b29sdGlwLm1lc3NhZ2U9dGhpcy50ZXh0fHx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lclRleHQsdGhpcy50b29sdGlwLnNob3coKX1oaWRlVG9vbHRpcCgpe3RoaXMudG9vbHRpcC5oaWRlKCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpTYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp6ZS5NYXRUb29sdGlwfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9c3RhdGlje3RoaXMuybVkaXI9dC7Jtcm1bmdEZWNsYXJlRGlyZWN0aXZlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6e3RleHQ6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0ZXh0Il0sdG9vbHRpcEVuYWJsZWQ6InRvb2x0aXBFbmFibGVkIixwb3NpdGlvbjoicG9zaXRpb24ifSxwcm92aWRlcnM6W1dlXSxuZ0ltcG9ydDp0fSl9fWUoIlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUiLFNhKSxIZShbTigpXSxTYS5wcm90b3R5cGUsInRvb2x0aXBFbmFibGVkIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixwcm92aWRlcnM6W1dlXSxzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOnplLk1hdFRvb2x0aXB9XSxwcm9wRGVjb3JhdG9yczp7dGV4dDpbe3R5cGU6YSxhcmdzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIl19XSx0b29sdGlwRW5hYmxlZDpbe3R5cGU6YX1dLHBvc2l0aW9uOlt7dHlwZTphfV19fSk7Y2xhc3Mga2F7c2V0IGNoaXBzKGUpe2VlKHRoaXMuY2hpcHNWYWx1ZSxlKXx8KHRoaXMuY2hpcHNWYWx1ZT1lLHNldFRpbWVvdXQoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSksMCkpfWNvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZWw9ZSx0aGlzLnJlbmRlcmVyPXQsdGhpcy50cmFuc2xhdGU9bix0aGlzLndpbmRvdz1hLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJtYXgtaGVpZ2h0IiwiNDhweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJvdmVyZmxvdyIsImF1dG8iKSxrZShhLCJyZXNpemUiKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSkpLHRoaXMub2JzZXJ2ZUludGVyc2VjdGlvbigpfW9ic2VydmVJbnRlcnNlY3Rpb24oKXt0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZT0+e2UuZm9yRWFjaCgoZT0+e2UuaXNJbnRlcnNlY3RpbmcmJnRoaXMuYWRqdXN0Q2hpcHMoKX0pKX0pKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1hZGp1c3RDaGlwcygpe2NvbnN0IGU9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy1jaGlwIiksbj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUodCkubWFyZ2luTGVmdCl8fDAsYT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIm1hdC1jaGlwOm5vdCguZWxsaXBzaXMtY2hpcCkiKTtpZih0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPjEpe2NvbnN0IG89dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy10ZXh0Iik7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5IiwiaW5saW5lLWZsZXgiKSxvLmlubmVySFRNTD10aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmVsbGlwc2lzLWNoaXBzLXRleHQiLHtjb3VudDp0aGlzLmNoaXBzVmFsdWUubGVuZ3RofSk7Y29uc3QgaT1lLm9mZnNldFdpZHRoLSh0Lm9mZnNldFdpZHRoK24pO2xldCByPTAscz0wO2EuZm9yRWFjaCgoZT0+e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUoZSwiZGlzcGxheSIsImlubGluZS1mbGV4Iik7Y29uc3QgdD1lLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX3RleHQtbGFiZWwiKTt0aGlzLmFwcGx5TWF4Q2hpcFRleHRXaWR0aCh0LGkvMykscisoZS5vZmZzZXRXaWR0aCtuKTw9aSYmczx0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPyhzKysscis9ZS5vZmZzZXRXaWR0aCtuKTp0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsImRpc3BsYXkiLCJub25lIil9KSksby5pbm5lckhUTUw9dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5lbGxpcHNpcy1jaGlwcy10ZXh0Iix7Y291bnQ6dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aC1zfSkscz09PXRoaXMuY2hpcHNWYWx1ZT8ubGVuZ3RoJiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHQsImRpc3BsYXkiLCJub25lIil9ZWxzZSBpZigxPT09dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aCl7Y29uc3Qgbz1hWzBdLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbiIpLGk9by5xdWVyeVNlbGVjdG9yKCIubWRjLWV2b2x1dGlvbi1jaGlwX190ZXh0LWxhYmVsIikscj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUobykucGFkZGluZ0xlZnQpfHwwLHM9cGFyc2VGbG9hdCh0aGlzLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG8pLnBhZGRpbmdSaWdodCl8fDAsbD1lLm9mZnNldFdpZHRoLW4tKHIrcyk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYVswXSwiZGlzcGxheSIsImlubGluZS1mbGV4IiksdGhpcy5hcHBseU1heENoaXBUZXh0V2lkdGgoaSxsKX1lbHNlIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodCwiZGlzcGxheSIsIm5vbmUiKX1hcHBseU1heENoaXBUZXh0V2lkdGgoZSx0KXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm1heC13aWR0aCIsdCsicHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm92ZXJmbG93IiwiaGlkZGVuIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlLCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIndoaXRlLXNwYWNlIiwibm93cmFwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjphZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6a2EsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJbdGItZWxsaXBzaXMtY2hpcC1saXN0XSIsaW5wdXRzOntjaGlwczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCIsImNoaXBzIl19LG5nSW1wb3J0OnR9KX19ZSgiRWxsaXBzaXNDaGlwTGlzdERpcmVjdGl2ZSIsa2EpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6a2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX0se3R5cGU6V2luZG93LGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbYWVdfV19XSxwcm9wRGVjb3JhdG9yczp7Y2hpcHM6W3t0eXBlOmEsYXJnczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfV19fSk7Y2xhc3MgTGF7Y29uc3RydWN0b3IoZSx0LG4sYSl7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWUsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2U9dCx0aGlzLnpvbmU9bix0aGlzLnRyYW5zbGF0ZT1hLHRoaXMuYXR0cmlidXRlc1N1YmplY3Q9bmV3IExlKFtdKSx0aGlzLnBhZ2VEYXRhU3ViamVjdD1uZXcgTGUoTSgpKSx0aGlzLnBhZ2VEYXRhJD10aGlzLnBhZ2VEYXRhU3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlzLnNlbGVjdGlvbj1uZXcgamUoITAsW10pfWNvbm5lY3QoZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCl9ZGlzY29ubmVjdChlKXt0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5wYWdlRGF0YVN1YmplY3QuY29tcGxldGUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXImJih0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIudW5zdWJzY3JpYmUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXI9bnVsbCl9bG9hZEF0dHJpYnV0ZXMoZSx0LG4sYT0hMSl7YSYmKHRoaXMuYWxsQXR0cmlidXRlcz1udWxsLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlciYmKHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlci51bnN1YnNjcmliZSgpLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlcj1udWxsKSksdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtjb25zdCBvPW5ldyBGZTtyZXR1cm4gdGhpcy5mZXRjaEF0dHJpYnV0ZXMoZSx0LG4pLnBpcGUocWUoKCgpPT5JZShNKCkpKSkpLnN1YnNjcmliZSgoZT0+e3RoaXMuYXR0cmlidXRlc1N1YmplY3QubmV4dChlLmRhdGEpLHRoaXMucGFnZURhdGFTdWJqZWN0Lm5leHQoZSksby5uZXh0KGUpfSkpLG99ZmV0Y2hBdHRyaWJ1dGVzKGUsdCxuKXtyZXR1cm4gdGhpcy5nZXRBbGxBdHRyaWJ1dGVzKGUsdCkucGlwZShEZSgoZT0+e2NvbnN0IHQ9ZS5maWx0ZXIoKGU9PjAhPT1lLmxhc3RVcGRhdGVUcykpO3JldHVybiBuLmZpbHRlckRhdGEodCl9KSkpfWdldEFsbEF0dHJpYnV0ZXMoZSx0KXtpZighdGhpcy5hbGxBdHRyaWJ1dGVzKXtsZXQgbjtFLmdldCh0KT8odGhpcy50ZWxlbWV0cnlTdWJzY3JpYmVyPXEuY3JlYXRlRW50aXR5QXR0cmlidXRlc1N1YnNjcmlwdGlvbih0aGlzLnRlbGVtZXRyeVdzU2VydmljZSxlLHQsdGhpcy56b25lKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuc3Vic2NyaWJlKCksbj10aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuYXR0cmlidXRlRGF0YSQoKSk6bj10aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyhlLHQpLHRoaXMuYWxsQXR0cmlidXRlcz1uLnBpcGUoUGUoMSksR2UoKSl9cmV0dXJuIHRoaXMuYWxsQXR0cmlidXRlc31pc0FsbFNlbGVjdGVkKCl7Y29uc3QgZT10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShEZSgodD0+ZT09PXQubGVuZ3RoKSkpfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5waXBlKERlKChlPT4hZS5sZW5ndGgpKSl9dG90YWwoKXtyZXR1cm4gdGhpcy5wYWdlRGF0YVN1YmplY3QucGlwZShEZSgoZT0+ZS50b3RhbEVsZW1lbnRzKSkpfW1hc3RlclRvZ2dsZSgpe3RoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShFZSgoZT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aD09PWUubGVuZ3RoP3RoaXMuc2VsZWN0aW9uLmNsZWFyKCk6ZS5mb3JFYWNoKChlPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0KGUpfSkpfSkpLE9lKDEpKS5zdWJzY3JpYmUoKX19ZSgiQXR0cmlidXRlRGF0YXNvdXJjZSIsTGEpO2NsYXNzIEZhe2NvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlU2VydmljZT1lLHRoaXMuc2F2ZVRlbXBsYXRlPW5ldyBpLHRoaXMudXNlVGVtcGxhdGU9bmV3IGksdGhpcy5vcmlnaW5hbE9yZGVyPSgpPT4wLHRoaXMuaXNPYmplY3Q9ZT0+b2UoZSksdGhpcy5pc0FycmF5PWU9PkFycmF5LmlzQXJyYXkoZSksdGhpcy5TTk1QTWV0aG9kc1RyYW5zbGF0aW9ucz10bn1uZ09uSW5pdCgpe31hcHBseVRlbXBsYXRlKGUsdCl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnVzZVRlbXBsYXRlLmVtaXQodCl9ZGVsZXRlVGVtcGxhdGUoZSx0KXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49dGhpcy5ycGNUZW1wbGF0ZXMuZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO3RoaXMucnBjVGVtcGxhdGVzLnNwbGljZShuLDEpO2NvbnN0IGE9YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5OmEsdmFsdWU6dGhpcy5ycGNUZW1wbGF0ZXN9XSkuc3Vic2NyaWJlKCgoKT0+e30pKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZhLGRlcHM6W3t0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkZhLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXMiLGlucHV0czp7Y29ubmVjdG9yVHlwZToiY29ubmVjdG9yVHlwZSIsY3R4OiJjdHgiLHJwY1RlbXBsYXRlczoicnBjVGVtcGxhdGVzIn0sb3V0cHV0czp7c2F2ZVRlbXBsYXRlOiJzYXZlVGVtcGxhdGUiLHVzZVRlbXBsYXRlOiJ1c2VUZW1wbGF0ZSJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZXMtdGl0bGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuPG1hdC1leHBhbnNpb24tcGFuZWwgaGlkZVRvZ2dsZSAqbmdGb3I9ImxldCB0ZW1wbGF0ZSBvZiBycGNUZW1wbGF0ZXMiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz0idGVtcGxhdGUtbmFtZSI+XG4gICAgICA8c3BhbiBtYXRUb29sdGlwPSJ7e3RlbXBsYXRlLm5hbWV9fSIgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+e3t0ZW1wbGF0ZS5uYW1lfX08L3NwYW4+XG4gICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IkRlbGV0ZSIgKGNsaWNrKT0iZGVsZXRlVGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPSJVc2UiIChjbGljayk9ImFwcGx5VGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9ImxldCBjb25maWcgb2YgdGVtcGxhdGUuY29uZmlnIHwga2V5VmFsdWVJc05vdEVtcHR5IlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IGNvbmZpZywgaW5uZXJWYWx1ZTogZmFsc2UgfSI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI1JQQ1RlbXBsYXRlUmVmIGxldC1jb25maWcgbGV0LWlubmVyVmFsdWU9XCdpbm5lclZhbHVlXCc+XG4gICAgPGRpdiBbZnhMYXlvdXRdPSJpc09iamVjdChjb25maWcudmFsdWUpID8gXCdjb2x1bW5cJzogXCdyb3dcJyJcbiAgICAgICAgIFtmeExheW91dEFsaWduXT0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ3NwYWNlLWJldHdlZW4gY2VudGVyXCcgOiBcJ1wnIlxuICAgICAgICAgW25nU3R5bGVdPSJ7XCdwYWRkaW5nLWxlZnRcJzogaW5uZXJWYWx1ZSA/IFwnMTZweFwnOiBcJzBcJ30iXG4gICAgICAgICBjbGFzcz0icnBjLXBhcmFtcy1yb3ciPlxuICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUta2V5Ij5cbiAgICAgICAge3shaW5uZXJWYWx1ZSA/IChcJ2dhdGV3YXkucnBjLlwnICsgY29uZmlnLmtleSB8IHRyYW5zbGF0ZSkgOiBjb25maWcua2V5fX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iaXNBcnJheShjb25maWcudmFsdWUpIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9ImFycmF5LXZhbHVlIj5cbiAgICAgICAge3sgY29uZmlnLnZhbHVlIHwgZ2V0UnBjVGVtcGxhdGVBcnJheVZpZXcgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iaXNPYmplY3QoY29uZmlnLnZhbHVlKSIgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENPYmplY3RSb3ciPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiAqbmdJZj0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgJiYgIWlzQXJyYXkoY29uZmlnLnZhbHVlKSJcbiAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdib29sZWFuLXRydWVcJzogY29uZmlnLnZhbHVlID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgIFwnYm9vbGVhbi1mYWxzZVwnOiBjb25maWcudmFsdWUgPT09IGZhbHNlICB9Ij5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29uZmlnLmtleSA9PT0gXCdtZXRob2RcJyBlbHNlIHZhbHVlIiBbbmdUZW1wbGF0ZU91dGxldF09IlNOTVBNZXRob2QiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZhbHVlPnt7IGNvbmZpZy52YWx1ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1NOTVBNZXRob2Q+e3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KGNvbmZpZy52YWx1ZSkgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNSUENPYmplY3RSb3c+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9ImxldCBzdWJDb25maWcgb2YgY29uZmlnLnZhbHVlIHwga2V5dmFsdWUgOiBvcmlnaW5hbE9yZGVyIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IHN1YkNvbmZpZywgaW5uZXJWYWx1ZTogdHJ1ZSB9Ij5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjB9Omhvc3QgLnRpdGxle2ZvbnQtd2VpZ2h0OjUwMH06aG9zdCAudGVtcGxhdGUta2V5e2NvbG9yOiMwMDAwMDA2MTtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4fTpob3N0IC5ib29sZWFuLXRydWUsOmhvc3QgLmJvb2xlYW4tZmFsc2V7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDtwYWRkaW5nOjAgMTJweDt3aWR0aDpmaXQtY29udGVudDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfTpob3N0IC5ib29sZWFuLWZhbHNle2NvbG9yOiNkMTI3MzA7YmFja2dyb3VuZC1jb2xvcjojZDEyNzMwMTR9Omhvc3QgLmJvb2xlYW4tdHJ1ZXtjb2xvcjojMTk4MDM4O2JhY2tncm91bmQtY29sb3I6IzE5ODAzODE0fTpob3N0IG1hdC1leHBhbnNpb24tcGFuZWx7bWFyZ2luLXRvcDoxMHB4O292ZXJmbG93OnZpc2libGV9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MDtmbGV4OjB9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uPm1hdC1pY29ue21hcmdpbi1sZWZ0OjE1cHg7Y29sb3I6IzAwMDAwMDYxfTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntwYWRkaW5nOjAgMCAwIDEycHh9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NDhweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgLm1hdC1jb250ZW50Lm1hdC1jb250ZW50LWhpZGUtdG9nZ2xle21hcmdpbi1yaWdodDowfTpob3N0IC5ycGMtcGFyYW1zLXJvd3tvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5ycGMtcGFyYW1zLXJvdyA6bm90KDpmaXJzdC1jaGlsZCl7d2hpdGUtc3BhY2U6cHJlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50ZW1wbGF0ZS1uYW1le292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2t9Omhvc3QgOjpuZy1kZWVwIC5tYXQtY29udGVudHthbGlnbi1pdGVtczpjZW50ZXJ9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2ZsZXg6MTttYXJnaW46MH06aG9zdCAuYXJyYXktdmFsdWV7bWFyZ2luLWxlZnQ6MTBweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3R5bGUsc2VsZWN0b3I6IltuZ1N0eWxlXSIsaW5wdXRzOlsibmdTdHlsZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsRGVzY3JpcHRpb24sc2VsZWN0b3I6Im1hdC1wYW5lbC1kZXNjcmlwdGlvbiJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOkNhLG5hbWU6ImdldFJwY1RlbXBsYXRlQXJyYXlWaWV3In1dfSl9fWUoIkdhdGV3YXlTZXJ2aWNlUlBDQ29ubmVjdG9yVGVtcGxhdGVzQ29tcG9uZW50IixGYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpGYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9Im1hdC1zdWJ0aXRsZS0xIHRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlcy10aXRsZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG48bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlICpuZ0Zvcj0ibGV0IHRlbXBsYXRlIG9mIHJwY1RlbXBsYXRlcyI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8bWF0LXBhbmVsLXRpdGxlIGNsYXNzPSJ0ZW1wbGF0ZS1uYW1lIj5cbiAgICAgIDxzcGFuIG1hdFRvb2x0aXA9Int7dGVtcGxhdGUubmFtZX19IiBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj57e3RlbXBsYXRlLm5hbWV9fTwvc3Bhbj5cbiAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD0iRGVsZXRlIiAoY2xpY2spPSJkZWxldGVUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IlVzZSIgKGNsaWNrKT0iYXBwbHlUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnBsYXlfYXJyb3c8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj0ibGV0IGNvbmZpZyBvZiB0ZW1wbGF0ZS5jb25maWcgfCBrZXlWYWx1ZUlzTm90RW1wdHkiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogY29uZmlnLCBpbm5lclZhbHVlOiBmYWxzZSB9Ij5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjUlBDVGVtcGxhdGVSZWYgbGV0LWNvbmZpZyBsZXQtaW5uZXJWYWx1ZT1cJ2lubmVyVmFsdWVcJz5cbiAgICA8ZGl2IFtmeExheW91dF09ImlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ2NvbHVtblwnOiBcJ3Jvd1wnIlxuICAgICAgICAgW2Z4TGF5b3V0QWxpZ25dPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSA/IFwnc3BhY2UtYmV0d2VlbiBjZW50ZXJcJyA6IFwnXCciXG4gICAgICAgICBbbmdTdHlsZV09IntcJ3BhZGRpbmctbGVmdFwnOiBpbm5lclZhbHVlID8gXCcxNnB4XCc6IFwnMFwnfSJcbiAgICAgICAgIGNsYXNzPSJycGMtcGFyYW1zLXJvdyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1rZXkiPlxuICAgICAgICB7eyFpbm5lclZhbHVlID8gKFwnZ2F0ZXdheS5ycGMuXCcgKyBjb25maWcua2V5IHwgdHJhbnNsYXRlKSA6IGNvbmZpZy5rZXl9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJpc0FycmF5KGNvbmZpZy52YWx1ZSkiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0iYXJyYXktdmFsdWUiPlxuICAgICAgICB7eyBjb25maWcudmFsdWUgfCBnZXRScGNUZW1wbGF0ZUFycmF5VmlldyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJpc09iamVjdChjb25maWcudmFsdWUpIiBbbmdUZW1wbGF0ZU91dGxldF09IlJQQ09iamVjdFJvdyI+PC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2ICpuZ0lmPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSAmJiAhaXNBcnJheShjb25maWcudmFsdWUpIlxuICAgICAgICAgICBbbmdDbGFzc109IntcJ2Jvb2xlYW4tdHJ1ZVwnOiBjb25maWcudmFsdWUgPT09IHRydWUsXG4gICAgICAgICAgICAgICAgICAgXCdib29sZWFuLWZhbHNlXCc6IGNvbmZpZy52YWx1ZSA9PT0gZmFsc2UgIH0iPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJjb25maWcua2V5ID09PSBcJ21ldGhvZFwnIGVsc2UgdmFsdWUiIFtuZ1RlbXBsYXRlT3V0bGV0XT0iU05NUE1ldGhvZCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdmFsdWU+e3sgY29uZmlnLnZhbHVlIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjU05NUE1ldGhvZD57eyBTTk1QTWV0aG9kc1RyYW5zbGF0aW9ucy5nZXQoY29uZmlnLnZhbHVlKSB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1JQQ09iamVjdFJvdz5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj0ibGV0IHN1YkNvbmZpZyBvZiBjb25maWcudmFsdWUgfCBrZXl2YWx1ZSA6IG9yaWdpbmFsT3JkZXIiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogc3ViQ29uZmlnLCBpbm5lclZhbHVlOiB0cnVlIH0iPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1leHBhbnNpb24tcGFuZWw+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC50ZW1wbGF0ZS1rZXl7Y29sb3I6IzAwMDAwMDYxO2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHh9Omhvc3QgLmJvb2xlYW4tdHJ1ZSw6aG9zdCAuYm9vbGVhbi1mYWxzZXtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4O3BhZGRpbmc6MCAxMnB4O3dpZHRoOmZpdC1jb250ZW50O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgLmJvb2xlYW4tZmFsc2V7Y29sb3I6I2QxMjczMDtiYWNrZ3JvdW5kLWNvbG9yOiNkMTI3MzAxNH06aG9zdCAuYm9vbGVhbi10cnVle2NvbG9yOiMxOTgwMzg7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4MTR9Omhvc3QgbWF0LWV4cGFuc2lvbi1wYW5lbHttYXJnaW4tdG9wOjEwcHg7b3ZlcmZsb3c6dmlzaWJsZX06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDowO2ZsZXg6MH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24+bWF0LWljb257bWFyZ2luLWxlZnQ6MTVweDtjb2xvcjojMDAwMDAwNjF9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye3BhZGRpbmc6MCAwIDAgMTJweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo0OHB4fTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAubWF0LWNvbnRlbnQubWF0LWNvbnRlbnQtaGlkZS10b2dnbGV7bWFyZ2luLXJpZ2h0OjB9Omhvc3QgLnJwYy1wYXJhbXMtcm93e292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLnJwYy1wYXJhbXMtcm93IDpub3QoOmZpcnN0LWNoaWxkKXt3aGl0ZS1zcGFjZTpwcmU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRlbXBsYXRlLW5hbWV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9ja306aG9zdCA6Om5nLWRlZXAgLm1hdC1jb250ZW50e2FsaWduLWl0ZW1zOmNlbnRlcn06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZmxleDoxO21hcmdpbjowfTpob3N0IC5hcnJheS12YWx1ZXttYXJnaW4tbGVmdDoxMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Nvbm5lY3RvclR5cGU6W3t0eXBlOmF9XSxjdHg6W3t0eXBlOmF9XSxzYXZlVGVtcGxhdGU6W3t0eXBlOmx9XSx1c2VUZW1wbGF0ZTpbe3R5cGU6bH1dLHJwY1RlbXBsYXRlczpbe3R5cGU6YX1dfX0pO2NsYXNzIElhe2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLkJyb2tlclNlY3VyaXR5VHlwZT1kbix0aGlzLnNlY3VyaXR5VHlwZXM9T2JqZWN0LnZhbHVlcyhkbiksdGhpcy5TZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXA9dW4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e30sdGhpcy5zZWN1cml0eUZvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltkbi5BTk9OWU1PVVMsW11dLHVzZXJuYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV19KSx0aGlzLm9ic2VydmVTZWN1cml0eUZvcm0oKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7ZS50eXBlfHwoZS50eXBlPWRuLkFOT05ZTU9VUyksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlKSx0aGlzLnVwZGF0ZVZpZXcoZSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUZvcm06e3ZhbGlkOiExfX19dXBkYXRlVmlldyhlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZShlKX11cGRhdGVWYWxpZGF0b3JzKGUpe2U9PT1kbi5CQVNJQz8odGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGFzc3dvcmQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfW9ic2VydmVTZWN1cml0eUZvcm0oKXt0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlVmlldyhlKSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PklhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+SWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbRCxIXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBBYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMuc2VuZENvbW1hbmQ9bmV3IGksdGhpcy5zYXZlVGVtcGxhdGU9bmV3IGksdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuYkFDbmV0UmVxdWVzdFR5cGVzPU9iamVjdC52YWx1ZXMoV3QpLHRoaXMuYkFDbmV0T2JqZWN0VHlwZXM9T2JqZWN0LnZhbHVlcyhLdCksdGhpcy5iTEVNZXRob2RzPU9iamVjdC52YWx1ZXMoWXQpLHRoaXMuY0FOQnl0ZU9yZGVycz1PYmplY3QudmFsdWVzKEp0KSx0aGlzLnNvY2tldE1ldGhvZFByb2Nlc3NpbmdzPU9iamVjdC52YWx1ZXMoWHQpLHRoaXMuc29ja2V0RW5jb2RpbmdzPU9iamVjdC52YWx1ZXMoYW4pLHRoaXMuc05NUE1ldGhvZHM9T2JqZWN0LnZhbHVlcyhlbiksdGhpcy5oVFRQTWV0aG9kcz1PYmplY3QudmFsdWVzKG5uKSx0aGlzLmJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXM9anQsdGhpcy5iQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXM9JHQsdGhpcy5iTEVNZXRob2RzVHJhbnNsYXRlcz1RdCx0aGlzLlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzVHJhbnNsYXRlcz1adCx0aGlzLlNOTVBNZXRob2RzVHJhbnNsYXRpb25zPXRuLHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy51cmxQYXR0ZXJuPS9eWy1hLXpBLVpkXyQ6e30/fis9XC8uMC05LV0qJC8sdGhpcy5udW1iZXJzT25seVBhdHRlcm49L15bMC05XSokLyx0aGlzLmhleE9ubHlQYXR0ZXJuPS9eWzAtOUEtRmEtZiBdKyQvLHRoaXMucHJvcGFnYXRlQ2hhbmdlPWU9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5jb21tYW5kRm9ybT10aGlzLmNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZSh0aGlzLmNvbm5lY3RvclR5cGUpLHRoaXMuY29tbWFuZEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9e307c3dpdGNoKHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5SRVNUOmNhc2UgX3QuUkVRVUVTVDplLmh0dHBIZWFkZXJzLmZvckVhY2goKGU9Pnt0W2UuaGVhZGVyTmFtZV09ZS52YWx1ZX0pKSxlLmh0dHBIZWFkZXJzPXR9dGhpcy5jb21tYW5kRm9ybS52YWxpZCYmdGhpcy5wcm9wYWdhdGVDaGFuZ2Uoey4uLnRoaXMuY29tbWFuZEZvcm0udmFsdWUsLi4uZX0pfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZShlKXtsZXQgdDtzd2l0Y2goZSl7Y2FzZSBfdC5CQUNORVQ6dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFR5cGU6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxvYmplY3RUeXBlOltudWxsLFtdXSxpZGVudGlmaWVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxwcm9wZXJ0eUlkOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7YnJlYWs7Y2FzZSBfdC5CTEU6dD10aGlzLmZiLmdyb3VwKHttZXRob2RSUEM6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sY2hhcmFjdGVyaXN0aWNVVUlEOlsiMDAwMDJBMDAtMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIzNEZCIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLHdpdGhSZXNwb25zZTpbITEsW11dfSk7YnJlYWs7Y2FzZSBfdC5DQU46dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbm9kZUlEOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxpc0V4dGVuZGVkSUQ6WyExLFtdXSxpc0ZEOlshMSxbXV0sYml0cmF0ZVN3aXRjaDpbITEsW11dLGRhdGFMZW5ndGg6W251bGwsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLGRhdGFCeXRlb3JkZXI6W251bGwsW11dLGRhdGFCZWZvcmU6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhQWZ0ZXI6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhSW5IRVg6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhRXhwcmVzc2lvbjpbbnVsbCxbdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuRlRQOnQ9dGhpcy5mYi5ncm91cCh7bWV0aG9kRmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuT0NQUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNPQ0tFVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLGVuY29kaW5nOlthbi5VVEZfOCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx3aXRoUmVzcG9uc2U6WyExLFtdXX0pO2JyZWFrO2Nhc2UgX3QuWE1QUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNOTVA6dD10aGlzLmZiLmdyb3VwKHtyZXF1ZXN0RmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx3aXRoUmVzcG9uc2U6WyExLFtdXSxvaWQ6dGhpcy5mYi5hcnJheShbXSxbdWUucmVxdWlyZWRdKX0pO2JyZWFrO2Nhc2UgX3QuUkVTVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwTWV0aG9kOltudWxsLFt1ZS5yZXF1aXJlZF1dLHJlcXVlc3RVcmxFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKHRoaXMudXJsUGF0dGVybildXSxyZXNwb25zZVRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSx0aW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdHJpZXM6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwSGVhZGVyczp0aGlzLmZiLmFycmF5KFtdKSxzZWN1cml0eTpbe30sW3VlLnJlcXVpcmVkXV19KTticmVhaztjYXNlIF90LlJFUVVFU1Q6dD10aGlzLmZiLmdyb3VwKHttZXRob2RGaWx0ZXI6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saHR0cE1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxyZXF1ZXN0VXJsRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybih0aGlzLnVybFBhdHRlcm4pXV0scmVzcG9uc2VUaW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdGltZW91dDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKDEwKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHRyaWVzOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxyZXF1ZXN0VmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5wYXR0ZXJuKGt0KV1dLGh0dHBIZWFkZXJzOnRoaXMuZmIuYXJyYXkoW10pfSk7YnJlYWs7ZGVmYXVsdDp0PXRoaXMuZmIuZ3JvdXAoe2NvbW1hbmQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFyYW1zOlt7fSxbSXRdXX0pfXJldHVybiB0fWFkZFNOTVBvaWQoZT1udWxsKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJvaWQiKTt0JiZ0LnB1c2godGhpcy5mYi5jb250cm9sKGUsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXSkse2VtaXRFdmVudDohMX0pfXJlbW92ZVNOTVBvaWQoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoIm9pZCIpLnJlbW92ZUF0KGUpfWFkZEhUVFBIZWFkZXIoZT17aGVhZGVyTmFtZTpudWxsLHZhbHVlOm51bGx9KXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJodHRwSGVhZGVycyIpLG49dGhpcy5mYi5ncm91cCh7aGVhZGVyTmFtZTpbZS5oZWFkZXJOYW1lLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlOltlLnZhbHVlLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7dCYmdC5wdXNoKG4se2VtaXRFdmVudDohMX0pfXJlbW92ZUhUVFBIZWFkZXIoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoImh0dHBIZWFkZXJzIikucmVtb3ZlQXQoZSl9Z2V0Rm9ybUFycmF5Q29udHJvbHMoZSl7cmV0dXJuIHRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpLmNvbnRyb2xzfW9wZW5FZGl0SlNPTkRpYWxvZyhlKXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlhbG9nLm9wZW4oUWUse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntqc29uVmFsdWU6dGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnZhbHVlLHJlcXVpcmVkOiEwfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnNldFZhbHVlKGUpfSkpfXNhdmUoKXt0aGlzLnNhdmVUZW1wbGF0ZS5lbWl0KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe31jbGVhckZyb21BcnJheUJ5TmFtZShlKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpO2Zvcig7MCE9PXQubGVuZ3RoOyl0LnJlbW92ZUF0KDApfXdyaXRlVmFsdWUoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtzd2l0Y2goZT1KKGUpLHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5TTk1QOnRoaXMuY2xlYXJGcm9tQXJyYXlCeU5hbWUoIm9pZCIpLGUub2lkLmZvckVhY2goKGU9Pnt0aGlzLmFkZFNOTVBvaWQoZSl9KSksZGVsZXRlIGUub2lkO2JyZWFrO2Nhc2UgX3QuUkVRVUVTVDpjYXNlIF90LlJFU1Q6dGhpcy5jbGVhckZyb21BcnJheUJ5TmFtZSgiaHR0cEhlYWRlcnMiKSxlLmh0dHBIZWFkZXJzJiZPYmplY3QuZW50cmllcyhlLmh0dHBIZWFkZXJzKS5mb3JFYWNoKChlPT57dGhpcy5hZGRIVFRQSGVhZGVyKHtoZWFkZXJOYW1lOmVbMF0sdmFsdWU6ZVsxXX0pfSkpLGRlbGV0ZSBlLmh0dHBIZWFkZXJzfXRoaXMuY29tbWFuZEZvcm0ucGF0Y2hWYWx1ZShlLHtvbmx5U2VsZjohMX0pfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6e2Nvbm5lY3RvclR5cGU6ImNvbm5lY3RvclR5cGUifSxvdXRwdXRzOntzZW5kQ29tbWFuZDoic2VuZENvbW1hbmQiLHNhdmVUZW1wbGF0ZToic2F2ZVRlbXBsYXRlIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hEZWZhdWx0LHNlbGVjdG9yOiJbbmdTd2l0Y2hEZWZhdWx0XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WmUuVGJKc29uVG9TdHJpbmdEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi1qc29uLXRvLXN0cmluZ10ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnouTWF0RGl2aWRlcixzZWxlY3RvcjoibWF0LWRpdmlkZXIiLGlucHV0czpbInZlcnRpY2FsIiwiaW5zZXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4QWxpZ25dLCBbZnhGbGV4QWxpZ24ueHNdLCBbZnhGbGV4QWxpZ24uc21dLCBbZnhGbGV4QWxpZ24ubWRdLCAgW2Z4RmxleEFsaWduLmxnXSwgW2Z4RmxleEFsaWduLnhsXSwgW2Z4RmxleEFsaWduLmx0LXNtXSwgW2Z4RmxleEFsaWduLmx0LW1kXSwgIFtmeEZsZXhBbGlnbi5sdC1sZ10sIFtmeEZsZXhBbGlnbi5sdC14bF0sIFtmeEZsZXhBbGlnbi5ndC14c10sIFtmeEZsZXhBbGlnbi5ndC1zbV0sICBbZnhGbGV4QWxpZ24uZ3QtbWRdLCBbZnhGbGV4QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeEZsZXhBbGlnbiIsImZ4RmxleEFsaWduLnhzIiwiZnhGbGV4QWxpZ24uc20iLCJmeEZsZXhBbGlnbi5tZCIsImZ4RmxleEFsaWduLmxnIiwiZnhGbGV4QWxpZ24ueGwiLCJmeEZsZXhBbGlnbi5sdC1zbSIsImZ4RmxleEFsaWduLmx0LW1kIiwiZnhGbGV4QWxpZ24ubHQtbGciLCJmeEZsZXhBbGlnbi5sdC14bCIsImZ4RmxleEFsaWduLmd0LXhzIiwiZnhGbGV4QWxpZ24uZ3Qtc20iLCJmeEZsZXhBbGlnbi5ndC1tZCIsImZ4RmxleEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUFycmF5TmFtZSxzZWxlY3RvcjoiW2Zvcm1BcnJheU5hbWVdIixpbnB1dHM6WyJmb3JtQXJyYXlOYW1lIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6SWEsc2VsZWN0b3I6InRiLXJlc3QtY29ubmVjdG9yLXNlY3VyaXR5In0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U2VydmljZVJQQ0Nvbm5lY3RvckNvbXBvbmVudCIsQWEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6QWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5BYSkpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpKZS5NYXREaWFsb2d9XSxwcm9wRGVjb3JhdG9yczp7Y29ubmVjdG9yVHlwZTpbe3R5cGU6YX1dLHNlbmRDb21tYW5kOlt7dHlwZTpsfV0sc2F2ZVRlbXBsYXRlOlt7dHlwZTpsfV19fSk7Y2xhc3MgTmEgZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LGEpLHRoaXMuc3RvcmU9ZSx0aGlzLnJvdXRlcj10LHRoaXMuZGF0YT1uLHRoaXMuZGlhbG9nUmVmPWEsdGhpcy5mYj1vLHRoaXMuY29uZmlnPXRoaXMuZGF0YS5jb25maWcsdGhpcy50ZW1wbGF0ZXM9dGhpcy5kYXRhLnRlbXBsYXRlcyx0aGlzLnRlbXBsYXRlTmFtZUN0cmw9dGhpcy5mYi5jb250cm9sKCIiLFt1ZS5yZXF1aXJlZF0pfXZhbGlkYXRlRHVwbGljYXRlTmFtZShlKXtjb25zdCB0PWUudmFsdWUudHJpbSgpO3JldHVybiEhdGhpcy50ZW1wbGF0ZXMuZmluZCgoZT0+ZS5uYW1lPT09dCkpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1zYXZlKCl7dGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnNldFZhbHVlKHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWx1ZS50cmltKCkpLHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnZhbHVlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5hLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOk5hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10b29sYmFyIGNvbG9yPSJwcmltYXJ5Ij5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy5zYXZlLXRlbXBsYXRlPC9oMj5cbiAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbWF0LXRvb2xiYXI+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0id2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayB0Yi12YWx1ZS10eXBlIiBzdHlsZT0iZmxleC1ncm93OiAwIj5cbiAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lPC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09InRlbXBsYXRlTmFtZUN0cmwiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0idGVtcGxhdGVOYW1lQ3RybC5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxkaXYgY2xhc3M9Im1hdC1tZGMtZm9ybS1maWVsZC1lcnJvciJcbiAgICAgICBzdHlsZT0ibWFyZ2luLXRvcDogLTE1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgZm9udC1zaXplOiAxNHB4OyJcbiAgICAgICAqbmdJZj0idmFsaWRhdGVEdXBsaWNhdGVOYW1lKHRlbXBsYXRlTmFtZUN0cmwpIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWUtZHVwbGljYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICA8YnV0dG9uIG1hdC1idXR0b25cbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICBbZGlzYWJsZWRdPSIhdGVtcGxhdGVOYW1lQ3RybC52YWxpZCJcbiAgICAgICAgICAoY2xpY2spPSJzYXZlKCkiPlxuICAgIHt7IFwnYWN0aW9uLnNhdmVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0FjdGlvbnMsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWFjdGlvbnNdLCBtYXQtZGlhbG9nLWFjdGlvbnMsIFttYXREaWFsb2dBY3Rpb25zXSIsaW5wdXRzOlsiYWxpZ24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dDb250ZW50LHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1jb250ZW50XSwgbWF0LWRpYWxvZy1jb250ZW50LCBbbWF0RGlhbG9nQ29udGVudF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb25uZWN0b3JUZW1wbGF0ZURpYWxvZ0NvbXBvbmVudCIsTmEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TmEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlLWRpYWxvZyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICA8aDIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnNhdmUtdGVtcGxhdGU8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJ3aWR0aDogNjAwcHgiIGNsYXNzPSJtYXQtY29udGVudCIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIHRiLXZhbHVlLXR5cGUiIHN0eWxlPSJmbGV4LWdyb3c6IDAiPlxuICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0idGVtcGxhdGVOYW1lQ3RybCIgcmVxdWlyZWQvPlxuICAgIDxtYXQtZXJyb3JcbiAgICAgICpuZ0lmPSJ0ZW1wbGF0ZU5hbWVDdHJsLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPGRpdiBjbGFzcz0ibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yIlxuICAgICAgIHN0eWxlPSJtYXJnaW4tdG9wOiAtMTVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDE0cHg7IlxuICAgICAgICpuZ0lmPSJ2YWxpZGF0ZUR1cGxpY2F0ZU5hbWUodGVtcGxhdGVOYW1lQ3RybCkiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1kdXBsaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIj5cbiAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgIFtkaXNhYmxlZF09IiF0ZW1wbGF0ZU5hbWVDdHJsLnZhbGlkIlxuICAgICAgICAgIChjbGljayk9InNhdmUoKSI+XG4gICAge3sgXCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBNYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKEduKSx0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy52YWx1ZVR5cGVzPVZuLHRoaXMub25DaGFuZ2U9ZT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXJndW1lbnRzOnRoaXMuZmIuYXJyYXkoW10pfSksdGhpcy5vYnNlcnZlVmFsdWVDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuY2xlYXJBcmd1bWVudHMoKSxlLmFyZ3VtZW50cz8ubWFwKCgoe3R5cGU6ZSx2YWx1ZTp0fSk9Pih7dHlwZTplLFtlXTp0fSkpKS5mb3JFYWNoKChlPT50aGlzLmFkZEFyZ3VtZW50KGUpKSksdGhpcy5jZHIubWFya0ZvckNoZWNrKCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlLm1ldGhvZCl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmFyZ3VtZW50cy5tYXAoKCh7dHlwZTplLC4uLnR9KT0+KHt0eXBlOmUsdmFsdWU6dFtlXX0pKSk7dGhpcy5vbkNoYW5nZSh7bWV0aG9kOmUubWV0aG9kLGFyZ3VtZW50czp0fSksdGhpcy5vblRvdWNoZWQoKX0pKX1yZW1vdmVBcmd1bWVudChlKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJhcmd1bWVudHMiKS5yZW1vdmVBdChlKX1hZGRBcmd1bWVudChlPXt9KXtjb25zdCB0PXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2UudHlwZT8/R24uU1RSSU5HXSxzdHJpbmc6W2Uuc3RyaW5nPz97dmFsdWU6IiIsZGlzYWJsZWQ6IShlZShlLHt9KXx8ZS5zdHJpbmcpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6ZS5pbnRlZ2VyPz8wLGRpc2FibGVkOiFpZShlLmludGVnZXIpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihMdCldXSxkb3VibGU6W3t2YWx1ZTplLmRvdWJsZT8/MCxkaXNhYmxlZDohaWUoZS5kb3VibGUpfSxbdWUucmVxdWlyZWRdXSxib29sZWFuOlt7dmFsdWU6ZS5ib29sZWFuPz8hMSxkaXNhYmxlZDohaWUoZS5ib29sZWFuKX0sW3VlLnJlcXVpcmVkXV19KTt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKHQpLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpLnB1c2godCx7ZW1pdEV2ZW50OiExfSl9Y2xlYXJBcmd1bWVudHMoKXtjb25zdCBlPXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpO2Zvcig7MCE9PWUubGVuZ3RoOyllLnJlbW92ZUF0KDApfW9ic2VydmVUeXBlQ2hhbmdlKGUpe2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e2UuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoInR5cGUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KHQpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpNYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpNYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+TWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCB0Yi1mbGV4IG5vLXBhZGRpbmctdG9wIGhpbnQtY29udGFpbmVyIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLmhpbnQub3BjLW1ldGhvZFwnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Im11bHRpcGx5Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxmaWVsZHNldCBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIGFyZ3VtZW50cy1jb250YWluZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZvcm1BcnJheU5hbWU9ImFyZ3VtZW50cyI+XG4gICAgPHN0cm9uZz5cbiAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9zdHJvbmc+XG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAqbmdGb3I9ImxldCBhcmd1bWVudEZvcm1Hcm91cCBvZiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FyZ3VtZW50c1wnKVtcJ2NvbnRyb2xzXCddOyBsZXQgaSA9IGluZGV4IiBbZm9ybUdyb3VwXT0iYXJndW1lbnRGb3JtR3JvdXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIHR5cGUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTE4IiBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHZhbHVlVHlwZSBvZiB2YWx1ZVR5cGVLZXlzIiBbdmFsdWVdPSJ2YWx1ZVR5cGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB2YWx1ZS1jb250YWluZXIiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuU1RSSU5HIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9InN0cmluZyJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLkRPVUJMRSIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJkb3VibGUiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5CT09MRUFOIiBmb3JtQ29udHJvbE5hbWU9ImJvb2xlYW4iPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJ0cnVlIj50cnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVBcmd1bWVudChpKSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgIChjbGljayk9ImFkZEFyZ3VtZW50KCkiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy5hZGQtYXJndW1lbnRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2ZpZWxkc2V0PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuYXJndW1lbnRzLWNvbnRhaW5lcnttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnR5cGUtY29udGFpbmVye3dpZHRoOjQwJX06aG9zdCAudmFsdWUtY29udGFpbmVye3dpZHRoOjUwJX06aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp3ZS5NYXRTZWxlY3RUcmlnZ2VyLHNlbGVjdG9yOiJtYXQtc2VsZWN0LXRyaWdnZXIifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEdhcERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRHYXBdLCBbZnhMYXlvdXRHYXAueHNdLCBbZnhMYXlvdXRHYXAuc21dLCBbZnhMYXlvdXRHYXAubWRdLCAgW2Z4TGF5b3V0R2FwLmxnXSwgW2Z4TGF5b3V0R2FwLnhsXSwgW2Z4TGF5b3V0R2FwLmx0LXNtXSwgW2Z4TGF5b3V0R2FwLmx0LW1kXSwgIFtmeExheW91dEdhcC5sdC1sZ10sIFtmeExheW91dEdhcC5sdC14bF0sIFtmeExheW91dEdhcC5ndC14c10sIFtmeExheW91dEdhcC5ndC1zbV0sICBbZnhMYXlvdXRHYXAuZ3QtbWRdLCBbZnhMYXlvdXRHYXAuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEdhcCIsImZ4TGF5b3V0R2FwLnhzIiwiZnhMYXlvdXRHYXAuc20iLCJmeExheW91dEdhcC5tZCIsImZ4TGF5b3V0R2FwLmxnIiwiZnhMYXlvdXRHYXAueGwiLCJmeExheW91dEdhcC5sdC1zbSIsImZ4TGF5b3V0R2FwLmx0LW1kIiwiZnhMYXlvdXRHYXAubHQtbGciLCJmeExheW91dEdhcC5sdC14bCIsImZ4TGF5b3V0R2FwLmd0LXhzIiwiZnhMYXlvdXRHYXAuZ3Qtc20iLCJmeExheW91dEdhcC5ndC1tZCIsImZ4TGF5b3V0R2FwLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhBbGlnbl0sIFtmeEZsZXhBbGlnbi54c10sIFtmeEZsZXhBbGlnbi5zbV0sIFtmeEZsZXhBbGlnbi5tZF0sICBbZnhGbGV4QWxpZ24ubGddLCBbZnhGbGV4QWxpZ24ueGxdLCBbZnhGbGV4QWxpZ24ubHQtc21dLCBbZnhGbGV4QWxpZ24ubHQtbWRdLCAgW2Z4RmxleEFsaWduLmx0LWxnXSwgW2Z4RmxleEFsaWduLmx0LXhsXSwgW2Z4RmxleEFsaWduLmd0LXhzXSwgW2Z4RmxleEFsaWduLmd0LXNtXSwgIFtmeEZsZXhBbGlnbi5ndC1tZF0sIFtmeEZsZXhBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4RmxleEFsaWduIiwiZnhGbGV4QWxpZ24ueHMiLCJmeEZsZXhBbGlnbi5zbSIsImZ4RmxleEFsaWduLm1kIiwiZnhGbGV4QWxpZ24ubGciLCJmeEZsZXhBbGlnbi54bCIsImZ4RmxleEFsaWduLmx0LXNtIiwiZnhGbGV4QWxpZ24ubHQtbWQiLCJmeEZsZXhBbGlnbi5sdC1sZyIsImZ4RmxleEFsaWduLmx0LXhsIiwiZnhGbGV4QWxpZ24uZ3QteHMiLCJmeEZsZXhBbGlnbi5ndC1zbSIsImZ4RmxleEFsaWduLmd0LW1kIiwiZnhGbGV4QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1BcnJheU5hbWUsc2VsZWN0b3I6Iltmb3JtQXJyYXlOYW1lXSIsaW5wdXRzOlsiZm9ybUFycmF5TmFtZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk1hLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk1hKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm9wYy1tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJtdWx0aXBseSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8ZmllbGRzZXQgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBhcmd1bWVudHMtY29udGFpbmVyIiBmeExheW91dD0iY29sdW1uIiBmb3JtQXJyYXlOYW1lPSJhcmd1bWVudHMiPlxuICAgIDxzdHJvbmc+XG4gICAgICA8c3BhbiBjbGFzcz0iZmllbGRzLWxhYmVsIj57eyBcJ2dhdGV3YXkucnBjLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvc3Ryb25nPlxuICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgKm5nRm9yPSJsZXQgYXJndW1lbnRGb3JtR3JvdXAgb2YgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhcmd1bWVudHNcJylbXCdjb250cm9sc1wnXTsgbGV0IGkgPSBpbmRleCIgW2Zvcm1Hcm91cF09ImFyZ3VtZW50Rm9ybUdyb3VwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB0eXBlLWNvbnRhaW5lciIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdmFsdWUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLklOVEVHRVIiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iaW50ZWdlciIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5ET1VCTEUiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iZG91YmxlIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0idHJ1ZSI+dHJ1ZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iZmFsc2UiPmZhbHNlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXJndW1lbnRGb3JtR3JvdXAuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQXJndW1lbnQoaSkiXG4gICAgICAgICAgICAgIGNsYXNzPSJ0Yi1ib3gtYnV0dG9uIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICBmeEZsZXhBbGlnbj0ic3RhcnQiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGRBcmd1bWVudCgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWFyZ3VtZW50XCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9maWVsZHNldD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFyZ3VtZW50cy1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC50eXBlLWNvbnRhaW5lcnt3aWR0aDo0MCV9Omhvc3QgLnZhbHVlLWNvbnRhaW5lcnt3aWR0aDo1MCV9Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyBFYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5vbkNoYW5nZT1lPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXF1ZXN0VG9waWNFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVG9waWNFeHByZXNzaW9uOlt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUaW1lb3V0Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLm1pbigxMCksdWUucGF0dGVybihMdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVXaXRoUmVzcG9uc2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWxpZD9udWxsOntycGNQYXJhbWV0ZXJzRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlLndpdGhSZXNwb25zZSl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW9ic2VydmVXaXRoUmVzcG9uc2UoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ3aXRoUmVzcG9uc2UiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+dGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX10b2dnbGVSZXNwb25zZUZpZWxkcyhlKXtjb25zdCB0PXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInJlc3BvbnNlVG9waWNFeHByZXNzaW9uIiksbj10aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKTtlPyh0LmVuYWJsZSgpLG4uZW5hYmxlKCkpOih0LmRpc2FibGUoKSxuLmRpc2FibGUoKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+RWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXF1ZXN0LyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXJnaW4iIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSIgZm9ybUNvbnRyb2xOYW1lPSJ3aXRoUmVzcG9uc2UiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMud2l0aFJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9InNlbnNvci8ke2RldmljZU5hbWV9L3Jlc3BvbnNlLyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd3aXRoUmVzcG9uc2VcJyk/LnZhbHVlIj5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VUaW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9IjEwMDAwIiBtaW49IjEwIiBzdGVwPSIxIi8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAubWF0LW1kYy1zbGlkZS10b2dnbGUubWFyZ2lue21hcmdpbi1ib3R0b206MTBweDttYXJnaW4tbGVmdDoxMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkVhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9ImVjaG8iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0ic2Vuc29yLyR7ZGV2aWNlTmFtZX0vcmVxdWVzdC8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWFyZ2luIiAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3dpdGhSZXNwb25zZVwnKT8udmFsdWUiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXNwb25zZS8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIxMDAwMCIgbWluPSIxMCIgc3RlcD0iMSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L25nLWNvbnRhaW5lcj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBxYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNFZGl0YWJsZURhdGFUeXBlcz10YSx0aGlzLk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcD16dCx0aGlzLm1vZGJ1c0RhdGFUeXBlcz1PYmplY3QudmFsdWVzKGVhKSx0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcz1bNSw2LDE1LDE2XSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVszLDQsNiwxNl0sdGhpcy5yZWFkRnVuY3Rpb25Db2Rlcz1bMSwyLDMsNF0sdGhpcy5iaXRzRnVuY3Rpb25Db2Rlcz1bLi4udGhpcy5yZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLndyaXRlRnVuY3Rpb25Db2Rlc10sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2VhLkJZVEVTLFt1ZS5yZXF1aXJlZF1dLGZ1bmN0aW9uQ29kZTpbdGhpcy5kZWZhdWx0RnVuY3Rpb25Db2Rlc1swXSxbdWUucmVxdWlyZWRdXSx2YWx1ZTpbe3ZhbHVlOiIiLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxhZGRyZXNzOltudWxsLFt1ZS5yZXF1aXJlZF1dLG9iamVjdHNDb3VudDpbMSxbdWUucmVxdWlyZWRdXX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2Rlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWUpLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpLHRoaXMub2JzZXJ2ZUtleURhdGFUeXBlKCksdGhpcy5vYnNlcnZlRnVuY3Rpb25Db2RlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlS2V5RGF0YVR5cGUoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoIm9iamVjdHNDb3VudCIpLnBhdGNoVmFsdWUobmFbZV0se2VtaXRFdmVudDohMX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlKX0pKX1vYnNlcnZlRnVuY3Rpb25Db2RlKCl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgiZnVuY3Rpb25Db2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWx1ZUVuYWJsaW5nKGUpKSl9dXBkYXRlVmFsdWVFbmFibGluZyhlKXt0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyhlKT90aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ2YWx1ZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6KHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInZhbHVlIikuc2V0VmFsdWUobnVsbCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgidmFsdWUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSl9dXBkYXRlRnVuY3Rpb25Db2RlcyhlKXt0aGlzLmZ1bmN0aW9uQ29kZXM9ZT09PWVhLkJJVFM/dGhpcy5iaXRzRnVuY3Rpb25Db2Rlczp0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzLHRoaXMuZnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJmdW5jdGlvbkNvZGUiKS52YWx1ZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUodGhpcy5mdW5jdGlvbkNvZGVzWzBdLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cWEsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnFhKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy1yZXNwb25zZS1yZWFkaW5nXCcgfCB0cmFuc2xhdGUgfX08YnI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9uc1wnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNEYXRhVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IHR5cGUgfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZnVuY3Rpb25Db2RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29kZSBvZiBmdW5jdGlvbkNvZGVzIiBbdmFsdWVdPSJjb2RlIj57eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iNTAwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImFkZHJlc3MiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYWRkcmVzcy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FkZHJlc3NcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm9iamVjdHNDb3VudFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICBtaW49IjEiXG4gICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJ3cml0ZUZ1bmN0aW9uQ29kZXMuaW5jbHVkZXMocnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdmdW5jdGlvbkNvZGVcJykudmFsdWUpIiBmeEZsZXggZnhMYXlvdXQ9InJvdyI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMTAwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndmFsdWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIlxuICAgICAgPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5xYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggbm8tcGFkZGluZy10b3AgaGludC1jb250YWluZXIiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtcmVzcG9uc2UtcmVhZGluZ1wnIHwgdHJhbnNsYXRlIH19PGJyPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtd3JpdGluZy1mdW5jdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzRGF0YVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyB0eXBlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmZ1bmN0aW9uQ29kZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImZ1bmN0aW9uQ29kZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvZGUgb2YgZnVuY3Rpb25Db2RlcyIgW3ZhbHVlXT0iY29kZSI+e3sgTW9kYnVzRnVuY3Rpb25Db2RlVHJhbnNsYXRpb25zTWFwLmdldChjb2RlKSB8IHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjUwMDAwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJhZGRyZXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmFkZHJlc3MtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnYWRkcmVzc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5vYmplY3RzQ291bnRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9Im51bWJlciJcbiAgICAgICAgbWluPSIxIlxuICAgICAgICBtYXg9IjUwMDAwIlxuICAgICAgICBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJvYmplY3RzQ291bnQiXG4gICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgIFtyZWFkb25seV09IiFNb2RidXNFZGl0YWJsZURhdGFUeXBlcy5pbmNsdWRlcyhycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpIlxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0id3JpdGVGdW5jdGlvbkNvZGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnZnVuY3Rpb25Db2RlXCcpLnZhbHVlKSIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjEwMCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciJcbiAgICAgID5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBEYXtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMudXRpbHM9bix0aGlzLmNkPWEsdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPW8sdGhpcy5jb250ZW50VHlwZXM9Ryx0aGlzLlJQQ0NvbW1hbmRzPVsiUGluZyIsIlN0YXRzIiwiRGV2aWNlcyIsIlVwZGF0ZSIsIlZlcnNpb24iLCJSZXN0YXJ0IiwiUmVib290Il0sdGhpcy50ZW1wbGF0ZXM9W10sdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy50eXBlc1dpdGhVcGRhdGVkUGFyYW1zPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVUZW1wbGF0ZXMoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpLGRhdGFMb2FkaW5nOigpPT57fX19LHRoaXMuY29tbWFuZEZvcm09dGhpcy5mYi5ncm91cCh7Y29tbWFuZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx0aW1lOls2MCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV0scGFyYW1zOlsie30iLFtJdF1dLHJlc3VsdDpbbnVsbF19KX1uZ09uSW5pdCgpe2lmKHRoaXMuaXNDb25uZWN0b3I9dGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3IsdGhpcy5pc0Nvbm5lY3Rvcil7dGhpcy5jb25uZWN0b3JUeXBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpLmNvbm5lY3Rvcl9ycGMudmFsdWUudHlwZTtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udGFyZ2V0RGV2aWNlSWQsZW50aXR5TmFtZToiQ29ubmVjdG9yIixhdHRyaWJ1dGVzOlt7bmFtZTpgJHt0aGlzLmNvbm5lY3RvclR5cGV9X3RlbXBsYXRlYH1dfV07dGhpcy5jdHguc3Vic2NyaXB0aW9uQXBpLmNyZWF0ZVN1YnNjcmlwdGlvbkZyb21JbmZvKEEubGF0ZXN0LGUsdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zLCExLCEwKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnN1YnNjcmlwdGlvbj1lfSkpfWVsc2UgdGhpcy5jb21tYW5kRm9ybS5nZXQoImNvbW1hbmQiKS5zZXRWYWx1ZSh0aGlzLlJQQ0NvbW1hbmRzWzBdKX1zZW5kQ29tbWFuZChlKXt0aGlzLnJlc3VsdFRpbWU9bnVsbDtjb25zdCB0PWV8fHRoaXMuY29tbWFuZEZvcm0udmFsdWUsbj10aGlzLmlzQ29ubmVjdG9yP2Ake3RoaXMuY29ubmVjdG9yVHlwZX1fYDoiZ2F0ZXdheV8iLGE9dGhpcy5pc0Nvbm5lY3Rvcj90aGlzLmdldENvbW1hbmRGcm9tUGFyYW1zQnlUeXBlKHQucGFyYW1zKTp0LmNvbW1hbmQudG9Mb3dlckNhc2UoKSxvPXQucGFyYW1zO3RoaXMuY3R4LmNvbnRyb2xBcGkuc2VuZFR3b1dheUNvbW1hbmQobithLG8sdC50aW1lKS5zdWJzY3JpYmUoe25leHQ6ZT0+e3RoaXMucmVzdWx0VGltZT0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLmNvbW1hbmRGb3JtLmdldCgicmVzdWx0Iikuc2V0VmFsdWUoSlNPTi5zdHJpbmdpZnkoZSkpfSxlcnJvcjplPT57dGhpcy5yZXN1bHRUaW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGNvbnNvbGUuZXJyb3IoZSksdGhpcy5jb21tYW5kRm9ybS5nZXQoInJlc3VsdCIpLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGUuZXJyb3IpKX19KX1nZXRDb21tYW5kRnJvbVBhcmFtc0J5VHlwZShlKXtzd2l0Y2godGhpcy5jb25uZWN0b3JUeXBlKXtjYXNlIF90Lk1RVFQ6Y2FzZSBfdC5GVFA6Y2FzZSBfdC5TTk1QOmNhc2UgX3QuUkVTVDpjYXNlIF90LlJFUVVFU1Q6cmV0dXJuIGUubWV0aG9kRmlsdGVyO2Nhc2UgX3QuTU9EQlVTOnJldHVybiBlLnRhZztjYXNlIF90LkJBQ05FVDpjYXNlIF90LkNBTjpjYXNlIF90Lk9QQ1VBOnJldHVybiBlLm1ldGhvZDtjYXNlIF90LkJMRTpjYXNlIF90Lk9DUFA6Y2FzZSBfdC5TT0NLRVQ6Y2FzZSBfdC5YTVBQOnJldHVybiBlLm1ldGhvZFJQQztkZWZhdWx0OnJldHVybiBlLmNvbW1hbmR9fXNhdmVUZW1wbGF0ZSgpe3RoaXMuZGlhbG9nLm9wZW4oTmEse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntjb25maWc6dGhpcy5jb21tYW5kRm9ybS52YWx1ZS5wYXJhbXMsdGVtcGxhdGVzOnRoaXMudGVtcGxhdGVzfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57aWYoZSl7Y29uc3QgdD17bmFtZTplLGNvbmZpZzp0aGlzLmNvbW1hbmRGb3JtLnZhbHVlLnBhcmFtc30sbj10aGlzLnRlbXBsYXRlcyxhPW4uZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO2E+LTEmJm4uc3BsaWNlKGEsMSksbi5wdXNoKHQpO2NvbnN0IG89YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5Om8sdmFsdWU6bn1dKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9fSkpfXVzZVRlbXBsYXRlKGUpe3RoaXMuY29tbWFuZEZvcm0uZ2V0KCJwYXJhbXMiKS5wYXRjaFZhbHVlKGUuY29uZmlnKX11cGRhdGVUZW1wbGF0ZXMoKXt0aGlzLnRlbXBsYXRlcz10aGlzLnN1YnNjcmlwdGlvbi5kYXRhWzBdLmRhdGFbMF1bMV0ubGVuZ3RoP0pTT04ucGFyc2UodGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhWzBdWzFdKTpbXSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVFcnJvcihlKXtjb25zdCB0PXRoaXMudXRpbHMucGFyc2VFeGNlcHRpb24oZSk7bGV0IG49dC5uYW1lO3QubWVzc2FnZSYmKG4rPSI6ICIrdC5tZXNzYWdlKSxjb25zb2xlLmVycm9yKG4pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RGEsZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpEYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBmeExheW91dD0iY29sdW1uIiBmeEZsZXggW25nQ2xhc3NdPSJ7XCdib3JkZXJcJzogaXNDb25uZWN0b3J9Ij5cbiAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dC5sdC1zbT0iY29sdW1uIiBjbGFzcz0iY29tbWFuZC1mb3JtIiBmeExheW91dEdhcD0iMTBweCIgW2Zvcm1Hcm91cF09ImNvbW1hbmRGb3JtIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSIhaXNDb25uZWN0b3I7IGVsc2UgY29ubmVjdG9yRm9ybSI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29tbWFuZCBvZiBSUENDb21tYW5kcyIgW3ZhbHVlXT0iY29tbWFuZCI+XG4gICAgICAgICAgICB7eyBjb21tYW5kIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LW1zXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiLz5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZEZvcm0uZ2V0KFwndGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5pbnZhbGlkIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNlbmRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb25uZWN0b3JGb3JtPlxuICAgICAgPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yXG4gICAgICAgICpuZ0lmPSIhdHlwZXNXaXRoVXBkYXRlZFBhcmFtcy5oYXMoY29ubmVjdG9yVHlwZSkgZWxzZSB1cGRhdGVkUGFyYW1ldGVycyJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiXG4gICAgICAgIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSJcbiAgICAgICAgKHNlbmRDb21tYW5kKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgKHNhdmVUZW1wbGF0ZSk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgLz5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlZFBhcmFtZXRlcnM+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InJwYy1wYXJhbWV0ZXJzIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0Yi1mb3JtLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRpdGxlXCcgfCB0cmFuc2xhdGU6IHt0eXBlOiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlcy5nZXQoY29ubmVjdG9yVHlwZSl9IH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1xdHQtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NUVRUIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgICAgPHRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuT1BDVUEiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUtYWN0aW9ucyIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2F2ZVRlbXBsYXRlKCkiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmdldChcJ3BhcmFtc1wnKS5pbnZhbGlkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxzZWN0aW9uIGNsYXNzPSJyZXN1bHQtYmxvY2siIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPHNwYW4+e3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXJlc3VsdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8ZGl2ICpuZ0lmPSJyZXN1bHRUaW1lIiBjbGFzcz0icmVzdWx0LXRpbWUiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+c2NoZWR1bGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyByZXN1bHRUaW1lIHwgZGF0ZTogXCd5eXl5L01NL2RkIEhIOm1tOnNzXCcgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG4gICAgPHRiLWpzb24tY29udGVudCBbY29udGVudFR5cGVdPSJjb250ZW50VHlwZXMuSlNPTiIgcmVhZG9ubHk9InRydWUiIGZvcm1Db250cm9sTmFtZT0icmVzdWx0Ij48L3RiLWpzb24tY29udGVudD5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG48dGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIGZ4RmxleD0iMzAiICpuZ0lmPSJpc0Nvbm5lY3RvciIgY2xhc3M9ImJvcmRlciIgW3JwY1RlbXBsYXRlc109InRlbXBsYXRlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N0eF09ImN0eCIgW2Nvbm5lY3RvclR5cGVdPSJjb25uZWN0b3JUeXBlIiAodXNlVGVtcGxhdGUpPSJ1c2VUZW1wbGF0ZSgkZXZlbnQpIj5cbjwvdGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3BhZGRpbmc6MCA1cHh9Omhvc3Q+KntoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfTpob3N0PnRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlczpsYXN0LWNoaWxke21hcmdpbi1sZWZ0OjEwcHh9Omhvc3QgLmNvbW1hbmQtZm9ybXtmbGV4LXdyYXA6bm93cmFwO3BhZGRpbmc6MCA1cHggNXB4fTpob3N0IC5jb21tYW5kLWZvcm0+YnV0dG9ue21hcmdpbi10b3A6MTBweH06aG9zdCAucnBjLXBhcmFtZXRlcnN7d2lkdGg6MTAwJX06aG9zdCAucmVzdWx0LWJsb2Nre3BhZGRpbmc6MCA1cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFue2ZvbnQtd2VpZ2h0OjYwMDtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjI1cHg7ei1pbmRleDo1O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAucmVzdWx0LWJsb2NrPnNwYW4gLnJlc3VsdC10aW1lIHNwYW57cGFkZGluZy1sZWZ0OjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jayB0Yi1qc29uLWNvbnRlbnR7ZmxleDoxfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0NsYXNzLHNlbGVjdG9yOiJbbmdDbGFzc10iLGlucHV0czpbImNsYXNzIiwibmdDbGFzcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6c3QuSnNvbkNvbnRlbnRDb21wb25lbnQsc2VsZWN0b3I6InRiLWpzb24tY29udGVudCIsaW5wdXRzOlsibGFiZWwiLCJjb250ZW50VHlwZSIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwidGJQbGFjZWhvbGRlciIsImhpZGVUb29sYmFyIiwicmVhZG9ubHkiLCJ2YWxpZGF0ZUNvbnRlbnQiLCJ2YWxpZGF0ZU9uQ2hhbmdlIiwicmVxdWlyZWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOk1hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbW9kYnVzLXJwYy1wYXJhbWV0ZXJzIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIiwiY3R4IiwicnBjVGVtcGxhdGVzIl0sb3V0cHV0czpbInNhdmVUZW1wbGF0ZSIsInVzZVRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIl0sb3V0cHV0czpbInNlbmRDb21tYW5kIiwic2F2ZVRlbXBsYXRlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb21wb25lbnQiLERhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkRhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgZnhGbGV4IFtuZ0NsYXNzXT0ie1wnYm9yZGVyXCc6IGlzQ29ubmVjdG9yfSI+XG4gIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtc209ImNvbHVtbiIgY2xhc3M9ImNvbW1hbmQtZm9ybSIgZnhMYXlvdXRHYXA9IjEwcHgiIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIWlzQ29ubmVjdG9yOyBlbHNlIGNvbm5lY3RvckZvcm0iPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgUlBDQ29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQiPlxuICAgICAgICAgICAge3sgY29tbWFuZCB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1tc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InRpbWUiIHR5cGU9Im51bWJlciIgbWluPSIxIi8+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRGb3JtLmdldChcJ3RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29ubmVjdG9yRm9ybT5cbiAgICAgIDx0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3RvclxuICAgICAgICAqbmdJZj0iIXR5cGVzV2l0aFVwZGF0ZWRQYXJhbXMuaGFzKGNvbm5lY3RvclR5cGUpIGVsc2UgdXBkYXRlZFBhcmFtZXRlcnMiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIlxuICAgICAgICBbY29ubmVjdG9yVHlwZV09ImNvbm5lY3RvclR5cGUiXG4gICAgICAgIChzZW5kQ29tbWFuZCk9InNlbmRDb21tYW5kKCkiXG4gICAgICAgIChzYXZlVGVtcGxhdGUpPSJzYXZlVGVtcGxhdGUoKSJcbiAgICAgIC8+XG4gICAgICA8bmctdGVtcGxhdGUgI3VwZGF0ZWRQYXJhbWV0ZXJzPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJycGMtcGFyYW1ldGVycyI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGItZm9ybS1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50aXRsZVwnIHwgdHJhbnNsYXRlOiB7dHlwZTogZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXMuZ2V0KGNvbm5lY3RvclR5cGUpfSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NT0RCVVMiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRlbXBsYXRlLWFjdGlvbnMiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zYXZlLXRlbXBsYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uZ2V0KFwncGFyYW1zXCcpLmludmFsaWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8c2VjdGlvbiBjbGFzcz0icmVzdWx0LWJsb2NrIiBbZm9ybUdyb3VwXT0iY29tbWFuZEZvcm0iPlxuICAgIDxzcGFuPnt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1yZXN1bHRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPGRpdiAqbmdJZj0icmVzdWx0VGltZSIgY2xhc3M9InJlc3VsdC10aW1lIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnNjaGVkdWxlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgcmVzdWx0VGltZSB8IGRhdGU6IFwneXl5eS9NTS9kZCBISDptbTpzc1wnIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9zcGFuPlxuICAgIDx0Yi1qc29uLWNvbnRlbnQgW2NvbnRlbnRUeXBlXT0iY29udGVudFR5cGVzLkpTT04iIHJlYWRvbmx5PSJ0cnVlIiBmb3JtQ29udHJvbE5hbWU9InJlc3VsdCI+PC90Yi1qc29uLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcyBmeEZsZXg9IjMwIiAqbmdJZj0iaXNDb25uZWN0b3IiIGNsYXNzPSJib3JkZXIiIFtycGNUZW1wbGF0ZXNdPSJ0ZW1wbGF0ZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdHhdPSJjdHgiIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSIgKHVzZVRlbXBsYXRlKT0idXNlVGVtcGxhdGUoJGV2ZW50KSI+XG48L3RiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcz5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztwYWRkaW5nOjAgNXB4fTpob3N0Pip7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b306aG9zdD50Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXM6bGFzdC1jaGlsZHttYXJnaW4tbGVmdDoxMHB4fTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcDtwYWRkaW5nOjAgNXB4IDVweH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLnJwYy1wYXJhbWV0ZXJze3dpZHRoOjEwMCV9Omhvc3QgLnJlc3VsdC1ibG9ja3twYWRkaW5nOjAgNXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxfTpob3N0IC5yZXN1bHQtYmxvY2s+c3Bhbntmb250LXdlaWdodDo2MDA7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2s+c3BhbiAucmVzdWx0LXRpbWV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDoyNXB4O3otaW5kZXg6NTtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZSBzcGFue3BhZGRpbmctbGVmdDoxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2sgdGItanNvbi1jb250ZW50e2ZsZXg6MX06aG9zdCAuYm9yZGVye3BhZGRpbmc6MTZweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5VdGlsc1NlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTtjbGFzcyBQYSBleHRlbmRzIFB7Y29uc3RydWN0b3IoZSx0LG4sYSxvKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5nYXRld2F5TmFtZT10aGlzLmRhdGEuZ2F0ZXdheU5hbWUsdGhpcy5nYXRld2F5Q29udHJvbD10aGlzLmZiLmNvbnRyb2woIiIpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX10dXJuT2ZmKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoITApfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6UGEsc2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbicsZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fXZhciBHYTtlKCJHYXRld2F5UmVtb3RlQ29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCIsUGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pLGZ1bmN0aW9uKGUpe2UudGxzPSJ0bHMiLGUuYWNjZXNzVG9rZW49ImFjY2Vzc1Rva2VuIn0oR2F8fChHYT17fSkpO2NvbnN0IE9hPSJjb25maWd1cmF0aW9uX2RyYWZ0cyIsUmE9IlJlbW90ZUxvZ2dpbmdMZXZlbCIsVmE9bmV3IE1hcChbW0dhLnRscywiZ2F0ZXdheS5zZWN1cml0eS10eXBlcy50bHMiXSxbR2EuYWNjZXNzVG9rZW4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl1dKTt2YXIgQmEsVWE7IWZ1bmN0aW9uKGUpe2Uubm9uZT0iTk9ORSIsZS5jcml0aWNhbD0iQ1JJVElDQUwiLGUuZXJyb3I9IkVSUk9SIixlLndhcm5pbmc9IldBUk5JTkciLGUuaW5mbz0iSU5GTyIsZS5kZWJ1Zz0iREVCVUcifShCYXx8KEJhPXt9KSksZnVuY3Rpb24oZSl7ZS5tZW1vcnk9Im1lbW9yeSIsZS5maWxlPSJmaWxlIn0oVWF8fChVYT17fSkpO2NvbnN0IF9hPW5ldyBNYXAoW1tVYS5tZW1vcnksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtVYS5maWxlLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl1dKTt2YXIgSGE7IWZ1bmN0aW9uKGUpe2UubXF0dD0iTVFUVCIsZS5tb2RidXM9Ik1vZGJ1cyIsZS5vcGN1YT0iT1BDLVVBIixlLmJsZT0iQkxFIixlLnJlcXVlc3Q9IlJlcXVlc3QiLGUuY2FuPSJDQU4iLGUuYmFjbmV0PSJCQUNuZXQiLGUuY3VzdG9tPSJDdXN0b20ifShIYXx8KEhhPXt9KSk7Y29uc3QgemE9e2NvbmZpZzp7fSxuYW1lOiIiLGNvbmZpZ1R5cGU6bnVsbCxlbmFibGVkOiExfTtmdW5jdGlvbiBXYShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZS52YWx1ZSk9PT1KU09OLnN0cmluZ2lmeSh7fSk/e3ZhbGlkSlNPTjohMH06bnVsbH1jb25zdCBqYT0nW2xvZ2dlcnNdfX1rZXlzPXJvb3QsIHNlcnZpY2UsIGNvbm5lY3RvciwgY29udmVydGVyLCB0Yl9jb25uZWN0aW9uLCBzdG9yYWdlLCBleHRlbnNpb259fVtoYW5kbGVyc119fWtleXM9Y29uc29sZUhhbmRsZXIsIHNlcnZpY2VIYW5kbGVyLCBjb25uZWN0b3JIYW5kbGVyLCBjb252ZXJ0ZXJIYW5kbGVyLCB0Yl9jb25uZWN0aW9uSGFuZGxlciwgc3RvcmFnZUhhbmRsZXIsIGV4dGVuc2lvbkhhbmRsZXJ9fVtmb3JtYXR0ZXJzXX19a2V5cz1Mb2dGb3JtYXR0ZXJ9fVtsb2dnZXJfcm9vdF19fWxldmVsPUVSUk9SfX1oYW5kbGVycz1jb25zb2xlSGFuZGxlcn19W2xvZ2dlcl9jb25uZWN0b3JdfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz1jb25uZWN0b3JIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1jb25uZWN0b3J9fVtsb2dnZXJfc3RvcmFnZV19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPXN0b3JhZ2VIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1zdG9yYWdlfX1bbG9nZ2VyX3RiX2Nvbm5lY3Rpb25dfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz10Yl9jb25uZWN0aW9uSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9dGJfY29ubmVjdGlvbn19W2xvZ2dlcl9zZXJ2aWNlXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9c2VydmljZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPXNlcnZpY2V9fVtsb2dnZXJfY29udmVydGVyXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9Y29udmVydGVySGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9Y29udmVydGVyfX1bbG9nZ2VyX2V4dGVuc2lvbl19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPWNvbm5lY3RvckhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPWV4dGVuc2lvbn19W2hhbmRsZXJfY29uc29sZUhhbmRsZXJdfX1jbGFzcz1TdHJlYW1IYW5kbGVyfX1sZXZlbD17RVJST1J9fX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1hcmdzPShzeXMuc3Rkb3V0LCl9fVtoYW5kbGVyX2Nvbm5lY3RvckhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWNvbm5lY3Rvci5sb2ciLCAiZCIsIDEsIDcsKX19W2hhbmRsZXJfc3RvcmFnZUhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXN0b3JhZ2UubG9nIiwgImQiLCAxLCA3LCl9fVtoYW5kbGVyX3NlcnZpY2VIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31zZXJ2aWNlLmxvZyIsICJkIiwgMSwgNywpfX1baGFuZGxlcl9jb252ZXJ0ZXJIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31jb252ZXJ0ZXIubG9nIiwgImQiLCAxLCAzLCl9fVtoYW5kbGVyX2V4dGVuc2lvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWV4dGVuc2lvbi5sb2ciLCAiZCIsIDEsIDMsKX19W2hhbmRsZXJfdGJfY29ubmVjdGlvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXRiX2Nvbm5lY3Rpb24ubG9nIiwgImQiLCAxLCAzLCl9fVtmb3JtYXR0ZXJfTG9nRm9ybWF0dGVyXX19Zm9ybWF0PSIlKGFzY3RpbWUpcyAtICUobGV2ZWxuYW1lKXMgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiIH19ZGF0ZWZtdD0iJVktJW0tJWQgJUg6JU06JVMiJztmdW5jdGlvbiBLYShlKXtyZXR1cm4gZS5yZXBsYWNlKCJfIiwiIikucmVwbGFjZSgiLSIsIiIpLnJlcGxhY2UoL15ccyt8XHMrL2csIiIpLnRvTG93ZXJDYXNlKCkrIi5qc29uIn1mdW5jdGlvbiAkYShlLHQpe3JldHVybiBqYS5yZXBsYWNlKC97RVJST1J9L2csZSkucmVwbGFjZSgvey5cL2xvZ3NcL30vZyx0KX1mdW5jdGlvbiBZYShlKXtyZXR1cm57aWQ6ZSxlbnRpdHlUeXBlOkkuREVWSUNFfX1mdW5jdGlvbiBRYShlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwidGhpbmdzYm9hcmQiKSYmKHQuaG9zdD1lLnRoaW5nc2JvYXJkLmhvc3QsdC5wb3J0PWUudGhpbmdzYm9hcmQucG9ydCx0LnJlbW90ZUNvbmZpZ3VyYXRpb249ZS50aGluZ3Nib2FyZC5yZW1vdGVDb25maWd1cmF0aW9uLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnRoaW5nc2JvYXJkLnNlY3VyaXR5LEdhLmFjY2Vzc1Rva2VuKT8odC5zZWN1cml0eVR5cGU9R2EuYWNjZXNzVG9rZW4sdC5hY2Nlc3NUb2tlbj1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuKToodC5zZWN1cml0eVR5cGU9R2EudGxzLHQuY2FDZXJ0UGF0aD1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmNhQ2VydCx0LnByaXZhdGVLZXlQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkucHJpdmF0ZUtleSx0LmNlcnRQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkuY2VydCkpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJzdG9yYWdlIikmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnN0b3JhZ2UsInR5cGUiKSYmKGUuc3RvcmFnZS50eXBlPT09VWEubWVtb3J5Pyh0LnN0b3JhZ2VUeXBlPVVhLm1lbW9yeSx0LnJlYWRSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudCx0Lm1heFJlY29yZHNDb3VudD1lLnN0b3JhZ2UubWF4X3JlY29yZHNfY291bnQpOmUuc3RvcmFnZS50eXBlPT09VWEuZmlsZSYmKHQuc3RvcmFnZVR5cGU9VWEuZmlsZSx0LmRhdGFGb2xkZXJQYXRoPWUuc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoLHQubWF4RmlsZXNDb3VudD1lLnN0b3JhZ2UubWF4X2ZpbGVfY291bnQsdC5yZWFkUmVjb3Jkc0NvdW50PWUuc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnQsdC5tYXhSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50KSksdH1mdW5jdGlvbiBKYShlKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpbi5lbmFibGVkfHwodFtuLm5hbWVdPXtjb25uZWN0b3I6bi5jb25maWdUeXBlLGNvbmZpZzpuLmNvbmZpZ30pO3JldHVybiB0fWZ1bmN0aW9uIFhhKGUpe2NvbnN0IHQ9e3RoaW5nc2JvYXJkOlphKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KWlmKG4uZW5hYmxlZCl7Y29uc3QgdD1uLmNvbmZpZ1R5cGU7QXJyYXkuaXNBcnJheShlW3RdKXx8KGVbdF09W10pO2NvbnN0IGE9e25hbWU6bi5uYW1lLGNvbmZpZzpuLmNvbmZpZ307ZVt0XS5wdXNoKGEpfX0odCxlLmNvbm5lY3RvcnMpLHR9ZnVuY3Rpb24gWmEoZSl7bGV0IHQ7dD1lLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3thY2Nlc3NUb2tlbjplLmFjY2Vzc1Rva2VufTp7Y2FDZXJ0OmUuY2FDZXJ0UGF0aCxwcml2YXRlS2V5OmUucHJpdmF0ZUtleVBhdGgsY2VydDplLmNlcnRQYXRofTtjb25zdCBuPXtob3N0OmUuaG9zdCxyZW1vdGVDb25maWd1cmF0aW9uOmUucmVtb3RlQ29uZmlndXJhdGlvbixwb3J0OmUucG9ydCxzZWN1cml0eTp0fTtsZXQgYTthPWUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/e3R5cGU6VWEubWVtb3J5LHJlYWRfcmVjb3Jkc19jb3VudDplLnJlYWRSZWNvcmRzQ291bnQsbWF4X3JlY29yZHNfY291bnQ6ZS5tYXhSZWNvcmRzQ291bnR9Ont0eXBlOlVhLmZpbGUsZGF0YV9mb2xkZXJfcGF0aDplLmRhdGFGb2xkZXJQYXRoLG1heF9maWxlX2NvdW50OmUubWF4RmlsZXNDb3VudCxtYXhfcmVhZF9yZWNvcmRzX2NvdW50OmUucmVhZFJlY29yZHNDb3VudCxtYXhfcmVjb3Jkc19wZXJfZmlsZTplLm1heFJlY29yZHNDb3VudH07Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBvZiBlLmNvbm5lY3RvcnMpaWYodC5lbmFibGVkKXtjb25zdCBlPXtjb25maWd1cmF0aW9uOkthKHQubmFtZSksbmFtZTp0Lm5hbWUsdHlwZTp0LmNvbmZpZ1R5cGV9O28ucHVzaChlKX1yZXR1cm57dGhpbmdzYm9hcmQ6bixjb25uZWN0b3JzOm8sc3RvcmFnZTphLGxvZ3M6d2luZG93LmJ0b2EoJGEoZS5yZW1vdGVMb2dnaW5nTGV2ZWwsZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncykpfX1jbGFzcyBlbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5lbGVtZW50UmVmPXQsdGhpcy51dGlscz1uLHRoaXMubmdab25lPWEsdGhpcy5mYj1vLHRoaXMud2luZG93PWksdGhpcy5kaWFsb2c9cix0aGlzLnRyYW5zbGF0ZT1zLHRoaXMuZGV2aWNlU2VydmljZT1sLHRoaXMuYXR0cmlidXRlU2VydmljZT1jLHRoaXMuaW1wb3J0RXhwb3J0PXAsdGhpcy5hbGlnbm1lbnQ9InJvdyIsdGhpcy5sYXlvdXRHYXA9IjVweCIsdGhpcy5zZWN1cml0eVR5cGVzPVZhLHRoaXMuZ2F0ZXdheUxvZ0xldmVscz1PYmplY3Qua2V5cyhCYSkubWFwKChlPT5CYVtlXSkpLHRoaXMuY29ubmVjdG9yVHlwZXM9T2JqZWN0LmtleXMoSGEpLHRoaXMuc3RvcmFnZVR5cGVzPV9hLHRoaXMudG9hc3RUYXJnZXRJZD0iZ2F0ZXdheS1jb25maWd1cmF0aW9uLXdpZGdldCIrdGhpcy51dGlscy5ndWlkKCksdGhpcy5pc1JlYWRPbmx5Rm9ybT0hMX1nZXQgY29ubmVjdG9ycygpe3JldHVybiB0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KCJjb25uZWN0b3JzIil9bmdPbkluaXQoKXt0aGlzLmluaXRXaWRnZXRTZXR0aW5ncyh0aGlzLmN0eC5zZXR0aW5ncyksdGhpcy5jdHguZGF0YXNvdXJjZXMmJnRoaXMuY3R4LmRhdGFzb3VyY2VzLmxlbmd0aCYmKHRoaXMuZGV2aWNlTmFtZUZvcm09dGhpcy5jdHguZGF0YXNvdXJjZXNbMF0ubmFtZSksdGhpcy5idWlsZEZvcm0oKSx0aGlzLmN0eC51cGRhdGVXaWRnZXRQYXJhbXMoKSx0aGlzLmZvcm1SZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuZm9ybVJlc2l6ZSQub2JzZXJ2ZSh0aGlzLmZvcm1Db250YWluZXJSZWYubmF0aXZlRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1SZXNpemUkJiZ0aGlzLmZvcm1SZXNpemUkLmRpc2Nvbm5lY3QoKSx0aGlzLnN1YnNjcmliZUdhdGV3YXkkLnVuc3Vic2NyaWJlKCksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQudW5zdWJzY3JpYmUoKX1pbml0V2lkZ2V0U2V0dGluZ3MoZSl7bGV0IHQ7dD1lLmdhdGV3YXlUaXRsZSYmZS5nYXRld2F5VGl0bGUubGVuZ3RoP3RoaXMudXRpbHMuY3VzdG9tVHJhbnNsYXRpb24oZS5nYXRld2F5VGl0bGUsZS5nYXRld2F5VGl0bGUpOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuZ2F0ZXdheSIpLHRoaXMuY3R4LndpZGdldFRpdGxlPXQsdGhpcy5pc1JlYWRPbmx5Rm9ybT0hIWUucmVhZE9ubHkmJmUucmVhZE9ubHksdGhpcy5hcmNoaXZlRmlsZU5hbWU9ZS5hcmNoaXZlRmlsZU5hbWU/Lmxlbmd0aD9lLmFyY2hpdmVGaWxlTmFtZToiZ2F0ZXdheUNvbmZpZ3VyYXRpb24iLHRoaXMuZ2F0ZXdheVR5cGU9ZS5nYXRld2F5VHlwZT8ubGVuZ3RoP2UuZ2F0ZXdheVR5cGU6IkdhdGV3YXkiLHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHM9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLmdhdGV3YXlOYW1lRXhpc3RzLGUuZ2F0ZXdheU5hbWVFeGlzdHMpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktZXhpc3RzIiksdGhpcy5zdWNjZXNzZnVsU2F2ZWQ9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLnN1Y2Nlc3NmdWxTYXZlLGUuc3VjY2Vzc2Z1bFNhdmUpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktc2F2ZWQiKSx0aGlzLnVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKX1yZXNpemUoKXt0aGlzLm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVXaWRnZXREaXNwbGF5aW5nKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpfXVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKXt0aGlzLmN0eC4kY29udGFpbmVyJiZ0aGlzLmN0eC4kY29udGFpbmVyWzBdLm9mZnNldFdpZHRoPD00MjU/KHRoaXMubGF5b3V0R2FwPSIwIix0aGlzLmFsaWdubWVudD0iY29sdW1uIik6KHRoaXMubGF5b3V0R2FwPSI1cHgiLHRoaXMuYWxpZ25tZW50PSJyb3ciKX1zYXZlQXR0cmlidXRlKGUsdCxuKXtjb25zdCBhPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoImdhdGV3YXkiKS52YWx1ZSxvPXtrZXk6ZSx2YWx1ZTp0fTtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKFlhKGEpLG4sW29dKX1jcmVhdGVDb25uZWN0b3IoZT16YSl7dGhpcy5jb25uZWN0b3JzLnB1c2godGhpcy5mYi5ncm91cCh7ZW5hYmxlZDpbZS5lbmFibGVkXSxjb25maWdUeXBlOltlLmNvbmZpZ1R5cGUsW3VlLnJlcXVpcmVkXV0sbmFtZTpbZS5uYW1lLFt1ZS5yZXF1aXJlZF1dLGNvbmZpZzpbZS5jb25maWcsW3VlLm51bGxWYWxpZGF0b3IsV2FdXX0pKX1nZXRGb3JtRmllbGQoZSl7cmV0dXJuIHRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoZSl9YnVpbGRGb3JtKCl7dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwPXRoaXMuZmIuZ3JvdXAoe2dhdGV3YXk6W251bGwsW11dLGFjY2Vzc1Rva2VuOltudWxsLFt1ZS5yZXF1aXJlZF1dLHNlY3VyaXR5VHlwZTpbR2EuYWNjZXNzVG9rZW5dLGhvc3Q6W3RoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFt1ZS5yZXF1aXJlZF1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZUNvbmZpZ3VyYXRpb246WyEwXSxjYUNlcnRQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L2NhLnBlbSJdLHByaXZhdGVLZXlQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L3ByaXZhdGVLZXkucGVtIl0sY2VydFBhdGg6WyIvZXRjL3RoaW5nc2JvYXJkLWdhdGV3YXkvY2VydGlmaWNhdGUucGVtIl0scmVtb3RlTG9nZ2luZ0xldmVsOltCYS5kZWJ1Z10scmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3M6WyIuL2xvZ3MvIixbdWUucmVxdWlyZWRdXSxzdG9yYWdlVHlwZTpbVWEubWVtb3J5XSxyZWFkUmVjb3Jkc0NvdW50OlsxMDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhSZWNvcmRzQ291bnQ6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heEZpbGVzQ291bnQ6WzUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhRm9sZGVyUGF0aDpbIi4vZGF0YS8iLFt1ZS5yZXF1aXJlZF1dLGNvbm5lY3RvcnM6dGhpcy5mYi5hcnJheShbXSl9KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQ9dGhpcy5nZXRGb3JtRmllbGQoInN0b3JhZ2VUeXBlIikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2U9PT1VYS5tZW1vcnk/KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZGlzYWJsZSgpLHRoaXMuZ2V0Rm9ybUZpZWxkKCJkYXRhRm9sZGVyUGF0aCIpLmRpc2FibGUoKSk6KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZW5hYmxlKCksdGhpcy5nZXRGb3JtRmllbGQoImRhdGFGb2xkZXJQYXRoIikuZW5hYmxlKCkpfSkpLHRoaXMuc3Vic2NyaWJlR2F0ZXdheSQ9dGhpcy5nZXRGb3JtRmllbGQoImdhdGV3YXkiKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57bnVsbCE9PWU/QWUoW3RoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyhlKS5waXBlKEVlKChlPT57dGhpcy5nZXRGb3JtRmllbGQoImFjY2Vzc1Rva2VuIikucGF0Y2hWYWx1ZShlLmNyZWRlbnRpYWxzSWQpfSkpKSwuLi50aGlzLmdldEF0dHJpYnV0ZXMoZSldKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLm1hcmtBc1ByaXN0aW5lKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpOnRoaXMuZ2V0Rm9ybUZpZWxkKCJhY2Nlc3NUb2tlbiIpLnBhdGNoVmFsdWUoIiIpfSkpfWdhdGV3YXlFeGlzdCgpe3RoaXMuY3R4LnNob3dFcnJvclRvYXN0KHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHMsInRvcCIsImxlZnQiLHRoaXMudG9hc3RUYXJnZXRJZCl9ZXhwb3J0Q29uZmlnKCl7Y29uc3QgZT10aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUsdD17fTt2YXIgbixhLG87dFsidGJfZ2F0ZXdheS55YW1sIl09ZnVuY3Rpb24oZSl7bGV0IHQ7dD0idGhpbmdzYm9hcmQ6XG4iLHQrPSIgIGhvc3Q6ICIrZS5ob3N0KyJcbiIsdCs9IiAgcmVtb3RlQ29uZmlndXJhdGlvbjogIitlLnJlbW90ZUNvbmZpZ3VyYXRpb24rIlxuIix0Kz0iICBwb3J0OiAiK2UucG9ydCsiXG4iLHQrPSIgIHNlY3VyaXR5OlxuIixlLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3QrPSIgICAgYWNjZXNzLXRva2VuOiAiK2UuYWNjZXNzVG9rZW4rIlxuIjoodCs9IiAgICBjYV9jZXJ0OiAiK2UuY2FDZXJ0UGF0aCsiXG4iLHQrPSIgICAgcHJpdmF0ZUtleTogIitlLnByaXZhdGVLZXlQYXRoKyJcbiIsdCs9IiAgICBjZXJ0OiAiK2UuY2VydFBhdGgrIlxuIiksdCs9InN0b3JhZ2U6XG4iLGUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/KHQrPSIgIHR5cGU6IG1lbW9yeVxuIix0Kz0iICByZWFkX3JlY29yZHNfY291bnQ6ICIrZS5yZWFkUmVjb3Jkc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlY29yZHNfY291bnQ6ICIrZS5tYXhSZWNvcmRzQ291bnQrIlxuIik6KHQrPSIgIHR5cGU6IGZpbGVcbiIsdCs9IiAgZGF0YV9mb2xkZXJfcGF0aDogIitlLmRhdGFGb2xkZXJQYXRoKyJcbiIsdCs9IiAgbWF4X2ZpbGVfY291bnQ6ICIrZS5tYXhGaWxlc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlYWRfcmVjb3Jkc19jb3VudDogIitlLnJlYWRSZWNvcmRzQ291bnQrIlxuIix0Kz0iICBtYXhfcmVjb3Jkc19wZXJfZmlsZTogIitlLm1heFJlY29yZHNDb3VudCsiXG4iKSx0Kz0iY29ubmVjdG9yczpcbiI7Zm9yKGNvbnN0IG4gb2YgZS5jb25uZWN0b3JzKW4uZW5hYmxlZCYmKHQrPSIgIC1cbiIsdCs9IiAgICBuYW1lOiAiK24ubmFtZSsiXG4iLHQrPSIgICAgdHlwZTogIituLmNvbmZpZ1R5cGUrIlxuIix0Kz0iICAgIGNvbmZpZ3VyYXRpb246ICIrS2Eobi5uYW1lKSsiXG4iKTtyZXR1cm4gdH0oZSksZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KW4uZW5hYmxlZCYmKGVbS2Eobi5uYW1lKV09SlNPTi5zdHJpbmdpZnkobi5jb25maWcpKX0odCxlLmNvbm5lY3RvcnMpLG49dCxhPWUucmVtb3RlTG9nZ2luZ0xldmVsLG89ZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncyxuWyJsb2dzLmNvbmYiXT0kYShhLG8pLHRoaXMuaW1wb3J0RXhwb3J0LmV4cG9ydEpTWmlwKHQsdGhpcy5hcmNoaXZlRmlsZU5hbWUpLHRoaXMuc2F2ZUF0dHJpYnV0ZShSYSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUucmVtb3RlTG9nZ2luZ0xldmVsLnRvVXBwZXJDYXNlKCksTC5TSEFSRURfU0NPUEUpfWFkZE5ld0Nvbm5lY3Rvcigpe3RoaXMuY3JlYXRlQ29ubmVjdG9yKCl9cmVtb3ZlQ29ubmVjdG9yKGUpe2U+LTEmJih0aGlzLmNvbm5lY3RvcnMucmVtb3ZlQXQoZSksdGhpcy5jb25uZWN0b3JzLm1hcmtBc0RpcnR5KCkpfW9wZW5Db25maWdEaWFsb2coZSx0LG4sYSl7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpKSx0aGlzLmRpYWxvZy5vcGVuKFFlLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7anNvblZhbHVlOm4scmVxdWlyZWQ6ITAsdGl0bGU6dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS50aXRsZS1jb25uZWN0b3JzLWpzb24iLHt0eXBlTmFtZTphfSl9fSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGU9PntlJiYodGhpcy5jb25uZWN0b3JzLmF0KHQpLmdldCgiY29uZmlnIikucGF0Y2hWYWx1ZShlKSx0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzKCkpfSkpfWNyZWF0ZUNvbm5lY3Rvck5hbWUoZSx0LG49MCl7Y29uc3QgYT1uP3Qrbjp0O3JldHVybi0xPT09ZS5maW5kSW5kZXgoKGU9PmUubmFtZT09PWEpKT9hOnRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShlLHQsKytuKX12YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sYT0wKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3QgaT0wPT09YT90OnQrYTtvIT09biYmZVtvXS5uYW1lPT09aSYmdGhpcy52YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sKythKX1yZXR1cm4gMD09PWE/dDp0K2F9Y2hhbmdlQ29ubmVjdG9yVHlwZShlKXtpZighZS5nZXQoIm5hbWUiKS52YWx1ZSl7Y29uc3QgdD1lLmdldCgiY29uZmlnVHlwZSIpLnZhbHVlLG49dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLmNvbm5lY3RvcnM7ZS5nZXQoIm5hbWUiKS5wYXRjaFZhbHVlKHRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShuLEhhW3RdKSl9fWNoYW5nZUNvbm5lY3Rvck5hbWUoZSx0KXtjb25zdCBuPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZS5jb25uZWN0b3JzO2UuZ2V0KCJuYW1lIikucGF0Y2hWYWx1ZSh0aGlzLnZhbGlkYXRlQ29ubmVjdG9yTmFtZShuLGUuZ2V0KCJuYW1lIikudmFsdWUsdCkpfXNhdmUoKXtjb25zdCBlPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZTtBZShbdGhpcy5zYXZlQXR0cmlidXRlKCJjb25maWd1cmF0aW9uIix3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShYYShlKSkpLEwuU0hBUkVEX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoT2Esd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoSmEoZS5jb25uZWN0b3JzKSkpLEwuU0VSVkVSX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoUmEsdGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLnJlbW90ZUxvZ2dpbmdMZXZlbC50b1VwcGVyQ2FzZSgpLEwuU0hBUkVEX1NDT1BFKV0pLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmN0eC5zaG93U3VjY2Vzc1RvYXN0KHRoaXMuc3VjY2Vzc2Z1bFNhdmVkLDJlMywidG9wIiwibGVmdCIsdGhpcy50b2FzdFRhcmdldElkKSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAubWFya0FzUHJpc3RpbmUoKX0pKX1nZXRBdHRyaWJ1dGVzKGUpe2NvbnN0IHQ9W107cmV0dXJuIHQucHVzaChBZShbdGhpcy5nZXRBdHRyaWJ1dGUoImN1cnJlbnRfY29uZmlndXJhdGlvbiIsTC5DTElFTlRfU0NPUEUsZSksdGhpcy5nZXRBdHRyaWJ1dGUoT2EsTC5TRVJWRVJfU0NPUEUsZSldKS5waXBlKEVlKCgoW2UsdF0pPT57dGhpcy5zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpLHRoaXMuc2V0Rm9ybUNvbm5lY3RvcnNEcmFmdCh0KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSkpKSx0LnB1c2godGhpcy5nZXRBdHRyaWJ1dGUoUmEsTC5TSEFSRURfU0NPUEUsZSkucGlwZShFZSgoZT0+dGhpcy5wcm9jZXNzTG9nZ2luZ0xldmVsKGUpKSkpKSx0fWdldEF0dHJpYnV0ZShlLHQsbil7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKFlhKG4pLHQsW2VdKX1zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpe2lmKHRoaXMuY29ubmVjdG9ycy5jbGVhcigpLGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49dFtlXTtpZigidGhpbmdzYm9hcmQiPT09ZSludWxsIT09biYmT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJnRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5wYXRjaFZhbHVlKFFhKG4pKTtlbHNlIGZvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgYT0iTm8gbmFtZSI7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5bdF0sIm5hbWUiKSYmKGE9blt0XS5uYW1lKTtjb25zdCBvPXtlbmFibGVkOiEwLGNvbmZpZ1R5cGU6ZSxjb25maWc6blt0XS5jb25maWcsbmFtZTphfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihvKX19fX1zZXRGb3JtQ29ubmVjdG9yc0RyYWZ0KGUpe2lmKGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49e2VuYWJsZWQ6ITEsY29uZmlnVHlwZTp0W2VdLmNvbm5lY3Rvcixjb25maWc6dFtlXS5jb25maWcsbmFtZTplfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihuKX19fXByb2Nlc3NMb2dnaW5nTGV2ZWwoZSl7bGV0IHQ9QmEuZGVidWc7ZS5sZW5ndGg+MCYmQmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSYmKHQ9QmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSksdGhpcy5nZXRGb3JtRmllbGQoInJlbW90ZUxvZ2dpbmdMZXZlbCIpLnBhdGNoVmFsdWUodCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjp0LkVsZW1lbnRSZWZ9LHt0b2tlbjpYLlV0aWxzU2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dG9rZW46YWV9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpYLkRldmljZVNlcnZpY2V9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTplbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIixpbnB1dHM6e2N0eDoiY3R4Iixpc1N0YXRlRm9ybToiaXNTdGF0ZUZvcm0ifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToiZm9ybUNvbnRhaW5lclJlZiIsZmlyc3Q6ITAscHJlZGljYXRlOlsiZm9ybUNvbnRhaW5lciJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH0se3Byb3BlcnR5TmFtZToibXVsdGlwbGVJbnB1dEZvcm0iLGZpcnN0OiEwLHByZWRpY2F0ZTpbImdhdGV3YXlDb25maWd1cmF0aW9uRm9ybSJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGZvcm0gI2Zvcm1Db250YWluZXIgY2xhc3M9ImdhdGV3YXktZm9ybSJcbiAgICAgIFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwIlxuICAgICAgdGItdG9hc3QgdG9hc3RUYXJnZXQ9Int7IHRvYXN0VGFyZ2V0SWQgfX0iXG4gICAgICAobmdTdWJtaXQpPSJzYXZlKCkiPlxuICA8bWF0LWFjY29yZGlvbiBtdWx0aT0idHJ1ZSIgY2xhc3M9Im1hdC1ib2R5LTIiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmRcJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDx0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3RcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImdhdGV3YXkiXG4gICAgICAgICAgW2RldmljZU5hbWVdPSJkZXZpY2VOYW1lRm9ybSJcbiAgICAgICAgICBbaXNTdGF0ZUZvcm1dPSJpc1N0YXRlRm9ybSJcbiAgICAgICAgICBbbmV3R2F0ZXdheVR5cGVdPSJnYXRld2F5VHlwZSJcbiAgICAgICAgICAoZ2F0ZXdheU5hbWVFeGlzdCk9ImdhdGV3YXlFeGlzdCgpIlxuICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgID5cbiAgICAgIDwvdGItZW50aXR5LWdhdGV3YXktc2VsZWN0PlxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnNlY3VyaXR5LXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHlUeXBlIiA+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc2VjdXJpdHlUeXBlLnZhbHVlLnRvU3RyaW5nKCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblxuICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc2VjdXJpdHlUeXBlXCcpLnZhbHVlID09IFwndGxzXCciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNhLWNlcnRpZmljYXRlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1wcml2YXRlLWtleVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icHJpdmF0ZUtleVBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2VydFBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj57eyBcJ2dhdGV3YXkucmVtb3RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1jaGVja2JveD5cblxuICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVMb2dnaW5nTGV2ZWwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVscyIgW3ZhbHVlXT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICB7eyBsb2dMZXZlbCB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnBhdGgtbG9nc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3MiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS5wYXRoLWxvZ3MtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zdG9yYWdlXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuc3RvcmFnZS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzdG9yYWdlVHlwZS5rZXkiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0icmVhZFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVhZFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1wYWNrLXNpemUtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsID5cbiAgICAgICAgICAgICAge3sgKGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgIT09IFwnZmlsZVwnID8gXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHNcJyA6IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHNcJykgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4UmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgPT0gXCdmaWxlXCciPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heEZpbGVzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heEZpbGVzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1wYXRoXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImRhdGFGb2xkZXJQYXRoIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnZGF0YUZvbGRlclBhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtY29uZmlnXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJnYXRld2F5LWNvbmZpZyI+XG4gICAgICAgIDxzZWN0aW9uIGZvcm1BcnJheU5hbWU9ImNvbm5lY3RvcnMiICpuZ0Zvcj0ibGV0IGNvbm5lY3RvciBvZiBjb25uZWN0b3JzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4OyI+XG4gICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09ImkiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gc3RyZXRjaCIgZnhMYXlvdXRHYXA9IjhweCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBzdGFydCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIiBmeEZsZXg+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5jb25uZWN0b3ItdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJjb25maWdUeXBlIiAoc2VsZWN0aW9uQ2hhbmdlKT0iY2hhbmdlQ29ubmVjdG9yVHlwZShjb25uZWN0b3IpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbm5lY3RvclR5cGUgb2YgY29ubmVjdG9yVHlwZXMiIFt2YWx1ZV09ImNvbm5lY3RvclR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb25uZWN0b3JUeXBlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCdjb25maWdUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLXR5cGUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LmNvbm5lY3Rvci1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiAoYmx1cik9ImNoYW5nZUNvbm5lY3Rvck5hbWUoY29ubmVjdG9yLCBpKSI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29ubmVjdG9yLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5jb25uZWN0b3ItbmFtZS1yZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIlxuICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJ7e2FsaWdubWVudCA9PSBcJ3Jvd1wnID8gXCdlbmQgY2VudGVyXCcgOiBcJ3NwYWNlLWV2ZW5seSBjZW50ZXJcJ319IiBjbGFzcz0iYWN0aW9uLWJ1dHRvbnMiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0ib3BlbkNvbmZpZ0RpYWxvZygkZXZlbnQsIGksIGNvbm5lY3Rvci5nZXQoXCdjb25maWdcJykudmFsdWUsIGNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLnZhbHVlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkudXBkYXRlLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdtYXQtd2FyblwnOiBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLmludmFsaWR9Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV9ob3JpejwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb25uZWN0b3IoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPHNwYW4gW2Z4U2hvd109IiFjb25uZWN0b3JzLmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7XCdnYXRld2F5Lm5vLWNvbm5lY3RvcnNcJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT0iYnV0dG9uIiAoY2xpY2spPSJhZGROZXdDb25uZWN0b3IoKSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5jb25uZWN0b3ItYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXYgPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPC9tYXQtYWNjb3JkaW9uPlxuICA8c2VjdGlvbiBbZnhTaG93XT0iIWlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBjbGFzcz0iZm9ybS1hY3Rpb24tYnV0dG9ucyI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iZXhwb3J0Q29uZmlnKCkiXG4gICAgICAgICAgICAqbmdJZj0iIWdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LmRvd25sb2FkLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0ic3VibWl0IlxuICAgICAgICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LnNhdmUtdGlwXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAge3tcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9zZWN0aW9uPlxuPC9mb3JtPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5nYXRld2F5LWZvcm17aGVpZ2h0OjEwMCU7cGFkZGluZzo1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW59Omhvc3QgLmdhdGV3YXktZm9ybSAuZm9ybS1hY3Rpb24tYnV0dG9uc3twYWRkaW5nLXRvcDo4cHh9Omhvc3QgLmdhdGV3YXktZm9ybSAuZ2F0ZXdheS1jb25maWcgLm5vLWRhdGEtZm91bmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2hlaWdodDo0MHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Y3QuVG9hc3REaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi10b2FzdF0iLGlucHV0czpbInRvYXN0VGFyZ2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpwdC5NYXRDaGVja2JveCxzZWxlY3RvcjoibWF0LWNoZWNrYm94IixpbnB1dHM6WyJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsImlkIiwicmVxdWlyZWQiLCJsYWJlbFBvc2l0aW9uIiwibmFtZSIsInZhbHVlIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY29sb3IiLCJkaXNhYmxlZEludGVyYWN0aXZlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiaW5kZXRlcm1pbmF0ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJpbmRldGVybWluYXRlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEFjY29yZGlvbixzZWxlY3RvcjoibWF0LWFjY29yZGlvbiIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsImRpc3BsYXlNb2RlIiwidG9nZ2xlUG9zaXRpb24iXSxleHBvcnRBczpbIm1hdEFjY29yZGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0Q2xhc3NEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nQ2xhc3NdLCBbbmdDbGFzcy54c10sIFtuZ0NsYXNzLnNtXSwgW25nQ2xhc3MubWRdLCBbbmdDbGFzcy5sZ10sIFtuZ0NsYXNzLnhsXSwgIFtuZ0NsYXNzLmx0LXNtXSwgW25nQ2xhc3MubHQtbWRdLCBbbmdDbGFzcy5sdC1sZ10sIFtuZ0NsYXNzLmx0LXhsXSwgIFtuZ0NsYXNzLmd0LXhzXSwgW25nQ2xhc3MuZ3Qtc21dLCBbbmdDbGFzcy5ndC1tZF0sIFtuZ0NsYXNzLmd0LWxnXSIsaW5wdXRzOlsibmdDbGFzcyIsIm5nQ2xhc3MueHMiLCJuZ0NsYXNzLnNtIiwibmdDbGFzcy5tZCIsIm5nQ2xhc3MubGciLCJuZ0NsYXNzLnhsIiwibmdDbGFzcy5sdC1zbSIsIm5nQ2xhc3MubHQtbWQiLCJuZ0NsYXNzLmx0LWxnIiwibmdDbGFzcy5sdC14bCIsIm5nQ2xhc3MuZ3QteHMiLCJuZ0NsYXNzLmd0LXNtIiwibmdDbGFzcy5ndC1tZCIsIm5nQ2xhc3MuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS7JtU5nTm9WYWxpZGF0ZSxzZWxlY3RvcjoiZm9ybTpub3QoW25nTm9Gb3JtXSk6bm90KFtuZ05hdGl2ZVZhbGlkYXRlXSkifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTptdC5FbnRpdHlHYXRld2F5U2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3QiLGlucHV0czpbInJlcXVpcmVkIiwibmV3R2F0ZXdheVR5cGUiLCJkZXZpY2VOYW1lIiwiaXNTdGF0ZUZvcm0iXSxvdXRwdXRzOlsiZ2F0ZXdheU5hbWVFeGlzdCJdfSx7a2luZDoicGlwZSIsdHlwZTpfLlVwcGVyQ2FzZVBpcGUsbmFtZToidXBwZXJjYXNlIn0se2tpbmQ6InBpcGUiLHR5cGU6Xy5LZXlWYWx1ZVBpcGUsbmFtZToia2V5dmFsdWUifSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fWUoIkdhdGV3YXlGb3JtQ29tcG9uZW50IixlbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2Vcbjxmb3JtICNmb3JtQ29udGFpbmVyIGNsYXNzPSJnYXRld2F5LWZvcm0iXG4gICAgICBbZm9ybUdyb3VwXT0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cCJcbiAgICAgIHRiLXRvYXN0IHRvYXN0VGFyZ2V0PSJ7eyB0b2FzdFRhcmdldElkIH19IlxuICAgICAgKG5nU3VibWl0KT0ic2F2ZSgpIj5cbiAgPG1hdC1hY2NvcmRpb24gbXVsdGk9InRydWUiIGNsYXNzPSJtYXQtYm9keS0yIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8dGItZW50aXR5LWdhdGV3YXktc2VsZWN0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJnYXRld2F5IlxuICAgICAgICAgIFtkZXZpY2VOYW1lXT0iZGV2aWNlTmFtZUZvcm0iXG4gICAgICAgICAgW2lzU3RhdGVGb3JtXT0iaXNTdGF0ZUZvcm0iXG4gICAgICAgICAgW25ld0dhdGV3YXlUeXBlXT0iZ2F0ZXdheVR5cGUiXG4gICAgICAgICAgKGdhdGV3YXlOYW1lRXhpc3QpPSJnYXRld2F5RXhpc3QoKSJcbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICA+XG4gICAgICA8L3RiLWVudGl0eS1nYXRld2F5LXNlbGVjdD5cbiAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5zZWN1cml0eS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5VHlwZSIgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2VjdXJpdHlUeXBlIG9mIHNlY3VyaXR5VHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic2VjdXJpdHlUeXBlLmtleSI+XG4gICAgICAgICAgICAgIHt7IHNlY3VyaXR5VHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWluXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3NlY3VyaXR5VHlwZVwnKS52YWx1ZSA9PSBcJ3Rsc1wnIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2FDZXJ0UGF0aCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGxzLXBhdGgtcHJpdmF0ZS1rZXlcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InByaXZhdGVLZXlQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT0icmVtb3RlQ29uZmlndXJhdGlvbiI+e3sgXCdnYXRld2F5LnJlbW90ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtY2hlY2tib3g+XG5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ0xldmVsIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbHMiIFt2YWx1ZV09ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAge3sgbG9nTGV2ZWwgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5wYXRoLWxvZ3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzIj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkucGF0aC1sb2dzLXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnN0b3JhZ2UtdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdG9yYWdlVHlwZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGUudmFsdWUudG9TdHJpbmcoKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InJlYWRSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbCA+XG4gICAgICAgICAgICAgIHt7IChnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlICE9PSBcJ2ZpbGVcJyA/IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzXCcgOiBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzXCcpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlID09IFwnZmlsZVwnIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhGaWxlc0NvdW50Ij5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJkYXRhRm9sZGVyUGF0aCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2RhdGFGb2xkZXJQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBjbGFzcz0iZ2F0ZXdheS1jb25maWciPlxuICAgICAgICA8c2VjdGlvbiBmb3JtQXJyYXlOYW1lPSJjb25uZWN0b3JzIiAqbmdGb3I9ImxldCBjb25uZWN0b3Igb2YgY29ubmVjdG9ycy5jb250cm9sczsgbGV0IGkgPSBpbmRleDsiPlxuICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPSJpIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIHN0cmV0Y2giIGZ4TGF5b3V0R2FwPSI4cHgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEFsaWduPSJjZW50ZXIgc3RhcnQiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgZnhGbGV4PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuY29ubmVjdG9yLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29uZmlnVHlwZSIgKHNlbGVjdGlvbkNoYW5nZSk9ImNoYW5nZUNvbm5lY3RvclR5cGUoY29ubmVjdG9yKSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb25uZWN0b3JUeXBlIG9mIGNvbm5lY3RvclR5cGVzIiBbdmFsdWVdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29ubmVjdG9yVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb25uZWN0b3IuZ2V0KFwnY29uZmlnVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rvci10eXBlLXJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3ItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgKGJsdXIpPSJjaGFuZ2VDb25uZWN0b3JOYW1lKGNvbm5lY3RvciwgaSkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLW5hbWUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCJcbiAgICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ie3thbGlnbm1lbnQgPT0gXCdyb3dcJyA/IFwnZW5kIGNlbnRlclwnIDogXCdzcGFjZS1ldmVubHkgY2VudGVyXCd9fSIgY2xhc3M9ImFjdGlvbi1idXR0b25zIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSIgbWF0LWljb24tYnV0dG9uIChjbGljayk9Im9wZW5Db25maWdEaWFsb2coJGV2ZW50LCBpLCBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLnZhbHVlLCBjb25uZWN0b3IuZ2V0KFwnbmFtZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnVwZGF0ZS1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ie1wnbWF0LXdhcm5cJzogY29ubmVjdG9yLmdldChcJ2NvbmZpZ1wnKS5pbnZhbGlkfSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfaG9yaXo8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQ29ubmVjdG9yKGkpIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5kZWxldGVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxzcGFuIFtmeFNob3ddPSIhY29ubmVjdG9ycy5sZW5ndGgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiIGNsYXNzPSJuby1kYXRhLWZvdW5kIj57e1wnZ2F0ZXdheS5uby1jb25uZWN0b3JzXCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uIFtmeFNob3ddPSIhaXNSZWFkT25seUZvcm0iIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9ImJ1dHRvbiIgKGNsaWNrKT0iYWRkTmV3Q29ubmVjdG9yKCkiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuY29ubmVjdG9yLWFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2ID5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gIDwvbWF0LWFjY29yZGlvbj5cbiAgPHNlY3Rpb24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgY2xhc3M9ImZvcm0tYWN0aW9uLWJ1dHRvbnMiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImV4cG9ydENvbmZpZygpIlxuICAgICAgICAgICAgKm5nSWY9IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5kb3dubG9hZC10aXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICB7e1wnYWN0aW9uLmRvd25sb2FkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9InN1Ym1pdCJcbiAgICAgICAgICAgICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5zYXZlLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvc2VjdGlvbj5cbjwvZm9ybT5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuZ2F0ZXdheS1mb3Jte2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufTpob3N0IC5nYXRld2F5LWZvcm0gLmZvcm0tYWN0aW9uLWJ1dHRvbnN7cGFkZGluZy10b3A6OHB4fTpob3N0IC5nYXRld2F5LWZvcm0gLmdhdGV3YXktY29uZmlnIC5uby1kYXRhLWZvdW5ke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTp0LkVsZW1lbnRSZWZ9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp0Lk5nWm9uZX0se3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dHlwZTpXaW5kb3csZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOlthZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Zvcm1Db250YWluZXJSZWY6W3t0eXBlOm8sYXJnczpbImZvcm1Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLG11bHRpcGxlSW5wdXRGb3JtOlt7dHlwZTpvLGFyZ3M6WyJnYXRld2F5Q29uZmlndXJhdGlvbkZvcm0iLHtzdGF0aWM6ITB9XX1dLGN0eDpbe3R5cGU6YX1dLGlzU3RhdGVGb3JtOlt7dHlwZTphfV19fSk7Y2xhc3MgdG8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIpe3N1cGVyKGUsdCxhKSx0aGlzLnN0b3JlPWUsdGhpcy5yb3V0ZXI9dCx0aGlzLmRhdGE9bix0aGlzLmRpYWxvZ1JlZj1hLHRoaXMuZmI9byx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1pLHRoaXMucmVzb3VyY2VzU2VydmljZT1yLHRoaXMuY29ubmVjdG9yVHlwZT1fdCx0aGlzLmdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwPUh0LHRoaXMuZ2F0ZXdheUxvZ0xldmVsPU9iamVjdC52YWx1ZXMoTXQpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHt0eXBlOltfdC5NUVRULFtdXSxuYW1lOlsiIixbdWUucmVxdWlyZWQsdGhpcy51bmlxTmFtZVJlcXVpcmVkKCksdWUucGF0dGVybihrdCldXSxsb2dMZXZlbDpbTXQuSU5GTyxbXV0sdXNlRGVmYXVsdHM6WyEwLFtdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITEsW11dLGNsYXNzOlsiIixbXV0sa2V5OlsiYXV0byIsW11dfSl9bmdPbkluaXQoKXt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1oZWxwTGlua0lkKCl7cmV0dXJuIHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZ3VyYXRpb24vIn1jYW5jZWwoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKX1hZGQoKXt0aGlzLnN1Ym1pdHRlZD0hMDtjb25zdCBlPXRoaXMuY29ubmVjdG9yRm9ybS5nZXRSYXdWYWx1ZSgpO2UudXNlRGVmYXVsdHM/dGhpcy5nZXREZWZhdWx0Q29uZmlnKGUudHlwZSkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj10aGlzLmRhdGEuZ2F0ZXdheVZlcnNpb247biYmKGUuY29uZmlnVmVyc2lvbj1uKSxlLmNvbmZpZ3VyYXRpb25Kc29uPSh0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0obik/dFtVdC5DdXJyZW50XTp0W1V0LkxlZ2FjeV0pPz90LHRoaXMuY29ubmVjdG9yRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UoZSl9KSk6dGhpcy5jb25uZWN0b3JGb3JtLnZhbGlkJiZ0aGlzLmRpYWxvZ1JlZi5jbG9zZShlKX11bmlxTmFtZVJlcXVpcmVkKCl7cmV0dXJuIGU9Pntjb25zdCB0PWUudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHRoaXMuZGF0YS5kYXRhU291cmNlRGF0YS5zb21lKCgoe3ZhbHVlOntuYW1lOmV9fSk9PmUudG9Mb3dlckNhc2UoKT09PXQpKT97ZHVwbGljYXRlTmFtZTp7dmFsaWQ6ITF9fTpudWxsfX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgidXNlRGVmYXVsdHMiKTtlPT09X3QuR1JQQ3x8ZT09PV90LkNVU1RPTT90LnNldFZhbHVlKCExKTp0LnZhbHVlfHx0LnNldFZhbHVlKCEwKX0pKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCl9Z2V0RGVmYXVsdENvbmZpZyhlKXtyZXR1cm4gdGhpcy5yZXNvdXJjZXNTZXJ2aWNlLmxvYWRKc29uUmVzb3VyY2UoYC9hc3NldHMvbWV0YWRhdGEvY29ubmVjdG9yLWRlZmF1bHQtY29uZmlncy8ke2V9Lmpzb25gKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp2YX0se3Rva2VuOlguUmVzb3VyY2VzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6dG8sc2VsZWN0b3I6InRiLWFkZC1jb25uZWN0b3ItZGlhbG9nIixwcm92aWRlcnM6W10sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJjb25uZWN0b3JGb3JtIiBjbGFzcz0iYWRkLWNvbm5lY3RvciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7ICJnYXRld2F5LmFkZC1jb25uZWN0b3IiIHwgdHJhbnNsYXRlfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09ImhlbHBMaW5rSWQoKSI+PC9kaXY+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtdG9vbGJhcj5cbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnR5cGU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIHwga2V5dmFsdWUiIFt2YWx1ZV09InR5cGUua2V5Ij5cbiAgICAgICAgICAgICAgICB7eyB0eXBlLnZhbHVlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJ2dhdGV3YXkuY29ubmVjdG9yLWR1cGxpY2F0ZS1uYW1lXCcgOlwnZ2F0ZXdheS5uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWNsYXNzPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNsYXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5HUlBDIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkdSUEMgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkNVU1RPTSJcbiAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIGZpeGVkLXRpdGxlLXdpZHRoIiBmb3JtQ29udHJvbE5hbWU9InVzZURlZmF1bHRzIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5maWxsLWNvbm5lY3Rvci1kZWZhdWx0c1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLk1RVFQiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGEtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIChjbGljayk9ImFkZCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29ubmVjdG9yRm9ybS5pbnZhbGlkIHx8ICFjb25uZWN0b3JGb3JtLmRpcnR5Ij5cbiAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFkZC1jb25uZWN0b3J7bWluLXdpZHRoOjQwMHB4O3dpZHRoOjUwMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpkdC5IZWxwQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGVscF0iLGlucHV0czpbInRiLWhlbHAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cnQuTWF0VG9vbGJhcixzZWxlY3RvcjoibWF0LXRvb2xiYXIiLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQWN0aW9ucyxzZWxlY3RvcjoiW21hdC1kaWFsb2ctYWN0aW9uc10sIG1hdC1kaWFsb2ctYWN0aW9ucywgW21hdERpYWxvZ0FjdGlvbnNdIixpbnB1dHM6WyJhbGlnbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0NvbnRlbnQsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWNvbnRlbnRdLCBtYXQtZGlhbG9nLWNvbnRlbnQsIFttYXREaWFsb2dDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJBZGRDb25uZWN0b3JEaWFsb2dDb21wb25lbnQiLHRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1hZGQtY29ubmVjdG9yLWRpYWxvZyIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9ImFkZC1jb25uZWN0b3IiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyAiZ2F0ZXdheS5hZGQtY29ubmVjdG9yIiB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJoZWxwTGlua0lkKCkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlc01hcCB8IGtleXZhbHVlIiBbdmFsdWVdPSJ0eXBlLmtleSI+XG4gICAgICAgICAgICAgICAge3sgdHlwZS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkubmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9Im9mZiIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDpcJ2dhdGV3YXkubmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS50b3VjaGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLkNVU1RPTSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuR1JQQyIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1rZXk8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5HUlBDICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5DVVNUT00iXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VEZWZhdWx0cyI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmZpbGwtY29ubmVjdG9yLWRlZmF1bHRzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5NUVRUIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc2VuZC1jaGFuZ2UtZGF0YVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbm5lY3RvckZvcm0uaW52YWxpZCB8fCAhY29ubmVjdG9yRm9ybS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5hZGQtY29ubmVjdG9ye21pbi13aWR0aDo0MDBweDt3aWR0aDo1MDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp2YX0se3R5cGU6WC5SZXNvdXJjZXNTZXJ2aWNlfV19KTtjbGFzcyBub3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy52YWx1ZVR5cGVLZXlzPU9iamVjdC52YWx1ZXMoR24pLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLnZhbHVlTGlzdEZvcm1BcnJheT10aGlzLmZiLmFycmF5KFtdKSx0aGlzLnZhbHVlTGlzdEZvcm1BcnJheS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXRyYWNrQnlLZXkoZSx0KXtyZXR1cm4gdH1hZGRLZXkoKXtjb25zdCBlPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0duLlNUUklOR10sc3RyaW5nOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oTHQpXV0sZG91YmxlOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV0sYm9vbGVhbjpbe3ZhbHVlOiExLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UoZSksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChlKX1vYnNlcnZlVHlwZUNoYW5nZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntlLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KCJ0eXBlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSxlLmdldCh0KS5lbmFibGUoe2VtaXRFdmVudDohMX0pfSkpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkubWFya0FzRGlydHkoKX12YWx1ZVRpdGxlKGUpe3JldHVybiBpZShlKT8ib2JqZWN0Ij09dHlwZW9mIGU/SlNPTi5zdHJpbmdpZnkoZSk6ZToiIn1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT17dHlwZTpbdC50eXBlXSxzdHJpbmc6W3t2YWx1ZToiIixkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saW50ZWdlcjpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKEx0KV1dLGRvdWJsZTpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZF1dLGJvb2xlYW46W3t2YWx1ZTohMSxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV19O2VbdC50eXBlXVswXT17dmFsdWU6dC52YWx1ZSxkaXNhYmxlZDohMX07Y29uc3Qgbj10aGlzLmZiLmdyb3VwKGUpO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UobiksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChuKX19dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkudmFsaWQ/bnVsbDp7dmFsdWVMaXN0Rm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUubWFwKCgoe3R5cGU6ZSwuLi50fSk9Pih7dHlwZTplLHZhbHVlOnRbZV19KSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOm5vLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bm8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJUeXBlVmFsdWVQYW5lbENvbXBvbmVudCIsbm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXR5cGUtdmFsdWUtcGFuZWwiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dfSk7Y2xhc3MgYW8gZXh0ZW5kcyBPe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnZhbHVlVHlwZUtleXM9T2JqZWN0LnZhbHVlcyhHbiksdGhpcy52YWx1ZVR5cGVFbnVtPUduLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLnJhd0RhdGE9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5NYXBwaW5nS2V5c1R5cGU9Tm4sdGhpcy5lcnJvclRleHQ9IiJ9bmdPbkluaXQoKXt0aGlzLmtleXNMaXN0Rm9ybUFycmF5PXRoaXMucHJlcGFyZUtleXNGb3JtQXJyYXkodGhpcy5rZXlzKX10cmFja0J5S2V5KGUsdCl7cmV0dXJuIHR9YWRkS2V5KCl7bGV0IGU7aWYoZT10aGlzLmtleXNUeXBlPT09Tm4uUlBDX01FVEhPRFM/dGhpcy5mYi5ncm91cCh7bWV0aG9kOlsiIixbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1tdLFtdXX0pOnRoaXMuZmIuZ3JvdXAoe2tleTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSksdGhpcy5rZXlzVHlwZSE9PU5uLkNVU1RPTSYmdGhpcy5rZXlzVHlwZSE9PU5uLlJQQ19NRVRIT0RTKXtjb25zdCB0PXRoaXMucmF3RGF0YT8icmF3Ijp0aGlzLnZhbHVlVHlwZUtleXNbMF07ZS5hZGRDb250cm9sKCJ0eXBlIix0aGlzLmZiLmNvbnRyb2wodCkpfXRoaXMua2V5c0xpc3RGb3JtQXJyYXkucHVzaChlKX1kZWxldGVLZXkoZSx0KXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMua2V5c0xpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpfWNhbmNlbCgpe3RoaXMucG9wb3Zlcj8uaGlkZSgpfWFwcGx5S2V5c0RhdGEoKXtsZXQgZT10aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlO2lmKHRoaXMua2V5c1R5cGU9PT1Obi5DVVNUT00pe2U9e307Zm9yKGxldCB0IG9mIHRoaXMua2V5c0xpc3RGb3JtQXJyYXkudmFsdWUpZVt0LmtleV09dC52YWx1ZX10aGlzLmtleXNEYXRhQXBwbGllZC5lbWl0KGUpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJih0aGlzLmtleXNUeXBlPT09Tm4uQ1VTVE9NJiYoZT1PYmplY3Qua2V5cyhlKS5tYXAoKHQ9Pih7a2V5OnQsdmFsdWU6ZVt0XSx0eXBlOiIifSkpKSksZS5mb3JFYWNoKChlPT57bGV0IG47aWYodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTKW49dGhpcy5mYi5ncm91cCh7bWV0aG9kOltlLm1ldGhvZCxbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1suLi5lLmFyZ3VtZW50c10sW11dfSk7ZWxzZXtjb25zdHtrZXk6dCx2YWx1ZTphLHR5cGU6b309ZTtuPXRoaXMuZmIuZ3JvdXAoe2tleTpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbYSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0eXBlOltvLFtdXX0pfXQucHVzaChuKX0pKSksdGhpcy5mYi5hcnJheSh0KX12YWx1ZVRpdGxlKGUpe2NvbnN0IHQ9ZS5nZXQodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTPyJtZXRob2QiOiJ2YWx1ZSIpLnZhbHVlO3JldHVybiBpZSh0KT8ib2JqZWN0Ij09dHlwZW9mIHQ/SlNPTi5zdHJpbmdpZnkodCk6dDoiIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6YW8sc2VsZWN0b3I6InRiLW1hcHBpbmctZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e3BhbmVsVGl0bGU6InBhbmVsVGl0bGUiLGFkZEtleVRpdGxlOiJhZGRLZXlUaXRsZSIsZGVsZXRlS2V5VGl0bGU6ImRlbGV0ZUtleVRpdGxlIixub0tleXNUZXh0OiJub0tleXNUZXh0IixrZXlzOiJrZXlzIixrZXlzVHlwZToia2V5c1R5cGUiLHZhbHVlVHlwZUtleXM6InZhbHVlVHlwZUtleXMiLHZhbHVlVHlwZUVudW06InZhbHVlVHlwZUVudW0iLHZhbHVlVHlwZXM6InZhbHVlVHlwZXMiLHJhd0RhdGE6InJhd0RhdGEiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LHByb3ZpZGVyczpbXSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmcta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUtleTsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImtleXNUeXBlICE9PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ2tleVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCctXCcgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgdmFsdWVUaXRsZShrZXlDb250cm9sKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5DVVNUT00gJiYga2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5KU09OUGF0aC1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmtleVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmtleS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rvci1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAgZmlsbC13aWR0aCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG5hbWU9InZhbHVlVHlwZSIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj0iIXJhd0RhdGEiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiIgY2xhc3M9InRiLW1hdC0xOCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lmljb24iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPSIhcmF3RGF0YTsgZWxzZSByYXdUZXh0Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKHZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd09wdGlvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9InZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiIgY2xhc3M9InRiLW1hdC0yMCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3T3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09IlwncmF3XCciPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJrZXlzVHlwZSA9PT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmtleTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ21ldGhvZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleUNvbnRyb2wuZ2V0KFwnYXJndW1lbnRzXCcpLnZhbHVlPy5sZW5ndGggKyBcJylcJ319XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLXR5cGUtdmFsdWUtcGFuZWwgZm9ybUNvbnRyb2xOYW1lPSJhcmd1bWVudHMiPjwvdGItdHlwZS12YWx1ZS1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUtleSgkZXZlbnQsICRpbmRleCkiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJkZWxldGVLZXlUaXRsZSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0iYWRkS2V5KCkiPlxuICAgICAgICB7eyBhZGRLZXlUaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI25vS2V5cz5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWZsZXggY2VudGVyIGFsaWduLWNlbnRlciBrZXktcGFuZWwiPlxuICAgICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IG5vS2V5c1RleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggZmxleC1lbmQiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iYXBwbHlLZXlzRGF0YSgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0ia2V5c0xpc3RGb3JtQXJyYXkuaW52YWxpZCB8fCAha2V5c0xpc3RGb3JtQXJyYXkuZGlydHkiPlxuICAgICAge3sgXCdhY3Rpb24uYXBwbHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWx7d2lkdGg6Nzd2dzttYXgtd2lkdGg6NzAwcHh9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye21heC13aWR0aDoxMXZ3O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC5rZXktcGFuZWx7aGVpZ2h0OjUwMHB4O292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCB0Yi12YWx1ZS1pbnB1dHt3aWR0aDoxMDAlfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlRhLG5hbWU6ImdldEdhdGV3YXlIZWxwTGluayJ9XX0pfX1lKCJNYXBwaW5nRGF0YUtleXNQYW5lbENvbXBvbmVudCIsYW8pLEhlKFtOKCldLGFvLnByb3RvdHlwZSwicmF3RGF0YSIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRhdGEta2V5cy1wYW5lbCIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy1rZXlzLXBhbmVsIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+e3sgcGFuZWxUaXRsZSAgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCArIFwnKVwnfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIGtleS1wYW5lbCIgKm5nSWY9ImtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aDsgZWxzZSBub0tleXMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgICAqbmdGb3I9ImxldCBrZXlDb250cm9sIG9mIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzOyB0cmFja0J5OiB0cmFja0J5S2V5OyBsZXQgJGluZGV4ID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDsiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ia2V5Q29udHJvbCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiIFtleHBhbmRlZF09Imxhc3QiPlxuICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7eyBcJy1cJyB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSAmJiBrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLlJQQ19NRVRIT0RTIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnBsYXRmb3JtLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ2tleVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgbmFtZT0idmFsdWVUeXBlIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPSIhcmF3RGF0YSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIiBjbGFzcz0idGItbWF0LTE4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdJY29uXT0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd1RleHQiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAodmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8fCB2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIXJhd0RhdGE7IGVsc2UgcmF3T3B0aW9uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIiBjbGFzcz0idGItbWF0LTIwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Z0ljb249Int7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8fCB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdPcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iXCdyYXdcJyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuSlNPTlBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS52YWx1ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkua2V5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0ia2V5c1R5cGUgPT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tZXRob2QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdtZXRob2RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hcmd1bWVudHNcJyB8IHRyYW5zbGF0ZSB9fXt7XCcgKFwnICsga2V5Q29udHJvbC5nZXQoXCdhcmd1bWVudHNcJykudmFsdWU/Lmxlbmd0aCArIFwnKVwnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGItdHlwZS12YWx1ZS1wYW5lbCBmb3JtQ29udHJvbE5hbWU9ImFyZ3VtZW50cyI+PC90Yi10eXBlLXZhbHVlLXBhbmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbHt3aWR0aDo3N3Z3O21heC13aWR0aDo3MDBweH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC50aXRsZS1jb250YWluZXJ7bWF4LXdpZHRoOjExdnc7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIHRiLXZhbHVlLWlucHV0e3dpZHRoOjEwMCV9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGItZm9ybS1wYW5lbCAubWF0LW1kYy1pY29uLWJ1dHRvbnt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MTZweDtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9XSxwcm9wRGVjb3JhdG9yczp7cGFuZWxUaXRsZTpbe3R5cGU6YX1dLGFkZEtleVRpdGxlOlt7dHlwZTphfV0sZGVsZXRlS2V5VGl0bGU6W3t0eXBlOmF9XSxub0tleXNUZXh0Olt7dHlwZTphfV0sa2V5czpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVUeXBlS2V5czpbe3R5cGU6YX1dLHZhbHVlVHlwZUVudW06W3t0eXBlOmF9XSx2YWx1ZVR5cGVzOlt7dHlwZTphfV0scmF3RGF0YTpbe3R5cGU6YX1dLHBvcG92ZXI6W3t0eXBlOmF9XSxrZXlzRGF0YUFwcGxpZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBvbyBleHRlbmRzIE97Z2V0IGRldmljZUluZm9UeXBlKCl7cmV0dXJuIHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZX1zZXQgZGV2aWNlSW5mb1R5cGUoZSl7dGhpcy5kZXZpY2VJbmZvVHlwZVZhbHVlIT09ZSYmKHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZT1lKX1jb25zdHJ1Y3RvcihlLHQsbixhKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy50cmFuc2xhdGU9dCx0aGlzLmRpYWxvZz1uLHRoaXMuZmI9YSx0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLnVzZVNvdXJjZT0hMCx0aGlzLnJlcXVpcmVkPSExLHRoaXMuc291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhUbiksdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLm1hcHBpbmdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldXX0pLHRoaXMudXNlU291cmNlJiZ0aGlzLm1hcHBpbmdGb3JtR3JvdXAuYWRkQ29udHJvbCgiZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiLHRoaXMuZmIuY29udHJvbCh0aGlzLnNvdXJjZVR5cGVzWzBdLFtdKSksdGhpcy5kZXZpY2VJbmZvVHlwZT09PWtuLkZVTEwmJih0aGlzLnVzZVNvdXJjZSYmdGhpcy5tYXBwaW5nRm9ybUdyb3VwLmFkZENvbnRyb2woImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIix0aGlzLmZiLmNvbnRyb2wodGhpcy5zb3VyY2VUeXBlc1swXSxbXSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5hZGRDb250cm9sKCJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGhpcy5mYi5jb250cm9sKCIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldKSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe313cml0ZVZhbHVlKGUpe3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnttYXBwaW5nRm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6b28sZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46WS5UcmFuc2xhdGVTZXJ2aWNlfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOnt1c2VTb3VyY2U6InVzZVNvdXJjZSIscmVxdWlyZWQ6InJlcXVpcmVkIixzb3VyY2VUeXBlczoic291cmNlVHlwZXMiLGRldmljZUluZm9UeXBlOiJkZXZpY2VJbmZvVHlwZSJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm9vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCIgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiBbY2xhc3MudGItcmVxdWlyZWRdPSJyZXF1aXJlZCIgdHJhbnNsYXRlPmRldmljZS5kZXZpY2U8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZSBuby1wYWRkaW5nIG5vLWdhcCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1uYW1lLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uZW50aXR5LWZpZWxkPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJ1c2VTb3VyY2UiIGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uc291cmNlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPlxuICAgICAgICBnYXRld2F5LmRldmljZS1pbmZvLmV4cHJlc3Npb25cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtYm9keSBuby1nYXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyB0b3Atc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICBbY2xhc3MuYm90dG9tLXNhbWUtcGFkZGluZ109ImRldmljZUluZm9UeXBlICE9PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLm5hbWU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgcmF3LXZhbHVlLW9wdGlvbiIgKm5nSWY9InVzZVNvdXJjZSI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93LWNlbGwgdGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLWluZm8uZGV2aWNlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyBib3R0b20tc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICAqbmdJZj0iZGV2aWNlSW5mb1R5cGUgPT09IERldmljZUluZm9UeXBlLkZVTEwiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8ucHJvZmlsZS1uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1wcm9maWxlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwncHJvZmlsZS1uYW1lXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2VcJykudmFsdWUgOiBzb3VyY2VUeXBlcyJcbiAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja306aG9zdCAudGItZm9ybS1yb3cuYm90dG9tLXNhbWUtcGFkZGluZ3twYWRkaW5nLWJvdHRvbToxNnB4fTpob3N0IC50Yi1mb3JtLXJvdy50b3Atc2FtZS1wYWRkaW5ne3BhZGRpbmctdG9wOjE2cHh9Omhvc3QgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHt3aWR0aDoxOSV9Omhvc3QgLnRhYmxlLWNvbHVtbnt3aWR0aDo0MCV9Omhvc3QgLnRhYmxlLW5hbWUtY29sdW1ue3dpZHRoOjIwJX06aG9zdCAucmF3LW5hbWV7d2lkdGg6MTklfTpob3N0IC5yYXctdmFsdWUtb3B0aW9ue21heC13aWR0aDo0MCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7ZGlzcGxheTpmbGV4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpndC5IZWxwUG9wdXBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwLXBvcHVwXSwgW3RiLWhlbHAtcG9wdXAtY29udGVudF0iLGlucHV0czpbInRiLWhlbHAtcG9wdXAiLCJ0Yi1oZWxwLXBvcHVwLWNvbnRlbnQiLCJ0cmlnZ2VyLXRleHQiLCJ0cmlnZ2VyLXN0eWxlIiwidGItaGVscC1wb3B1cC1wbGFjZW1lbnQiLCJ0Yi1oZWxwLXBvcHVwLXN0eWxlIiwiaGludE1vZGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIkRldmljZUluZm9UYWJsZUNvbXBvbmVudCIsb28pLEhlKFtOKCldLG9vLnByb3RvdHlwZSwidXNlU291cmNlIix2b2lkIDApLEhlKFtOKCldLG9vLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpvbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZGV2aWNlLWluZm8tdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+b28pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgW2NsYXNzLnRiLXJlcXVpcmVkXT0icmVxdWlyZWQiIHRyYW5zbGF0ZT5kZXZpY2UuZGV2aWNlPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUgbm8tcGFkZGluZyBuby1nYXAiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyLWNlbGwgdGFibGUtbmFtZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmVudGl0eS1maWVsZDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0idXNlU291cmNlIiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnNvdXJjZTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5cbiAgICAgICAgZ2F0ZXdheS5kZXZpY2UtaW5mby5leHByZXNzaW9uXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWJvZHkgbm8tZ2FwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgdG9wLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgW2NsYXNzLmJvdHRvbS1zYW1lLXBhZGRpbmddPSJkZXZpY2VJbmZvVHlwZSAhPT0gRGV2aWNlSW5mb1R5cGUuRlVMTCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgYm90dG9tLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgKm5nSWY9ImRldmljZUluZm9UeXBlID09PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnByb2ZpbGUtbmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCByYXctdmFsdWUtb3B0aW9uIiAqbmdJZj0idXNlU291cmNlIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3ctY2VsbCB0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdwcm9maWxlLW5hbWVcJyB8IGdldEdhdGV3YXlIZWxwTGluazogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLWZvcm0tcm93LmJvdHRvbS1zYW1lLXBhZGRpbmd7cGFkZGluZy1ib3R0b206MTZweH06aG9zdCAudGItZm9ybS1yb3cudG9wLXNhbWUtcGFkZGluZ3twYWRkaW5nLXRvcDoxNnB4fTpob3N0IC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7d2lkdGg6MTklfTpob3N0IC50YWJsZS1jb2x1bW57d2lkdGg6NDAlfTpob3N0IC50YWJsZS1uYW1lLWNvbHVtbnt3aWR0aDoyMCV9Omhvc3QgLnJhdy1uYW1le3dpZHRoOjE5JX06aG9zdCAucmF3LXZhbHVlLW9wdGlvbnttYXgtd2lkdGg6NDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7dXNlU291cmNlOlt7dHlwZTphfV0scmVxdWlyZWQ6W3t0eXBlOmF9XSxzb3VyY2VUeXBlczpbe3R5cGU6YX1dLGRldmljZUluZm9UeXBlOlt7dHlwZTphfV19fSk7Y2xhc3MgaW8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIscyxsKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5wb3BvdmVyU2VydmljZT1pLHRoaXMucmVuZGVyZXI9cix0aGlzLnZpZXdDb250YWluZXJSZWY9cyx0aGlzLnRyYW5zbGF0ZT1sLHRoaXMuTWFwcGluZ1R5cGU9Zm4sdGhpcy5xdWFsaXR5VHlwZXM9eG4sdGhpcy5RdWFsaXR5VHJhbnNsYXRpb25zTWFwPXZuLHRoaXMuY29udmVydG9yVHlwZXM9T2JqZWN0LnZhbHVlcyh3biksdGhpcy5Db252ZXJ0b3JUeXBlRW51bT13bix0aGlzLkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXA9Q24sdGhpcy5zb3VyY2VUeXBlcz1PYmplY3QudmFsdWVzKFRuKSx0aGlzLk9QQ1VhU291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhTbiksdGhpcy5PUENVYVNvdXJjZVR5cGVzRW51bT1Tbix0aGlzLnNvdXJjZVR5cGVzRW51bT1Ubix0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5yZXF1ZXN0VHlwZXM9T2JqZWN0LnZhbHVlcyhJbiksdGhpcy5SZXF1ZXN0VHlwZUVudW09SW4sdGhpcy5SZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXA9QW4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLlNlcnZlclNpZGVSUENUeXBlPVBuLHRoaXMuTWFwcGluZ0tleXNUeXBlPU5uLHRoaXMuTWFwcGluZ0hpbnRUcmFuc2xhdGlvbnNNYXA9Ym4sdGhpcy5NYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwPUJuLHRoaXMuSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwPWhuLHRoaXMua2V5c1BvcHVwQ2xvc2VkPSEwLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY3JlYXRlTWFwcGluZ0Zvcm0oKX1nZXQgY29udmVydGVyQXR0cmlidXRlcygpe2lmKHRoaXMuY29udmVydGVyVHlwZSlyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCh0aGlzLmNvbnZlcnRlclR5cGUpLnZhbHVlLmF0dHJpYnV0ZXMubWFwKChlPT5lLmtleSkpfWdldCBjb252ZXJ0ZXJUZWxlbWV0cnkoKXtpZih0aGlzLmNvbnZlcnRlclR5cGUpcmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKS52YWx1ZS50aW1lc2VyaWVzLm1hcCgoZT0+ZS5rZXkpKX1nZXQgb3BjQXR0cmlidXRlcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiYXR0cmlidXRlcyIpLnZhbHVlPy5tYXAoKGU9PmUua2V5KSl8fFtdfWdldCBvcGNUZWxlbWV0cnkoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoInRpbWVzZXJpZXMiKS52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgb3BjUnBjTWV0aG9kcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgicnBjX21ldGhvZHMiKS52YWx1ZT8ubWFwKChlPT5lLm1ldGhvZCkpfHxbXX1nZXQgb3BjQXR0cmlidXRlc1VwZGF0ZXMoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImF0dHJpYnV0ZXNfdXBkYXRlcyIpPy52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgY29udmVydGVyVHlwZSgpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyIikuZ2V0KCJ0eXBlIikudmFsdWV9Z2V0IGN1c3RvbUtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCgiY3VzdG9tIikudmFsdWUuZXh0ZW5zaW9uQ29uZmlnKX1nZXQgcmVxdWVzdE1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VHlwZSIpLnZhbHVlfWdldCByZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXQiKTtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtbGltaXRzLWVycm9yIix7bWluOjF9KToiIn1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWNyZWF0ZU1hcHBpbmdGb3JtKCl7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVEYXRhTWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVSZXF1ZXN0TWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMuY3JlYXRlT1BDVUFNYXBwaW5nRm9ybSgpfX1jYW5jZWwoKXt0aGlzLmtleXNQb3B1cENsb3NlZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5tYXBwaW5nRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5wcmVwYXJlTWFwcGluZ0RhdGEoKSl9bWFuYWdlS2V5cyhlLHQsbil7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBhPXQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZih0aGlzLnBvcG92ZXJTZXJ2aWNlLmhhc1BvcG92ZXIoYSkpdGhpcy5wb3BvdmVyU2VydmljZS5oaWRlUG9wb3ZlcihhKTtlbHNle2NvbnN0IGU9KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSE9PWZuLk9QQ1VBP3RoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKTp0aGlzLm1hcHBpbmdGb3JtKS5nZXQobiksdD17a2V5czplLnZhbHVlLGtleXNUeXBlOm4scmF3RGF0YTp0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKT8udmFsdWU9PT13bi5CWVRFUyxwYW5lbFRpdGxlOk1uLmdldChuKSxhZGRLZXlUaXRsZTpFbi5nZXQobiksZGVsZXRlS2V5VGl0bGU6cW4uZ2V0KG4pLG5vS2V5c1RleHQ6RG4uZ2V0KG4pfTt0aGlzLmRhdGEubWFwcGluZ1R5cGU9PT1mbi5PUENVQSYmKHQudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKFNuKSx0LnZhbHVlVHlwZUVudW09U24sdC52YWx1ZVR5cGVzPUxuKSx0aGlzLmtleXNQb3B1cENsb3NlZD0hMTtjb25zdCBvPXRoaXMucG9wb3ZlclNlcnZpY2UuZGlzcGxheVBvcG92ZXIoYSx0aGlzLnJlbmRlcmVyLHRoaXMudmlld0NvbnRhaW5lclJlZixhbywibGVmdEJvdHRvbSIsITEsbnVsbCx0LHt9LHt9LHt9LCEwKTtvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLnBvcG92ZXI9byxvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLmtleXNEYXRhQXBwbGllZC5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntvLmhpZGUoKSxlLnBhdGNoVmFsdWUodCksZS5tYXJrQXNEaXJ0eSgpfSkpLG8udGJIaWRlU3RhcnQucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMua2V5c1BvcHVwQ2xvc2VkPSEwfSkpfX1wcmVwYXJlTWFwcGluZ0RhdGEoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0udmFsdWU7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjp0LHRvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmF9PWU7cmV0dXJue3RvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmEsY29udmVydGVyOnt0eXBlOnQudHlwZSwuLi50W3QudHlwZV19fTtjYXNlIGZuLlJFUVVFU1RTOnJldHVybntyZXF1ZXN0VHlwZTplLnJlcXVlc3RUeXBlLHJlcXVlc3RWYWx1ZTplLnJlcXVlc3RWYWx1ZVtlLnJlcXVlc3RUeXBlXX07ZGVmYXVsdDpyZXR1cm4gZX19Z2V0Rm9ybVZhbHVlRGF0YSgpe2lmKHRoaXMuZGF0YS52YWx1ZSYmT2JqZWN0LmtleXModGhpcy5kYXRhLnZhbHVlKS5sZW5ndGgpc3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjplLHRvcGljRmlsdGVyOnQsc3Vic2NyaXB0aW9uUW9zOm59PXRoaXMuZGF0YS52YWx1ZTtyZXR1cm57dG9waWNGaWx0ZXI6dCxzdWJzY3JpcHRpb25Rb3M6bixjb252ZXJ0ZXI6e3R5cGU6ZS50eXBlLFtlLnR5cGVdOnsuLi5lfX19O2Nhc2UgZm4uUkVRVUVTVFM6cmV0dXJue3JlcXVlc3RUeXBlOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VHlwZSxyZXF1ZXN0VmFsdWU6e1t0aGlzLmRhdGEudmFsdWUucmVxdWVzdFR5cGVdOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VmFsdWV9fTtkZWZhdWx0OnJldHVybiB0aGlzLmRhdGEudmFsdWV9fWNyZWF0ZURhdGFNYXBwaW5nRm9ybSgpe3RoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgidG9waWNGaWx0ZXIiLHRoaXMuZmIuY29udHJvbCgiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJzdWJzY3JpcHRpb25Rb3MiLHRoaXMuZmIuY29udHJvbCgwKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJjb252ZXJ0ZXIiLHRoaXMuZmIuZ3JvdXAoe3R5cGU6W3duLkpTT04sW11dLGpzb246dGhpcy5mYi5ncm91cCh7ZGV2aWNlSW5mbzpbe30sW11dLGF0dHJpYnV0ZXM6W1tdLFtdXSx0aW1lc2VyaWVzOltbXSxbXV19KSxieXRlczp0aGlzLmZiLmdyb3VwKHtkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXX0pLGN1c3RvbTp0aGlzLmZiLmdyb3VwKHtleHRlbnNpb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGV4dGVuc2lvbkNvbmZpZzpbe30sW11dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShSZSh0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpO3QuZ2V0KCJqc29uIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImJ5dGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImN1c3RvbSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KGUpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9Y3JlYXRlUmVxdWVzdE1hcHBpbmdGb3JtKCl7dGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJyZXF1ZXN0VHlwZSIsdGhpcy5mYi5jb250cm9sKEluLkNPTk5FQ1RfUkVRVUVTVCxbXSkpLHRoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgicmVxdWVzdFZhbHVlIix0aGlzLmZiLmdyb3VwKHtjb25uZWN0UmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86W3t9LFtdXX0pLGRpc2Nvbm5lY3RSZXF1ZXN0czp0aGlzLmZiLmdyb3VwKHt0b3BpY0ZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlSW5mbzpbe30sW11dfSksYXR0cmlidXRlUmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZF1dfSksYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sYXR0cmlidXRlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWVFeHByZXNzaW9uOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXRhaW46WyExLFtdXX0pLGF0dHJpYnV0ZVVwZGF0ZXM6dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXR0cmlidXRlRmlsdGVyOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0b3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmV0YWluOlshMCxbXV19KSxzZXJ2ZXJTaWRlUnBjOnRoaXMuZmIuZ3JvdXAoe3R5cGU6W1BuLlRXT19XQVksW11dLGRldmljZU5hbWVGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZEZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY1FvUzpbMCxbXV0scmVzcG9uc2VUaW1lb3V0OlsxZTQsW3VlLnJlcXVpcmVkLHVlLm1pbigxKV1dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoUmUodGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWUpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUiKTt0LmdldCgiY29ubmVjdFJlcXVlc3RzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImRpc2Nvbm5lY3RSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVVcGRhdGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInNlcnZlclNpZGVScGMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldChlKS5lbmFibGUoKX0pKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgicmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYyIpO2U9PT1Qbi5PTkVfV0FZPyh0LmdldCgicmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgicmVzcG9uc2VUb3BpY1FvUyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSk6KHQuZ2V0KCJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInJlc3BvbnNlVG9waWNRb1MiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKX0pKSx0aGlzLm1hcHBpbmdGb3JtLnBhdGNoVmFsdWUodGhpcy5nZXRGb3JtVmFsdWVEYXRhKCkpfWNyZWF0ZU9QQ1VBTWFwcGluZ0Zvcm0oKXt0aGlzLm1hcHBpbmdGb3JtPXRoaXMuZmIuZ3JvdXAoe2RldmljZU5vZGVTb3VyY2U6W1NuLlBBVEgsW11dLGRldmljZU5vZGVQYXR0ZXJuOlsiIixbdWUucmVxdWlyZWRdXSxkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXSxycGNfbWV0aG9kczpbW10sW11dLGF0dHJpYnV0ZXNfdXBkYXRlczpbW10sW11dfSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmlvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmlvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRpYWxvZyIsdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtIiBjbGFzcz0ia2V5LW1hcHBpbmciPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBNYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0iSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwLmdldCh0aGlzLmRhdGEubWFwcGluZ1R5cGUpIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPlxuICAgICAgICB7eyBNYXBwaW5nSGludFRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJkYXRhLm1hcHBpbmdUeXBlIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5EQVRBIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50b3BpYy1maWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZDsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS90b3BpYy1maWx0ZXJfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1Rb3MtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1xdHQtcW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3Vic2NyaXB0aW9uUW9zIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcXVhbGl0eVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9ImNvbnZlcnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGF5bG9hZC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBjb252ZXJ0b3JUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyBDb252ZXJ0b3JUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5kYXRhLWNvbnZlcnNpb248L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgICAgICAgICAge3sgRGF0YUNvbnZlcnNpb25UcmFuc2xhdGlvbnNNYXAuZ2V0KGNvbnZlcnRlclR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iY29udmVydGVyVHlwZSIgW25nU3dpdGNoXT0iY29udmVydGVyVHlwZSI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb252ZXJ0b3JUeXBlRW51bS5KU09OIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkJZVEVTIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvdXJjZVR5cGVzXT0iW3NvdXJjZVR5cGVzRW51bS5NU0csIHNvdXJjZVR5cGVzRW51bS5DT05TVF0iIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkJZVEVTIHx8IGNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJjb252ZXJ0ZXJBdHRyaWJ1dGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2YgY29udmVydGVyQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHRlbGVtZXRyeUJ1dHRvbiwgTWFwcGluZ0tleXNUeXBlLlRJTUVTRVJJRVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmV4dGVuc2lvbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5leHRlbnNpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZXh0ZW5zaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmV4dGVuc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwnY29udmVydGVyLmN1c3RvbS5leHRlbnNpb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5rZXlzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImN1c3RvbUtleXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBjdXN0b21LZXlzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAja2V5c0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwga2V5c0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkNVU1RPTSkiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdHlwZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcXVlc3RUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgUmVxdWVzdFR5cGVzVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0icmVxdWVzdFZhbHVlIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpIiBbbmdTd2l0Y2hdPSJyZXF1ZXN0TWFwcGluZ1R5cGUiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0icmVxdWVzdE1hcHBpbmdUeXBlID09PSBSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5ESVNDT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgW2Zvcm1Db250cm9sXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS50b3BpYy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5QQVJUSUFMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZnJvbS1kZXZpY2UtcmVxdWVzdC1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnRcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiIGZvcm1Hcm91cE5hbWU9ImRldmljZUluZm8iPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMuYXR0cmlidXRlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUgdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS50by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJldGFpbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkFUVFJJQlVURV9VUERBVEUiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmRldmljZU5hbWVGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuYXR0cmlidXRlLWZpbHRlci1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZUZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5hdHRyaWJ1dGVGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0icmV0YWluIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5TRVJWRVJfU0lERV9SUEMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgY2VudGVyIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuVFdPX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IlNlcnZlclNpZGVSUENUeXBlLk9ORV9XQVkiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LndpdGhvdXQtcmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tZXRob2QtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLm1ldGhvZEZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy50eXBlXCcpLnZhbHVlID09PSBTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljUW9TIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFF1YWxpdHlUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVGltZW91dCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0icmVzcG9uc2VUaW1lb3V0RXJyb3JUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iTWFwcGluZ1R5cGUuT1BDVUEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBkZXZpY2UtY29uZmlnIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVTb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBbT1BDVWFTb3VyY2VUeXBlc0VudW0uUEFUSCwgT1BDVWFTb3VyY2VUeXBlc0VudW0uSURFTlRJRklFUl0iIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBkZXZpY2Utbm9kZS1wYXR0ZXJuLWZpZWxkIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOb2RlUGF0dGVybiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVQYXR0ZXJuXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdkZXZpY2Utbm9kZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlU291cmNlXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbc291cmNlVHlwZXNdPSJPUENVYVNvdXJjZVR5cGVzIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY0F0dHJpYnV0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNBdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIG9wY0F0dHJpYnV0ZXNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5BVFRSSUJVVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudGltZXNlcmllczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBvcGNUZWxlbWV0cnkiPlxuICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNUZWxlbWV0cnlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjVGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNBdHRyaWJ1dGVzVXBkYXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlc1VwZGF0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVNfVVBEQVRFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy1tZXRob2RzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNScGNNZXRob2RzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNScGNNZXRob2RzIj5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dHJpYnV0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAjcnBjTWV0aG9kc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBycGNNZXRob2RzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJtYXBwaW5nRm9ybS5pbnZhbGlkIHx8ICFtYXBwaW5nRm9ybS5kaXJ0eSB8fCAha2V5c1BvcHVwQ2xvc2VkIj5cbiAgICAgIHt7IHRoaXMuZGF0YS5idXR0b25UaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJX06aG9zdCAua2V5LW1hcHBpbmd7bWF4LXdpZHRoOjkwMHB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLmtleS1tYXBwaW5nIC5tYXQtdG9vbGJhcnttaW4taGVpZ2h0OjY0cHh9Omhvc3QgLmtleS1tYXBwaW5nIHRiLXRvZ2dsZS1zZWxlY3R7cGFkZGluZzo0cHggMH06aG9zdCAubWF0LW1kYy1kaWFsb2ctY29udGVudHtoZWlnaHQ6NjcwcHh9Omhvc3QgLmVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lcnttYXgtd2lkdGg6NzAlfTpob3N0IDo6bmctZGVlcCAua2V5LW1hcHBpbmcgLm1hdC1tZGMtY2hpcC1saXN0Ym94IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDpub3dyYXB9Omhvc3QgOjpuZy1kZWVwIC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjQwcHg7d2lkdGg6MzUlO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5tYXQtbWRjLWZvcm0tZmllbGR7d2lkdGg6MH06aG9zdCA6Om5nLWRlZXAgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9Omhvc3QgOjpuZy1kZWVwIC5kZXZpY2UtY29uZmlne2dhcDoxMnB4O3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1ub2RlLXBhdHRlcm4tZmllbGR7ZmxleC1iYXNpczozJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcCxzZWxlY3RvcjoibWF0LWJhc2ljLWNoaXAsIFttYXQtYmFzaWMtY2hpcF0sIG1hdC1jaGlwLCBbbWF0LWNoaXBdIixpbnB1dHM6WyJyb2xlIiwiaWQiLCJhcmlhLWxhYmVsIiwiYXJpYS1kZXNjcmlwdGlvbiIsInZhbHVlIiwiY29sb3IiLCJyZW1vdmFibGUiLCJoaWdobGlnaHRlZCIsImRpc2FibGVSaXBwbGUiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJyZW1vdmVkIiwiZGVzdHJveWVkIl0sZXhwb3J0QXM6WyJtYXRDaGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcExpc3Rib3gsc2VsZWN0b3I6Im1hdC1jaGlwLWxpc3Rib3giLGlucHV0czpbIm11bHRpcGxlIiwiYXJpYS1vcmllbnRhdGlvbiIsInNlbGVjdGFibGUiLCJjb21wYXJlV2l0aCIsInJlcXVpcmVkIiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInZhbHVlIl0sb3V0cHV0czpbImNoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTprYSxzZWxlY3RvcjoiW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF0iLGlucHV0czpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOlsidXNlU291cmNlIiwicmVxdWlyZWQiLCJzb3VyY2VUeXBlcyIsImRldmljZUluZm9UeXBlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV19KX19ZSgiTWFwcGluZ0RpYWxvZ0NvbXBvbmVudCIsaW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6aW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1hcHBpbmctZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPGRpdiBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0iIGNsYXNzPSJrZXktbWFwcGluZyI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IE1hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAuZ2V0KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgIHt7IE1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImRhdGEubWFwcGluZ1R5cGUiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLkRBVEEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0ZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudG9waWMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3NcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdWJzY3JpcHRpb25Rb3MiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBRdWFsaXR5VHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0iY29udmVydGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXlsb2FkLXR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGNvbnZlcnRvclR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgIHt7IENvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmRhdGEtY29udmVyc2lvbjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj5cbiAgICAgICAgICAgICAgICB7eyBEYXRhQ29udmVyc2lvblRyYW5zbGF0aW9uc01hcC5nZXQoY29udmVydGVyVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cE5hbWVdPSJjb252ZXJ0ZXJUeXBlIiBbbmdTd2l0Y2hdPSJjb252ZXJ0ZXJUeXBlIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29udmVydG9yVHlwZUVudW0uQllURVMiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc291cmNlVHlwZXNdPSJbc291cmNlVHlwZXNFbnVtLk1TRywgc291cmNlVHlwZXNFbnVtLkNPTlNUXSIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQllURVMgfHwgY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uSlNPTiI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlckF0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBjb252ZXJ0ZXJBdHRyaWJ1dGVzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnRpbWVzZXJpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGVsZW1ldHJ5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJjb252ZXJ0ZXJUeXBlID09PSBDb252ZXJ0b3JUeXBlRW51bS5DVVNUT00iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmV4dGVuc2lvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJleHRlbnNpb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZXh0ZW5zaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2NvbnZlcnRlci5jdXN0b20uZXh0ZW5zaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiBzYW1lLXBhZGRpbmcgdGItZmxleCBjb2x1bW4iPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5leHRlbnNpb24tY29uZmlndXJhdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj57eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24taGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmtleXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY3VzdG9tS2V5cyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGN1c3RvbUtleXMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNrZXlzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBrZXlzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVxdWVzdC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcmVxdWVzdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBSZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJyZXF1ZXN0VmFsdWUiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkiIFtuZ1N3aXRjaF09InJlcXVlc3RNYXBwaW5nVHlwZSI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJyZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG9waWMtZmlsdGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBbZm9ybUNvbnRyb2xdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvdG9waWMtZmlsdGVyX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uRElTQ09OTkVDVF9SRVFVRVNUIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLlBBUlRJQUwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LmZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciIgZm9ybUdyb3VwTmFtZT0iZGV2aWNlSW5mbyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5ncy1oaW50XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldGFpbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1VQREFURSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuYXR0cmlidXRlRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXRhaW4taGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLlNFUlZFUl9TSURFX1JQQyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBjZW50ZXIgYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS53aXRoLXJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuT05FX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aG91dC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWV0aG9kLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5tZXRob2RGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnR5cGVcJykudmFsdWUgPT09IFNlcnZlclNpZGVSUENUeXBlLlRXT19XQVkiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVG9waWNRb1MiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHF1YWxpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJyZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUaW1lb3V0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5PUENVQSI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGRldmljZS1jb25maWciPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTm9kZVNvdXJjZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIFtPUENVYVNvdXJjZVR5cGVzRW51bS5QQVRILCBPUENVYVNvdXJjZVR5cGVzRW51bS5JREVOVElGSUVSXSIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGRldmljZS1ub2RlLXBhdHRlcm4tZmllbGQiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVQYXR0ZXJuIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlUGF0dGVyblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ2RldmljZS1ub2RlXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVTb3VyY2VcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtzb3VyY2VUeXBlc109Ik9QQ1VhU291cmNlVHlwZXMiIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjQXR0cmlidXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY0F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjQXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIG9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY1RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBvcGNUZWxlbWV0cnlCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5USU1FU0VSSUVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlLXVwZGF0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXNVcGRhdGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNBdHRyaWJ1dGVzVXBkYXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIGF0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFU19VUERBVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLW1ldGhvZHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1JwY01ldGhvZHMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY1JwY01ldGhvZHMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNycGNNZXRob2RzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY01ldGhvZHNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09Im1hcHBpbmdGb3JtLmludmFsaWQgfHwgIW1hcHBpbmdGb3JtLmRpcnR5IHx8ICFrZXlzUG9wdXBDbG9zZWQiPlxuICAgICAge3sgdGhpcy5kYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpncmlkO2hlaWdodDoxMDAlfTpob3N0IC5rZXktbWFwcGluZ3ttYXgtd2lkdGg6OTAwcHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAua2V5LW1hcHBpbmcgLm1hdC10b29sYmFye21pbi1oZWlnaHQ6NjRweH06aG9zdCAua2V5LW1hcHBpbmcgdGItdG9nZ2xlLXNlbGVjdHtwYWRkaW5nOjRweCAwfTpob3N0IC5tYXQtbWRjLWRpYWxvZy1jb250ZW50e2hlaWdodDo2NzBweH06aG9zdCAuZWxsaXBzaXMtY2hpcHMtY29udGFpbmVye21heC13aWR0aDo3MCV9Omhvc3QgOjpuZy1kZWVwIC5rZXktbWFwcGluZyAubWF0LW1kYy1jaGlwLWxpc3Rib3ggLm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBze2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOm5vd3JhcH06aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6NDBweDt3aWR0aDozNSU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAudGItZm9ybS1yb3cgLm1hdC1tZGMtZm9ybS1maWVsZHt3aWR0aDowfTpob3N0IDo6bmctZGVlcCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1jb25maWd7Z2FwOjEycHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fTpob3N0IDo6bmctZGVlcCAuZGV2aWNlLW5vZGUtcGF0dGVybi1maWVsZHtmbGV4LWJhc2lzOjMlfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSk7Y2xhc3Mgcm97c2V0IG1hcHBpbmdUeXBlKGUpe3RoaXMubWFwcGluZ1R5cGVWYWx1ZSE9PWUmJih0aGlzLm1hcHBpbmdUeXBlVmFsdWU9ZSl9Z2V0IG1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ1R5cGVWYWx1ZX1jb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLnRyYW5zbGF0ZT1lLHRoaXMuZGlhbG9nPXQsdGhpcy5kaWFsb2dTZXJ2aWNlPW4sdGhpcy5mYj1hLHRoaXMucmVxdWlyZWQ9ITEsdGhpcy5tYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLm1hcHBpbmdUeXBlRW51bT1mbix0aGlzLmRpc3BsYXllZENvbHVtbnM9W10sdGhpcy5tYXBwaW5nQ29sdW1ucz1bXSx0aGlzLnRleHRTZWFyY2hNb2RlPSExLHRoaXMuaGlkZVBhZ2VTaXplPSExLHRoaXMuYWN0aXZlVmFsdWU9ITEsdGhpcy5kaXJ0eVZhbHVlPSExLHRoaXMudGV4dFNlYXJjaD10aGlzLmZiLmNvbnRyb2woIiIse25vbk51bGxhYmxlOiEwfSksdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFwcGluZ0Zvcm1Hcm91cD10aGlzLmZiLmFycmF5KFtdKSx0aGlzLmRpcnR5VmFsdWU9IXRoaXMuYWN0aXZlVmFsdWUsdGhpcy5kYXRhU291cmNlPW5ldyBzb31uZ09uSW5pdCgpe3RoaXMuc2V0TWFwcGluZ0NvbHVtbnMoKSx0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCguLi50aGlzLm1hcHBpbmdDb2x1bW5zLm1hcCgoZT0+ZS5kZWYpKSwiYWN0aW9ucyIpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVUYWJsZURhdGEoZSksdGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGV4dFNlYXJjaC52YWx1ZUNoYW5nZXMucGlwZShWZSgxNTApLEJlKCgoZSx0KT0+KGU/PyIiKT09PXQudHJpbSgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9ZS50cmltKCk7dGhpcy51cGRhdGVUYWJsZURhdGEodGhpcy5tYXBwaW5nRm9ybUdyb3VwLnZhbHVlLHQudHJpbSgpKX0pKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5tYXBwaW5nRm9ybUdyb3VwLmNsZWFyKCksdGhpcy5wdXNoRGF0YUFzRm9ybUFycmF5cyhlKX12YWxpZGF0ZSgpe3JldHVybiF0aGlzLnJlcXVpcmVkfHx0aGlzLm1hcHBpbmdGb3JtR3JvdXAuY29udHJvbHMubGVuZ3RoP251bGw6e21hcHBpbmdGb3JtR3JvdXA6e3ZhbGlkOiExfX19ZW50ZXJGaWx0ZXJNb2RlKCl7dGhpcy50ZXh0U2VhcmNoTW9kZT0hMCxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5zZWFyY2hJbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKX0pLDEwKX1leGl0RmlsdGVyTW9kZSgpe3RoaXMudXBkYXRlVGFibGVEYXRhKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VNYXBwaW5nKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPWllKHQpP3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5hdCh0KS52YWx1ZTp7fTt0aGlzLmRpYWxvZy5vcGVuKGlvLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7bWFwcGluZ1R5cGU6dGhpcy5tYXBwaW5nVHlwZSx2YWx1ZTpuLGJ1dHRvblRpdGxlOnJlKHQpPyJhY3Rpb24uYWRkIjoiYWN0aW9uLmFwcGx5In19KS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihpZSh0KT90aGlzLm1hcHBpbmdGb3JtR3JvdXAuYXQodCkucGF0Y2hWYWx1ZShlKTp0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKFtlXSksdGhpcy5tYXBwaW5nRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfXVwZGF0ZVRhYmxlRGF0YShlLHQpe2xldCBuPWUubWFwKChlPT50aGlzLmdldE1hcHBpbmdWYWx1ZShlKSkpO3QmJihuPW4uZmlsdGVyKChlPT5PYmplY3QudmFsdWVzKGUpLnNvbWUoKGU9PmUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSkpKSkpKSx0aGlzLmRhdGFTb3VyY2UubG9hZERhdGEobil9ZGVsZXRlTWFwcGluZyhlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtbWFwcGluZy10aXRsZSIpLCIiLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi5ubyIpLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi55ZXMiKSwhMCkuc3Vic2NyaWJlKChlPT57ZSYmKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5yZW1vdmVBdCh0KSx0aGlzLm1hcHBpbmdGb3JtR3JvdXAubWFya0FzRGlydHkoKSl9KSl9cHVzaERhdGFBc0Zvcm1BcnJheXMoZSl7ZT8ubGVuZ3RoJiZlLmZvckVhY2goKGU9PnRoaXMubWFwcGluZ0Zvcm1Hcm91cC5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1nZXRNYXBwaW5nVmFsdWUoZSl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTpjb25zdCB0PUNuLmdldChlLmNvbnZlcnRlcj8udHlwZSk7cmV0dXJue3RvcGljRmlsdGVyOmUudG9waWNGaWx0ZXIsUW9TOmUuc3Vic2NyaXB0aW9uUW9zLGNvbnZlcnRlcjp0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQodCk6IiJ9O2Nhc2UgZm4uUkVRVUVTVFM6bGV0IG47Y29uc3QgYT1lO3JldHVybiBuPWEucmVxdWVzdFR5cGU9PT1Jbi5BVFRSSUJVVEVfVVBEQVRFP2EucmVxdWVzdFZhbHVlLmF0dHJpYnV0ZUZpbHRlcjphLnJlcXVlc3RUeXBlPT09SW4uU0VSVkVSX1NJREVfUlBDP2EucmVxdWVzdFZhbHVlLm1ldGhvZEZpbHRlcjphLnJlcXVlc3RWYWx1ZS50b3BpY0ZpbHRlcix7cmVxdWVzdFR5cGU6ZS5yZXF1ZXN0VHlwZSx0eXBlOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoQW4uZ2V0KGUucmVxdWVzdFR5cGUpKSxkZXRhaWxzOm59O2Nhc2UgZm4uT1BDVUE6Y29uc3Qgbz1lLmRldmljZUluZm8/LmRldmljZU5hbWVFeHByZXNzaW9uLGk9ZS5kZXZpY2VJbmZvPy5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbix7ZGV2aWNlTm9kZVBhdHRlcm46cn09ZTtyZXR1cm57ZGV2aWNlTm9kZVBhdHRlcm46cixkZXZpY2VOYW1lUGF0dGVybjpvLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOml9O2RlZmF1bHQ6cmV0dXJue319fXNldE1hcHBpbmdDb2x1bW5zKCl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTp0aGlzLm1hcHBpbmdDb2x1bW5zLnB1c2goe2RlZjoidG9waWNGaWx0ZXIiLHRpdGxlOiJnYXRld2F5LnRvcGljLWZpbHRlciJ9LHtkZWY6IlFvUyIsdGl0bGU6ImdhdGV3YXkubXF0dC1xb3MifSx7ZGVmOiJjb252ZXJ0ZXIiLHRpdGxlOiJnYXRld2F5LnBheWxvYWQtdHlwZSJ9KTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJ0eXBlIix0aXRsZToiZ2F0ZXdheS50eXBlIn0se2RlZjoiZGV0YWlscyIsdGl0bGU6ImdhdGV3YXkuZGV0YWlscyJ9KTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJkZXZpY2VOb2RlUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5vZGUifSx7ZGVmOiJkZXZpY2VOYW1lUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5hbWUifSx7ZGVmOiJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLXByb2ZpbGUifSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cm8sZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpybyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIixtYXBwaW5nVHlwZToibWFwcGluZ1R5cGUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cm8pKSxtdWx0aTohMH1dLHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzZWFyY2hJbnB1dEZpZWxkIixmaXJzdDohMCxwcmVkaWNhdGU6WyJzZWFyY2hJbnB1dCJdLGRlc2NlbmRhbnRzOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmctdGFibGUgdGItYWJzb2x1dGUtZmlsbCI+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLXRpdGxlIj57e21hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldChtYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJlbnRlckZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5zZWFyY2hcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0idGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPiZuYnNwOzwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0idGV4dFNlYXJjaCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnY29tbW9uLmVudGVyLXNlYXJjaFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9ImV4aXRGaWx0ZXJNb2RlKCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uY2xvc2VcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPGRpdiBjbGFzcz0idGFibGUtY29udGFpbmVyIj5cbiAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iY29sdW1uLmRlZiIgKm5nRm9yPSJsZXQgY29sdW1uIG9mIG1hcHBpbmdDb2x1bW5zOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCB0YlRydW5jYXRlV2l0aFRvb2x0aXAgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IG1hcHBpbmdbY29sdW1uLmRlZl0gfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImFjdGlvbnMiIHN0aWNreUVuZD5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJywgdGV4dEFsaWduOiBcJ2NlbnRlclwnfSI+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgbWFwcGluZzsgbGV0IGkgPSBpbmRleCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCd9Ij5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcm93QWN0aW9ucz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlTWFwcGluZygkZXZlbnQsIGkpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbj5kZWxldGU8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cubHQtbGcgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09ImNlbGxBY3Rpb25zTWVudSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjY2VsbEFjdGlvbnNNZW51PSJtYXRNZW51IiB4UG9zaXRpb249ImJlZm9yZSI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBbbmdDbGFzc109IntcJ21hdC1yb3ctc2VsZWN0XCc6IHRydWV9IiAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9ImxldCBtYXBwaW5nOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDxzZWN0aW9uIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUgJiYgKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpIiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1oZWFkbGluZS01IHRiLWFic29sdXRlLWZpbGwgdGItYWRkLW5ldyI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz0iY29ubmVjdG9yIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnR7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQudGItb3V0bGluZWQtYm9yZGVye2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRpdGxlLWNvbnRhaW5lcntvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGItbWFwcGluZy10YWJsZS10aXRsZXtwYWRkaW5nLXJpZ2h0OjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1ue3BhZGRpbmc6MCAxMnB4O3dpZHRoOjIzJX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbi5yZXF1ZXN0LWNvbHVtbnt3aWR0aDozOCV9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAuZWxsaXBzaXN7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctYm90dG9tOjVweDt3aWR0aDoxMDAlfX06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbHtjdXJzb3I6cG9pbnRlcn06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbCAubWF0LWljb257aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtmb250LXNpemU6MjRweDtjb2xvcjojNzU3NTc1fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5Bc3luY1BpcGUsbmFtZToiYXN5bmMifSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdENsYXNzRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ0NsYXNzXSwgW25nQ2xhc3MueHNdLCBbbmdDbGFzcy5zbV0sIFtuZ0NsYXNzLm1kXSwgW25nQ2xhc3MubGddLCBbbmdDbGFzcy54bF0sICBbbmdDbGFzcy5sdC1zbV0sIFtuZ0NsYXNzLmx0LW1kXSwgW25nQ2xhc3MubHQtbGddLCBbbmdDbGFzcy5sdC14bF0sICBbbmdDbGFzcy5ndC14c10sIFtuZ0NsYXNzLmd0LXNtXSwgW25nQ2xhc3MuZ3QtbWRdLCBbbmdDbGFzcy5ndC1sZ10iLGlucHV0czpbIm5nQ2xhc3MiLCJuZ0NsYXNzLnhzIiwibmdDbGFzcy5zbSIsIm5nQ2xhc3MubWQiLCJuZ0NsYXNzLmxnIiwibmdDbGFzcy54bCIsIm5nQ2xhc3MubHQtc20iLCJuZ0NsYXNzLmx0LW1kIiwibmdDbGFzcy5sdC1sZyIsIm5nQ2xhc3MubHQteGwiLCJuZ0NsYXNzLmd0LXhzIiwibmdDbGFzcy5ndC1zbSIsIm5nQ2xhc3MuZ3QtbWQiLCJuZ0NsYXNzLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U3R5bGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nU3R5bGVdLCAgW25nU3R5bGUueHNdLCBbbmdTdHlsZS5zbV0sIFtuZ1N0eWxlLm1kXSwgW25nU3R5bGUubGddLCBbbmdTdHlsZS54bF0sICBbbmdTdHlsZS5sdC1zbV0sIFtuZ1N0eWxlLmx0LW1kXSwgW25nU3R5bGUubHQtbGddLCBbbmdTdHlsZS5sdC14bF0sICBbbmdTdHlsZS5ndC14c10sIFtuZ1N0eWxlLmd0LXNtXSwgW25nU3R5bGUuZ3QtbWRdLCBbbmdTdHlsZS5ndC1sZ10iLGlucHV0czpbIm5nU3R5bGUiLCJuZ1N0eWxlLnhzIiwibmdTdHlsZS5zbSIsIm5nU3R5bGUubWQiLCJuZ1N0eWxlLmxnIiwibmdTdHlsZS54bCIsIm5nU3R5bGUubHQtc20iLCJuZ1N0eWxlLmx0LW1kIiwibmdTdHlsZS5sdC1sZyIsIm5nU3R5bGUubHQteGwiLCJuZ1N0eWxlLmd0LXhzIiwibmdTdHlsZS5ndC1zbSIsIm5nU3R5bGUuZ3QtbWQiLCJuZ1N0eWxlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJ0LlRiSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItaWNvbiIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbInRiSWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIk1hcHBpbmdUYWJsZUNvbXBvbmVudCIscm8pLEhlKFtOKCldLHJvLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpybyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbWFwcGluZy10YWJsZSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy10YWJsZSB0Yi1hYnNvbHV0ZS1maWxsIj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InRiLW1hcHBpbmctdGFibGUtY29udGVudCI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiICpuZ0lmPSIoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykgPT09IGZhbHNlIj5cbiAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzdGFydCBjZW50ZXIiIGZ4TGF5b3V0LnhzPSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ24ueHM9ImNlbnRlciBzdGFydCIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9InRiLW1hcHBpbmctdGFibGUtdGl0bGUiPnt7bWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KG1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJjb2x1bW4uZGVmIiAqbmdGb3I9ImxldCBjb2x1bW4gb2YgbWFwcGluZ0NvbHVtbnM7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgY29sdW1uLnRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCAqbWF0Q2VsbERlZj0ibGV0IG1hcHBpbmciIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgbWFwcGluZ1tjb2x1bW4uZGVmXSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCc5NnB4XCcsIG1heFdpZHRoOiBcJzk2cHhcJywgd2lkdGg6IFwnOTZweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZGVsZXRlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmRlbGV0ZTwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmd0LW1kIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5sdC1sZyBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT0iY2VsbEFjdGlvbnNNZW51Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNjZWxsQWN0aW9uc01lbnU9Im1hdE1lbnUiIHhQb3NpdGlvbj0iYmVmb3JlIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG1hdC1oZWFkZXItcm93IFtuZ0NsYXNzXT0ie1wnbWF0LXJvdy1zZWxlY3RcJzogdHJ1ZX0iICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj0ibGV0IG1hcHBpbmc7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7Ij48L21hdC1yb3c+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPHNlY3Rpb24gW2Z4U2hvd109IiF0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgICAgICBjbGFzcz0ibWF0LWhlYWRsaW5lLTUgdGItYWJzb2x1dGUtZmlsbCB0Yi1hZGQtbmV3Ij5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPSJjb25uZWN0b3IiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gW2Z4U2hvd109InRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSJcbiAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgIGNsYXNzPSJuby1kYXRhLWZvdW5kIiB0cmFuc2xhdGU+XG4gICAgICB3aWRnZXQubm8tZGF0YS1mb3VuZFxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudC50Yi1vdXRsaW5lZC1ib3JkZXJ7Ym94LXNoYWRvdzowIDAgIzAwMDMsMCAwICMwMDAwMDAyNCwwIDAgIzAwMDAwMDFmO2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMDtib3JkZXItcmFkaXVzOjRweH06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5tYXQtdG9vbGJhci10b29sc3ttaW4taGVpZ2h0OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGl0bGUtY29udGFpbmVye292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctcmlnaHQ6MjBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxle3RhYmxlLWxheW91dDpmaXhlZDttaW4td2lkdGg6NDUwcHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxlIC50YWJsZS12YWx1ZS1jb2x1bW57cGFkZGluZzowIDEycHg7d2lkdGg6MjMlfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1uLnJlcXVlc3QtY29sdW1ue3dpZHRoOjM4JX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5lbGxpcHNpc3tvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAubm8tZGF0YS1mb3VuZHtoZWlnaHQ6Y2FsYygxMDAlIC0gMTIwcHgpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5OXB4KXs6aG9zdCAubWF0LXRvb2xiYXJ7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxMDBweH06aG9zdCAubWF0LXRvb2xiYXIgLnRiLW1hcHBpbmctdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntyZXF1aXJlZDpbe3R5cGU6YX1dLG1hcHBpbmdUeXBlOlt7dHlwZTphfV0sc2VhcmNoSW5wdXRGaWVsZDpbe3R5cGU6byxhcmdzOlsic2VhcmNoSW5wdXQiXX1dfX0pO2NsYXNzIHNvIGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9fWUoIk1hcHBpbmdEYXRhc291cmNlIixzbyk7Y2xhc3MgbG97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLnRpdGxlPSJnYXRld2F5LnNlY3VyaXR5Iix0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsPSExLHRoaXMuQnJva2VyU2VjdXJpdHlUeXBlPXJuLHRoaXMuc2VjdXJpdHlUeXBlcz1PYmplY3QudmFsdWVzKHJuKSx0aGlzLm1vZGVUeXBlcz1PYmplY3QudmFsdWVzKHBuKSx0aGlzLlNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcD1tbix0aGlzLmRlc3Ryb3kkPW5ldyBTZX1uZ09uSW5pdCgpe3RoaXMuc2VjdXJpdHlGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dHlwZTpbcm4uQU5PTllNT1VTLFtdXSx1c2VybmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFzc3dvcmQ6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHBhdGhUb0NBQ2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvUHJpdmF0ZUtleTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvQ2xpZW50Q2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsJiZ0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmFkZENvbnRyb2woIm1vZGUiLHRoaXMuZmIuY29udHJvbChwbi5OT05FLFtdKSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXtpZihlKWUudHlwZXx8KGUudHlwZT1ybi5BTk9OWU1PVVMpLHRoaXMudXBkYXRlVmFsaWRhdG9ycyhlLnR5cGUpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAucmVzZXQoZSx7ZW1pdEV2ZW50OiExfSk7ZWxzZXtjb25zdCBlPXt0eXBlOnJuLkFOT05ZTU9VU307dGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlLHtlbWl0RXZlbnQ6ITF9KX10aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlIT09cm4uQkFTSUN8fHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VjdXJpdHlGb3JtOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dXBkYXRlVmFsaWRhdG9ycyhlKXtpZihlKWlmKHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DQUNlcnQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DbGllbnRDZXJ0IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoIm1vZGUiKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZT09PXJuLkJBU0lDKXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTtlbHNlIGlmKGU9PT1ybi5DRVJUSUZJQ0FURVMmJih0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvQ0FDZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhdGhUb0NsaWVudENlcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwpKXtjb25zdCBlPXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJtb2RlIik7ZSYmIWUudmFsdWUmJmUuc2V0VmFsdWUocG4uTk9ORSx7ZW1pdEV2ZW50OiExfSksZT8uZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidXNlcm5hbWUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6bG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czp7dGl0bGU6InRpdGxlIixleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDoiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHNhbWUtcGFkZGluZyB0Yi1mbGV4IGNvbHVtbiIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Rm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5CQVNJQyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJCcm9rZXJTZWN1cml0eVR5cGUuQ0VSVElGSUNBVEVTIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5wYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuQ0EtY2VydGlmaWNhdGUtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DQUNlcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9Qcml2YXRlS2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGF0aFRvQ2xpZW50Q2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibW9kZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAge3sgdHlwZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja31cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2gsc2VsZWN0b3I6IltuZ1N3aXRjaF0iLGlucHV0czpbIm5nU3dpdGNoIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaENhc2Usc2VsZWN0b3I6IltuZ1N3aXRjaENhc2VdIixpbnB1dHM6WyJuZ1N3aXRjaENhc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIlNlY3VyaXR5Q29uZmlnQ29tcG9uZW50IixsbyksSGUoW04oKV0sbG8ucHJvdG90eXBlLCJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmxvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc2VjdXJpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgIHt7IFNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnVzZXJuYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5DRVJUSUZJQ0FURVMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LnBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5DQS1jZXJ0aWZpY2F0ZS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb0NBQ2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb1ByaXZhdGVLZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DbGllbnRDZXJ0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImV4dGVuZENlcnRpZmljYXRlc01vZGVsIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5tb2RlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGVUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyB0eXBlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7dGl0bGU6W3t0eXBlOmF9XSxleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDpbe3R5cGU6YX1dfX0pO2NsYXNzIGNve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5zZWN1cml0eVBvbGljeVR5cGVzPV9uLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3VybDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdGltZW91dEluTWlsbGlzOlsxZTMsW3VlLnJlcXVpcmVkLHVlLm1pbigxZTMpXV0sc2NhblBlcmlvZEluTWlsbGlzOltWLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMWUzKV1dLHBvbGxQZXJpb2RJbk1pbGxpczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oNTApXV0sZW5hYmxlU3Vic2NyaXB0aW9uczpbITAsW11dLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEwMCldXSxzaG93TWFwOlshMSxbXV0sc2VjdXJpdHk6W1VuLkJBU0lDMTI4LFtdXSxpZGVudGl0eTpbXX0pLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5oaWRlTmV3RmllbGRzJiZ0aGlzLnNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoInBvbGxQZXJpb2RJbk1pbGxpcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VydmVyQ29uZmlnRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7Y29uc3R7dGltZW91dEluTWlsbGlzOnQ9MWUzLHNjYW5QZXJpb2RJbk1pbGxpczpuPVYscG9sbFBlcmlvZEluTWlsbGlzOmE9NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6bz0hMCxzdWJDaGVja1BlcmlvZEluTWlsbGlzOmk9MTAwLHNob3dNYXA6cj0hMSxzZWN1cml0eTpzPVVuLkJBU0lDMTI4LGlkZW50aXR5Omw9e319PWU7dGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAucmVzZXQoey4uLmUsdGltZW91dEluTWlsbGlzOnQsc2NhblBlcmlvZEluTWlsbGlzOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsZW5hYmxlU3Vic2NyaXB0aW9uczpvLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6aSxzaG93TWFwOnIsc2VjdXJpdHk6cyxpZGVudGl0eTpsfSx7ZW1pdEV2ZW50OiExfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmNvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czp7aGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmxvLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czpbInRpdGxlIiwiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNTZXJ2ZXJDb25maWdDb21wb25lbnQiLGNvKSxIZShbTigpXSxjby5wcm90b3R5cGUsImhpZGVOZXdGaWVsZHMiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Y28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7aGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dfX0pO2NsYXNzIHBvIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWFwcGluZ1R5cGVzPWZuLHRoaXMuaXNMZWdhY3k9ITF9aW5pdEJhc2ljRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe21hcHBpbmc6W10sc2VydmVyOltdfSl9bWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSl7cmV0dXJue3NlcnZlcjplLnNlcnZlcj8/e30sbWFwcGluZzplLm1hcHBpbmc/P1tdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOmUuc2VydmVyLG1hcHBpbmc6ZS5tYXBwaW5nfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnBvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnBvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNVYUJhc2ljQ29uZmlnQ29tcG9uZW50IixwbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5wbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgbW97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLm1xdHRWZXJzaW9ucz1nbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5icm9rZXJDb25maWdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7aG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSx2ZXJzaW9uOls1LFtdXSxjbGllbnRJZDpbInRiX2d3XyIrc2UoNSksW3VlLnBhdHRlcm4oa3QpXV0sc2VjdXJpdHk6W119KSx0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWdlbmVyYXRlKGUpe3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLmdldChlKT8ucGF0Y2hWYWx1ZSgidGJfZ3dfIitzZSg1KSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2NvbnN0e3ZlcnNpb246dD01LGNsaWVudElkOm49YHRiX2d3XyR7c2UoNSl9YCxzZWN1cml0eTphPXt9fT1lO3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLnJlc2V0KHsuLi5lLHZlcnNpb246dCxjbGllbnRJZDpuLHNlY3VyaXR5OmF9LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnticm9rZXJDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTptbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTptbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9Pm1vKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpsbyxzZWxlY3RvcjoidGItc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJ0aXRsZSIsImV4dGVuZENlcnRpZmljYXRlc01vZGVsIl19LHtraW5kOiJwaXBlIix0eXBlOndhLG5hbWU6ImdldEdhdGV3YXlQb3J0VG9vbHRpcCJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiQnJva2VyQ29uZmlnQ29udHJvbENvbXBvbmVudCIsbW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLHdhXSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5tbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyB1b3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21heE51bWJlck9mV29ya2VyczpbMTAwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSldXSxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOlsxMCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV19KSx0aGlzLndvcmtlcnNDb25maWdGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7Y29uc3R7bWF4TnVtYmVyT2ZXb3JrZXJzOnQsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjpufT1lO3RoaXMud29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5yZXNldCh7bWF4TnVtYmVyT2ZXb3JrZXJzOnR8fDEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOm58fDEwfSx7ZW1pdEV2ZW50OiExfSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwLnZhbGlkP251bGw6e3dvcmtlcnNDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp1byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnVvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+dW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09IndvcmtlcnNDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9Im1heE51bWJlck9mV29ya2VycyJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TnVtYmVyT2ZXb3JrZXJzXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIFtzdHlsZS53aWR0aC4lXT0iNTAiXG4gICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXJcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TWVzc2FnZU51bWJlclBlcldvcmtlciJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiV29ya2Vyc0NvbmZpZ0NvbnRyb2xDb21wb25lbnQiLHVvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnVvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT51bykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBbZm9ybUdyb3VwXT0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiBbc3R5bGUud2lkdGguJV09IjUwIlxuICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TnVtYmVyT2ZXb3JrZXJzIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1udW1iZXItb2Ytd29ya2Vycy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiB0eXBlPSJudW1iZXIiIG1pbj0iMSIgZm9ybUNvbnRyb2xOYW1lPSJtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IndvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS50b3VjaGVkKSJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIGdve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmlzRXhwYW5zaW9uTW9kZT0hMSx0aGlzLmRlZmF1bHRWYWx1ZT1sbi5LZXksdGhpcy5yZXBvcnRTdHJhdGVneVR5cGVzPU9iamVjdC52YWx1ZXMoc24pLHRoaXMuUmVwb3J0VHlwZVRyYW5zbGF0ZU1hcD1jbix0aGlzLlJlcG9ydFN0cmF0ZWd5VHlwZT1zbix0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTdHJhdGVneUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W3t2YWx1ZTpzbi5PblJlcG9ydFBlcmlvZCxkaXNhYmxlZDohMH0sW11dLHJlcG9ydFBlcmlvZDpbe3ZhbHVlOnRoaXMuZGVmYXVsdFZhbHVlLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5Rm9ybUNoYW5nZSgpLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5VG9nZ2xlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmlzRXhwYW5zaW9uTW9kZSYmdGhpcy5zaG93U3RyYXRlZ3lDb250cm9sLnNldFZhbHVlKCEhZSx7ZW1pdEV2ZW50OiExfSksZSYmdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pO2NvbnN0e3R5cGU6dD1zbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6bj10aGlzLmRlZmF1bHRWYWx1ZX09ZT8/e307dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5zZXRWYWx1ZSh7dHlwZTp0LHJlcG9ydFBlcmlvZDpufSx7ZW1pdEV2ZW50OiExfSksdGhpcy5vblR5cGVDaGFuZ2UodCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWxpZHx8dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5kaXNhYmxlZD9udWxsOntyZXBvcnRTdHJhdGVneUZvcm06e3ZhbGlkOiExfX19cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX1vYnNlcnZlU3RyYXRlZ3lGb3JtQ2hhbmdlKCl7dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy5vblR5cGVDaGFuZ2UoZSkpKX1vYnNlcnZlU3RyYXRlZ3lUb2dnbGUoKXt0aGlzLnNob3dTdHJhdGVneUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCksTWUoKCgpPT50aGlzLmlzRXhwYW5zaW9uTW9kZSkpKS5zdWJzY3JpYmUoKGU9PntlPyh0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoInJlcG9ydFBlcmlvZCIpLmFkZFZhbGlkYXRvcnModWUucmVxdWlyZWQpLHRoaXMub25DaGFuZ2UodGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZSkpOih0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKS5yZW1vdmVWYWxpZGF0b3JzKHVlLnJlcXVpcmVkKSx0aGlzLm9uQ2hhbmdlKG51bGwpKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfW9uVHlwZUNoYW5nZShlKXtjb25zdCB0PXRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKTtlPT09c24uT25DaGFuZ2U/dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmlzRXhwYW5zaW9uTW9kZSYmIXRoaXMuc2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZXx8dC5lbmFibGUoe2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpnbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsaW5wdXRzOntpc0V4cGFuc2lvbk1vZGU6ImlzRXhwYW5zaW9uTW9kZSIsZGVmYXVsdFZhbHVlOiJkZWZhdWx0VmFsdWUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Z28pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0lmPSJpc0V4cGFuc2lvbk1vZGUgZWxzZSBkZWZhdWx0TW9kZSIgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U3RyYXRlZ3lDb250cm9sLnZhbHVlIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1N0cmF0ZWd5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InN0cmF0ZWd5RmllbGRzIj48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNb2RlPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjc3RyYXRlZ3lGaWVsZHM+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcG9ydFN0cmF0ZWd5VHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IFJlcG9ydFR5cGVUcmFuc2xhdGVNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUgIT09IFJlcG9ydFN0cmF0ZWd5VHlwZS5PbkNoYW5nZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPlxuICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgIGdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5LnJlcG9ydC1wZXJpb2RcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJSZXBvcnRTdHJhdGVneUNvbXBvbmVudCIsZ28pLEhlKFtOKCldLGdvLnByb3RvdHlwZSwiaXNFeHBhbnNpb25Nb2RlIix2b2lkIDApLEhlKFtCKCldLGdvLnByb3RvdHlwZSwiZGVmYXVsdFZhbHVlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmdvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0icmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdJZj0iaXNFeHBhbnNpb25Nb2RlIGVsc2UgZGVmYXVsdE1vZGUiIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZSI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTdHJhdGVneUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TW9kZT5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWw8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0ic3RyYXRlZ3lGaWVsZHMiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3N0cmF0ZWd5RmllbGRzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiPnt7IFwnZ2F0ZXdheS50eXBlXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiByZXBvcnRTdHJhdGVneVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBSZXBvcnRUeXBlVHJhbnNsYXRlTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBSZXBvcnRTdHJhdGVneVR5cGUuT25DaGFuZ2UiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj5cbiAgICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5cbiAgICAgICAgICBnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5yZXBvcnQtcGVyaW9kXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0UGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntpc0V4cGFuc2lvbk1vZGU6W3t0eXBlOmF9XSxkZWZhdWx0VmFsdWU6W3t0eXBlOmF9XX19KTtjbGFzcyBmb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5pc01hc3Rlcj0hMSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5tb2RidXNEYXRhVHlwZXM9T2JqZWN0LnZhbHVlcyhlYSksdGhpcy5tb2RpZmllclR5cGVzPU9iamVjdC52YWx1ZXMoT24pLHRoaXMud2l0aEZ1bmN0aW9uQ29kZT0hMCx0aGlzLndpdGhSZXBvcnRTdHJhdGVneT0hMCx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXA9bmV3IE1hcCx0aGlzLnNob3dNb2RpZmllcnNNYXA9bmV3IE1hcCx0aGlzLmZ1bmN0aW9uQ29kZXNNYXA9bmV3IE1hcCx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVtdLHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXM9dGEsdGhpcy5Nb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXA9enQsdGhpcy5Nb2RpZmllclR5cGVzTWFwPVJuLHRoaXMuUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWU9bG4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5kZWZhdWx0UmVhZEZ1bmN0aW9uQ29kZXM9WzMsNF0sdGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXM9WzEsMl0sdGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzPVs2LDE2XSx0aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM9WzUsMTVdfW5nT25Jbml0KCl7dGhpcy53aXRoRnVuY3Rpb25Db2RlPSF0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVMsdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3k9ISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuaGlkZU5ld0ZpZWxkcyksdGhpcy5rZXlzTGlzdEZvcm1BcnJheT10aGlzLnByZXBhcmVLZXlzRm9ybUFycmF5KHRoaXMudmFsdWVzKSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPXRoaXMuZ2V0RGVmYXVsdEZ1bmN0aW9uQ29kZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX10cmFja0J5Q29udHJvbElkKGUsdCl7cmV0dXJuIHQudmFsdWUuaWR9YWRkS2V5KCl7Y29uc3QgZT1zZSg1KSx0PXRoaXMuZmIuZ3JvdXAoe3RhZzpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6W3t2YWx1ZToiIixkaXNhYmxlZDohdGhpcy5pc01hc3Rlcn0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbZWEuQllURVMsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbnVsbCxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6WzEsW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6dGhpcy5nZXREZWZhdWx0RnVuY3Rpb25Db2RlcygpWzBdLGRpc2FibGVkOiF0aGlzLndpdGhGdW5jdGlvbkNvZGV9LFt1ZS5yZXF1aXJlZF1dLHJlcG9ydFN0cmF0ZWd5Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3l9XSxtb2RpZmllclR5cGU6W3t2YWx1ZTpPbi5NVUxUSVBMSUVSLGRpc2FibGVkOiEwfV0sbW9kaWZpZXJWYWx1ZTpbe3ZhbHVlOjEsZGlzYWJsZWQ6ITB9LFt1ZS5wYXR0ZXJuKEZ0KV1dLGlkOlt7dmFsdWU6ZSxkaXNhYmxlZDohMH1dfSk7dGhpcy5zaG93TW9kaWZpZXJzTWFwLnNldChlLCExKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KGUsdGhpcy5mYi5jb250cm9sKCExKSksdGhpcy5vYnNlcnZlS2V5RGF0YVR5cGUodCksdGhpcy5vYnNlcnZlRW5hYmxlTW9kaWZpZXIodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5wdXNoKHQpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5yZW1vdmVBdCh0KSx0aGlzLmtleXNMaXN0Rm9ybUFycmF5Lm1hcmtBc0RpcnR5KCl9Y2FuY2VsKCl7dGhpcy5wb3BvdmVyLmhpZGUoKX1hcHBseUtleXNEYXRhKCl7dGhpcy5rZXlzRGF0YUFwcGxpZWQuZW1pdCh0aGlzLmdldEZvcm1WYWx1ZSgpKX1nZXRGb3JtVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXBLZXlzV2l0aE1vZGlmaWVyKHRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5P3RoaXMuY2xlYW5VcEVtcHR5U3RyYXRlZ2llcyh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKTp0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKX1jbGVhblVwRW1wdHlTdHJhdGVnaWVzKGUpe3JldHVybiBlLm1hcCgoZT0+e2NvbnN0e3JlcG9ydFN0cmF0ZWd5OnQsLi4ubn09ZTtyZXR1cm4gdD9lOm59KSl9bWFwS2V5c1dpdGhNb2RpZmllcihlKXtyZXR1cm4gZS5tYXAoKChlLHQpPT57aWYodGhpcy5zaG93TW9kaWZpZXJzTWFwLmdldCh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzW3RdLmdldCgiaWQiKS52YWx1ZSkpe2NvbnN0e21vZGlmaWVyVHlwZTp0LG1vZGlmaWVyVmFsdWU6biwuLi5hfT1lO3JldHVybiB0P3suLi5hLFt0XTpufTphfXJldHVybiBlfSkpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJmUuZm9yRWFjaCgoZT0+e2NvbnN0IG49dGhpcy5jcmVhdGVEYXRhS2V5Rm9ybUdyb3VwKGUpO3RoaXMub2JzZXJ2ZUtleURhdGFUeXBlKG4pLHRoaXMub2JzZXJ2ZUVuYWJsZU1vZGlmaWVyKG4pLHRoaXMuZnVuY3Rpb25Db2Rlc01hcC5zZXQobi5nZXQoImlkIikudmFsdWUsdGhpcy5nZXRGdW5jdGlvbkNvZGVzKGUudHlwZSkpLHQucHVzaChuKX0pKSx0aGlzLmZiLmFycmF5KHQpfWNyZWF0ZURhdGFLZXlGb3JtR3JvdXAoZSl7Y29uc3R7dGFnOnQsdmFsdWU6bix0eXBlOmEsYWRkcmVzczpvLG9iamVjdHNDb3VudDppLGZ1bmN0aW9uQ29kZTpyLG11bHRpcGxpZXI6cyxkaXZpZGVyOmwscmVwb3J0U3RyYXRlZ3k6Y309ZSxwPXNlKDUpLG09dGhpcy5zaG91bGRTaG93TW9kaWZpZXIoYSk7cmV0dXJuIHRoaXMuc2hvd01vZGlmaWVyc01hcC5zZXQocCxtKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KHAsdGhpcy5mYi5jb250cm9sKChzfHxsKSYmbSkpLHRoaXMuZmIuZ3JvdXAoe3RhZzpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbe3ZhbHVlOm4sZGlzYWJsZWQ6IXRoaXMuaXNNYXN0ZXJ9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHR5cGU6W2EsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbyxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6W2ksW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6cixkaXNhYmxlZDohdGhpcy53aXRoRnVuY3Rpb25Db2RlfSxbdWUucmVxdWlyZWRdXSxtb2RpZmllclR5cGU6W3t2YWx1ZTpsP09uLkRJVklERVI6T24uTVVMVElQTElFUixkaXNhYmxlZDohdGhpcy5lbmFibGVNb2RpZmllcnNDb250cm9sTWFwLmdldChwKS52YWx1ZX1dLG1vZGlmaWVyVmFsdWU6W3t2YWx1ZTpzPz9sPz8xLGRpc2FibGVkOiF0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KHApLnZhbHVlfSxbdWUucGF0dGVybihGdCldXSxpZDpbe3ZhbHVlOnAsZGlzYWJsZWQ6ITB9XSxyZXBvcnRTdHJhdGVneTpbe3ZhbHVlOmMsZGlzYWJsZWQ6IXRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5fV19KX1zaG91bGRTaG93TW9kaWZpZXIoZSl7cmV0dXJuISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSkpfW9ic2VydmVLZXlEYXRhVHlwZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHQpfHxlLmdldCgib2JqZWN0c0NvdW50IikucGF0Y2hWYWx1ZShuYVt0XSx7ZW1pdEV2ZW50OiExfSk7Y29uc3Qgbj10aGlzLnNob3VsZFNob3dNb2RpZmllcih0KTt0aGlzLnNob3dNb2RpZmllcnNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlLHQpfSkpfW9ic2VydmVFbmFibGVNb2RpZmllcihlKXt0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KGUuZ2V0KCJpZCIpLnZhbHVlKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT50aGlzLnRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KSkpfXRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KXtjb25zdCBuPWUuZ2V0KCJtb2RpZmllclR5cGUiKSxhPWUuZ2V0KCJtb2RpZmllclZhbHVlIik7dD8obi5lbmFibGUoKSxhLmVuYWJsZSgpKToobi5kaXNhYmxlKCksYS5kaXNhYmxlKCkpfXVwZGF0ZUZ1bmN0aW9uQ29kZXMoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RnVuY3Rpb25Db2Rlcyh0KTt0aGlzLmZ1bmN0aW9uQ29kZXNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLG4uaW5jbHVkZXMoZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnZhbHVlKXx8ZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUoblswXSx7ZW1pdEV2ZW50OiExfSl9Z2V0RnVuY3Rpb25Db2RlcyhlKXtjb25zdCB0PVsuLi5lPT09ZWEuQklUUz90aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM6W10sLi4udGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzXTtpZih0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTKXJldHVybiB0LnNvcnQoKChlLHQpPT5lLXQpKTtjb25zdCBuPVsuLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2Rlc107cmV0dXJuIGU9PT1lYS5CSVRTJiZuLnB1c2goLi4udGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXMpLHRoaXMua2V5c1R5cGU9PT1hYS5SUENfUkVRVUVTVFMmJm4ucHVzaCguLi50KSxuLnNvcnQoKChlLHQpPT5lLXQpKX1nZXREZWZhdWx0RnVuY3Rpb25Db2Rlcygpe3JldHVybiB0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTP3RoaXMuZGVmYXVsdFdyaXRlRnVuY3Rpb25Db2Rlczp0aGlzLmtleXNUeXBlPT09YWEuUlBDX1JFUVVFU1RTP1suLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLmRlZmF1bHRXcml0ZUZ1bmN0aW9uQ29kZXNdOnRoaXMuZGVmYXVsdFJlYWRGdW5jdGlvbkNvZGVzfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Zm8sZGVwczpbe3Rva2VuOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Zm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyIscGFuZWxUaXRsZToicGFuZWxUaXRsZSIsYWRkS2V5VGl0bGU6ImFkZEtleVRpdGxlIixkZWxldGVLZXlUaXRsZToiZGVsZXRlS2V5VGl0bGUiLG5vS2V5c1RleHQ6Im5vS2V5c1RleHQiLGtleXNUeXBlOiJrZXlzVHlwZSIsdmFsdWVzOiJ2YWx1ZXMiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmV0Lk1hdFNsaWRlVG9nZ2xlLHNlbGVjdG9yOiJtYXQtc2xpZGUtdG9nZ2xlIixpbnB1dHM6WyJuYW1lIiwiaWQiLCJsYWJlbFBvc2l0aW9uIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJyZXF1aXJlZCIsImNvbG9yIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJjaGVja2VkIiwiaGlkZUljb24iLCJkaXNhYmxlZEludGVyYWN0aXZlIl0sb3V0cHV0czpbImNoYW5nZSIsInRvZ2dsZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2xpZGVUb2dnbGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsQ29udGVudCxzZWxlY3RvcjoibmctdGVtcGxhdGVbbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dfSl9fWUoIk1vZGJ1c0RhdGFLZXlzUGFuZWxDb21wb25lbnQiLGZvKSxIZShbTigpXSxmby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLEhlKFtOKCldLGZvLnByb3RvdHlwZSwiaGlkZU5ld0ZpZWxkcyIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxUYSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfV0scHJvcERlY29yYXRvcnM6e2lzTWFzdGVyOlt7dHlwZTphfV0saGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dLHBhbmVsVGl0bGU6W3t0eXBlOmF9XSxhZGRLZXlUaXRsZTpbe3R5cGU6YX1dLGRlbGV0ZUtleVRpdGxlOlt7dHlwZTphfV0sbm9LZXlzVGV4dDpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVzOlt7dHlwZTphfV0scG9wb3Zlcjpbe3R5cGU6YX1dLGtleXNEYXRhQXBwbGllZDpbe3R5cGU6bH1dfX0pO2NsYXNzIHlve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy5mYj1lLHRoaXMucG9wb3ZlclNlcnZpY2U9dCx0aGlzLnJlbmRlcmVyPW4sdGhpcy52aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5jZHI9byx0aGlzLnNpbmdsZU1vZGU9ITEsdGhpcy5oaWRlTmV3RmllbGRzPSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5tb2RidXNSZWdpc3RlclR5cGVzPU9iamVjdC52YWx1ZXMoWG4pLHRoaXMubW9kYnVzVmFsdWVLZXlzPU9iamVjdC52YWx1ZXMoYWEpLHRoaXMuTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwPVpuLHRoaXMuTW9kYnVzVmFsdWVLZXk9YWEsdGhpcy5kZXN0cm95JD1uZXcgU2V9bmdPbkluaXQoKXt0aGlzLmluaXRpYWxpemVWYWx1ZXNGb3JtR3JvdXAoKSx0aGlzLm9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2lmKHRoaXMuc2luZ2xlTW9kZSl0aGlzLnZhbHVlc0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoZSkse2VtaXRFdmVudDohMX0pO2Vsc2V7Y29uc3R7aG9sZGluZ19yZWdpc3RlcnM6dCxjb2lsc19pbml0aWFsaXplcjpuLGlucHV0X3JlZ2lzdGVyczphLGRpc2NyZXRlX2lucHV0czpvfT1lO3RoaXMudmFsdWVzRm9ybUdyb3VwLnNldFZhbHVlKHtob2xkaW5nX3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUodCksY29pbHNfaW5pdGlhbGl6ZXI6dGhpcy5nZXRTaW5nbGVSZWdpc3RlclN0YXRlKG4pLGlucHV0X3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoYSksZGlzY3JldGVfaW5wdXRzOnRoaXMuZ2V0U2luZ2xlUmVnaXN0ZXJTdGF0ZShvKX0se2VtaXRFdmVudDohMX0pfXRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMudmFsdWVzRm9ybUdyb3VwLnZhbGlkP251bGw6e3ZhbHVlc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX1nZXRWYWx1ZUdyb3VwKGUsdCl7cmV0dXJuIHQ/dGhpcy52YWx1ZXNGb3JtR3JvdXAuZ2V0KHQpLmdldChlKTp0aGlzLnZhbHVlc0Zvcm1Hcm91cC5nZXQoZSl9bWFuYWdlS2V5cyhlLHQsbixhKXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG89dC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKHRoaXMucG9wb3ZlclNlcnZpY2UuaGFzUG9wb3ZlcihvKSlyZXR1cm4gdm9pZCB0aGlzLnBvcG92ZXJTZXJ2aWNlLmhpZGVQb3BvdmVyKG8pO2NvbnN0IGk9dGhpcy5nZXRWYWx1ZUdyb3VwKG4sYSkscj17dmFsdWVzOmkudmFsdWUsaXNNYXN0ZXI6IXRoaXMuc2luZ2xlTW9kZSxrZXlzVHlwZTpuLHBhbmVsVGl0bGU6b2EuZ2V0KG4pLGFkZEtleVRpdGxlOmlhLmdldChuKSxkZWxldGVLZXlUaXRsZTpyYS5nZXQobiksbm9LZXlzVGV4dDpzYS5nZXQobiksaGlkZU5ld0ZpZWxkczp0aGlzLmhpZGVOZXdGaWVsZHN9LHM9dGhpcy5wb3BvdmVyU2VydmljZS5kaXNwbGF5UG9wb3ZlcihvLHRoaXMucmVuZGVyZXIsdGhpcy52aWV3Q29udGFpbmVyUmVmLGZvLCJsZWZ0Qm90dG9tIiwhMSxudWxsLHIse30se30se30sITApO3MudGJDb21wb25lbnRSZWYuaW5zdGFuY2UucG9wb3Zlcj1zLHMudGJDb21wb25lbnRSZWYuaW5zdGFuY2Uua2V5c0RhdGFBcHBsaWVkLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3MuaGlkZSgpLGkucGF0Y2hWYWx1ZShlKSxpLm1hcmtBc0RpcnR5KCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9KSl9aW5pdGlhbGl6ZVZhbHVlc0Zvcm1Hcm91cCgpe2NvbnN0IGU9KCk9PnRoaXMuZmIuZ3JvdXAodGhpcy5tb2RidXNWYWx1ZUtleXMucmVkdWNlKCgoZSx0KT0+KGVbdF09dGhpcy5mYi5jb250cm9sKFtbXSxbXV0pLGUpKSx7fSkpO3RoaXMuc2luZ2xlTW9kZT90aGlzLnZhbHVlc0Zvcm1Hcm91cD1lKCk6dGhpcy52YWx1ZXNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh0aGlzLm1vZGJ1c1JlZ2lzdGVyVHlwZXMucmVkdWNlKCgodCxuKT0+KHRbbl09ZSgpLHQpKSx7fSkpfW9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl7dGhpcy52YWx1ZXNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1nZXRTaW5nbGVSZWdpc3RlclN0YXRlKGUpe3JldHVybnthdHRyaWJ1dGVzOmU/LmF0dHJpYnV0ZXM/P1tdLHRpbWVzZXJpZXM6ZT8udGltZXNlcmllcz8/W10sYXR0cmlidXRlVXBkYXRlczplPy5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6ZT8ucnBjPz9bXX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp5byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp5byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGlucHV0czp7c2luZ2xlTW9kZToic2luZ2xlTW9kZSIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnlvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwLHNlbGVjdG9yOiJtYXQtYmFzaWMtY2hpcCwgW21hdC1iYXNpYy1jaGlwXSwgbWF0LWNoaXAsIFttYXQtY2hpcF0iLGlucHV0czpbInJvbGUiLCJpZCIsImFyaWEtbGFiZWwiLCJhcmlhLWRlc2NyaXB0aW9uIiwidmFsdWUiLCJjb2xvciIsInJlbW92YWJsZSIsImhpZ2hsaWdodGVkIiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVkIl0sb3V0cHV0czpbInJlbW92ZWQiLCJkZXN0cm95ZWQiXSxleHBvcnRBczpbIm1hdENoaXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwTGlzdGJveCxzZWxlY3RvcjoibWF0LWNoaXAtbGlzdGJveCIsaW5wdXRzOlsibXVsdGlwbGUiLCJhcmlhLW9yaWVudGF0aW9uIiwic2VsZWN0YWJsZSIsImNvbXBhcmVXaXRoIiwicmVxdWlyZWQiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwidmFsdWUiXSxvdXRwdXRzOlsiY2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YnQuVGJJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1pY29uIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsidGJJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6a2Esc2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixpbnB1dHM6WyJ0Yi1lbGxpcHNpcy1jaGlwLWxpc3QiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNWYWx1ZXNDb21wb25lbnQiLHlvKSxIZShbTigpXSx5by5wcm90b3R5cGUsInNpbmdsZU1vZGUiLHZvaWQgMCksSGUoW04oKV0seW8ucHJvdG90eXBlLCJoaWRlTmV3RmllbGRzIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+eW8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGthXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7c2luZ2xlTW9kZTpbe3R5cGU6YX1dLGhpZGVOZXdGaWVsZHM6W3t0eXBlOmF9XX19KTtjbGFzcyBib3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMuaXNNYXN0ZXI9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe2NlcnRmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxrZXlmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0sc2VydmVyX2hvc3RuYW1lOlsiIixbdWUucGF0dGVybihrdCldXSxyZXFjbGljZXJ0Olt7dmFsdWU6ITEsZGlzYWJsZWQ6ITB9XX0pLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVNYXN0ZXJFbmFibGluZygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWUsdGhpcy5kaXNhYmxlZD90aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pOnRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnVwZGF0ZU1hc3RlckVuYWJsaW5nKCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe2NvbnN0e2NlcnRmaWxlOnQscGFzc3dvcmQ6bixrZXlmaWxlOmEsc2VydmVyX2hvc3RuYW1lOm99PWUsaT17Y2VydGZpbGU6dD8/IiIscGFzc3dvcmQ6bj8/IiIsa2V5ZmlsZTphPz8iIixzZXJ2ZXJfaG9zdG5hbWU6bz8/IiIscmVxY2xpY2VydDohIWUucmVxY2xpY2VydH07dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC5yZXNldChpLHtlbWl0RXZlbnQ6ITF9KX11cGRhdGVNYXN0ZXJFbmFibGluZygpe3RoaXMuaXNNYXN0ZXI/KHRoaXMuZGlzYWJsZWR8fHRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZ2V0KCJyZXFjbGljZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0aGlzLmRpc2FibGVkfHx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgicmVxY2xpY2VydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pKX1vYnNlcnZlVmFsdWVDaGFuZ2VzKCl7dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Ym8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfV0sdXNlc09uQ2hhbmdlczohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmhpbnRzLnBhdGgtaW4tb3NcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2VydGZpbGUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucHJpdmF0ZS1rZXktcGF0aFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXlmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSIhaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1ob3N0bmFtZTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJfaG9zdG5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJpc01hc3RlciIgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXFjbGljZXJ0Ij5cbiAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5yZXF1ZXN0LWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1IZShbTigpXSxiby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Ym8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIFtmb3JtR3JvdXBdPSJzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5oaW50cy5wYXRoLWluLW9zXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jYS1jZXJ0XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNlcnRmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnByaXZhdGUta2V5LXBhdGhcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5ZmlsZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iIWlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItaG9zdG5hbWU8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ic2VydmVyX2hvc3RuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmVxY2xpY2VydCI+XG4gICAgICA8bWF0LWxhYmVsPlxuICAgICAgICB7eyBcJ2dhdGV3YXkucmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtbGFiZWw+XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntpc01hc3Rlcjpbe3R5cGU6YX1dfX0pO2NsYXNzIGhvIGV4dGVuZHMgUHtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKHQsbixvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9byx0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c1Bhcml0aWVzPU9iamVjdC52YWx1ZXMoWW4pLHRoaXMubW9kYnVzQnl0ZVNpemVzPSRuLHRoaXMubW9kYnVzQmF1ZHJhdGVzPWxhLHRoaXMubW9kYnVzT3JkZXJUeXBlPU9iamVjdC52YWx1ZXMoSm4pLHRoaXMuTW9kYnVzUHJvdG9jb2xUeXBlPUhuLHRoaXMuTW9kYnVzUGFyaXR5TGFiZWxzTWFwPVFuLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5Nb2RidXNNZXRob2RMYWJlbHNNYXA9S24sdGhpcy5SZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZT1sbix0aGlzLm1vZGJ1c0hlbHBMaW5rPXYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tb2RidXMvI3NlY3Rpb24tbWFzdGVyLWRlc2NyaXB0aW9uLWFuZC1jb25maWd1cmF0aW9uLXBhcmFtZXRlcnMiLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSIsInN0b3BiaXRzIiwiYnl0ZXNpemUiLCJwYXJpdHkiLCJzdHJpY3QiXSx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXM9WyJwb3J0Iiwic2VjdXJpdHkiLCJob3N0Il0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5zaG93U2VjdXJpdHlDb250cm9sPXRoaXMuZmIuY29udHJvbCghMSksdGhpcy5pbml0aWFsaXplU2xhdmVGb3JtR3JvdXAoKSx0aGlzLnVwZGF0ZVNsYXZlRm9ybUdyb3VwKCksdGhpcy51cGRhdGVDb250cm9sc0VuYWJsaW5nKHRoaXMuZGF0YS52YWx1ZS50eXBlKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCksdGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnBhdGNoVmFsdWUoISF0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkmJiFlZSh0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkse30pKX1nZXQgcHJvdG9jb2xUeXBlKCl7cmV0dXJuIHRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5nZXRTbGF2ZVJlc3VsdERhdGEoKSl9aW5pdGlhbGl6ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltIbi5UQ1BdLGhvc3Q6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHBvcnQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbihFdC5NSU4pLHVlLm1heChFdC5NQVgpXV0sc2VyaWFsUG9ydDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbWV0aG9kOltXbi5TT0NLRVQsW3VlLnJlcXVpcmVkXV0sYmF1ZHJhdGU6W3RoaXMubW9kYnVzQmF1ZHJhdGVzWzBdXSxzdG9wYml0czpbMV0sYnl0ZXNpemU6WyRuWzBdXSxwYXJpdHk6W1luLk5vbmVdLHN0cmljdDpbITBdLHVuaXRJZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxkZXZpY2VOYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxkZXZpY2VUeXBlOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0aW1lb3V0OlszNV0sYnl0ZU9yZGVyOltKbi5CSUddLHdvcmRPcmRlcjpbSm4uQklHXSxyZXRyaWVzOlshMF0scmV0cnlPbkVtcHR5OlshMF0scmV0cnlPbkludmFsaWQ6WyEwXSxwb2xsUGVyaW9kOls1ZTMsW3VlLnJlcXVpcmVkXV0sY29ubmVjdEF0dGVtcHRUaW1lTXM6WzVlMyxbdWUucmVxdWlyZWRdXSxjb25uZWN0QXR0ZW1wdENvdW50Ols1LFt1ZS5yZXF1aXJlZF1dLHdhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXM6WzNlNSxbdWUucmVxdWlyZWRdXSx2YWx1ZXM6W3t9XSxzZWN1cml0eTpbe31dfSksdGhpcy5hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpfXVwZGF0ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKHsuLi50aGlzLmRhdGEudmFsdWUscG9ydDp0aGlzLmRhdGEudmFsdWUudHlwZT09PUhuLlNlcmlhbD9udWxsOnRoaXMuZGF0YS52YWx1ZS5wb3J0LHNlcmlhbFBvcnQ6dGhpcy5kYXRhLnZhbHVlLnR5cGU9PT1Ibi5TZXJpYWw/dGhpcy5kYXRhLnZhbHVlLnBvcnQ6IiIsdmFsdWVzOnthdHRyaWJ1dGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVzPz9bXSx0aW1lc2VyaWVzOnRoaXMuZGF0YS52YWx1ZS50aW1lc2VyaWVzPz9bXSxhdHRyaWJ1dGVVcGRhdGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6dGhpcy5kYXRhLnZhbHVlLnJwYz8/W119fSl9b2JzZXJ2ZVR5cGVDaGFuZ2UoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbnRyb2xzRW5hYmxpbmcoZSksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlQ29udHJvbHNFbmFibGluZyhlKXtjb25zdFt0LG5dPWU9PT1Ibi5TZXJpYWw/W3RoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cyx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXNdOlt0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXMsdGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzXTt0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKSx0aGlzLnVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcodGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlKX1vYnNlcnZlU2hvd1NlY3VyaXR5KCl7dGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlU2VjdXJpdHlFbmFibGluZyhlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcoZSl7ZSYmdGhpcy5wcm90b2NvbFR5cGUhPT1Ibi5TZXJpYWw/dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgic2VjdXJpdHkiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmhvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fWUoIk1vZGJ1c1NsYXZlRGlhbG9nQWJzdHJhY3QiLGhvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpvdC5TdG9yZX0se3R5cGU6aXQuUm91dGVyfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOltYZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nUmVmfV19KTtjbGFzcyB4byBleHRlbmRzIGhve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LG4sYSxvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9b31nZXRTbGF2ZVJlc3VsdERhdGEoKXtjb25zdHt2YWx1ZXM6ZSx0eXBlOnQsc2VyaWFsUG9ydDpuLC4uLmF9PXRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAudmFsdWUsbz17Li4uYSx0eXBlOnQsLi4uZX07cmV0dXJuIHQ9PT1Ibi5TZXJpYWwmJihvLnBvcnQ9biksby5yZXBvcnRTdHJhdGVneXx8ZGVsZXRlIG8ucmVwb3J0U3RyYXRlZ3ksb31hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuYWRkQ29udHJvbCgicmVwb3J0U3RyYXRlZ3kiLHRoaXMuZmIuY29udHJvbChudWxsKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp4byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp4byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNTbGF2ZURpYWxvZ0NvbXBvbmVudCIseG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCx5byxibyx3YSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzbGF2ZXMtY29uZmlnLWNvbnRhaW5lciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IFwnZ2F0ZXdheS5zZXJ2ZXItc2xhdmVcJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0ibW9kYnVzSGVscExpbmsiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IFtmb3JtR3JvdXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgIDxkaXYgY2xhc3M9InN0cm9rZWQgdGItZm9ybS1wYW5lbCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItY29ubmVjdGlvbjwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c1Byb3RvY29sVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldCh0eXBlKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgZWxzZSBzZXJpYWxQb3J0IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zZXJpYWwtcG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InNlcmlhbFBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3NlcmlhbFBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZnJhbWVyLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5Lm1ldGhvZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIHByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCA/IG1vZGJ1c1NlcmlhbE1ldGhvZFR5cGVzIDogbW9kYnVzTWV0aG9kVHlwZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJtZXRob2QiPnt7IE1vZGJ1c01ldGhvZExhYmVsc01hcC5nZXQobWV0aG9kKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYmF1ZHJhdGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYmF1ZHJhdGU8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJhdWRyYXRlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHJhdGUgb2YgbW9kYnVzQmF1ZHJhdGVzIiBbdmFsdWVdPSJyYXRlIj57eyByYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGVzaXplXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGVzaXplPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlc2l6ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzaXplIG9mIG1vZGJ1c0J5dGVTaXplcyIgW3ZhbHVlXT0ic2l6ZSI+e3sgc2l6ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdG9wYml0c1wnIHwgdHJhbnNsYXRlIH19IiAgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcGJpdHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InN0b3BiaXRzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wYXJpdHlcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucGFyaXR5PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJwYXJpdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgcGFyaXR5IG9mIG1vZGJ1c1Bhcml0aWVzIiBbdmFsdWVdPSJwYXJpdHkiPnt7IE1vZGJ1c1Bhcml0eUxhYmVsc01hcC5nZXQocGFyaXR5KSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzdHJpY3QiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnN0cmljdFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RyaWN0XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMudW5pdC1pZFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS51bml0LWlkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1bml0SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51bml0LWlkLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwndW5pdElkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtcHJvZmlsZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VUeXBlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0iZGF0YS5oaWRlTmV3RmllbGRzIGVsc2UgcmVwb3J0U3RyYXRlZ3kiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtZGF0YS1vbi1jaGFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZXBvcnRTdHJhdGVneT5cbiAgICAgICAgICA8dGItcmVwb3J0LXN0cmF0ZWd5IFtkZWZhdWx0VmFsdWVdPSJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZS5EZXZpY2UiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0U3RyYXRlZ3kiIFtpc0V4cGFuc2lvbk1vZGVdPSJ0cnVlIi8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdGlvbi10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rpb24tdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlLW9yZGVyXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGUtb3JkZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJ5dGVPcmRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgb3JkZXIgb2YgbW9kYnVzT3JkZXJUeXBlIiBbdmFsdWVdPSJvcmRlciI+e3sgb3JkZXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud29yZC1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS53b3JkLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ3b3JkT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50bHMtY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIGNsYXNzPSJzZWN1cml0eS1jb25maWciIGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHkiPjwvdGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZz5cbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cmllcyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnJldHJpZXNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRyeU9uRW1wdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWVtcHR5XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkludmFsaWQiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb2xsLXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXkucG9sbC1wZXJpb2RcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC10aW1lXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC10aW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjb25uZWN0QXR0ZW1wdFRpbWVNcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdC1hdHRlbXB0LWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC1jb3VudDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRDb3VudCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHNcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9IndhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICA8dGItbW9kYnVzLXZhbHVlcyBbc2luZ2xlTW9kZV09InRydWUiIFtoaWRlTmV3RmllbGRzXT0iZGF0YS5oaWRlTmV3RmllbGRzIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmludmFsaWQgfHwgIXNsYXZlQ29uZmlnRm9ybUdyb3VwLmRpcnR5Ij5cbiAgICAgIHt7IGRhdGEuYnV0dG9uVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuc2xhdmVzLWNvbmZpZy1jb250YWluZXJ7d2lkdGg6ODB2dzttYXgtd2lkdGg6OTAwcHh9Omhvc3QgLnNsYXZlLW5hbWUtbGFiZWx7bWFyZ2luLXJpZ2h0OjE2cHg7Y29sb3I6IzAwMDAwMGRlfTpob3N0IC5maXhlZC10aXRsZS13aWR0aC0yNjB7bWluLXdpZHRoOjI2MHB4fTpob3N0IDo6bmctZGVlcCAuc2VjdXJpdHktY29uZmlnIC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6MjMwcHh9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn1dfSk7Y2xhc3Mgdm8gZXh0ZW5kcyBob3tjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKGUsdCxuLGEsbyksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnJvdXRlcj1uLHRoaXMuZGF0YT1hLHRoaXMuZGlhbG9nUmVmPW99Z2V0U2xhdmVSZXN1bHREYXRhKCl7Y29uc3R7dmFsdWVzOmUsdHlwZTp0LHNlcmlhbFBvcnQ6biwuLi5hfT10aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlLG89ey4uLmEsdHlwZTp0LC4uLmV9O3JldHVybiB0PT09SG4uU2VyaWFsJiYoby5wb3J0PW4pLG99YWRkRmllbGRzVG9Gb3JtR3JvdXAoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmFkZENvbnRyb2woInNlbmREYXRhT25seU9uQ2hhbmdlIix0aGlzLmZiLmNvbnRyb2woITEpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnZvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lTbGF2ZURpYWxvZ0NvbXBvbmVudCIsdm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktc2xhdmUtZGlhbG9nIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQseW8sYm8sd2EsZ29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9XX0pO2NsYXNzIHdve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy50cmFuc2xhdGU9ZSx0aGlzLmRpYWxvZz10LHRoaXMuZGlhbG9nU2VydmljZT1uLHRoaXMuZmI9YSx0aGlzLmNkcj1vLHRoaXMuaXNMZWdhY3k9ITEsdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2g9dGhpcy5mYi5jb250cm9sKCIiLHtub25OdWxsYWJsZTohMH0pLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFzdGVyRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3NsYXZlczp0aGlzLmZiLmFycmF5KFtdKX0pLHRoaXMuZGF0YVNvdXJjZT1uZXcgQ299Z2V0IHNsYXZlcygpe3JldHVybiB0aGlzLm1hc3RlckZvcm1Hcm91cC5nZXQoInNsYXZlcyIpfW5nT25Jbml0KCl7dGhpcy5tYXN0ZXJGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlVGFibGVEYXRhKGUuc2xhdmVzKSx0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50ZXh0U2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFZlKDE1MCksQmUoKChlLHQpPT4oZT8/IiIpPT09dC50cmltKCkpKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSxlLnRyaW0oKSkpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5zbGF2ZXMuY2xlYXIoKSx0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKGUuc2xhdmVzKX1lbnRlckZpbHRlck1vZGUoKXt0aGlzLnRleHRTZWFyY2hNb2RlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtjb25zdCBlPXRoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50O2UuZm9jdXMoKSxlLnNldFNlbGVjdGlvblJhbmdlKDAsMCl9ZXhpdEZpbHRlck1vZGUoKXt0aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1pZSh0KSxhPW4/dGhpcy5zbGF2ZXMuYXQodCkudmFsdWU6e307dGhpcy5nZXRTbGF2ZURpYWxvZyhhLG4/ImFjdGlvbi5hcHBseSI6ImFjdGlvbi5hZGQiKS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihuP3RoaXMuc2xhdmVzLmF0KHQpLnBhdGNoVmFsdWUoZSk6dGhpcy5zbGF2ZXMucHVzaCh0aGlzLmZiLmNvbnRyb2woZSkpLHRoaXMubWFzdGVyRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfWdldFNsYXZlRGlhbG9nKGUsdCl7cmV0dXJuIHRoaXMuaXNMZWdhY3k/dGhpcy5kaWFsb2cub3Blbih2byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e3ZhbHVlOmUsaGlkZU5ld0ZpZWxkczohMCxidXR0b25UaXRsZTp0fX0pOnRoaXMuZGlhbG9nLm9wZW4oeG8se2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOnt2YWx1ZTplLGJ1dHRvblRpdGxlOnQsaGlkZU5ld0ZpZWxkczohMX19KX1kZWxldGVTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtc2xhdmUtdGl0bGUiKSwiIix0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJih0aGlzLnNsYXZlcy5yZW1vdmVBdCh0KSx0aGlzLm1hc3RlckZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpKX0pKX11cGRhdGVUYWJsZURhdGEoZSx0KXt0JiYoZT1lLmZpbHRlcigoZT0+T2JqZWN0LnZhbHVlcyhlKS5zb21lKChlPT5lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpKSkpKSksdGhpcy5kYXRhU291cmNlLmxvYWREYXRhKGUpfXB1c2hEYXRhQXNGb3JtQXJyYXlzKGUpe2U/Lmxlbmd0aCYmZS5mb3JFYWNoKChlPT50aGlzLnNsYXZlcy5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOndvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpYLkRpYWxvZ1NlcnZpY2V9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOndvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOntpc0xlZ2FjeToiaXNMZWdhY3kifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6InNlYXJjaElucHV0RmllbGQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInNlYXJjaElucHV0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJwaXBlIix0eXBlOl8uQXN5bmNQaXBlLG5hbWU6ImFzeW5jIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpodC5NYXRNZW51LHNlbGVjdG9yOiJtYXQtbWVudSIsaW5wdXRzOlsiYmFja2Ryb3BDbGFzcyIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwieFBvc2l0aW9uIiwieVBvc2l0aW9uIiwib3ZlcmxhcFRyaWdnZXIiLCJoYXNCYWNrZHJvcCIsImNsYXNzIiwiY2xhc3NMaXN0Il0sb3V0cHV0czpbImNsb3NlZCIsImNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6aHQuTWF0TWVudVRyaWdnZXIsc2VsZWN0b3I6IlttYXQtbWVudS10cmlnZ2VyLWZvcl0sIFttYXRNZW51VHJpZ2dlckZvcl0iLGlucHV0czpbIm1hdC1tZW51LXRyaWdnZXItZm9yIiwibWF0TWVudVRyaWdnZXJGb3IiLCJtYXRNZW51VHJpZ2dlckRhdGEiLCJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyJdLG91dHB1dHM6WyJtZW51T3BlbmVkIiwib25NZW51T3BlbiIsIm1lbnVDbG9zZWQiLCJvbk1lbnVDbG9zZSJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFRhYmxlLHNlbGVjdG9yOiJtYXQtdGFibGUsIHRhYmxlW21hdC10YWJsZV0iLGV4cG9ydEFzOlsibWF0VGFibGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGxEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJSb3dEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJSb3dEZWZdIixpbnB1dHM6WyJtYXRIZWFkZXJSb3dEZWYiLCJtYXRIZWFkZXJSb3dEZWZTdGlja3kiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENvbHVtbkRlZixzZWxlY3RvcjoiW21hdENvbHVtbkRlZl0iLGlucHV0czpbIm1hdENvbHVtbkRlZiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbERlZixzZWxlY3RvcjoiW21hdENlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdFJvd0RlZixzZWxlY3RvcjoiW21hdFJvd0RlZl0iLGlucHV0czpbIm1hdFJvd0RlZkNvbHVtbnMiLCJtYXRSb3dEZWZXaGVuIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsLHNlbGVjdG9yOiJtYXQtaGVhZGVyLWNlbGwsIHRoW21hdC1oZWFkZXItY2VsbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbCxzZWxlY3RvcjoibWF0LWNlbGwsIHRkW21hdC1jZWxsXSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRIZWFkZXJSb3csc2VsZWN0b3I6Im1hdC1oZWFkZXItcm93LCB0clttYXQtaGVhZGVyLXJvd10iLGV4cG9ydEFzOlsibWF0SGVhZGVyUm93Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRSb3csc2VsZWN0b3I6Im1hdC1yb3csIHRyW21hdC1yb3ddIixleHBvcnRBczpbIm1hdFJvdyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFNob3dIaWRlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeFNob3ddLCBbZnhTaG93LnByaW50XSwgIFtmeFNob3cueHNdLCBbZnhTaG93LnNtXSwgW2Z4U2hvdy5tZF0sIFtmeFNob3cubGddLCBbZnhTaG93LnhsXSwgIFtmeFNob3cubHQtc21dLCBbZnhTaG93Lmx0LW1kXSwgW2Z4U2hvdy5sdC1sZ10sIFtmeFNob3cubHQteGxdLCAgW2Z4U2hvdy5ndC14c10sIFtmeFNob3cuZ3Qtc21dLCBbZnhTaG93Lmd0LW1kXSwgW2Z4U2hvdy5ndC1sZ10sICBbZnhIaWRlXSwgW2Z4SGlkZS5wcmludF0sICBbZnhIaWRlLnhzXSwgW2Z4SGlkZS5zbV0sIFtmeEhpZGUubWRdLCBbZnhIaWRlLmxnXSwgW2Z4SGlkZS54bF0sICBbZnhIaWRlLmx0LXNtXSwgW2Z4SGlkZS5sdC1tZF0sIFtmeEhpZGUubHQtbGddLCBbZnhIaWRlLmx0LXhsXSwgIFtmeEhpZGUuZ3QteHNdLCBbZnhIaWRlLmd0LXNtXSwgW2Z4SGlkZS5ndC1tZF0sIFtmeEhpZGUuZ3QtbGddIixpbnB1dHM6WyJmeFNob3ciLCJmeFNob3cucHJpbnQiLCJmeFNob3cueHMiLCJmeFNob3cuc20iLCJmeFNob3cubWQiLCJmeFNob3cubGciLCJmeFNob3cueGwiLCJmeFNob3cubHQtc20iLCJmeFNob3cubHQtbWQiLCJmeFNob3cubHQtbGciLCJmeFNob3cubHQteGwiLCJmeFNob3cuZ3QteHMiLCJmeFNob3cuZ3Qtc20iLCJmeFNob3cuZ3QtbWQiLCJmeFNob3cuZ3QtbGciLCJmeEhpZGUiLCJmeEhpZGUucHJpbnQiLCJmeEhpZGUueHMiLCJmeEhpZGUuc20iLCJmeEhpZGUubWQiLCJmeEhpZGUubGciLCJmeEhpZGUueGwiLCJmeEhpZGUubHQtc20iLCJmeEhpZGUubHQtbWQiLCJmeEhpZGUubHQtbGciLCJmeEhpZGUubHQteGwiLCJmeEhpZGUuZ3QteHMiLCJmeEhpZGUuZ3Qtc20iLCJmeEhpZGUuZ3QtbWQiLCJmeEhpZGUuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNNYXN0ZXJUYWJsZUNvbXBvbmVudCIsd28pLEhlKFt4dCgpXSx3by5wcm90b3R5cGUsImlzTGVnYWN5Iix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntzZWFyY2hJbnB1dEZpZWxkOlt7dHlwZTpvLGFyZ3M6WyJzZWFyY2hJbnB1dCJdfV0saXNMZWdhY3k6W3t0eXBlOmF9XX19KTtjbGFzcyBDbyBleHRlbmRzIFJ7Y29uc3RydWN0b3IoKXtzdXBlcigpfX1lKCJTbGF2ZXNEYXRhc291cmNlIixDbyk7Y2xhc3MgVG8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5lbmFibGVTbGF2ZUNvbnRyb2w9bmV3IHllKCExKSx0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVTbGF2ZUVuYWJsaW5nKGUpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzbGF2ZSIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohIXRoaXMub25DaGFuZ2V9KX0pKX13cml0ZVZhbHVlKGUpe3N1cGVyLndyaXRlVmFsdWUoZSksdGhpcy5vbkVuYWJsZVNsYXZlQ29udHJvbChlKX12YWxpZGF0ZSgpe2NvbnN0e21hc3RlcjplLHNsYXZlOnR9PXRoaXMuYmFzaWNGb3JtR3JvdXAudmFsdWUsbj0hZT8uc2xhdmVzPy5sZW5ndGgmJihlZSh0LHt9KXx8IXQpO3JldHVybiF0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkfHxuP3tiYXNpY0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fTpudWxsfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXN0ZXI6W10sc2xhdmU6W119KX11cGRhdGVTbGF2ZUVuYWJsaW5nKGUpe2U/dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInNsYXZlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgic2xhdmUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1vbkVuYWJsZVNsYXZlQ29udHJvbChlKXt0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC5zZXRWYWx1ZSghIWUuc2xhdmUmJiFlZShlLnNsYXZlLHt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpUbyxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6VG8sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnR9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdEaXJlY3RpdmUiLFRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W119KTtjbGFzcyBTb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNQcm90b2NvbExhYmVsc01hcD16bix0aGlzLk1vZGJ1c01ldGhvZExhYmVsc01hcD1Lbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c09yZGVyVHlwZT1PYmplY3QudmFsdWVzKEpuKSx0aGlzLk1vZGJ1c1Byb3RvY29sVHlwZT1Ibix0aGlzLm1vZGJ1c0JhdWRyYXRlcz1sYSx0aGlzLmlzU2xhdmVFbmFibGVkPSExLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSJdLHRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cz1bInBvcnQiLCJzZWN1cml0eSIsImhvc3QiXSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0huLlRDUF0saG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSxzZXJpYWxQb3J0OlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2Q6W1duLlNPQ0tFVF0sdW5pdElkOltudWxsLFt1ZS5yZXF1aXJlZF1dLGJhdWRyYXRlOlt0aGlzLm1vZGJ1c0JhdWRyYXRlc1swXV0sZGV2aWNlTmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlVHlwZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9sbFBlcmlvZDpbNWUzLFt1ZS5yZXF1aXJlZF1dLHNlbmREYXRhVG9UaGluZ3NCb2FyZDpbITFdLGJ5dGVPcmRlcjpbSm4uQklHXSx3b3JkT3JkZXI6W0puLkJJR10sc2VjdXJpdHk6W10saWRlbnRpdHk6dGhpcy5mYi5ncm91cCh7dmVuZG9yTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdENvZGU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHZlbmRvclVybDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdE5hbWU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLG1vZGVsTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx2YWx1ZXM6W119KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCl9Z2V0IHByb3RvY29sVHlwZSgpe3JldHVybiB0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzbGF2ZUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5wYXRjaFZhbHVlKCEhZS5zZWN1cml0eSYmIWVlKGUuc2VjdXJpdHkse30pKSx0aGlzLnVwZGF0ZVNsYXZlQ29uZmlnKGUpfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5pc1NsYXZlRW5hYmxlZD0hZSx0aGlzLnVwZGF0ZUZvcm1FbmFibGVTdGF0ZSgpfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PntlLnR5cGU9PT1Ibi5TZXJpYWwmJihlLnBvcnQ9ZS5zZXJpYWxQb3J0LGRlbGV0ZSBlLnNlcmlhbFBvcnQpLHRoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlRm9ybUVuYWJsZVN0YXRlKCksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUVuYWJsZVN0YXRlKCl7dGhpcy5pc1NsYXZlRW5hYmxlZD8odGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpLHRoaXMudXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCksdGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZSh0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWUpfW9ic2VydmVTaG93U2VjdXJpdHkoKXt0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZShlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxlKGUpe2UmJnRoaXMuaXNTbGF2ZUVuYWJsZWQmJnRoaXMucHJvdG9jb2xUeXBlIT09SG4uU2VyaWFsP3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJzZWN1cml0eSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCl7Y29uc3QgZT10aGlzLnByb3RvY29sVHlwZT09PUhuLlNlcmlhbCx0PWU/dGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cyxuPWU/dGhpcy50Y3BVZHBTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5czt0aGlzLmlzU2xhdmVFbmFibGVkJiZ0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKX11cGRhdGVTbGF2ZUNvbmZpZyhlKXtjb25zdHt0eXBlOnQ9SG4uVENQLG1ldGhvZDpuPVduLlJUVSx1bml0SWQ6YT0wLGRldmljZU5hbWU6bz0iIixkZXZpY2VUeXBlOmk9IiIscG9sbFBlcmlvZDpyPTVlMyxzZW5kRGF0YVRvVGhpbmdzQm9hcmQ6cz0hMSxieXRlT3JkZXI6bD1Kbi5CSUcsd29yZE9yZGVyOmM9Sm4uQklHLHNlY3VyaXR5OnA9e30saWRlbnRpdHk6bT17dmVuZG9yTmFtZToiIixwcm9kdWN0Q29kZToiIix2ZW5kb3JVcmw6IiIscHJvZHVjdE5hbWU6IiIsbW9kZWxOYW1lOiIifSx2YWx1ZXM6ZD17fSxiYXVkcmF0ZTp1PXRoaXMubW9kYnVzQmF1ZHJhdGVzWzBdLGhvc3Q6Zz0iIixwb3J0OmY9bnVsbH09ZSx5PXt0eXBlOnQsbWV0aG9kOm4sdW5pdElkOmEsZGV2aWNlTmFtZTpvLGRldmljZVR5cGU6aSxwb2xsUGVyaW9kOnIsc2VuZERhdGFUb1RoaW5nc0JvYXJkOiEhcyxieXRlT3JkZXI6bCx3b3JkT3JkZXI6YyxzZWN1cml0eTpwLGlkZW50aXR5Om0sdmFsdWVzOmQsYmF1ZHJhdGU6dSxob3N0OnQ9PT1Ibi5TZXJpYWw/IiI6Zyxwb3J0OnQ9PT1Ibi5TZXJpYWw/bnVsbDpmLHNlcmlhbFBvcnQ6dD09PUhuLlNlcmlhbD9mOiIifTt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnNldFZhbHVlKHkse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnlvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtdmFsdWVzIixpbnB1dHM6WyJzaW5nbGVNb2RlIiwiaGlkZU5ld0ZpZWxkcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJpc01hc3RlciJdfSx7a2luZDoicGlwZSIsdHlwZTp3YSxuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+U28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELHlvLGJvLHdhLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dfSk7Y2xhc3Mga28gZXh0ZW5kcyBUb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc0xlZ2FjeT0hMX1tYXBDb25maWdUb0Zvcm1WYWx1ZSh7bWFzdGVyOmUsc2xhdmU6dH0pe3JldHVybnttYXN0ZXI6ZT8uc2xhdmVzP2U6e3NsYXZlczpbXX0sc2xhdmU6dD8/e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTprbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1iYXNpYy1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5rbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpTbyxzZWxlY3RvcjoidGItbW9kYnVzLXNsYXZlLWNvbmZpZyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d28sc2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGlucHV0czpbImlzTGVnYWN5Il19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdDb21wb25lbnQiLGtvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmtvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+a28pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBMbyBleHRlbmRzIFRve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzTGVnYWN5PSEwfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXI/LnNsYXZlcz9lLm1hc3Rlcjp7c2xhdmVzOltdfSxzbGF2ZTplLnNsYXZlP2hhLm1hcFNsYXZlVG9VcGdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6TG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubWFzdGVyLWNvbm5lY3Rpb25zXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDx0Yi1tb2RidXMtbWFzdGVyLXRhYmxlIFtpc0xlZ2FjeV09ImlzTGVnYWN5IiBmb3JtQ29udHJvbE5hbWU9Im1hc3RlciI+PC90Yi1tb2RidXMtbWFzdGVyLXRhYmxlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIiPnt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMtc2VydmVyXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIFtmb3JtQ29udHJvbF09ImVuYWJsZVNsYXZlQ29udHJvbCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8dGItbW9kYnVzLXNsYXZlLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNsYXZlIj48L3RiLW1vZGJ1cy1zbGF2ZS1jb25maWc+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlNvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2xhdmUtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3byxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOlsiaXNMZWdhY3kiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lCYXNpY0NvbmZpZ0NvbXBvbmVudCIsTG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBGbyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm1hcHBpbmdUeXBlcz1mbix0aGlzLmlzTGVnYWN5PSEwfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXBwaW5nOltdLHNlcnZlcjpbXX0pfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybntzZXJ2ZXI6ZS5zZXJ2ZXI/eGEubWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZS5zZXJ2ZXIpOnt9LG1hcHBpbmc6ZS5zZXJ2ZXI/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUuc2VydmVyLm1hcHBpbmcpOltdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24oZSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Rm8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Rm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+Rm8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5GbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgSW8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5NYXBwaW5nVHlwZT1mbn1pbml0QmFzaWNGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7bWFwcGluZzpbXSxyZXF1ZXN0c01hcHBpbmc6W10sYnJva2VyOltdLHdvcmtlcnM6W119KX1nZXRSZXF1ZXN0RGF0YUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGxlKGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChuPT57Zm9yKGNvbnN0IGEgb2YgZVtuXSl0LnB1c2goe3JlcXVlc3RUeXBlOm4scmVxdWVzdFZhbHVlOmF9KX0pKSx0fWdldFJlcXVlc3REYXRhT2JqZWN0KGUpe3JldHVybiBlLnJlZHVjZSgoKGUse3JlcXVlc3RUeXBlOnQscmVxdWVzdFZhbHVlOm59KT0+KGVbdF0ucHVzaChuKSxlKSkse2Nvbm5lY3RSZXF1ZXN0czpbXSxkaXNjb25uZWN0UmVxdWVzdHM6W10sYXR0cmlidXRlUmVxdWVzdHM6W10sYXR0cmlidXRlVXBkYXRlczpbXSxzZXJ2ZXJTaWRlUnBjOltdfSl9Z2V0QnJva2VyTWFwcGVkVmFsdWUoZSx0KXtyZXR1cm57Li4uZSxtYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnM/PzEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcj8/MTB9fXdyaXRlVmFsdWUoZSl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLm1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOklvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6SW8sZGVjb3JhdG9yczpbe3R5cGU6c31dfSk7Y2xhc3MgQW8gZXh0ZW5kcyBJb3ttYXBDb25maWdUb0Zvcm1WYWx1ZShlKXtjb25zdHticm9rZXI6dCxtYXBwaW5nOm49W10sY29ubmVjdFJlcXVlc3RzOmE9W10sZGlzY29ubmVjdFJlcXVlc3RzOm89W10sYXR0cmlidXRlUmVxdWVzdHM6aT1bXSxhdHRyaWJ1dGVVcGRhdGVzOnI9W10sc2VydmVyU2lkZVJwYzpzPVtdfT1lLGw9bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmEsZGlzY29ubmVjdFJlcXVlc3RzOm8sYXR0cmlidXRlUmVxdWVzdHM6aSxhdHRyaWJ1dGVVcGRhdGVzOnIsc2VydmVyU2lkZVJwYzpzfSk7cmV0dXJue3dvcmtlcnM6dCYmKHQubWF4TnVtYmVyT2ZXb3JrZXJzfHx0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXIpP3ttYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnMsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjp0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJ9Ont9LG1hcHBpbmc6bWEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKG4pfHxbXSxicm9rZXI6dHx8e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShsKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e30saT1vPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fTtyZXR1cm57YnJva2VyOnRoaXMuZ2V0QnJva2VyTWFwcGVkVmFsdWUodCxuKSxtYXBwaW5nOm1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGEpLC4uLm1hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihpKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpBbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuYnJva2VyLmNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJicm9rZXIiPjwvdGItYnJva2VyLWNvbmZpZy1jb250cm9sPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZGF0YS1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJtYXBwaW5nIiBbcmVxdWlyZWRdPSJ0cnVlIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5EQVRBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RzTWFwcGluZyIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuUkVRVUVTVFMiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LndvcmtlcnMtc2V0dGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICA8dGItd29ya2Vycy1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9IndvcmtlcnMiPjwvdGItd29ya2Vycy1jb25maWctY29udHJvbD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuPC9tYXQtdGFiLWdyb3VwPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dW8sc2VsZWN0b3I6InRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm1vLHNlbGVjdG9yOiJ0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLXRhYmxlIixpbnB1dHM6WyJyZXF1aXJlZCIsIm1hcHBpbmdUeXBlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxsbyx1byxtbyxyb10sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmJyb2tlci5jb25uZWN0aW9uXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItYnJva2VyLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0iYnJva2VyIj48L3RiLWJyb2tlci1jb25maWctY29udHJvbD5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuREFUQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkucmVxdWVzdHMtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0c01hcHBpbmciIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS53b3JrZXJzLXNldHRpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgPHRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJ3b3JrZXJzIj48L3RiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2w+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2hlaWdodDoxMDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBObyBleHRlbmRzIElve21hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe2NvbnN0e2Jyb2tlcjp0LG1hcHBpbmc6bj1bXSxyZXF1ZXN0c01hcHBpbmc6YX09ZTtyZXR1cm57d29ya2Vyczp0JiYodC5tYXhOdW1iZXJPZldvcmtlcnN8fHQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcik/e21heE51bWJlck9mV29ya2Vyczp0Lm1heE51bWJlck9mV29ya2VycyxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcn06e30sbWFwcGluZzpuPz9bXSxicm9rZXI6dD8/e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShhKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e307cmV0dXJue2Jyb2tlcjp0aGlzLmdldEJyb2tlck1hcHBlZFZhbHVlKHQsbiksbWFwcGluZzphLHJlcXVlc3RzTWFwcGluZzpvPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpObyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpObyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtYmFzaWMtY29uZmlnIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Tm8pKSxtdWx0aTohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiLHNlbGVjdG9yOiJtYXQtdGFiIixpbnB1dHM6WyJkaXNhYmxlZCIsImxhYmVsIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImxhYmVsQ2xhc3MiLCJib2R5Q2xhc3MiXSxleHBvcnRBczpbIm1hdFRhYiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiR3JvdXAsc2VsZWN0b3I6Im1hdC10YWItZ3JvdXAiLGlucHV0czpbImNvbG9yIiwiZml0SW5rQmFyVG9Db250ZW50IiwibWF0LXN0cmV0Y2gtdGFicyIsImR5bmFtaWNIZWlnaHQiLCJzZWxlY3RlZEluZGV4IiwiaGVhZGVyUG9zaXRpb24iLCJhbmltYXRpb25EdXJhdGlvbiIsImNvbnRlbnRUYWJJbmRleCIsImRpc2FibGVQYWdpbmF0aW9uIiwiZGlzYWJsZVJpcHBsZSIsInByZXNlcnZlQ29udGVudCIsImJhY2tncm91bmRDb2xvciIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiXSxvdXRwdXRzOlsic2VsZWN0ZWRJbmRleENoYW5nZSIsImZvY3VzQ2hhbmdlIiwiYW5pbWF0aW9uRG9uZSIsInNlbGVjdGVkVGFiQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1byxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6bW8sc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5vLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tcXR0LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8sdW8sbW8scm9dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgTW97aXNFcnJvclN0YXRlKGUpe3JldHVybiBlJiZlLmludmFsaWR9fWUoIkZvcmNlRXJyb3JTdGF0ZU1hdGNoZXIiLE1vKTtjbGFzcyBFbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5mYj10LHRoaXMudHJhbnNsYXRlPW4sdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWEsdGhpcy5kaWFsb2dTZXJ2aWNlPW8sdGhpcy5kaWFsb2c9aSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZT1yLHRoaXMuem9uZT1zLHRoaXMudXRpbHM9bCx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1jLHRoaXMuY2Q9cCx0aGlzLkNvbm5lY3RvclR5cGU9X3QsdGhpcy5hbGxvd0Jhc2ljQ29uZmlnPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5nYXRld2F5TG9nTGV2ZWw9T2JqZWN0LnZhbHVlcyhNdCksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiZW5hYmxlZCIsImtleSIsInR5cGUiLCJzeW5jU3RhdHVzIiwiZXJyb3JzIiwiYWN0aW9ucyJdLHRoaXMuR2F0ZXdheUNvbm5lY3RvclR5cGVzVHJhbnNsYXRlc01hcD1IdCx0aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcz1vbix0aGlzLlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlPWxuLHRoaXMubW9kZT10aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyx0aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3Q9bmV3IFNlLHRoaXMuYWN0aXZlRGF0YT1bXSx0aGlzLmluYWN0aXZlRGF0YT1bXSx0aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGE9W10sdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy5vbkVycm9yc1VwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfX0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0PW5ldyBTZSx0aGlzLmluaXREYXRhU291cmNlcygpLHRoaXMuaW5pdENvbm5lY3RvckZvcm0oKSx0aGlzLm9ic2VydmVBdHRyaWJ1dGVDaGFuZ2UoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGFTb3VyY2Uuc29ydD10aGlzLnNvcnQsdGhpcy5kYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3I9dGhpcy5nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCksdGhpcy5jdHguJHNjb3BlLmdhdGV3YXlDb25uZWN0b3JzPXRoaXMsdGhpcy5sb2FkQ29ubmVjdG9ycygpLHRoaXMubG9hZEdhdGV3YXlTdGF0ZSgpLHRoaXMub2JzZXJ2ZU1vZGVDaGFuZ2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfW9uU2F2ZUNvbm5lY3Rvcigpe3RoaXMuc2F2ZUNvbm5lY3Rvcih0aGlzLmdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKHRoaXMuY29ubmVjdG9yRm9ybS52YWx1ZSksITEpfXNhdmVDb25uZWN0b3IoZSx0PSEwKXtjb25zdCBuPXR8fHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyh0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSk/TC5TSEFSRURfU0NPUEU6TC5TRVJWRVJfU0NPUEU7QWUodGhpcy5nZXRFbnRpdHlBdHRyaWJ1dGVUYXNrcyhlLG4pKS5waXBlKE9lKDEpKS5zdWJzY3JpYmUoKG49Pnt0aGlzLnNob3dUb2FzdCh0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuY29ubmVjdG9yLWNyZWF0ZWQiKTp0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmNvbm5lY3Rvci11cGRhdGVkIikpLHRoaXMuaW5pdGlhbENvbm5lY3Rvcj1lLHRoaXMudXBkYXRlRGF0YSghMCksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9KSl9Z2V0RW50aXR5QXR0cmlidXRlVGFza3MoZSx0KXtjb25zdCBuPVtdLGE9W3trZXk6ZS5uYW1lLHZhbHVlOmV9XSxvPVtdLGk9IXRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TSEFSRURfU0NPUEV8fCF0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TRVJWRVJfU0NPUEUscj10aGlzLmluaXRpYWxDb25uZWN0b3ImJnRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lIT09ZS5uYW1lO3JldHVybiByJiYoby5wdXNoKHtrZXk6dGhpcy5pbml0aWFsQ29ubmVjdG9yLm5hbWV9KSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCExKSksaSYmKHQ9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnMucHVzaChlLm5hbWUpOnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLnB1c2goZS5uYW1lKSksKHJ8fGkpJiZuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2sodCkpLG4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsdCxhKSksby5sZW5ndGgmJm4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSx0LG8pKSxufWdldFNhdmVFbnRpdHlBdHRyaWJ1dGVzVGFzayhlKXtjb25zdCB0PWU9PT1MLlNIQVJFRF9TQ09QRT8iYWN0aXZlX2Nvbm5lY3RvcnMiOiJpbmFjdGl2ZV9jb25uZWN0b3JzIixuPWU9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5zYXZlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxlLFt7a2V5OnQsdmFsdWU6bn1dKX1yZW1vdmVDb25uZWN0b3JGcm9tTGlzdChlLHQpe2NvbnN0IG49dD90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMsYT1uLmluZGV4T2YoZSk7LTEhPT1hJiZuLnNwbGljZShhLDEpfWdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKGUpe2NvbnN0IHQ9ey4uLmV9O3JldHVybiB0LmNvbmZpZ3VyYXRpb249YCR7Y2UodC5uYW1lKX0uanNvbmAsZGVsZXRlIHQuYmFzaWNDb25maWcsdC50eXBlIT09X3QuR1JQQyYmZGVsZXRlIHQua2V5LHQudHlwZSE9PV90LkNVU1RPTSYmZGVsZXRlIHQuY2xhc3MsdC50eXBlPT09X3QuTU9EQlVTJiZ0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0odC5jb25maWdWZXJzaW9uKSYmKHQucmVwb3J0U3RyYXRlZ3l8fCh0LnJlcG9ydFN0cmF0ZWd5PXt0eXBlOnNuLk9uUmVwb3J0UGVyaW9kLHJlcG9ydFBlcmlvZDpsbi5Db25uZWN0b3J9LGRlbGV0ZSB0LnNlbmREYXRhT25seU9uQ2hhbmdlKSksdGhpcy5nYXRld2F5VmVyc2lvbiYmIXQuY29uZmlnVmVyc2lvbiYmKHQuY29uZmlnVmVyc2lvbj10aGlzLmdhdGV3YXlWZXJzaW9uKSx0LnRzPURhdGUubm93KCksdH11cGRhdGVEYXRhKGU9ITEpe3RoaXMucGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5PXRoaXMuc29ydC5hY3RpdmUsdGhpcy5wYWdlTGluay5zb3J0T3JkZXIuZGlyZWN0aW9uPXdbdGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpXSx0aGlzLmF0dHJpYnV0ZURhdGFTb3VyY2UubG9hZEF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5DTElFTlRfU0NPUEUsdGhpcy5wYWdlTGluayxlKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZURhdGE9ZS5kYXRhLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKSx0aGlzLmdlbmVyYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5zZXRDbGllbnREYXRhKGUpfSkpLHRoaXMuaW5hY3RpdmVDb25uZWN0b3JzRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuc2hhcmVkQXR0cmlidXRlRGF0YT1lLmRhdGEuZmlsdGVyKChlPT50aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5jbHVkZXMoZS5rZXkpKSksdGhpcy5jb21iaW5lRGF0YSgpfSkpLHRoaXMuc2VydmVyRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuaW5hY3RpdmVEYXRhPWUuZGF0YS5maWx0ZXIoKGU9PnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKX0pKX1pc0Nvbm5lY3RvclN5bmNlZChlKXtjb25zdCB0PWUudmFsdWU7aWYoIXQudHN8fGUuc2tpcFN5bmN8fCF0aGlzLmlzR2F0ZXdheUFjdGl2ZSlyZXR1cm4hMTtpZigtMT09PXRoaXMuYWN0aXZlRGF0YS5maW5kSW5kZXgoKGU9Pigic3RyaW5nIj09dHlwZW9mIGUudmFsdWU/SlNPTi5wYXJzZShlLnZhbHVlKTplLnZhbHVlKS5uYW1lPT09dC5uYW1lKSkpcmV0dXJuITE7cmV0dXJuLTEhPT10aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGEuZmluZEluZGV4KChlPT57Y29uc3Qgbj1lLnZhbHVlLGE9bi5uYW1lPT09dC5uYW1lLG89ZWUobi5jb25maWd1cmF0aW9uSnNvbix7fSkmJmEsaT10aGlzLmhhc1NhbWVDb25maWcobi5jb25maWd1cmF0aW9uSnNvbix0LmNvbmZpZ3VyYXRpb25Kc29uKSxyPW4udHMmJm4udHM8PXQudHM7cmV0dXJuIGEmJnImJihpfHxvKX0pKX1oYXNTYW1lQ29uZmlnKGUsdCl7Y29uc3R7bmFtZTpuLGlkOmEsZW5hYmxlUmVtb3RlTG9nZ2luZzpvLGxvZ0xldmVsOmkscmVwb3J0U3RyYXRlZ3k6cixjb25maWdWZXJzaW9uOnMsLi4ubH09ZSx7bmFtZTpjLGlkOnAsZW5hYmxlUmVtb3RlTG9nZ2luZzptLGxvZ0xldmVsOmQscmVwb3J0U3RyYXRlZ3k6dSxjb25maWdWZXJzaW9uOmcsLi4uZn09dDtyZXR1cm4gZWUobCxmKX1jb21iaW5lRGF0YSgpe2NvbnN0IGU9Wy4uLnRoaXMuYWN0aXZlRGF0YSwuLi50aGlzLmluYWN0aXZlRGF0YSwuLi50aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGFdLnJlZHVjZSgoKGUsdCk9Pntjb25zdCBuPWUuZmluZEluZGV4KChlPT5lLmtleT09PXQua2V5KSk7cmV0dXJuLTE9PT1uP2UucHVzaCh0KTp0Lmxhc3RVcGRhdGVUcz5lW25dLmxhc3RVcGRhdGVUcyYmIXRoaXMuaXNDb25uZWN0b3JTeW5jZWQoZVtuXSkmJihlW25dPXsuLi50LHNraXBTeW5jOiEwfSksZX0pLFtdKTt0aGlzLmRhdGFTb3VyY2UuZGF0YT1lLm1hcCgoZT0+KHsuLi5lLHZhbHVlOiJzdHJpbmciPT10eXBlb2YgZS52YWx1ZT9KU09OLnBhcnNlKGUudmFsdWUpOmUudmFsdWV9KSkpfWNsZWFyT3V0Q29ubmVjdG9yRm9ybSgpe3RoaXMuaW5pdGlhbENvbm5lY3Rvcj1udWxsLHRoaXMuY29ubmVjdG9yRm9ybS5zZXRWYWx1ZSh7bW9kZTpvbi5CQVNJQyxuYW1lOiIiLHR5cGU6X3QuTVFUVCxzZW5kRGF0YU9ubHlPbkNoYW5nZTohMSxlbmFibGVSZW1vdGVMb2dnaW5nOiExLGxvZ0xldmVsOk10LklORk8sa2V5OiJhdXRvIixjbGFzczoiIixjb25maWd1cmF0aW9uOiIiLGNvbmZpZ3VyYXRpb25Kc29uOnt9LGJhc2ljQ29uZmlnOnt9LGNvbmZpZ1ZlcnNpb246IiIscmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9c2VsZWN0Q29ubmVjdG9yKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPXQudmFsdWU7bj8ubmFtZSE9PXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZSYmdGhpcy5jb25maXJtQ29ubmVjdG9yQ2hhbmdlKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5zZXRGb3JtVmFsdWUobil9KSl9aXNTYW1lQ29ubmVjdG9yKGUpe2lmKCF0aGlzLmluaXRpYWxDb25uZWN0b3IpcmV0dXJuITE7Y29uc3QgdD1lLnZhbHVlO3JldHVybiB0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZT09PXQubmFtZX1zaG93VG9hc3QoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh7dHlwZToiW05vdGlmaWNhdGlvbl0gU2hvdyIsbm90aWZpY2F0aW9uOnttZXNzYWdlOmUsdHlwZToic3VjY2VzcyIsZHVyYXRpb246MWUzLHZlcnRpY2FsUG9zaXRpb246InRvcCIsaG9yaXpvbnRhbFBvc2l0aW9uOiJsZWZ0Iix0YXJnZXQ6ImRhc2hib2FyZFJvb3QiLGZvcmNlRGlzbWlzczohMH19KX1yZXR1cm5UeXBlKGUpe2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4gdGhpcy5HYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldCh0LnR5cGUpfWRlbGV0ZUNvbm5lY3RvcihlLHQpe3Q/LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49YERlbGV0ZSBjb25uZWN0b3IgIiR7ZS5rZXl9Ij9gO3RoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG4sIkFsbCBjb25uZWN0b3IgZGF0YSB3aWxsIGJlIGRlbGV0ZWQuIiwiQ2FuY2VsIiwiRGVsZXRlIikucGlwZShPZSgxKSxVZSgodD0+e2lmKCF0KXJldHVybjtjb25zdCBuPVtdLGE9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUudmFsdWU/Lm5hbWUpP0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVybiBuLnB1c2godGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmRlbGV0ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsYSxbZV0pKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCExKSxuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2soYSkpLEFlKG4pfSkpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSE9PWUua2V5fHwodGhpcy5jbGVhck91dENvbm5lY3RvckZvcm0oKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSx0aGlzLmNvbm5lY3RvckZvcm0uZGlzYWJsZSgpKSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWNvbm5lY3RvckxvZ3MoZSx0KXt0JiZ0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49Sih0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIuZ2V0U3RhdGVQYXJhbXMoKSk7bi5jb25uZWN0b3JfbG9ncz1lLG4udGFyZ2V0RW50aXR5UGFyYW1OYW1lPSJjb25uZWN0b3JfbG9ncyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX2xvZ3MiLG4pfWNvbm5lY3RvclJwYyhlLHQpe3QmJnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTtuLmNvbm5lY3Rvcl9ycGM9ZSxuLnRhcmdldEVudGl0eVBhcmFtTmFtZT0iY29ubmVjdG9yX3JwYyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX3JwYyIsbil9b25FbmFibGVDb25uZWN0b3IoZSl7ZS52YWx1ZS50cz0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLnVwZGF0ZUFjdGl2ZUNvbm5lY3RvcktleXMoZS5rZXkpLHRoaXMuYXR0cmlidXRlVXBkYXRlU3ViamVjdC5uZXh0KGUpfWdldEVycm9yc0NvdW50KGUpe2NvbnN0IHQ9ZS5rZXksbj10aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24uZGF0YS5maW5kKChlPT5lJiZlLmRhdGFLZXkubmFtZT09PWAke3R9X0VSUk9SU19DT1VOVGApKTtyZXR1cm4gbiYmdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKHQpP24uZGF0YVswXVsxXXx8MDoiSW5hY3RpdmUifW9uQWRkQ29ubmVjdG9yKGUpe2U/LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29uZmlybUNvbm5lY3RvckNoYW5nZSgpLnBpcGUoT2UoMSksTWUoQm9vbGVhbiksVWUoKCgpPT50aGlzLm9wZW5BZGRDb25uZWN0b3JEaWFsb2coKSkpLE1lKEJvb2xlYW4pKS5zdWJzY3JpYmUoKGU9PnRoaXMuYWRkQ29ubmVjdG9yKGUpKSl9YWRkQ29ubmVjdG9yKGUpe3RoaXMuY29ubmVjdG9yRm9ybS5kaXNhYmxlZCYmdGhpcy5jb25uZWN0b3JGb3JtLmVuYWJsZSgpLGUuY29uZmlndXJhdGlvbkpzb258fChlLmNvbmZpZ3VyYXRpb25Kc29uPXt9KSx0aGlzLmdhdGV3YXlWZXJzaW9uJiYhZS5jb25maWdWZXJzaW9uJiYoZS5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLGUuYmFzaWNDb25maWc9ZS5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9ZTtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZTt0aGlzLnNldEluaXRpYWxDb25uZWN0b3JWYWx1ZXMoZSksdGhpcy5zYXZlQ29ubmVjdG9yKHRoaXMuZ2V0VXBkYXRlZENvbm5lY3RvckRhdGEoZSkpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9c2V0SW5pdGlhbENvbm5lY3RvclZhbHVlcyhlKXtjb25zdHtiYXNpY0NvbmZpZzp0LG1vZGU6biwuLi5hfT1lO3RoaXMudG9nZ2xlUmVwb3J0U3RyYXRlZ3koZS50eXBlKSx0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikuc2V0VmFsdWUodGhpcy5hbGxvd0Jhc2ljQ29uZmlnLmhhcyhlLnR5cGUpP2UubW9kZT8/b24uQkFTSUM6bnVsbCx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLnBhdGNoVmFsdWUoYSx7ZW1pdEV2ZW50OiExfSl9b3BlbkFkZENvbm5lY3RvckRpYWxvZygpe3JldHVybiB0aGlzLmN0eC5uZ1pvbmUucnVuKCgoKT0+dGhpcy5kaWFsb2cub3Blbih0byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e2RhdGFTb3VyY2VEYXRhOnRoaXMuZGF0YVNvdXJjZS5kYXRhLGdhdGV3YXlWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb259fSkuYWZ0ZXJDbG9zZWQoKSkpfXVuaXFOYW1lUmVxdWlyZWQoKXtyZXR1cm4gZT0+e2NvbnN0IHQ9ZS52YWx1ZT8udHJpbSgpLnRvTG93ZXJDYXNlKCksbj10aGlzLmRhdGFTb3VyY2UuZGF0YS5zb21lKChlPT5lLnZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKT09PXQpKSxhPXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZS50b0xvd2VyQ2FzZSgpPT09dDtyZXR1cm4gbiYmIWE/e2R1cGxpY2F0ZU5hbWU6e3ZhbGlkOiExfX06bnVsbH19aW5pdERhdGFTb3VyY2VzKCl7Y29uc3QgZT17cHJvcGVydHk6ImtleSIsZGlyZWN0aW9uOncuQVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKDFlMywwLG51bGwsZSksdGhpcy5hdHRyaWJ1dGVEYXRhU291cmNlPW5ldyBMYSh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2UsdGhpcy56b25lLHRoaXMudHJhbnNsYXRlKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9yc0RhdGFTb3VyY2U9bmV3IExhKHRoaXMuYXR0cmlidXRlU2VydmljZSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZSx0aGlzLnpvbmUsdGhpcy50cmFuc2xhdGUpLHRoaXMuc2VydmVyRGF0YVNvdXJjZT1uZXcgTGEodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLHRoaXMudGVsZW1ldHJ5V3NTZXJ2aWNlLHRoaXMuem9uZSx0aGlzLnRyYW5zbGF0ZSksdGhpcy5kYXRhU291cmNlPW5ldyB5KFtdKX1pbml0Q29ubmVjdG9yRm9ybSgpe3RoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHttb2RlOltvbi5CQVNJQ10sbmFtZTpbIiIsW3VlLnJlcXVpcmVkLHRoaXMudW5pcU5hbWVSZXF1aXJlZCgpLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbIiIsW3VlLnJlcXVpcmVkXV0sZW5hYmxlUmVtb3RlTG9nZ2luZzpbITFdLGxvZ0xldmVsOlsiIixbdWUucmVxdWlyZWRdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITFdLGtleTpbImF1dG8iXSxjbGFzczpbIiJdLGNvbmZpZ3VyYXRpb246WyIiXSxjb25maWd1cmF0aW9uSnNvbjpbe30sW3VlLnJlcXVpcmVkXV0sYmFzaWNDb25maWc6W3t9XSxjb25maWdWZXJzaW9uOlsiIl0scmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSksdGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGUoKX1nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCl7cmV0dXJuKGUsdCk9Pntzd2l0Y2godCl7Y2FzZSJzeW5jU3RhdHVzIjpyZXR1cm4gdGhpcy5pc0Nvbm5lY3RvclN5bmNlZChlKT8xOjA7Y2FzZSJlbmFibGVkIjpyZXR1cm4gdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KT8xOjA7Y2FzZSJlcnJvcnMiOmNvbnN0IG49dGhpcy5nZXRFcnJvcnNDb3VudChlKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpPT09dy5ERVNDPy0xOjEvMDpuO2RlZmF1bHQ6cmV0dXJuIGVbdF18fGUudmFsdWVbdF19fX1sb2FkQ29ubmVjdG9ycygpe3RoaXMuZGV2aWNlJiZ0aGlzLmRldmljZS5pZCE9PWsmJkFlKFt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSxbImFjdGl2ZV9jb25uZWN0b3JzIl0pLHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFsiaW5hY3RpdmVfY29ubmVjdG9ycyJdKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLkNMSUVOVF9TQ09QRSxbIlZlcnNpb24iXSldKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVswXSksdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVsxXSksdGhpcy5nYXRld2F5VmVyc2lvbj1lWzJdWzBdPy52YWx1ZSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWxvYWRHYXRld2F5U3RhdGUoKXt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5rZXkpKS52YWx1ZSxuPWUuZmluZCgoZT0+Imxhc3REaXNjb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZTt0aGlzLmlzR2F0ZXdheUFjdGl2ZT10aGlzLmdldEdhdGV3YXlTdGF0dXModCxhLG4pfSkpfXBhcnNlQ29ubmVjdG9ycyhlKXtjb25zdCB0PWU/LlswXT8udmFsdWV8fFtdO3JldHVybiBuZSh0KT9KU09OLnBhcnNlKHQpOnR9b2JzZXJ2ZU1vZGVDaGFuZ2UoKXt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikubWFya0FzUHJpc3RpbmUoKX0pKX1vYnNlcnZlQXR0cmlidXRlQ2hhbmdlKCl7dGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0LnBpcGUoVmUoMzAwKSxFZSgoZT0+dGhpcy5leGVjdXRlQXR0cmlidXRlVXBkYXRlcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX11cGRhdGVBY3RpdmVDb25uZWN0b3JLZXlzKGUpe2lmKHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlKSl7Y29uc3QgdD10aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuYWN0aXZlQ29ubmVjdG9ycy5zcGxpY2UodCwxKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5wdXNoKGUpfWVsc2V7Y29uc3QgdD10aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMuc3BsaWNlKHQsMSksdGhpcy5hY3RpdmVDb25uZWN0b3JzLnB1c2goZSl9fWV4ZWN1dGVBdHRyaWJ1dGVVcGRhdGVzKGUpe0FlKHRoaXMuZ2V0QXR0cmlidXRlRXhlY3V0aW9uVGFza3MoZSkpLnBpcGUoT2UoMSksRWUoKCgpPT50aGlzLnVwZGF0ZURhdGEoITApKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWdldEF0dHJpYnV0ZUV4ZWN1dGlvblRhc2tzKGUpe2NvbnN0IHQ9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSxuPXQ/TC5TRVJWRVJfU0NPUEU6TC5TSEFSRURfU0NPUEUsYT10P0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVyblt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsW3trZXk6ImFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmFjdGl2ZUNvbm5lY3RvcnN9XSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFt7a2V5OiJpbmFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmluYWN0aXZlQ29ubmVjdG9yc31dKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxuLFtlXSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLGEsW2VdKV19b25EYXRhVXBkYXRlRXJyb3IoZSl7Y29uc3QgdD10aGlzLnV0aWxzLnBhcnNlRXhjZXB0aW9uKGUpO2xldCBuPXQubmFtZTt0Lm1lc3NhZ2UmJihuKz0iOiAiK3QubWVzc2FnZSksY29uc29sZS5lcnJvcihuKX1vbkVycm9yc1VwZGF0ZWQoKXt0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVkKCl7Y29uc3QgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGEsdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5kYXRhS2V5Lm5hbWUpKS5kYXRhWzBdWzFdLG49ZS5maW5kKChlPT4ibGFzdERpc2Nvbm5lY3RUaW1lIj09PWUuZGF0YUtleS5uYW1lKSkuZGF0YVswXVsxXSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmRhdGFLZXkubmFtZSkpLmRhdGFbMF1bMV07dGhpcy5pc0dhdGV3YXlBY3RpdmU9dGhpcy5nZXRHYXRld2F5U3RhdHVzKHQsYSxuKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1nZXRHYXRld2F5U3RhdHVzKGUsdCxuKXtyZXR1cm4hIWUmJighbnx8dD5uKX1nZW5lcmF0ZVN1YnNjcmlwdGlvbigpe2lmKHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuZGV2aWNlKXtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuZGV2aWNlLmlkLGVudGl0eU5hbWU6IkdhdGV3YXkiLHRpbWVzZXJpZXM6W119XTt0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKCh0PT57ZVswXS50aW1lc2VyaWVzLnB1c2goe25hbWU6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGAsbGFiZWw6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGB9KX0pKSx0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGkuY3JlYXRlU3Vic2NyaXB0aW9uRnJvbUluZm8oQS5sYXRlc3QsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuc3Vic2NyaXB0aW9uPWV9KSl9fWNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpe3RoaXMuYmFzaWNDb25maWdTdWImJnRoaXMuYmFzaWNDb25maWdTdWIudW5zdWJzY3JpYmUoKSx0aGlzLmJhc2ljQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImJhc2ljQ29uZmlnIikudmFsdWVDaGFuZ2VzLnBpcGUoTWUoKCgpPT4hIXRoaXMuaW5pdGlhbENvbm5lY3RvcikpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIiksbj10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWUsYT10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU7aWYoIWVlKGUsdD8udmFsdWUpJiZ0aGlzLmFsbG93QmFzaWNDb25maWcuaGFzKG4pJiZhPT09b24uQkFTSUMpe2NvbnN0IG49ey4uLnQudmFsdWUsLi4uZX07dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiY29uZmlndXJhdGlvbkpzb24iKS5wYXRjaFZhbHVlKG4se2VtaXRFdmVudDohMX0pfX0pKX1jcmVhdGVKc29uQ29uZmlnV2F0Y2hlcigpe3RoaXMuanNvbkNvbmZpZ1N1YiYmdGhpcy5qc29uQ29uZmlnU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5qc29uQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKSxuPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZSxhPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoIm1vZGUiKS52YWx1ZTshZWUoZSx0Py52YWx1ZSkmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMobikmJmE9PT1vbi5BRFZBTkNFRCYmdGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKS5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWNvbmZpcm1Db25uZWN0b3JDaGFuZ2UoKXtyZXR1cm4gdGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmNvbm5lY3RvckZvcm0uZGlydHk/dGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRpdGxlIiksdGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRleHQiKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApOkllKCEwKX1zZXRGb3JtVmFsdWUoZSl7dGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGVkJiZ0aGlzLmNvbm5lY3RvckZvcm0uZW5hYmxlKCk7Y29uc3QgdD1iYS5nZXRDb25maWcoe2NvbmZpZ3VyYXRpb246IiIsa2V5OiJhdXRvIixjb25maWd1cmF0aW9uSnNvbjp7fSwuLi5lfSx0aGlzLmdhdGV3YXlWZXJzaW9uKTt0aGlzLmdhdGV3YXlWZXJzaW9uJiYhdC5jb25maWdWZXJzaW9uJiYodC5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLHQuYmFzaWNDb25maWc9dC5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9dCx0aGlzLnVwZGF0ZUNvbm5lY3Rvcih0KX11cGRhdGVDb25uZWN0b3IoZSl7c3dpdGNoKHRoaXMuanNvbkNvbmZpZ1N1Yj8udW5zdWJzY3JpYmUoKSxlLnR5cGUpe2Nhc2UgX3QuTVFUVDpjYXNlIF90Lk9QQ1VBOmNhc2UgX3QuTU9EQlVTOnRoaXMudXBkYXRlQmFzaWNDb25maWdDb25uZWN0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZSh7Li4uZSxtb2RlOm51bGx9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUpzb25Db25maWdXYXRjaGVyKCl9fXVwZGF0ZUJhc2ljQ29uZmlnQ29ubmVjdG9yKGUpe3RoaXMuYmFzaWNDb25maWdTdWI/LnVuc3Vic2NyaWJlKCk7Y29uc3QgdD10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWU7dGhpcy5zZXRJbml0aWFsQ29ubmVjdG9yVmFsdWVzKGUpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9cGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKXt0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZShlLHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpLHRoaXMuY3JlYXRlSnNvbkNvbmZpZ1dhdGNoZXIoKX10b2dnbGVSZXBvcnRTdHJhdGVneShlKXtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInJlcG9ydFN0cmF0ZWd5Iik7ZT09PV90Lk1PREJVUz90LmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zZXRDbGllbnREYXRhKGUpe2lmKHRoaXMuaW5pdGlhbENvbm5lY3Rvcil7Y29uc3QgdD1lLmRhdGEuZmluZCgoZT0+ZS5rZXk9PT10aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSkpO3QmJih0LnZhbHVlPSJzdHJpbmciPT10eXBlb2YgdC52YWx1ZT9KU09OLnBhcnNlKHQudmFsdWUpOnQudmFsdWUsdGhpcy5pc0Nvbm5lY3RvclN5bmNlZCh0KSYmdC52YWx1ZS5jb25maWd1cmF0aW9uSnNvbiYmdGhpcy5zZXRGb3JtVmFsdWUoey4uLnQudmFsdWUsbW9kZTp0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU/P3QudmFsdWUubW9kZX0pKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOlguQXR0cmlidXRlU2VydmljZX0se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp2YX0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVvLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbm5lY3RvciIsaW5wdXRzOntjdHg6ImN0eCIsZGV2aWNlOiJkZXZpY2UifSxwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6Im5hbWVJbnB1dCIsZmlyc3Q6ITAscHJlZGljYXRlOlsibmFtZUlucHV0Il0sZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InNvcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpnLGRlc2NlbmRhbnRzOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpMbyxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmtvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGbyxzZWxlY3RvcjoidGItb3BjLXVhLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnBvLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpBbyxzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpObyxzZWxlY3RvcjoidGItbXF0dC1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmdvLHNlbGVjdG9yOiJ0Yi1yZXBvcnQtc3RyYXRlZ3kiLGlucHV0czpbImlzRXhwYW5zaW9uTW9kZSIsImRlZmF1bHRWYWx1ZSJdfSx7a2luZDoicGlwZSIsdHlwZTpfLkFzeW5jUGlwZSxuYW1lOiJhc3luYyJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTp2YSxuYW1lOiJpc0xhdGVzdFZlcnNpb25Db25maWcifV19KX19ZSgiR2F0ZXdheUNvbm5lY3RvckNvbXBvbmVudCIsRW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX0se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTpKZS5NYXREaWFsb2d9LHt0eXBlOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3R5cGU6dC5OZ1pvbmV9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp2YX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkZXZpY2U6W3t0eXBlOmF9XSxuYW1lSW5wdXQ6W3t0eXBlOm8sYXJnczpbIm5hbWVJbnB1dCJdfV0sc29ydDpbe3R5cGU6byxhcmdzOltnLHtzdGF0aWM6ITF9XX1dfX0pO2NsYXNzIHFve2NvbnN0cnVjdG9yKGUpe3RoaXMuZGV2aWNlU2VydmljZT1lfWRvd25sb2FkKGUpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kZXZpY2VJZCYmdGhpcy5kZXZpY2VTZXJ2aWNlLmRvd25sb2FkR2F0ZXdheURvY2tlckNvbXBvc2VGaWxlKHRoaXMuZGV2aWNlSWQpLnN1YnNjcmliZSgoKCk9Pnt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxbyxkZXBzOlt7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpxbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1jb21tYW5kIixpbnB1dHM6e2RldmljZUlkOiJkZXZpY2VJZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJjb21wb25lbnQiLHR5cGU6d3QuVGJNYXJrZG93bkNvbXBvbmVudCxzZWxlY3RvcjoidGItbWFya2Rvd24iLGlucHV0czpbImRhdGEiLCJjb250ZXh0IiwiYWRkaXRpb25hbENvbXBpbGVNb2R1bGVzIiwibWFya2Rvd25DbGFzcyIsImNvbnRhaW5lckNsYXNzIiwic3R5bGUiLCJhcHBseURlZmF1bHRNYXJrZG93blN0eWxlIiwiYWRkaXRpb25hbFN0eWxlcyIsImxpbmVOdW1iZXJzIiwiZmFsbGJhY2tUb1BsYWluTWFya2Rvd24iLCJ1c2VQbGFpbk1hcmtkb3duIl0sb3V0cHV0czpbInJlYWR5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QW5jaG9yLHNlbGVjdG9yOiJhW21hdC1idXR0b25dLCBhW21hdC1yYWlzZWQtYnV0dG9uXSwgYVttYXQtZmxhdC1idXR0b25dLCBhW21hdC1zdHJva2VkLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJEZXZpY2VHYXRld2F5Q29tbWFuZENvbXBvbmVudCIscW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29tbWFuZCIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpYLkRldmljZVNlcnZpY2V9XSxwcm9wRGVjb3JhdG9yczp7ZGV2aWNlSWQ6W3t0eXBlOmF9XX19KTtjbGFzcyBEb3tjb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLmZiPWUsdGhpcy5kZXZpY2VTZXJ2aWNlPXQsdGhpcy5jZD1uLHRoaXMuZGlhbG9nPWEsdGhpcy5kaWFsb2dNb2RlPSExLHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZD1uZXcgaSx0aGlzLlN0b3JhZ2VUeXBlcz1BdCx0aGlzLnN0b3JhZ2VUeXBlcz1PYmplY3QudmFsdWVzKEF0KSx0aGlzLnN0b3JhZ2VUeXBlc1RyYW5zbGF0aW9uTWFwPVJ0LHRoaXMubG9nU2F2aW5nUGVyaW9kcz1PdCx0aGlzLmxvY2FsTG9nc0NvbmZpZ3M9T2JqZWN0LmtleXMoUHQpLHRoaXMubG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwPUd0LHRoaXMuc2VjdXJpdHlUeXBlcz1CdCx0aGlzLmdhdGV3YXlMb2dMZXZlbD1PYmplY3QudmFsdWVzKE10KSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmluaXRCYXNpY0Zvcm1Hcm91cCgpLHRoaXMub2JzZXJ2ZUZvcm1DaGFuZ2VzKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jaGVja0FuZEZldGNoQ3JlZGVudGlhbHMoZT8udGhpbmdzYm9hcmQ/LnNlY3VyaXR5Pz97fSksZT8uZ3JwYyYmdGhpcy50b2dnbGVScGNGaWVsZHMoZS5ncnBjLmVuYWJsZWQpOyhlPy50aGluZ3Nib2FyZD8uc3RhdGlzdGljcz8uY29tbWFuZHM/P1tdKS5mb3JFYWNoKChlPT50aGlzLmFkZENvbW1hbmQoZSwhMSkpKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fWF0TGVhc3RPbmVSZXF1aXJlZChlLHQ9bnVsbCl7cmV0dXJuIG49Pnt0fHwodD1PYmplY3Qua2V5cyhuLmNvbnRyb2xzKSk7cmV0dXJuIG4/LmNvbnRyb2xzJiZ0LnNvbWUoKHQ9PiFlKG4uY29udHJvbHNbdF0pKSk/bnVsbDp7YXRMZWFzdE9uZTohMH19fXRvZ2dsZVJwY0ZpZWxkcyhlKXtjb25zdCB0PXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjIik7ZT8odC5nZXQoInNlcnZlclBvcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lb3V0TXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluVGltZUJldHdlZW5QaW5nc01zIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNcyIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0LmdldCgic2VydmVyUG9ydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgia2VlcEFsaXZlVGltZW91dE1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoIm1pblRpbWVCZXR3ZWVuUGluZ3NNcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfWFkZExvY2FsTG9nQ29uZmlnKGUsdCl7Y29uc3Qgbj10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgibG9ncy5sb2NhbCIpLGE9dGhpcy5mYi5ncm91cCh7bG9nTGV2ZWw6W3QubG9nTGV2ZWx8fE10LklORk8sW3VlLnJlcXVpcmVkXV0sZmlsZVBhdGg6W3QuZmlsZVBhdGh8fCIuL2xvZ3MiLFt1ZS5yZXF1aXJlZF1dLGJhY2t1cENvdW50Olt0LmJhY2t1cENvdW50fHw3LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCldXSxzYXZpbmdUaW1lOlt0LnNhdmluZ1RpbWV8fDMsW3VlLnJlcXVpcmVkLHVlLm1pbigwKV1dLHNhdmluZ1BlcmlvZDpbdC5zYXZpbmdQZXJpb2R8fER0LmRheXMsW3VlLnJlcXVpcmVkXV19KTtuLmFkZENvbnRyb2woZSxhKX1nZXRMb2dGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KGBsb2dzLmxvY2FsLiR7ZX1gKX1jb21tYW5kRm9ybUFycmF5KCl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzIil9cmVtb3ZlQ29tbWFuZENvbnRyb2woZSx0KXsiIiE9PXQucG9pbnRlclR5cGUmJih0aGlzLmNvbW1hbmRGb3JtQXJyYXkoKS5yZW1vdmVBdChlKSx0aGlzLmJhc2ljRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfXJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5Iik7ZS5jbGVhclZhbGlkYXRvcnMoKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1yZW1vdmVBbGxTdG9yYWdlVmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInN0b3JhZ2UiKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKXt0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGV2aWNlKHRoaXMuZGV2aWNlLmlkKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmRpYWxvZy5vcGVuKFBhLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7Z2F0ZXdheU5hbWU6ZS5uYW1lfX0pLmFmdGVyQ2xvc2VkKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS5zZXRWYWx1ZSghMCx7ZW1pdEV2ZW50OiExfSl9KSl9KSl9YWRkQ29tbWFuZChlLHQ9ITApe2NvbnN0e2F0dHJpYnV0ZU9uR2F0ZXdheTpuPW51bGwsY29tbWFuZDphPW51bGwsdGltZW91dDpvPW51bGx9PWV8fHt9LGk9dGhpcy5mYi5ncm91cCh7YXR0cmlidXRlT25HYXRld2F5OltuLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dLGNvbW1hbmQ6W2EsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14oPz1cUykuKlxTJC8pXV0sdGltZW91dDpbbyxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKSx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dfSk7dGhpcy5jb21tYW5kRm9ybUFycmF5KCkucHVzaChpLHtlbWl0RXZlbnQ6dH0pfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3RoaXMuYmFzaWNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dGhpbmdzYm9hcmQ6dGhpcy5pbml0VGhpbmdzYm9hcmRGb3JtR3JvdXAoKSxzdG9yYWdlOnRoaXMuaW5pdFN0b3JhZ2VGb3JtR3JvdXAoKSxncnBjOnRoaXMuaW5pdEdycGNGb3JtR3JvdXAoKSxjb25uZWN0b3JzOnRoaXMuZmIuYXJyYXkoW10pLGxvZ3M6dGhpcy5pbml0TG9nc0Zvcm1Hcm91cCgpfSl9aW5pdFRoaW5nc2JvYXJkRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2hvc3Q6W3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteXHNdKyQvKV1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZVNoZWxsOlshMV0scmVtb3RlQ29uZmlndXJhdGlvbjpbITBdLGNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHM6WzYwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sc3RhdGlzdGljczp0aGlzLmZiLmdyb3VwKHtlbmFibGU6WyEwXSxzdGF0c1NlbmRQZXJpb2RJblNlY29uZHM6WzM2MDAsW3VlLnJlcXVpcmVkLHVlLm1pbig2MCksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sY29tbWFuZHM6dGhpcy5mYi5hcnJheShbXSl9KSxtYXhQYXlsb2FkU2l6ZUJ5dGVzOls4MTk2LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTAwKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtaW5QYWNrU2VuZERlbGF5TVM6WzUwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblBhY2tTaXplVG9TZW5kOls1MDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxMDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGhhbmRsZURldmljZVJlbmFtaW5nOlshMF0sY2hlY2tpbmdEZXZpY2VBY3Rpdml0eTp0aGlzLmluaXRDaGVja2luZ0RldmljZUFjdGl2aXR5Rm9ybUdyb3VwKCksc2VjdXJpdHk6dGhpcy5pbml0U2VjdXJpdHlGb3JtR3JvdXAoKSxxb3M6WzEsW3VlLnJlcXVpcmVkLHVlLm1pbigwKSx1ZS5tYXgoMSksdWUucGF0dGVybigvXlteLlxzXSskLyldXX0pfWluaXRTdG9yYWdlRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe3R5cGU6W0F0Lk1FTU9SWSxbdWUucmVxdWlyZWRdXSxyZWFkX3JlY29yZHNfY291bnQ6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heF9yZWNvcmRzX2NvdW50OlsxZTUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhX2ZvbGRlcl9wYXRoOlsiLi9kYXRhLyIsW3VlLnJlcXVpcmVkXV0sbWF4X2ZpbGVfY291bnQ6WzEwLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWF4X3JlYWRfcmVjb3Jkc19jb3VudDpbMTAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhfcmVjb3Jkc19wZXJfZmlsZTpbMWU0LFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sZGF0YV9maWxlX3BhdGg6WyIuL2RhdGEvZGF0YS5kYiIsW3VlLnJlcXVpcmVkXV0sbWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzOlsxLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWVzc2FnZXNfdHRsX2luX2RheXM6WzcsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRHcnBjRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxzZXJ2ZXJQb3J0Ols5NTk1LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUubWF4KDY1NTM1KSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxrZWVwQWxpdmVUaW1lTXM6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGtlZXBBbGl2ZVRpbWVvdXRNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sa2VlcGFsaXZlUGVybWl0V2l0aG91dENhbGxzOlshMF0sbWF4UGluZ3NXaXRob3V0RGF0YTpbMCxbdWUucmVxdWlyZWQsdWUubWluKDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblRpbWVCZXR3ZWVuUGluZ3NNczpbMWU0LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV19KX1pbml0TG9nc0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHtkYXRlRm9ybWF0OlsiJVktJW0tJWQgJUg6JU06JVMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sbG9nRm9ybWF0OlsiJShhc2N0aW1lKXMgLSB8JShsZXZlbG5hbWUpc3wgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGZ1bmNOYW1lKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sdHlwZTpbInJlbW90ZSIsW3VlLnJlcXVpcmVkXV0scmVtb3RlOnRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxsb2dMZXZlbDpbTXQuSU5GTyxbdWUucmVxdWlyZWRdXX0pLGxvY2FsOnRoaXMuZmIuZ3JvdXAoe30pfSl9aW5pdENoZWNraW5nRGV2aWNlQWN0aXZpdHlGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7Y2hlY2tEZXZpY2VJbmFjdGl2aXR5OlshMV0saW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzOlsyMDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzOls1MDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRTZWN1cml0eUZvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHt0eXBlOltWdC5BQ0NFU1NfVE9LRU4sW3VlLnJlcXVpcmVkXV0sYWNjZXNzVG9rZW46W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2xpZW50SWQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sdXNlcm5hbWU6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0scGFzc3dvcmQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2FDZXJ0OltudWxsXSxjZXJ0OltudWxsXSxwcml2YXRlS2V5OltudWxsXX0pfW9ic2VydmVGb3JtQ2hhbmdlcygpe3RoaXMub2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCksdGhpcy5vYnNlcnZlUmVtb3RlQ29uZmlndXJhdGlvbkNoYW5nZXMoKSx0aGlzLm9ic2VydmVEZXZpY2VBY3Rpdml0eUNoYW5nZXMoKSx0aGlzLm9ic2VydmVTZWN1cml0eVR5cGVDaGFuZ2VzKCksdGhpcy5vYnNlcnZlU3RvcmFnZVR5cGVDaGFuZ2VzKCl9b2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWUiKTt0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dCYmIiIhPT10P2Uuc2V0VmFsaWRhdG9ycyhbdWUucmVxdWlyZWRdKTplLmNsZWFyVmFsaWRhdG9ycygpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9b2JzZXJ2ZVJlbW90ZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKX0pKSx0aGlzLmxvZ1NlbGVjdG9yPXRoaXMuZmIuY29udHJvbChQdC5zZXJ2aWNlKTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhQdCkpdGhpcy5hZGRMb2NhbExvZ0NvbmZpZyhlLHt9KX1vYnNlcnZlRGV2aWNlQWN0aXZpdHlDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSIpO2UuZ2V0KCJjaGVja0RldmljZUluYWN0aXZpdHkiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7Y29uc3Qgbj1bdWUubWluKDEpLHVlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV07dD8oZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLnNldFZhbGlkYXRvcnMobiksZS5nZXQoImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiKS5zZXRWYWxpZGF0b3JzKG4pKTooZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLmNsZWFyVmFsaWRhdG9ycygpLGUuZ2V0KCJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIikuY2xlYXJWYWxpZGF0b3JzKCkpLGUuZ2V0KCJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSxlLmdldCgiaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kcyIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjLmVuYWJsZWQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy50b2dnbGVScGNGaWVsZHMoZSl9KSl9b2JzZXJ2ZVNlY3VyaXR5VHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eSIpO2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e3N3aXRjaCh0aGlzLnJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpLHQpe2Nhc2UgVnQuQUNDRVNTX1RPS0VOOnRoaXMuYWRkQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVExTX1BSSVZBVEVfS0VZOnRoaXMuYWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSk7YnJlYWs7Y2FzZSBWdC5UTFNfQUNDRVNTX1RPS0VOOnRoaXMuYWRkVGxzQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVVNFUk5BTUVfUEFTU1dPUkQ6ZS5hZGRWYWxpZGF0b3JzKFt0aGlzLmF0TGVhc3RPbmVSZXF1aXJlZCh1ZS5yZXF1aXJlZCxbImNsaWVudElkIiwidXNlcm5hbWUiXSldKX1lLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKSxbImNhQ2VydCIsInByaXZhdGVLZXkiLCJjZXJ0Il0uZm9yRWFjaCgodD0+e2UuZ2V0KHQpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT50aGlzLmNkLmRldGVjdENoYW5nZXMoKSkpfSkpfW9ic2VydmVTdG9yYWdlVHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzdG9yYWdlIik7ZS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57c3dpdGNoKHRoaXMucmVtb3ZlQWxsU3RvcmFnZVZhbGlkYXRvcnMoKSx0KXtjYXNlIEF0Lk1FTU9SWTp0aGlzLmFkZE1lbW9yeVN0b3JhZ2VWYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgQXQuRklMRTp0aGlzLmFkZEZpbGVTdG9yYWdlVmFsaWRhdG9ycyhlKTticmVhaztjYXNlIEF0LlNRTElURTp0aGlzLmFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpfX0pKX1hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7ZS5nZXQoImFjY2Vzc1Rva2VuIikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteLlxzXSskLyldKSxlLmdldCgiYWNjZXNzVG9rZW4iKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9YWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSl7WyJjYUNlcnQiLCJwcml2YXRlS2V5IiwiY2VydCJdLmZvckVhY2goKHQ9PntlLmdldCh0KS5hZGRWYWxpZGF0b3JzKFt1ZS5yZXF1aXJlZF0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKX1hZGRUbHNBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7dGhpcy5hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSksZS5nZXQoImNhQ2VydCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkXSksZS5nZXQoImNhQ2VydCIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1hZGRNZW1vcnlTdG9yYWdlVmFsaWRhdG9ycyhlKXtlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KCJtYXhfcmVjb3Jkc19jb3VudCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldKSxlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoIm1heF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9YWRkRmlsZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWF4X2ZpbGVfY291bnQiLCJtYXhfcmVhZF9yZWNvcmRzX2NvdW50IiwibWF4X3JlY29yZHNfcGVyX2ZpbGUiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIiwibWVzc2FnZXNfdHRsX2luX2RheXMiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWNoZWNrQW5kRmV0Y2hDcmVkZW50aWFscyhlKXtlLnR5cGUhPT1WdC5UTFNfUFJJVkFURV9LRVkmJnRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyh0aGlzLmRldmljZS5pZCkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5pbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkLmVtaXQodCksdGhpcy51cGRhdGVTZWN1cml0eVR5cGUoZSx0KSx0aGlzLnVwZGF0ZUNyZWRlbnRpYWxzKHQsZSl9KSl9dXBkYXRlU2VjdXJpdHlUeXBlKGUsdCl7Y29uc3Qgbj10LmNyZWRlbnRpYWxzVHlwZT09PVUuQUNDRVNTX1RPS0VOfHxlLnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOP2UudHlwZT09PVZ0LlRMU19BQ0NFU1NfVE9LRU4/VnQuVExTX0FDQ0VTU19UT0tFTjpWdC5BQ0NFU1NfVE9LRU46dC5jcmVkZW50aWFsc1R5cGU9PT1VLk1RVFRfQkFTSUM/VnQuVVNFUk5BTUVfUEFTU1dPUkQ6bnVsbDtuJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZSIpLnNldFZhbHVlKG4se2VtaXRFdmVudDohMX0pfXVwZGF0ZUNyZWRlbnRpYWxzKGUsdCl7c3dpdGNoKGUuY3JlZGVudGlhbHNUeXBlKXtjYXNlIFUuQUNDRVNTX1RPS0VOOnRoaXMudXBkYXRlQWNjZXNzVG9rZW5DcmVkZW50aWFscyhlLHQpO2JyZWFrO2Nhc2UgVS5NUVRUX0JBU0lDOnRoaXMudXBkYXRlTXF0dEJhc2ljQ3JlZGVudGlhbHMoZSk7Y2FzZSBVLlg1MDlfQ0VSVElGSUNBVEU6fX11cGRhdGVBY2Nlc3NUb2tlbkNyZWRlbnRpYWxzKGUsdCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuIikuc2V0VmFsdWUoZS5jcmVkZW50aWFsc0lkLHtlbWl0RXZlbnQ6ITF9KSx0LnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkuY2FDZXJ0Iikuc2V0VmFsdWUodC5jYUNlcnQse2VtaXRFdmVudDohMX0pfXVwZGF0ZU1xdHRCYXNpY0NyZWRlbnRpYWxzKGUpe2NvbnN0IHQ9SlNPTi5wYXJzZShlLmNyZWRlbnRpYWxzVmFsdWUpO3RoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZCIpLnNldFZhbHVlKHQuY2xpZW50SWQse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZSIpLnNldFZhbHVlKHQudXNlck5hbWUse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZCIpLnNldFZhbHVlKHQucGFzc3dvcmQse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6RG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWJhc2ljLWNvbmZpZ3VyYXRpb24iLGlucHV0czp7ZGV2aWNlOiJkZXZpY2UiLGRpYWxvZ01vZGU6ImRpYWxvZ01vZGUifSxvdXRwdXRzOntpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkOiJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+RG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgY2xhc3M9InRhYi1ncm91cC1ibG9jayIgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIiBbY2xhc3MuZGlhbG9nLW1vZGVdPSJkaWFsb2dNb2RlIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1jb25maWd1cmF0aW9uXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZVNoZWxsIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtaG9zdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaG9zdFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmhvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnNlY3VyaXR5LnNlY3VyaXR5PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzZWN1cml0eSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij57eyBzZWN1cml0eVR5cGUudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ2FjY2Vzc3Rva2VuXCcpIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuYWNjZXNzLXRva2VuPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImFjY2Vzc1Rva2VuIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkuYWNjZXNzLXRva2VuLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdkZXZpY2UuY29weS1hY2Nlc3MtdG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuY2xpZW50SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNsaWVudElkIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5jbGllbnRJZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgW2NvcHlUZXh0XT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuY2xpZW50SWRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS51c2VybmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LnVzZXJuYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZVwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXVzZXJuYW1lXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgc3R5bGU9IndpZHRoOiAxMDAlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiLz5cbiAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucGFzc3dvcmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8dGItZXJyb3Igc3R5bGU9Im1hcmdpbi10b3A6IC0xMnB4OyBkaXNwbGF5OiBibG9jazsiIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS50eXBlXCcpLnZhbHVlID09PSBcJ3VzZXJuYW1lUGFzc3dvcmRcJyJcbiAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eVwnKS5oYXNFcnJvcihcJ2F0TGVhc3RPbmVcJykgP1xuICAgICAgICAgIChcJ2RldmljZS5jbGllbnQtaWQtb3ItdXNlci1uYW1lLW5lY2Vzc2FyeVwnIHwgdHJhbnNsYXRlKSA6IFwnXCciPjwvdGItZXJyb3I+XG4gICAgICAgICAgICA8dGItZmlsZS1pbnB1dFxuICAgICAgICAgICAgICBmeEZsZXg9IjEwMCJcbiAgICAgICAgICAgICAgaGludD0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ3Rsc1wnKSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnQiXG4gICAgICAgICAgICAgIGxhYmVsPSJ7eyBcJ3NlY3VyaXR5LmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgW2FsbG93ZWRFeHRlbnNpb25zXT0iXCdwZW0sIGNlcnQsIGtleVwnIlxuICAgICAgICAgICAgICBbYWNjZXB0XT0iXCcucGVtLCBhcHBsaWNhdGlvbi9wZW0sLmNlcnQsIGFwcGxpY2F0aW9uL2NlcnQsIC5rZXksYXBwbGljYXRpb24va2V5XCciXG4gICAgICAgICAgICAgIGRyb3BMYWJlbD0ie3sgXCdnYXRld2F5LmRyb3AtZmlsZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIDwvdGItZmlsZS1pbnB1dD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubG9ncy5sb2dzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJsb2dzIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5kYXRlLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRlRm9ybWF0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MuZGF0ZUZvcm1hdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5kYXRlLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGUtZm9ybVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubG9nLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJsb2dGb3JtYXQiIHJvd3M9IjIiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9nRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmxvZy1mb3JtYXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5sb2ctZm9ybWF0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJyZW1vdGUiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MucmVtb3RlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1sb2dcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MucmVtb3RlLWxvZ3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ibG9jYWwiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MubG9jYWw8L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBbZm9ybUNvbnRyb2xdPSJsb2dTZWxlY3RvciI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBsb2dDb25maWcgb2YgbG9jYWxMb2dzQ29uZmlncyIgW3ZhbHVlXT0ibG9nQ29uZmlnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZpcnN0LWNhcGl0YWwiPnt7IGxvY2FsTG9nc0NvbmZpZ1RyYW5zbGF0ZU1hcC5nZXQobG9nQ29uZmlnKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0iZ2V0TG9nRm9ybUdyb3VwKGxvZ1NlbGVjdG9yLnZhbHVlKSI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MuZmlsZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZmlsZVBhdGgiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5maWxlUGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmZpbGUtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgc2F2aW5nLXBlcmlvZCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdUaW1lIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3Muc2F2aW5nLXBlcmlvZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLnNhdmluZ1RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBoaWRlUmVxdWlyZWRNYXJrZXIgc3R5bGU9Im1pbi13aWR0aDogMTEwcHg7IHdpZHRoOiAzMCUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdQZXJpb2QiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBwZXJpb2Qgb2YgbG9nU2F2aW5nUGVyaW9kcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJwZXJpb2Qua2V5Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwZXJpb2QudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5iYWNrdXAtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJiYWNrdXBDb3VudCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuYmFja3VwQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYmFja3VwLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0b3JhZ2VcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InN0b3JhZ2UiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPmdhdGV3YXkuaGludHMuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMiIFt2YWx1ZV09InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAuZ2V0KHN0b3JhZ2VUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPnt7IFwnZ2F0ZXdheS5oaW50cy5cJyArIGJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UudHlwZVwnKS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxzZWN0aW9uICpuZ1N3aXRjaENhc2U9IlN0b3JhZ2VUeXBlcy5NRU1PUlkiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlYWRfcmVjb3Jkc19jb3VudCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5yZWFkLXJlY29yZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLkZJTEUiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFfZm9sZGVyX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9mb2xkZXJfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtaW5maXggcG9pbnRlci1ldmVudCBzdWZmaXgtaWNvbiIgYXJpYS1oaWRkZW49ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9ImhlbHAtaWNvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0YS1mb2xkZXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9maWxlX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtZmlsZS1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhfcmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVhZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX3Blcl9maWxlIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVjb3Jkc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLlNRTElURSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9maWxlX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9maWxlX3BhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3VycyIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLWNoZWNrLWhvdXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9pbl9kYXlzIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnR0bC1tZXNzYWdlcy1kYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdycGNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImdycGMiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwY1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucGVybWl0LXdpdGhvdXQtY2FsbHNcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucGVybWl0LXdpdGhvdXQtY2FsbHNcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1wb3J0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ic2VydmVyUG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2VydmVyLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVvdXRNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJrZWVwQWxpdmVUaW1lTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMta2VlcC1hbGl2ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5nczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblRpbWVCZXR3ZWVuUGluZ3NNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGluZ3NXaXRob3V0RGF0YSIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY29sb3I9InByaW1hcnkiIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzdGF0c1NlbmRQZXJpb2RJblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSI2MCIvPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5oaW50cy5jb21tYW5kczwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZvcm1BcnJheU5hbWU9ImNvbW1hbmRzIiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiXG4gICAgICAgICAgICAgICAgICpuZ0Zvcj0ibGV0IGNvbW1hbmRDb250cm9sIG9mIGNvbW1hbmRGb3JtQXJyYXkoKS5jb250cm9sczsgbGV0ICRpbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gW2Zvcm1Hcm91cE5hbWVdPSIkaW5kZXgiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgbm8tcGFkZGluZy1ib3R0b20gbm8tZ2FwIGNvbW1hbmQtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuYXR0cmlidXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlT25HYXRld2F5Ii8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2F0dHJpYnV0ZU9uR2F0ZXdheVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmF0dHJpYnV0ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjb21tYW5kIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnY29tbWFuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jb21tYW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb21tYW5kQ29udHJvbCgkaW5kZXgsICRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3MucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiBmaXQtY29udGVudDsiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZENvbW1hbmQoKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkub3RoZXJcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiIGZvcm1Hcm91cE5hbWU9ImNoZWNraW5nRGV2aWNlQWN0aXZpdHkiXG4gICAgICAgICAgICAgW2NsYXNzLm5vLXBhZGRpbmctYm90dG9tXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jaGVjay1kZXZpY2UtYWN0aXZpdHlcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0RldmljZUluYWN0aXZpdHkiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5XCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuY2hlY2tEZXZpY2VJbmFjdGl2aXR5XCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmluYWN0aXZpdHktdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QYWNrU2VuZERlbGF5TVMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2VuZERlbGF5TVNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5taW5pbWFsLXBhY2stZGVsYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubXF0dC1xb3M8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icW9zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSIxIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnFvc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5xb3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heFBheWxvYWRTaXplQnl0ZXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXBheWxvYWQtc2l6ZS1ieXRlc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTaXplVG9TZW5kIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbi1wYWNrLXNpemUtdG8tc2VuZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1yb3dzOm1pbi1jb250ZW50IG1pbm1heChhdXRvLDFmcikgbWluLWNvbnRlbnR9Omhvc3QgLmNvbmZpZ3VyYXRpb24tYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTZweDttYXgtaGVpZ2h0Ojcwdmh9Omhvc3QgLmRpYWxvZy1tb2RlIC5jb25maWd1cmF0aW9uLWJsb2Nre21heC1oZWlnaHQ6NjB2aH06aG9zdCAubWF0LXRvb2xiYXJ7Z3JpZC1yb3c6MTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLnRhYi1ncm91cC1ibG9ja3ttaW4td2lkdGg6MDtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OjA7Z3JpZC1yb3c6Mn06aG9zdCAudG9nZ2xlLWdyb3Vwe21hcmdpbi1yaWdodDphdXRvfTpob3N0IC5maXJzdC1jYXBpdGFse3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgdGV4dGFyZWF7cmVzaXplOm5vbmV9Omhvc3QgLnNhdmluZy1wZXJpb2R7ZmxleDoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY29tbWFuZC1jb250YWluZXJ7d2lkdGg6MTAwJX06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3J7ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3I6Zmlyc3QtY2hpbGR7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QgOjpuZy1kZWVwIC5wb2ludGVyLWV2ZW50e3BvaW50ZXItZXZlbnRzOmFsbH06aG9zdCA6Om5nLWRlZXAgLnRvZ2dsZS1ncm91cCBzcGFue3BhZGRpbmc6MCAyNXB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2NvbG9yOiNlMGUwZTB9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXg6aG92ZXJ7Y29sb3I6IzllOWU5ZX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q3QuVGJFcnJvckNvbXBvbmVudCxzZWxlY3RvcjoidGItZXJyb3IiLGlucHV0czpbIm5vTWFyZ2luIiwiZXJyb3IiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpXLk1hdFRhYkNvbnRlbnQsc2VsZWN0b3I6IlttYXRUYWJDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpUdC5GaWxlSW5wdXRDb21wb25lbnQsc2VsZWN0b3I6InRiLWZpbGUtaW5wdXQiLGlucHV0czpbImxhYmVsIiwiaGludCIsImFjY2VwdCIsIm5vRmlsZVRleHQiLCJpbnB1dElkIiwiYWxsb3dlZEV4dGVuc2lvbnMiLCJkcm9wTGFiZWwiLCJtYXhTaXplQnl0ZSIsImNvbnRlbnRDb252ZXJ0RnVuY3Rpb24iLCJyZXF1aXJlZCIsInJlcXVpcmVkQXNFcnJvciIsImRpc2FibGVkIiwiZXhpc3RpbmdGaWxlTmFtZSIsInJlYWRBc0JpbmFyeSIsIndvcmtGcm9tRmlsZU9iaiIsIm11bHRpcGxlRmlsZSJdLG91dHB1dHM6WyJmaWxlTmFtZUNoYW5nZWQiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6U3QuQ29weUJ1dHRvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItY29weS1idXR0b24iLGlucHV0czpbImNvcHlUZXh0IiwiZGlzYWJsZWQiLCJtZGlJY29uIiwiaWNvbiIsInRvb2x0aXBUZXh0IiwidG9vbHRpcFBvc2l0aW9uIiwic3R5bGUiLCJjb2xvciIsIm1pbmlCdXR0b24iXSxvdXRwdXRzOlsic3VjY2Vzc0NvcGllZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19XX0pfX1lKCJHYXRld2F5QmFzaWNDb25maWd1cmF0aW9uQ29tcG9uZW50IixEbyksSGUoW04oKV0sRG8ucHJvdG90eXBlLCJkaWFsb2dNb2RlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5EbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBjbGFzcz0idGFiLWdyb3VwLWJsb2NrIiBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiIFtjbGFzcy5kaWFsb2ctbW9kZV09ImRpYWxvZ01vZGUiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5yZW1vdGUtY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUNvbmZpZ3VyYXRpb24iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlU2hlbGwiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Imhvc3QiLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+c2VjdXJpdHkuc2VjdXJpdHk8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHNlY3VyaXR5VHlwZSBvZiBzZWN1cml0eVR5cGVzIHwga2V5dmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09InNlY3VyaXR5VHlwZS5rZXkiPnt7IHNlY3VyaXR5VHlwZS52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwnYWNjZXNzdG9rZW5cJykiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5hY2Nlc3MtdG9rZW48L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYWNjZXNzVG9rZW4iLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuYWNjZXNzVG9rZW5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5hY2Nlc3MtdG9rZW4tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2RldmljZS5jb3B5LWFjY2Vzcy10b2tlblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50b2tlblwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPHNlY3Rpb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5jbGllbnRJZDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LmNsaWVudElkLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBpY29uPSJjb250ZW50X2NvcHkiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPnNlY3VyaXR5LnVzZXJuYW1lPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkudXNlcm5hbWUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdnYXRld2F5LmNvcHktdXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy51c2VybmFtZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBzdHlsZT0id2lkdGg6IDEwMCUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIvPlxuICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnBhc3N3b3JkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXBhc3N3b3JkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDx0Yi1lcnJvciBzdHlsZT0ibWFyZ2luLXRvcDogLTEycHg7IGRpc3BsYXk6IGJsb2NrOyIgZnhGbGV4PSIxMDAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIlxuICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5XCcpLmhhc0Vycm9yKFwnYXRMZWFzdE9uZVwnKSA/XG4gICAgICAgICAgKFwnZGV2aWNlLmNsaWVudC1pZC1vci11c2VyLW5hbWUtbmVjZXNzYXJ5XCcgfCB0cmFuc2xhdGUpIDogXCdcJyI+PC90Yi1lcnJvcj5cbiAgICAgICAgICAgIDx0Yi1maWxlLWlucHV0XG4gICAgICAgICAgICAgIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICBoaW50PSJ7eyBcJ2dhdGV3YXkuaGludHMuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwndGxzXCcpIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImNhQ2VydCJcbiAgICAgICAgICAgICAgbGFiZWw9Int7IFwnc2VjdXJpdHkuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBbYWxsb3dlZEV4dGVuc2lvbnNdPSJcJ3BlbSwgY2VydCwga2V5XCciXG4gICAgICAgICAgICAgIFthY2NlcHRdPSJcJy5wZW0sIGFwcGxpY2F0aW9uL3BlbSwuY2VydCwgYXBwbGljYXRpb24vY2VydCwgLmtleSxhcHBsaWNhdGlvbi9rZXlcJyJcbiAgICAgICAgICAgICAgZHJvcExhYmVsPSJ7eyBcJ2dhdGV3YXkuZHJvcC1maWxlXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgPC90Yi1maWxlLWlucHV0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5sb2dzLmxvZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImxvZ3MiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGVGb3JtYXQiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5kYXRlRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0ZS1mb3JtXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sb2ctZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImxvZ0Zvcm1hdCIgcm93cz0iMiI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2dGb3JtYXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MubG9nLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmxvZy1mb3JtYXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iIGZvcm1Hcm91cE5hbWU9InJlbW90ZSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5yZW1vdGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWxvZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5yZW1vdGUtbG9nc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJsb2dMZXZlbCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJsb2NhbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5sb2NhbDwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIFtmb3JtQ29udHJvbF09ImxvZ1NlbGVjdG9yIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0NvbmZpZyBvZiBsb2NhbExvZ3NDb25maWdzIiBbdmFsdWVdPSJsb2dDb25maWciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmlyc3QtY2FwaXRhbCI+e3sgbG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwLmdldChsb2dDb25maWcpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJnZXRMb2dGb3JtR3JvdXAobG9nU2VsZWN0b3IudmFsdWUpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5maWxlLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaWxlUGF0aCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmZpbGVQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MuZmlsZS1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBzYXZpbmctcGVyaW9kIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1RpbWUiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5zYXZpbmdUaW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2QtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGhpZGVSZXF1aXJlZE1hcmtlciBzdHlsZT0ibWluLXdpZHRoOiAxMTBweDsgd2lkdGg6IDMwJSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1BlcmlvZCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBlcmlvZCBvZiBsb2dTYXZpbmdQZXJpb2RzIHwga2V5dmFsdWUiIFt2YWx1ZV09InBlcmlvZC5rZXkiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBlcmlvZC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImJhY2t1cENvdW50IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmJhY2t1cENvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5iYWNrdXAtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0ic3RvcmFnZSIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+Z2F0ZXdheS5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+Z2F0ZXdheS5oaW50cy5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgY2xhc3M9InRvZ2dsZS1ncm91cCIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZXNUcmFuc2xhdGlvbk1hcC5nZXQoc3RvcmFnZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+e3sgXCdnYXRld2F5LmhpbnRzLlwnICsgYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnR5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLk1FTU9SWSIgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnJlYWQtcmVjb3JkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3JkczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXJlY29yZHMtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuRklMRSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9mb2xkZXJfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXQtZm9ybS1maWVsZC1pbmZpeCBwb2ludGVyLWV2ZW50IHN1ZmZpeC1pY29uIiBhcmlhLWhpZGRlbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iaGVscC1pY29uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X2ZpbGVfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfZmlsZV9jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1maWxlLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWFkX3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWFkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfcGVyX2ZpbGUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19wZXJfZmlsZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuU1FMSVRFIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRhX2ZpbGVfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZpbGVfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGEtZm9sZGVyXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50dGwtY2hlY2staG91clwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5czwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2luX2RheXMiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2luX2RheXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLW1lc3NhZ2VzLWRheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ3JwY1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0iZ3JwYyIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5wZXJtaXQtd2l0aG91dC1jYWxsc1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5wZXJtaXQtd2l0aG91dC1jYWxsc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJQb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5zZXJ2ZXItcG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLnNlcnZlclBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1heFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ia2VlcEFsaXZlVGltZW91dE1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLWtlZXAtYWxpdmUtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVvdXRNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluVGltZUJldHdlZW5QaW5nc01zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblRpbWVCZXR3ZWVuUGluZ3NNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtYXhQaW5nc1dpdGhvdXREYXRhIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGFcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1heFBpbmdzV2l0aG91dERhdGFcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWNzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj0icHJpbWFyeSIgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InN0YXRzU2VuZFBlcmlvZEluU2Vjb25kcyIgdHlwZT0ibnVtYmVyIiBtaW49IjYwIi8+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnN0YXRpc3RpY3Muc3RhdHNTZW5kUGVyaW9kSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZHM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiIHRyYW5zbGF0ZT5nYXRld2F5LmhpbnRzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZm9ybUFycmF5TmFtZT0iY29tbWFuZHMiIGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29tbWFuZENvbnRyb2wgb2YgY29tbWFuZEZvcm1BcnJheSgpLmNvbnRyb2xzOyBsZXQgJGluZGV4ID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8c2VjdGlvbiBbZm9ybUdyb3VwTmFtZV09IiRpbmRleCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBuby1wYWRkaW5nLWJvdHRvbSBuby1nYXAgY29tbWFuZC1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJhdHRyaWJ1dGVPbkdhdGV3YXkiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnYXR0cmlidXRlT25HYXRld2F5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXR0cmlidXRlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MudGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCd0aW1lb3V0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2NvbW1hbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9InJlbW92ZUNvbW1hbmRDb250cm9sKCRpbmRleCwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItYm94LWJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IGZpdC1jb250ZW50OyJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkQ29tbWFuZCgpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuYWRkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5vdGhlclwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCIgZm9ybUdyb3VwTmFtZT0iY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSJcbiAgICAgICAgICAgICBbY2xhc3Mubm8tcGFkZGluZy1ib3R0b21dPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmNoZWNrRGV2aWNlSW5hY3Rpdml0eVwnKS52YWx1ZSI+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNoZWNrLWRldmljZS1hY3Rpdml0eVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImNoZWNrRGV2aWNlSW5hY3Rpdml0eSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jaGVja2luZy1kZXZpY2UtYWN0aXZpdHlcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlUaW1lb3V0U2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBmb3JtQ29udHJvbE5hbWU9ImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5pbmFjdGl2aXR5LXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmFkdmFuY2VkPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTZW5kRGVsYXlNUyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbmltYWwtcGFjay1kZWxheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tcXR0LXFvczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJxb3MiIHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjEiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtYXhcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnFvc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGF5bG9hZFNpemVCeXRlcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1heFBheWxvYWRTaXplQnl0ZXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluUGFja1NpemVUb1NlbmQiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2l6ZVRvU2VuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWluLXBhY2stc2l6ZS10by1zZW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLXJvd3M6bWluLWNvbnRlbnQgbWlubWF4KGF1dG8sMWZyKSBtaW4tY29udGVudH06aG9zdCAuY29uZmlndXJhdGlvbi1ibG9ja3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxNnB4O21heC1oZWlnaHQ6NzB2aH06aG9zdCAuZGlhbG9nLW1vZGUgLmNvbmZpZ3VyYXRpb24tYmxvY2t7bWF4LWhlaWdodDo2MHZofTpob3N0IC5tYXQtdG9vbGJhcntncmlkLXJvdzoxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzAwMDAwMGRlIWltcG9ydGFudH06aG9zdCAudGFiLWdyb3VwLWJsb2Nre21pbi13aWR0aDowO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6MDtncmlkLXJvdzoyfTpob3N0IC50b2dnbGUtZ3JvdXB7bWFyZ2luLXJpZ2h0OmF1dG99Omhvc3QgLmZpcnN0LWNhcGl0YWx7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZX06aG9zdCB0ZXh0YXJlYXtyZXNpemU6bm9uZX06aG9zdCAuc2F2aW5nLXBlcmlvZHtmbGV4OjF9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVye3dpZHRoOjEwMCV9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIC5jb21tYW5kLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcjpmaXJzdC1jaGlsZHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH06aG9zdCA6Om5nLWRlZXAgLnBvaW50ZXItZXZlbnR7cG9pbnRlci1ldmVudHM6YWxsfTpob3N0IDo6bmctZGVlcCAudG9nZ2xlLWdyb3VwIHNwYW57cGFkZGluZzowIDI1cHh9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7Y29sb3I6I2UwZTBlMH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeDpob3Zlcntjb2xvcjojOWU5ZTllfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkRldmljZVNlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOkplLk1hdERpYWxvZ31dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dNb2RlOlt7dHlwZTphfV0saW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZDpbe3R5cGU6bH1dfX0pO2NsYXNzIFBve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCIiKSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5hZHZhbmNlZEZvcm1Db250cm9sLnJlc2V0KGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMuYWR2YW5jZWRGb3JtQ29udHJvbC52YWxpZD9udWxsOnthZHZhbmNlZEZvcm1Db250cm9sOnt2YWxpZDohMX19fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpQbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+UG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48dGItanNvbi1vYmplY3QtZWRpdFxuICBmaWxsSGVpZ2h0PSJ0cnVlIlxuICBjbGFzcz0idGItZmxleCBjb25maWctY29udGFpbmVyIlxuICBmeExheW91dD0iY29sdW1uIlxuICBqc29uUmVxdWlyZWRcbiAgbGFiZWw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX0iXG4gIFtmb3JtQ29udHJvbF09ImFkdmFuY2VkRm9ybUNvbnRyb2wiXG4vPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5jb25maWctY29udGFpbmVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KTtwYWRkaW5nOjhweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUFkdmFuY2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudCIsUG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5QbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjx0Yi1qc29uLW9iamVjdC1lZGl0XG4gIGZpbGxIZWlnaHQ9InRydWUiXG4gIGNsYXNzPSJ0Yi1mbGV4IGNvbmZpZy1jb250YWluZXIiXG4gIGZ4TGF5b3V0PSJjb2x1bW4iXG4gIGpzb25SZXF1aXJlZFxuICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgW2Zvcm1Db250cm9sXT0iYWR2YW5jZWRGb3JtQ29udHJvbCJcbi8+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmNvbmZpZy1jb250YWluZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpO3BhZGRpbmc6OHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIEdve2NvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLmRldmljZVNlcnZpY2U9bix0aGlzLmNkPWEsdGhpcy5Db25maWd1cmF0aW9uTW9kZXM9b24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5nYXRld2F5Q29uZmlnQXR0cmlidXRlS2V5cz1bImdlbmVyYWxfY29uZmlndXJhdGlvbiIsImdycGNfY29uZmlndXJhdGlvbiIsImxvZ3NfY29uZmlndXJhdGlvbiIsInN0b3JhZ2VfY29uZmlndXJhdGlvbiIsIlJlbW90ZUxvZ2dpbmdMZXZlbCIsIm1vZGUiXSx0aGlzLmdhdGV3YXlDb25maWdHcm91cD10aGlzLmZiLmdyb3VwKHtiYXNpY0NvbmZpZzpbXSxhZHZhbmNlZENvbmZpZzpbXSxtb2RlOltvbi5CQVNJQ119KSx0aGlzLm9ic2VydmVBbGlnbkNvbmZpZ3MoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmZldGNoQ29uZmlnQXR0cmlidXRlKHRoaXMuZGV2aWNlKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1zYXZlQ29uZmlnKCl7Y29uc3R7bW9kZTplLGFkdmFuY2VkQ29uZmlnOnR9PXBlKHRoaXMucmVtb3ZlRW1wdHkodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAudmFsdWUpKSxuPXttb2RlOmUsLi4udH07bi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPU9iamVjdC52YWx1ZXMobi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPz9bXSk7Y29uc3QgYT10aGlzLmdlbmVyYXRlQXR0cmlidXRlcyhuKTt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsYSkucGlwZShVZSgoZT0+dGhpcy51cGRhdGVDcmVkZW50aWFscyhuLnRoaW5nc2JvYXJkLnNlY3VyaXR5KSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5kaWFsb2dSZWY/dGhpcy5kaWFsb2dSZWYuY2xvc2UoKToodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSl9KSl9b2JzZXJ2ZUFsaWduQ29uZmlncygpe3RoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5CQVNJQ3x8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYWR2YW5jZWRDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImJhc2ljQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5BRFZBTkNFRHx8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWdlbmVyYXRlQXR0cmlidXRlcyhlKXtjb25zdCB0PVtdLG49KGUsbik9Pnt0LnB1c2goe2tleTplLHZhbHVlOm59KX0sYT0oZSx0KT0+e3Q9ey4uLnQsdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LG4oZSx0KX07cmV0dXJuIG4oIlJlbW90ZUxvZ2dpbmdMZXZlbCIsZS5sb2dzPy5yZW1vdGU/LmVuYWJsZWQ/ZS5sb2dzLnJlbW90ZS5sb2dMZXZlbDpNdC5OT05FKSxkZWxldGUgZS5jb25uZWN0b3JzLG4oImxvZ3NfY29uZmlndXJhdGlvbiIsdGhpcy5nZW5lcmF0ZUxvZ3NGaWxlKGUubG9ncykpLGEoImdycGNfY29uZmlndXJhdGlvbiIsZS5ncnBjKSxhKCJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iLGUuc3RvcmFnZSksYSgiZ2VuZXJhbF9jb25maWd1cmF0aW9uIixlLnRoaW5nc2JvYXJkKSxuKCJtb2RlIixlLm1vZGUpLHR9dXBkYXRlQ3JlZGVudGlhbHMoZSl7bGV0IHQ9e307c3dpdGNoKGUudHlwZSl7Y2FzZSBWdC5VU0VSTkFNRV9QQVNTV09SRDp0aGlzLnNob3VsZFVwZGF0ZUNyZWRlbnRpYWxzKGUpJiYodD10aGlzLmdlbmVyYXRlTXF0dENyZWRlbnRpYWxzKGUpKTticmVhaztjYXNlIFZ0LkFDQ0VTU19UT0tFTjpjYXNlIFZ0LlRMU19BQ0NFU1NfVE9LRU46dGhpcy5zaG91bGRVcGRhdGVBY2Nlc3NUb2tlbihlKSYmKHQ9e2NyZWRlbnRpYWxzVHlwZTpVLkFDQ0VTU19UT0tFTixjcmVkZW50aWFsc0lkOmUuYWNjZXNzVG9rZW59KX1yZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoP3RoaXMuZGV2aWNlU2VydmljZS5zYXZlRGV2aWNlQ3JlZGVudGlhbHMoey4uLnRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLC4uLnR9KTpJZShudWxsKX1zaG91bGRVcGRhdGVDcmVkZW50aWFscyhlKXtpZih0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLk1RVFRfQkFTSUMpcmV0dXJuITA7Y29uc3QgdD1KU09OLnBhcnNlKHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLmNyZWRlbnRpYWxzVmFsdWUpO3JldHVybiEodC5jbGllbnRJZD09PWUuY2xpZW50SWQmJnQudXNlck5hbWU9PT1lLnVzZXJuYW1lJiZ0LnBhc3N3b3JkPT09ZS5wYXNzd29yZCl9Z2VuZXJhdGVNcXR0Q3JlZGVudGlhbHMoZSl7Y29uc3R7Y2xpZW50SWQ6dCx1c2VybmFtZTpuLHBhc3N3b3JkOmF9PWUsbz17Li4udCYme2NsaWVudElkOnR9LC4uLm4mJnt1c2VyTmFtZTpufSwuLi5hJiZ7cGFzc3dvcmQ6YX19O3JldHVybntjcmVkZW50aWFsc1R5cGU6VS5NUVRUX0JBU0lDLGNyZWRlbnRpYWxzVmFsdWU6SlNPTi5zdHJpbmdpZnkobyl9fXNob3VsZFVwZGF0ZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLkFDQ0VTU19UT0tFTnx8dGhpcy5pbml0aWFsQ3JlZGVudGlhbHMuY3JlZGVudGlhbHNJZCE9PWUuYWNjZXNzVG9rZW59Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYmJnRoaXMuZGlhbG9nUmVmLmNsb3NlKCl9cmVtb3ZlRW1wdHkoZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKChbZSx0XSk9Pm51bGwhPXQpKS5tYXAoKChbZSx0XSk9PltlLHQ9PT1PYmplY3QodCk/dGhpcy5yZW1vdmVFbXB0eSh0KTp0XSkpKX1nZW5lcmF0ZUxvZ3NGaWxlKGUpe2NvbnN0IHQ9e3ZlcnNpb246MSxkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM6ITEsZm9ybWF0dGVyczp7TG9nRm9ybWF0dGVyOntjbGFzczoibG9nZ2luZy5Gb3JtYXR0ZXIiLGZvcm1hdDplLmxvZ0Zvcm1hdCxkYXRlZm10OmUuZGF0ZUZvcm1hdH19LGhhbmRsZXJzOntjb25zb2xlSGFuZGxlcjp7Y2xhc3M6ImxvZ2dpbmcuU3RyZWFtSGFuZGxlciIsZm9ybWF0dGVyOiJMb2dGb3JtYXR0ZXIiLGxldmVsOjAsc3RyZWFtOiJleHQ6Ly9zeXMuc3Rkb3V0In0sZGF0YWJhc2VIYW5kbGVyOntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6Ii4vbG9ncy9kYXRhYmFzZS5sb2ciLGJhY2t1cENvdW50OjEsZW5jb2Rpbmc6InV0Zi04In19LGxvZ2dlcnM6e2RhdGFiYXNlOntoYW5kbGVyczpbImRhdGFiYXNlSGFuZGxlciIsImNvbnNvbGVIYW5kbGVyIl0sbGV2ZWw6IkRFQlVHIixwcm9wYWdhdGU6ITF9fSxyb290OntsZXZlbDoiRVJST1IiLGhhbmRsZXJzOlsiY29uc29sZUhhbmRsZXIiXX0sdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9O3JldHVybiB0aGlzLmFkZExvY2FsTG9nZ2Vycyh0LGUubG9jYWwpLHR9YWRkTG9jYWxMb2dnZXJzKGUsdCl7Zm9yKGNvbnN0IG4gb2YgT2JqZWN0LmtleXModCkpZS5oYW5kbGVyc1tuKyJIYW5kbGVyIl09dGhpcy5jcmVhdGVIYW5kbGVyT2JqKHRbbl0sbiksZS5sb2dnZXJzW25dPXRoaXMuY3JlYXRlTG9nZ2VyT2JqKHRbbl0sbil9Y3JlYXRlSGFuZGxlck9iaihlLHQpe3JldHVybntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6YCR7ZS5maWxlUGF0aH0vJHt0fS5sb2dgLGJhY2t1cENvdW50OmUuYmFja3VwQ291bnQsaW50ZXJ2YWw6ZS5zYXZpbmdUaW1lLHdoZW46ZS5zYXZpbmdQZXJpb2QsZW5jb2Rpbmc6InV0Zi04In19Y3JlYXRlTG9nZ2VyT2JqKGUsdCl7cmV0dXJue2hhbmRsZXJzOltgJHt0fUhhbmRsZXJgLCJjb25zb2xlSGFuZGxlciJdLGxldmVsOmUubG9nTGV2ZWwscHJvcGFnYXRlOiExfX1mZXRjaENvbmZpZ0F0dHJpYnV0ZShlKXtlLmlkIT09ayYmdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLkNMSUVOVF9TQ09QRSkucGlwZShfZSgodD0+dC5sZW5ndGg/SWUodCk6dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLlNIQVJFRF9TQ09QRSx0aGlzLmdhdGV3YXlDb25maWdBdHRyaWJ1dGVLZXlzKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbmZpZ3MoZSksdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9dXBkYXRlQ29uZmlncyhlKXtjb25zdCB0PXt0aGluZ3Nib2FyZDp7fSxncnBjOnt9LGxvZ3M6e30sc3RvcmFnZTp7fSxtb2RlOm9uLkJBU0lDfTtlLmZvckVhY2goKGU9Pntzd2l0Y2goZS5rZXkpe2Nhc2UiZ2VuZXJhbF9jb25maWd1cmF0aW9uIjp0LnRoaW5nc2JvYXJkPWUudmFsdWUsdGhpcy51cGRhdGVGb3JtQ29udHJvbHMoZS52YWx1ZSk7YnJlYWs7Y2FzZSJncnBjX2NvbmZpZ3VyYXRpb24iOnQuZ3JwYz1lLnZhbHVlO2JyZWFrO2Nhc2UibG9nc19jb25maWd1cmF0aW9uIjp0LmxvZ3M9dGhpcy5sb2dzVG9PYmooZS52YWx1ZSk7YnJlYWs7Y2FzZSJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iOnQuc3RvcmFnZT1lLnZhbHVlO2JyZWFrO2Nhc2UibW9kZSI6dC5tb2RlPWUudmFsdWU7YnJlYWs7Y2FzZSJSZW1vdGVMb2dnaW5nTGV2ZWwiOnQubG9ncz17Li4udC5sb2dzLHJlbW90ZTp7ZW5hYmxlZDplLnZhbHVlIT09TXQuTk9ORSxsb2dMZXZlbDplLnZhbHVlfX19fSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS5zZXRWYWx1ZSh0LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIikuc2V0VmFsdWUodCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUNvbnRyb2xzKGUpe2NvbnN0e3R5cGU6dCxhY2Nlc3NUb2tlbjpuLC4uLmF9PWUuc2VjdXJpdHk/P3t9O3RoaXMuaW5pdGlhbENyZWRlbnRpYWxzPXtkZXZpY2VJZDp0aGlzLmRldmljZSxjcmVkZW50aWFsc1R5cGU6dCxjcmVkZW50aWFsc0lkOm4sY3JlZGVudGlhbHNWYWx1ZTpKU09OLnN0cmluZ2lmeShhKX19bG9nc1RvT2JqKGUpe2NvbnN0e2Zvcm1hdDp0LGRhdGVmbXQ6bn09ZS5mb3JtYXR0ZXJzLkxvZ0Zvcm1hdHRlcjtyZXR1cm57bG9jYWw6T2JqZWN0LmtleXMoUHQpLnJlZHVjZSgoKHQsbik9Pntjb25zdCBhPWUuaGFuZGxlcnNbYCR7bn1IYW5kbGVyYF18fHt9LG89ZS5sb2dnZXJzW25dfHx7fTtyZXR1cm4gdFtuXT17bG9nTGV2ZWw6by5sZXZlbHx8TXQuSU5GTyxmaWxlUGF0aDphLmZpbGVuYW1lPy5zcGxpdChgLyR7bn1gKVswXXx8Ii4vbG9ncyIsYmFja3VwQ291bnQ6YS5iYWNrdXBDb3VudHx8NyxzYXZpbmdUaW1lOmEuaW50ZXJ2YWx8fDMsc2F2aW5nUGVyaW9kOmEud2hlbnx8RHQuZGF5c30sdH0pLHt9KSxsb2dGb3JtYXQ6dCxkYXRlRm9ybWF0Om59fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6R28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6R28sc2VsZWN0b3I6InRiLWdhdGV3YXktY29uZmlndXJhdGlvbiIsaW5wdXRzOntkZXZpY2U6ImRldmljZSIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsaW5wdXRzOlsiZGV2aWNlIiwiZGlhbG9nTW9kZSJdLG91dHB1dHM6WyJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6UG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUNvbmZpZ3VyYXRpb25Db21wb25lbnQiLEdvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkdvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbmZpZ3VyYXRpb24iLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTt2YXIgT289e2dhdGV3YXk6e2FkZHJlc3M6IkFkZHJlc3MiLCJhZGRyZXNzLXJlcXVpcmVkIjoiQWRkcmVzcyByZXF1aXJlZCIsImFkZC1lbnRyeSI6IkFkZCBjb25maWd1cmF0aW9uIiwiYWRkLWF0dHJpYnV0ZSI6IkFkZCBhdHRyaWJ1dGUiLCJhZGQtYXR0cmlidXRlLXVwZGF0ZSI6IkFkZCBhdHRyaWJ1dGUgdXBkYXRlIiwiYWRkLWtleSI6IkFkZCBrZXkiLCJhZGQtdGltZXNlcmllcyI6IkFkZCB0aW1lIHNlcmllcyIsImFkZC1tYXBwaW5nIjoiQWRkIG1hcHBpbmciLCJhZGQtc2xhdmUiOiJBZGQgU2xhdmUiLGFyZ3VtZW50czoiQXJndW1lbnRzIiwiYWRkLXJwYy1tZXRob2QiOiJBZGQgbWV0aG9kIiwiYWRkLXJwYy1yZXF1ZXN0IjoiQWRkIHJlcXVlc3QiLCJhZGQtdmFsdWUiOiJBZGQgYXJndW1lbnQiLGJhdWRyYXRlOiJCYXVkcmF0ZSIsYnl0ZXNpemU6IkJ5dGVzaXplIiwiZGVsZXRlLXZhbHVlIjoiRGVsZXRlIHZhbHVlIiwiZGVsZXRlLXJwYy1tZXRob2QiOiJEZWxldGUgbWV0aG9kIiwiZGVsZXRlLXJwYy1yZXF1ZXN0IjoiRGVsZXRlIHJlcXVlc3QiLCJkZWxldGUtYXR0cmlidXRlLXVwZGF0ZSI6IkRlbGV0ZSBhdHRyaWJ1dGUgdXBkYXRlIixhZHZhbmNlZDoiQWR2YW5jZWQiLCJhZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzIjoiQWR2YW5jZWQgY29ubmVjdGlvbiBzZXR0aW5ncyIsYXR0cmlidXRlczoiQXR0cmlidXRlcyIsImF0dHJpYnV0ZS11cGRhdGVzIjoiQXR0cmlidXRlIHVwZGF0ZXMiLCJhdHRyaWJ1dGUtZmlsdGVyIjoiQXR0cmlidXRlIGZpbHRlciIsImF0dHJpYnV0ZS1maWx0ZXItaGludCI6IkZpbHRlciBmb3IgaW5jb21pbmcgYXR0cmlidXRlIG5hbWUgZnJvbSBwbGF0Zm9ybSwgc3VwcG9ydHMgcmVndWxhciBleHByZXNzaW9uLiIsImF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWQiOiJBdHRyaWJ1dGUgZmlsdGVyIHJlcXVpcmVkLiIsImF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb24iOiJBdHRyaWJ1dGUgbmFtZSBleHByZXNzaW9uIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGV4cHJlc3Npb24gcmVxdWlyZWQuIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1oaW50IjoiSGludCBmb3IgQXR0cmlidXRlIG5hbWUgZXhwcmVzc2lvbiIsYmFzaWM6IkJhc2ljIiwiYnl0ZS1vcmRlciI6IkJ5dGUgb3JkZXIiLCJ3b3JkLW9yZGVyIjoiV29yZCBvcmRlciIsYnJva2VyOntjb25uZWN0aW9uOiJDb25uZWN0aW9uIHRvIGJyb2tlciIsbmFtZToiQnJva2VyIG5hbWUiLCJuYW1lLXJlcXVpcmVkIjoiQnJva2VyIG5hbWUgcmVxdWlyZWQuIiwic2VjdXJpdHktdHlwZXMiOnthbm9ueW1vdXM6IkFub255bW91cyIsYmFzaWM6IkJhc2ljIixjZXJ0aWZpY2F0ZXM6IkNlcnRpZmljYXRlcyJ9fSwiQ0EtY2VydGlmaWNhdGUtcGF0aCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsInBhdGgtdG8tQ0EtY2VydC1yZXF1aXJlZCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjaGFuZ2UtY29ubmVjdG9yLXRpdGxlIjoiQ29uZmlybSBjb25uZWN0b3IgY2hhbmdlIiwiY2hhbmdlLWNvbm5lY3Rvci10ZXh0IjoiU3dpdGNoaW5nIGNvbm5lY3RvcnMgd2lsbCBkaXNjYXJkIGFueSB1bnNhdmVkIGNoYW5nZXMuIENvbnRpbnVlPyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IkNoZWNraW5nIGRldmljZSBhY3Rpdml0eSIsY29tbWFuZDoiRG9ja2VyIGNvbW1hbmRzIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlciBjb21tYW5kIGhhcyBiZWVuIGNvcGllZCB0byBjbGlwYm9hcmQiLGNvbmZpZ3VyYXRpb246IkNvbmZpZ3VyYXRpb24iLCJhZGQtY29ubmVjdG9yIjoiQWRkIGNvbm5lY3RvciIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKHMpIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJDb25uZWN0IGF0dGVtcHQgdGltZSAobXMpIiwiY29ubmVjdC1hdHRlbXB0LWNvdW50IjoiQ29ubmVjdCBhdHRlbXB0IGNvdW50IiwiY29weS11c2VybmFtZSI6IkNvcHkgdXNlcm5hbWUiLCJjb3B5LXBhc3N3b3JkIjoiQ29weSBwYXNzd29yZCIsImNvcHktY2xpZW50LWlkIjoiQ29weSBjbGllbnQgSUQiLCJjb25uZWN0b3ItY3JlYXRlZCI6IkNvbm5lY3RvciBjcmVhdGVkIiwiY29ubmVjdG9yLXVwZGF0ZWQiOiJDb25uZWN0b3IgdXBkYXRlZCIsInJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGUiOiJTYXZlIFRlbXBsYXRlIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXNwb25zZSIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiVXNlIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gdG8gcnVuIElvVCBHYXRld2F5IGluIERvY2tlciBjb21wb3NlIHdpdGggY3JlZGVudGlhbHMgZm9yIHNlbGVjdGVkIGRldmljZSIsImluc3RhbGwtZG9ja2VyLWNvbXBvc2UiOiJVc2UgdGhlIGluc3RydWN0aW9ucyB0byBkb3dubG9hZCwgaW5zdGFsbCBhbmQgc2V0dXAgZG9ja2VyIGNvbXBvc2UiLCJkZXZpY2UtaW5mby1zZXR0aW5ncyI6IkRldmljZSBpbmZvIHNldHRpbmdzIiwiZGV2aWNlLWluZm8iOnsiZW50aXR5LWZpZWxkIjoiRW50aXR5IGZpZWxkIixzb3VyY2U6IlNvdXJjZSIsZXhwcmVzc2lvbjoiVmFsdWUgLyBFeHByZXNzaW9uIiwiZXhwcmVzc2lvbi1oaW50IjoiU2hvdyBoZWxwIixuYW1lOiJOYW1lIiwicHJvZmlsZS1uYW1lIjoiUHJvZmlsZSBuYW1lIiwiZGV2aWNlLW5hbWUtZXhwcmVzc2lvbiI6IkRldmljZSBuYW1lIGV4cHJlc3Npb24iLCJkZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJkZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIHByb2ZpbGUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4ifSwiZGV2aWNlLW5hbWUtZmlsdGVyIjoiRGV2aWNlIG5hbWUgZmlsdGVyIiwiZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZmlsdGVyIGluY29taW5nIGRhdGEgYnkgZGV2aWNlIG5hbWUuIiwiZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZmlsdGVyIGlzIHJlcXVpcmVkLiIsZGV0YWlsczoiRGV0YWlscyIsImRlbGV0ZS1tYXBwaW5nLXRpdGxlIjoiRGVsZXRlIG1hcHBpbmc/IiwiZGVsZXRlLXNsYXZlLXRpdGxlIjoiRGVsZXRlIHNsYXZlPyIsZGl2aWRlcjoiRGl2aWRlciIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6IkRvd25sb2FkIGNvbmZpZ3VyYXRpb24gZmlsZSIsImRvd25sb2FkLWRvY2tlci1jb21wb3NlIjoiRG93bmxvYWQgZG9ja2VyLWNvbXBvc2UueW1sIGZvciB5b3VyIGdhdGV3YXkiLCJlbmFibGUtcmVtb3RlLWxvZ2dpbmciOiJFbmFibGUgcmVtb3RlIGxvZ2dpbmciLCJlbGxpcHNpcy1jaGlwcy10ZXh0IjoiKyB7e2NvdW50fX0gbW9yZSIsImxhdW5jaC1nYXRld2F5IjoiTGF1bmNoIGdhdGV3YXkiLCJsYXVuY2gtY29tbWFuZCI6IkxhdW5jaCBjb21tYW5kIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoiU3RhcnQgdGhlIGdhdGV3YXkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSB0ZXJtaW5hbCBmcm9tIGZvbGRlciB3aXRoIGRvY2tlci1jb21wb3NlLnltbCBmaWxlIiwibG9ncy1jb25maWd1cmF0aW9uIjoiTG9ncyBjb25maWd1cmF0aW9uIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXRlIGEgbmV3IGdhdGV3YXkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgZ2F0ZXdheSB3aXRoIG5hbWU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkNyZWF0ZWQgdGltZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXIiOiJDb25maWd1cmF0aW9ucyB3aWxsIGJlIGRlbGV0ZWQiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6IlR1cm5pbmcgb2ZmIFJlbW90ZSBDb25maWd1cmF0aW9uIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgaXMgcGh5c2ljYWwgYWNjZXNzIHRvIHRoZSBHYXRld2F5LiBBbGwgcHJldmlvdXMgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkLjxicj48YnI+IFxuVG8gdHVybiBvZmYgY29uZmlndXJhdGlvbiwgZW50ZXIgZ2F0ZXdheSBuYW1lIGJlbG93IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0IjoiR2F0ZXdheSBuYW1lIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIG1hbmRhdG9yeSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtIjoiVHVybiBPZmYiLCJjb25uZWN0b3ItZHVwbGljYXRlLW5hbWUiOiJDb25uZWN0b3Igd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMuIiwiY29ubmVjdG9yLXNpZGUiOiJDb25uZWN0b3Igc2lkZSIsInBheWxvYWQtdHlwZSI6IlBheWxvYWQgdHlwZSIsInBsYXRmb3JtLXNpZGUiOiJQbGF0Zm9ybSBzaWRlIixKU09OOiJKU09OIiwiSlNPTi1oaW50IjoiQ29udmVydGVyIGZvciB0aGlzIHBheWxvYWQgdHlwZSBwcm9jZXNzZXMgTVFUVCBtZXNzYWdlcyBpbiBKU09OIGZvcm1hdC4gSXQgdXNlcyBKU09OIFBhdGggZXhwcmVzc2lvbnMgdG8gZXh0cmFjdCB2aXRhbCBkZXRhaWxzIHN1Y2ggYXMgZGV2aWNlIG5hbWVzLCBkZXZpY2UgcHJvZmlsZSBuYW1lcywgYXR0cmlidXRlcywgYW5kIHRpbWUgc2VyaWVzIGZyb20gdGhlIG1lc3NhZ2UuIEFuZCByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGdldCBkZXZpY2UgZGV0YWlscyBmcm9tIHRvcGljcy4iLGJ5dGVzOiJCeXRlcyIsImJ5dGVzLWhpbnQiOiJDb252ZXJ0ZXIgZm9yIHRoaXMgcGF5bG9hZCB0eXBlIGRlc2lnbmVkIGZvciBiaW5hcnkgTVFUVCBwYXlsb2FkcywgdGhpcyBjb252ZXJ0ZXIgZGlyZWN0bHkgaW50ZXJwcmV0cyBiaW5hcnkgZGF0YSB0byByZXRyaWV2ZSBkZXZpY2UgbmFtZXMgYW5kIGRldmljZSBwcm9maWxlIG5hbWVzLCBhbG9uZyB3aXRoIGF0dHJpYnV0ZXMgYW5kIHRpbWUgc2VyaWVzLCB1c2luZyBzcGVjaWZpYyBieXRlIHBvc2l0aW9ucyBmb3IgZGF0YSBleHRyYWN0aW9uLiIsY3VzdG9tOiJDdXN0b20iLCJjdXN0b20taGludCI6IlRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gdXNlIGEgY3VzdG9tIGNvbnZlcnRlciBmb3Igc3BlY2lmaWMgZGF0YSB0YXNrcy4gWW91IG5lZWQgdG8gYWRkIHlvdXIgY3VzdG9tIGNvbnZlcnRlciB0byB0aGUgZXh0ZW5zaW9uIGZvbGRlciBhbmQgZW50ZXIgaXRzIGNsYXNzIG5hbWUgaW4gdGhlIFVJIHNldHRpbmdzLiBBbnkga2V5cyB5b3UgcHJvdmlkZSB3aWxsIGJlIHNlbnQgYXMgY29uZmlndXJhdGlvbiB0byB5b3VyIGN1c3RvbSBjb252ZXJ0ZXIuIiwiY2xpZW50LWNlcnQtcGF0aCI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIGZpbGUiLCJwYXRoLXRvLWNsaWVudC1jZXJ0LXJlcXVpcmVkIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjbGllbnQtaWQiOiJDbGllbnQgSUQiLCJkYXRhLWNvbnZlcnNpb24iOiJEYXRhIGNvbnZlcnNpb24iLCJkYXRhLW1hcHBpbmciOiJEYXRhIG1hcHBpbmciLCJkYXRhLW1hcHBpbmctaGludCI6IkRhdGEgbWFwcGluZyBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSB0byBwYXJzZSBhbmQgY29udmVydCB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIGEgTVFUVCBjbGllbnQgaW4gaW5jb21pbmcgbWVzc2FnZXMgaW50byBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBkYXRhIGtleXMuIiwib3BjdWEtZGF0YS1tYXBwaW5nLWhpbnQiOiJEYXRhIG1hcHBpbmcgcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgdG8gcGFyc2UgYW5kIGNvbnZlcnQgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBhIE9QQ1VBIHNlcnZlciBpbnRvIHNwZWNpZmljIGRhdGEga2V5cy4iLGRlbGV0ZToiRGVsZXRlIGNvbmZpZ3VyYXRpb24iLCJkZWxldGUtYXR0cmlidXRlIjoiRGVsZXRlIGF0dHJpYnV0ZSIsImRlbGV0ZS1rZXkiOiJEZWxldGUga2V5IiwiZGVsZXRlLXRpbWVzZXJpZXMiOiJEZWxldGUgdGltZSBzZXJpZXMiLGRlZmF1bHQ6IkRlZmF1bHQiLCJkZXZpY2Utbm9kZSI6IkRldmljZSBub2RlIiwiZGV2aWNlLW5vZGUtcmVxdWlyZWQiOiJEZXZpY2Ugbm9kZSByZXF1aXJlZC4iLCJkZXZpY2Utbm9kZS1oaW50IjoiUGF0aCBvciBpZGVudGlmaWVyIGZvciBkZXZpY2Ugbm9kZSBvbiBPUEMgVUEgc2VydmVyLiBSZWxhdGl2ZSBwYXRocyBmcm9tIGl0IGZvciBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBjYW4gYmUgdXNlZC4iLCJkZXZpY2UtbmFtZSI6IkRldmljZSBuYW1lIiwiZGV2aWNlLXByb2ZpbGUtbGFiZWwiOiJEZXZpY2UgcHJvZmlsZSIsImRldmljZS1uYW1lLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgcmVxdWlyZWQiLCJkZXZpY2UtcHJvZmlsZS1yZXF1aXJlZCI6IkRldmljZSBwcm9maWxlIHJlcXVpcmVkIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGVuYWJsZToiRW5hYmxlIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IkVuYWJsZSBzdWJzY3JpcHRpb24iLGV4dGVuc2lvbjoiRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uLWhpbnQiOiJQdXQgeW91ciBjb252ZXJ0ZXIgY2xhc3NuYW1lIGluIHRoZSBmaWVsZC4gQ3VzdG9tIGNvbnZlcnRlciB3aXRoIHN1Y2ggY2xhc3Mgc2hvdWxkIGJlIGluIGV4dGVuc2lvbi9tcXR0IGZvbGRlci4iLCJleHRlbnNpb24tcmVxdWlyZWQiOiJFeHRlbnNpb24gaXMgcmVxdWlyZWQuIiwiZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24iOiJFeHRlbnNpb24gY29uZmlndXJhdGlvbiIsImV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnQiOiJDb25maWd1cmF0aW9uIGZvciBjb252ZXJ0b3IiLCJmaWxsLWNvbm5lY3Rvci1kZWZhdWx0cyI6IkZpbGwgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHQgdmFsdWVzIiwiZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludCI6IlRoaXMgcHJvcGVydHkgYWxsb3dzIHRvIGZpbGwgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0IHZhbHVlcyBvbiBpdCdzIGNyZWF0aW9uLiIsImZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MiOiJJbnB1dCByZXF1ZXN0IHBhcnNpbmciLCJmcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnQiOiJUaGVzZSBmaWVsZHMgc3VwcG9ydCBKU09OUGF0aCBleHByZXNzaW9ucyB0byBleHRyYWN0IGEgbmFtZSBmcm9tIGluY29taW5nIG1lc3NhZ2UuIiwiZnVuY3Rpb24tY29kZSI6IkZ1bmN0aW9uIGNvZGUiLCJmdW5jdGlvbi1jb2RlcyI6eyJyZWFkLWNvaWxzIjoiMDEgLSBSZWFkIENvaWxzIiwicmVhZC1kaXNjcmV0ZS1pbnB1dHMiOiIwMiAtIFJlYWQgRGlzY3JldGUgSW5wdXRzIiwicmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyI6IjAzIC0gUmVhZCBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyIsInJlYWQtaW5wdXQtcmVnaXN0ZXJzIjoiMDQgLSBSZWFkIElucHV0IFJlZ2lzdGVycyIsIndyaXRlLXNpbmdsZS1jb2lsIjoiMDUgLSBXcml0ZSBTaW5nbGUgQ29pbCIsIndyaXRlLXNpbmdsZS1ob2xkaW5nLXJlZ2lzdGVyIjoiMDYgLSBXcml0ZSBTaW5nbGUgSG9sZGluZyBSZWdpc3RlciIsIndyaXRlLW11bHRpcGxlLWNvaWxzIjoiMTUgLSBXcml0ZSBNdWx0aXBsZSBDb2lscyIsIndyaXRlLW11bHRpcGxlLWhvbGRpbmctcmVnaXN0ZXJzIjoiMTYgLSBXcml0ZSBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyJ9LCJ0by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MiOiJPdXRwdXQgcmVxdWVzdCBwcm9jZXNzaW5nIiwidG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzLWhpbnQiOiJGb3IgdGhlc2UgZmllbGRzIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFuZCB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhY3R1YWwgdmFsdWVzOiAke2RldmljZU5hbWV9LCAke2F0dHJpYnV0ZUtleX0sICR7YXR0cmlidXRlVmFsdWV9IixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImdlbmVyYXRlLWNsaWVudC1pZCI6IkdlbmVyYXRlIENsaWVudCBJRCIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsaW5mbzoiSW5mbyIsaWRlbnRpdHk6IklkZW50aXR5IiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJ1bml0LWlkIjoiVW5pdCBJRCIsaG9zdDoiSG9zdCIsImhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsaG9sZGluZ19yZWdpc3RlcnM6IkhvbGRpbmcgcmVnaXN0ZXJzIixjb2lsc19pbml0aWFsaXplcjoiQ29pbHMgaW5pdGlhbGl6ZXIiLGlucHV0X3JlZ2lzdGVyczoiSW5wdXQgcmVnaXN0ZXJzIixkaXNjcmV0ZV9pbnB1dHM6IkRpc2NyZXRlIGlucHV0cyIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIkpTT05QYXRoLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIGNvbnN0YW50cyBhbmQgSlNPTlBhdGggZXhwcmVzc2lvbnMuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWF4LW51bWJlci1vZi13b3JrZXJzIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIiwibWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnQiOiJNYXhpbWFsIG51bWJlciBvZiB3b3JrZXJzIHRocmVhZHMgZm9yIGNvbnZlcnRlcnMgXG4oVGhlIGFtb3VudCBvZiB3b3JrZXJzIGNoYW5nZXMgZHluYW1pY2FsbHksIGRlcGVuZGluZyBvbiBsb2FkKSBcblJlY29tbWVuZGVkIGFtb3VudCA1MC0xNTAuIiwibWF4LW51bWJlci1vZi13b3JrZXJzLXJlcXVpcmVkIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIGlzIHJlcXVpcmVkLiIsIm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyIjoiTWF4IG1lc3NhZ2VzIHF1ZXVlIHBlciB3b3JrZXIiLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1oaW50IjoiTWF4aW1hbCBtZXNzYWdlcyBjb3VudCB0aGF0IHdpbGwgYmUgaW4gdGhlIHF1ZXVlIFxuZm9yIGVhY2ggY29udmVydGVyIHdvcmtlci4iLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZCI6Ik1heCBtZXNzYWdlcyBxdWV1ZSBwZXIgd29ya2VyIGlzIHJlcXVpcmVkLiIsbWV0aG9kOiJNZXRob2QiLCJtZXRob2QtbmFtZSI6Ik1ldGhvZCBuYW1lIiwibWV0aG9kLXJlcXVpcmVkIjoiTWV0aG9kIG5hbWUgaXMgcmVxdWlyZWQuIiwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwIiwibWluLXBhY2stc2VuZC1kZWxheS1wYXR0ZXJuIjoiTWluIHBhY2sgc2VuZCBkZWxheSBpcyBub3QgdmFsaWQiLG11bHRpcGxpZXI6Ik11bHRpcGxpZXIiLG1vZGU6Ik1vZGUiLCJtb2RlbC1uYW1lIjoiTW9kZWwgbmFtZSIsbW9kaWZpZXI6Ik1vZGlmaWVyIiwibW9kaWZpZXItaW52YWxpZCI6Ik1vZGlmaWVyIGlzIG5vdCB2YWxpZCIsIm1xdHQtdmVyc2lvbiI6Ik1RVFQgdmVyc2lvbiIsbmFtZToiTmFtZSIsIm5hbWUtcmVxdWlyZWQiOiJOYW1lIGlzIHJlcXVpcmVkLiIsIm5vLWF0dHJpYnV0ZXMiOiJObyBhdHRyaWJ1dGVzIiwibm8tYXR0cmlidXRlLXVwZGF0ZXMiOiJObyBhdHRyaWJ1dGUgdXBkYXRlcyIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJuby10aW1lc2VyaWVzIjoiTm8gdGltZSBzZXJpZXMiLCJuby1rZXlzIjoiTm8ga2V5cyIsIm5vLXZhbHVlIjoiTm8gYXJndW1lbnRzIiwibm8tcnBjLW1ldGhvZHMiOiJObyBSUEMgbWV0aG9kcyIsIm5vLXJwYy1yZXF1ZXN0cyI6Ik5vIFJQQyByZXF1ZXN0cyIsInBhdGgtaGludCI6IlRoZSBwYXRoIGlzIGxvY2FsIHRvIHRoZSBnYXRld2F5IGZpbGUgc3lzdGVtIiwicGF0aC1sb2dzIjoiUGF0aCB0byBsb2cgZmlsZXMiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYXRoIGlzIHJlcXVpcmVkLiIscGFzc3dvcmQ6IlBhc3N3b3JkIiwicGFzc3dvcmQtcmVxdWlyZWQiOiJQYXNzd29yZCBpcyByZXF1aXJlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IktlZXAgYWxpdmUgcGVybWl0IHdpdGhvdXQgY2FsbHMiLCJwb2xsLXBlcmlvZCI6IlBvbGwgcGVyaW9kIChtcykiLCJwb2xsLXBlcmlvZC1lcnJvciI6IlBvbGwgcGVyaW9kIHNob3VsZCBiZSBhdCBsZWFzdCB7e21pbn19IChtcykuIixwb3J0OiJQb3J0IiwicG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIiwicG9ydC1saW1pdHMtZXJyb3IiOiJQb3J0IHNob3VsZCBiZSBudW1iZXIgZnJvbSB7e21pbn19IHRvIHt7bWF4fX0uIiwicHJpdmF0ZS1rZXktcGF0aCI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgZmlsZSIsInBhdGgtdG8tcHJpdmF0ZS1rZXktcmVxdWlyZWQiOiJQYXRoIHRvIHByaXZhdGUga2V5IGZpbGUgaXMgcmVxdWlyZWQuIixwYXJpdHk6IlBhcml0eSIsInByb2R1Y3QtY29kZSI6IlByb2R1Y3QgY29kZSIsInByb2R1Y3QtbmFtZSI6IlByb2R1Y3QgbmFtZSIscmF3OiJSYXciLHJldGFpbjoiUmV0YWluIiwicmV0YWluLWhpbnQiOiJUaGlzIGZsYWcgdGVsbHMgdGhlIGJyb2tlciB0byBzdG9yZSB0aGUgbWVzc2FnZSBmb3IgYSB0b3BpY1xuYW5kIGVuc3VyZXMgYW55IG5ldyBjbGllbnQgc3Vic2NyaWJpbmcgdG8gdGhhdCB0b3BpY1xud2lsbCByZWNlaXZlIHRoZSBzdG9yZWQgbWVzc2FnZS4iLHJlbW90ZToiUmVtb3RlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IkxvZ2dpbmcgbGV2ZWwiLCJyZW1vdmUtZW50cnkiOiJSZW1vdmUgY29uZmlndXJhdGlvbiIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLHJldHJpZXM6IlJldHJpZXMiLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cmllcyBvbiBlbXB0eSIsInJldHJpZXMtb24taW52YWxpZCI6IlJldHJpZXMgb24gaW52YWxpZCIscnBjOnt0aXRsZToie3t0eXBlfX0gQ29ubmVjdG9yIFJQQyBwYXJhbWV0ZXJzIiwidGVtcGxhdGVzLXRpdGxlIjoiQ29ubmVjdG9yIFJQQyBUZW1wbGF0ZXMiLG1ldGhvZEZpbHRlcjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1uYW1lIjoiTWV0aG9kIG5hbWUiLHJlcXVlc3RUb3BpY0V4cHJlc3Npb246IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiIscmVzcG9uc2VUb3BpY0V4cHJlc3Npb246IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLHJlc3BvbnNlVGltZW91dDoiUmVzcG9uc2UgdGltZW91dCIsdmFsdWVFeHByZXNzaW9uOiJWYWx1ZSBleHByZXNzaW9uIix0YWc6IlRhZyIsdHlwZToiVHlwZSIsZnVuY3Rpb25Db2RlOiJGdW5jdGlvbiBDb2RlIixvYmplY3RzQ291bnQ6Ik9iamVjdHMgQ291bnQiLGFkZHJlc3M6IkFkZHJlc3MiLG1ldGhvZDoiTWV0aG9kIixyZXF1ZXN0VHlwZToiUmVxdWVzdCBUeXBlIixyZXF1ZXN0VGltZW91dDoiUmVxdWVzdCBUaW1lb3V0IixvYmplY3RUeXBlOiJPYmplY3QgdHlwZSIsaWRlbnRpZmllcjoiSWRlbnRpZmllciIscHJvcGVydHlJZDoiUHJvcGVydHkgSUQiLG1ldGhvZFJQQzoiTWV0aG9kIFJQQyBuYW1lIix3aXRoUmVzcG9uc2U6IldpdGggUmVzcG9uc2UiLGNoYXJhY3RlcmlzdGljVVVJRDoiQ2hhcmFjdGVyaXN0aWMgVVVJRCIsbWV0aG9kUHJvY2Vzc2luZzoiTWV0aG9kIFByb2Nlc3NpbmciLG5vZGVJRDoiTm9kZSBJRCIsaXNFeHRlbmRlZElEOiJJcyBFeHRlbmRlZCBJRCIsaXNGRDoiSXMgRkQiLGJpdHJhdGVTd2l0Y2g6IkJpdHJhdGUgU3dpdGNoIixkYXRhSW5IRVg6IkRhdGEgSW4gSEVYIixkYXRhTGVuZ3RoOiJEYXRhIExlbmd0aCIsZGF0YUJ5dGVvcmRlcjoiRGF0YSBCeXRlIE9yZGVyIixkYXRhQmVmb3JlOiJEYXRhIEJlZm9yZSIsZGF0YUFmdGVyOiJEYXRhIEFmdGVyIixkYXRhRXhwcmVzc2lvbjoiRGF0YSBFeHByZXNzaW9uIixlbmNvZGluZzoiRW5jb2RpbmciLG9pZDoiT0lEIiwiYWRkLW9pZCI6IkFkZCBPSUQiLCJhZGQtaGVhZGVyIjoiQWRkIGhlYWRlciIsImFkZC1zZWN1cml0eSI6IkFkZCBzZWN1cml0eSIscmVtb3ZlOiJSZW1vdmUiLHJlcXVlc3RGaWx0ZXI6IlJlcXVlc3QgRmlsdGVyIixyZXF1ZXN0VXJsRXhwcmVzc2lvbjoiUmVxdWVzdCBVUkwgRXhwcmVzc2lvbiIsaHR0cE1ldGhvZDoiSFRUUCBNZXRob2QiLHRpbWVvdXQ6IlRpbWVvdXQiLHRyaWVzOiJUcmllcyIsaHR0cEhlYWRlcnM6IkhUVFAgSGVhZGVycyIsImhlYWRlci1uYW1lIjoiSGVhZGVyIG5hbWUiLGhpbnQ6eyJtb2RidXMtcmVzcG9uc2UtcmVhZGluZyI6IlJQQyByZXNwb25zZSB3aWxsIHJldHVybiBhbGwgc3VidHJhY3RlZCB2YWx1ZXMgZnJvbSBhbGwgY29ubmVjdGVkIGRldmljZXMgd2hlbiB0aGUgcmVhZGluZyBmdW5jdGlvbnMgYXJlIHNlbGVjdGVkLiIsIm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9ucyI6IlJQQyB3aWxsIHdyaXRlIGEgZmlsbGVkIHZhbHVlIHRvIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyB3aGVuIHRoZSB3cml0aW5nIGZ1bmN0aW9ucyBhcmUgc2VsZWN0ZWQuIiwib3BjLW1ldGhvZCI6IkEgZmlsbGVkIG1ldGhvZCBuYW1lIGlzIHRoZSBPUEMtVUEgbWV0aG9kIHRoYXQgd2lsbCBwcm9jZXNzZWQgb24gdGhlIHNlcnZlciBzaWRlIChtYWtlIHN1cmUgeW91ciBub2RlIGhhcyB0aGUgcmVxdWVzdGVkIG1ldGhvZCkuIn0sInNlY3VyaXR5LW5hbWUiOiJTZWN1cml0eSBuYW1lIix2YWx1ZToiVmFsdWUiLHNlY3VyaXR5OiJTZWN1cml0eSIscmVzcG9uc2VWYWx1ZUV4cHJlc3Npb246IlJlc3BvbnNlIFZhbHVlIEV4cHJlc3Npb24iLHJlcXVlc3RWYWx1ZUV4cHJlc3Npb246IlJlcXVlc3QgVmFsdWUgRXhwcmVzc2lvbiIsYXJndW1lbnRzOiJBcmd1bWVudHMiLCJhZGQtYXJndW1lbnQiOiJBZGQgYXJndW1lbnQiLCJ3cml0ZS1wcm9wZXJ0eSI6IldyaXRlIHByb3BlcnR5IiwicmVhZC1wcm9wZXJ0eSI6IlJlYWQgcHJvcGVydHkiLCJhbmFsb2ctb3V0cHV0IjoiQW5hbG9nIG91dHB1dCIsImFuYWxvZy1pbnB1dCI6IkFuYWxvZyBpbnB1dCIsImJpbmFyeS1vdXRwdXQiOiJCaW5hcnkgb3V0cHV0IiwiYmluYXJ5LWlucHV0IjoiQmluYXJ5IGlucHV0IiwiYmluYXJ5LXZhbHVlIjoiQmluYXJ5IHZhbHVlIiwiYW5hbG9nLXZhbHVlIjoiQW5hbG9nIHZhbHVlIix3cml0ZToiV3JpdGUiLHJlYWQ6IlJlYWQiLHNjYW46IlNjYW4iLG9pZHM6Ik9JRFMiLHNldDoiU2V0IixtdWx0aXNldDoiTXVsdGlzZXQiLGdldDoiR2V0IiwiYnVsay13YWxrIjoiQnVsayB3YWxrIix0YWJsZToiVGFibGUiLCJtdWx0aS1nZXQiOiJNdWx0aWdldCIsImdldC1uZXh0IjoiR2V0IG5leHQiLCJidWxrLWdldCI6IkJ1bGsgZ2V0Iix3YWxrOiJXYWxrIiwic2F2ZS10ZW1wbGF0ZSI6IlNhdmUgdGVtcGxhdGUiLCJ0ZW1wbGF0ZS1uYW1lIjoiVGVtcGxhdGUgbmFtZSIsInRlbXBsYXRlLW5hbWUtcmVxdWlyZWQiOiJUZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLiIsInRlbXBsYXRlLW5hbWUtZHVwbGljYXRlIjoiVGVtcGxhdGUgd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgdXBkYXRlZC4iLGNvbW1hbmQ6IkNvbW1hbmQiLHBhcmFtczoiUGFyYW1zIiwianNvbi12YWx1ZS1pbnZhbGlkIjoiSlNPTiB2YWx1ZSBoYXMgYW4gaW52YWxpZCBmb3JtYXQifSwicnBjLW1ldGhvZHMiOiJSUEMgbWV0aG9kcyIsInJwYy1yZXF1ZXN0cyI6IlJQQyByZXF1ZXN0cyIscmVxdWVzdDp7ImNvbm5lY3QtcmVxdWVzdCI6IkNvbm5lY3QgcmVxdWVzdCIsImRpc2Nvbm5lY3QtcmVxdWVzdCI6IkRpc2Nvbm5lY3QgcmVxdWVzdCIsImF0dHJpYnV0ZS1yZXF1ZXN0IjoiQXR0cmlidXRlIHJlcXVlc3QiLCJhdHRyaWJ1dGUtdXBkYXRlIjoiQXR0cmlidXRlIHVwZGF0ZSIsInJwYy1jb25uZWN0aW9uIjoiUlBDIGNvbW1hbmQifSwicmVxdWVzdC10eXBlIjoiUmVxdWVzdCB0eXBlIiwicmVxdWVzdHMtbWFwcGluZyI6IlJlcXVlc3RzIG1hcHBpbmciLCJyZXF1ZXN0cy1tYXBwaW5nLWhpbnQiOiJNUVRUIENvbm5lY3RvciByZXF1ZXN0cyBhbGxvd3MgeW91IHRvIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHByb2Nlc3MgYXR0cmlidXRlIHJlcXVlc3RzIGZyb20gdGhlIGRldmljZSwgaGFuZGxlIGF0dHJpYnV0ZSB1cGRhdGVzIG9uIHRoZSBzZXJ2ZXIgYW5kIFJQQyBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24uIiwicmVxdWVzdC10b3BpYy1leHByZXNzaW9uIjoiUmVxdWVzdCB0b3BpYyBleHByZXNzaW9uIiwicmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGUiOiJSZXF1ZXN0IGNsaWVudCBjZXJ0aWZpY2F0ZSIsInJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS10aW1lb3V0IjoiUmVzcG9uc2UgdGltZW91dCAobXMpIiwicmVzcG9uc2UtdGltZW91dC1yZXF1aXJlZCI6IlJlc3BvbnNlIHRpbWVvdXQgaXMgcmVxdWlyZWQuIiwicmVzcG9uc2UtdGltZW91dC1saW1pdHMtZXJyb3IiOiJUaW1lb3V0IG11c3QgYmUgbW9yZSB0aGVuIHt7bWlufX0gbXMuIiwicmVzcG9uc2UtdG9waWMtUW9zIjoiUmVzcG9uc2UgdG9waWMgUW9TIiwicmVzcG9uc2UtdG9waWMtUW9zLWhpbnQiOiJNUVRUIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBpcyBhbiBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgbWVzc2FnZSBzZW5kZXIgYW5kIHJlY2VpdmVyIHRoYXQgZGVmaW5lcyB0aGUgbGV2ZWwgb2YgZGVsaXZlcnkgZ3VhcmFudGVlIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UuIiwicmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbiI6IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLCJyZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkIjoiUmVzcG9uc2UgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS12YWx1ZS1leHByZXNzaW9uIjoiUmVzcG9uc2UgdmFsdWUgZXhwcmVzc2lvbiIsInJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWQiOiJSZXNwb25zZSB2YWx1ZSBleHByZXNzaW9uIGlzIHJlcXVpcmVkLiIsInZlbmRvci1uYW1lIjoiVmVuZG9yIG5hbWUiLCJ2ZW5kb3ItdXJsIjoiVmVuZG9yIFVSTCIsdmFsdWU6IlZhbHVlIix2YWx1ZXM6IlZhbHVlcyIsInZhbHVlLXJlcXVpcmVkIjoiVmFsdWUgaXMgcmVxdWlyZWQuIiwidmFsdWUtZXhwcmVzc2lvbiI6IlZhbHVlIGV4cHJlc3Npb24iLCJ2YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiVmFsdWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJ3aXRoLXJlc3BvbnNlIjoiV2l0aCByZXNwb25zZSIsIndpdGhvdXQtcmVzcG9uc2UiOiJXaXRob3V0IHJlc3BvbnNlIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2Nhbi1wZXJpb2QiOiJTY2FuIHBlcmlvZCAobXMpIiwic2Nhbi1wZXJpb2QtZXJyb3IiOiJTY2FuIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJTdWJzY3JpcHRpb24gY2hlY2sgcGVyaW9kIChtcykiLCJzdWItY2hlY2stcGVyaW9kLWVycm9yIjoiU3Vic2NyaXB0aW9uIGNoZWNrIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInNlY3VyaXR5LWxhYmVsIjoiU2VjdXJpdHkiLCJzZWN1cml0eS1wb2xpY3kiOiJTZWN1cml0eSBwb2xpY3kiLCJzZWN1cml0eS10eXBlIjoiU2VjdXJpdHkgdHlwZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkFjY2VzcyBUb2tlbiIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXNlcm5hbWUgYW5kIFBhc3N3b3JkIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBBY2Nlc3MgVG9rZW4iLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyBQcml2YXRlIEtleSJ9LCJzZWxlY3QtY29ubmVjdG9yIjoiU2VsZWN0IGNvbm5lY3RvciB0byBkaXNwbGF5IGNvbmZpZyIsInNlbmQtY2hhbmdlLWRhdGEiOiJTZW5kIGRhdGEgb25seSBvbiBjaGFuZ2UiLCJzZW5kLWRhdGEtdG8tcGxhdGZvcm0iOiJTZW5kIGRhdGEgdG8gcGxhdGZvcm0iLCJzZW5kLWRhdGEtb24tY2hhbmdlIjoiU2VuZCBkYXRhIG9ubHkgb24gY2hhbmdlIiwic2VuZC1jaGFuZ2UtZGF0YS1oaW50IjoiVGhlIHZhbHVlcyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBkYXRhYmFzZSBvbmx5IGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgcHJldmlvdXMgY29udmVydGVkIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb25hbGl0eSBhcHBsaWVzIHRvIGJvdGggYXR0cmlidXRlcyBhbmQgdGltZSBzZXJpZXMgaW4gdGhlIGNvbnZlcnRlciBvdXRwdXQuIixzZXJ2ZXI6IlNlcnZlciIsInNlcnZlci1ob3N0bmFtZSI6IlNlcnZlciBob3N0bmFtZSIsInNlcnZlci1zbGF2ZSI6IlNlcnZlciAoU2xhdmUpIiwic2VydmVycy1zbGF2ZXMiOiJTZXJ2ZXJzIChTbGF2ZXMpIiwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsInNlcnZlci11cmwiOiJTZXJ2ZXIgZW5kcG9pbnQgdXJsIiwic2VydmVyLWNvbm5lY3Rpb24iOiJTZXJ2ZXIgQ29ubmVjdGlvbiIsInNlcnZlci1jb25maWciOiJTZXJ2ZXIgY29uZmlndXJhdGlvbiIsInNlcnZlci1zbGF2ZS1jb25maWciOiJTZXJ2ZXIgKFNsYXZlKSBjb25maWd1cmF0aW9uIiwic2VydmVyLXVybC1yZXF1aXJlZCI6IlNlcnZlciBlbmRwb2ludCB1cmwgaXMgcmVxdWlyZWQuIixzdG9wYml0czoiU3RvcGJpdHMiLHN0cmljdDoiU3RyaWN0IixzZXQ6IlNldCIsInNob3ctbWFwIjoiU2hvdyBtYXAiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiU3RhdGlzdGljIixzdGF0aXN0aWNzOiJTdGF0aXN0aWNzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjonTm8gY29uZmlndXJlZCBzdGF0aXN0aWMga2V5cyBmb3VuZC4gWW91IGNhbiBjb25maWd1cmUgdGhlbSBpbiAiU3RhdGlzdGljcyIgdGFiIGluIGdlbmVyYWwgY29uZmlndXJhdGlvbi4nLCJzdGF0aXN0aWNzLWJ1dHRvbiI6IkdvIHRvIGNvbmZpZ3VyYXRpb24iLGNvbW1hbmRzOiJDb21tYW5kcyIsInNlbmQtcGVyaW9kIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIChpbiBzZWMpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgcmVxdWlyZWQiLCJzZW5kLXBlcmlvZC1taW4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gNjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiAoaW4gc2VjKSIsIm1heC1wYXlsb2FkLXNpemUtYnl0ZXMiOiJNYXggcGF5bG9hZCBzaXplIGluIGJ5dGVzIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1yZXF1aXJlZCI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgaXMgcmVxdWlyZWQiLCJtYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pbiI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMTAwIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuIjoiTWF4IHBheWxvYWQgc2l6ZSBpbiBieXRlcyBpcyBub3QgdmFsaWQiLCJtaW4tcGFjay1zaXplLXRvLXNlbmQiOiJNaW4gcGFja2V0IHNpemUgdG8gc2VuZCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZCI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2l6ZS10by1zZW5kLW1pbiI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwMCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuIjoiTWluIHBhY2tldCBzaXplIHRvIHNlbmQgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IChpbiBzZWMpIiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLCJjb21tYW5kLXBhdHRlcm4iOiJDb21tYW5kIGlzIG5vdCB2YWxpZCIscmVtb3ZlOiJSZW1vdmUgY29tbWFuZCJ9LHN0b3JhZ2U6IlN0b3JhZ2UiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gZmlsZSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWF4aW11bSBudW1iZXIgb2YgZmlsZXMiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtYmVyIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1heGltdW0gcmVjb3JkcyBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiUmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50IjoiTWF4IHJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJNYXggUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiRGF0YSBmb2xkZXIgcGF0aCIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZCI6IkRhdGEgZm9sZGVyIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhdGgiOiJTdG9yYWdlIHBhdGgiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJTdG9yYWdlIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS10eXBlIjoiU3RvcmFnZSB0eXBlIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJGaWxlIHN0b3JhZ2UiLCJtZW1vcnktc3RvcmFnZSI6Ik1lbW9yeSBzdG9yYWdlIixzcWxpdGU6IlNRTElURSJ9LCJyZXBvcnQtc3RyYXRlZ3kiOntsYWJlbDoiUmVwb3J0IHN0cmF0ZWd5Iiwib24tY2hhbmdlIjoiT24gdmFsdWUgY2hhbmdlIiwib24tcmVwb3J0LXBlcmlvZCI6Ik9uIHJlcG9ydCBwZXJpb2QiLCJvbi1jaGFuZ2Utb3ItcmVwb3J0LXBlcmlvZCI6Ik9uIHZhbHVlIGNoYW5nZSBvciByZXBvcnQgcGVyaW9kIiwicmVwb3J0LXBlcmlvZCI6IlJlcG9ydCBwZXJpb2QifSwic291cmNlLXR5cGUiOnttc2c6IkV4dHJhY3QgZnJvbSBtZXNzYWdlIix0b3BpYzoiRXh0cmFjdCBmcm9tIHRvcGljIixjb25zdDoiQ29uc3RhbnQiLGlkZW50aWZpZXI6IklkZW50aWZpZXIiLHBhdGg6IlBhdGgifSwid29ya2Vycy1zZXR0aW5ncyI6IldvcmtlcnMgc2V0dGluZ3MiLHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsZ2VuZXJhbDoiR2VuZXJhbCIsdGltZXNlcmllczoiVGltZSBzZXJpZXMiLGtleToiS2V5IixrZXlzOiJLZXlzIiwia2V5LXJlcXVpcmVkIjoiS2V5IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLWhvc3QiOiJQbGF0Zm9ybSBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBsYXRmb3JtIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIix0aW1lb3V0OiJUaW1lb3V0IChtcykiLCJ0aW1lb3V0LWVycm9yIjoiVGltZW91dCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsdHlwZToiVHlwZSIsInRvcGljLWZpbHRlciI6IlRvcGljIGZpbHRlciIsInRvcGljLXJlcXVpcmVkIjoiVG9waWMgZmlsdGVyIGlzIHJlcXVpcmVkLiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1jb25uZWN0aW9uIjoiVExTIENvbm5lY3Rpb24iLCJtYXN0ZXItY29ubmVjdGlvbnMiOiJNYXN0ZXIgQ29ubmVjdGlvbnMiLCJtZXRob2QtZmlsdGVyIjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1maWx0ZXItaGludCI6IlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgaW5jb21pbmcgUlBDIG1ldGhvZCBmcm9tIHBsYXRmb3JtLiIsIm1ldGhvZC1maWx0ZXItcmVxdWlyZWQiOiJNZXRob2QgZmlsdGVyIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIscW9zOnsiYXQtbW9zdC1vbmNlIjoiMCAtIEF0IG1vc3Qgb25jZSIsImF0LWxlYXN0LW9uY2UiOiIxIC0gQXQgbGVhc3Qgb25jZSIsImV4YWN0bHktb25jZSI6IjIgLSBFeGFjdGx5IG9uY2UifSwib2JqZWN0cy1jb3VudCI6Ik9iamVjdHMgY291bnQiLCJvYmplY3RzLWNvdW50LXJlcXVpcmVkIjoiT2JqZWN0cyBjb3VudCBpcyByZXF1aXJlZCIsIndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzIjoiV2FpdCBhZnRlciBmYWlsZWQgYXR0ZW1wdHMgKG1zKSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsdXNlcm5hbWU6IlVzZXJuYW1lIiwidXNlcm5hbWUtcmVxdWlyZWQiOiJVc2VybmFtZSBpcyByZXF1aXJlZC4iLCJ1bml0LWlkLXJlcXVpcmVkIjoiVW5pdCBJRCBpcyByZXF1aXJlZC4iLCJ3cml0ZS1jb2lsIjoiV3JpdGUgQ29pbCIsIndyaXRlLWNvaWxzIjoiV3JpdGUgQ29pbHMiLCJ3cml0ZS1yZWdpc3RlciI6IldyaXRlIFJlZ2lzdGVyIiwid3JpdGUtcmVnaXN0ZXJzIjoiV3JpdGUgUmVnaXN0ZXJzIixoaW50czp7Im1vZGJ1cy1tYXN0ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb25zIGZvciBjb25uZWN0aW5nIHRvIE1vZGJ1cyBzZXJ2ZXJzIGFuZCByZWFkaW5nIGRhdGEgZnJvbSB0aGVtLiIsIm1vZGJ1cy1zZXJ2ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yIHRoZSBNb2RidXMgc2VydmVyLCBzdG9yaW5nIGRhdGEgYW5kIHNlbmRpbmcgdXBkYXRlcyB0byB0aGUgcGxhdGZvcm0gd2hlbiBjaGFuZ2VzIG9jY3VyIG9yIGF0IGZpeGVkIGludGVydmFscy4iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBwbGF0Zm9ybSBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIHBsYXRmb3JtIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBwbGF0Zm9ybSBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBwbGF0Zm9ybSBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIHBsYXRmb3JtIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gcGxhdGZvcm0gc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIHRoZSBmb2xkZXIgdGhhdCB3aWxsIGNvbnRhaW4gZGF0YSAoUmVsYXRpdmUgb3IgQWJzb2x1dGUpIiwibG9nLWZvcm1hdCI6IkxvZyBtZXNzYWdlIGZvcm1hdCIsInJlbW90ZS1sb2ciOiJFbmFibGVzIHJlbW90ZSBsb2dnaW5nIGFuZCBsb2dzIHJlYWRpbmcgZnJvbSB0aGUgZ2F0ZXdheSIsImJhY2t1cC1jb3VudCI6IklmIGJhY2t1cCBjb3VudCBpcyA+IDAsIHdoZW4gYSByb2xsb3ZlciBpcyBkb25lLCBubyBtb3JlIHRoYW4gYmFja3VwIGNvdW50IGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkIixzdG9yYWdlOiJQcm92aWRlcyBjb25maWd1cmF0aW9uIGZvciBzYXZpbmcgaW5jb21pbmcgZGF0YSBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgcGxhdGZvcm0iLCJtYXgtZmlsZS1jb3VudCI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJOdW1iZXIgb2YgbWVzc2FnZXMgdG8gcmV0cmlldmUgZnJvbSB0aGUgc3RvcmFnZSBhbmQgc2VuZCB0byBwbGF0Zm9ybSIsIm1heC1yZWNvcmRzIjoiTWF4aW11bSBjb3VudCBvZiByZWNvcmRzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gb25lIGZpbGUiLCJyZWFkLXJlY29yZC1jb3VudCI6Ik51bWJlciBvZiBtZXNzYWdlcyB0byByZXRyaWV2ZSBmcm9tIHRoZSBzdG9yYWdlIGFuZCBzZW5kIHRvIHBsYXRmb3JtIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIG51bWJlciBvZiBkYXRhIGVudHJpZXMgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZGluZyB0byBwbGF0Zm9ybSIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgdGhlIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gbnVtYmVyIG9mIGRheXMgdGhhdCB0aGUgc3RvcmFnZSB3aWxsIHJldGFpbiBkYXRhIixjb21tYW5kczoiQ29tbWFuZHMgZm9yIGNvbGxlY3RpbmcgYWRkaXRpb25hbCBzdGF0aXN0aWMiLGF0dHJpYnV0ZToiU3RhdGlzdGljIHRlbGVtZXRyeSBrZXkiLHRpbWVvdXQ6IlRpbWVvdXQgZm9yIGNvbW1hbmQgZXhlY3V0aW5nIixjb21tYW5kOiJUaGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kIGV4ZWN1dGlvbiwgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGVsZW1ldHJ5IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiRW5hYmxlcyBtb25pdG9yIHRoZSBhY3Rpdml0eSBvZiBlYWNoIGNvbm5lY3RlZCBkZXZpY2UiLCJpbmFjdGl2aXR5LXRpbWVvdXQiOiJUaW1lIGFmdGVyIHdob3NlIHRoZSBnYXRld2F5IHdpbGwgZGlzY29ubmVjdCBkZXZpY2UiLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZGljaXR5IG9mIGRldmljZSBhY3Rpdml0eSBjaGVjayIsIm1pbmltYWwtcGFjay1kZWxheSI6IkRlbGF5IGJldHdlZW4gc2VuZGluZyBwYWNrcyBvZiBtZXNzYWdlcyAoRGVjcmVhc2luZyB0aGlzIHNldHRpbmcgcmVzdWx0cyBpbiBpbmNyZWFzZWQgQ1BVIHVzYWdlKSIscW9zOiJRdWFsaXR5IG9mIFNlcnZpY2UgaW4gTVFUVCBtZXNzYWdpbmcgKDAgLSBhdCBtb3N0IG9uY2UsIDEgLSBhdCBsZWFzdCBvbmNlKSIsInNlcnZlci1wb3J0IjoiTmV0d29yayBwb3J0IG9uIHdoaWNoIEdSUEMgc2VydmVyIHdpbGwgbGlzdGVuIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Ik1heGltdW0gdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGZvciBhIGtlZXBhbGl2ZSBwaW5nIHJlc3BvbnNlIGJlZm9yZSBjb25zaWRlcmluZyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMta2VlcC1hbGl2ZSI6IkR1cmF0aW9uIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgUlBDIGNhbGwuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6Ik1heGltdW0gbnVtYmVyIG9mIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHRoYXQgdGhlIHNlcnZlciBjYW4gc2VuZCB3aXRob3V0IHJlY2VpdmluZyBhbnkgZGF0YSBiZWZvcmUgaXQgY29uc2lkZXJzIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gZGF0YSBiZWluZyBzZW50IG9yIHJlY2VpdmVkLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiQWxsb3cgc2VydmVyIHRvIGtlZXAgdGhlIEdSUEMgY29ubmVjdGlvbiBhbGl2ZSBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSBSUEMgY2FsbHMuIiwicGF0aC1pbi1vcyI6IlBhdGggaW4gZ2F0ZXdheSBvcy4iLG1lbW9yeToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBpbi1tZW1vcnkgcXVldWUsIGl0IGlzIGEgZmFzdGVzdCBidXQgbm8gcGVyc2lzdGVuY2UgZ3VhcmFudGVlLiIsZmlsZToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHNlcGFyYXRlZCBmaWxlcyBhbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIixzcWxpdGU6IllvdXIgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBmaWxlIGJhc2VkIGRhdGFiYXNlLiBBbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIiwib3BjLXRpbWVvdXQiOiJUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgY29ubmVjdGluZyB0byBPUEMtVUEgc2VydmVyLiIsInNlY3VyaXR5LXBvbGljeSI6IlNlY3VyaXR5IFBvbGljeSBkZWZpbmVzIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHRvIGJlIGFwcGxpZWQuIiwic2Nhbi1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlc2NhbiB0aGUgc2VydmVyLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJQZXJpb2QgdG8gY2hlY2sgdGhlIHN1YnNjcmlwdGlvbnMgaW4gdGhlIE9QQy1VQSBzZXJ2ZXIuIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IklmIHRydWUgLSB0aGUgZ2F0ZXdheSB3aWxsIHN1YnNjcmliZSB0byBpbnRlcmVzdGluZyBub2RlcyBhbmQgd2FpdCBmb3IgZGF0YSB1cGRhdGUgYW5kIGlmIGZhbHNlIC0gdGhlIGdhdGV3YXkgd2lsbCByZXNjYW4gT1BDLVVBIHNlcnZlciBldmVyeSBzY2FuUGVyaW9kSW5NaWxsaXMuIiwic2hvdy1tYXAiOiJTaG93IG5vZGVzIG9uIHNjYW5uaW5nLiIsIm1ldGhvZC1uYW1lIjoiTmFtZSBvZiBtZXRob2Qgb24gT1BDLVVBIHNlcnZlci4iLGFyZ3VtZW50czoiQXJndW1lbnRzIGZvciB0aGUgbWV0aG9kICh3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGFyZ3VtZW50cyBmcm9tIHRoZSBSUEMgcmVxdWVzdCkuIiwibWluLXBhY2stc2l6ZS10by1zZW5kIjoiTWluaW11bSBwYWNrYWdlIHNpemUgZm9yIHNlbmRpbmcuIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcyI6Ik1heGltdW0gcGFja2FnZSBzaXplIGluIGJ5dGVzIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlYWQgZGF0YSBmcm9tIG5vZGVzLiIsbW9kYnVzOnsiZnJhbWVyLXR5cGUiOiJUeXBlIG9mIGEgZnJhbWVyIChTb2NrZXQsIFJUVSwgb3IgQVNDSUkpLCBpZiBuZWVkZWQuIixob3N0OiJIb3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIE1vZGJ1cyBzZXJ2ZXIuIixwb3J0OiJNb2RidXMgc2VydmVyIHBvcnQgZm9yIGNvbm5lY3Rpb24uIiwidW5pdC1pZCI6Ik1vZGJ1cyBzbGF2ZSBJRC4iLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKGluIHNlY29uZHMpIGZvciB0aGUgTW9kYnVzIHNlcnZlci4iLCJieXRlLW9yZGVyIjoiQnl0ZSBvcmRlciBmb3IgcmVhZGluZyBkYXRhLiIsIndvcmQtb3JkZXIiOiJXb3JkIG9yZGVyIHdoZW4gcmVhZGluZyBtdWx0aXBsZSByZWdpc3RlcnMuIixyZXRyaWVzOiJSZXRyeWluZyBkYXRhIHRyYW5zbWlzc2lvbiB0byB0aGUgbWFzdGVyLiBBY2NlcHRhYmxlIHZhbHVlczogdHJ1ZSBvciBmYWxzZS4iLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgdGhlIGRhdGEgaXMgZW1wdHkuIiwicmV0cmllcy1vbi1pbnZhbGlkIjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgaXQgZmFpbHMuIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIGNoZWNrIGF0dHJpYnV0ZXMgYW5kIHRlbGVtZXRyeSBvbiB0aGUgc2xhdmUuIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgbWFzdGVyLiIsImNvbm5lY3QtYXR0ZW1wdC1jb3VudCI6IlRoZSBudW1iZXIgb2YgY29ubmVjdGlvbiBhdHRlbXB0cyBtYWRlIHRocm91Z2ggdGhlIGdhdGV3YXkuIiwid2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHMiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIGRhdGEgdG8gdGhlIG1hc3Rlci4iLCJzZXJpYWwtcG9ydCI6IlNlcmlhbCBwb3J0IGZvciBjb25uZWN0aW9uLiIsYmF1ZHJhdGU6IkJhdWQgcmF0ZSBmb3IgdGhlIHNlcmlhbCBkZXZpY2UuIixzdG9wYml0czoiVGhlIG51bWJlciBvZiBzdG9wIGJpdHMgc2VudCBhZnRlciBlYWNoIGNoYXJhY3RlciBpbiBhIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgYnl0ZS4iLGJ5dGVzaXplOiJUaGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBieXRlIG9mIHNlcmlhbCBkYXRhLiBUaGlzIGNhbiBiZSBvbmUgb2YgNSwgNiwgNywgb3IgOC4iLHBhcml0eToiVGhlIHR5cGUgb2YgY2hlY2tzdW0gdXNlZCB0byB2ZXJpZnkgZGF0YSBpbnRlZ3JpdHkuIE9wdGlvbnM6IChFKXZlbiwgKE8pZGQsIChOKW9uZS4iLHN0cmljdDoiVXNlIGludGVyLWNoYXJhY3RlciB0aW1lb3V0IGZvciBiYXVkcmF0ZXMg4omkIDE5MjAwLiIsIm9iamVjdHMtY291bnQiOiJEZXBlbmRzIG9uIHRoZSBzZWxlY3RlZCB0eXBlLiIsYWRkcmVzczoiUmVnaXN0ZXIgYWRkcmVzcyB0byB2ZXJpZnkuIixrZXk6IktleSB0byBiZSB1c2VkIGFzIHRoZSBhdHRyaWJ1dGUga2V5IGZvciB0aGUgcGxhdGZvcm0gaW5zdGFuY2UuIiwiZGF0YS1rZXlzIjoiRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZnVuY3Rpb24gY29kZXMgYW5kIGRhdGEgdHlwZXMgY2xpY2sgb24gaGVscCBpY29uIixtb2RpZmllcjoiVGhlIHJldHJpZXZlZCB2YWx1ZSB3aWxsIGJlIGFkanVzdGVkIChieSBtdWx0aXBseWluZyBvciBkaXZpZGluZyBpdCkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtb2RpZmllciB2YWx1ZS4ifX19fSxSbz17ImFkZC1lbnRyeSI6Itil2LbYp9mB2Kkg2KrZg9mI2YrZhiIsYWR2YW5jZWQ6ItmF2KrZgtiv2YUiLCJjaGVja2luZy1kZXZpY2UtYWN0aXZpdHkiOiLZgdit2LUg2YbYtNin2Lcg2KfZhNis2YfYp9iyIixjb21tYW5kOiLYo9mI2KfZhdixIERvY2tlciIsImNvbW1hbmQtY29waWVkLW1lc3NhZ2UiOiLYqtmFINmG2LPYriDYo9mF2LEgRG9ja2VyINil2YTZiSDYp9mE2K3Yp9mB2LjYqSIsY29uZmlndXJhdGlvbjoi2KfZhNiq2YPZiNmK2YYiLCJjb25uZWN0b3ItYWRkIjoi2KXYttin2YHYqSDZhdmI2LXZhCDYrNiv2YrYryIsImNvbm5lY3Rvci1lbmFibGVkIjoi2KrZhdmD2YrZhiDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZSI6Itin2LPZhSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLCJjb25uZWN0b3ItdHlwZSI6ItmG2YjYuSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6ItmG2YjYuSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLGNvbm5lY3RvcnM6Itin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLWNvbmZpZyI6Itiq2YPZiNmK2YbYp9iqINin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLXRhYmxlLWVuYWJsZWQiOiLZhdmF2YPZkdmGIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi2KfZhNin2LPZhSIsImNvbm5lY3RvcnMtdGFibGUtdHlwZSI6Itin2YTZhtmI2LkiLCJjb25uZWN0b3JzLXRhYmxlLXN0YXR1cyI6Itin2YTYrdin2YTYqSIsImNvbm5lY3RvcnMtdGFibGUtYWN0aW9ucyI6Itin2YTYpdis2LHYp9ih2KfYqiIsImNvbm5lY3RvcnMtdGFibGUta2V5Ijoi2KfZhNmF2YHYqtin2K0iLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoi2KfZhNmB2KbYqSIsInJwYy1jb21tYW5kLXNlbmQiOiLYpdix2LPYp9mEIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi2KfZhNin2LPYqtis2KfYqNipIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLYqtit2LHZitixINin2YTZhdi52YTZhdin2KoiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLYqtmD2YjZitmGINi52KfZhSIsImRvY2tlci1sYWJlbCI6Itin2LPYqtiu2K/ZhSDYp9mE2KrYudmE2YrZhdin2Kog2KfZhNiq2KfZhNmK2Kkg2YTYqti02LrZitmEIElvVCBHYXRld2F5INmB2YogRG9ja2VyIGNvbXBvc2Ug2YXYuSDYqNmK2KfZhtin2Kog2KfYudiq2YXYp9ivINmE2YTYrNmH2KfYsiDYp9mE2YXYrdiv2K8iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi2KfYs9iq2K7Yr9mFINin2YTYqti52YTZitmF2KfYqiDZhNiq2YbYstmK2YQg2YjYqtir2KjZitiqINmI2KXYudiv2KfYryBkb2NrZXIgY29tcG9zZSIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLYqtmG2LLZitmEIGRvY2tlci1jb21wb3NlLnltbCDZhNio2YjYp9io2KrZgyIsImxhdW5jaC1nYXRld2F5Ijoi2KrYtNi62YrZhCDYp9mE2KjZiNin2KjYqSIsImxhdW5jaC1kb2NrZXItY29tcG9zZSI6Itio2K/YoSDYqti02LrZitmEINin2YTYqNmI2KfYqNipINio2KfYs9iq2K7Yr9in2YUg2KfZhNij2YXYsSDYp9mE2KrYp9mE2Yog2YHZiiDYp9mE2LfYsdmB2YrYqSDZhdmGINin2YTZhdis2YTYryDYp9mE2LDZiiDZitit2KrZiNmKINi52YTZiSDZhdmE2YEgZG9ja2VyLWNvbXBvc2UueW1sIiwiY3JlYXRlLW5ldy1nYXRld2F5Ijoi2KXZhti02KfYoSDYqNmI2KfYqNipINis2K/Zitiv2KkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6ItmH2YQg2KPZhtiqINmF2KrYo9mD2K8g2KPZhtmDINiq2LHZitivINil2YbYtNin2KEg2KjZiNin2KjYqSDYrNiv2YrYr9ipINio2KfYs9mFOiAne3tnYXRld2F5TmFtZX19J9ifIiwiY3JlYXRlZC10aW1lIjoi2YjZgtiqINin2YTYpdmG2LTYp9ihIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6Itiz2YrYqtmFINit2LDZgSDYp9mE2KrZg9mI2YrZhtin2KoiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6ItmK2YXZg9mGINiq2LnYt9mK2YQg2KfZhNiq2YPZiNmK2YYg2LnZhiDYqNmP2LnYryDZgdmC2Lcg2KXYsNinINmD2KfZhiDZh9mG2KfZgyDZiNi12YjZhCDYrNiz2K/ZiiDYpdmE2Ykg2KfZhNio2YjYp9io2KkuINiz2KrYqtmFINit2LDZgSDYrNmF2YrYuSDYp9mE2KrZg9mI2YrZhtin2Kog2KfZhNiz2KfYqNmC2KkuPGJyPjxicj4gXG4g2YTYqti52LfZitmEINin2YTYqtmD2YjZitmG2Iwg2KPYr9iu2YQg2KfYs9mFINin2YTYqNmI2KfYqNipINij2K/Zhtin2YciLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQiOiLYp9iz2YUg2KfZhNio2YjYp9io2KkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNio2YjYp9io2Kkg2KXZhNiy2KfZhdmKIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLYpdmK2YLYp9mBINin2YTYqti02LrZitmEIixkZWxldGU6Itit2LDZgSDYp9mE2KrZg9mI2YrZhiIsImRvd25sb2FkLXRpcCI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZHJvcC1maWxlIjoi2KPZgdmE2YIg2KfZhNmF2YTZgSDZh9mG2Kcg2KPZiCIsZ2F0ZXdheToi2KfZhNio2YjYp9io2KkiLCJnYXRld2F5LWV4aXN0cyI6Itin2YTYrNmH2KfYsiDYqNmG2YHYsyDYp9mE2KfYs9mFINmF2YjYrNmI2K8g2KjYp9mE2YHYudmELiIsImdhdGV3YXktbmFtZSI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSDZhdi32YTZiNioLiIsImdhdGV3YXktc2F2ZWQiOiLYqtmFINit2YHYuCDYqtmD2YjZitmGINin2YTYqNmI2KfYqNipINio2YbYrNin2K0uIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqNipIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi2YXZh9mE2Kkg2KfZhNio2YLYp9ihINi52YTZiSDZgtmK2K8g2KfZhNit2YrYp9ipINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6ItmF2YfZhNipINin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K3YqSIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqCIsImdycGMta2VlcC1hbGl2ZS1taW4iOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINij2YLZhCDZhdmGIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDZhdi32YTZiNioIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmE2YjZgtiqINio2YrZhiDYp9mE2KjZitmG2LrYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2KogKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNio2YrZhti62KfYqiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQgKNio2KfZhNir2YjYp9mG2YopIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQg2YXYt9mE2YjYqNipIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiLZgdiq2LHYqSDZgdit2LUg2KfZhNiu2YXZiNmEINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoi2YHYqtix2Kkg2YHYrdi1INin2YTYrtmF2YjZhCDYutmK2LEg2LXYp9mE2K3YqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEICjYqNin2YTYq9mI2KfZhtmKKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEINmF2LfZhNmI2KjYqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6ItmB2KrYsdipINin2YTYrtmF2YjZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiLZgdiq2LHYqSDYp9mE2K7ZhdmI2YQg2LrZitixINi12KfZhNit2KkiLCJqc29uLXBhcnNlIjoiSlNPTiDYutmK2LEg2LXYp9mE2K0uIiwianNvbi1yZXF1aXJlZCI6Itin2YTYrdmC2YQg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINmB2KfYsdi62YvYpy4iLGxvZ3M6e2xvZ3M6Itin2YTYs9is2YTYp9iqIixkYXlzOiLYo9mK2KfZhSIsaG91cnM6Itiz2KfYudin2KoiLG1pbnV0ZXM6Itiv2YLYp9im2YIiLHNlY29uZHM6Itir2YjYp9mG2YoiLCJkYXRlLWZvcm1hdCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4g2YXYt9mE2YjYqCIsImxvZy1mb3JtYXQiOiLYqtmG2LPZitmCINin2YTYs9is2YQiLCJsb2ctdHlwZSI6ItmG2YjYuSDYp9mE2LPYrNmEIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiz2KzZhCDZhdi32YTZiNioIixyZW1vdGU6Itin2YTYqtiz2KzZitmEINi52YYg2KjZj9i52K8iLCJyZW1vdGUtbG9ncyI6Itin2YTYs9is2YTYp9iqINi52YYg2KjZj9i52K8iLGxvY2FsOiLYp9mE2KrYs9is2YrZhCDYp9mE2YXYrdmE2YoiLGxldmVsOiLZhdiz2KrZiNmJINin2YTYs9is2YQiLCJmaWxlLXBhdGgiOiLZhdiz2KfYsSDYp9mE2YXZhNmBIiwiZmlsZS1wYXRoLXJlcXVpcmVkIjoi2YXYs9in2LEg2KfZhNmF2YTZgSDZhdi32YTZiNioIiwic2F2aW5nLXBlcmlvZCI6ItmB2KrYsdipINit2YHYuCDYp9mE2LPYrNmEIiwic2F2aW5nLXBlcmlvZC1taW4iOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhdi32YTZiNio2KkiLCJiYWNrdXAtY291bnQiOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSIsImJhY2t1cC1jb3VudC1taW4iOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDZhNinINmK2YXZg9mGINij2YYg2YrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6Iti52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipINmF2LfZhNmI2KgifSwibWluLXBhY2stc2VuZC1kZWxheSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2YXYt9mE2YjYqCIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoi2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2KPZgtmEINmF2YYgMCIsIm5vLWNvbm5lY3RvcnMiOiLZhNinINiq2YjYrNivINmF2YjYtdmE2KfYqiIsIm5vLWRhdGEiOiLZhNinINiq2YjYrNivINiq2YPZiNmK2YbYp9iqIiwibm8tZ2F0ZXdheS1mb3VuZCI6ItmE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KjZiNin2KjYqS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiJ3t7aXRlbX19JyDYutmK2LEg2YXZiNis2YjYry4iLCJwYXRoLWxvZ3MiOiLZhdiz2KfYsSDYpdmE2Ykg2YXZhNmB2KfYqiDYp9mE2LPYrNmEIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi2KfZhNmF2LPYp9ixINmF2LfZhNmI2KguIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2KjZgtin2KEg2LnZhNmJINin2YTYrdmK2KfYqSDZitiz2YXYrSDYqNiv2YjZhiDZhdmD2KfZhNmF2KfYqiIscmVtb3RlOiLYp9mE2KrZg9mI2YrZhiDYudmGINio2Y/YudivIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiLZhdiz2KrZiNmJINin2YTYqtiz2KzZitmEIiwicmVtb3ZlLWVudHJ5Ijoi2KXYstin2YTYqSDYp9mE2KrZg9mI2YrZhiIsInJlbW90ZS1zaGVsbCI6ItmC2LTYsdipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Itin2YTYqtmD2YjZitmGINi52YYg2KjZj9i52K8iLG90aGVyOiLYotiu2LEiLCJzYXZlLXRpcCI6Itit2YHYuCDZhdmE2YEg2KfZhNiq2YPZiNmK2YYiLCJzZWN1cml0eS10eXBlIjoi2YbZiNi5INin2YTYo9mF2KfZhiIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Itix2YXYsiDYp9mE2YjYtdmI2YQiLCJ1c2VybmFtZS1wYXNzd29yZCI6Itin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINmI2YPZhNmF2Kkg2KfZhNmF2LHZiNixIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDYsdmF2LIg2KfZhNmI2LXZiNmEIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsg2KfZhNmF2YHYqtin2K0g2KfZhNiu2KfYtSJ9LCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYrtin2K/ZhSIsc3RhdGlzdGljczp7c3RhdGlzdGljOiLYpdit2LXYp9im2YrYqSIsc3RhdGlzdGljczoi2KfZhNil2K3Ytdin2KbZitin2KoiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLZhNinINiq2KrZiNmB2LEg2KXYrdi12KfYptmK2KfYqiIsY29tbWFuZHM6Itin2YTYo9mI2KfZhdixIiwic2VuZC1wZXJpb2QiOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqICjYqNin2YTYq9mI2KfZhtmKKSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDZhdi32YTZiNio2KkiLCJzZW5kLXBlcmlvZC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDYo9mC2YQg2YXZhiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqINi62YrYsSDYtdin2YTYrdipIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiAo2KjYp9mE2KvZiNin2YbZiikiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINmF2LfZhNmI2KjYqSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiDYo9mC2YQg2YXZhiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINi62YrYsSDYtdin2YTYrdipIixhZGQ6Itil2LbYp9mB2Kkg2KPZhdixIix0aW1lb3V0OiLYp9mE2YXZh9mE2KkiLCJ0aW1lb3V0LW1zIjoi2KfZhNmF2YfZhNipICjYqNin2YTZhdmE2YTZiiDYq9in2YbZitipKSIsInRpbWVvdXQtcmVxdWlyZWQiOiLYp9mE2YXZh9mE2Kkg2YXYt9mE2YjYqNipIiwidGltZW91dC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KfZhNmF2YfZhNipINij2YLZhCDZhdmGIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiLYp9mE2YXZh9mE2Kkg2LrZitixINi12KfZhNit2KkiLCJhdHRyaWJ1dGUtbmFtZSI6Itin2LPZhSDYp9mE2LPZhdipIiwiYXR0cmlidXRlLW5hbWUtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNiz2YXYqSDZhdi32YTZiNioIixjb21tYW5kOiLYp9mE2KPZhdixIiwiY29tbWFuZC1yZXF1aXJlZCI6Itin2YTYo9mF2LEg2YXYt9mE2YjYqCIsImNvbW1hbmQtcGF0dGVybiI6Itin2YTYo9mF2LEg2LrZitixINi12KfZhNitIixyZW1vdmU6Itil2LLYp9mE2Kkg2KfZhNij2YXYsSJ9LHN0b3JhZ2U6Itin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi2KfZhNiz2KzZhNin2Kog2KfZhNmC2LXZiNmJINmB2Yog2KfZhNmF2YTZgSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTZhdmE2YHYp9iqIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmH2YggMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi2KfZhNi52K/YryDYutmK2LEg2LXYp9mE2K0uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLYp9mE2LnYr9ivINmF2LfZhNmI2KguIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Itin2YTYs9is2YTYp9iqINin2YTZgti12YjZiSDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLYp9mE2LPYrNmE2KfYqiDYp9mE2YLYtdmI2Ykg2YXYt9mE2YjYqNipLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZhdi32YTZiNioLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50Ijoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINmC2LHYp9ih2Kkg2KfZhNiz2KzZhNin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNi52K/YryDYp9mE2LPYrNmE2KfYqiDZh9mIIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi2LnYr9ivINin2YTZgtix2KfYodipINin2YTZgti12YjZiSDZhdi32YTZiNioLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6ItmF2LPYp9ixINmF2KzZhNivINin2YTYqNmK2KfZhtin2KoiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDZhdis2YTYryDYp9mE2KjZitin2YbYp9iqINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYWNrLXNpemUiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYrdis2YUg2K3YstmF2Kkg2KfZhNit2K/YqyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZh9mIIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi2KfZhNit2KzZhSDYp9mE2KPZgti12Ykg2YTYrdiy2YXYqSDYp9mE2K3Yr9irINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYXRoIjoi2YXYs9in2LEg2KfZhNiq2K7YstmK2YYiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDYp9mE2KrYrtiy2YrZhiDZhdi32YTZiNioLiIsInN0b3JhZ2UtdHlwZSI6ItmG2YjYuSDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2YXZhNmB2KfYqiIsIm1lbW9yeS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2LDYp9mD2LHYqSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoi2KvZitmG2LrYstio2YjYsdivIixnZW5lcmFsOiLYudin2YUiLCJ0aGluZ3Nib2FyZC1ob3N0Ijoi2YXYttmK2YEg2KvZitmG2LrYstio2YjYsdivIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Itin2YTZhdi22YrZgSDZhdi32YTZiNioLiIsInRoaW5nc2JvYXJkLXBvcnQiOiLZhdmG2YHYsCDYq9mK2YbYutiy2KjZiNix2K8iLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6Itin2YTZhdmG2YHYsCDYutmK2LEg2LXYp9mE2K0uIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Itin2YTZhdmG2YHYsCDZhdi32YTZiNioLiIsdGlkeToi2KrYsdiq2YrYqCIsInRpZHktdGlwIjoi2KrYsdiq2YrYqCDYqtmD2YjZitmGIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiLYqtmD2YjZitmGINmF2YjYtdmEIHt7dHlwZU5hbWV9fSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoi2KfZhNmF2LPYp9ixINil2YTZiSDYtNmH2KfYr9ipIENBINi52YTZiSDYp9mE2KjZiNin2KjYqSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2LTZh9in2K/YqSDYp9mE2LnZhdmK2YQg2LnZhNmJINin2YTYqNmI2KfYqNipIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi2YrYrNioINiq2K3Yr9mK2K8g2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoi2KfZhNix2YLZhSDYutmK2LEg2LXYp9mE2K0uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwg2KfZhNix2LPYp9im2YQg2KjYp9mE2KPZitin2YUiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6ItmK2KzYqCDYqtit2K/ZitivIFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYo9mK2KfZhS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXBhdHRlcm4iOiLYp9mE2LHZgtmFINi62YrYsSDYtdin2YTYrS4iLCJtcXR0LXFvcyI6Itis2YjYr9ipINin2YTYrtiv2YXYqSAoUW9TKSIsIm1xdHQtcW9zLXJlcXVpcmVkIjoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipIChRb1MpINmF2LfZhNmI2KjYqSIsIm1xdHQtcW9zLXJhbmdlIjoi2KrYqtix2KfZiNitINmC2YrZhSDYrNmI2K/YqSDYp9mE2K7Yr9mF2KkgKFFvUykg2YXZhiAwINil2YTZiSAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdmB2KrYp9itINin2YTYrtin2LUg2LnZhNmJINin2YTYqNmI2KfYqNipIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLYqtio2K/ZitmEINmI2LbYuSDZhdmE2KEg2KfZhNi02KfYtNipIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiLYqtmD2YjZitmGIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6Itil2LbYp9mB2Kkv2KrYrdiv2YrYqyDYqtmD2YjZitmGIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2YPZiNmK2YYg2YjYpdiv2KfYsdipINin2YTYqNmI2KfYqNipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtc2hlbGwiOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2K3Zg9mFINin2YTYqNi52YrYryDZgdmKINmG2LjYp9mFINin2YTYqti02LrZitmEINmF2Lkg2KfZhNio2YjYp9io2Kkg2YXZhiDYudmG2LXYsSDZiNin2KzZh9ipINin2YTZhdiz2KrYrtiv2YUg2YLYtNix2Kkg2LnZhiDYqNmP2LnYryIsaG9zdDoi2KfYs9mFINin2YTZhdi22YrZgSDYo9mIINi52YbZiNin2YYgSVAg2YTYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLHBvcnQ6ItmF2YbZgdiwINiu2K/ZhdipIE1RVFQg2LnZhNmJINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIsdG9rZW46Itix2YXYsiDYp9mE2YjYtdmI2YQg2YTZhNio2YjYp9io2Kkg2YXZhiDYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLCJjbGllbnQtaWQiOiLZhdi52LHZgSDYudmF2YrZhCBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIix1c2VybmFtZToi2KfYs9mFINin2YTZhdiz2KrYrtiv2YUgTVFUVCDZhNmE2KjZiNin2KjYqSDZhdmGINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIscGFzc3dvcmQ6ItmD2YTZhdipINin2YTZhdix2YjYsSBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIiwiY2EtY2VydCI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2YXZhNmBINi02YfYp9iv2KkgQ0EiLCJkYXRlLWZvcm0iOiLYqtmG2LPZitmCINin2YTYqtin2LHZitiuINmB2Yog2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwiZGF0YS1mb2xkZXIiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdis2YTYryDYp9mE2LDZiiDYs9mK2K3YqtmI2Yog2LnZhNmJINin2YTYqNmK2KfZhtin2KogKNmG2LPYqNmKINij2Ygg2YXYt9mE2YIpIiwibG9nLWZvcm1hdCI6Itiq2YbYs9mK2YIg2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwicmVtb3RlLWxvZyI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDYp9mE2KrYs9is2YrZhCDYp9mE2KjYudmK2K8g2YjZgtix2KfYodipINin2YTYs9is2YTYp9iqINmF2YYg2KfZhNio2YjYp9io2KkiLCJiYWNrdXAtY291bnQiOiLYpdiw2Kcg2YPYp9mGINi52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipID4gMNiMINi52YbYryDYudmF2YTZitipINiq2K/ZiNmK2LHYjCDZhNinINmK2KrZhSDYp9mE2KfYrdiq2YHYp9i4INio2KPZg9ir2LEg2YXZhiDYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDYp9mE2YXYrdiv2K/YqSAtINmK2KrZhSDYrdiw2YEg2KfZhNij2YLYr9mFIixzdG9yYWdlOiLZitmI2YHYsSDYqtmD2YjZitmG2YvYpyDZhNit2YHYuCDYp9mE2KjZitin2YbYp9iqINin2YTZiNin2LHYr9ipINmC2KjZhCDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KfZhNmF2YbYtdipIiwibWF4LWZpbGUtY291bnQiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNi52K/YryDYp9mE2YXZhNmB2KfYqiDYp9mE2KrZiiDYs9mK2KrZhSDYpdmG2LTYp9ik2YfYpyIsIm1heC1yZWFkLWNvdW50Ijoi2LnYr9ivINin2YTYsdiz2KfYptmEINmE2YTYrdi12YjZhCDYudmE2YrZh9inINmF2YYg2KfZhNiq2K7YstmK2YYg2YjYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KvZitmG2LrYstio2YjYsdivIiwibWF4LXJlY29yZHMiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNmE2LPYrNmE2KfYqiDYp9mE2KrZiiDYs9iq2K7YstmGINmB2Yog2YXZhNmBINmI2KfYrdivIiwicmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2KfZhNix2LPYp9im2YQg2YTZhNit2LXZiNmEINi52YTZitmH2Kcg2YXZhiDYp9mE2KrYrtiy2YrZhiDZiNil2LHYs9in2YTZh9inINil2YTZiSDYq9mK2YbYutiy2KjZiNix2K8iLCJtYXgtcmVjb3Jkcy1jb3VudCI6Itin2YTYudiv2K8g2KfZhNij2YLYtdmJINmE2YTYqNmK2KfZhtin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiDZgtio2YQg2KXYsdiz2KfZhNmH2Kcg2KXZhNmJINir2YrZhti62LLYqNmI2LHYryIsInR0bC1jaGVjay1ob3VyIjoi2YPZhSDZhdix2Kkg2LPZitiq2K3ZgtmCINin2YTYqNmI2KfYqNipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDYp9mE2YLYr9mK2YXYqSIsInR0bC1tZXNzYWdlcy1kYXkiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNij2YrYp9mFINin2YTYqtmKINiz2KrYrdiq2YHYuCDZgdmK2YfYpyDYp9mE2KrYrtiy2YrZhiDYqNin2YTYqNmK2KfZhtin2KoiLGNvbW1hbmRzOiLYp9mE2KPZiNin2YXYsSDZhNis2YXYuSDYp9mE2KXYrdi12KfYptmK2KfYqiDYp9mE2KXYttin2YHZitipIixhdHRyaWJ1dGU6ItmF2YHYqtin2K0g2KrZhNmC2Yog2KfZhNil2K3Ytdin2KbZitin2KoiLHRpbWVvdXQ6ItmF2YfZhNipINiy2YXZhtmK2Kkg2YTYqtmG2YHZitiwINin2YTYo9mF2LEiLGNvbW1hbmQ6Itiz2YrYqtmFINin2LPYqtiu2K/Yp9mFINmG2KrZitis2Kkg2KrZhtmB2YrYsCDYp9mE2KPZhdixINmD2YLZitmF2Kkg2YTYqtmE2YLZiiDYp9mE2KXYrdi12KfYptmK2KfYqiIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDZhdix2KfZgtio2Kkg2YbYtNin2Lcg2YPZhCDYrNmH2KfYsiDZhdiq2LXZhCIsImluYWN0aXZpdHktdGltZW91dCI6Itin2YTZiNmC2Kog2KjYudivINin2YTYsNmKINiz2KrZgdi12YQg2KfZhNio2YjYp9io2Kkg2KfZhNis2YfYp9iyIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLYqtmD2LHYp9ixINmB2K3YtSDZhti02KfYtyDYp9mE2KzZh9in2LIiLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLYp9mE2KrYo9iu2YrYsSDYqNmK2YYg2KXYsdiz2KfZhCDYrdiy2YUg2KfZhNix2LPYp9im2YQgKNmK2KTYr9mKINiq2YLZhNmK2YQg2YfYsNinINin2YTYpdi52K/Yp9ivINil2YTZiSDYstmK2KfYr9ipINin2LPYqtiu2K/Yp9mFINmI2K3Yr9ipINin2YTZhdi52KfZhNis2Kkg2KfZhNmF2LHZg9iy2YrYqSkiLHFvczoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipINmB2Yog2LHYs9in2KbZhCBNUVRUICgwIC0g2LnZhNmJINin2YTYo9mD2KvYsSDZhdix2Kkg2YjYp9it2K/YqdiMIDEgLSDYudmE2Ykg2KfZhNij2YLZhCDZhdix2Kkg2YjYp9it2K/YqSkiLCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYtNio2YPYqSDYp9mE2LDZiiDYs9mK2LPYqtmF2Lkg2YHZitmHINiu2KfYr9mFIEdSUEMg2YTZhNin2LPYqtmB2LPYp9ix2KfYqiDYp9mE2YjYp9ix2K/YqS4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNmE2YjZgtiqINin2YTYsNmKINmK2KzYqCDYo9mGINmK2YbYqti42LHZhyDYp9mE2K7Yp9iv2YUg2YTYp9iz2KrYrNin2KjYqSDYsdiz2KfZhNipINin2YTYrdmB2KfYuCDYudmE2Ykg2KfZhNin2KrYtdin2YQg2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTZhdiv2Kkg2KjZitmGINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTZhdiq2LnYp9mC2KjYqSDYudmG2K8g2LnYr9mFINmI2KzZiNivINin2LPYqtiv2LnYp9ihIFJQQyDZhti02LcuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTYqtmKINmK2YXZg9mGINmE2YTYrtin2K/ZhSDYpdix2LPYp9mE2YfYpyDYr9mI2YYg2KrZhNmC2Yog2KPZiiDYqNmK2KfZhtin2Kog2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINi52YbYryDYudiv2YUg2KXYsdiz2KfZhCDYo9mIINin2LPYqtmE2KfZhSDYqNmK2KfZhtin2KouIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2LPZhdin2K0g2YTZhNiu2KfYr9mFINio2KXYqNmC2KfYoSDYp9iq2LXYp9mEIEdSUEMg2K3ZitmL2Kcg2K3YqtmJINi52YbYr9mF2Kcg2YTYpyDYqtmD2YjZhiDZh9mG2KfZgyDYp9iz2KrYr9i52KfYodin2KogUlBDINmG2LTYt9ipLiJ9fSxWbz17ImFkZC1lbnRyeSI6IkFmZWdpciBjb25maWd1cmFjacOzIiwiY29ubmVjdG9yLWFkZCI6IkFmZWdpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJDYWwgbm9tIGNvbmVjdG9yLiIsImNvbm5lY3Rvci10eXBlIjoiVGlwdXMgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNhbCB0aXB1cyBjb25lY3Rvci4iLGNvbm5lY3RvcnM6IkNvbmZpZ3VyYWNpw7MgZGUgY29uZWN0b3JzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXIgdW4gZ2F0ZXdheSBub3UiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkNyZWFyIHVuIG5vdSBnYXRld2F5IGFtYiBlbCBub206ICd7e2dhdGV3YXlOYW1lfX0nPyIsZGVsZXRlOiJFc2JvcnJhciBjb25maWd1cmFjacOzIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FycmVnYXIgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkphIGV4aXN0ZWl4IHVuIGRpc3Bvc2l0aXUgYW1iIGVsIG1hdGVpeCBub20uIiwiZ2F0ZXdheS1uYW1lIjoiTm9tIGRlIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJDYWwgdW4gbm9tIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7MgZGUgZ2F0ZXdheSBncmF2YWRhIHNhdGlzZmFjdMOycmlhbWVudC4iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6BsaWQuIiwianNvbi1yZXF1aXJlZCI6IkVsIGNhbXAgbm8gcG90IHNlciBidWl0LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBoaSBoYSBjb25lY3RvcnMiLCJuby1kYXRhIjoiTm8gaGkgaGEgY29uZmlndXJhY2lvbnMiLCJuby1nYXRld2F5LWZvdW5kIjoiTm8gcydoYSB0cm9iYXQgY2FwIGdhdGV3YXkuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vIHRyb2JhdC4iLCJwYXRoLWxvZ3MiOiJSdXRhIGFscyBmaXR4ZXJzIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IkNhbCBydXRhLiIscmVtb3RlOiJDb25maWd1cmFjacOzIHJlbW90YSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTml2ZWwgZGUgbG9nZ2luZyIsInJlbW92ZS1lbnRyeSI6IkVzYm9ycmFyIGNvbmZpZ3VyYWNpw7MiLCJzYXZlLXRpcCI6IkdyYXZhciBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIsInNlY3VyaXR5LXR5cGUiOiJUaXB1cyBkZSBzZWd1cmV0YXQiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkJ2FjY8OpcyIsdGxzOiJUTFMifSxzdG9yYWdlOiJHcmFiYWNpw7MiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJOw7ptZXJvIG3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZml0eGVyIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoHhpbSBkZSBmaXR4ZXJzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiRWwgbsO6bWVybyBtw61uaW0gw6lzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiQ2FsIG7Dum1lcm8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZWwgbWFnYXR6ZW0iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltIMOpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1pZGEgbcOgeGltIGRlIGVzZGV2ZW5pbWVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbSDDqXMgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6BsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhdGgiOiJSdXRhIGRlIG1hZ2F0emVtIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiQ2FsIHJ1dGEgZGUgbWFnYXR6ZW0uIiwic3RvcmFnZS10eXBlIjoiVGlwdXMgZGUgbWFnYXR6ZW0iLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik1hZ2F0emVtIGZpdHhlciIsIm1lbW9yeS1zdG9yYWdlIjoiTWFnYXR6ZW0gZW4gbWVtb3JpYSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IkNhbCBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQb3J0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJFbCBwb3J0IG3DoHhpbSDDqXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJFbCBwb3J0IG3DrW5pbSDDqXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQb3J0IG5vIHbDoGxpZC4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiQ2FsIHBvcnQuIix0aWR5OiJFbmRyZcOnYXQiLCJ0aWR5LXRpcCI6IkVuZHJlw6dhdCBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDsyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlJ1dGEgYWwgY2VydGlmaWNhdCBDQSBhbCBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUnV0YSBhbCBjZXJ0aWZpY2F0IGNsaWVudCBhbCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJSdXRhIGEgbGEgY2xhdSBwcml2YWRhIGFsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7MgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWZlZ2lyL2FjdHVhbGl6YXIgY29uZmlndXJhY2nDsyBKU09OIn0sQm89eyJhZGQtZW50cnkiOiJQxZlpZGF0IGtvbmZpZ3VyYWNpIiwiY29ubmVjdG9yLWFkZCI6IlDFmWlkYXQgbm92w70ga29uZWt0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IlBvdm9saXQga29uZWt0b3IiLCJjb25uZWN0b3ItbmFtZSI6Ik7DoXpldiBrb25la3RvcnUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Ik7DoXpldiBrb25la3RvcnUgamUgcG92aW5uw70uIiwiY29ubmVjdG9yLXR5cGUiOiJUeXAga29uZWt0b3J1IiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJUeXAga29uZWt0b3J1IGplIHBvdmlubsO9LiIsY29ubmVjdG9yczoiS29uZmlndXJhY2Uga29uZWt0b3J1IiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiVnl0dm/FmWl0IG5vdm91IGJyw6FudSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiSnN0ZSBzaSBqaXN0aSwgxb5lIGNoY2V0ZSB2eXR2b8WZaXQgbm92b3UgYnLDoW51IHMgbsOhenZlbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IlNtYXphdCBrb25maWd1cmFjaSIsImRvd25sb2FkLXRpcCI6IlN0w6Fobm91dCBzb3Vib3Iga29uZmlndXJhY2UiLGdhdGV3YXk6IkJyw6FuYSIsImdhdGV3YXktZXhpc3RzIjoiWmHFmcOtemVuw60gc2Ugc2hvZG7DvW0gbsOhenZlbSBqacW+IGV4aXN0dWplLiIsImdhdGV3YXktbmFtZSI6Ik7DoXpldiBicsOhbnkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOw6F6ZXYgYnLDoW55IGplIHBvdmlubsO9LiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjZSBicsOhbnkgYnlsYSDDunNwxJvFoW7EmyB1bG/FvmVuYS4iLCJqc29uLXBhcnNlIjoiTmVwbGF0bsO9IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmVtxa/FvmUgYsO9dCBwcsOhemRuw6kuIiwibm8tY29ubmVjdG9ycyI6IsW9w6FkbsOpIGtvbmVrdG9yeSIsIm5vLWRhdGEiOiLFvcOhZG7DqSBrb25maWd1cmFjZSIsIm5vLWdhdGV3YXktZm91bmQiOiLFvcOhZG7DqSBicsOhbnkgbmVieWx5IG5hbGV6ZW55LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIgJ3t7aXRlbX19JyBuZW5hbGV6ZW5hLiIsInBhdGgtbG9ncyI6IkNlc3RhIGsgc291Ym9yxa9tIGxvZ3UiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJDZXN0YSBqZSBwb3Zpbm7DoS4iLHJlbW90ZToiVnpkw6FsZW7DoSBrb25maWd1cmFjZSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiw5pyb3ZlxYggbG9nb3bDoW7DrSIsInJlbW92ZS1lbnRyeSI6Ik9kc3RyYW5pdCBrb25maWd1cmFjaSIsInNhdmUtdGlwIjoiVWxvxb5pdCBzb3Vib3Iga29uZmlndXJhY2UiLCJzZWN1cml0eS10eXBlIjoiVHlwIHphYmV6cGXEjWVuw60iLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJQxZnDrXN0dXBvdsO9IHRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IsOabG/FvmnFoXTEmyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiBzb3Vib3J1Iiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbcOhbG7DrSBwb8SNZXQgc291Ym9yxa8iLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbcOhbG7DrSBwb8SNZXQgamUgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiUG/EjWV0IG5lbsOtIHBsYXRuw70uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJQb8SNZXQgamUgcG92aW5uw70uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiDDumxvxb5pxaF0aSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IHrDoXpuYW3FryBqZSAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbcOhbG7DrSBwb8SNZXQgesOhem5hbcWvIGplIHBvdmlubsO9LiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IGplIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtcGF0aCI6IkNlc3RhIGsgw7psb8W+acWhdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJDZXN0YSBrIMO6bG/FvmnFoXRpIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCDDumxvxb5pxaF0xJsiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IlNvdWJvciIsIm1lbW9yeS1zdG9yYWdlIjoiUGFtxJvFpSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamUgcG92aW5uw70uIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBvcnQgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltw6FsbsOtIMSNw61zbG8gcG9ydHUgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbcOhbG7DrSDEjcOtc2xvIHBvcnR1IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBuZW7DrSBwbGF0bsO9LiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGplIHBvdmlubsO9LiIsdGlkeToiVXNwb8WZw6FkYXQiLCJ0aWR5LXRpcCI6IlVzcG/FmcOhZGF0IEpTT04ga29uZmlndXJhY2kiLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJLb25maWd1cmFjZSB7e3R5cGVOYW1lfX0ga29uZWt0b3J1IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBDQSBicsOhbnkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBrbGllbnRhIGJyw6FueSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiQ2VzdGEgayBwcml2w6F0bsOtbXUga2zDrcSNaSBicsOhbnkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlDFmWVwbm91dCBkbyByZcW+aW11IGNlbMOpIG9icmF6b3ZreSIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiSlNPTioga29uZmlndXJhY2UiLCJ1cGRhdGUtY29uZmlnIjoiUMWZaWRhdC9lZGl0b3ZhdCBKU09OIGtvbmZpZ3VyYWNpIn0sVW89eyJhZGQtZW50cnkiOiJUaWxmw7hqIGtvbmZpZ3VyYXRpb24iLCJjb25uZWN0b3ItYWRkIjoiVGlsZsO4aiBueSBzdGlrZm9yYmluZGVsc2UiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkFrdGl2w6lyIHN0aWtmb3JiaW5kZWxzZSIsImNvbm5lY3Rvci1uYW1lIjoiTmF2biBww6Ugc3Rpa2ZvcmJpbmRlbHNlIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJOYXZuIHDDpSBzdGlrZm9yYmluZGVsc2UgZXIgcMOla3LDpnZldC4iLCJjb25uZWN0b3ItdHlwZSI6IlN0aWtmb3JiaW5kZWxzZXN0eXBlIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTdGlrZm9yYmluZGVsc2VzdHlwZSBlciBww6VrcsOmdmV0LiIsY29ubmVjdG9yczoiS29uZmlndXJhdGlvbiBhZiBzdGlrZm9yYmluZGVsc2VyIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiT3ByZXQgZW4gbnkgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiIixkZWxldGU6IlNsZXQga29uZmlndXJhdGlvbiIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGtvbmZpZ3VyYXRpb25zZmlsIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJFbmhlZCBtZWQgc2FtbWUgbmF2biBmaW5kZXMgYWxsZXJlZGUuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheS1uYXZuIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheS1uYXZuIGVyIHDDpWtyw6Z2ZXQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkta29uZmlndXJhdGlvbmVuIGJsZXYgZ2VtdC4iLCJqc29uLXBhcnNlIjoiSWtrZSBneWxkaWcgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmVsdGV0IG3DpSBpa2tlIHbDpnJlIHRvbXQuIiwibm8tY29ubmVjdG9ycyI6IkluZ2VuIHN0aWtmb3JiaW5kZWxzZXIiLCJuby1kYXRhIjoiSW5nZW4ga29uZmlndXJhdGlvbmVyIiwibm8tZ2F0ZXdheS1mb3VuZCI6IkluZ2VuIGdhdGV3YXkgZnVuZGV0LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIiLCJwYXRoLWxvZ3MiOiJTdGkgdGlsIGxvZ2ZpbGVyIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiU3RpIGVyIHDDpWtyw6Z2ZXQuIixyZW1vdGU6IkZqZXJua29uZmlndXJhdGlvbiIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nZsO4cmluZ3NuaXZlYXUiLCJyZW1vdmUtZW50cnkiOiJGamVybiBrb25maWd1cmF0aW9uIiwic2F2ZS10aXAiOiJHZW0ga29uZmlndXJhdGlvbnNmaWwiLCJzZWN1cml0eS10eXBlIjoiU2lra2VyaGVkc3R5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBZGdhbmdzdG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiTGFncmluZyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGZpbCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrcy4gYW50YWwgZmlsZXIiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW4uIGFudGFsIGVyIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IkFudGFsIGVyIGlra2UgZ3lsZGlndC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6IkFudGFsIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGxhZ3JpbmciLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbi4gYW50YWwgcG9zdGVyIGVyIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYWtzLiBhbnRhbCBwb3N0ZXIgZXIgcMOla3LDpnZldC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3MuIGFudGFsIHBha2tlc3TDuHJyZWxzZSBmb3IgYmVnaXZlbmhlZCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbi4gYW50YWwgZXIgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrcy4gYW50YWwgcGFra2VzdMO4cnJlbHNlIGZvciBiZWdpdmVuaGVkIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1wYXRoIjoiTGFncmluZ3NzdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJMYWdyaW5nc3N0aSBlciBww6VrcsOmdmV0LiIsInN0b3JhZ2UtdHlwZSI6IkxhZ3JpbmdzdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiTGFncmluZyBhZiBmaWx0ZXIiLCJtZW1vcnktc3RvcmFnZSI6IkxhZ3JpbmcgYWYgaHVrb21tZWxzZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZC12w6ZydCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJWw6ZydCBlciBww6VrcsOmdmV0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZC1wb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzLiBwb3J0bnVtbWVyIGVyIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluLiBwb3J0bnVtbWVyIGVyIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBlciBpa2tlIGd5bGRpZy4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBlciBww6VrcsOmdmV0LiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBrb25maWcuIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiIiLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwgQ0EtY2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwga2xpZW50Y2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiU3RpIHRpbCBwcml2YXQgbsO4Z2xlIHDDpSBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJTa2lmdCB0aWwgZnVsZCBza8Omcm0iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiVGlsZsO4ai9vcGRhdGVyIGtvbmZpZ3VyYXRpb24gSlNPTiJ9LF9vPXsiYWRkLWVudHJ5IjoiQcOxYWRpciBjb25maWd1cmFjacOzbiIsYWR2YW5jZWQ6IkF2YW56YWRvIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiUHJvYmFuZG8gYWN0aXZpZGFkIGRlIGRpc3Bvc2l0aXZvIixjb21tYW5kOiJDb21hbmRvcyBEb2NrZXIiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiU2UgaGFuIGNvcGlhZG8gbG9zIGNvbWFuZG9zIGFsIHBvcnRhcGFwZWxlcyIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhY2nDs24iLCJjb25uZWN0b3ItYWRkIjoiQcOxYWRpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tYnJlIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBub21icmUgY29uZWN0b3IuIiwiY29ubmVjdG9yLXR5cGUiOiJUaXBvIGNvbmVjdG9yIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aXBvIGNvbmVjdG9yLiIsY29ubmVjdG9yczoiQ29uZWN0b3JlcyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29uZmlndXJhY2nDs24gZGUgY29uZWN0b3JlcyIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOb21icmUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUaXBvIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJFc3RhZG8iLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY2Npb25lcyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiQ2xhdmUiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc2UiLCJycGMtY29tbWFuZC1zZW5kIjoiRW52aWFyIiwicnBjLWNvbW1hbmQtcmVzdWx0IjoiUmVzdWx0YWRvIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiJFZGl0YXIgcGFyYW1ldHJvcyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkNvbmZpZ3VyYWNpw7NuIEdlbmVyYWwiLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhciB1biBnYXRld2F5IG51ZXZvIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJDcmVhciB1biBudWV2byBnYXRld2F5IGNvbiBlbCBub21icmU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkhvcmEgZGUgY3JlYWNpw7NuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6IkxhcyBjb25maWd1cmFjaW9uZXMgc2UgYm9ycmFyw6FuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJTw7NsbyBlcyBwb3NpYmxlIGRlc2FjdGl2YXIgbGEgY29uZmlndXJhY2nDs24gcmVtb3RhLCBzaSBoYXkgYWNjZXNvIGbDrXNpY28gYWwgZ2F0ZXdheS4gU2UgYm9ycmFyw6FuIHRvZGFzIGxhcyBjb25maWd1cmFjaW9uZXMgcHJldmlhcy48YnI+PGJyPiBcblBhcmEgZGVzYWN0aXZhciBsYSBjb25maWd1cmFjacOzbiwgaW50cm9kdWNlIGVsIG5vbWJyZSBkZWwgZ2F0ZXdheSBhcXXDrSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6Ik5vbWJyZSBHYXRld2F5IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGdhdGV3YXkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IkRlc2FjdGl2YXIiLGRlbGV0ZToiQm9ycmFyIGNvbmZpZ3VyYWNpw7NuIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FyZ2FyIGZpY2hlcm8gZGUgY29uZmlndXJhY2nDs24iLCJkcm9wLWZpbGUiOiJBcnJhc3RyYSB1biBmaWNoZXJvIG8iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IllhIGV4aXN0ZSB1biBkaXNwb3NpdGl2byBjb24gZWwgbWlzbW8gbm9tYnJlLiIsImdhdGV3YXktbmFtZSI6Ik5vbWJyZSBkZSBHYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdW4gbm9tYnJlIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7NuIGRlIGdhdGV3YXkgZ3JhYmFkYSBzYXRpc2ZhY3RvcmlhbWVudGUuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaW1lb3V0IEtlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgVGltZW91dCBLZWVwIGFsaXZlIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiRWwgdmFsb3Igbm8gZXMgdsOhbGlkbyIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGtlZXAgYWxpdmUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6IkVsIHZhbG9yIGtlZXAgYWxpdmUgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6IlRpZW1wbyBtw61uaW1vIGVudHJlIHBpbmdzIChlbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aWVtcG8gbcOtbmltbyBlbnRyZSBwaW5ncyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiRWwgdmFsb3IgZGUgdGllbXBvIG3DrW5pbW8gZW50cmUgcGluZ3Mgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DrW5pbW8gc2luIGRhdG9zIChlbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGludGVydmFsbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGludGVydmFsbyBubyBlcyB2w6FsaWRvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DoXhpbW8gc2luIGRhdG9zIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgaW50ZXJ2YWxvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJFbCB2YWxvciBkZSBpbnRlcnZhbG8gbm8gZXMgdsOhbGlkbyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJQZXJpb2RvIGRlIGNvbnRyb2wgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlbCBwZXJpb2RvIG5vIGVzIHbDoWxpZG8iLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcyI6IlRpbWVvdXQgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGltZW91dCBkZSBpbmFjdGl2aWRhZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGluYWN0aXZpZGFkIG5vIGVzIHbDoWxpZG8iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6FsaWRvLiIsImpzb24tcmVxdWlyZWQiOiJFbCBjYW1wbyBubyBwdWVkZSBlc3RhciB2YWPDrW8uIixsb2dzOntsb2dzOiJSZWdpc3Ryb3MiLGRheXM6ImTDrWFzIixob3VyczoiaG9yYXMiLG1pbnV0ZXM6Im1pbnV0b3MiLHNlY29uZHM6InNlZ3VuZG9zIiwiZGF0ZS1mb3JtYXQiOiJGb3JtYXRvIGRlIGZlY2hhIiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBmb3JtYXRvIGRlIGZlY2hhIiwibG9nLWZvcm1hdCI6IkZvcm1hdG8gZGUgcmVnaXN0cm8iLCJsb2ctdHlwZSI6IlRpcG8gZGUgcmVnaXN0cm8iLCJsb2ctZm9ybWF0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGlwbyBkZSByZWdpc3RybyIscmVtb3RlOiJSZWdpc3RybyByZW1vdG8iLCJyZW1vdGUtbG9ncyI6IlJlZ2lzdHJvIHJlbW90byIsbG9jYWw6IlJlZ2lzdHJvIGxvY2FsIixsZXZlbDoiTml2ZWwgZGUgcmVnaXN0cm8iLCJmaWxlLXBhdGgiOiJSdXRhIGRlIGZpY2hlcm8iLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBydXRhIGRlIGZpY2hlcm8iLCJzYXZpbmctcGVyaW9kIjoiUGVyaW9kbyBkZSBndWFyZGFkbyBkZSByZWdpc3Ryb3MiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gbm8gcHVlZGUgc2VyIG1lbm9yIHF1ZSAxIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHBlcmlvZG8gZGUgZ3VhcmRhZG8iLCJiYWNrdXAtY291bnQiOiJOw7ptZXJvIGRlIGJhY2t1cHMiLCJiYWNrdXAtY291bnQtbWluIjoiRWwgbsO6bWVybyBkZSBiYWNrdXBzIG5vIHB1ZWRlIHNlciBtZW5vciBxdWUgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgYmFja3VwcyJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiVGllbXBvIGRlIGVzcGVyYSwgZW52w61vIGRlIHBhcXVldGVzIChlbiBtcykiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGllbXBvIGRlIGVzcGVyYSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoiRWwgdGllbXBvIGRlIGVzcGVyYSBubyBwdWVkZSBzZXIgbWVub3IgcXVlIDAiLCJuby1jb25uZWN0b3JzIjoiTm8gaGF5IGNvbmVjdG9yZXMiLCJuby1kYXRhIjoiTm8gaGF5IGNvbmZpZ3VyYWNpb25lcyIsIm5vLWdhdGV3YXktZm91bmQiOiJObyBzZSBoYSBlbmNvbnRyYWRvIG5pbmfDum4gZ2F0ZXdheS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiICd7e2l0ZW19fScgbm8gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJSdXRhIGEgbG9zIGFyY2hpdm9zIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlJ1dGEgcmVxdWVyaWRhLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiUGVybWl0aXIgS2VlcCBhbGl2ZSBzaSBsbGFtYWRhcyIscmVtb3RlOiJDb25maWd1cmFjacOzbiByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik5pdmVsIGRlIGxvZ2dpbmciLCJyZW1vdmUtZW50cnkiOiJCb3JyYXIgY29uZmlndXJhY2nDs24iLCJyZW1vdGUtc2hlbGwiOiJDb25zb2xhIHJlbW90YSIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiQ29uZmlndXJhY2nDs24gcmVtb3RhIixvdGhlcjoib3Ryb3MiLCJzYXZlLXRpcCI6IkdyYWJhciBmaWNoZXJvIGRlIGNvbmZpZ3VyYWNpw7NuIiwic2VjdXJpdHktdHlwZSI6IlRpcG8gZGUgc2VndXJpZGFkIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVMOza2VuIGRlIGFjY2VzbyIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXN1YXJpbyB5IGNvbnRyYXNlw7FhIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBUw7NrZW4gZGUgYWNjZXNvIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgQ2xhdmUgcHJpdmFkYSJ9LCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZWwgc2Vydmlkb3IiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiRXN0YWTDrXN0aWNhIixzdGF0aXN0aWNzOiJFc3RhZMOtc3RpY2FzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjoiTm8gaGF5IGVzdGFkw61zdGljYXMiLGNvbW1hbmRzOiJDb21hbmRvcyIsInNlbmQtcGVyaW9kIjoiUGVyaW9kbyBkZSBlbnbDrW8gZGUgZXN0YWTDrXN0aWNhcyAoZW4gc2VndW5kb3MpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIGRlIGVudsOtbyIsInNlbmQtcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gZGUgZW52w61vIG5vIHB1ZWRlIHNlciBtZW5vciBkZSA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJFbCBwZXJpb2RvIGRlIGVudsOtbyBubyBlcyB2w6FsaWRvIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiUmV2aXNhciBjb25maWd1cmFjacOzbiBkZSBjb25lY3RvcmVzIChlbiBzZWd1bmRvcykiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB1biB2YWxvciIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuIjoiTGEgY29uZmlndXJhY2nDs24gbm8gZXMgdsOhbGlkYSIsYWRkOiJBw7FhZGlyIGNvbWFuZG8iLHRpbWVvdXQ6IlRpbWVvdXQiLCJ0aW1lb3V0LW1zIjoiVGltZW91dCAoZW4gbXMpIiwidGltZW91dC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHRpbWVvdXQiLCJ0aW1lb3V0LW1pbiI6IkVsIHRpbWVvdXQgbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJFbCB0aW1lb3V0IG5vIGVzIHbDoWxpZG8iLCJhdHRyaWJ1dGUtbmFtZSI6Ik5vbWJyZSBkZSBhdHJpYnV0byIsImF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGF0cmlidXRvIixjb21tYW5kOiJDb21hbmRvIiwiY29tbWFuZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGNvbWFuZG8iLHJlbW92ZToiQm9ycmFyIGNvbWFuZG8ifSxzdG9yYWdlOiJHcmFiYWNpw7NuIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTsO6bWVybyBtw6F4aW1vIGRlIHJlZ2lzdHJvcyBlbiBmaWNoZXJvIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZmljaGVyb3MiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6FsaWRvLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTcOheGltbyBkZSByZWdpc3Ryb3MgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltbyBlcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiTGVlciBuw7ptZXJvIGRlIGVudHJhZGFzIGVuIGFsbWFjw6luIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgZW50cmFkYXMgZXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBuw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiUnV0YSBkZSBjYXJwZXRhIGRlIGRhdG9zIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcnV0YS4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWHDsW8gbcOheGltbyBkZSBldmVudG9zIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiRWwgbsO6bWVybyBtw61uaW1vIGVzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8uIiwic3RvcmFnZS1wYXRoIjoiUnV0YSBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHJ1dGEgZGUgYWxtYWPDqW4uIiwic3RvcmFnZS10eXBlIjoiVGlwbyBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gZmljaGVybyIsIm1lbW9yeS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gbWVtb3JpYSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiSG9zdCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQdWVydG8gVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkVsIHB1ZXJ0byBtw6F4aW1vIGVzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiRWwgcHVlcnRvIG3DrW5pbW8gZXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQdWVydG8gbm8gdsOhbGlkby4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcHVlcnRvLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDs24gY29uZWN0b3Ige3t0eXBlTmFtZX19IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIENBIGVuIGVsIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIGNsaWVudGUgZW4gZWwgZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6IkNvbXByb2JhY2nDs24gZGUgVFRMIGRlIG1lbnNhamVzIGVuIGhvcmFzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiQ2FtcG8gcmVxdWVyaWRvLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJFbCBtw61uaW1vIGVzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwgKFRpbWUgdG8gbGl2ZSkgZGUgbWVuc2FnZXMgZW4gZMOtYXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIFRUTCBkZSBtZW5zYWplcy4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvLiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IkVsIHJhbmdvIGRlIHZhbG9yZXMgZXMgZGVzZGUgMCBhIDEiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlJ1dGEgYSBsYSBjbGF2ZSBwcml2YWRhIGVuIGVsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7NuIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkHDsWFkaXIvYWN0dWFsaXphciBjb25maWd1cmFjacOzbiBKU09OIixoaW50czp7InJlbW90ZS1jb25maWd1cmF0aW9uIjoiSGFiaWxpdGEgbGEgYWRtaW5pc3RyYWNpw7NuIHkgY29uZmlndXJhY2nDs24gcmVtb3RhIGRlbCBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiSGFiaWxpdGEgZWwgY29udHJvbCByZW1vdG8gZGVsIHNpc3RlbWEgb3BlcmF0aXZvIGRlbCBnYXRld2F5IGRlc2RlIGVsIHdpZGdldCB0ZXJtaW5hbCByZW1vdG8iLGhvc3Q6Ikhvc3RuYW1lIG8gZGlyZWNjacOzbiBJUCBkZWwgc2Vydmlkb3IgVGhpbmdzYm9hcmQiLHBvcnQ6IlB1ZXJ0byBkZWwgc2VydmljaW8gTVFUVCBlbiBlbCBzZXJ2aWRvciBUaGluZ3Nib2FyZCIsdG9rZW46IkFjY2VzcyB0b2tlbiBwYXJhIGVsIGdhdGV3YXkiLCJjbGllbnQtaWQiOiJJRCBkZSBjbGllbnRlIE1RVFQgcGFyYSBlbCBnYXRld2F5Iix1c2VybmFtZToiVXN1YXJpbyBNUVRUIHBhcmEgZWwgZ2F0ZXdheSIscGFzc3dvcmQ6IkNvbnRyYXNlw7FhIE1RVFQgcGFyYSBlbCBnYXRld2F5IiwiY2EtY2VydCI6IlJ1dGEgYWwgZmljaGVybyBkZWwgY2VydGlmaWNhZG8gQ0EiLCJkYXRlLWZvcm0iOiJGb3JtYXRvIGRlIGZlY2hhIGVuIGxvcyBtZW5zYWplcyBkZSByZWdpc3RybyIsImRhdGEtZm9sZGVyIjoiUnV0YSBhIGxhIGNhcnBldGEgcXVlIGNvbnRlbmRyw6EgbG9zIGRhdG9zIChSZWxhdGl2YSBvIGFic29sdXRhKSIsImxvZy1mb3JtYXQiOiJGb3JtYXRvIGRlIG1lbnNhamVzIGVuIHJlZ2lzdHJvIiwicmVtb3RlLWxvZyI6IkhhYmlsaXRhIGVsIHJlZ2lzdHJvIHJlbW90byB5IGxhIHBvc3RlcmlvciBsZWN0dXJhIGRlc2RlIGVsIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJTaSBlbCBjb250YWplIGRlIGNvcGlhcyBkZSBzZWd1cmlkYWQgZXMgbWF5b3IgcXVlIDAsIGN1YW5kbyBzZSByZWFsaWNlIHVuYSByZW5vdmFjacOzbiwgbm8gc2UgY29uc2VydmFuIG3DoXMgcXVlIGxvcyBhcmNoaXZvcyBkZSByZWN1ZW50byBkZSBjb3BpYXMgZGUgc2VndXJpZGFkLCBsb3MgbcOhcyBhbnTDrWd1b3Mgc2UgZWxpbWluYXLDoW4iLHN0b3JhZ2U6IlByb3ZlZSBsYSBjb25maWd1cmFjacOzbiBwYXJhIGVsIGdyYWJhZG8gZGUgZGF0b3MgZW50cmFudGVzIGFudGVzIGRlIHF1ZSBzZSBlbnbDrWVuIGEgbGEgcGxhdGFmb3JtYSIsIm1heC1maWxlLWNvdW50IjoiTsO6bWVybyBtw6F4aW1vIGRlIGZpY2hlcm9zIHF1ZSBzZSBjcmVhcsOhbiIsIm1heC1yZWFkLWNvdW50IjoiTsO6bWVvIG3DoXhpbW8gZGUgbWVuc2FqZXMgYSBvYnRlbmVyIGRlc2RlIGVsIGRpc2NvIHkgZW52aWFkb3MgYSBsYSBwbGF0YWZvcm1hIiwibWF4LXJlY29yZHMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIHF1ZSBzZSBndWFyZGFyw6FuIGVuIHVuIHNvbG8gZmljaGVybyIsInJlYWQtcmVjb3JkLWNvdW50IjoiTsO6bWVybyBkZSBtZW5zYWdlcyBhIG9idGVuZXIgZGVzZGUgZWwgYWxtYWNlbmFtaWVudG8geSBlbnZpYWRvcyBhIGxhIHBsYXRhZm9ybWEiLCJtYXgtcmVjb3Jkcy1jb3VudCI6Ik7Dum1lcm8gbcOheGltbyBkZSBkYXRvcyBlbiBhbG1hY2VuYW1pZW50byBhbnRlcyBkZSBlbnZpYXIgYSBsYSBwbGF0YWZvcm1hIiwidHRsLWNoZWNrLWhvdXIiOiJDb24gcXXDqSBmcmVjdWVuY2lhIGVsIGdhdGV3YXkgY29tcHJvYmFyw6Egc2kgbG9zIGRhdG9zIGVzdMOhbiBvYnNvbGV0b3MiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTsO6bWVybyBtw6F4aW1vIGRlIGTDrWFzIHBhcmEgbGEgcmV0ZW5jacOzbiBkZSBkYXRvcyBlbiBlbCBhbG1hY8OpbiIsY29tbWFuZHM6IkNvbWFuZG9zIHBhcmEgcmVjb2dlciBlc3RhZMOtc3RpY2FzIGFkaWNpb25hbGVzIixhdHRyaWJ1dGU6IkNsYXZlIGRlIHRlbGVtZXRyw61hIHBhcmEgZXN0YWTDrXN0aWNhcyIsdGltZW91dDoiVGltZW91dCBwYXJhIGxhIGVqZWN1Y2nDs24gZGUgY29tYW5kb3MiLGNvbW1hbmQ6IkVsIHJlc3VsdGFkbyBkZSBsYSBlamVjdWNpw7NuIGRlbCBjb21hbmRvLCBzZSB1c2Fyw6EgY29tbyB2YWxvciBwYXJhIGxhIHRlbGVtZXRyw61hIiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiSGFiaWxpdGEgbGEgbW9uaXRvcml6YWNpw7NuIGRlIGNhZGEgdW5vIGRlIGxvcyBkaXNwb3NpdGl2b3MgY29uZWN0YWRvcyIsImluYWN0aXZpdHktdGltZW91dCI6IlRpZW1wbyB0cmFzIHF1ZSBlbCBnYXRld2F5IGRlc2NvbmVjdGFyw6EgZWwgZGlzcG9zaXRpdm8iLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZG8gZGUgbW9uaXRvcml6YWNpw7NuIGRlIGFjdGl2aWRhZCBlbiBlbCBkaXNwb3NpdGl2byIsIm1pbmltYWwtcGFjay1kZWxheSI6IlRpZW1wbyBkZSBlc3BlcmEgZW50cmUgZW52w61vIGRlIHBhcXVldGVzIGRlIG1lbnNhamVzIChVbiB2YWxvciBtdXkgYmFqbywgcmVzdWx0YXLDoSBlbiB1biBhdW1lbnRvIGRlIHVzbyBkZSBsYSBDUFUgZW4gZWwgZ2F0ZXdheSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGVuIGxvcyBtZW5zYWplcyBNUVRUICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZSByZWQgZW4gZWwgY3VhbCBlbCBzZXJ2aWRvciBHUlBDIGVzY3VjaGFyw6EgY29uZXhpb25lcyBlbnRyYW50ZXMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaWVtcG8gbcOheGltbywgZWwgY3VhbCBlbCBzZXJ2aWRvciBlc3BlcmFyYSB1biBwaW5nIGtlZXBhbGl2ZSBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYWNpw7NuIGVudHJlIGRvcyBwaW5ncyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbGxhbWFkYSBSUEMgYWN0aXZhLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik3DrW5pbW8gdGllbXBvIHF1ZSBlbCBzZXJ2aWRvciBkZWJlIGVzcGVyYXIgZW50cmUgZW52w61vcyBkZSBtZW5zYWplcyBkZSBwaW5nIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTsO6bWVybyBtw6F4aW1vIGRlIHBpbmdzIGtlZXBhbGl2ZSBxdWUgZWwgc2Vydmlkb3IgcHVlZGUgZW52aWFyIHNpbiByZWNpYmlyIG5pbmfDum4gZGF0byBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNw61uaW1vIHRpZW1wbyBxdWUgZWwgc2Vydmlkb3IgZGViZSBlc3BlcmFyIGVudHJlIGVudsOtb3MgZGUgcGluZyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbmluZ8O6biBkYXRvIGVuIGVudsOtbyBvIHJlY2VwY2nDs24uIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJQZXJtaXRpciBhbCBzZXJ2aWRvciBtYW50ZW5lciBsYSBjb25leGnDs24gR1JQQyBhYmllcnRhLCBjdWFuZG8gbm8gaGF5YSBsbGFtYWRhcyBSUEMgYWN0aXZhcy4ifX0sSG89eyJhZGQtZW50cnkiOiLshKTsoJUg7LaU6rCAIiwiY29ubmVjdG9yLWFkZCI6IuyDiOuhnOyatCDsl7DqsrDsnpAg7LaU6rCAIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJFbmFibGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUiOiJDb25uZWN0b3IgbmFtZSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiQ29ubmVjdG9yIG5hbWUgaXMgcmVxdWlyZWQuIiwiY29ubmVjdG9yLXR5cGUiOiJDb25uZWN0b3IgdHlwZSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiQ29ubmVjdG9yIHR5cGUgaXMgcmVxdWlyZWQuIixjb25uZWN0b3JzOiJDb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhdGUgYSBuZXcgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQXJlIHlvdSBzdXJlIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBnYXRld2F5IHdpdGggbmFtZTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiU3RvcmFnZSIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBmaWxlIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbXVtIG51bWJlciBvZiBmaWxlcyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJOdW1iZXIgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWF4aW11bSByZWNvcmRzIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZCBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlRoaW5nc0JvYXJkIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29ubmVjdG9yIHt7dHlwZU5hbWV9fSBjb25maWd1cmF0aW9uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYXRoIHRvIHByaXZhdGUga2V5IG9uIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlRvZ2dsZSBmdWxsc2NyZWVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aW9uIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkZC91cGRhdGUgY29uZmlndXJhdGlvbiBKU09OIn0sem89eyJhZGQtZW50cnkiOiJBZGQgY29uZmlndXJhdGlvbiIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJycGMtY29tbWFuZC1zZW5kIjoiU2VuZCIsInJwYy1jb21tYW5kLXJlc3VsdCI6IlJlc3VsdCIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiSW4gb3JkZXIgdG8gcnVuIFRoaW5nc0JvYXJkIElvVCBnYXRld2F5IGluIGRvY2tlciB3aXRoIGNyZWRlbnRpYWxzIGZvciB0aGlzIGRldmljZSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkNyZWF0ZSBhIG5ldyBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJBcmUgeW91IHN1cmUgeW91IHdhbnQgY3JlYXRlIGEgbmV3IGdhdGV3YXkgd2l0aCBuYW1lOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkRldmljZSB3aXRoIHNhbWUgbmFtZSBpcyBhbHJlYWR5IGV4aXN0cy4iLCJnYXRld2F5LW5hbWUiOiJHYXRld2F5IG5hbWUiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJHYXRld2F5IG5hbWUgaXMgcmVxdWlyZWQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHkgc2F2ZWQuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJLZWVwIGFsaXZlIHRpbWVvdXQgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIG5vdCB2YWxpZCIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IktlZXAgYWxpdmUgaXMgcmVxdWlyZWQiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiS2VlcCBhbGl2ZSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm4iOiJLZWVwIGFsaXZlIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgKGluIG1zKSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluIHBpbmcgaW50ZXJ2YWwgd2l0aG91dCBkYXRhIChpbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyBub3QgdmFsaWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1taW4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJqc29uLXBhcnNlIjoiTm90IHZhbGlkIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IkZpZWxkIGNhbm5vdCBiZSBlbXB0eS4iLGxvZ3M6e2xvZ3M6IkxvZ3MiLGRheXM6ImRheXMiLGhvdXJzOiJob3VycyIsbWludXRlczoibWludXRlcyIsc2Vjb25kczoic2Vjb25kcyIsImRhdGUtZm9ybWF0IjoiRGF0ZSBmb3JtYXQiLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IkRhdGUgZm9ybWF0IHJlcXVpcmVkIiwibG9nLWZvcm1hdCI6IkxvZyBmb3JtYXQiLCJsb2ctdHlwZSI6IkxvZyB0eXBlIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6IkxvZyBmb3JtYXQgcmVxdWlyZWQiLHJlbW90ZToiUmVtb3RlIGxvZ2dpbmciLCJyZW1vdGUtbG9ncyI6IlJlbW90ZSBsb2dzIixsb2NhbDoiTG9jYWwgbG9nZ2luZyIsbGV2ZWw6IkxvZyBsZXZlbCIsImZpbGUtcGF0aCI6IkZpbGUgcGF0aCIsImZpbGUtcGF0aC1yZXF1aXJlZCI6IkZpbGUgcGF0aCByZXF1aXJlZCIsInNhdmluZy1wZXJpb2QiOiJMb2cgc2F2aW5nIHBlcmlvZCIsInNhdmluZy1wZXJpb2QtbWluIjoiTG9nIHNhdmluZyBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiJMb2cgc2F2aW5nIHBlcmlvZCByZXF1aXJlZCIsImJhY2t1cC1jb3VudCI6IkJhY2t1cCBjb3VudCIsImJhY2t1cC1jb3VudC1taW4iOiJCYWNrdXAgY291bnQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IkJhY2t1cCBjb3VudCByZXF1aXJlZCJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiTWluIHBhY2sgc2VuZCBkZWxheSAoaW4gbXMpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgaXMgcmVxdWlyZWQiLCJtaW4tcGFjay1zZW5kLWRlbGF5LW1pbiI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMCIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJLZWVwIGFsaXZlIHBlcm1pdCB3aXRob3V0IGNhbGxzIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtc2hlbGwiOiJSZW1vdGUgc2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IlJlbW90ZSBDb25maWd1cmF0aW9uIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTdG9yYWdlIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIGZpbGUiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBudW1iZXIgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWJlciBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbXVtIHJlY29yZHMgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudCI6IlJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudCI6Ik1heCByZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiTWF4IFJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6IkRhdGEgZm9sZGVyIHBhdGgiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiJEYXRhIGZvbGRlciBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQgaG9zdCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYXhpbXVtIHBvcnQgbnVtYmVyIGlzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluaW11bSBwb3J0IG51bWJlciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgaXMgbm90IHZhbGlkLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGlzIHJlcXVpcmVkLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBjb25maWcgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsaGludHM6eyJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIFRoaW5nc0JvYXJkIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIGZvbGRlciwgdGhhdCB3aWxsIGNvbnRhaW5zIGRhdGEgKFJlbGF0aXZlIG9yIEFic29sdXRlKSIsImxvZy1mb3JtYXQiOiJMb2cgbWVzc2FnZSBmb3JtYXQiLCJyZW1vdGUtbG9nIjoiRW5hYmxlcyByZW1vdGUgbG9nZ2luZyBhbmQgbG9ncyByZWFkaW5nIGZyb20gdGhlIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJJZiBiYWNrdXAgY291bnQgaXMgPiAwLCB3aGVuIGEgcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cCBjb3VudCBmaWxlcyBhcmUga2VwdCAtIHRoZSBvbGRlc3Qgb25lcyBhcmUgZGVsZXRlZCIsc3RvcmFnZToiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3Igc2F2aW5nIGluY29taW5nIGRhdGEgYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIHBsYXRmb3JtIiwibWF4LWZpbGUtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGZpbGUgdGhhdCB3aWxsIGJlIGNyZWF0ZWQiLCJtYXgtcmVhZC1jb3VudCI6IkNvdW50IG9mIG1lc3NhZ2VzIHRvIGdldCBmcm9tIHN0b3JhZ2UgYW5kIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJtYXgtcmVjb3JkcyI6Ik1heGltdW0gY291bnQgb2YgcmVjb3JkcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIG9uZSBmaWxlIiwicmVhZC1yZWNvcmQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGRhdGEgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZCB0byBUaGluZ3NCb2FyZCIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgR2F0ZXdheSBjaGVjayBkYXRhIGZvciBvYnNvbGVzY2VuY2UiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTWF4aW11bSBkYXlzIHRoYXQgc3RvcmFnZSB3aWxsIHNhdmUgZGF0YSIsY29tbWFuZHM6IkNvbW1hbmRzIGZvciBjb2xsZWN0aW5nIGFkZGl0aW9uYWwgc3RhdGlzdGljIixhdHRyaWJ1dGU6IlN0YXRpc3RpYyB0ZWxlbWV0cnkga2V5Iix0aW1lb3V0OiJUaW1lb3V0IGZvciBjb21tYW5kIGV4ZWN1dGluZyIsY29tbWFuZDoiVGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24sIHdpbGwgYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRlbGVtZXRyeSIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6IkVuYWJsZXMgbW9uaXRvciB0aGUgYWN0aXZpdHkgb2YgZWFjaCBjb25uZWN0ZWQgZGV2aWNlIiwiaW5hY3Rpdml0eS10aW1lb3V0IjoiVGltZSBhZnRlciB3aG9zZSB0aGUgZ2F0ZXdheSB3aWxsIGRpc2Nvbm5lY3QgZGV2aWNlIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiJQZXJpb2RpY2l0eSBvZiBkZXZpY2UgYWN0aXZpdHkgY2hlY2siLCJtaW5pbWFsLXBhY2stZGVsYXkiOiJEZWxheSBiZXR3ZWVuIHNlbmRpbmcgcGFja3Mgb2YgbWVzc2FnZXMgKERlY3JlYXNpbmcgdGhpcyBzZXR0aW5nIHJlc3VsdHMgaW4gaW5jcmVhc2VkIENQVSB1c2FnZSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGluIE1RVFQgbWVzc2FnaW5nICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6Ik5ldHdvcmsgcG9ydCBvbiB3aGljaCBHUlBDIHNlcnZlciB3aWxsIGxpc3RlbiBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJNYXhpbXVtIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBmb3IgYSBrZWVwYWxpdmUgcGluZyByZXNwb25zZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLWtlZXAtYWxpdmUiOiJEdXJhdGlvbiBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIFJQQyBjYWxsLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXhpbXVtIG51bWJlciBvZiBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB0aGF0IHRoZSBzZXJ2ZXIgY2FuIHNlbmQgd2l0aG91dCByZWNlaXZpbmcgYW55IGRhdGEgYmVmb3JlIGl0IGNvbnNpZGVycyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgYmVpbmcgc2VudCBvciByZWNlaXZlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IkFsbG93IHNlcnZlciB0byBrZWVwIHRoZSBHUlBDIGNvbm5lY3Rpb24gYWxpdmUgZXZlbiB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgUlBDIGNhbGxzLiJ9fSxXbz17ImFkZC1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB0b2V2b2VnZW4iLCJjb25uZWN0b3ItYWRkIjoiTmlldXdlIGNvbm5lY3RvciB0b2V2b2VnZW4iLCJjb25uZWN0b3ItZW5hYmxlZCI6IkNvbm5lY3RvciBpbnNjaGFrZWxlbiIsImNvbm5lY3Rvci1uYW1lIjoiTmFhbSB2YW4gZGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJEZSBuYWFtIHZhbiBkZSBjb25uZWN0b3IgaXMgdmVyZWlzdC4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cGUgYWFuc2x1aXRpbmciLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkhldCB0eXBlIGNvbm5lY3RvciBpcyB2ZXJlaXN0LiIsY29ubmVjdG9yczoiQ29uZmlndXJhdGllIHZhbiBjb25uZWN0b3JlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkVlbiBuaWV1d2UgZ2F0ZXdheSBtYWtlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiV2VldCB1IHpla2VyIGRhdCB1IGVlbiBuaWV1d2UgZ2F0ZXdheSB3aWx0IG1ha2VuIG1ldCBkZSBuYWFtOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiQ29uZmlndXJhdGllIHZlcndpamRlcmVuIiwiZG93bmxvYWQtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBkb3dubG9hZGVuIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2UgbWV0IGRlemVsZmRlIG5hYW0gYmVzdGFhdCBhbC4iLCJnYXRld2F5LW5hbWUiOiJOYWFtIHZhbiBkZSBnYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiRGUgbmFhbSB2YW4gZGUgZ2F0ZXdheSBpcyB2ZXJlaXN0LiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5Y29uZmlndXJhdGllIHN1Y2Nlc3ZvbCBvcGdlc2xhZ2VuLiIsImpzb24tcGFyc2UiOiJPbmdlbGRpZ2UgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiSGV0IHZlbGQgbWFnIG5pZXQgbGVlZyB6aWpuLiIsIm5vLWNvbm5lY3RvcnMiOiJHZWVuIGNvbm5lY3RvcmVuIiwibm8tZGF0YSI6IkdlZW4gY29uZmlndXJhdGllcyIsIm5vLWdhdGV3YXktZm91bmQiOiJHZWVuIGdhdGV3YXkgZ2V2b25kZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6Iid7e2l0ZW19fScgbmlldCBnZXZvbmRlbi4iLCJwYXRoLWxvZ3MiOiJQYWQgbmFhciBsb2diZXN0YW5kZW4iLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYWQgaXMgdmVyZWlzdC4iLHJlbW90ZToiQ29uZmlndXJhdGllIG9wIGFmc3RhbmQiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJlZ2lzdHJhdGllIG5pdmVhdSIsInJlbW92ZS1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB2ZXJ3aWpkZXJlbiIsInNhdmUtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBvcHNsYWFuIiwic2VjdXJpdHktdHlwZSI6IlNvb3J0IGJldmVpbGlnaW5nIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9lZ2FuZyB0b3QgdG9rZW4iLHRsczoiVExTIChUTFMpIn0sc3RvcmFnZToiT3BzbGFnIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSBhYW50YWwgcmVjb3JkcyBpbiBiZXN0YW5kIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbWFhbCBhYW50YWwgYmVzdGFuZGVuIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBhYW50YWwgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtbWVyIGlzIHZlcmVpc3QuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gYWFudGFsIHJlY29yZHMgaW4gb3BzbGFnIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIGFhbnRhbCByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbWFsZSByZWNvcmRzIHppam4gdmVyZWlzdC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1heGltYWxlIHBha2tldGdyb290dGUgdm9vciBldmVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIGFhbnRhbCBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1tZXIgaXMgbmlldCBnZWxkaWcuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJEZSBtYXhpbWFsZSBwYWtrZXRncm9vdHRlIHZhbiBoZXQgZXZlbnQgaXMgdmVyZWlzdC4iLCJzdG9yYWdlLXBhdGgiOiJPcHNsYWcgcGFkIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiT3BzbGFncGFkIGlzIHZlcmVpc3QuIiwic3RvcmFnZS10eXBlIjoiVHlwZSBvcHNsYWciLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik9wc2xhZyB2YW4gYmVzdGFuZGVuIiwibWVtb3J5LXN0b3JhZ2UiOiJHZWhldWdlbiBvcHNsYWcifSx0aGluZ3Nib2FyZDoiRGluZ2VuIEJvcmQiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQtZ2FzdGhlZXIiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiU2VydmVyIGhvc3QgaXMgdmVyZWlzdC4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmQtcG9vcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkhldCBtYXhpbWFsZSBwb29ydG51bW1lciBpcyA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6IkhldCBtaW5pbWFsZSBwb29ydG51bW1lciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvb3J0IGlzIG5pZXQgZ2VsZGlnLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb29ydCBpcyB2ZXJlaXN0LiIsdGlkeToiT3JkZWxpamsiLCJ0aWR5LXRpcCI6Ik9wZ2VydWltZGUgY29uZmlndXJhdGllIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmF0aWUgdmFuIGNvbm5lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhZCBuYWFyIENBLWNlcnRpZmljYWF0IG9wIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYWQgbmFhciBjbGllbnRjZXJ0aWZpY2FhdCBvcCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYWQgbmFhciBwcml2w6lzbGV1dGVsIG9wIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlZvbGxlZGlnIHNjaGVybSBpbi0gZW4gdWl0c2NoYWtlbGVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aWUgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQ29uZmlndXJhdGllIEpTT04gdG9ldm9lZ2VuL2JpandlcmtlbiJ9LGpvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2rEmSIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3dlIHrFgsSFY3plIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJXxYLEhWN6IHrFgsSFY3plIiwiY29ubmVjdG9yLW5hbWUiOiJOYXp3YSB6xYLEhWN6YSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTmF6d2EgesWCxIVjemEgamVzdCB3eW1hZ2FuYS4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cCB6xYLEhWN6YSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiVHlwIHrFgsSFY3phIGplc3Qgd3ltYWdhbnkuIixjb25uZWN0b3JzOiJLb25maWd1cmFjamEgesWCxIVjenkiLCJjb25uZWN0b3JzLWNvbmZpZyI6IkNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOYW1lIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoiVHlwZSIsImNvbm5lY3RvcnMtdGFibGUtc3RhdHVzIjoiU3RhdHVzIiwiY29ubmVjdG9ycy10YWJsZS1hY3Rpb25zIjoiQWN0aW9ucyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiS2V5IiwiY29ubmVjdG9ycy10YWJsZS1jbGFzcyI6IkNsYXNzIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXN1bHQiLCJycGMtY29tbWFuZC1lZGl0LXBhcmFtcyI6IkVkaXQgcGFyYW1ldGVycyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkdlbmVyYWwgQ29uZmlndXJhdGlvbiIsImRvY2tlci1sYWJlbCI6IkluIG9yZGVyIHRvIHJ1biBUaGluZ3NCb2FyZCBJb1QgZ2F0ZXdheSBpbiBkb2NrZXIgd2l0aCBjcmVkZW50aWFscyBmb3IgdGhpcyBkZXZpY2UgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcy4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJVdHfDs3J6IG5vd3kgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQ3p5IG5hIHBld25vIGNoY2VzeiB1dHdvcnp5xIcgbm93eSBnYXRld2F5IG8gbmF6d2llOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IlVzdcWEIGtvbmZpZ3VyYWNqxJkiLCJkb3dubG9hZC10aXAiOiJQb2JpZXJ6IHBsaWsga29uZmlndXJhY3lqbnkiLCJkcm9wLWZpbGUiOiJEcm9wIGZpbGUgaGVyZSBvciIsZ2F0ZXdheToiV2VqxZtjaWUiLCJnYXRld2F5LWV4aXN0cyI6IlVyesSFZHplbmllIG8gdGVqIHNhbWVqIG5hendpZSBqdcW8IGlzdG5pZWplLiIsImdhdGV3YXktbmFtZSI6Ik5hendhIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOYXp3YSBHYXRld2F5J2EgamVzdCB3eW1hZ2FuYS4iLCJnYXRld2F5LXNhdmVkIjoiS29uZmlndXJhY2phIEdhdGV3ZXknYSB6b3N0YcWCYSBwb215xZtsbmllIHphcGlzYW5hLiIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCAoaW4gc2VjKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoiSW5hY3Rpdml0eSB0aW1lb3V0IChpbiBzZWMpIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgcmVxdWlyZWQiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgbm90IHZhbGlkIiwianNvbi1wYXJzZSI6Ik5pZXByYXdpZMWCb3d5IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmllIG1vxbxlIGJ5xIcgcHVzdGUuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDAiLCJuby1jb25uZWN0b3JzIjoiQnJhayB6xYLEhWN6eSIsIm5vLWRhdGEiOiJCcmFrIGtvbmZpZ3VyYWNqaSIsIm5vLWdhdGV3YXktZm91bmQiOiJOaWUgem5hbGV6aW9ubyBnYXRld2F5J2EuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pZSB6bmFsZXppb25vLiIsInBhdGgtbG9ncyI6IsWaY2llxbxrYSBkbyBwbGlrw7N3IGR6aWVubmlrYSIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IsWaY2llxbxrYSBqZXN0IHd5bWFnYW5hLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiS2VlcCBhbGl2ZSBwZXJtaXQgd2l0aG91dCBjYWxscyIscmVtb3RlOiJaZGFsbmEga29uZmlndXJhY2phIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJQb3ppb20gbG9nb3dhbmlhIiwicmVtb3ZlLWVudHJ5IjoiVXN1xYQga29uZmlndXJhY2rEmSIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLG90aGVyOiJPdGhlciIsInNhdmUtdGlwIjoiWmFwaXN6IHBsaWsga29uZmlndXJhY3lqbnkiLCJzZWN1cml0eS10eXBlIjoiUm9kemFqIHphYmV6cGllY3plbmlhIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9rZW4gZG9zdMSZcHUiLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTa8WCYWRvd2FuaWUiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYWtzeW1hbG5hIGxpY3piYSByZWtvcmTDs3cgdyBwbGlrdSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc3ltYWxuYSBsaWN6YmEgcGxpa8OzdyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWVyIGplc3Qgd3ltYWdhbnkuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyB3IHBhbWnEmWNpIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbWFsbmEgbGljemJhIHJla29yZMOzdyB0byAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWVyIGplc3QgbmllcHJhd2lkxYJvd3kuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiJSZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJNYXggcmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6Ik1heCBSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgiOiJEYXRhIGZvbGRlciBwYXRoIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiRGF0YSBmb2xkZXIgcGF0aCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCBqZXN0IHd5bWFnYW55LiIsInN0b3JhZ2UtcGF0aCI6IsWaY2llxbxrYSBwcnplY2hvd3l3YW5pYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IsWaY2llxbxrYSBkbyBwcnplY2hvd3l3YW5pYSBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCBza8WCYWRvd2FuaWEiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik5vxZtuaWsgZGFueWNoIiwibWVtb3J5LXN0b3JhZ2UiOiJQcnplY2hvd3l3YW5pZSBwYW1pxJljaSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiR29zcG9kYXJ6IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamVzdCB3eW1hZ2FueS4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4IjoiTWFrc3ltYWxueSBudW1lciBwb3J0dSB0byA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltYWxueSBudW1lciBwb3J0dSB0byAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBqZXN0IHd5bWFnYW55LiIsdGlkeToiVXBvcnrEhWRrdWoiLCJ0aWR5LXRpcCI6IlVwb3J6xIVka293YW5hIGtvbmZpZ3VyYWNqYSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiWsWCxIVjemUge3t0eXBlTmFtZX19IGtvbmZpZ3VyYWNqYSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoixZpjaWXFvGthIGRvIGNlcnR5ZmlrYXR1IENBIG5hIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiLFmmNpZcW8a2EgZG8gY2VydHlmaWthdHUga2xpZW50YSBuYSBnYXRld2F5IiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoiTWVzc2FnZXMgVFRMIGluIGRheXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLW1pbiI6Ik1pbiBudW1iZXIgaXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtcXR0LXFvcyI6IlFvUyIsIm1xdHQtcW9zLXJlcXVpcmVkIjoiUW9TIGlzIHJlcXVpcmVkIiwibXF0dC1xb3MtcmFuZ2UiOiJRb1MgdmFsdWVzIHJhbmdlIGlzIGZyb20gMCB0byAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLFmmNpZcW8a2EgZG8ga2x1Y3phIHByeXdhdG5lZ28gbmEgYnJhbWNlIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJQcnplxYLEhWN6IHRyeWIgcGXFgm5vZWtyYW5vd3kiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNqYSBKU09OKiIsInVwZGF0ZS1jb25maWciOiJEb2Rhai96YWt0dWFsaXp1aiBrb25maWd1cmFjasSZIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiJFbmFibGVzIHJlbW90ZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiRW5hYmxlcyByZW1vdGUgY29udHJvbCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIHRoZSBnYXRld2F5IGZyb20gdGhlIFJlbW90ZSBTaGVsbCB3aWRnZXQiLGhvc3Q6Ikhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgVGhpbmdzQm9hcmQgc2VydmVyIixwb3J0OiJQb3J0IG9mIE1RVFQgc2VydmljZSBvbiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHRva2VuOiJBY2Nlc3MgdG9rZW4gZm9yIHRoZSBnYXRld2F5IGZyb20gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2xpZW50LWlkIjoiTVFUVCBjbGllbnQgaWQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIix1c2VybmFtZToiTVFUVCB1c2VybmFtZSBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBhc3N3b3JkOiJNUVRUIHBhc3N3b3JkIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIsImNhLWNlcnQiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUiLCJkYXRlLWZvcm0iOiJEYXRlIGZvcm1hdCBpbiBsb2cgbWVzc2FnZSIsImRhdGEtZm9sZGVyIjoiUGF0aCB0byBmb2xkZXIsIHRoYXQgd2lsbCBjb250YWlucyBkYXRhIChSZWxhdGl2ZSBvciBBYnNvbHV0ZSkiLCJsb2ctZm9ybWF0IjoiTG9nIG1lc3NhZ2UgZm9ybWF0IiwicmVtb3RlLWxvZyI6IkVuYWJsZXMgcmVtb3RlIGxvZ2dpbmcgYW5kIGxvZ3MgcmVhZGluZyBmcm9tIHRoZSBnYXRld2F5IiwiYmFja3VwLWNvdW50IjoiSWYgYmFja3VwIGNvdW50IGlzID4gMCwgd2hlbiBhIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXAgY291bnQgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQiLHN0b3JhZ2U6IlByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gZm9yIHNhdmluZyBpbmNvbWluZyBkYXRhIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBwbGF0Zm9ybSIsIm1heC1maWxlLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBmaWxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiJNYXhpbXVtIGNvdW50IG9mIHJlY29yZHMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiBvbmUgZmlsZSIsInJlYWQtcmVjb3JkLWNvdW50IjoiQ291bnQgb2YgbWVzc2FnZXMgdG8gZ2V0IGZyb20gc3RvcmFnZSBhbmQgc2VuZCB0byBUaGluZ3NCb2FyZCIsIm1heC1yZWNvcmRzLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBkYXRhIGluIHN0b3JhZ2UgYmVmb3JlIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJ0dGwtY2hlY2staG91ciI6IkhvdyBvZnRlbiB3aWxsIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gZGF5cyB0aGF0IHN0b3JhZ2Ugd2lsbCBzYXZlIGRhdGEiLGNvbW1hbmRzOiJDb21tYW5kcyBmb3IgY29sbGVjdGluZyBhZGRpdGlvbmFsIHN0YXRpc3RpYyIsYXR0cmlidXRlOiJTdGF0aXN0aWMgdGVsZW1ldHJ5IGtleSIsdGltZW91dDoiVGltZW91dCBmb3IgY29tbWFuZCBleGVjdXRpbmciLGNvbW1hbmQ6IlRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLCB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciB0ZWxlbWV0cnkiLCJjaGVjay1kZXZpY2UtYWN0aXZpdHkiOiJFbmFibGVzIG1vbml0b3IgdGhlIGFjdGl2aXR5IG9mIGVhY2ggY29ubmVjdGVkIGRldmljZSIsImluYWN0aXZpdHktdGltZW91dCI6IlRpbWUgYWZ0ZXIgd2hvc2UgdGhlIGdhdGV3YXkgd2lsbCBkaXNjb25uZWN0IGRldmljZSIsImluYWN0aXZpdHktcGVyaW9kIjoiUGVyaW9kaWNpdHkgb2YgZGV2aWNlIGFjdGl2aXR5IGNoZWNrIiwibWluaW1hbC1wYWNrLWRlbGF5IjoiRGVsYXkgYmV0d2VlbiBzZW5kaW5nIHBhY2tzIG9mIG1lc3NhZ2VzIChEZWNyZWFzaW5nIHRoaXMgc2V0dGluZyByZXN1bHRzIGluIGluY3JlYXNlZCBDUFUgdXNhZ2UpIixxb3M6IlF1YWxpdHkgb2YgU2VydmljZSBpbiBNUVRUIG1lc3NhZ2luZyAoMCAtIGF0IG1vc3Qgb25jZSwgMSAtIGF0IGxlYXN0IG9uY2UpIiwic2VydmVyLXBvcnQiOiJOZXR3b3JrIHBvcnQgb24gd2hpY2ggR1JQQyBzZXJ2ZXIgd2lsbCBsaXN0ZW4gZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLiIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiTWF4aW11bSB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgZm9yIGEga2VlcGFsaXZlIHBpbmcgcmVzcG9uc2UgYmVmb3JlIGNvbnNpZGVyaW5nIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYXRpb24gYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBSUEMgY2FsbC4iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4aW11bSBudW1iZXIgb2Yga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgdGhhdCB0aGUgc2VydmVyIGNhbiBzZW5kIHdpdGhvdXQgcmVjZWl2aW5nIGFueSBkYXRhIGJlZm9yZSBpdCBjb25zaWRlcnMgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGJlaW5nIHNlbnQgb3IgcmVjZWl2ZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJBbGxvdyBzZXJ2ZXIgdG8ga2VlcCB0aGUgR1JQQyBjb25uZWN0aW9uIGFsaXZlIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIFJQQyBjYWxscy4ifX0sS289eyJhZGQtZW50cnkiOiJBZGljaW9uYXIgY29uZmlndXJhw6fDo28iLCJjb25uZWN0b3ItYWRkIjoiQWRpY2lvbmFyIG5vdm8gY29uZWN0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkhhYmlsaXRhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tZSBkbyBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTyBub21lIGRvIGNvbmVjdG9yIMOpIG9icmlnYXTDs3Jpby4iLCJjb25uZWN0b3ItdHlwZSI6IlRpcG8gZGUgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6Ik8gdGlwbyBkZSBjb25lY3RvciDDqSBvYnJpZ2F0w7NyaW8uIixjb25uZWN0b3JzOiJDb25maWd1cmHDp8OjbyBkZSBjb25lY3RvcmVzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JpYXIgdW0gbm92byBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJUZW0gY2VydGV6YSBkZSBxdWUgZGVzZWphIGNyaWFyIHVtIG5vdm8gZ2F0ZXdheSBjb20gbyBub21lOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiRXhjbHVpciBjb25maWd1cmHDp8OjbyIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGRlIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkrDoSBleGlzdGUgdW0gZGlzcG9zaXRpdm8gY29tIG8gbWVzbW8gbm9tZS4iLCJnYXRld2F5LW5hbWUiOiJOb21lIGRvIGdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJPIG5vbWUgZG8gZ2F0ZXdheSDDqSBvYnJpZ2F0w7NyaW8uIiwiZ2F0ZXdheS1zYXZlZCI6IkEgY29uZmlndXJhw6fDo28gZG8gZ2F0ZXdheSBmb2kgc2FsdmEgY29ycmV0YW1lbnRlLiIsImpzb24tcGFyc2UiOiJKU09OIGludsOhbGlkby4iLCJqc29uLXJlcXVpcmVkIjoiTyBjYW1wbyBuw6NvIHBvZGUgZXN0YXIgZW0gYnJhbmNvLiIsIm5vLWNvbm5lY3RvcnMiOiJTZW0gY29uZWN0b3JlcyIsIm5vLWRhdGEiOiJTZW0gY29uZmlndXJhw6fDtWVzIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5lbmh1bSBnYXRld2F5IGVuY29udHJhZG8uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG7Do28gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJDYW1pbmhvIHBhcmEgYXJxdWl2b3MgZGUgbG9nIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiTyBjYW1pbmhvIMOpIG9icmlnYXTDs3JpbyIscmVtb3RlOiJDb25maWd1cmHDp8OjbyByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik7DrXZlbCBkZSByZWdpc3RybyBlbSBsb2ciLCJyZW1vdmUtZW50cnkiOiJSZW1vdmVyIGNvbmZpZ3VyYcOnw6NvIiwic2F2ZS10aXAiOiJTYWx2YXIgYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyIsInNlY3VyaXR5LXR5cGUiOiJUaXBvIGRlIHNlZ3VyYW7Dp2EiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkZSBBY2Vzc28iLHRsczoiVExTIn0sc3RvcmFnZToiQXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJxdWl2byIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTsO6bWVybyBtw6F4aW1vIGRlIGFycXVpdm9zIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gw6kgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik8gbsO6bWVybyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gZGUgcmVnaXN0cm9zIMOpIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTyBuw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIMOpIG9icmlnYXTDs3Jpby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIMOpIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik8gbsO6bWVybyBuw6NvIMOpIHbDoWxpZG8uIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJPIHRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1wYXRoIjoiQ2FtaW5obyBkZSBhcm1hemVuYW1lbnRvIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiTyBjYW1pbmhvIGRlIGFybWF6ZW5hbWVudG8gw6kgb2JyaWdhdMOzcmlvLiIsInN0b3JhZ2UtdHlwZSI6IlRpcG8gZGUgYXJtYXplbmFtZW50byIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQXJtYXplbmFtZW50byBkZSBhcnF1aXZvIiwibWVtb3J5LXN0b3JhZ2UiOiJBcm1hemVuYW1lbnRvIGRlIG1lbcOzcmlhIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikhvc3QgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiTyBob3N0IMOpIG9icmlnYXTDs3Jpby4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydGEgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik8gbsO6bWVybyBtw6F4aW1vIGRlIHBvcnRhcyDDqSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIGRlIHBvcnRhcyDDqSAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IkEgcG9ydGEgbsOjbyDDqSB2w6FsaWRhLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJBIHBvcnRhIMOpIG9icmlnYXTDs3JpYS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IkNvbmZpZyBUaWR5IEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmHDp8OjbyBkbyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IkNhbWluaG8gcGFyYSBjZXJ0aWZpY2FkbyBkZSBBdXRvcmlkYWRlIGRlIENlcnRpZmljYcOnw6NvIG5vIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDYW1pbmhvIHBhcmEgY2VydGlmaWNhZG8gZGUgY2xpZW50ZSBubyBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJDYW1pbmhvIHBhcmEgY2hhdmUgcHJpdmFkYSBubyBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJBbHRlcm5hciB0ZWxhIGludGVpcmEiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYcOnw6NvIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkaWNpb25hci9hdHVhbGl6YXIgY29uZmlndXJhw6fDo28gZGUgSlNPTiJ9LCRvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2lqbyIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3YgcHJpa2xqdcSNZWsiLCJjb25uZWN0b3ItZW5hYmxlZCI6Ik9tb2dvxI1pIHByaWtsanXEjWVrIiwiY29ubmVjdG9yLW5hbWUiOiJJbWUgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkltZSBwcmlrbGp1xI1rYSBqZSBvYnZlem5vLiIsImNvbm5lY3Rvci10eXBlIjoiVnJzdGEgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IlphaHRldmEgc2UgdnJzdGEgcHJpa2xqdcSNa2EuIixjb25uZWN0b3JzOiJLb25maWd1cmFjaWphIHByaWtsanXEjWtvdiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlVzdHZhcmkgbm92IHByZWhvZCIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQWxpIHN0ZSBwcmVwcmnEjWFuaSwgZGEgxb5lbGl0ZSB1c3R2YXJpdGkgbm92IHByZWhvZCB6IGltZW5vbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6Ikl6YnJpxaFpIGtvbmZpZ3VyYWNpam8iLCJkb3dubG9hZC10aXAiOiJQcmVub3Mga29uZmlndXJhY2lqc2tlIGRhdG90ZWtlIixnYXRld2F5OiJQcmVob2QiLCJnYXRld2F5LWV4aXN0cyI6Ik5hcHJhdmEgeiBpc3RpbSBpbWVub20gxb5lIG9ic3RhamEuIiwiZ2F0ZXdheS1uYW1lIjoiSW1lIHByZWhvZGEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJJbWUgcHJlaG9kYSBqZSBvYnZlem5vLiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjaWphIHByZWhvZGEgamUgdXNwZcWhbm8gc2hyYW5qZW5hLiIsImpzb24tcGFyc2UiOiJOZXZlbGphdmVuIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGplIG5lIHNtZSBiaXRpIHByYXpuby4iLCJuby1jb25uZWN0b3JzIjoiTmkgcHJpa2xqdcSNa292Iiwibm8tZGF0YSI6IkJyZXoga29uZmlndXJhY2lqIiwibm8tZ2F0ZXdheS1mb3VuZCI6IlByZWhvZCBuaSBuYWpkZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pIG1vZ2/EjWUgbmFqdGkuIiwicGF0aC1sb2dzIjoiUG90IGRvIGRuZXZuacWha2loIGRhdG90ZWsiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQb3QgamUgb2J2ZXpuYS4iLHJlbW90ZToiT2RkYWxqZW5hIGtvbmZpZ3VyYWNpamEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJhdmVuIGJlbGXFvmVuamEiLCJyZW1vdmUtZW50cnkiOiJPZHN0cmFuaSBrb25maWd1cmFjaWpvIiwic2F2ZS10aXAiOiJTaHJhbmkga29uZmlndXJhY2lqc2tvIGRhdG90ZWtvIiwic2VjdXJpdHktdHlwZSI6IlZyc3RhIHphxaHEjWl0ZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkRvc3RvcG5pIMW+ZXRvbiIsdGxzOiJUTFMifSxzdG9yYWdlOiJTaHJhbWJhIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgZGF0b3Rla2kiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik5hanZlxI1qZSDFoXRldmlsbyBkYXRvdGVrIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLFoHRldmlsa2EgamUgb2J2ZXpuYS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgcG9tbmlsbmlrdSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyB6YXBpc292IGplIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoixaB0ZXZpbGthIG5pIHZlbGphdm5hLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJaYWh0ZXZhbiBqZSBuYWp2ZcSNIHphcGlzb3YuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJOYWp2ZcSNamEgdmVsaWtvc3QgcGFrZXRhIGRvZ29ka292Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJaYWh0ZXZhbmEgamUgbmFqdmXEjWphIHZlbGlrb3N0IHBha2V0YSBkb2dvZGtvdi4iLCJzdG9yYWdlLXBhdGgiOiJQb3QgcG9tbmlsbmlrYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlphaHRldmFuYSBqZSBwb3QgZG8gcG9tbmlsbmlrYS4iLCJzdG9yYWdlLXR5cGUiOiJWcnN0YSBwb21uaWxuaWthIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJTaHJhbWJhIGRhdG90ZWsiLCJtZW1vcnktc3RvcmFnZSI6IlNwb21pbiBwb21uaWxuaWthIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikdvc3RpdGVsaiBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJQb3RyZWJlbiBqZSBnb3N0aXRlbGouIiwidGhpbmdzYm9hcmQtcG9ydCI6IlZyYXRhIFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJOYWp2ZcSNamEgxaF0ZXZpbGthIHZyYXQgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJOYWptYW5qxaFhIMWhdGV2aWxrYSB2cmF0IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiVnJhdGEgbmlzbyB2ZWxqYXZuYS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG90cmVibmEgc28gdnJhdGEuIix0aWR5OiJVcmVqZW5vIiwidGlkeS10aXAiOiJVcmVqZW5hIGtvbmZpZ3VyYWNpamEgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IktvbmZpZ3VyYWNpamEga29uZWt0b3JqYSB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBvdCBkbyBwb3RyZGlsYSBDQSBuYSBwcmVob2R1IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUG90IGRvIHBvdHJkaWxhIHN0cmFua2UgbmEgcHJlaG9kdSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUG90IGRvIHphc2VibmVnYSBrbGp1xI1hIG5hIHByZWhvZHUiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlByZWtsb3AgbmEgY2Vsb3phc2xvbnNraSBuYcSNaW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNpamEgSlNPTiAqIiwidXBkYXRlLWNvbmZpZyI6IkRvZGFqIC8gcG9zb2RvYmkga29uZmlndXJhY2lqbyBKU09OIn0sWW89eyJhZGQtZW50cnkiOiJZYXDEsWxhbmTEsXJtYSBla2xlIiwiY29ubmVjdG9yLWFkZCI6IlllbmkgYmHEn2xhecSxY8SxIGVrbGUiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkJhxJ9sYXnEsWPEsXnEsSBldGtpbmxlxZ90aXIiLCJjb25uZWN0b3ItbmFtZSI6IkJhxJ9sYXnEsWPEsSBhZMSxIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJCYcSfbGF5xLFjxLEgYWTEsSBnZXJla2xpLiIsImNvbm5lY3Rvci10eXBlIjoiQmHEn2xhecSxY8SxIHRpcGkiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkJhxJ9sYXnEsWPEsSB0w7xyw7wgZ2VyZWtsaS4iLGNvbm5lY3RvcnM6IkJhxJ9sYXnEsWPEsWxhcsSxbiB5YXDEsWxhbmTEsXJtYXPEsSIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVyIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiIne3tnYXRld2F5TmFtZX19JyBhZMSxbmRhIHllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo/IixkZWxldGU6IllhcMSxbGFuZMSxcm1hecSxIHNpbCIsImRvd25sb2FkLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGluZGlyaW4iLGdhdGV3YXk6IkHEnyBnZcOnaWRpIiwiZ2F0ZXdheS1leGlzdHMiOiJBeW7EsSBhZGEgc2FoaXAgY2loYXogemF0ZW4gdmFyLiIsImdhdGV3YXktbmFtZSI6IkHEnyBnZcOnaWRpIGFkxLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJBxJ8gZ2XDp2lkaSBhZMSxIGdlcmVrbGkuIiwiZ2F0ZXdheS1zYXZlZCI6IkHEnyBnZcOnaWRpIHlhcMSxbGFuZMSxcm1hc8SxIGJhxZ9hcsSxeWxhIGtheWRlZGlsZGkuIiwianNvbi1wYXJzZSI6Ikdlw6dlcmxpIGJpciBKU09OIGRlxJ9pbC4iLCJqc29uLXJlcXVpcmVkIjoiQWxhbiBib8WfIG9sYW1hei4iLCJuby1jb25uZWN0b3JzIjoiQmHEn2xhecSxY8SxIHlvayIsIm5vLWRhdGEiOiJZYXDEsWxhbmTEsXJtYSB5b2siLCJuby1nYXRld2F5LWZvdW5kIjoiQcSfIGdlw6dpZGkgYnVsdW5hbWFkxLEuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIGJ1bHVuYW1hZMSxLiIsInBhdGgtbG9ncyI6IkxvZyBkb3N5YWxhcsSxIHlvbHUiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJMb2cgZG9zeWFsYXLEsSBkaXppbmkgZ2VyZWtsaS4iLHJlbW90ZToiVXpha3RhbiB5YXDEsWxhbmTEsXJtYSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nbGFtYSBzZXZpeWVzaSIsInJlbW92ZS1lbnRyeSI6IllhcMSxbGFuZMSxcm1hecSxIGthbGTEsXIiLCJzYXZlLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGtheWRldCIsInNlY3VyaXR5LXR5cGUiOiJHw7x2ZW5saWsgdMO8csO8Iiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiQWNjZXNzIFRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IkRlcG9sYW1hIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiRG9zeWFkYWtpIG1ha3NpbXVtIGthecSxdCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc2ltdW0gZG9zeWEgc2F5xLFzxLEiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIHNhecSxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJTYXnEsSBnZcOnZXJsaSBkZcSfaWwuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJTYXnEsSBnZXJla2xpLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJEZXBvZGFraSBtYWtzaW11bSBrYXnEsXQiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0ga2F5xLF0IHNhecSxc8SxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlNhecSxIGdlw6dlcmxpIGRlxJ9pbC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWFrc2ltdW0ga2F5xLF0IGdlcmVrbGkuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYWtzaW11bSBldGtpbmxpayBwYWtldGkgYm95dXR1Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW11bSBzYXnEsSAxJ2Rpci4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiU2F5xLEgZ2XDp2VybGkgZGXEn2lsLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrc2ltdW0gZXRraW5saWsgcGFrZXRpIGJveXV0dSBnZXJla2xpLiIsInN0b3JhZ2UtcGF0aCI6IkRlcG9sYW1hIHlvbHUiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJEZXBvbGFtYSB5b2x1IGdlcmVrbGkuIiwic3RvcmFnZS10eXBlIjoiRGVwb2xhbWEgdMO8csO8Iiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJEb3N5YSBkZXBvbGFtYSIsIm1lbW9yeS1zdG9yYWdlIjoiQmVsbGVrIGRlcG9sYW1hIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJkIGhvc3QiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiSG9zdCBnZXJla2xpLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzaW11bSBwb3J0IG51bWFyYXPEsSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltdW0gcG9ydCBudW1hcmFzxLEgMSdkaXIuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBnZcOnZXJsaSBkZcSfaWwuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgZ2VyZWtsaS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IlRpZHkgY29uZmlnIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25uZWN0b3Ige3t0eXBlTmFtZX19IGNvbmZpZ3VyYXRpb24iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgb24gZ2F0ZXdheSIsInRvZ2dsZS1mdWxsc2NyZWVuIjoiVG9nZ2xlIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWRkL3VwZGF0ZSBjb25maWd1cmF0aW9uIEpTT04ifSxRbz17ImFkZC1lbnRyeSI6Iua3u+WKoOmFjee9riIsYWR2YW5jZWQ6IumrmOe6pyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IuajgOafpeiuvuWkh+a0u+WKqCIsY29tbWFuZDoiRG9ja2Vy5ZG95LukIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlcuWRveS7pOW3suWkjeWItuWIsOWJqui0tOadvyIsY29uZmlndXJhdGlvbjoi6YWN572uIiwiY29ubmVjdG9yLWFkZCI6Iua3u+WKoOi/nuaOpeWZqCIsImNvbm5lY3Rvci1lbmFibGVkIjoi5ZCv55So6L+e5o6l5ZmoIiwiY29ubmVjdG9yLW5hbWUiOiLov57mjqXlmajlkI3np7AiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Iui/nuaOpeWZqOWQjeensOW/heWhq+OAgiIsImNvbm5lY3Rvci10eXBlIjoi6L+e5o6l5Zmo57G75Z6LIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiLov57mjqXlmajnsbvlnovlv4XloavjgIIiLGNvbm5lY3RvcnM6Iui/nuaOpeWZqOmFjee9riIsImNvbm5lY3RvcnMtY29uZmlnIjoi6L+e5o6l5Zmo6YWN572uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoi5bey5ZCv55SoIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi5ZCN56ewIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoi57G75Z6LIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiLnirbmgIEiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiLmk43kvZwiLCJjb25uZWN0b3JzLXRhYmxlLWtleSI6IumUriIsImNvbm5lY3RvcnMtdGFibGUtY2xhc3MiOiLnsbsiLCJycGMtY29tbWFuZC1zZW5kIjoi5Y+R6YCBIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi57uT5p6cIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLnvJbovpHlj4LmlbAiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLpgJrnlKjphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLliJvlu7rnvZHlhbMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuehruWumuimgeWIm+W7uuWQjeS4uiAne3tnYXRld2F5TmFtZX19JyDnmoTmlrDnvZHlhbPvvJ8iLCJjcmVhdGVkLXRpbWUiOiLliJvlu7rml7bpl7QiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoi6YWN572u5bCG6KKr5Yig6ZmkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiLlj6rmnInlr7nnvZHlhbPov5vooYzniannkIborr/pl67ml7bvvIzmiY3mnInlj6/og73lhbPpl63ov5znqIvphY3nva7jgILmiYDmnInlhYjliY3nmoTphY3nva7pg73lsIbooqvliKDpmaTjgII8YnI+PGJyPlxu6KaB5YWz6Zet6YWN572u77yM6K+35Zyo5LiL6Z2i6L6T5YWl572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0Ijoi572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoi572R5YWz5ZCN56ew5piv5b+F6ZyA55qEIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLlhbPpl60iLGRlbGV0ZToi5Yig6Zmk6YWN572uIiwiZG93bmxvYWQtdGlwIjoi5LiL6L296YWN572uIiwiZHJvcC1maWxlIjoi5bCG5paH5Lu25ouW5pS+5Yiw5q2k5aSE5oiWIixnYXRld2F5OiLnvZHlhbMiLCJnYXRld2F5LWV4aXN0cyI6IuWQjOWQjeiuvuWkh+W3suWtmOWcqOOAgiIsImdhdGV3YXktbmFtZSI6Iue9keWFs+WQjeensCIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Iue9keWFs+WQjeensOW/heWhq+OAgiIsImdhdGV3YXktc2F2ZWQiOiLlt7LmiJDlip/kv53lrZjnvZHlhbPphY3nva7jgIIiLGdycGM6IkdSUEMiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuS/neaMgei/nuaOpei2heaXtu+8iOavq+enku+8iSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoi6ZyA6KaB5L+d5oyB6L+e5o6l6LaF5pe2IiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi5L+d5oyB6L+e5o6l6LaF5pe25LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXBhdHRlcm4iOiLkv53mjIHov57mjqXotoXml7bml6DmlYgiLCJncnBjLWtlZXAtYWxpdmUiOiLkv53mjIHov57mjqXvvIjmr6vnp5LvvIkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLpnIDopoHkv53mjIHov57mjqUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoi5L+d5oyB6L+e5o6l5LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoi5L+d5oyB6L+e5o6l5peg5pWIIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi5pyA5bCPUGluZ+mXtOmalO+8iOavq+enku+8iSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6IumcgOimgeacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoi5pyA5bCPUGluZ+mXtOmalOS4jeiDveWwj+S6jjEiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVybiI6IuacgOWwj1Bpbmfpl7TpmpTml6DmlYgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6IuaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpTvvIjmr6vnp5LvvIkiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5LiN6IO95bCP5LqOMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5peg5pWIIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbAiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsOS4jeiDveWwj+S6jjEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6IuaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbDml6DmlYgiLCJpbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzIjoi5LiN5rS76LeD5qOA5p+l5pyf77yI56eS77yJIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IumcgOimgeS4jea0u+i3g+ajgOafpeacnyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoi5LiN5rS76LeD5qOA5p+l5pyf5LiN6IO95bCP5LqOMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+ajgOafpeacn+aXoOaViCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi5LiN5rS76LeD6LaF5pe277yI56eS77yJIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiLpnIDopoHkuI3mtLvot4PotoXml7YiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiLkuI3mtLvot4PotoXml7bkuI3og73lsI/kuo4xIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+i2heaXtuaXoOaViCIsImpzb24tcGFyc2UiOiLml6DmlYjnmoRKU09O44CCIiwianNvbi1yZXF1aXJlZCI6IuWtl+auteS4jeiDveS4uuepuuOAgiIsbG9nczp7bG9nczoi5pel5b+XIixkYXlzOiLlpKkiLGhvdXJzOiLlsI/ml7YiLG1pbnV0ZXM6IuWIhumSnyIsc2Vjb25kczoi56eSIiwiZGF0ZS1mb3JtYXQiOiLml6XmnJ/moLzlvI8iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IumcgOimgeaXpeacn+agvOW8jyIsImxvZy1mb3JtYXQiOiLml6Xlv5fmoLzlvI8iLCJsb2ctdHlwZSI6IuaXpeW/l+exu+WeiyIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiLpnIDopoHml6Xlv5fmoLzlvI8iLHJlbW90ZToi6L+c56iL5pel5b+X6K6w5b2VIiwicmVtb3RlLWxvZ3MiOiLov5znqIvml6Xlv5ciLGxvY2FsOiLmnKzlnLDml6Xlv5forrDlvZUiLGxldmVsOiLml6Xlv5fnuqfliKsiLCJmaWxlLXBhdGgiOiLmlofku7bot6/lvoQiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHmlofku7bot6/lvoQiLCJzYXZpbmctcGVyaW9kIjoi5pel5b+X5L+d5a2Y5pyf6ZmQIiwic2F2aW5nLXBlcmlvZC1taW4iOiLml6Xlv5fkv53lrZjmnJ/pmZDkuI3og73lsI/kuo4xIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IumcgOimgeaXpeW/l+S/neWtmOacn+mZkCIsImJhY2t1cC1jb3VudCI6IuWkh+S7veaVsOmHjyIsImJhY2t1cC1jb3VudC1taW4iOiLlpIfku73mlbDph4/kuI3og73lsI/kuo4xIiwiYmFja3VwLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB5aSH5Lu95pWw6YePIn0sIm1pbi1wYWNrLXNlbmQtZGVsYXkiOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/vvIjmr6vnp5LvvIkiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoi5pyA5bCP5YyF5Y+R6YCB5bu26L+f5piv5b+F6ZyA55qEIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/kuI3og73lsI/kuo4wIiwibm8tY29ubmVjdG9ycyI6IuaXoOi/nuaOpeWZqCIsIm5vLWRhdGEiOiLmsqHmnInphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw572R5YWz44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IuacquaJvuWIsCAne3tpdGVtfX0nIOOAgiIsInBhdGgtbG9ncyI6IuaXpeW/l+aWh+S7tueahOi3r+W+hCIsInBhdGgtbG9ncy1yZXF1aXJlZCI6Iui3r+W+hOaYr+W/hemcgOeahOOAgiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5L+d5oyB6L+e5o6l6K645Y+v77yM5peg6ZyA5ZON5bqUIixyZW1vdGU6Iui/nOeoi+mFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel5b+X6K6w5b2V57qn5YirIiwicmVtb3ZlLWVudHJ5Ijoi5Yig6Zmk6YWN572uIiwicmVtb3RlLXNoZWxsIjoi6L+c56iLU2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Iui/nOeoi+mFjee9riIsb3RoZXI6IuWFtuS7liIsInNhdmUtdGlwIjoi5L+d5a2Y6YWN572uIiwic2VjdXJpdHktdHlwZSI6IuWuieWFqOexu+WeiyIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Iuiuv+mXruS7pOeJjCIsInVzZXJuYW1lLXBhc3N3b3JkIjoi55So5oi35ZCN5ZKM5a+G56CBIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDorr/pl67ku6TniYwiLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyDnp4HpkqUifSwic2VydmVyLXBvcnQiOiLmnI3liqHlmajnq6/lj6MiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoi57uf6K6h5L+h5oGvIixzdGF0aXN0aWNzOiLnu5/orqHkv6Hmga8iLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLml6Dlj6/nlKjnu5/orqHkv6Hmga8iLGNvbW1hbmRzOiLlkb3ku6QiLCJzZW5kLXBlcmlvZCI6Iue7n+iuoeS/oeaBr+WPkemAgeWRqOacn++8iOenku+8iSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5piv5b+F6ZyA55qEIiwic2VuZC1wZXJpb2QtbWluIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5LiN6IO95bCP5LqONjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5peg5pWIIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u77yI56eS77yJIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u5piv5b+F6ZyA55qEIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IuajgOafpei/nuaOpeWZqOmFjee9ruS4jeiDveWwj+S6jjEiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVybiI6IuajgOafpei/nuaOpeWZqOmFjee9ruaXoOaViCIsYWRkOiLmt7vliqDlkb3ku6QiLHRpbWVvdXQ6Iui2heaXtuaXtumXtCIsInRpbWVvdXQtbXMiOiLotoXml7bml7bpl7TvvIjmr6vnp5LvvIkiLCJ0aW1lb3V0LXJlcXVpcmVkIjoi6LaF5pe25pe26Ze05piv5b+F6ZyA55qEIiwidGltZW91dC1taW4iOiLotoXml7bml7bpl7TkuI3og73lsI/kuo4xIiwidGltZW91dC1wYXR0ZXJuIjoi6LaF5pe25pe26Ze05peg5pWIIiwiYXR0cmlidXRlLW5hbWUiOiLlsZ7mgKflkI3np7AiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IuWxnuaAp+WQjeensOaYr+W/hemcgOeahCIsY29tbWFuZDoi5ZG95LukIiwiY29tbWFuZC1yZXF1aXJlZCI6IuWRveS7pOaYr+W/hemcgOeahCIsImNvbW1hbmQtcGF0dGVybiI6IuWRveS7pOaXoOaViCIscmVtb3ZlOiLliKDpmaTlkb3ku6QifSxzdG9yYWdlOiLlrZjlgqgiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiLmlofku7bkuK3nmoTmnIDlpKforrDlvZXmlbAiLCJzdG9yYWdlLW1heC1maWxlcyI6IuacgOWkp+aWh+S7tuaVsCIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLmlbDlrZfmmK/lv4XpnIDnmoTjgIIiLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoi5a2Y5YKo5Lit55qE5pyA5aSn6K6w5b2V5pWwIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6IuacgOWkp+iusOW9lemhueW/heWhq+OAgiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6IuacgOWwj+iusOW9leaVsOS4ujHjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiLmlbDlrZfkuI3lkIjms5XjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB6K+75Y+W6K6w5b2V5pWw44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTmnIDlpKfor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6IuaVsOWtl+S4jeWQiOazleOAgiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi5pyA5aSn6K+75Y+W6K6w5b2V5pWw5b+F6ZyA44CCIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoi5pWw5o2u5paH5Lu25aS56Lev5b6EIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoi6ZyA6KaB5pWw5o2u5paH5Lu25aS56Lev5b6E44CCIiwic3RvcmFnZS1wYWNrLXNpemUiOiLmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi5pyA5aSn5LqL5Lu25YyF5aSn5bCP5b+F5aGr44CCIiwic3RvcmFnZS1wYXRoIjoi5a2Y5YKo6Lev5b6EIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoi5a2Y5YKo6Lev5b6E5b+F5aGr44CCIiwic3RvcmFnZS10eXBlIjoi5a2Y5YKo57G75Z6LIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiLmlofku7blrZjlgqgiLCJtZW1vcnktc3RvcmFnZSI6IuWGheWtmOWtmOWCqCIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IuW4uOinhCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZOS4u+acuiIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiLkuLvmnLrlv4XloavjgIIiLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmTnq6/lj6MiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IuacgOWkp+err+WPo+WPt+S4ujY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/nq6/lj6Plj7fkuLox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi56uv5Y+j5peg5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Iuerr+WPo+W/heWhq+OAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6L+e5o6l5ZmoIHt7dHlwZU5hbWV9fSDphY3nva4iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6Iue9keWFs+S4ikNB6K+B5Lmm55qE6Lev5b6EIiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoi572R5YWz5LiK5a6i5oi356uv6K+B5Lmm55qE6Lev5b6EIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi5raI5oGvVFRM5qOA5p+l5bCP5pe25pWwIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi6ZyA6KaB5o+Q5L6b5raI5oGvVFRM5qOA5p+l5bCP5pe25pWw44CCIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoi5raI5oGvVFRM5aSp5pWwIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiLpnIDopoHmj5Dkvpvmtojmga9UVEzlpKnmlbDjgIIiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiLpnIDopoHmj5DkvptRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IlFvU+WAvOeahOiMg+WbtOaYr+S7jjDliLAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLnvZHlhbPkuIrnp4HpkqXnmoTot6/lvoQiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IuWIh+aNouWFqOWxjyIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoi6YWN572uSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoi5re75YqgL+abtOaWsOmFjee9rkpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvphY3nva7lkoznrqHnkIYiLCJyZW1vdGUtc2hlbGwiOiLpgJrov4fov5znqItTaGVsbOWwj+mDqOS7tuWQr+eUqOWvuee9keWFs+aTjeS9nOezu+e7n+eahOi/nOeoi+aOp+WItiIsaG9zdDoiVGhpbmdzQm9hcmQg5Li75py65ZCN5oiWSVDlnLDlnYAiLHBvcnQ6IlRoaW5nc0JvYXJkIE1RVFTmnI3liqHnq6/lj6MiLHRva2VuOiJUaGluZ3NCb2FyZCDnvZHlhbPorr/pl67ku6TniYwiLCJjbGllbnQtaWQiOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU5a6i5oi356uvSUQiLHVzZXJuYW1lOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU55So5oi35ZCNIixwYXNzd29yZDoiVGhpbmdzQm9hcmQg572R5YWzTVFUVOWvhueggSIsImNhLWNlcnQiOiJDQeivgeS5puaWh+S7tueahOi3r+W+hCIsImRhdGUtZm9ybSI6IuaXpeW/l+a2iOaBr+S4reeahOaXpeacn+agvOW8jyIsImRhdGEtZm9sZGVyIjoi5YyF5ZCr5pWw5o2u55qE5paH5Lu25aS555qE6Lev5b6E77yI55u45a+55oiW57ud5a+56Lev5b6E77yJIiwibG9nLWZvcm1hdCI6IuaXpeW/l+a2iOaBr+agvOW8jyIsInJlbW90ZS1sb2ciOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvml6Xlv5forrDlvZXlkozml6Xlv5for7vlj5YiLCJiYWNrdXAtY291bnQiOiLlpoLmnpzlpIfku73orqHmlbDlpKfkuo4w77yM5YiZ5Zyo5omn6KGM6L2u5o2i5pe277yM5pyA5aSa5L+d55WZ5aSH5Lu96K6h5pWw5Liq5paH5Lu2LeacgOaXp+eahOaWh+S7tuWwhuiiq+WIoOmZpCIsc3RvcmFnZToi5o+Q5L6b5bCG5pWw5o2u5Y+R6YCB5Yiw5bmz5Y+w5LmL5YmN5L+d5a2Y5Lyg5YWl5pWw5o2u55qE6YWN572uIiwibWF4LWZpbGUtY291bnQiOiLlsIbliJvlu7rnmoTmlofku7bnmoTmnIDlpKfmlbDph48iLCJtYXgtcmVhZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiLkuIDkuKrmlofku7bkuK3lrZjlgqjnmoTmnIDlpKforrDlvZXmlbAiLCJyZWFkLXJlY29yZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiLlnKjlsIbmlbDmja7lj5HpgIHliLBUaGluZ3NCb2FyZOS5i+WJje+8jOWtmOWCqOS4reeahOacgOWkp+aVsOaNruiuoeaVsCIsInR0bC1jaGVjay1ob3VyIjoi572R5YWz5aSa5LmF5qOA5p+l5LiA5qyh5pWw5o2u5piv5ZCm6L+H5pe2IiwidHRsLW1lc3NhZ2VzLWRheSI6IuWtmOWCqOWwhuS/neWtmOaVsOaNrueahOacgOWkp+WkqeaVsCIsY29tbWFuZHM6IueUqOS6juaUtumbhumZhOWKoOe7n+iuoeS/oeaBr+eahOWRveS7pCIsYXR0cmlidXRlOiLnu5/orqHpgaXmtYvplK4iLHRpbWVvdXQ6IuWRveS7pOaJp+ihjOeahOi2heaXtuaXtumXtCIsY29tbWFuZDoi5ZG95Luk5omn6KGM55qE57uT5p6c77yM5bCG55So5L2c6YGl5rWL55qE5YC8IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5Ijoi5ZCv55So55uR6KeG5q+P5Liq6L+e5o6l6K6+5aSH55qE5rS75YqoIiwiaW5hY3Rpdml0eS10aW1lb3V0Ijoi5Zyo5q2k5pe26Ze05ZCO77yM572R5YWz5bCG5pat5byA6K6+5aSH55qE6L+e5o6lIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLorr7lpIfmtLvliqjmo4Dmn6XnmoTlkajmnJ8iLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLlj5HpgIHmtojmga/ljIXkuYvpl7TnmoTlu7bov5/vvIjlh4/lsI/mraTorr7nva7kvJrlr7zoh7Tlop7liqBDUFXkvb/nlKjnjofvvIkiLHFvczoiTVFUVOa2iOaBr+S8oOmAkueahOacjeWKoei0qOmHj++8iDAt6Iez5aSa5LiA5qyh77yMMS3oh7PlsJHkuIDmrKHvvIkiLCJzZXJ2ZXItcG9ydCI6IkdSUEPmnI3liqHlmajkvqblkKzkvKDlhaXov57mjqXnmoTnvZHnu5znq6/lj6MiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuWcqOiAg+iZkei/nuaOpeatu+S6oeS5i+WJje+8jOacjeWKoeWZqOetieW+hWtlZXBhbGl2ZSBwaW5n5ZON5bqU55qE5pyA6ZW/5pe26Ze0IiwiZ3JwYy1rZWVwLWFsaXZlIjoi5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25Lik5Liq6L+e57uta2VlcGFsaXZlIHBpbmfmtojmga/kuYvpl7TnmoTmjIHnu63ml7bpl7QiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6IuWcqOayoeacieaOpeaUtuWIsOS7u+S9leaVsOaNruS5i+WJje+8jOacjeWKoeWZqOWPr+S7peWPkemAgeeahGtlZXBhbGl2ZSBwaW5n5raI5oGv55qE5pyA5aSn5pWw6YeP77yM54S25ZCO5bCG6L+e5o6l6KeG5Li65q275LqhIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiLlnKjmsqHmnInlj5HpgIHmiJbmjqXmlLbmlbDmja7ml7bvvIzmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5YWB6K645pyN5Yqh5Zmo5Zyo5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25L+d5oyBR1JQQ+i/nuaOpea0u+WKqCJ9LCJkb2NrZXItbGFiZWwiOiLkvb/nlKjku6XkuIvmjIfku6TlnKggRG9ja2VyIGNvbXBvc2Ug5Lit6L+Q6KGMIElvVCDnvZHlhbPvvIzlubbkuLrpgInlrprnmoTorr7lpIfmj5Dkvpvlh63mja4iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi5L2/55So5Lul5LiL6K+05piO5LiL6L2944CB5a6J6KOF5ZKM6K6+572uIERvY2tlciBDb21wb3NlIiwiZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlIjoi5LiL6L296YWN572u5paH5Lu2IiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLkuIvovb3mgqjnmoTnvZHlhbPnmoQgZG9ja2VyLWNvbXBvc2UueW1sIOaWh+S7tiIsImxhdW5jaC1nYXRld2F5Ijoi5ZCv5Yqo572R5YWzIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoi5Zyo5YyF5ZCrIGRvY2tlci1jb21wb3NlLnltbCDmlofku7bnmoTmlofku7blpLnkuK3vvIzkvb/nlKjku6XkuIvlkb3ku6TlnKjnu4jnq6/kuK3lkK/liqjnvZHlhbMifSxKbz17ImFkZC1lbnRyeSI6IuWinuWKoOmFjee9riIsImNvbm5lY3Rvci1hZGQiOiLlop7liqDmlrDpgKPmjqXlmagiLCJjb25uZWN0b3ItZW5hYmxlZCI6IuWVn+eUqOmAo+aOpeWZqCIsImNvbm5lY3Rvci1uYW1lIjoi6YCj5o6l5Zmo5ZCN56ixIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiLpnIDopoHpgKPmjqXlmajlkI3nqLHjgIIiLCJjb25uZWN0b3ItdHlwZSI6IumAo+aOpeWZqOmhnuWeiyIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoi6ZyA6KaB6YCj5o6l5Zmo6aGe5Z6L44CCIixjb25uZWN0b3JzOiLpgKPmjqXlmajphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLlu7rnq4vmlrDplpjpgZMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuaCqOeiuuWumuimgeW7uueri+S4gOWAi+WQjeeoseeCuu+8mid7e2dhdGV3YXlOYW1lfX0n55qE5paw6ZaY6YGT5ZeO77yfIixkZWxldGU6IuWIqumZpOmFjee9riIsImRvd25sb2FkLXRpcCI6IuS4i+i8iemFjee9ruaWh+S7tiIsZ2F0ZXdheToi6ZaY6YGTIiwiZ2F0ZXdheS1leGlzdHMiOiLlkIzlkI3oqK3lgpnlt7LlrZjlnKjjgIIiLCJnYXRld2F5LW5hbWUiOiLplpjpgZPlkI3nqLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiLpnIDopoHplpjpgZPlkI3nqLHjgIIiLCJnYXRld2F5LXNhdmVkIjoi6ZaY6YGT6YWN572u5bey5oiQ5Yqf5L+d5a2Y44CCIiwianNvbi1wYXJzZSI6IueEoeaViOeahEpTT04iLCJqc29uLXJlcXVpcmVkIjoi5qyE5L2N5LiN6IO954K656m644CCIiwibm8tY29ubmVjdG9ycyI6IueEoemAo+aOpeWZqCIsIm5vLWRhdGEiOiLnhKHphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw6ZaY6YGT44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiDmnKrmib7liLAne3tpdGVtfX0n44CCIiwicGF0aC1sb2dzIjoi5pel6KqM5paH5Lu255qE6Lev5b6RIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi6ZyA6KaB6Lev5b6R44CCIixyZW1vdGU6Iuenu+mZpOmFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel6KqM6KiY6YyE57Sa5YilIiwicmVtb3ZlLWVudHJ5Ijoi56e76Zmk6YWN572uIiwic2F2ZS10aXAiOiLkv53lrZjphY3nva7mlofku7YiLCJzZWN1cml0eS10eXBlIjoi5a6J5YWo6aGe5Z6LIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoi6Kiq5ZWPVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToi6LKv5a2YIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi5paH5Lu25Lit55qE5pyA5aSn57SA6YyEIiwic3RvcmFnZS1tYXgtZmlsZXMiOiLmnIDlpKfmlofku7bmlbgiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiLmnIDlsI/mlbjph4/ngrox44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoi6ZyA6KaB6Jmf56K844CCIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6IuWtmOWEsuS4reeahOacgOWkp+e0gOmMhCIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoi5pyA5bCP57SA6YyE5pW454K6MeOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfntIDpjITmlbgiLCJzdG9yYWdlLXBhY2stc2l6ZSI6IuacgOWkp+S6i+S7tuWMheWkp+WwjyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6IuacgOWwj+aVuOmHj+eCujHjgIIiLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoi6Jmf56K854Sh5pWI77yOIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhdGgiOiLlrZjlhLLot6/lvpEiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHlrZjlhLLot6/lvpHjgIIiLCJzdG9yYWdlLXR5cGUiOiLlrZjlhLLpoZ7lnosiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IuaWh+S7tuWtmOWEsiIsIm1lbW9yeS1zdG9yYWdlIjoi6KiY5oa26auU5a2Y5YSyIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJk5Li75qmfIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IumcgOimgeS4u+apn+OAgiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZOmAo+aOpeWfoCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4Ijoi5pyA5aSn5Z+g6Jmf54K6IDY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/ln6DomZ/ngrox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi6YCj5o6l5Z+g54Sh5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IumcgOimgemAo+aOpeWfoOOAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6YCj5o6l5Zmoe3t0eXBlTmFtZX196YWN572uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiLplpjpgZPkuIpDQeitieabuOeahOi3r+W+kSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IumWmOmBk+S4iueUqOaItuerr+aGkeaTmueahOi3r+W+kSIsInRscy1wYXRoLXByaXZhdGUta2V5Ijoi6ZaY6YGT5LiK55qE56eB6ZGw6Lev5b6RIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLliIfmj5vlhajonqLluZUiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IumFjee9rkpTT04qIiwidXBkYXRlLWNvbmZpZyI6IuWinuWKoC/mm7TmlrDphY3nva5KU09OIn07Y29uc3QgWG89W2NhLHBhLEZhLERhLEFhLE5hLFBhLGVvLEVvLGlvLGFvLG9vLHFvLHRvLEdvLG5vXTtjbGFzcyBab3tjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lLGZ1bmN0aW9uKGUpe2Uuc2V0VHJhbnNsYXRpb24oImVuX1VTIixPbywhMCksZS5zZXRUcmFuc2xhdGlvbigiYXJfQUUiLFJvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJjYV9FUyIsVm8sITApLGUuc2V0VHJhbnNsYXRpb24oImNzX0NaIixCbywhMCksZS5zZXRUcmFuc2xhdGlvbigiZGFfREsiLFVvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJlc19FUyIsX28sITApLGUuc2V0VHJhbnNsYXRpb24oImtvX0tSIixIbywhMCksZS5zZXRUcmFuc2xhdGlvbigibHRfTFQiLHpvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJubF9CRSIsV28sITApLGUuc2V0VHJhbnNsYXRpb24oInBsX1BMIixqbywhMCksZS5zZXRUcmFuc2xhdGlvbigicHRfQlIiLEtvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJzbF9TSSIsJG8sITApLGUuc2V0VHJhbnNsYXRpb24oInRyX1RSIixZbywhMCksZS5zZXRUcmFuc2xhdGlvbigiemhfQ04iLFFvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJ6aF9UVyIsSm8sITApfShlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5OZ01vZHVsZX0pfXN0YXRpY3t0aGlzLsm1bW9kPXQuybXJtW5nRGVjbGFyZU5nTW9kdWxlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlY2xhcmF0aW9uczpbY2EscGEsRmEsRGEsQWEsTmEsUGEsZW8sRW8saW8sYW8sb28scW8sdG8sR28sbm9dLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOltjYSxwYSxGYSxEYSxBYSxOYSxQYSxlbyxFbyxpbyxhbyxvbyxxbyx0byxHbyxub119KX1zdGF0aWN7dGhpcy7JtWluaj10Lsm1ybVuZ0RlY2xhcmVJbmplY3Rvcih7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpabyxwcm92aWRlcnM6W3ZhXSxpbXBvcnRzOltILEQsUSxNYSxFYSxxYSxJYSxMbyxrbyxGbyxwbyxBbyxObyxnbyxEbyxQb119KX19ZSgiR2F0ZXdheUV4dGVuc2lvbk1vZHVsZSIsWm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Wm8sZGVjb3JhdG9yczpbe3R5cGU6dSxhcmdzOlt7ZGVjbGFyYXRpb25zOlhvLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOlhvLHByb3ZpZGVyczpbdmFdfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSl9fX0pKTsvLyMgc291cmNlTWFwcGluZ1VSTD1nYXRld2F5LW1hbmFnZW1lbnQtZXh0ZW5zaW9uLmpzLm1hcAo=", - "public": false - }, - { - "link": "/api/images/system/gateway_logs_system_widget_image.png", - "title": "\"Gateway logs\" system widget image", - "type": "IMAGE", - "subType": "IMAGE", - "fileName": "gateway_logs_system_widget_image.png", - "publicResourceKey": "RdgCKnAxzKTgx6HOeHdoXPA8Hbj4JE8w", - "mediaType": "image/png", - "data": "iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAMAAAB+IdObAAABblBMVEXg4ODf39/g4ODg4OAAAAD////l5eXg4OD39/fs7Oz/5ebo6Ojz8/P/9ubd3d3Ly8u6urqpqamGhobu7u7/8vKYmJh1dXWxsbGXl5egoKD//fp+fn7U1NTCwsL4+PiPj4//+OzurrGelZH0ycuoqKjdXWTXQkrRJzD88vL55OXOysnDw8Pok5fztbjroKTieH3ibXP9/f1ZRD75zdCHenX6t1VBKSLXPkbx8fH+7dHunqKOjo7ohotwX1nUND37wWr319jZ2NfZT1cqDwb82dvxvL7Cvbu2r635rkH+8tz3wcT+4LLlhYr/6uv95L3926jlhov6+vqqop/7yX/dVl36skv//PX88fL+8dz8153/9+qTh4N8bWjaSlI2HBT+7dLwvL7xqa3rkpZ8bGf/+fD+6cf+5L3tnaHok5j80pP7zongYmhYRD3UMzv65OWfn5/7vGBkUkv/9PTw8PD7yX7jeH5NNzD0trlkUUv0trh+scVYAAAABXRSTlPvIL+vAC9A4IoAAAsOSURBVHja7JfBa+JAFIfTbd9zgmVmnCGZSGYIBE/xZBARpAcp6Ll7beml18IiC8v++fuiMaur6ZLuHqLkQ8PkTeYHH/PU0bu7+eL1Lp3bmzvvxvs+gQtnMieN2zlcAZra6uL3o2DieT24CnqdSMvoRNpGJ9I2TkQm8z6epa+foMX8KXKP9fTvoRlugfA/WJimIuTxIQ1NpDz2YmwMf8EXcIoYnE0HNq4TecKP6U8aivjcCV9y8KXlPBYi5kAwJxhwiWC59MFautDdtiwVMueoKDT4lgoCfF6J7OIQKJLz0B7GHYto3LF+W+YZPqfrPM9X2SZPsWTeUIQruxjyGJQxASprYw3E0MihSKzikXExhM4YmlNsYYxxiR4ZF0AoNQhazCPuBpVIETeyFCcpLsQyLqJ14likjzvSPHvM8WGabrJsOXtezdb7LWkqEsBAgMIYaKS0VlAQAmgqm3HEaRxS68hkoERMZU4OQE+Gu45y0plouyNWDQF2cSHFbJ87jDsWwQOR96+FyHq9ekV8e8GSz4qwQ5GY+cJIGIlKxA00sqLMA5qlVykykixW+89IJcLiSqSKqxfJZptpOnt4Wc0Qp/8ooqVSAURDpgwQTiVWqyRglQhTQcKcUpYpSbOSikaKOFAaInMiAjJZ7OIkEMU6Xd9aOH2cpg+Iy9cM39PPtdY3BiXFjgDdYRRFDlhR13AIVahcvvdfVsV4oWG0F4H6uGOR+aHIckYi25sfP7FEQxNQ6N9jA02xji5mTEYcKurijkUmeJZlNWrvv8mmP4it5eSIcqEeZw6Nuu7QOG9vX131Mf5S6UTaRifSNnrekl0FPU/0r4Iraq1OpF10Im2jE2kbncgvds2eR20gCKDVjGZFtB9emd2VbVY6ucJVUlgnnSiuOepzS5SGFildfn/GOImBGOfMUThRHhISgxjxcAH2Y24MiHx8XQ3wOuvzwwGRlcAriBVMhCzcBUvTRR5xhEeYhk7u1EfMZBH2mGAysY8YSwH+ALo395EUKNzaR3A1UQSdKVUoAIOuVFaWmQJGmFKADgp0FXJwOggogjqOQ5YLEwQPEaQODgyh/iXyc51s1y3d6brhPtJs1lwS9rumruuXbV3vb+8jNjjMKJFFyncyIWCepAoqIMePCrmPoDMqWC8TyTopedUOcwIVra+8dFUrQpYAeJ13uIQEdUpL+2Nd+7qRPvINN92133qNh+Z9fUQml32kHWvd95HExzzj8UUf0VqZJ9uKSKNH+giM9JH9jkU+PTTbe2SFTJz1ESEq7SDkfR8pQRzHMvLxEgkPSagApaIk/t5HEtGK0Om66yLP9eEo8q4+gg60hECF/5qCCxCDlBJlDEjGa3AInm95AS6mNvc8jgXGqHhYKBV9SmBUL9Kt4+e853UpRd2uO77uXESciOCu6yP4ZftcN9ghpolEC9B/mC1kjFHwJrr3L9vWY6BncN21PtJ8Xh8QNw/Njh+8HOrdbZexydJ4dx4Hc74r1OAXolDjfWSBoyzm+zvlXARWOMqM/8RxLjJ+TBYz9rgUYT6IYSzBnPmXz0f+Tv6LzI3v7JnBa4MwFId3eYw9duxJdglBY8DEQA6CFBHRi7SQg7CT4HoqlJ7H/vu9tmvZit1wDCbiBwnPp/nBx/OWWWRs3N89PU4Cuh95mAQT+rVmkXExi4yNWWRsTFjEWwzFgxFwLeKtcTjrEahciXj4O/7fhER65jGYNfShixz+gmI1VGSBJ0qllFWItUWrSlpKUaum/rEqqbC0jh+cWEAPUfTVK3zW8AOS9TRZ3JsOFHdD5DyQNDHmrdlYYZfJrrWmNaYWpmleTdJSZV+SXVIrobBJvxkJiUiumYw4yKjjPGMs40CEmoXAoxw6HknoOtro6diOgjzUmppMguw0e2Yg+UXkFJcDRXIuuk9xVyJ4FmloU/vdEpMaN6lZIlqBuLd4KIVtU9w0SiTlRQT7RXhQFYZnEDjn50FVZRII47aGFVXAfaczENqt6F0QFs6tdCFjp30QWwmMDnOf6/gicoiLK4rbUpzIP+J8OsduiLyzZzYtDsJAGD7NJef9A1IyGtAY8BAQERG9SA57WPDkwV4slPZQKPv3d1I/tmx3W3pYcF1fVCYzMvAwExOMqzVj+0PBXDtUB60it0t0MYDoiAU60OfkIQiH0AHMUiALhUCwcgGO5DaSb8h2qXX8PEQnJfeG2ygKt+8o6UvDLxUpUQH06VxKc3nvOt1ta00ViXTT2SJUVV+ROC7YCBKw4C3QhW6m1noA4l2DpJ5wjE+RCUSGx8yz7g2nKF0DSOjXKY5zZAKp0wlkSvf9ZI9110XqHByKvWp1q/ZdV9najCDbpm3iQFPlRpDTXRCxQ+TAVY2vQJKYlwJz7k0gNfLck4hljT5Fd+Q0vpNyFMDNDQjs8rxP5/fpsBRf/sYPJamSJGmTiG0rFp/fWUvDKGFWbcBYUrBYxSzaMnrh3pLoK280bUWARhnnXIJn/Ue4FnnIPdzjx8rauYBwBIGf0v3ygpg54tM28KxKSQ8jiWhzm9r8ky2KRTm9PKfTDDAWvY3/o1pB5qYVZG5aQeamBR0rLOagZzGttYLMSyvIB/tmryIxCIXRasqvX6bKS9zCylYRtBBF09gkgaRKkfdnndGdItVkYeEy7MGf+hSiIIcb/yLc+GCROE3Dm0zxxoazSMQlRjYqJ5GIq0SW/cgdlxnvHPuRCY3ZwggY/VjhXF3rEDa5tkPnLNCZOPYjIxpGYl+TQgoSUJsnTRJOCoXH7kHbShqNkWM/gk4KVcFKuKoAJRAEhdxEyDhfPWE0Or/uR77+rh/BD5S3fd0gzZah5C5BjvJTxFL2TsL7gg7HfmRA5wjLQUYoChJqkStoWekpIlbydkehBY2BYz8S0clKO1WyB8KiRAmaFnSRRB77sYUZjcixH3md9jQjWcwadVrAaqtR5mRhgVIA415nnWU/cruPl68Rlv1INZlwBTYvlJNIc3kbFh8jn/+M/27vbFrbBoIw7HzMZHUZjbQokthNBUYn+eQgTKDkoIt877Uhl/6AUAKlP7/rVWNkb+o6rikroRf8sTNo4EErhHR434FqAvFNE4hvmkB804hsqUZjFDaarTWB+KUJxDdNIL5pAvFNLoiQwfvy2UjaBfl0Ts8HHUk4h6LwJBeO85FwKna4hNDwFwUErhYRvKMQhP5PvijMApEEBWA+GCitY7QNJIBNGQPzRaJb2fJdEdguoQCBaLqmFb6B7Iy7pd44C+Karbfzpm7wy7qt67pqvj5VJ9tSqTQu0hjyqEy0YlYajNIoXwQFFyIrogJUlLFdbcplTJxHCagEISw4pthgbEFIcZyZcfFm3O2iNw7/7B30Da2b07z68TRfvZEEZ4rtEDpd7MR2vIRZuCnbtIt+bAdzbs8IJamTdtEbd8CWarXu/LVsbEd91vwRJQBNueyB5ERCgcC92A5mmbixHTLeB8EDIOt7A/K8urf+Wo//6K+VlVkCn1mo0NbLF8YiLeQWRBacybLMGJW+y8vUFDkMY7av4h0Q2I7rtpY5jg7Edjw+/47taPD7ibEdZYCAAgiAdAISQVKSJAyEYP6KrkcgpV3ZMsnuB6QIo02xJEi3F/v+ONyO2wV57YM0HQjWq5+r6qTYDuJebEcOH5VOwXAkAKydnjPOgji3kapt1ohtVVmAtm0GF9vxgAflcSqn45w5UI4Pepl6rKPdZZf+Xh5jfx4ZqEYEMvN88x+n5c3s8hVGoIcrkz7tdxzSMVpKg3F9cXUzdM0uL65/AVWlQEjXqFpfAAAAAElFTkSuQmCC", - "public": true - } ] } \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/gateway_status.json b/application/src/main/data/json/system/widget_types/gateway_status.json new file mode 100644 index 0000000000..122afa51eb --- /dev/null +++ b/application/src/main/data/json/system/widget_types/gateway_status.json @@ -0,0 +1,44 @@ +{ + "fqn": "gateway_widgets.gateway_status", + "name": "Gateway status", + "deprecated": false, + "image": "tb-image;/api/images/system/gateway_status_system_widget_image.png", + "description": "Indicator of Gateway connection status.", + "descriptor": { + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "resources": [ + { + "url": "tb-resource;/api/resource/js_module/system/gateway-management-extension.js", + "isModule": true + } + ], + "templateHtml": "", + "templateCss": "", + "controllerScript": "self.onInit = function() {\n if (self.ctx.datasources && self.ctx.datasources.length) {\n self.ctx.$scope.entityId = self.ctx.datasources[0].entity.id;\n }\n};\n\nself.onDataUpdated = function() {\n self.ctx.$scope.gatewayStatus?.onDataUpdated();\n};", + "settingsSchema": "", + "dataKeySettingsSchema": "", + "settingsDirective": "tb-gateway-status", + "defaultConfig": "{\"datasources\":[{\"type\":\"static\",\"name\":\"function\",\"dataKeys\":[{\"name\":\"f(x)\",\"type\":\"function\",\"label\":\"Random\",\"color\":\"#2196f3\",\"settings\":{},\"_hash\":0.15479322438769105,\"funcBody\":\"var value = prevValue + Math.random() * 100 - 50;\\nvar multiplier = Math.pow(10, 2 || 0);\\nvar value = Math.round(value * multiplier) / multiplier;\\nif (value < -1000) {\\n\\tvalue = -1000;\\n} else if (value > 1000) {\\n\\tvalue = 1000;\\n}\\nreturn value;\"}]}],\"timewindow\":{\"realtime\":{\"timewindowMs\":60000}},\"showTitle\":false,\"backgroundColor\":\"rgb(255, 255, 255)\",\"color\":\"rgba(0, 0, 0, 0.87)\",\"padding\":\"8px\",\"settings\":{\"cardHtml\":\"
HTML code here
\",\"cardCss\":\".card {\\n font-weight: bold;\\n font-size: 32px;\\n color: #999;\\n width: 100%;\\n height: 100%;\\n display: flex;\\n align-items: center;\\n justify-content: center;\\n}\"},\"title\":\"HTML Card\",\"dropShadow\":true}" + }, + "tags": [ + "router", + "bridge", + "hub", + "access point", + "relay", + "opc ua", + "opc-ua", + "modbus", + "bacnet", + "odbc", + "ftp", + "snmp", + "mqtt", + "xmpp", + "ocpp", + "ble", + "bluetooth" + ] +} \ No newline at end of file diff --git a/application/src/main/data/json/system/widget_types/service_rpc.json b/application/src/main/data/json/system/widget_types/service_rpc.json index 144eed5d4f..eab1bccf0a 100644 --- a/application/src/main/data/json/system/widget_types/service_rpc.json +++ b/application/src/main/data/json/system/widget_types/service_rpc.json @@ -34,28 +34,5 @@ "subroutine call", "inter-process communication", "server request" - ], - "resources": [ - { - "link": "/api/resource/js_module/system/gateway-management-extension.js", - "title": "gateway-management-extension.js", - "type": "JS_MODULE", - "resourceKey": "gateway-management-extension.js", - "fileName": "gateway-management-extension.js", - "mediaType": "application/javascript", - "data": "U3lzdGVtLnJlZ2lzdGVyKFsiQGFuZ3VsYXIvY29yZSIsIkBhbmd1bGFyL21hdGVyaWFsL3NvcnQiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJsZSIsIkBhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvciIsIkBzaGFyZWQvcHVibGljLWFwaSIsIkBhbmd1bGFyL2NvbW1vbiIsIkBhbmd1bGFyL21hdGVyaWFsL2RpdmlkZXIiLCJAYW5ndWxhci9tYXRlcmlhbC90YWJzIiwiQGFuZ3VsYXIvZmxleC1sYXlvdXQvZmxleCIsIkBhbmd1bGFyL2ZsZXgtbGF5b3V0L2V4dGVuZGVkIiwiQG5neC10cmFuc2xhdGUvY29yZSIsIkBjb3JlL3B1YmxpYy1hcGkiLCJAYW5ndWxhci9mb3JtcyIsIkBhbmd1bGFyL21hdGVyaWFsL2J1dHRvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2NhcmQiLCJAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCIsIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQiLCJAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QiLCJAYW5ndWxhci9tYXRlcmlhbC9jb3JlIiwicnhqcyIsInJ4anMvb3BlcmF0b3JzIiwidHNsaWIiLCJAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwIiwiQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbiIsIkBhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbiIsIkBzaGFyZWQvZGlyZWN0aXZlcy90cnVuY2F0ZS13aXRoLXRvb2x0aXAuZGlyZWN0aXZlIiwiQHNoYXJlZC9jb21wb25lbnRzL2RpYWxvZy9qc29uLW9iamVjdC1lZGl0LWRpYWxvZy5jb21wb25lbnQiLCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2ciLCJAc2hhcmVkL2NvbXBvbmVudHMvZGlyZWN0aXZlcy90Yi1qc29uLXRvLXN0cmluZy5kaXJlY3RpdmUiLCJAYW5ndWxhci9tYXRlcmlhbC9zbGlkZS10b2dnbGUiLCJAc2hhcmVkL2NvbXBvbmVudHMvYnV0dG9uL3RvZ2dsZS1wYXNzd29yZC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLWhlYWRlci5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9nZ2xlLXNlbGVjdC5jb21wb25lbnQiLCJAbmdyeC9zdG9yZSIsIkBhbmd1bGFyL3JvdXRlciIsIkBhbmd1bGFyL21hdGVyaWFsL3Rvb2xiYXIiLCJAc2hhcmVkL2NvbXBvbmVudHMvanNvbi1jb250ZW50LmNvbXBvbmVudCIsIkBzaGFyZWQvaW1wb3J0LWV4cG9ydC9pbXBvcnQtZXhwb3J0LnNlcnZpY2UiLCJAc2hhcmVkL2NvbXBvbmVudHMvdG9hc3QuZGlyZWN0aXZlIiwiQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3giLCJAc2hhcmVkL2NvbXBvbmVudHMvZW50aXR5L2VudGl0eS1nYXRld2F5LXNlbGVjdC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGVscC5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvaGludC10b29sdGlwLWljb24uY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2hlbHAtcG9wdXAuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL3BvcG92ZXIuc2VydmljZSIsIkBhbmd1bGFyL21hdGVyaWFsL2NoaXBzIiwiQHNoYXJlZC9jb21wb25lbnRzL2ljb24uY29tcG9uZW50IiwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSIsIkBzaGFyZWQvZGVjb3JhdG9ycy9jb2VyY2lvbiIsIkBzaGFyZWQvY29tcG9uZW50cy9qc29uLW9iamVjdC1lZGl0LmNvbXBvbmVudCIsIkBzaGFyZWQvY29tcG9uZW50cy9tYXJrZG93bi5jb21wb25lbnQiLCJAc2hhcmVkL2NvbXBvbmVudHMvdGItZXJyb3IuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2ZpbGUtaW5wdXQuY29tcG9uZW50IiwiQHNoYXJlZC9jb21wb25lbnRzL2J1dHRvbi9jb3B5LWJ1dHRvbi5jb21wb25lbnQiXSwoZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0LG4sYSxvLGkscixzLGwsYyxwLG0sZCx1LGcsZix5LGIsaCx4LHYsdyxDLFQsUyxrLEwsRixJLEEsTixNLEUscSxELFAsRyxPLFIsVixCLFUsXyxILHosVyxqLEssWSxRLEosWCxaLGVlLHRlLG5lLGFlLG9lLGllLHJlLHNlLGxlLGNlLHBlLG1lLGRlLHVlLGdlLGZlLHllLGJlLGhlLHhlLHZlLHdlLENlLFRlLFNlLGtlLExlLEZlLEllLEFlLE5lLE1lLEVlLHFlLERlLFBlLEdlLE9lLFJlLFZlLEJlLFVlLF9lLEhlLHplLFdlLGplLEtlLCRlLFllLFFlLEplLFhlLFplLGV0LHR0LG50LGF0LG90LGl0LHJ0LHN0LGx0LGN0LHB0LG10LGR0LHV0LGd0LGZ0LHl0LGJ0LGh0LHh0LHZ0LHd0LEN0LFR0LFN0O3JldHVybntzZXR0ZXJzOltmdW5jdGlvbihlKXt0PWUsbj1lLkNvbXBvbmVudCxhPWUuSW5wdXQsbz1lLlZpZXdDaGlsZCxpPWUuRXZlbnRFbWl0dGVyLHI9ZS5pbmplY3Qscz1lLkRpcmVjdGl2ZSxsPWUuT3V0cHV0LGM9ZS5QaXBlLHA9ZS5JbmplY3QsbT1lLmZvcndhcmRSZWYsZD1lLkNoYW5nZURldGVjdGlvblN0cmF0ZWd5LHU9ZS5OZ01vZHVsZX0sZnVuY3Rpb24oZSl7Zz1lLk1hdFNvcnQsZj1lfSxmdW5jdGlvbihlKXt5PWUuTWF0VGFibGVEYXRhU291cmNlLGI9ZX0sZnVuY3Rpb24oZSl7aD1lLk1hdFBhZ2luYXRvcix4PWV9LGZ1bmN0aW9uKGUpe3Y9ZS5oZWxwQmFzZVVybCx3PWUuRGlyZWN0aW9uLEM9ZS5QYWdlTGluayxUPWUuRGF0YUtleVR5cGUsUz1lLkxlZ2VuZFBvc2l0aW9uLGs9ZS5OVUxMX1VVSUQsTD1lLkF0dHJpYnV0ZVNjb3BlLEY9ZS5EYXRhc291cmNlVHlwZSxJPWUuRW50aXR5VHlwZSxBPWUud2lkZ2V0VHlwZSxOPWUuY29lcmNlQm9vbGVhbixNPWUuZW1wdHlQYWdlRGF0YSxFPWUuaXNDbGllbnRTaWRlVGVsZW1ldHJ5VHlwZSxxPWUuVGVsZW1ldHJ5U3Vic2NyaWJlcixEPWUuU2hhcmVkTW9kdWxlLFA9ZS5EaWFsb2dDb21wb25lbnQsRz1lLkNvbnRlbnRUeXBlLE89ZS5QYWdlQ29tcG9uZW50LFI9ZS5UYlRhYmxlRGF0YXNvdXJjZSxWPWUuSE9VUixCPWUuY29lcmNlTnVtYmVyLFU9ZS5EZXZpY2VDcmVkZW50aWFsc1R5cGV9LGZ1bmN0aW9uKGUpe189ZSxIPWUuQ29tbW9uTW9kdWxlfSxmdW5jdGlvbihlKXt6PWV9LGZ1bmN0aW9uKGUpe1c9ZX0sZnVuY3Rpb24oZSl7aj1lfSxmdW5jdGlvbihlKXtLPWV9LGZ1bmN0aW9uKGUpe1k9ZSxRPWUuVHJhbnNsYXRlTW9kdWxlfSxmdW5jdGlvbihlKXtKPWUuZGVlcENsb25lLFg9ZSxaPWUuZGVsZXRlTnVsbFByb3BlcnRpZXMsZWU9ZS5pc0VxdWFsLHRlPWUuaXNOdW1iZXIsbmU9ZS5pc1N0cmluZyxhZT1lLldJTkRPVyxvZT1lLmlzTGl0ZXJhbE9iamVjdCxpZT1lLmlzRGVmaW5lZEFuZE5vdE51bGwscmU9ZS5pc1VuZGVmaW5lZE9yTnVsbCxzZT1lLmdlbmVyYXRlU2VjcmV0LGxlPWUuaXNPYmplY3QsY2U9ZS5jYW1lbENhc2UscGU9ZS5kZWVwVHJpbX0sZnVuY3Rpb24oZSl7bWU9ZSxkZT1lLkZvcm1CdWlsZGVyLHVlPWUuVmFsaWRhdG9ycyxnZT1lLk5HX1ZBTFVFX0FDQ0VTU09SLGZlPWUuTkdfVkFMSURBVE9SUyx5ZT1lLkZvcm1Db250cm9sfSxmdW5jdGlvbihlKXtiZT1lfSxmdW5jdGlvbihlKXtoZT1lfSxmdW5jdGlvbihlKXt4ZT1lfSxmdW5jdGlvbihlKXt2ZT1lfSxmdW5jdGlvbihlKXt3ZT1lfSxmdW5jdGlvbihlKXtDZT1lLFRlPWUuRXJyb3JTdGF0ZU1hdGNoZXJ9LGZ1bmN0aW9uKGUpe1NlPWUuU3ViamVjdCxrZT1lLmZyb21FdmVudCxMZT1lLkJlaGF2aW9yU3ViamVjdCxGZT1lLlJlcGxheVN1YmplY3QsSWU9ZS5vZixBZT1lLmZvcmtKb2lufSxmdW5jdGlvbihlKXtOZT1lLnRha2VVbnRpbCxNZT1lLmZpbHRlcixFZT1lLnRhcCxxZT1lLmNhdGNoRXJyb3IsRGU9ZS5tYXAsUGU9ZS5wdWJsaXNoUmVwbGF5LEdlPWUucmVmQ291bnQsT2U9ZS50YWtlLFJlPWUuc3RhcnRXaXRoLFZlPWUuZGVib3VuY2VUaW1lLEJlPWUuZGlzdGluY3RVbnRpbENoYW5nZWQsVWU9ZS5zd2l0Y2hNYXAsX2U9ZS5tZXJnZU1hcH0sZnVuY3Rpb24oZSl7SGU9ZS5fX2RlY29yYXRlfSxmdW5jdGlvbihlKXt6ZT1lLFdlPWUuTWF0VG9vbHRpcH0sZnVuY3Rpb24oZSl7amU9ZS5TZWxlY3Rpb25Nb2RlbH0sZnVuY3Rpb24oZSl7S2U9ZX0sZnVuY3Rpb24oZSl7JGU9ZX0sZnVuY3Rpb24oZSl7WWU9ZX0sZnVuY3Rpb24oZSl7UWU9ZS5Kc29uT2JqZWN0RWRpdERpYWxvZ0NvbXBvbmVudH0sZnVuY3Rpb24oZSl7SmU9ZSxYZT1lLk1BVF9ESUFMT0dfREFUQX0sZnVuY3Rpb24oZSl7WmU9ZX0sZnVuY3Rpb24oZSl7ZXQ9ZX0sZnVuY3Rpb24oZSl7dHQ9ZX0sZnVuY3Rpb24oZSl7bnQ9ZX0sZnVuY3Rpb24oZSl7YXQ9ZX0sZnVuY3Rpb24oZSl7b3Q9ZX0sZnVuY3Rpb24oZSl7aXQ9ZX0sZnVuY3Rpb24oZSl7cnQ9ZX0sZnVuY3Rpb24oZSl7c3Q9ZX0sZnVuY3Rpb24oZSl7bHQ9ZX0sZnVuY3Rpb24oZSl7Y3Q9ZX0sZnVuY3Rpb24oZSl7cHQ9ZX0sZnVuY3Rpb24oZSl7bXQ9ZX0sZnVuY3Rpb24oZSl7ZHQ9ZX0sZnVuY3Rpb24oZSl7dXQ9ZX0sZnVuY3Rpb24oZSl7Z3Q9ZX0sZnVuY3Rpb24oZSl7ZnQ9ZX0sZnVuY3Rpb24oZSl7eXQ9ZX0sZnVuY3Rpb24oZSl7YnQ9ZX0sZnVuY3Rpb24oZSl7aHQ9ZX0sZnVuY3Rpb24oZSl7eHQ9ZS5jb2VyY2VCb29sZWFufSxmdW5jdGlvbihlKXt2dD1lfSxmdW5jdGlvbihlKXt3dD1lfSxmdW5jdGlvbihlKXtDdD1lfSxmdW5jdGlvbihlKXtUdD1lfSxmdW5jdGlvbihlKXtTdD1lfV0sZXhlY3V0ZTpmdW5jdGlvbigpe2NvbnN0IGt0PWUoIm5vTGVhZFRyYWlsU3BhY2VzUmVnZXgiLC9eXFMrKD86IFxTKykqJC8pLEx0PWUoImludGVnZXJSZWdleCIsL15bLStdP1xkKyQvKSxGdD1lKCJub25aZXJvRmxvYXQiLC9eLT8oPyEwKFwuMCspPyQpXGQrKFwuXGQrKT8kLyksSXQ9ZSgianNvblJlcXVpcmVkIiwoZT0+ZS52YWx1ZT9udWxsOntyZXF1aXJlZDohMH0pKTt2YXIgQXQsTnQsTXQsRXQ7ZSgiU3RvcmFnZVR5cGVzIixBdCksZnVuY3Rpb24oZSl7ZS5NRU1PUlk9Im1lbW9yeSIsZS5GSUxFPSJmaWxlIixlLlNRTElURT0ic3FsaXRlIn0oQXR8fGUoIlN0b3JhZ2VUeXBlcyIsQXQ9e30pKSxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdCksZnVuY3Rpb24oZSl7ZS5FWENFUFRJT049IkVYQ0VQVElPTiJ9KE50fHxlKCJEZXZpY2VHYXRld2F5U3RhdHVzIixOdD17fSkpLGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQpLGZ1bmN0aW9uKGUpe2UuTk9ORT0iTk9ORSIsZS5DUklUSUNBTD0iQ1JJVElDQUwiLGUuRVJST1I9IkVSUk9SIixlLldBUk5JTkc9IldBUk5JTkciLGUuSU5GTz0iSU5GTyIsZS5ERUJVRz0iREVCVUciLGUuVFJBQ0U9IlRSQUNFIn0oTXR8fGUoIkdhdGV3YXlMb2dMZXZlbCIsTXQ9e30pKSxlKCJQb3J0TGltaXRzIixFdCksZnVuY3Rpb24oZSl7ZVtlLk1JTj0xXT0iTUlOIixlW2UuTUFYPTY1NTM1XT0iTUFYIn0oRXR8fGUoIlBvcnRMaW1pdHMiLEV0PXt9KSk7Y29uc3QgcXQ9ZSgiR2F0ZXdheVN0YXR1cyIsey4uLk10LC4uLk50fSk7dmFyIER0LFB0O2UoIkxvZ1NhdmluZ1BlcmlvZCIsRHQpLGZ1bmN0aW9uKGUpe2UuZGF5cz0iRCIsZS5ob3Vycz0iSCIsZS5taW51dGVzPSJNIixlLnNlY29uZHM9IlMifShEdHx8ZSgiTG9nU2F2aW5nUGVyaW9kIixEdD17fSkpLGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0KSxmdW5jdGlvbihlKXtlLnNlcnZpY2U9InNlcnZpY2UiLGUuY29ubmVjdG9yPSJjb25uZWN0b3IiLGUuY29udmVydGVyPSJjb252ZXJ0ZXIiLGUudGJfY29ubmVjdGlvbj0idGJfY29ubmVjdGlvbiIsZS5zdG9yYWdlPSJzdG9yYWdlIixlLmV4dGVuc2lvbj0iZXh0ZW5zaW9uIn0oUHR8fGUoIkxvY2FsTG9nc0NvbmZpZ3MiLFB0PXt9KSk7Y29uc3QgR3Q9ZSgiTG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwIixuZXcgTWFwKFtbUHQuc2VydmljZSwiU2VydmljZSJdLFtQdC5jb25uZWN0b3IsIkNvbm5lY3RvciJdLFtQdC5jb252ZXJ0ZXIsIkNvbnZlcnRlciJdLFtQdC50Yl9jb25uZWN0aW9uLCJUQiBDb25uZWN0aW9uIl0sW1B0LnN0b3JhZ2UsIlN0b3JhZ2UiXSxbUHQuZXh0ZW5zaW9uLCJFeHRlbnNpb24iXV0pKSxPdD1lKCJMb2dTYXZpbmdQZXJpb2RUcmFuc2xhdGlvbnMiLG5ldyBNYXAoW1tEdC5kYXlzLCJnYXRld2F5LmxvZ3MuZGF5cyJdLFtEdC5ob3VycywiZ2F0ZXdheS5sb2dzLmhvdXJzIl0sW0R0Lm1pbnV0ZXMsImdhdGV3YXkubG9ncy5taW51dGVzIl0sW0R0LnNlY29uZHMsImdhdGV3YXkubG9ncy5zZWNvbmRzIl1dKSksUnQ9ZSgiU3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAiLG5ldyBNYXAoW1tBdC5NRU1PUlksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtBdC5GSUxFLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl0sW0F0LlNRTElURSwiZ2F0ZXdheS5zdG9yYWdlLXR5cGVzLnNxbGl0ZSJdXSkpO3ZhciBWdDtlKCJTZWN1cml0eVR5cGVzIixWdCksZnVuY3Rpb24oZSl7ZS5BQ0NFU1NfVE9LRU49ImFjY2Vzc1Rva2VuIixlLlVTRVJOQU1FX1BBU1NXT1JEPSJ1c2VybmFtZVBhc3N3b3JkIixlLlRMU19BQ0NFU1NfVE9LRU49InRsc0FjY2Vzc1Rva2VuIixlLlRMU19QUklWQVRFX0tFWT0idGxzUHJpdmF0ZUtleSJ9KFZ0fHxlKCJTZWN1cml0eVR5cGVzIixWdD17fSkpO2NvbnN0IEJ0PWUoIkdlY3VyaXR5VHlwZXNUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tWdC5BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl0sW1Z0LlVTRVJOQU1FX1BBU1NXT1JELCJnYXRld2F5LnNlY3VyaXR5LXR5cGVzLnVzZXJuYW1lLXBhc3N3b3JkIl0sW1Z0LlRMU19BQ0NFU1NfVE9LRU4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMudGxzLWFjY2Vzcy10b2tlbiJdXSkpO3ZhciBVdCxfdDtlKCJHYXRld2F5VmVyc2lvbiIsVXQpLGZ1bmN0aW9uKGUpe2UuQ3VycmVudD0iMy41LjIiLGUuTGVnYWN5PSJsZWdhY3kifShVdHx8ZSgiR2F0ZXdheVZlcnNpb24iLFV0PXt9KSksZSgiQ29ubmVjdG9yVHlwZSIsX3QpLGZ1bmN0aW9uKGUpe2UuTVFUVD0ibXF0dCIsZS5NT0RCVVM9Im1vZGJ1cyIsZS5HUlBDPSJncnBjIixlLk9QQ1VBPSJvcGN1YSIsZS5CTEU9ImJsZSIsZS5SRVFVRVNUPSJyZXF1ZXN0IixlLkNBTj0iY2FuIixlLkJBQ05FVD0iYmFjbmV0IixlLk9EQkM9Im9kYmMiLGUuUkVTVD0icmVzdCIsZS5TTk1QPSJzbm1wIixlLkZUUD0iZnRwIixlLlNPQ0tFVD0ic29ja2V0IixlLlhNUFA9InhtcHAiLGUuT0NQUD0ib2NwcCIsZS5DVVNUT009ImN1c3RvbSJ9KF90fHxlKCJDb25uZWN0b3JUeXBlIixfdD17fSkpO2NvbnN0IEh0PWUoIkdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIixuZXcgTWFwKFtbX3QuTVFUVCwiTVFUVCJdLFtfdC5NT0RCVVMsIk1PREJVUyJdLFtfdC5HUlBDLCJHUlBDIl0sW190Lk9QQ1VBLCJPUENVQSJdLFtfdC5CTEUsIkJMRSJdLFtfdC5SRVFVRVNULCJSRVFVRVNUIl0sW190LkNBTiwiQ0FOIl0sW190LkJBQ05FVCwiQkFDTkVUIl0sW190Lk9EQkMsIk9EQkMiXSxbX3QuUkVTVCwiUkVTVCJdLFtfdC5TTk1QLCJTTk1QIl0sW190LkZUUCwiRlRQIl0sW190LlNPQ0tFVCwiU09DS0VUIl0sW190LlhNUFAsIlhNUFAiXSxbX3QuT0NQUCwiT0NQUCJdLFtfdC5DVVNUT00sIkNVU1RPTSJdXSkpLHp0PWUoIk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzEsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1jb2lscyJdLFsyLCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtZGlzY3JldGUtaW5wdXRzIl0sWzMsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMucmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdLFs0LCJnYXRld2F5LmZ1bmN0aW9uLWNvZGVzLnJlYWQtaW5wdXQtcmVnaXN0ZXJzIl0sWzUsImdhdGV3YXkuZnVuY3Rpb24tY29kZXMud3JpdGUtc2luZ2xlLWNvaWwiXSxbNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1zaW5nbGUtaG9sZGluZy1yZWdpc3RlciJdLFsxNSwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1jb2lscyJdLFsxNiwiZ2F0ZXdheS5mdW5jdGlvbi1jb2Rlcy53cml0ZS1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyJdXSkpO3ZhciBXdDtlKCJCQUNuZXRSZXF1ZXN0VHlwZXMiLFd0KSxmdW5jdGlvbihlKXtlLldyaXRlUHJvcGVydHk9IndyaXRlUHJvcGVydHkiLGUuUmVhZFByb3BlcnR5PSJyZWFkUHJvcGVydHkifShXdHx8ZSgiQkFDbmV0UmVxdWVzdFR5cGVzIixXdD17fSkpO2NvbnN0IGp0PWUoIkJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tXdC5Xcml0ZVByb3BlcnR5LCJnYXRld2F5LnJwYy53cml0ZS1wcm9wZXJ0eSJdLFtXdC5SZWFkUHJvcGVydHksImdhdGV3YXkucnBjLnJlYWQtcHJvcGVydHkiXV0pKTt2YXIgS3Q7ZSgiQkFDbmV0T2JqZWN0VHlwZXMiLEt0KSxmdW5jdGlvbihlKXtlLkJpbmFyeUlucHV0PSJiaW5hcnlJbnB1dCIsZS5CaW5hcnlPdXRwdXQ9ImJpbmFyeU91dHB1dCIsZS5BbmFsb2dJbnB1dD0iYW5hbG9nSW5wdXQiLGUuQW5hbG9nT3V0cHV0PSJhbmFsb2dPdXRwdXQiLGUuQmluYXJ5VmFsdWU9ImJpbmFyeVZhbHVlIixlLkFuYWxvZ1ZhbHVlPSJhbmFsb2dWYWx1ZSJ9KEt0fHxlKCJCQUNuZXRPYmplY3RUeXBlcyIsS3Q9e30pKTtjb25zdCAkdD1lKCJCQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXMiLG5ldyBNYXAoW1tLdC5BbmFsb2dPdXRwdXQsImdhdGV3YXkucnBjLmFuYWxvZy1vdXRwdXQiXSxbS3QuQW5hbG9nSW5wdXQsImdhdGV3YXkucnBjLmFuYWxvZy1pbnB1dCJdLFtLdC5CaW5hcnlPdXRwdXQsImdhdGV3YXkucnBjLmJpbmFyeS1vdXRwdXQiXSxbS3QuQmluYXJ5SW5wdXQsImdhdGV3YXkucnBjLmJpbmFyeS1pbnB1dCJdLFtLdC5CaW5hcnlWYWx1ZSwiZ2F0ZXdheS5ycGMuYmluYXJ5LXZhbHVlIl0sW0t0LkFuYWxvZ1ZhbHVlLCJnYXRld2F5LnJwYy5hbmFsb2ctdmFsdWUiXV0pKTt2YXIgWXQ7ZSgiQkxFTWV0aG9kcyIsWXQpLGZ1bmN0aW9uKGUpe2UuV1JJVEU9IndyaXRlIixlLlJFQUQ9InJlYWQiLGUuU0NBTj0ic2NhbiJ9KFl0fHxlKCJCTEVNZXRob2RzIixZdD17fSkpO2NvbnN0IFF0PWUoIkJMRU1ldGhvZHNUcmFuc2xhdGVzIixuZXcgTWFwKFtbWXQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl0sW1l0LlJFQUQsImdhdGV3YXkucnBjLnJlYWQiXSxbWXQuU0NBTiwiZ2F0ZXdheS5ycGMuc2NhbiJdXSkpO3ZhciBKdCxYdDtlKCJDQU5CeXRlT3JkZXJzIixKdCksZnVuY3Rpb24oZSl7ZS5MSVRUTEU9IkxJVFRMRSIsZS5CSUc9IkJJRyJ9KEp0fHxlKCJDQU5CeXRlT3JkZXJzIixKdD17fSkpLGUoIlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzIixYdCksZnVuY3Rpb24oZSl7ZS5XUklURT0id3JpdGUifShYdHx8ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3MiLFh0PXt9KSk7Y29uc3QgWnQ9ZSgiU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzIixuZXcgTWFwKFtbWHQuV1JJVEUsImdhdGV3YXkucnBjLndyaXRlIl1dKSk7dmFyIGVuO2UoIlNOTVBNZXRob2RzIixlbiksZnVuY3Rpb24oZSl7ZS5TRVQ9InNldCIsZS5NVUxUSVNFVD0ibXVsdGlzZXQiLGUuR0VUPSJnZXQiLGUuQlVMS1dBTEs9ImJ1bGt3YWxrIixlLlRBQkxFPSJ0YWJsZSIsZS5NVUxUSUdFVD0ibXVsdGlnZXQiLGUuR0VUTkVYVD0iZ2V0bmV4dCIsZS5CVUxLR0VUPSJidWxrZ2V0IixlLldBTEtTPSJ3YWxrIn0oZW58fGUoIlNOTVBNZXRob2RzIixlbj17fSkpO2NvbnN0IHRuPWUoIlNOTVBNZXRob2RzVHJhbnNsYXRpb25zIixuZXcgTWFwKFtbZW4uU0VULCJnYXRld2F5LnJwYy5zZXQiXSxbZW4uTVVMVElTRVQsImdhdGV3YXkucnBjLm11bHRpc2V0Il0sW2VuLkdFVCwiZ2F0ZXdheS5ycGMuZ2V0Il0sW2VuLkJVTEtXQUxLLCJnYXRld2F5LnJwYy5idWxrLXdhbGsiXSxbZW4uVEFCTEUsImdhdGV3YXkucnBjLnRhYmxlIl0sW2VuLk1VTFRJR0VULCJnYXRld2F5LnJwYy5tdWx0aS1nZXQiXSxbZW4uR0VUTkVYVCwiZ2F0ZXdheS5ycGMuZ2V0LW5leHQiXSxbZW4uQlVMS0dFVCwiZ2F0ZXdheS5ycGMuYnVsay1nZXQiXSxbZW4uV0FMS1MsImdhdGV3YXkucnBjLndhbGsiXV0pKTt2YXIgbm4sYW4sb24scm4sc24sbG47ZSgiSFRUUE1ldGhvZHMiLG5uKSxmdW5jdGlvbihlKXtlLkNPTk5FQ1Q9IkNPTk5FQ1QiLGUuREVMRVRFPSJERUxFVEUiLGUuR0VUPSJHRVQiLGUuSEVBRD0iSEVBRCIsZS5PUFRJT05TPSJPUFRJT05TIixlLlBBVENIPSJQQVRDSCIsZS5QT1NUPSJQT1NUIixlLlBVVD0iUFVUIixlLlRSQUNFPSJUUkFDRSJ9KG5ufHxlKCJIVFRQTWV0aG9kcyIsbm49e30pKSxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuKSxmdW5jdGlvbihlKXtlLlVURl84PSJ1dGYtOCJ9KGFufHxlKCJTb2NrZXRFbmNvZGluZ3MiLGFuPXt9KSksZSgiQ29uZmlndXJhdGlvbk1vZGVzIixvbiksZnVuY3Rpb24oZSl7ZS5CQVNJQz0iYmFzaWMiLGUuQURWQU5DRUQ9ImFkdmFuY2VkIn0ob258fGUoIkNvbmZpZ3VyYXRpb25Nb2RlcyIsb249e30pKSxlKCJTZWN1cml0eVR5cGUiLHJuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyIsZS5DRVJUSUZJQ0FURVM9ImNlcnRpZmljYXRlcyJ9KHJufHxlKCJTZWN1cml0eVR5cGUiLHJuPXt9KSksZSgiUmVwb3J0U3RyYXRlZ3lUeXBlIixzbiksZnVuY3Rpb24oZSl7ZS5PbkNoYW5nZT0iT05fQ0hBTkdFIixlLk9uUmVwb3J0UGVyaW9kPSJPTl9SRVBPUlRfUEVSSU9EIixlLk9uQ2hhbmdlT3JSZXBvcnRQZXJpb2Q9Ik9OX0NIQU5HRV9PUl9SRVBPUlRfUEVSSU9EIn0oc258fGUoIlJlcG9ydFN0cmF0ZWd5VHlwZSIsc249e30pKSxlKCJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZSIsbG4pLGZ1bmN0aW9uKGUpe2VbZS5Db25uZWN0b3I9NmU0XT0iQ29ubmVjdG9yIixlW2UuRGV2aWNlPTNlNF09IkRldmljZSIsZVtlLktleT0xNWUzXT0iS2V5In0obG58fGUoIlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlIixsbj17fSkpO2NvbnN0IGNuPWUoIlJlcG9ydFN0cmF0ZWd5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW3NuLk9uQ2hhbmdlLCJnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5vbi1jaGFuZ2UiXSxbc24uT25SZXBvcnRQZXJpb2QsImdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5Lm9uLXJlcG9ydC1wZXJpb2QiXSxbc24uT25DaGFuZ2VPclJlcG9ydFBlcmlvZCwiZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kub24tY2hhbmdlLW9yLXJlcG9ydC1wZXJpb2QiXV0pKTt2YXIgcG47ZSgiTW9kZVR5cGUiLHBuKSxmdW5jdGlvbihlKXtlLk5PTkU9Ik5vbmUiLGUuU0lHTj0iU2lnbiIsZS5TSUdOQU5ERU5DUllQVD0iU2lnbkFuZEVuY3J5cHQifShwbnx8ZSgiTW9kZVR5cGUiLHBuPXt9KSk7Y29uc3QgbW49ZSgiU2VjdXJpdHlUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbcm4uQU5PTllNT1VTLCJnYXRld2F5LmJyb2tlci5zZWN1cml0eS10eXBlcy5hbm9ueW1vdXMiXSxbcm4uQkFTSUMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmJhc2ljIl0sW3JuLkNFUlRJRklDQVRFUywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuY2VydGlmaWNhdGVzIl1dKSk7dmFyIGRuO2UoIlJlc3RTZWN1cml0eVR5cGUiLGRuKSxmdW5jdGlvbihlKXtlLkFOT05ZTU9VUz0iYW5vbnltb3VzIixlLkJBU0lDPSJiYXNpYyJ9KGRufHxlKCJSZXN0U2VjdXJpdHlUeXBlIixkbj17fSkpO2NvbnN0IHVuPWUoIlJlc3RTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tkbi5BTk9OWU1PVVMsImdhdGV3YXkuYnJva2VyLnNlY3VyaXR5LXR5cGVzLmFub255bW91cyJdLFtkbi5CQVNJQywiZ2F0ZXdheS5icm9rZXIuc2VjdXJpdHktdHlwZXMuYmFzaWMiXV0pKSxnbj1lKCJNcXR0VmVyc2lvbnMiLFt7bmFtZTozLjEsdmFsdWU6M30se25hbWU6My4xMSx2YWx1ZTo0fSx7bmFtZTo1LHZhbHVlOjV9XSk7dmFyIGZuO2UoIk1hcHBpbmdUeXBlIixmbiksZnVuY3Rpb24oZSl7ZS5EQVRBPSJkYXRhIixlLlJFUVVFU1RTPSJyZXF1ZXN0cyIsZS5PUENVQT0iT1BDdWEifShmbnx8ZSgiTWFwcGluZ1R5cGUiLGZuPXt9KSk7Y29uc3QgeW49ZSgiTWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nIl0sW2ZuLk9QQ1VBLCJnYXRld2F5LmRhdGEtbWFwcGluZyJdXSkpLGJuPWUoIk1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbZm4uREFUQSwiZ2F0ZXdheS5kYXRhLW1hcHBpbmctaGludCJdLFtmbi5PUENVQSwiZ2F0ZXdheS5vcGN1YS1kYXRhLW1hcHBpbmctaGludCJdLFtmbi5SRVFVRVNUUywiZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nLWhpbnQiXV0pKSxobj1lKCJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAiLG5ldyBNYXAoW1tmbi5EQVRBLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNzZWN0aW9uLW1hcHBpbmciXSxbZm4uT1BDVUEsdisiL2RvY3MvaW90LWdhdGV3YXkvY29uZmlnL29wYy11YS8jc2VjdGlvbi1tYXBwaW5nIl0sW2ZuLlJFUVVFU1RTLHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tcXR0LyNyZXF1ZXN0cy1tYXBwaW5nIl1dKSkseG49ZSgiUXVhbGl0eVR5cGVzIixbMCwxLDJdKSx2bj1lKCJRdWFsaXR5VHlwZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbWzAsImdhdGV3YXkucW9zLmF0LW1vc3Qtb25jZSJdLFsxLCJnYXRld2F5LnFvcy5hdC1sZWFzdC1vbmNlIl0sWzIsImdhdGV3YXkucW9zLmV4YWN0bHktb25jZSJdXSkpO3ZhciB3bjtlKCJDb252ZXJ0b3JUeXBlIix3biksZnVuY3Rpb24oZSl7ZS5KU09OPSJqc29uIixlLkJZVEVTPSJieXRlcyIsZS5DVVNUT009ImN1c3RvbSJ9KHdufHxlKCJDb252ZXJ0b3JUeXBlIix3bj17fSkpO2NvbnN0IENuPWUoIkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1t3bi5KU09OLCJnYXRld2F5LkpTT04iXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMiXSxbd24uQ1VTVE9NLCJnYXRld2F5LmN1c3RvbSJdXSkpO3ZhciBUbixTbixrbjtlKCJTb3VyY2VUeXBlIixUbiksZnVuY3Rpb24oZSl7ZS5NU0c9Im1lc3NhZ2UiLGUuVE9QSUM9InRvcGljIixlLkNPTlNUPSJjb25zdGFudCJ9KFRufHxlKCJTb3VyY2VUeXBlIixUbj17fSkpLGUoIk9QQ1VhU291cmNlVHlwZSIsU24pLGZ1bmN0aW9uKGUpe2UuUEFUSD0icGF0aCIsZS5JREVOVElGSUVSPSJpZGVudGlmaWVyIixlLkNPTlNUPSJjb25zdGFudCJ9KFNufHxlKCJPUENVYVNvdXJjZVR5cGUiLFNuPXt9KSksZSgiRGV2aWNlSW5mb1R5cGUiLGtuKSxmdW5jdGlvbihlKXtlLkZVTEw9ImZ1bGwiLGUuUEFSVElBTD0icGFydGlhbCJ9KGtufHxlKCJEZXZpY2VJbmZvVHlwZSIsa249e30pKTtjb25zdCBMbj1lKCJTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbVG4uTVNHLCJnYXRld2F5LnNvdXJjZS10eXBlLm1zZyJdLFtUbi5UT1BJQywiZ2F0ZXdheS5zb3VyY2UtdHlwZS50b3BpYyJdLFtUbi5DT05TVCwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5jb25zdCJdLFtTbi5QQVRILCJnYXRld2F5LnNvdXJjZS10eXBlLnBhdGgiXSxbU24uSURFTlRJRklFUiwiZ2F0ZXdheS5zb3VyY2UtdHlwZS5pZGVudGlmaWVyIl0sW1NuLkNPTlNULCJnYXRld2F5LnNvdXJjZS10eXBlLmNvbnN0Il1dKSk7dmFyIEZuLEluO2UoIlNlcnZlclNpZGVScGNUeXBlIixGbiksZnVuY3Rpb24oZSl7ZS5XaXRoUmVzcG9uc2U9InR3b1dheSIsZS5XaXRob3V0UmVzcG9uc2U9Im9uZVdheSJ9KEZufHxlKCJTZXJ2ZXJTaWRlUnBjVHlwZSIsRm49e30pKSxlKCJSZXF1ZXN0VHlwZSIsSW4pLGZ1bmN0aW9uKGUpe2UuQ09OTkVDVF9SRVFVRVNUPSJjb25uZWN0UmVxdWVzdHMiLGUuRElTQ09OTkVDVF9SRVFVRVNUPSJkaXNjb25uZWN0UmVxdWVzdHMiLGUuQVRUUklCVVRFX1JFUVVFU1Q9ImF0dHJpYnV0ZVJlcXVlc3RzIixlLkFUVFJJQlVURV9VUERBVEU9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuU0VSVkVSX1NJREVfUlBDPSJzZXJ2ZXJTaWRlUnBjIn0oSW58fGUoIlJlcXVlc3RUeXBlIixJbj17fSkpO2NvbnN0IEFuPWUoIlJlcXVlc3RUeXBlc1RyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW0luLkNPTk5FQ1RfUkVRVUVTVCwiZ2F0ZXdheS5yZXF1ZXN0LmNvbm5lY3QtcmVxdWVzdCJdLFtJbi5ESVNDT05ORUNUX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5kaXNjb25uZWN0LXJlcXVlc3QiXSxbSW4uQVRUUklCVVRFX1JFUVVFU1QsImdhdGV3YXkucmVxdWVzdC5hdHRyaWJ1dGUtcmVxdWVzdCJdLFtJbi5BVFRSSUJVVEVfVVBEQVRFLCJnYXRld2F5LnJlcXVlc3QuYXR0cmlidXRlLXVwZGF0ZSJdLFtJbi5TRVJWRVJfU0lERV9SUEMsImdhdGV3YXkucmVxdWVzdC5ycGMtY29ubmVjdGlvbiJdXSkpO3ZhciBObjtlKCJNYXBwaW5nS2V5c1R5cGUiLE5uKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5DVVNUT009ImV4dGVuc2lvbkNvbmZpZyIsZS5SUENfTUVUSE9EUz0icnBjX21ldGhvZHMiLGUuQVRUUklCVVRFU19VUERBVEVTPSJhdHRyaWJ1dGVzX3VwZGF0ZXMifShObnx8ZSgiTWFwcGluZ0tleXNUeXBlIixObj17fSkpO2NvbnN0IE1uPWUoIk1hcHBpbmdLZXlzUGFuZWxUaXRsZVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LnRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5LmtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5LnJwYy1tZXRob2RzIl1dKSksRW49ZSgiTWFwcGluZ0tleXNBZGRLZXlUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1tObi5BVFRSSUJVVEVTLCJnYXRld2F5LmFkZC1hdHRyaWJ1dGUiXSxbTm4uVElNRVNFUklFUywiZ2F0ZXdheS5hZGQtdGltZXNlcmllcyJdLFtObi5DVVNUT00sImdhdGV3YXkuYWRkLWtleSJdLFtObi5BVFRSSUJVVEVTX1VQREFURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZS11cGRhdGUiXSxbTm4uUlBDX01FVEhPRFMsImdhdGV3YXkuYWRkLXJwYy1tZXRob2QiXV0pKSxxbj1lKCJNYXBwaW5nS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW05uLkNVU1RPTSwiZ2F0ZXdheS5kZWxldGUta2V5Il0sW05uLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFtObi5SUENfTUVUSE9EUywiZ2F0ZXdheS5kZWxldGUtcnBjLW1ldGhvZCJdXSkpLERuPWUoIk1hcHBpbmdLZXlzTm9LZXlzVGV4dFRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW05uLkFUVFJJQlVURVMsImdhdGV3YXkubm8tYXR0cmlidXRlcyJdLFtObi5USU1FU0VSSUVTLCJnYXRld2F5Lm5vLXRpbWVzZXJpZXMiXSxbTm4uQ1VTVE9NLCJnYXRld2F5Lm5vLWtleXMiXSxbTm4uQVRUUklCVVRFU19VUERBVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZS11cGRhdGVzIl0sW05uLlJQQ19NRVRIT0RTLCJnYXRld2F5Lm5vLXJwYy1tZXRob2RzIl1dKSk7dmFyIFBuLEduLE9uO2UoIlNlcnZlclNpZGVSUENUeXBlIixQbiksZnVuY3Rpb24oZSl7ZS5PTkVfV0FZPSJvbmVXYXkiLGUuVFdPX1dBWT0idHdvV2F5In0oUG58fGUoIlNlcnZlclNpZGVSUENUeXBlIixQbj17fSkpLGUoIk1hcHBpbmdWYWx1ZVR5cGUiLEduKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLklOVEVHRVI9ImludGVnZXIiLGUuRE9VQkxFPSJkb3VibGUiLGUuQk9PTEVBTj0iYm9vbGVhbiJ9KEdufHxlKCJNYXBwaW5nVmFsdWVUeXBlIixHbj17fSkpLGUoIk1vZGlmaWVyVHlwZSIsT24pLGZ1bmN0aW9uKGUpe2UuRElWSURFUj0iZGl2aWRlciIsZS5NVUxUSVBMSUVSPSJtdWx0aXBsaWVyIn0oT258fGUoIk1vZGlmaWVyVHlwZSIsT249e30pKTtjb25zdCBSbj1lKCJNb2RpZmllclR5cGVzTWFwIixuZXcgTWFwKFtbT24uRElWSURFUix7bmFtZToiZ2F0ZXdheS5kaXZpZGVyIixpY29uOiJtZGk6ZGl2aXNpb24ifV0sW09uLk1VTFRJUExJRVIse25hbWU6ImdhdGV3YXkubXVsdGlwbGllciIsaWNvbjoibWRpOm11bHRpcGxpY2F0aW9uIn1dXSkpLFZuPWUoIm1hcHBpbmdWYWx1ZVR5cGVzTWFwIixuZXcgTWFwKFtbR24uU1RSSU5HLHtuYW1lOiJ2YWx1ZS5zdHJpbmciLGljb246Im1kaTpmb3JtYXQtdGV4dCJ9XSxbR24uSU5URUdFUix7bmFtZToidmFsdWUuaW50ZWdlciIsaWNvbjoibWRpOm51bWVyaWMifV0sW0duLkRPVUJMRSx7bmFtZToidmFsdWUuZG91YmxlIixpY29uOiJtZGk6bnVtZXJpYyJ9XSxbR24uQk9PTEVBTix7bmFtZToidmFsdWUuYm9vbGVhbiIsaWNvbjoibWRpOmNoZWNrYm94LW1hcmtlZC1vdXRsaW5lIn1dXSkpLEJuPWUoIkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbd24uSlNPTiwiZ2F0ZXdheS5KU09OLWhpbnQiXSxbd24uQllURVMsImdhdGV3YXkuYnl0ZXMtaGludCJdLFt3bi5DVVNUT00sImdhdGV3YXkuY3VzdG9tLWhpbnQiXV0pKTt2YXIgVW47ZSgiU2VjdXJpdHlQb2xpY3kiLFVuKSxmdW5jdGlvbihlKXtlLkJBU0lDMTI4PSJCYXNpYzEyOFJzYTE1IixlLkJBU0lDMjU2PSJCYXNpYzI1NiIsZS5CQVNJQzI1NlNIQT0iQmFzaWMyNTZTaGEyNTYifShVbnx8ZSgiU2VjdXJpdHlQb2xpY3kiLFVuPXt9KSk7Y29uc3QgX249ZSgiU2VjdXJpdHlQb2xpY3lUeXBlcyIsW3t2YWx1ZTpVbi5CQVNJQzEyOCxuYW1lOiJCYXNpYzEyOFJTQTE1In0se3ZhbHVlOlVuLkJBU0lDMjU2LG5hbWU6IkJhc2ljMjU2In0se3ZhbHVlOlVuLkJBU0lDMjU2U0hBLG5hbWU6IkJhc2ljMjU2U0hBMjU2In1dKTt2YXIgSG47ZSgiTW9kYnVzUHJvdG9jb2xUeXBlIixIbiksZnVuY3Rpb24oZSl7ZS5UQ1A9InRjcCIsZS5VRFA9InVkcCIsZS5TZXJpYWw9InNlcmlhbCJ9KEhufHxlKCJNb2RidXNQcm90b2NvbFR5cGUiLEhuPXt9KSk7Y29uc3Qgem49ZSgiTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAiLG5ldyBNYXAoW1tIbi5UQ1AsIlRDUCJdLFtIbi5VRFAsIlVEUCJdLFtIbi5TZXJpYWwsIlNlcmlhbCJdXSkpO3ZhciBXbixqbjtlKCJNb2RidXNNZXRob2RUeXBlIixXbiksZnVuY3Rpb24oZSl7ZS5TT0NLRVQ9InNvY2tldCIsZS5SVFU9InJ0dSJ9KFdufHxlKCJNb2RidXNNZXRob2RUeXBlIixXbj17fSkpLGUoIk1vZGJ1c1NlcmlhbE1ldGhvZFR5cGUiLGpuKSxmdW5jdGlvbihlKXtlLlJUVT0icnR1IixlLkFTQ0lJPSJhc2NpaSJ9KGpufHxlKCJNb2RidXNTZXJpYWxNZXRob2RUeXBlIixqbj17fSkpO2NvbnN0IEtuPWUoIk1vZGJ1c01ldGhvZExhYmVsc01hcCIsbmV3IE1hcChbW1duLlNPQ0tFVCwiU29ja2V0Il0sW1duLlJUVSwiUlRVIl0sW2puLkFTQ0lJLCJBU0NJSSJdXSkpLCRuPWUoIk1vZGJ1c0J5dGVTaXplcyIsWzUsNiw3LDhdKTt2YXIgWW47ZSgiTW9kYnVzUGFyaXR5IixZbiksZnVuY3Rpb24oZSl7ZS5FdmVuPSJFIixlLk9kZD0iTyIsZS5Ob25lPSJOIn0oWW58fGUoIk1vZGJ1c1Bhcml0eSIsWW49e30pKTtjb25zdCBRbj1lKCJNb2RidXNQYXJpdHlMYWJlbHNNYXAiLG5ldyBNYXAoW1tZbi5FdmVuLCJFdmVuIl0sW1luLk9kZCwiT2RkIl0sW1luLk5vbmUsIk5vbmUiXV0pKTt2YXIgSm4sWG47ZSgiTW9kYnVzT3JkZXJUeXBlIixKbiksZnVuY3Rpb24oZSl7ZS5CSUc9IkJJRyIsZS5MSVRUTEU9IkxJVFRMRSJ9KEpufHxlKCJNb2RidXNPcmRlclR5cGUiLEpuPXt9KSksZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbiksZnVuY3Rpb24oZSl7ZS5Ib2xkaW5nUmVnaXN0ZXJzPSJob2xkaW5nX3JlZ2lzdGVycyIsZS5Db2lsc0luaXRpYWxpemVyPSJjb2lsc19pbml0aWFsaXplciIsZS5JbnB1dFJlZ2lzdGVycz0iaW5wdXRfcmVnaXN0ZXJzIixlLkRpc2NyZXRlSW5wdXRzPSJkaXNjcmV0ZV9pbnB1dHMifShYbnx8ZSgiTW9kYnVzUmVnaXN0ZXJUeXBlIixYbj17fSkpO2NvbnN0IFpuPWUoIk1vZGJ1c1JlZ2lzdGVyVHJhbnNsYXRpb25zTWFwIixuZXcgTWFwKFtbWG4uSG9sZGluZ1JlZ2lzdGVycywiZ2F0ZXdheS5ob2xkaW5nX3JlZ2lzdGVycyJdLFtYbi5Db2lsc0luaXRpYWxpemVyLCJnYXRld2F5LmNvaWxzX2luaXRpYWxpemVyIl0sW1huLklucHV0UmVnaXN0ZXJzLCJnYXRld2F5LmlucHV0X3JlZ2lzdGVycyJdLFtYbi5EaXNjcmV0ZUlucHV0cywiZ2F0ZXdheS5kaXNjcmV0ZV9pbnB1dHMiXV0pKTt2YXIgZWE7ZSgiTW9kYnVzRGF0YVR5cGUiLGVhKSxmdW5jdGlvbihlKXtlLlNUUklORz0ic3RyaW5nIixlLkJZVEVTPSJieXRlcyIsZS5CSVRTPSJiaXRzIixlLklOVDg9IjhpbnQiLGUuVUlOVDg9Ijh1aW50IixlLkZMT0FUOD0iOGZsb2F0IixlLklOVDE2PSIxNmludCIsZS5VSU5UMTY9IjE2dWludCIsZS5GTE9BVDE2PSIxNmZsb2F0IixlLklOVDMyPSIzMmludCIsZS5VSU5UMzI9IjMydWludCIsZS5GTE9BVDMyPSIzMmZsb2F0IixlLklOVDY0PSI2NGludCIsZS5VSU5UNjQ9IjY0dWludCIsZS5GTE9BVDY0PSI2NGZsb2F0In0oZWF8fGUoIk1vZGJ1c0RhdGFUeXBlIixlYT17fSkpO2NvbnN0IHRhPWUoIk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzIixbZWEuQllURVMsZWEuQklUUyxlYS5TVFJJTkddKTt2YXIgbmEsYWE7ZSgiTW9kYnVzT2JqZWN0Q291bnRCeURhdGFUeXBlIixuYSksZnVuY3Rpb24oZSl7ZVtlWyI4aW50Il09MV09IjhpbnQiLGVbZVsiOHVpbnQiXT0xXT0iOHVpbnQiLGVbZVsiOGZsb2F0Il09MV09IjhmbG9hdCIsZVtlWyIxNmludCJdPTFdPSIxNmludCIsZVtlWyIxNnVpbnQiXT0xXT0iMTZ1aW50IixlW2VbIjE2ZmxvYXQiXT0xXT0iMTZmbG9hdCIsZVtlWyIzMmludCJdPTJdPSIzMmludCIsZVtlWyIzMnVpbnQiXT0yXT0iMzJ1aW50IixlW2VbIjMyZmxvYXQiXT0yXT0iMzJmbG9hdCIsZVtlWyI2NGludCJdPTRdPSI2NGludCIsZVtlWyI2NHVpbnQiXT00XT0iNjR1aW50IixlW2VbIjY0ZmxvYXQiXT00XT0iNjRmbG9hdCJ9KG5hfHxlKCJNb2RidXNPYmplY3RDb3VudEJ5RGF0YVR5cGUiLG5hPXt9KSksZSgiTW9kYnVzVmFsdWVLZXkiLGFhKSxmdW5jdGlvbihlKXtlLkFUVFJJQlVURVM9ImF0dHJpYnV0ZXMiLGUuVElNRVNFUklFUz0idGltZXNlcmllcyIsZS5BVFRSSUJVVEVTX1VQREFURVM9ImF0dHJpYnV0ZVVwZGF0ZXMiLGUuUlBDX1JFUVVFU1RTPSJycGMifShhYXx8ZSgiTW9kYnVzVmFsdWVLZXkiLGFhPXt9KSk7Y29uc3Qgb2E9ZSgiTW9kYnVzS2V5c1BhbmVsVGl0bGVUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5LmF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS50aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkucnBjLXJlcXVlc3RzIl1dKSksaWE9ZSgiTW9kYnVzS2V5c0FkZEtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuYWRkLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmFkZC10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5hZGQtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuYWRkLXJwYy1yZXF1ZXN0Il1dKSkscmE9ZSgiTW9kYnVzS2V5c0RlbGV0ZUtleVRyYW5zbGF0aW9uc01hcCIsbmV3IE1hcChbW2FhLkFUVFJJQlVURVMsImdhdGV3YXkuZGVsZXRlLWF0dHJpYnV0ZSJdLFthYS5USU1FU0VSSUVTLCJnYXRld2F5LmRlbGV0ZS10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5kZWxldGUtYXR0cmlidXRlLXVwZGF0ZSJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkuZGVsZXRlLXJwYy1yZXF1ZXN0Il1dKSksc2E9ZSgiTW9kYnVzS2V5c05vS2V5c1RleHRUcmFuc2xhdGlvbnNNYXAiLG5ldyBNYXAoW1thYS5BVFRSSUJVVEVTLCJnYXRld2F5Lm5vLWF0dHJpYnV0ZXMiXSxbYWEuVElNRVNFUklFUywiZ2F0ZXdheS5uby10aW1lc2VyaWVzIl0sW2FhLkFUVFJJQlVURVNfVVBEQVRFUywiZ2F0ZXdheS5uby1hdHRyaWJ1dGUtdXBkYXRlcyJdLFthYS5SUENfUkVRVUVTVFMsImdhdGV3YXkubm8tcnBjLXJlcXVlc3RzIl1dKSksbGE9ZSgiTW9kYnVzQmF1ZHJhdGVzIixbNDgwMCw5NjAwLDE5MjAwLDM4NDAwLDU3NjAwLDExNTIwMCwyMzA0MDAsNDYwODAwLDkyMTYwMF0pO2NsYXNzIGNhe2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsidHMiLCJzdGF0dXMiLCJtZXNzYWdlIl0sdGhpcy5nYXRld2F5TG9nTGlua3M9W3tuYW1lOiJHZW5lcmFsIixrZXk6IkxPR1MifSx7bmFtZToiU2VydmljZSIsa2V5OiJTRVJWSUNFX0xPR1MifSx7bmFtZToiQ29ubmVjdGlvbiIsa2V5OiJDT05ORUNUSU9OX0xPR1MifSx7bmFtZToiU3RvcmFnZSIsa2V5OiJTVE9SQUdFX0xPR1MifSx7a2V5OiJFWFRFTlNJT05TX0xPR1MiLG5hbWU6IkV4dGVuc2lvbiJ9XTtjb25zdCBlPXtwcm9wZXJ0eToidHMiLGRpcmVjdGlvbjp3LkRFU0N9O3RoaXMucGFnZUxpbms9bmV3IEMoMTAsMCxudWxsLGUpLHRoaXMuZGF0YVNvdXJjZT1uZXcgeShbXSl9bmdPbkluaXQoKXt0aGlzLnVwZGF0ZVdpZGdldFRpdGxlKCl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3I9dGhpcy5wYWdpbmF0b3IsdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vblRpbWV3aW5kb3dDaGFuZ2VGdW5jdGlvbj1lPT4odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5vcHRpb25zLnRpbWVXaW5kb3dDb25maWc9ZSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksZSksdGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmxvZ0xpbmtzPVt7a2V5OmAke2Uua2V5fV9MT0dTYCxuYW1lOiJDb25uZWN0b3IiLGZpbHRlckZuOmU9PiFlLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX0se2tleTpgJHtlLmtleX1fTE9HU2AsbmFtZToiQ29udmVydGVyIixmaWx0ZXJGbjplPT5lLm1lc3NhZ2UuaW5jbHVkZXMoIl9jb252ZXJ0ZXIucHkiKX1dfWVsc2UgdGhpcy5sb2dMaW5rcz10aGlzLmdhdGV3YXlMb2dMaW5rczt0aGlzLmFjdGl2ZUxpbms9dGhpcy5sb2dMaW5rc1swXSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXVwZGF0ZVdpZGdldFRpdGxlKCl7aWYodGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3JMb2cmJnRoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlKXtjb25zdCBlPXRoaXMuY3R4LndpZGdldENvbmZpZy50aXRsZSx0PSIke2Nvbm5lY3Rvck5hbWV9IjtpZihlLmluY2x1ZGVzKHQpKXtjb25zdCBuPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpW3RoaXMuY3R4LnNldHRpbmdzLmNvbm5lY3RvckxvZ1N0YXRlXTt0aGlzLmN0eC53aWRnZXRUaXRsZT1lLnJlcGxhY2UodCxuLmtleSl9fX11cGRhdGVEYXRhKCl7aWYodGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhLmxlbmd0aCYmdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhWzBdKXtsZXQgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGFbMF0uZGF0YS5tYXAoKGU9Pntjb25zdCB0PXt0czplWzBdLGtleTp0aGlzLmFjdGl2ZUxpbmsua2V5LG1lc3NhZ2U6ZVsxXSxzdGF0dXM6IklOVkFMSUQgTE9HIEZPUk1BVCJ9O3RyeXt0Lm1lc3NhZ2U9L1xbKC4qKS8uZXhlYyhlWzFdKVswXX1jYXRjaChuKXt0Lm1lc3NhZ2U9ZVsxXX10cnl7dC5zdGF0dXM9ZVsxXS5tYXRjaCgvXHwoXHcrKVx8LylbMV19Y2F0Y2goZSl7dC5zdGF0dXM9IklOVkFMSUQgTE9HIEZPUk1BVCJ9cmV0dXJuIHR9KSk7dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuJiYoZT1lLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVMaW5rLmZpbHRlckZuKGUpKSkpLHRoaXMuZGF0YVNvdXJjZS5kYXRhPWV9fW9uVGFiQ2hhbmdlZChlKXt0aGlzLmFjdGl2ZUxpbms9ZSx0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbigpfXN0YXR1c0NsYXNzKGUpe3N3aXRjaChlKXtjYXNlIHF0LkRFQlVHOnJldHVybiJzdGF0dXMgc3RhdHVzLWRlYnVnIjtjYXNlIHF0LldBUk5JTkc6cmV0dXJuInN0YXR1cyBzdGF0dXMtd2FybmluZyI7Y2FzZSBxdC5FUlJPUjpjYXNlIHF0LkVYQ0VQVElPTjpyZXR1cm4ic3RhdHVzIHN0YXR1cy1lcnJvciI7ZGVmYXVsdDpyZXR1cm4ic3RhdHVzIHN0YXR1cy1pbmZvIn19c3RhdHVzQ2xhc3NNc2coZSl7aWYoZT09PXF0LkVYQ0VQVElPTilyZXR1cm4ibXNnLXN0YXR1cy1leGNlcHRpb24ifXRyYWNrQnlMb2dUcyhlLHQpe3JldHVybiB0LnRzfWNoYW5nZVN1YnNjcmlwdGlvbigpe3RoaXMuY3R4LmRhdGFzb3VyY2VzJiZ0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlcyYmKHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24ub3B0aW9ucy5kYXRhc291cmNlc1swXS5kYXRhS2V5cz1be25hbWU6dGhpcy5hY3RpdmVMaW5rLmtleSx0eXBlOlQudGltZXNlcmllcyxzZXR0aW5nczp7fX1dLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnVwZGF0ZURhdGFTdWJzY3JpcHRpb25zKCksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5jYWxsYmFja3Mub25EYXRhVXBkYXRlZD0oKT0+e3RoaXMudXBkYXRlRGF0YSgpfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjYSxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Y2Esc2VsZWN0b3I6InRiLWdhdGV3YXktbG9ncyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToic2VhcmNoSW5wdXRGaWVsZCIsZmlyc3Q6ITAscHJlZGljYXRlOlsic2VhcmNoSW5wdXQiXSxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic29ydCIsZmlyc3Q6ITAscHJlZGljYXRlOmcsZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InBhZ2luYXRvciIsZmlyc3Q6ITAscHJlZGljYXRlOmgsZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRUYWJsZSxzZWxlY3RvcjoibWF0LXRhYmxlLCB0YWJsZVttYXQtdGFibGVdIixleHBvcnRBczpbIm1hdFRhYmxlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsRGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyQ2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyUm93RGVmLHNlbGVjdG9yOiJbbWF0SGVhZGVyUm93RGVmXSIsaW5wdXRzOlsibWF0SGVhZGVyUm93RGVmIiwibWF0SGVhZGVyUm93RGVmU3RpY2t5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDb2x1bW5EZWYsc2VsZWN0b3I6IlttYXRDb2x1bW5EZWZdIixpbnB1dHM6WyJtYXRDb2x1bW5EZWYiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGxEZWYsc2VsZWN0b3I6IlttYXRDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRSb3dEZWYsc2VsZWN0b3I6IlttYXRSb3dEZWZdIixpbnB1dHM6WyJtYXRSb3dEZWZDb2x1bW5zIiwibWF0Um93RGVmV2hlbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbCxzZWxlY3RvcjoibWF0LWhlYWRlci1jZWxsLCB0aFttYXQtaGVhZGVyLWNlbGxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENlbGwsc2VsZWN0b3I6Im1hdC1jZWxsLCB0ZFttYXQtY2VsbF0ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0SGVhZGVyUm93LHNlbGVjdG9yOiJtYXQtaGVhZGVyLXJvdywgdHJbbWF0LWhlYWRlci1yb3ddIixleHBvcnRBczpbIm1hdEhlYWRlclJvdyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0Um93LHNlbGVjdG9yOiJtYXQtcm93LCB0clttYXQtcm93XSIsZXhwb3J0QXM6WyJtYXRSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp4Lk1hdFBhZ2luYXRvcixzZWxlY3RvcjoibWF0LXBhZ2luYXRvciIsaW5wdXRzOlsiY29sb3IiLCJwYWdlSW5kZXgiLCJsZW5ndGgiLCJwYWdlU2l6ZSIsInBhZ2VTaXplT3B0aW9ucyIsImhpZGVQYWdlU2l6ZSIsInNob3dGaXJzdExhc3RCdXR0b25zIiwic2VsZWN0Q29uZmlnIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsicGFnZSJdLGV4cG9ydEFzOlsibWF0UGFnaW5hdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp6Lk1hdERpdmlkZXIsc2VsZWN0b3I6Im1hdC1kaXZpZGVyIixpbnB1dHM6WyJ2ZXJ0aWNhbCIsImluc2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXYsc2VsZWN0b3I6IlttYXQtdGFiLW5hdi1iYXJdIixpbnB1dHM6WyJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJiYWNrZ3JvdW5kQ29sb3IiLCJkaXNhYmxlUmlwcGxlIiwiY29sb3IiLCJ0YWJQYW5lbCJdLGV4cG9ydEFzOlsibWF0VGFiTmF2QmFyIiwibWF0VGFiTmF2Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJOYXZQYW5lbCxzZWxlY3RvcjoibWF0LXRhYi1uYXYtcGFuZWwiLGlucHV0czpbImlkIl0sZXhwb3J0QXM6WyJtYXRUYWJOYXZQYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiTGluayxzZWxlY3RvcjoiW21hdC10YWItbGlua10sIFttYXRUYWJMaW5rXSIsaW5wdXRzOlsiYWN0aXZlIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJpZCJdLGV4cG9ydEFzOlsibWF0VGFiTGluayJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUxvZ3NDb21wb25lbnQiLGNhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmNhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWxvZ3MiLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5hdiBtYXQtdGFiLW5hdi1iYXIgW3RhYlBhbmVsXT0idGFiUGFuZWwiPlxuICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPSJsZXQgbGluayBvZiBsb2dMaW5rcyJcbiAgICAgKGNsaWNrKT0ib25UYWJDaGFuZ2VkKGxpbmspIlxuICAgICBbYWN0aXZlXT0iYWN0aXZlTGluay5uYW1lID09PSBsaW5rLm5hbWUiPiB7eyBsaW5rLm5hbWUgfX0gPC9hPlxuPC9uYXY+XG48bWF0LXRhYi1uYXYtcGFuZWwgI3RhYlBhbmVsPjwvbWF0LXRhYi1uYXYtcGFuZWw+XG48dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSIgW3RyYWNrQnldPSJ0cmFja0J5TG9nVHMiXG4gICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InRzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDIwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAge3sgYXR0cmlidXRlLnRzIHwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgIDwvbWF0LWNlbGw+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ic3RhdHVzIj5cbiAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDEwJSI+e3sgXCd3aWRnZXRzLmdhdGV3YXkubGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWhlYWRlci1jZWxsPlxuICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSI+XG4gICAgICA8c3BhbiBbY2xhc3NdPSJzdGF0dXNDbGFzcyhhdHRyaWJ1dGUuc3RhdHVzKSI+e3sgYXR0cmlidXRlLnN0YXR1cyB9fTwvc3Bhbj5cbiAgICA8L21hdC1jZWxsPlxuICA8L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9Im1lc3NhZ2UiPlxuICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIFtjbGFzc109InN0YXR1c0NsYXNzTXNnKGF0dHJpYnV0ZS5zdGF0dXMpIj5cbiAgICAgIHt7IGF0dHJpYnV0ZS5tZXNzYWdlIH19XG4gICAgPC9tYXQtY2VsbD5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IiAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuPC90YWJsZT5cbjxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwIlxuICAgICAgZnhGbGV4IGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbjxzcGFuIGZ4RmxleCBbZnhTaG93XT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCAhPT0gMCI+PC9zcGFuPlxuPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG48bWF0LXBhZ2luYXRvciBbbGVuZ3RoXT0iZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCJcbiAgICAgICAgICAgICAgIFtwYWdlSW5kZXhdPSJwYWdlTGluay5wYWdlIlxuICAgICAgICAgICAgICAgW3BhZ2VTaXplXT0icGFnZUxpbmsucGFnZVNpemUiXG4gICAgICAgICAgICAgICBbcGFnZVNpemVPcHRpb25zXT0iWzEwLCAyMCwgMzBdIj48L21hdC1wYWdpbmF0b3I+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3cteDphdXRvO3BhZGRpbmc6MH06aG9zdCAuc3RhdHVze2JvcmRlci1yYWRpdXM6MjBweDtmb250LXdlaWdodDo1MDA7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLWRlYnVne2NvbG9yOmdyZWVuO2JhY2tncm91bmQ6IzAwODAwMDFhfTpob3N0IC5zdGF0dXMtd2FybmluZ3tjb2xvcjpvcmFuZ2U7YmFja2dyb3VuZDojZmZhNTAwMWF9Omhvc3QgLnN0YXR1cy1lcnJvcntjb2xvcjpyZWQ7YmFja2dyb3VuZDojZmYwMDAwMWF9Omhvc3QgLnN0YXR1cy1pbmZve2NvbG9yOiMwMGY7YmFja2dyb3VuZDojMDAwMDgwMWF9Omhvc3QgLm1zZy1zdGF0dXMtZXhjZXB0aW9ue2NvbG9yOnJlZH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2N0eDpbe3R5cGU6YX1dLGRpYWxvZ1JlZjpbe3R5cGU6YX1dLHNlYXJjaElucHV0RmllbGQ6W3t0eXBlOm8sYXJnczpbInNlYXJjaElucHV0Il19XSxzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0scGFnaW5hdG9yOlt7dHlwZTpvLGFyZ3M6W2hdfV19fSk7Y2xhc3MgcGF7Y29uc3RydWN0b3IoZSx0LG4pe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLnV0aWxzPW4sdGhpcy5pc051bWVyaWNEYXRhPSExLHRoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3RhdGlzdGljc0tleXM9W10sdGhpcy5jb21tYW5kcz1bXSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnM9e2NhbGxiYWNrczp7b25EYXRhVXBkYXRlZDooKT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfSx1c2VEYXNoYm9hcmRUaW1ld2luZG93OiExLGxlZ2VuZENvbmZpZzp7cG9zaXRpb246Uy5ib3R0b219fSx0aGlzLmluaXQ9KCk9Pnt0aGlzLmZsb3RDdHg9eyRzY29wZTp0aGlzLmN0eC4kc2NvcGUsJGluamVjdG9yOnRoaXMuY3R4LiRpbmplY3Rvcix1dGlsczp0aGlzLmN0eC51dGlscyxpc01vYmlsZTp0aGlzLmN0eC5pc01vYmlsZSxpc0VkaXQ6dGhpcy5jdHguaXNFZGl0LHN1YnNjcmlwdGlvbkFwaTp0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGksZGV0ZWN0Q2hhbmdlczp0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzLHNldHRpbmdzOnRoaXMuY3R4LnNldHRpbmdzfX0sdGhpcy51cGRhdGVDaGFydD0oKT0+e30sdGhpcy5yZXNpemU9KCk9Pnt9O2NvbnN0IGE9e3Byb3BlcnR5OiIwIixkaXJlY3Rpb246dy5ERVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwwLG51bGwsYSksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiMCIsIjEiXSx0aGlzLmRhdGFTb3VyY2U9bmV3IHkoW10pLHRoaXMuc3RhdGlzdGljRm9ybT10aGlzLmZiLmdyb3VwKHtzdGF0aXN0aWNLZXk6W251bGwsW11dfSksdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e3RoaXMuY29tbWFuZE9iaj1udWxsLHRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5jb21tYW5kT2JqPXRoaXMuY29tbWFuZHMuZmluZCgodD0+dC5hdHRyaWJ1dGVPbkdhdGV3YXk9PT1lKSkpLHRoaXMuc3Vic2NyaXB0aW9uSW5mbyYmdGhpcy5jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24odGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi5kYXRhc291cmNlc1swXS5lbnRpdHksZSl9KSl9bmdBZnRlclZpZXdJbml0KCl7aWYodGhpcy5kYXRhU291cmNlLnNvcnQ9dGhpcy5zb3J0LHRoaXMuc29ydC5zb3J0Q2hhbmdlLnN1YnNjcmliZSgoKCk9PnRoaXMuc29ydERhdGEoKSkpLHRoaXMuaW5pdCgpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXMubGVuZ3RoKXtjb25zdCBlPXRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZW50aXR5O2lmKGUuaWQuaWQ9PT1rKXJldHVybjt0aGlzLmdlbmVyYWw/dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eVRpbWVzZXJpZXNMYXRlc3QoZS5pZCkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj1PYmplY3Qua2V5cyh0KS5maWx0ZXIoKGU9PmUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1Byb2R1Y2VkIil8fGUuaW5jbHVkZXMoIkNvbm5lY3RvckV2ZW50c1NlbnQiKSkpO3RoaXMuY3JlYXRlR2VuZXJhbENoYXJ0c1N1YnNjcmlwdGlvbihlLG4pfSkpOnRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKGUuaWQsTC5TSEFSRURfU0NPUEUsWyJnZW5lcmFsX2NvbmZpZ3VyYXRpb24iXSkuc3Vic2NyaWJlKCh0PT57dCYmdC5sZW5ndGgmJih0aGlzLmNvbW1hbmRzPXRbMF0udmFsdWUuc3RhdGlzdGljcy5jb21tYW5kcywhdGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5IikudmFsdWUmJnRoaXMuY29tbWFuZHMmJnRoaXMuY29tbWFuZHMubGVuZ3RoJiYodGhpcy5zdGF0aXN0aWNGb3JtLmdldCgic3RhdGlzdGljS2V5Iikuc2V0VmFsdWUodGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpLHRoaXMuY3JlYXRlQ2hhcnRzU3Vic2NyaXB0aW9uKGUsdGhpcy5jb21tYW5kc1swXS5hdHRyaWJ1dGVPbkdhdGV3YXkpKSl9KSl9fW5hdmlnYXRlVG9TdGF0aXN0aWNzKCl7Y29uc3QgZT1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTt0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIub3BlblN0YXRlKCJjb25maWd1cmF0aW9uIixlKX1zb3J0RGF0YSgpe3RoaXMuZGF0YVNvdXJjZS5zb3J0RGF0YSh0aGlzLmRhdGFTb3VyY2UuZGF0YSx0aGlzLnNvcnQpfW9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGUpe3RoaXMubGVnZW5kRGF0YS5rZXlzW2VdLmRhdGFLZXkuaGlkZGVuPSF0aGlzLmxlZ2VuZERhdGEua2V5c1tlXS5kYXRhS2V5LmhpZGRlbix0aGlzLnN1YnNjcmlwdGlvbi51cGRhdGVEYXRhVmlzaWJpbGl0eShlKX1jcmVhdGVDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1be25hbWU6dCxsYWJlbDp0fV0sdGhpcy5zdWJzY3JpcHRpb25JbmZvPW4sdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWNyZWF0ZUdlbmVyYWxDaGFydHNTdWJzY3JpcHRpb24oZSx0KXtjb25zdCBuPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOmUuaWQuaWQsZW50aXR5TmFtZTplLm5hbWUsdGltZXNlcmllczpbXX1dO25bMF0udGltZXNlcmllcz1bXSx0Py5sZW5ndGgmJnQuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUsbGFiZWw6ZX0pfSkpLHRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24uZGF0YXNvdXJjZXNbMF0uZGF0YUtleXMuZm9yRWFjaCgoZT0+e25bMF0udGltZXNlcmllcy5wdXNoKHtuYW1lOmUubmFtZSxsYWJlbDplLmxhYmVsfSl9KSksdGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24obiksdGhpcy5jdHguZGVmYXVsdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0KCl7dGhpcy5yZXNpemUkJiZ0aGlzLnJlc2l6ZSQuZGlzY29ubmVjdCgpLHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfW9uRGF0YVVwZGF0ZUVycm9yKGUpe2NvbnN0IHQ9dGhpcy51dGlscy5wYXJzZUV4Y2VwdGlvbihlKTtsZXQgbj10Lm5hbWU7dC5tZXNzYWdlJiYobis9IjogIit0Lm1lc3NhZ2UpLGNvbnNvbGUuZXJyb3Iobil9b25EYXRhVXBkYXRlZCgpe3RoaXMuaXNEYXRhT25seU51bWJlcnMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJih0aGlzLmNoYXJ0SW5pdGVkfHx0aGlzLmluaXRDaGFydCgpKX1pbml0Q2hhcnQoKXt0aGlzLmNoYXJ0SW5pdGVkPSEwLHRoaXMuZmxvdEN0eC4kY29udGFpbmVyPSQodGhpcy5zdGF0aXN0aWNDaGFydC5uYXRpdmVFbGVtZW50KSx0aGlzLnJlc2l6ZSQub2JzZXJ2ZSh0aGlzLnN0YXRpc3RpY0NoYXJ0Lm5hdGl2ZUVsZW1lbnQpfWlzRGF0YU9ubHlOdW1iZXJzKCl7dGhpcy5nZW5lcmFsP3RoaXMuaXNOdW1lcmljRGF0YT0hMDoodGhpcy5kYXRhU291cmNlLmRhdGE9dGhpcy5zdWJzY3JpcHRpb24uZGF0YS5sZW5ndGg/dGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhOltdLHRoaXMuZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCYmIXRoaXMuZGF0YVR5cGVEZWZpbmVkJiYodGhpcy5kYXRhVHlwZURlZmluZWQ9ITAsdGhpcy5pc051bWVyaWNEYXRhPXRoaXMuZGF0YVNvdXJjZS5kYXRhLmV2ZXJ5KChlPT4haXNOYU4oK2VbMV0pKSkpKX1jaGFuZ2VTdWJzY3JpcHRpb24oZSl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMucmVzZXQoKSx0aGlzLmN0eC5kYXRhc291cmNlc1swXS5lbnRpdHkmJnRoaXMuY3R4LnN1YnNjcmlwdGlvbkFwaS5jcmVhdGVTdWJzY3JpcHRpb25Gcm9tSW5mbyhBLnRpbWVzZXJpZXMsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuZGF0YVR5cGVEZWZpbmVkPSExLHRoaXMuc3Vic2NyaXB0aW9uPWUsdGhpcy5pc0RhdGFPbmx5TnVtYmVycygpLHRoaXMubGVnZW5kRGF0YT10aGlzLnN1YnNjcmlwdGlvbi5sZWdlbmREYXRhLHRoaXMuZmxvdEN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uPWUsdGhpcy5yZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuY3R4LmRldGVjdENoYW5nZXMoKSx0aGlzLmlzTnVtZXJpY0RhdGEmJnRoaXMuaW5pdENoYXJ0KCl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpYLlV0aWxzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cGEsc2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsaW5wdXRzOntjdHg6ImN0eCIsZ2VuZXJhbDoiZ2VuZXJhbCJ9LHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzb3J0IixmaXJzdDohMCxwcmVkaWNhdGU6ZyxkZXNjZW5kYW50czohMH0se3Byb3BlcnR5TmFtZToic3RhdGlzdGljQ2hhcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInN0YXRpc3RpY0NoYXJ0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0Lmx0LW1kPSJjb2x1bW4iPlxuICA8bWF0LWNhcmQgW2Zvcm1Hcm91cF09InN0YXRpc3RpY0Zvcm0iICpuZ0lmPSIhZ2VuZXJhbCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0YXRpc3RpY0tleSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGtleSBvZiBzdGF0aXN0aWNzS2V5cyIgW3ZhbHVlXT0ia2V5Ij5cbiAgICAgICAgICB7eyBrZXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb21tYW5kIG9mIGNvbW1hbmRzIiBbdmFsdWVdPSJjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSI+XG4gICAgICAgICAge3sgY29tbWFuZC5hdHRyaWJ1dGVPbkdhdGV3YXkgfX1cbiAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1lcnJvclxuICAgICAgKm5nSWY9IiFzdGF0aXN0aWNzS2V5cy5sZW5ndGggJiYgIWNvbW1hbmRzLmxlbmd0aCI+XG4gICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWMtY29tbWFuZHMtZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbWF0LWVycm9yPlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0ibmF2aWdhdGVUb1N0YXRpc3RpY3MoKSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3MtYnV0dG9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIiAqbmdJZj0iY29tbWFuZE9iaiI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IFt2YWx1ZV09ImNvbW1hbmRPYmouY29tbWFuZCIgZGlzYWJsZWQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9tYXQtY2FyZD5cbiAgPGRpdiBjbGFzcz0iY2hhcnQtYm94IiBmeExheW91dD0iY29sdW1uIj5cbiAgICA8ZGl2IGNsYXNzPSJjaGFydC1jb250YWluZXIiICNzdGF0aXN0aWNDaGFydCBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+PC9kaXY+XG4gICAgPHRhYmxlIFtmeFNob3ddPSIhaXNOdW1lcmljRGF0YSIgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgbWF0U29ydCBbbWF0U29ydEFjdGl2ZV09InBhZ2VMaW5rLnNvcnRPcmRlci5wcm9wZXJ0eSIgW21hdFNvcnREaXJlY3Rpb25dPSJwYWdlTGluay5zb3J0RGlyZWN0aW9uKCkiXG4gICAgICAgICAgIG1hdFNvcnREaXNhYmxlQ2xlYXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMCI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyPnt7IFwnd2lkZ2V0cy5nYXRld2F5LmNyZWF0ZWQtdGltZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCByb3c7IGxldCByb3dJbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICB7eyByb3dbMF18IGRhdGU6XCd5eXl5LU1NLWRkIEhIOm1tOnNzXCcgfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9IjEiPlxuICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogNzAlIj57eyBcJ3dpZGdldHMuZ2F0ZXdheS5tZXNzYWdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdyI+XG4gICAgICAgICAge3sgcm93WzFdIH19XG4gICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj0iZGlzcGxheWVkQ29sdW1uczsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgPG1hdC1yb3cgY2xhc3M9Im1hdC1yb3ctc2VsZWN0IlxuICAgICAgICAgICAgICAgKm1hdFJvd0RlZj0ibGV0IHJvdzsgY29sdW1uczogZGlzcGxheWVkQ29sdW1uczsiPjwvbWF0LXJvdz5cbiAgICA8L3RhYmxlPlxuICAgIDxzcGFuIFtmeFNob3ddPSJkYXRhU291cmNlLmRhdGEubGVuZ3RoID09PSAwICYmICFpc051bWVyaWNEYXRhIlxuICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7IFwnYXR0cmlidXRlLm5vLXRlbGVtZXRyeS10ZXh0XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPGRpdiBmeEZsZXggY2xhc3M9ImxlZ2VuZCIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgW2Z4U2hvd109ImlzTnVtZXJpY0RhdGEiPlxuICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWtleXMiICpuZ0Zvcj0ibGV0IGxlZ2VuZEtleSBvZiBsZWdlbmREYXRhPy5rZXlzIiBmeExheW91dD0icm93IlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9ImxlZ2VuZC1saW5lIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09ImxlZ2VuZEtleS5kYXRhS2V5LmNvbG9yIj48L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9ImxlZ2VuZC1sYWJlbCJcbiAgICAgICAgICAgICAoY2xpY2spPSJvbkxlZ2VuZEtleUhpZGRlbkNoYW5nZShsZWdlbmRLZXkuZGF0YUluZGV4KSJcbiAgICAgICAgICAgICBbY2xhc3NdPSJ7IFwnaGlkZGVuLWxhYmVsXCc6IGxlZ2VuZERhdGEua2V5c1tsZWdlbmRLZXkuZGF0YUluZGV4XS5kYXRhS2V5LmhpZGRlbiB9IlxuICAgICAgICAgICAgIFtpbm5lckhUTUxdPSJsZWdlbmRLZXkuZGF0YUtleS5sYWJlbCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3BhZGRpbmc6MH06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXJ7aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDo0MCU7aGVpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OjM1cHg7cGFkZGluZzoxNXB4O2dhcDoyMnB4fUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzUwcHgpezpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciBtYXQtY2FyZHt3aWR0aDoxMDAlfX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveCw6aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtmbGV4LWdyb3c6MX06aG9zdCAuc3RhdGlzdGljcy1jb250YWluZXIgLmNoYXJ0LWJveHtvdmVyZmxvdzphdXRvfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcj4qe2hlaWdodDoxMDAlfTpob3N0IC5sZWdlbmR7ZmxleC13cmFwOndyYXA7d2lkdGg6MTAwJTtwYWRkaW5nLXRvcDo4cHg7cGFkZGluZy1ib3R0b206NHB4O21hcmdpbi10b3A6MTVweH06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVse3BhZGRpbmc6MnB4IDIwcHggMnB4IDEwcHg7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWwuaGlkZGVuLWxhYmVse3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7b3BhY2l0eTouNn06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxhYmVsOmZvY3Vze291dGxpbmU6bm9uZX06aG9zdCAubGVnZW5kIC5sZWdlbmQta2V5cyAubGVnZW5kLWxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2lkdGg6MTVweDtoZWlnaHQ6M3B4O3RleHQtYWxpZ246bGVmdDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7b3V0bGluZTpub25lfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmhlLk1hdENhcmQsc2VsZWN0b3I6Im1hdC1jYXJkIixpbnB1dHM6WyJhcHBlYXJhbmNlIl0sZXhwb3J0QXM6WyJtYXRDYXJkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5EYXRlUGlwZSxuYW1lOiJkYXRlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U3RhdGlzdGljc0NvbXBvbmVudCIscGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc3RhdGlzdGljcyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciIgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtbWQ9ImNvbHVtbiI+XG4gIDxtYXQtY2FyZCBbZm9ybUdyb3VwXT0ic3RhdGlzdGljRm9ybSIgKm5nSWY9IiFnZW5lcmFsIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3RhdGlzdGljS2V5Ij5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQga2V5IG9mIHN0YXRpc3RpY3NLZXlzIiBbdmFsdWVdPSJrZXkiPlxuICAgICAgICAgIHt7IGtleSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgY29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQuYXR0cmlidXRlT25HYXRld2F5Ij5cbiAgICAgICAgICB7eyBjb21tYW5kLmF0dHJpYnV0ZU9uR2F0ZXdheSB9fVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iIXN0YXRpc3RpY3NLZXlzLmxlbmd0aCAmJiAhY29tbWFuZHMubGVuZ3RoIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpYy1jb21tYW5kcy1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gICAgPGRpdj5cbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJuYXZpZ2F0ZVRvU3RhdGlzdGljcygpIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljcy1idXR0b25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siICpuZ0lmPSJjb21tYW5kT2JqIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgW3ZhbHVlXT0iY29tbWFuZE9iai5jb21tYW5kIiBkaXNhYmxlZD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L21hdC1jYXJkPlxuICA8ZGl2IGNsYXNzPSJjaGFydC1ib3giIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgI3N0YXRpc3RpY0NoYXJ0IFtmeFNob3ddPSJpc051bWVyaWNEYXRhIj48L2Rpdj5cbiAgICA8dGFibGUgW2Z4U2hvd109IiFpc051bWVyaWNEYXRhIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIlxuICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgbWF0U29ydERpc2FibGVDbGVhcj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSIwIj5cbiAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXI+e3sgXCd3aWRnZXRzLmdhdGV3YXkuY3JlYXRlZC10aW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHJvdzsgbGV0IHJvd0luZGV4ID0gaW5kZXgiPlxuICAgICAgICAgIHt7IHJvd1swXXwgZGF0ZTpcJ3l5eXktTU0tZGQgSEg6bW06c3NcJyB9fVxuICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iMSI+XG4gICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiA3MCUiPnt7IFwnd2lkZ2V0cy5nYXRld2F5Lm1lc3NhZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgcm93Ij5cbiAgICAgICAgICB7eyByb3dbMV0gfX1cbiAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG1hdC1oZWFkZXItcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCJcbiAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICA8bWF0LXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgcm93OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgIDwvdGFibGU+XG4gICAgPHNwYW4gW2Z4U2hvd109ImRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDAgJiYgIWlzTnVtZXJpY0RhdGEiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCI+e3sgXCdhdHRyaWJ1dGUubm8tdGVsZW1ldHJ5LXRleHRcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICA8ZGl2IGZ4RmxleCBjbGFzcz0ibGVnZW5kIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIiBbZnhTaG93XT0iaXNOdW1lcmljRGF0YSI+XG4gICAgICA8ZGl2IGNsYXNzPSJsZWdlbmQta2V5cyIgKm5nRm9yPSJsZXQgbGVnZW5kS2V5IG9mIGxlZ2VuZERhdGE/LmtleXMiIGZ4TGF5b3V0PSJyb3ciXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiPlxuICAgICAgICA8c3BhbiBjbGFzcz0ibGVnZW5kLWxpbmUiIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT0ibGVnZW5kS2V5LmRhdGFLZXkuY29sb3IiPjwvc3Bhbj5cbiAgICAgICAgPGRpdiBjbGFzcz0ibGVnZW5kLWxhYmVsIlxuICAgICAgICAgICAgIChjbGljayk9Im9uTGVnZW5kS2V5SGlkZGVuQ2hhbmdlKGxlZ2VuZEtleS5kYXRhSW5kZXgpIlxuICAgICAgICAgICAgIFtjbGFzc109InsgXCdoaWRkZW4tbGFiZWxcJzogbGVnZW5kRGF0YS5rZXlzW2xlZ2VuZEtleS5kYXRhSW5kZXhdLmRhdGFLZXkuaGlkZGVuIH0iXG4gICAgICAgICAgICAgW2lubmVySFRNTF09ImxlZ2VuZEtleS5kYXRhS2V5LmxhYmVsIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cGFkZGluZzowfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTtvdmVyZmxvdy15OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjQwJTtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6MzVweDtwYWRkaW5nOjE1cHg7Z2FwOjIycHh9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NTBweCl7Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIG1hdC1jYXJke3dpZHRoOjEwMCV9fTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94LDpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtY29udGFpbmVye2hlaWdodDoxMDAlO2ZsZXgtZ3JvdzoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY2hhcnQtYm94e292ZXJmbG93OmF1dG99Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyPip7aGVpZ2h0OjEwMCV9Omhvc3QgLmxlZ2VuZHtmbGV4LXdyYXA6d3JhcDt3aWR0aDoxMDAlO3BhZGRpbmctdG9wOjhweDtwYWRkaW5nLWJvdHRvbTo0cHg7bWFyZ2luLXRvcDoxNXB4fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWx7cGFkZGluZzoycHggMjBweCAycHggMTBweDt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLmxlZ2VuZCAubGVnZW5kLWtleXMgLmxlZ2VuZC1sYWJlbC5oaWRkZW4tbGFiZWx7dGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaDtvcGFjaXR5Oi42fTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGFiZWw6Zm9jdXN7b3V0bGluZTpub25lfTpob3N0IC5sZWdlbmQgLmxlZ2VuZC1rZXlzIC5sZWdlbmQtbGluZXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxNXB4O2hlaWdodDozcHg7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtvdXRsaW5lOm5vbmV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpYLlV0aWxzU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntzb3J0Olt7dHlwZTpvLGFyZ3M6W2ddfV0sc3RhdGlzdGljQ2hhcnQ6W3t0eXBlOm8sYXJnczpbInN0YXRpc3RpY0NoYXJ0Il19XSxjdHg6W3t0eXBlOmF9XSxnZW5lcmFsOlt7dHlwZTphfV19fSk7Y2xhc3MgbWF7c3RhdGlje3RoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1zdGF0aWN7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdPbGRGaWVsZHM9WyJhdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lSnNvbkV4cHJlc3Npb24iLCJkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uIiwiZXh0ZW5zaW9uLWNvbmZpZyJdfXN0YXRpY3t0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ05ld0ZpZWxkcz1bImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIiwicmVzcG9uc2VUb3BpY1FvUyIsImV4dGVuc2lvbkNvbmZpZyJdfXN0YXRpYyBtYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGU/Lm1hcCgoKHtjb252ZXJ0ZXI6ZSx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpuPTF9KT0+e2NvbnN0IGE9ZS5kZXZpY2VJbmZvPz90aGlzLmV4dHJhY3RDb252ZXJ0ZXJEZXZpY2VJbmZvKGUpLG89ey4uLmUsZGV2aWNlSW5mbzphLGV4dGVuc2lvbkNvbmZpZzplLmV4dGVuc2lvbkNvbmZpZ3x8ZVsiZXh0ZW5zaW9uLWNvbmZpZyJdfHxudWxsfTtyZXR1cm4gdGhpcy5jbGVhblVwT2xkRmllbGRzKG8pLHtjb252ZXJ0ZXI6byx0b3BpY0ZpbHRlcjp0LHN1YnNjcmlwdGlvblFvczpufX0pKX1zdGF0aWMgbWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbihlKXtyZXR1cm4gdGhpcy5tcXR0UmVxdWVzdFR5cGVLZXlzLnJlZHVjZSgoKHQsbik9PmVbbl0/KHRbbl09ZVtuXS5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwUmVxdWVzdFRvVXBncmFkZWRWZXJzaW9uKGUsbik7cmV0dXJuIHRoaXMuY2xlYW5VcE9sZEZpZWxkcyh0KSx0fSkpLHQpOnQpLHt9KX1zdGF0aWMgbWFwUmVxdWVzdHNUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMucmVkdWNlKCgodCxuKT0+ZVtuXT8odFtuXT1lW25dLm1hcCgoZT0+e249PT1Jbi5TRVJWRVJfU0lERV9SUEMmJmRlbGV0ZSBlLnR5cGU7Y29uc3R7YXR0cmlidXRlTmFtZUV4cHJlc3Npb246dCxkZXZpY2VJbmZvOmEsLi4ub309ZSxpPXsuLi5vLGF0dHJpYnV0ZU5hbWVKc29uRXhwcmVzc2lvbjp0fHxudWxsLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZSE9PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbjphPy5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLlRPUElDP2E/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGx9O3JldHVybiB0aGlzLmNsZWFuVXBOZXdGaWVsZHMoaSksaX0pKSx0KTp0KSx7fSl9c3RhdGljIG1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlPy5tYXAoKGU9Pntjb25zdCB0PXRoaXMubWFwQ29udmVydGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLmNvbnZlcnRlcik7cmV0dXJuIHRoaXMuY2xlYW5VcE5ld0ZpZWxkcyh0KSx7Y29udmVydGVyOnQsdG9waWNGaWx0ZXI6ZS50b3BpY0ZpbHRlcn19KSl9c3RhdGljIG1hcENvbnZlcnRlclRvRG93bmdyYWRlZFZlcnNpb24oZSl7Y29uc3R7ZGV2aWNlSW5mbzp0LC4uLm59PWU7cmV0dXJuIGUudHlwZSE9PXduLkJZVEVTP3suLi5uLGRldmljZU5hbWVKc29uRXhwcmVzc2lvbjp0Py5kZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZT09PVRuLk1TRz90LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZUpzb25FeHByZXNzaW9uOnQ/LmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlPT09VG4uTVNHP3QuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246bnVsbCxkZXZpY2VOYW1lVG9waWNFeHByZXNzaW9uOnQ/LmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIT09VG4uTVNHP3Q/LmRldmljZU5hbWVFeHByZXNzaW9uOm51bGwsZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbjp0Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSE9PVRuLk1TRz90Py5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbjpudWxsfTp7Li4ubixkZXZpY2VOYW1lRXhwcmVzc2lvbjp0LmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVFeHByZXNzaW9uOnQuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb24sImV4dGVuc2lvbi1jb25maWciOmUuZXh0ZW5zaW9uQ29uZmlnfX1zdGF0aWMgY2xlYW5VcE9sZEZpZWxkcyhlKXt0aGlzLm1xdHRSZXF1ZXN0TWFwcGluZ09sZEZpZWxkcy5mb3JFYWNoKCh0PT5kZWxldGUgZVt0XSkpLFooZSl9c3RhdGljIGNsZWFuVXBOZXdGaWVsZHMoZSl7dGhpcy5tcXR0UmVxdWVzdE1hcHBpbmdOZXdGaWVsZHMuZm9yRWFjaCgodD0+ZGVsZXRlIGVbdF0pKSxaKGUpfXN0YXRpYyBnZXRUeXBlU291cmNlQnlWYWx1ZShlKXtyZXR1cm4gZS5pbmNsdWRlcygiJHsiKT9Ubi5NU0c6ZS5pbmNsdWRlcygiLyIpP1RuLlRPUElDOlRuLkNPTlNUfXN0YXRpYyBleHRyYWN0Q29udmVydGVyRGV2aWNlSW5mbyhlKXtjb25zdCB0PWUuZGV2aWNlTmFtZUV4cHJlc3Npb258fGUuZGV2aWNlTmFtZUpzb25FeHByZXNzaW9ufHxlLmRldmljZU5hbWVUb3BpY0V4cHJlc3Npb258fG51bGwsbj1lLmRldmljZU5hbWVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6dD90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKHQpOm51bGwsYT1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9ufHxlLmRldmljZVR5cGVUb3BpY0V4cHJlc3Npb258fGUuZGV2aWNlVHlwZUpzb25FeHByZXNzaW9ufHwiZGVmYXVsdCIsbz1lLmRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlP2UuZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6YT90aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKGEpOm51bGw7cmV0dXJuIHR8fGE/e2RldmljZU5hbWVFeHByZXNzaW9uOnQsZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6bixkZXZpY2VQcm9maWxlRXhwcmVzc2lvbjphLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOm99Om51bGx9c3RhdGljIG1hcFJlcXVlc3RUb1VwZ3JhZGVkVmVyc2lvbihlLHQpe2NvbnN0IG49ZS5kZXZpY2VOYW1lSnNvbkV4cHJlc3Npb258fGUuZGV2aWNlTmFtZVRvcGljRXhwcmVzc2lvbnx8bnVsbCxhPWUuZGV2aWNlVHlwZVRvcGljRXhwcmVzc2lvbnx8ZS5kZXZpY2VUeXBlSnNvbkV4cHJlc3Npb258fCJkZWZhdWx0IixvPWE/dGhpcy5nZXRUeXBlU291cmNlQnlWYWx1ZShhKTpudWxsLGk9ZS5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZXx8ZS5hdHRyaWJ1dGVOYW1lSnNvbkV4cHJlc3Npb258fG51bGwscj10PT09SW4uU0VSVkVSX1NJREVfUlBDPzE6bnVsbCxzPXQ9PT1Jbi5TRVJWRVJfU0lERV9SUEM/ZS5yZXNwb25zZVRvcGljRXhwcmVzc2lvbj9Gbi5XaXRoUmVzcG9uc2U6Rm4uV2l0aG91dFJlc3BvbnNlOm51bGw7cmV0dXJuey4uLmUsYXR0cmlidXRlTmFtZUV4cHJlc3Npb246aSxhdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblNvdXJjZTppP3RoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoaSk6bnVsbCxkZXZpY2VJbmZvOmUuZGV2aWNlSW5mbz9lLmRldmljZUluZm86bj97ZGV2aWNlTmFtZUV4cHJlc3Npb246bixkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZTp0aGlzLmdldFR5cGVTb3VyY2VCeVZhbHVlKG4pLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOmEsZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2U6b306bnVsbCxyZXNwb25zZVRvcGljUW9TOnIsdHlwZTpzfX19ZSgiTXF0dFZlcnNpb25NYXBwaW5nVXRpbCIsbWEpO2NsYXNzIGRhe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dCx0aGlzLmdhdGV3YXlWZXJzaW9uPWJhLnBhcnNlVmVyc2lvbih0aGlzLmdhdGV3YXlWZXJzaW9uSW4pLHRoaXMuY29uZmlnVmVyc2lvbj1iYS5wYXJzZVZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlnVmVyc2lvbil9Z2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBkYXRlTmVlZGVkKCk/dGhpcy5wcm9jZXNzVmVyc2lvblVwZGF0ZSgpOnRoaXMuY29ubmVjdG9yfXByb2Nlc3NWZXJzaW9uVXBkYXRlKCl7cmV0dXJuIHRoaXMuaXNWZXJzaW9uVXBncmFkZU5lZWRlZCgpP3RoaXMuZ2V0VXBncmFkZWRWZXJzaW9uKCk6dGhpcy5pc1ZlcnNpb25Eb3duZ3JhZGVOZWVkZWQoKT90aGlzLmdldERvd25ncmFkZWRWZXJzaW9uKCk6dGhpcy5jb25uZWN0b3J9aXNWZXJzaW9uVXBkYXRlTmVlZGVkKCl7cmV0dXJuISF0aGlzLmdhdGV3YXlWZXJzaW9uJiZ0aGlzLmNvbmZpZ1ZlcnNpb24hPT10aGlzLmdhdGV3YXlWZXJzaW9ufWlzVmVyc2lvblVwZ3JhZGVOZWVkZWQoKXtyZXR1cm4gdGhpcy5nYXRld2F5VmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiYoIXRoaXMuY29uZmlnVmVyc2lvbnx8dGhpcy5jb25maWdWZXJzaW9uPHRoaXMuZ2F0ZXdheVZlcnNpb24pfWlzVmVyc2lvbkRvd25ncmFkZU5lZWRlZCgpe3JldHVybiB0aGlzLmNvbmZpZ1ZlcnNpb24mJnRoaXMuY29uZmlnVmVyc2lvbj49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpJiZ0aGlzLmNvbmZpZ1ZlcnNpb24+dGhpcy5nYXRld2F5VmVyc2lvbn19ZSgiR2F0ZXdheUNvbm5lY3RvclZlcnNpb25Qcm9jZXNzb3IiLGRhKTtjbGFzcyB1YSBleHRlbmRzIGRhe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KSx0aGlzLmdhdGV3YXlWZXJzaW9uSW49ZSx0aGlzLmNvbm5lY3Rvcj10LHRoaXMubXF0dFJlcXVlc3RUeXBlS2V5cz1PYmplY3QudmFsdWVzKEluKX1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdHtjb25uZWN0UmVxdWVzdHM6ZSxkaXNjb25uZWN0UmVxdWVzdHM6dCxhdHRyaWJ1dGVSZXF1ZXN0czpuLGF0dHJpYnV0ZVVwZGF0ZXM6YSxzZXJ2ZXJTaWRlUnBjOm99PXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO2xldCBpPXsuLi50aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbixyZXF1ZXN0c01hcHBpbmc6bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmUsZGlzY29ubmVjdFJlcXVlc3RzOnQsYXR0cmlidXRlUmVxdWVzdHM6bixhdHRyaWJ1dGVVcGRhdGVzOmEsc2VydmVyU2lkZVJwYzpvfSksbWFwcGluZzptYS5tYXBNYXBwaW5nVG9VcGdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24ubWFwcGluZyl9O3JldHVybiB0aGlzLm1xdHRSZXF1ZXN0VHlwZUtleXMuZm9yRWFjaCgoZT0+e2NvbnN0e1tlXTp0LC4uLm59PWk7aT17Li4ubn19KSksdGhpcy5jbGVhblVwQ29uZmlnSnNvbihpKSx7Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246aSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19Z2V0RG93bmdyYWRlZFZlcnNpb24oKXtjb25zdHtyZXF1ZXN0c01hcHBpbmc6ZSxtYXBwaW5nOnQsLi4ubn09dGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24sYT1lP21hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihlKTp7fSxvPW1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7Li4ubiwuLi5hLG1hcHBpbmc6b30sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWNsZWFuVXBDb25maWdKc29uKGUpe2VlKGUucmVxdWVzdHNNYXBwaW5nLHt9KSYmZGVsZXRlIGUucmVxdWVzdHNNYXBwaW5nLGVlKGUubWFwcGluZyxbXSkmJmRlbGV0ZSBlLm1hcHBpbmd9fWUoIk1xdHRWZXJzaW9uUHJvY2Vzc29yIix1YSk7Y2xhc3MgZ2EgZXh0ZW5kcyBkYXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCksdGhpcy5nYXRld2F5VmVyc2lvbkluPWUsdGhpcy5jb25uZWN0b3I9dH1nZXRVcGdyYWRlZFZlcnNpb24oKXtjb25zdCBlPXRoaXMuY29ubmVjdG9yLmNvbmZpZ3VyYXRpb25Kc29uO3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7bWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZS5tYXN0ZXIpOntzbGF2ZXM6W119LHNsYXZlOmUuc2xhdmU/aGEubWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlLnNsYXZlKTp7fX0sY29uZmlnVmVyc2lvbjp0aGlzLmdhdGV3YXlWZXJzaW9uSW59fWdldERvd25ncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbjtyZXR1cm57Li4udGhpcy5jb25uZWN0b3IsY29uZmlndXJhdGlvbkpzb246ey4uLmUsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e30sbWFzdGVyOmUubWFzdGVyPy5zbGF2ZXM/aGEubWFwTWFzdGVyVG9Eb3duZ3JhZGVkVmVyc2lvbihlLm1hc3Rlcik6e3NsYXZlczpbXX19LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX19ZSgiTW9kYnVzVmVyc2lvblByb2Nlc3NvciIsZ2EpO2NsYXNzIGZhIGV4dGVuZHMgZGF7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXMuZ2F0ZXdheVZlcnNpb25Jbj1lLHRoaXMuY29ubmVjdG9yPXR9Z2V0VXBncmFkZWRWZXJzaW9uKCl7Y29uc3QgZT10aGlzLmNvbm5lY3Rvci5jb25maWd1cmF0aW9uSnNvbi5zZXJ2ZXI7cmV0dXJuey4uLnRoaXMuY29ubmVjdG9yLGNvbmZpZ3VyYXRpb25Kc29uOntzZXJ2ZXI6ZT94YS5tYXBTZXJ2ZXJUb1VwZ3JhZGVkVmVyc2lvbihlKTp7fSxtYXBwaW5nOmU/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUubWFwcGluZyk6W119LGNvbmZpZ1ZlcnNpb246dGhpcy5nYXRld2F5VmVyc2lvbklufX1nZXREb3duZ3JhZGVkVmVyc2lvbigpe3JldHVybnsuLi50aGlzLmNvbm5lY3Rvcixjb25maWd1cmF0aW9uSnNvbjp7c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24odGhpcy5jb25uZWN0b3IuY29uZmlndXJhdGlvbkpzb24pfSxjb25maWdWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb25Jbn19fWUoIk9wY1ZlcnNpb25Qcm9jZXNzb3IiLGZhKTtjbGFzcyB5YXtjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9bmV3IGksdGhpcy5mYj1yKGRlKSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmJhc2ljRm9ybUdyb3VwPXRoaXMuaW5pdEJhc2ljRm9ybUdyb3VwKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLm9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmluaXRpYWxpemVkLmVtaXQoKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnNldFZhbHVlKHRoaXMubWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSkse2VtaXRFdmVudDohMX0pfW9uQmFzaWNGb3JtR3JvdXBDaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZSh0aGlzLmdldE1hcHBlZFZhbHVlKGUpKSx0aGlzLm9uVG91Y2hlZCgpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eWEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnlhLGlucHV0czp7Z2VuZXJhbFRhYkNvbnRlbnQ6ImdlbmVyYWxUYWJDb250ZW50In0sb3V0cHV0czp7aW5pdGlhbGl6ZWQ6ImluaXRpYWxpemVkIn0sbmdJbXBvcnQ6dH0pfX1lKCJHYXRld2F5Q29ubmVjdG9yQmFzaWNDb25maWdEaXJlY3RpdmUiLHlhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnlhLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W10scHJvcERlY29yYXRvcnM6e2dlbmVyYWxUYWJDb250ZW50Olt7dHlwZTphfV0saW5pdGlhbGl6ZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBiYXtzdGF0aWMgZ2V0Q29uZmlnKGUsdCl7c3dpdGNoKGUudHlwZSl7Y2FzZSBfdC5NUVRUOnJldHVybiBuZXcgdWEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk9QQ1VBOnJldHVybiBuZXcgZmEodCxlKS5nZXRQcm9jZXNzZWRCeVZlcnNpb24oKTtjYXNlIF90Lk1PREJVUzpyZXR1cm4gbmV3IGdhKHQsZSkuZ2V0UHJvY2Vzc2VkQnlWZXJzaW9uKCk7ZGVmYXVsdDpyZXR1cm4gZX19c3RhdGljIHBhcnNlVmVyc2lvbihlKXtyZXR1cm4gdGUoZSk/ZTpuZShlKT9wYXJzZUZsb2F0KGUucmVwbGFjZSgvXC4vZywiIikuc2xpY2UoMCwzKSkvMTAwOjB9fWUoIkdhdGV3YXlDb25uZWN0b3JWZXJzaW9uTWFwcGluZ1V0aWwiLGJhKTtjbGFzcyBoYXtzdGF0aWMgbWFwTWFzdGVyVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJue3NsYXZlczplLnNsYXZlcy5tYXAoKGU9Pntjb25zdHtzZW5kRGF0YU9ubHlPbkNoYW5nZTp0LC4uLm59PWU7cmV0dXJuey4uLm4sZGV2aWNlVHlwZTplLmRldmljZVR5cGU/PyJkZWZhdWx0IixyZXBvcnRTdHJhdGVneTp0P3t0eXBlOnNuLk9uQ2hhbmdlfTp7dHlwZTpzbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6ZS5wb2xsUGVyaW9kfX19KSl9fXN0YXRpYyBtYXBNYXN0ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe3JldHVybntzbGF2ZXM6ZS5zbGF2ZXMubWFwKChlPT57Y29uc3R7cmVwb3J0U3RyYXRlZ3k6dCwuLi5ufT1lO3JldHVybnsuLi5uLHNlbmREYXRhT25seU9uQ2hhbmdlOnQ/LnR5cGUhPT1zbi5PblJlcG9ydFBlcmlvZH19KSl9fXN0YXRpYyBtYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZSl7aWYoIWU/LnZhbHVlcylyZXR1cm4gZTtjb25zdCB0PU9iamVjdC5rZXlzKGUudmFsdWVzKS5yZWR1Y2UoKCh0LG4pPT50PXsuLi50LFtuXTpbZS52YWx1ZXNbbl1dfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwU2xhdmVUb1VwZ3JhZGVkVmVyc2lvbihlKXtpZighZT8udmFsdWVzKXJldHVybiBlO2NvbnN0IHQ9T2JqZWN0LmtleXMoZS52YWx1ZXMpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOnRoaXMubWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZS52YWx1ZXNbbl1bMF0pfSkse30pO3JldHVybnsuLi5lLHZhbHVlczp0fX1zdGF0aWMgbWFwVmFsdWVzVG9VcGdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIE9iamVjdC5rZXlzKGUpLnJlZHVjZSgoKHQsbik9PnQ9ey4uLnQsW25dOmVbbl0ubWFwKChlPT4oey4uLmUsdHlwZToiaW50Ij09PWUudHlwZT9lYS5JTlQxNjplLnR5cGV9KSkpfSkse30pfX1lKCJNb2RidXNWZXJzaW9uTWFwcGluZ1V0aWwiLGhhKTtjbGFzcyB4YXtzdGF0aWMgbWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZSl7Y29uc3R7bWFwcGluZzp0LGRpc2FibGVTdWJzY3JpcHRpb25zOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsLi4ub309ZTtyZXR1cm57Li4ubyxwb2xsUGVyaW9kSW5NaWxsaXM6YT8/NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6IW59fXN0YXRpYyBtYXBTZXJ2ZXJUb0Rvd25ncmFkZWRWZXJzaW9uKGUpe2NvbnN0e21hcHBpbmc6dCxzZXJ2ZXI6bn09ZSx7ZW5hYmxlU3Vic2NyaXB0aW9uczphLC4uLm99PW4/P3t9O3JldHVybnsuLi5vLG1hcHBpbmc6dD90aGlzLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKHQpOltdLGRpc2FibGVTdWJzY3JpcHRpb25zOiFhfX1zdGF0aWMgbWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUpe3JldHVybiBlLm1hcCgoZT0+KHsuLi5lLGRldmljZU5vZGVTb3VyY2U6dGhpcy5nZXREZXZpY2VOb2RlU291cmNlQnlWYWx1ZShlLmRldmljZU5vZGVQYXR0ZXJuKSxkZXZpY2VJbmZvOntkZXZpY2VOYW1lRXhwcmVzc2lvbjplLmRldmljZU5hbWVQYXR0ZXJuLGRldmljZU5hbWVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VOYW1lUGF0dGVybiksZGV2aWNlUHJvZmlsZUV4cHJlc3Npb246ZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiLGRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5kZXZpY2VUeXBlUGF0dGVybj8/ImRlZmF1bHQiKX0sYXR0cmlidXRlczplLmF0dHJpYnV0ZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLGF0dHJpYnV0ZXNfdXBkYXRlczplLmF0dHJpYnV0ZXNfdXBkYXRlcy5tYXAoKGU9Pih7a2V5OmUuYXR0cmlidXRlT25UaGluZ3NCb2FyZCx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5hdHRyaWJ1dGVPbkRldmljZSksdmFsdWU6ZS5hdHRyaWJ1dGVPbkRldmljZX0pKSksdGltZXNlcmllczplLnRpbWVzZXJpZXMubWFwKChlPT4oe2tleTplLmtleSx0eXBlOnRoaXMuZ2V0VHlwZVNvdXJjZUJ5VmFsdWUoZS5wYXRoKSx2YWx1ZTplLnBhdGh9KSkpLHJwY19tZXRob2RzOmUucnBjX21ldGhvZHMubWFwKChlPT4oe21ldGhvZDplLm1ldGhvZCxhcmd1bWVudHM6ZS5hcmd1bWVudHMubWFwKChlPT4oe3ZhbHVlOmUsdHlwZTp0aGlzLmdldEFyZ3VtZW50VHlwZShlKX0pKSl9KSkpfSkpKX1zdGF0aWMgbWFwTWFwcGluZ1RvRG93bmdyYWRlZFZlcnNpb24oZSl7cmV0dXJuIGUubWFwKChlPT4oey4uLmUsZGV2aWNlTmFtZVBhdHRlcm46ZS5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uLGRldmljZVR5cGVQYXR0ZXJuOmUuZGV2aWNlSW5mby5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbixhdHRyaWJ1dGVzOmUuYXR0cmlidXRlcy5tYXAoKGU9Pih7a2V5OmUua2V5LHBhdGg6ZS52YWx1ZX0pKSksYXR0cmlidXRlc191cGRhdGVzOmUuYXR0cmlidXRlc191cGRhdGVzLm1hcCgoZT0+KHthdHRyaWJ1dGVPblRoaW5nc0JvYXJkOmUua2V5LGF0dHJpYnV0ZU9uRGV2aWNlOmUudmFsdWV9KSkpLHRpbWVzZXJpZXM6ZS50aW1lc2VyaWVzLm1hcCgoZT0+KHtrZXk6ZS5rZXkscGF0aDplLnZhbHVlfSkpKSxycGNfbWV0aG9kczplLnJwY19tZXRob2RzLm1hcCgoZT0+KHttZXRob2Q6ZS5tZXRob2QsYXJndW1lbnRzOmUuYXJndW1lbnRzLm1hcCgoZT0+ZS52YWx1ZSkpfSkpKX0pKSl9c3RhdGljIGdldFR5cGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6ZS5pbmNsdWRlcygiLyIpfHxlLmluY2x1ZGVzKCJcXCIpP1NuLlBBVEg6U24uQ09OU1R9c3RhdGljIGdldERldmljZU5vZGVTb3VyY2VCeVZhbHVlKGUpe3JldHVybiBlLmluY2x1ZGVzKCIkeyIpP1NuLklERU5USUZJRVI6U24uUEFUSH1zdGF0aWMgZ2V0QXJndW1lbnRUeXBlKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpyZXR1cm4iYm9vbGVhbiI7Y2FzZSJudW1iZXIiOnJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpPyJpbnRlZ2VyIjoiZmxvYXQiO2RlZmF1bHQ6cmV0dXJuInN0cmluZyJ9fX1lKCJPcGNWZXJzaW9uTWFwcGluZ1V0aWwiLHhhKTtjbGFzcyB2YXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGJhLnBhcnNlVmVyc2lvbihlKT49YmEucGFyc2VWZXJzaW9uKFV0LkN1cnJlbnQpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsZGVwczpbXSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5QaXBlfSl9c3RhdGlje3RoaXMuybVwaXBlPXQuybXJtW5nRGVjbGFyZVBpcGUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dmEsaXNTdGFuZGFsb25lOiEwLG5hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyJ9KX19ZSgiTGF0ZXN0VmVyc2lvbkNvbmZpZ1BpcGUiLHZhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImlzTGF0ZXN0VmVyc2lvbkNvbmZpZyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyB3YXtjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lfXRyYW5zZm9ybShlKXtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnBvcnQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKXx8ZS5oYXNFcnJvcigibWF4Iik/dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5wb3J0LWxpbWl0cy1lcnJvciIse21pbjpFdC5NSU4sbWF4OkV0Lk1BWH0pOiIifXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d2EsZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LlBpcGV9KX1zdGF0aWN7dGhpcy7JtXBpcGU9dC7Jtcm1bmdEZWNsYXJlUGlwZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxpc1N0YW5kYWxvbmU6ITAsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0pfX1lKCJHYXRld2F5UG9ydFRvb2x0aXBQaXBlIix3YSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp3YSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAiLHN0YW5kYWxvbmU6ITB9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WS5UcmFuc2xhdGVTZXJ2aWNlfV19KTtjbGFzcyBDYXt0cmFuc2Zvcm0oZSl7cmV0dXJuIGUubWFwKCgoe3ZhbHVlOmV9KT0+ZS50b1N0cmluZygpKSkuam9pbigiLCAiKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkNhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyJ9KX19ZSgiUnBjVGVtcGxhdGVBcnJheVZpZXdQaXBlIixDYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpDYSxkZWNvcmF0b3JzOlt7dHlwZTpjLGFyZ3M6W3tuYW1lOiJnZXRScGNUZW1wbGF0ZUFycmF5VmlldyIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBUYXt0cmFuc2Zvcm0oZSx0LG4pe3JldHVybiFufHxuPy5pbmNsdWRlcyhTbi5QQVRIKT90IT09U24uQ09OU1Q/YHdpZGdldC9saWIvZ2F0ZXdheS8ke2V9LSR7dH1fZm5gOnZvaWQgMDoiYXR0cmlidXRlcyI9PT1lfHwidGltZXNlcmllcyI9PT1lPyJ3aWRnZXQvbGliL2dhdGV3YXkvYXR0cmlidXRlc190aW1lc2VyaWVzX2V4cHJlc3Npb25zX2ZuIjoid2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlcHM6W10sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuUGlwZX0pfXN0YXRpY3t0aGlzLsm1cGlwZT10Lsm1ybVuZ0RlY2xhcmVQaXBlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGlzU3RhbmRhbG9uZTohMCxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifSl9fWUoIkdhdGV3YXlIZWxwTGlua1BpcGUiLFRhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRhLGRlY29yYXRvcnM6W3t0eXBlOmMsYXJnczpbe25hbWU6ImdldEdhdGV3YXlIZWxwTGluayIsc3RhbmRhbG9uZTohMH1dfV19KTtjbGFzcyBTYXtjb25zdHJ1Y3RvcihlLHQsbil7dGhpcy5lbGVtZW50UmVmPWUsdGhpcy5yZW5kZXJlcj10LHRoaXMudG9vbHRpcD1uLHRoaXMudG9vbHRpcEVuYWJsZWQ9ITAsdGhpcy5wb3NpdGlvbj0iYWJvdmUiLHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5vYnNlcnZlTW91c2VFdmVudHMoKSx0aGlzLmFwcGx5VHJ1bmNhdGlvblN0eWxlcygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudG9vbHRpcC5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy50b29sdGlwLl9pc1Rvb2x0aXBWaXNpYmxlKCkmJnRoaXMuaGlkZVRvb2x0aXAoKSx0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9b2JzZXJ2ZU1vdXNlRXZlbnRzKCl7a2UodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZW50ZXIiKS5waXBlKE1lKCgoKT0+dGhpcy50b29sdGlwRW5hYmxlZCkpLE1lKCgoKT0+dGhpcy5pc092ZXJmbG93bih0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkpKSxFZSgoKCk9PnRoaXMuc2hvd1Rvb2x0aXAoKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKSxrZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwibW91c2VsZWF2ZSIpLnBpcGUoTWUoKCgpPT50aGlzLnRvb2x0aXBFbmFibGVkKSksTWUoKCgpPT50aGlzLnRvb2x0aXAuX2lzVG9vbHRpcFZpc2libGUoKSkpLEVlKCgoKT0+dGhpcy5oaWRlVG9vbHRpcCgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWFwcGx5VHJ1bmNhdGlvblN0eWxlcygpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIndoaXRlLXNwYWNlIiwibm93cmFwIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKX1pc092ZXJmbG93bihlKXtyZXR1cm4gZS5jbGllbnRXaWR0aDxlLnNjcm9sbFdpZHRofXNob3dUb29sdGlwKCl7dGhpcy50b29sdGlwLm1lc3NhZ2U9dGhpcy50ZXh0fHx0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5pbm5lclRleHQsdGhpcy50b29sdGlwLnNob3coKX1oaWRlVG9vbHRpcCgpe3RoaXMudG9vbHRpcC5oaWRlKCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpTYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp6ZS5NYXRUb29sdGlwfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuRGlyZWN0aXZlfSl9c3RhdGlje3RoaXMuybVkaXI9dC7Jtcm1bmdEZWNsYXJlRGlyZWN0aXZlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6e3RleHQ6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0ZXh0Il0sdG9vbHRpcEVuYWJsZWQ6InRvb2x0aXBFbmFibGVkIixwb3NpdGlvbjoicG9zaXRpb24ifSxwcm92aWRlcnM6W1dlXSxuZ0ltcG9ydDp0fSl9fWUoIlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUiLFNhKSxIZShbTigpXSxTYS5wcm90b3R5cGUsInRvb2x0aXBFbmFibGVkIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixwcm92aWRlcnM6W1dlXSxzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOnplLk1hdFRvb2x0aXB9XSxwcm9wRGVjb3JhdG9yczp7dGV4dDpbe3R5cGU6YSxhcmdzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIl19XSx0b29sdGlwRW5hYmxlZDpbe3R5cGU6YX1dLHBvc2l0aW9uOlt7dHlwZTphfV19fSk7Y2xhc3Mga2F7c2V0IGNoaXBzKGUpe2VlKHRoaXMuY2hpcHNWYWx1ZSxlKXx8KHRoaXMuY2hpcHNWYWx1ZT1lLHNldFRpbWVvdXQoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSksMCkpfWNvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZWw9ZSx0aGlzLnJlbmRlcmVyPXQsdGhpcy50cmFuc2xhdGU9bix0aGlzLndpbmRvdz1hLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJtYXgtaGVpZ2h0IiwiNDhweCIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJvdmVyZmxvdyIsImF1dG8iKSxrZShhLCJyZXNpemUiKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5hZGp1c3RDaGlwcygpfSkpLHRoaXMub2JzZXJ2ZUludGVyc2VjdGlvbigpfW9ic2VydmVJbnRlcnNlY3Rpb24oKXt0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcigoZT0+e2UuZm9yRWFjaCgoZT0+e2UuaXNJbnRlcnNlY3RpbmcmJnRoaXMuYWRqdXN0Q2hpcHMoKX0pKX0pKSx0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbC5uYXRpdmVFbGVtZW50KX1hZGp1c3RDaGlwcygpe2NvbnN0IGU9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHQ9dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy1jaGlwIiksbj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUodCkubWFyZ2luTGVmdCl8fDAsYT1lLnF1ZXJ5U2VsZWN0b3JBbGwoIm1hdC1jaGlwOm5vdCguZWxsaXBzaXMtY2hpcCkiKTtpZih0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPjEpe2NvbnN0IG89dGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5lbGxpcHNpcy10ZXh0Iik7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5IiwiaW5saW5lLWZsZXgiKSxvLmlubmVySFRNTD10aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmVsbGlwc2lzLWNoaXBzLXRleHQiLHtjb3VudDp0aGlzLmNoaXBzVmFsdWUubGVuZ3RofSk7Y29uc3QgaT1lLm9mZnNldFdpZHRoLSh0Lm9mZnNldFdpZHRoK24pO2xldCByPTAscz0wO2EuZm9yRWFjaCgoZT0+e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUoZSwiZGlzcGxheSIsImlubGluZS1mbGV4Iik7Y29uc3QgdD1lLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX3RleHQtbGFiZWwiKTt0aGlzLmFwcGx5TWF4Q2hpcFRleHRXaWR0aCh0LGkvMykscisoZS5vZmZzZXRXaWR0aCtuKTw9aSYmczx0aGlzLmNoaXBzVmFsdWUubGVuZ3RoPyhzKysscis9ZS5vZmZzZXRXaWR0aCtuKTp0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsImRpc3BsYXkiLCJub25lIil9KSksby5pbm5lckhUTUw9dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5lbGxpcHNpcy1jaGlwcy10ZXh0Iix7Y291bnQ6dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aC1zfSkscz09PXRoaXMuY2hpcHNWYWx1ZT8ubGVuZ3RoJiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHQsImRpc3BsYXkiLCJub25lIil9ZWxzZSBpZigxPT09dGhpcy5jaGlwc1ZhbHVlLmxlbmd0aCl7Y29uc3Qgbz1hWzBdLnF1ZXJ5U2VsZWN0b3IoIi5tZGMtZXZvbHV0aW9uLWNoaXBfX2FjdGlvbiIpLGk9by5xdWVyeVNlbGVjdG9yKCIubWRjLWV2b2x1dGlvbi1jaGlwX190ZXh0LWxhYmVsIikscj1wYXJzZUZsb2F0KHRoaXMud2luZG93LmdldENvbXB1dGVkU3R5bGUobykucGFkZGluZ0xlZnQpfHwwLHM9cGFyc2VGbG9hdCh0aGlzLndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG8pLnBhZGRpbmdSaWdodCl8fDAsbD1lLm9mZnNldFdpZHRoLW4tKHIrcyk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0LCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoYVswXSwiZGlzcGxheSIsImlubGluZS1mbGV4IiksdGhpcy5hcHBseU1heENoaXBUZXh0V2lkdGgoaSxsKX1lbHNlIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodCwiZGlzcGxheSIsIm5vbmUiKX1hcHBseU1heENoaXBUZXh0V2lkdGgoZSx0KXt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm1heC13aWR0aCIsdCsicHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIm92ZXJmbG93IiwiaGlkZGVuIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlLCJ0ZXh0LW92ZXJmbG93IiwiZWxsaXBzaXMiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGUsIndoaXRlLXNwYWNlIiwibm93cmFwIil9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprYSxkZXBzOlt7dG9rZW46dC5FbGVtZW50UmVmfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjphZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6a2EsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJbdGItZWxsaXBzaXMtY2hpcC1saXN0XSIsaW5wdXRzOntjaGlwczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCIsImNoaXBzIl19LG5nSW1wb3J0OnR9KX19ZSgiRWxsaXBzaXNDaGlwTGlzdERpcmVjdGl2ZSIsa2EpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6a2EsZGVjb3JhdG9yczpbe3R5cGU6cyxhcmdzOlt7c2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixzdGFuZGFsb25lOiEwfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOnQuRWxlbWVudFJlZn0se3R5cGU6dC5SZW5kZXJlcjJ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX0se3R5cGU6V2luZG93LGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbYWVdfV19XSxwcm9wRGVjb3JhdG9yczp7Y2hpcHM6W3t0eXBlOmEsYXJnczpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfV19fSk7Y2xhc3MgTGF7Y29uc3RydWN0b3IoZSx0LG4sYSl7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWUsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2U9dCx0aGlzLnpvbmU9bix0aGlzLnRyYW5zbGF0ZT1hLHRoaXMuYXR0cmlidXRlc1N1YmplY3Q9bmV3IExlKFtdKSx0aGlzLnBhZ2VEYXRhU3ViamVjdD1uZXcgTGUoTSgpKSx0aGlzLnBhZ2VEYXRhJD10aGlzLnBhZ2VEYXRhU3ViamVjdC5hc09ic2VydmFibGUoKSx0aGlzLnNlbGVjdGlvbj1uZXcgamUoITAsW10pfWNvbm5lY3QoZSl7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QuYXNPYnNlcnZhYmxlKCl9ZGlzY29ubmVjdChlKXt0aGlzLmF0dHJpYnV0ZXNTdWJqZWN0LmNvbXBsZXRlKCksdGhpcy5wYWdlRGF0YVN1YmplY3QuY29tcGxldGUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXImJih0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIudW5zdWJzY3JpYmUoKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXI9bnVsbCl9bG9hZEF0dHJpYnV0ZXMoZSx0LG4sYT0hMSl7YSYmKHRoaXMuYWxsQXR0cmlidXRlcz1udWxsLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlciYmKHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlci51bnN1YnNjcmliZSgpLHRoaXMudGVsZW1ldHJ5U3Vic2NyaWJlcj1udWxsKSksdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtjb25zdCBvPW5ldyBGZTtyZXR1cm4gdGhpcy5mZXRjaEF0dHJpYnV0ZXMoZSx0LG4pLnBpcGUocWUoKCgpPT5JZShNKCkpKSkpLnN1YnNjcmliZSgoZT0+e3RoaXMuYXR0cmlidXRlc1N1YmplY3QubmV4dChlLmRhdGEpLHRoaXMucGFnZURhdGFTdWJqZWN0Lm5leHQoZSksby5uZXh0KGUpfSkpLG99ZmV0Y2hBdHRyaWJ1dGVzKGUsdCxuKXtyZXR1cm4gdGhpcy5nZXRBbGxBdHRyaWJ1dGVzKGUsdCkucGlwZShEZSgoZT0+e2NvbnN0IHQ9ZS5maWx0ZXIoKGU9PjAhPT1lLmxhc3RVcGRhdGVUcykpO3JldHVybiBuLmZpbHRlckRhdGEodCl9KSkpfWdldEFsbEF0dHJpYnV0ZXMoZSx0KXtpZighdGhpcy5hbGxBdHRyaWJ1dGVzKXtsZXQgbjtFLmdldCh0KT8odGhpcy50ZWxlbWV0cnlTdWJzY3JpYmVyPXEuY3JlYXRlRW50aXR5QXR0cmlidXRlc1N1YnNjcmlwdGlvbih0aGlzLnRlbGVtZXRyeVdzU2VydmljZSxlLHQsdGhpcy56b25lKSx0aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuc3Vic2NyaWJlKCksbj10aGlzLnRlbGVtZXRyeVN1YnNjcmliZXIuYXR0cmlidXRlRGF0YSQoKSk6bj10aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyhlLHQpLHRoaXMuYWxsQXR0cmlidXRlcz1uLnBpcGUoUGUoMSksR2UoKSl9cmV0dXJuIHRoaXMuYWxsQXR0cmlidXRlc31pc0FsbFNlbGVjdGVkKCl7Y29uc3QgZT10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGg7cmV0dXJuIHRoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShEZSgodD0+ZT09PXQubGVuZ3RoKSkpfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzU3ViamVjdC5waXBlKERlKChlPT4hZS5sZW5ndGgpKSl9dG90YWwoKXtyZXR1cm4gdGhpcy5wYWdlRGF0YVN1YmplY3QucGlwZShEZSgoZT0+ZS50b3RhbEVsZW1lbnRzKSkpfW1hc3RlclRvZ2dsZSgpe3RoaXMuYXR0cmlidXRlc1N1YmplY3QucGlwZShFZSgoZT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGVkLmxlbmd0aD09PWUubGVuZ3RoP3RoaXMuc2VsZWN0aW9uLmNsZWFyKCk6ZS5mb3JFYWNoKChlPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0KGUpfSkpfSkpLE9lKDEpKS5zdWJzY3JpYmUoKX19ZSgiQXR0cmlidXRlRGF0YXNvdXJjZSIsTGEpO2NsYXNzIEZhe2NvbnN0cnVjdG9yKGUpe3RoaXMuYXR0cmlidXRlU2VydmljZT1lLHRoaXMuc2F2ZVRlbXBsYXRlPW5ldyBpLHRoaXMudXNlVGVtcGxhdGU9bmV3IGksdGhpcy5vcmlnaW5hbE9yZGVyPSgpPT4wLHRoaXMuaXNPYmplY3Q9ZT0+b2UoZSksdGhpcy5pc0FycmF5PWU9PkFycmF5LmlzQXJyYXkoZSksdGhpcy5TTk1QTWV0aG9kc1RyYW5zbGF0aW9ucz10bn1uZ09uSW5pdCgpe31hcHBseVRlbXBsYXRlKGUsdCl7ZS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLnVzZVRlbXBsYXRlLmVtaXQodCl9ZGVsZXRlVGVtcGxhdGUoZSx0KXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49dGhpcy5ycGNUZW1wbGF0ZXMuZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO3RoaXMucnBjVGVtcGxhdGVzLnNwbGljZShuLDEpO2NvbnN0IGE9YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5OmEsdmFsdWU6dGhpcy5ycGNUZW1wbGF0ZXN9XSkuc3Vic2NyaWJlKCgoKT0+e30pKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZhLGRlcHM6W3t0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkZhLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXMiLGlucHV0czp7Y29ubmVjdG9yVHlwZToiY29ubmVjdG9yVHlwZSIsY3R4OiJjdHgiLHJwY1RlbXBsYXRlczoicnBjVGVtcGxhdGVzIn0sb3V0cHV0czp7c2F2ZVRlbXBsYXRlOiJzYXZlVGVtcGxhdGUiLHVzZVRlbXBsYXRlOiJ1c2VUZW1wbGF0ZSJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZXMtdGl0bGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuPG1hdC1leHBhbnNpb24tcGFuZWwgaGlkZVRvZ2dsZSAqbmdGb3I9ImxldCB0ZW1wbGF0ZSBvZiBycGNUZW1wbGF0ZXMiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG1hdC1wYW5lbC10aXRsZSBjbGFzcz0idGVtcGxhdGUtbmFtZSI+XG4gICAgICA8c3BhbiBtYXRUb29sdGlwPSJ7e3RlbXBsYXRlLm5hbWV9fSIgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+e3t0ZW1wbGF0ZS5uYW1lfX08L3NwYW4+XG4gICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgPG1hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IkRlbGV0ZSIgKGNsaWNrKT0iZGVsZXRlVGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPSJVc2UiIChjbGljayk9ImFwcGx5VGVtcGxhdGUoJGV2ZW50LCB0ZW1wbGF0ZSkiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5wbGF5X2Fycm93PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdGb3I9ImxldCBjb25maWcgb2YgdGVtcGxhdGUuY29uZmlnIHwga2V5VmFsdWVJc05vdEVtcHR5IlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IGNvbmZpZywgaW5uZXJWYWx1ZTogZmFsc2UgfSI+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI1JQQ1RlbXBsYXRlUmVmIGxldC1jb25maWcgbGV0LWlubmVyVmFsdWU9XCdpbm5lclZhbHVlXCc+XG4gICAgPGRpdiBbZnhMYXlvdXRdPSJpc09iamVjdChjb25maWcudmFsdWUpID8gXCdjb2x1bW5cJzogXCdyb3dcJyJcbiAgICAgICAgIFtmeExheW91dEFsaWduXT0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ3NwYWNlLWJldHdlZW4gY2VudGVyXCcgOiBcJ1wnIlxuICAgICAgICAgW25nU3R5bGVdPSJ7XCdwYWRkaW5nLWxlZnRcJzogaW5uZXJWYWx1ZSA/IFwnMTZweFwnOiBcJzBcJ30iXG4gICAgICAgICBjbGFzcz0icnBjLXBhcmFtcy1yb3ciPlxuICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUta2V5Ij5cbiAgICAgICAge3shaW5uZXJWYWx1ZSA/IChcJ2dhdGV3YXkucnBjLlwnICsgY29uZmlnLmtleSB8IHRyYW5zbGF0ZSkgOiBjb25maWcua2V5fX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iaXNBcnJheShjb25maWcudmFsdWUpIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9ImFycmF5LXZhbHVlIj5cbiAgICAgICAge3sgY29uZmlnLnZhbHVlIHwgZ2V0UnBjVGVtcGxhdGVBcnJheVZpZXcgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iaXNPYmplY3QoY29uZmlnLnZhbHVlKSIgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENPYmplY3RSb3ciPjwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiAqbmdJZj0iIWlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgJiYgIWlzQXJyYXkoY29uZmlnLnZhbHVlKSJcbiAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdib29sZWFuLXRydWVcJzogY29uZmlnLnZhbHVlID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgIFwnYm9vbGVhbi1mYWxzZVwnOiBjb25maWcudmFsdWUgPT09IGZhbHNlICB9Ij5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29uZmlnLmtleSA9PT0gXCdtZXRob2RcJyBlbHNlIHZhbHVlIiBbbmdUZW1wbGF0ZU91dGxldF09IlNOTVBNZXRob2QiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3ZhbHVlPnt7IGNvbmZpZy52YWx1ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1NOTVBNZXRob2Q+e3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KGNvbmZpZy52YWx1ZSkgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlICNSUENPYmplY3RSb3c+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdGb3I9ImxldCBzdWJDb25maWcgb2YgY29uZmlnLnZhbHVlIHwga2V5dmFsdWUgOiBvcmlnaW5hbE9yZGVyIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0iUlBDVGVtcGxhdGVSZWYiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT0ieyAkaW1wbGljaXQ6IHN1YkNvbmZpZywgaW5uZXJWYWx1ZTogdHJ1ZSB9Ij5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjB9Omhvc3QgLnRpdGxle2ZvbnQtd2VpZ2h0OjUwMH06aG9zdCAudGVtcGxhdGUta2V5e2NvbG9yOiMwMDAwMDA2MTtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4fTpob3N0IC5ib29sZWFuLXRydWUsOmhvc3QgLmJvb2xlYW4tZmFsc2V7Ym9yZGVyLXJhZGl1czozcHg7aGVpZ2h0OjMycHg7bGluZS1oZWlnaHQ6MzJweDtwYWRkaW5nOjAgMTJweDt3aWR0aDpmaXQtY29udGVudDtmb250LXNpemU6MTRweDt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplfTpob3N0IC5ib29sZWFuLWZhbHNle2NvbG9yOiNkMTI3MzA7YmFja2dyb3VuZC1jb2xvcjojZDEyNzMwMTR9Omhvc3QgLmJvb2xlYW4tdHJ1ZXtjb2xvcjojMTk4MDM4O2JhY2tncm91bmQtY29sb3I6IzE5ODAzODE0fTpob3N0IG1hdC1leHBhbnNpb24tcGFuZWx7bWFyZ2luLXRvcDoxMHB4O292ZXJmbG93OnZpc2libGV9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9ue2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MDtmbGV4OjB9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLWRlc2NyaXB0aW9uPm1hdC1pY29ue21hcmdpbi1sZWZ0OjE1cHg7Y29sb3I6IzAwMDAwMDYxfTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcntwYWRkaW5nOjAgMCAwIDEycHh9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLm1hdC1leHBhbmRlZHtoZWlnaHQ6NDhweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgLm1hdC1jb250ZW50Lm1hdC1jb250ZW50LWhpZGUtdG9nZ2xle21hcmdpbi1yaWdodDowfTpob3N0IC5ycGMtcGFyYW1zLXJvd3tvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC5ycGMtcGFyYW1zLXJvdyA6bm90KDpmaXJzdC1jaGlsZCl7d2hpdGUtc3BhY2U6cHJlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50ZW1wbGF0ZS1uYW1le292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO2Rpc3BsYXk6YmxvY2t9Omhvc3QgOjpuZy1kZWVwIC5tYXQtY29udGVudHthbGlnbi1pdGVtczpjZW50ZXJ9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyLXRpdGxle2ZsZXg6MTttYXJnaW46MH06aG9zdCAuYXJyYXktdmFsdWV7bWFyZ2luLWxlZnQ6MTBweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3R5bGUsc2VsZWN0b3I6IltuZ1N0eWxlXSIsaW5wdXRzOlsibmdTdHlsZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsRGVzY3JpcHRpb24sc2VsZWN0b3I6Im1hdC1wYW5lbC1kZXNjcmlwdGlvbiJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOkNhLG5hbWU6ImdldFJwY1RlbXBsYXRlQXJyYXlWaWV3In1dfSl9fWUoIkdhdGV3YXlTZXJ2aWNlUlBDQ29ubmVjdG9yVGVtcGxhdGVzQ29tcG9uZW50IixGYSksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpGYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9Im1hdC1zdWJ0aXRsZS0xIHRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlcy10aXRsZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG48bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlICpuZ0Zvcj0ibGV0IHRlbXBsYXRlIG9mIHJwY1RlbXBsYXRlcyI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICA8bWF0LXBhbmVsLXRpdGxlIGNsYXNzPSJ0ZW1wbGF0ZS1uYW1lIj5cbiAgICAgIDxzcGFuIG1hdFRvb2x0aXA9Int7dGVtcGxhdGUubmFtZX19IiBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj57e3RlbXBsYXRlLm5hbWV9fTwvc3Bhbj5cbiAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD0iRGVsZXRlIiAoY2xpY2spPSJkZWxldGVUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9IlVzZSIgKGNsaWNrKT0iYXBwbHlUZW1wbGF0ZSgkZXZlbnQsIHRlbXBsYXRlKSI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnBsYXlfYXJyb3c8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0Zvcj0ibGV0IGNvbmZpZyBvZiB0ZW1wbGF0ZS5jb25maWcgfCBrZXlWYWx1ZUlzTm90RW1wdHkiXG4gICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogY29uZmlnLCBpbm5lclZhbHVlOiBmYWxzZSB9Ij5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjUlBDVGVtcGxhdGVSZWYgbGV0LWNvbmZpZyBsZXQtaW5uZXJWYWx1ZT1cJ2lubmVyVmFsdWVcJz5cbiAgICA8ZGl2IFtmeExheW91dF09ImlzT2JqZWN0KGNvbmZpZy52YWx1ZSkgPyBcJ2NvbHVtblwnOiBcJ3Jvd1wnIlxuICAgICAgICAgW2Z4TGF5b3V0QWxpZ25dPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSA/IFwnc3BhY2UtYmV0d2VlbiBjZW50ZXJcJyA6IFwnXCciXG4gICAgICAgICBbbmdTdHlsZV09IntcJ3BhZGRpbmctbGVmdFwnOiBpbm5lclZhbHVlID8gXCcxNnB4XCc6IFwnMFwnfSJcbiAgICAgICAgIGNsYXNzPSJycGMtcGFyYW1zLXJvdyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1rZXkiPlxuICAgICAgICB7eyFpbm5lclZhbHVlID8gKFwnZ2F0ZXdheS5ycGMuXCcgKyBjb25maWcua2V5IHwgdHJhbnNsYXRlKSA6IGNvbmZpZy5rZXl9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJpc0FycmF5KGNvbmZpZy52YWx1ZSkiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0iYXJyYXktdmFsdWUiPlxuICAgICAgICB7eyBjb25maWcudmFsdWUgfCBnZXRScGNUZW1wbGF0ZUFycmF5VmlldyB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJpc09iamVjdChjb25maWcudmFsdWUpIiBbbmdUZW1wbGF0ZU91dGxldF09IlJQQ09iamVjdFJvdyI+PC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2ICpuZ0lmPSIhaXNPYmplY3QoY29uZmlnLnZhbHVlKSAmJiAhaXNBcnJheShjb25maWcudmFsdWUpIlxuICAgICAgICAgICBbbmdDbGFzc109IntcJ2Jvb2xlYW4tdHJ1ZVwnOiBjb25maWcudmFsdWUgPT09IHRydWUsXG4gICAgICAgICAgICAgICAgICAgXCdib29sZWFuLWZhbHNlXCc6IGNvbmZpZy52YWx1ZSA9PT0gZmFsc2UgIH0iPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJjb25maWcua2V5ID09PSBcJ21ldGhvZFwnIGVsc2UgdmFsdWUiIFtuZ1RlbXBsYXRlT3V0bGV0XT0iU05NUE1ldGhvZCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdmFsdWU+e3sgY29uZmlnLnZhbHVlIH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjU05NUE1ldGhvZD57eyBTTk1QTWV0aG9kc1RyYW5zbGF0aW9ucy5nZXQoY29uZmlnLnZhbHVlKSB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgI1JQQ09iamVjdFJvdz5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj0ibGV0IHN1YkNvbmZpZyBvZiBjb25maWcudmFsdWUgfCBrZXl2YWx1ZSA6IG9yaWdpbmFsT3JkZXIiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPSJSUENUZW1wbGF0ZVJlZiJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7ICRpbXBsaWNpdDogc3ViQ29uZmlnLCBpbm5lclZhbHVlOiB0cnVlIH0iPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1leHBhbnNpb24tcGFuZWw+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC50ZW1wbGF0ZS1rZXl7Y29sb3I6IzAwMDAwMDYxO2hlaWdodDozMnB4O2xpbmUtaGVpZ2h0OjMycHh9Omhvc3QgLmJvb2xlYW4tdHJ1ZSw6aG9zdCAuYm9vbGVhbi1mYWxzZXtib3JkZXItcmFkaXVzOjNweDtoZWlnaHQ6MzJweDtsaW5lLWhlaWdodDozMnB4O3BhZGRpbmc6MCAxMnB4O3dpZHRoOmZpdC1jb250ZW50O2ZvbnQtc2l6ZToxNHB4O3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgLmJvb2xlYW4tZmFsc2V7Y29sb3I6I2QxMjczMDtiYWNrZ3JvdW5kLWNvbG9yOiNkMTI3MzAxNH06aG9zdCAuYm9vbGVhbi10cnVle2NvbG9yOiMxOTgwMzg7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4MTR9Omhvc3QgbWF0LWV4cGFuc2lvbi1wYW5lbHttYXJnaW4tdG9wOjEwcHg7b3ZlcmZsb3c6dmlzaWJsZX06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb257ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2U7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDowO2ZsZXg6MH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItZGVzY3JpcHRpb24+bWF0LWljb257bWFyZ2luLWxlZnQ6MTVweDtjb2xvcjojMDAwMDAwNjF9Omhvc3QgLm1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVye3BhZGRpbmc6MCAwIDAgMTJweH06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIubWF0LWV4cGFuZGVke2hlaWdodDo0OHB4fTpob3N0IC5tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciAubWF0LWNvbnRlbnQubWF0LWNvbnRlbnQtaGlkZS10b2dnbGV7bWFyZ2luLXJpZ2h0OjB9Omhvc3QgLnJwYy1wYXJhbXMtcm93e292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9Omhvc3QgLnJwYy1wYXJhbXMtcm93IDpub3QoOmZpcnN0LWNoaWxkKXt3aGl0ZS1zcGFjZTpwcmU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRlbXBsYXRlLW5hbWV7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7ZGlzcGxheTpibG9ja306aG9zdCA6Om5nLWRlZXAgLm1hdC1jb250ZW50e2FsaWduLWl0ZW1zOmNlbnRlcn06aG9zdCAubWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXItdGl0bGV7ZmxleDoxO21hcmdpbjowfTpob3N0IC5hcnJheS12YWx1ZXttYXJnaW4tbGVmdDoxMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Nvbm5lY3RvclR5cGU6W3t0eXBlOmF9XSxjdHg6W3t0eXBlOmF9XSxzYXZlVGVtcGxhdGU6W3t0eXBlOmx9XSx1c2VUZW1wbGF0ZTpbe3R5cGU6bH1dLHJwY1RlbXBsYXRlczpbe3R5cGU6YX1dfX0pO2NsYXNzIElhe2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLkJyb2tlclNlY3VyaXR5VHlwZT1kbix0aGlzLnNlY3VyaXR5VHlwZXM9T2JqZWN0LnZhbHVlcyhkbiksdGhpcy5TZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXA9dW4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e30sdGhpcy5zZWN1cml0eUZvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltkbi5BTk9OWU1PVVMsW11dLHVzZXJuYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV19KSx0aGlzLm9ic2VydmVTZWN1cml0eUZvcm0oKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7ZS50eXBlfHwoZS50eXBlPWRuLkFOT05ZTU9VUyksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlKSx0aGlzLnVwZGF0ZVZpZXcoZSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUZvcm06e3ZhbGlkOiExfX19dXBkYXRlVmlldyhlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZShlKX11cGRhdGVWYWxpZGF0b3JzKGUpe2U9PT1kbi5CQVNJQz8odGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGFzc3dvcmQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInVzZXJuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfW9ic2VydmVTZWN1cml0eUZvcm0oKXt0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlVmlldyhlKSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PklhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpJYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5JYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+SWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbRCxIXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZmllbGRzLWxhYmVsIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZWN1cml0eTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5wYXNzd29yZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8ZGl2IFtjbGFzcy5oaWRlLXRvZ2dsZV09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3Bhc3N3b3JkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLmZpZWxkcy1sYWJlbHtmb250LXdlaWdodDo1MDB9Omhvc3QgLmhpZGUtdG9nZ2xle2Rpc3BsYXk6bm9uZX1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBBYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMuc2VuZENvbW1hbmQ9bmV3IGksdGhpcy5zYXZlVGVtcGxhdGU9bmV3IGksdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuYkFDbmV0UmVxdWVzdFR5cGVzPU9iamVjdC52YWx1ZXMoV3QpLHRoaXMuYkFDbmV0T2JqZWN0VHlwZXM9T2JqZWN0LnZhbHVlcyhLdCksdGhpcy5iTEVNZXRob2RzPU9iamVjdC52YWx1ZXMoWXQpLHRoaXMuY0FOQnl0ZU9yZGVycz1PYmplY3QudmFsdWVzKEp0KSx0aGlzLnNvY2tldE1ldGhvZFByb2Nlc3NpbmdzPU9iamVjdC52YWx1ZXMoWHQpLHRoaXMuc29ja2V0RW5jb2RpbmdzPU9iamVjdC52YWx1ZXMoYW4pLHRoaXMuc05NUE1ldGhvZHM9T2JqZWN0LnZhbHVlcyhlbiksdGhpcy5oVFRQTWV0aG9kcz1PYmplY3QudmFsdWVzKG5uKSx0aGlzLmJBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXM9anQsdGhpcy5iQUNuZXRPYmplY3RUeXBlc1RyYW5zbGF0ZXM9JHQsdGhpcy5iTEVNZXRob2RzVHJhbnNsYXRlcz1RdCx0aGlzLlNvY2tldE1ldGhvZFByb2Nlc3NpbmdzVHJhbnNsYXRlcz1adCx0aGlzLlNOTVBNZXRob2RzVHJhbnNsYXRpb25zPXRuLHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy51cmxQYXR0ZXJuPS9eWy1hLXpBLVpkXyQ6e30/fis9XC8uMC05LV0qJC8sdGhpcy5udW1iZXJzT25seVBhdHRlcm49L15bMC05XSokLyx0aGlzLmhleE9ubHlQYXR0ZXJuPS9eWzAtOUEtRmEtZiBdKyQvLHRoaXMucHJvcGFnYXRlQ2hhbmdlPWU9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlfW5nT25Jbml0KCl7dGhpcy5jb21tYW5kRm9ybT10aGlzLmNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZSh0aGlzLmNvbm5lY3RvclR5cGUpLHRoaXMuY29tbWFuZEZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9e307c3dpdGNoKHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5SRVNUOmNhc2UgX3QuUkVRVUVTVDplLmh0dHBIZWFkZXJzLmZvckVhY2goKGU9Pnt0W2UuaGVhZGVyTmFtZV09ZS52YWx1ZX0pKSxlLmh0dHBIZWFkZXJzPXR9dGhpcy5jb21tYW5kRm9ybS52YWxpZCYmdGhpcy5wcm9wYWdhdGVDaGFuZ2Uoey4uLnRoaXMuY29tbWFuZEZvcm0udmFsdWUsLi4uZX0pfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWNvbm5lY3RvclBhcmFtc0Zvcm1Hcm91cEJ5VHlwZShlKXtsZXQgdDtzd2l0Y2goZSl7Y2FzZSBfdC5CQUNORVQ6dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFR5cGU6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxvYmplY3RUeXBlOltudWxsLFtdXSxpZGVudGlmaWVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxwcm9wZXJ0eUlkOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7YnJlYWs7Y2FzZSBfdC5CTEU6dD10aGlzLmZiLmdyb3VwKHttZXRob2RSUEM6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sY2hhcmFjdGVyaXN0aWNVVUlEOlsiMDAwMDJBMDAtMDAwMC0xMDAwLTgwMDAtMDA4MDVGOUIzNEZCIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLHdpdGhSZXNwb25zZTpbITEsW11dfSk7YnJlYWs7Y2FzZSBfdC5DQU46dD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbm9kZUlEOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxpc0V4dGVuZGVkSUQ6WyExLFtdXSxpc0ZEOlshMSxbXV0sYml0cmF0ZVN3aXRjaDpbITEsW11dLGRhdGFMZW5ndGg6W251bGwsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLGRhdGFCeXRlb3JkZXI6W251bGwsW11dLGRhdGFCZWZvcmU6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhQWZ0ZXI6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhSW5IRVg6W251bGwsW3VlLnBhdHRlcm4oa3QpLHVlLnBhdHRlcm4odGhpcy5oZXhPbmx5UGF0dGVybildXSxkYXRhRXhwcmVzc2lvbjpbbnVsbCxbdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuRlRQOnQ9dGhpcy5mYi5ncm91cCh7bWV0aG9kRmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXX0pO2JyZWFrO2Nhc2UgX3QuT0NQUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNPQ0tFVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2RQcm9jZXNzaW5nOltudWxsLFt1ZS5yZXF1aXJlZF1dLGVuY29kaW5nOlthbi5VVEZfOCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx3aXRoUmVzcG9uc2U6WyExLFtdXX0pO2JyZWFrO2Nhc2UgX3QuWE1QUDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZFJQQzpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KTticmVhaztjYXNlIF90LlNOTVA6dD10aGlzLmZiLmdyb3VwKHtyZXF1ZXN0RmlsdGVyOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx3aXRoUmVzcG9uc2U6WyExLFtdXSxvaWQ6dGhpcy5mYi5hcnJheShbXSxbdWUucmVxdWlyZWRdKX0pO2JyZWFrO2Nhc2UgX3QuUkVTVDp0PXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwTWV0aG9kOltudWxsLFt1ZS5yZXF1aXJlZF1dLHJlcXVlc3RVcmxFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKHRoaXMudXJsUGF0dGVybildXSxyZXNwb25zZVRpbWVvdXQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxMCksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSx0aW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdHJpZXM6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHZhbHVlRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxodHRwSGVhZGVyczp0aGlzLmZiLmFycmF5KFtdKSxzZWN1cml0eTpbe30sW3VlLnJlcXVpcmVkXV19KTticmVhaztjYXNlIF90LlJFUVVFU1Q6dD10aGlzLmZiLmdyb3VwKHttZXRob2RGaWx0ZXI6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saHR0cE1ldGhvZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxyZXF1ZXN0VXJsRXhwcmVzc2lvbjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybih0aGlzLnVybFBhdHRlcm4pXV0scmVzcG9uc2VUaW1lb3V0OltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4odGhpcy5udW1iZXJzT25seVBhdHRlcm4pXV0sdGltZW91dDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKDEwKSx1ZS5wYXR0ZXJuKHRoaXMubnVtYmVyc09ubHlQYXR0ZXJuKV1dLHRyaWVzOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybih0aGlzLm51bWJlcnNPbmx5UGF0dGVybildXSxyZXF1ZXN0VmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVmFsdWVFeHByZXNzaW9uOltudWxsLFt1ZS5wYXR0ZXJuKGt0KV1dLGh0dHBIZWFkZXJzOnRoaXMuZmIuYXJyYXkoW10pfSk7YnJlYWs7ZGVmYXVsdDp0PXRoaXMuZmIuZ3JvdXAoe2NvbW1hbmQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFyYW1zOlt7fSxbSXRdXX0pfXJldHVybiB0fWFkZFNOTVBvaWQoZT1udWxsKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJvaWQiKTt0JiZ0LnB1c2godGhpcy5mYi5jb250cm9sKGUsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXSkse2VtaXRFdmVudDohMX0pfXJlbW92ZVNOTVBvaWQoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoIm9pZCIpLnJlbW92ZUF0KGUpfWFkZEhUVFBIZWFkZXIoZT17aGVhZGVyTmFtZTpudWxsLHZhbHVlOm51bGx9KXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KCJodHRwSGVhZGVycyIpLG49dGhpcy5mYi5ncm91cCh7aGVhZGVyTmFtZTpbZS5oZWFkZXJOYW1lLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlOltlLnZhbHVlLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSk7dCYmdC5wdXNoKG4se2VtaXRFdmVudDohMX0pfXJlbW92ZUhUVFBIZWFkZXIoZSl7dGhpcy5jb21tYW5kRm9ybS5nZXQoImh0dHBIZWFkZXJzIikucmVtb3ZlQXQoZSl9Z2V0Rm9ybUFycmF5Q29udHJvbHMoZSl7cmV0dXJuIHRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpLmNvbnRyb2xzfW9wZW5FZGl0SlNPTkRpYWxvZyhlKXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuZGlhbG9nLm9wZW4oUWUse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntqc29uVmFsdWU6dGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnZhbHVlLHJlcXVpcmVkOiEwfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5jb21tYW5kRm9ybS5nZXQoInBhcmFtcyIpLnNldFZhbHVlKGUpfSkpfXNhdmUoKXt0aGlzLnNhdmVUZW1wbGF0ZS5lbWl0KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe31jbGVhckZyb21BcnJheUJ5TmFtZShlKXtjb25zdCB0PXRoaXMuY29tbWFuZEZvcm0uZ2V0KGUpO2Zvcig7MCE9PXQubGVuZ3RoOyl0LnJlbW92ZUF0KDApfXdyaXRlVmFsdWUoZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXtzd2l0Y2goZT1KKGUpLHRoaXMuY29ubmVjdG9yVHlwZSl7Y2FzZSBfdC5TTk1QOnRoaXMuY2xlYXJGcm9tQXJyYXlCeU5hbWUoIm9pZCIpLGUub2lkLmZvckVhY2goKGU9Pnt0aGlzLmFkZFNOTVBvaWQoZSl9KSksZGVsZXRlIGUub2lkO2JyZWFrO2Nhc2UgX3QuUkVRVUVTVDpjYXNlIF90LlJFU1Q6dGhpcy5jbGVhckZyb21BcnJheUJ5TmFtZSgiaHR0cEhlYWRlcnMiKSxlLmh0dHBIZWFkZXJzJiZPYmplY3QuZW50cmllcyhlLmh0dHBIZWFkZXJzKS5mb3JFYWNoKChlPT57dGhpcy5hZGRIVFRQSGVhZGVyKHtoZWFkZXJOYW1lOmVbMF0sdmFsdWU6ZVsxXX0pfSkpLGRlbGV0ZSBlLmh0dHBIZWFkZXJzfXRoaXMuY29tbWFuZEZvcm0ucGF0Y2hWYWx1ZShlLHtvbmx5U2VsZjohMX0pfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6e2Nvbm5lY3RvclR5cGU6ImNvbm5lY3RvclR5cGUifSxvdXRwdXRzOntzZW5kQ29tbWFuZDoic2VuZENvbW1hbmQiLHNhdmVUZW1wbGF0ZToic2F2ZVRlbXBsYXRlIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hEZWZhdWx0LHNlbGVjdG9yOiJbbmdTd2l0Y2hEZWZhdWx0XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WmUuVGJKc29uVG9TdHJpbmdEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi1qc29uLXRvLXN0cmluZ10ifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnouTWF0RGl2aWRlcixzZWxlY3RvcjoibWF0LWRpdmlkZXIiLGlucHV0czpbInZlcnRpY2FsIiwiaW5zZXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4QWxpZ25dLCBbZnhGbGV4QWxpZ24ueHNdLCBbZnhGbGV4QWxpZ24uc21dLCBbZnhGbGV4QWxpZ24ubWRdLCAgW2Z4RmxleEFsaWduLmxnXSwgW2Z4RmxleEFsaWduLnhsXSwgW2Z4RmxleEFsaWduLmx0LXNtXSwgW2Z4RmxleEFsaWduLmx0LW1kXSwgIFtmeEZsZXhBbGlnbi5sdC1sZ10sIFtmeEZsZXhBbGlnbi5sdC14bF0sIFtmeEZsZXhBbGlnbi5ndC14c10sIFtmeEZsZXhBbGlnbi5ndC1zbV0sICBbZnhGbGV4QWxpZ24uZ3QtbWRdLCBbZnhGbGV4QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeEZsZXhBbGlnbiIsImZ4RmxleEFsaWduLnhzIiwiZnhGbGV4QWxpZ24uc20iLCJmeEZsZXhBbGlnbi5tZCIsImZ4RmxleEFsaWduLmxnIiwiZnhGbGV4QWxpZ24ueGwiLCJmeEZsZXhBbGlnbi5sdC1zbSIsImZ4RmxleEFsaWduLmx0LW1kIiwiZnhGbGV4QWxpZ24ubHQtbGciLCJmeEZsZXhBbGlnbi5sdC14bCIsImZ4RmxleEFsaWduLmd0LXhzIiwiZnhGbGV4QWxpZ24uZ3Qtc20iLCJmeEZsZXhBbGlnbi5ndC1tZCIsImZ4RmxleEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUFycmF5TmFtZSxzZWxlY3RvcjoiW2Zvcm1BcnJheU5hbWVdIixpbnB1dHM6WyJmb3JtQXJyYXlOYW1lIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6SWEsc2VsZWN0b3I6InRiLXJlc3QtY29ubmVjdG9yLXNlY3VyaXR5In0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJHYXRld2F5U2VydmljZVJQQ0Nvbm5lY3RvckNvbXBvbmVudCIsQWEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6QWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5BYSkpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJjb21tYW5kLWZvcm0iIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gIDxkaXZcbiAgICBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMudGl0bGVcJyB8IHRyYW5zbGF0ZToge3R5cGU6IGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzLmdldChjb25uZWN0b3JUeXBlKX0gfX08L2Rpdj5cbiAgPG5nLXRlbXBsYXRlIFtuZ0lmXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5CQUNORVQiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIiBwbGFjZWhvbGRlcj0ic2V0X3N0YXRlIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBiQUNuZXRSZXF1ZXN0VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JBQ25ldFJlcXVlc3RUeXBlc1RyYW5zbGF0ZXMuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdFRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgIG1pbj0iMTAiIHN0ZXA9IjEiIHBsYWNlaG9sZGVyPSIxMDAwIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMub2JqZWN0VHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im9iamVjdFR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJBQ25ldE9iamVjdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7e2JBQ25ldE9iamVjdFR5cGVzVHJhbnNsYXRlcy5nZXQodHlwZSkgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuaWRlbnRpZmllclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpZGVudGlmaWVyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgbWluPSIxIiBzdGVwPSIxIiBwbGFjZWhvbGRlcj0iMSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnByb3BlcnR5SWRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InByb3BlcnR5SWQiIHBsYWNlaG9sZGVyPSJwcmVzZW50VmFsdWUiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuQkxFIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RSUENcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZFJQQyIgcGxhY2Vob2xkZXI9InJwY01ldGhvZDEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5jaGFyYWN0ZXJpc3RpY1VVSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoYXJhY3RlcmlzdGljVVVJRCIgcGxhY2Vob2xkZXI9IjAwMDAyQTAwLTAwMDAtMTAwMC04MDAwLTAwODA1RjlCMzRGQiIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFByb2Nlc3NpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUHJvY2Vzc2luZyI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGJMRU1ldGhvZHMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICB7e2JMRU1ldGhvZHNUcmFuc2xhdGVzLmdldCh0eXBlKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLkNBTiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJzZW5kU2FtZURhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5ub2RlSURcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im5vZGVJRCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iNCIgbWluPSIwIiBzdGVwPSIxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRXh0ZW5kZWRJRCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5pc0V4dGVuZGVkSURcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9ImlzRkQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuaXNGRFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0iYml0cmF0ZVN3aXRjaCI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy5iaXRyYXRlU3dpdGNoXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFMZW5ndGhcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUxlbmd0aCIgdHlwZT0ibnVtYmVyIiBwbGFjZWhvbGRlcj0iMiIgbWluPSIxIiBzdGVwPSIxIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayIgZnhGbGV4PSI1MCI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUJ5dGVvcmRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRhdGFCeXRlb3JkZXIiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBjQU5CeXRlT3JkZXJzIiBbdmFsdWVdPSJvcmRlciI+XG4gICAgICAgICAgICAgICAge3sgb3JkZXIgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFCZWZvcmVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUJlZm9yZSIgcGxhY2Vob2xkZXI9IjAwQUEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5kYXRhQWZ0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUFmdGVyIiBwbGFjZWhvbGRlcj0iMDEwMiIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmRhdGFJbkhFWFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YUluSEVYIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iYWEgYmIgY2MgZGQgZWUgZmYgICBhYSBiYiBhYSBiYiBjYyBkIGVlIGZmIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZGF0YUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0idXNlclNwZWVkIGlmIG1heEFsbG93ZWRTcGVlZCA+IHVzZXJTcGVlZCBlbHNlIG1heEFsbG93ZWRTcGVlZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5GVFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0icmVhZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLk9DUFAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZFJQQ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kUlBDIiBwbGFjZWhvbGRlcj0icnBjMSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlNPQ0tFVCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGNNZXRob2QxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUHJvY2Vzc2luZ1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RQcm9jZXNzaW5nIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzb2NrZXRNZXRob2RQcm9jZXNzaW5ncyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU29ja2V0TWV0aG9kUHJvY2Vzc2luZ3NUcmFuc2xhdGVzLmdldChtZXRob2QpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmVuY29kaW5nXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJlbmNvZGluZyIgcGxhY2Vob2xkZXI9Int7c29ja2V0RW5jb2RpbmdzWzBdfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuWE1QUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kUlBDXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RSUEMiIHBsYWNlaG9sZGVyPSJycGMxIi8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBtYXJnaW4iIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbm5lY3RvclR5cGUuU05NUCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVxdWVzdEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdEZpbHRlciIgcGxhY2Vob2xkZXI9InNldERhdGEiLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBzTk1QTWV0aG9kcyIgW3ZhbHVlXT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAge3sgU05NUE1ldGhvZHNUcmFuc2xhdGlvbnMuZ2V0KG1ldGhvZCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgbWFyZ2luIiBmb3JtQ29udHJvbE5hbWU9IndpdGhSZXNwb25zZSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnJwYy53aXRoUmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxmaWVsZHNldCBjbGFzcz0iZmllbGRzIGJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiIGZvcm1BcnJheU5hbWU9Im9pZCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5vaWRzXCcgfCB0cmFuc2xhdGUgfX0qPC9zcGFuPlxuICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ29pZFwnKTsgbGV0IGkgPSBpbmRleCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWlubGluZS1maWVsZCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4IHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPSJjb250cm9sIiByZXF1aXJlZC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1pY29uIHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZVNOTVBvaWQoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnJwYy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSI+ZGVsZXRlXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZFNOTVBvaWQoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1vaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29ubmVjdG9yVHlwZS5SRVNUIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RGaWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciIgcGxhY2Vob2xkZXI9InBvc3RfYXR0cmlidXRlcyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJodHRwOi8vMTI3LjAuMC4xOjUwMDAvbXlfZGV2aWNlcyIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEwIiBwbGFjZWhvbGRlcj0iMTAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwMDAiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudHJpZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idHJpZXMiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBzdGVwPSIxIiBtaW49IjEiIHBsYWNlaG9sZGVyPSIzIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJmaWVsZHMgYm9yZGVyIiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEdhcD0iMTBweCIgZm9ybUFycmF5TmFtZT0iaHR0cEhlYWRlcnMiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuaHR0cEhlYWRlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiAqbmdJZj0iZ2V0Rm9ybUFycmF5Q29udHJvbHMoXCdodHRwSGVhZGVyc1wnKS5sZW5ndGgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleCBjbGFzcz0idGl0bGUiPnt7IFwnZ2F0ZXdheS5ycGMuaGVhZGVyLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXg9IjMwcHgiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1kaXZpZGVyPjwvbWF0LWRpdmlkZXI+XG4gICAgICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29udHJvbCBvZiBnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09ImkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBmeEZsZXg+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJoZWFkZXJOYW1lIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJhcHBsaWNhdGlvbi9qc29uIi8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZnhGbGV4PSIzMHB4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJyZW1vdmVIVFRQSGVhZGVyKGkpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19Ij5kZWxldGVcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZEhUVFBIZWFkZXIoKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmFkZC1oZWFkZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2ZpZWxkc2V0PlxuICAgICAgICA8dGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHkgW2Zvcm1Db250cm9sXT0iY29tbWFuZEZvcm0uZ2V0KFwnc2VjdXJpdHlcJykiPjwvdGItcmVzdC1jb25uZWN0b3Itc2VjdXJpdHk+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb25uZWN0b3JUeXBlLlJFUVVFU1QiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm1ldGhvZEZpbHRlclwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2siIGZ4RmxleD0iMzMiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmh0dHBNZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJodHRwTWV0aG9kIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIGhUVFBNZXRob2RzIiBbdmFsdWVdPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgIHt7IG1ldGhvZCB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RVcmxFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RVcmxFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iaHR0cDovLzEyNy4wLjAuMTo1MDAwL215X2RldmljZXMiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjMzIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgc3RlcD0iMSIgbWluPSIxMCIgcGxhY2Vob2xkZXI9IjEwIi8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMTAiIHBsYWNlaG9sZGVyPSIxMCIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50cmllc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0cmllcyIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHN0ZXA9IjEiIG1pbj0iMSIgcGxhY2Vob2xkZXI9IjEiLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VWYWx1ZUV4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0iJHt0ZW1wfSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8ZmllbGRzZXQgY2xhc3M9ImZpZWxkcyBib3JkZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0R2FwPSIxMHB4IiBmb3JtQXJyYXlOYW1lPSJodHRwSGVhZGVycyI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9ImZpZWxkcy1sYWJlbCI+e3sgXCdnYXRld2F5LnJwYy5odHRwSGVhZGVyc1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImJvcmRlciIgZnhMYXlvdXQ9ImNvbHVtbiIgZnhMYXlvdXRHYXA9IjEwcHgiICpuZ0lmPSJnZXRGb3JtQXJyYXlDb250cm9scyhcJ2h0dHBIZWFkZXJzXCcpLmxlbmd0aCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgICAgICAgPHNwYW4gZnhGbGV4IGNsYXNzPSJ0aXRsZSI+e3sgXCdnYXRld2F5LnJwYy5oZWFkZXItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBmeEZsZXggY2xhc3M9InRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnZhbHVlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGZ4RmxleD0iMzBweCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgICAgICAgICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb250cm9sIG9mIGdldEZvcm1BcnJheUNvbnRyb2xzKFwnaHR0cEhlYWRlcnNcJyk7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iaSI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGZ4RmxleD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImhlYWRlck5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkucnBjLnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgZnhGbGV4PlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWUiLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmeEZsZXg9IjMwcHgiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9InJlbW92ZUhUVFBIZWFkZXIoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iPmRlbGV0ZVxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgZnhGbGV4QWxpZ249InN0YXJ0IlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkSFRUUEhlYWRlcigpIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWhlYWRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZmllbGRzZXQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIG5nU3dpdGNoRGVmYXVsdD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCd3aWRnZXQtY29uZmlnLmRhdGFzb3VyY2UtcGFyYW1ldGVyc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFyYW1zIiB0eXBlPSJKU09OIiB0Yi1qc29uLXRvLXN0cmluZy8+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZCIgYXJpYS1oaWRkZW49ImZhbHNlIiBhcmlhLWxhYmVsPSJoZWxwLWljb24iXG4gICAgICAgICAgICAgICAgICAgIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ib3BlbkVkaXRKU09ORGlhbG9nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1lZGl0LXBhcmFtc1wnIHwgdHJhbnNsYXRlIH19Ij5lZGl0XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaGFzRXJyb3IoXCdpbnZhbGlkSlNPTlwnKSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLmpzb24tdmFsdWUtaW52YWxpZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPSJ0ZW1wbGF0ZS1hY3Rpb25zIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9InNhdmUoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmludmFsaWQiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQuZW1pdCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MH06aG9zdCAudGl0bGV7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH06aG9zdCAuZmllbGRzIC5maWVsZHMtbGFiZWx7Zm9udC13ZWlnaHQ6NTAwfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O21hcmdpbi1ib3R0b206MTBweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fTpob3N0IC5ib3JkZXIgLnRpdGxle2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuYm9yZGVyIC5tYXQtaWNvbntjb2xvcjojMDAwMDAwNjF9Omhvc3QgLmJvcmRlciAubWF0LWRpdmlkZXJ7bWFyZ2luLWxlZnQ6LTE2cHg7bWFyZ2luLXJpZ2h0Oi0xNnB4O21hcmdpbi1ib3R0b206MTZweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpKZS5NYXREaWFsb2d9XSxwcm9wRGVjb3JhdG9yczp7Y29ubmVjdG9yVHlwZTpbe3R5cGU6YX1dLHNlbmRDb21tYW5kOlt7dHlwZTpsfV0sc2F2ZVRlbXBsYXRlOlt7dHlwZTpsfV19fSk7Y2xhc3MgTmEgZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LGEpLHRoaXMuc3RvcmU9ZSx0aGlzLnJvdXRlcj10LHRoaXMuZGF0YT1uLHRoaXMuZGlhbG9nUmVmPWEsdGhpcy5mYj1vLHRoaXMuY29uZmlnPXRoaXMuZGF0YS5jb25maWcsdGhpcy50ZW1wbGF0ZXM9dGhpcy5kYXRhLnRlbXBsYXRlcyx0aGlzLnRlbXBsYXRlTmFtZUN0cmw9dGhpcy5mYi5jb250cm9sKCIiLFt1ZS5yZXF1aXJlZF0pfXZhbGlkYXRlRHVwbGljYXRlTmFtZShlKXtjb25zdCB0PWUudmFsdWUudHJpbSgpO3JldHVybiEhdGhpcy50ZW1wbGF0ZXMuZmluZCgoZT0+ZS5uYW1lPT09dCkpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX1zYXZlKCl7dGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnNldFZhbHVlKHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWx1ZS50cmltKCkpLHRoaXMudGVtcGxhdGVOYW1lQ3RybC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy50ZW1wbGF0ZU5hbWVDdHJsLnZhbHVlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5hLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOk5hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10b29sYmFyIGNvbG9yPSJwcmltYXJ5Ij5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy5zYXZlLXRlbXBsYXRlPC9oMj5cbiAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICA8L2J1dHRvbj5cbjwvbWF0LXRvb2xiYXI+XG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0id2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9Im1hdC1ibG9jayB0Yi12YWx1ZS10eXBlIiBzdHlsZT0iZmxleC1ncm93OiAwIj5cbiAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lPC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09InRlbXBsYXRlTmFtZUN0cmwiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0idGVtcGxhdGVOYW1lQ3RybC5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9tYXQtZXJyb3I+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxkaXYgY2xhc3M9Im1hdC1tZGMtZm9ybS1maWVsZC1lcnJvciJcbiAgICAgICBzdHlsZT0ibWFyZ2luLXRvcDogLTE1cHg7IHBhZGRpbmctbGVmdDogMTBweDsgZm9udC1zaXplOiAxNHB4OyJcbiAgICAgICAqbmdJZj0idmFsaWRhdGVEdXBsaWNhdGVOYW1lKHRlbXBsYXRlTmFtZUN0cmwpIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWUtZHVwbGljYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICA8YnV0dG9uIG1hdC1idXR0b25cbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICBbZGlzYWJsZWRdPSIhdGVtcGxhdGVOYW1lQ3RybC52YWxpZCJcbiAgICAgICAgICAoY2xpY2spPSJzYXZlKCkiPlxuICAgIHt7IFwnYWN0aW9uLnNhdmVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRFcnJvcixzZWxlY3RvcjoibWF0LWVycm9yLCBbbWF0RXJyb3JdIixpbnB1dHM6WyJpZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0FjdGlvbnMsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWFjdGlvbnNdLCBtYXQtZGlhbG9nLWFjdGlvbnMsIFttYXREaWFsb2dBY3Rpb25zXSIsaW5wdXRzOlsiYWxpZ24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dDb250ZW50LHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1jb250ZW50XSwgbWF0LWRpYWxvZy1jb250ZW50LCBbbWF0RGlhbG9nQ29udGVudF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb25uZWN0b3JUZW1wbGF0ZURpYWxvZ0NvbXBvbmVudCIsTmEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TmEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlLWRpYWxvZyIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICA8aDIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnNhdmUtdGVtcGxhdGU8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJ3aWR0aDogNjAwcHgiIGNsYXNzPSJtYXQtY29udGVudCIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0ibWF0LWJsb2NrIHRiLXZhbHVlLXR5cGUiIHN0eWxlPSJmbGV4LWdyb3c6IDAiPlxuICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucnBjLnRlbXBsYXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0idGVtcGxhdGVOYW1lQ3RybCIgcmVxdWlyZWQvPlxuICAgIDxtYXQtZXJyb3JcbiAgICAgICpuZ0lmPSJ0ZW1wbGF0ZU5hbWVDdHJsLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy50ZW1wbGF0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPGRpdiBjbGFzcz0ibWF0LW1kYy1mb3JtLWZpZWxkLWVycm9yIlxuICAgICAgIHN0eWxlPSJtYXJnaW4tdG9wOiAtMTVweDsgcGFkZGluZy1sZWZ0OiAxMHB4OyBmb250LXNpemU6IDE0cHg7IlxuICAgICAgICpuZ0lmPSJ2YWxpZGF0ZUR1cGxpY2F0ZU5hbWUodGVtcGxhdGVOYW1lQ3RybCkiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMudGVtcGxhdGUtbmFtZS1kdXBsaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAoY2xpY2spPSJjbG9zZSgpIj5cbiAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2J1dHRvbj5cbiAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgIFtkaXNhYmxlZF09IiF0ZW1wbGF0ZU5hbWVDdHJsLnZhbGlkIlxuICAgICAgICAgIChjbGljayk9InNhdmUoKSI+XG4gICAge3sgXCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBNYXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKEduKSx0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy52YWx1ZVR5cGVzPVZuLHRoaXMub25DaGFuZ2U9ZT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHttZXRob2Q6W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXJndW1lbnRzOnRoaXMuZmIuYXJyYXkoW10pfSksdGhpcy5vYnNlcnZlVmFsdWVDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuY2xlYXJBcmd1bWVudHMoKSxlLmFyZ3VtZW50cz8ubWFwKCgoe3R5cGU6ZSx2YWx1ZTp0fSk9Pih7dHlwZTplLFtlXTp0fSkpKS5mb3JFYWNoKChlPT50aGlzLmFkZEFyZ3VtZW50KGUpKSksdGhpcy5jZHIubWFya0ZvckNoZWNrKCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlLm1ldGhvZCl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmFyZ3VtZW50cy5tYXAoKCh7dHlwZTplLC4uLnR9KT0+KHt0eXBlOmUsdmFsdWU6dFtlXX0pKSk7dGhpcy5vbkNoYW5nZSh7bWV0aG9kOmUubWV0aG9kLGFyZ3VtZW50czp0fSksdGhpcy5vblRvdWNoZWQoKX0pKX1yZW1vdmVBcmd1bWVudChlKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJhcmd1bWVudHMiKS5yZW1vdmVBdChlKX1hZGRBcmd1bWVudChlPXt9KXtjb25zdCB0PXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2UudHlwZT8/R24uU1RSSU5HXSxzdHJpbmc6W2Uuc3RyaW5nPz97dmFsdWU6IiIsZGlzYWJsZWQ6IShlZShlLHt9KXx8ZS5zdHJpbmcpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6ZS5pbnRlZ2VyPz8wLGRpc2FibGVkOiFpZShlLmludGVnZXIpfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihMdCldXSxkb3VibGU6W3t2YWx1ZTplLmRvdWJsZT8/MCxkaXNhYmxlZDohaWUoZS5kb3VibGUpfSxbdWUucmVxdWlyZWRdXSxib29sZWFuOlt7dmFsdWU6ZS5ib29sZWFuPz8hMSxkaXNhYmxlZDohaWUoZS5ib29sZWFuKX0sW3VlLnJlcXVpcmVkXV19KTt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKHQpLHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpLnB1c2godCx7ZW1pdEV2ZW50OiExfSl9Y2xlYXJBcmd1bWVudHMoKXtjb25zdCBlPXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImFyZ3VtZW50cyIpO2Zvcig7MCE9PWUubGVuZ3RoOyllLnJlbW92ZUF0KDApfW9ic2VydmVUeXBlQ2hhbmdlKGUpe2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e2UuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoInR5cGUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KHQpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpNYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpNYSxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+TWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCB0Yi1mbGV4IG5vLXBhZGRpbmctdG9wIGhpbnQtY29udGFpbmVyIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLmhpbnQub3BjLW1ldGhvZFwnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Im11bHRpcGx5Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxmaWVsZHNldCBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIGFyZ3VtZW50cy1jb250YWluZXIiIGZ4TGF5b3V0PSJjb2x1bW4iIGZvcm1BcnJheU5hbWU9ImFyZ3VtZW50cyI+XG4gICAgPHN0cm9uZz5cbiAgICAgIDxzcGFuIGNsYXNzPSJmaWVsZHMtbGFiZWwiPnt7IFwnZ2F0ZXdheS5ycGMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgPC9zdHJvbmc+XG4gICAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAqbmdGb3I9ImxldCBhcmd1bWVudEZvcm1Hcm91cCBvZiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FyZ3VtZW50c1wnKVtcJ2NvbnRyb2xzXCddOyBsZXQgaSA9IGluZGV4IiBbZm9ybUdyb3VwXT0iYXJndW1lbnRGb3JtR3JvdXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIHR5cGUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTE4IiBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHZhbHVlVHlwZSBvZiB2YWx1ZVR5cGVLZXlzIiBbdmFsdWVdPSJ2YWx1ZVR5cGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5uYW1lIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB2YWx1ZS1jb250YWluZXIiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuU1RSSU5HIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9InN0cmluZyJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLkRPVUJMRSIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJkb3VibGUiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5CT09MRUFOIiBmb3JtQ29udHJvbE5hbWU9ImJvb2xlYW4iPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJ0cnVlIj50cnVlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImFyZ3VtZW50Rm9ybUdyb3VwLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVBcmd1bWVudChpKSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5ycGMucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGZ4RmxleEFsaWduPSJzdGFydCJcbiAgICAgICAgICAgIChjbGljayk9ImFkZEFyZ3VtZW50KCkiPlxuICAgICAge3sgXCdnYXRld2F5LnJwYy5hZGQtYXJndW1lbnRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2ZpZWxkc2V0PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuYXJndW1lbnRzLWNvbnRhaW5lcnttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnR5cGUtY29udGFpbmVye3dpZHRoOjQwJX06aG9zdCAudmFsdWUtY29udGFpbmVye3dpZHRoOjUwJX06aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp3ZS5NYXRTZWxlY3RUcmlnZ2VyLHNlbGVjdG9yOiJtYXQtc2VsZWN0LXRyaWdnZXIifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEdhcERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRHYXBdLCBbZnhMYXlvdXRHYXAueHNdLCBbZnhMYXlvdXRHYXAuc21dLCBbZnhMYXlvdXRHYXAubWRdLCAgW2Z4TGF5b3V0R2FwLmxnXSwgW2Z4TGF5b3V0R2FwLnhsXSwgW2Z4TGF5b3V0R2FwLmx0LXNtXSwgW2Z4TGF5b3V0R2FwLmx0LW1kXSwgIFtmeExheW91dEdhcC5sdC1sZ10sIFtmeExheW91dEdhcC5sdC14bF0sIFtmeExheW91dEdhcC5ndC14c10sIFtmeExheW91dEdhcC5ndC1zbV0sICBbZnhMYXlvdXRHYXAuZ3QtbWRdLCBbZnhMYXlvdXRHYXAuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEdhcCIsImZ4TGF5b3V0R2FwLnhzIiwiZnhMYXlvdXRHYXAuc20iLCJmeExheW91dEdhcC5tZCIsImZ4TGF5b3V0R2FwLmxnIiwiZnhMYXlvdXRHYXAueGwiLCJmeExheW91dEdhcC5sdC1zbSIsImZ4TGF5b3V0R2FwLmx0LW1kIiwiZnhMYXlvdXRHYXAubHQtbGciLCJmeExheW91dEdhcC5sdC14bCIsImZ4TGF5b3V0R2FwLmd0LXhzIiwiZnhMYXlvdXRHYXAuZ3Qtc20iLCJmeExheW91dEdhcC5ndC1tZCIsImZ4TGF5b3V0R2FwLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhBbGlnbl0sIFtmeEZsZXhBbGlnbi54c10sIFtmeEZsZXhBbGlnbi5zbV0sIFtmeEZsZXhBbGlnbi5tZF0sICBbZnhGbGV4QWxpZ24ubGddLCBbZnhGbGV4QWxpZ24ueGxdLCBbZnhGbGV4QWxpZ24ubHQtc21dLCBbZnhGbGV4QWxpZ24ubHQtbWRdLCAgW2Z4RmxleEFsaWduLmx0LWxnXSwgW2Z4RmxleEFsaWduLmx0LXhsXSwgW2Z4RmxleEFsaWduLmd0LXhzXSwgW2Z4RmxleEFsaWduLmd0LXNtXSwgIFtmeEZsZXhBbGlnbi5ndC1tZF0sIFtmeEZsZXhBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4RmxleEFsaWduIiwiZnhGbGV4QWxpZ24ueHMiLCJmeEZsZXhBbGlnbi5zbSIsImZ4RmxleEFsaWduLm1kIiwiZnhGbGV4QWxpZ24ubGciLCJmeEZsZXhBbGlnbi54bCIsImZ4RmxleEFsaWduLmx0LXNtIiwiZnhGbGV4QWxpZ24ubHQtbWQiLCJmeEZsZXhBbGlnbi5sdC1sZyIsImZ4RmxleEFsaWduLmx0LXhsIiwiZnhGbGV4QWxpZ24uZ3QteHMiLCJmeEZsZXhBbGlnbi5ndC1zbSIsImZ4RmxleEFsaWduLmd0LW1kIiwiZnhGbGV4QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1BcnJheU5hbWUsc2VsZWN0b3I6Iltmb3JtQXJyYXlOYW1lXSIsaW5wdXRzOlsiZm9ybUFycmF5TmFtZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk1hLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk1hKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5NYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm9wYy1tZXRob2RcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJtdWx0aXBseSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8ZmllbGRzZXQgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBhcmd1bWVudHMtY29udGFpbmVyIiBmeExheW91dD0iY29sdW1uIiBmb3JtQXJyYXlOYW1lPSJhcmd1bWVudHMiPlxuICAgIDxzdHJvbmc+XG4gICAgICA8c3BhbiBjbGFzcz0iZmllbGRzLWxhYmVsIj57eyBcJ2dhdGV3YXkucnBjLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgIDwvc3Ryb25nPlxuICAgIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgKm5nRm9yPSJsZXQgYXJndW1lbnRGb3JtR3JvdXAgb2YgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhcmd1bWVudHNcJylbXCdjb250cm9sc1wnXTsgbGV0IGkgPSBpbmRleCIgW2Zvcm1Hcm91cF09ImFyZ3VtZW50Rm9ybUdyb3VwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyB0eXBlLWNvbnRhaW5lciIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdmFsdWVUeXBlcy5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdmFsdWUtY29udGFpbmVyIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLklOVEVHRVIiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iaW50ZWdlciIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICA8aW5wdXQgKm5nU3dpdGNoQ2FzZT0iTWFwcGluZ1ZhbHVlVHlwZS5ET1VCTEUiIG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0iZG91YmxlIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIgLz5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0idHJ1ZSI+dHJ1ZTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iZmFsc2UiPmZhbHNlPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJhcmd1bWVudEZvcm1Hcm91cC5nZXQoYXJndW1lbnRGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgYXJndW1lbnRGb3JtR3JvdXAuZ2V0KGFyZ3VtZW50Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQXJndW1lbnQoaSkiXG4gICAgICAgICAgICAgIGNsYXNzPSJ0Yi1ib3gtYnV0dG9uIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkucnBjLnJlbW92ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICBmeEZsZXhBbGlnbj0ic3RhcnQiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGRBcmd1bWVudCgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5ycGMuYWRkLWFyZ3VtZW50XCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9maWVsZHNldD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFyZ3VtZW50cy1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC50eXBlLWNvbnRhaW5lcnt3aWR0aDo0MCV9Omhvc3QgLnZhbHVlLWNvbnRhaW5lcnt3aWR0aDo1MCV9Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyBFYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5vbkNoYW5nZT1lPT57fSx0aGlzLm9uVG91Y2hlZD0oKT0+e30sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21ldGhvZEZpbHRlcjpbbnVsbCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXF1ZXN0VG9waWNFeHByZXNzaW9uOltudWxsLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHJlc3BvbnNlVG9waWNFeHByZXNzaW9uOlt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUaW1lb3V0Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohMH0sW3VlLm1pbigxMCksdWUucGF0dGVybihMdCldXSx2YWx1ZUV4cHJlc3Npb246W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sd2l0aFJlc3BvbnNlOlshMSxbXV19KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVXaXRoUmVzcG9uc2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWxpZD9udWxsOntycGNQYXJhbWV0ZXJzRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlLndpdGhSZXNwb25zZSl9b2JzZXJ2ZVZhbHVlQ2hhbmdlcygpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW9ic2VydmVXaXRoUmVzcG9uc2UoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ3aXRoUmVzcG9uc2UiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+dGhpcy50b2dnbGVSZXNwb25zZUZpZWxkcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX10b2dnbGVSZXNwb25zZUZpZWxkcyhlKXtjb25zdCB0PXRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInJlc3BvbnNlVG9waWNFeHByZXNzaW9uIiksbj10aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKTtlPyh0LmVuYWJsZSgpLG4uZW5hYmxlKCkpOih0LmRpc2FibGUoKSxuLmRpc2FibGUoKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFYSxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVhLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+RWEpKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwIj5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iZWNobyIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXF1ZXN0LyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXJnaW4iIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSIgZm9ybUNvbnRyb2xOYW1lPSJ3aXRoUmVzcG9uc2UiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMud2l0aFJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9InNlbnNvci8ke2RldmljZU5hbWV9L3Jlc3BvbnNlLyR7bWV0aG9kTmFtZX0vJHtyZXF1ZXN0SWR9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZCAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd3aXRoUmVzcG9uc2VcJyk/LnZhbHVlIj5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMucmVzcG9uc2VUaW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRpbWVvdXQiIHR5cGU9Im51bWJlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9IjEwMDAwIiBtaW49IjEwIiBzdGVwPSIxIi8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3BhcmFtc30iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAubWF0LW1kYy1zbGlkZS10b2dnbGUubWFyZ2lue21hcmdpbi1ib3R0b206MTBweDttYXJnaW4tbGVmdDoxMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RWEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkVhKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5FYSkpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxtYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZEZpbHRlciJcbiAgICAgICAgICAgcGxhY2Vob2xkZXI9ImVjaG8iLz5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPG1hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXF1ZXN0VG9waWNFeHByZXNzaW9uXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0ic2Vuc29yLyR7ZGV2aWNlTmFtZX0vcmVxdWVzdC8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWFyZ2luIiAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiIGZvcm1Db250cm9sTmFtZT0id2l0aFJlc3BvbnNlIj5cbiAgICB7eyBcJ2dhdGV3YXkucnBjLndpdGhSZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3dpdGhSZXNwb25zZVwnKT8udmFsdWUiPlxuICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSJzZW5zb3IvJHtkZXZpY2VOYW1lfS9yZXNwb25zZS8ke21ldGhvZE5hbWV9LyR7cmVxdWVzdElkfSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnd2l0aFJlc3BvbnNlXCcpPy52YWx1ZSI+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnJlc3BvbnNlVGltZW91dFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgIHBsYWNlaG9sZGVyPSIxMDAwMCIgbWluPSIxMCIgc3RlcD0iMSIvPlxuICA8L21hdC1mb3JtLWZpZWxkPlxuICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnZhbHVlRXhwcmVzc2lvblwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIlxuICAgICAgICAgICBwbGFjZWhvbGRlcj0iJHtwYXJhbXN9Ii8+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG48L25nLWNvbnRhaW5lcj5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xlLm1hcmdpbnttYXJnaW4tYm90dG9tOjEwcHg7bWFyZ2luLWxlZnQ6MTBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBxYXtjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNFZGl0YWJsZURhdGFUeXBlcz10YSx0aGlzLk1vZGJ1c0Z1bmN0aW9uQ29kZVRyYW5zbGF0aW9uc01hcD16dCx0aGlzLm1vZGJ1c0RhdGFUeXBlcz1PYmplY3QudmFsdWVzKGVhKSx0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcz1bNSw2LDE1LDE2XSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVszLDQsNiwxNl0sdGhpcy5yZWFkRnVuY3Rpb25Db2Rlcz1bMSwyLDMsNF0sdGhpcy5iaXRzRnVuY3Rpb25Db2Rlcz1bLi4udGhpcy5yZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLndyaXRlRnVuY3Rpb25Db2Rlc10sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W2VhLkJZVEVTLFt1ZS5yZXF1aXJlZF1dLGZ1bmN0aW9uQ29kZTpbdGhpcy5kZWZhdWx0RnVuY3Rpb25Db2Rlc1swXSxbdWUucmVxdWlyZWRdXSx2YWx1ZTpbe3ZhbHVlOiIiLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxhZGRyZXNzOltudWxsLFt1ZS5yZXF1aXJlZF1dLG9iamVjdHNDb3VudDpbMSxbdWUucmVxdWlyZWRdXX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2Rlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWUpLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpLHRoaXMub2JzZXJ2ZUtleURhdGFUeXBlKCksdGhpcy5vYnNlcnZlRnVuY3Rpb25Db2RlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsaWQ/bnVsbDp7cnBjUGFyYW1ldGVyc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlS2V5RGF0YVR5cGUoKXt0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoIm9iamVjdHNDb3VudCIpLnBhdGNoVmFsdWUobmFbZV0se2VtaXRFdmVudDohMX0pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlKX0pKX1vYnNlcnZlRnVuY3Rpb25Db2RlKCl7dGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgiZnVuY3Rpb25Db2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWx1ZUVuYWJsaW5nKGUpKSl9dXBkYXRlVmFsdWVFbmFibGluZyhlKXt0aGlzLndyaXRlRnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyhlKT90aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJ2YWx1ZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6KHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoInZhbHVlIikuc2V0VmFsdWUobnVsbCksdGhpcy5ycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldCgidmFsdWUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSl9dXBkYXRlRnVuY3Rpb25Db2RlcyhlKXt0aGlzLmZ1bmN0aW9uQ29kZXM9ZT09PWVhLkJJVFM/dGhpcy5iaXRzRnVuY3Rpb25Db2Rlczp0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzLHRoaXMuZnVuY3Rpb25Db2Rlcy5pbmNsdWRlcyh0aGlzLnJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KCJmdW5jdGlvbkNvZGUiKS52YWx1ZSl8fHRoaXMucnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUodGhpcy5mdW5jdGlvbkNvZGVzWzBdLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnFhLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6cWEsaXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnFhKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBuby1wYWRkaW5nLXRvcCBoaW50LWNvbnRhaW5lciI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy1yZXNwb25zZS1yZWFkaW5nXCcgfCB0cmFuc2xhdGUgfX08YnI+XG4gICAge3sgXCdnYXRld2F5LnJwYy5oaW50Lm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9uc1wnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNEYXRhVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IHR5cGUgfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuZnVuY3Rpb25Db2RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29kZSBvZiBmdW5jdGlvbkNvZGVzIiBbdmFsdWVdPSJjb2RlIj57eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PSI1MCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG1heD0iNTAwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImFkZHJlc3MiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYWRkcmVzcy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAqbmdJZj0icnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ2FkZHJlc3NcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLm9iamVjdHNDb3VudFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICBtaW49IjEiXG4gICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAvPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJ3cml0ZUZ1bmN0aW9uQ29kZXMuaW5jbHVkZXMocnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdmdW5jdGlvbkNvZGVcJykudmFsdWUpIiBmeEZsZXggZnhMYXlvdXQ9InJvdyI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iMTAwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy52YWx1ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwndmFsdWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJiBycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIlxuICAgICAgPlxuICAgICAgICB3YXJuaW5nXG4gICAgICA8L21hdC1pY29uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuaGludC1jb250YWluZXJ7bWFyZ2luLWJvdHRvbToxMnB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxYSxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5xYSkpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cWEpKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggbm8tcGFkZGluZy10b3AgaGludC1jb250YWluZXIiPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtcmVzcG9uc2UtcmVhZGluZ1wnIHwgdHJhbnNsYXRlIH19PGJyPlxuICAgIHt7IFwnZ2F0ZXdheS5ycGMuaGludC5tb2RidXMtd3JpdGluZy1mdW5jdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICA8L2Rpdj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRHYXA9IjEwcHgiPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy50eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzRGF0YVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyB0eXBlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmZ1bmN0aW9uQ29kZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImZ1bmN0aW9uQ29kZSI+XG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvZGUgb2YgZnVuY3Rpb25Db2RlcyIgW3ZhbHVlXT0iY29kZSI+e3sgTW9kYnVzRnVuY3Rpb25Db2RlVHJhbnNsYXRpb25zTWFwLmdldChjb2RlKSB8IHRyYW5zbGF0ZX19PC9tYXQtb3B0aW9uPlxuICAgICAgPC9tYXQtc2VsZWN0PlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD0iNTAiPlxuICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkucnBjLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjUwMDAwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJhZGRyZXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmFkZHJlc3MtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgKm5nSWY9InJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnYWRkcmVzc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCdhZGRyZXNzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjUwIj5cbiAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnJwYy5vYmplY3RzQ291bnRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIG1hdElucHV0XG4gICAgICAgIHR5cGU9Im51bWJlciJcbiAgICAgICAgbWluPSIxIlxuICAgICAgICBtYXg9IjUwMDAwIlxuICAgICAgICBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJvYmplY3RzQ291bnQiXG4gICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgIFtyZWFkb25seV09IiFNb2RidXNFZGl0YWJsZURhdGFUeXBlcy5pbmNsdWRlcyhycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUpIlxuICAgICAgLz5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0id3JpdGVGdW5jdGlvbkNvZGVzLmluY2x1ZGVzKHJwY1BhcmFtZXRlcnNGb3JtR3JvdXAuZ2V0KFwnZnVuY3Rpb25Db2RlXCcpLnZhbHVlKSIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciPlxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9IjEwMCI+XG4gICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5ycGMudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJycGNQYXJhbWV0ZXJzRm9ybUdyb3VwLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgcnBjUGFyYW1ldGVyc0Zvcm1Hcm91cC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciJcbiAgICAgID5cbiAgICAgICAgd2FybmluZ1xuICAgICAgPC9tYXQtaWNvbj5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmhpbnQtY29udGFpbmVye21hcmdpbi1ib3R0b206MTJweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfV19KTtjbGFzcyBEYXtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3RoaXMuZmI9ZSx0aGlzLmRpYWxvZz10LHRoaXMudXRpbHM9bix0aGlzLmNkPWEsdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPW8sdGhpcy5jb250ZW50VHlwZXM9Ryx0aGlzLlJQQ0NvbW1hbmRzPVsiUGluZyIsIlN0YXRzIiwiRGV2aWNlcyIsIlVwZGF0ZSIsIlZlcnNpb24iLCJSZXN0YXJ0IiwiUmVib290Il0sdGhpcy50ZW1wbGF0ZXM9W10sdGhpcy5Db25uZWN0b3JUeXBlPV90LHRoaXMuZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXM9SHQsdGhpcy50eXBlc1dpdGhVcGRhdGVkUGFyYW1zPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVUZW1wbGF0ZXMoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpLGRhdGFMb2FkaW5nOigpPT57fX19LHRoaXMuY29tbWFuZEZvcm09dGhpcy5mYi5ncm91cCh7Y29tbWFuZDpbbnVsbCxbdWUucmVxdWlyZWRdXSx0aW1lOls2MCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV0scGFyYW1zOlsie30iLFtJdF1dLHJlc3VsdDpbbnVsbF19KX1uZ09uSW5pdCgpe2lmKHRoaXMuaXNDb25uZWN0b3I9dGhpcy5jdHguc2V0dGluZ3MuaXNDb25uZWN0b3IsdGhpcy5pc0Nvbm5lY3Rvcil7dGhpcy5jb25uZWN0b3JUeXBlPXRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpLmNvbm5lY3Rvcl9ycGMudmFsdWUudHlwZTtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuY3R4LmRlZmF1bHRTdWJzY3JpcHRpb24udGFyZ2V0RGV2aWNlSWQsZW50aXR5TmFtZToiQ29ubmVjdG9yIixhdHRyaWJ1dGVzOlt7bmFtZTpgJHt0aGlzLmNvbm5lY3RvclR5cGV9X3RlbXBsYXRlYH1dfV07dGhpcy5jdHguc3Vic2NyaXB0aW9uQXBpLmNyZWF0ZVN1YnNjcmlwdGlvbkZyb21JbmZvKEEubGF0ZXN0LGUsdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zLCExLCEwKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnN1YnNjcmlwdGlvbj1lfSkpfWVsc2UgdGhpcy5jb21tYW5kRm9ybS5nZXQoImNvbW1hbmQiKS5zZXRWYWx1ZSh0aGlzLlJQQ0NvbW1hbmRzWzBdKX1zZW5kQ29tbWFuZChlKXt0aGlzLnJlc3VsdFRpbWU9bnVsbDtjb25zdCB0PWV8fHRoaXMuY29tbWFuZEZvcm0udmFsdWUsbj10aGlzLmlzQ29ubmVjdG9yP2Ake3RoaXMuY29ubmVjdG9yVHlwZX1fYDoiZ2F0ZXdheV8iLGE9dGhpcy5pc0Nvbm5lY3Rvcj90aGlzLmdldENvbW1hbmRGcm9tUGFyYW1zQnlUeXBlKHQucGFyYW1zKTp0LmNvbW1hbmQudG9Mb3dlckNhc2UoKSxvPXQucGFyYW1zO3RoaXMuY3R4LmNvbnRyb2xBcGkuc2VuZFR3b1dheUNvbW1hbmQobithLG8sdC50aW1lKS5zdWJzY3JpYmUoe25leHQ6ZT0+e3RoaXMucmVzdWx0VGltZT0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLmNvbW1hbmRGb3JtLmdldCgicmVzdWx0Iikuc2V0VmFsdWUoSlNPTi5zdHJpbmdpZnkoZSkpfSxlcnJvcjplPT57dGhpcy5yZXN1bHRUaW1lPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGNvbnNvbGUuZXJyb3IoZSksdGhpcy5jb21tYW5kRm9ybS5nZXQoInJlc3VsdCIpLnNldFZhbHVlKEpTT04uc3RyaW5naWZ5KGUuZXJyb3IpKX19KX1nZXRDb21tYW5kRnJvbVBhcmFtc0J5VHlwZShlKXtzd2l0Y2godGhpcy5jb25uZWN0b3JUeXBlKXtjYXNlIF90Lk1RVFQ6Y2FzZSBfdC5GVFA6Y2FzZSBfdC5TTk1QOmNhc2UgX3QuUkVTVDpjYXNlIF90LlJFUVVFU1Q6cmV0dXJuIGUubWV0aG9kRmlsdGVyO2Nhc2UgX3QuTU9EQlVTOnJldHVybiBlLnRhZztjYXNlIF90LkJBQ05FVDpjYXNlIF90LkNBTjpjYXNlIF90Lk9QQ1VBOnJldHVybiBlLm1ldGhvZDtjYXNlIF90LkJMRTpjYXNlIF90Lk9DUFA6Y2FzZSBfdC5TT0NLRVQ6Y2FzZSBfdC5YTVBQOnJldHVybiBlLm1ldGhvZFJQQztkZWZhdWx0OnJldHVybiBlLmNvbW1hbmR9fXNhdmVUZW1wbGF0ZSgpe3RoaXMuZGlhbG9nLm9wZW4oTmEse2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOntjb25maWc6dGhpcy5jb21tYW5kRm9ybS52YWx1ZS5wYXJhbXMsdGVtcGxhdGVzOnRoaXMudGVtcGxhdGVzfX0pLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChlPT57aWYoZSl7Y29uc3QgdD17bmFtZTplLGNvbmZpZzp0aGlzLmNvbW1hbmRGb3JtLnZhbHVlLnBhcmFtc30sbj10aGlzLnRlbXBsYXRlcyxhPW4uZmluZEluZGV4KChlPT5lLm5hbWU9PXQubmFtZSkpO2E+LTEmJm4uc3BsaWNlKGEsMSksbi5wdXNoKHQpO2NvbnN0IG89YCR7dGhpcy5jb25uZWN0b3JUeXBlfV90ZW1wbGF0ZWA7dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHtpZDp0aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLnRhcmdldERldmljZUlkLGVudGl0eVR5cGU6SS5ERVZJQ0V9LEwuU0VSVkVSX1NDT1BFLFt7a2V5Om8sdmFsdWU6bn1dKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9fSkpfXVzZVRlbXBsYXRlKGUpe3RoaXMuY29tbWFuZEZvcm0uZ2V0KCJwYXJhbXMiKS5wYXRjaFZhbHVlKGUuY29uZmlnKX11cGRhdGVUZW1wbGF0ZXMoKXt0aGlzLnRlbXBsYXRlcz10aGlzLnN1YnNjcmlwdGlvbi5kYXRhWzBdLmRhdGFbMF1bMV0ubGVuZ3RoP0pTT04ucGFyc2UodGhpcy5zdWJzY3JpcHRpb24uZGF0YVswXS5kYXRhWzBdWzFdKTpbXSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVFcnJvcihlKXtjb25zdCB0PXRoaXMudXRpbHMucGFyc2VFeGNlcHRpb24oZSk7bGV0IG49dC5uYW1lO3QubWVzc2FnZSYmKG4rPSI6ICIrdC5tZXNzYWdlKSxjb25zb2xlLmVycm9yKG4pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RGEsZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpEYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYyIsaW5wdXRzOntjdHg6ImN0eCIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBmeExheW91dD0iY29sdW1uIiBmeEZsZXggW25nQ2xhc3NdPSJ7XCdib3JkZXJcJzogaXNDb25uZWN0b3J9Ij5cbiAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dC5sdC1zbT0iY29sdW1uIiBjbGFzcz0iY29tbWFuZC1mb3JtIiBmeExheW91dEdhcD0iMTBweCIgW2Zvcm1Hcm91cF09ImNvbW1hbmRGb3JtIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPSIhaXNDb25uZWN0b3I7IGVsc2UgY29ubmVjdG9yRm9ybSI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29tbWFuZCI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgY29tbWFuZCBvZiBSUENDb21tYW5kcyIgW3ZhbHVlXT0iY29tbWFuZCI+XG4gICAgICAgICAgICB7eyBjb21tYW5kIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LW1zXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiLz5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZEZvcm0uZ2V0KFwndGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5pbnZhbGlkIj5cbiAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNlbmRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNjb25uZWN0b3JGb3JtPlxuICAgICAgPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yXG4gICAgICAgICpuZ0lmPSIhdHlwZXNXaXRoVXBkYXRlZFBhcmFtcy5oYXMoY29ubmVjdG9yVHlwZSkgZWxzZSB1cGRhdGVkUGFyYW1ldGVycyJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiXG4gICAgICAgIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSJcbiAgICAgICAgKHNlbmRDb21tYW5kKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgKHNhdmVUZW1wbGF0ZSk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgLz5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjdXBkYXRlZFBhcmFtZXRlcnM+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InJwYy1wYXJhbWV0ZXJzIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXQtc3VidGl0bGUtMSB0Yi1mb3JtLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkucnBjLnRpdGxlXCcgfCB0cmFuc2xhdGU6IHt0eXBlOiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlcy5nZXQoY29ubmVjdG9yVHlwZSl9IH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1vZGJ1cy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW1xdHQtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NUVRUIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgICAgPHRiLWdhdGV3YXktb3BjLXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuT1BDVUEiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGVtcGxhdGUtYWN0aW9ucyIgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiIGZ4TGF5b3V0R2FwPSIxMHB4Ij5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2F2ZVRlbXBsYXRlKCkiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbW1hbmRGb3JtLmdldChcJ3BhcmFtc1wnKS5pbnZhbGlkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJzZW5kQ29tbWFuZCgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxzZWN0aW9uIGNsYXNzPSJyZXN1bHQtYmxvY2siIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPHNwYW4+e3sgXCdnYXRld2F5LnJwYy1jb21tYW5kLXJlc3VsdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8ZGl2ICpuZ0lmPSJyZXN1bHRUaW1lIiBjbGFzcz0icmVzdWx0LXRpbWUiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+c2NoZWR1bGU8L21hdC1pY29uPlxuICAgICAgICA8c3Bhbj57eyByZXN1bHRUaW1lIHwgZGF0ZTogXCd5eXl5L01NL2RkIEhIOm1tOnNzXCcgfX08L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NwYW4+XG4gICAgPHRiLWpzb24tY29udGVudCBbY29udGVudFR5cGVdPSJjb250ZW50VHlwZXMuSlNPTiIgcmVhZG9ubHk9InRydWUiIGZvcm1Db250cm9sTmFtZT0icmVzdWx0Ij48L3RiLWpzb24tY29udGVudD5cbiAgPC9zZWN0aW9uPlxuPC9kaXY+XG48dGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIGZ4RmxleD0iMzAiICpuZ0lmPSJpc0Nvbm5lY3RvciIgY2xhc3M9ImJvcmRlciIgW3JwY1RlbXBsYXRlc109InRlbXBsYXRlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N0eF09ImN0eCIgW2Nvbm5lY3RvclR5cGVdPSJjb25uZWN0b3JUeXBlIiAodXNlVGVtcGxhdGUpPSJ1c2VUZW1wbGF0ZSgkZXZlbnQpIj5cbjwvdGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0bztkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O3BhZGRpbmc6MCA1cHh9Omhvc3Q+KntoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfTpob3N0PnRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlczpsYXN0LWNoaWxke21hcmdpbi1sZWZ0OjEwcHh9Omhvc3QgLmNvbW1hbmQtZm9ybXtmbGV4LXdyYXA6bm93cmFwO3BhZGRpbmc6MCA1cHggNXB4fTpob3N0IC5jb21tYW5kLWZvcm0+YnV0dG9ue21hcmdpbi10b3A6MTBweH06aG9zdCAucnBjLXBhcmFtZXRlcnN7d2lkdGg6MTAwJX06aG9zdCAucmVzdWx0LWJsb2Nre3BhZGRpbmc6MCA1cHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtmbGV4OjF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFue2ZvbnQtd2VpZ2h0OjYwMDtwb3NpdGlvbjpyZWxhdGl2ZTtmb250LXNpemU6MTRweDttYXJnaW4tYm90dG9tOjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZXtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjE0cHg7bGluZS1oZWlnaHQ6MzJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7dG9wOjI1cHg7ei1pbmRleDo1O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAucmVzdWx0LWJsb2NrPnNwYW4gLnJlc3VsdC10aW1lIHNwYW57cGFkZGluZy1sZWZ0OjEwcHh9Omhvc3QgLnJlc3VsdC1ibG9jayB0Yi1qc29uLWNvbnRlbnR7ZmxleDoxfTpob3N0IC5ib3JkZXJ7cGFkZGluZzoxNnB4O2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0NsYXNzLHNlbGVjdG9yOiJbbmdDbGFzc10iLGlucHV0czpbImNsYXNzIiwibmdDbGFzcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6c3QuSnNvbkNvbnRlbnRDb21wb25lbnQsc2VsZWN0b3I6InRiLWpzb24tY29udGVudCIsaW5wdXRzOlsibGFiZWwiLCJjb250ZW50VHlwZSIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwidGJQbGFjZWhvbGRlciIsImhpZGVUb29sYmFyIiwicmVhZG9ubHkiLCJ2YWxpZGF0ZUNvbnRlbnQiLCJ2YWxpZGF0ZU9uQ2hhbmdlIiwicmVxdWlyZWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOk1hLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbXF0dC1ycGMtcGFyYW1ldGVycyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cWEsc2VsZWN0b3I6InRiLWdhdGV3YXktbW9kYnVzLXJwYy1wYXJhbWV0ZXJzIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGYSxzZWxlY3RvcjoidGItZ2F0ZXdheS1zZXJ2aWNlLXJwYy1jb25uZWN0b3ItdGVtcGxhdGVzIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIiwiY3R4IiwicnBjVGVtcGxhdGVzIl0sb3V0cHV0czpbInNhdmVUZW1wbGF0ZSIsInVzZVRlbXBsYXRlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6QWEsc2VsZWN0b3I6InRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yIixpbnB1dHM6WyJjb25uZWN0b3JUeXBlIl0sb3V0cHV0czpbInNlbmRDb21tYW5kIiwic2F2ZVRlbXBsYXRlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uRGF0ZVBpcGUsbmFtZToiZGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheVNlcnZpY2VSUENDb21wb25lbnQiLERhKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkRhLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LXNlcnZpY2UtcnBjIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgZnhMYXlvdXQ9ImNvbHVtbiIgZnhGbGV4IFtuZ0NsYXNzXT0ie1wnYm9yZGVyXCc6IGlzQ29ubmVjdG9yfSI+XG4gIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXQubHQtc209ImNvbHVtbiIgY2xhc3M9ImNvbW1hbmQtZm9ybSIgZnhMYXlvdXRHYXA9IjEwcHgiIFtmb3JtR3JvdXBdPSJjb21tYW5kRm9ybSI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIWlzQ29ubmVjdG9yOyBlbHNlIGNvbm5lY3RvckZvcm0iPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbW1hbmQgb2YgUlBDQ29tbWFuZHMiIFt2YWx1ZV09ImNvbW1hbmQiPlxuICAgICAgICAgICAge3sgY29tbWFuZCB9fVxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1tc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InRpbWUiIHR5cGU9Im51bWJlciIgbWluPSIxIi8+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRGb3JtLmdldChcJ3RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uaW52YWxpZCI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zZW5kXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjY29ubmVjdG9yRm9ybT5cbiAgICAgIDx0Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3RvclxuICAgICAgICAqbmdJZj0iIXR5cGVzV2l0aFVwZGF0ZWRQYXJhbXMuaGFzKGNvbm5lY3RvclR5cGUpIGVsc2UgdXBkYXRlZFBhcmFtZXRlcnMiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIlxuICAgICAgICBbY29ubmVjdG9yVHlwZV09ImNvbm5lY3RvclR5cGUiXG4gICAgICAgIChzZW5kQ29tbWFuZCk9InNlbmRDb21tYW5kKCkiXG4gICAgICAgIChzYXZlVGVtcGxhdGUpPSJzYXZlVGVtcGxhdGUoKSJcbiAgICAgIC8+XG4gICAgICA8bmctdGVtcGxhdGUgI3VwZGF0ZWRQYXJhbWV0ZXJzPlxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJycGMtcGFyYW1ldGVycyI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0ibWF0LXN1YnRpdGxlLTEgdGItZm9ybS1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnJwYy50aXRsZVwnIHwgdHJhbnNsYXRlOiB7dHlwZTogZ2F0ZXdheUNvbm5lY3RvckRlZmF1bHRUeXBlc1RyYW5zbGF0ZXMuZ2V0KGNvbm5lY3RvclR5cGUpfSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iY29ubmVjdG9yVHlwZSI+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tb2RidXMtcnBjLXBhcmFtZXRlcnMgKm5nU3dpdGNoQ2FzZT0iQ29ubmVjdG9yVHlwZS5NT0RCVVMiIGZvcm1Db250cm9sTmFtZT0icGFyYW1zIi8+XG4gICAgICAgICAgICA8dGItZ2F0ZXdheS1tcXR0LXJwYy1wYXJhbWV0ZXJzICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCIgZm9ybUNvbnRyb2xOYW1lPSJwYXJhbXMiLz5cbiAgICAgICAgICAgIDx0Yi1nYXRld2F5LW9wYy1ycGMtcGFyYW1ldGVycyAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIiBmb3JtQ29udHJvbE5hbWU9InBhcmFtcyIvPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRlbXBsYXRlLWFjdGlvbnMiIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBmeExheW91dEdhcD0iMTBweCI+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9InNhdmVUZW1wbGF0ZSgpIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJjb21tYW5kRm9ybS5nZXQoXCdwYXJhbXNcJykuaW52YWxpZCI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1zYXZlLXRlbXBsYXRlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ic2VuZENvbW1hbmQoKSJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29tbWFuZEZvcm0uZ2V0KFwncGFyYW1zXCcpLmludmFsaWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucnBjLWNvbW1hbmQtc2VuZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8c2VjdGlvbiBjbGFzcz0icmVzdWx0LWJsb2NrIiBbZm9ybUdyb3VwXT0iY29tbWFuZEZvcm0iPlxuICAgIDxzcGFuPnt7IFwnZ2F0ZXdheS5ycGMtY29tbWFuZC1yZXN1bHRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPGRpdiAqbmdJZj0icmVzdWx0VGltZSIgY2xhc3M9InJlc3VsdC10aW1lIiBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciI+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPnNjaGVkdWxlPC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4+e3sgcmVzdWx0VGltZSB8IGRhdGU6IFwneXl5eS9NTS9kZCBISDptbTpzc1wnIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9zcGFuPlxuICAgIDx0Yi1qc29uLWNvbnRlbnQgW2NvbnRlbnRUeXBlXT0iY29udGVudFR5cGVzLkpTT04iIHJlYWRvbmx5PSJ0cnVlIiBmb3JtQ29udHJvbE5hbWU9InJlc3VsdCI+PC90Yi1qc29uLWNvbnRlbnQ+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPHRiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcyBmeEZsZXg9IjMwIiAqbmdJZj0iaXNDb25uZWN0b3IiIGNsYXNzPSJib3JkZXIiIFtycGNUZW1wbGF0ZXNdPSJ0ZW1wbGF0ZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdHhdPSJjdHgiIFtjb25uZWN0b3JUeXBlXT0iY29ubmVjdG9yVHlwZSIgKHVzZVRlbXBsYXRlKT0idXNlVGVtcGxhdGUoJGV2ZW50KSI+XG48L3RiLWdhdGV3YXktc2VydmljZS1ycGMtY29ubmVjdG9yLXRlbXBsYXRlcz5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztwYWRkaW5nOjAgNXB4fTpob3N0Pip7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6YXV0b306aG9zdD50Yi1nYXRld2F5LXNlcnZpY2UtcnBjLWNvbm5lY3Rvci10ZW1wbGF0ZXM6bGFzdC1jaGlsZHttYXJnaW4tbGVmdDoxMHB4fTpob3N0IC5jb21tYW5kLWZvcm17ZmxleC13cmFwOm5vd3JhcDtwYWRkaW5nOjAgNXB4IDVweH06aG9zdCAuY29tbWFuZC1mb3JtPmJ1dHRvbnttYXJnaW4tdG9wOjEwcHh9Omhvc3QgLnJwYy1wYXJhbWV0ZXJze3dpZHRoOjEwMCV9Omhvc3QgLnJlc3VsdC1ibG9ja3twYWRkaW5nOjAgNXB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxfTpob3N0IC5yZXN1bHQtYmxvY2s+c3Bhbntmb250LXdlaWdodDo2MDA7cG9zaXRpb246cmVsYXRpdmU7Zm9udC1zaXplOjE0cHg7bWFyZ2luLWJvdHRvbToxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2s+c3BhbiAucmVzdWx0LXRpbWV7Zm9udC13ZWlnaHQ6NDAwO2ZvbnQtc2l6ZToxNHB4O2xpbmUtaGVpZ2h0OjMycHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDoyNXB4O3otaW5kZXg6NTtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnJlc3VsdC1ibG9jaz5zcGFuIC5yZXN1bHQtdGltZSBzcGFue3BhZGRpbmctbGVmdDoxMHB4fTpob3N0IC5yZXN1bHQtYmxvY2sgdGItanNvbi1jb250ZW50e2ZsZXg6MX06aG9zdCAuYm9yZGVye3BhZGRpbmc6MTZweDtib3gtc2hhZG93OjAgMCAjMDAwMywwIDAgIzAwMDAwMDI0LDAgMCAjMDAwMDAwMWY7Ym9yZGVyOnNvbGlkIDFweCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6NHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5VdGlsc1NlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTtjbGFzcyBQYSBleHRlbmRzIFB7Y29uc3RydWN0b3IoZSx0LG4sYSxvKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5nYXRld2F5TmFtZT10aGlzLmRhdGEuZ2F0ZXdheU5hbWUsdGhpcy5nYXRld2F5Q29udHJvbD10aGlzLmZiLmNvbnRyb2woIiIpfWNsb3NlKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoKX10dXJuT2ZmKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UoITApfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6UGEsc2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbicsZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0RXJyb3Isc2VsZWN0b3I6Im1hdC1lcnJvciwgW21hdEVycm9yXSIsaW5wdXRzOlsiaWQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fXZhciBHYTtlKCJHYXRld2F5UmVtb3RlQ29uZmlndXJhdGlvbkRpYWxvZ0NvbXBvbmVudCIsUGEpLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UGEsZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktcmVtb3RlLWNvbmZpZ3VyYXRpb24tZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdG9vbGJhciBjb2xvcj0id2FybiI+XG4gIDxtYXQtaWNvbj53YXJuaW5nPC9tYXQtaWNvbj5cbiAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXI8L2gyPlxuICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgIChjbGljayk9ImNsb3NlKCkiXG4gICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IHN0eWxlPSJtYXgtd2lkdGg6IDYwMHB4IiBjbGFzcz0ibWF0LWNvbnRlbnQiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICA8c3BhbiBpbm5lckhUTUw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keVwnIHwgdHJhbnNsYXRlIH19IDxiPnt7IGdhdGV3YXlOYW1lIH19PC9iPiIgPjwvc3Bhbj5cbiAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJtYXQtYmxvY2sgdGItdmFsdWUtdHlwZSIgc3R5bGU9ImZsZXgtZ3JvdzogMCI+XG4gICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5jb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQ8L21hdC1sYWJlbD5cbiAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT0iZ2F0ZXdheUNvbnRyb2wiIHJlcXVpcmVkLz5cbiAgICA8bWF0LWVycm9yXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbnRyb2wuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L21hdC1lcnJvcj5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvZGl2PlxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgKGNsaWNrKT0iY2xvc2UoKSI+XG4gICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0id2FybiJcbiAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbnRyb2wudmFsdWUgIT09IGdhdGV3YXlOYW1lIlxuICAgICAgICAgIChjbGljayk9InR1cm5PZmYoKSI+XG4gICAge3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtXCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pLGZ1bmN0aW9uKGUpe2UudGxzPSJ0bHMiLGUuYWNjZXNzVG9rZW49ImFjY2Vzc1Rva2VuIn0oR2F8fChHYT17fSkpO2NvbnN0IE9hPSJjb25maWd1cmF0aW9uX2RyYWZ0cyIsUmE9IlJlbW90ZUxvZ2dpbmdMZXZlbCIsVmE9bmV3IE1hcChbW0dhLnRscywiZ2F0ZXdheS5zZWN1cml0eS10eXBlcy50bHMiXSxbR2EuYWNjZXNzVG9rZW4sImdhdGV3YXkuc2VjdXJpdHktdHlwZXMuYWNjZXNzLXRva2VuIl1dKTt2YXIgQmEsVWE7IWZ1bmN0aW9uKGUpe2Uubm9uZT0iTk9ORSIsZS5jcml0aWNhbD0iQ1JJVElDQUwiLGUuZXJyb3I9IkVSUk9SIixlLndhcm5pbmc9IldBUk5JTkciLGUuaW5mbz0iSU5GTyIsZS5kZWJ1Zz0iREVCVUcifShCYXx8KEJhPXt9KSksZnVuY3Rpb24oZSl7ZS5tZW1vcnk9Im1lbW9yeSIsZS5maWxlPSJmaWxlIn0oVWF8fChVYT17fSkpO2NvbnN0IF9hPW5ldyBNYXAoW1tVYS5tZW1vcnksImdhdGV3YXkuc3RvcmFnZS10eXBlcy5tZW1vcnktc3RvcmFnZSJdLFtVYS5maWxlLCJnYXRld2F5LnN0b3JhZ2UtdHlwZXMuZmlsZS1zdG9yYWdlIl1dKTt2YXIgSGE7IWZ1bmN0aW9uKGUpe2UubXF0dD0iTVFUVCIsZS5tb2RidXM9Ik1vZGJ1cyIsZS5vcGN1YT0iT1BDLVVBIixlLmJsZT0iQkxFIixlLnJlcXVlc3Q9IlJlcXVlc3QiLGUuY2FuPSJDQU4iLGUuYmFjbmV0PSJCQUNuZXQiLGUuY3VzdG9tPSJDdXN0b20ifShIYXx8KEhhPXt9KSk7Y29uc3QgemE9e2NvbmZpZzp7fSxuYW1lOiIiLGNvbmZpZ1R5cGU6bnVsbCxlbmFibGVkOiExfTtmdW5jdGlvbiBXYShlKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZS52YWx1ZSk9PT1KU09OLnN0cmluZ2lmeSh7fSk/e3ZhbGlkSlNPTjohMH06bnVsbH1jb25zdCBqYT0nW2xvZ2dlcnNdfX1rZXlzPXJvb3QsIHNlcnZpY2UsIGNvbm5lY3RvciwgY29udmVydGVyLCB0Yl9jb25uZWN0aW9uLCBzdG9yYWdlLCBleHRlbnNpb259fVtoYW5kbGVyc119fWtleXM9Y29uc29sZUhhbmRsZXIsIHNlcnZpY2VIYW5kbGVyLCBjb25uZWN0b3JIYW5kbGVyLCBjb252ZXJ0ZXJIYW5kbGVyLCB0Yl9jb25uZWN0aW9uSGFuZGxlciwgc3RvcmFnZUhhbmRsZXIsIGV4dGVuc2lvbkhhbmRsZXJ9fVtmb3JtYXR0ZXJzXX19a2V5cz1Mb2dGb3JtYXR0ZXJ9fVtsb2dnZXJfcm9vdF19fWxldmVsPUVSUk9SfX1oYW5kbGVycz1jb25zb2xlSGFuZGxlcn19W2xvZ2dlcl9jb25uZWN0b3JdfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz1jb25uZWN0b3JIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1jb25uZWN0b3J9fVtsb2dnZXJfc3RvcmFnZV19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPXN0b3JhZ2VIYW5kbGVyfX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1xdWFsbmFtZT1zdG9yYWdlfX1bbG9nZ2VyX3RiX2Nvbm5lY3Rpb25dfX1sZXZlbD17RVJST1J9fX1oYW5kbGVycz10Yl9jb25uZWN0aW9uSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9dGJfY29ubmVjdGlvbn19W2xvZ2dlcl9zZXJ2aWNlXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9c2VydmljZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPXNlcnZpY2V9fVtsb2dnZXJfY29udmVydGVyXX19bGV2ZWw9e0VSUk9SfX19aGFuZGxlcnM9Y29udmVydGVySGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19cXVhbG5hbWU9Y29udmVydGVyfX1bbG9nZ2VyX2V4dGVuc2lvbl19fWxldmVsPXtFUlJPUn19fWhhbmRsZXJzPWNvbm5lY3RvckhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fXF1YWxuYW1lPWV4dGVuc2lvbn19W2hhbmRsZXJfY29uc29sZUhhbmRsZXJdfX1jbGFzcz1TdHJlYW1IYW5kbGVyfX1sZXZlbD17RVJST1J9fX1mb3JtYXR0ZXI9TG9nRm9ybWF0dGVyfX1hcmdzPShzeXMuc3Rkb3V0LCl9fVtoYW5kbGVyX2Nvbm5lY3RvckhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWNvbm5lY3Rvci5sb2ciLCAiZCIsIDEsIDcsKX19W2hhbmRsZXJfc3RvcmFnZUhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXN0b3JhZ2UubG9nIiwgImQiLCAxLCA3LCl9fVtoYW5kbGVyX3NlcnZpY2VIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31zZXJ2aWNlLmxvZyIsICJkIiwgMSwgNywpfX1baGFuZGxlcl9jb252ZXJ0ZXJIYW5kbGVyXX19bGV2ZWw9e0VSUk9SfX19Y2xhc3M9bG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJ9fWZvcm1hdHRlcj1Mb2dGb3JtYXR0ZXJ9fWFyZ3M9KCJ7Li9sb2dzL31jb252ZXJ0ZXIubG9nIiwgImQiLCAxLCAzLCl9fVtoYW5kbGVyX2V4dGVuc2lvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfWV4dGVuc2lvbi5sb2ciLCAiZCIsIDEsIDMsKX19W2hhbmRsZXJfdGJfY29ubmVjdGlvbkhhbmRsZXJdfX1sZXZlbD17RVJST1J9fX1jbGFzcz1sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcn19Zm9ybWF0dGVyPUxvZ0Zvcm1hdHRlcn19YXJncz0oInsuL2xvZ3MvfXRiX2Nvbm5lY3Rpb24ubG9nIiwgImQiLCAxLCAzLCl9fVtmb3JtYXR0ZXJfTG9nRm9ybWF0dGVyXX19Zm9ybWF0PSIlKGFzY3RpbWUpcyAtICUobGV2ZWxuYW1lKXMgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiIH19ZGF0ZWZtdD0iJVktJW0tJWQgJUg6JU06JVMiJztmdW5jdGlvbiBLYShlKXtyZXR1cm4gZS5yZXBsYWNlKCJfIiwiIikucmVwbGFjZSgiLSIsIiIpLnJlcGxhY2UoL15ccyt8XHMrL2csIiIpLnRvTG93ZXJDYXNlKCkrIi5qc29uIn1mdW5jdGlvbiAkYShlLHQpe3JldHVybiBqYS5yZXBsYWNlKC97RVJST1J9L2csZSkucmVwbGFjZSgvey5cL2xvZ3NcL30vZyx0KX1mdW5jdGlvbiBZYShlKXtyZXR1cm57aWQ6ZSxlbnRpdHlUeXBlOkkuREVWSUNFfX1mdW5jdGlvbiBRYShlKXtjb25zdCB0PXt9O3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwidGhpbmdzYm9hcmQiKSYmKHQuaG9zdD1lLnRoaW5nc2JvYXJkLmhvc3QsdC5wb3J0PWUudGhpbmdzYm9hcmQucG9ydCx0LnJlbW90ZUNvbmZpZ3VyYXRpb249ZS50aGluZ3Nib2FyZC5yZW1vdGVDb25maWd1cmF0aW9uLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnRoaW5nc2JvYXJkLnNlY3VyaXR5LEdhLmFjY2Vzc1Rva2VuKT8odC5zZWN1cml0eVR5cGU9R2EuYWNjZXNzVG9rZW4sdC5hY2Nlc3NUb2tlbj1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuKToodC5zZWN1cml0eVR5cGU9R2EudGxzLHQuY2FDZXJ0UGF0aD1lLnRoaW5nc2JvYXJkLnNlY3VyaXR5LmNhQ2VydCx0LnByaXZhdGVLZXlQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkucHJpdmF0ZUtleSx0LmNlcnRQYXRoPWUudGhpbmdzYm9hcmQuc2VjdXJpdHkuY2VydCkpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJzdG9yYWdlIikmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLnN0b3JhZ2UsInR5cGUiKSYmKGUuc3RvcmFnZS50eXBlPT09VWEubWVtb3J5Pyh0LnN0b3JhZ2VUeXBlPVVhLm1lbW9yeSx0LnJlYWRSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudCx0Lm1heFJlY29yZHNDb3VudD1lLnN0b3JhZ2UubWF4X3JlY29yZHNfY291bnQpOmUuc3RvcmFnZS50eXBlPT09VWEuZmlsZSYmKHQuc3RvcmFnZVR5cGU9VWEuZmlsZSx0LmRhdGFGb2xkZXJQYXRoPWUuc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoLHQubWF4RmlsZXNDb3VudD1lLnN0b3JhZ2UubWF4X2ZpbGVfY291bnQsdC5yZWFkUmVjb3Jkc0NvdW50PWUuc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnQsdC5tYXhSZWNvcmRzQ291bnQ9ZS5zdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50KSksdH1mdW5jdGlvbiBKYShlKXtjb25zdCB0PXt9O2Zvcihjb25zdCBuIG9mIGUpbi5lbmFibGVkfHwodFtuLm5hbWVdPXtjb25uZWN0b3I6bi5jb25maWdUeXBlLGNvbmZpZzpuLmNvbmZpZ30pO3JldHVybiB0fWZ1bmN0aW9uIFhhKGUpe2NvbnN0IHQ9e3RoaW5nc2JvYXJkOlphKGUpfTtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KWlmKG4uZW5hYmxlZCl7Y29uc3QgdD1uLmNvbmZpZ1R5cGU7QXJyYXkuaXNBcnJheShlW3RdKXx8KGVbdF09W10pO2NvbnN0IGE9e25hbWU6bi5uYW1lLGNvbmZpZzpuLmNvbmZpZ307ZVt0XS5wdXNoKGEpfX0odCxlLmNvbm5lY3RvcnMpLHR9ZnVuY3Rpb24gWmEoZSl7bGV0IHQ7dD1lLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3thY2Nlc3NUb2tlbjplLmFjY2Vzc1Rva2VufTp7Y2FDZXJ0OmUuY2FDZXJ0UGF0aCxwcml2YXRlS2V5OmUucHJpdmF0ZUtleVBhdGgsY2VydDplLmNlcnRQYXRofTtjb25zdCBuPXtob3N0OmUuaG9zdCxyZW1vdGVDb25maWd1cmF0aW9uOmUucmVtb3RlQ29uZmlndXJhdGlvbixwb3J0OmUucG9ydCxzZWN1cml0eTp0fTtsZXQgYTthPWUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/e3R5cGU6VWEubWVtb3J5LHJlYWRfcmVjb3Jkc19jb3VudDplLnJlYWRSZWNvcmRzQ291bnQsbWF4X3JlY29yZHNfY291bnQ6ZS5tYXhSZWNvcmRzQ291bnR9Ont0eXBlOlVhLmZpbGUsZGF0YV9mb2xkZXJfcGF0aDplLmRhdGFGb2xkZXJQYXRoLG1heF9maWxlX2NvdW50OmUubWF4RmlsZXNDb3VudCxtYXhfcmVhZF9yZWNvcmRzX2NvdW50OmUucmVhZFJlY29yZHNDb3VudCxtYXhfcmVjb3Jkc19wZXJfZmlsZTplLm1heFJlY29yZHNDb3VudH07Y29uc3Qgbz1bXTtmb3IoY29uc3QgdCBvZiBlLmNvbm5lY3RvcnMpaWYodC5lbmFibGVkKXtjb25zdCBlPXtjb25maWd1cmF0aW9uOkthKHQubmFtZSksbmFtZTp0Lm5hbWUsdHlwZTp0LmNvbmZpZ1R5cGV9O28ucHVzaChlKX1yZXR1cm57dGhpbmdzYm9hcmQ6bixjb25uZWN0b3JzOm8sc3RvcmFnZTphLGxvZ3M6d2luZG93LmJ0b2EoJGEoZS5yZW1vdGVMb2dnaW5nTGV2ZWwsZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncykpfX1jbGFzcyBlbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5lbGVtZW50UmVmPXQsdGhpcy51dGlscz1uLHRoaXMubmdab25lPWEsdGhpcy5mYj1vLHRoaXMud2luZG93PWksdGhpcy5kaWFsb2c9cix0aGlzLnRyYW5zbGF0ZT1zLHRoaXMuZGV2aWNlU2VydmljZT1sLHRoaXMuYXR0cmlidXRlU2VydmljZT1jLHRoaXMuaW1wb3J0RXhwb3J0PXAsdGhpcy5hbGlnbm1lbnQ9InJvdyIsdGhpcy5sYXlvdXRHYXA9IjVweCIsdGhpcy5zZWN1cml0eVR5cGVzPVZhLHRoaXMuZ2F0ZXdheUxvZ0xldmVscz1PYmplY3Qua2V5cyhCYSkubWFwKChlPT5CYVtlXSkpLHRoaXMuY29ubmVjdG9yVHlwZXM9T2JqZWN0LmtleXMoSGEpLHRoaXMuc3RvcmFnZVR5cGVzPV9hLHRoaXMudG9hc3RUYXJnZXRJZD0iZ2F0ZXdheS1jb25maWd1cmF0aW9uLXdpZGdldCIrdGhpcy51dGlscy5ndWlkKCksdGhpcy5pc1JlYWRPbmx5Rm9ybT0hMX1nZXQgY29ubmVjdG9ycygpe3JldHVybiB0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KCJjb25uZWN0b3JzIil9bmdPbkluaXQoKXt0aGlzLmluaXRXaWRnZXRTZXR0aW5ncyh0aGlzLmN0eC5zZXR0aW5ncyksdGhpcy5jdHguZGF0YXNvdXJjZXMmJnRoaXMuY3R4LmRhdGFzb3VyY2VzLmxlbmd0aCYmKHRoaXMuZGV2aWNlTmFtZUZvcm09dGhpcy5jdHguZGF0YXNvdXJjZXNbMF0ubmFtZSksdGhpcy5idWlsZEZvcm0oKSx0aGlzLmN0eC51cGRhdGVXaWRnZXRQYXJhbXMoKSx0aGlzLmZvcm1SZXNpemUkPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnJlc2l6ZSgpfSkpLHRoaXMuZm9ybVJlc2l6ZSQub2JzZXJ2ZSh0aGlzLmZvcm1Db250YWluZXJSZWYubmF0aXZlRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1SZXNpemUkJiZ0aGlzLmZvcm1SZXNpemUkLmRpc2Nvbm5lY3QoKSx0aGlzLnN1YnNjcmliZUdhdGV3YXkkLnVuc3Vic2NyaWJlKCksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQudW5zdWJzY3JpYmUoKX1pbml0V2lkZ2V0U2V0dGluZ3MoZSl7bGV0IHQ7dD1lLmdhdGV3YXlUaXRsZSYmZS5nYXRld2F5VGl0bGUubGVuZ3RoP3RoaXMudXRpbHMuY3VzdG9tVHJhbnNsYXRpb24oZS5nYXRld2F5VGl0bGUsZS5nYXRld2F5VGl0bGUpOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuZ2F0ZXdheSIpLHRoaXMuY3R4LndpZGdldFRpdGxlPXQsdGhpcy5pc1JlYWRPbmx5Rm9ybT0hIWUucmVhZE9ubHkmJmUucmVhZE9ubHksdGhpcy5hcmNoaXZlRmlsZU5hbWU9ZS5hcmNoaXZlRmlsZU5hbWU/Lmxlbmd0aD9lLmFyY2hpdmVGaWxlTmFtZToiZ2F0ZXdheUNvbmZpZ3VyYXRpb24iLHRoaXMuZ2F0ZXdheVR5cGU9ZS5nYXRld2F5VHlwZT8ubGVuZ3RoP2UuZ2F0ZXdheVR5cGU6IkdhdGV3YXkiLHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHM9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLmdhdGV3YXlOYW1lRXhpc3RzLGUuZ2F0ZXdheU5hbWVFeGlzdHMpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktZXhpc3RzIiksdGhpcy5zdWNjZXNzZnVsU2F2ZWQ9dGhpcy51dGlscy5jdXN0b21UcmFuc2xhdGlvbihlLnN1Y2Nlc3NmdWxTYXZlLGUuc3VjY2Vzc2Z1bFNhdmUpfHx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmdhdGV3YXktc2F2ZWQiKSx0aGlzLnVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKX1yZXNpemUoKXt0aGlzLm5nWm9uZS5ydW4oKCgpPT57dGhpcy51cGRhdGVXaWRnZXREaXNwbGF5aW5nKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpfXVwZGF0ZVdpZGdldERpc3BsYXlpbmcoKXt0aGlzLmN0eC4kY29udGFpbmVyJiZ0aGlzLmN0eC4kY29udGFpbmVyWzBdLm9mZnNldFdpZHRoPD00MjU/KHRoaXMubGF5b3V0R2FwPSIwIix0aGlzLmFsaWdubWVudD0iY29sdW1uIik6KHRoaXMubGF5b3V0R2FwPSI1cHgiLHRoaXMuYWxpZ25tZW50PSJyb3ciKX1zYXZlQXR0cmlidXRlKGUsdCxuKXtjb25zdCBhPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoImdhdGV3YXkiKS52YWx1ZSxvPXtrZXk6ZSx2YWx1ZTp0fTtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKFlhKGEpLG4sW29dKX1jcmVhdGVDb25uZWN0b3IoZT16YSl7dGhpcy5jb25uZWN0b3JzLnB1c2godGhpcy5mYi5ncm91cCh7ZW5hYmxlZDpbZS5lbmFibGVkXSxjb25maWdUeXBlOltlLmNvbmZpZ1R5cGUsW3VlLnJlcXVpcmVkXV0sbmFtZTpbZS5uYW1lLFt1ZS5yZXF1aXJlZF1dLGNvbmZpZzpbZS5jb25maWcsW3VlLm51bGxWYWxpZGF0b3IsV2FdXX0pKX1nZXRGb3JtRmllbGQoZSl7cmV0dXJuIHRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoZSl9YnVpbGRGb3JtKCl7dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwPXRoaXMuZmIuZ3JvdXAoe2dhdGV3YXk6W251bGwsW11dLGFjY2Vzc1Rva2VuOltudWxsLFt1ZS5yZXF1aXJlZF1dLHNlY3VyaXR5VHlwZTpbR2EuYWNjZXNzVG9rZW5dLGhvc3Q6W3RoaXMud2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFt1ZS5yZXF1aXJlZF1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZUNvbmZpZ3VyYXRpb246WyEwXSxjYUNlcnRQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L2NhLnBlbSJdLHByaXZhdGVLZXlQYXRoOlsiL2V0Yy90aGluZ3Nib2FyZC1nYXRld2F5L3ByaXZhdGVLZXkucGVtIl0sY2VydFBhdGg6WyIvZXRjL3RoaW5nc2JvYXJkLWdhdGV3YXkvY2VydGlmaWNhdGUucGVtIl0scmVtb3RlTG9nZ2luZ0xldmVsOltCYS5kZWJ1Z10scmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3M6WyIuL2xvZ3MvIixbdWUucmVxdWlyZWRdXSxzdG9yYWdlVHlwZTpbVWEubWVtb3J5XSxyZWFkUmVjb3Jkc0NvdW50OlsxMDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhSZWNvcmRzQ291bnQ6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heEZpbGVzQ291bnQ6WzUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhRm9sZGVyUGF0aDpbIi4vZGF0YS8iLFt1ZS5yZXF1aXJlZF1dLGNvbm5lY3RvcnM6dGhpcy5mYi5hcnJheShbXSl9KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zdWJzY3JpYmVTdG9yYWdlVHlwZSQ9dGhpcy5nZXRGb3JtRmllbGQoInN0b3JhZ2VUeXBlIikudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoZT0+e2U9PT1VYS5tZW1vcnk/KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZGlzYWJsZSgpLHRoaXMuZ2V0Rm9ybUZpZWxkKCJkYXRhRm9sZGVyUGF0aCIpLmRpc2FibGUoKSk6KHRoaXMuZ2V0Rm9ybUZpZWxkKCJtYXhGaWxlc0NvdW50IikuZW5hYmxlKCksdGhpcy5nZXRGb3JtRmllbGQoImRhdGFGb2xkZXJQYXRoIikuZW5hYmxlKCkpfSkpLHRoaXMuc3Vic2NyaWJlR2F0ZXdheSQ9dGhpcy5nZXRGb3JtRmllbGQoImdhdGV3YXkiKS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57bnVsbCE9PWU/QWUoW3RoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyhlKS5waXBlKEVlKChlPT57dGhpcy5nZXRGb3JtRmllbGQoImFjY2Vzc1Rva2VuIikucGF0Y2hWYWx1ZShlLmNyZWRlbnRpYWxzSWQpfSkpKSwuLi50aGlzLmdldEF0dHJpYnV0ZXMoZSldKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLm1hcmtBc1ByaXN0aW5lKCksdGhpcy5jdHguZGV0ZWN0Q2hhbmdlcygpfSkpOnRoaXMuZ2V0Rm9ybUZpZWxkKCJhY2Nlc3NUb2tlbiIpLnBhdGNoVmFsdWUoIiIpfSkpfWdhdGV3YXlFeGlzdCgpe3RoaXMuY3R4LnNob3dFcnJvclRvYXN0KHRoaXMuZ2F0ZXdheU5hbWVFeGlzdHMsInRvcCIsImxlZnQiLHRoaXMudG9hc3RUYXJnZXRJZCl9ZXhwb3J0Q29uZmlnKCl7Y29uc3QgZT10aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUsdD17fTt2YXIgbixhLG87dFsidGJfZ2F0ZXdheS55YW1sIl09ZnVuY3Rpb24oZSl7bGV0IHQ7dD0idGhpbmdzYm9hcmQ6XG4iLHQrPSIgIGhvc3Q6ICIrZS5ob3N0KyJcbiIsdCs9IiAgcmVtb3RlQ29uZmlndXJhdGlvbjogIitlLnJlbW90ZUNvbmZpZ3VyYXRpb24rIlxuIix0Kz0iICBwb3J0OiAiK2UucG9ydCsiXG4iLHQrPSIgIHNlY3VyaXR5OlxuIixlLnNlY3VyaXR5VHlwZT09PUdhLmFjY2Vzc1Rva2VuP3QrPSIgICAgYWNjZXNzLXRva2VuOiAiK2UuYWNjZXNzVG9rZW4rIlxuIjoodCs9IiAgICBjYV9jZXJ0OiAiK2UuY2FDZXJ0UGF0aCsiXG4iLHQrPSIgICAgcHJpdmF0ZUtleTogIitlLnByaXZhdGVLZXlQYXRoKyJcbiIsdCs9IiAgICBjZXJ0OiAiK2UuY2VydFBhdGgrIlxuIiksdCs9InN0b3JhZ2U6XG4iLGUuc3RvcmFnZVR5cGU9PT1VYS5tZW1vcnk/KHQrPSIgIHR5cGU6IG1lbW9yeVxuIix0Kz0iICByZWFkX3JlY29yZHNfY291bnQ6ICIrZS5yZWFkUmVjb3Jkc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlY29yZHNfY291bnQ6ICIrZS5tYXhSZWNvcmRzQ291bnQrIlxuIik6KHQrPSIgIHR5cGU6IGZpbGVcbiIsdCs9IiAgZGF0YV9mb2xkZXJfcGF0aDogIitlLmRhdGFGb2xkZXJQYXRoKyJcbiIsdCs9IiAgbWF4X2ZpbGVfY291bnQ6ICIrZS5tYXhGaWxlc0NvdW50KyJcbiIsdCs9IiAgbWF4X3JlYWRfcmVjb3Jkc19jb3VudDogIitlLnJlYWRSZWNvcmRzQ291bnQrIlxuIix0Kz0iICBtYXhfcmVjb3Jkc19wZXJfZmlsZTogIitlLm1heFJlY29yZHNDb3VudCsiXG4iKSx0Kz0iY29ubmVjdG9yczpcbiI7Zm9yKGNvbnN0IG4gb2YgZS5jb25uZWN0b3JzKW4uZW5hYmxlZCYmKHQrPSIgIC1cbiIsdCs9IiAgICBuYW1lOiAiK24ubmFtZSsiXG4iLHQrPSIgICAgdHlwZTogIituLmNvbmZpZ1R5cGUrIlxuIix0Kz0iICAgIGNvbmZpZ3VyYXRpb246ICIrS2Eobi5uYW1lKSsiXG4iKTtyZXR1cm4gdH0oZSksZnVuY3Rpb24oZSx0KXtmb3IoY29uc3QgbiBvZiB0KW4uZW5hYmxlZCYmKGVbS2Eobi5uYW1lKV09SlNPTi5zdHJpbmdpZnkobi5jb25maWcpKX0odCxlLmNvbm5lY3RvcnMpLG49dCxhPWUucmVtb3RlTG9nZ2luZ0xldmVsLG89ZS5yZW1vdGVMb2dnaW5nUGF0aFRvTG9ncyxuWyJsb2dzLmNvbmYiXT0kYShhLG8pLHRoaXMuaW1wb3J0RXhwb3J0LmV4cG9ydEpTWmlwKHQsdGhpcy5hcmNoaXZlRmlsZU5hbWUpLHRoaXMuc2F2ZUF0dHJpYnV0ZShSYSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAudmFsdWUucmVtb3RlTG9nZ2luZ0xldmVsLnRvVXBwZXJDYXNlKCksTC5TSEFSRURfU0NPUEUpfWFkZE5ld0Nvbm5lY3Rvcigpe3RoaXMuY3JlYXRlQ29ubmVjdG9yKCl9cmVtb3ZlQ29ubmVjdG9yKGUpe2U+LTEmJih0aGlzLmNvbm5lY3RvcnMucmVtb3ZlQXQoZSksdGhpcy5jb25uZWN0b3JzLm1hcmtBc0RpcnR5KCkpfW9wZW5Db25maWdEaWFsb2coZSx0LG4sYSl7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uKCksZS5wcmV2ZW50RGVmYXVsdCgpKSx0aGlzLmRpYWxvZy5vcGVuKFFlLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7anNvblZhbHVlOm4scmVxdWlyZWQ6ITAsdGl0bGU6dGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS50aXRsZS1jb25uZWN0b3JzLWpzb24iLHt0eXBlTmFtZTphfSl9fSkuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGU9PntlJiYodGhpcy5jb25uZWN0b3JzLmF0KHQpLmdldCgiY29uZmlnIikucGF0Y2hWYWx1ZShlKSx0aGlzLmN0eC5kZXRlY3RDaGFuZ2VzKCkpfSkpfWNyZWF0ZUNvbm5lY3Rvck5hbWUoZSx0LG49MCl7Y29uc3QgYT1uP3Qrbjp0O3JldHVybi0xPT09ZS5maW5kSW5kZXgoKGU9PmUubmFtZT09PWEpKT9hOnRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShlLHQsKytuKX12YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sYT0wKXtmb3IobGV0IG89MDtvPGUubGVuZ3RoO28rKyl7Y29uc3QgaT0wPT09YT90OnQrYTtvIT09biYmZVtvXS5uYW1lPT09aSYmdGhpcy52YWxpZGF0ZUNvbm5lY3Rvck5hbWUoZSx0LG4sKythKX1yZXR1cm4gMD09PWE/dDp0K2F9Y2hhbmdlQ29ubmVjdG9yVHlwZShlKXtpZighZS5nZXQoIm5hbWUiKS52YWx1ZSl7Y29uc3QgdD1lLmdldCgiY29uZmlnVHlwZSIpLnZhbHVlLG49dGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLmNvbm5lY3RvcnM7ZS5nZXQoIm5hbWUiKS5wYXRjaFZhbHVlKHRoaXMuY3JlYXRlQ29ubmVjdG9yTmFtZShuLEhhW3RdKSl9fWNoYW5nZUNvbm5lY3Rvck5hbWUoZSx0KXtjb25zdCBuPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZS5jb25uZWN0b3JzO2UuZ2V0KCJuYW1lIikucGF0Y2hWYWx1ZSh0aGlzLnZhbGlkYXRlQ29ubmVjdG9yTmFtZShuLGUuZ2V0KCJuYW1lIikudmFsdWUsdCkpfXNhdmUoKXtjb25zdCBlPXRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC52YWx1ZTtBZShbdGhpcy5zYXZlQXR0cmlidXRlKCJjb25maWd1cmF0aW9uIix3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShYYShlKSkpLEwuU0hBUkVEX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoT2Esd2luZG93LmJ0b2EoSlNPTi5zdHJpbmdpZnkoSmEoZS5jb25uZWN0b3JzKSkpLEwuU0VSVkVSX1NDT1BFKSx0aGlzLnNhdmVBdHRyaWJ1dGUoUmEsdGhpcy5nYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLnZhbHVlLnJlbW90ZUxvZ2dpbmdMZXZlbC50b1VwcGVyQ2FzZSgpLEwuU0hBUkVEX1NDT1BFKV0pLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmN0eC5zaG93U3VjY2Vzc1RvYXN0KHRoaXMuc3VjY2Vzc2Z1bFNhdmVkLDJlMywidG9wIiwibGVmdCIsdGhpcy50b2FzdFRhcmdldElkKSx0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAubWFya0FzUHJpc3RpbmUoKX0pKX1nZXRBdHRyaWJ1dGVzKGUpe2NvbnN0IHQ9W107cmV0dXJuIHQucHVzaChBZShbdGhpcy5nZXRBdHRyaWJ1dGUoImN1cnJlbnRfY29uZmlndXJhdGlvbiIsTC5DTElFTlRfU0NPUEUsZSksdGhpcy5nZXRBdHRyaWJ1dGUoT2EsTC5TRVJWRVJfU0NPUEUsZSldKS5waXBlKEVlKCgoW2UsdF0pPT57dGhpcy5zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpLHRoaXMuc2V0Rm9ybUNvbm5lY3RvcnNEcmFmdCh0KSx0aGlzLmlzUmVhZE9ubHlGb3JtJiZ0aGlzLmdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSkpKSx0LnB1c2godGhpcy5nZXRBdHRyaWJ1dGUoUmEsTC5TSEFSRURfU0NPUEUsZSkucGlwZShFZSgoZT0+dGhpcy5wcm9jZXNzTG9nZ2luZ0xldmVsKGUpKSkpKSx0fWdldEF0dHJpYnV0ZShlLHQsbil7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKFlhKG4pLHQsW2VdKX1zZXRGb3JtR2F0ZXdheVNldHRpbmdzKGUpe2lmKHRoaXMuY29ubmVjdG9ycy5jbGVhcigpLGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49dFtlXTtpZigidGhpbmdzYm9hcmQiPT09ZSludWxsIT09biYmT2JqZWN0LmtleXMobikubGVuZ3RoPjAmJnRoaXMuZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5wYXRjaFZhbHVlKFFhKG4pKTtlbHNlIGZvcihjb25zdCB0IG9mIE9iamVjdC5rZXlzKG4pKXtsZXQgYT0iTm8gbmFtZSI7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5bdF0sIm5hbWUiKSYmKGE9blt0XS5uYW1lKTtjb25zdCBvPXtlbmFibGVkOiEwLGNvbmZpZ1R5cGU6ZSxjb25maWc6blt0XS5jb25maWcsbmFtZTphfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihvKX19fX1zZXRGb3JtQ29ubmVjdG9yc0RyYWZ0KGUpe2lmKGUubGVuZ3RoPjApe2NvbnN0IHQ9SlNPTi5wYXJzZSh3aW5kb3cuYXRvYihlWzBdLnZhbHVlKSk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmtleXModCkpe2NvbnN0IG49e2VuYWJsZWQ6ITEsY29uZmlnVHlwZTp0W2VdLmNvbm5lY3Rvcixjb25maWc6dFtlXS5jb25maWcsbmFtZTplfTt0aGlzLmNyZWF0ZUNvbm5lY3RvcihuKX19fXByb2Nlc3NMb2dnaW5nTGV2ZWwoZSl7bGV0IHQ9QmEuZGVidWc7ZS5sZW5ndGg+MCYmQmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSYmKHQ9QmFbZVswXS52YWx1ZS50b0xvd2VyQ2FzZSgpXSksdGhpcy5nZXRGb3JtRmllbGQoInJlbW90ZUxvZ2dpbmdMZXZlbCIpLnBhdGNoVmFsdWUodCl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjp0LkVsZW1lbnRSZWZ9LHt0b2tlbjpYLlV0aWxzU2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dG9rZW46YWV9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpYLkRldmljZVNlcnZpY2V9LHt0b2tlbjpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0b2tlbjpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTplbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIixpbnB1dHM6e2N0eDoiY3R4Iixpc1N0YXRlRm9ybToiaXNTdGF0ZUZvcm0ifSx2aWV3UXVlcmllczpbe3Byb3BlcnR5TmFtZToiZm9ybUNvbnRhaW5lclJlZiIsZmlyc3Q6ITAscHJlZGljYXRlOlsiZm9ybUNvbnRhaW5lciJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH0se3Byb3BlcnR5TmFtZToibXVsdGlwbGVJbnB1dEZvcm0iLGZpcnN0OiEwLHByZWRpY2F0ZTpbImdhdGV3YXlDb25maWd1cmF0aW9uRm9ybSJdLGRlc2NlbmRhbnRzOiEwLHN0YXRpYzohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGZvcm0gI2Zvcm1Db250YWluZXIgY2xhc3M9ImdhdGV3YXktZm9ybSJcbiAgICAgIFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwIlxuICAgICAgdGItdG9hc3QgdG9hc3RUYXJnZXQ9Int7IHRvYXN0VGFyZ2V0SWQgfX0iXG4gICAgICAobmdTdWJtaXQpPSJzYXZlKCkiPlxuICA8bWF0LWFjY29yZGlvbiBtdWx0aT0idHJ1ZSIgY2xhc3M9Im1hdC1ib2R5LTIiPlxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmRcJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDx0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3RcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImdhdGV3YXkiXG4gICAgICAgICAgW2RldmljZU5hbWVdPSJkZXZpY2VOYW1lRm9ybSJcbiAgICAgICAgICBbaXNTdGF0ZUZvcm1dPSJpc1N0YXRlRm9ybSJcbiAgICAgICAgICBbbmV3R2F0ZXdheVR5cGVdPSJnYXRld2F5VHlwZSJcbiAgICAgICAgICAoZ2F0ZXdheU5hbWVFeGlzdCk9ImdhdGV3YXlFeGlzdCgpIlxuICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgID5cbiAgICAgIDwvdGItZW50aXR5LWdhdGV3YXktc2VsZWN0PlxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnNlY3VyaXR5LXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHlUeXBlIiA+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc2VjdXJpdHlUeXBlLnZhbHVlLnRvU3RyaW5nKCkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3RcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblxuICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc2VjdXJpdHlUeXBlXCcpLnZhbHVlID09IFwndGxzXCciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNhLWNlcnRpZmljYXRlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1wcml2YXRlLWtleVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icHJpdmF0ZUtleVBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2VydFBhdGgiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxtYXQtY2hlY2tib3ggZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj57eyBcJ2dhdGV3YXkucmVtb3RlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1jaGVja2JveD5cblxuICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVMb2dnaW5nTGV2ZWwiPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVscyIgW3ZhbHVlXT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICB7eyBsb2dMZXZlbCB9fVxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnBhdGgtbG9nc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3MiPlxuICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlTG9nZ2luZ1BhdGhUb0xvZ3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS5wYXRoLWxvZ3MtcmVxdWlyZWRcbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zdG9yYWdlXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuc3RvcmFnZS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJzdG9yYWdlVHlwZS5rZXkiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0icmVhZFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVhZFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1wYWNrLXNpemUtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsID5cbiAgICAgICAgICAgICAge3sgKGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgIT09IFwnZmlsZVwnID8gXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHNcJyA6IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHNcJykgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heFJlY29yZHNDb3VudCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4UmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnc3RvcmFnZVR5cGVcJykudmFsdWUgPT0gXCdmaWxlXCciPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlc1wnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heEZpbGVzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heEZpbGVzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1wYXRoXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImRhdGFGb2xkZXJQYXRoIj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnZGF0YUZvbGRlclBhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtY29uZmlnXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuXG4gICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJnYXRld2F5LWNvbmZpZyI+XG4gICAgICAgIDxzZWN0aW9uIGZvcm1BcnJheU5hbWU9ImNvbm5lY3RvcnMiICpuZ0Zvcj0ibGV0IGNvbm5lY3RvciBvZiBjb25uZWN0b3JzLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4OyI+XG4gICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09ImkiIGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gc3RyZXRjaCIgZnhMYXlvdXRHYXA9IjhweCI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBzdGFydCI+XG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIiBmeEZsZXg+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5jb25uZWN0b3ItdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJjb25maWdUeXBlIiAoc2VsZWN0aW9uQ2hhbmdlKT0iY2hhbmdlQ29ubmVjdG9yVHlwZShjb25uZWN0b3IpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGNvbm5lY3RvclR5cGUgb2YgY29ubmVjdG9yVHlwZXMiIFt2YWx1ZV09ImNvbm5lY3RvclR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjb25uZWN0b3JUeXBlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCdjb25maWdUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLXR5cGUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LmNvbm5lY3Rvci1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiAoYmx1cik9ImNoYW5nZUNvbm5lY3Rvck5hbWUoY29ubmVjdG9yLCBpKSI+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29ubmVjdG9yLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5jb25uZWN0b3ItbmFtZS1yZXF1aXJlZFxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIlxuICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJ7e2FsaWdubWVudCA9PSBcJ3Jvd1wnID8gXCdlbmQgY2VudGVyXCcgOiBcJ3NwYWNlLWV2ZW5seSBjZW50ZXJcJ319IiBjbGFzcz0iYWN0aW9uLWJ1dHRvbnMiPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0ib3BlbkNvbmZpZ0RpYWxvZygkZXZlbnQsIGksIGNvbm5lY3Rvci5nZXQoXCdjb25maWdcJykudmFsdWUsIGNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLnZhbHVlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkudXBkYXRlLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPSJ7XCdtYXQtd2FyblwnOiBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLmludmFsaWR9Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bW9yZV9ob3JpejwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09ImlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb25uZWN0b3IoaSkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPHNwYW4gW2Z4U2hvd109IiFjb25uZWN0b3JzLmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciIgY2xhc3M9Im5vLWRhdGEtZm91bmQiPnt7XCdnYXRld2F5Lm5vLWNvbm5lY3RvcnNcJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSIgbWF0LXJhaXNlZC1idXR0b24gdHlwZT0iYnV0dG9uIiAoY2xpY2spPSJhZGROZXdDb25uZWN0b3IoKSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5jb25uZWN0b3ItYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXYgPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPC9tYXQtYWNjb3JkaW9uPlxuICA8c2VjdGlvbiBbZnhTaG93XT0iIWlzUmVhZE9ubHlGb3JtIlxuICAgICAgICAgICBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIiBjbGFzcz0iZm9ybS1hY3Rpb24tYnV0dG9ucyI+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iZXhwb3J0Q29uZmlnKCkiXG4gICAgICAgICAgICAqbmdJZj0iIWdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LmRvd25sb2FkLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgdHlwZT0ic3VibWl0IlxuICAgICAgICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwncmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmRpcnR5IHx8IGdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuaW52YWxpZCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7XCdnYXRld2F5LnNhdmUtdGlwXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAge3tcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9zZWN0aW9uPlxuPC9mb3JtPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5nYXRld2F5LWZvcm17aGVpZ2h0OjEwMCU7cGFkZGluZzo1cHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtvdmVyZmxvdy15OmF1dG87b3ZlcmZsb3cteDpoaWRkZW59Omhvc3QgLmdhdGV3YXktZm9ybSAuZm9ybS1hY3Rpb24tYnV0dG9uc3twYWRkaW5nLXRvcDo4cHh9Omhvc3QgLmdhdGV3YXktZm9ybSAuZ2F0ZXdheS1jb25maWcgLm5vLWRhdGEtZm91bmR7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2hlaWdodDo0MHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Y3QuVG9hc3REaXJlY3RpdmUsc2VsZWN0b3I6Ilt0Yi10b2FzdF0iLGlucHV0czpbInRvYXN0VGFyZ2V0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpwdC5NYXRDaGVja2JveCxzZWxlY3RvcjoibWF0LWNoZWNrYm94IixpbnB1dHM6WyJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsImlkIiwicmVxdWlyZWQiLCJsYWJlbFBvc2l0aW9uIiwibmFtZSIsInZhbHVlIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY29sb3IiLCJkaXNhYmxlZEludGVyYWN0aXZlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiaW5kZXRlcm1pbmF0ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJpbmRldGVybWluYXRlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRDaGVja2JveCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEFjY29yZGlvbixzZWxlY3RvcjoibWF0LWFjY29yZGlvbiIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsImRpc3BsYXlNb2RlIiwidG9nZ2xlUG9zaXRpb24iXSxleHBvcnRBczpbIm1hdEFjY29yZGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRHYXBEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0R2FwXSwgW2Z4TGF5b3V0R2FwLnhzXSwgW2Z4TGF5b3V0R2FwLnNtXSwgW2Z4TGF5b3V0R2FwLm1kXSwgIFtmeExheW91dEdhcC5sZ10sIFtmeExheW91dEdhcC54bF0sIFtmeExheW91dEdhcC5sdC1zbV0sIFtmeExheW91dEdhcC5sdC1tZF0sICBbZnhMYXlvdXRHYXAubHQtbGddLCBbZnhMYXlvdXRHYXAubHQteGxdLCBbZnhMYXlvdXRHYXAuZ3QteHNdLCBbZnhMYXlvdXRHYXAuZ3Qtc21dLCAgW2Z4TGF5b3V0R2FwLmd0LW1kXSwgW2Z4TGF5b3V0R2FwLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRHYXAiLCJmeExheW91dEdhcC54cyIsImZ4TGF5b3V0R2FwLnNtIiwiZnhMYXlvdXRHYXAubWQiLCJmeExheW91dEdhcC5sZyIsImZ4TGF5b3V0R2FwLnhsIiwiZnhMYXlvdXRHYXAubHQtc20iLCJmeExheW91dEdhcC5sdC1tZCIsImZ4TGF5b3V0R2FwLmx0LWxnIiwiZnhMYXlvdXRHYXAubHQteGwiLCJmeExheW91dEdhcC5ndC14cyIsImZ4TGF5b3V0R2FwLmd0LXNtIiwiZnhMYXlvdXRHYXAuZ3QtbWQiLCJmeExheW91dEdhcC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRTaG93SGlkZURpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhTaG93XSwgW2Z4U2hvdy5wcmludF0sICBbZnhTaG93LnhzXSwgW2Z4U2hvdy5zbV0sIFtmeFNob3cubWRdLCBbZnhTaG93LmxnXSwgW2Z4U2hvdy54bF0sICBbZnhTaG93Lmx0LXNtXSwgW2Z4U2hvdy5sdC1tZF0sIFtmeFNob3cubHQtbGddLCBbZnhTaG93Lmx0LXhsXSwgIFtmeFNob3cuZ3QteHNdLCBbZnhTaG93Lmd0LXNtXSwgW2Z4U2hvdy5ndC1tZF0sIFtmeFNob3cuZ3QtbGddLCAgW2Z4SGlkZV0sIFtmeEhpZGUucHJpbnRdLCAgW2Z4SGlkZS54c10sIFtmeEhpZGUuc21dLCBbZnhIaWRlLm1kXSwgW2Z4SGlkZS5sZ10sIFtmeEhpZGUueGxdLCAgW2Z4SGlkZS5sdC1zbV0sIFtmeEhpZGUubHQtbWRdLCBbZnhIaWRlLmx0LWxnXSwgW2Z4SGlkZS5sdC14bF0sICBbZnhIaWRlLmd0LXhzXSwgW2Z4SGlkZS5ndC1zbV0sIFtmeEhpZGUuZ3QtbWRdLCBbZnhIaWRlLmd0LWxnXSIsaW5wdXRzOlsiZnhTaG93IiwiZnhTaG93LnByaW50IiwiZnhTaG93LnhzIiwiZnhTaG93LnNtIiwiZnhTaG93Lm1kIiwiZnhTaG93LmxnIiwiZnhTaG93LnhsIiwiZnhTaG93Lmx0LXNtIiwiZnhTaG93Lmx0LW1kIiwiZnhTaG93Lmx0LWxnIiwiZnhTaG93Lmx0LXhsIiwiZnhTaG93Lmd0LXhzIiwiZnhTaG93Lmd0LXNtIiwiZnhTaG93Lmd0LW1kIiwiZnhTaG93Lmd0LWxnIiwiZnhIaWRlIiwiZnhIaWRlLnByaW50IiwiZnhIaWRlLnhzIiwiZnhIaWRlLnNtIiwiZnhIaWRlLm1kIiwiZnhIaWRlLmxnIiwiZnhIaWRlLnhsIiwiZnhIaWRlLmx0LXNtIiwiZnhIaWRlLmx0LW1kIiwiZnhIaWRlLmx0LWxnIiwiZnhIaWRlLmx0LXhsIiwiZnhIaWRlLmd0LXhzIiwiZnhIaWRlLmd0LXNtIiwiZnhIaWRlLmd0LW1kIiwiZnhIaWRlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0Q2xhc3NEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nQ2xhc3NdLCBbbmdDbGFzcy54c10sIFtuZ0NsYXNzLnNtXSwgW25nQ2xhc3MubWRdLCBbbmdDbGFzcy5sZ10sIFtuZ0NsYXNzLnhsXSwgIFtuZ0NsYXNzLmx0LXNtXSwgW25nQ2xhc3MubHQtbWRdLCBbbmdDbGFzcy5sdC1sZ10sIFtuZ0NsYXNzLmx0LXhsXSwgIFtuZ0NsYXNzLmd0LXhzXSwgW25nQ2xhc3MuZ3Qtc21dLCBbbmdDbGFzcy5ndC1tZF0sIFtuZ0NsYXNzLmd0LWxnXSIsaW5wdXRzOlsibmdDbGFzcyIsIm5nQ2xhc3MueHMiLCJuZ0NsYXNzLnNtIiwibmdDbGFzcy5tZCIsIm5nQ2xhc3MubGciLCJuZ0NsYXNzLnhsIiwibmdDbGFzcy5sdC1zbSIsIm5nQ2xhc3MubHQtbWQiLCJuZ0NsYXNzLmx0LWxnIiwibmdDbGFzcy5sdC14bCIsIm5nQ2xhc3MuZ3QteHMiLCJuZ0NsYXNzLmd0LXNtIiwibmdDbGFzcy5ndC1tZCIsIm5nQ2xhc3MuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS7JtU5nTm9WYWxpZGF0ZSxzZWxlY3RvcjoiZm9ybTpub3QoW25nTm9Gb3JtXSk6bm90KFtuZ05hdGl2ZVZhbGlkYXRlXSkifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTptdC5FbnRpdHlHYXRld2F5U2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1lbnRpdHktZ2F0ZXdheS1zZWxlY3QiLGlucHV0czpbInJlcXVpcmVkIiwibmV3R2F0ZXdheVR5cGUiLCJkZXZpY2VOYW1lIiwiaXNTdGF0ZUZvcm0iXSxvdXRwdXRzOlsiZ2F0ZXdheU5hbWVFeGlzdCJdfSx7a2luZDoicGlwZSIsdHlwZTpfLlVwcGVyQ2FzZVBpcGUsbmFtZToidXBwZXJjYXNlIn0se2tpbmQ6InBpcGUiLHR5cGU6Xy5LZXlWYWx1ZVBpcGUsbmFtZToia2V5dmFsdWUifSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn1dfSl9fWUoIkdhdGV3YXlGb3JtQ29tcG9uZW50IixlbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTplbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZ2F0ZXdheS1mb3JtIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2Vcbjxmb3JtICNmb3JtQ29udGFpbmVyIGNsYXNzPSJnYXRld2F5LWZvcm0iXG4gICAgICBbZm9ybUdyb3VwXT0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cCJcbiAgICAgIHRiLXRvYXN0IHRvYXN0VGFyZ2V0PSJ7eyB0b2FzdFRhcmdldElkIH19IlxuICAgICAgKG5nU3VibWl0KT0ic2F2ZSgpIj5cbiAgPG1hdC1hY2NvcmRpb24gbXVsdGk9InRydWUiIGNsYXNzPSJtYXQtYm9keS0yIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1wYW5lbC10aXRsZSI+e3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkXCcgfCB0cmFuc2xhdGUgfCB1cHBlcmNhc2UgfX08L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8dGItZW50aXR5LWdhdGV3YXktc2VsZWN0XG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJnYXRld2F5IlxuICAgICAgICAgIFtkZXZpY2VOYW1lXT0iZGV2aWNlTmFtZUZvcm0iXG4gICAgICAgICAgW2lzU3RhdGVGb3JtXT0iaXNTdGF0ZUZvcm0iXG4gICAgICAgICAgW25ld0dhdGV3YXlUeXBlXT0iZ2F0ZXdheVR5cGUiXG4gICAgICAgICAgKGdhdGV3YXlOYW1lRXhpc3QpPSJnYXRld2F5RXhpc3QoKSJcbiAgICAgICAgICByZXF1aXJlZFxuICAgICAgICA+XG4gICAgICA8L3RiLWVudGl0eS1nYXRld2F5LXNlbGVjdD5cbiAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57e1wnZ2F0ZXdheS5zZWN1cml0eS10eXBlXCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5VHlwZSIgPlxuICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2VjdXJpdHlUeXBlIG9mIHNlY3VyaXR5VHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic2VjdXJpdHlUeXBlLmtleSI+XG4gICAgICAgICAgICAgIHt7IHNlY3VyaXR5VHlwZS52YWx1ZS50b1N0cmluZygpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IFtmeExheW91dF09ImFsaWdubWVudCIgW2Z4TGF5b3V0R2FwXT0ibGF5b3V0R2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0XCcgfCB0cmFuc2xhdGUgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0Ij5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWluXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICBnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cbiAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3NlY3VyaXR5VHlwZVwnKS52YWx1ZSA9PSBcJ3Rsc1wnIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0iY2FDZXJ0UGF0aCI+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkudGxzLXBhdGgtcHJpdmF0ZS1rZXlcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InByaXZhdGVLZXlQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS50bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9ImNlcnRQYXRoIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8bWF0LWNoZWNrYm94IGZvcm1Db250cm9sTmFtZT0icmVtb3RlQ29uZmlndXJhdGlvbiI+e3sgXCdnYXRld2F5LnJlbW90ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtY2hlY2tib3g+XG5cbiAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWxcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVtb3RlTG9nZ2luZ0xldmVsIj5cbiAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbHMiIFt2YWx1ZV09ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAge3sgbG9nTGV2ZWwgfX1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5wYXRoLWxvZ3NcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJ0ZXh0IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzIj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUxvZ2dpbmdQYXRoVG9Mb2dzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgIGdhdGV3YXkucGF0aC1sb2dzLXJlcXVpcmVkXG4gICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cblxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXBhbmVsLXRpdGxlIj57eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPnt7XCdnYXRld2F5LnN0b3JhZ2UtdHlwZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdG9yYWdlVHlwZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMgfCBrZXl2YWx1ZSIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUua2V5Ij5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGUudmFsdWUudG9TdHJpbmcoKSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg+XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9InJlYWRSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZFxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlYWRSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhY2stc2l6ZS1taW5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdyZWFkUmVjb3Jkc0NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbCA+XG4gICAgICAgICAgICAgIHt7IChnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlICE9PSBcJ2ZpbGVcJyA/IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzXCcgOiBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzXCcpIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhSZWNvcmRzQ291bnQiPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhSZWNvcmRzQ291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ21heFJlY29yZHNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgW2Z4TGF5b3V0XT0iYWxpZ25tZW50IiBbZnhMYXlvdXRHYXBdPSJsYXlvdXRHYXAiICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3N0b3JhZ2VUeXBlXCcpLnZhbHVlID09IFwnZmlsZVwnIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXNcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhGaWxlc0NvdW50Ij5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5nZXQoXCdtYXhGaWxlc0NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgIGdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImdhdGV3YXlDb25maWd1cmF0aW9uR3JvdXAuZ2V0KFwnbWF4RmlsZXNDb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aFwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0idGV4dCIgZm9ybUNvbnRyb2xOYW1lPSJkYXRhRm9sZGVyUGF0aCI+XG4gICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ2RhdGFGb2xkZXJQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuXG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItcGFuZWwtdGl0bGUiPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cblxuICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBjbGFzcz0iZ2F0ZXdheS1jb25maWciPlxuICAgICAgICA8c2VjdGlvbiBmb3JtQXJyYXlOYW1lPSJjb25uZWN0b3JzIiAqbmdGb3I9ImxldCBjb25uZWN0b3Igb2YgY29ubmVjdG9ycy5jb250cm9sczsgbGV0IGkgPSBpbmRleDsiPlxuICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPSJpIiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIHN0cmV0Y2giIGZ4TGF5b3V0R2FwPSI4cHgiPlxuICAgICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIiBmeExheW91dEFsaWduPSJjZW50ZXIgc3RhcnQiPlxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPjwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCIgZnhGbGV4PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcJ2dhdGV3YXkuY29ubmVjdG9yLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iY29uZmlnVHlwZSIgKHNlbGVjdGlvbkNoYW5nZSk9ImNoYW5nZUNvbm5lY3RvclR5cGUoY29ubmVjdG9yKSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBjb25uZWN0b3JUeXBlIG9mIGNvbm5lY3RvclR5cGVzIiBbdmFsdWVdPSJjb25uZWN0b3JUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgY29ubmVjdG9yVHlwZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb25uZWN0b3IuZ2V0KFwnY29uZmlnVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICBnYXRld2F5LmNvbm5lY3Rvci10eXBlLXJlcXVpcmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7IFwnZ2F0ZXdheS5jb25uZWN0b3ItbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InRleHQiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgKGJsdXIpPSJjaGFuZ2VDb25uZWN0b3JOYW1lKGNvbm5lY3RvciwgaSkiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbm5lY3Rvci5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgIGdhdGV3YXkuY29ubmVjdG9yLW5hbWUtcmVxdWlyZWRcbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbZnhMYXlvdXRdPSJhbGlnbm1lbnQiIFtmeExheW91dEdhcF09ImxheW91dEdhcCJcbiAgICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ie3thbGlnbm1lbnQgPT0gXCdyb3dcJyA/IFwnZW5kIGNlbnRlclwnIDogXCdzcGFjZS1ldmVubHkgY2VudGVyXCd9fSIgY2xhc3M9ImFjdGlvbi1idXR0b25zIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSIgbWF0LWljb24tYnV0dG9uIChjbGljayk9Im9wZW5Db25maWdEaWFsb2coJGV2ZW50LCBpLCBjb25uZWN0b3IuZ2V0KFwnY29uZmlnXCcpLnZhbHVlLCBjb25uZWN0b3IuZ2V0KFwnbmFtZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnVwZGF0ZS1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT0ie1wnbWF0LXdhcm5cJzogY29ubmVjdG9yLmdldChcJ2NvbmZpZ1wnKS5pbnZhbGlkfSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfaG9yaXo8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPSJpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0icmVtb3ZlQ29ubmVjdG9yKGkpIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5kZWxldGVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDxzcGFuIFtmeFNob3ddPSIhY29ubmVjdG9ycy5sZW5ndGgiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiIGNsYXNzPSJuby1kYXRhLWZvdW5kIj57e1wnZ2F0ZXdheS5uby1jb25uZWN0b3JzXCcgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8YnV0dG9uIFtmeFNob3ddPSIhaXNSZWFkT25seUZvcm0iIG1hdC1yYWlzZWQtYnV0dG9uIHR5cGU9ImJ1dHRvbiIgKGNsaWNrKT0iYWRkTmV3Q29ubmVjdG9yKCkiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuY29ubmVjdG9yLWFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2ID5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gIDwvbWF0LWFjY29yZGlvbj5cbiAgPHNlY3Rpb24gW2Z4U2hvd109IiFpc1JlYWRPbmx5Rm9ybSJcbiAgICAgICAgICAgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciIgY2xhc3M9ImZvcm0tYWN0aW9uLWJ1dHRvbnMiPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImV4cG9ydENvbmZpZygpIlxuICAgICAgICAgICAgKm5nSWY9IiFnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5kb3dubG9hZC10aXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICB7e1wnYWN0aW9uLmRvd25sb2FkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiIHR5cGU9InN1Ym1pdCJcbiAgICAgICAgICAgICpuZ0lmPSJnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmdldChcJ3JlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSIhZ2F0ZXdheUNvbmZpZ3VyYXRpb25Hcm91cC5kaXJ0eSB8fCBnYXRld2F5Q29uZmlndXJhdGlvbkdyb3VwLmludmFsaWQiXG4gICAgICAgICAgICBtYXRUb29sdGlwPSJ7e1wnZ2F0ZXdheS5zYXZlLXRpcFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIHt7XCdhY3Rpb24uc2F2ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvc2VjdGlvbj5cbjwvZm9ybT5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuZ2F0ZXdheS1mb3Jte2hlaWdodDoxMDAlO3BhZGRpbmc6NXB4O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7b3ZlcmZsb3cteTphdXRvO292ZXJmbG93LXg6aGlkZGVufTpob3N0IC5nYXRld2F5LWZvcm0gLmZvcm0tYWN0aW9uLWJ1dHRvbnN7cGFkZGluZy10b3A6OHB4fTpob3N0IC5nYXRld2F5LWZvcm0gLmdhdGV3YXktY29uZmlnIC5uby1kYXRhLWZvdW5ke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtoZWlnaHQ6NDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTp0LkVsZW1lbnRSZWZ9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp0Lk5nWm9uZX0se3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfSx7dHlwZTpXaW5kb3csZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOlthZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dHlwZTpsdC5JbXBvcnRFeHBvcnRTZXJ2aWNlfV0scHJvcERlY29yYXRvcnM6e2Zvcm1Db250YWluZXJSZWY6W3t0eXBlOm8sYXJnczpbImZvcm1Db250YWluZXIiLHtzdGF0aWM6ITB9XX1dLG11bHRpcGxlSW5wdXRGb3JtOlt7dHlwZTpvLGFyZ3M6WyJnYXRld2F5Q29uZmlndXJhdGlvbkZvcm0iLHtzdGF0aWM6ITB9XX1dLGN0eDpbe3R5cGU6YX1dLGlzU3RhdGVGb3JtOlt7dHlwZTphfV19fSk7Y2xhc3MgdG8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIpe3N1cGVyKGUsdCxhKSx0aGlzLnN0b3JlPWUsdGhpcy5yb3V0ZXI9dCx0aGlzLmRhdGE9bix0aGlzLmRpYWxvZ1JlZj1hLHRoaXMuZmI9byx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1pLHRoaXMucmVzb3VyY2VzU2VydmljZT1yLHRoaXMuY29ubmVjdG9yVHlwZT1fdCx0aGlzLmdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwPUh0LHRoaXMuZ2F0ZXdheUxvZ0xldmVsPU9iamVjdC52YWx1ZXMoTXQpLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHt0eXBlOltfdC5NUVRULFtdXSxuYW1lOlsiIixbdWUucmVxdWlyZWQsdGhpcy51bmlxTmFtZVJlcXVpcmVkKCksdWUucGF0dGVybihrdCldXSxsb2dMZXZlbDpbTXQuSU5GTyxbXV0sdXNlRGVmYXVsdHM6WyEwLFtdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITEsW11dLGNsYXNzOlsiIixbXV0sa2V5OlsiYXV0byIsW11dfSl9bmdPbkluaXQoKXt0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCksc3VwZXIubmdPbkRlc3Ryb3koKX1oZWxwTGlua0lkKCl7cmV0dXJuIHYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZ3VyYXRpb24vIn1jYW5jZWwoKXt0aGlzLmRpYWxvZ1JlZi5jbG9zZShudWxsKX1hZGQoKXt0aGlzLnN1Ym1pdHRlZD0hMDtjb25zdCBlPXRoaXMuY29ubmVjdG9yRm9ybS5nZXRSYXdWYWx1ZSgpO2UudXNlRGVmYXVsdHM/dGhpcy5nZXREZWZhdWx0Q29uZmlnKGUudHlwZSkuc3Vic2NyaWJlKCh0PT57Y29uc3Qgbj10aGlzLmRhdGEuZ2F0ZXdheVZlcnNpb247biYmKGUuY29uZmlnVmVyc2lvbj1uKSxlLmNvbmZpZ3VyYXRpb25Kc29uPSh0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0obik/dFtVdC5DdXJyZW50XTp0W1V0LkxlZ2FjeV0pPz90LHRoaXMuY29ubmVjdG9yRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UoZSl9KSk6dGhpcy5jb25uZWN0b3JGb3JtLnZhbGlkJiZ0aGlzLmRpYWxvZ1JlZi5jbG9zZShlKX11bmlxTmFtZVJlcXVpcmVkKCl7cmV0dXJuIGU9Pntjb25zdCB0PWUudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHRoaXMuZGF0YS5kYXRhU291cmNlRGF0YS5zb21lKCgoe3ZhbHVlOntuYW1lOmV9fSk9PmUudG9Mb3dlckNhc2UoKT09PXQpKT97ZHVwbGljYXRlTmFtZTp7dmFsaWQ6ITF9fTpudWxsfX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShFZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgidXNlRGVmYXVsdHMiKTtlPT09X3QuR1JQQ3x8ZT09PV90LkNVU1RPTT90LnNldFZhbHVlKCExKTp0LnZhbHVlfHx0LnNldFZhbHVlKCEwKX0pKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCl9Z2V0RGVmYXVsdENvbmZpZyhlKXtyZXR1cm4gdGhpcy5yZXNvdXJjZXNTZXJ2aWNlLmxvYWRKc29uUmVzb3VyY2UoYC9hc3NldHMvbWV0YWRhdGEvY29ubmVjdG9yLWRlZmF1bHQtY29uZmlncy8ke2V9Lmpzb25gKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp2YX0se3Rva2VuOlguUmVzb3VyY2VzU2VydmljZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6dG8sc2VsZWN0b3I6InRiLWFkZC1jb25uZWN0b3ItZGlhbG9nIixwcm92aWRlcnM6W10sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJjb25uZWN0b3JGb3JtIiBjbGFzcz0iYWRkLWNvbm5lY3RvciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7ICJnYXRld2F5LmFkZC1jb25uZWN0b3IiIHwgdHJhbnNsYXRlfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09ImhlbHBMaW5rSWQoKSI+PC9kaXY+XG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIj5cbiAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgPC9tYXQtdG9vbGJhcj5cbiAgPGRpdiBtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnR5cGU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGdhdGV3YXlDb25uZWN0b3JEZWZhdWx0VHlwZXNUcmFuc2xhdGVzTWFwIHwga2V5dmFsdWUiIFt2YWx1ZV09InR5cGUua2V5Ij5cbiAgICAgICAgICAgICAgICB7eyB0eXBlLnZhbHVlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcJ2dhdGV3YXkuY29ubmVjdG9yLWR1cGxpY2F0ZS1uYW1lXCcgOlwnZ2F0ZXdheS5uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwnZHVwbGljYXRlTmFtZVwnKSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWNsYXNzPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNsYXNzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5HUlBDIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZW1vdGUtbG9nZ2luZy1sZXZlbDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkdSUEMgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBjb25uZWN0b3JUeXBlLkNVU1RPTSJcbiAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIGZpeGVkLXRpdGxlLXdpZHRoIiBmb3JtQ29udHJvbE5hbWU9InVzZURlZmF1bHRzIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5maWxsLWNvbm5lY3Rvci1kZWZhdWx0c1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLk1RVFQiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGEtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucyBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIChjbGljayk9ImFkZCgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iY29ubmVjdG9yRm9ybS5pbnZhbGlkIHx8ICFjb25uZWN0b3JGb3JtLmRpcnR5Ij5cbiAgICAgIHt7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmFkZC1jb25uZWN0b3J7bWluLXdpZHRoOjQwMHB4O3dpZHRoOjUwMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpkdC5IZWxwQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGVscF0iLGlucHV0czpbInRiLWhlbHAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cnQuTWF0VG9vbGJhcixzZWxlY3RvcjoibWF0LXRvb2xiYXIiLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJtYXRUb29sYmFyIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQWN0aW9ucyxzZWxlY3RvcjoiW21hdC1kaWFsb2ctYWN0aW9uc10sIG1hdC1kaWFsb2ctYWN0aW9ucywgW21hdERpYWxvZ0FjdGlvbnNdIixpbnB1dHM6WyJhbGlnbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOkplLk1hdERpYWxvZ0NvbnRlbnQsc2VsZWN0b3I6IlttYXQtZGlhbG9nLWNvbnRlbnRdLCBtYXQtZGlhbG9nLWNvbnRlbnQsIFttYXREaWFsb2dDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJBZGRDb25uZWN0b3JEaWFsb2dDb21wb25lbnQiLHRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnRvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1hZGQtY29ubmVjdG9yLWRpYWxvZyIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9ImFkZC1jb25uZWN0b3IiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyAiZ2F0ZXdheS5hZGQtY29ubmVjdG9yIiB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJoZWxwTGlua0lkKCkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBnYXRld2F5Q29ubmVjdG9yRGVmYXVsdFR5cGVzVHJhbnNsYXRlc01hcCB8IGtleXZhbHVlIiBbdmFsdWVdPSJ0eXBlLmtleSI+XG4gICAgICAgICAgICAgICAge3sgdHlwZS52YWx1ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkubmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBhdXRvY29tcGxldGU9Im9mZiIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDpcJ2dhdGV3YXkubmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS50b3VjaGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBjb25uZWN0b3JUeXBlLkNVU1RPTSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IGNvbm5lY3RvclR5cGUuR1JQQyIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1rZXk8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5HUlBDICYmIGNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSAhPT0gY29ubmVjdG9yVHlwZS5DVVNUT00iXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VEZWZhdWx0cyI+XG4gICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmZpbGwtY29ubmVjdG9yLWRlZmF1bHRzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZmlsbC1jb25uZWN0b3ItZGVmYXVsdHNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gY29ubmVjdG9yVHlwZS5NUVRUIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc2VuZC1jaGFuZ2UtZGF0YVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09ImNvbm5lY3RvckZvcm0uaW52YWxpZCB8fCAhY29ubmVjdG9yRm9ybS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hZGRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5hZGQtY29ubmVjdG9ye21pbi13aWR0aDo0MDBweDt3aWR0aDo1MDBweH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp2YX0se3R5cGU6WC5SZXNvdXJjZXNTZXJ2aWNlfV19KTtjbGFzcyBub3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy52YWx1ZVR5cGVLZXlzPU9iamVjdC52YWx1ZXMoR24pLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLk1hcHBpbmdWYWx1ZVR5cGU9R24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLnZhbHVlTGlzdEZvcm1BcnJheT10aGlzLmZiLmFycmF5KFtdKSx0aGlzLnZhbHVlTGlzdEZvcm1BcnJheS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXRyYWNrQnlLZXkoZSx0KXtyZXR1cm4gdH1hZGRLZXkoKXtjb25zdCBlPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0duLlNUUklOR10sc3RyaW5nOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxpbnRlZ2VyOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oTHQpXV0sZG91YmxlOlt7dmFsdWU6MCxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV0sYm9vbGVhbjpbe3ZhbHVlOiExLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UoZSksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChlKX1vYnNlcnZlVHlwZUNoYW5nZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntlLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLGUuZ2V0KCJ0eXBlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSxlLmdldCh0KS5lbmFibGUoe2VtaXRFdmVudDohMX0pfSkpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkubWFya0FzRGlydHkoKX12YWx1ZVRpdGxlKGUpe3JldHVybiBpZShlKT8ib2JqZWN0Ij09dHlwZW9mIGU/SlNPTi5zdHJpbmdpZnkoZSk6ZToiIn1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7fXdyaXRlVmFsdWUoZSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT17dHlwZTpbdC50eXBlXSxzdHJpbmc6W3t2YWx1ZToiIixkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0saW50ZWdlcjpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKEx0KV1dLGRvdWJsZTpbe3ZhbHVlOjAsZGlzYWJsZWQ6ITB9LFt1ZS5yZXF1aXJlZF1dLGJvb2xlYW46W3t2YWx1ZTohMSxkaXNhYmxlZDohMH0sW3VlLnJlcXVpcmVkXV19O2VbdC50eXBlXVswXT17dmFsdWU6dC52YWx1ZSxkaXNhYmxlZDohMX07Y29uc3Qgbj10aGlzLmZiLmdyb3VwKGUpO3RoaXMub2JzZXJ2ZVR5cGVDaGFuZ2UobiksdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkucHVzaChuKX19dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy52YWx1ZUxpc3RGb3JtQXJyYXkudmFsaWQ/bnVsbDp7dmFsdWVMaXN0Rm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUubWFwKCgoe3R5cGU6ZSwuLi50fSk9Pih7dHlwZTplLHZhbHVlOnRbZV19KSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOm5vLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bm8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLlJlcXVpcmVkVmFsaWRhdG9yLHNlbGVjdG9yOiI6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sTmFtZV0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbF0sOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtuZ01vZGVsXSIsaW5wdXRzOlsicmVxdWlyZWQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJUeXBlVmFsdWVQYW5lbENvbXBvbmVudCIsbm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXR5cGUtdmFsdWUtcGFuZWwiLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ubykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJ2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHMubGVuZ3RoOyBlbHNlIG5vS2V5cyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiB2YWx1ZUxpc3RGb3JtQXJyYXkuY29udHJvbHM7IHRyYWNrQnk6IHRyYWNrQnlLZXk7IGxldCAkaW5kZXggPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ibGFzdCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudmFsdWUpIH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0xOCIgW3N2Z0ljb25dPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0idGItbWF0LTIwIiBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdTd2l0Y2hDYXNlPSJNYXBwaW5nVmFsdWVUeXBlLlNUUklORyIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJzdHJpbmciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuSU5URUdFUiIgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJpbnRlZ2VyIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuRE9VQkxFIiBtYXRJbnB1dCByZXF1aXJlZCBmb3JtQ29udHJvbE5hbWU9ImRvdWJsZSIgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ1N3aXRjaENhc2U9Ik1hcHBpbmdWYWx1ZVR5cGUuQk9PTEVBTiIgZm9ybUNvbnRyb2xOYW1lPSJib29sZWFuIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09InRydWUiPnRydWU8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPSJmYWxzZSI+ZmFsc2U8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGtleUNvbnRyb2wuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVLZXkoJGV2ZW50LCAkaW5kZXgpIlxuICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5kZWxldGUtdmFsdWVcJyB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2PlxuICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIChjbGljayk9ImFkZEtleSgpIj5cbiAgICAgIHt7IFwnZ2F0ZXdheS5hZGQtdmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0tleXM+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IFwnZ2F0ZXdheS5uby12YWx1ZVwnIH19PC9zcGFuPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRpdGxlLWNvbnRhaW5lcnttYXgtd2lkdGg6MTF2d306aG9zdCAua2V5LXBhbmVse2hlaWdodDoyNTBweDtvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1mb3JtLXBhbmVsIC5tYXQtbWRjLWljb24tYnV0dG9ue3dpZHRoOjU2cHg7aGVpZ2h0OjU2cHg7cGFkZGluZzoxNnB4O2NvbG9yOiMwMDAwMDA4YX06aG9zdCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dfSk7Y2xhc3MgYW8gZXh0ZW5kcyBPe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnZhbHVlVHlwZUtleXM9T2JqZWN0LnZhbHVlcyhHbiksdGhpcy52YWx1ZVR5cGVFbnVtPUduLHRoaXMudmFsdWVUeXBlcz1Wbix0aGlzLnJhd0RhdGE9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5NYXBwaW5nS2V5c1R5cGU9Tm4sdGhpcy5lcnJvclRleHQ9IiJ9bmdPbkluaXQoKXt0aGlzLmtleXNMaXN0Rm9ybUFycmF5PXRoaXMucHJlcGFyZUtleXNGb3JtQXJyYXkodGhpcy5rZXlzKX10cmFja0J5S2V5KGUsdCl7cmV0dXJuIHR9YWRkS2V5KCl7bGV0IGU7aWYoZT10aGlzLmtleXNUeXBlPT09Tm4uUlBDX01FVEhPRFM/dGhpcy5mYi5ncm91cCh7bWV0aG9kOlsiIixbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1tdLFtdXX0pOnRoaXMuZmIuZ3JvdXAoe2tleTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dfSksdGhpcy5rZXlzVHlwZSE9PU5uLkNVU1RPTSYmdGhpcy5rZXlzVHlwZSE9PU5uLlJQQ19NRVRIT0RTKXtjb25zdCB0PXRoaXMucmF3RGF0YT8icmF3Ijp0aGlzLnZhbHVlVHlwZUtleXNbMF07ZS5hZGRDb250cm9sKCJ0eXBlIix0aGlzLmZiLmNvbnRyb2wodCkpfXRoaXMua2V5c0xpc3RGb3JtQXJyYXkucHVzaChlKX1kZWxldGVLZXkoZSx0KXtlJiZlLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMua2V5c0xpc3RGb3JtQXJyYXkucmVtb3ZlQXQodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5tYXJrQXNEaXJ0eSgpfWNhbmNlbCgpe3RoaXMucG9wb3Zlcj8uaGlkZSgpfWFwcGx5S2V5c0RhdGEoKXtsZXQgZT10aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlO2lmKHRoaXMua2V5c1R5cGU9PT1Obi5DVVNUT00pe2U9e307Zm9yKGxldCB0IG9mIHRoaXMua2V5c0xpc3RGb3JtQXJyYXkudmFsdWUpZVt0LmtleV09dC52YWx1ZX10aGlzLmtleXNEYXRhQXBwbGllZC5lbWl0KGUpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJih0aGlzLmtleXNUeXBlPT09Tm4uQ1VTVE9NJiYoZT1PYmplY3Qua2V5cyhlKS5tYXAoKHQ9Pih7a2V5OnQsdmFsdWU6ZVt0XSx0eXBlOiIifSkpKSksZS5mb3JFYWNoKChlPT57bGV0IG47aWYodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTKW49dGhpcy5mYi5ncm91cCh7bWV0aG9kOltlLm1ldGhvZCxbdWUucmVxdWlyZWRdXSxhcmd1bWVudHM6W1suLi5lLmFyZ3VtZW50c10sW11dfSk7ZWxzZXtjb25zdHtrZXk6dCx2YWx1ZTphLHR5cGU6b309ZTtuPXRoaXMuZmIuZ3JvdXAoe2tleTpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbYSxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0eXBlOltvLFtdXX0pfXQucHVzaChuKX0pKSksdGhpcy5mYi5hcnJheSh0KX12YWx1ZVRpdGxlKGUpe2NvbnN0IHQ9ZS5nZXQodGhpcy5rZXlzVHlwZT09PU5uLlJQQ19NRVRIT0RTPyJtZXRob2QiOiJ2YWx1ZSIpLnZhbHVlO3JldHVybiBpZSh0KT8ib2JqZWN0Ij09dHlwZW9mIHQ/SlNPTi5zdHJpbmdpZnkodCk6dDoiIn1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlcHM6W3t0b2tlbjptZS5VbnR5cGVkRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6YW8sc2VsZWN0b3I6InRiLW1hcHBpbmctZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e3BhbmVsVGl0bGU6InBhbmVsVGl0bGUiLGFkZEtleVRpdGxlOiJhZGRLZXlUaXRsZSIsZGVsZXRlS2V5VGl0bGU6ImRlbGV0ZUtleVRpdGxlIixub0tleXNUZXh0OiJub0tleXNUZXh0IixrZXlzOiJrZXlzIixrZXlzVHlwZToia2V5c1R5cGUiLHZhbHVlVHlwZUtleXM6InZhbHVlVHlwZUtleXMiLHZhbHVlVHlwZUVudW06InZhbHVlVHlwZUVudW0iLHZhbHVlVHlwZXM6InZhbHVlVHlwZXMiLHJhd0RhdGE6InJhd0RhdGEiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LHByb3ZpZGVyczpbXSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmcta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUtleTsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImtleXNUeXBlICE9PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ2tleVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCctXCcgfX1cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgdmFsdWVUaXRsZShrZXlDb250cm9sKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5DVVNUT00gJiYga2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5KU09OUGF0aC1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmtleVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmtleS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rvci1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudHlwZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAgZmlsbC13aWR0aCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IG5hbWU9InZhbHVlVHlwZSIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciAqbmdJZj0iIXJhd0RhdGEiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiIgY2xhc3M9InRiLW1hdC0xOCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ZnSWNvbl09InZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lmljb24iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPSIhcmF3RGF0YTsgZWxzZSByYXdUZXh0Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgKHZhbHVlVHlwZXMuZ2V0KGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSk/Lm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd09wdGlvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmFsdWVUeXBlIG9mIHZhbHVlVHlwZUtleXMiIFt2YWx1ZV09InZhbHVlVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9InZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiIgY2xhc3M9InRiLW1hdC0yMCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmdJY29uPSJ7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLmljb24gfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpLm5hbWUgfHwgdmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmF3T3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09IlwncmF3XCciPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LnJhd1wnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudmFsdWVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0idGhpcy5rZXlzVHlwZSB8IGdldEdhdGV3YXlIZWxwTGluayA6IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSA6IHZhbHVlVHlwZUtleXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJrZXlzVHlwZSA9PT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmtleTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2tleVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4IGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgY2xhc3M9InRiLWlubGluZS1maWVsZCBmbGV4IHRiLXN1ZmZpeC1hYnNvbHV0ZSI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0idmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwndmFsdWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXRob2QtbmFtZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ21ldGhvZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIGtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmFyZ3VtZW50c1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleUNvbnRyb2wuZ2V0KFwnYXJndW1lbnRzXCcpLnZhbHVlPy5sZW5ndGggKyBcJylcJ319XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLXR5cGUtdmFsdWUtcGFuZWwgZm9ybUNvbnRyb2xOYW1lPSJhcmd1bWVudHMiPjwvdGItdHlwZS12YWx1ZS1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUtleSgkZXZlbnQsICRpbmRleCkiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJkZWxldGVLZXlUaXRsZSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSIgKGNsaWNrKT0iYWRkS2V5KCkiPlxuICAgICAgICB7eyBhZGRLZXlUaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctdGVtcGxhdGUgI25vS2V5cz5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWZsZXggY2VudGVyIGFsaWduLWNlbnRlciBrZXktcGFuZWwiPlxuICAgICAgPHNwYW4gY2xhc3M9InRiLXByb21wdCIgdHJhbnNsYXRlPnt7IG5vS2V5c1RleHQgfX08L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9InRiLWZsZXggZmxleC1lbmQiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b25cbiAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgKGNsaWNrKT0iYXBwbHlLZXlzRGF0YSgpIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0ia2V5c0xpc3RGb3JtQXJyYXkuaW52YWxpZCB8fCAha2V5c0xpc3RGb3JtQXJyYXkuZGlydHkiPlxuICAgICAge3sgXCdhY3Rpb24uYXBwbHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWx7d2lkdGg6Nzd2dzttYXgtd2lkdGg6NzAwcHh9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye21heC13aWR0aDoxMXZ3O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC5rZXktcGFuZWx7aGVpZ2h0OjUwMHB4O292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCB0Yi12YWx1ZS1pbnB1dHt3aWR0aDoxMDAlfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsIixpbnB1dHM6WyJoaWRlVG9nZ2xlIiwidG9nZ2xlUG9zaXRpb24iXSxvdXRwdXRzOlsiYWZ0ZXJFeHBhbmQiLCJhZnRlckNvbGxhcHNlIl0sZXhwb3J0QXM6WyJtYXRFeHBhbnNpb25QYW5lbCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLHNlbGVjdG9yOiJtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciIsaW5wdXRzOlsiZXhwYW5kZWRIZWlnaHQiLCJjb2xsYXBzZWRIZWlnaHQiLCJ0YWJJbmRleCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsVGl0bGUsc2VsZWN0b3I6Im1hdC1wYW5lbC10aXRsZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxDb250ZW50LHNlbGVjdG9yOiJuZy10ZW1wbGF0ZVttYXRFeHBhbnNpb25QYW5lbENvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm5vLHNlbGVjdG9yOiJ0Yi10eXBlLXZhbHVlLXBhbmVsIn0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJwaXBlIix0eXBlOlRhLG5hbWU6ImdldEdhdGV3YXlIZWxwTGluayJ9XX0pfX1lKCJNYXBwaW5nRGF0YUtleXNQYW5lbENvbXBvbmVudCIsYW8pLEhlKFtOKCldLGFvLnByb3RvdHlwZSwicmF3RGF0YSIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmFvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRhdGEta2V5cy1wYW5lbCIscHJvdmlkZXJzOltdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy1rZXlzLXBhbmVsIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+e3sgcGFuZWxUaXRsZSAgfCB0cmFuc2xhdGUgfX17e1wnIChcJyArIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aCArIFwnKVwnfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIGtleS1wYW5lbCIgKm5nSWY9ImtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzLmxlbmd0aDsgZWxzZSBub0tleXMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1mbGV4IG5vLWZsZXggcm93IGNlbnRlciBmaWxsLXdpZHRoIlxuICAgICAgICAgICAqbmdGb3I9ImxldCBrZXlDb250cm9sIG9mIGtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzOyB0cmFja0J5OiB0cmFja0J5S2V5OyBsZXQgJGluZGV4ID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdDsiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ia2V5Q29udHJvbCI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBjbGFzcz0idGItc2V0dGluZ3MiIFtleHBhbmRlZF09Imxhc3QiPlxuICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0ia2V5c1R5cGUgIT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB7eyBcJy1cJyB9fVxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyB2YWx1ZVRpdGxlKGtleUNvbnRyb2wpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLkNVU1RPTSAmJiBrZXlzVHlwZSAhPT0gTWFwcGluZ0tleXNUeXBlLlJQQ19NRVRIT0RTIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnBsYXRmb3JtLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LkpTT05QYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkua2V5LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ2tleVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBmaWxsLXdpZHRoIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgbmFtZT0idmFsdWVUeXBlIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyICpuZ0lmPSIhcmF3RGF0YSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPSJ2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpPy5pY29uIiBjbGFzcz0idGItbWF0LTE4IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdJY29uXT0idmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8uaWNvbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9IiFyYXdEYXRhOyBlbHNlIHJhd1RleHQiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAodmFsdWVUeXBlcy5nZXQoa2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlKT8ubmFtZSB8fCB2YWx1ZVR5cGVzLmdldChrZXlDb250cm9sLmdldChcJ3R5cGVcJykudmFsdWUpKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iIXJhd0RhdGE7IGVsc2UgcmF3T3B0aW9uIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2YWx1ZVR5cGUgb2YgdmFsdWVUeXBlS2V5cyIgW3ZhbHVlXT0idmFsdWVUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj0idmFsdWVUeXBlcy5nZXQodmFsdWVUeXBlKS5pY29uIiBjbGFzcz0idGItbWF0LTIwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Z0ljb249Int7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkuaWNvbiB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlVHlwZXMuZ2V0KHZhbHVlVHlwZSkubmFtZSB8fCB2YWx1ZVR5cGVzLmdldCh2YWx1ZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyYXdPcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT0iXCdyYXdcJyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkucmF3XCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuSlNPTlBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS52YWx1ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJ0aGlzLmtleXNUeXBlIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDoga2V5Q29udHJvbC5nZXQoXCd0eXBlXCcpLnZhbHVlIDogdmFsdWVUeXBlS2V5cyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgKm5nSWY9ImtleXNUeXBlID09PSBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkua2V5PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImtleSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwna2V5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdrZXlcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcmVxdWlyZWQgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudmFsdWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ3ZhbHVlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0ia2V5c1R5cGUgPT09IE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubWV0aG9kLW5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1uYW1lXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Im1ldGhvZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tZXRob2QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwnbWV0aG9kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYga2V5Q29udHJvbC5nZXQoXCdtZXRob2RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZS1jb250YWluZXIiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXJndW1lbnRzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hcmd1bWVudHNcJyB8IHRyYW5zbGF0ZSB9fXt7XCcgKFwnICsga2V5Q29udHJvbC5nZXQoXCdhcmd1bWVudHNcJykudmFsdWU/Lmxlbmd0aCArIFwnKVwnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRFeHBhbnNpb25QYW5lbENvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGItdHlwZS12YWx1ZS1wYW5lbCBmb3JtQ29udHJvbE5hbWU9ImFyZ3VtZW50cyI+PC90Yi10eXBlLXZhbHVlLXBhbmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbHt3aWR0aDo3N3Z3O21heC13aWR0aDo3MDBweH06aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIC50aXRsZS1jb250YWluZXJ7bWF4LXdpZHRoOjExdnc7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfTpob3N0IC50Yi1tYXBwaW5nLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbWFwcGluZy1rZXlzLXBhbmVsIHRiLXZhbHVlLWlucHV0e3dpZHRoOjEwMCV9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAudGItZm9ybS1wYW5lbCAubWF0LW1kYy1pY29uLWJ1dHRvbnt3aWR0aDo1NnB4O2hlaWdodDo1NnB4O3BhZGRpbmc6MTZweDtjb2xvcjojMDAwMDAwOGF9Omhvc3QgLnRiLW1hcHBpbmcta2V5cy1wYW5lbCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLlVudHlwZWRGb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9XSxwcm9wRGVjb3JhdG9yczp7cGFuZWxUaXRsZTpbe3R5cGU6YX1dLGFkZEtleVRpdGxlOlt7dHlwZTphfV0sZGVsZXRlS2V5VGl0bGU6W3t0eXBlOmF9XSxub0tleXNUZXh0Olt7dHlwZTphfV0sa2V5czpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVUeXBlS2V5czpbe3R5cGU6YX1dLHZhbHVlVHlwZUVudW06W3t0eXBlOmF9XSx2YWx1ZVR5cGVzOlt7dHlwZTphfV0scmF3RGF0YTpbe3R5cGU6YX1dLHBvcG92ZXI6W3t0eXBlOmF9XSxrZXlzRGF0YUFwcGxpZWQ6W3t0eXBlOmx9XX19KTtjbGFzcyBvbyBleHRlbmRzIE97Z2V0IGRldmljZUluZm9UeXBlKCl7cmV0dXJuIHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZX1zZXQgZGV2aWNlSW5mb1R5cGUoZSl7dGhpcy5kZXZpY2VJbmZvVHlwZVZhbHVlIT09ZSYmKHRoaXMuZGV2aWNlSW5mb1R5cGVWYWx1ZT1lKX1jb25zdHJ1Y3RvcihlLHQsbixhKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy50cmFuc2xhdGU9dCx0aGlzLmRpYWxvZz1uLHRoaXMuZmI9YSx0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLnVzZVNvdXJjZT0hMCx0aGlzLnJlcXVpcmVkPSExLHRoaXMuc291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhUbiksdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5wcm9wYWdhdGVDaGFuZ2U9ZT0+e319bmdPbkluaXQoKXt0aGlzLm1hcHBpbmdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldXX0pLHRoaXMudXNlU291cmNlJiZ0aGlzLm1hcHBpbmdGb3JtR3JvdXAuYWRkQ29udHJvbCgiZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiLHRoaXMuZmIuY29udHJvbCh0aGlzLnNvdXJjZVR5cGVzWzBdLFtdKSksdGhpcy5kZXZpY2VJbmZvVHlwZT09PWtuLkZVTEwmJih0aGlzLnVzZVNvdXJjZSYmdGhpcy5tYXBwaW5nRm9ybUdyb3VwLmFkZENvbnRyb2woImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIix0aGlzLmZiLmNvbnRyb2wodGhpcy5zb3VyY2VUeXBlc1swXSxbXSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5hZGRDb250cm9sKCJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGhpcy5mYi5jb250cm9sKCIiLHRoaXMucmVxdWlyZWQ/W3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXTpbdWUucGF0dGVybihrdCldKSkpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVWaWV3KGUpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLnByb3BhZ2F0ZUNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe313cml0ZVZhbHVlKGUpe3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnttYXBwaW5nRm9ybTp7dmFsaWQ6ITF9fX11cGRhdGVWaWV3KGUpe3RoaXMucHJvcGFnYXRlQ2hhbmdlKGUpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6b28sZGVwczpbe3Rva2VuOm90LlN0b3JlfSx7dG9rZW46WS5UcmFuc2xhdGVTZXJ2aWNlfSx7dG9rZW46SmUuTWF0RGlhbG9nfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOnt1c2VTb3VyY2U6InVzZVNvdXJjZSIscmVxdWlyZWQ6InJlcXVpcmVkIixzb3VyY2VUeXBlczoic291cmNlVHlwZXMiLGRldmljZUluZm9UeXBlOiJkZXZpY2VJbmZvVHlwZSJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pm9vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCIgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiBbY2xhc3MudGItcmVxdWlyZWRdPSJyZXF1aXJlZCIgdHJhbnNsYXRlPmRldmljZS5kZXZpY2U8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZSBuby1wYWRkaW5nIG5vLWdhcCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1uYW1lLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uZW50aXR5LWZpZWxkPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPSJ1c2VTb3VyY2UiIGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8uc291cmNlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWhlYWRlci1jZWxsIHRhYmxlLWNvbHVtbiIgdHJhbnNsYXRlPlxuICAgICAgICBnYXRld2F5LmRldmljZS1pbmZvLmV4cHJlc3Npb25cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtYm9keSBuby1nYXAiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyB0b3Atc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICBbY2xhc3MuYm90dG9tLXNhbWUtcGFkZGluZ109ImRldmljZUluZm9UeXBlICE9PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLm5hbWU8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgcmF3LXZhbHVlLW9wdGlvbiIgKm5nSWY9InVzZVNvdXJjZSI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93LWNlbGwgdGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLWluZm8uZGV2aWNlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCduYW1lLWZpZWxkXCcgfCBnZXRHYXRld2F5SGVscExpbmsgOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3cgdGItZm9ybS1yb3cgbm8tYm9yZGVyIHNhbWUtcGFkZGluZyBib3R0b20tc2FtZS1wYWRkaW5nIlxuICAgICAgICAgICAqbmdJZj0iZGV2aWNlSW5mb1R5cGUgPT09IERldmljZUluZm9UeXBlLkZVTEwiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLWluZm8ucHJvZmlsZS1uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZVByb2ZpbGVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1wcm9maWxlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwncHJvZmlsZS1uYW1lXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlUHJvZmlsZUV4cHJlc3Npb25Tb3VyY2VcJykudmFsdWUgOiBzb3VyY2VUeXBlcyJcbiAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja306aG9zdCAudGItZm9ybS1yb3cuYm90dG9tLXNhbWUtcGFkZGluZ3twYWRkaW5nLWJvdHRvbToxNnB4fTpob3N0IC50Yi1mb3JtLXJvdy50b3Atc2FtZS1wYWRkaW5ne3BhZGRpbmctdG9wOjE2cHh9Omhvc3QgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHt3aWR0aDoxOSV9Omhvc3QgLnRhYmxlLWNvbHVtbnt3aWR0aDo0MCV9Omhvc3QgLnRhYmxlLW5hbWUtY29sdW1ue3dpZHRoOjIwJX06aG9zdCAucmF3LW5hbWV7d2lkdGg6MTklfTpob3N0IC5yYXctdmFsdWUtb3B0aW9ue21heC13aWR0aDo0MCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7ZGlzcGxheTpmbGV4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpndC5IZWxwUG9wdXBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwLXBvcHVwXSwgW3RiLWhlbHAtcG9wdXAtY29udGVudF0iLGlucHV0czpbInRiLWhlbHAtcG9wdXAiLCJ0Yi1oZWxwLXBvcHVwLWNvbnRlbnQiLCJ0cmlnZ2VyLXRleHQiLCJ0cmlnZ2VyLXN0eWxlIiwidGItaGVscC1wb3B1cC1wbGFjZW1lbnQiLCJ0Yi1oZWxwLXBvcHVwLXN0eWxlIiwiaGludE1vZGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIkRldmljZUluZm9UYWJsZUNvbXBvbmVudCIsb28pLEhlKFtOKCldLG9vLnByb3RvdHlwZSwidXNlU291cmNlIix2b2lkIDApLEhlKFtOKCldLG9vLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpvbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItZGV2aWNlLWluZm8tdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5vbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+b28pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgW2NsYXNzLnRiLXJlcXVpcmVkXT0icmVxdWlyZWQiIHRyYW5zbGF0ZT5kZXZpY2UuZGV2aWNlPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUgbm8tcGFkZGluZyBuby1nYXAiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtaGVhZGVyLWNlbGwgdGFibGUtbmFtZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmVudGl0eS1maWVsZDwvZGl2PlxuICAgICAgPGRpdiAqbmdJZj0idXNlU291cmNlIiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnNvdXJjZTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1oZWFkZXItY2VsbCB0YWJsZS1jb2x1bW4iIHRyYW5zbGF0ZT5cbiAgICAgICAgZ2F0ZXdheS5kZXZpY2UtaW5mby5leHByZXNzaW9uXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLWJvZHkgbm8tZ2FwIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgdG9wLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgW2NsYXNzLmJvdHRvbS1zYW1lLXBhZGRpbmddPSJkZXZpY2VJbmZvVHlwZSAhPT0gRGV2aWNlSW5mb1R5cGUuRlVMTCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5uYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIHJhdy12YWx1ZS1vcHRpb24iICpuZ0lmPSJ1c2VTb3VyY2UiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBzb3VyY2VUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXRhYmxlLXJvdy1jZWxsIHRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09IlwnbmFtZS1maWVsZFwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rIDogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tdGFibGUtcm93IHRiLWZvcm0tcm93IG5vLWJvcmRlciBzYW1lLXBhZGRpbmcgYm90dG9tLXNhbWUtcGFkZGluZyJcbiAgICAgICAgICAgKm5nSWY9ImRldmljZUluZm9UeXBlID09PSBEZXZpY2VJbmZvVHlwZS5GVUxMIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLnByb2ZpbGUtbmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCByYXctdmFsdWUtb3B0aW9uIiAqbmdJZj0idXNlU291cmNlIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZSI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS10YWJsZS1yb3ctY2VsbCB0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSJcJ3Byb2ZpbGUtbmFtZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybUdyb3VwLmdldChcJ2RldmljZVByb2ZpbGVFeHByZXNzaW9uU291cmNlXCcpLnZhbHVlIDogc291cmNlVHlwZXMiXG4gICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdwcm9maWxlLW5hbWVcJyB8IGdldEdhdGV3YXlIZWxwTGluazogbWFwcGluZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VQcm9maWxlRXhwcmVzc2lvblNvdXJjZVwnKS52YWx1ZSA6IHNvdXJjZVR5cGVzIlxuICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLWZvcm0tcm93LmJvdHRvbS1zYW1lLXBhZGRpbmd7cGFkZGluZy1ib3R0b206MTZweH06aG9zdCAudGItZm9ybS1yb3cudG9wLXNhbWUtcGFkZGluZ3twYWRkaW5nLXRvcDoxNnB4fTpob3N0IC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7d2lkdGg6MTklfTpob3N0IC50YWJsZS1jb2x1bW57d2lkdGg6NDAlfTpob3N0IC50YWJsZS1uYW1lLWNvbHVtbnt3aWR0aDoyMCV9Omhvc3QgLnJhdy1uYW1le3dpZHRoOjE5JX06aG9zdCAucmF3LXZhbHVlLW9wdGlvbnttYXgtd2lkdGg6NDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm90LlN0b3JlfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7dXNlU291cmNlOlt7dHlwZTphfV0scmVxdWlyZWQ6W3t0eXBlOmF9XSxzb3VyY2VUeXBlczpbe3R5cGU6YX1dLGRldmljZUluZm9UeXBlOlt7dHlwZTphfV19fSk7Y2xhc3MgaW8gZXh0ZW5kcyBQe2NvbnN0cnVjdG9yKGUsdCxuLGEsbyxpLHIscyxsKXtzdXBlcihlLHQsYSksdGhpcy5zdG9yZT1lLHRoaXMucm91dGVyPXQsdGhpcy5kYXRhPW4sdGhpcy5kaWFsb2dSZWY9YSx0aGlzLmZiPW8sdGhpcy5wb3BvdmVyU2VydmljZT1pLHRoaXMucmVuZGVyZXI9cix0aGlzLnZpZXdDb250YWluZXJSZWY9cyx0aGlzLnRyYW5zbGF0ZT1sLHRoaXMuTWFwcGluZ1R5cGU9Zm4sdGhpcy5xdWFsaXR5VHlwZXM9eG4sdGhpcy5RdWFsaXR5VHJhbnNsYXRpb25zTWFwPXZuLHRoaXMuY29udmVydG9yVHlwZXM9T2JqZWN0LnZhbHVlcyh3biksdGhpcy5Db252ZXJ0b3JUeXBlRW51bT13bix0aGlzLkNvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXA9Q24sdGhpcy5zb3VyY2VUeXBlcz1PYmplY3QudmFsdWVzKFRuKSx0aGlzLk9QQ1VhU291cmNlVHlwZXM9T2JqZWN0LnZhbHVlcyhTbiksdGhpcy5PUENVYVNvdXJjZVR5cGVzRW51bT1Tbix0aGlzLnNvdXJjZVR5cGVzRW51bT1Ubix0aGlzLlNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXA9TG4sdGhpcy5yZXF1ZXN0VHlwZXM9T2JqZWN0LnZhbHVlcyhJbiksdGhpcy5SZXF1ZXN0VHlwZUVudW09SW4sdGhpcy5SZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXA9QW4sdGhpcy5EZXZpY2VJbmZvVHlwZT1rbix0aGlzLlNlcnZlclNpZGVSUENUeXBlPVBuLHRoaXMuTWFwcGluZ0tleXNUeXBlPU5uLHRoaXMuTWFwcGluZ0hpbnRUcmFuc2xhdGlvbnNNYXA9Ym4sdGhpcy5NYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLkRhdGFDb252ZXJzaW9uVHJhbnNsYXRpb25zTWFwPUJuLHRoaXMuSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwPWhuLHRoaXMua2V5c1BvcHVwQ2xvc2VkPSEwLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuY3JlYXRlTWFwcGluZ0Zvcm0oKX1nZXQgY29udmVydGVyQXR0cmlidXRlcygpe2lmKHRoaXMuY29udmVydGVyVHlwZSlyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCh0aGlzLmNvbnZlcnRlclR5cGUpLnZhbHVlLmF0dHJpYnV0ZXMubWFwKChlPT5lLmtleSkpfWdldCBjb252ZXJ0ZXJUZWxlbWV0cnkoKXtpZih0aGlzLmNvbnZlcnRlclR5cGUpcmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKS52YWx1ZS50aW1lc2VyaWVzLm1hcCgoZT0+ZS5rZXkpKX1nZXQgb3BjQXR0cmlidXRlcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiYXR0cmlidXRlcyIpLnZhbHVlPy5tYXAoKGU9PmUua2V5KSl8fFtdfWdldCBvcGNUZWxlbWV0cnkoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoInRpbWVzZXJpZXMiKS52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgb3BjUnBjTWV0aG9kcygpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgicnBjX21ldGhvZHMiKS52YWx1ZT8ubWFwKChlPT5lLm1ldGhvZCkpfHxbXX1nZXQgb3BjQXR0cmlidXRlc1VwZGF0ZXMoKXtyZXR1cm4gdGhpcy5tYXBwaW5nRm9ybS5nZXQoImF0dHJpYnV0ZXNfdXBkYXRlcyIpPy52YWx1ZT8ubWFwKChlPT5lLmtleSkpfHxbXX1nZXQgY29udmVydGVyVHlwZSgpe3JldHVybiB0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyIikuZ2V0KCJ0eXBlIikudmFsdWV9Z2V0IGN1c3RvbUtleXMoKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpLmdldCgiY3VzdG9tIikudmFsdWUuZXh0ZW5zaW9uQ29uZmlnKX1nZXQgcmVxdWVzdE1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VHlwZSIpLnZhbHVlfWdldCByZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXQiKTtyZXR1cm4gZS5oYXNFcnJvcigicmVxdWlyZWQiKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtcmVxdWlyZWQiKTplLmhhc0Vycm9yKCJtaW4iKT90aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQtbGltaXRzLWVycm9yIix7bWluOjF9KToiIn1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfWNyZWF0ZU1hcHBpbmdGb3JtKCl7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVEYXRhTWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0Zvcm09dGhpcy5mYi5ncm91cCh7fSksdGhpcy5jcmVhdGVSZXF1ZXN0TWFwcGluZ0Zvcm0oKTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMuY3JlYXRlT1BDVUFNYXBwaW5nRm9ybSgpfX1jYW5jZWwoKXt0aGlzLmtleXNQb3B1cENsb3NlZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5tYXBwaW5nRm9ybS52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5wcmVwYXJlTWFwcGluZ0RhdGEoKSl9bWFuYWdlS2V5cyhlLHQsbil7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBhPXQuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZih0aGlzLnBvcG92ZXJTZXJ2aWNlLmhhc1BvcG92ZXIoYSkpdGhpcy5wb3BvdmVyU2VydmljZS5oaWRlUG9wb3ZlcihhKTtlbHNle2NvbnN0IGU9KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSE9PWZuLk9QQ1VBP3RoaXMubWFwcGluZ0Zvcm0uZ2V0KCJjb252ZXJ0ZXIiKS5nZXQodGhpcy5jb252ZXJ0ZXJUeXBlKTp0aGlzLm1hcHBpbmdGb3JtKS5nZXQobiksdD17a2V5czplLnZhbHVlLGtleXNUeXBlOm4scmF3RGF0YTp0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKT8udmFsdWU9PT13bi5CWVRFUyxwYW5lbFRpdGxlOk1uLmdldChuKSxhZGRLZXlUaXRsZTpFbi5nZXQobiksZGVsZXRlS2V5VGl0bGU6cW4uZ2V0KG4pLG5vS2V5c1RleHQ6RG4uZ2V0KG4pfTt0aGlzLmRhdGEubWFwcGluZ1R5cGU9PT1mbi5PUENVQSYmKHQudmFsdWVUeXBlS2V5cz1PYmplY3QudmFsdWVzKFNuKSx0LnZhbHVlVHlwZUVudW09U24sdC52YWx1ZVR5cGVzPUxuKSx0aGlzLmtleXNQb3B1cENsb3NlZD0hMTtjb25zdCBvPXRoaXMucG9wb3ZlclNlcnZpY2UuZGlzcGxheVBvcG92ZXIoYSx0aGlzLnJlbmRlcmVyLHRoaXMudmlld0NvbnRhaW5lclJlZixhbywibGVmdEJvdHRvbSIsITEsbnVsbCx0LHt9LHt9LHt9LCEwKTtvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLnBvcG92ZXI9byxvLnRiQ29tcG9uZW50UmVmLmluc3RhbmNlLmtleXNEYXRhQXBwbGllZC5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9PntvLmhpZGUoKSxlLnBhdGNoVmFsdWUodCksZS5tYXJrQXNEaXJ0eSgpfSkpLG8udGJIaWRlU3RhcnQucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMua2V5c1BvcHVwQ2xvc2VkPSEwfSkpfX1wcmVwYXJlTWFwcGluZ0RhdGEoKXtjb25zdCBlPXRoaXMubWFwcGluZ0Zvcm0udmFsdWU7c3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjp0LHRvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmF9PWU7cmV0dXJue3RvcGljRmlsdGVyOm4sc3Vic2NyaXB0aW9uUW9zOmEsY29udmVydGVyOnt0eXBlOnQudHlwZSwuLi50W3QudHlwZV19fTtjYXNlIGZuLlJFUVVFU1RTOnJldHVybntyZXF1ZXN0VHlwZTplLnJlcXVlc3RUeXBlLHJlcXVlc3RWYWx1ZTplLnJlcXVlc3RWYWx1ZVtlLnJlcXVlc3RUeXBlXX07ZGVmYXVsdDpyZXR1cm4gZX19Z2V0Rm9ybVZhbHVlRGF0YSgpe2lmKHRoaXMuZGF0YS52YWx1ZSYmT2JqZWN0LmtleXModGhpcy5kYXRhLnZhbHVlKS5sZW5ndGgpc3dpdGNoKHRoaXMuZGF0YS5tYXBwaW5nVHlwZSl7Y2FzZSBmbi5EQVRBOmNvbnN0e2NvbnZlcnRlcjplLHRvcGljRmlsdGVyOnQsc3Vic2NyaXB0aW9uUW9zOm59PXRoaXMuZGF0YS52YWx1ZTtyZXR1cm57dG9waWNGaWx0ZXI6dCxzdWJzY3JpcHRpb25Rb3M6bixjb252ZXJ0ZXI6e3R5cGU6ZS50eXBlLFtlLnR5cGVdOnsuLi5lfX19O2Nhc2UgZm4uUkVRVUVTVFM6cmV0dXJue3JlcXVlc3RUeXBlOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VHlwZSxyZXF1ZXN0VmFsdWU6e1t0aGlzLmRhdGEudmFsdWUucmVxdWVzdFR5cGVdOnRoaXMuZGF0YS52YWx1ZS5yZXF1ZXN0VmFsdWV9fTtkZWZhdWx0OnJldHVybiB0aGlzLmRhdGEudmFsdWV9fWNyZWF0ZURhdGFNYXBwaW5nRm9ybSgpe3RoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgidG9waWNGaWx0ZXIiLHRoaXMuZmIuY29udHJvbCgiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJzdWJzY3JpcHRpb25Rb3MiLHRoaXMuZmIuY29udHJvbCgwKSksdGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJjb252ZXJ0ZXIiLHRoaXMuZmIuZ3JvdXAoe3R5cGU6W3duLkpTT04sW11dLGpzb246dGhpcy5mYi5ncm91cCh7ZGV2aWNlSW5mbzpbe30sW11dLGF0dHJpYnV0ZXM6W1tdLFtdXSx0aW1lc2VyaWVzOltbXSxbXV19KSxieXRlczp0aGlzLmZiLmdyb3VwKHtkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXX0pLGN1c3RvbTp0aGlzLmZiLmdyb3VwKHtleHRlbnNpb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGV4dGVuc2lvbkNvbmZpZzpbe30sW11dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShSZSh0aGlzLm1hcHBpbmdGb3JtLmdldCgiY29udmVydGVyLnR5cGUiKS52YWx1ZSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5tYXBwaW5nRm9ybS5nZXQoImNvbnZlcnRlciIpO3QuZ2V0KCJqc29uIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImJ5dGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImN1c3RvbSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KGUpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9KSl9Y3JlYXRlUmVxdWVzdE1hcHBpbmdGb3JtKCl7dGhpcy5tYXBwaW5nRm9ybS5hZGRDb250cm9sKCJyZXF1ZXN0VHlwZSIsdGhpcy5mYi5jb250cm9sKEluLkNPTk5FQ1RfUkVRVUVTVCxbXSkpLHRoaXMubWFwcGluZ0Zvcm0uYWRkQ29udHJvbCgicmVxdWVzdFZhbHVlIix0aGlzLmZiLmdyb3VwKHtjb25uZWN0UmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86W3t9LFtdXX0pLGRpc2Nvbm5lY3RSZXF1ZXN0czp0aGlzLmZiLmdyb3VwKHt0b3BpY0ZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlSW5mbzpbe30sW11dfSksYXR0cmlidXRlUmVxdWVzdHM6dGhpcy5mYi5ncm91cCh7dG9waWNGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLGRldmljZUluZm86dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sZGV2aWNlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZF1dfSksYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2U6W1RuLk1TRyxbXV0sYXR0cmlidXRlTmFtZUV4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWVFeHByZXNzaW9uOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxyZXRhaW46WyExLFtdXX0pLGF0dHJpYnV0ZVVwZGF0ZXM6dGhpcy5mYi5ncm91cCh7ZGV2aWNlTmFtZUZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sYXR0cmlidXRlRmlsdGVyOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0b3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmV0YWluOlshMCxbXV19KSxzZXJ2ZXJTaWRlUnBjOnRoaXMuZmIuZ3JvdXAoe3R5cGU6W1BuLlRXT19XQVksW11dLGRldmljZU5hbWVGaWx0ZXI6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLG1ldGhvZEZpbHRlcjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVxdWVzdFRvcGljRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY0V4cHJlc3Npb246WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHZhbHVlRXhwcmVzc2lvbjpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scmVzcG9uc2VUb3BpY1FvUzpbMCxbXV0scmVzcG9uc2VUaW1lb3V0OlsxZTQsW3VlLnJlcXVpcmVkLHVlLm1pbigxKV1dfSl9KSksdGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoUmUodGhpcy5tYXBwaW5nRm9ybS5nZXQoInJlcXVlc3RUeXBlIikudmFsdWUpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUiKTt0LmdldCgiY29ubmVjdFJlcXVlc3RzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImRpc2Nvbm5lY3RSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVSZXF1ZXN0cyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJhdHRyaWJ1dGVVcGRhdGVzIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInNlcnZlclNpZGVScGMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldChlKS5lbmFibGUoKX0pKSx0aGlzLm1hcHBpbmdGb3JtLmdldCgicmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMubWFwcGluZ0Zvcm0uZ2V0KCJyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYyIpO2U9PT1Qbi5PTkVfV0FZPyh0LmdldCgicmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgicmVzcG9uc2VUb3BpY1FvUyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSk6KHQuZ2V0KCJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoInJlc3BvbnNlVG9waWNRb1MiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJyZXNwb25zZVRpbWVvdXQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pKX0pKSx0aGlzLm1hcHBpbmdGb3JtLnBhdGNoVmFsdWUodGhpcy5nZXRGb3JtVmFsdWVEYXRhKCkpfWNyZWF0ZU9QQ1VBTWFwcGluZ0Zvcm0oKXt0aGlzLm1hcHBpbmdGb3JtPXRoaXMuZmIuZ3JvdXAoe2RldmljZU5vZGVTb3VyY2U6W1NuLlBBVEgsW11dLGRldmljZU5vZGVQYXR0ZXJuOlsiIixbdWUucmVxdWlyZWRdXSxkZXZpY2VJbmZvOlt7fSxbXV0sYXR0cmlidXRlczpbW10sW11dLHRpbWVzZXJpZXM6W1tdLFtdXSxycGNfbWV0aG9kczpbW10sW11dLGF0dHJpYnV0ZXNfdXBkYXRlczpbW10sW11dfSksdGhpcy5tYXBwaW5nRm9ybS5wYXRjaFZhbHVlKHRoaXMuZ2V0Rm9ybVZhbHVlRGF0YSgpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmlvLGRlcHM6W3t0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfSx7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmlvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLWRpYWxvZyIsdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjxkaXYgW2Zvcm1Hcm91cF09Im1hcHBpbmdGb3JtIiBjbGFzcz0ia2V5LW1hcHBpbmciPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBNYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0iSGVscExpbmtCeU1hcHBpbmdUeXBlTWFwLmdldCh0aGlzLmRhdGEubWFwcGluZ1R5cGUpIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPlxuICAgICAgICB7eyBNYXBwaW5nSGludFRyYW5zbGF0aW9uc01hcC5nZXQodGhpcy5kYXRhPy5tYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJkYXRhLm1hcHBpbmdUeXBlIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5EQVRBIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS50b3BpYy1maWx0ZXI8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZDsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS90b3BpYy1maWx0ZXJfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1Rb3MtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1xdHQtcW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ic3Vic2NyaXB0aW9uUW9zIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcXVhbGl0eVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9ImNvbnZlcnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGF5bG9hZC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBjb252ZXJ0b3JUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyBDb252ZXJ0b3JUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5kYXRhLWNvbnZlcnNpb248L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgICAgICAgICAge3sgRGF0YUNvbnZlcnNpb25UcmFuc2xhdGlvbnNNYXAuZ2V0KGNvbnZlcnRlclR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT0iY29udmVydGVyVHlwZSIgW25nU3dpdGNoXT0iY29udmVydGVyVHlwZSI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJDb252ZXJ0b3JUeXBlRW51bS5KU09OIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkJZVEVTIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NvdXJjZVR5cGVzXT0iW3NvdXJjZVR5cGVzRW51bS5NU0csIHNvdXJjZVR5cGVzRW51bS5DT05TVF0iIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkJZVEVTIHx8IGNvbnZlcnRlclR5cGUgPT09IENvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJjb252ZXJ0ZXJBdHRyaWJ1dGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2YgY29udmVydGVyQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGNvbnZlcnRlclRlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHRlbGVtZXRyeUJ1dHRvbiwgTWFwcGluZ0tleXNUeXBlLlRJTUVTRVJJRVMpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIiAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQ1VTVE9NIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmV4dGVuc2lvbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5leHRlbnNpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZXh0ZW5zaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmV4dGVuc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwnY29udmVydGVyLmN1c3RvbS5leHRlbnNpb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5rZXlzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImN1c3RvbUtleXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBjdXN0b21LZXlzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAja2V5c0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwga2V5c0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkNVU1RPTSkiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdHlwZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFR5cGUiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcXVlc3RUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgUmVxdWVzdFR5cGVzVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0icmVxdWVzdFZhbHVlIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpIiBbbmdTd2l0Y2hdPSJyZXF1ZXN0TWFwcGluZ1R5cGUiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0icmVxdWVzdE1hcHBpbmdUeXBlID09PSBSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5ESVNDT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgW2Zvcm1Db250cm9sXT0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS50b3BpYy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5DT05ORUNUX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5QQVJUSUFMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1JFUVVFU1QiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZnJvbS1kZXZpY2UtcmVxdWVzdC1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnRcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiIGZvcm1Hcm91cE5hbWU9ImRldmljZUluZm8iPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtaW5mby5kZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5kZXZpY2VJbmZvLmRldmljZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uU291cmNlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNvdXJjZVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMuYXR0cmlidXRlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUgdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS50by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlUmVxdWVzdHMudG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJldGFpbi1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkFUVFJJQlVURV9VUERBVEUiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmRldmljZU5hbWVGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuYXR0cmlidXRlLWZpbHRlci1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImF0dHJpYnV0ZUZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5hdHRyaWJ1dGVGaWx0ZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMudmFsdWVFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUgZml4ZWQtdGl0bGUtd2lkdGgiIGZvcm1Db250cm9sTmFtZT0icmV0YWluIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0YWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5TRVJWRVJfU0lERV9SUEMiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgY2VudGVyIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuVFdPX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IlNlcnZlclNpZGVSUENUeXBlLk9ORV9XQVkiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LndpdGhvdXQtcmVzcG9uc2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOYW1lRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tZXRob2QtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ibWV0aG9kRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLm1ldGhvZEZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdFRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXF1ZXN0LXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlcXVlc3RUb3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy50eXBlXCcpLnZhbHVlID09PSBTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUb3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljUW9TIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFF1YWxpdHlUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVGltZW91dCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0icmVzcG9uc2VUaW1lb3V0RXJyb3JUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5yZXNwb25zZVRpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iTWFwcGluZ1R5cGUuT1BDVUEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBhbGlnbi1jZW50ZXIiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5vZGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBkZXZpY2UtY29uZmlnIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVTb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBbT1BDVWFTb3VyY2VUeXBlc0VudW0uUEFUSCwgT1BDVWFTb3VyY2VUeXBlc0VudW0uSURFTlRJRklFUl0iIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBTb3VyY2VUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBkZXZpY2Utbm9kZS1wYXR0ZXJuLWZpZWxkIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VOb2RlUGF0dGVybiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5vZGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVQYXR0ZXJuXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCdkZXZpY2Utbm9kZVwnIHwgZ2V0R2F0ZXdheUhlbHBMaW5rOiBtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlU291cmNlXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbc291cmNlVHlwZXNdPSJPUENVYVNvdXJjZVR5cGVzIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY0F0dHJpYnV0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNBdHRyaWJ1dGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIG9wY0F0dHJpYnV0ZXNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5BVFRSSUJVVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudGltZXNlcmllczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBjbGFzcz0idGItZmxleCIgW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IHRlbGVtZXRyeSBvZiBvcGNUZWxlbWV0cnkiPlxuICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNvcGNUZWxlbWV0cnlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjVGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNBdHRyaWJ1dGVzVXBkYXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlc1VwZGF0ZXMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVNfVVBEQVRFUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnJwYy1tZXRob2RzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJvcGNScGNNZXRob2RzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNScGNNZXRob2RzIj5cbiAgICAgICAgICAgICAgICAgIHt7IGF0dHJpYnV0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAjcnBjTWV0aG9kc0J1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBycGNNZXRob2RzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuUlBDX01FVEhPRFMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJtYXBwaW5nRm9ybS5pbnZhbGlkIHx8ICFtYXBwaW5nRm9ybS5kaXJ0eSB8fCAha2V5c1BvcHVwQ2xvc2VkIj5cbiAgICAgIHt7IHRoaXMuZGF0YS5idXR0b25UaXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2Rpc3BsYXk6Z3JpZDtoZWlnaHQ6MTAwJX06aG9zdCAua2V5LW1hcHBpbmd7bWF4LXdpZHRoOjkwMHB4O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Omhvc3QgLmtleS1tYXBwaW5nIC5tYXQtdG9vbGJhcnttaW4taGVpZ2h0OjY0cHh9Omhvc3QgLmtleS1tYXBwaW5nIHRiLXRvZ2dsZS1zZWxlY3R7cGFkZGluZzo0cHggMH06aG9zdCAubWF0LW1kYy1kaWFsb2ctY29udGVudHtoZWlnaHQ6NjcwcHh9Omhvc3QgLmVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lcnttYXgtd2lkdGg6NzAlfTpob3N0IDo6bmctZGVlcCAua2V5LW1hcHBpbmcgLm1hdC1tZGMtY2hpcC1saXN0Ym94IC5tZGMtZXZvbHV0aW9uLWNoaXAtc2V0X19jaGlwc3tqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDpub3dyYXB9Omhvc3QgOjpuZy1kZWVwIC50Yi1mb3JtLXJvdyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjQwcHg7d2lkdGg6MzUlO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5tYXQtbWRjLWZvcm0tZmllbGR7d2lkdGg6MH06aG9zdCA6Om5nLWRlZXAgLnNlZS1leGFtcGxle3dpZHRoOjMycHg7aGVpZ2h0OjMycHg7bWFyZ2luOjRweH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9Omhvc3QgOjpuZy1kZWVwIC5kZXZpY2UtY29uZmlne2dhcDoxMnB4O3BhZGRpbmctbGVmdDoxMHB4O3BhZGRpbmctcmlnaHQ6MTBweH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1ub2RlLXBhdHRlcm4tZmllbGR7ZmxleC1iYXNpczozJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcCxzZWxlY3RvcjoibWF0LWJhc2ljLWNoaXAsIFttYXQtYmFzaWMtY2hpcF0sIG1hdC1jaGlwLCBbbWF0LWNoaXBdIixpbnB1dHM6WyJyb2xlIiwiaWQiLCJhcmlhLWxhYmVsIiwiYXJpYS1kZXNjcmlwdGlvbiIsInZhbHVlIiwiY29sb3IiLCJyZW1vdmFibGUiLCJoaWdobGlnaHRlZCIsImRpc2FibGVSaXBwbGUiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJyZW1vdmVkIiwiZGVzdHJveWVkIl0sZXhwb3J0QXM6WyJtYXRDaGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6eXQuTWF0Q2hpcExpc3Rib3gsc2VsZWN0b3I6Im1hdC1jaGlwLWxpc3Rib3giLGlucHV0czpbIm11bHRpcGxlIiwiYXJpYS1vcmllbnRhdGlvbiIsInNlbGVjdGFibGUiLCJjb21wYXJlV2l0aCIsInJlcXVpcmVkIiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInZhbHVlIl0sb3V0cHV0czpbImNoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwTmFtZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdIixpbnB1dHM6WyJmb3JtR3JvdXBOYW1lIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTprYSxzZWxlY3RvcjoiW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF0iLGlucHV0czpbInRiLWVsbGlwc2lzLWNoaXAtbGlzdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm9vLHNlbGVjdG9yOiJ0Yi1kZXZpY2UtaW5mby10YWJsZSIsaW5wdXRzOlsidXNlU291cmNlIiwicmVxdWlyZWQiLCJzb3VyY2VUeXBlcyIsImRldmljZUluZm9UeXBlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTpUYSxuYW1lOiJnZXRHYXRld2F5SGVscExpbmsifV19KX19ZSgiTWFwcGluZ0RpYWxvZ0NvbXBvbmVudCIsaW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6aW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1hcHBpbmctZGlhbG9nIix0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPGRpdiBbZm9ybUdyb3VwXT0ibWFwcGluZ0Zvcm0iIGNsYXNzPSJrZXktbWFwcGluZyI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IE1hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9oMj5cbiAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgIDxkaXYgW3RiLWhlbHBdPSJIZWxwTGlua0J5TWFwcGluZ1R5cGVNYXAuZ2V0KHRoaXMuZGF0YS5tYXBwaW5nVHlwZSkiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+XG4gICAgICAgIHt7IE1hcHBpbmdIaW50VHJhbnNsYXRpb25zTWFwLmdldCh0aGlzLmRhdGE/Lm1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09ImRhdGEubWFwcGluZ1R5cGUiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLkRBVEEiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnRvcGljLWZpbHRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0ZpbHRlciIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudG9waWMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L3RvcGljLWZpbHRlcl9mblwnIlxuICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLVFvcy1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3NcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzdWJzY3JpcHRpb25Rb3MiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBxdWFsaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICB7eyBRdWFsaXR5VHJhbnNsYXRpb25zTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0iY29udmVydGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXlsb2FkLXR5cGU8L2Rpdj5cbiAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIGNvbnZlcnRvclR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgIHt7IENvbnZlcnRvclR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmRhdGEtY29udmVyc2lvbjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj5cbiAgICAgICAgICAgICAgICB7eyBEYXRhQ29udmVyc2lvblRyYW5zbGF0aW9uc01hcC5nZXQoY29udmVydGVyVHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cE5hbWVdPSJjb252ZXJ0ZXJUeXBlIiBbbmdTd2l0Y2hdPSJjb252ZXJ0ZXJUeXBlIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkNvbnZlcnRvclR5cGVFbnVtLkpTT04iPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQ29udmVydG9yVHlwZUVudW0uQllURVMiPlxuICAgICAgICAgICAgICAgICAgPHRiLWRldmljZS1pbmZvLXRhYmxlIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlSW5mbyIgW2RldmljZUluZm9UeXBlXT0iRGV2aWNlSW5mb1R5cGUuRlVMTCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc291cmNlVHlwZXNdPSJbc291cmNlVHlwZXNFbnVtLk1TRywgc291cmNlVHlwZXNFbnVtLkNPTlNUXSIgcmVxdWlyZWQ9InRydWUiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1kZXZpY2UtaW5mby10YWJsZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj0iY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uQllURVMgfHwgY29udmVydGVyVHlwZSA9PT0gQ29udmVydG9yVHlwZUVudW0uSlNPTiI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImNvbnZlcnRlckF0dHJpYnV0ZXMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBjb252ZXJ0ZXJBdHRyaWJ1dGVzIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBhdHRyaWJ1dGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnRpbWVzZXJpZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgY29udmVydGVyVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVsZW1ldHJ5IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGVsZW1ldHJ5QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuVElNRVNFUklFUykiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciICpuZ0lmPSJjb252ZXJ0ZXJUeXBlID09PSBDb252ZXJ0b3JUeXBlRW51bS5DVVNUT00iPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmV4dGVuc2lvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJleHRlbnNpb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZXh0ZW5zaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdjb252ZXJ0ZXIuY3VzdG9tLmV4dGVuc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ2NvbnZlcnRlci5jdXN0b20uZXh0ZW5zaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiBzYW1lLXBhZGRpbmcgdGItZmxleCBjb2x1bW4iPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5leHRlbnNpb24tY29uZmlndXJhdGlvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIj57eyBcJ2dhdGV3YXkuZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24taGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmtleXM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iY3VzdG9tS2V5cyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIGN1c3RvbUtleXMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbGVtZXRyeSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNrZXlzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBrZXlzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQ1VTVE9NKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVxdWVzdC10eXBlPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgcmVxdWVzdFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBSZXF1ZXN0VHlwZXNUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJyZXF1ZXN0VmFsdWUiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkiIFtuZ1N3aXRjaF09InJlcXVlc3RNYXBwaW5nVHlwZSI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJyZXF1ZXN0TWFwcGluZ1R5cGUgPT09IFJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNYXBwaW5nVHlwZSA9PT0gUmVxdWVzdFR5cGVFbnVtLkRJU0NPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG9waWMtZmlsdGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBbZm9ybUNvbnRyb2xdPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWVcJykuZ2V0KHJlcXVlc3RNYXBwaW5nVHlwZSkuZ2V0KFwndG9waWNGaWx0ZXJcJykiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnRvcGljLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlXCcpLmdldChyZXF1ZXN0TWFwcGluZ1R5cGUpLmdldChcJ3RvcGljRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZVwnKS5nZXQocmVxdWVzdE1hcHBpbmdUeXBlKS5nZXQoXCd0b3BpY0ZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvdG9waWMtZmlsdGVyX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLkNPTk5FQ1RfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8dGItZGV2aWNlLWluZm8tdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VJbmZvIiBbZGV2aWNlSW5mb1R5cGVdPSJEZXZpY2VJbmZvVHlwZS5GVUxMIiByZXF1aXJlZD0idHJ1ZSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uRElTQ09OTkVDVF9SRVFVRVNUIj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLlBBUlRJQUwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICAgICAgICAgIDwvdGItZGV2aWNlLWluZm8tdGFibGU+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IlJlcXVlc3RUeXBlRW51bS5BVFRSSUJVVEVfUkVRVUVTVCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5mcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LmZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MtaGludFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciIgZm9ybUdyb3VwTmFtZT0iZGV2aWNlSW5mbyI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1pbmZvLmRldmljZS1uYW1lLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSIobWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmRldmljZUluZm8uZGV2aWNlTmFtZUV4cHJlc3Npb25cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cC1zdHlsZV09InttYXhXaWR0aDogXCc5NzBweFwnfSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb25Tb3VyY2UiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc291cmNlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgU291cmNlVHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlTmFtZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hdHRyaWJ1dGUtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy5hdHRyaWJ1dGVOYW1lRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVJlcXVlc3RzLmF0dHJpYnV0ZU5hbWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkudG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnRvLWRldmljZS1yZXNwb25zZS1zZXR0aW5ncy1oaW50XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdmFsdWUtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZUV4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy52YWx1ZUV4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ0b3BpY0V4cHJlc3Npb24iIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVSZXF1ZXN0cy50b3BpY0V4cHJlc3Npb25cJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGItaGVscC1wb3B1cF09Ilwnd2lkZ2V0L2xpYi9nYXRld2F5L2V4cHJlc3Npb25zX2ZuXCciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldGFpbiI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmV0YWluLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJSZXF1ZXN0VHlwZUVudW0uQVRUUklCVVRFX1VQREFURSI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuZGV2aWNlTmFtZUZpbHRlclwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5hdHRyaWJ1dGUtZmlsdGVyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXJcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlRmlsdGVyIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLmF0dHJpYnV0ZUZpbHRlclwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLmF0dHJpYnV0ZVVwZGF0ZXMuYXR0cmlidXRlRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5yZXNwb25zZS12YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuYXR0cmlidXRlVXBkYXRlcy52YWx1ZUV4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnZhbHVlRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5hdHRyaWJ1dGVVcGRhdGVzLnRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSBmaXhlZC10aXRsZS13aWR0aCIgZm9ybUNvbnRyb2xOYW1lPSJyZXRhaW4iPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5yZXRhaW4taGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRhaW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iUmVxdWVzdFR5cGVFbnVtLlNFUlZFUl9TSURFX1JQQyI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBjZW50ZXIgYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJTZXJ2ZXJTaWRlUlBDVHlwZS5UV09fV0FZIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS53aXRoLXJlc3BvbnNlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iU2VydmVyU2lkZVJQQ1R5cGUuT05FX1dBWSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkud2l0aG91dC1yZXNwb25zZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWVGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5kZXZpY2VOYW1lRmlsdGVyXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1ldGhvZC1maWx0ZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWV0aG9kLWZpbHRlclwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2RGaWx0ZXIiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkubWV0aG9kLWZpbHRlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMubWV0aG9kRmlsdGVyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nRm9ybS5nZXQoXCdyZXF1ZXN0VmFsdWUuc2VydmVyU2lkZVJwYy5tZXRob2RGaWx0ZXJcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0VG9waWNFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVxdWVzdFRvcGljRXhwcmVzc2lvblwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwXT0iXCd3aWRnZXQvbGliL2dhdGV3YXkvZXhwcmVzc2lvbnNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnZhbHVlLWV4cHJlc3Npb248L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmFsdWVFeHByZXNzaW9uIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnZhbHVlRXhwcmVzc2lvblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMudmFsdWVFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXAtc3R5bGVdPSJ7bWF4V2lkdGg6IFwnOTcwcHhcJ30iPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9Im1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnR5cGVcJykudmFsdWUgPT09IFNlcnZlclNpZGVSUENUeXBlLlRXT19XQVkiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXNwb25zZVRvcGljRXhwcmVzc2lvbiIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnJlc3BvbnNlLXRvcGljLWV4cHJlc3Npb24tcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ibWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUb3BpY0V4cHJlc3Npb25cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVG9waWNFeHByZXNzaW9uXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2VlLWV4YW1wbGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9leHByZXNzaW9uc19mblwnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRiLWhlbHAtcG9wdXAtcGxhY2VtZW50PSJsZWZ0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVzcG9uc2UtdG9waWMtUW9zXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InJlc3BvbnNlVG9waWNRb1MiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHF1YWxpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUXVhbGl0eVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkucmVzcG9uc2UtdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0icmVzcG9uc2VUaW1lb3V0IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJyZXNwb25zZVRpbWVvdXRFcnJvclRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdGb3JtLmdldChcJ3JlcXVlc3RWYWx1ZS5zZXJ2ZXJTaWRlUnBjLnJlc3BvbnNlVGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwncmVxdWVzdFZhbHVlLnNlcnZlclNpZGVScGMucmVzcG9uc2VUaW1lb3V0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJNYXBwaW5nVHlwZS5PUENVQSI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1mbGV4IGFsaWduLWNlbnRlciIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1oaW50XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5kZXZpY2Utbm9kZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGRldmljZS1jb25maWciPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTm9kZVNvdXJjZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIFtPUENVYVNvdXJjZVR5cGVzRW51bS5QQVRILCBPUENVYVNvdXJjZVR5cGVzRW51bS5JREVOVElGSUVSXSIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFNvdXJjZVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGRldmljZS1ub2RlLXBhdHRlcm4tZmllbGQiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5vZGVQYXR0ZXJuIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2Utbm9kZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihtYXBwaW5nRm9ybS5nZXQoXCdkZXZpY2VOb2RlUGF0dGVyblwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ0Zvcm0uZ2V0KFwnZGV2aWNlTm9kZVBhdHRlcm5cJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InNlZS1leGFtcGxlIlxuICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ2RldmljZS1ub2RlXCcgfCBnZXRHYXRld2F5SGVscExpbms6IG1hcHBpbmdGb3JtLmdldChcJ2RldmljZU5vZGVTb3VyY2VcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICB0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudD0ibGVmdCJcbiAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDx0Yi1kZXZpY2UtaW5mby10YWJsZSBmb3JtQ29udHJvbE5hbWU9ImRldmljZUluZm8iIFtzb3VyY2VUeXBlc109Ik9QQ1VhU291cmNlVHlwZXMiIFtkZXZpY2VJbmZvVHlwZV09IkRldmljZUluZm9UeXBlLkZVTEwiIHJlcXVpcmVkPSJ0cnVlIj5cbiAgICAgICAgICA8L3RiLWRldmljZS1pbmZvLXRhYmxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjQXR0cmlidXRlcyIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCBhdHRyaWJ1dGUgb2Ygb3BjQXR0cmlidXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY0F0dHJpYnV0ZXNCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgb3BjQXR0cmlidXRlc0J1dHRvbiwgTWFwcGluZ0tleXNUeXBlLkFUVFJJQlVURVMpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4Ij5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0Ym94IGNsYXNzPSJ0Yi1mbGV4IiBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0ib3BjVGVsZW1ldHJ5Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgdGVsZW1ldHJ5IG9mIG9wY1RlbGVtZXRyeSI+XG4gICAgICAgICAgICAgICAgICB7eyB0ZWxlbWV0cnkgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI29wY1RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZUtleXMoJGV2ZW50LCBvcGNUZWxlbWV0cnlCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5USU1FU0VSSUVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuYXR0cmlidXRlLXVwZGF0ZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY0F0dHJpYnV0ZXNVcGRhdGVzIiBjbGFzcz0idGItZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBvcGNBdHRyaWJ1dGVzVXBkYXRlcyI+XG4gICAgICAgICAgICAgICAgICB7eyBhdHRyaWJ1dGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgI2F0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIGF0dHJpYnV0ZXNVcGRhdGVzQnV0dG9uLCBNYXBwaW5nS2V5c1R5cGUuQVRUUklCVVRFU19VUERBVEVTKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucnBjLW1ldGhvZHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggZWxsaXBzaXMtY2hpcHMtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09Im9wY1JwY01ldGhvZHMiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgYXR0cmlidXRlIG9mIG9wY1JwY01ldGhvZHMiPlxuICAgICAgICAgICAgICAgICAge3sgYXR0cmlidXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICNycGNNZXRob2RzQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY01ldGhvZHNCdXR0b24sIE1hcHBpbmdLZXlzVHlwZS5SUENfTUVUSE9EUykiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09Im1hcHBpbmdGb3JtLmludmFsaWQgfHwgIW1hcHBpbmdGb3JtLmRpcnR5IHx8ICFrZXlzUG9wdXBDbG9zZWQiPlxuICAgICAge3sgdGhpcy5kYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7ZGlzcGxheTpncmlkO2hlaWdodDoxMDAlfTpob3N0IC5rZXktbWFwcGluZ3ttYXgtd2lkdGg6OTAwcHg7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn06aG9zdCAua2V5LW1hcHBpbmcgLm1hdC10b29sYmFye21pbi1oZWlnaHQ6NjRweH06aG9zdCAua2V5LW1hcHBpbmcgdGItdG9nZ2xlLXNlbGVjdHtwYWRkaW5nOjRweCAwfTpob3N0IC5tYXQtbWRjLWRpYWxvZy1jb250ZW50e2hlaWdodDo2NzBweH06aG9zdCAuZWxsaXBzaXMtY2hpcHMtY29udGFpbmVye21heC13aWR0aDo3MCV9Omhvc3QgOjpuZy1kZWVwIC5rZXktbWFwcGluZyAubWF0LW1kYy1jaGlwLWxpc3Rib3ggLm1kYy1ldm9sdXRpb24tY2hpcC1zZXRfX2NoaXBze2p1c3RpZnktY29udGVudDpmbGV4LWVuZDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOm5vd3JhcH06aG9zdCA6Om5nLWRlZXAgLnRiLWZvcm0tcm93IC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6NDBweDt3aWR0aDozNSU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAudGItZm9ybS1yb3cgLm1hdC1tZGMtZm9ybS1maWVsZHt3aWR0aDowfTpob3N0IDo6bmctZGVlcCAuc2VlLWV4YW1wbGV7d2lkdGg6MzJweDtoZWlnaHQ6MzJweDttYXJnaW46NHB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH06aG9zdCA6Om5nLWRlZXAgLmRldmljZS1jb25maWd7Z2FwOjEycHg7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fTpob3N0IDo6bmctZGVlcCAuZGV2aWNlLW5vZGUtcGF0dGVybi1maWVsZHtmbGV4LWJhc2lzOjMlfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn0se3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSk7Y2xhc3Mgcm97c2V0IG1hcHBpbmdUeXBlKGUpe3RoaXMubWFwcGluZ1R5cGVWYWx1ZSE9PWUmJih0aGlzLm1hcHBpbmdUeXBlVmFsdWU9ZSl9Z2V0IG1hcHBpbmdUeXBlKCl7cmV0dXJuIHRoaXMubWFwcGluZ1R5cGVWYWx1ZX1jb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLnRyYW5zbGF0ZT1lLHRoaXMuZGlhbG9nPXQsdGhpcy5kaWFsb2dTZXJ2aWNlPW4sdGhpcy5mYj1hLHRoaXMucmVxdWlyZWQ9ITEsdGhpcy5tYXBwaW5nVHlwZVRyYW5zbGF0aW9uc01hcD15bix0aGlzLm1hcHBpbmdUeXBlRW51bT1mbix0aGlzLmRpc3BsYXllZENvbHVtbnM9W10sdGhpcy5tYXBwaW5nQ29sdW1ucz1bXSx0aGlzLnRleHRTZWFyY2hNb2RlPSExLHRoaXMuaGlkZVBhZ2VTaXplPSExLHRoaXMuYWN0aXZlVmFsdWU9ITEsdGhpcy5kaXJ0eVZhbHVlPSExLHRoaXMudGV4dFNlYXJjaD10aGlzLmZiLmNvbnRyb2woIiIse25vbk51bGxhYmxlOiEwfSksdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFwcGluZ0Zvcm1Hcm91cD10aGlzLmZiLmFycmF5KFtdKSx0aGlzLmRpcnR5VmFsdWU9IXRoaXMuYWN0aXZlVmFsdWUsdGhpcy5kYXRhU291cmNlPW5ldyBzb31uZ09uSW5pdCgpe3RoaXMuc2V0TWFwcGluZ0NvbHVtbnMoKSx0aGlzLmRpc3BsYXllZENvbHVtbnMucHVzaCguLi50aGlzLm1hcHBpbmdDb2x1bW5zLm1hcCgoZT0+ZS5kZWYpKSwiYWN0aW9ucyIpLHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVUYWJsZURhdGEoZSksdGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGV4dFNlYXJjaC52YWx1ZUNoYW5nZXMucGlwZShWZSgxNTApLEJlKCgoZSx0KT0+KGU/PyIiKT09PXQudHJpbSgpKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9ZS50cmltKCk7dGhpcy51cGRhdGVUYWJsZURhdGEodGhpcy5tYXBwaW5nRm9ybUdyb3VwLnZhbHVlLHQudHJpbSgpKX0pKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5tYXBwaW5nRm9ybUdyb3VwLmNsZWFyKCksdGhpcy5wdXNoRGF0YUFzRm9ybUFycmF5cyhlKX12YWxpZGF0ZSgpe3JldHVybiF0aGlzLnJlcXVpcmVkfHx0aGlzLm1hcHBpbmdGb3JtR3JvdXAuY29udHJvbHMubGVuZ3RoP251bGw6e21hcHBpbmdGb3JtR3JvdXA6e3ZhbGlkOiExfX19ZW50ZXJGaWx0ZXJNb2RlKCl7dGhpcy50ZXh0U2VhcmNoTW9kZT0hMCxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5zZWFyY2hJbnB1dEZpZWxkLm5hdGl2ZUVsZW1lbnQuc2V0U2VsZWN0aW9uUmFuZ2UoMCwwKX0pLDEwKX1leGl0RmlsdGVyTW9kZSgpe3RoaXMudXBkYXRlVGFibGVEYXRhKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VNYXBwaW5nKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPWllKHQpP3RoaXMubWFwcGluZ0Zvcm1Hcm91cC5hdCh0KS52YWx1ZTp7fTt0aGlzLmRpYWxvZy5vcGVuKGlvLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7bWFwcGluZ1R5cGU6dGhpcy5tYXBwaW5nVHlwZSx2YWx1ZTpuLGJ1dHRvblRpdGxlOnJlKHQpPyJhY3Rpb24uYWRkIjoiYWN0aW9uLmFwcGx5In19KS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihpZSh0KT90aGlzLm1hcHBpbmdGb3JtR3JvdXAuYXQodCkucGF0Y2hWYWx1ZShlKTp0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKFtlXSksdGhpcy5tYXBwaW5nRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfXVwZGF0ZVRhYmxlRGF0YShlLHQpe2xldCBuPWUubWFwKChlPT50aGlzLmdldE1hcHBpbmdWYWx1ZShlKSkpO3QmJihuPW4uZmlsdGVyKChlPT5PYmplY3QudmFsdWVzKGUpLnNvbWUoKGU9PmUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHQudG9Mb3dlckNhc2UoKSkpKSkpKSx0aGlzLmRhdGFTb3VyY2UubG9hZERhdGEobil9ZGVsZXRlTWFwcGluZyhlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtbWFwcGluZy10aXRsZSIpLCIiLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi5ubyIpLHRoaXMudHJhbnNsYXRlLmluc3RhbnQoImFjdGlvbi55ZXMiKSwhMCkuc3Vic2NyaWJlKChlPT57ZSYmKHRoaXMubWFwcGluZ0Zvcm1Hcm91cC5yZW1vdmVBdCh0KSx0aGlzLm1hcHBpbmdGb3JtR3JvdXAubWFya0FzRGlydHkoKSl9KSl9cHVzaERhdGFBc0Zvcm1BcnJheXMoZSl7ZT8ubGVuZ3RoJiZlLmZvckVhY2goKGU9PnRoaXMubWFwcGluZ0Zvcm1Hcm91cC5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1nZXRNYXBwaW5nVmFsdWUoZSl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTpjb25zdCB0PUNuLmdldChlLmNvbnZlcnRlcj8udHlwZSk7cmV0dXJue3RvcGljRmlsdGVyOmUudG9waWNGaWx0ZXIsUW9TOmUuc3Vic2NyaXB0aW9uUW9zLGNvbnZlcnRlcjp0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQodCk6IiJ9O2Nhc2UgZm4uUkVRVUVTVFM6bGV0IG47Y29uc3QgYT1lO3JldHVybiBuPWEucmVxdWVzdFR5cGU9PT1Jbi5BVFRSSUJVVEVfVVBEQVRFP2EucmVxdWVzdFZhbHVlLmF0dHJpYnV0ZUZpbHRlcjphLnJlcXVlc3RUeXBlPT09SW4uU0VSVkVSX1NJREVfUlBDP2EucmVxdWVzdFZhbHVlLm1ldGhvZEZpbHRlcjphLnJlcXVlc3RWYWx1ZS50b3BpY0ZpbHRlcix7cmVxdWVzdFR5cGU6ZS5yZXF1ZXN0VHlwZSx0eXBlOnRoaXMudHJhbnNsYXRlLmluc3RhbnQoQW4uZ2V0KGUucmVxdWVzdFR5cGUpKSxkZXRhaWxzOm59O2Nhc2UgZm4uT1BDVUE6Y29uc3Qgbz1lLmRldmljZUluZm8/LmRldmljZU5hbWVFeHByZXNzaW9uLGk9ZS5kZXZpY2VJbmZvPy5kZXZpY2VQcm9maWxlRXhwcmVzc2lvbix7ZGV2aWNlTm9kZVBhdHRlcm46cn09ZTtyZXR1cm57ZGV2aWNlTm9kZVBhdHRlcm46cixkZXZpY2VOYW1lUGF0dGVybjpvLGRldmljZVByb2ZpbGVFeHByZXNzaW9uOml9O2RlZmF1bHQ6cmV0dXJue319fXNldE1hcHBpbmdDb2x1bW5zKCl7c3dpdGNoKHRoaXMubWFwcGluZ1R5cGUpe2Nhc2UgZm4uREFUQTp0aGlzLm1hcHBpbmdDb2x1bW5zLnB1c2goe2RlZjoidG9waWNGaWx0ZXIiLHRpdGxlOiJnYXRld2F5LnRvcGljLWZpbHRlciJ9LHtkZWY6IlFvUyIsdGl0bGU6ImdhdGV3YXkubXF0dC1xb3MifSx7ZGVmOiJjb252ZXJ0ZXIiLHRpdGxlOiJnYXRld2F5LnBheWxvYWQtdHlwZSJ9KTticmVhaztjYXNlIGZuLlJFUVVFU1RTOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJ0eXBlIix0aXRsZToiZ2F0ZXdheS50eXBlIn0se2RlZjoiZGV0YWlscyIsdGl0bGU6ImdhdGV3YXkuZGV0YWlscyJ9KTticmVhaztjYXNlIGZuLk9QQ1VBOnRoaXMubWFwcGluZ0NvbHVtbnMucHVzaCh7ZGVmOiJkZXZpY2VOb2RlUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5vZGUifSx7ZGVmOiJkZXZpY2VOYW1lUGF0dGVybiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLW5hbWUifSx7ZGVmOiJkZXZpY2VQcm9maWxlRXhwcmVzc2lvbiIsdGl0bGU6ImdhdGV3YXkuZGV2aWNlLXByb2ZpbGUifSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cm8sZGVwczpbe3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpybyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czp7cmVxdWlyZWQ6InJlcXVpcmVkIixtYXBwaW5nVHlwZToibWFwcGluZ1R5cGUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+cm8pKSxtdWx0aTohMH1dLHZpZXdRdWVyaWVzOlt7cHJvcGVydHlOYW1lOiJzZWFyY2hJbnB1dEZpZWxkIixmaXJzdDohMCxwcmVkaWNhdGU6WyJzZWFyY2hJbnB1dCJdLGRlc2NlbmRhbnRzOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLW1hcHBpbmctdGFibGUgdGItYWJzb2x1dGUtZmlsbCI+XG4gIDxkaXYgZnhGbGV4IGZ4TGF5b3V0PSJjb2x1bW4iIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXBwaW5nLXRhYmxlLXRpdGxlIj57e21hcHBpbmdUeXBlVHJhbnNsYXRpb25zTWFwLmdldChtYXBwaW5nVHlwZSkgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJlbnRlckZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5zZWFyY2hcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0idGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD5cbiAgICAgICAgICA8bWF0LWxhYmVsPiZuYnNwOzwvbWF0LWxhYmVsPlxuICAgICAgICAgIDxpbnB1dCAjc2VhcmNoSW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0idGV4dFNlYXJjaCJcbiAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnY29tbW9uLmVudGVyLXNlYXJjaFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9ImV4aXRGaWx0ZXJNb2RlKCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uY2xvc2VcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPGRpdiBjbGFzcz0idGFibGUtY29udGFpbmVyIj5cbiAgICAgIDx0YWJsZSBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPSJkYXRhU291cmNlIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iY29sdW1uLmRlZiIgKm5nRm9yPSJsZXQgY29sdW1uIG9mIG1hcHBpbmdDb2x1bW5zOyBsZXQgaSA9IGluZGV4Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi50aXRsZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCB0YlRydW5jYXRlV2l0aFRvb2x0aXAgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucmVxdWVzdC1jb2x1bW5dPSJtYXBwaW5nVHlwZSA9PT0gbWFwcGluZ1R5cGVFbnVtLlJFUVVFU1RTIj5cbiAgICAgICAgICAgIHt7IG1hcHBpbmdbY29sdW1uLmRlZl0gfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImFjdGlvbnMiIHN0aWNreUVuZD5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJywgdGV4dEFsaWduOiBcJ2NlbnRlclwnfSI+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgbWFwcGluZzsgbGV0IGkgPSBpbmRleCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCd9Ij5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcm93QWN0aW9ucz5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlTWFwcGluZygkZXZlbnQsIGkpIj5cbiAgICAgICAgICAgICAgICA8dGItaWNvbj5kZWxldGU8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cubHQtbGcgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09ImNlbGxBY3Rpb25zTWVudSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+bW9yZV92ZXJ0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtbWVudSAjY2VsbEFjdGlvbnNNZW51PSJtYXRNZW51IiB4UG9zaXRpb249ImJlZm9yZSI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InJvd0FjdGlvbnMiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBbbmdDbGFzc109IntcJ21hdC1yb3ctc2VsZWN0XCc6IHRydWV9IiAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93ICptYXRSb3dEZWY9ImxldCBtYXBwaW5nOyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICAgIDxzZWN0aW9uIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUgJiYgKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpIiBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1oZWFkbGluZS01IHRiLWFic29sdXRlLWZpbGwgdGItYWRkLW5ldyI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjbGFzcz0iY29ubmVjdG9yIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnR7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOiNmZmY7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQudGItb3V0bGluZWQtYm9yZGVye2JveC1zaGFkb3c6MCAwICMwMDAzLDAgMCAjMDAwMDAwMjQsMCAwICMwMDAwMDAxZjtib3JkZXI6c29saWQgMXB4ICNlMGUwZTA7Ym9yZGVyLXJhZGl1czo0cHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRpdGxlLWNvbnRhaW5lcntvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGItbWFwcGluZy10YWJsZS10aXRsZXtwYWRkaW5nLXJpZ2h0OjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lcntvdmVyZmxvdzphdXRvfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1ue3BhZGRpbmc6MCAxMnB4O3dpZHRoOjIzJX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbi5yZXF1ZXN0LWNvbHVtbnt3aWR0aDozOCV9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAuZWxsaXBzaXN7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctYm90dG9tOjVweDt3aWR0aDoxMDAlfX06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbHtjdXJzb3I6cG9pbnRlcn06aG9zdCA6Om5nLWRlZXAgbWF0LWNlbGwudGItdmFsdWUtY2VsbCAubWF0LWljb257aGVpZ2h0OjI0cHg7d2lkdGg6MjRweDtmb250LXNpemU6MjRweDtjb2xvcjojNzU3NTc1fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nQ2xhc3Msc2VsZWN0b3I6IltuZ0NsYXNzXSIsaW5wdXRzOlsiY2xhc3MiLCJuZ0NsYXNzIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6InBpcGUiLHR5cGU6Xy5Bc3luY1BpcGUsbmFtZToiYXN5bmMifSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdENsYXNzRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ0NsYXNzXSwgW25nQ2xhc3MueHNdLCBbbmdDbGFzcy5zbV0sIFtuZ0NsYXNzLm1kXSwgW25nQ2xhc3MubGddLCBbbmdDbGFzcy54bF0sICBbbmdDbGFzcy5sdC1zbV0sIFtuZ0NsYXNzLmx0LW1kXSwgW25nQ2xhc3MubHQtbGddLCBbbmdDbGFzcy5sdC14bF0sICBbbmdDbGFzcy5ndC14c10sIFtuZ0NsYXNzLmd0LXNtXSwgW25nQ2xhc3MuZ3QtbWRdLCBbbmdDbGFzcy5ndC1sZ10iLGlucHV0czpbIm5nQ2xhc3MiLCJuZ0NsYXNzLnhzIiwibmdDbGFzcy5zbSIsIm5nQ2xhc3MubWQiLCJuZ0NsYXNzLmxnIiwibmdDbGFzcy54bCIsIm5nQ2xhc3MubHQtc20iLCJuZ0NsYXNzLmx0LW1kIiwibmdDbGFzcy5sdC1sZyIsIm5nQ2xhc3MubHQteGwiLCJuZ0NsYXNzLmd0LXhzIiwibmdDbGFzcy5ndC1zbSIsIm5nQ2xhc3MuZ3QtbWQiLCJuZ0NsYXNzLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U3R5bGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW25nU3R5bGVdLCAgW25nU3R5bGUueHNdLCBbbmdTdHlsZS5zbV0sIFtuZ1N0eWxlLm1kXSwgW25nU3R5bGUubGddLCBbbmdTdHlsZS54bF0sICBbbmdTdHlsZS5sdC1zbV0sIFtuZ1N0eWxlLmx0LW1kXSwgW25nU3R5bGUubHQtbGddLCBbbmdTdHlsZS5sdC14bF0sICBbbmdTdHlsZS5ndC14c10sIFtuZ1N0eWxlLmd0LXNtXSwgW25nU3R5bGUuZ3QtbWRdLCBbbmdTdHlsZS5ndC1sZ10iLGlucHV0czpbIm5nU3R5bGUiLCJuZ1N0eWxlLnhzIiwibmdTdHlsZS5zbSIsIm5nU3R5bGUubWQiLCJuZ1N0eWxlLmxnIiwibmdTdHlsZS54bCIsIm5nU3R5bGUubHQtc20iLCJuZ1N0eWxlLmx0LW1kIiwibmdTdHlsZS5sdC1sZyIsIm5nU3R5bGUubHQteGwiLCJuZ1N0eWxlLmd0LXhzIiwibmdTdHlsZS5ndC1zbSIsIm5nU3R5bGUuZ3QtbWQiLCJuZ1N0eWxlLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJ0LlRiSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItaWNvbiIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbInRiSWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIk1hcHBpbmdUYWJsZUNvbXBvbmVudCIscm8pLEhlKFtOKCldLHJvLnByb3RvdHlwZSwicmVxdWlyZWQiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpybyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbWFwcGluZy10YWJsZSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ybykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFwcGluZy10YWJsZSB0Yi1hYnNvbHV0ZS1maWxsIj5cbiAgPGRpdiBmeEZsZXggZnhMYXlvdXQ9ImNvbHVtbiIgY2xhc3M9InRiLW1hcHBpbmctdGFibGUtY29udGVudCI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSIhdGV4dFNlYXJjaE1vZGUiPlxuICAgICAgPGRpdiBjbGFzcz0ibWF0LXRvb2xiYXItdG9vbHMiICpuZ0lmPSIoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykgPT09IGZhbHNlIj5cbiAgICAgICAgPGRpdiBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJzdGFydCBjZW50ZXIiIGZ4TGF5b3V0LnhzPSJjb2x1bW4iIGZ4TGF5b3V0QWxpZ24ueHM9ImNlbnRlciBzdGFydCIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9InRiLW1hcHBpbmctdGFibGUtdGl0bGUiPnt7bWFwcGluZ1R5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KG1hcHBpbmdUeXBlKSB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VNYXBwaW5nKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJjb2x1bW4uZGVmIiAqbmdGb3I9ImxldCBjb2x1bW4gb2YgbWFwcGluZ0NvbHVtbnM7IGxldCBpID0gaW5kZXgiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgY29sdW1uLnRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCAqbWF0Q2VsbERlZj0ibGV0IG1hcHBpbmciIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yZXF1ZXN0LWNvbHVtbl09Im1hcHBpbmdUeXBlID09PSBtYXBwaW5nVHlwZUVudW0uUkVRVUVTVFMiPlxuICAgICAgICAgICAge3sgbWFwcGluZ1tjb2x1bW4uZGVmXSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCc5NnB4XCcsIG1heFdpZHRoOiBcJzk2cHhcJywgd2lkdGg6IFwnOTZweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBtYXBwaW5nOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZU1hcHBpbmcoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZGVsZXRlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVNYXBwaW5nKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmRlbGV0ZTwvdGItaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmd0LW1kIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5sdC1sZyBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT0iY2VsbEFjdGlvbnNNZW51Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1tZW51ICNjZWxsQWN0aW9uc01lbnU9Im1hdE1lbnUiIHhQb3NpdGlvbj0iYmVmb3JlIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0icm93QWN0aW9ucyI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG1hdC1oZWFkZXItcm93IFtuZ0NsYXNzXT0ie1wnbWF0LXJvdy1zZWxlY3RcJzogdHJ1ZX0iICptYXRIZWFkZXJSb3dEZWY9ImRpc3BsYXllZENvbHVtbnM7IHN0aWNreTogdHJ1ZSI+PC9tYXQtaGVhZGVyLXJvdz5cbiAgICAgICAgPG1hdC1yb3cgKm1hdFJvd0RlZj0ibGV0IG1hcHBpbmc7IGNvbHVtbnM6IGRpc3BsYXllZENvbHVtbnM7Ij48L21hdC1yb3c+XG4gICAgICA8L3RhYmxlPlxuICAgICAgPHNlY3Rpb24gW2Z4U2hvd109IiF0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiIGZ4TGF5b3V0QWxpZ249ImNlbnRlciBjZW50ZXIiXG4gICAgICAgICAgICAgICBjbGFzcz0ibWF0LWhlYWRsaW5lLTUgdGItYWJzb2x1dGUtZmlsbCB0Yi1hZGQtbmV3Ij5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNsYXNzPSJjb25uZWN0b3IiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlTWFwcGluZygkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgPC9kaXY+XG4gICAgPHNwYW4gW2Z4U2hvd109InRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSJcbiAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIgY2VudGVyIlxuICAgICAgICAgIGNsYXNzPSJuby1kYXRhLWZvdW5kIiB0cmFuc2xhdGU+XG4gICAgICB3aWRnZXQubm8tZGF0YS1mb3VuZFxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6YmxvY2t9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2ZmZjtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudC50Yi1vdXRsaW5lZC1ib3JkZXJ7Ym94LXNoYWRvdzowIDAgIzAwMDMsMCAwICMwMDAwMDAyNCwwIDAgIzAwMDAwMDFmO2JvcmRlcjpzb2xpZCAxcHggI2UwZTBlMDtib3JkZXItcmFkaXVzOjRweH06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5tYXQtdG9vbGJhci10b29sc3ttaW4taGVpZ2h0OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGl0bGUtY29udGFpbmVye292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC50Yi1tYXBwaW5nLXRhYmxlLXRpdGxle3BhZGRpbmctcmlnaHQ6MjBweDt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxle3RhYmxlLWxheW91dDpmaXhlZDttaW4td2lkdGg6NDUwcHh9Omhvc3QgLnRiLW1hcHBpbmctdGFibGUgLnRiLW1hcHBpbmctdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVyIC5tYXQtbWRjLXRhYmxlIC50YWJsZS12YWx1ZS1jb2x1bW57cGFkZGluZzowIDEycHg7d2lkdGg6MjMlfTpob3N0IC50Yi1tYXBwaW5nLXRhYmxlIC50Yi1tYXBwaW5nLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZSAudGFibGUtdmFsdWUtY29sdW1uLnJlcXVlc3QtY29sdW1ue3dpZHRoOjM4JX06aG9zdCAudGItbWFwcGluZy10YWJsZSAudGItbWFwcGluZy10YWJsZS1jb250ZW50IC5lbGxpcHNpc3tvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAubm8tZGF0YS1mb3VuZHtoZWlnaHQ6Y2FsYygxMDAlIC0gMTIwcHgpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDU5OXB4KXs6aG9zdCAubWF0LXRvb2xiYXJ7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxMDBweH06aG9zdCAubWF0LXRvb2xiYXIgLnRiLW1hcHBpbmctdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntyZXF1aXJlZDpbe3R5cGU6YX1dLG1hcHBpbmdUeXBlOlt7dHlwZTphfV0sc2VhcmNoSW5wdXRGaWVsZDpbe3R5cGU6byxhcmdzOlsic2VhcmNoSW5wdXQiXX1dfX0pO2NsYXNzIHNvIGV4dGVuZHMgUntjb25zdHJ1Y3Rvcigpe3N1cGVyKCl9fWUoIk1hcHBpbmdEYXRhc291cmNlIixzbyk7Y2xhc3MgbG97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLnRpdGxlPSJnYXRld2F5LnNlY3VyaXR5Iix0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsPSExLHRoaXMuQnJva2VyU2VjdXJpdHlUeXBlPXJuLHRoaXMuc2VjdXJpdHlUeXBlcz1PYmplY3QudmFsdWVzKHJuKSx0aGlzLm1vZGVUeXBlcz1PYmplY3QudmFsdWVzKHBuKSx0aGlzLlNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcD1tbix0aGlzLmRlc3Ryb3kkPW5ldyBTZX1uZ09uSW5pdCgpe3RoaXMuc2VjdXJpdHlGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dHlwZTpbcm4uQU5PTllNT1VTLFtdXSx1c2VybmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scGFzc3dvcmQ6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHBhdGhUb0NBQ2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvUHJpdmF0ZUtleTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scGF0aFRvQ2xpZW50Q2VydDpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx0aGlzLmV4dGVuZENlcnRpZmljYXRlc01vZGVsJiZ0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmFkZENvbnRyb2woIm1vZGUiLHRoaXMuZmIuY29udHJvbChwbi5OT05FLFtdKSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVWYWxpZGF0b3JzKGUpKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXtpZihlKWUudHlwZXx8KGUudHlwZT1ybi5BTk9OWU1PVVMpLHRoaXMudXBkYXRlVmFsaWRhdG9ycyhlLnR5cGUpLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAucmVzZXQoZSx7ZW1pdEV2ZW50OiExfSk7ZWxzZXtjb25zdCBlPXt0eXBlOnJuLkFOT05ZTU9VU307dGhpcy5zZWN1cml0eUZvcm1Hcm91cC5yZXNldChlLHtlbWl0RXZlbnQ6ITF9KX10aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlIT09cm4uQkFTSUN8fHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VjdXJpdHlGb3JtOnt2YWxpZDohMX19fXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dXBkYXRlVmFsaWRhdG9ycyhlKXtpZihlKWlmKHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DQUNlcnQiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXRoVG9DbGllbnRDZXJ0IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoIm1vZGUiKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksZT09PXJuLkJBU0lDKXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJ1c2VybmFtZSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhc3N3b3JkIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTtlbHNlIGlmKGU9PT1ybi5DRVJUSUZJQ0FURVMmJih0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvQ0FDZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgicGF0aFRvUHJpdmF0ZUtleSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5zZWN1cml0eUZvcm1Hcm91cC5nZXQoInBhdGhUb0NsaWVudENlcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwpKXtjb25zdCBlPXRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJtb2RlIik7ZSYmIWUudmFsdWUmJmUuc2V0VmFsdWUocG4uTk9ORSx7ZW1pdEV2ZW50OiExfSksZT8uZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Rm9ybUdyb3VwLmdldCgidXNlcm5hbWUiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KCJwYXNzd29yZCIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6bG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czp7dGl0bGU6InRpdGxlIixleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDoiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHNhbWUtcGFkZGluZyB0Yi1mbGV4IGNvbHVtbiIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Rm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj57eyB0aXRsZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHNlY3VyaXR5VHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICB7eyBTZWN1cml0eVR5cGVUcmFuc2xhdGlvbnNNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlIj5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5CQVNJQyI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlIFtuZ1N3aXRjaENhc2VdPSJCcm9rZXJTZWN1cml0eVR5cGUuQ0VSVElGSUNBVEVTIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5wYXRoLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuQ0EtY2VydGlmaWNhdGUtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DQUNlcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9Qcml2YXRlS2V5IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGF0aFRvQ2xpZW50Q2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibW9kZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RlVHlwZXMiIFt2YWx1ZV09InR5cGUiPlxuICAgICAgICAgICAgICAgICAge3sgdHlwZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudXNlcm5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51c2VybmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ZGlzcGxheTpibG9ja31cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2gsc2VsZWN0b3I6IltuZ1N3aXRjaF0iLGlucHV0czpbIm5nU3dpdGNoIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaENhc2Usc2VsZWN0b3I6IltuZ1N3aXRjaENhc2VdIixpbnB1dHM6WyJuZ1N3aXRjaENhc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fWUoIlNlY3VyaXR5Q29uZmlnQ29tcG9uZW50IixsbyksSGUoW04oKV0sbG8ucHJvdG90eXBlLCJleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbCIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmxvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5sbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bG8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxEXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gc2FtZS1wYWRkaW5nIHRiLWZsZXggY29sdW1uIiBbZm9ybUdyb3VwXT0ic2VjdXJpdHlGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHJvdyBzcGFjZS1iZXR3ZWVuIGFsaWduLWNlbnRlciBuby1nYXAgZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPnt7IHRpdGxlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPHRiLXRvZ2dsZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIiBhcHBlYXJhbmNlPSJmaWxsIj5cbiAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2Ygc2VjdXJpdHlUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgIHt7IFNlY3VyaXR5VHlwZVRyYW5zbGF0aW9uc01hcC5nZXQodHlwZSkgfCB0cmFuc2xhdGUgfX1cbiAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUiPlxuICAgIDxuZy10ZW1wbGF0ZSBbbmdTd2l0Y2hDYXNlXT0iQnJva2VyU2VjdXJpdHlUeXBlLkJBU0lDIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnVzZXJuYW1lPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVzZXJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzZWN1cml0eUZvcm1Hcm91cC5nZXQoXCd1c2VybmFtZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9InBhc3N3b3JkIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiIG1hdFN1ZmZpeD5cbiAgICAgICAgICAgICAgICA8dGItdG9nZ2xlLXBhc3N3b3JkIGNsYXNzPSJ0Yi1mbGV4IGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCI+PC90Yi10b2dnbGUtcGFzc3dvcmQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgW25nU3dpdGNoQ2FzZV09IkJyb2tlclNlY3VyaXR5VHlwZS5DRVJUSUZJQ0FURVMiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LnBhdGgtaGludFwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5DQS1jZXJ0aWZpY2F0ZS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb0NBQ2VydCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhdGhUb1ByaXZhdGVLZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwYXRoVG9DbGllbnRDZXJ0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9ImV4dGVuZENlcnRpZmljYXRlc01vZGVsIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5tb2RlPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGVUeXBlcyIgW3ZhbHVlXT0idHlwZSI+XG4gICAgICAgICAgICAgICAgICB7eyB0eXBlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS51c2VybmFtZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LnVzZXJuYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNlY3VyaXR5Rm9ybUdyb3VwLmdldChcJ3VzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2VjdXJpdHlGb3JtR3JvdXAuZ2V0KFwndXNlcm5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7dGl0bGU6W3t0eXBlOmF9XSxleHRlbmRDZXJ0aWZpY2F0ZXNNb2RlbDpbe3R5cGU6YX1dfX0pO2NsYXNzIGNve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5zZWN1cml0eVBvbGljeVR5cGVzPV9uLHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3VybDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdGltZW91dEluTWlsbGlzOlsxZTMsW3VlLnJlcXVpcmVkLHVlLm1pbigxZTMpXV0sc2NhblBlcmlvZEluTWlsbGlzOltWLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMWUzKV1dLHBvbGxQZXJpb2RJbk1pbGxpczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oNTApXV0sZW5hYmxlU3Vic2NyaXB0aW9uczpbITAsW11dLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEwMCldXSxzaG93TWFwOlshMSxbXV0sc2VjdXJpdHk6W1VuLkJBU0lDMTI4LFtdXSxpZGVudGl0eTpbXX0pLHRoaXMuc2VydmVyQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5oaWRlTmV3RmllbGRzJiZ0aGlzLnNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoInBvbGxQZXJpb2RJbk1pbGxpcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAudmFsaWQ/bnVsbDp7c2VydmVyQ29uZmlnRm9ybUdyb3VwOnt2YWxpZDohMX19fXdyaXRlVmFsdWUoZSl7Y29uc3R7dGltZW91dEluTWlsbGlzOnQ9MWUzLHNjYW5QZXJpb2RJbk1pbGxpczpuPVYscG9sbFBlcmlvZEluTWlsbGlzOmE9NWUzLGVuYWJsZVN1YnNjcmlwdGlvbnM6bz0hMCxzdWJDaGVja1BlcmlvZEluTWlsbGlzOmk9MTAwLHNob3dNYXA6cj0hMSxzZWN1cml0eTpzPVVuLkJBU0lDMTI4LGlkZW50aXR5Omw9e319PWU7dGhpcy5zZXJ2ZXJDb25maWdGb3JtR3JvdXAucmVzZXQoey4uLmUsdGltZW91dEluTWlsbGlzOnQsc2NhblBlcmlvZEluTWlsbGlzOm4scG9sbFBlcmlvZEluTWlsbGlzOmEsZW5hYmxlU3Vic2NyaXB0aW9uczpvLHN1YkNoZWNrUGVyaW9kSW5NaWxsaXM6aSxzaG93TWFwOnIsc2VjdXJpdHk6cyxpZGVudGl0eTpsfSx7ZW1pdEV2ZW50OiExfSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmNvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czp7aGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d2UuTWF0U2VsZWN0LHNlbGVjdG9yOiJtYXQtc2VsZWN0IixpbnB1dHM6WyJhcmlhLWRlc2NyaWJlZGJ5IiwicGFuZWxDbGFzcyIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvciIsInBsYWNlaG9sZGVyIiwicmVxdWlyZWQiLCJtdWx0aXBsZSIsImRpc2FibGVPcHRpb25DZW50ZXJpbmciLCJjb21wYXJlV2l0aCIsInZhbHVlIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImVycm9yU3RhdGVNYXRjaGVyIiwidHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbCIsInNvcnRDb21wYXJhdG9yIiwiaWQiLCJwYW5lbFdpZHRoIl0sb3V0cHV0czpbIm9wZW5lZENoYW5nZSIsIm9wZW5lZCIsImNsb3NlZCIsInNlbGVjdGlvbkNoYW5nZSIsInZhbHVlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTZWxlY3QiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpDZS5NYXRPcHRpb24sc2VsZWN0b3I6Im1hdC1vcHRpb24iLGlucHV0czpbInZhbHVlIiwiaWQiLCJkaXNhYmxlZCJdLG91dHB1dHM6WyJvblNlbGVjdGlvbkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0T3B0aW9uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlllLlRydW5jYXRlV2l0aFRvb2x0aXBEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmxvLHNlbGVjdG9yOiJ0Yi1zZWN1cml0eS1jb25maWciLGlucHV0czpbInRpdGxlIiwiZXh0ZW5kQ2VydGlmaWNhdGVzTW9kZWwiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNTZXJ2ZXJDb25maWdDb21wb25lbnQiLGNvKSxIZShbTigpXSxjby5wcm90b3R5cGUsImhpZGVOZXdGaWVsZHMiLHZvaWQgMCksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpjbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5jbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Y28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIFtmb3JtR3JvdXBdPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci11cmw8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuc2VydmVyLXVybC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndXJsXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5vcGMtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXRJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkudGltZW91dC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDAwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3RpbWVvdXRJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwndGltZW91dEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zZWN1cml0eS1wb2xpY3lcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuc2VjdXJpdHktcG9saWN5XCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB2ZXJzaW9uIG9mIHNlY3VyaXR5UG9saWN5VHlwZXMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnNjYW4tcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjEwMDAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJzY2FuUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnNjYW4tcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDEwMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2NhblBlcmlvZEluTWlsbGlzXCcpLmhhc0Vycm9yKFwnbWluXCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzY2FuUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9IiFoaWRlTmV3RmllbGRzIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iNTAiIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kSW5NaWxsaXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iXCdnYXRld2F5LnBvbGwtcGVyaW9kLWVycm9yXCcgfCB0cmFuc2xhdGU6IHttaW46IDUwfSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSIoc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvbGxQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ21pblwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9sbFBlcmlvZEluTWlsbGlzXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5zdWItY2hlY2stcGVyaW9kXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgXCdnYXRld2F5LnN1Yi1jaGVjay1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMTAwIiBuYW1lPSJ2YWx1ZSJcbiAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ic3ViQ2hlY2tQZXJpb2RJbk1pbGxpcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkuc3ViLWNoZWNrLXBlcmlvZC1lcnJvclwnIHwgdHJhbnNsYXRlOiB7bWluOiAxMDB9IlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IihzZXJ2ZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnc3ViQ2hlY2tQZXJpb2RJbk1pbGxpc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykuaGFzRXJyb3IoXCdtaW5cJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyQ29uZmlnRm9ybUdyb3VwLmdldChcJ3N1YkNoZWNrUGVyaW9kSW5NaWxsaXNcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVTdWJzY3JpcHRpb25zIj5cbiAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5lbmFibGUtc3Vic2NyaXB0aW9uXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkuZW5hYmxlLXN1YnNjcmlwdGlvblwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2hvd01hcCI+XG4gICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2hvdy1tYXBcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5zaG93LW1hcFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuICA8dGItc2VjdXJpdHktY29uZmlnIGZvcm1Db250cm9sTmFtZT0iaWRlbnRpdHkiXG4gICAgICAgICAgICAgICAgICAgICAgW2V4dGVuZENlcnRpZmljYXRlc01vZGVsXT0idHJ1ZSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XSxwcm9wRGVjb3JhdG9yczp7aGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dfX0pO2NsYXNzIHBvIGV4dGVuZHMgeWF7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubWFwcGluZ1R5cGVzPWZuLHRoaXMuaXNMZWdhY3k9ITF9aW5pdEJhc2ljRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe21hcHBpbmc6W10sc2VydmVyOltdfSl9bWFwQ29uZmlnVG9Gb3JtVmFsdWUoZSl7cmV0dXJue3NlcnZlcjplLnNlcnZlcj8/e30sbWFwcGluZzplLm1hcHBpbmc/P1tdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOmUuc2VydmVyLG1hcHBpbmc6ZS5tYXBwaW5nfX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnBvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnBvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+cG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJPcGNVYUJhc2ljQ29uZmlnQ29tcG9uZW50IixwbyksdC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpwbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItb3BjLXVhLWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5wbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgbW97Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZiPWUsdGhpcy5jZHI9dCx0aGlzLm1xdHRWZXJzaW9ucz1nbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5icm9rZXJDb25maWdGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7aG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSx2ZXJzaW9uOls1LFtdXSxjbGllbnRJZDpbInRiX2d3XyIrc2UoNSksW3VlLnBhdHRlcm4oa3QpXV0sc2VjdXJpdHk6W119KSx0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWdlbmVyYXRlKGUpe3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLmdldChlKT8ucGF0Y2hWYWx1ZSgidGJfZ3dfIitzZSg1KSl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2NvbnN0e3ZlcnNpb246dD01LGNsaWVudElkOm49YHRiX2d3XyR7c2UoNSl9YCxzZWN1cml0eTphPXt9fT1lO3RoaXMuYnJva2VyQ29uZmlnRm9ybUdyb3VwLnJlc2V0KHsuLi5lLHZlcnNpb246dCxjbGllbnRJZDpuLHNlY3VyaXR5OmF9LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJyb2tlckNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOnticm9rZXJDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTptbyxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTptbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9Pm1vKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpsbyxzZWxlY3RvcjoidGItc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJ0aXRsZSIsImV4dGVuZENlcnRpZmljYXRlc01vZGVsIl19LHtraW5kOiJwaXBlIix0eXBlOndhLG5hbWU6ImdldEdhdGV3YXlQb3J0VG9vbHRpcCJ9XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiQnJva2VyQ29uZmlnQ29udHJvbENvbXBvbmVudCIsbW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6bW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGxvLHdhXSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5tbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+bW8pKSxtdWx0aTohMH1dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5ob3N0PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9Imhvc3QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdob3N0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9Iihicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicm9rZXJDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5Lm1xdHQtdmVyc2lvbjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idmVyc2lvbiI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdmVyc2lvbiBvZiBtcXR0VmVyc2lvbnMiIFt2YWx1ZV09InZlcnNpb24udmFsdWUiPnt7IHZlcnNpb24ubmFtZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jbGllbnQtaWQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iR2VuZXJhdGUiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmdlbmVyYXRlLWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZ2VuZXJhdGUoXCdjbGllbnRJZFwnKSJcbiAgICAgICAgICAgICAgICAqbmdJZj0iIWJyb2tlckNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdjbGllbnRJZFwnKS52YWx1ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmF1dG9yZW5ldzwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDx0Yi1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+XG4gIDwvdGItc2VjdXJpdHktY29uZmlnPlxuPC9kaXY+XG4nfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTp0LkNoYW5nZURldGVjdG9yUmVmfV19KTtjbGFzcyB1b3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe21heE51bWJlck9mV29ya2VyczpbMTAwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSldXSxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOlsxMCxbdWUucmVxdWlyZWQsdWUubWluKDEpXV19KSx0aGlzLndvcmtlcnNDb25maWdGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7Y29uc3R7bWF4TnVtYmVyT2ZXb3JrZXJzOnQsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjpufT1lO3RoaXMud29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5yZXNldCh7bWF4TnVtYmVyT2ZXb3JrZXJzOnR8fDEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOm58fDEwfSx7ZW1pdEV2ZW50OiExfSl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy53b3JrZXJzQ29uZmlnRm9ybUdyb3VwLnZhbGlkP251bGw6e3dvcmtlcnNDb25maWdGb3JtR3JvdXA6e3ZhbGlkOiExfX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp1byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnVvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+dW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCIgW2Zvcm1Hcm91cF09IndvcmtlcnNDb25maWdGb3JtR3JvdXAiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW51bWJlci1vZi13b3JrZXJzXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIHR5cGU9Im51bWJlciIgbWluPSIxIiBmb3JtQ29udHJvbE5hbWU9Im1heE51bWJlck9mV29ya2VycyJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TnVtYmVyT2ZXb3JrZXJzXCcpLnRvdWNoZWQpIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICB3YXJuaW5nXG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIFtzdHlsZS53aWR0aC4lXT0iNTAiXG4gICAgICAgICB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXJcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TWVzc2FnZU51bWJlclBlcldvcmtlciJcbiAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdtaW5cJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAod29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdFN1ZmZpeCxzZWxlY3RvcjoiW21hdFN1ZmZpeF0sIFttYXRJY29uU3VmZml4XSwgW21hdFRleHRTdWZmaXhdIixpbnB1dHM6WyJtYXRUZXh0U3VmZml4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6emUuTWF0VG9vbHRpcCxzZWxlY3RvcjoiW21hdFRvb2x0aXBdIixpbnB1dHM6WyJtYXRUb29sdGlwUG9zaXRpb24iLCJtYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbiIsIm1hdFRvb2x0aXBEaXNhYmxlZCIsIm1hdFRvb2x0aXBTaG93RGVsYXkiLCJtYXRUb29sdGlwSGlkZURlbGF5IiwibWF0VG9vbHRpcFRvdWNoR2VzdHVyZXMiLCJtYXRUb29sdGlwIiwibWF0VG9vbHRpcENsYXNzIl0sZXhwb3J0QXM6WyJtYXRUb29sdGlwIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5NaW5WYWxpZGF0b3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW25nTW9kZWxdIixpbnB1dHM6WyJtaW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6U2Esc2VsZWN0b3I6Ilt0YlRydW5jYXRlV2l0aFRvb2x0aXBdIixpbnB1dHM6WyJ0YlRydW5jYXRlV2l0aFRvb2x0aXAiLCJ0b29sdGlwRW5hYmxlZCIsInBvc2l0aW9uIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiV29ya2Vyc0NvbmZpZ0NvbnRyb2xDb21wb25lbnQiLHVvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnVvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnVvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT51bykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBbZm9ybUdyb3VwXT0id29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiBbc3R5bGUud2lkdGguJV09IjUwIlxuICAgICAgICAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnMtaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbnVtYmVyLW9mLXdvcmtlcnNcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgdHlwZT0ibnVtYmVyIiBtaW49IjEiIGZvcm1Db250cm9sTmFtZT0ibWF4TnVtYmVyT2ZXb3JrZXJzIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1udW1iZXItb2Ytd29ya2Vycy1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJ3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE51bWJlck9mV29ya2Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2Vyc0NvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdtYXhOdW1iZXJPZldvcmtlcnNcJykudG91Y2hlZCkiXG4gICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgW3N0eWxlLndpZHRoLiVdPSI1MCJcbiAgICAgICAgIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkubWF4LW1lc3NhZ2VzLXF1ZXVlLWZvci13b3JrZXItaGludFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5tYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiB0eXBlPSJudW1iZXIiIG1pbj0iMSIgZm9ybUNvbnRyb2xOYW1lPSJtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyIlxuICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9IndvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JrZXJzQ29uZmlnRm9ybUdyb3VwLmdldChcJ21heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlcnNDb25maWdGb3JtR3JvdXAuZ2V0KFwnbWF4TWVzc2FnZU51bWJlclBlcldvcmtlclwnKS50b3VjaGVkKSJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgd2FybmluZ1xuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbid9XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIGdve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmlzRXhwYW5zaW9uTW9kZT0hMSx0aGlzLmRlZmF1bHRWYWx1ZT1sbi5LZXksdGhpcy5yZXBvcnRTdHJhdGVneVR5cGVzPU9iamVjdC52YWx1ZXMoc24pLHRoaXMuUmVwb3J0VHlwZVRyYW5zbGF0ZU1hcD1jbix0aGlzLlJlcG9ydFN0cmF0ZWd5VHlwZT1zbix0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTdHJhdGVneUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W3t2YWx1ZTpzbi5PblJlcG9ydFBlcmlvZCxkaXNhYmxlZDohMH0sW11dLHJlcG9ydFBlcmlvZDpbe3ZhbHVlOnRoaXMuZGVmYXVsdFZhbHVlLGRpc2FibGVkOiEwfSxbdWUucmVxdWlyZWRdXX0pLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5Rm9ybUNoYW5nZSgpLHRoaXMub2JzZXJ2ZVN0cmF0ZWd5VG9nZ2xlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9d3JpdGVWYWx1ZShlKXt0aGlzLmlzRXhwYW5zaW9uTW9kZSYmdGhpcy5zaG93U3RyYXRlZ3lDb250cm9sLnNldFZhbHVlKCEhZSx7ZW1pdEV2ZW50OiExfSksZSYmdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pO2NvbnN0e3R5cGU6dD1zbi5PblJlcG9ydFBlcmlvZCxyZXBvcnRQZXJpb2Q6bj10aGlzLmRlZmF1bHRWYWx1ZX09ZT8/e307dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5zZXRWYWx1ZSh7dHlwZTp0LHJlcG9ydFBlcmlvZDpufSx7ZW1pdEV2ZW50OiExfSksdGhpcy5vblR5cGVDaGFuZ2UodCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWxpZHx8dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5kaXNhYmxlZD9udWxsOntyZXBvcnRTdHJhdGVneUZvcm06e3ZhbGlkOiExfX19cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX1vYnNlcnZlU3RyYXRlZ3lGb3JtQ2hhbmdlKCl7dGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy5vblR5cGVDaGFuZ2UoZSkpKX1vYnNlcnZlU3RyYXRlZ3lUb2dnbGUoKXt0aGlzLnNob3dTdHJhdGVneUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCksTWUoKCgpPT50aGlzLmlzRXhwYW5zaW9uTW9kZSkpKS5zdWJzY3JpYmUoKGU9PntlPyh0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSksdGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoInJlcG9ydFBlcmlvZCIpLmFkZFZhbGlkYXRvcnModWUucmVxdWlyZWQpLHRoaXMub25DaGFuZ2UodGhpcy5yZXBvcnRTdHJhdGVneUZvcm1Hcm91cC52YWx1ZSkpOih0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKS5yZW1vdmVWYWxpZGF0b3JzKHVlLnJlcXVpcmVkKSx0aGlzLm9uQ2hhbmdlKG51bGwpKSx0aGlzLnJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfW9uVHlwZUNoYW5nZShlKXtjb25zdCB0PXRoaXMucmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAuZ2V0KCJyZXBvcnRQZXJpb2QiKTtlPT09c24uT25DaGFuZ2U/dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmlzRXhwYW5zaW9uTW9kZSYmIXRoaXMuc2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZXx8dC5lbmFibGUoe2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpnbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsaW5wdXRzOntpc0V4cGFuc2lvbk1vZGU6ImlzRXhwYW5zaW9uTW9kZSIsZGVmYXVsdFZhbHVlOiJkZWZhdWx0VmFsdWUifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Z28pKSxtdWx0aTohMH1dLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IFtmb3JtR3JvdXBdPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0lmPSJpc0V4cGFuc2lvbk1vZGUgZWxzZSBkZWZhdWx0TW9kZSIgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U3RyYXRlZ3lDb250cm9sLnZhbHVlIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1N0cmF0ZWd5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InN0cmF0ZWd5RmllbGRzIj48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRNb2RlPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnJlcG9ydC1zdHJhdGVneS5sYWJlbDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy10ZW1wbGF0ZSAjc3RyYXRlZ3lGaWVsZHM+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIHJlcG9ydFN0cmF0ZWd5VHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IFJlcG9ydFR5cGVUcmFuc2xhdGVNYXAuZ2V0KHR5cGUpIHwgdHJhbnNsYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InJlcG9ydFN0cmF0ZWd5Rm9ybUdyb3VwLmdldChcJ3R5cGVcJykudmFsdWUgIT09IFJlcG9ydFN0cmF0ZWd5VHlwZS5PbkNoYW5nZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiPlxuICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgIGdhdGV3YXkucmVwb3J0LXN0cmF0ZWd5LnJlcG9ydC1wZXJpb2RcbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0Zvck9mLHNlbGVjdG9yOiJbbmdGb3JdW25nRm9yT2ZdIixpbnB1dHM6WyJuZ0Zvck9mIiwibmdGb3JUcmFja0J5IiwibmdGb3JUZW1wbGF0ZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdJZixzZWxlY3RvcjoiW25nSWZdIixpbnB1dHM6WyJuZ0lmIiwibmdJZlRoZW4iLCJuZ0lmRWxzZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJSZXBvcnRTdHJhdGVneUNvbXBvbmVudCIsZ28pLEhlKFtOKCldLGdvLnByb3RvdHlwZSwiaXNFeHBhbnNpb25Nb2RlIix2b2lkIDApLEhlKFtCKCldLGdvLnByb3RvdHlwZSwiZGVmYXVsdFZhbHVlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Z28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLXJlcG9ydC1zdHJhdGVneSIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmdvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5nbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBbZm9ybUdyb3VwXT0icmVwb3J0U3RyYXRlZ3lGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdJZj0iaXNFeHBhbnNpb25Nb2RlIGVsc2UgZGVmYXVsdE1vZGUiIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1N0cmF0ZWd5Q29udHJvbC52YWx1ZSI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTdHJhdGVneUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzdHJhdGVneUZpZWxkcyI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0TW9kZT5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5yZXBvcnQtc3RyYXRlZ3kubGFiZWw8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0ic3RyYXRlZ3lGaWVsZHMiPjwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctdGVtcGxhdGUgI3N0cmF0ZWd5RmllbGRzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiPnt7IFwnZ2F0ZXdheS50eXBlXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiByZXBvcnRTdHJhdGVneVR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBSZXBvcnRUeXBlVHJhbnNsYXRlTWFwLmdldCh0eXBlKSB8IHRyYW5zbGF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJyZXBvcnRTdHJhdGVneUZvcm1Hcm91cC5nZXQoXCd0eXBlXCcpLnZhbHVlICE9PSBSZXBvcnRTdHJhdGVneVR5cGUuT25DaGFuZ2UiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIj5cbiAgICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5cbiAgICAgICAgICBnYXRld2F5LnJlcG9ydC1zdHJhdGVneS5yZXBvcnQtcGVyaW9kXG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0UGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dLHByb3BEZWNvcmF0b3JzOntpc0V4cGFuc2lvbk1vZGU6W3t0eXBlOmF9XSxkZWZhdWx0VmFsdWU6W3t0eXBlOmF9XX19KTtjbGFzcyBmb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5pc01hc3Rlcj0hMSx0aGlzLmhpZGVOZXdGaWVsZHM9ITEsdGhpcy5rZXlzRGF0YUFwcGxpZWQ9bmV3IGksdGhpcy5tb2RidXNEYXRhVHlwZXM9T2JqZWN0LnZhbHVlcyhlYSksdGhpcy5tb2RpZmllclR5cGVzPU9iamVjdC52YWx1ZXMoT24pLHRoaXMud2l0aEZ1bmN0aW9uQ29kZT0hMCx0aGlzLndpdGhSZXBvcnRTdHJhdGVneT0hMCx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXA9bmV3IE1hcCx0aGlzLnNob3dNb2RpZmllcnNNYXA9bmV3IE1hcCx0aGlzLmZ1bmN0aW9uQ29kZXNNYXA9bmV3IE1hcCx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPVtdLHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXM9dGEsdGhpcy5Nb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXA9enQsdGhpcy5Nb2RpZmllclR5cGVzTWFwPVJuLHRoaXMuUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWU9bG4sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5kZWZhdWx0UmVhZEZ1bmN0aW9uQ29kZXM9WzMsNF0sdGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXM9WzEsMl0sdGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzPVs2LDE2XSx0aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM9WzUsMTVdfW5nT25Jbml0KCl7dGhpcy53aXRoRnVuY3Rpb25Db2RlPSF0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVMsdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3k9ISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuaGlkZU5ld0ZpZWxkcyksdGhpcy5rZXlzTGlzdEZvcm1BcnJheT10aGlzLnByZXBhcmVLZXlzRm9ybUFycmF5KHRoaXMudmFsdWVzKSx0aGlzLmRlZmF1bHRGdW5jdGlvbkNvZGVzPXRoaXMuZ2V0RGVmYXVsdEZ1bmN0aW9uQ29kZXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX10cmFja0J5Q29udHJvbElkKGUsdCl7cmV0dXJuIHQudmFsdWUuaWR9YWRkS2V5KCl7Y29uc3QgZT1zZSg1KSx0PXRoaXMuZmIuZ3JvdXAoe3RhZzpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdmFsdWU6W3t2YWx1ZToiIixkaXNhYmxlZDohdGhpcy5pc01hc3Rlcn0sW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbZWEuQllURVMsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbnVsbCxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6WzEsW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6dGhpcy5nZXREZWZhdWx0RnVuY3Rpb25Db2RlcygpWzBdLGRpc2FibGVkOiF0aGlzLndpdGhGdW5jdGlvbkNvZGV9LFt1ZS5yZXF1aXJlZF1dLHJlcG9ydFN0cmF0ZWd5Olt7dmFsdWU6bnVsbCxkaXNhYmxlZDohdGhpcy53aXRoUmVwb3J0U3RyYXRlZ3l9XSxtb2RpZmllclR5cGU6W3t2YWx1ZTpPbi5NVUxUSVBMSUVSLGRpc2FibGVkOiEwfV0sbW9kaWZpZXJWYWx1ZTpbe3ZhbHVlOjEsZGlzYWJsZWQ6ITB9LFt1ZS5wYXR0ZXJuKEZ0KV1dLGlkOlt7dmFsdWU6ZSxkaXNhYmxlZDohMH1dfSk7dGhpcy5zaG93TW9kaWZpZXJzTWFwLnNldChlLCExKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KGUsdGhpcy5mYi5jb250cm9sKCExKSksdGhpcy5vYnNlcnZlS2V5RGF0YVR5cGUodCksdGhpcy5vYnNlcnZlRW5hYmxlTW9kaWZpZXIodCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5wdXNoKHQpfWRlbGV0ZUtleShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5rZXlzTGlzdEZvcm1BcnJheS5yZW1vdmVBdCh0KSx0aGlzLmtleXNMaXN0Rm9ybUFycmF5Lm1hcmtBc0RpcnR5KCl9Y2FuY2VsKCl7dGhpcy5wb3BvdmVyLmhpZGUoKX1hcHBseUtleXNEYXRhKCl7dGhpcy5rZXlzRGF0YUFwcGxpZWQuZW1pdCh0aGlzLmdldEZvcm1WYWx1ZSgpKX1nZXRGb3JtVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXBLZXlzV2l0aE1vZGlmaWVyKHRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5P3RoaXMuY2xlYW5VcEVtcHR5U3RyYXRlZ2llcyh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKTp0aGlzLmtleXNMaXN0Rm9ybUFycmF5LnZhbHVlKX1jbGVhblVwRW1wdHlTdHJhdGVnaWVzKGUpe3JldHVybiBlLm1hcCgoZT0+e2NvbnN0e3JlcG9ydFN0cmF0ZWd5OnQsLi4ubn09ZTtyZXR1cm4gdD9lOm59KSl9bWFwS2V5c1dpdGhNb2RpZmllcihlKXtyZXR1cm4gZS5tYXAoKChlLHQpPT57aWYodGhpcy5zaG93TW9kaWZpZXJzTWFwLmdldCh0aGlzLmtleXNMaXN0Rm9ybUFycmF5LmNvbnRyb2xzW3RdLmdldCgiaWQiKS52YWx1ZSkpe2NvbnN0e21vZGlmaWVyVHlwZTp0LG1vZGlmaWVyVmFsdWU6biwuLi5hfT1lO3JldHVybiB0P3suLi5hLFt0XTpufTphfXJldHVybiBlfSkpfXByZXBhcmVLZXlzRm9ybUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGUmJmUuZm9yRWFjaCgoZT0+e2NvbnN0IG49dGhpcy5jcmVhdGVEYXRhS2V5Rm9ybUdyb3VwKGUpO3RoaXMub2JzZXJ2ZUtleURhdGFUeXBlKG4pLHRoaXMub2JzZXJ2ZUVuYWJsZU1vZGlmaWVyKG4pLHRoaXMuZnVuY3Rpb25Db2Rlc01hcC5zZXQobi5nZXQoImlkIikudmFsdWUsdGhpcy5nZXRGdW5jdGlvbkNvZGVzKGUudHlwZSkpLHQucHVzaChuKX0pKSx0aGlzLmZiLmFycmF5KHQpfWNyZWF0ZURhdGFLZXlGb3JtR3JvdXAoZSl7Y29uc3R7dGFnOnQsdmFsdWU6bix0eXBlOmEsYWRkcmVzczpvLG9iamVjdHNDb3VudDppLGZ1bmN0aW9uQ29kZTpyLG11bHRpcGxpZXI6cyxkaXZpZGVyOmwscmVwb3J0U3RyYXRlZ3k6Y309ZSxwPXNlKDUpLG09dGhpcy5zaG91bGRTaG93TW9kaWZpZXIoYSk7cmV0dXJuIHRoaXMuc2hvd01vZGlmaWVyc01hcC5zZXQocCxtKSx0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuc2V0KHAsdGhpcy5mYi5jb250cm9sKChzfHxsKSYmbSkpLHRoaXMuZmIuZ3JvdXAoe3RhZzpbdCxbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx2YWx1ZTpbe3ZhbHVlOm4sZGlzYWJsZWQ6IXRoaXMuaXNNYXN0ZXJ9LFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHR5cGU6W2EsW3VlLnJlcXVpcmVkXV0sYWRkcmVzczpbbyxbdWUucmVxdWlyZWRdXSxvYmplY3RzQ291bnQ6W2ksW3VlLnJlcXVpcmVkXV0sZnVuY3Rpb25Db2RlOlt7dmFsdWU6cixkaXNhYmxlZDohdGhpcy53aXRoRnVuY3Rpb25Db2RlfSxbdWUucmVxdWlyZWRdXSxtb2RpZmllclR5cGU6W3t2YWx1ZTpsP09uLkRJVklERVI6T24uTVVMVElQTElFUixkaXNhYmxlZDohdGhpcy5lbmFibGVNb2RpZmllcnNDb250cm9sTWFwLmdldChwKS52YWx1ZX1dLG1vZGlmaWVyVmFsdWU6W3t2YWx1ZTpzPz9sPz8xLGRpc2FibGVkOiF0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KHApLnZhbHVlfSxbdWUucGF0dGVybihGdCldXSxpZDpbe3ZhbHVlOnAsZGlzYWJsZWQ6ITB9XSxyZXBvcnRTdHJhdGVneTpbe3ZhbHVlOmMsZGlzYWJsZWQ6IXRoaXMud2l0aFJlcG9ydFN0cmF0ZWd5fV19KX1zaG91bGRTaG93TW9kaWZpZXIoZSl7cmV0dXJuISh0aGlzLmlzTWFzdGVyfHx0aGlzLmtleXNUeXBlIT09YWEuQVRUUklCVVRFUyYmdGhpcy5rZXlzVHlwZSE9PWFhLlRJTUVTRVJJRVN8fHRoaXMuTW9kYnVzRWRpdGFibGVEYXRhVHlwZXMuaW5jbHVkZXMoZSkpfW9ic2VydmVLZXlEYXRhVHlwZShlKXtlLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKHQ9Pnt0aGlzLk1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKHQpfHxlLmdldCgib2JqZWN0c0NvdW50IikucGF0Y2hWYWx1ZShuYVt0XSx7ZW1pdEV2ZW50OiExfSk7Y29uc3Qgbj10aGlzLnNob3VsZFNob3dNb2RpZmllcih0KTt0aGlzLnNob3dNb2RpZmllcnNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLHRoaXMudXBkYXRlRnVuY3Rpb25Db2RlcyhlLHQpfSkpfW9ic2VydmVFbmFibGVNb2RpZmllcihlKXt0aGlzLmVuYWJsZU1vZGlmaWVyc0NvbnRyb2xNYXAuZ2V0KGUuZ2V0KCJpZCIpLnZhbHVlKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT50aGlzLnRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KSkpfXRvZ2dsZU1vZGlmaWVyQ29udHJvbHMoZSx0KXtjb25zdCBuPWUuZ2V0KCJtb2RpZmllclR5cGUiKSxhPWUuZ2V0KCJtb2RpZmllclZhbHVlIik7dD8obi5lbmFibGUoKSxhLmVuYWJsZSgpKToobi5kaXNhYmxlKCksYS5kaXNhYmxlKCkpfXVwZGF0ZUZ1bmN0aW9uQ29kZXMoZSx0KXtjb25zdCBuPXRoaXMuZ2V0RnVuY3Rpb25Db2Rlcyh0KTt0aGlzLmZ1bmN0aW9uQ29kZXNNYXAuc2V0KGUuZ2V0KCJpZCIpLnZhbHVlLG4pLG4uaW5jbHVkZXMoZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnZhbHVlKXx8ZS5nZXQoImZ1bmN0aW9uQ29kZSIpLnBhdGNoVmFsdWUoblswXSx7ZW1pdEV2ZW50OiExfSl9Z2V0RnVuY3Rpb25Db2RlcyhlKXtjb25zdCB0PVsuLi5lPT09ZWEuQklUUz90aGlzLmJpdHNXcml0ZUZ1bmN0aW9uQ29kZXM6W10sLi4udGhpcy5kZWZhdWx0V3JpdGVGdW5jdGlvbkNvZGVzXTtpZih0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTKXJldHVybiB0LnNvcnQoKChlLHQpPT5lLXQpKTtjb25zdCBuPVsuLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2Rlc107cmV0dXJuIGU9PT1lYS5CSVRTJiZuLnB1c2goLi4udGhpcy5iaXRzUmVhZEZ1bmN0aW9uQ29kZXMpLHRoaXMua2V5c1R5cGU9PT1hYS5SUENfUkVRVUVTVFMmJm4ucHVzaCguLi50KSxuLnNvcnQoKChlLHQpPT5lLXQpKX1nZXREZWZhdWx0RnVuY3Rpb25Db2Rlcygpe3JldHVybiB0aGlzLmtleXNUeXBlPT09YWEuQVRUUklCVVRFU19VUERBVEVTP3RoaXMuZGVmYXVsdFdyaXRlRnVuY3Rpb25Db2Rlczp0aGlzLmtleXNUeXBlPT09YWEuUlBDX1JFUVVFU1RTP1suLi50aGlzLmRlZmF1bHRSZWFkRnVuY3Rpb25Db2RlcywuLi50aGlzLmRlZmF1bHRXcml0ZUZ1bmN0aW9uQ29kZXNdOnRoaXMuZGVmYXVsdFJlYWRGdW5jdGlvbkNvZGVzfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Zm8sZGVwczpbe3Rva2VuOm1lLlVudHlwZWRGb3JtQnVpbGRlcn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Zm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyIscGFuZWxUaXRsZToicGFuZWxUaXRsZSIsYWRkS2V5VGl0bGU6ImFkZEtleVRpdGxlIixkZWxldGVLZXlUaXRsZToiZGVsZXRlS2V5VGl0bGUiLG5vS2V5c1RleHQ6Im5vS2V5c1RleHQiLGtleXNUeXBlOiJrZXlzVHlwZSIsdmFsdWVzOiJ2YWx1ZXMiLHBvcG92ZXI6InBvcG92ZXIifSxvdXRwdXRzOntrZXlzRGF0YUFwcGxpZWQ6ImtleXNEYXRhQXBwbGllZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmd0LkhlbHBQb3B1cENvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhlbHAtcG9wdXBdLCBbdGItaGVscC1wb3B1cC1jb250ZW50XSIsaW5wdXRzOlsidGItaGVscC1wb3B1cCIsInRiLWhlbHAtcG9wdXAtY29udGVudCIsInRyaWdnZXItdGV4dCIsInRyaWdnZXItc3R5bGUiLCJ0Yi1oZWxwLXBvcHVwLXBsYWNlbWVudCIsInRiLWhlbHAtcG9wdXAtc3R5bGUiLCJoaW50TW9kZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOndlLk1hdFNlbGVjdFRyaWdnZXIsc2VsZWN0b3I6Im1hdC1zZWxlY3QtdHJpZ2dlciJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmV0Lk1hdFNsaWRlVG9nZ2xlLHNlbGVjdG9yOiJtYXQtc2xpZGUtdG9nZ2xlIixpbnB1dHM6WyJuYW1lIiwiaWQiLCJsYWJlbFBvc2l0aW9uIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJyZXF1aXJlZCIsImNvbG9yIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJjaGVja2VkIiwiaGlkZUljb24iLCJkaXNhYmxlZEludGVyYWN0aXZlIl0sb3V0cHV0czpbImNoYW5nZSIsInRvZ2dsZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2xpZGVUb2dnbGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbCxzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbCIsaW5wdXRzOlsiaGlkZVRvZ2dsZSIsInRvZ2dsZVBvc2l0aW9uIl0sb3V0cHV0czpbImFmdGVyRXhwYW5kIiwiYWZ0ZXJDb2xsYXBzZSJdLGV4cG9ydEFzOlsibWF0RXhwYW5zaW9uUGFuZWwiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbEhlYWRlcixzZWxlY3RvcjoibWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIiLGlucHV0czpbImV4cGFuZGVkSGVpZ2h0IiwiY29sbGFwc2VkSGVpZ2h0IiwidGFiSW5kZXgiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTokZS5NYXRFeHBhbnNpb25QYW5lbFRpdGxlLHNlbGVjdG9yOiJtYXQtcGFuZWwtdGl0bGUifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOiRlLk1hdEV4cGFuc2lvblBhbmVsQ29udGVudCxzZWxlY3RvcjoibmctdGVtcGxhdGVbbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50XSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTnVtYmVyVmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sTmFtZV0saW5wdXRbdHlwZT1udW1iZXJdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbmdNb2RlbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dfSl9fWUoIk1vZGJ1c0RhdGFLZXlzUGFuZWxDb21wb25lbnQiLGZvKSxIZShbTigpXSxmby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLEhlKFtOKCldLGZvLnByb3RvdHlwZSwiaGlkZU5ld0ZpZWxkcyIsdm9pZCAwKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtZGF0YS1rZXlzLXBhbmVsIixzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxUYSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJ0Yi1tb2RidXMta2V5cy1wYW5lbCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnt7IHBhbmVsVGl0bGUgIHwgdHJhbnNsYXRlIH19e3tcJyAoXCcgKyBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGggKyBcJylcJ319PC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBrZXktcGFuZWwiICpuZ0lmPSJrZXlzTGlzdEZvcm1BcnJheS5jb250cm9scy5sZW5ndGg7IGVsc2Ugbm9LZXlzIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItZmxleCBuby1mbGV4IHJvdyBjZW50ZXIgZmlsbC13aWR0aCJcbiAgICAgICAgICAgKm5nRm9yPSJsZXQga2V5Q29udHJvbCBvZiBrZXlzTGlzdEZvcm1BcnJheS5jb250cm9sczsgdHJhY2tCeTogdHJhY2tCeUNvbnRyb2xJZDsgbGV0ICRpbmRleCA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7Ij5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLWZsZXgiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09ImtleUNvbnRyb2wiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJsYXN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIGVsc2UgdGFnTmFtZSIgY2xhc3M9InRpdGxlLWNvbnRhaW5lciIgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPlxuICAgICAgICAgICAgICAgICAgICB7eyBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS52YWx1ZSB9fXt7IFwnLVwnIH19e3sga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhZ05hbWU+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciB0Yi1mbGV4Ij57eyBcJ2dhdGV3YXkua2V5XCcgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ia2V5LWxhYmVsIiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sga2V5Q29udHJvbC5nZXQoXCd0YWdcJykudmFsdWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUtY29udGFpbmVyIj57eyBcJ2dhdGV3YXkuYWRkcmVzc1wnIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImtleS1sYWJlbCI+e3sga2V5Q29udHJvbC5nZXQoXCdhZGRyZXNzXCcpLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlLWNvbnRhaW5lciI+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbGFiZWwiPnt7IGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0RXhwYW5zaW9uUGFuZWxDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZGF0YS1rZXlzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzZWUtZXhhbXBsZSJcbiAgICAgICAgICAgICAgICAgICAgICAgW3RiLWhlbHAtcG9wdXBdPSJcJ3dpZGdldC9saWIvZ2F0ZXdheS9tb2RidXMtZnVuY3Rpb25zLWRhdGEtdHlwZXNfZm5cJyJcbiAgICAgICAgICAgICAgICAgICAgICAgdGItaGVscC1wb3B1cC1wbGFjZW1lbnQ9ImxlZnQiXG4gICAgICAgICAgICAgICAgICAgICAgIFt0Yi1oZWxwLXBvcHVwLXN0eWxlXT0ie21heFdpZHRoOiBcJzk3MHB4XCd9Ij5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5wbGF0Zm9ybS1zaWRlPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmtleVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgZ2F0ZXdheS5rZXlcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRhZyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5rZXktcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImtleUNvbnRyb2wuZ2V0KFwndGFnXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlDb250cm9sLmdldChcJ3RhZ1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9yLXNpZGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIGdhdGV3YXkudHlwZVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c0RhdGFUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgdHlwZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj0id2l0aEZ1bmN0aW9uQ29kZSIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuZnVuY3Rpb24tY29kZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iZnVuY3Rpb25Db2RlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9ImxldCBjb2RlIG9mIGZ1bmN0aW9uQ29kZXNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIHx8IGRlZmF1bHRGdW5jdGlvbkNvZGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09ImNvZGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBNb2RidXNGdW5jdGlvbkNvZGVUcmFuc2xhdGlvbnNNYXAuZ2V0KGNvZGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5vYmplY3RzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lm9iamVjdHMtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49IjEiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTAwMDAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9Im9iamVjdHNDb3VudCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT0iIU1vZGJ1c0VkaXRhYmxlRGF0YVR5cGVzLmluY2x1ZGVzKGtleUNvbnRyb2wuZ2V0KFwndHlwZVwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5vYmplY3RzLWNvdW50LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ29iamVjdHNDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCdvYmplY3RzQ291bnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmFkZHJlc3NcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYWRkcmVzczwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSI1MDAwMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iYWRkcmVzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5hZGRyZXNzLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJrZXlDb250cm9sLmdldChcJ2FkZHJlc3NcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnYWRkcmVzc1wnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9InNob3dNb2RpZmllcnNNYXAuZ2V0KGtleUNvbnRyb2wuZ2V0KFwnaWRcJykudmFsdWUpIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkudmFsdWUiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJjZW50ZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT0iZW5hYmxlTW9kaWZpZXJzQ29udHJvbE1hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdpZFwnKS52YWx1ZSkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im1hdC1zbGlkZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCkiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1vZGlmaWVyXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMgdGItZmxleCBmdWxsLXdpZHRoIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50eXBlPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGZpbGwtd2lkdGgiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9Im1vZGlmaWVyVHlwZSI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtMTgiIFtzdmdJY29uXT0iTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5pY29uIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgTW9kaWZpZXJUeXBlc01hcC5nZXQoa2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclR5cGVcJykudmFsdWUpPy5uYW1lIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtb2RpZmllclR5cGUgb2YgbW9kaWZpZXJUeXBlcyIgW3ZhbHVlXT0ibW9kaWZpZXJUeXBlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC0yMCIgc3ZnSWNvbj0ie3sgTW9kaWZpZXJUeXBlc01hcC5nZXQobW9kaWZpZXJUeXBlKS5pY29uIH19Ij5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IE1vZGlmaWVyVHlwZXNNYXAuZ2V0KG1vZGlmaWVyVHlwZSkubmFtZSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBjbGFzcz0idGItaW5saW5lLWZpZWxkIGZsZXggdGItc3VmZml4LWFic29sdXRlIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHJlcXVpcmVkIGZvcm1Db250cm9sTmFtZT0ibW9kaWZpZXJWYWx1ZSIgc3RlcD0iMC4xIiB0eXBlPSJudW1iZXIiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19IiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lm1vZGlmaWVyLWludmFsaWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCdtb2RpZmllclZhbHVlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUNvbnRyb2wuZ2V0KFwnbW9kaWZpZXJWYWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9ImlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS52YWx1ZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS52YWx1ZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ia2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Q29udHJvbC5nZXQoXCd2YWx1ZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1yZXBvcnQtc3RyYXRlZ3lcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9IndpdGhSZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09IlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlLktleSJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJyZXBvcnRTdHJhdGVneSJcbiAgICAgICAgICAgICAgICAgICAgW2lzRXhwYW5zaW9uTW9kZV09InRydWUiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlS2V5KCRldmVudCwgJGluZGV4KSJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09ImRlbGV0ZUtleVRpdGxlIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXY+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJhZGRLZXkoKSI+XG4gICAgICAgIHt7IGFkZEtleVRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjbm9LZXlzPlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZmxleCBjZW50ZXIgYWxpZ24tY2VudGVyIGtleS1wYW5lbCI+XG4gICAgICA8c3BhbiBjbGFzcz0idGItcHJvbXB0IiB0cmFuc2xhdGU+e3sgbm9LZXlzVGV4dCB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz0idGItZmxleCBmbGV4LWVuZCI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uXG4gICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIChjbGljayk9ImNhbmNlbCgpIj5cbiAgICAgIHt7IFwnYWN0aW9uLmNhbmNlbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvblxuICAgICAgICAgICAgY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAoY2xpY2spPSJhcHBseUtleXNEYXRhKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJrZXlzTGlzdEZvcm1BcnJheS5pbnZhbGlkIHx8ICFrZXlzTGlzdEZvcm1BcnJheS5kaXJ0eSI+XG4gICAgICB7eyBcJ2FjdGlvbi5hcHBseVwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnRiLW1vZGJ1cy1rZXlzLXBhbmVse3dpZHRoOjc3dnc7bWF4LXdpZHRoOjcwMHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAudGl0bGUtY29udGFpbmVye3dpZHRoOjE4MHB4fTpob3N0IC50Yi1tb2RidXMta2V5cy1wYW5lbCAua2V5LWxhYmVse2ZvbnQtd2VpZ2h0OjQwMH06aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLmtleS1wYW5lbHtoZWlnaHQ6NTAwcHg7b3ZlcmZsb3c6YXV0b306aG9zdCAudGItbW9kYnVzLWtleXMtcGFuZWwgLnRiLWZvcm0tcGFuZWwgLm1hdC1tZGMtaWNvbi1idXR0b257d2lkdGg6NTZweDtoZWlnaHQ6NTZweDtwYWRkaW5nOjE2cHg7Y29sb3I6IzAwMDAwMDhhfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuVW50eXBlZEZvcm1CdWlsZGVyfV0scHJvcERlY29yYXRvcnM6e2lzTWFzdGVyOlt7dHlwZTphfV0saGlkZU5ld0ZpZWxkczpbe3R5cGU6YX1dLHBhbmVsVGl0bGU6W3t0eXBlOmF9XSxhZGRLZXlUaXRsZTpbe3R5cGU6YX1dLGRlbGV0ZUtleVRpdGxlOlt7dHlwZTphfV0sbm9LZXlzVGV4dDpbe3R5cGU6YX1dLGtleXNUeXBlOlt7dHlwZTphfV0sdmFsdWVzOlt7dHlwZTphfV0scG9wb3Zlcjpbe3R5cGU6YX1dLGtleXNEYXRhQXBwbGllZDpbe3R5cGU6bH1dfX0pO2NsYXNzIHlve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy5mYj1lLHRoaXMucG9wb3ZlclNlcnZpY2U9dCx0aGlzLnJlbmRlcmVyPW4sdGhpcy52aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5jZHI9byx0aGlzLnNpbmdsZU1vZGU9ITEsdGhpcy5oaWRlTmV3RmllbGRzPSExLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5tb2RidXNSZWdpc3RlclR5cGVzPU9iamVjdC52YWx1ZXMoWG4pLHRoaXMubW9kYnVzVmFsdWVLZXlzPU9iamVjdC52YWx1ZXMoYWEpLHRoaXMuTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwPVpuLHRoaXMuTW9kYnVzVmFsdWVLZXk9YWEsdGhpcy5kZXN0cm95JD1uZXcgU2V9bmdPbkluaXQoKXt0aGlzLmluaXRpYWxpemVWYWx1ZXNGb3JtR3JvdXAoKSx0aGlzLm9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9cmVnaXN0ZXJPbkNoYW5nZShlKXt0aGlzLm9uQ2hhbmdlPWV9cmVnaXN0ZXJPblRvdWNoZWQoZSl7dGhpcy5vblRvdWNoZWQ9ZX13cml0ZVZhbHVlKGUpe2lmKHRoaXMuc2luZ2xlTW9kZSl0aGlzLnZhbHVlc0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoZSkse2VtaXRFdmVudDohMX0pO2Vsc2V7Y29uc3R7aG9sZGluZ19yZWdpc3RlcnM6dCxjb2lsc19pbml0aWFsaXplcjpuLGlucHV0X3JlZ2lzdGVyczphLGRpc2NyZXRlX2lucHV0czpvfT1lO3RoaXMudmFsdWVzRm9ybUdyb3VwLnNldFZhbHVlKHtob2xkaW5nX3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUodCksY29pbHNfaW5pdGlhbGl6ZXI6dGhpcy5nZXRTaW5nbGVSZWdpc3RlclN0YXRlKG4pLGlucHV0X3JlZ2lzdGVyczp0aGlzLmdldFNpbmdsZVJlZ2lzdGVyU3RhdGUoYSksZGlzY3JldGVfaW5wdXRzOnRoaXMuZ2V0U2luZ2xlUmVnaXN0ZXJTdGF0ZShvKX0se2VtaXRFdmVudDohMX0pfXRoaXMuY2RyLm1hcmtGb3JDaGVjaygpfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMudmFsdWVzRm9ybUdyb3VwLnZhbGlkP251bGw6e3ZhbHVlc0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX1zZXREaXNhYmxlZFN0YXRlKGUpe3RoaXMuZGlzYWJsZWQ9ZSx0aGlzLmNkci5tYXJrRm9yQ2hlY2soKX1nZXRWYWx1ZUdyb3VwKGUsdCl7cmV0dXJuIHQ/dGhpcy52YWx1ZXNGb3JtR3JvdXAuZ2V0KHQpLmdldChlKTp0aGlzLnZhbHVlc0Zvcm1Hcm91cC5nZXQoZSl9bWFuYWdlS2V5cyhlLHQsbixhKXtlLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG89dC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O2lmKHRoaXMucG9wb3ZlclNlcnZpY2UuaGFzUG9wb3ZlcihvKSlyZXR1cm4gdm9pZCB0aGlzLnBvcG92ZXJTZXJ2aWNlLmhpZGVQb3BvdmVyKG8pO2NvbnN0IGk9dGhpcy5nZXRWYWx1ZUdyb3VwKG4sYSkscj17dmFsdWVzOmkudmFsdWUsaXNNYXN0ZXI6IXRoaXMuc2luZ2xlTW9kZSxrZXlzVHlwZTpuLHBhbmVsVGl0bGU6b2EuZ2V0KG4pLGFkZEtleVRpdGxlOmlhLmdldChuKSxkZWxldGVLZXlUaXRsZTpyYS5nZXQobiksbm9LZXlzVGV4dDpzYS5nZXQobiksaGlkZU5ld0ZpZWxkczp0aGlzLmhpZGVOZXdGaWVsZHN9LHM9dGhpcy5wb3BvdmVyU2VydmljZS5kaXNwbGF5UG9wb3ZlcihvLHRoaXMucmVuZGVyZXIsdGhpcy52aWV3Q29udGFpbmVyUmVmLGZvLCJsZWZ0Qm90dG9tIiwhMSxudWxsLHIse30se30se30sITApO3MudGJDb21wb25lbnRSZWYuaW5zdGFuY2UucG9wb3Zlcj1zLHMudGJDb21wb25lbnRSZWYuaW5zdGFuY2Uua2V5c0RhdGFBcHBsaWVkLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3MuaGlkZSgpLGkucGF0Y2hWYWx1ZShlKSxpLm1hcmtBc0RpcnR5KCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9KSl9aW5pdGlhbGl6ZVZhbHVlc0Zvcm1Hcm91cCgpe2NvbnN0IGU9KCk9PnRoaXMuZmIuZ3JvdXAodGhpcy5tb2RidXNWYWx1ZUtleXMucmVkdWNlKCgoZSx0KT0+KGVbdF09dGhpcy5mYi5jb250cm9sKFtbXSxbXV0pLGUpKSx7fSkpO3RoaXMuc2luZ2xlTW9kZT90aGlzLnZhbHVlc0Zvcm1Hcm91cD1lKCk6dGhpcy52YWx1ZXNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh0aGlzLm1vZGJ1c1JlZ2lzdGVyVHlwZXMucmVkdWNlKCgodCxuKT0+KHRbbl09ZSgpLHQpKSx7fSkpfW9ic2VydmVWYWx1ZXNDaGFuZ2VzKCl7dGhpcy52YWx1ZXNGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1nZXRTaW5nbGVSZWdpc3RlclN0YXRlKGUpe3JldHVybnthdHRyaWJ1dGVzOmU/LmF0dHJpYnV0ZXM/P1tdLHRpbWVzZXJpZXM6ZT8udGltZXNlcmllcz8/W10sYXR0cmlidXRlVXBkYXRlczplPy5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6ZT8ucnBjPz9bXX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp5byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpmdC5UYlBvcG92ZXJTZXJ2aWNlfSx7dG9rZW46dC5SZW5kZXJlcjJ9LHt0b2tlbjp0LlZpZXdDb250YWluZXJSZWZ9LHt0b2tlbjp0LkNoYW5nZURldGVjdG9yUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp5byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGlucHV0czp7c2luZ2xlTW9kZToic2luZ2xlTW9kZSIsaGlkZU5ld0ZpZWxkczoiaGlkZU5ld0ZpZWxkcyJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PnlvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwLHNlbGVjdG9yOiJtYXQtYmFzaWMtY2hpcCwgW21hdC1iYXNpYy1jaGlwXSwgbWF0LWNoaXAsIFttYXQtY2hpcF0iLGlucHV0czpbInJvbGUiLCJpZCIsImFyaWEtbGFiZWwiLCJhcmlhLWRlc2NyaXB0aW9uIiwidmFsdWUiLCJjb2xvciIsInJlbW92YWJsZSIsImhpZ2hsaWdodGVkIiwiZGlzYWJsZVJpcHBsZSIsImRpc2FibGVkIl0sb3V0cHV0czpbInJlbW92ZWQiLCJkZXN0cm95ZWQiXSxleHBvcnRBczpbIm1hdENoaXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5dC5NYXRDaGlwTGlzdGJveCxzZWxlY3RvcjoibWF0LWNoaXAtbGlzdGJveCIsaW5wdXRzOlsibXVsdGlwbGUiLCJhcmlhLW9yaWVudGF0aW9uIiwic2VsZWN0YWJsZSIsImNvbXBhcmVXaXRoIiwicmVxdWlyZWQiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwidmFsdWUiXSxvdXRwdXRzOlsiY2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YnQuVGJJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1pY29uIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsidGJJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6a2Esc2VsZWN0b3I6Ilt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdIixpbnB1dHM6WyJ0Yi1lbGxpcHNpcy1jaGlwLWxpc3QiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNWYWx1ZXNDb21wb25lbnQiLHlvKSxIZShbTigpXSx5by5wcm90b3R5cGUsInNpbmdsZU1vZGUiLHZvaWQgMCksSGUoW04oKV0seW8ucHJvdG90eXBlLCJoaWRlTmV3RmllbGRzIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy12YWx1ZXMiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT55bykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+eW8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELGthXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcblxuPG5nLWNvbnRhaW5lciAqbmdJZj0ic2luZ2xlTW9kZSBlbHNlIG11bHRpcGxlVmlldyI+XG4gIDxkaXYgW2Zvcm1Hcm91cF09InZhbHVlc0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiIGZ4TGF5b3V0PSJjb2x1bW4iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJzaW5nbGVWaWV3IiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSJ7JGltcGxpY2l0OiBudWxsfSI+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjbXVsdGlwbGVWaWV3PlxuICA8bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwIj5cbiAgICA8bWF0LXRhYiAqbmdGb3I9ImxldCByZWdpc3RlciBvZiBtb2RidXNSZWdpc3RlclR5cGVzIiBsYWJlbD0ie3sgTW9kYnVzVmFsdWVzVHJhbnNsYXRpb25zTWFwLmdldChyZWdpc3RlcikgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT0idmFsdWVzRm9ybUdyb3VwLmdldChyZWdpc3RlcikiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09InNpbmdsZVZpZXciIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09InskaW1wbGljaXQ6IHJlZ2lzdGVyfSI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC10YWI+XG4gIDwvbWF0LXRhYi1ncm91cD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2luZ2xlVmlldyBsZXQtcmVnaXN0ZXI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZXM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5BVFRSSUJVVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgICAge3sgYXR0cmlidXRlLnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjYXR0cmlidXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc0J1dHRvbiwgTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS50aW1lc2VyaWVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggY2xhc3M9InRiLWZsZXgiIFt0Yi1lbGxpcHNpcy1jaGlwLWxpc3RdPSJnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlRJTUVTRVJJRVMsIHJlZ2lzdGVyKS52YWx1ZSI+XG4gICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9ImxldCB0ZWxlbWV0cnkgb2YgZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikudmFsdWUiPlxuICAgICAgICAgIHt7IHRlbGVtZXRyeS50YWcgfX1cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgPG1hdC1jaGlwIGNsYXNzPSJtYXQtbWRjLWNoaXAgZWxsaXBzaXMtY2hpcCI+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPSJlbGxpcHNpcy10ZXh0Ij48L2xhYmVsPlxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgI3RlbGVtZXRyeUJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgdGVsZW1ldHJ5QnV0dG9uLCBNb2RidXNWYWx1ZUtleS5USU1FU0VSSUVTLCByZWdpc3RlcikiPlxuICAgICAgICA8dGItaWNvbiBtYXRCdXR0b25JY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LmF0dHJpYnV0ZS11cGRhdGVzPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBlbGxpcHNpcy1jaGlwcy1jb250YWluZXIiPlxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggW3RiLWVsbGlwc2lzLWNoaXAtbGlzdF09ImdldFZhbHVlR3JvdXAoTW9kYnVzVmFsdWVLZXkuQVRUUklCVVRFU19VUERBVEVTLCByZWdpc3RlcikudmFsdWUiIGNsYXNzPSJ0Yi1mbGV4Ij5cbiAgICAgICAgPG1hdC1jaGlwICpuZ0Zvcj0ibGV0IGF0dHJpYnV0ZVVwZGF0ZSBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBhdHRyaWJ1dGVVcGRhdGUudGFnIH19XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgIDxtYXQtY2hpcCBjbGFzcz0ibWF0LW1kYy1jaGlwIGVsbGlwc2lzLWNoaXAiPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz0iZWxsaXBzaXMtdGV4dCI+PC9sYWJlbD5cbiAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iZGlzYWJsZWQiXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5lZGl0XCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICNhdHRyaWJ1dGVzVXBkYXRlc0J1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VLZXlzKCRldmVudCwgYXR0cmlidXRlc1VwZGF0ZXNCdXR0b24sIE1vZGJ1c1ZhbHVlS2V5LkFUVFJJQlVURVNfVVBEQVRFUywgcmVnaXN0ZXIpIj5cbiAgICAgICAgPHRiLWljb24gbWF0QnV0dG9uSWNvbj5lZGl0PC90Yi1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5ycGMtcmVxdWVzdHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IGVsbGlwc2lzLWNoaXBzLWNvbnRhaW5lciI+XG4gICAgICA8bWF0LWNoaXAtbGlzdGJveCBbdGItZWxsaXBzaXMtY2hpcC1saXN0XT0iZ2V0VmFsdWVHcm91cChNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKS52YWx1ZSIgY2xhc3M9InRiLWZsZXgiPlxuICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPSJsZXQgcnBjUmVxdWVzdCBvZiBnZXRWYWx1ZUdyb3VwKE1vZGJ1c1ZhbHVlS2V5LlJQQ19SRVFVRVNUUywgcmVnaXN0ZXIpLnZhbHVlIj5cbiAgICAgICAgICB7eyBycGNSZXF1ZXN0LnRhZyB9fVxuICAgICAgICA8L21hdC1jaGlwPlxuICAgICAgICA8bWF0LWNoaXAgY2xhc3M9Im1hdC1tZGMtY2hpcCBlbGxpcHNpcy1jaGlwIj5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9ImVsbGlwc2lzLXRleHQiPjwvbGFiZWw+XG4gICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJkaXNhYmxlZCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uZWRpdFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAjcnBjUmVxdWVzdHNCdXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT0ibWFuYWdlS2V5cygkZXZlbnQsIHJwY1JlcXVlc3RzQnV0dG9uLCBNb2RidXNWYWx1ZUtleS5SUENfUkVRVUVTVFMsIHJlZ2lzdGVyKSI+XG4gICAgICAgIDx0Yi1pY29uIG1hdEJ1dHRvbkljb24+ZWRpdDwvdGItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcnttaW4taGVpZ2h0OjMyMHB4fTo6bmctZGVlcCAubWRjLWV2b2x1dGlvbi1jaGlwLXNldF9fY2hpcHN7YWxpZ24taXRlbXM6Y2VudGVyfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOmZ0LlRiUG9wb3ZlclNlcnZpY2V9LHt0eXBlOnQuUmVuZGVyZXIyfSx7dHlwZTp0LlZpZXdDb250YWluZXJSZWZ9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSxwcm9wRGVjb3JhdG9yczp7c2luZ2xlTW9kZTpbe3R5cGU6YX1dLGhpZGVOZXdGaWVsZHM6W3t0eXBlOmF9XX19KTtjbGFzcyBib3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZmI9ZSx0aGlzLmNkcj10LHRoaXMuaXNNYXN0ZXI9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe2NlcnRmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxrZXlmaWxlOlsiIixbdWUucGF0dGVybihrdCldXSxwYXNzd29yZDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0sc2VydmVyX2hvc3RuYW1lOlsiIixbdWUucGF0dGVybihrdCldXSxyZXFjbGljZXJ0Olt7dmFsdWU6ITEsZGlzYWJsZWQ6ITB9XX0pLHRoaXMub2JzZXJ2ZVZhbHVlQ2hhbmdlcygpfW5nT25DaGFuZ2VzKCl7dGhpcy51cGRhdGVNYXN0ZXJFbmFibGluZygpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9c2V0RGlzYWJsZWRTdGF0ZShlKXt0aGlzLmRpc2FibGVkPWUsdGhpcy5kaXNhYmxlZD90aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmRpc2FibGUoe2VtaXRFdmVudDohMX0pOnRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnVwZGF0ZU1hc3RlckVuYWJsaW5nKCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe2NvbnN0e2NlcnRmaWxlOnQscGFzc3dvcmQ6bixrZXlmaWxlOmEsc2VydmVyX2hvc3RuYW1lOm99PWUsaT17Y2VydGZpbGU6dD8/IiIscGFzc3dvcmQ6bj8/IiIsa2V5ZmlsZTphPz8iIixzZXJ2ZXJfaG9zdG5hbWU6bz8/IiIscmVxY2xpY2VydDohIWUucmVxY2xpY2VydH07dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC5yZXNldChpLHtlbWl0RXZlbnQ6ITF9KX11cGRhdGVNYXN0ZXJFbmFibGluZygpe3RoaXMuaXNNYXN0ZXI/KHRoaXMuZGlzYWJsZWR8fHRoaXMuc2VjdXJpdHlDb25maWdGb3JtR3JvdXAuZ2V0KCJyZXFjbGljZXJ0IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0aGlzLmRpc2FibGVkfHx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgic2VydmVyX2hvc3RuYW1lIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwLmdldCgicmVxY2xpY2VydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pKX1vYnNlcnZlVmFsdWVDaGFuZ2VzKCl7dGhpcy5zZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Ym8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6e2lzTWFzdGVyOiJpc01hc3RlciJ9LHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmJvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfV0sdXNlc09uQ2hhbmdlczohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyIgW2Zvcm1Hcm91cF09InNlY3VyaXR5Q29uZmlnRm9ybUdyb3VwIj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1oaW50IHRiLXByaW1hcnktZmlsbCI+e3sgXCdnYXRld2F5LmhpbnRzLnBhdGgtaW4tb3NcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkuY2xpZW50LWNlcnQtcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY2VydGZpbGUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkucHJpdmF0ZS1rZXktcGF0aFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+Z2F0ZXdheS5wcml2YXRlLWtleS1wYXRoPC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXlmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5wYXNzd29yZDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAgYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0IiBtYXRTdWZmaXg+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1wYXNzd29yZCBjbGFzcz0idGItZmxleCBhbGlnbi1jZW50ZXIgZmlsbC1oZWlnaHQiPjwvdGItdG9nZ2xlLXBhc3N3b3JkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSIhaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBzcGFjZS1iZXR3ZWVuIHRiLWZsZXggZmlsbC13aWR0aCI+XG4gICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1ob3N0bmFtZTwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJfaG9zdG5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSJpc01hc3RlciIgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXFjbGljZXJ0Ij5cbiAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgIHt7IFwnZ2F0ZXdheS5yZXF1ZXN0LWNsaWVudC1jZXJ0aWZpY2F0ZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L21hdC1sYWJlbD5cbiAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRGVmYXVsdFZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sTmFtZV0sdGV4dGFyZWFbZm9ybUNvbnRyb2xOYW1lXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbF0sdGV4dGFyZWFbZm9ybUNvbnRyb2xdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW25nTW9kZWxdLHRleHRhcmVhW25nTW9kZWxdLFtuZ0RlZmF1bHRDb250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp0dC5Ub2dnbGVQYXNzd29yZENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXBhc3N3b3JkIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1IZShbTigpXSxiby5wcm90b3R5cGUsImlzTWFzdGVyIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Ym8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ibykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Ym8pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciIFtmb3JtR3JvdXBdPSJzZWN1cml0eUNvbmZpZ0Zvcm1Hcm91cCI+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwiPnt7IFwnZ2F0ZXdheS5oaW50cy5wYXRoLWluLW9zXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jYS1jZXJ0XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgPHNwYW4gdGJUcnVuY2F0ZVdpdGhUb29sdGlwIHRyYW5zbGF0ZT5nYXRld2F5LmNsaWVudC1jZXJ0LXBhdGg8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNlcnRmaWxlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LnByaXZhdGUta2V5LXBhdGhcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPmdhdGV3YXkucHJpdmF0ZS1rZXktcGF0aDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ia2V5ZmlsZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IHNwYWNlLWJldHdlZW4gdGItZmxleCBmaWxsLXdpZHRoIj5cbiAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBhc3N3b3JkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIGFsaWduLWNlbnRlciBmaWxsLWhlaWdodCIgbWF0U3VmZml4PlxuICAgICAgICAgIDx0Yi10b2dnbGUtcGFzc3dvcmQgY2xhc3M9InRiLWZsZXggYWxpZ24tY2VudGVyIGZpbGwtaGVpZ2h0Ij48L3RiLXRvZ2dsZS1wYXNzd29yZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iIWlzTWFzdGVyIiBjbGFzcz0idGItZm9ybS1yb3cgc3BhY2UtYmV0d2VlbiB0Yi1mbGV4IGZpbGwtd2lkdGgiPlxuICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItaG9zdG5hbWU8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0ic2VydmVyX2hvc3RuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj0iaXNNYXN0ZXIiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmVxY2xpY2VydCI+XG4gICAgICA8bWF0LWxhYmVsPlxuICAgICAgICB7eyBcJ2dhdGV3YXkucmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9tYXQtbGFiZWw+XG4gICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntpc01hc3Rlcjpbe3R5cGU6YX1dfX0pO2NsYXNzIGhvIGV4dGVuZHMgUHtjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKHQsbixvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9byx0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c1Bhcml0aWVzPU9iamVjdC52YWx1ZXMoWW4pLHRoaXMubW9kYnVzQnl0ZVNpemVzPSRuLHRoaXMubW9kYnVzQmF1ZHJhdGVzPWxhLHRoaXMubW9kYnVzT3JkZXJUeXBlPU9iamVjdC52YWx1ZXMoSm4pLHRoaXMuTW9kYnVzUHJvdG9jb2xUeXBlPUhuLHRoaXMuTW9kYnVzUGFyaXR5TGFiZWxzTWFwPVFuLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5Nb2RidXNNZXRob2RMYWJlbHNNYXA9S24sdGhpcy5SZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZT1sbix0aGlzLm1vZGJ1c0hlbHBMaW5rPXYrIi9kb2NzL2lvdC1nYXRld2F5L2NvbmZpZy9tb2RidXMvI3NlY3Rpb24tbWFzdGVyLWRlc2NyaXB0aW9uLWFuZC1jb25maWd1cmF0aW9uLXBhcmFtZXRlcnMiLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSIsInN0b3BiaXRzIiwiYnl0ZXNpemUiLCJwYXJpdHkiLCJzdHJpY3QiXSx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXM9WyJwb3J0Iiwic2VjdXJpdHkiLCJob3N0Il0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5zaG93U2VjdXJpdHlDb250cm9sPXRoaXMuZmIuY29udHJvbCghMSksdGhpcy5pbml0aWFsaXplU2xhdmVGb3JtR3JvdXAoKSx0aGlzLnVwZGF0ZVNsYXZlRm9ybUdyb3VwKCksdGhpcy51cGRhdGVDb250cm9sc0VuYWJsaW5nKHRoaXMuZGF0YS52YWx1ZS50eXBlKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCksdGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnBhdGNoVmFsdWUoISF0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkmJiFlZSh0aGlzLmRhdGEudmFsdWUuc2VjdXJpdHkse30pKX1nZXQgcHJvdG9jb2xUeXBlKCl7cmV0dXJuIHRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWV9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYuY2xvc2UobnVsbCl9YWRkKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZCYmdGhpcy5kaWFsb2dSZWYuY2xvc2UodGhpcy5nZXRTbGF2ZVJlc3VsdERhdGEoKSl9aW5pdGlhbGl6ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cD10aGlzLmZiLmdyb3VwKHt0eXBlOltIbi5UQ1BdLGhvc3Q6WyIiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKGt0KV1dLHBvcnQ6W251bGwsW3VlLnJlcXVpcmVkLHVlLm1pbihFdC5NSU4pLHVlLm1heChFdC5NQVgpXV0sc2VyaWFsUG9ydDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sbWV0aG9kOltXbi5TT0NLRVQsW3VlLnJlcXVpcmVkXV0sYmF1ZHJhdGU6W3RoaXMubW9kYnVzQmF1ZHJhdGVzWzBdXSxzdG9wYml0czpbMV0sYnl0ZXNpemU6WyRuWzBdXSxwYXJpdHk6W1luLk5vbmVdLHN0cmljdDpbITBdLHVuaXRJZDpbbnVsbCxbdWUucmVxdWlyZWRdXSxkZXZpY2VOYW1lOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxkZXZpY2VUeXBlOlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSx0aW1lb3V0OlszNV0sYnl0ZU9yZGVyOltKbi5CSUddLHdvcmRPcmRlcjpbSm4uQklHXSxyZXRyaWVzOlshMF0scmV0cnlPbkVtcHR5OlshMF0scmV0cnlPbkludmFsaWQ6WyEwXSxwb2xsUGVyaW9kOls1ZTMsW3VlLnJlcXVpcmVkXV0sY29ubmVjdEF0dGVtcHRUaW1lTXM6WzVlMyxbdWUucmVxdWlyZWRdXSxjb25uZWN0QXR0ZW1wdENvdW50Ols1LFt1ZS5yZXF1aXJlZF1dLHdhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXM6WzNlNSxbdWUucmVxdWlyZWRdXSx2YWx1ZXM6W3t9XSxzZWN1cml0eTpbe31dfSksdGhpcy5hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpfXVwZGF0ZVNsYXZlRm9ybUdyb3VwKCl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5wYXRjaFZhbHVlKHsuLi50aGlzLmRhdGEudmFsdWUscG9ydDp0aGlzLmRhdGEudmFsdWUudHlwZT09PUhuLlNlcmlhbD9udWxsOnRoaXMuZGF0YS52YWx1ZS5wb3J0LHNlcmlhbFBvcnQ6dGhpcy5kYXRhLnZhbHVlLnR5cGU9PT1Ibi5TZXJpYWw/dGhpcy5kYXRhLnZhbHVlLnBvcnQ6IiIsdmFsdWVzOnthdHRyaWJ1dGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVzPz9bXSx0aW1lc2VyaWVzOnRoaXMuZGF0YS52YWx1ZS50aW1lc2VyaWVzPz9bXSxhdHRyaWJ1dGVVcGRhdGVzOnRoaXMuZGF0YS52YWx1ZS5hdHRyaWJ1dGVVcGRhdGVzPz9bXSxycGM6dGhpcy5kYXRhLnZhbHVlLnJwYz8/W119fSl9b2JzZXJ2ZVR5cGVDaGFuZ2UoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbnRyb2xzRW5hYmxpbmcoZSksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlQ29udHJvbHNFbmFibGluZyhlKXtjb25zdFt0LG5dPWU9PT1Ibi5TZXJpYWw/W3RoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cyx0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXNdOlt0aGlzLnRjcFVkcFNwZWNpZmljQ29udHJvbEtleXMsdGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzXTt0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKSx0aGlzLnVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcodGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlKX1vYnNlcnZlU2hvd1NlY3VyaXR5KCl7dGhpcy5zaG93U2VjdXJpdHlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PnRoaXMudXBkYXRlU2VjdXJpdHlFbmFibGluZyhlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxpbmcoZSl7ZSYmdGhpcy5wcm90b2NvbFR5cGUhPT1Ibi5TZXJpYWw/dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgic2VjdXJpdHkiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOmhvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fWUoIk1vZGJ1c1NsYXZlRGlhbG9nQWJzdHJhY3QiLGhvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmhvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpvdC5TdG9yZX0se3R5cGU6aXQuUm91dGVyfSx7dHlwZTp2b2lkIDAsZGVjb3JhdG9yczpbe3R5cGU6cCxhcmdzOltYZV19XX0se3R5cGU6SmUuTWF0RGlhbG9nUmVmfV19KTtjbGFzcyB4byBleHRlbmRzIGhve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7c3VwZXIoZSx0LG4sYSxvKSx0aGlzLmZiPWUsdGhpcy5zdG9yZT10LHRoaXMucm91dGVyPW4sdGhpcy5kYXRhPWEsdGhpcy5kaWFsb2dSZWY9b31nZXRTbGF2ZVJlc3VsdERhdGEoKXtjb25zdHt2YWx1ZXM6ZSx0eXBlOnQsc2VyaWFsUG9ydDpuLC4uLmF9PXRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAudmFsdWUsbz17Li4uYSx0eXBlOnQsLi4uZX07cmV0dXJuIHQ9PT1Ibi5TZXJpYWwmJihvLnBvcnQ9biksby5yZXBvcnRTdHJhdGVneXx8ZGVsZXRlIG8ucmVwb3J0U3RyYXRlZ3ksb31hZGRGaWVsZHNUb0Zvcm1Hcm91cCgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuYWRkQ29udHJvbCgicmVwb3J0U3RyYXRlZ3kiLHRoaXMuZmIuY29udHJvbChudWxsKSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTp4byxkZXBzOlt7dG9rZW46bWUuRm9ybUJ1aWxkZXJ9LHt0b2tlbjpvdC5TdG9yZX0se3Rva2VuOml0LlJvdXRlcn0se3Rva2VuOlhlfSx7dG9rZW46SmUuTWF0RGlhbG9nUmVmfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTp4byxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNTbGF2ZURpYWxvZ0NvbXBvbmVudCIseG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6eG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1kaWFsb2ciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCx5byxibyx3YSxnbyxTYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJzbGF2ZXMtY29uZmlnLWNvbnRhaW5lciI+XG4gIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSI+XG4gICAgPGgyPnt7IFwnZ2F0ZXdheS5zZXJ2ZXItc2xhdmVcJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gICAgPHNwYW4gZnhGbGV4Pjwvc3Bhbj5cbiAgICA8ZGl2IFt0Yi1oZWxwXT0ibW9kYnVzSGVscExpbmsiPjwvZGl2PlxuICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiI+XG4gICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9idXR0b24+XG4gIDwvbWF0LXRvb2xiYXI+XG4gIDxkaXYgbWF0LWRpYWxvZy1jb250ZW50IFtmb3JtR3JvdXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cCIgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgIDxkaXYgY2xhc3M9InN0cm9rZWQgdGItZm9ybS1wYW5lbCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5zZXJ2ZXItY29ubmVjdGlvbjwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCB0eXBlIG9mIG1vZGJ1c1Byb3RvY29sVHlwZXMiIFt2YWx1ZV09InR5cGUiPnt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldCh0eXBlKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICAgICAgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5ob3N0LXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSJwcm90b2NvbFR5cGUgIT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgZWxzZSBzZXJpYWxQb3J0IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBvcnQ8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49Int7cG9ydExpbWl0cy5NSU59fSIgbWF4PSJ7e3BvcnRMaW1pdHMuTUFYfX0iXG4gICAgICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpIHwgZ2V0R2F0ZXdheVBvcnRUb29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iKHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykuaGFzRXJyb3IoXCdtYXhcJykpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zZXJpYWwtcG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InNlcmlhbFBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3NlcmlhbFBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuZnJhbWVyLXR5cGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBnYXRld2F5Lm1ldGhvZFxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbWV0aG9kIG9mIHByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCA/IG1vZGJ1c1NlcmlhbE1ldGhvZFR5cGVzIDogbW9kYnVzTWV0aG9kVHlwZXMiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJtZXRob2QiPnt7IE1vZGJ1c01ldGhvZExhYmVsc01hcC5nZXQobWV0aG9kKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYmF1ZHJhdGVcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYmF1ZHJhdGU8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJhdWRyYXRlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHJhdGUgb2YgbW9kYnVzQmF1ZHJhdGVzIiBbdmFsdWVdPSJyYXRlIj57eyByYXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGVzaXplXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGVzaXplPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlc2l6ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBzaXplIG9mIG1vZGJ1c0J5dGVTaXplcyIgW3ZhbHVlXT0ic2l6ZSI+e3sgc2l6ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdG9wYml0c1wnIHwgdHJhbnNsYXRlIH19IiAgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcGJpdHM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InN0b3BiaXRzIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wYXJpdHlcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucGFyaXR5PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJwYXJpdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgcGFyaXR5IG9mIG1vZGJ1c1Bhcml0aWVzIiBbdmFsdWVdPSJwYXJpdHkiPnt7IE1vZGJ1c1Bhcml0eUxhYmVsc01hcC5nZXQocGFyaXR5KSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzdHJpY3QiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnN0cmljdFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RyaWN0XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMudW5pdC1pZFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS51bml0LWlkPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ1bml0SWQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS51bml0LWlkLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwndW5pdElkXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1uYW1lLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5kZXZpY2UtcHJvZmlsZTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJkZXZpY2VUeXBlIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnZGV2aWNlVHlwZVwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0iZGF0YS5oaWRlTmV3RmllbGRzIGVsc2UgcmVwb3J0U3RyYXRlZ3kiIGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic2VuZERhdGFPbmx5T25DaGFuZ2UiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtZGF0YS1vbi1jaGFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZXBvcnRTdHJhdGVneT5cbiAgICAgICAgICA8dGItcmVwb3J0LXN0cmF0ZWd5IFtkZWZhdWx0VmFsdWVdPSJSZXBvcnRTdHJhdGVneURlZmF1bHRWYWx1ZS5EZXZpY2UiIGZvcm1Db250cm9sTmFtZT0icmVwb3J0U3RyYXRlZ3kiIFtpc0V4cGFuc2lvbk1vZGVdPSJ0cnVlIi8+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdGlvbi10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3Rpb24tdGltZW91dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlLW9yZGVyXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJ5dGUtb3JkZXI8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImJ5dGVPcmRlciI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgb3JkZXIgb2YgbW9kYnVzT3JkZXJUeXBlIiBbdmFsdWVdPSJvcmRlciI+e3sgb3JkZXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud29yZC1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS53b3JkLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJ3b3JkT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIHRiLXNsaWRlLXRvZ2dsZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBmeExheW91dD0icm93IHdyYXAiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50bHMtY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIGNsYXNzPSJzZWN1cml0eS1jb25maWciIGZvcm1Db250cm9sTmFtZT0ic2VjdXJpdHkiPjwvdGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZz5cbiAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cmllcyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnJldHJpZXNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJyZXRyeU9uRW1wdHkiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWVtcHR5XCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkludmFsaWQiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5yZXRyaWVzLW9uLWludmFsaWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5wb2xsLXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgICAgICAgICAgIGdhdGV3YXkucG9sbC1wZXJpb2RcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC10aW1lXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC10aW1lPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjb25uZWN0QXR0ZW1wdFRpbWVNcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuY29ubmVjdC1hdHRlbXB0LWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmNvbm5lY3QtYXR0ZW1wdC1jb3VudDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRDb3VudCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHNcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9IndhaXRBZnRlckZhaWxlZEF0dGVtcHRzTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICAgICAgICA8dGItbW9kYnVzLXZhbHVlcyBbc2luZ2xlTW9kZV09InRydWUiIFtoaWRlTmV3RmllbGRzXT0iZGF0YS5oaWRlTmV3RmllbGRzIiBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnMgZnhMYXlvdXRBbGlnbj0iZW5kIGNlbnRlciI+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAoY2xpY2spPSJjYW5jZWwoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5jYW5jZWxcJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICAoY2xpY2spPSJhZGQoKSJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmludmFsaWQgfHwgIXNsYXZlQ29uZmlnRm9ybUdyb3VwLmRpcnR5Ij5cbiAgICAgIHt7IGRhdGEuYnV0dG9uVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdCAuc2xhdmVzLWNvbmZpZy1jb250YWluZXJ7d2lkdGg6ODB2dzttYXgtd2lkdGg6OTAwcHh9Omhvc3QgLnNsYXZlLW5hbWUtbGFiZWx7bWFyZ2luLXJpZ2h0OjE2cHg7Y29sb3I6IzAwMDAwMGRlfTpob3N0IC5maXhlZC10aXRsZS13aWR0aC0yNjB7bWluLXdpZHRoOjI2MHB4fTpob3N0IDo6bmctZGVlcCAuc2VjdXJpdHktY29uZmlnIC5maXhlZC10aXRsZS13aWR0aHttaW4td2lkdGg6MjMwcHh9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6b3QuU3RvcmV9LHt0eXBlOml0LlJvdXRlcn0se3R5cGU6dm9pZCAwLGRlY29yYXRvcnM6W3t0eXBlOnAsYXJnczpbWGVdfV19LHt0eXBlOkplLk1hdERpYWxvZ1JlZn1dfSk7Y2xhc3Mgdm8gZXh0ZW5kcyBob3tjb25zdHJ1Y3RvcihlLHQsbixhLG8pe3N1cGVyKGUsdCxuLGEsbyksdGhpcy5mYj1lLHRoaXMuc3RvcmU9dCx0aGlzLnJvdXRlcj1uLHRoaXMuZGF0YT1hLHRoaXMuZGlhbG9nUmVmPW99Z2V0U2xhdmVSZXN1bHREYXRhKCl7Y29uc3R7dmFsdWVzOmUsdHlwZTp0LHNlcmlhbFBvcnQ6biwuLi5hfT10aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlLG89ey4uLmEsdHlwZTp0LC4uLmV9O3JldHVybiB0PT09SG4uU2VyaWFsJiYoby5wb3J0PW4pLG99YWRkRmllbGRzVG9Gb3JtR3JvdXAoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmFkZENvbnRyb2woInNlbmREYXRhT25seU9uQ2hhbmdlIix0aGlzLmZiLmNvbnRyb2woITEpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOnZvLGRlcHM6W3t0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOm90LlN0b3JlfSx7dG9rZW46aXQuUm91dGVyfSx7dG9rZW46WGV9LHt0b2tlbjpKZS5NYXREaWFsb2dSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOnZvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1zbGF2ZS1kaWFsb2ciLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nRm9yT2Ysc2VsZWN0b3I6IltuZ0Zvcl1bbmdGb3JPZl0iLGlucHV0czpbIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiLCJuZ0ZvclRlbXBsYXRlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ0lmLHNlbGVjdG9yOiJbbmdJZl0iLGlucHV0czpbIm5nSWYiLCJuZ0lmVGhlbiIsIm5nSWZFbHNlIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmR0LkhlbHBDb21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oZWxwXSIsaW5wdXRzOlsidGItaGVscCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEJ1dHRvbixzZWxlY3RvcjoiICAgIGJ1dHRvblttYXQtYnV0dG9uXSwgYnV0dG9uW21hdC1yYWlzZWQtYnV0dG9uXSwgYnV0dG9uW21hdC1mbGF0LWJ1dHRvbl0sICAgIGJ1dHRvblttYXQtc3Ryb2tlZC1idXR0b25dICAiLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0SWNvbkJ1dHRvbixzZWxlY3RvcjoiYnV0dG9uW21hdC1pY29uLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpKZS5NYXREaWFsb2dBY3Rpb25zLHNlbGVjdG9yOiJbbWF0LWRpYWxvZy1hY3Rpb25zXSwgbWF0LWRpYWxvZy1hY3Rpb25zLCBbbWF0RGlhbG9nQWN0aW9uc10iLGlucHV0czpbImFsaWduIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdEZsZXhEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4RmxleF0sIFtmeEZsZXgueHNdLCBbZnhGbGV4LnNtXSwgW2Z4RmxleC5tZF0sICBbZnhGbGV4LmxnXSwgW2Z4RmxleC54bF0sIFtmeEZsZXgubHQtc21dLCBbZnhGbGV4Lmx0LW1kXSwgIFtmeEZsZXgubHQtbGddLCBbZnhGbGV4Lmx0LXhsXSwgW2Z4RmxleC5ndC14c10sIFtmeEZsZXguZ3Qtc21dLCAgW2Z4RmxleC5ndC1tZF0sIFtmeEZsZXguZ3QtbGddIixpbnB1dHM6WyJmeEZsZXgiLCJmeEZsZXgueHMiLCJmeEZsZXguc20iLCJmeEZsZXgubWQiLCJmeEZsZXgubGciLCJmeEZsZXgueGwiLCJmeEZsZXgubHQtc20iLCJmeEZsZXgubHQtbWQiLCJmeEZsZXgubHQtbGciLCJmeEZsZXgubHQteGwiLCJmeEZsZXguZ3QteHMiLCJmeEZsZXguZ3Qtc20iLCJmeEZsZXguZ3QtbWQiLCJmeEZsZXguZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5EZWZhdWx0VmFsdWVBY2Nlc3NvcixzZWxlY3RvcjoiaW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xOYW1lXSx0ZXh0YXJlYVtmb3JtQ29udHJvbE5hbWVdLGlucHV0Om5vdChbdHlwZT1jaGVja2JveF0pW2Zvcm1Db250cm9sXSx0ZXh0YXJlYVtmb3JtQ29udHJvbF0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbbmdNb2RlbF0sdGV4dGFyZWFbbmdNb2RlbF0sW25nRGVmYXVsdENvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OdW1iZXJWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bZm9ybUNvbnRyb2xdLGlucHV0W3R5cGU9bnVtYmVyXVtuZ01vZGVsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1pblZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21pbl1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21pbl1bbmdNb2RlbF0iLGlucHV0czpbIm1pbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk1heFZhbGlkYXRvcixzZWxlY3RvcjoiaW5wdXRbdHlwZT1udW1iZXJdW21heF1bZm9ybUNvbnRyb2xOYW1lXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW21heF1bbmdNb2RlbF0iLGlucHV0czpbIm1heCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WWUuVHJ1bmNhdGVXaXRoVG9vbHRpcERpcmVjdGl2ZSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp5byxzZWxlY3RvcjoidGItbW9kYnVzLXZhbHVlcyIsaW5wdXRzOlsic2luZ2xlTW9kZSIsImhpZGVOZXdGaWVsZHMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpibyxzZWxlY3RvcjoidGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyIsaW5wdXRzOlsiaXNNYXN0ZXIiXX0se2tpbmQ6InBpcGUiLHR5cGU6d2EsbmFtZToiZ2V0R2F0ZXdheVBvcnRUb29sdGlwIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpnbyxzZWxlY3RvcjoidGItcmVwb3J0LXN0cmF0ZWd5IixpbnB1dHM6WyJpc0V4cGFuc2lvbk1vZGUiLCJkZWZhdWx0VmFsdWUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lTbGF2ZURpYWxvZ0NvbXBvbmVudCIsdm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6dm8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktc2xhdmUtZGlhbG9nIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQseW8sYm8sd2EsZ29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0ic2xhdmVzLWNvbmZpZy1jb250YWluZXIiPlxuICA8bWF0LXRvb2xiYXIgY29sb3I9InByaW1hcnkiPlxuICAgIDxoMj57eyBcJ2dhdGV3YXkuc2VydmVyLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgPGRpdiBbdGItaGVscF09Im1vZGJ1c0hlbHBMaW5rIj48L2Rpdj5cbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXRlcmlhbC1pY29ucyI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L21hdC10b29sYmFyPlxuICA8ZGl2IG1hdC1kaWFsb2ctY29udGVudCBbZm9ybUdyb3VwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICA8ZGl2IGNsYXNzPSJzdHJva2VkIHRiLWZvcm0tcGFuZWwiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggcm93IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIG5vLWdhcCBmaWxsLXdpZHRoIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLWNvbm5lY3Rpb248L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InR5cGUiIGFwcGVhcmFuY2U9ImZpbGwiPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gKm5nRm9yPSJsZXQgdHlwZSBvZiBtb2RidXNQcm90b2NvbFR5cGVzIiBbdmFsdWVdPSJ0eXBlIj57eyBNb2RidXNQcm90b2NvbExhYmVsc01hcC5nZXQodHlwZSkgfX08L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5Lmhvc3Q8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iaG9zdCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuaG9zdC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIGVsc2Ugc2VyaWFsUG9ydCJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgICAgICBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKSB8IGdldEdhdGV3YXlQb3J0VG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VyaWFsUG9ydD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSJcJ2dhdGV3YXkucG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdzZXJpYWxQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnc2VyaWFsUG9ydFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmZyYW1lci10eXBlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibWV0aG9kIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG1ldGhvZCBvZiBwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwgPyBtb2RidXNTZXJpYWxNZXRob2RUeXBlcyA6IG1vZGJ1c01ldGhvZFR5cGVzIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPSJwcm90b2NvbFR5cGUgPT09IE1vZGJ1c1Byb3RvY29sVHlwZS5TZXJpYWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5ieXRlc2l6ZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlc2l6ZTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZXNpemUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgc2l6ZSBvZiBtb2RidXNCeXRlU2l6ZXMiIFt2YWx1ZV09InNpemUiPnt7IHNpemUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc3RvcGJpdHNcJyB8IHRyYW5zbGF0ZSB9fSIgIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3BiaXRzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzdG9wYml0cyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucGFyaXR5XCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnBhcml0eTwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0icGFyaXR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBhcml0eSBvZiBtb2RidXNQYXJpdGllcyIgW3ZhbHVlXT0icGFyaXR5Ij57eyBNb2RidXNQYXJpdHlMYWJlbHNNYXAuZ2V0KHBhcml0eSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0ic3RyaWN0Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5zdHJpY3RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0cmljdFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLnVuaXQtaWRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkudW5pdC1pZDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idW5pdElkIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgICB3YXJuaW5nXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRyYW5zbGF0ZT5nYXRld2F5LmRldmljZS1uYW1lPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImRldmljZU5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKFwnZ2F0ZXdheS5kZXZpY2UtbmFtZS1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5LmRldmljZS1wcm9maWxlLXJlcXVpcmVkXCcpIHwgdHJhbnNsYXRlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9ImRhdGEuaGlkZU5ld0ZpZWxkcyBlbHNlIHJlcG9ydFN0cmF0ZWd5IiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InNlbmREYXRhT25seU9uQ2hhbmdlIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtb24tY2hhbmdlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVwb3J0U3RyYXRlZ3k+XG4gICAgICAgICAgPHRiLXJlcG9ydC1zdHJhdGVneSBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuRGV2aWNlIiBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IiBbaXNFeHBhbnNpb25Nb2RlXT0idHJ1ZSIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyI+XG4gICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuYWR2YW5jZWQtY29ubmVjdGlvbi1zZXR0aW5nczwvZGl2PlxuICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3Rpb24tdGltZW91dFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0aW9uLXRpbWVvdXQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InRpbWVvdXQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuYnl0ZS1vcmRlclwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5ieXRlLW9yZGVyPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJieXRlT3JkZXIiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBvcmRlciBvZiBtb2RidXNPcmRlclR5cGUiIFt2YWx1ZV09Im9yZGVyIj57eyBvcmRlciB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGNsYXNzPSJ0Yi1zZXR0aW5ncyIgW2V4cGFuZGVkXT0ic2hvd1NlY3VyaXR5Q29udHJvbC52YWx1ZSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgZnhMYXlvdXQ9InJvdyB3cmFwIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmeExheW91dEFsaWduPSJjZW50ZXIiIFtmb3JtQ29udHJvbF09InNob3dTZWN1cml0eUNvbnRyb2wiIGNsYXNzPSJtYXQtc2xpZGUiIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICA8dGItbW9kYnVzLXNlY3VyaXR5LWNvbmZpZyBjbGFzcz0ic2VjdXJpdHktY29uZmlnIiBmb3JtQ29udHJvbE5hbWU9InNlY3VyaXR5Ij48L3RiLW1vZGJ1cy1zZWN1cml0eS1jb25maWc+XG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJpZXMiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5yZXRyaWVzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllc1wnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0icmV0cnlPbkVtcHR5Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1lbXB0eVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJldHJpZXMtb24tZW1wdHlcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3ciIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBmb3JtQ29udHJvbE5hbWU9InJldHJ5T25JbnZhbGlkIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmV0cmllcy1vbi1pbnZhbGlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoLTI2MCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiB0YlRydW5jYXRlV2l0aFRvb2x0aXAgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICAgICAgICBnYXRld2F5LnBvbGwtcGVyaW9kXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwb2xsUGVyaW9kIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgtMjYwIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5jb25uZWN0LWF0dGVtcHQtdGltZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtdGltZTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iY29ubmVjdEF0dGVtcHRUaW1lTXMiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmNvbm5lY3QtYXR0ZW1wdC1jb3VudFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0LWF0dGVtcHQtY291bnQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9ImNvbm5lY3RBdHRlbXB0Q291bnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aC0yNjAgdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJ3YWl0QWZ0ZXJGYWlsZWRBdHRlbXB0c01zIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICAgICAgPHRiLW1vZGJ1cy12YWx1ZXMgW3NpbmdsZU1vZGVdPSJ0cnVlIiBbaGlkZU5ld0ZpZWxkc109ImRhdGEuaGlkZU5ld0ZpZWxkcyIgZm9ybUNvbnRyb2xOYW1lPSJ2YWx1ZXMiPjwvdGItbW9kYnVzLXZhbHVlcz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249ImVuZCBjZW50ZXIiPlxuICAgIDxidXR0b24gbWF0LWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgKGNsaWNrKT0iYWRkKCkiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5pbnZhbGlkIHx8ICFzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXJ0eSI+XG4gICAgICB7eyBkYXRhLmJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLnNsYXZlcy1jb25maWctY29udGFpbmVye3dpZHRoOjgwdnc7bWF4LXdpZHRoOjkwMHB4fTpob3N0IC5zbGF2ZS1uYW1lLWxhYmVse21hcmdpbi1yaWdodDoxNnB4O2NvbG9yOiMwMDAwMDBkZX06aG9zdCAuZml4ZWQtdGl0bGUtd2lkdGgtMjYwe21pbi13aWR0aDoyNjBweH06aG9zdCA6Om5nLWRlZXAgLnNlY3VyaXR5LWNvbmZpZyAuZml4ZWQtdGl0bGUtd2lkdGh7bWluLXdpZHRoOjIzMHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9LHt0eXBlOm90LlN0b3JlfSx7dHlwZTppdC5Sb3V0ZXJ9LHt0eXBlOnZvaWQgMCxkZWNvcmF0b3JzOlt7dHlwZTpwLGFyZ3M6W1hlXX1dfSx7dHlwZTpKZS5NYXREaWFsb2dSZWZ9XX0pO2NsYXNzIHdve2NvbnN0cnVjdG9yKGUsdCxuLGEsbyl7dGhpcy50cmFuc2xhdGU9ZSx0aGlzLmRpYWxvZz10LHRoaXMuZGlhbG9nU2VydmljZT1uLHRoaXMuZmI9YSx0aGlzLmNkcj1vLHRoaXMuaXNMZWdhY3k9ITEsdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2g9dGhpcy5mYi5jb250cm9sKCIiLHtub25OdWxsYWJsZTohMH0pLHRoaXMuTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXA9em4sdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9LHRoaXMuZGVzdHJveSQ9bmV3IFNlLHRoaXMubWFzdGVyRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3NsYXZlczp0aGlzLmZiLmFycmF5KFtdKX0pLHRoaXMuZGF0YVNvdXJjZT1uZXcgQ299Z2V0IHNsYXZlcygpe3JldHVybiB0aGlzLm1hc3RlckZvcm1Hcm91cC5nZXQoInNsYXZlcyIpfW5nT25Jbml0KCl7dGhpcy5tYXN0ZXJGb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlVGFibGVEYXRhKGUuc2xhdmVzKSx0aGlzLm9uQ2hhbmdlKGUpLHRoaXMub25Ub3VjaGVkKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy50ZXh0U2VhcmNoLnZhbHVlQ2hhbmdlcy5waXBlKFZlKDE1MCksQmUoKChlLHQpPT4oZT8/IiIpPT09dC50cmltKCkpKSxOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT50aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSxlLnRyaW0oKSkpKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5zbGF2ZXMuY2xlYXIoKSx0aGlzLnB1c2hEYXRhQXNGb3JtQXJyYXlzKGUuc2xhdmVzKX1lbnRlckZpbHRlck1vZGUoKXt0aGlzLnRleHRTZWFyY2hNb2RlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtjb25zdCBlPXRoaXMuc2VhcmNoSW5wdXRGaWVsZC5uYXRpdmVFbGVtZW50O2UuZm9jdXMoKSxlLnNldFNlbGVjdGlvblJhbmdlKDAsMCl9ZXhpdEZpbHRlck1vZGUoKXt0aGlzLnVwZGF0ZVRhYmxlRGF0YSh0aGlzLnNsYXZlcy52YWx1ZSksdGhpcy50ZXh0U2VhcmNoTW9kZT0hMSx0aGlzLnRleHRTZWFyY2gucmVzZXQoKX1tYW5hZ2VTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1pZSh0KSxhPW4/dGhpcy5zbGF2ZXMuYXQodCkudmFsdWU6e307dGhpcy5nZXRTbGF2ZURpYWxvZyhhLG4/ImFjdGlvbi5hcHBseSI6ImFjdGlvbi5hZGQiKS5hZnRlckNsb3NlZCgpLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJihuP3RoaXMuc2xhdmVzLmF0KHQpLnBhdGNoVmFsdWUoZSk6dGhpcy5zbGF2ZXMucHVzaCh0aGlzLmZiLmNvbnRyb2woZSkpLHRoaXMubWFzdGVyRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfSkpfWdldFNsYXZlRGlhbG9nKGUsdCl7cmV0dXJuIHRoaXMuaXNMZWdhY3k/dGhpcy5kaWFsb2cub3Blbih2byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e3ZhbHVlOmUsaGlkZU5ld0ZpZWxkczohMCxidXR0b25UaXRsZTp0fX0pOnRoaXMuZGlhbG9nLm9wZW4oeG8se2Rpc2FibGVDbG9zZTohMCxwYW5lbENsYXNzOlsidGItZGlhbG9nIiwidGItZnVsbHNjcmVlbi1kaWFsb2ciXSxkYXRhOnt2YWx1ZTplLGJ1dHRvblRpdGxlOnQsaGlkZU5ld0ZpZWxkczohMX19KX1kZWxldGVTbGF2ZShlLHQpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5kZWxldGUtc2xhdmUtdGl0bGUiKSwiIix0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApLnBpcGUoT2UoMSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2UmJih0aGlzLnNsYXZlcy5yZW1vdmVBdCh0KSx0aGlzLm1hc3RlckZvcm1Hcm91cC5tYXJrQXNEaXJ0eSgpKX0pKX11cGRhdGVUYWJsZURhdGEoZSx0KXt0JiYoZT1lLmZpbHRlcigoZT0+T2JqZWN0LnZhbHVlcyhlKS5zb21lKChlPT5lLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0LnRvTG93ZXJDYXNlKCkpKSkpKSksdGhpcy5kYXRhU291cmNlLmxvYWREYXRhKGUpfXB1c2hEYXRhQXNGb3JtQXJyYXlzKGUpe2U/Lmxlbmd0aCYmZS5mb3JFYWNoKChlPT50aGlzLnNsYXZlcy5wdXNoKHRoaXMuZmIuY29udHJvbChlKSkpKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOndvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0b2tlbjpKZS5NYXREaWFsb2d9LHt0b2tlbjpYLkRpYWxvZ1NlcnZpY2V9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOndvLGlzU3RhbmRhbG9uZTohMCxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOntpc0xlZ2FjeToiaXNMZWdhY3kifSxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6InNlYXJjaElucHV0RmllbGQiLGZpcnN0OiEwLHByZWRpY2F0ZTpbInNlYXJjaElucHV0Il0sZGVzY2VuZGFudHM6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdDbGFzcyxzZWxlY3RvcjoiW25nQ2xhc3NdIixpbnB1dHM6WyJjbGFzcyIsIm5nQ2xhc3MiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJwaXBlIix0eXBlOl8uQXN5bmNQaXBlLG5hbWU6ImFzeW5jIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpodC5NYXRNZW51LHNlbGVjdG9yOiJtYXQtbWVudSIsaW5wdXRzOlsiYmFja2Ryb3BDbGFzcyIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwieFBvc2l0aW9uIiwieVBvc2l0aW9uIiwib3ZlcmxhcFRyaWdnZXIiLCJoYXNCYWNrZHJvcCIsImNsYXNzIiwiY2xhc3NMaXN0Il0sb3V0cHV0czpbImNsb3NlZCIsImNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6aHQuTWF0TWVudVRyaWdnZXIsc2VsZWN0b3I6IlttYXQtbWVudS10cmlnZ2VyLWZvcl0sIFttYXRNZW51VHJpZ2dlckZvcl0iLGlucHV0czpbIm1hdC1tZW51LXRyaWdnZXItZm9yIiwibWF0TWVudVRyaWdnZXJGb3IiLCJtYXRNZW51VHJpZ2dlckRhdGEiLCJtYXRNZW51VHJpZ2dlclJlc3RvcmVGb2N1cyJdLG91dHB1dHM6WyJtZW51T3BlbmVkIiwib25NZW51T3BlbiIsIm1lbnVDbG9zZWQiLCJvbk1lbnVDbG9zZSJdLGV4cG9ydEFzOlsibWF0TWVudVRyaWdnZXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFRhYmxlLHNlbGVjdG9yOiJtYXQtdGFibGUsIHRhYmxlW21hdC10YWJsZV0iLGV4cG9ydEFzOlsibWF0VGFibGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGxEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJDZWxsRGVmXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJSb3dEZWYsc2VsZWN0b3I6IlttYXRIZWFkZXJSb3dEZWZdIixpbnB1dHM6WyJtYXRIZWFkZXJSb3dEZWYiLCJtYXRIZWFkZXJSb3dEZWZTdGlja3kiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdENvbHVtbkRlZixzZWxlY3RvcjoiW21hdENvbHVtbkRlZl0iLGlucHV0czpbIm1hdENvbHVtbkRlZiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbERlZixzZWxlY3RvcjoiW21hdENlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdFJvd0RlZixzZWxlY3RvcjoiW21hdFJvd0RlZl0iLGlucHV0czpbIm1hdFJvd0RlZkNvbHVtbnMiLCJtYXRSb3dEZWZXaGVuIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRIZWFkZXJDZWxsLHNlbGVjdG9yOiJtYXQtaGVhZGVyLWNlbGwsIHRoW21hdC1oZWFkZXItY2VsbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q2VsbCxzZWxlY3RvcjoibWF0LWNlbGwsIHRkW21hdC1jZWxsXSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRIZWFkZXJSb3csc2VsZWN0b3I6Im1hdC1oZWFkZXItcm93LCB0clttYXQtaGVhZGVyLXJvd10iLGV4cG9ydEFzOlsibWF0SGVhZGVyUm93Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Yi5NYXRSb3csc2VsZWN0b3I6Im1hdC1yb3csIHRyW21hdC1yb3ddIixleHBvcnRBczpbIm1hdFJvdyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFNob3dIaWRlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeFNob3ddLCBbZnhTaG93LnByaW50XSwgIFtmeFNob3cueHNdLCBbZnhTaG93LnNtXSwgW2Z4U2hvdy5tZF0sIFtmeFNob3cubGddLCBbZnhTaG93LnhsXSwgIFtmeFNob3cubHQtc21dLCBbZnhTaG93Lmx0LW1kXSwgW2Z4U2hvdy5sdC1sZ10sIFtmeFNob3cubHQteGxdLCAgW2Z4U2hvdy5ndC14c10sIFtmeFNob3cuZ3Qtc21dLCBbZnhTaG93Lmd0LW1kXSwgW2Z4U2hvdy5ndC1sZ10sICBbZnhIaWRlXSwgW2Z4SGlkZS5wcmludF0sICBbZnhIaWRlLnhzXSwgW2Z4SGlkZS5zbV0sIFtmeEhpZGUubWRdLCBbZnhIaWRlLmxnXSwgW2Z4SGlkZS54bF0sICBbZnhIaWRlLmx0LXNtXSwgW2Z4SGlkZS5sdC1tZF0sIFtmeEhpZGUubHQtbGddLCBbZnhIaWRlLmx0LXhsXSwgIFtmeEhpZGUuZ3QteHNdLCBbZnhIaWRlLmd0LXNtXSwgW2Z4SGlkZS5ndC1tZF0sIFtmeEhpZGUuZ3QtbGddIixpbnB1dHM6WyJmeFNob3ciLCJmeFNob3cucHJpbnQiLCJmeFNob3cueHMiLCJmeFNob3cuc20iLCJmeFNob3cubWQiLCJmeFNob3cubGciLCJmeFNob3cueGwiLCJmeFNob3cubHQtc20iLCJmeFNob3cubHQtbWQiLCJmeFNob3cubHQtbGciLCJmeFNob3cubHQteGwiLCJmeFNob3cuZ3QteHMiLCJmeFNob3cuZ3Qtc20iLCJmeFNob3cuZ3QtbWQiLCJmeFNob3cuZ3QtbGciLCJmeEhpZGUiLCJmeEhpZGUucHJpbnQiLCJmeEhpZGUueHMiLCJmeEhpZGUuc20iLCJmeEhpZGUubWQiLCJmeEhpZGUubGciLCJmeEhpZGUueGwiLCJmeEhpZGUubHQtc20iLCJmeEhpZGUubHQtbWQiLCJmeEhpZGUubHQtbGciLCJmeEhpZGUubHQteGwiLCJmeEhpZGUuZ3QteHMiLCJmeEhpZGUuZ3Qtc20iLCJmeEhpZGUuZ3QtbWQiLCJmeEhpZGUuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpLLkRlZmF1bHRDbGFzc0RpcmVjdGl2ZSxzZWxlY3RvcjoiICBbbmdDbGFzc10sIFtuZ0NsYXNzLnhzXSwgW25nQ2xhc3Muc21dLCBbbmdDbGFzcy5tZF0sIFtuZ0NsYXNzLmxnXSwgW25nQ2xhc3MueGxdLCAgW25nQ2xhc3MubHQtc21dLCBbbmdDbGFzcy5sdC1tZF0sIFtuZ0NsYXNzLmx0LWxnXSwgW25nQ2xhc3MubHQteGxdLCAgW25nQ2xhc3MuZ3QteHNdLCBbbmdDbGFzcy5ndC1zbV0sIFtuZ0NsYXNzLmd0LW1kXSwgW25nQ2xhc3MuZ3QtbGddIixpbnB1dHM6WyJuZ0NsYXNzIiwibmdDbGFzcy54cyIsIm5nQ2xhc3Muc20iLCJuZ0NsYXNzLm1kIiwibmdDbGFzcy5sZyIsIm5nQ2xhc3MueGwiLCJuZ0NsYXNzLmx0LXNtIiwibmdDbGFzcy5sdC1tZCIsIm5nQ2xhc3MubHQtbGciLCJuZ0NsYXNzLmx0LXhsIiwibmdDbGFzcy5ndC14cyIsIm5nQ2xhc3MuZ3Qtc20iLCJuZ0NsYXNzLmd0LW1kIiwibmdDbGFzcy5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpidC5UYkljb25Db21wb25lbnQsc2VsZWN0b3I6InRiLWljb24iLGlucHV0czpbImNvbG9yIl0sZXhwb3J0QXM6WyJ0Ykljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpTYSxzZWxlY3RvcjoiW3RiVHJ1bmNhdGVXaXRoVG9vbHRpcF0iLGlucHV0czpbInRiVHJ1bmNhdGVXaXRoVG9vbHRpcCIsInRvb2x0aXBFbmFibGVkIiwicG9zaXRpb24iXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNNYXN0ZXJUYWJsZUNvbXBvbmVudCIsd28pLEhlKFt4dCgpXSx3by5wcm90b3R5cGUsImlzTGVnYWN5Iix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6d28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT53bykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsU2FdLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPGRpdiBjbGFzcz0idGItbWFzdGVyLXRhYmxlIHRiLWFic29sdXRlLWZpbGwiPlxuICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLW1hc3RlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGZ4RmxleCBmeExheW91dD0iY29sdW1uIiBjbGFzcz0idGItbWFzdGVyLXRhYmxlLWNvbnRlbnQiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlIj5cbiAgICAgIDxkaXYgY2xhc3M9Im1hdC10b29sYmFyLXRvb2xzIiAqbmdJZj0iKGRhdGFTb3VyY2UuaXNFbXB0eSgpIHwgYXN5bmMpID09PSBmYWxzZSI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0ic3RhcnQgY2VudGVyIiBmeExheW91dC54cz0iY29sdW1uIiBmeExheW91dEFsaWduLnhzPSJjZW50ZXIgc3RhcnQiIGNsYXNzPSJ0aXRsZS1jb250YWluZXIiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0Yi1tYXN0ZXItdGFibGUtdGl0bGUiPnt7IFwnZ2F0ZXdheS5zZXJ2ZXJzLXNsYXZlc1wnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c3BhbiBmeEZsZXg+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCkiXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uYWRkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9ImVudGVyRmlsdGVyTW9kZSgpIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLnNlYXJjaFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LXRvb2xiYXI+XG4gICAgPG1hdC10b29sYmFyIGNsYXNzPSJtYXQtbWRjLXRhYmxlLXRvb2xiYXIiIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSI+XG4gICAgICA8ZGl2IGNsYXNzPSJtYXQtdG9vbGJhci10b29scyI+XG4gICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdhY3Rpb24uc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PlxuICAgICAgICAgIDxtYXQtbGFiZWw+Jm5ic3A7PC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0ICNzZWFyY2hJbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPSJ0ZXh0U2VhcmNoIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0ie3sgXCdjb21tb24uZW50ZXItc2VhcmNoXCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iZXhpdEZpbHRlck1vZGUoKSJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2FjdGlvbi5jbG9zZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiPlxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPSJ0YWJsZS1jb250YWluZXIiPlxuICAgICAgPHRhYmxlIG1hdC10YWJsZSBbZGF0YVNvdXJjZV09ImRhdGFTb3VyY2UiPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ2RldmljZU5hbWVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IFwnZ2F0ZXdheS5kZXZpY2UtbmFtZVwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgc2xhdmUiIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAgPGRpdiB0YlRydW5jYXRlV2l0aFRvb2x0aXA+e3sgc2xhdmVbXCdkZXZpY2VOYW1lXCddIH19PC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09IlwnaW5mb1wnIj5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIGNsYXNzPSJ0YWJsZS12YWx1ZS1jb2x1bW4iPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmluZm9cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXYgdGJUcnVuY2F0ZVdpdGhUb29sdGlwPnt7IHNsYXZlW1wnaG9zdFwnXSA/PyBzbGF2ZVtcJ3BvcnRcJ10gfX08L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT0iXCd1bml0SWRcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBzbGF2ZSIgY2xhc3M9InRhYmxlLXZhbHVlLWNvbHVtbiI+XG4gICAgICAgICAgICA8ZGl2IHRiVHJ1bmNhdGVXaXRoVG9vbHRpcD57eyBzbGF2ZVtcJ3VuaXRJZFwnXSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPSJcJ3R5cGVcJyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIDxkaXY+e3sgXCdnYXRld2F5LnR5cGVcJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlIiBjbGFzcz0idGFibGUtdmFsdWUtY29sdW1uIj5cbiAgICAgICAgICAgIHt7IE1vZGJ1c1Byb3RvY29sTGFiZWxzTWFwLmdldChzbGF2ZVtcJ3R5cGVcJ10pIH19XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPSJhY3Rpb25zIiBzdGlja3lFbmQ+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzk2cHhcJywgbWF4V2lkdGg6IFwnOTZweFwnLCB3aWR0aDogXCc5NnB4XCcsIHRleHRBbGlnbjogXCdjZW50ZXJcJ30iPlxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IHNsYXZlOyBsZXQgaSA9IGluZGV4IlxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZS5ndC1tZF09InsgbWluV2lkdGg6IFwnOTZweFwnLCBtYXhXaWR0aDogXCc5NnB4XCcsIHdpZHRoOiBcJzk2cHhcJ30iPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNyb3dBY3Rpb25zPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmVkaXRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9Im1hbmFnZVNsYXZlKCRldmVudCwgaSkiPlxuICAgICAgICAgICAgICAgIDx0Yi1pY29uPmVkaXQ8L3RiLWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmRlbGV0ZVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iZGVsZXRlU2xhdmUoJGV2ZW50LCBpKSI+XG4gICAgICAgICAgICAgICAgPHRiLWljb24+ZGVsZXRlPC90Yi1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGZ4SGlkZSBmeFNob3cuZ3QtbWQgZnhGbGV4IGZ4TGF5b3V0PSJyb3ciIGZ4TGF5b3V0QWxpZ249ImVuZCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnIGZ4RmxleCBmeExheW91dD0icm93IiBmeExheW91dEFsaWduPSJlbmQiPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJyb3dBY3Rpb25zIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtbWVudT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bWF0LWhlYWRlci1yb3cgW25nQ2xhc3NdPSJ7XCdtYXQtcm93LXNlbGVjdFwnOiB0cnVlfSIgKm1hdEhlYWRlclJvd0RlZj0iW1wnZGV2aWNlTmFtZVwnLCBcJ2luZm9cJywgXCd1bml0SWRcJywgXCd0eXBlXCcsIFwnYWN0aW9uc1wnXTsgc3RpY2t5OiB0cnVlIj48L21hdC1oZWFkZXItcm93PlxuICAgICAgICA8bWF0LXJvdyAqbWF0Um93RGVmPSJsZXQgc2xhdmU7IGNvbHVtbnM6IFtcJ2RldmljZU5hbWVcJywgXCdpbmZvXCcsIFwndW5pdElkXCcsIFwndHlwZVwnLCBcJ2FjdGlvbnNcJ10iPjwvbWF0LXJvdz5cbiAgICAgIDwvdGFibGU+XG4gICAgICA8c2VjdGlvbiBbZnhTaG93XT0iIXRleHRTZWFyY2hNb2RlICYmIChkYXRhU291cmNlLmlzRW1wdHkoKSB8IGFzeW5jKSIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAoY2xpY2spPSJtYW5hZ2VTbGF2ZSgkZXZlbnQpIj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9InRiLW1hdC05NiI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICA8c3Bhbj57eyBcJ2dhdGV3YXkuYWRkLXNsYXZlXCcgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuIFtmeFNob3ddPSJ0ZXh0U2VhcmNoTW9kZSAmJiAoZGF0YVNvdXJjZS5pc0VtcHR5KCkgfCBhc3luYykiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgd2lkZ2V0Lm5vLWRhdGEtZm91bmRcbiAgICA8L3NwYW4+XG4gIDwvZGl2PlxuPC9kaXY+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50e3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDojZmZmO292ZXJmbG93OmhpZGRlbn06aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAubWF0LXRvb2xiYXItdG9vbHN7bWluLWhlaWdodDphdXRvfTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50aXRsZS1jb250YWluZXJ7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1yaWdodDoyMHB4O3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc306aG9zdCAudGItbWFzdGVyLXRhYmxlIC50Yi1tYXN0ZXItdGFibGUtY29udGVudCAudGFibGUtY29udGFpbmVye292ZXJmbG93OmF1dG99Omhvc3QgLnRiLW1hc3Rlci10YWJsZSAudGItbWFzdGVyLXRhYmxlLWNvbnRlbnQgLnRhYmxlLWNvbnRhaW5lciAubWF0LW1kYy10YWJsZXt0YWJsZS1sYXlvdXQ6Zml4ZWQ7bWluLXdpZHRoOjQ1MHB4fTpob3N0IC50Yi1tYXN0ZXItdGFibGUgLnRiLW1hc3Rlci10YWJsZS1jb250ZW50IC50YWJsZS1jb250YWluZXIgLm1hdC1tZGMtdGFibGUgLnRhYmxlLXZhbHVlLWNvbHVtbntwYWRkaW5nOjAgMTJweDt3aWR0aDozOCV9Omhvc3QgLm5vLWRhdGEtZm91bmR7aGVpZ2h0OmNhbGMoMTAwJSAtIDEyMHB4KX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA1OTlweCl7Omhvc3QgLm1hdC10b29sYmFye2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MTAwcHh9Omhvc3QgLm1hdC10b29sYmFyIC50Yi1tYXN0ZXItdGFibGUtdGl0bGV7cGFkZGluZy1ib3R0b206NXB4O3dpZHRoOjEwMCV9fTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxse2N1cnNvcjpwb2ludGVyfTpob3N0IDo6bmctZGVlcCBtYXQtY2VsbC50Yi12YWx1ZS1jZWxsIC5tYXQtaWNvbntoZWlnaHQ6MjRweDt3aWR0aDoyNHB4O2ZvbnQtc2l6ZToyNHB4O2NvbG9yOiM3NTc1NzV9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOkplLk1hdERpYWxvZ30se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTptZS5Gb3JtQnVpbGRlcn0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntzZWFyY2hJbnB1dEZpZWxkOlt7dHlwZTpvLGFyZ3M6WyJzZWFyY2hJbnB1dCJdfV0saXNMZWdhY3k6W3t0eXBlOmF9XX19KTtjbGFzcyBDbyBleHRlbmRzIFJ7Y29uc3RydWN0b3IoKXtzdXBlcigpfX1lKCJTbGF2ZXNEYXRhc291cmNlIixDbyk7Y2xhc3MgVG8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5lbmFibGVTbGF2ZUNvbnRyb2w9bmV3IHllKCExKSx0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy51cGRhdGVTbGF2ZUVuYWJsaW5nKGUpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzbGF2ZSIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohIXRoaXMub25DaGFuZ2V9KX0pKX13cml0ZVZhbHVlKGUpe3N1cGVyLndyaXRlVmFsdWUoZSksdGhpcy5vbkVuYWJsZVNsYXZlQ29udHJvbChlKX12YWxpZGF0ZSgpe2NvbnN0e21hc3RlcjplLHNsYXZlOnR9PXRoaXMuYmFzaWNGb3JtR3JvdXAudmFsdWUsbj0hZT8uc2xhdmVzPy5sZW5ndGgmJihlZSh0LHt9KXx8IXQpO3JldHVybiF0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkfHxuP3tiYXNpY0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fTpudWxsfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXN0ZXI6W10sc2xhdmU6W119KX11cGRhdGVTbGF2ZUVuYWJsaW5nKGUpe2U/dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInNsYXZlIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KTp0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgic2xhdmUiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1vbkVuYWJsZVNsYXZlQ29udHJvbChlKXt0aGlzLmVuYWJsZVNsYXZlQ29udHJvbC5zZXRWYWx1ZSghIWUuc2xhdmUmJiFlZShlLnNsYXZlLHt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpUbyxkZXBzOltdLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkRpcmVjdGl2ZX0pfXN0YXRpY3t0aGlzLsm1ZGlyPXQuybXJtW5nRGVjbGFyZURpcmVjdGl2ZSh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6VG8sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnR9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdEaXJlY3RpdmUiLFRvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlRvLGRlY29yYXRvcnM6W3t0eXBlOnN9XSxjdG9yUGFyYW1ldGVyczooKT0+W119KTtjbGFzcyBTb3tjb25zdHJ1Y3RvcihlKXt0aGlzLmZiPWUsdGhpcy5Nb2RidXNQcm90b2NvbExhYmVsc01hcD16bix0aGlzLk1vZGJ1c01ldGhvZExhYmVsc01hcD1Lbix0aGlzLnBvcnRMaW1pdHM9RXQsdGhpcy5tb2RidXNQcm90b2NvbFR5cGVzPU9iamVjdC52YWx1ZXMoSG4pLHRoaXMubW9kYnVzTWV0aG9kVHlwZXM9T2JqZWN0LnZhbHVlcyhXbiksdGhpcy5tb2RidXNTZXJpYWxNZXRob2RUeXBlcz1PYmplY3QudmFsdWVzKGpuKSx0aGlzLm1vZGJ1c09yZGVyVHlwZT1PYmplY3QudmFsdWVzKEpuKSx0aGlzLk1vZGJ1c1Byb3RvY29sVHlwZT1Ibix0aGlzLm1vZGJ1c0JhdWRyYXRlcz1sYSx0aGlzLmlzU2xhdmVFbmFibGVkPSExLHRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5cz1bInNlcmlhbFBvcnQiLCJiYXVkcmF0ZSJdLHRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cz1bInBvcnQiLCJzZWN1cml0eSIsImhvc3QiXSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCExKSx0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwPXRoaXMuZmIuZ3JvdXAoe3R5cGU6W0huLlRDUF0saG9zdDpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9ydDpbbnVsbCxbdWUucmVxdWlyZWQsdWUubWluKEV0Lk1JTiksdWUubWF4KEV0Lk1BWCldXSxzZXJpYWxQb3J0OlsiIixbdWUucmVxdWlyZWQsdWUucGF0dGVybihrdCldXSxtZXRob2Q6W1duLlNPQ0tFVF0sdW5pdElkOltudWxsLFt1ZS5yZXF1aXJlZF1dLGJhdWRyYXRlOlt0aGlzLm1vZGJ1c0JhdWRyYXRlc1swXV0sZGV2aWNlTmFtZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0sZGV2aWNlVHlwZTpbIiIsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oa3QpXV0scG9sbFBlcmlvZDpbNWUzLFt1ZS5yZXF1aXJlZF1dLHNlbmREYXRhVG9UaGluZ3NCb2FyZDpbITFdLGJ5dGVPcmRlcjpbSm4uQklHXSx3b3JkT3JkZXI6W0puLkJJR10sc2VjdXJpdHk6W10saWRlbnRpdHk6dGhpcy5mYi5ncm91cCh7dmVuZG9yTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdENvZGU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLHZlbmRvclVybDpbIiIsW3VlLnBhdHRlcm4oa3QpXV0scHJvZHVjdE5hbWU6WyIiLFt1ZS5wYXR0ZXJuKGt0KV1dLG1vZGVsTmFtZTpbIiIsW3VlLnBhdHRlcm4oa3QpXV19KSx2YWx1ZXM6W119KSx0aGlzLm9ic2VydmVWYWx1ZUNoYW5nZXMoKSx0aGlzLm9ic2VydmVUeXBlQ2hhbmdlKCksdGhpcy5vYnNlcnZlU2hvd1NlY3VyaXR5KCl9Z2V0IHByb3RvY29sVHlwZSgpe3JldHVybiB0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgidHlwZSIpLnZhbHVlfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9dmFsaWRhdGUoKXtyZXR1cm4gdGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC52YWxpZD9udWxsOntzbGF2ZUNvbmZpZ0Zvcm1Hcm91cDp7dmFsaWQ6ITF9fX13cml0ZVZhbHVlKGUpe3RoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5wYXRjaFZhbHVlKCEhZS5zZWN1cml0eSYmIWVlKGUuc2VjdXJpdHkse30pKSx0aGlzLnVwZGF0ZVNsYXZlQ29uZmlnKGUpfXNldERpc2FibGVkU3RhdGUoZSl7dGhpcy5pc1NsYXZlRW5hYmxlZD0hZSx0aGlzLnVwZGF0ZUZvcm1FbmFibGVTdGF0ZSgpfW9ic2VydmVWYWx1ZUNoYW5nZXMoKXt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9PntlLnR5cGU9PT1Ibi5TZXJpYWwmJihlLnBvcnQ9ZS5zZXJpYWxQb3J0LGRlbGV0ZSBlLnNlcmlhbFBvcnQpLHRoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1vYnNlcnZlVHlwZUNoYW5nZSgpe3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMudXBkYXRlRm9ybUVuYWJsZVN0YXRlKCksdGhpcy51cGRhdGVNZXRob2RUeXBlKGUpfSkpfXVwZGF0ZU1ldGhvZFR5cGUoZSl7dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoIm1ldGhvZCIpLnZhbHVlIT09V24uUlRVJiZ0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldCgibWV0aG9kIikucGF0Y2hWYWx1ZShlPT09SG4uU2VyaWFsP2puLkFTQ0lJOlduLlNPQ0tFVCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUVuYWJsZVN0YXRlKCl7dGhpcy5pc1NsYXZlRW5hYmxlZD8odGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5lbmFibGUoe2VtaXRFdmVudDohMX0pLHRoaXMuc2hvd1NlY3VyaXR5Q29udHJvbC5lbmFibGUoe2VtaXRFdmVudDohMX0pKToodGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpLHRoaXMudXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCksdGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZSh0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWUpfW9ic2VydmVTaG93U2VjdXJpdHkoKXt0aGlzLnNob3dTZWN1cml0eUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+dGhpcy51cGRhdGVTZWN1cml0eUVuYWJsZShlKSkpfXVwZGF0ZVNlY3VyaXR5RW5hYmxlKGUpe2UmJnRoaXMuaXNTbGF2ZUVuYWJsZWQmJnRoaXMucHJvdG9jb2xUeXBlIT09SG4uU2VyaWFsP3RoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KCJzZWN1cml0eSIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dGhpcy5zbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoInNlY3VyaXR5IikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRW5hYmxpbmdCeVByb3RvY29sKCl7Y29uc3QgZT10aGlzLnByb3RvY29sVHlwZT09PUhuLlNlcmlhbCx0PWU/dGhpcy5zZXJpYWxTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMudGNwVWRwU3BlY2lmaWNDb250cm9sS2V5cyxuPWU/dGhpcy50Y3BVZHBTcGVjaWZpY0NvbnRyb2xLZXlzOnRoaXMuc2VyaWFsU3BlY2lmaWNDb250cm9sS2V5czt0aGlzLmlzU2xhdmVFbmFibGVkJiZ0LmZvckVhY2goKGU9PnRoaXMuc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KGUpPy5lbmFibGUoe2VtaXRFdmVudDohMX0pKSksbi5mb3JFYWNoKChlPT50aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChlKT8uZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpKX11cGRhdGVTbGF2ZUNvbmZpZyhlKXtjb25zdHt0eXBlOnQ9SG4uVENQLG1ldGhvZDpuPVduLlJUVSx1bml0SWQ6YT0wLGRldmljZU5hbWU6bz0iIixkZXZpY2VUeXBlOmk9IiIscG9sbFBlcmlvZDpyPTVlMyxzZW5kRGF0YVRvVGhpbmdzQm9hcmQ6cz0hMSxieXRlT3JkZXI6bD1Kbi5CSUcsd29yZE9yZGVyOmM9Sm4uQklHLHNlY3VyaXR5OnA9e30saWRlbnRpdHk6bT17dmVuZG9yTmFtZToiIixwcm9kdWN0Q29kZToiIix2ZW5kb3JVcmw6IiIscHJvZHVjdE5hbWU6IiIsbW9kZWxOYW1lOiIifSx2YWx1ZXM6ZD17fSxiYXVkcmF0ZTp1PXRoaXMubW9kYnVzQmF1ZHJhdGVzWzBdLGhvc3Q6Zz0iIixwb3J0OmY9bnVsbH09ZSx5PXt0eXBlOnQsbWV0aG9kOm4sdW5pdElkOmEsZGV2aWNlTmFtZTpvLGRldmljZVR5cGU6aSxwb2xsUGVyaW9kOnIsc2VuZERhdGFUb1RoaW5nc0JvYXJkOiEhcyxieXRlT3JkZXI6bCx3b3JkT3JkZXI6YyxzZWN1cml0eTpwLGlkZW50aXR5Om0sdmFsdWVzOmQsYmF1ZHJhdGU6dSxob3N0OnQ9PT1Ibi5TZXJpYWw/IiI6Zyxwb3J0OnQ9PT1Ibi5TZXJpYWw/bnVsbDpmLHNlcmlhbFBvcnQ6dD09PUhuLlNlcmlhbD9mOiIifTt0aGlzLnNsYXZlQ29uZmlnRm9ybUdyb3VwLnNldFZhbHVlKHkse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpTbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlNvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfV0sbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6S2UuTWF0SWNvbixzZWxlY3RvcjoibWF0LWljb24iLGlucHV0czpbImNvbG9yIiwiaW5saW5lIiwic3ZnSWNvbiIsImZvbnRTZXQiLCJmb250SWNvbiJdLGV4cG9ydEFzOlsibWF0SWNvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnhlLk1hdElucHV0LHNlbGVjdG9yOiJpbnB1dFttYXRJbnB1dF0sIHRleHRhcmVhW21hdElucHV0XSwgc2VsZWN0W21hdE5hdGl2ZUNvbnRyb2xdLCAgICAgIGlucHV0W21hdE5hdGl2ZUNvbnRyb2xdLCB0ZXh0YXJlYVttYXROYXRpdmVDb250cm9sXSIsaW5wdXRzOlsiZGlzYWJsZWQiLCJpZCIsInBsYWNlaG9sZGVyIiwibmFtZSIsInJlcXVpcmVkIiwidHlwZSIsImVycm9yU3RhdGVNYXRjaGVyIiwiYXJpYS1kZXNjcmliZWRieSIsInZhbHVlIiwicmVhZG9ubHkiXSxleHBvcnRBczpbIm1hdElucHV0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dmUuTWF0Rm9ybUZpZWxkLHNlbGVjdG9yOiJtYXQtZm9ybS1maWVsZCIsaW5wdXRzOlsiaGlkZVJlcXVpcmVkTWFya2VyIiwiY29sb3IiLCJmbG9hdExhYmVsIiwiYXBwZWFyYW5jZSIsInN1YnNjcmlwdFNpemluZyIsImhpbnRMYWJlbCJdLGV4cG9ydEFzOlsibWF0Rm9ybUZpZWxkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWwsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwiLGlucHV0czpbImhpZGVUb2dnbGUiLCJ0b2dnbGVQb3NpdGlvbiJdLG91dHB1dHM6WyJhZnRlckV4cGFuZCIsImFmdGVyQ29sbGFwc2UiXSxleHBvcnRBczpbIm1hdEV4cGFuc2lvblBhbmVsIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsc2VsZWN0b3I6Im1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIixpbnB1dHM6WyJleHBhbmRlZEhlaWdodCIsImNvbGxhcHNlZEhlaWdodCIsInRhYkluZGV4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6JGUuTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSxzZWxlY3RvcjoibWF0LXBhbmVsLXRpdGxlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXREaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0XSwgW2Z4TGF5b3V0LnhzXSwgW2Z4TGF5b3V0LnNtXSwgW2Z4TGF5b3V0Lm1kXSwgIFtmeExheW91dC5sZ10sIFtmeExheW91dC54bF0sIFtmeExheW91dC5sdC1zbV0sIFtmeExheW91dC5sdC1tZF0sICBbZnhMYXlvdXQubHQtbGddLCBbZnhMYXlvdXQubHQteGxdLCBbZnhMYXlvdXQuZ3QteHNdLCBbZnhMYXlvdXQuZ3Qtc21dLCAgW2Z4TGF5b3V0Lmd0LW1kXSwgW2Z4TGF5b3V0Lmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXQiLCJmeExheW91dC54cyIsImZ4TGF5b3V0LnNtIiwiZnhMYXlvdXQubWQiLCJmeExheW91dC5sZyIsImZ4TGF5b3V0LnhsIiwiZnhMYXlvdXQubHQtc20iLCJmeExheW91dC5sdC1tZCIsImZ4TGF5b3V0Lmx0LWxnIiwiZnhMYXlvdXQubHQteGwiLCJmeExheW91dC5ndC14cyIsImZ4TGF5b3V0Lmd0LXNtIiwiZnhMYXlvdXQuZ3QtbWQiLCJmeExheW91dC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZZS5UcnVuY2F0ZVdpdGhUb29sdGlwRGlyZWN0aXZlLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpudC5Ub2dnbGVPcHRpb24sc2VsZWN0b3I6InRiLXRvZ2dsZS1vcHRpb24iLGlucHV0czpbInZhbHVlIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YXQuVG9nZ2xlU2VsZWN0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi10b2dnbGUtc2VsZWN0IixpbnB1dHM6WyJkaXNhYmxlZCIsInNlbGVjdE1lZGlhQnJlYWtwb2ludCIsImFwcGVhcmFuY2UiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImZpbGxIZWlnaHQiLCJleHRyYVBhZGRpbmciLCJwcmltYXJ5QmFja2dyb3VuZCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnV0LkhpbnRUb29sdGlwSWNvbkNvbXBvbmVudCxzZWxlY3RvcjoiW3RiLWhpbnQtdG9vbHRpcC1pY29uXSIsaW5wdXRzOlsidGItaGludC10b29sdGlwLWljb24iLCJ0b29sdGlwUG9zaXRpb24iLCJoaW50SWNvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnlvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtdmFsdWVzIixpbnB1dHM6WyJzaW5nbGVNb2RlIiwiaGlkZU5ld0ZpZWxkcyJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnIixpbnB1dHM6WyJpc01hc3RlciJdfSx7a2luZDoicGlwZSIsdHlwZTp3YSxuYW1lOiJnZXRHYXRld2F5UG9ydFRvb2x0aXAifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlNhLHNlbGVjdG9yOiJbdGJUcnVuY2F0ZVdpdGhUb29sdGlwXSIsaW5wdXRzOlsidGJUcnVuY2F0ZVdpdGhUb29sdGlwIiwidG9vbHRpcEVuYWJsZWQiLCJwb3NpdGlvbiJdfV0sY2hhbmdlRGV0ZWN0aW9uOnQuQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNofSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6U28sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1zbGF2ZS1jb25maWciLGNoYW5nZURldGVjdGlvbjpkLk9uUHVzaCxwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5TbykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+U28pKSxtdWx0aTohMH1dLHN0YW5kYWxvbmU6ITAsaW1wb3J0czpbSCxELHlvLGJvLHdhLFNhXSx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxkaXYgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwIiBjbGFzcz0ic2xhdmUtY29udGFpbmVyIj5cbiAgPGRpdiBjbGFzcz0ic2xhdmUtY29udGVudCB0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIiA+XG4gICAgPGRpdiBjbGFzcz0idGItZmxleCByb3cgc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIgbm8tZ2FwIGZpbGwtd2lkdGgiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1zbGF2ZS1jb25maWc8L2Rpdj5cbiAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0idHlwZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHR5cGUgb2YgbW9kYnVzUHJvdG9jb2xUeXBlcyIgW3ZhbHVlXT0idHlwZSI+e3sgTW9kYnVzUHJvdG9jb2xMYWJlbHNNYXAuZ2V0KHR5cGUpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgPGRpdiAqbmdJZj0icHJvdG9jb2xUeXBlICE9PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsIlxuICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIlxuICAgICAgICAgICBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGggdGItcmVxdWlyZWQiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmhvc3RcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuaG9zdDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJob3N0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPSIoXCdnYXRld2F5Lmhvc3QtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2hvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwnaG9zdFwnKS50b3VjaGVkIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCBlbHNlIHNlcmlhbFBvcnQiXG4gICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiXG4gICAgICAgICAgIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9ydFwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+Z2F0ZXdheS5wb3J0PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSJ7e3BvcnRMaW1pdHMuTUlOfX0iIG1heD0ie3twb3J0TGltaXRzLk1BWH19IlxuICAgICAgICAgICAgICAgICAgIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvcnQiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz0idGItZXJyb3ItdG9vbHRpcCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykgfCBnZXRHYXRld2F5UG9ydFRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9IihzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdwb3J0XCcpLnRvdWNoZWQiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzZXJpYWxQb3J0PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMuc2VyaWFsLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkucG9ydDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJzZXJpYWxQb3J0IiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IlwnZ2F0ZXdheS5wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0ic2xhdmVDb25maWdGb3JtR3JvdXAuZ2V0KFwncG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3BvcnRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1lcnJvciI+XG4gICAgICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy5mcmFtZXItdHlwZVwnIHwgdHJhbnNsYXRlIH19IiB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5tZXRob2RcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJtZXRob2QiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBtZXRob2Qgb2YgcHJvdG9jb2xUeXBlID09PSBNb2RidXNQcm90b2NvbFR5cGUuU2VyaWFsID8gbW9kYnVzU2VyaWFsTWV0aG9kVHlwZXMgOiBtb2RidXNNZXRob2RUeXBlcyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT0ibWV0aG9kIj57eyBNb2RidXNNZXRob2RMYWJlbHNNYXAuZ2V0KG1ldGhvZCkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLm1vZGJ1cy51bml0LWlkXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LnVuaXQtaWQ8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InVuaXRJZCIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkudW5pdC1pZC1yZXF1aXJlZFwnKSB8IHRyYW5zbGF0ZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ3VuaXRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCd1bml0SWRcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLW5hbWU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLW5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VOYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZU5hbWVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdHJhbnNsYXRlPmdhdGV3YXkuZGV2aWNlLXByb2ZpbGU8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0iZGV2aWNlVHlwZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgIDxtYXQtaWNvbiBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPSJ0Yi1lcnJvci10b29sdGlwIlxuICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09IihcJ2dhdGV3YXkuZGV2aWNlLXByb2ZpbGUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJzbGF2ZUNvbmZpZ0Zvcm1Hcm91cC5nZXQoXCdkZXZpY2VUeXBlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2RldmljZVR5cGVcJykudG91Y2hlZCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWVycm9yIj5cbiAgICAgICAgICAgIHdhcm5pbmdcbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCB0Yi1yZXF1aXJlZCIgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMucG9sbC1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgIDxzcGFuIHRiVHJ1bmNhdGVXaXRoVG9vbHRpcCB0cmFuc2xhdGU+XG4gICAgICAgICAgZ2F0ZXdheS5wb2xsLXBlcmlvZFxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBtaW49IjAiIG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InBvbGxQZXJpb2QiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSA9PT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJhdWRyYXRlXCcgfCB0cmFuc2xhdGUgfX0iIHRyYW5zbGF0ZT5nYXRld2F5LmJhdWRyYXRlPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJiYXVkcmF0ZSI+XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCByYXRlIG9mIG1vZGJ1c0JhdWRyYXRlcyIgW3ZhbHVlXT0icmF0ZSI+e3sgcmF0ZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YVRvVGhpbmdzQm9hcmQiPlxuICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zZW5kLWRhdGEtdG8tcGxhdGZvcm1cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIj5cbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzPC9kaXY+XG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLmJ5dGUtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkuYnl0ZS1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0iYnl0ZU9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLndvcmQtb3JkZXJcJyB8IHRyYW5zbGF0ZSB9fSIgdHJhbnNsYXRlPmdhdGV3YXkud29yZC1vcmRlcjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0id29yZE9yZGVyIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IG9yZGVyIG9mIG1vZGJ1c09yZGVyVHlwZSIgW3ZhbHVlXT0ib3JkZXIiPnt7IG9yZGVyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9InByb3RvY29sVHlwZSAhPT0gTW9kYnVzUHJvdG9jb2xUeXBlLlNlcmlhbCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCB0Yi1zbGlkZS10b2dnbGUiPlxuICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgY2xhc3M9InRiLXNldHRpbmdzIiBbZXhwYW5kZWRdPSJzaG93U2VjdXJpdHlDb250cm9sLnZhbHVlIj5cbiAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGZ4TGF5b3V0PSJyb3cgd3JhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZ4TGF5b3V0QWxpZ249ImNlbnRlciIgW2Zvcm1Db250cm9sXT0ic2hvd1NlY3VyaXR5Q29udHJvbCIgY2xhc3M9Im1hdC1zbGlkZSIgKGNsaWNrKT0iJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGxzLWNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgPHRiLW1vZGJ1cy1zZWN1cml0eS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZWN1cml0eSI+PC90Yi1tb2RidXMtc2VjdXJpdHktY29uZmlnPlxuICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW2Zvcm1Hcm91cF09InNsYXZlQ29uZmlnRm9ybUdyb3VwLmdldChcJ2lkZW50aXR5XCcpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkudmVuZG9yLW5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yTmFtZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnByb2R1Y3QtY29kZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJwcm9kdWN0Q29kZSIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZml4ZWQtdGl0bGUtd2lkdGgiIHRyYW5zbGF0ZT5nYXRld2F5LnZlbmRvci11cmw8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT0idmFsdWUiIGZvcm1Db250cm9sTmFtZT0idmVuZG9yVXJsIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucHJvZHVjdC1uYW1lPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZsZXggbm8tZ2FwIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9InZhbHVlIiBmb3JtQ29udHJvbE5hbWU9InByb2R1Y3ROYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkubW9kZWwtbmFtZTwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCIgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlbE5hbWUiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkudmFsdWVzPC9kaXY+XG4gICAgICA8dGItbW9kYnVzLXZhbHVlcyBmb3JtQ29udHJvbE5hbWU9InZhbHVlcyI+PC90Yi1tb2RidXMtdmFsdWVzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuJ31dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTptZS5Gb3JtQnVpbGRlcn1dfSk7Y2xhc3Mga28gZXh0ZW5kcyBUb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pc0xlZ2FjeT0hMX1tYXBDb25maWdUb0Zvcm1WYWx1ZSh7bWFzdGVyOmUsc2xhdmU6dH0pe3JldHVybnttYXN0ZXI6ZT8uc2xhdmVzP2U6e3NsYXZlczpbXX0sc2xhdmU6dD8/e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTprbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTprbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1vZGJ1cy1iYXNpYy1jb25maWciLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5rbykpLG11bHRpOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdUZW1wbGF0ZU91dGxldCxzZWxlY3RvcjoiW25nVGVtcGxhdGVPdXRsZXRdIixpbnB1dHM6WyJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IiXX0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0TGFiZWwsc2VsZWN0b3I6Im1hdC1sYWJlbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dEFsaWduRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dEFsaWduXSwgW2Z4TGF5b3V0QWxpZ24ueHNdLCBbZnhMYXlvdXRBbGlnbi5zbV0sIFtmeExheW91dEFsaWduLm1kXSwgIFtmeExheW91dEFsaWduLmxnXSwgW2Z4TGF5b3V0QWxpZ24ueGxdLCBbZnhMYXlvdXRBbGlnbi5sdC1zbV0sIFtmeExheW91dEFsaWduLmx0LW1kXSwgIFtmeExheW91dEFsaWduLmx0LWxnXSwgW2Z4TGF5b3V0QWxpZ24ubHQteGxdLCBbZnhMYXlvdXRBbGlnbi5ndC14c10sIFtmeExheW91dEFsaWduLmd0LXNtXSwgIFtmeExheW91dEFsaWduLmd0LW1kXSwgW2Z4TGF5b3V0QWxpZ24uZ3QtbGddIixpbnB1dHM6WyJmeExheW91dEFsaWduIiwiZnhMYXlvdXRBbGlnbi54cyIsImZ4TGF5b3V0QWxpZ24uc20iLCJmeExheW91dEFsaWduLm1kIiwiZnhMYXlvdXRBbGlnbi5sZyIsImZ4TGF5b3V0QWxpZ24ueGwiLCJmeExheW91dEFsaWduLmx0LXNtIiwiZnhMYXlvdXRBbGlnbi5sdC1tZCIsImZ4TGF5b3V0QWxpZ24ubHQtbGciLCJmeExheW91dEFsaWduLmx0LXhsIiwiZnhMYXlvdXRBbGlnbi5ndC14cyIsImZ4TGF5b3V0QWxpZ24uZ3Qtc20iLCJmeExheW91dEFsaWduLmd0LW1kIiwiZnhMYXlvdXRBbGlnbi5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpTbyxzZWxlY3RvcjoidGItbW9kYnVzLXNsYXZlLWNvbmZpZyJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6d28sc2VsZWN0b3I6InRiLW1vZGJ1cy1tYXN0ZXItdGFibGUiLGlucHV0czpbImlzTGVnYWN5Il19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19ZSgiTW9kYnVzQmFzaWNDb25maWdDb21wb25lbnQiLGtvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOmtvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+a28pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PmtvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBMbyBleHRlbmRzIFRve2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmlzTGVnYWN5PSEwfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXI/LnNsYXZlcz9lLm1hc3Rlcjp7c2xhdmVzOltdfSxzbGF2ZTplLnNsYXZlP2hhLm1hcFNsYXZlVG9VcGdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fWdldE1hcHBlZFZhbHVlKGUpe3JldHVybnttYXN0ZXI6ZS5tYXN0ZXIsc2xhdmU6ZS5zbGF2ZT9oYS5tYXBTbGF2ZVRvRG93bmdyYWRlZFZlcnNpb24oZS5zbGF2ZSk6e319fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6TG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubWFzdGVyLWNvbm5lY3Rpb25zXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDx0Yi1tb2RidXMtbWFzdGVyLXRhYmxlIFtpc0xlZ2FjeV09ImlzTGVnYWN5IiBmb3JtQ29udHJvbE5hbWU9Im1hc3RlciI+PC90Yi1tb2RidXMtbWFzdGVyLXRhYmxlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyLWNvbmZpZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0taGludCB0Yi1wcmltYXJ5LWZpbGwgdGItZmxleCBjZW50ZXIiPnt7IFwnZ2F0ZXdheS5oaW50cy5tb2RidXMtc2VydmVyXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIFtmb3JtQ29udHJvbF09ImVuYWJsZVNsYXZlQ29udHJvbCI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGVcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8dGItbW9kYnVzLXNsYXZlLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNsYXZlIj48L3RiLW1vZGJ1cy1zbGF2ZS1jb25maWc+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0QWxpZ25EaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4TGF5b3V0QWxpZ25dLCBbZnhMYXlvdXRBbGlnbi54c10sIFtmeExheW91dEFsaWduLnNtXSwgW2Z4TGF5b3V0QWxpZ24ubWRdLCAgW2Z4TGF5b3V0QWxpZ24ubGddLCBbZnhMYXlvdXRBbGlnbi54bF0sIFtmeExheW91dEFsaWduLmx0LXNtXSwgW2Z4TGF5b3V0QWxpZ24ubHQtbWRdLCAgW2Z4TGF5b3V0QWxpZ24ubHQtbGddLCBbZnhMYXlvdXRBbGlnbi5sdC14bF0sIFtmeExheW91dEFsaWduLmd0LXhzXSwgW2Z4TGF5b3V0QWxpZ24uZ3Qtc21dLCAgW2Z4TGF5b3V0QWxpZ24uZ3QtbWRdLCBbZnhMYXlvdXRBbGlnbi5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0QWxpZ24iLCJmeExheW91dEFsaWduLnhzIiwiZnhMYXlvdXRBbGlnbi5zbSIsImZ4TGF5b3V0QWxpZ24ubWQiLCJmeExheW91dEFsaWduLmxnIiwiZnhMYXlvdXRBbGlnbi54bCIsImZ4TGF5b3V0QWxpZ24ubHQtc20iLCJmeExheW91dEFsaWduLmx0LW1kIiwiZnhMYXlvdXRBbGlnbi5sdC1sZyIsImZ4TGF5b3V0QWxpZ24ubHQteGwiLCJmeExheW91dEFsaWduLmd0LXhzIiwiZnhMYXlvdXRBbGlnbi5ndC1zbSIsImZ4TGF5b3V0QWxpZ24uZ3QtbWQiLCJmeExheW91dEFsaWduLmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSxbbmdNb2RlbF0sW2Zvcm1Db250cm9sXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTmdDb250cm9sU3RhdHVzR3JvdXAsc2VsZWN0b3I6Iltmb3JtR3JvdXBOYW1lXSxbZm9ybUFycmF5TmFtZV0sW25nTW9kZWxHcm91cF0sW2Zvcm1Hcm91cF0sZm9ybTpub3QoW25nTm9Gb3JtXSksW25nRm9ybV0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xdIixpbnB1dHM6WyJmb3JtQ29udHJvbCIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlNvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtc2xhdmUtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3byxzZWxlY3RvcjoidGItbW9kYnVzLW1hc3Rlci10YWJsZSIsaW5wdXRzOlsiaXNMZWdhY3kiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX1lKCJNb2RidXNMZWdhY3lCYXNpY0NvbmZpZ0NvbXBvbmVudCIsTG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6TG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLW1vZGJ1cy1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+TG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkxvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxTbyx3byxrYV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5Lm1hc3Rlci1jb25uZWN0aW9uc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8dGItbW9kYnVzLW1hc3Rlci10YWJsZSBbaXNMZWdhY3ldPSJpc0xlZ2FjeSIgZm9ybUNvbnRyb2xOYW1lPSJtYXN0ZXIiPjwvdGItbW9kYnVzLW1hc3Rlci10YWJsZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnNlcnZlci1jb25maWdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLWhpbnQgdGItcHJpbWFyeS1maWxsIHRiLWZsZXggY2VudGVyIj57eyBcJ2dhdGV3YXkuaGludHMubW9kYnVzLXNlcnZlclwnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBbZm9ybUNvbnRyb2xdPSJlbmFibGVTbGF2ZUNvbnRyb2wiPlxuICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZW5hYmxlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPHRiLW1vZGJ1cy1zbGF2ZS1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzbGF2ZSI+PC90Yi1tb2RidXMtc2xhdmUtY29uZmlnPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBGbyBleHRlbmRzIHlhe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLm1hcHBpbmdUeXBlcz1mbix0aGlzLmlzTGVnYWN5PSEwfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHttYXBwaW5nOltdLHNlcnZlcjpbXX0pfW1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe3JldHVybntzZXJ2ZXI6ZS5zZXJ2ZXI/eGEubWFwU2VydmVyVG9VcGdyYWRlZFZlcnNpb24oZS5zZXJ2ZXIpOnt9LG1hcHBpbmc6ZS5zZXJ2ZXI/Lm1hcHBpbmc/eGEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKGUuc2VydmVyLm1hcHBpbmcpOltdfX1nZXRNYXBwZWRWYWx1ZShlKXtyZXR1cm57c2VydmVyOnhhLm1hcFNlcnZlclRvRG93bmdyYWRlZFZlcnNpb24oZSl9fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Rm8sZGVwczpudWxsLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6Rm8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+Rm8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc2VydmVyXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItb3BjLXNlcnZlci1jb25maWcgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXIiIFtoaWRlTmV3RmllbGRzXT0iaXNMZWdhY3kiPjwvdGItb3BjLXNlcnZlci1jb25maWc+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Im1hcHBpbmdUeXBlcy5PUENVQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpjbyxzZWxlY3RvcjoidGItb3BjLXNlcnZlci1jb25maWciLGlucHV0czpbImhpZGVOZXdGaWVsZHMiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkZvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1vcGMtdWEtbGVnYWN5LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkZvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5GbykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8scm8sY29dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5zZXJ2ZXJcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1vcGMtc2VydmVyLWNvbmZpZyBmb3JtQ29udHJvbE5hbWU9InNlcnZlciIgW2hpZGVOZXdGaWVsZHNdPSJpc0xlZ2FjeSI+PC90Yi1vcGMtc2VydmVyLWNvbmZpZz5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0ibWFwcGluZ1R5cGVzLk9QQ1VBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgSW8gZXh0ZW5kcyB5YXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5NYXBwaW5nVHlwZT1mbn1pbml0QmFzaWNGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7bWFwcGluZzpbXSxyZXF1ZXN0c01hcHBpbmc6W10sYnJva2VyOltdLHdvcmtlcnM6W119KX1nZXRSZXF1ZXN0RGF0YUFycmF5KGUpe2NvbnN0IHQ9W107cmV0dXJuIGxlKGUpJiZPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChuPT57Zm9yKGNvbnN0IGEgb2YgZVtuXSl0LnB1c2goe3JlcXVlc3RUeXBlOm4scmVxdWVzdFZhbHVlOmF9KX0pKSx0fWdldFJlcXVlc3REYXRhT2JqZWN0KGUpe3JldHVybiBlLnJlZHVjZSgoKGUse3JlcXVlc3RUeXBlOnQscmVxdWVzdFZhbHVlOm59KT0+KGVbdF0ucHVzaChuKSxlKSkse2Nvbm5lY3RSZXF1ZXN0czpbXSxkaXNjb25uZWN0UmVxdWVzdHM6W10sYXR0cmlidXRlUmVxdWVzdHM6W10sYXR0cmlidXRlVXBkYXRlczpbXSxzZXJ2ZXJTaWRlUnBjOltdfSl9Z2V0QnJva2VyTWFwcGVkVmFsdWUoZSx0KXtyZXR1cm57Li4uZSxtYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnM/PzEwMCxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcj8/MTB9fXdyaXRlVmFsdWUoZSl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5zZXRWYWx1ZSh0aGlzLm1hcENvbmZpZ1RvRm9ybVZhbHVlKGUpLHtlbWl0RXZlbnQ6ITF9KX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOklvLGRlcHM6bnVsbCx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5EaXJlY3RpdmV9KX1zdGF0aWN7dGhpcy7JtWRpcj10Lsm1ybVuZ0RlY2xhcmVEaXJlY3RpdmUoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOklvLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0fSl9fXQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6SW8sZGVjb3JhdG9yczpbe3R5cGU6c31dfSk7Y2xhc3MgQW8gZXh0ZW5kcyBJb3ttYXBDb25maWdUb0Zvcm1WYWx1ZShlKXtjb25zdHticm9rZXI6dCxtYXBwaW5nOm49W10sY29ubmVjdFJlcXVlc3RzOmE9W10sZGlzY29ubmVjdFJlcXVlc3RzOm89W10sYXR0cmlidXRlUmVxdWVzdHM6aT1bXSxhdHRyaWJ1dGVVcGRhdGVzOnI9W10sc2VydmVyU2lkZVJwYzpzPVtdfT1lLGw9bWEubWFwUmVxdWVzdHNUb1VwZ3JhZGVkVmVyc2lvbih7Y29ubmVjdFJlcXVlc3RzOmEsZGlzY29ubmVjdFJlcXVlc3RzOm8sYXR0cmlidXRlUmVxdWVzdHM6aSxhdHRyaWJ1dGVVcGRhdGVzOnIsc2VydmVyU2lkZVJwYzpzfSk7cmV0dXJue3dvcmtlcnM6dCYmKHQubWF4TnVtYmVyT2ZXb3JrZXJzfHx0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXIpP3ttYXhOdW1iZXJPZldvcmtlcnM6dC5tYXhOdW1iZXJPZldvcmtlcnMsbWF4TWVzc2FnZU51bWJlclBlcldvcmtlcjp0Lm1heE1lc3NhZ2VOdW1iZXJQZXJXb3JrZXJ9Ont9LG1hcHBpbmc6bWEubWFwTWFwcGluZ1RvVXBncmFkZWRWZXJzaW9uKG4pfHxbXSxicm9rZXI6dHx8e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShsKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e30saT1vPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fTtyZXR1cm57YnJva2VyOnRoaXMuZ2V0QnJva2VyTWFwcGVkVmFsdWUodCxuKSxtYXBwaW5nOm1hLm1hcE1hcHBpbmdUb0Rvd25ncmFkZWRWZXJzaW9uKGEpLC4uLm1hLm1hcFJlcXVlc3RzVG9Eb3duZ3JhZGVkVmVyc2lvbihpKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpBbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtbGVnYWN5LWJhc2ljLWNvbmZpZyIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSx1c2VzSW5oZXJpdGFuY2U6ITAsbmdJbXBvcnQ6dCx0ZW1wbGF0ZTonXHgzYyEtLVxuICBDb3B5cmlnaHQgwqkgMjAxNi0yMDI0IFRoZSBUaGluZ3Nib2FyZCBBdXRob3JzXG5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7XG4gIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUyxcbiAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4tLVx4M2VcbjxtYXQtdGFiLWdyb3VwIFtmb3JtR3JvdXBdPSJiYXNpY0Zvcm1Hcm91cCI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ2VuZXJhbFwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuYnJva2VyLmNvbm5lY3Rpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDx0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJicm9rZXIiPjwvdGItYnJva2VyLWNvbmZpZy1jb250cm9sPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZGF0YS1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJtYXBwaW5nIiBbcmVxdWlyZWRdPSJ0cnVlIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5EQVRBIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5yZXF1ZXN0cy1tYXBwaW5nXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9InJlcXVlc3RzTWFwcGluZyIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuUkVRVUVTVFMiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LndvcmtlcnMtc2V0dGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICA8dGItd29ya2Vycy1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9IndvcmtlcnMiPjwvdGItd29ya2Vycy1jb25maWctY29udHJvbD5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuPC9tYXQtdGFiLWdyb3VwPlxuXG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ncm91cCw6aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWJvZHktd3JhcHBlcntoZWlnaHQ6MTAwJX1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1RlbXBsYXRlT3V0bGV0LHNlbGVjdG9yOiJbbmdUZW1wbGF0ZU91dGxldF0iLGlucHV0czpbIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IiwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRJbmplY3RvciJdfSx7a2luZDoibmdtb2R1bGUiLHR5cGU6RH0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuUmVxdWlyZWRWYWxpZGF0b3Isc2VsZWN0b3I6Ijpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xOYW1lXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW2Zvcm1Db250cm9sXSw6bm90KFt0eXBlPWNoZWNrYm94XSlbcmVxdWlyZWRdW25nTW9kZWxdIixpbnB1dHM6WyJyZXF1aXJlZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dW8sc2VsZWN0b3I6InRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOm1vLHNlbGVjdG9yOiJ0Yi1icm9rZXItY29uZmlnLWNvbnRyb2wifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJvLHNlbGVjdG9yOiJ0Yi1tYXBwaW5nLXRhYmxlIixpbnB1dHM6WyJyZXF1aXJlZCIsIm1hcHBpbmdUeXBlIl19XSxjaGFuZ2VEZXRlY3Rpb246dC5DaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2h9KX19dC7Jtcm1bmdEZWNsYXJlQ2xhc3NNZXRhZGF0YSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpBbyxkZWNvcmF0b3JzOlt7dHlwZTpuLGFyZ3M6W3tzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIixjaGFuZ2VEZXRlY3Rpb246ZC5PblB1c2gscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+QW8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkFvKSksbXVsdGk6ITB9XSxzdGFuZGFsb25lOiEwLGltcG9ydHM6W0gsRCxsbyx1byxtbyxyb10sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09ImdlbmVyYWxUYWJDb250ZW50Ij48L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmJyb2tlci5jb25uZWN0aW9uXCcgfCB0cmFuc2xhdGUgfX0qIj5cbiAgICA8dGItYnJva2VyLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0iYnJva2VyIj48L3RiLWJyb2tlci1jb25maWctY29udHJvbD5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmRhdGEtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0ibWFwcGluZyIgW3JlcXVpcmVkXT0idHJ1ZSIgW21hcHBpbmdUeXBlXT0iTWFwcGluZ1R5cGUuREFUQSI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkucmVxdWVzdHMtbWFwcGluZ1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHRiLWZsZXggZmlsbC1oZWlnaHQiPlxuICAgICAgPHRiLW1hcHBpbmctdGFibGUgZm9ybUNvbnRyb2xOYW1lPSJyZXF1ZXN0c01hcHBpbmciIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLlJFUVVFU1RTIj48L3RiLW1hcHBpbmctdGFibGU+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS53b3JrZXJzLXNldHRpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgPHRiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2wgZm9ybUNvbnRyb2xOYW1lPSJ3b3JrZXJzIj48L3RiLXdvcmtlcnMtY29uZmlnLWNvbnRyb2w+XG4gICAgPC9kaXY+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cblxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0e2hlaWdodDoxMDAlfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9XG4nXX1dfV19KTtjbGFzcyBObyBleHRlbmRzIElve21hcENvbmZpZ1RvRm9ybVZhbHVlKGUpe2NvbnN0e2Jyb2tlcjp0LG1hcHBpbmc6bj1bXSxyZXF1ZXN0c01hcHBpbmc6YX09ZTtyZXR1cm57d29ya2Vyczp0JiYodC5tYXhOdW1iZXJPZldvcmtlcnN8fHQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcik/e21heE51bWJlck9mV29ya2Vyczp0Lm1heE51bWJlck9mV29ya2VycyxtYXhNZXNzYWdlTnVtYmVyUGVyV29ya2VyOnQubWF4TWVzc2FnZU51bWJlclBlcldvcmtlcn06e30sbWFwcGluZzpuPz9bXSxicm9rZXI6dD8/e30scmVxdWVzdHNNYXBwaW5nOnRoaXMuZ2V0UmVxdWVzdERhdGFBcnJheShhKX19Z2V0TWFwcGVkVmFsdWUoZSl7Y29uc3R7YnJva2VyOnQsd29ya2VyczpuLG1hcHBpbmc6YSxyZXF1ZXN0c01hcHBpbmc6b309ZXx8e307cmV0dXJue2Jyb2tlcjp0aGlzLmdldEJyb2tlck1hcHBlZFZhbHVlKHQsbiksbWFwcGluZzphLHJlcXVlc3RzTWFwcGluZzpvPy5sZW5ndGg/dGhpcy5nZXRSZXF1ZXN0RGF0YU9iamVjdChvKTp7fX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpObyxkZXBzOm51bGwsdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpObyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLW1xdHQtYmFzaWMtY29uZmlnIixwcm92aWRlcnM6W3twcm92aWRlOmdlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfSx7cHJvdmlkZTpmZSx1c2VFeGlzdGluZzptKCgoKT0+Tm8pKSxtdWx0aTohMH1dLHVzZXNJbmhlcml0YW5jZTohMCxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoibmdtb2R1bGUiLHR5cGU6SH0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiLHNlbGVjdG9yOiJtYXQtdGFiIixpbnB1dHM6WyJkaXNhYmxlZCIsImxhYmVsIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImxhYmVsQ2xhc3MiLCJib2R5Q2xhc3MiXSxleHBvcnRBczpbIm1hdFRhYiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOlcuTWF0VGFiR3JvdXAsc2VsZWN0b3I6Im1hdC10YWItZ3JvdXAiLGlucHV0czpbImNvbG9yIiwiZml0SW5rQmFyVG9Db250ZW50IiwibWF0LXN0cmV0Y2gtdGFicyIsImR5bmFtaWNIZWlnaHQiLCJzZWxlY3RlZEluZGV4IiwiaGVhZGVyUG9zaXRpb24iLCJhbmltYXRpb25EdXJhdGlvbiIsImNvbnRlbnRUYWJJbmRleCIsImRpc2FibGVQYWdpbmF0aW9uIiwiZGlzYWJsZVJpcHBsZSIsInByZXNlcnZlQ29udGVudCIsImJhY2tncm91bmRDb2xvciIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiXSxvdXRwdXRzOlsic2VsZWN0ZWRJbmRleENoYW5nZSIsImZvY3VzQ2hhbmdlIiwiYW5pbWF0aW9uRG9uZSIsInNlbGVjdGVkVGFiQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRUYWJHcm91cCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5SZXF1aXJlZFZhbGlkYXRvcixzZWxlY3RvcjoiOm5vdChbdHlwZT1jaGVja2JveF0pW3JlcXVpcmVkXVtmb3JtQ29udHJvbE5hbWVdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bZm9ybUNvbnRyb2xdLDpub3QoW3R5cGU9Y2hlY2tib3hdKVtyZXF1aXJlZF1bbmdNb2RlbF0iLGlucHV0czpbInJlcXVpcmVkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoicGlwZSIsdHlwZTpZLlRyYW5zbGF0ZVBpcGUsbmFtZToidHJhbnNsYXRlIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1byxzZWxlY3RvcjoidGItd29ya2Vycy1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6bW8sc2VsZWN0b3I6InRiLWJyb2tlci1jb25maWctY29udHJvbCJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6cm8sc2VsZWN0b3I6InRiLW1hcHBpbmctdGFibGUiLGlucHV0czpbInJlcXVpcmVkIiwibWFwcGluZ1R5cGUiXX1dLGNoYW5nZURldGVjdGlvbjp0LkNoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaH0pfX10Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOk5vLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1tcXR0LWJhc2ljLWNvbmZpZyIsY2hhbmdlRGV0ZWN0aW9uOmQuT25QdXNoLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9Pk5vKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5ObykpLG11bHRpOiEwfV0sc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILEQsbG8sdW8sbW8scm9dLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPSJnZW5lcmFsVGFiQ29udGVudCI+PC9uZy1jb250YWluZXI+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5icm9rZXIuY29ubmVjdGlvblwnIHwgdHJhbnNsYXRlIH19KiI+XG4gICAgPHRiLWJyb2tlci1jb25maWctY29udHJvbCBmb3JtQ29udHJvbE5hbWU9ImJyb2tlciI+PC90Yi1icm9rZXItY29uZmlnLWNvbnRyb2w+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5kYXRhLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIG5vLXBhZGRpbmcgcGFkZGluZy10b3AgdGItZmxleCBmaWxsLWhlaWdodCI+XG4gICAgICA8dGItbWFwcGluZy10YWJsZSBmb3JtQ29udHJvbE5hbWU9Im1hcHBpbmciIFtyZXF1aXJlZF09InRydWUiIFttYXBwaW5nVHlwZV09Ik1hcHBpbmdUeXBlLkRBVEEiPjwvdGItbWFwcGluZy10YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnJlcXVlc3RzLW1hcHBpbmdcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1ib3JkZXIgbm8tcGFkZGluZyBwYWRkaW5nLXRvcCB0Yi1mbGV4IGZpbGwtaGVpZ2h0Ij5cbiAgICAgIDx0Yi1tYXBwaW5nLXRhYmxlIGZvcm1Db250cm9sTmFtZT0icmVxdWVzdHNNYXBwaW5nIiBbbWFwcGluZ1R5cGVdPSJNYXBwaW5nVHlwZS5SRVFVRVNUUyI+PC90Yi1tYXBwaW5nLXRhYmxlPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkud29ya2Vycy1zZXR0aW5nc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgIDx0Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sIGZvcm1Db250cm9sTmFtZT0id29ya2VycyI+PC90Yi13b3JrZXJzLWNvbmZpZy1jb250cm9sPlxuICAgIDwvZGl2PlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHtoZWlnaHQ6MTAwJX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtdGFiLWdyb3VwLDpob3N0IDo6bmctZGVlcCAubWF0LW1kYy10YWItYm9keS13cmFwcGVye2hlaWdodDoxMDAlfVxuJ119XX1dfSk7Y2xhc3MgTW97aXNFcnJvclN0YXRlKGUpe3JldHVybiBlJiZlLmludmFsaWR9fWUoIkZvcmNlRXJyb3JTdGF0ZU1hdGNoZXIiLE1vKTtjbGFzcyBFbyBleHRlbmRzIE97Y29uc3RydWN0b3IoZSx0LG4sYSxvLGkscixzLGwsYyxwKXtzdXBlcihlKSx0aGlzLnN0b3JlPWUsdGhpcy5mYj10LHRoaXMudHJhbnNsYXRlPW4sdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlPWEsdGhpcy5kaWFsb2dTZXJ2aWNlPW8sdGhpcy5kaWFsb2c9aSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZT1yLHRoaXMuem9uZT1zLHRoaXMudXRpbHM9bCx0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZz1jLHRoaXMuY2Q9cCx0aGlzLkNvbm5lY3RvclR5cGU9X3QsdGhpcy5hbGxvd0Jhc2ljQ29uZmlnPW5ldyBTZXQoW190Lk1RVFQsX3QuT1BDVUEsX3QuTU9EQlVTXSksdGhpcy5nYXRld2F5TG9nTGV2ZWw9T2JqZWN0LnZhbHVlcyhNdCksdGhpcy5kaXNwbGF5ZWRDb2x1bW5zPVsiZW5hYmxlZCIsImtleSIsInR5cGUiLCJzeW5jU3RhdHVzIiwiZXJyb3JzIiwiYWN0aW9ucyJdLHRoaXMuR2F0ZXdheUNvbm5lY3RvclR5cGVzVHJhbnNsYXRlc01hcD1IdCx0aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcz1vbix0aGlzLlJlcG9ydFN0cmF0ZWd5RGVmYXVsdFZhbHVlPWxuLHRoaXMubW9kZT10aGlzLkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyx0aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3Q9bmV3IFNlLHRoaXMuYWN0aXZlRGF0YT1bXSx0aGlzLmluYWN0aXZlRGF0YT1bXSx0aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGE9W10sdGhpcy5zdWJzY3JpcHRpb25PcHRpb25zPXtjYWxsYmFja3M6e29uRGF0YVVwZGF0ZWQ6KCk9PnRoaXMuY3R4Lm5nWm9uZS5ydW4oKCgpPT57dGhpcy5vbkVycm9yc1VwZGF0ZWQoKX0pKSxvbkRhdGFVcGRhdGVFcnJvcjooZSx0KT0+dGhpcy5jdHgubmdab25lLnJ1bigoKCk9Pnt0aGlzLm9uRGF0YVVwZGF0ZUVycm9yKHQpfSkpfX0sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0PW5ldyBTZSx0aGlzLmluaXREYXRhU291cmNlcygpLHRoaXMuaW5pdENvbm5lY3RvckZvcm0oKSx0aGlzLm9ic2VydmVBdHRyaWJ1dGVDaGFuZ2UoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGFTb3VyY2Uuc29ydD10aGlzLnNvcnQsdGhpcy5kYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3I9dGhpcy5nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCksdGhpcy5jdHguJHNjb3BlLmdhdGV3YXlDb25uZWN0b3JzPXRoaXMsdGhpcy5sb2FkQ29ubmVjdG9ycygpLHRoaXMubG9hZEdhdGV3YXlTdGF0ZSgpLHRoaXMub2JzZXJ2ZU1vZGVDaGFuZ2UoKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKSxzdXBlci5uZ09uRGVzdHJveSgpfW9uU2F2ZUNvbm5lY3Rvcigpe3RoaXMuc2F2ZUNvbm5lY3Rvcih0aGlzLmdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKHRoaXMuY29ubmVjdG9yRm9ybS52YWx1ZSksITEpfXNhdmVDb25uZWN0b3IoZSx0PSEwKXtjb25zdCBuPXR8fHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyh0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSk/TC5TSEFSRURfU0NPUEU6TC5TRVJWRVJfU0NPUEU7QWUodGhpcy5nZXRFbnRpdHlBdHRyaWJ1dGVUYXNrcyhlLG4pKS5waXBlKE9lKDEpKS5zdWJzY3JpYmUoKG49Pnt0aGlzLnNob3dUb2FzdCh0P3RoaXMudHJhbnNsYXRlLmluc3RhbnQoImdhdGV3YXkuY29ubmVjdG9yLWNyZWF0ZWQiKTp0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJnYXRld2F5LmNvbm5lY3Rvci11cGRhdGVkIikpLHRoaXMuaW5pdGlhbENvbm5lY3Rvcj1lLHRoaXMudXBkYXRlRGF0YSghMCksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9KSl9Z2V0RW50aXR5QXR0cmlidXRlVGFza3MoZSx0KXtjb25zdCBuPVtdLGE9W3trZXk6ZS5uYW1lLHZhbHVlOmV9XSxvPVtdLGk9IXRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TSEFSRURfU0NPUEV8fCF0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlLm5hbWUpJiZ0PT09TC5TRVJWRVJfU0NPUEUscj10aGlzLmluaXRpYWxDb25uZWN0b3ImJnRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lIT09ZS5uYW1lO3JldHVybiByJiYoby5wdXNoKHtrZXk6dGhpcy5pbml0aWFsQ29ubmVjdG9yLm5hbWV9KSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KHRoaXMuaW5pdGlhbENvbm5lY3Rvci5uYW1lLCExKSksaSYmKHQ9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnMucHVzaChlLm5hbWUpOnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLnB1c2goZS5uYW1lKSksKHJ8fGkpJiZuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2sodCkpLG4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsdCxhKSksby5sZW5ndGgmJm4ucHVzaCh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSx0LG8pKSxufWdldFNhdmVFbnRpdHlBdHRyaWJ1dGVzVGFzayhlKXtjb25zdCB0PWU9PT1MLlNIQVJFRF9TQ09QRT8iYWN0aXZlX2Nvbm5lY3RvcnMiOiJpbmFjdGl2ZV9jb25uZWN0b3JzIixuPWU9PT1MLlNIQVJFRF9TQ09QRT90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM7cmV0dXJuIHRoaXMuYXR0cmlidXRlU2VydmljZS5zYXZlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxlLFt7a2V5OnQsdmFsdWU6bn1dKX1yZW1vdmVDb25uZWN0b3JGcm9tTGlzdChlLHQpe2NvbnN0IG49dD90aGlzLmFjdGl2ZUNvbm5lY3RvcnM6dGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMsYT1uLmluZGV4T2YoZSk7LTEhPT1hJiZuLnNwbGljZShhLDEpfWdldFVwZGF0ZWRDb25uZWN0b3JEYXRhKGUpe2NvbnN0IHQ9ey4uLmV9O3JldHVybiB0LmNvbmZpZ3VyYXRpb249YCR7Y2UodC5uYW1lKX0uanNvbmAsZGVsZXRlIHQuYmFzaWNDb25maWcsdC50eXBlIT09X3QuR1JQQyYmZGVsZXRlIHQua2V5LHQudHlwZSE9PV90LkNVU1RPTSYmZGVsZXRlIHQuY2xhc3MsdC50eXBlPT09X3QuTU9EQlVTJiZ0aGlzLmlzTGF0ZXN0VmVyc2lvbkNvbmZpZy50cmFuc2Zvcm0odC5jb25maWdWZXJzaW9uKSYmKHQucmVwb3J0U3RyYXRlZ3l8fCh0LnJlcG9ydFN0cmF0ZWd5PXt0eXBlOnNuLk9uUmVwb3J0UGVyaW9kLHJlcG9ydFBlcmlvZDpsbi5Db25uZWN0b3J9LGRlbGV0ZSB0LnNlbmREYXRhT25seU9uQ2hhbmdlKSksdGhpcy5nYXRld2F5VmVyc2lvbiYmIXQuY29uZmlnVmVyc2lvbiYmKHQuY29uZmlnVmVyc2lvbj10aGlzLmdhdGV3YXlWZXJzaW9uKSx0LnRzPURhdGUubm93KCksdH11cGRhdGVEYXRhKGU9ITEpe3RoaXMucGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5PXRoaXMuc29ydC5hY3RpdmUsdGhpcy5wYWdlTGluay5zb3J0T3JkZXIuZGlyZWN0aW9uPXdbdGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpXSx0aGlzLmF0dHJpYnV0ZURhdGFTb3VyY2UubG9hZEF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5DTElFTlRfU0NPUEUsdGhpcy5wYWdlTGluayxlKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZURhdGE9ZS5kYXRhLmZpbHRlcigoZT0+dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKSx0aGlzLmdlbmVyYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5zZXRDbGllbnREYXRhKGUpfSkpLHRoaXMuaW5hY3RpdmVDb25uZWN0b3JzRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuc2hhcmVkQXR0cmlidXRlRGF0YT1lLmRhdGEuZmlsdGVyKChlPT50aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5jbHVkZXMoZS5rZXkpKSksdGhpcy5jb21iaW5lRGF0YSgpfSkpLHRoaXMuc2VydmVyRGF0YVNvdXJjZS5sb2FkQXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSx0aGlzLnBhZ2VMaW5rLGUpLnN1YnNjcmliZSgoZT0+e3RoaXMuaW5hY3RpdmVEYXRhPWUuZGF0YS5maWx0ZXIoKGU9PnRoaXMuaW5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSkpLHRoaXMuY29tYmluZURhdGEoKX0pKX1pc0Nvbm5lY3RvclN5bmNlZChlKXtjb25zdCB0PWUudmFsdWU7aWYoIXQudHN8fGUuc2tpcFN5bmN8fCF0aGlzLmlzR2F0ZXdheUFjdGl2ZSlyZXR1cm4hMTtpZigtMT09PXRoaXMuYWN0aXZlRGF0YS5maW5kSW5kZXgoKGU9Pigic3RyaW5nIj09dHlwZW9mIGUudmFsdWU/SlNPTi5wYXJzZShlLnZhbHVlKTplLnZhbHVlKS5uYW1lPT09dC5uYW1lKSkpcmV0dXJuITE7cmV0dXJuLTEhPT10aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGEuZmluZEluZGV4KChlPT57Y29uc3Qgbj1lLnZhbHVlLGE9bi5uYW1lPT09dC5uYW1lLG89ZWUobi5jb25maWd1cmF0aW9uSnNvbix7fSkmJmEsaT10aGlzLmhhc1NhbWVDb25maWcobi5jb25maWd1cmF0aW9uSnNvbix0LmNvbmZpZ3VyYXRpb25Kc29uKSxyPW4udHMmJm4udHM8PXQudHM7cmV0dXJuIGEmJnImJihpfHxvKX0pKX1oYXNTYW1lQ29uZmlnKGUsdCl7Y29uc3R7bmFtZTpuLGlkOmEsZW5hYmxlUmVtb3RlTG9nZ2luZzpvLGxvZ0xldmVsOmkscmVwb3J0U3RyYXRlZ3k6cixjb25maWdWZXJzaW9uOnMsLi4ubH09ZSx7bmFtZTpjLGlkOnAsZW5hYmxlUmVtb3RlTG9nZ2luZzptLGxvZ0xldmVsOmQscmVwb3J0U3RyYXRlZ3k6dSxjb25maWdWZXJzaW9uOmcsLi4uZn09dDtyZXR1cm4gZWUobCxmKX1jb21iaW5lRGF0YSgpe2NvbnN0IGU9Wy4uLnRoaXMuYWN0aXZlRGF0YSwuLi50aGlzLmluYWN0aXZlRGF0YSwuLi50aGlzLnNoYXJlZEF0dHJpYnV0ZURhdGFdLnJlZHVjZSgoKGUsdCk9Pntjb25zdCBuPWUuZmluZEluZGV4KChlPT5lLmtleT09PXQua2V5KSk7cmV0dXJuLTE9PT1uP2UucHVzaCh0KTp0Lmxhc3RVcGRhdGVUcz5lW25dLmxhc3RVcGRhdGVUcyYmIXRoaXMuaXNDb25uZWN0b3JTeW5jZWQoZVtuXSkmJihlW25dPXsuLi50LHNraXBTeW5jOiEwfSksZX0pLFtdKTt0aGlzLmRhdGFTb3VyY2UuZGF0YT1lLm1hcCgoZT0+KHsuLi5lLHZhbHVlOiJzdHJpbmciPT10eXBlb2YgZS52YWx1ZT9KU09OLnBhcnNlKGUudmFsdWUpOmUudmFsdWV9KSkpfWNsZWFyT3V0Q29ubmVjdG9yRm9ybSgpe3RoaXMuaW5pdGlhbENvbm5lY3Rvcj1udWxsLHRoaXMuY29ubmVjdG9yRm9ybS5zZXRWYWx1ZSh7bW9kZTpvbi5CQVNJQyxuYW1lOiIiLHR5cGU6X3QuTVFUVCxzZW5kRGF0YU9ubHlPbkNoYW5nZTohMSxlbmFibGVSZW1vdGVMb2dnaW5nOiExLGxvZ0xldmVsOk10LklORk8sa2V5OiJhdXRvIixjbGFzczoiIixjb25maWd1cmF0aW9uOiIiLGNvbmZpZ3VyYXRpb25Kc29uOnt9LGJhc2ljQ29uZmlnOnt9LGNvbmZpZ1ZlcnNpb246IiIscmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLm1hcmtBc1ByaXN0aW5lKCl9c2VsZWN0Q29ubmVjdG9yKGUsdCl7ZSYmZS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBuPXQudmFsdWU7bj8ubmFtZSE9PXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZSYmdGhpcy5jb25maXJtQ29ubmVjdG9yQ2hhbmdlKCkuc3Vic2NyaWJlKChlPT57ZSYmdGhpcy5zZXRGb3JtVmFsdWUobil9KSl9aXNTYW1lQ29ubmVjdG9yKGUpe2lmKCF0aGlzLmluaXRpYWxDb25uZWN0b3IpcmV0dXJuITE7Y29uc3QgdD1lLnZhbHVlO3JldHVybiB0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZT09PXQubmFtZX1zaG93VG9hc3QoZSl7dGhpcy5zdG9yZS5kaXNwYXRjaCh7dHlwZToiW05vdGlmaWNhdGlvbl0gU2hvdyIsbm90aWZpY2F0aW9uOnttZXNzYWdlOmUsdHlwZToic3VjY2VzcyIsZHVyYXRpb246MWUzLHZlcnRpY2FsUG9zaXRpb246InRvcCIsaG9yaXpvbnRhbFBvc2l0aW9uOiJsZWZ0Iix0YXJnZXQ6ImRhc2hib2FyZFJvb3QiLGZvcmNlRGlzbWlzczohMH19KX1yZXR1cm5UeXBlKGUpe2NvbnN0IHQ9ZS52YWx1ZTtyZXR1cm4gdGhpcy5HYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldCh0LnR5cGUpfWRlbGV0ZUNvbm5lY3RvcihlLHQpe3Q/LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49YERlbGV0ZSBjb25uZWN0b3IgIiR7ZS5rZXl9Ij9gO3RoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKG4sIkFsbCBjb25uZWN0b3IgZGF0YSB3aWxsIGJlIGRlbGV0ZWQuIiwiQ2FuY2VsIiwiRGVsZXRlIikucGlwZShPZSgxKSxVZSgodD0+e2lmKCF0KXJldHVybjtjb25zdCBuPVtdLGE9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUudmFsdWU/Lm5hbWUpP0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVybiBuLnB1c2godGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmRlbGV0ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsYSxbZV0pKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCEwKSx0aGlzLnJlbW92ZUNvbm5lY3RvckZyb21MaXN0KGUua2V5LCExKSxuLnB1c2godGhpcy5nZXRTYXZlRW50aXR5QXR0cmlidXRlc1Rhc2soYSkpLEFlKG4pfSkpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSE9PWUua2V5fHwodGhpcy5jbGVhck91dENvbm5lY3RvckZvcm0oKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSx0aGlzLmNvbm5lY3RvckZvcm0uZGlzYWJsZSgpKSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWNvbm5lY3RvckxvZ3MoZSx0KXt0JiZ0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IG49Sih0aGlzLmN0eC5zdGF0ZUNvbnRyb2xsZXIuZ2V0U3RhdGVQYXJhbXMoKSk7bi5jb25uZWN0b3JfbG9ncz1lLG4udGFyZ2V0RW50aXR5UGFyYW1OYW1lPSJjb25uZWN0b3JfbG9ncyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX2xvZ3MiLG4pfWNvbm5lY3RvclJwYyhlLHQpe3QmJnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3Qgbj1KKHRoaXMuY3R4LnN0YXRlQ29udHJvbGxlci5nZXRTdGF0ZVBhcmFtcygpKTtuLmNvbm5lY3Rvcl9ycGM9ZSxuLnRhcmdldEVudGl0eVBhcmFtTmFtZT0iY29ubmVjdG9yX3JwYyIsdGhpcy5jdHguc3RhdGVDb250cm9sbGVyLm9wZW5TdGF0ZSgiY29ubmVjdG9yX3JwYyIsbil9b25FbmFibGVDb25uZWN0b3IoZSl7ZS52YWx1ZS50cz0obmV3IERhdGUpLmdldFRpbWUoKSx0aGlzLnVwZGF0ZUFjdGl2ZUNvbm5lY3RvcktleXMoZS5rZXkpLHRoaXMuYXR0cmlidXRlVXBkYXRlU3ViamVjdC5uZXh0KGUpfWdldEVycm9yc0NvdW50KGUpe2NvbnN0IHQ9ZS5rZXksbj10aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24uZGF0YS5maW5kKChlPT5lJiZlLmRhdGFLZXkubmFtZT09PWAke3R9X0VSUk9SU19DT1VOVGApKTtyZXR1cm4gbiYmdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKHQpP24uZGF0YVswXVsxXXx8MDoiSW5hY3RpdmUifW9uQWRkQ29ubmVjdG9yKGUpe2U/LnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29uZmlybUNvbm5lY3RvckNoYW5nZSgpLnBpcGUoT2UoMSksTWUoQm9vbGVhbiksVWUoKCgpPT50aGlzLm9wZW5BZGRDb25uZWN0b3JEaWFsb2coKSkpLE1lKEJvb2xlYW4pKS5zdWJzY3JpYmUoKGU9PnRoaXMuYWRkQ29ubmVjdG9yKGUpKSl9YWRkQ29ubmVjdG9yKGUpe3RoaXMuY29ubmVjdG9yRm9ybS5kaXNhYmxlZCYmdGhpcy5jb25uZWN0b3JGb3JtLmVuYWJsZSgpLGUuY29uZmlndXJhdGlvbkpzb258fChlLmNvbmZpZ3VyYXRpb25Kc29uPXt9KSx0aGlzLmdhdGV3YXlWZXJzaW9uJiYhZS5jb25maWdWZXJzaW9uJiYoZS5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLGUuYmFzaWNDb25maWc9ZS5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9ZTtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZTt0aGlzLnNldEluaXRpYWxDb25uZWN0b3JWYWx1ZXMoZSksdGhpcy5zYXZlQ29ubmVjdG9yKHRoaXMuZ2V0VXBkYXRlZENvbm5lY3RvckRhdGEoZSkpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9c2V0SW5pdGlhbENvbm5lY3RvclZhbHVlcyhlKXtjb25zdHtiYXNpY0NvbmZpZzp0LG1vZGU6biwuLi5hfT1lO3RoaXMudG9nZ2xlUmVwb3J0U3RyYXRlZ3koZS50eXBlKSx0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikuc2V0VmFsdWUodGhpcy5hbGxvd0Jhc2ljQ29uZmlnLmhhcyhlLnR5cGUpP2UubW9kZT8/b24uQkFTSUM6bnVsbCx7ZW1pdEV2ZW50OiExfSksdGhpcy5jb25uZWN0b3JGb3JtLnBhdGNoVmFsdWUoYSx7ZW1pdEV2ZW50OiExfSl9b3BlbkFkZENvbm5lY3RvckRpYWxvZygpe3JldHVybiB0aGlzLmN0eC5uZ1pvbmUucnVuKCgoKT0+dGhpcy5kaWFsb2cub3Blbih0byx7ZGlzYWJsZUNsb3NlOiEwLHBhbmVsQ2xhc3M6WyJ0Yi1kaWFsb2ciLCJ0Yi1mdWxsc2NyZWVuLWRpYWxvZyJdLGRhdGE6e2RhdGFTb3VyY2VEYXRhOnRoaXMuZGF0YVNvdXJjZS5kYXRhLGdhdGV3YXlWZXJzaW9uOnRoaXMuZ2F0ZXdheVZlcnNpb259fSkuYWZ0ZXJDbG9zZWQoKSkpfXVuaXFOYW1lUmVxdWlyZWQoKXtyZXR1cm4gZT0+e2NvbnN0IHQ9ZS52YWx1ZT8udHJpbSgpLnRvTG93ZXJDYXNlKCksbj10aGlzLmRhdGFTb3VyY2UuZGF0YS5zb21lKChlPT5lLnZhbHVlLm5hbWUudG9Mb3dlckNhc2UoKT09PXQpKSxhPXRoaXMuaW5pdGlhbENvbm5lY3Rvcj8ubmFtZS50b0xvd2VyQ2FzZSgpPT09dDtyZXR1cm4gbiYmIWE/e2R1cGxpY2F0ZU5hbWU6e3ZhbGlkOiExfX06bnVsbH19aW5pdERhdGFTb3VyY2VzKCl7Y29uc3QgZT17cHJvcGVydHk6ImtleSIsZGlyZWN0aW9uOncuQVNDfTt0aGlzLnBhZ2VMaW5rPW5ldyBDKDFlMywwLG51bGwsZSksdGhpcy5hdHRyaWJ1dGVEYXRhU291cmNlPW5ldyBMYSh0aGlzLmF0dHJpYnV0ZVNlcnZpY2UsdGhpcy50ZWxlbWV0cnlXc1NlcnZpY2UsdGhpcy56b25lLHRoaXMudHJhbnNsYXRlKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9yc0RhdGFTb3VyY2U9bmV3IExhKHRoaXMuYXR0cmlidXRlU2VydmljZSx0aGlzLnRlbGVtZXRyeVdzU2VydmljZSx0aGlzLnpvbmUsdGhpcy50cmFuc2xhdGUpLHRoaXMuc2VydmVyRGF0YVNvdXJjZT1uZXcgTGEodGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLHRoaXMudGVsZW1ldHJ5V3NTZXJ2aWNlLHRoaXMuem9uZSx0aGlzLnRyYW5zbGF0ZSksdGhpcy5kYXRhU291cmNlPW5ldyB5KFtdKX1pbml0Q29ubmVjdG9yRm9ybSgpe3RoaXMuY29ubmVjdG9yRm9ybT10aGlzLmZiLmdyb3VwKHttb2RlOltvbi5CQVNJQ10sbmFtZTpbIiIsW3VlLnJlcXVpcmVkLHRoaXMudW5pcU5hbWVSZXF1aXJlZCgpLHVlLnBhdHRlcm4oa3QpXV0sdHlwZTpbIiIsW3VlLnJlcXVpcmVkXV0sZW5hYmxlUmVtb3RlTG9nZ2luZzpbITFdLGxvZ0xldmVsOlsiIixbdWUucmVxdWlyZWRdXSxzZW5kRGF0YU9ubHlPbkNoYW5nZTpbITFdLGtleTpbImF1dG8iXSxjbGFzczpbIiJdLGNvbmZpZ3VyYXRpb246WyIiXSxjb25maWd1cmF0aW9uSnNvbjpbe30sW3VlLnJlcXVpcmVkXV0sYmFzaWNDb25maWc6W3t9XSxjb25maWdWZXJzaW9uOlsiIl0scmVwb3J0U3RyYXRlZ3k6W3t2YWx1ZTp7fSxkaXNhYmxlZDohMH1dfSksdGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGUoKX1nZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCl7cmV0dXJuKGUsdCk9Pntzd2l0Y2godCl7Y2FzZSJzeW5jU3RhdHVzIjpyZXR1cm4gdGhpcy5pc0Nvbm5lY3RvclN5bmNlZChlKT8xOjA7Y2FzZSJlbmFibGVkIjpyZXR1cm4gdGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KT8xOjA7Y2FzZSJlcnJvcnMiOmNvbnN0IG49dGhpcy5nZXRFcnJvcnNDb3VudChlKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIG4/dGhpcy5zb3J0LmRpcmVjdGlvbi50b1VwcGVyQ2FzZSgpPT09dy5ERVNDPy0xOjEvMDpuO2RlZmF1bHQ6cmV0dXJuIGVbdF18fGUudmFsdWVbdF19fX1sb2FkQ29ubmVjdG9ycygpe3RoaXMuZGV2aWNlJiZ0aGlzLmRldmljZS5pZCE9PWsmJkFlKFt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNIQVJFRF9TQ09QRSxbImFjdGl2ZV9jb25uZWN0b3JzIl0pLHRoaXMuYXR0cmlidXRlU2VydmljZS5nZXRFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFsiaW5hY3RpdmVfY29ubmVjdG9ycyJdKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLkNMSUVOVF9TQ09QRSxbIlZlcnNpb24iXSldKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVswXSksdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnM9dGhpcy5wYXJzZUNvbm5lY3RvcnMoZVsxXSksdGhpcy5nYXRld2F5VmVyc2lvbj1lWzJdWzBdPy52YWx1ZSx0aGlzLnVwZGF0ZURhdGEoITApfSkpfWxvYWRHYXRld2F5U3RhdGUoKXt0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZ2V0RW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxMLlNFUlZFUl9TQ09QRSkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5rZXkpKS52YWx1ZSxuPWUuZmluZCgoZT0+Imxhc3REaXNjb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmtleSkpPy52YWx1ZTt0aGlzLmlzR2F0ZXdheUFjdGl2ZT10aGlzLmdldEdhdGV3YXlTdGF0dXModCxhLG4pfSkpfXBhcnNlQ29ubmVjdG9ycyhlKXtjb25zdCB0PWU/LlswXT8udmFsdWV8fFtdO3JldHVybiBuZSh0KT9KU09OLnBhcnNlKHQpOnR9b2JzZXJ2ZU1vZGVDaGFuZ2UoKXt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKCk9Pnt0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikubWFya0FzUHJpc3RpbmUoKX0pKX1vYnNlcnZlQXR0cmlidXRlQ2hhbmdlKCl7dGhpcy5hdHRyaWJ1dGVVcGRhdGVTdWJqZWN0LnBpcGUoVmUoMzAwKSxFZSgoZT0+dGhpcy5leGVjdXRlQXR0cmlidXRlVXBkYXRlcyhlKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKX11cGRhdGVBY3RpdmVDb25uZWN0b3JLZXlzKGUpe2lmKHRoaXMuYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhlKSl7Y29uc3QgdD10aGlzLmFjdGl2ZUNvbm5lY3RvcnMuaW5kZXhPZihlKTstMSE9PXQmJnRoaXMuYWN0aXZlQ29ubmVjdG9ycy5zcGxpY2UodCwxKSx0aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5wdXNoKGUpfWVsc2V7Y29uc3QgdD10aGlzLmluYWN0aXZlQ29ubmVjdG9ycy5pbmRleE9mKGUpOy0xIT09dCYmdGhpcy5pbmFjdGl2ZUNvbm5lY3RvcnMuc3BsaWNlKHQsMSksdGhpcy5hY3RpdmVDb25uZWN0b3JzLnB1c2goZSl9fWV4ZWN1dGVBdHRyaWJ1dGVVcGRhdGVzKGUpe0FlKHRoaXMuZ2V0QXR0cmlidXRlRXhlY3V0aW9uVGFza3MoZSkpLnBpcGUoT2UoMSksRWUoKCgpPT50aGlzLnVwZGF0ZURhdGEoITApKSksTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgpfWdldEF0dHJpYnV0ZUV4ZWN1dGlvblRhc2tzKGUpe2NvbnN0IHQ9dGhpcy5hY3RpdmVDb25uZWN0b3JzLmluY2x1ZGVzKGUua2V5KSxuPXQ/TC5TRVJWRVJfU0NPUEU6TC5TSEFSRURfU0NPUEUsYT10P0wuU0hBUkVEX1NDT1BFOkwuU0VSVkVSX1NDT1BFO3JldHVyblt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsW3trZXk6ImFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmFjdGl2ZUNvbm5lY3RvcnN9XSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLEwuU0VSVkVSX1NDT1BFLFt7a2V5OiJpbmFjdGl2ZV9jb25uZWN0b3JzIix2YWx1ZTp0aGlzLmluYWN0aXZlQ29ubmVjdG9yc31dKSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2UuZGVsZXRlRW50aXR5QXR0cmlidXRlcyh0aGlzLmRldmljZSxuLFtlXSksdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLnNhdmVFbnRpdHlBdHRyaWJ1dGVzKHRoaXMuZGV2aWNlLGEsW2VdKV19b25EYXRhVXBkYXRlRXJyb3IoZSl7Y29uc3QgdD10aGlzLnV0aWxzLnBhcnNlRXhjZXB0aW9uKGUpO2xldCBuPXQubmFtZTt0Lm1lc3NhZ2UmJihuKz0iOiAiK3QubWVzc2FnZSksY29uc29sZS5lcnJvcihuKX1vbkVycm9yc1VwZGF0ZWQoKXt0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1vbkRhdGFVcGRhdGVkKCl7Y29uc3QgZT10aGlzLmN0eC5kZWZhdWx0U3Vic2NyaXB0aW9uLmRhdGEsdD1lLmZpbmQoKGU9PiJhY3RpdmUiPT09ZS5kYXRhS2V5Lm5hbWUpKS5kYXRhWzBdWzFdLG49ZS5maW5kKChlPT4ibGFzdERpc2Nvbm5lY3RUaW1lIj09PWUuZGF0YUtleS5uYW1lKSkuZGF0YVswXVsxXSxhPWUuZmluZCgoZT0+Imxhc3RDb25uZWN0VGltZSI9PT1lLmRhdGFLZXkubmFtZSkpLmRhdGFbMF1bMV07dGhpcy5pc0dhdGV3YXlBY3RpdmU9dGhpcy5nZXRHYXRld2F5U3RhdHVzKHQsYSxuKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKX1nZXRHYXRld2F5U3RhdHVzKGUsdCxuKXtyZXR1cm4hIWUmJighbnx8dD5uKX1nZW5lcmF0ZVN1YnNjcmlwdGlvbigpe2lmKHRoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuZGV2aWNlKXtjb25zdCBlPVt7dHlwZTpGLmVudGl0eSxlbnRpdHlUeXBlOkkuREVWSUNFLGVudGl0eUlkOnRoaXMuZGV2aWNlLmlkLGVudGl0eU5hbWU6IkdhdGV3YXkiLHRpbWVzZXJpZXM6W119XTt0aGlzLmRhdGFTb3VyY2UuZGF0YS5mb3JFYWNoKCh0PT57ZVswXS50aW1lc2VyaWVzLnB1c2goe25hbWU6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGAsbGFiZWw6YCR7dC5rZXl9X0VSUk9SU19DT1VOVGB9KX0pKSx0aGlzLmN0eC5zdWJzY3JpcHRpb25BcGkuY3JlYXRlU3Vic2NyaXB0aW9uRnJvbUluZm8oQS5sYXRlc3QsZSx0aGlzLnN1YnNjcmlwdGlvbk9wdGlvbnMsITEsITApLnN1YnNjcmliZSgoZT0+e3RoaXMuc3Vic2NyaXB0aW9uPWV9KSl9fWNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpe3RoaXMuYmFzaWNDb25maWdTdWImJnRoaXMuYmFzaWNDb25maWdTdWIudW5zdWJzY3JpYmUoKSx0aGlzLmJhc2ljQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImJhc2ljQ29uZmlnIikudmFsdWVDaGFuZ2VzLnBpcGUoTWUoKCgpPT4hIXRoaXMuaW5pdGlhbENvbm5lY3RvcikpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pntjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIiksbj10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWUsYT10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU7aWYoIWVlKGUsdD8udmFsdWUpJiZ0aGlzLmFsbG93QmFzaWNDb25maWcuaGFzKG4pJiZhPT09b24uQkFTSUMpe2NvbnN0IG49ey4uLnQudmFsdWUsLi4uZX07dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiY29uZmlndXJhdGlvbkpzb24iKS5wYXRjaFZhbHVlKG4se2VtaXRFdmVudDohMX0pfX0pKX1jcmVhdGVKc29uQ29uZmlnV2F0Y2hlcigpe3RoaXMuanNvbkNvbmZpZ1N1YiYmdGhpcy5qc29uQ29uZmlnU3ViLnVuc3Vic2NyaWJlKCksdGhpcy5qc29uQ29uZmlnU3ViPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoImNvbmZpZ3VyYXRpb25Kc29uIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e2NvbnN0IHQ9dGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKSxuPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInR5cGUiKS52YWx1ZSxhPXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoIm1vZGUiKS52YWx1ZTshZWUoZSx0Py52YWx1ZSkmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMobikmJmE9PT1vbi5BRFZBTkNFRCYmdGhpcy5jb25uZWN0b3JGb3JtLmdldCgiYmFzaWNDb25maWciKS5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWNvbmZpcm1Db25uZWN0b3JDaGFuZ2UoKXtyZXR1cm4gdGhpcy5pbml0aWFsQ29ubmVjdG9yJiZ0aGlzLmNvbm5lY3RvckZvcm0uZGlydHk/dGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0odGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRpdGxlIiksdGhpcy50cmFuc2xhdGUuaW5zdGFudCgiZ2F0ZXdheS5jaGFuZ2UtY29ubmVjdG9yLXRleHQiKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ubm8iKSx0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCJhY3Rpb24ueWVzIiksITApOkllKCEwKX1zZXRGb3JtVmFsdWUoZSl7dGhpcy5jb25uZWN0b3JGb3JtLmRpc2FibGVkJiZ0aGlzLmNvbm5lY3RvckZvcm0uZW5hYmxlKCk7Y29uc3QgdD1iYS5nZXRDb25maWcoe2NvbmZpZ3VyYXRpb246IiIsa2V5OiJhdXRvIixjb25maWd1cmF0aW9uSnNvbjp7fSwuLi5lfSx0aGlzLmdhdGV3YXlWZXJzaW9uKTt0aGlzLmdhdGV3YXlWZXJzaW9uJiYhdC5jb25maWdWZXJzaW9uJiYodC5jb25maWdWZXJzaW9uPXRoaXMuZ2F0ZXdheVZlcnNpb24pLHQuYmFzaWNDb25maWc9dC5jb25maWd1cmF0aW9uSnNvbix0aGlzLmluaXRpYWxDb25uZWN0b3I9dCx0aGlzLnVwZGF0ZUNvbm5lY3Rvcih0KX11cGRhdGVDb25uZWN0b3IoZSl7c3dpdGNoKHRoaXMuanNvbkNvbmZpZ1N1Yj8udW5zdWJzY3JpYmUoKSxlLnR5cGUpe2Nhc2UgX3QuTVFUVDpjYXNlIF90Lk9QQ1VBOmNhc2UgX3QuTU9EQlVTOnRoaXMudXBkYXRlQmFzaWNDb25maWdDb25uZWN0b3IoZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZSh7Li4uZSxtb2RlOm51bGx9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUpzb25Db25maWdXYXRjaGVyKCl9fXVwZGF0ZUJhc2ljQ29uZmlnQ29ubmVjdG9yKGUpe3RoaXMuYmFzaWNDb25maWdTdWI/LnVuc3Vic2NyaWJlKCk7Y29uc3QgdD10aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJ0eXBlIikudmFsdWU7dGhpcy5zZXRJbml0aWFsQ29ubmVjdG9yVmFsdWVzKGUpLHQhPT1lLnR5cGUmJnRoaXMuYWxsb3dCYXNpY0NvbmZpZy5oYXMoZS50eXBlKT90aGlzLmJhc2ljQ29uZmlnSW5pdFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKCgoKT0+e3RoaXMucGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKX0pKTp0aGlzLnBhdGNoQmFzaWNDb25maWdDb25uZWN0b3IoZSl9cGF0Y2hCYXNpY0NvbmZpZ0Nvbm5lY3RvcihlKXt0aGlzLmNvbm5lY3RvckZvcm0ucGF0Y2hWYWx1ZShlLHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbm5lY3RvckZvcm0ubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNyZWF0ZUJhc2ljQ29uZmlnV2F0Y2hlcigpLHRoaXMuY3JlYXRlSnNvbkNvbmZpZ1dhdGNoZXIoKX10b2dnbGVSZXBvcnRTdHJhdGVneShlKXtjb25zdCB0PXRoaXMuY29ubmVjdG9yRm9ybS5nZXQoInJlcG9ydFN0cmF0ZWd5Iik7ZT09PV90Lk1PREJVUz90LmVuYWJsZSh7ZW1pdEV2ZW50OiExfSk6dC5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KX1zZXRDbGllbnREYXRhKGUpe2lmKHRoaXMuaW5pdGlhbENvbm5lY3Rvcil7Y29uc3QgdD1lLmRhdGEuZmluZCgoZT0+ZS5rZXk9PT10aGlzLmluaXRpYWxDb25uZWN0b3IubmFtZSkpO3QmJih0LnZhbHVlPSJzdHJpbmciPT10eXBlb2YgdC52YWx1ZT9KU09OLnBhcnNlKHQudmFsdWUpOnQudmFsdWUsdGhpcy5pc0Nvbm5lY3RvclN5bmNlZCh0KSYmdC52YWx1ZS5jb25maWd1cmF0aW9uSnNvbiYmdGhpcy5zZXRGb3JtVmFsdWUoey4uLnQudmFsdWUsbW9kZTp0aGlzLmNvbm5lY3RvckZvcm0uZ2V0KCJtb2RlIikudmFsdWU/P3QudmFsdWUubW9kZX0pKX19c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpFbyxkZXBzOlt7dG9rZW46b3QuU3RvcmV9LHt0b2tlbjptZS5Gb3JtQnVpbGRlcn0se3Rva2VuOlkuVHJhbnNsYXRlU2VydmljZX0se3Rva2VuOlguQXR0cmlidXRlU2VydmljZX0se3Rva2VuOlguRGlhbG9nU2VydmljZX0se3Rva2VuOkplLk1hdERpYWxvZ30se3Rva2VuOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3Rva2VuOnQuTmdab25lfSx7dG9rZW46WC5VdGlsc1NlcnZpY2V9LHt0b2tlbjp2YX0se3Rva2VuOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5Db21wb25lbnR9KX1zdGF0aWN7dGhpcy7JtWNtcD10Lsm1ybVuZ0RlY2xhcmVDb21wb25lbnQoe21pblZlcnNpb246IjE0LjAuMCIsdmVyc2lvbjoiMTguMi42Iix0eXBlOkVvLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbm5lY3RvciIsaW5wdXRzOntjdHg6ImN0eCIsZGV2aWNlOiJkZXZpY2UifSxwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdmlld1F1ZXJpZXM6W3twcm9wZXJ0eU5hbWU6Im5hbWVJbnB1dCIsZmlyc3Q6ITAscHJlZGljYXRlOlsibmFtZUlucHV0Il0sZGVzY2VuZGFudHM6ITB9LHtwcm9wZXJ0eU5hbWU6InNvcnQiLGZpcnN0OiEwLHByZWRpY2F0ZTpnLGRlc2NlbmRhbnRzOiEwfV0sdXNlc0luaGVyaXRhbmNlOiEwLG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ10sZGVwZW5kZW5jaWVzOlt7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nVGVtcGxhdGVPdXRsZXQsc2VsZWN0b3I6IltuZ1RlbXBsYXRlT3V0bGV0XSIsaW5wdXRzOlsibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Xy5OZ1N3aXRjaCxzZWxlY3RvcjoiW25nU3dpdGNoXSIsaW5wdXRzOlsibmdTd2l0Y2giXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoQ2FzZSxzZWxlY3RvcjoiW25nU3dpdGNoQ2FzZV0iLGlucHV0czpbIm5nU3dpdGNoQ2FzZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRJY29uQnV0dG9uLHNlbGVjdG9yOiJidXR0b25bbWF0LWljb24tYnV0dG9uXSIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6eGUuTWF0SW5wdXQsc2VsZWN0b3I6ImlucHV0W21hdElucHV0XSwgdGV4dGFyZWFbbWF0SW5wdXRdLCBzZWxlY3RbbWF0TmF0aXZlQ29udHJvbF0sICAgICAgaW5wdXRbbWF0TmF0aXZlQ29udHJvbF0sIHRleHRhcmVhW21hdE5hdGl2ZUNvbnRyb2xdIixpbnB1dHM6WyJkaXNhYmxlZCIsImlkIiwicGxhY2Vob2xkZXIiLCJuYW1lIiwicmVxdWlyZWQiLCJ0eXBlIiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJhcmlhLWRlc2NyaWJlZGJ5IiwidmFsdWUiLCJyZWFkb25seSJdLGV4cG9ydEFzOlsibWF0SW5wdXQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp2ZS5NYXRGb3JtRmllbGQsc2VsZWN0b3I6Im1hdC1mb3JtLWZpZWxkIixpbnB1dHM6WyJoaWRlUmVxdWlyZWRNYXJrZXIiLCJjb2xvciIsImZsb2F0TGFiZWwiLCJhcHBlYXJhbmNlIiwic3Vic2NyaXB0U2l6aW5nIiwiaGludExhYmVsIl0sZXhwb3J0QXM6WyJtYXRGb3JtRmllbGQiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRMYWJlbCxzZWxlY3RvcjoibWF0LWxhYmVsIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp2ZS5NYXRTdWZmaXgsc2VsZWN0b3I6IlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF0sIFttYXRUZXh0U3VmZml4XSIsaW5wdXRzOlsibWF0VGV4dFN1ZmZpeCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnJ0Lk1hdFRvb2xiYXIsc2VsZWN0b3I6Im1hdC10b29sYmFyIixpbnB1dHM6WyJjb2xvciJdLGV4cG9ydEFzOlsibWF0VG9vbGJhciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmh0Lk1hdE1lbnUsc2VsZWN0b3I6Im1hdC1tZW51IixpbnB1dHM6WyJiYWNrZHJvcENsYXNzIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSIsImFyaWEtZGVzY3JpYmVkYnkiLCJ4UG9zaXRpb24iLCJ5UG9zaXRpb24iLCJvdmVybGFwVHJpZ2dlciIsImhhc0JhY2tkcm9wIiwiY2xhc3MiLCJjbGFzc0xpc3QiXSxvdXRwdXRzOlsiY2xvc2VkIiwiY2xvc2UiXSxleHBvcnRBczpbIm1hdE1lbnUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpodC5NYXRNZW51VHJpZ2dlcixzZWxlY3RvcjoiW21hdC1tZW51LXRyaWdnZXItZm9yXSwgW21hdE1lbnVUcmlnZ2VyRm9yXSIsaW5wdXRzOlsibWF0LW1lbnUtdHJpZ2dlci1mb3IiLCJtYXRNZW51VHJpZ2dlckZvciIsIm1hdE1lbnVUcmlnZ2VyRGF0YSIsIm1hdE1lbnVUcmlnZ2VyUmVzdG9yZUZvY3VzIl0sb3V0cHV0czpbIm1lbnVPcGVuZWQiLCJvbk1lbnVPcGVuIiwibWVudUNsb3NlZCIsIm9uTWVudUNsb3NlIl0sZXhwb3J0QXM6WyJtYXRNZW51VHJpZ2dlciJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOndlLk1hdFNlbGVjdCxzZWxlY3RvcjoibWF0LXNlbGVjdCIsaW5wdXRzOlsiYXJpYS1kZXNjcmliZWRieSIsInBhbmVsQ2xhc3MiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3IiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibXVsdGlwbGUiLCJkaXNhYmxlT3B0aW9uQ2VudGVyaW5nIiwiY29tcGFyZVdpdGgiLCJ2YWx1ZSIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJlcnJvclN0YXRlTWF0Y2hlciIsInR5cGVhaGVhZERlYm91bmNlSW50ZXJ2YWwiLCJzb3J0Q29tcGFyYXRvciIsImlkIiwicGFuZWxXaWR0aCJdLG91dHB1dHM6WyJvcGVuZWRDaGFuZ2UiLCJvcGVuZWQiLCJjbG9zZWQiLCJzZWxlY3Rpb25DaGFuZ2UiLCJ2YWx1ZUNoYW5nZSJdLGV4cG9ydEFzOlsibWF0U2VsZWN0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q2UuTWF0T3B0aW9uLHNlbGVjdG9yOiJtYXQtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSIsImlkIiwiZGlzYWJsZWQiXSxvdXRwdXRzOlsib25TZWxlY3Rpb25DaGFuZ2UiXSxleHBvcnRBczpbIm1hdE9wdGlvbiJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnplLk1hdFRvb2x0aXAsc2VsZWN0b3I6IlttYXRUb29sdGlwXSIsaW5wdXRzOlsibWF0VG9vbHRpcFBvc2l0aW9uIiwibWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW4iLCJtYXRUb29sdGlwRGlzYWJsZWQiLCJtYXRUb29sdGlwU2hvd0RlbGF5IiwibWF0VG9vbHRpcEhpZGVEZWxheSIsIm1hdFRvb2x0aXBUb3VjaEdlc3R1cmVzIiwibWF0VG9vbHRpcCIsIm1hdFRvb2x0aXBDbGFzcyJdLGV4cG9ydEFzOlsibWF0VG9vbHRpcCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmIuTWF0VGFibGUsc2VsZWN0b3I6Im1hdC10YWJsZSwgdGFibGVbbWF0LXRhYmxlXSIsZXhwb3J0QXM6WyJtYXRUYWJsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0SGVhZGVyQ2VsbERlZixzZWxlY3RvcjoiW21hdEhlYWRlckNlbGxEZWZdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlclJvd0RlZixzZWxlY3RvcjoiW21hdEhlYWRlclJvd0RlZl0iLGlucHV0czpbIm1hdEhlYWRlclJvd0RlZiIsIm1hdEhlYWRlclJvd0RlZlN0aWNreSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Q29sdW1uRGVmLHNlbGVjdG9yOiJbbWF0Q29sdW1uRGVmXSIsaW5wdXRzOlsibWF0Q29sdW1uRGVmIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsRGVmLHNlbGVjdG9yOiJbbWF0Q2VsbERlZl0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmIuTWF0Um93RGVmLHNlbGVjdG9yOiJbbWF0Um93RGVmXSIsaW5wdXRzOlsibWF0Um93RGVmQ29sdW1ucyIsIm1hdFJvd0RlZldoZW4iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpiLk1hdEhlYWRlckNlbGwsc2VsZWN0b3I6Im1hdC1oZWFkZXItY2VsbCwgdGhbbWF0LWhlYWRlci1jZWxsXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Yi5NYXRDZWxsLHNlbGVjdG9yOiJtYXQtY2VsbCwgdGRbbWF0LWNlbGxdIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdEhlYWRlclJvdyxzZWxlY3RvcjoibWF0LWhlYWRlci1yb3csIHRyW21hdC1oZWFkZXItcm93XSIsZXhwb3J0QXM6WyJtYXRIZWFkZXJSb3ciXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiLk1hdFJvdyxzZWxlY3RvcjoibWF0LXJvdywgdHJbbWF0LXJvd10iLGV4cG9ydEFzOlsibWF0Um93Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Zi5NYXRTb3J0LHNlbGVjdG9yOiJbbWF0U29ydF0iLGlucHV0czpbIm1hdFNvcnRBY3RpdmUiLCJtYXRTb3J0U3RhcnQiLCJtYXRTb3J0RGlyZWN0aW9uIiwibWF0U29ydERpc2FibGVDbGVhciIsIm1hdFNvcnREaXNhYmxlZCJdLG91dHB1dHM6WyJtYXRTb3J0Q2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTb3J0Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Zi5NYXRTb3J0SGVhZGVyLHNlbGVjdG9yOiJbbWF0LXNvcnQtaGVhZGVyXSIsaW5wdXRzOlsibWF0LXNvcnQtaGVhZGVyIiwiYXJyb3dQb3NpdGlvbiIsInN0YXJ0IiwiZGlzYWJsZWQiLCJzb3J0QWN0aW9uRGVzY3JpcHRpb24iLCJkaXNhYmxlQ2xlYXIiXSxleHBvcnRBczpbIm1hdFNvcnRIZWFkZXIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYixzZWxlY3RvcjoibWF0LXRhYiIsaW5wdXRzOlsiZGlzYWJsZWQiLCJsYWJlbCIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJsYWJlbENsYXNzIiwiYm9keUNsYXNzIl0sZXhwb3J0QXM6WyJtYXRUYWIiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpXLk1hdFRhYkdyb3VwLHNlbGVjdG9yOiJtYXQtdGFiLWdyb3VwIixpbnB1dHM6WyJjb2xvciIsImZpdElua0JhclRvQ29udGVudCIsIm1hdC1zdHJldGNoLXRhYnMiLCJkeW5hbWljSGVpZ2h0Iiwic2VsZWN0ZWRJbmRleCIsImhlYWRlclBvc2l0aW9uIiwiYW5pbWF0aW9uRHVyYXRpb24iLCJjb250ZW50VGFiSW5kZXgiLCJkaXNhYmxlUGFnaW5hdGlvbiIsImRpc2FibGVSaXBwbGUiLCJwcmVzZXJ2ZUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5Il0sb3V0cHV0czpbInNlbGVjdGVkSW5kZXhDaGFuZ2UiLCJmb2N1c0NoYW5nZSIsImFuaW1hdGlvbkRvbmUiLCJzZWxlY3RlZFRhYkNoYW5nZSJdLGV4cG9ydEFzOlsibWF0VGFiR3JvdXAiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpldC5NYXRTbGlkZVRvZ2dsZSxzZWxlY3RvcjoibWF0LXNsaWRlLXRvZ2dsZSIsaW5wdXRzOlsibmFtZSIsImlkIiwibGFiZWxQb3NpdGlvbiIsImFyaWEtbGFiZWwiLCJhcmlhLWxhYmVsbGVkYnkiLCJhcmlhLWRlc2NyaWJlZGJ5IiwicmVxdWlyZWQiLCJjb2xvciIsImRpc2FibGVkIiwiZGlzYWJsZVJpcHBsZSIsInRhYkluZGV4IiwiY2hlY2tlZCIsImhpZGVJY29uIiwiZGlzYWJsZWRJbnRlcmFjdGl2ZSJdLG91dHB1dHM6WyJjaGFuZ2UiLCJ0b2dnbGVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNsaWRlVG9nZ2xlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRMYXlvdXRBbGlnbkRpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRBbGlnbl0sIFtmeExheW91dEFsaWduLnhzXSwgW2Z4TGF5b3V0QWxpZ24uc21dLCBbZnhMYXlvdXRBbGlnbi5tZF0sICBbZnhMYXlvdXRBbGlnbi5sZ10sIFtmeExheW91dEFsaWduLnhsXSwgW2Z4TGF5b3V0QWxpZ24ubHQtc21dLCBbZnhMYXlvdXRBbGlnbi5sdC1tZF0sICBbZnhMYXlvdXRBbGlnbi5sdC1sZ10sIFtmeExheW91dEFsaWduLmx0LXhsXSwgW2Z4TGF5b3V0QWxpZ24uZ3QteHNdLCBbZnhMYXlvdXRBbGlnbi5ndC1zbV0sICBbZnhMYXlvdXRBbGlnbi5ndC1tZF0sIFtmeExheW91dEFsaWduLmd0LWxnXSIsaW5wdXRzOlsiZnhMYXlvdXRBbGlnbiIsImZ4TGF5b3V0QWxpZ24ueHMiLCJmeExheW91dEFsaWduLnNtIiwiZnhMYXlvdXRBbGlnbi5tZCIsImZ4TGF5b3V0QWxpZ24ubGciLCJmeExheW91dEFsaWduLnhsIiwiZnhMYXlvdXRBbGlnbi5sdC1zbSIsImZ4TGF5b3V0QWxpZ24ubHQtbWQiLCJmeExheW91dEFsaWduLmx0LWxnIiwiZnhMYXlvdXRBbGlnbi5sdC14bCIsImZ4TGF5b3V0QWxpZ24uZ3QteHMiLCJmeExheW91dEFsaWduLmd0LXNtIiwiZnhMYXlvdXRBbGlnbi5ndC1tZCIsImZ4TGF5b3V0QWxpZ24uZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpqLkRlZmF1bHRGbGV4RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeEZsZXhdLCBbZnhGbGV4LnhzXSwgW2Z4RmxleC5zbV0sIFtmeEZsZXgubWRdLCAgW2Z4RmxleC5sZ10sIFtmeEZsZXgueGxdLCBbZnhGbGV4Lmx0LXNtXSwgW2Z4RmxleC5sdC1tZF0sICBbZnhGbGV4Lmx0LWxnXSwgW2Z4RmxleC5sdC14bF0sIFtmeEZsZXguZ3QteHNdLCBbZnhGbGV4Lmd0LXNtXSwgIFtmeEZsZXguZ3QtbWRdLCBbZnhGbGV4Lmd0LWxnXSIsaW5wdXRzOlsiZnhGbGV4IiwiZnhGbGV4LnhzIiwiZnhGbGV4LnNtIiwiZnhGbGV4Lm1kIiwiZnhGbGV4LmxnIiwiZnhGbGV4LnhsIiwiZnhGbGV4Lmx0LXNtIiwiZnhGbGV4Lmx0LW1kIiwiZnhGbGV4Lmx0LWxnIiwiZnhGbGV4Lmx0LXhsIiwiZnhGbGV4Lmd0LXhzIiwiZnhGbGV4Lmd0LXNtIiwiZnhGbGV4Lmd0LW1kIiwiZnhGbGV4Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6Sy5EZWZhdWx0U2hvd0hpZGVEaXJlY3RpdmUsc2VsZWN0b3I6IiAgW2Z4U2hvd10sIFtmeFNob3cucHJpbnRdLCAgW2Z4U2hvdy54c10sIFtmeFNob3cuc21dLCBbZnhTaG93Lm1kXSwgW2Z4U2hvdy5sZ10sIFtmeFNob3cueGxdLCAgW2Z4U2hvdy5sdC1zbV0sIFtmeFNob3cubHQtbWRdLCBbZnhTaG93Lmx0LWxnXSwgW2Z4U2hvdy5sdC14bF0sICBbZnhTaG93Lmd0LXhzXSwgW2Z4U2hvdy5ndC1zbV0sIFtmeFNob3cuZ3QtbWRdLCBbZnhTaG93Lmd0LWxnXSwgIFtmeEhpZGVdLCBbZnhIaWRlLnByaW50XSwgIFtmeEhpZGUueHNdLCBbZnhIaWRlLnNtXSwgW2Z4SGlkZS5tZF0sIFtmeEhpZGUubGddLCBbZnhIaWRlLnhsXSwgIFtmeEhpZGUubHQtc21dLCBbZnhIaWRlLmx0LW1kXSwgW2Z4SGlkZS5sdC1sZ10sIFtmeEhpZGUubHQteGxdLCAgW2Z4SGlkZS5ndC14c10sIFtmeEhpZGUuZ3Qtc21dLCBbZnhIaWRlLmd0LW1kXSwgW2Z4SGlkZS5ndC1sZ10iLGlucHV0czpbImZ4U2hvdyIsImZ4U2hvdy5wcmludCIsImZ4U2hvdy54cyIsImZ4U2hvdy5zbSIsImZ4U2hvdy5tZCIsImZ4U2hvdy5sZyIsImZ4U2hvdy54bCIsImZ4U2hvdy5sdC1zbSIsImZ4U2hvdy5sdC1tZCIsImZ4U2hvdy5sdC1sZyIsImZ4U2hvdy5sdC14bCIsImZ4U2hvdy5ndC14cyIsImZ4U2hvdy5ndC1zbSIsImZ4U2hvdy5ndC1tZCIsImZ4U2hvdy5ndC1sZyIsImZ4SGlkZSIsImZ4SGlkZS5wcmludCIsImZ4SGlkZS54cyIsImZ4SGlkZS5zbSIsImZ4SGlkZS5tZCIsImZ4SGlkZS5sZyIsImZ4SGlkZS54bCIsImZ4SGlkZS5sdC1zbSIsImZ4SGlkZS5sdC1tZCIsImZ4SGlkZS5sdC1sZyIsImZ4SGlkZS5sdC14bCIsImZ4SGlkZS5ndC14cyIsImZ4SGlkZS5ndC1zbSIsImZ4SGlkZS5ndC1tZCIsImZ4SGlkZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOksuRGVmYXVsdFN0eWxlRGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtuZ1N0eWxlXSwgIFtuZ1N0eWxlLnhzXSwgW25nU3R5bGUuc21dLCBbbmdTdHlsZS5tZF0sIFtuZ1N0eWxlLmxnXSwgW25nU3R5bGUueGxdLCAgW25nU3R5bGUubHQtc21dLCBbbmdTdHlsZS5sdC1tZF0sIFtuZ1N0eWxlLmx0LWxnXSwgW25nU3R5bGUubHQteGxdLCAgW25nU3R5bGUuZ3QteHNdLCBbbmdTdHlsZS5ndC1zbV0sIFtuZ1N0eWxlLmd0LW1kXSwgW25nU3R5bGUuZ3QtbGddIixpbnB1dHM6WyJuZ1N0eWxlIiwibmdTdHlsZS54cyIsIm5nU3R5bGUuc20iLCJuZ1N0eWxlLm1kIiwibmdTdHlsZS5sZyIsIm5nU3R5bGUueGwiLCJuZ1N0eWxlLmx0LXNtIiwibmdTdHlsZS5sdC1tZCIsIm5nU3R5bGUubHQtbGciLCJuZ1N0eWxlLmx0LXhsIiwibmdTdHlsZS5ndC14cyIsIm5nU3R5bGUuZ3Qtc20iLCJuZ1N0eWxlLmd0LW1kIiwibmdTdHlsZS5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1cyxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0sW25nTW9kZWxdLFtmb3JtQ29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk5nQ29udHJvbFN0YXR1c0dyb3VwLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0sW2Zvcm1BcnJheU5hbWVdLFtuZ01vZGVsR3JvdXBdLFtmb3JtR3JvdXBdLGZvcm06bm90KFtuZ05vRm9ybV0pLFtuZ0Zvcm1dIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtR3JvdXBdIixpbnB1dHM6WyJmb3JtR3JvdXAiXSxvdXRwdXRzOlsibmdTdWJtaXQiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Db250cm9sTmFtZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sTmFtZV0iLGlucHV0czpbImZvcm1Db250cm9sTmFtZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLG91dHB1dHM6WyJuZ01vZGVsQ2hhbmdlIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bnQuVG9nZ2xlT3B0aW9uLHNlbGVjdG9yOiJ0Yi10b2dnbGUtb3B0aW9uIixpbnB1dHM6WyJ2YWx1ZSJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmF0LlRvZ2dsZVNlbGVjdENvbXBvbmVudCxzZWxlY3RvcjoidGItdG9nZ2xlLXNlbGVjdCIsaW5wdXRzOlsiZGlzYWJsZWQiLCJzZWxlY3RNZWRpYUJyZWFrcG9pbnQiLCJhcHBlYXJhbmNlIiwiZGlzYWJsZVBhZ2luYXRpb24iLCJmaWxsSGVpZ2h0IiwiZXh0cmFQYWRkaW5nIiwicHJpbWFyeUJhY2tncm91bmQiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp1dC5IaW50VG9vbHRpcEljb25Db21wb25lbnQsc2VsZWN0b3I6Ilt0Yi1oaW50LXRvb2x0aXAtaWNvbl0iLGlucHV0czpbInRiLWhpbnQtdG9vbHRpcC1pY29uIiwidG9vbHRpcFBvc2l0aW9uIiwiaGludEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpMbyxzZWxlY3RvcjoidGItbW9kYnVzLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmtvLHNlbGVjdG9yOiJ0Yi1tb2RidXMtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpGbyxzZWxlY3RvcjoidGItb3BjLXVhLWxlZ2FjeS1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnBvLHNlbGVjdG9yOiJ0Yi1vcGMtdWEtYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpBbyxzZWxlY3RvcjoidGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnIn0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpObyxzZWxlY3RvcjoidGItbXF0dC1iYXNpYy1jb25maWcifSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmdvLHNlbGVjdG9yOiJ0Yi1yZXBvcnQtc3RyYXRlZ3kiLGlucHV0czpbImlzRXhwYW5zaW9uTW9kZSIsImRlZmF1bHRWYWx1ZSJdfSx7a2luZDoicGlwZSIsdHlwZTpfLkFzeW5jUGlwZSxuYW1lOiJhc3luYyJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifSx7a2luZDoicGlwZSIsdHlwZTp2YSxuYW1lOiJpc0xhdGVzdFZlcnNpb25Db25maWcifV19KX19ZSgiR2F0ZXdheUNvbm5lY3RvckNvbXBvbmVudCIsRW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29ubmVjdG9yIixwcm92aWRlcnM6W3twcm92aWRlOlRlLHVzZUNsYXNzOk1vfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IGNsYXNzPSJjb25uZWN0b3ItY29udGFpbmVyIHRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPHNlY3Rpb24gY2xhc3M9InRhYmxlLXNlY3Rpb24gdGItZm9ybS1wYW5lbCBuby1wYWRkaW5nIGZsZXggc2VjdGlvbi1jb250YWluZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjbGFzcz0ibWF0LW1kYy10YWJsZS10b29sYmFyIj5cbiAgICAgIDxoMj57eyBcJ2dhdGV3YXkuY29ubmVjdG9yc1wnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgIDxzcGFuIGZ4RmxleD48L3NwYW4+XG4gICAgICA8YnV0dG9uICpuZ0lmPSJkYXRhU291cmNlPy5kYXRhPy5sZW5ndGgiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPSJpc0xvYWRpbmckIHwgYXN5bmMiXG4gICAgICAgICAgICAgIChjbGljayk9Im9uQWRkQ29ubmVjdG9yKCRldmVudCkiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnYWN0aW9uLmFkZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgPG1hdC1pY29uPmFkZDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC10b29sYmFyPlxuICAgIDxkaXYgY2xhc3M9InRhYmxlLWNvbnRhaW5lciI+XG4gICAgICA8c2VjdGlvbiAqbmdJZj0iIWRhdGFTb3VyY2U/LmRhdGE/Lmxlbmd0aCIgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICAgICAgIGNsYXNzPSJtYXQtaGVhZGxpbmUtNSB0Yi1hYnNvbHV0ZS1maWxsIHRiLWFkZC1uZXciPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gY2xhc3M9ImNvbm5lY3RvciJcbiAgICAgICAgKGNsaWNrKT0ib25BZGRDb25uZWN0b3IoJGV2ZW50KSI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJ0Yi1tYXQtOTYiPmFkZDwvbWF0LWljb24+XG4gICAgICAgICAgPHNwYW4+e3sgXCdnYXRld2F5LmFkZC1jb25uZWN0b3JcJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L3NlY3Rpb24+XG4gICAgICA8dGFibGUgbWF0LXRhYmxlIFtkYXRhU291cmNlXT0iZGF0YVNvdXJjZSJcbiAgICAgICAgICAgICBtYXRTb3J0IFttYXRTb3J0QWN0aXZlXT0icGFnZUxpbmsuc29ydE9yZGVyLnByb3BlcnR5IiBbbWF0U29ydERpcmVjdGlvbl09InBhZ2VMaW5rLnNvcnREaXJlY3Rpb24oKSJcbiAgICAgICAgICAgICBtYXRTb3J0RGlzYWJsZUNsZWFyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iZW5hYmxlZCIgc3RpY2t5PlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgc3R5bGU9IndpZHRoOiA2MHB4O21pbi13aWR0aDogNjBweDsiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFtjaGVja2VkXT0iYWN0aXZlQ29ubmVjdG9ycy5pbmNsdWRlcyhhdHRyaWJ1dGUua2V5KSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgb25FbmFibGVDb25uZWN0b3IoYXR0cmlidXRlKSI+PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0ia2V5Ij5cbiAgICAgICAgICA8bWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIG1hdC1zb3J0LWhlYWRlciBzdHlsZT0id2lkdGg6IDQwJSI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1uYW1lXCcgfCB0cmFuc2xhdGUgfX08L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiPlxuICAgICAgICAgICAge3sgYXR0cmlidXRlLmtleSB9fVxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0idHlwZSI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtdHlwZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtaGVhZGVyLWNlbGw+XG4gICAgICAgICAgPG1hdC1jZWxsICptYXRDZWxsRGVmPSJsZXQgYXR0cmlidXRlIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZSI+XG4gICAgICAgICAgICB7eyByZXR1cm5UeXBlKGF0dHJpYnV0ZSkgfX1cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9InN5bmNTdGF0dXMiPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIHN0eWxlPSJ3aWR0aDogMzAlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHVzIiBbY2xhc3NdPSJpc0Nvbm5lY3RvclN5bmNlZChhdHRyaWJ1dGUpID8gXCdzdGF0dXMtc3luY1wnIDogXCdzdGF0dXMtdW5zeW5jXCciPlxuICAgICAgICAgICAgICAgIHt7IGlzQ29ubmVjdG9yU3luY2VkKGF0dHJpYnV0ZSkgPyBcJ3N5bmNcJyA6IFwnb3V0IG9mIHN5bmNcJyB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L21hdC1jZWxsPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9ImVycm9ycyI+XG4gICAgICAgICAgPG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgc3R5bGU9IndpZHRoOiAzMCUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LmNvbm5lY3RvcnMtdGFibGUtc3RhdHVzXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1oZWFkZXItY2VsbD5cbiAgICAgICAgICA8bWF0LWNlbGwgKm1hdENlbGxEZWY9ImxldCBhdHRyaWJ1dGUiIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkb3QiXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ0Vycm9yczogXCcrIGdldEVycm9yc0NvdW50KGF0dHJpYnV0ZSl9fSJcbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JMb2dzKGF0dHJpYnV0ZSwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109IntcJ2hhc0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA+IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdub0Vycm9yc1wnOiArZ2V0RXJyb3JzQ291bnQoYXR0cmlidXRlKSA9PT0gMCB8fCBnZXRFcnJvcnNDb3VudChhdHRyaWJ1dGUpID09PSBcJ1wnfSI+PC9zcGFuPlxuICAgICAgICAgIDwvbWF0LWNlbGw+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj0iYWN0aW9ucyIgc3RpY2t5RW5kPlxuICAgICAgICAgIDxtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlLmd0LW1kXT0ieyBtaW5XaWR0aDogXCcxNDRweFwnLCBtYXhXaWR0aDogXCcxNDRweFwnLCB3aWR0aDogXCcxNDRweFwnLCB0ZXh0QWxpZ246IFwnY2VudGVyXCd9Ij5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWFjdGlvbnNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWhlYWRlci1jZWxsPlxuICAgICAgICAgIDxtYXQtY2VsbCAqbWF0Q2VsbERlZj0ibGV0IGF0dHJpYnV0ZSJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGUuZ3QtbWRdPSJ7IG1pbldpZHRoOiBcJzE0NHB4XCcsIG1heFdpZHRoOiBcJzE0NHB4XCcsIHdpZHRoOiBcJzE0NHB4XCd9Ij5cbiAgICAgICAgICAgIDxkaXYgZnhIaWRlIGZ4U2hvdy5ndC1tZCBmeEZsZXggZnhMYXlvdXQ9InJvdyIgZnhMYXlvdXRBbGlnbj0iZW5kIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJjb25uZWN0b3JScGMoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yTG9ncyhhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImRlbGV0ZUNvbm5lY3RvcihhdHRyaWJ1dGUsICRldmVudCkiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBmeEhpZGUgZnhTaG93Lmx0LWxnPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9IiRldmVudC5zdG9wUHJvcGFnYXRpb24oKSJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPSJjZWxsQWN0aW9uc01lbnUiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0ZXJpYWwtaWNvbnMiPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bWF0LW1lbnUgI2NlbGxBY3Rpb25zTWVudT0ibWF0TWVudSIgeFBvc2l0aW9uPSJiZWZvcmUiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJSUEMiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iY29ubmVjdG9yUnBjKGF0dHJpYnV0ZSwgJGV2ZW50KSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+cHJpdmF0ZV9jb25uZWN0aXZpdHk8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJMb2dzIlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9ImNvbm5lY3RvckxvZ3MoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0iRGVsZXRlIGNvbm5lY3RvciJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPSJkZWxldGVDb25uZWN0b3IoYXR0cmlidXRlLCAkZXZlbnQpIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtY2VsbD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxtYXQtaGVhZGVyLXJvdyBjbGFzcz0ibWF0LXJvdy1zZWxlY3QiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPSJkaXNwbGF5ZWRDb2x1bW5zOyBzdGlja3k6IHRydWUiPjwvbWF0LWhlYWRlci1yb3c+XG4gICAgICAgIDxtYXQtcm93IGNsYXNzPSJtYXQtcm93LXNlbGVjdCIgW2NsYXNzXT0ie1wndGItY3VycmVudC1lbnRpdHlcJzogaXNTYW1lQ29ubmVjdG9yKGF0dHJpYnV0ZSl9IlxuICAgICAgICAgICAgICAgICAqbWF0Um93RGVmPSJsZXQgYXR0cmlidXRlOyBsZXQgaSA9IGluZGV4OyBjb2x1bW5zOiBkaXNwbGF5ZWRDb2x1bW5zOyIgKGNsaWNrKT0ic2VsZWN0Q29ubmVjdG9yKCRldmVudCwgYXR0cmlidXRlKSI+PC9tYXQtcm93PlxuICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgPC9zZWN0aW9uPlxuICA8c2VjdGlvbiBbZm9ybUdyb3VwXT0iY29ubmVjdG9yRm9ybSIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc2VjdGlvbi1jb250YWluZXIgZmxleCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSB0Yi1mbGV4IG5vLWZsZXggc3BhY2UtYmV0d2VlbiBhbGlnbi1jZW50ZXIiPlxuICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+XG4gICAgICAgIHt7IGluaXRpYWxDb25uZWN0b3I/LnR5cGUgPyBHYXRld2F5Q29ubmVjdG9yVHlwZXNUcmFuc2xhdGVzTWFwLmdldChpbml0aWFsQ29ubmVjdG9yLnR5cGUpIDogXCdcJyB9fVxuICAgICAgICB7eyBcJ2dhdGV3YXkuY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDxzcGFuIGNsYXNzPSJ2ZXJzaW9uLXBsYWNlaG9sZGVyIiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIj52e3tjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWV9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IgJiYgYWxsb3dCYXNpY0NvbmZpZy5oYXMoaW5pdGlhbENvbm5lY3Rvci50eXBlKSJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0ibW9kZSIgYXBwZWFyYW5jZT0iZmlsbCI+XG4gICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uIFt2YWx1ZV09IkNvbm5lY3RvckNvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LmJhc2ljXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25uZWN0b3JDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiPlxuICAgICAgICAgIHt7IFwnZ2F0ZXdheS5hZHZhbmNlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8c3BhbiBbZnhTaG93XT0iIWluaXRpYWxDb25uZWN0b3IiXG4gICAgICAgICAgZnhMYXlvdXRBbGlnbj0iY2VudGVyIGNlbnRlciJcbiAgICAgICAgICBjbGFzcz0ibm8tZGF0YS1mb3VuZCIgdHJhbnNsYXRlPlxuICAgICAgZ2F0ZXdheS5zZWxlY3QtY29ubmVjdG9yXG4gICAgPC9zcGFuPlxuICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHNlY3Rpb24tY29udGFpbmVyIG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLWZsZXggc3BhY2UtYmV0d2VlbiIgKm5nSWY9ImluaXRpYWxDb25uZWN0b3IiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdtb2RlXCcpPy52YWx1ZSA9PT0gQ29ubmVjdG9yQ29uZmlndXJhdGlvbk1vZGVzLkJBU0lDIGVsc2UgZGVmYXVsdENvbmZpZyI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iaW5pdGlhbENvbm5lY3Rvci50eXBlIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9IkNvbm5lY3RvclR5cGUuTVFUVCI+XG4gICAgICAgICAgICA8dGItbXF0dC1iYXNpYy1jb25maWdcbiAgICAgICAgICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZyBlbHNlIGxlZ2FjeSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIChpbml0aWFsaXplZCk9ImJhc2ljQ29uZmlnSW5pdFN1YmplY3QubmV4dCgpIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbGVnYWN5PlxuICAgICAgICAgICAgICA8dGItbXF0dC1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk9QQ1VBIj5cbiAgICAgICAgICAgIDx0Yi1vcGMtdWEtYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ2NvbmZpZ1ZlcnNpb25cJykudmFsdWUgfCBpc0xhdGVzdFZlcnNpb25Db25maWcgZWxzZSBsZWdhY3kiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgIFtnZW5lcmFsVGFiQ29udGVudF09ImdlbmVyYWxUYWJDb250ZW50IlxuICAgICAgICAgICAgICAoaW5pdGlhbGl6ZWQpPSJiYXNpY0NvbmZpZ0luaXRTdWJqZWN0Lm5leHQoKSJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xlZ2FjeT5cbiAgICAgICAgICAgICAgPHRiLW9wYy11YS1sZWdhY3ktYmFzaWMtY29uZmlnXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJiYXNpY0NvbmZpZyJcbiAgICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPSJDb25uZWN0b3JUeXBlLk1PREJVUyI+XG4gICAgICAgICAgICA8dGItbW9kYnVzLWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCdjb25maWdWZXJzaW9uXCcpLnZhbHVlIHwgaXNMYXRlc3RWZXJzaW9uQ29uZmlnIGVsc2UgbGVnYWN5IlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImJhc2ljQ29uZmlnIlxuICAgICAgICAgICAgICBbZ2VuZXJhbFRhYkNvbnRlbnRdPSJnZW5lcmFsVGFiQ29udGVudCJcbiAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNsZWdhY3k+XG4gICAgICAgICAgICAgIDx0Yi1tb2RidXMtbGVnYWN5LWJhc2ljLWNvbmZpZ1xuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICAgICAgICAgICAgKGluaXRpYWxpemVkKT0iYmFzaWNDb25maWdJbml0U3ViamVjdC5uZXh0KCkiXG4gICAgICAgICAgICAgICAgW2dlbmVyYWxUYWJDb250ZW50XT0iZ2VuZXJhbFRhYkNvbnRlbnQiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29uZmlnPlxuICAgICAgICA8bWF0LXRhYi1ncm91cD5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT0iZ2VuZXJhbFRhYkNvbnRlbnQiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSoiPlxuICAgICAgICAgICAgPHRiLWpzb24tb2JqZWN0LWVkaXRcbiAgICAgICAgICAgICAgZmlsbEhlaWdodD0idHJ1ZSJcbiAgICAgICAgICAgICAgY2xhc3M9InRiLWZsZXggZmlsbC1oZWlnaHQiXG4gICAgICAgICAgICAgIGZ4TGF5b3V0PSJjb2x1bW4iXG4gICAgICAgICAgICAgIGpzb25SZXF1aXJlZFxuICAgICAgICAgICAgICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjb25maWd1cmF0aW9uSnNvbiI+XG4gICAgICAgICAgICA8L3RiLWpzb24tb2JqZWN0LWVkaXQ+XG4gICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBmeExheW91dEFsaWduPSJlbmQgY2VudGVyIj5cbiAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWNvbm5lY3RvckZvcm0uZGlydHkgfHwgY29ubmVjdG9yRm9ybS5pbnZhbGlkIlxuICAgICAgICAgICAgICAgIChjbGljayk9Im9uU2F2ZUNvbm5lY3RvcigpIj5cbiAgICAgICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIDwvc2VjdGlvbj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNnZW5lcmFsVGFiQ29udGVudD5cbiAgPHNlY3Rpb24gW2Zvcm1Hcm91cF09ImNvbm5lY3RvckZvcm0iIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLWJvcmRlciBuby1wYWRkaW5nIHBhZGRpbmctdG9wIHNlY3Rpb24tY29udGFpbmVyIGZsZXgiPlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiID5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIHRiLXJlcXVpcmVkIiB0cmFuc2xhdGU+Z2F0ZXdheS5uYW1lPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IG5vLWdhcCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IGF1dG9jb21wbGV0ZT0ib2ZmIiBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJuYW1lIiBwbGFjZWhvbGRlcj0ie3sgXCdnYXRld2F5LnNldFwnIHwgdHJhbnNsYXRlIH19Ii8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9InRiLWVycm9yLXRvb2x0aXAiXG4gICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT0iKGNvbm5lY3RvckZvcm0uZ2V0KFwnbmFtZVwnKS5oYXNFcnJvcihcJ2R1cGxpY2F0ZU5hbWVcJykgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCdnYXRld2F5LmNvbm5lY3Rvci1kdXBsaWNhdGUtbmFtZVwnIDogXCdnYXRld2F5Lm5hbWUtcmVxdWlyZWRcJykgfCB0cmFuc2xhdGUiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSIoY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykgJiYgY29ubmVjdG9yRm9ybS5nZXQoXCduYW1lXCcpLnRvdWNoZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3JGb3JtLmdldChcJ25hbWVcJykuaGFzRXJyb3IoXCdkdXBsaWNhdGVOYW1lXCcpIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItZXJyb3IiPlxuICAgICAgICAgICAgd2FybmluZ1xuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuQ1VTVE9NIiBjbGFzcz0idGItZm9ybS1yb3cgY29sdW1uLXhzIiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkuY29ubmVjdG9ycy10YWJsZS1jbGFzczwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJjbGFzcyIgcGxhY2Vob2xkZXI9Int7IFwnZ2F0ZXdheS5zZXRcJyB8IHRyYW5zbGF0ZSB9fSIvPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj0iY29ubmVjdG9yRm9ybS5nZXQoXCd0eXBlXCcpLnZhbHVlID09PSBDb25uZWN0b3JUeXBlLkdSUEMiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBjb2x1bW4teHMiIGZ4TGF5b3V0QWxpZ249InNwYWNlLWJldHdlZW4gY2VudGVyIj5cbiAgICAgIDxkaXYgY2xhc3M9ImZpeGVkLXRpdGxlLXdpZHRoIiB0cmFuc2xhdGU+Z2F0ZXdheS5jb25uZWN0b3JzLXRhYmxlLWtleTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9InRiLWZsZXggbm8tZ2FwIiBhcHBlYXJhbmNlPSJvdXRsaW5lIiBzdWJzY3JpcHRTaXppbmc9ImR5bmFtaWMiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBuYW1lPSJ2YWx1ZSIgZm9ybUNvbnRyb2xOYW1lPSJrZXkiIHBsYWNlaG9sZGVyPSJ7eyBcJ2dhdGV3YXkuc2V0XCcgfCB0cmFuc2xhdGUgfX0iLz5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLWNvbmZpZ3VyYXRpb248L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IiBmeExheW91dEFsaWduPSJzcGFjZS1iZXR3ZWVuIGNlbnRlciI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlUmVtb3RlTG9nZ2luZyI+XG4gICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5lbmFibGUtcmVtb3RlLWxvZ2dpbmdcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgICA8ZGl2IGNsYXNzPSJmaXhlZC10aXRsZS13aWR0aCIgdHJhbnNsYXRlPmdhdGV3YXkucmVtb3RlLWxvZ2dpbmctbGV2ZWw8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZmxleCBuby1nYXAiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz0idGItZmxleCBuby1nYXAiIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyI+XG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPSJjb25uZWN0b3JGb3JtLmdldChcJ3R5cGVcJykudmFsdWUgPT09IENvbm5lY3RvclR5cGUuTVFUVCIgY2xhc3M9InRiLWZvcm0tcm93IGNvbHVtbi14cyIgZnhMYXlvdXRBbGlnbj0ic3BhY2UtYmV0d2VlbiBjZW50ZXIiPlxuICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJzZW5kRGF0YU9ubHlPbkNoYW5nZSI+XG4gICAgICAgIDxtYXQtbGFiZWwgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5zZW5kLWNoYW5nZS1kYXRhLWhpbnRcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgICAgICAge3sgXCdnYXRld2F5LnNlbmQtY2hhbmdlLWRhdGFcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8L2Rpdj5cbiAgICA8dGItcmVwb3J0LXN0cmF0ZWd5XG4gICAgICBbZGVmYXVsdFZhbHVlXT0iUmVwb3J0U3RyYXRlZ3lEZWZhdWx0VmFsdWUuQ29ubmVjdG9yIlxuICAgICAgKm5nSWY9ImNvbm5lY3RvckZvcm0uZ2V0KFwndHlwZVwnKS52YWx1ZSA9PT0gQ29ubmVjdG9yVHlwZS5NT0RCVVMgJiYgKGNvbm5lY3RvckZvcm0uZ2V0KFwnY29uZmlnVmVyc2lvblwnKS52YWx1ZSB8IGlzTGF0ZXN0VmVyc2lvbkNvbmZpZykiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9InJlcG9ydFN0cmF0ZWd5IlxuICAgIC8+XG4gIDwvc2VjdGlvbj5cbjwvbmctdGVtcGxhdGU+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmJsb2NrO292ZXJmbG93LXg6YXV0bztwYWRkaW5nOjB9Omhvc3QgLnZlcnNpb24tcGxhY2Vob2xkZXJ7Y29sb3I6Z3JheTtmb250LXNpemU6MTJweH06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lcntoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXgtZGlyZWN0aW9uOnJvd31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAxMjc5cHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVye2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn19Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXI+c2VjdGlvbjpub3QoLnRhYmxlLXNlY3Rpb24pe21heC13aWR0aDp1bnNldH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOiAxMjgwcHgpezpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyPnNlY3Rpb246bm90KC50YWJsZS1zZWN0aW9uKXttYXgtd2lkdGg6NTAlfX06aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGFibGUtc2VjdGlvbnttaW4taGVpZ2h0OjM1dmg7b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5jb25uZWN0b3ItY29udGFpbmVyIC50YWJsZS1zZWN0aW9uIC50YWJsZS1jb250YWluZXJ7b3ZlcmZsb3c6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuZmxleHtmbGV4OjF9Omhvc3QgLmNvbm5lY3Rvci1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lcntoZWlnaHQ6YXV0b306aG9zdCAuY29ubmVjdG9yLWNvbnRhaW5lciAuc2VjdGlvbi1jb250YWluZXJ7YmFja2dyb3VuZC1jb2xvcjojZmZmfTpob3N0IC5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLm1hdC1tZGMtc2xpZGUtdG9nZ2xle21hcmdpbjowIDhweH06aG9zdCAuc3RhdHVze3RleHQtYWxpZ246Y2VudGVyO2JvcmRlci1yYWRpdXM6MTZweDtmb250LXdlaWdodDo1MDA7d2lkdGg6Zml0LWNvbnRlbnQ7cGFkZGluZzo1cHggMTVweH06aG9zdCAuc3RhdHVzLXN5bmN7YmFja2dyb3VuZDojMTk4MDM4MGY7Y29sb3I6IzE5ODAzOH06aG9zdCAuc3RhdHVzLXVuc3luY3tiYWNrZ3JvdW5kOiNjYjI1MzAwZjtjb2xvcjojY2IyNTMwfTpob3N0IG1hdC1yb3d7Y3Vyc29yOnBvaW50ZXJ9Omhvc3QgLmRvdHtoZWlnaHQ6MTJweDt3aWR0aDoxMnB4O2JhY2tncm91bmQtY29sb3I6I2JiYjtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmlubGluZS1ibG9ja306aG9zdCAuaGFzRXJyb3Jze2JhY2tncm91bmQtY29sb3I6I2NiMjUzMH06aG9zdCAubm9FcnJvcnN7YmFja2dyb3VuZC1jb2xvcjojMTk4MDM4fTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAubWF0LW1kYy10YWItZ3JvdXAsOmhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC5tYXQtbWRjLXRhYi1ib2R5Lm1hdC1tZGMtdGFiLWJvZHktYWN0aXZle3Bvc2l0aW9uOmFic29sdXRlfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItZm9ybS1yb3cgLmZpeGVkLXRpdGxlLXdpZHRoe21pbi13aWR0aDoxMjBweDt3aWR0aDozMCU7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfTpob3N0IDo6bmctZGVlcCAuY29ubmVjdG9yLWNvbnRhaW5lciAudGItYWRkLW5ld3tkaXNwbGF5OmZsZXg7ei1pbmRleDo5OTk7cG9pbnRlci1ldmVudHM6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9Omhvc3QgOjpuZy1kZWVwIC5jb25uZWN0b3ItY29udGFpbmVyIC50Yi1hZGQtbmV3IGJ1dHRvbi5jb25uZWN0b3J7aGVpZ2h0OmF1dG87cGFkZGluZy1yaWdodDoxMnB4O2ZvbnQtc2l6ZToyMHB4O2JvcmRlci1zdHlsZTpkYXNoZWQ7Ym9yZGVyLXdpZHRoOjJweDtib3JkZXItcmFkaXVzOjhweDtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6IzAwMDAwMDYxfVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6b3QuU3RvcmV9LHt0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpZLlRyYW5zbGF0ZVNlcnZpY2V9LHt0eXBlOlguQXR0cmlidXRlU2VydmljZX0se3R5cGU6WC5EaWFsb2dTZXJ2aWNlfSx7dHlwZTpKZS5NYXREaWFsb2d9LHt0eXBlOlguVGVsZW1ldHJ5V2Vic29ja2V0U2VydmljZX0se3R5cGU6dC5OZ1pvbmV9LHt0eXBlOlguVXRpbHNTZXJ2aWNlfSx7dHlwZTp2YX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntjdHg6W3t0eXBlOmF9XSxkZXZpY2U6W3t0eXBlOmF9XSxuYW1lSW5wdXQ6W3t0eXBlOm8sYXJnczpbIm5hbWVJbnB1dCJdfV0sc29ydDpbe3R5cGU6byxhcmdzOltnLHtzdGF0aWM6ITF9XX1dfX0pO2NsYXNzIHFve2NvbnN0cnVjdG9yKGUpe3RoaXMuZGV2aWNlU2VydmljZT1lfWRvd25sb2FkKGUpe2UmJmUuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5kZXZpY2VJZCYmdGhpcy5kZXZpY2VTZXJ2aWNlLmRvd25sb2FkR2F0ZXdheURvY2tlckNvbXBvc2VGaWxlKHRoaXMuZGV2aWNlSWQpLnN1YnNjcmliZSgoKCk9Pnt9KSl9c3RhdGlje3RoaXMuybVmYWM9dC7Jtcm1bmdEZWNsYXJlRmFjdG9yeSh7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpxbyxkZXBzOlt7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpxbyxzZWxlY3RvcjoidGItZ2F0ZXdheS1jb21tYW5kIixpbnB1dHM6e2RldmljZUlkOiJkZXZpY2VJZCJ9LG5nSW1wb3J0OnQsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJjb21wb25lbnQiLHR5cGU6d3QuVGJNYXJrZG93bkNvbXBvbmVudCxzZWxlY3RvcjoidGItbWFya2Rvd24iLGlucHV0czpbImRhdGEiLCJjb250ZXh0IiwiYWRkaXRpb25hbENvbXBpbGVNb2R1bGVzIiwibWFya2Rvd25DbGFzcyIsImNvbnRhaW5lckNsYXNzIiwic3R5bGUiLCJhcHBseURlZmF1bHRNYXJrZG93blN0eWxlIiwiYWRkaXRpb25hbFN0eWxlcyIsImxpbmVOdW1iZXJzIiwiZmFsbGJhY2tUb1BsYWluTWFya2Rvd24iLCJ1c2VQbGFpbk1hcmtkb3duIl0sb3V0cHV0czpbInJlYWR5Il19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QW5jaG9yLHNlbGVjdG9yOiJhW21hdC1idXR0b25dLCBhW21hdC1yYWlzZWQtYnV0dG9uXSwgYVttYXQtZmxhdC1idXR0b25dLCBhW21hdC1zdHJva2VkLWJ1dHRvbl0iLGV4cG9ydEFzOlsibWF0QnV0dG9uIiwibWF0QW5jaG9yIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6YmUuTWF0QnV0dG9uLHNlbGVjdG9yOiIgICAgYnV0dG9uW21hdC1idXR0b25dLCBidXR0b25bbWF0LXJhaXNlZC1idXR0b25dLCBidXR0b25bbWF0LWZsYXQtYnV0dG9uXSwgICAgYnV0dG9uW21hdC1zdHJva2VkLWJ1dHRvbl0gICIsZXhwb3J0QXM6WyJtYXRCdXR0b24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpLZS5NYXRJY29uLHNlbGVjdG9yOiJtYXQtaWNvbiIsaW5wdXRzOlsiY29sb3IiLCJpbmxpbmUiLCJzdmdJY29uIiwiZm9udFNldCIsImZvbnRJY29uIl0sZXhwb3J0QXM6WyJtYXRJY29uIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6SmUuTWF0RGlhbG9nQ29udGVudCxzZWxlY3RvcjoiW21hdC1kaWFsb2ctY29udGVudF0sIG1hdC1kaWFsb2ctY29udGVudCwgW21hdERpYWxvZ0NvbnRlbnRdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpZLlRyYW5zbGF0ZURpcmVjdGl2ZSxzZWxlY3RvcjoiW3RyYW5zbGF0ZV0sW25neC10cmFuc2xhdGVdIixpbnB1dHM6WyJ0cmFuc2xhdGUiLCJ0cmFuc2xhdGVQYXJhbXMiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9XX0pfX1lKCJEZXZpY2VHYXRld2F5Q29tbWFuZENvbXBvbmVudCIscW8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6cW8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktY29tbWFuZCIsdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudCBzdHlsZT0icGFkZGluZzogMTZweCAxNnB4IDhweCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tYm9yZGVyIj5cbiAgPGRpdiBjbGFzcz0idGItbm8tZGF0YS10ZXh0Ij57eyBcJ2dhdGV3YXkuZG9ja2VyLWxhYmVsXCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBzdHJva2VkIj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+ZGV2aWNlLmNvbm5lY3Rpdml0eS5pbnN0YWxsLW5lY2Vzc2FyeS1jbGllbnQtdG9vbHM8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyBzcGFjZS1iZXR3ZWVuIj5cbiAgICAgIDxkaXYgY2xhc3M9InRiLW5vLWRhdGEtdGV4dCB0Yi1jb21tYW5kcy1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5pbnN0YWxsLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgICA8YSBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9InByaW1hcnkiIGhyZWY9Imh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2NvbXBvc2UvaW5zdGFsbC8iIHRhcmdldD0iX2JsYW5rIj5cbiAgICAgICAgPG1hdC1pY29uPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdjb21tb24uZG9jdW1lbnRhdGlvblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2E+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlPC9kaXY+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgc3BhY2UtYmV0d2VlbiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkuZG93bmxvYWQtZG9ja2VyLWNvbXBvc2U8L2Rpdj5cbiAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IiAoY2xpY2spPSJkb3dubG9hZCgkZXZlbnQpIj5cbiAgICAgICAgPG1hdC1pY29uPmRvd25sb2FkPC9tYXQtaWNvbj5cbiAgICAgICAge3sgXCdhY3Rpb24uZG93bmxvYWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCI+XG4gICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWdhdGV3YXk8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPSJ0Yi1uby1kYXRhLXRleHQgdGItY29tbWFuZHMtaGludCIgdHJhbnNsYXRlPmdhdGV3YXkubGF1bmNoLWRvY2tlci1jb21wb3NlPC9kaXY+XG4gICAgPHRiLW1hcmtkb3duIHVzZVBsYWluTWFya2Rvd24gY29udGFpbmVyQ2xhc3M9InN0YXJ0LWNvZGUiXG4gICAgICAgICAgICAgICAgIGRhdGE9IlxuICAgICAgICAgIGBgYGJhc2hcbiAgICAgICAgICBkb2NrZXIgY29tcG9zZSB1cFxuICAgICAgICAgIHs6Y29weS1jb2RlfVxuICAgICAgICAgIGBgYFxuICAgICAgIj48L3RiLW1hcmtkb3duPlxuICA8L2Rpdj5cbjwvZGl2PlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC50Yi1jb21tYW5kcy1oaW50e2NvbG9yOmluaGVyaXQ7Zm9udC13ZWlnaHQ6NDAwO2ZsZXg6MX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgLmNvZGUtd3JhcHBlcntwYWRkaW5nOjB9Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1de21hcmdpbjowO2JhY2tncm91bmQ6I2YzZjZmYTtib3JkZXItY29sb3I6IzMwNTY4MDtwYWRkaW5nLXJpZ2h0OjM4cHg7b3ZlcmZsb3c6c2Nyb2xsO3BhZGRpbmctYm90dG9tOjRweDttaW4taGVpZ2h0OjQycHg7c2Nyb2xsYmFyLXdpZHRoOnRoaW59Omhvc3QgOjpuZy1kZWVwIC50Yi1tYXJrZG93bi12aWV3IC5zdGFydC1jb2RlIC5jb2RlLXdyYXBwZXIgcHJlW2NsYXNzKj1sYW5ndWFnZS1dOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo0cHg7aGVpZ2h0OjRweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG57cmlnaHQ6LTJweH06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gcHtjb2xvcjojMzA1NjgwfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBwLDpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXZ7YmFja2dyb3VuZC1jb2xvcjojZjNmNmZhfTpob3N0IDo6bmctZGVlcCAudGItbWFya2Rvd24tdmlldyAuc3RhcnQtY29kZSBidXR0b24uY2xpcGJvYXJkLWJ0biBkaXYgaW1ne2Rpc3BsYXk6bm9uZX06aG9zdCA6Om5nLWRlZXAgLnRiLW1hcmtkb3duLXZpZXcgLnN0YXJ0LWNvZGUgYnV0dG9uLmNsaXBib2FyZC1idG4gZGl2OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHg7YmFja2dyb3VuZDojMzA1NjgwO21hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTstd2Via2l0LW1hc2staW1hZ2U6dXJsKC9hc3NldHMvY29weS1jb2RlLWljb24uc3ZnKTttYXNrLXJlcGVhdDpuby1yZXBlYXQ7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXR9XG4nXX1dfV0sY3RvclBhcmFtZXRlcnM6KCk9Plt7dHlwZTpYLkRldmljZVNlcnZpY2V9XSxwcm9wRGVjb3JhdG9yczp7ZGV2aWNlSWQ6W3t0eXBlOmF9XX19KTtjbGFzcyBEb3tjb25zdHJ1Y3RvcihlLHQsbixhKXt0aGlzLmZiPWUsdGhpcy5kZXZpY2VTZXJ2aWNlPXQsdGhpcy5jZD1uLHRoaXMuZGlhbG9nPWEsdGhpcy5kaWFsb2dNb2RlPSExLHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZD1uZXcgaSx0aGlzLlN0b3JhZ2VUeXBlcz1BdCx0aGlzLnN0b3JhZ2VUeXBlcz1PYmplY3QudmFsdWVzKEF0KSx0aGlzLnN0b3JhZ2VUeXBlc1RyYW5zbGF0aW9uTWFwPVJ0LHRoaXMubG9nU2F2aW5nUGVyaW9kcz1PdCx0aGlzLmxvY2FsTG9nc0NvbmZpZ3M9T2JqZWN0LmtleXMoUHQpLHRoaXMubG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwPUd0LHRoaXMuc2VjdXJpdHlUeXBlcz1CdCx0aGlzLmdhdGV3YXlMb2dMZXZlbD1PYmplY3QudmFsdWVzKE10KSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmluaXRCYXNpY0Zvcm1Hcm91cCgpLHRoaXMub2JzZXJ2ZUZvcm1DaGFuZ2VzKCksdGhpcy5iYXNpY0Zvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy5vbkNoYW5nZShlKSx0aGlzLm9uVG91Y2hlZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfXJlZ2lzdGVyT25DaGFuZ2UoZSl7dGhpcy5vbkNoYW5nZT1lfXJlZ2lzdGVyT25Ub3VjaGVkKGUpe3RoaXMub25Ub3VjaGVkPWV9d3JpdGVWYWx1ZShlKXt0aGlzLmJhc2ljRm9ybUdyb3VwLnBhdGNoVmFsdWUoZSx7ZW1pdEV2ZW50OiExfSksdGhpcy5jaGVja0FuZEZldGNoQ3JlZGVudGlhbHMoZT8udGhpbmdzYm9hcmQ/LnNlY3VyaXR5Pz97fSksZT8uZ3JwYyYmdGhpcy50b2dnbGVScGNGaWVsZHMoZS5ncnBjLmVuYWJsZWQpOyhlPy50aGluZ3Nib2FyZD8uc3RhdGlzdGljcz8uY29tbWFuZHM/P1tdKS5mb3JFYWNoKChlPT50aGlzLmFkZENvbW1hbmQoZSwhMSkpKX12YWxpZGF0ZSgpe3JldHVybiB0aGlzLmJhc2ljRm9ybUdyb3VwLnZhbGlkP251bGw6e2Jhc2ljRm9ybUdyb3VwOnt2YWxpZDohMX19fWF0TGVhc3RPbmVSZXF1aXJlZChlLHQ9bnVsbCl7cmV0dXJuIG49Pnt0fHwodD1PYmplY3Qua2V5cyhuLmNvbnRyb2xzKSk7cmV0dXJuIG4/LmNvbnRyb2xzJiZ0LnNvbWUoKHQ9PiFlKG4uY29udHJvbHNbdF0pKSk/bnVsbDp7YXRMZWFzdE9uZTohMH19fXRvZ2dsZVJwY0ZpZWxkcyhlKXtjb25zdCB0PXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjIik7ZT8odC5nZXQoInNlcnZlclBvcnQiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lb3V0TXMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiKS5lbmFibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluVGltZUJldHdlZW5QaW5nc01zIikuZW5hYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgibWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNcyIpLmVuYWJsZSh7ZW1pdEV2ZW50OiExfSkpOih0LmdldCgic2VydmVyUG9ydCIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJrZWVwQWxpdmVUaW1lTXMiKS5kaXNhYmxlKHtlbWl0RXZlbnQ6ITF9KSx0LmdldCgia2VlcEFsaXZlVGltZW91dE1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtYXhQaW5nc1dpdGhvdXREYXRhIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSksdC5nZXQoIm1pblRpbWVCZXR3ZWVuUGluZ3NNcyIpLmRpc2FibGUoe2VtaXRFdmVudDohMX0pLHQuZ2V0KCJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIikuZGlzYWJsZSh7ZW1pdEV2ZW50OiExfSkpfWFkZExvY2FsTG9nQ29uZmlnKGUsdCl7Y29uc3Qgbj10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgibG9ncy5sb2NhbCIpLGE9dGhpcy5mYi5ncm91cCh7bG9nTGV2ZWw6W3QubG9nTGV2ZWx8fE10LklORk8sW3VlLnJlcXVpcmVkXV0sZmlsZVBhdGg6W3QuZmlsZVBhdGh8fCIuL2xvZ3MiLFt1ZS5yZXF1aXJlZF1dLGJhY2t1cENvdW50Olt0LmJhY2t1cENvdW50fHw3LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMCldXSxzYXZpbmdUaW1lOlt0LnNhdmluZ1RpbWV8fDMsW3VlLnJlcXVpcmVkLHVlLm1pbigwKV1dLHNhdmluZ1BlcmlvZDpbdC5zYXZpbmdQZXJpb2R8fER0LmRheXMsW3VlLnJlcXVpcmVkXV19KTtuLmFkZENvbnRyb2woZSxhKX1nZXRMb2dGb3JtR3JvdXAoZSl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KGBsb2dzLmxvY2FsLiR7ZX1gKX1jb21tYW5kRm9ybUFycmF5KCl7cmV0dXJuIHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzIil9cmVtb3ZlQ29tbWFuZENvbnRyb2woZSx0KXsiIiE9PXQucG9pbnRlclR5cGUmJih0aGlzLmNvbW1hbmRGb3JtQXJyYXkoKS5yZW1vdmVBdChlKSx0aGlzLmJhc2ljRm9ybUdyb3VwLm1hcmtBc0RpcnR5KCkpfXJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5Iik7ZS5jbGVhclZhbGlkYXRvcnMoKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1yZW1vdmVBbGxTdG9yYWdlVmFsaWRhdG9ycygpe2NvbnN0IGU9dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInN0b3JhZ2UiKTtmb3IoY29uc3QgdCBpbiBlLmNvbnRyb2xzKSJ0eXBlIiE9PXQmJihlLmNvbnRyb2xzW3RdLmNsZWFyVmFsaWRhdG9ycygpLGUuY29udHJvbHNbdF0uc2V0RXJyb3JzKG51bGwpLGUuY29udHJvbHNbdF0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKXt0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGV2aWNlKHRoaXMuZGV2aWNlLmlkKS5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLmRpYWxvZy5vcGVuKFBhLHtkaXNhYmxlQ2xvc2U6ITAscGFuZWxDbGFzczpbInRiLWRpYWxvZyIsInRiLWZ1bGxzY3JlZW4tZGlhbG9nIl0sZGF0YTp7Z2F0ZXdheU5hbWU6ZS5uYW1lfX0pLmFmdGVyQ2xvc2VkKCkucGlwZShPZSgxKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS5zZXRWYWx1ZSghMCx7ZW1pdEV2ZW50OiExfSl9KSl9KSl9YWRkQ29tbWFuZChlLHQ9ITApe2NvbnN0e2F0dHJpYnV0ZU9uR2F0ZXdheTpuPW51bGwsY29tbWFuZDphPW51bGwsdGltZW91dDpvPW51bGx9PWV8fHt9LGk9dGhpcy5mYi5ncm91cCh7YXR0cmlidXRlT25HYXRld2F5OltuLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dLGNvbW1hbmQ6W2EsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14oPz1cUykuKlxTJC8pXV0sdGltZW91dDpbbyxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKSx1ZS5wYXR0ZXJuKC9eW14uXHNdKyQvKV1dfSk7dGhpcy5jb21tYW5kRm9ybUFycmF5KCkucHVzaChpLHtlbWl0RXZlbnQ6dH0pfWluaXRCYXNpY0Zvcm1Hcm91cCgpe3RoaXMuYmFzaWNGb3JtR3JvdXA9dGhpcy5mYi5ncm91cCh7dGhpbmdzYm9hcmQ6dGhpcy5pbml0VGhpbmdzYm9hcmRGb3JtR3JvdXAoKSxzdG9yYWdlOnRoaXMuaW5pdFN0b3JhZ2VGb3JtR3JvdXAoKSxncnBjOnRoaXMuaW5pdEdycGNGb3JtR3JvdXAoKSxjb25uZWN0b3JzOnRoaXMuZmIuYXJyYXkoW10pLGxvZ3M6dGhpcy5pbml0TG9nc0Zvcm1Hcm91cCgpfSl9aW5pdFRoaW5nc2JvYXJkRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2hvc3Q6W3dpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteXHNdKyQvKV1dLHBvcnQ6WzE4ODMsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5tYXgoNjU1MzUpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLHJlbW90ZVNoZWxsOlshMV0scmVtb3RlQ29uZmlndXJhdGlvbjpbITBdLGNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHM6WzYwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sc3RhdGlzdGljczp0aGlzLmZiLmdyb3VwKHtlbmFibGU6WyEwXSxzdGF0c1NlbmRQZXJpb2RJblNlY29uZHM6WzM2MDAsW3VlLnJlcXVpcmVkLHVlLm1pbig2MCksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sY29tbWFuZHM6dGhpcy5mYi5hcnJheShbXSl9KSxtYXhQYXlsb2FkU2l6ZUJ5dGVzOls4MTk2LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTAwKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtaW5QYWNrU2VuZERlbGF5TVM6WzUwLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMTApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblBhY2tTaXplVG9TZW5kOls1MDAsW3VlLnJlcXVpcmVkLHVlLm1pbigxMDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGhhbmRsZURldmljZVJlbmFtaW5nOlshMF0sY2hlY2tpbmdEZXZpY2VBY3Rpdml0eTp0aGlzLmluaXRDaGVja2luZ0RldmljZUFjdGl2aXR5Rm9ybUdyb3VwKCksc2VjdXJpdHk6dGhpcy5pbml0U2VjdXJpdHlGb3JtR3JvdXAoKSxxb3M6WzEsW3VlLnJlcXVpcmVkLHVlLm1pbigwKSx1ZS5tYXgoMSksdWUucGF0dGVybigvXlteLlxzXSskLyldXX0pfWluaXRTdG9yYWdlRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe3R5cGU6W0F0Lk1FTU9SWSxbdWUucmVxdWlyZWRdXSxyZWFkX3JlY29yZHNfY291bnQ6WzEwMCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1heF9yZWNvcmRzX2NvdW50OlsxZTUsW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxkYXRhX2ZvbGRlcl9wYXRoOlsiLi9kYXRhLyIsW3VlLnJlcXVpcmVkXV0sbWF4X2ZpbGVfY291bnQ6WzEwLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWF4X3JlYWRfcmVjb3Jkc19jb3VudDpbMTAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxtYXhfcmVjb3Jkc19wZXJfZmlsZTpbMWU0LFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sZGF0YV9maWxlX3BhdGg6WyIuL2RhdGEvZGF0YS5kYiIsW3VlLnJlcXVpcmVkXV0sbWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzOlsxLFt1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWVzc2FnZXNfdHRsX2luX2RheXM6WzcsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRHcnBjRm9ybUdyb3VwKCl7cmV0dXJuIHRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxzZXJ2ZXJQb3J0Ols5NTk1LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUubWF4KDY1NTM1KSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxrZWVwQWxpdmVUaW1lTXM6WzFlNCxbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLGtlZXBBbGl2ZVRpbWVvdXRNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sa2VlcGFsaXZlUGVybWl0V2l0aG91dENhbGxzOlshMF0sbWF4UGluZ3NXaXRob3V0RGF0YTpbMCxbdWUucmVxdWlyZWQsdWUubWluKDApLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV1dLG1pblRpbWVCZXR3ZWVuUGluZ3NNczpbMWU0LFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV0sbWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNczpbNWUzLFt1ZS5yZXF1aXJlZCx1ZS5taW4oMSksdWUucGF0dGVybigvXi0/WzAtOV0rJC8pXV19KX1pbml0TG9nc0Zvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHtkYXRlRm9ybWF0OlsiJVktJW0tJWQgJUg6JU06JVMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sbG9nRm9ybWF0OlsiJShhc2N0aW1lKXMgLSB8JShsZXZlbG5hbWUpc3wgLSBbJShmaWxlbmFtZSlzXSAtICUobW9kdWxlKXMgLSAlKGZ1bmNOYW1lKXMgLSAlKGxpbmVubylkIC0gJShtZXNzYWdlKXMiLFt1ZS5yZXF1aXJlZCx1ZS5wYXR0ZXJuKC9eW15cc10uKlteXHNdJC8pXV0sdHlwZTpbInJlbW90ZSIsW3VlLnJlcXVpcmVkXV0scmVtb3RlOnRoaXMuZmIuZ3JvdXAoe2VuYWJsZWQ6WyExXSxsb2dMZXZlbDpbTXQuSU5GTyxbdWUucmVxdWlyZWRdXX0pLGxvY2FsOnRoaXMuZmIuZ3JvdXAoe30pfSl9aW5pdENoZWNraW5nRGV2aWNlQWN0aXZpdHlGb3JtR3JvdXAoKXtyZXR1cm4gdGhpcy5mYi5ncm91cCh7Y2hlY2tEZXZpY2VJbmFjdGl2aXR5OlshMV0saW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzOlsyMDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXSxpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzOls1MDAsW3VlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldXX0pfWluaXRTZWN1cml0eUZvcm1Hcm91cCgpe3JldHVybiB0aGlzLmZiLmdyb3VwKHt0eXBlOltWdC5BQ0NFU1NfVE9LRU4sW3VlLnJlcXVpcmVkXV0sYWNjZXNzVG9rZW46W251bGwsW3VlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2xpZW50SWQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sdXNlcm5hbWU6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0scGFzc3dvcmQ6W251bGwsW3VlLnBhdHRlcm4oL15bXi5cc10rJC8pXV0sY2FDZXJ0OltudWxsXSxjZXJ0OltudWxsXSxwcml2YXRlS2V5OltudWxsXX0pfW9ic2VydmVGb3JtQ2hhbmdlcygpe3RoaXMub2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCksdGhpcy5vYnNlcnZlUmVtb3RlQ29uZmlndXJhdGlvbkNoYW5nZXMoKSx0aGlzLm9ic2VydmVEZXZpY2VBY3Rpdml0eUNoYW5nZXMoKSx0aGlzLm9ic2VydmVTZWN1cml0eVR5cGVDaGFuZ2VzKCksdGhpcy5vYnNlcnZlU3RvcmFnZVR5cGVDaGFuZ2VzKCl9b2JzZXJ2ZVNlY3VyaXR5UGFzc3dvcmRDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWUiKTt0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dCYmIiIhPT10P2Uuc2V0VmFsaWRhdG9ycyhbdWUucmVxdWlyZWRdKTplLmNsZWFyVmFsaWRhdG9ycygpLGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9KSl9b2JzZXJ2ZVJlbW90ZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb24iKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57ZXx8dGhpcy5vcGVuQ29uZmlndXJhdGlvbkNvbmZpcm1EaWFsb2coKX0pKSx0aGlzLmxvZ1NlbGVjdG9yPXRoaXMuZmIuY29udHJvbChQdC5zZXJ2aWNlKTtmb3IoY29uc3QgZSBvZiBPYmplY3Qua2V5cyhQdCkpdGhpcy5hZGRMb2NhbExvZ0NvbmZpZyhlLHt9KX1vYnNlcnZlRGV2aWNlQWN0aXZpdHlDaGFuZ2VzKCl7Y29uc3QgZT10aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSIpO2UuZ2V0KCJjaGVja0RldmljZUluYWN0aXZpdHkiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57ZS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7Y29uc3Qgbj1bdWUubWluKDEpLHVlLnJlcXVpcmVkLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV07dD8oZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLnNldFZhbGlkYXRvcnMobiksZS5nZXQoImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiKS5zZXRWYWxpZGF0b3JzKG4pKTooZS5nZXQoImluYWN0aXZpdHlUaW1lb3V0U2Vjb25kcyIpLmNsZWFyVmFsaWRhdG9ycygpLGUuZ2V0KCJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIikuY2xlYXJWYWxpZGF0b3JzKCkpLGUuZ2V0KCJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSxlLmdldCgiaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kcyIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJncnBjLmVuYWJsZWQiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57dGhpcy50b2dnbGVScGNGaWVsZHMoZSl9KSl9b2JzZXJ2ZVNlY3VyaXR5VHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eSIpO2UuZ2V0KCJ0eXBlIikudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgodD0+e3N3aXRjaCh0aGlzLnJlbW92ZUFsbFNlY3VyaXR5VmFsaWRhdG9ycygpLHQpe2Nhc2UgVnQuQUNDRVNTX1RPS0VOOnRoaXMuYWRkQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVExTX1BSSVZBVEVfS0VZOnRoaXMuYWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSk7YnJlYWs7Y2FzZSBWdC5UTFNfQUNDRVNTX1RPS0VOOnRoaXMuYWRkVGxzQWNjZXNzVG9rZW5WYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgVnQuVVNFUk5BTUVfUEFTU1dPUkQ6ZS5hZGRWYWxpZGF0b3JzKFt0aGlzLmF0TGVhc3RPbmVSZXF1aXJlZCh1ZS5yZXF1aXJlZCxbImNsaWVudElkIiwidXNlcm5hbWUiXSldKX1lLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKSxbImNhQ2VydCIsInByaXZhdGVLZXkiLCJjZXJ0Il0uZm9yRWFjaCgodD0+e2UuZ2V0KHQpLnZhbHVlQ2hhbmdlcy5waXBlKE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT50aGlzLmNkLmRldGVjdENoYW5nZXMoKSkpfSkpfW9ic2VydmVTdG9yYWdlVHlwZUNoYW5nZXMoKXtjb25zdCBlPXRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJzdG9yYWdlIik7ZS5nZXQoInR5cGUiKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57c3dpdGNoKHRoaXMucmVtb3ZlQWxsU3RvcmFnZVZhbGlkYXRvcnMoKSx0KXtjYXNlIEF0Lk1FTU9SWTp0aGlzLmFkZE1lbW9yeVN0b3JhZ2VWYWxpZGF0b3JzKGUpO2JyZWFrO2Nhc2UgQXQuRklMRTp0aGlzLmFkZEZpbGVTdG9yYWdlVmFsaWRhdG9ycyhlKTticmVhaztjYXNlIEF0LlNRTElURTp0aGlzLmFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpfX0pKX1hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7ZS5nZXQoImFjY2Vzc1Rva2VuIikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUucGF0dGVybigvXlteLlxzXSskLyldKSxlLmdldCgiYWNjZXNzVG9rZW4iKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCl9YWRkVGxzUHJpdmF0ZUtleVZhbGlkYXRvcnMoZSl7WyJjYUNlcnQiLCJwcml2YXRlS2V5IiwiY2VydCJdLmZvckVhY2goKHQ9PntlLmdldCh0KS5hZGRWYWxpZGF0b3JzKFt1ZS5yZXF1aXJlZF0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX0pKX1hZGRUbHNBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSl7dGhpcy5hZGRBY2Nlc3NUb2tlblZhbGlkYXRvcnMoZSksZS5nZXQoImNhQ2VydCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkXSksZS5nZXQoImNhQ2VydCIpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKX1hZGRNZW1vcnlTdG9yYWdlVmFsaWRhdG9ycyhlKXtlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KCJtYXhfcmVjb3Jkc19jb3VudCIpLmFkZFZhbGlkYXRvcnMoW3VlLnJlcXVpcmVkLHVlLm1pbigxKSx1ZS5wYXR0ZXJuKC9eLT9bMC05XSskLyldKSxlLmdldCgicmVhZF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksZS5nZXQoIm1heF9yZWNvcmRzX2NvdW50IikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9YWRkRmlsZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWF4X2ZpbGVfY291bnQiLCJtYXhfcmVhZF9yZWNvcmRzX2NvdW50IiwibWF4X3JlY29yZHNfcGVyX2ZpbGUiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWFkZFNxbGl0ZVN0b3JhZ2VWYWxpZGF0b3JzKGUpe1sibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIiwibWVzc2FnZXNfdHRsX2luX2RheXMiXS5mb3JFYWNoKCh0PT57ZS5nZXQodCkuYWRkVmFsaWRhdG9ycyhbdWUucmVxdWlyZWQsdWUubWluKDEpLHVlLnBhdHRlcm4oL14tP1swLTldKyQvKV0pLGUuZ2V0KHQpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSkpfWNoZWNrQW5kRmV0Y2hDcmVkZW50aWFscyhlKXtlLnR5cGUhPT1WdC5UTFNfUFJJVkFURV9LRVkmJnRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VDcmVkZW50aWFscyh0aGlzLmRldmljZS5pZCkucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCh0PT57dGhpcy5pbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkLmVtaXQodCksdGhpcy51cGRhdGVTZWN1cml0eVR5cGUoZSx0KSx0aGlzLnVwZGF0ZUNyZWRlbnRpYWxzKHQsZSl9KSl9dXBkYXRlU2VjdXJpdHlUeXBlKGUsdCl7Y29uc3Qgbj10LmNyZWRlbnRpYWxzVHlwZT09PVUuQUNDRVNTX1RPS0VOfHxlLnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOP2UudHlwZT09PVZ0LlRMU19BQ0NFU1NfVE9LRU4/VnQuVExTX0FDQ0VTU19UT0tFTjpWdC5BQ0NFU1NfVE9LRU46dC5jcmVkZW50aWFsc1R5cGU9PT1VLk1RVFRfQkFTSUM/VnQuVVNFUk5BTUVfUEFTU1dPUkQ6bnVsbDtuJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZSIpLnNldFZhbHVlKG4se2VtaXRFdmVudDohMX0pfXVwZGF0ZUNyZWRlbnRpYWxzKGUsdCl7c3dpdGNoKGUuY3JlZGVudGlhbHNUeXBlKXtjYXNlIFUuQUNDRVNTX1RPS0VOOnRoaXMudXBkYXRlQWNjZXNzVG9rZW5DcmVkZW50aWFscyhlLHQpO2JyZWFrO2Nhc2UgVS5NUVRUX0JBU0lDOnRoaXMudXBkYXRlTXF0dEJhc2ljQ3JlZGVudGlhbHMoZSk7Y2FzZSBVLlg1MDlfQ0VSVElGSUNBVEU6fX11cGRhdGVBY2Nlc3NUb2tlbkNyZWRlbnRpYWxzKGUsdCl7dGhpcy5iYXNpY0Zvcm1Hcm91cC5nZXQoInRoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuIikuc2V0VmFsdWUoZS5jcmVkZW50aWFsc0lkLHtlbWl0RXZlbnQ6ITF9KSx0LnR5cGU9PT1WdC5UTFNfQUNDRVNTX1RPS0VOJiZ0aGlzLmJhc2ljRm9ybUdyb3VwLmdldCgidGhpbmdzYm9hcmQuc2VjdXJpdHkuY2FDZXJ0Iikuc2V0VmFsdWUodC5jYUNlcnQse2VtaXRFdmVudDohMX0pfXVwZGF0ZU1xdHRCYXNpY0NyZWRlbnRpYWxzKGUpe2NvbnN0IHQ9SlNPTi5wYXJzZShlLmNyZWRlbnRpYWxzVmFsdWUpO3RoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZCIpLnNldFZhbHVlKHQuY2xpZW50SWQse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZSIpLnNldFZhbHVlKHQudXNlck5hbWUse2VtaXRFdmVudDohMX0pLHRoaXMuYmFzaWNGb3JtR3JvdXAuZ2V0KCJ0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZCIpLnNldFZhbHVlKHQucGFzc3dvcmQse2VtaXRFdmVudDohMX0pfXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn0se3Rva2VuOkplLk1hdERpYWxvZ31dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6RG8saXNTdGFuZGFsb25lOiEwLHNlbGVjdG9yOiJ0Yi1nYXRld2F5LWJhc2ljLWNvbmZpZ3VyYXRpb24iLGlucHV0czp7ZGV2aWNlOiJkZXZpY2UiLGRpYWxvZ01vZGU6ImRpYWxvZ01vZGUifSxvdXRwdXRzOntpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkOiJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIn0scHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+RG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuPG1hdC10YWItZ3JvdXAgY2xhc3M9InRhYi1ncm91cC1ibG9jayIgW2Zvcm1Hcm91cF09ImJhc2ljRm9ybUdyb3VwIiBbY2xhc3MuZGlhbG9nLW1vZGVdPSJkaWFsb2dNb2RlIj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5nZW5lcmFsXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJyZW1vdGVDb25maWd1cmF0aW9uIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1jb25maWd1cmF0aW9uXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZVNoZWxsIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnJlbW90ZS1zaGVsbFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtaG9zdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJob3N0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaG9zdFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmhvc3RcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtbWF4XCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPnNlY3VyaXR5LnNlY3VyaXR5PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzZWN1cml0eSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBmb3JtQ29udHJvbE5hbWU9InR5cGUiPlxuICAgICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzZWN1cml0eVR5cGUgb2Ygc2VjdXJpdHlUeXBlcyB8IGtleXZhbHVlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPSJzZWN1cml0eVR5cGUua2V5Ij57eyBzZWN1cml0eVR5cGUudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ2FjY2Vzc3Rva2VuXCcpIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuYWNjZXNzLXRva2VuPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImFjY2Vzc1Rva2VuIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkuYWNjZXNzLXRva2VuLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5hY2Nlc3NUb2tlblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdkZXZpY2UuY29weS1hY2Nlc3MtdG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudG9rZW5cJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+c2VjdXJpdHkuY2xpZW50SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNsaWVudElkIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5jbGllbnRJZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgW2NvcHlUZXh0XT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuY2xpZW50SWRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jbGllbnQtaWRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS51c2VybmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idXNlcm5hbWUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LnVzZXJuYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS51c2VybmFtZVwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXVzZXJuYW1lXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIHN1YnNjcmlwdFNpemluZz0iZHluYW1pYyIgc3R5bGU9IndpZHRoOiAxMDAlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnBhc3N3b3JkPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icGFzc3dvcmQiLz5cbiAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkucGFzc3dvcmRcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2dhdGV3YXkuY29weS1wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgIGljb249ImNvbnRlbnRfY29weSI+XG4gICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMucGFzc3dvcmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8dGItZXJyb3Igc3R5bGU9Im1hcmdpbi10b3A6IC0xMnB4OyBkaXNwbGF5OiBibG9jazsiIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS50eXBlXCcpLnZhbHVlID09PSBcJ3VzZXJuYW1lUGFzc3dvcmRcJyJcbiAgICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eVwnKS5oYXNFcnJvcihcJ2F0TGVhc3RPbmVcJykgP1xuICAgICAgICAgIChcJ2RldmljZS5jbGllbnQtaWQtb3ItdXNlci1uYW1lLW5lY2Vzc2FyeVwnIHwgdHJhbnNsYXRlKSA6IFwnXCciPjwvdGItZXJyb3I+XG4gICAgICAgICAgICA8dGItZmlsZS1pbnB1dFxuICAgICAgICAgICAgICBmeEZsZXg9IjEwMCJcbiAgICAgICAgICAgICAgaGludD0ie3sgXCdnYXRld2F5LmhpbnRzLmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcJ3Rsc1wnKSJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPSJjYUNlcnQiXG4gICAgICAgICAgICAgIGxhYmVsPSJ7eyBcJ3NlY3VyaXR5LmNhLWNlcnRcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgW2FsbG93ZWRFeHRlbnNpb25zXT0iXCdwZW0sIGNlcnQsIGtleVwnIlxuICAgICAgICAgICAgICBbYWNjZXB0XT0iXCcucGVtLCBhcHBsaWNhdGlvbi9wZW0sLmNlcnQsIGFwcGxpY2F0aW9uL2NlcnQsIC5rZXksYXBwbGljYXRpb24va2V5XCciXG4gICAgICAgICAgICAgIGRyb3BMYWJlbD0ie3sgXCdnYXRld2F5LmRyb3AtZmlsZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICAgICAgICAgIDwvdGItZmlsZS1pbnB1dD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkubG9ncy5sb2dzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJsb2dzIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9ImNvbHVtbiI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5kYXRlLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRlRm9ybWF0Ii8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MuZGF0ZUZvcm1hdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5kYXRlLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGUtZm9ybVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubG9nLWZvcm1hdDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJsb2dGb3JtYXQiIHJvd3M9IjIiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9nRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmxvZy1mb3JtYXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5sb2ctZm9ybWF0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJyZW1vdGUiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MucmVtb3RlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLnJlbW90ZS1sb2dcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MucmVtb3RlLWxvZ3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBsb2dMZXZlbCBvZiBnYXRld2F5TG9nTGV2ZWwiIFt2YWx1ZV09ImxvZ0xldmVsIj57eyBsb2dMZXZlbCB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ibG9jYWwiPlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIj5nYXRld2F5LmxvZ3MubG9jYWw8L2Rpdj5cbiAgICAgICAgICA8dGItdG9nZ2xlLXNlbGVjdCBjbGFzcz0idG9nZ2xlLWdyb3VwIiBbZm9ybUNvbnRyb2xdPSJsb2dTZWxlY3RvciI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBsb2dDb25maWcgb2YgbG9jYWxMb2dzQ29uZmlncyIgW3ZhbHVlXT0ibG9nQ29uZmlnIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImZpcnN0LWNhcGl0YWwiPnt7IGxvY2FsTG9nc0NvbmZpZ1RyYW5zbGF0ZU1hcC5nZXQobG9nQ29uZmlnKSB9fTwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT0iZ2V0TG9nRm9ybUdyb3VwKGxvZ1NlbGVjdG9yLnZhbHVlKSI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MubGV2ZWw8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9ImxvZ0xldmVsIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmxvZ3MuZmlsZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZmlsZVBhdGgiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5maWxlUGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmZpbGUtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgc2F2aW5nLXBlcmlvZCI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdUaW1lIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3Muc2F2aW5nLXBlcmlvZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLnNhdmluZ1RpbWVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBoaWRlUmVxdWlyZWRNYXJrZXIgc3R5bGU9Im1pbi13aWR0aDogMTEwcHg7IHdpZHRoOiAzMCUiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJzYXZpbmdQZXJpb2QiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9ImxldCBwZXJpb2Qgb2YgbG9nU2F2aW5nUGVyaW9kcyB8IGtleXZhbHVlIiBbdmFsdWVdPSJwZXJpb2Qua2V5Ij5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBwZXJpb2QudmFsdWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5iYWNrdXAtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJiYWNrdXBDb3VudCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuYmFja3VwQ291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5iYWNrdXAtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYmFja3VwLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0b3JhZ2VcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InN0b3JhZ2UiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDxkaXYgdHJhbnNsYXRlIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPmdhdGV3YXkuaGludHMuc3RvcmFnZTwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiAqbmdGb3I9ImxldCBzdG9yYWdlVHlwZSBvZiBzdG9yYWdlVHlwZXMiIFt2YWx1ZV09InN0b3JhZ2VUeXBlIj5cbiAgICAgICAgICAgICAge3sgc3RvcmFnZVR5cGVzVHJhbnNsYXRpb25NYXAuZ2V0KHN0b3JhZ2VUeXBlKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiPnt7IFwnZ2F0ZXdheS5oaW50cy5cJyArIGJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UudHlwZVwnKS52YWx1ZSB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxzZWN0aW9uICpuZ1N3aXRjaENhc2U9IlN0b3JhZ2VUeXBlcy5NRU1PUlkiIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InJlYWRfcmVjb3Jkc19jb3VudCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UucmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5yZWFkLXJlY29yZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0ibnVtYmVyIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLkZJTEUiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGFfZm9sZGVyX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9mb2xkZXJfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz0ibWF0LWZvcm0tZmllbGQtaW5maXggcG9pbnRlci1ldmVudCBzdWZmaXgtaWNvbiIgYXJpYS1oaWRkZW49ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9ImhlbHAtaWNvbiJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRTdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0YS1mb2xkZXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9maWxlX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9maWxlX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtZmlsZS1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgZm9ybUNvbnRyb2xOYW1lPSJtYXhfcmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVhZC1jb3VudFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWNvcmRzX3Blcl9maWxlIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX3Blcl9maWxlXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcmVjb3Jkc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLlNRTElURSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9maWxlX3BhdGgiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UuZGF0YV9maWxlX3BhdGhcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLXBhdGgtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3VycyIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfY2hlY2tfaW5faG91cnNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLWNoZWNrLWhvdXJcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1lc3NhZ2VzX3R0bF9pbl9kYXlzIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tZXNzYWdlc190dGxfaW5fZGF5c1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnR0bC1tZXNzYWdlcy1kYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdycGNcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImdycGMiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlZCI+XG4gICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwY1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucGVybWl0LXdpdGhvdXQtY2FsbHNcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJrZWVwYWxpdmVQZXJtaXRXaXRob3V0Q2FsbHMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucGVybWl0LXdpdGhvdXQtY2FsbHNcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnNlcnZlci1wb3J0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ic2VydmVyUG9ydCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuc2VydmVyLXBvcnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ21heFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMuc2VydmVyUG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnRoaW5nc2JvYXJkLXBvcnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVvdXRNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZW91dE1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLWtlZXAtYWxpdmU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJrZWVwQWxpdmVUaW1lTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMta2VlcC1hbGl2ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5nczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblRpbWVCZXR3ZWVuUGluZ3NNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluVGltZUJldHdlZW5QaW5nc01zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGluZ3NXaXRob3V0RGF0YSIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWF4UGluZ3NXaXRob3V0RGF0YVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9tYXQtdGFiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY29sb3I9InByaW1hcnkiIGNsYXNzPSJtYXQtc2xpZGUiIGZvcm1Db250cm9sTmFtZT0iZW5hYmxlIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnN0YXRpc3RpY3NcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzdGF0c1NlbmRQZXJpb2RJblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSI2MCIvPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc3RhdGlzdGljcy5zdGF0c1NlbmRQZXJpb2RJblNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zZW5kLXBlcmlvZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbC1oaW50IiB0cmFuc2xhdGU+Z2F0ZXdheS5oaW50cy5jb21tYW5kczwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT0ic3RhdGlzdGljcyI+XG4gICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PSJyb3ciIGZvcm1BcnJheU5hbWU9ImNvbW1hbmRzIiBjbGFzcz0ic3RhdGlzdGljcy1jb250YWluZXIiXG4gICAgICAgICAgICAgICAgICpuZ0Zvcj0ibGV0IGNvbW1hbmRDb250cm9sIG9mIGNvbW1hbmRGb3JtQXJyYXkoKS5jb250cm9sczsgbGV0ICRpbmRleCA9IGluZGV4Ij5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gW2Zvcm1Hcm91cE5hbWVdPSIkaW5kZXgiIGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIHN0cm9rZWQgbm8tcGFkZGluZy1ib3R0b20gbm8tZ2FwIGNvbW1hbmQtY29udGFpbmVyIj5cbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuYXR0cmlidXRlLW5hbWU8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYXR0cmlidXRlT25HYXRld2F5Ii8+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2F0dHJpYnV0ZU9uR2F0ZXdheVwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmF0dHJpYnV0ZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0idGltZW91dCIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ3RpbWVvdXRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy50aW1lb3V0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0ibWF0LWJsb2NrIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjb21tYW5kIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnY29tbWFuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jb21tYW5kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5jb21tYW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPSJyZW1vdmVDb21tYW5kQ29udHJvbCgkaW5kZXgsICRldmVudCkiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRiLWJveC1idXR0b24iXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LnN0YXRpc3RpY3MucmVtb3ZlXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPSJhYm92ZSI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj0icHJpbWFyeSJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9IndpZHRoOiBmaXQtY29udGVudDsiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9ImJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT0iIWJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnJlbW90ZUNvbmZpZ3VyYXRpb25cJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9ImFkZENvbW1hbmQoKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmFkZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkub3RoZXJcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiIGZvcm1Hcm91cE5hbWU9ImNoZWNraW5nRGV2aWNlQWN0aXZpdHkiXG4gICAgICAgICAgICAgW2NsYXNzLm5vLXBhZGRpbmctYm90dG9tXT0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5jaGVjay1kZXZpY2UtYWN0aXZpdHlcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyI+XG4gICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0RldmljZUluYWN0aXZpdHkiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5XCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuY2hlY2tEZXZpY2VJbmFjdGl2aXR5XCcpLnZhbHVlIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eVRpbWVvdXRTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmluYWN0aXZpdHktdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIG1pbj0iMCIgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5Q2hlY2tQZXJpb2RTZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS1wZXJpb2RcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLXRpdGxlIiB0cmFuc2xhdGU+Z2F0ZXdheS5hZHZhbmNlZDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtaW5QYWNrU2VuZERlbGF5TVMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2VuZERlbGF5TVNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5taW5pbWFsLXBhY2stZGVsYXlcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubXF0dC1xb3M8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icW9zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIgbWF4PSIxIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnFvc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubXF0dC1xb3MtcmFuZ2VcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5xb3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbjwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJjaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1heFBheWxvYWRTaXplQnl0ZXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWF4UGF5bG9hZFNpemVCeXRlc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXBheWxvYWQtc2l6ZS1ieXRlc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTaXplVG9TZW5kIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTaXplVG9TZW5kXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbi1wYWNrLXNpemUtdG8tc2VuZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG48L21hdC10YWItZ3JvdXA+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3R7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1yb3dzOm1pbi1jb250ZW50IG1pbm1heChhdXRvLDFmcikgbWluLWNvbnRlbnR9Omhvc3QgLmNvbmZpZ3VyYXRpb24tYmxvY2t7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTZweDttYXgtaGVpZ2h0Ojcwdmh9Omhvc3QgLmRpYWxvZy1tb2RlIC5jb25maWd1cmF0aW9uLWJsb2Nre21heC1oZWlnaHQ6NjB2aH06aG9zdCAubWF0LXRvb2xiYXJ7Z3JpZC1yb3c6MTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLnRhYi1ncm91cC1ibG9ja3ttaW4td2lkdGg6MDtoZWlnaHQ6MTAwJTttaW4taGVpZ2h0OjA7Z3JpZC1yb3c6Mn06aG9zdCAudG9nZ2xlLWdyb3Vwe21hcmdpbi1yaWdodDphdXRvfTpob3N0IC5maXJzdC1jYXBpdGFse3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemV9Omhvc3QgdGV4dGFyZWF7cmVzaXplOm5vbmV9Omhvc3QgLnNhdmluZy1wZXJpb2R7ZmxleDoxfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IC5zdGF0aXN0aWNzLWNvbnRhaW5lciAuY29tbWFuZC1jb250YWluZXJ7d2lkdGg6MTAwJX06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3J7ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdCBtYXQtZm9ybS1maWVsZCBtYXQtZXJyb3I6Zmlyc3QtY2hpbGR7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9Omhvc3QgOjpuZy1kZWVwIC5wb2ludGVyLWV2ZW50e3BvaW50ZXItZXZlbnRzOmFsbH06aG9zdCA6Om5nLWRlZXAgLnRvZ2dsZS1ncm91cCBzcGFue3BhZGRpbmc6MCAyNXB4fTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2NvbG9yOiNlMGUwZTB9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXg6aG92ZXJ7Y29sb3I6IzllOWU5ZX06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeHtkaXNwbGF5OmZsZXh9XG4nXSxkZXBlbmRlbmNpZXM6W3traW5kOiJuZ21vZHVsZSIsdHlwZTpIfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdGb3JPZixzZWxlY3RvcjoiW25nRm9yXVtuZ0Zvck9mXSIsaW5wdXRzOlsibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSIsIm5nRm9yVGVtcGxhdGUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nU3dpdGNoLHNlbGVjdG9yOiJbbmdTd2l0Y2hdIixpbnB1dHM6WyJuZ1N3aXRjaCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOl8uTmdTd2l0Y2hDYXNlLHNlbGVjdG9yOiJbbmdTd2l0Y2hDYXNlXSIsaW5wdXRzOlsibmdTd2l0Y2hDYXNlIl19LHtraW5kOiJwaXBlIix0eXBlOl8uS2V5VmFsdWVQaXBlLG5hbWU6ImtleXZhbHVlIn0se2tpbmQ6Im5nbW9kdWxlIix0eXBlOkR9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Q3QuVGJFcnJvckNvbXBvbmVudCxzZWxlY3RvcjoidGItZXJyb3IiLGlucHV0czpbIm5vTWFyZ2luIiwiZXJyb3IiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp4ZS5NYXRJbnB1dCxzZWxlY3RvcjoiaW5wdXRbbWF0SW5wdXRdLCB0ZXh0YXJlYVttYXRJbnB1dF0sIHNlbGVjdFttYXROYXRpdmVDb250cm9sXSwgICAgICBpbnB1dFttYXROYXRpdmVDb250cm9sXSwgdGV4dGFyZWFbbWF0TmF0aXZlQ29udHJvbF0iLGlucHV0czpbImRpc2FibGVkIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5hbWUiLCJyZXF1aXJlZCIsInR5cGUiLCJlcnJvclN0YXRlTWF0Y2hlciIsImFyaWEtZGVzY3JpYmVkYnkiLCJ2YWx1ZSIsInJlYWRvbmx5Il0sZXhwb3J0QXM6WyJtYXRJbnB1dCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZlLk1hdEZvcm1GaWVsZCxzZWxlY3RvcjoibWF0LWZvcm0tZmllbGQiLGlucHV0czpbImhpZGVSZXF1aXJlZE1hcmtlciIsImNvbG9yIiwiZmxvYXRMYWJlbCIsImFwcGVhcmFuY2UiLCJzdWJzY3JpcHRTaXppbmciLCJoaW50TGFiZWwiXSxleHBvcnRBczpbIm1hdEZvcm1GaWVsZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdExhYmVsLHNlbGVjdG9yOiJtYXQtbGFiZWwifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOnZlLk1hdEVycm9yLHNlbGVjdG9yOiJtYXQtZXJyb3IsIFttYXRFcnJvcl0iLGlucHV0czpbImlkIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6dmUuTWF0U3VmZml4LHNlbGVjdG9yOiJbbWF0U3VmZml4XSwgW21hdEljb25TdWZmaXhdLCBbbWF0VGV4dFN1ZmZpeF0iLGlucHV0czpbIm1hdFRleHRTdWZmaXgiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTp3ZS5NYXRTZWxlY3Qsc2VsZWN0b3I6Im1hdC1zZWxlY3QiLGlucHV0czpbImFyaWEtZGVzY3JpYmVkYnkiLCJwYW5lbENsYXNzIiwiZGlzYWJsZWQiLCJkaXNhYmxlUmlwcGxlIiwidGFiSW5kZXgiLCJoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yIiwicGxhY2Vob2xkZXIiLCJyZXF1aXJlZCIsIm11bHRpcGxlIiwiZGlzYWJsZU9wdGlvbkNlbnRlcmluZyIsImNvbXBhcmVXaXRoIiwidmFsdWUiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiZXJyb3JTdGF0ZU1hdGNoZXIiLCJ0eXBlYWhlYWREZWJvdW5jZUludGVydmFsIiwic29ydENvbXBhcmF0b3IiLCJpZCIsInBhbmVsV2lkdGgiXSxvdXRwdXRzOlsib3BlbmVkQ2hhbmdlIiwib3BlbmVkIiwiY2xvc2VkIiwic2VsZWN0aW9uQ2hhbmdlIiwidmFsdWVDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFNlbGVjdCJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOkNlLk1hdE9wdGlvbixzZWxlY3RvcjoibWF0LW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sb3V0cHV0czpbIm9uU2VsZWN0aW9uQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRPcHRpb24iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTp6ZS5NYXRUb29sdGlwLHNlbGVjdG9yOiJbbWF0VG9vbHRpcF0iLGlucHV0czpbIm1hdFRvb2x0aXBQb3NpdGlvbiIsIm1hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luIiwibWF0VG9vbHRpcERpc2FibGVkIiwibWF0VG9vbHRpcFNob3dEZWxheSIsIm1hdFRvb2x0aXBIaWRlRGVsYXkiLCJtYXRUb29sdGlwVG91Y2hHZXN0dXJlcyIsIm1hdFRvb2x0aXAiLCJtYXRUb29sdGlwQ2xhc3MiXSxleHBvcnRBczpbIm1hdFRvb2x0aXAiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpXLk1hdFRhYkNvbnRlbnQsc2VsZWN0b3I6IlttYXRUYWJDb250ZW50XSJ9LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWIsc2VsZWN0b3I6Im1hdC10YWIiLGlucHV0czpbImRpc2FibGVkIiwibGFiZWwiLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwibGFiZWxDbGFzcyIsImJvZHlDbGFzcyJdLGV4cG9ydEFzOlsibWF0VGFiIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6Vy5NYXRUYWJHcm91cCxzZWxlY3RvcjoibWF0LXRhYi1ncm91cCIsaW5wdXRzOlsiY29sb3IiLCJmaXRJbmtCYXJUb0NvbnRlbnQiLCJtYXQtc3RyZXRjaC10YWJzIiwiZHluYW1pY0hlaWdodCIsInNlbGVjdGVkSW5kZXgiLCJoZWFkZXJQb3NpdGlvbiIsImFuaW1hdGlvbkR1cmF0aW9uIiwiY29udGVudFRhYkluZGV4IiwiZGlzYWJsZVBhZ2luYXRpb24iLCJkaXNhYmxlUmlwcGxlIiwicHJlc2VydmVDb250ZW50IiwiYmFja2dyb3VuZENvbG9yIiwiYXJpYS1sYWJlbCIsImFyaWEtbGFiZWxsZWRieSJdLG91dHB1dHM6WyJzZWxlY3RlZEluZGV4Q2hhbmdlIiwiZm9jdXNDaGFuZ2UiLCJhbmltYXRpb25Eb25lIiwic2VsZWN0ZWRUYWJDaGFuZ2UiXSxleHBvcnRBczpbIm1hdFRhYkdyb3VwIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6ZXQuTWF0U2xpZGVUb2dnbGUsc2VsZWN0b3I6Im1hdC1zbGlkZS10b2dnbGUiLGlucHV0czpbIm5hbWUiLCJpZCIsImxhYmVsUG9zaXRpb24iLCJhcmlhLWxhYmVsIiwiYXJpYS1sYWJlbGxlZGJ5IiwiYXJpYS1kZXNjcmliZWRieSIsInJlcXVpcmVkIiwiY29sb3IiLCJkaXNhYmxlZCIsImRpc2FibGVSaXBwbGUiLCJ0YWJJbmRleCIsImNoZWNrZWQiLCJoaWRlSWNvbiIsImRpc2FibGVkSW50ZXJhY3RpdmUiXSxvdXRwdXRzOlsiY2hhbmdlIiwidG9nZ2xlQ2hhbmdlIl0sZXhwb3J0QXM6WyJtYXRTbGlkZVRvZ2dsZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOmouRGVmYXVsdExheW91dERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhMYXlvdXRdLCBbZnhMYXlvdXQueHNdLCBbZnhMYXlvdXQuc21dLCBbZnhMYXlvdXQubWRdLCAgW2Z4TGF5b3V0LmxnXSwgW2Z4TGF5b3V0LnhsXSwgW2Z4TGF5b3V0Lmx0LXNtXSwgW2Z4TGF5b3V0Lmx0LW1kXSwgIFtmeExheW91dC5sdC1sZ10sIFtmeExheW91dC5sdC14bF0sIFtmeExheW91dC5ndC14c10sIFtmeExheW91dC5ndC1zbV0sICBbZnhMYXlvdXQuZ3QtbWRdLCBbZnhMYXlvdXQuZ3QtbGddIixpbnB1dHM6WyJmeExheW91dCIsImZ4TGF5b3V0LnhzIiwiZnhMYXlvdXQuc20iLCJmeExheW91dC5tZCIsImZ4TGF5b3V0LmxnIiwiZnhMYXlvdXQueGwiLCJmeExheW91dC5sdC1zbSIsImZ4TGF5b3V0Lmx0LW1kIiwiZnhMYXlvdXQubHQtbGciLCJmeExheW91dC5sdC14bCIsImZ4TGF5b3V0Lmd0LXhzIiwiZnhMYXlvdXQuZ3Qtc20iLCJmeExheW91dC5ndC1tZCIsImZ4TGF5b3V0Lmd0LWxnIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0RmxleERpcmVjdGl2ZSxzZWxlY3RvcjoiICBbZnhGbGV4XSwgW2Z4RmxleC54c10sIFtmeEZsZXguc21dLCBbZnhGbGV4Lm1kXSwgIFtmeEZsZXgubGddLCBbZnhGbGV4LnhsXSwgW2Z4RmxleC5sdC1zbV0sIFtmeEZsZXgubHQtbWRdLCAgW2Z4RmxleC5sdC1sZ10sIFtmeEZsZXgubHQteGxdLCBbZnhGbGV4Lmd0LXhzXSwgW2Z4RmxleC5ndC1zbV0sICBbZnhGbGV4Lmd0LW1kXSwgW2Z4RmxleC5ndC1sZ10iLGlucHV0czpbImZ4RmxleCIsImZ4RmxleC54cyIsImZ4RmxleC5zbSIsImZ4RmxleC5tZCIsImZ4RmxleC5sZyIsImZ4RmxleC54bCIsImZ4RmxleC5sdC1zbSIsImZ4RmxleC5sdC1tZCIsImZ4RmxleC5sdC1sZyIsImZ4RmxleC5sdC14bCIsImZ4RmxleC5ndC14cyIsImZ4RmxleC5ndC1zbSIsImZ4RmxleC5ndC1tZCIsImZ4RmxleC5ndC1sZyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkRlZmF1bHRWYWx1ZUFjY2Vzc29yLHNlbGVjdG9yOiJpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtmb3JtQ29udHJvbE5hbWVdLHRleHRhcmVhW2Zvcm1Db250cm9sTmFtZV0saW5wdXQ6bm90KFt0eXBlPWNoZWNrYm94XSlbZm9ybUNvbnRyb2xdLHRleHRhcmVhW2Zvcm1Db250cm9sXSxpbnB1dDpub3QoW3R5cGU9Y2hlY2tib3hdKVtuZ01vZGVsXSx0ZXh0YXJlYVtuZ01vZGVsXSxbbmdEZWZhdWx0Q29udHJvbF0ifSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLk51bWJlclZhbHVlQWNjZXNzb3Isc2VsZWN0b3I6ImlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVtmb3JtQ29udHJvbF0saW5wdXRbdHlwZT1udW1iZXJdW25nTW9kZWxdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWluVmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttaW5dW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWluXVtuZ01vZGVsXSIsaW5wdXRzOlsibWluIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuTWF4VmFsaWRhdG9yLHNlbGVjdG9yOiJpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtmb3JtQ29udHJvbE5hbWVdLGlucHV0W3R5cGU9bnVtYmVyXVttYXhdW2Zvcm1Db250cm9sXSxpbnB1dFt0eXBlPW51bWJlcl1bbWF4XVtuZ01vZGVsXSIsaW5wdXRzOlsibWF4Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xEaXJlY3RpdmUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbF0iLGlucHV0czpbImZvcm1Db250cm9sIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXSxleHBvcnRBczpbIm5nRm9ybSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm1lLkZvcm1Hcm91cERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Hcm91cF0iLGlucHV0czpbImZvcm1Hcm91cCJdLG91dHB1dHM6WyJuZ1N1Ym1pdCJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUNvbnRyb2xOYW1lLHNlbGVjdG9yOiJbZm9ybUNvbnRyb2xOYW1lXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2xOYW1lIiwiZGlzYWJsZWQiLCJuZ01vZGVsIl0sb3V0cHV0czpbIm5nTW9kZWxDaGFuZ2UiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtR3JvdXBOYW1lLHNlbGVjdG9yOiJbZm9ybUdyb3VwTmFtZV0iLGlucHV0czpbImZvcm1Hcm91cE5hbWUiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQXJyYXlOYW1lLHNlbGVjdG9yOiJbZm9ybUFycmF5TmFtZV0iLGlucHV0czpbImZvcm1BcnJheU5hbWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpUdC5GaWxlSW5wdXRDb21wb25lbnQsc2VsZWN0b3I6InRiLWZpbGUtaW5wdXQiLGlucHV0czpbImxhYmVsIiwiaGludCIsImFjY2VwdCIsIm5vRmlsZVRleHQiLCJpbnB1dElkIiwiYWxsb3dlZEV4dGVuc2lvbnMiLCJkcm9wTGFiZWwiLCJtYXhTaXplQnl0ZSIsImNvbnRlbnRDb252ZXJ0RnVuY3Rpb24iLCJyZXF1aXJlZCIsInJlcXVpcmVkQXNFcnJvciIsImRpc2FibGVkIiwiZXhpc3RpbmdGaWxlTmFtZSIsInJlYWRBc0JpbmFyeSIsIndvcmtGcm9tRmlsZU9iaiIsIm11bHRpcGxlRmlsZSJdLG91dHB1dHM6WyJmaWxlTmFtZUNoYW5nZWQiXX0se2tpbmQ6InBpcGUiLHR5cGU6WS5UcmFuc2xhdGVQaXBlLG5hbWU6InRyYW5zbGF0ZSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6WS5UcmFuc2xhdGVEaXJlY3RpdmUsc2VsZWN0b3I6Ilt0cmFuc2xhdGVdLFtuZ3gtdHJhbnNsYXRlXSIsaW5wdXRzOlsidHJhbnNsYXRlIiwidHJhbnNsYXRlUGFyYW1zIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6U3QuQ29weUJ1dHRvbkNvbXBvbmVudCxzZWxlY3RvcjoidGItY29weS1idXR0b24iLGlucHV0czpbImNvcHlUZXh0IiwiZGlzYWJsZWQiLCJtZGlJY29uIiwiaWNvbiIsInRvb2x0aXBUZXh0IiwidG9vbHRpcFBvc2l0aW9uIiwic3R5bGUiLCJjb2xvciIsIm1pbmlCdXR0b24iXSxvdXRwdXRzOlsic3VjY2Vzc0NvcGllZCJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6dXQuSGludFRvb2x0aXBJY29uQ29tcG9uZW50LHNlbGVjdG9yOiJbdGItaGludC10b29sdGlwLWljb25dIixpbnB1dHM6WyJ0Yi1oaW50LXRvb2x0aXAtaWNvbiIsInRvb2x0aXBQb3NpdGlvbiIsImhpbnRJY29uIl19XX0pfX1lKCJHYXRld2F5QmFzaWNDb25maWd1cmF0aW9uQ29tcG9uZW50IixEbyksSGUoW04oKV0sRG8ucHJvdG90eXBlLCJkaWFsb2dNb2RlIix2b2lkIDApLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6RG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PkRvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5EbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG48bWF0LXRhYi1ncm91cCBjbGFzcz0idGFiLWdyb3VwLWJsb2NrIiBbZm9ybUdyb3VwXT0iYmFzaWNGb3JtR3JvdXAiIFtjbGFzcy5kaWFsb2ctbW9kZV09ImRpYWxvZ01vZGUiPlxuICA8bWF0LXRhYiBsYWJlbD0ie3sgXCdnYXRld2F5LmdlbmVyYWxcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9InRoaW5nc2JvYXJkIiBjbGFzcz0ibWF0LWNvbnRlbnQgbWF0LXBhZGRpbmcgY29uZmlndXJhdGlvbi1ibG9jayI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5yZW1vdGUtY29uZmlndXJhdGlvblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9InJlbW90ZUNvbmZpZ3VyYXRpb24iPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLWNvbmZpZ3VyYXRpb25cJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmciPlxuICAgICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgY2xhc3M9Im1hdC1zbGlkZSIgY29sb3I9InByaW1hcnkiIGZvcm1Db250cm9sTmFtZT0icmVtb3RlU2hlbGwiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkucmVtb3RlLXNoZWxsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS50aGluZ3Nib2FyZC1ob3N0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Imhvc3QiLz5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ob3N0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuaG9zdFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkudGhpbmdzYm9hcmQtcG9ydDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnBvcnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5wb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1tYXhcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucG9ydFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wb3J0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+c2VjdXJpdHkuc2VjdXJpdHk8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9InNlY3VyaXR5Ij5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIGZvcm1Db250cm9sTmFtZT0idHlwZSI+XG4gICAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHNlY3VyaXR5VHlwZSBvZiBzZWN1cml0eVR5cGVzIHwga2V5dmFsdWUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09InNlY3VyaXR5VHlwZS5rZXkiPnt7IHNlY3VyaXR5VHlwZS52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwnYWNjZXNzdG9rZW5cJykiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5hY2Nlc3MtdG9rZW48L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iYWNjZXNzVG9rZW4iLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkuYWNjZXNzVG9rZW5cJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdzZWN1cml0eS5hY2Nlc3MtdG9rZW4tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgbWluaUJ1dHRvbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmFjY2Vzc1Rva2VuXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBUZXh0PSJ7eyBcJ2RldmljZS5jb3B5LWFjY2Vzcy10b2tlblwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj0iYWJvdmUiXG4gICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50b2tlblwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPHNlY3Rpb24+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5zZWN1cml0eS5jbGllbnRJZDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iY2xpZW50SWQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ3NlY3VyaXR5LmNsaWVudElkLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPHRiLWNvcHktYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LmNsaWVudElkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICBbY29weVRleHRdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5jbGllbnRJZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LWNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgICBpY29uPSJjb250ZW50X2NvcHkiPlxuICAgICAgICAgICAgICAgICAgPC90Yi1jb3B5LWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNsaWVudC1pZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPnNlY3VyaXR5LnVzZXJuYW1lPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ1c2VybmFtZSIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnc2VjdXJpdHkudXNlcm5hbWUtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8dGItY29weS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICAgIG1pbmlCdXR0b249ImZhbHNlIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudXNlcm5hbWVcJykudmFsdWUiXG4gICAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnVzZXJuYW1lXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgICB0b29sdGlwVGV4dD0ie3sgXCdnYXRld2F5LmNvcHktdXNlcm5hbWVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPSJhYm92ZSJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICAgIDwvdGItY29weS1idXR0b24+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy51c2VybmFtZVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgc3Vic2NyaXB0U2l6aW5nPSJkeW5hbWljIiBzdHlsZT0id2lkdGg6IDEwMCUiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZSA9PT0gXCd1c2VybmFtZVBhc3N3b3JkXCciPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkucGFzc3dvcmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJwYXNzd29yZCIvPlxuICAgICAgICAgICAgICAgIDx0Yi1jb3B5LWJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtaW5pQnV0dG9uPSJmYWxzZSJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zZWN1cml0eS5wYXNzd29yZFwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgIFtjb3B5VGV4dF09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnBhc3N3b3JkXCcpLnZhbHVlIlxuICAgICAgICAgICAgICAgICAgdG9vbHRpcFRleHQ9Int7IFwnZ2F0ZXdheS5jb3B5LXBhc3N3b3JkXCcgfCB0cmFuc2xhdGUgfX0iXG4gICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249ImFib3ZlIlxuICAgICAgICAgICAgICAgICAgaWNvbj0iY29udGVudF9jb3B5Ij5cbiAgICAgICAgICAgICAgICA8L3RiLWNvcHktYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5wYXNzd29yZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDx0Yi1lcnJvciBzdHlsZT0ibWFyZ2luLXRvcDogLTEycHg7IGRpc3BsYXk6IGJsb2NrOyIgZnhGbGV4PSIxMDAiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5LnR5cGVcJykudmFsdWUgPT09IFwndXNlcm5hbWVQYXNzd29yZFwnIlxuICAgICAgICAgICAgICAgICAgICAgIFtlcnJvcl09ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnNlY3VyaXR5XCcpLmhhc0Vycm9yKFwnYXRMZWFzdE9uZVwnKSA/XG4gICAgICAgICAgKFwnZGV2aWNlLmNsaWVudC1pZC1vci11c2VyLW5hbWUtbmVjZXNzYXJ5XCcgfCB0cmFuc2xhdGUpIDogXCdcJyI+PC90Yi1lcnJvcj5cbiAgICAgICAgICAgIDx0Yi1maWxlLWlucHV0XG4gICAgICAgICAgICAgIGZ4RmxleD0iMTAwIlxuICAgICAgICAgICAgICBoaW50PSJ7eyBcJ2dhdGV3YXkuaGludHMuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuc2VjdXJpdHkudHlwZVwnKS52YWx1ZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwndGxzXCcpIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9ImNhQ2VydCJcbiAgICAgICAgICAgICAgbGFiZWw9Int7IFwnc2VjdXJpdHkuY2EtY2VydFwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICBbYWxsb3dlZEV4dGVuc2lvbnNdPSJcJ3BlbSwgY2VydCwga2V5XCciXG4gICAgICAgICAgICAgIFthY2NlcHRdPSJcJy5wZW0sIGFwcGxpY2F0aW9uL3BlbSwuY2VydCwgYXBwbGljYXRpb24vY2VydCwgLmtleSxhcHBsaWNhdGlvbi9rZXlcJyJcbiAgICAgICAgICAgICAgZHJvcExhYmVsPSJ7eyBcJ2dhdGV3YXkuZHJvcC1maWxlXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgICAgICAgICAgPC90Yi1maWxlLWlucHV0PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5sb2dzLmxvZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9ImxvZ3MiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCBuby1wYWRkaW5nLWJvdHRvbSI+XG4gICAgICAgICAgPGRpdiBmeExheW91dD0iY29sdW1uIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImRhdGVGb3JtYXQiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5kYXRlRm9ybWF0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmRhdGUtZm9ybWF0LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZGF0ZS1mb3JtXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sb2ctZm9ybWF0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImxvZ0Zvcm1hdCIgcm93cz0iMiI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2dGb3JtYXRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MubG9nLWZvcm1hdC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmxvZy1mb3JtYXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iIGZvcm1Hcm91cE5hbWU9InJlbW90ZSI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5yZW1vdGU8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHRiLWhpbnQtdG9vbHRpcC1pY29uPSJ7eyBcJ2dhdGV3YXkuaGludHMucmVtb3RlLWxvZ1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImVuYWJsZWQiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5yZW1vdGUtbG9nc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPSJsb2dMZXZlbCI+XG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0xldmVsIG9mIGdhdGV3YXlMb2dMZXZlbCIgW3ZhbHVlXT0ibG9nTGV2ZWwiPnt7IGxvZ0xldmVsIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJsb2NhbCI+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiPmdhdGV3YXkubG9ncy5sb2NhbDwvZGl2PlxuICAgICAgICAgIDx0Yi10b2dnbGUtc2VsZWN0IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiIFtmb3JtQ29udHJvbF09ImxvZ1NlbGVjdG9yIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IGxvZ0NvbmZpZyBvZiBsb2NhbExvZ3NDb25maWdzIiBbdmFsdWVdPSJsb2dDb25maWciXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZmlyc3QtY2FwaXRhbCI+e3sgbG9jYWxMb2dzQ29uZmlnVHJhbnNsYXRlTWFwLmdldChsb2dDb25maWcpIH19PC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgIDwvdGItdG9nZ2xlLXNlbGVjdD5cbiAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPSJnZXRMb2dGb3JtR3JvdXAobG9nU2VsZWN0b3IudmFsdWUpIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5sZXZlbDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT0ibG9nTGV2ZWwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPSJsZXQgbG9nTGV2ZWwgb2YgZ2F0ZXdheUxvZ0xldmVsIiBbdmFsdWVdPSJsb2dMZXZlbCI+e3sgbG9nTGV2ZWwgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkubG9ncy5maWxlLXBhdGg8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJmaWxlUGF0aCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmZpbGVQYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmxvZ3MuZmlsZS1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBzYXZpbmctcGVyaW9kIj5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1RpbWUiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5zYXZpbmdUaW1lXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubG9ncy5zYXZpbmctcGVyaW9kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnbG9ncy5sb2NhbC5cJyArIGxvZ1NlbGVjdG9yLnZhbHVlICsgXCcuc2F2aW5nVGltZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLnNhdmluZy1wZXJpb2QtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGhpZGVSZXF1aXJlZE1hcmtlciBzdHlsZT0ibWluLXdpZHRoOiAxMTBweDsgd2lkdGg6IDMwJSI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9InNhdmluZ1BlcmlvZCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj0ibGV0IHBlcmlvZCBvZiBsb2dTYXZpbmdQZXJpb2RzIHwga2V5dmFsdWUiIFt2YWx1ZV09InBlcmlvZC5rZXkiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHBlcmlvZC52YWx1ZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImJhY2t1cENvdW50IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdsb2dzLmxvY2FsLlwnICsgbG9nU2VsZWN0b3IudmFsdWUgKyBcJy5iYWNrdXBDb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2xvZ3MubG9jYWwuXCcgKyBsb2dTZWxlY3Rvci52YWx1ZSArIFwnLmJhY2t1cENvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5sb2dzLmJhY2t1cC1jb3VudC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5iYWNrdXAtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RvcmFnZVwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0ic3RvcmFnZSIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZSBjbGFzcz0idGItZm9ybS1wYW5lbC10aXRsZSI+Z2F0ZXdheS5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPGRpdiB0cmFuc2xhdGUgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+Z2F0ZXdheS5oaW50cy5zdG9yYWdlPC9kaXY+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgY2xhc3M9InRvZ2dsZS1ncm91cCIgZm9ybUNvbnRyb2xOYW1lPSJ0eXBlIj5cbiAgICAgICAgICAgIDx0Yi10b2dnbGUtb3B0aW9uICpuZ0Zvcj0ibGV0IHN0b3JhZ2VUeXBlIG9mIHN0b3JhZ2VUeXBlcyIgW3ZhbHVlXT0ic3RvcmFnZVR5cGUiPlxuICAgICAgICAgICAgICB7eyBzdG9yYWdlVHlwZXNUcmFuc2xhdGlvbk1hcC5nZXQoc3RvcmFnZVR5cGUpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3RiLXRvZ2dsZS1vcHRpb24+XG4gICAgICAgICAgPC90Yi10b2dnbGUtc2VsZWN0PlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtaGludCI+e3sgXCdnYXRld2F5LmhpbnRzLlwnICsgYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS50eXBlXCcpLnZhbHVlIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnR5cGVcJykudmFsdWUiPlxuICAgICAgICAgICAgPHNlY3Rpb24gKm5nU3dpdGNoQ2FzZT0iU3RvcmFnZVR5cGVzLk1FTU9SWSIgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0icmVhZF9yZWNvcmRzX2NvdW50Ii8+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5yZWFkX3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLnJlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnJlYWQtcmVjb3JkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3JkczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1heF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWF4LXJlY29yZHMtY291bnRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuRklMRSI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0iZGF0YV9mb2xkZXJfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZvbGRlcl9wYXRoXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPSJtYXQtZm9ybS1maWVsZC1pbmZpeCBwb2ludGVyLWV2ZW50IHN1ZmZpeC1pY29uIiBhcmlhLWhpZGRlbj0iZmFsc2UiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iaGVscC1pY29uIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5kYXRhLWZvbGRlclwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X2ZpbGVfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X2ZpbGVfY291bnRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfZmlsZV9jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1maWxlLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT0ibnVtYmVyIiBmb3JtQ29udHJvbE5hbWU9Im1heF9yZWFkX3JlY29yZHNfY291bnQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVhZF9yZWNvcmRzX2NvdW50XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlYWRfcmVjb3Jkc19jb3VudFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWFkLWNvdW50XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdG9yYWdlLW1heC1maWxlLXJlY29yZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWF4X3JlY29yZHNfcGVyX2ZpbGUiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5tYXhfcmVjb3Jkc19wZXJfZmlsZVwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdG9yYWdlLW1heC1yZWNvcmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWF4X3JlY29yZHNfcGVyX2ZpbGVcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1heC1yZWNvcmRzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiAqbmdTd2l0Y2hDYXNlPSJTdG9yYWdlVHlwZXMuU1FMSVRFIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RvcmFnZS1wYXRoPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJkYXRhX2ZpbGVfcGF0aCIvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnc3RvcmFnZS5kYXRhX2ZpbGVfcGF0aFwnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0b3JhZ2UtcGF0aC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmRhdGEtZm9sZGVyXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtY2hlY2staW4taG91cnM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzIi8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2NoZWNrX2luX2hvdXJzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9jaGVja19pbl9ob3Vyc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkubWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy50dGwtY2hlY2staG91clwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9Im1hdC1ibG9jayI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5czwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPSJudW1iZXIiIGZvcm1Db250cm9sTmFtZT0ibWVzc2FnZXNfdHRsX2luX2RheXMiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdzdG9yYWdlLm1lc3NhZ2VzX3R0bF9pbl9kYXlzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3N0b3JhZ2UubWVzc2FnZXNfdHRsX2luX2RheXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMudHRsLW1lc3NhZ2VzLWRheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuZ3JwY1wnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0iZ3JwYyIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjbGFzcz0ibWF0LXNsaWRlIiBjb2xvcj0icHJpbWFyeSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGVkIj5cbiAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjXCcgIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDxkaXYgdGItaGludC10b29sdGlwLWljb249Int7IFwnZ2F0ZXdheS5oaW50cy5wZXJtaXQtd2l0aG91dC1jYWxsc1wnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImtlZXBhbGl2ZVBlcm1pdFdpdGhvdXRDYWxscyI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5wZXJtaXQtd2l0aG91dC1jYWxsc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uPlxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc2VydmVyLXBvcnQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJzZXJ2ZXJQb3J0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5zZXJ2ZXItcG9ydFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLnNlcnZlclBvcnRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwnbWF4XCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS50aGluZ3Nib2FyZC1wb3J0LW1heFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5zZXJ2ZXJQb3J0XCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkudGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ia2VlcEFsaXZlVGltZW91dE1zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLWtlZXAtYWxpdmUtdGltZW91dFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLmtlZXBBbGl2ZVRpbWVvdXRNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lb3V0TXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmdycGMta2VlcC1hbGl2ZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImtlZXBBbGl2ZVRpbWVNcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuZ3JwYy1rZWVwLWFsaXZlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5rZWVwQWxpdmVUaW1lTXNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMta2VlcC1hbGl2ZS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMua2VlcEFsaXZlVGltZU1zXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluVGltZUJldHdlZW5QaW5nc01zIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3NcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1pblRpbWVCZXR3ZWVuUGluZ3NNc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5UaW1lQmV0d2VlblBpbmdzTXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGE8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJtYXhQaW5nc1dpdGhvdXREYXRhIiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGFcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5tYXhQaW5nc1dpdGhvdXREYXRhXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCdncnBjLm1heFBpbmdzV2l0aG91dERhdGFcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBpbmdJbnRlcnZhbFdpdGhvdXREYXRhTXMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwnZ3JwYy5taW5QaW5nSW50ZXJ2YWxXaXRob3V0RGF0YU1zXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5ncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ2dycGMubWluUGluZ0ludGVydmFsV2l0aG91dERhdGFNc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L21hdC10YWI+XG4gIDxtYXQtdGFiIGxhYmVsPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5zdGF0aXN0aWNzXCcgfCB0cmFuc2xhdGUgfX0iPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPSJ0aGluZ3Nib2FyZCIgY2xhc3M9Im1hdC1jb250ZW50IG1hdC1wYWRkaW5nIGNvbmZpZ3VyYXRpb24tYmxvY2siPlxuICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsIG5vLXBhZGRpbmctYm90dG9tIiBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBjb2xvcj0icHJpbWFyeSIgY2xhc3M9Im1hdC1zbGlkZSIgZm9ybUNvbnRyb2xOYW1lPSJlbmFibGUiPlxuICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc3RhdGlzdGljc1wnICB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSI+XG4gICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2Q8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9InN0YXRzU2VuZFBlcmlvZEluU2Vjb25kcyIgdHlwZT0ibnVtYmVyIiBtaW49IjYwIi8+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3Muc2VuZC1wZXJpb2QtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5zdGF0aXN0aWNzLnN0YXRzU2VuZFBlcmlvZEluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLnN0YXRpc3RpY3Muc3RhdHNTZW5kUGVyaW9kSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnNlbmQtcGVyaW9kLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY29tbWFuZHM8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0Yi1mb3JtLXBhbmVsLWhpbnQiIHRyYW5zbGF0ZT5nYXRld2F5LmhpbnRzLmNvbW1hbmRzPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPSJzdGF0aXN0aWNzIj5cbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9InJvdyIgZm9ybUFycmF5TmFtZT0iY29tbWFuZHMiIGNsYXNzPSJzdGF0aXN0aWNzLWNvbnRhaW5lciJcbiAgICAgICAgICAgICAgICAgKm5nRm9yPSJsZXQgY29tbWFuZENvbnRyb2wgb2YgY29tbWFuZEZvcm1BcnJheSgpLmNvbnRyb2xzOyBsZXQgJGluZGV4ID0gaW5kZXgiPlxuICAgICAgICAgICAgICA8c2VjdGlvbiBbZm9ybUdyb3VwTmFtZV09IiRpbmRleCIgY2xhc3M9InRiLWZvcm0tcGFuZWwgc3Ryb2tlZCBuby1wYWRkaW5nLWJvdHRvbSBuby1nYXAgY29tbWFuZC1jb250YWluZXIiPlxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5hdHRyaWJ1dGUtbmFtZTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJhdHRyaWJ1dGVPbkdhdGV3YXkiLz5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwnYXR0cmlidXRlT25HYXRld2F5XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuYXR0cmlidXRlXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MudGltZW91dDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJ0aW1lb3V0IiB0eXBlPSJudW1iZXIiIG1pbj0iMCIvPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCd0aW1lb3V0XCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MudGltZW91dC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iY29tbWFuZENvbnRyb2wuZ2V0KFwndGltZW91dFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLnRpbWVvdXQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnRpbWVvdXRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJtYXQtYmxvY2siPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNvbW1hbmQiLz5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImNvbW1hbmRDb250cm9sLmdldChcJ2NvbW1hbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJjb21tYW5kQ29udHJvbC5nZXQoXCdjb21tYW5kXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNvbW1hbmQtcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLmNvbW1hbmRcJyB8IHRyYW5zbGF0ZSB9fSI+aW5mb19vdXRsaW5lZFxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9InJlbW92ZUNvbW1hbmRDb250cm9sKCRpbmRleCwgJGV2ZW50KSJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0idGItYm94LWJ1dHRvbiJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5yZW1vdmVcJyB8IHRyYW5zbGF0ZSB9fSJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249ImFib3ZlIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6IGZpdC1jb250ZW50OyJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPSIhYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucmVtb3RlQ29uZmlndXJhdGlvblwnKS52YWx1ZSJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT0iYWRkQ29tbWFuZCgpIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MuYWRkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbiAgPG1hdC10YWIgbGFiZWw9Int7IFwnZ2F0ZXdheS5vdGhlclwnIHwgdHJhbnNsYXRlIH19Ij5cbiAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT0idGhpbmdzYm9hcmQiIGNsYXNzPSJtYXQtY29udGVudCBtYXQtcGFkZGluZyBjb25maWd1cmF0aW9uLWJsb2NrIj5cbiAgICAgICAgPGRpdiBjbGFzcz0idGItZm9ybS1wYW5lbCIgZm9ybUdyb3VwTmFtZT0iY2hlY2tpbmdEZXZpY2VBY3Rpdml0eSJcbiAgICAgICAgICAgICBbY2xhc3Mubm8tcGFkZGluZy1ib3R0b21dPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmNoZWNrRGV2aWNlSW5hY3Rpdml0eVwnKS52YWx1ZSI+XG4gICAgICAgICAgPGRpdiB0Yi1oaW50LXRvb2x0aXAtaWNvbj0ie3sgXCdnYXRld2F5LmhpbnRzLmNoZWNrLWRldmljZS1hY3Rpdml0eVwnIHwgdHJhbnNsYXRlIH19IlxuICAgICAgICAgICAgICAgY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIj5cbiAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGNsYXNzPSJtYXQtc2xpZGUiIGNvbG9yPSJwcmltYXJ5IiBmb3JtQ29udHJvbE5hbWU9ImNoZWNrRGV2aWNlSW5hY3Rpdml0eSI+XG4gICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5jaGVja2luZy1kZXZpY2UtYWN0aXZpdHlcJyAgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5jaGVja0RldmljZUluYWN0aXZpdHlcJykudmFsdWUiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJpbmFjdGl2aXR5VGltZW91dFNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tpbmdEZXZpY2VBY3Rpdml0eS5pbmFjdGl2aXR5VGltZW91dFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlUaW1lb3V0U2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMuaW5hY3Rpdml0eS10aW1lb3V0XCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9Im51bWJlciIgbWluPSIwIiBmb3JtQ29udHJvbE5hbWU9ImluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHMiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja2luZ0RldmljZUFjdGl2aXR5LmluYWN0aXZpdHlDaGVja1BlcmlvZFNlY29uZHNcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLmNoZWNraW5nRGV2aWNlQWN0aXZpdHkuaW5hY3Rpdml0eUNoZWNrUGVyaW9kU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5pbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5pbmFjdGl2aXR5LXBlcmlvZFwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwgbm8tcGFkZGluZy1ib3R0b20iPlxuICAgICAgICAgIDxkaXYgY2xhc3M9InRiLWZvcm0tcGFuZWwtdGl0bGUiIHRyYW5zbGF0ZT5nYXRld2F5LmFkdmFuY2VkPC9kaXY+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InRiLWZvcm0tcm93IG5vLWJvcmRlciBuby1wYWRkaW5nIHRiLXN0YW5kYXJkLWZpZWxkcyBjb2x1bW4teHMiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9Im1pblBhY2tTZW5kRGVsYXlNUyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5taW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1pblBhY2tTZW5kRGVsYXlNU1wnKS5oYXNFcnJvcihcJ21pblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NlbmREZWxheU1TXCcpLmhhc0Vycm9yKFwncGF0dGVyblwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5Lm1pbi1wYWNrLXNlbmQtZGVsYXktcGF0dGVyblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLm1pbmltYWwtcGFjay1kZWxheVwnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5tcXR0LXFvczwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPSJxb3MiIHR5cGU9Im51bWJlciIgbWluPSIwIiBtYXg9IjEiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQucW9zXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yZXF1aXJlZFwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5xb3NcJykuaGFzRXJyb3IoXCdtYXhcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5tcXR0LXFvcy1yYW5nZVwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0SWNvblN1ZmZpeCBzdHlsZT0iY3Vyc29yOnBvaW50ZXI7IlxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD0ie3sgXCdnYXRld2F5LmhpbnRzLnFvc1wnIHwgdHJhbnNsYXRlIH19Ij5pbmZvX291dGxpbmVkXG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz0idGItZm9ybS1yb3cgbm8tYm9yZGVyIG5vLXBhZGRpbmcgdGItc3RhbmRhcmQtZmllbGRzIGNvbHVtbi14cyI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT0ib3V0bGluZSIgY2xhc3M9ImZsZXgiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5nYXRld2F5LnN0YXRpc3RpY3MuY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9ImNoZWNrQ29ubmVjdG9yc0NvbmZpZ3VyYXRpb25JblNlY29uZHMiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3JlcXVpcmVkXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5jaGVja0Nvbm5lY3RvcnNDb25maWd1cmF0aW9uSW5TZWNvbmRzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5jaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tbWluXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQuY2hlY2tDb25uZWN0b3JzQ29uZmlndXJhdGlvbkluU2Vjb25kc1wnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLmNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9Im91dGxpbmUiIGNsYXNzPSJmbGV4Ij5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Z2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXM8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWF4UGF5bG9hZFNpemVCeXRlcyIgdHlwZT0ibnVtYmVyIiBtaW49IjAiLz5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwncmVxdWlyZWRcJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1heC1wYXlsb2FkLXNpemUtYnl0ZXMtcmVxdWlyZWRcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5tYXhQYXlsb2FkU2l6ZUJ5dGVzXCcpLmhhc0Vycm9yKFwnbWluXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pblwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAgICAgKm5nSWY9ImJhc2ljRm9ybUdyb3VwLmdldChcJ3RoaW5nc2JvYXJkLm1heFBheWxvYWRTaXplQnl0ZXNcJykuaGFzRXJyb3IoXCdwYXR0ZXJuXCcpIj5cbiAgICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuc3RhdGlzdGljcy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzLXBhdHRlcm5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdEljb25TdWZmaXggc3R5bGU9ImN1cnNvcjpwb2ludGVyOyJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9Int7IFwnZ2F0ZXdheS5oaW50cy5tYXgtcGF5bG9hZC1zaXplLWJ5dGVzXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJ0Yi1mb3JtLXJvdyBuby1ib3JkZXIgbm8tcGFkZGluZyB0Yi1zdGFuZGFyZC1maWVsZHMgY29sdW1uLXhzIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPSJvdXRsaW5lIiBjbGFzcz0iZmxleCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPmdhdGV3YXkuc3RhdGlzdGljcy5taW4tcGFjay1zaXplLXRvLXNlbmQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGZvcm1Db250cm9sTmFtZT0ibWluUGFja1NpemVUb1NlbmQiIHR5cGU9Im51bWJlciIgbWluPSIwIi8+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdyZXF1aXJlZFwnKSI+XG4gICAgICAgICAgICAgICAge3sgXCdnYXRld2F5LnN0YXRpc3RpY3MubWluLXBhY2stc2l6ZS10by1zZW5kLXJlcXVpcmVkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICAgICAqbmdJZj0iYmFzaWNGb3JtR3JvdXAuZ2V0KFwndGhpbmdzYm9hcmQubWluUGFja1NpemVUb1NlbmRcJykuaGFzRXJyb3IoXCdtaW5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1taW5cJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgICAgICpuZ0lmPSJiYXNpY0Zvcm1Hcm91cC5nZXQoXCd0aGluZ3Nib2FyZC5taW5QYWNrU2l6ZVRvU2VuZFwnKS5oYXNFcnJvcihcJ3BhdHRlcm5cJykiPlxuICAgICAgICAgICAgICAgIHt7IFwnZ2F0ZXdheS5zdGF0aXN0aWNzLm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRJY29uU3VmZml4IHN0eWxlPSJjdXJzb3I6cG9pbnRlcjsiXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPSJ7eyBcJ2dhdGV3YXkuaGludHMubWluLXBhY2stc2l6ZS10by1zZW5kXCcgfCB0cmFuc2xhdGUgfX0iPmluZm9fb3V0bGluZWRcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbWF0LXRhYj5cbjwvbWF0LXRhYi1ncm91cD5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLXJvd3M6bWluLWNvbnRlbnQgbWlubWF4KGF1dG8sMWZyKSBtaW4tY29udGVudH06aG9zdCAuY29uZmlndXJhdGlvbi1ibG9ja3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoxNnB4O21heC1oZWlnaHQ6NzB2aH06aG9zdCAuZGlhbG9nLW1vZGUgLmNvbmZpZ3VyYXRpb24tYmxvY2t7bWF4LWhlaWdodDo2MHZofTpob3N0IC5tYXQtdG9vbGJhcntncmlkLXJvdzoxO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6IzAwMDAwMGRlIWltcG9ydGFudH06aG9zdCAudGFiLWdyb3VwLWJsb2Nre21pbi13aWR0aDowO2hlaWdodDoxMDAlO21pbi1oZWlnaHQ6MDtncmlkLXJvdzoyfTpob3N0IC50b2dnbGUtZ3JvdXB7bWFyZ2luLXJpZ2h0OmF1dG99Omhvc3QgLmZpcnN0LWNhcGl0YWx7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZX06aG9zdCB0ZXh0YXJlYXtyZXNpemU6bm9uZX06aG9zdCAuc2F2aW5nLXBlcmlvZHtmbGV4OjF9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVye3dpZHRoOjEwMCV9Omhvc3QgLnN0YXRpc3RpY3MtY29udGFpbmVyIC5jb21tYW5kLWNvbnRhaW5lcnt3aWR0aDoxMDAlfTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fTpob3N0IG1hdC1mb3JtLWZpZWxkIG1hdC1lcnJvcjpmaXJzdC1jaGlsZHtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH06aG9zdCA6Om5nLWRlZXAgLnBvaW50ZXItZXZlbnR7cG9pbnRlci1ldmVudHM6YWxsfTpob3N0IDo6bmctZGVlcCAudG9nZ2xlLWdyb3VwIHNwYW57cGFkZGluZzowIDI1cHh9Omhvc3QgOjpuZy1kZWVwIC5tYXQtbWRjLWZvcm0tZmllbGQtaWNvbi1zdWZmaXh7Y29sb3I6I2UwZTBlMH06aG9zdCA6Om5nLWRlZXAgLm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeDpob3Zlcntjb2xvcjojOWU5ZTllfTpob3N0IDo6bmctZGVlcCAubWF0LW1kYy1mb3JtLWZpZWxkLWljb24tc3VmZml4e2Rpc3BsYXk6ZmxleH1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkRldmljZVNlcnZpY2V9LHt0eXBlOnQuQ2hhbmdlRGV0ZWN0b3JSZWZ9LHt0eXBlOkplLk1hdERpYWxvZ31dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dNb2RlOlt7dHlwZTphfV0saW5pdGlhbENyZWRlbnRpYWxzVXBkYXRlZDpbe3R5cGU6bH1dfX0pO2NsYXNzIFBve2NvbnN0cnVjdG9yKGUpe3RoaXMuZmI9ZSx0aGlzLmRlc3Ryb3kkPW5ldyBTZSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2w9dGhpcy5mYi5jb250cm9sKCIiKSx0aGlzLmFkdmFuY2VkRm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoTmUodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZT0+e3RoaXMub25DaGFuZ2UoZSksdGhpcy5vblRvdWNoZWQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1yZWdpc3Rlck9uQ2hhbmdlKGUpe3RoaXMub25DaGFuZ2U9ZX1yZWdpc3Rlck9uVG91Y2hlZChlKXt0aGlzLm9uVG91Y2hlZD1lfXdyaXRlVmFsdWUoZSl7dGhpcy5hZHZhbmNlZEZvcm1Db250cm9sLnJlc2V0KGUse2VtaXRFdmVudDohMX0pfXZhbGlkYXRlKCl7cmV0dXJuIHRoaXMuYWR2YW5jZWRGb3JtQ29udHJvbC52YWxpZD9udWxsOnthZHZhbmNlZEZvcm1Db250cm9sOnt2YWxpZDohMX19fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfV0sdGFyZ2V0OnQuybXJtUZhY3RvcnlUYXJnZXQuQ29tcG9uZW50fSl9c3RhdGlje3RoaXMuybVjbXA9dC7Jtcm1bmdEZWNsYXJlQ29tcG9uZW50KHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsdHlwZTpQbyxpc1N0YW5kYWxvbmU6ITAsc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIscHJvdmlkZXJzOlt7cHJvdmlkZTpnZSx1c2VFeGlzdGluZzptKCgoKT0+UG8pKSxtdWx0aTohMH0se3Byb3ZpZGU6ZmUsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9XSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48dGItanNvbi1vYmplY3QtZWRpdFxuICBmaWxsSGVpZ2h0PSJ0cnVlIlxuICBjbGFzcz0idGItZmxleCBjb25maWctY29udGFpbmVyIlxuICBmeExheW91dD0iY29sdW1uIlxuICBqc29uUmVxdWlyZWRcbiAgbGFiZWw9Int7IFwnZ2F0ZXdheS5jb25maWd1cmF0aW9uXCcgfCB0cmFuc2xhdGUgfX0iXG4gIFtmb3JtQ29udHJvbF09ImFkdmFuY2VkRm9ybUNvbnRyb2wiXG4vPlxuJyxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOzpob3N0IC5jb25maWctY29udGFpbmVye2hlaWdodDpjYWxjKDEwMCUgLSA2MHB4KTtwYWRkaW5nOjhweH1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6Im5nbW9kdWxlIix0eXBlOkh9LHtraW5kOiJuZ21vZHVsZSIsdHlwZTpEfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOnZ0Lkpzb25PYmplY3RFZGl0Q29tcG9uZW50LHNlbGVjdG9yOiJ0Yi1qc29uLW9iamVjdC1lZGl0IixpbnB1dHM6WyJsYWJlbCIsImRpc2FibGVkIiwiZmlsbEhlaWdodCIsImVkaXRvclN0eWxlIiwic29ydCIsImpzb25SZXF1aXJlZCIsInJlYWRvbmx5Il19LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6ai5EZWZhdWx0TGF5b3V0RGlyZWN0aXZlLHNlbGVjdG9yOiIgIFtmeExheW91dF0sIFtmeExheW91dC54c10sIFtmeExheW91dC5zbV0sIFtmeExheW91dC5tZF0sICBbZnhMYXlvdXQubGddLCBbZnhMYXlvdXQueGxdLCBbZnhMYXlvdXQubHQtc21dLCBbZnhMYXlvdXQubHQtbWRdLCAgW2Z4TGF5b3V0Lmx0LWxnXSwgW2Z4TGF5b3V0Lmx0LXhsXSwgW2Z4TGF5b3V0Lmd0LXhzXSwgW2Z4TGF5b3V0Lmd0LXNtXSwgIFtmeExheW91dC5ndC1tZF0sIFtmeExheW91dC5ndC1sZ10iLGlucHV0czpbImZ4TGF5b3V0IiwiZnhMYXlvdXQueHMiLCJmeExheW91dC5zbSIsImZ4TGF5b3V0Lm1kIiwiZnhMYXlvdXQubGciLCJmeExheW91dC54bCIsImZ4TGF5b3V0Lmx0LXNtIiwiZnhMYXlvdXQubHQtbWQiLCJmeExheW91dC5sdC1sZyIsImZ4TGF5b3V0Lmx0LXhsIiwiZnhMYXlvdXQuZ3QteHMiLCJmeExheW91dC5ndC1zbSIsImZ4TGF5b3V0Lmd0LW1kIiwiZnhMYXlvdXQuZ3QtbGciXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbERpcmVjdGl2ZSxzZWxlY3RvcjoiW2Zvcm1Db250cm9sXSIsaW5wdXRzOlsiZm9ybUNvbnRyb2wiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdLGV4cG9ydEFzOlsibmdGb3JtIl19LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUFkdmFuY2VkQ29uZmlndXJhdGlvbkNvbXBvbmVudCIsUG8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6UG8sZGVjb3JhdG9yczpbe3R5cGU6bixhcmdzOlt7c2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiIsc3RhbmRhbG9uZTohMCxpbXBvcnRzOltILERdLHByb3ZpZGVyczpbe3Byb3ZpZGU6Z2UsdXNlRXhpc3Rpbmc6bSgoKCk9PlBvKSksbXVsdGk6ITB9LHtwcm92aWRlOmZlLHVzZUV4aXN0aW5nOm0oKCgpPT5QbykpLG11bHRpOiEwfV0sdGVtcGxhdGU6J1x4M2MhLS1cbiAgQ29weXJpZ2h0IMKpIDIwMTYtMjAyNCBUaGUgVGhpbmdzYm9hcmQgQXV0aG9yc1xuXG4gIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpO1xuICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsXG4gIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuLS1ceDNlXG5cbjx0Yi1qc29uLW9iamVjdC1lZGl0XG4gIGZpbGxIZWlnaHQ9InRydWUiXG4gIGNsYXNzPSJ0Yi1mbGV4IGNvbmZpZy1jb250YWluZXIiXG4gIGZ4TGF5b3V0PSJjb2x1bW4iXG4gIGpzb25SZXF1aXJlZFxuICBsYWJlbD0ie3sgXCdnYXRld2F5LmNvbmZpZ3VyYXRpb25cJyB8IHRyYW5zbGF0ZSB9fSJcbiAgW2Zvcm1Db250cm9sXT0iYWR2YW5jZWRGb3JtQ29udHJvbCJcbi8+XG4nLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Omhvc3QgLmNvbmZpZy1jb250YWluZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIDYwcHgpO3BhZGRpbmc6OHB4fVxuJ119XX1dLGN0b3JQYXJhbWV0ZXJzOigpPT5be3R5cGU6bWUuRm9ybUJ1aWxkZXJ9XX0pO2NsYXNzIEdve2NvbnN0cnVjdG9yKGUsdCxuLGEpe3RoaXMuZmI9ZSx0aGlzLmF0dHJpYnV0ZVNlcnZpY2U9dCx0aGlzLmRldmljZVNlcnZpY2U9bix0aGlzLmNkPWEsdGhpcy5Db25maWd1cmF0aW9uTW9kZXM9b24sdGhpcy5kZXN0cm95JD1uZXcgU2UsdGhpcy5nYXRld2F5Q29uZmlnQXR0cmlidXRlS2V5cz1bImdlbmVyYWxfY29uZmlndXJhdGlvbiIsImdycGNfY29uZmlndXJhdGlvbiIsImxvZ3NfY29uZmlndXJhdGlvbiIsInN0b3JhZ2VfY29uZmlndXJhdGlvbiIsIlJlbW90ZUxvZ2dpbmdMZXZlbCIsIm1vZGUiXSx0aGlzLmdhdGV3YXlDb25maWdHcm91cD10aGlzLmZiLmdyb3VwKHtiYXNpY0NvbmZpZzpbXSxhZHZhbmNlZENvbmZpZzpbXSxtb2RlOltvbi5CQVNJQ119KSx0aGlzLm9ic2VydmVBbGlnbkNvbmZpZ3MoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmZldGNoQ29uZmlnQXR0cmlidXRlKHRoaXMuZGV2aWNlKX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpLHRoaXMuZGVzdHJveSQuY29tcGxldGUoKX1zYXZlQ29uZmlnKCl7Y29uc3R7bW9kZTplLGFkdmFuY2VkQ29uZmlnOnR9PXBlKHRoaXMucmVtb3ZlRW1wdHkodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAudmFsdWUpKSxuPXttb2RlOmUsLi4udH07bi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPU9iamVjdC52YWx1ZXMobi50aGluZ3Nib2FyZC5zdGF0aXN0aWNzLmNvbW1hbmRzPz9bXSk7Y29uc3QgYT10aGlzLmdlbmVyYXRlQXR0cmlidXRlcyhuKTt0aGlzLmF0dHJpYnV0ZVNlcnZpY2Uuc2F2ZUVudGl0eUF0dHJpYnV0ZXModGhpcy5kZXZpY2UsTC5TSEFSRURfU0NPUEUsYSkucGlwZShVZSgoZT0+dGhpcy51cGRhdGVDcmVkZW50aWFscyhuLnRoaW5nc2JvYXJkLnNlY3VyaXR5KSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCgpPT57dGhpcy5kaWFsb2dSZWY/dGhpcy5kaWFsb2dSZWYuY2xvc2UoKToodGhpcy5nYXRld2F5Q29uZmlnR3JvdXAubWFya0FzUHJpc3RpbmUoKSx0aGlzLmNkLmRldGVjdENoYW5nZXMoKSl9KSl9b2JzZXJ2ZUFsaWduQ29uZmlncygpe3RoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5CQVNJQ3x8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYWR2YW5jZWRDb25maWciKS52YWx1ZUNoYW5nZXMucGlwZShOZSh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlPT57Y29uc3QgdD10aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImJhc2ljQ29uZmlnIik7ZWUodC52YWx1ZSxlKXx8dGhpcy5nYXRld2F5Q29uZmlnR3JvdXAuZ2V0KCJtb2RlIikudmFsdWUhPT1vbi5BRFZBTkNFRHx8dC5wYXRjaFZhbHVlKGUse2VtaXRFdmVudDohMX0pfSkpfWdlbmVyYXRlQXR0cmlidXRlcyhlKXtjb25zdCB0PVtdLG49KGUsbik9Pnt0LnB1c2goe2tleTplLHZhbHVlOm59KX0sYT0oZSx0KT0+e3Q9ey4uLnQsdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9LG4oZSx0KX07cmV0dXJuIG4oIlJlbW90ZUxvZ2dpbmdMZXZlbCIsZS5sb2dzPy5yZW1vdGU/LmVuYWJsZWQ/ZS5sb2dzLnJlbW90ZS5sb2dMZXZlbDpNdC5OT05FKSxkZWxldGUgZS5jb25uZWN0b3JzLG4oImxvZ3NfY29uZmlndXJhdGlvbiIsdGhpcy5nZW5lcmF0ZUxvZ3NGaWxlKGUubG9ncykpLGEoImdycGNfY29uZmlndXJhdGlvbiIsZS5ncnBjKSxhKCJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iLGUuc3RvcmFnZSksYSgiZ2VuZXJhbF9jb25maWd1cmF0aW9uIixlLnRoaW5nc2JvYXJkKSxuKCJtb2RlIixlLm1vZGUpLHR9dXBkYXRlQ3JlZGVudGlhbHMoZSl7bGV0IHQ9e307c3dpdGNoKGUudHlwZSl7Y2FzZSBWdC5VU0VSTkFNRV9QQVNTV09SRDp0aGlzLnNob3VsZFVwZGF0ZUNyZWRlbnRpYWxzKGUpJiYodD10aGlzLmdlbmVyYXRlTXF0dENyZWRlbnRpYWxzKGUpKTticmVhaztjYXNlIFZ0LkFDQ0VTU19UT0tFTjpjYXNlIFZ0LlRMU19BQ0NFU1NfVE9LRU46dGhpcy5zaG91bGRVcGRhdGVBY2Nlc3NUb2tlbihlKSYmKHQ9e2NyZWRlbnRpYWxzVHlwZTpVLkFDQ0VTU19UT0tFTixjcmVkZW50aWFsc0lkOmUuYWNjZXNzVG9rZW59KX1yZXR1cm4gT2JqZWN0LmtleXModCkubGVuZ3RoP3RoaXMuZGV2aWNlU2VydmljZS5zYXZlRGV2aWNlQ3JlZGVudGlhbHMoey4uLnRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLC4uLnR9KTpJZShudWxsKX1zaG91bGRVcGRhdGVDcmVkZW50aWFscyhlKXtpZih0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLk1RVFRfQkFTSUMpcmV0dXJuITA7Y29uc3QgdD1KU09OLnBhcnNlKHRoaXMuaW5pdGlhbENyZWRlbnRpYWxzLmNyZWRlbnRpYWxzVmFsdWUpO3JldHVybiEodC5jbGllbnRJZD09PWUuY2xpZW50SWQmJnQudXNlck5hbWU9PT1lLnVzZXJuYW1lJiZ0LnBhc3N3b3JkPT09ZS5wYXNzd29yZCl9Z2VuZXJhdGVNcXR0Q3JlZGVudGlhbHMoZSl7Y29uc3R7Y2xpZW50SWQ6dCx1c2VybmFtZTpuLHBhc3N3b3JkOmF9PWUsbz17Li4udCYme2NsaWVudElkOnR9LC4uLm4mJnt1c2VyTmFtZTpufSwuLi5hJiZ7cGFzc3dvcmQ6YX19O3JldHVybntjcmVkZW50aWFsc1R5cGU6VS5NUVRUX0JBU0lDLGNyZWRlbnRpYWxzVmFsdWU6SlNPTi5zdHJpbmdpZnkobyl9fXNob3VsZFVwZGF0ZUFjY2Vzc1Rva2VuKGUpe3JldHVybiB0aGlzLmluaXRpYWxDcmVkZW50aWFscy5jcmVkZW50aWFsc1R5cGUhPT1VLkFDQ0VTU19UT0tFTnx8dGhpcy5pbml0aWFsQ3JlZGVudGlhbHMuY3JlZGVudGlhbHNJZCE9PWUuYWNjZXNzVG9rZW59Y2FuY2VsKCl7dGhpcy5kaWFsb2dSZWYmJnRoaXMuZGlhbG9nUmVmLmNsb3NlKCl9cmVtb3ZlRW1wdHkoZSl7cmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhlKS5maWx0ZXIoKChbZSx0XSk9Pm51bGwhPXQpKS5tYXAoKChbZSx0XSk9PltlLHQ9PT1PYmplY3QodCk/dGhpcy5yZW1vdmVFbXB0eSh0KTp0XSkpKX1nZW5lcmF0ZUxvZ3NGaWxlKGUpe2NvbnN0IHQ9e3ZlcnNpb246MSxkaXNhYmxlX2V4aXN0aW5nX2xvZ2dlcnM6ITEsZm9ybWF0dGVyczp7TG9nRm9ybWF0dGVyOntjbGFzczoibG9nZ2luZy5Gb3JtYXR0ZXIiLGZvcm1hdDplLmxvZ0Zvcm1hdCxkYXRlZm10OmUuZGF0ZUZvcm1hdH19LGhhbmRsZXJzOntjb25zb2xlSGFuZGxlcjp7Y2xhc3M6ImxvZ2dpbmcuU3RyZWFtSGFuZGxlciIsZm9ybWF0dGVyOiJMb2dGb3JtYXR0ZXIiLGxldmVsOjAsc3RyZWFtOiJleHQ6Ly9zeXMuc3Rkb3V0In0sZGF0YWJhc2VIYW5kbGVyOntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6Ii4vbG9ncy9kYXRhYmFzZS5sb2ciLGJhY2t1cENvdW50OjEsZW5jb2Rpbmc6InV0Zi04In19LGxvZ2dlcnM6e2RhdGFiYXNlOntoYW5kbGVyczpbImRhdGFiYXNlSGFuZGxlciIsImNvbnNvbGVIYW5kbGVyIl0sbGV2ZWw6IkRFQlVHIixwcm9wYWdhdGU6ITF9fSxyb290OntsZXZlbDoiRVJST1IiLGhhbmRsZXJzOlsiY29uc29sZUhhbmRsZXIiXX0sdHM6KG5ldyBEYXRlKS5nZXRUaW1lKCl9O3JldHVybiB0aGlzLmFkZExvY2FsTG9nZ2Vycyh0LGUubG9jYWwpLHR9YWRkTG9jYWxMb2dnZXJzKGUsdCl7Zm9yKGNvbnN0IG4gb2YgT2JqZWN0LmtleXModCkpZS5oYW5kbGVyc1tuKyJIYW5kbGVyIl09dGhpcy5jcmVhdGVIYW5kbGVyT2JqKHRbbl0sbiksZS5sb2dnZXJzW25dPXRoaXMuY3JlYXRlTG9nZ2VyT2JqKHRbbl0sbil9Y3JlYXRlSGFuZGxlck9iaihlLHQpe3JldHVybntjbGFzczoidGhpbmdzYm9hcmRfZ2F0ZXdheS50Yl91dGlsaXR5LnRiX2hhbmRsZXIuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIixmb3JtYXR0ZXI6IkxvZ0Zvcm1hdHRlciIsZmlsZW5hbWU6YCR7ZS5maWxlUGF0aH0vJHt0fS5sb2dgLGJhY2t1cENvdW50OmUuYmFja3VwQ291bnQsaW50ZXJ2YWw6ZS5zYXZpbmdUaW1lLHdoZW46ZS5zYXZpbmdQZXJpb2QsZW5jb2Rpbmc6InV0Zi04In19Y3JlYXRlTG9nZ2VyT2JqKGUsdCl7cmV0dXJue2hhbmRsZXJzOltgJHt0fUhhbmRsZXJgLCJjb25zb2xlSGFuZGxlciJdLGxldmVsOmUubG9nTGV2ZWwscHJvcGFnYXRlOiExfX1mZXRjaENvbmZpZ0F0dHJpYnV0ZShlKXtlLmlkIT09ayYmdGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLkNMSUVOVF9TQ09QRSkucGlwZShfZSgodD0+dC5sZW5ndGg/SWUodCk6dGhpcy5hdHRyaWJ1dGVTZXJ2aWNlLmdldEVudGl0eUF0dHJpYnV0ZXMoZSxMLlNIQVJFRF9TQ09QRSx0aGlzLmdhdGV3YXlDb25maWdBdHRyaWJ1dGVLZXlzKSkpLE5lKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGU9Pnt0aGlzLnVwZGF0ZUNvbmZpZ3MoZSksdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCl9KSl9dXBkYXRlQ29uZmlncyhlKXtjb25zdCB0PXt0aGluZ3Nib2FyZDp7fSxncnBjOnt9LGxvZ3M6e30sc3RvcmFnZTp7fSxtb2RlOm9uLkJBU0lDfTtlLmZvckVhY2goKGU9Pntzd2l0Y2goZS5rZXkpe2Nhc2UiZ2VuZXJhbF9jb25maWd1cmF0aW9uIjp0LnRoaW5nc2JvYXJkPWUudmFsdWUsdGhpcy51cGRhdGVGb3JtQ29udHJvbHMoZS52YWx1ZSk7YnJlYWs7Y2FzZSJncnBjX2NvbmZpZ3VyYXRpb24iOnQuZ3JwYz1lLnZhbHVlO2JyZWFrO2Nhc2UibG9nc19jb25maWd1cmF0aW9uIjp0LmxvZ3M9dGhpcy5sb2dzVG9PYmooZS52YWx1ZSk7YnJlYWs7Y2FzZSJzdG9yYWdlX2NvbmZpZ3VyYXRpb24iOnQuc3RvcmFnZT1lLnZhbHVlO2JyZWFrO2Nhc2UibW9kZSI6dC5tb2RlPWUudmFsdWU7YnJlYWs7Y2FzZSJSZW1vdGVMb2dnaW5nTGV2ZWwiOnQubG9ncz17Li4udC5sb2dzLHJlbW90ZTp7ZW5hYmxlZDplLnZhbHVlIT09TXQuTk9ORSxsb2dMZXZlbDplLnZhbHVlfX19fSkpLHRoaXMuZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldCgiYmFzaWNDb25maWciKS5zZXRWYWx1ZSh0LHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmdhdGV3YXlDb25maWdHcm91cC5nZXQoImFkdmFuY2VkQ29uZmlnIikuc2V0VmFsdWUodCx7ZW1pdEV2ZW50OiExfSl9dXBkYXRlRm9ybUNvbnRyb2xzKGUpe2NvbnN0e3R5cGU6dCxhY2Nlc3NUb2tlbjpuLC4uLmF9PWUuc2VjdXJpdHk/P3t9O3RoaXMuaW5pdGlhbENyZWRlbnRpYWxzPXtkZXZpY2VJZDp0aGlzLmRldmljZSxjcmVkZW50aWFsc1R5cGU6dCxjcmVkZW50aWFsc0lkOm4sY3JlZGVudGlhbHNWYWx1ZTpKU09OLnN0cmluZ2lmeShhKX19bG9nc1RvT2JqKGUpe2NvbnN0e2Zvcm1hdDp0LGRhdGVmbXQ6bn09ZS5mb3JtYXR0ZXJzLkxvZ0Zvcm1hdHRlcjtyZXR1cm57bG9jYWw6T2JqZWN0LmtleXMoUHQpLnJlZHVjZSgoKHQsbik9Pntjb25zdCBhPWUuaGFuZGxlcnNbYCR7bn1IYW5kbGVyYF18fHt9LG89ZS5sb2dnZXJzW25dfHx7fTtyZXR1cm4gdFtuXT17bG9nTGV2ZWw6by5sZXZlbHx8TXQuSU5GTyxmaWxlUGF0aDphLmZpbGVuYW1lPy5zcGxpdChgLyR7bn1gKVswXXx8Ii4vbG9ncyIsYmFja3VwQ291bnQ6YS5iYWNrdXBDb3VudHx8NyxzYXZpbmdUaW1lOmEuaW50ZXJ2YWx8fDMsc2F2aW5nUGVyaW9kOmEud2hlbnx8RHQuZGF5c30sdH0pLHt9KSxsb2dGb3JtYXQ6dCxkYXRlRm9ybWF0Om59fXN0YXRpY3t0aGlzLsm1ZmFjPXQuybXJtW5nRGVjbGFyZUZhY3Rvcnkoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6R28sZGVwczpbe3Rva2VuOm1lLkZvcm1CdWlsZGVyfSx7dG9rZW46WC5BdHRyaWJ1dGVTZXJ2aWNlfSx7dG9rZW46WC5EZXZpY2VTZXJ2aWNlfSx7dG9rZW46dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHRhcmdldDp0Lsm1ybVGYWN0b3J5VGFyZ2V0LkNvbXBvbmVudH0pfXN0YXRpY3t0aGlzLsm1Y21wPXQuybXJtW5nRGVjbGFyZUNvbXBvbmVudCh7bWluVmVyc2lvbjoiMTQuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLHR5cGU6R28sc2VsZWN0b3I6InRiLWdhdGV3YXktY29uZmlndXJhdGlvbiIsaW5wdXRzOntkZXZpY2U6ImRldmljZSIsZGlhbG9nUmVmOiJkaWFsb2dSZWYifSxuZ0ltcG9ydDp0LHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddLGRlcGVuZGVuY2llczpbe2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTpfLk5nSWYsc2VsZWN0b3I6IltuZ0lmXSIsaW5wdXRzOlsibmdJZiIsIm5nSWZUaGVuIiwibmdJZkVsc2UiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpiZS5NYXRCdXR0b24sc2VsZWN0b3I6IiAgICBidXR0b25bbWF0LWJ1dHRvbl0sIGJ1dHRvblttYXQtcmFpc2VkLWJ1dHRvbl0sIGJ1dHRvblttYXQtZmxhdC1idXR0b25dLCAgICBidXR0b25bbWF0LXN0cm9rZWQtYnV0dG9uXSAgIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOmJlLk1hdEljb25CdXR0b24sc2VsZWN0b3I6ImJ1dHRvblttYXQtaWNvbi1idXR0b25dIixleHBvcnRBczpbIm1hdEJ1dHRvbiJdfSx7a2luZDoiY29tcG9uZW50Iix0eXBlOktlLk1hdEljb24sc2VsZWN0b3I6Im1hdC1pY29uIixpbnB1dHM6WyJjb2xvciIsImlubGluZSIsInN2Z0ljb24iLCJmb250U2V0IiwiZm9udEljb24iXSxleHBvcnRBczpbIm1hdEljb24iXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTpydC5NYXRUb29sYmFyLHNlbGVjdG9yOiJtYXQtdG9vbGJhciIsaW5wdXRzOlsiY29sb3IiXSxleHBvcnRBczpbIm1hdFRvb2xiYXIiXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXMsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdLFtuZ01vZGVsXSxbZm9ybUNvbnRyb2xdIn0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5OZ0NvbnRyb2xTdGF0dXNHcm91cCxzZWxlY3RvcjoiW2Zvcm1Hcm91cE5hbWVdLFtmb3JtQXJyYXlOYW1lXSxbbmdNb2RlbEdyb3VwXSxbZm9ybUdyb3VwXSxmb3JtOm5vdChbbmdOb0Zvcm1dKSxbbmdGb3JtXSJ9LHtraW5kOiJkaXJlY3RpdmUiLHR5cGU6bWUuRm9ybUdyb3VwRGlyZWN0aXZlLHNlbGVjdG9yOiJbZm9ybUdyb3VwXSIsaW5wdXRzOlsiZm9ybUdyb3VwIl0sb3V0cHV0czpbIm5nU3VibWl0Il0sZXhwb3J0QXM6WyJuZ0Zvcm0iXX0se2tpbmQ6ImRpcmVjdGl2ZSIsdHlwZTptZS5Gb3JtQ29udHJvbE5hbWUsc2VsZWN0b3I6Iltmb3JtQ29udHJvbE5hbWVdIixpbnB1dHM6WyJmb3JtQ29udHJvbE5hbWUiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxvdXRwdXRzOlsibmdNb2RlbENoYW5nZSJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOlkuVHJhbnNsYXRlRGlyZWN0aXZlLHNlbGVjdG9yOiJbdHJhbnNsYXRlXSxbbmd4LXRyYW5zbGF0ZV0iLGlucHV0czpbInRyYW5zbGF0ZSIsInRyYW5zbGF0ZVBhcmFtcyJdfSx7a2luZDoiZGlyZWN0aXZlIix0eXBlOm50LlRvZ2dsZU9wdGlvbixzZWxlY3RvcjoidGItdG9nZ2xlLW9wdGlvbiIsaW5wdXRzOlsidmFsdWUiXX0se2tpbmQ6ImNvbXBvbmVudCIsdHlwZTphdC5Ub2dnbGVTZWxlY3RDb21wb25lbnQsc2VsZWN0b3I6InRiLXRvZ2dsZS1zZWxlY3QiLGlucHV0czpbImRpc2FibGVkIiwic2VsZWN0TWVkaWFCcmVha3BvaW50IiwiYXBwZWFyYW5jZSIsImRpc2FibGVQYWdpbmF0aW9uIiwiZmlsbEhlaWdodCIsImV4dHJhUGFkZGluZyIsInByaW1hcnlCYWNrZ3JvdW5kIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6RG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYmFzaWMtY29uZmlndXJhdGlvbiIsaW5wdXRzOlsiZGV2aWNlIiwiZGlhbG9nTW9kZSJdLG91dHB1dHM6WyJpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkIl19LHtraW5kOiJjb21wb25lbnQiLHR5cGU6UG8sc2VsZWN0b3I6InRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvbiJ9LHtraW5kOiJwaXBlIix0eXBlOlkuVHJhbnNsYXRlUGlwZSxuYW1lOiJ0cmFuc2xhdGUifV19KX19ZSgiR2F0ZXdheUNvbmZpZ3VyYXRpb25Db21wb25lbnQiLEdvKSx0Lsm1ybVuZ0RlY2xhcmVDbGFzc01ldGFkYXRhKHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOkdvLGRlY29yYXRvcnM6W3t0eXBlOm4sYXJnczpbe3NlbGVjdG9yOiJ0Yi1nYXRld2F5LWNvbmZpZ3VyYXRpb24iLHRlbXBsYXRlOidceDNjIS0tXG4gIENvcHlyaWdodCDCqSAyMDE2LTIwMjQgVGhlIFRoaW5nc2JvYXJkIEF1dGhvcnNcblxuICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTtcbiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLFxuICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbi0tXHgzZVxuXG48ZGl2IFtmb3JtR3JvdXBdPSJnYXRld2F5Q29uZmlnR3JvdXAiIGNsYXNzPSJnYXRld2F5LWNvbmZpZy1jb250YWluZXIiPlxuICA8ZGl2IGNsYXNzPSJjb250ZW50LXdyYXBwZXIiPlxuICAgIDxtYXQtdG9vbGJhciBjb2xvcj0icHJpbWFyeSIgW2NsYXNzLnBhZ2UtaGVhZGVyXT0iIWRpYWxvZ1JlZiI+XG4gICAgICA8ZGl2IGNsYXNzPSJ0Yi1mbGV4IHNwYWNlLWJldHdlZW4gYWxpZ24tY2VudGVyIj5cbiAgICAgICAgPGgyIHRyYW5zbGF0ZT5nYXRld2F5LmdhdGV3YXktY29uZmlndXJhdGlvbjwvaDI+XG4gICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYWN0aW9ucyI+XG4gICAgICAgICAgPHRiLXRvZ2dsZS1zZWxlY3QgW2NsYXNzLmRpYWxvZy10b2dnbGVdPSIhIWRpYWxvZ1JlZiIgZm9ybUNvbnRyb2xOYW1lPSJtb2RlIiBhcHBlYXJhbmNlPSJ7e2RpYWxvZ1JlZiA/IFwnc3Ryb2tlZFwnIDogXCdmaWxsXCd9fSI+XG4gICAgICAgICAgICA8dGItdG9nZ2xlLW9wdGlvbiBbdmFsdWVdPSJDb25maWd1cmF0aW9uTW9kZXMuQkFTSUMiPlxuICAgICAgICAgICAgICB7eyBcJ2dhdGV3YXkuYmFzaWNcJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC90Yi10b2dnbGUtb3B0aW9uPlxuICAgICAgICAgICAgPHRiLXRvZ2dsZS1vcHRpb24gW3ZhbHVlXT0iQ29uZmlndXJhdGlvbk1vZGVzLkFEVkFOQ0VEIj5cbiAgICAgICAgICAgICAge3sgXCdnYXRld2F5LmFkdmFuY2VkXCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvdGItdG9nZ2xlLW9wdGlvbj5cbiAgICAgICAgICA8L3RiLXRvZ2dsZS1zZWxlY3Q+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj0iZGlhbG9nUmVmIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT0iY2FuY2VsKCkiIHR5cGU9ImJ1dHRvbiI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9Im1hdGVyaWFsLWljb25zIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtdG9vbGJhcj5cbiAgICA8dGItZ2F0ZXdheS1iYXNpYy1jb25maWd1cmF0aW9uXG4gICAgICAqbmdJZj0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmdldChcJ21vZGVcJykudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Nb2Rlcy5CQVNJQyJcbiAgICAgIGZvcm1Db250cm9sTmFtZT0iYmFzaWNDb25maWciXG4gICAgICBbZGV2aWNlXT0iZGV2aWNlIlxuICAgICAgW2RpYWxvZ01vZGVdPSIhIWRpYWxvZ1JlZiJcbiAgICAgIChpbml0aWFsQ3JlZGVudGlhbHNVcGRhdGVkKT0iaW5pdGlhbENyZWRlbnRpYWxzID0gJGV2ZW50IlxuICAgIC8+XG4gICAgPHRiLWdhdGV3YXktYWR2YW5jZWQtY29uZmlndXJhdGlvblxuICAgICAgKm5nSWY9ImdhdGV3YXlDb25maWdHcm91cC5nZXQoXCdtb2RlXCcpLnZhbHVlID09PSBDb25maWd1cmF0aW9uTW9kZXMuQURWQU5DRUQiXG4gICAgICBmb3JtQ29udHJvbE5hbWU9ImFkdmFuY2VkQ29uZmlnIlxuICAgIC8+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPSJhY3Rpb25zIj5cbiAgICA8YnV0dG9uIG1hdC1idXR0b24gY29sb3I9InByaW1hcnkiXG4gICAgICAgICAgICB0eXBlPSJidXR0b24iXG4gICAgICAgICAgICAqbmdJZj0iZGlhbG9nUmVmIlxuICAgICAgICAgICAgKGNsaWNrKT0iY2FuY2VsKCkiPlxuICAgICAge3sgXCdhY3Rpb24uY2FuY2VsXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPSJwcmltYXJ5IlxuICAgICAgICAgICAgdHlwZT0iYnV0dG9uIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT0iZ2F0ZXdheUNvbmZpZ0dyb3VwLmludmFsaWQgfHwgIWdhdGV3YXlDb25maWdHcm91cC5kaXJ0eSJcbiAgICAgICAgICAgIChjbGljayk9InNhdmVDb25maWcoKSI+XG4gICAgICB7eyBcJ2FjdGlvbi5zYXZlXCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbicsc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijs6aG9zdHt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6aGlkZGVufTpob3N0IC5wYWdlLWhlYWRlci5tYXQtdG9vbGJhcntiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiMwMDAwMDBkZSFpbXBvcnRhbnR9Omhvc3QgLmFjdGlvbnN7Z3JpZC1yb3c6MztwYWRkaW5nOjhweCAxNnB4IDhweCA4cHg7ZGlzcGxheTpmbGV4O2dhcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTowO3JpZ2h0OjA7ei1pbmRleDoxO2JhY2tncm91bmQ6I2ZmZjt3aWR0aDoxMDAlfTpob3N0IC5nYXRld2F5LWNvbmZpZy1jb250YWluZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtoZWlnaHQ6MTAwJTtvdmVyZmxvdzpoaWRkZW59Omhvc3QgLmNvbnRlbnQtd3JhcHBlcntmbGV4OjF9Omhvc3QgLnRvb2xiYXItYWN0aW9uc3tkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kaWFsb2ctdG9nZ2xlIDo6bmctZGVlcCAubWF0LWJ1dHRvbi10b2dnbGUtYnV0dG9ue2NvbG9yOiNmZmZmZmZiZn1cbiddfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOm1lLkZvcm1CdWlsZGVyfSx7dHlwZTpYLkF0dHJpYnV0ZVNlcnZpY2V9LHt0eXBlOlguRGV2aWNlU2VydmljZX0se3R5cGU6dC5DaGFuZ2VEZXRlY3RvclJlZn1dLHByb3BEZWNvcmF0b3JzOntkZXZpY2U6W3t0eXBlOmF9XSxkaWFsb2dSZWY6W3t0eXBlOmF9XX19KTt2YXIgT289e2dhdGV3YXk6e2FkZHJlc3M6IkFkZHJlc3MiLCJhZGRyZXNzLXJlcXVpcmVkIjoiQWRkcmVzcyByZXF1aXJlZCIsImFkZC1lbnRyeSI6IkFkZCBjb25maWd1cmF0aW9uIiwiYWRkLWF0dHJpYnV0ZSI6IkFkZCBhdHRyaWJ1dGUiLCJhZGQtYXR0cmlidXRlLXVwZGF0ZSI6IkFkZCBhdHRyaWJ1dGUgdXBkYXRlIiwiYWRkLWtleSI6IkFkZCBrZXkiLCJhZGQtdGltZXNlcmllcyI6IkFkZCB0aW1lIHNlcmllcyIsImFkZC1tYXBwaW5nIjoiQWRkIG1hcHBpbmciLCJhZGQtc2xhdmUiOiJBZGQgU2xhdmUiLGFyZ3VtZW50czoiQXJndW1lbnRzIiwiYWRkLXJwYy1tZXRob2QiOiJBZGQgbWV0aG9kIiwiYWRkLXJwYy1yZXF1ZXN0IjoiQWRkIHJlcXVlc3QiLCJhZGQtdmFsdWUiOiJBZGQgYXJndW1lbnQiLGJhdWRyYXRlOiJCYXVkcmF0ZSIsYnl0ZXNpemU6IkJ5dGVzaXplIiwiZGVsZXRlLXZhbHVlIjoiRGVsZXRlIHZhbHVlIiwiZGVsZXRlLXJwYy1tZXRob2QiOiJEZWxldGUgbWV0aG9kIiwiZGVsZXRlLXJwYy1yZXF1ZXN0IjoiRGVsZXRlIHJlcXVlc3QiLCJkZWxldGUtYXR0cmlidXRlLXVwZGF0ZSI6IkRlbGV0ZSBhdHRyaWJ1dGUgdXBkYXRlIixhZHZhbmNlZDoiQWR2YW5jZWQiLCJhZHZhbmNlZC1jb25uZWN0aW9uLXNldHRpbmdzIjoiQWR2YW5jZWQgY29ubmVjdGlvbiBzZXR0aW5ncyIsYXR0cmlidXRlczoiQXR0cmlidXRlcyIsImF0dHJpYnV0ZS11cGRhdGVzIjoiQXR0cmlidXRlIHVwZGF0ZXMiLCJhdHRyaWJ1dGUtZmlsdGVyIjoiQXR0cmlidXRlIGZpbHRlciIsImF0dHJpYnV0ZS1maWx0ZXItaGludCI6IkZpbHRlciBmb3IgaW5jb21pbmcgYXR0cmlidXRlIG5hbWUgZnJvbSBwbGF0Zm9ybSwgc3VwcG9ydHMgcmVndWxhciBleHByZXNzaW9uLiIsImF0dHJpYnV0ZS1maWx0ZXItcmVxdWlyZWQiOiJBdHRyaWJ1dGUgZmlsdGVyIHJlcXVpcmVkLiIsImF0dHJpYnV0ZS1uYW1lLWV4cHJlc3Npb24iOiJBdHRyaWJ1dGUgbmFtZSBleHByZXNzaW9uIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGV4cHJlc3Npb24gcmVxdWlyZWQuIiwiYXR0cmlidXRlLW5hbWUtZXhwcmVzc2lvbi1oaW50IjoiSGludCBmb3IgQXR0cmlidXRlIG5hbWUgZXhwcmVzc2lvbiIsYmFzaWM6IkJhc2ljIiwiYnl0ZS1vcmRlciI6IkJ5dGUgb3JkZXIiLCJ3b3JkLW9yZGVyIjoiV29yZCBvcmRlciIsYnJva2VyOntjb25uZWN0aW9uOiJDb25uZWN0aW9uIHRvIGJyb2tlciIsbmFtZToiQnJva2VyIG5hbWUiLCJuYW1lLXJlcXVpcmVkIjoiQnJva2VyIG5hbWUgcmVxdWlyZWQuIiwic2VjdXJpdHktdHlwZXMiOnthbm9ueW1vdXM6IkFub255bW91cyIsYmFzaWM6IkJhc2ljIixjZXJ0aWZpY2F0ZXM6IkNlcnRpZmljYXRlcyJ9fSwiQ0EtY2VydGlmaWNhdGUtcGF0aCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsInBhdGgtdG8tQ0EtY2VydC1yZXF1aXJlZCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjaGFuZ2UtY29ubmVjdG9yLXRpdGxlIjoiQ29uZmlybSBjb25uZWN0b3IgY2hhbmdlIiwiY2hhbmdlLWNvbm5lY3Rvci10ZXh0IjoiU3dpdGNoaW5nIGNvbm5lY3RvcnMgd2lsbCBkaXNjYXJkIGFueSB1bnNhdmVkIGNoYW5nZXMuIENvbnRpbnVlPyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IkNoZWNraW5nIGRldmljZSBhY3Rpdml0eSIsY29tbWFuZDoiRG9ja2VyIGNvbW1hbmRzIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlciBjb21tYW5kIGhhcyBiZWVuIGNvcGllZCB0byBjbGlwYm9hcmQiLGNvbmZpZ3VyYXRpb246IkNvbmZpZ3VyYXRpb24iLCJhZGQtY29ubmVjdG9yIjoiQWRkIGNvbm5lY3RvciIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKHMpIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJDb25uZWN0IGF0dGVtcHQgdGltZSAobXMpIiwiY29ubmVjdC1hdHRlbXB0LWNvdW50IjoiQ29ubmVjdCBhdHRlbXB0IGNvdW50IiwiY29weS11c2VybmFtZSI6IkNvcHkgdXNlcm5hbWUiLCJjb3B5LXBhc3N3b3JkIjoiQ29weSBwYXNzd29yZCIsImNvcHktY2xpZW50LWlkIjoiQ29weSBjbGllbnQgSUQiLCJjb25uZWN0b3ItY3JlYXRlZCI6IkNvbm5lY3RvciBjcmVhdGVkIiwiY29ubmVjdG9yLXVwZGF0ZWQiOiJDb25uZWN0b3IgdXBkYXRlZCIsInJwYy1jb21tYW5kLXNhdmUtdGVtcGxhdGUiOiJTYXZlIFRlbXBsYXRlIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXNwb25zZSIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiVXNlIHRoZSBmb2xsb3dpbmcgaW5zdHJ1Y3Rpb24gdG8gcnVuIElvVCBHYXRld2F5IGluIERvY2tlciBjb21wb3NlIHdpdGggY3JlZGVudGlhbHMgZm9yIHNlbGVjdGVkIGRldmljZSIsImluc3RhbGwtZG9ja2VyLWNvbXBvc2UiOiJVc2UgdGhlIGluc3RydWN0aW9ucyB0byBkb3dubG9hZCwgaW5zdGFsbCBhbmQgc2V0dXAgZG9ja2VyIGNvbXBvc2UiLCJkZXZpY2UtaW5mby1zZXR0aW5ncyI6IkRldmljZSBpbmZvIHNldHRpbmdzIiwiZGV2aWNlLWluZm8iOnsiZW50aXR5LWZpZWxkIjoiRW50aXR5IGZpZWxkIixzb3VyY2U6IlNvdXJjZSIsZXhwcmVzc2lvbjoiVmFsdWUgLyBFeHByZXNzaW9uIiwiZXhwcmVzc2lvbi1oaW50IjoiU2hvdyBoZWxwIixuYW1lOiJOYW1lIiwicHJvZmlsZS1uYW1lIjoiUHJvZmlsZSBuYW1lIiwiZGV2aWNlLW5hbWUtZXhwcmVzc2lvbiI6IkRldmljZSBuYW1lIGV4cHJlc3Npb24iLCJkZXZpY2UtbmFtZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJkZXZpY2UtcHJvZmlsZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiRGV2aWNlIHByb2ZpbGUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4ifSwiZGV2aWNlLW5hbWUtZmlsdGVyIjoiRGV2aWNlIG5hbWUgZmlsdGVyIiwiZGV2aWNlLW5hbWUtZmlsdGVyLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIFJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZmlsdGVyIGluY29taW5nIGRhdGEgYnkgZGV2aWNlIG5hbWUuIiwiZGV2aWNlLW5hbWUtZmlsdGVyLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgZmlsdGVyIGlzIHJlcXVpcmVkLiIsZGV0YWlsczoiRGV0YWlscyIsImRlbGV0ZS1tYXBwaW5nLXRpdGxlIjoiRGVsZXRlIG1hcHBpbmc/IiwiZGVsZXRlLXNsYXZlLXRpdGxlIjoiRGVsZXRlIHNsYXZlPyIsZGl2aWRlcjoiRGl2aWRlciIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6IkRvd25sb2FkIGNvbmZpZ3VyYXRpb24gZmlsZSIsImRvd25sb2FkLWRvY2tlci1jb21wb3NlIjoiRG93bmxvYWQgZG9ja2VyLWNvbXBvc2UueW1sIGZvciB5b3VyIGdhdGV3YXkiLCJlbmFibGUtcmVtb3RlLWxvZ2dpbmciOiJFbmFibGUgcmVtb3RlIGxvZ2dpbmciLCJlbGxpcHNpcy1jaGlwcy10ZXh0IjoiKyB7e2NvdW50fX0gbW9yZSIsImxhdW5jaC1nYXRld2F5IjoiTGF1bmNoIGdhdGV3YXkiLCJsYXVuY2gtY29tbWFuZCI6IkxhdW5jaCBjb21tYW5kIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoiU3RhcnQgdGhlIGdhdGV3YXkgdXNpbmcgdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSB0ZXJtaW5hbCBmcm9tIGZvbGRlciB3aXRoIGRvY2tlci1jb21wb3NlLnltbCBmaWxlIiwibG9ncy1jb25maWd1cmF0aW9uIjoiTG9ncyBjb25maWd1cmF0aW9uIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXRlIGEgbmV3IGdhdGV3YXkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCBjcmVhdGUgYSBuZXcgZ2F0ZXdheSB3aXRoIG5hbWU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkNyZWF0ZWQgdGltZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1oZWFkZXIiOiJDb25maWd1cmF0aW9ucyB3aWxsIGJlIGRlbGV0ZWQiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6IlR1cm5pbmcgb2ZmIFJlbW90ZSBDb25maWd1cmF0aW9uIGlzIHBvc3NpYmxlIG9ubHkgaWYgdGhlcmUgaXMgcGh5c2ljYWwgYWNjZXNzIHRvIHRoZSBHYXRld2F5LiBBbGwgcHJldmlvdXMgY29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkLjxicj48YnI+IFxuVG8gdHVybiBvZmYgY29uZmlndXJhdGlvbiwgZW50ZXIgZ2F0ZXdheSBuYW1lIGJlbG93IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0IjoiR2F0ZXdheSBuYW1lIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIG1hbmRhdG9yeSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1jb25maXJtIjoiVHVybiBPZmYiLCJjb25uZWN0b3ItZHVwbGljYXRlLW5hbWUiOiJDb25uZWN0b3Igd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMuIiwiY29ubmVjdG9yLXNpZGUiOiJDb25uZWN0b3Igc2lkZSIsInBheWxvYWQtdHlwZSI6IlBheWxvYWQgdHlwZSIsInBsYXRmb3JtLXNpZGUiOiJQbGF0Zm9ybSBzaWRlIixKU09OOiJKU09OIiwiSlNPTi1oaW50IjoiQ29udmVydGVyIGZvciB0aGlzIHBheWxvYWQgdHlwZSBwcm9jZXNzZXMgTVFUVCBtZXNzYWdlcyBpbiBKU09OIGZvcm1hdC4gSXQgdXNlcyBKU09OIFBhdGggZXhwcmVzc2lvbnMgdG8gZXh0cmFjdCB2aXRhbCBkZXRhaWxzIHN1Y2ggYXMgZGV2aWNlIG5hbWVzLCBkZXZpY2UgcHJvZmlsZSBuYW1lcywgYXR0cmlidXRlcywgYW5kIHRpbWUgc2VyaWVzIGZyb20gdGhlIG1lc3NhZ2UuIEFuZCByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGdldCBkZXZpY2UgZGV0YWlscyBmcm9tIHRvcGljcy4iLGJ5dGVzOiJCeXRlcyIsImJ5dGVzLWhpbnQiOiJDb252ZXJ0ZXIgZm9yIHRoaXMgcGF5bG9hZCB0eXBlIGRlc2lnbmVkIGZvciBiaW5hcnkgTVFUVCBwYXlsb2FkcywgdGhpcyBjb252ZXJ0ZXIgZGlyZWN0bHkgaW50ZXJwcmV0cyBiaW5hcnkgZGF0YSB0byByZXRyaWV2ZSBkZXZpY2UgbmFtZXMgYW5kIGRldmljZSBwcm9maWxlIG5hbWVzLCBhbG9uZyB3aXRoIGF0dHJpYnV0ZXMgYW5kIHRpbWUgc2VyaWVzLCB1c2luZyBzcGVjaWZpYyBieXRlIHBvc2l0aW9ucyBmb3IgZGF0YSBleHRyYWN0aW9uLiIsY3VzdG9tOiJDdXN0b20iLCJjdXN0b20taGludCI6IlRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gdXNlIGEgY3VzdG9tIGNvbnZlcnRlciBmb3Igc3BlY2lmaWMgZGF0YSB0YXNrcy4gWW91IG5lZWQgdG8gYWRkIHlvdXIgY3VzdG9tIGNvbnZlcnRlciB0byB0aGUgZXh0ZW5zaW9uIGZvbGRlciBhbmQgZW50ZXIgaXRzIGNsYXNzIG5hbWUgaW4gdGhlIFVJIHNldHRpbmdzLiBBbnkga2V5cyB5b3UgcHJvdmlkZSB3aWxsIGJlIHNlbnQgYXMgY29uZmlndXJhdGlvbiB0byB5b3VyIGN1c3RvbSBjb252ZXJ0ZXIuIiwiY2xpZW50LWNlcnQtcGF0aCI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIGZpbGUiLCJwYXRoLXRvLWNsaWVudC1jZXJ0LXJlcXVpcmVkIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgZmlsZSBpcyByZXF1aXJlZC4iLCJjbGllbnQtaWQiOiJDbGllbnQgSUQiLCJkYXRhLWNvbnZlcnNpb24iOiJEYXRhIGNvbnZlcnNpb24iLCJkYXRhLW1hcHBpbmciOiJEYXRhIG1hcHBpbmciLCJkYXRhLW1hcHBpbmctaGludCI6IkRhdGEgbWFwcGluZyBwcm92aWRlcyB0aGUgY2FwYWJpbGl0eSB0byBwYXJzZSBhbmQgY29udmVydCB0aGUgZGF0YSByZWNlaXZlZCBmcm9tIGEgTVFUVCBjbGllbnQgaW4gaW5jb21pbmcgbWVzc2FnZXMgaW50byBzcGVjaWZpYyBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBkYXRhIGtleXMuIiwib3BjdWEtZGF0YS1tYXBwaW5nLWhpbnQiOiJEYXRhIG1hcHBpbmcgcHJvdmlkZXMgdGhlIGNhcGFiaWxpdHkgdG8gcGFyc2UgYW5kIGNvbnZlcnQgdGhlIGRhdGEgcmVjZWl2ZWQgZnJvbSBhIE9QQ1VBIHNlcnZlciBpbnRvIHNwZWNpZmljIGRhdGEga2V5cy4iLGRlbGV0ZToiRGVsZXRlIGNvbmZpZ3VyYXRpb24iLCJkZWxldGUtYXR0cmlidXRlIjoiRGVsZXRlIGF0dHJpYnV0ZSIsImRlbGV0ZS1rZXkiOiJEZWxldGUga2V5IiwiZGVsZXRlLXRpbWVzZXJpZXMiOiJEZWxldGUgdGltZSBzZXJpZXMiLGRlZmF1bHQ6IkRlZmF1bHQiLCJkZXZpY2Utbm9kZSI6IkRldmljZSBub2RlIiwiZGV2aWNlLW5vZGUtcmVxdWlyZWQiOiJEZXZpY2Ugbm9kZSByZXF1aXJlZC4iLCJkZXZpY2Utbm9kZS1oaW50IjoiUGF0aCBvciBpZGVudGlmaWVyIGZvciBkZXZpY2Ugbm9kZSBvbiBPUEMgVUEgc2VydmVyLiBSZWxhdGl2ZSBwYXRocyBmcm9tIGl0IGZvciBhdHRyaWJ1dGVzIGFuZCB0aW1lIHNlcmllcyBjYW4gYmUgdXNlZC4iLCJkZXZpY2UtbmFtZSI6IkRldmljZSBuYW1lIiwiZGV2aWNlLXByb2ZpbGUtbGFiZWwiOiJEZXZpY2UgcHJvZmlsZSIsImRldmljZS1uYW1lLXJlcXVpcmVkIjoiRGV2aWNlIG5hbWUgcmVxdWlyZWQiLCJkZXZpY2UtcHJvZmlsZS1yZXF1aXJlZCI6IkRldmljZSBwcm9maWxlIHJlcXVpcmVkIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGVuYWJsZToiRW5hYmxlIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IkVuYWJsZSBzdWJzY3JpcHRpb24iLGV4dGVuc2lvbjoiRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uLWhpbnQiOiJQdXQgeW91ciBjb252ZXJ0ZXIgY2xhc3NuYW1lIGluIHRoZSBmaWVsZC4gQ3VzdG9tIGNvbnZlcnRlciB3aXRoIHN1Y2ggY2xhc3Mgc2hvdWxkIGJlIGluIGV4dGVuc2lvbi9tcXR0IGZvbGRlci4iLCJleHRlbnNpb24tcmVxdWlyZWQiOiJFeHRlbnNpb24gaXMgcmVxdWlyZWQuIiwiZXh0ZW5zaW9uLWNvbmZpZ3VyYXRpb24iOiJFeHRlbnNpb24gY29uZmlndXJhdGlvbiIsImV4dGVuc2lvbi1jb25maWd1cmF0aW9uLWhpbnQiOiJDb25maWd1cmF0aW9uIGZvciBjb252ZXJ0b3IiLCJmaWxsLWNvbm5lY3Rvci1kZWZhdWx0cyI6IkZpbGwgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHQgdmFsdWVzIiwiZmlsbC1jb25uZWN0b3ItZGVmYXVsdHMtaGludCI6IlRoaXMgcHJvcGVydHkgYWxsb3dzIHRvIGZpbGwgY29ubmVjdG9yIGNvbmZpZ3VyYXRpb24gd2l0aCBkZWZhdWx0IHZhbHVlcyBvbiBpdCdzIGNyZWF0aW9uLiIsImZyb20tZGV2aWNlLXJlcXVlc3Qtc2V0dGluZ3MiOiJJbnB1dCByZXF1ZXN0IHBhcnNpbmciLCJmcm9tLWRldmljZS1yZXF1ZXN0LXNldHRpbmdzLWhpbnQiOiJUaGVzZSBmaWVsZHMgc3VwcG9ydCBKU09OUGF0aCBleHByZXNzaW9ucyB0byBleHRyYWN0IGEgbmFtZSBmcm9tIGluY29taW5nIG1lc3NhZ2UuIiwiZnVuY3Rpb24tY29kZSI6IkZ1bmN0aW9uIGNvZGUiLCJmdW5jdGlvbi1jb2RlcyI6eyJyZWFkLWNvaWxzIjoiMDEgLSBSZWFkIENvaWxzIiwicmVhZC1kaXNjcmV0ZS1pbnB1dHMiOiIwMiAtIFJlYWQgRGlzY3JldGUgSW5wdXRzIiwicmVhZC1tdWx0aXBsZS1ob2xkaW5nLXJlZ2lzdGVycyI6IjAzIC0gUmVhZCBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyIsInJlYWQtaW5wdXQtcmVnaXN0ZXJzIjoiMDQgLSBSZWFkIElucHV0IFJlZ2lzdGVycyIsIndyaXRlLXNpbmdsZS1jb2lsIjoiMDUgLSBXcml0ZSBTaW5nbGUgQ29pbCIsIndyaXRlLXNpbmdsZS1ob2xkaW5nLXJlZ2lzdGVyIjoiMDYgLSBXcml0ZSBTaW5nbGUgSG9sZGluZyBSZWdpc3RlciIsIndyaXRlLW11bHRpcGxlLWNvaWxzIjoiMTUgLSBXcml0ZSBNdWx0aXBsZSBDb2lscyIsIndyaXRlLW11bHRpcGxlLWhvbGRpbmctcmVnaXN0ZXJzIjoiMTYgLSBXcml0ZSBNdWx0aXBsZSBIb2xkaW5nIFJlZ2lzdGVycyJ9LCJ0by1kZXZpY2UtcmVzcG9uc2Utc2V0dGluZ3MiOiJPdXRwdXQgcmVxdWVzdCBwcm9jZXNzaW5nIiwidG8tZGV2aWNlLXJlc3BvbnNlLXNldHRpbmdzLWhpbnQiOiJGb3IgdGhlc2UgZmllbGRzIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFuZCB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhY3R1YWwgdmFsdWVzOiAke2RldmljZU5hbWV9LCAke2F0dHJpYnV0ZUtleX0sICR7YXR0cmlidXRlVmFsdWV9IixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImdlbmVyYXRlLWNsaWVudC1pZCI6IkdlbmVyYXRlIENsaWVudCBJRCIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsaW5mbzoiSW5mbyIsaWRlbnRpdHk6IklkZW50aXR5IiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJ1bml0LWlkIjoiVW5pdCBJRCIsaG9zdDoiSG9zdCIsImhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsaG9sZGluZ19yZWdpc3RlcnM6IkhvbGRpbmcgcmVnaXN0ZXJzIixjb2lsc19pbml0aWFsaXplcjoiQ29pbHMgaW5pdGlhbGl6ZXIiLGlucHV0X3JlZ2lzdGVyczoiSW5wdXQgcmVnaXN0ZXJzIixkaXNjcmV0ZV9pbnB1dHM6IkRpc2NyZXRlIGlucHV0cyIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIkpTT05QYXRoLWhpbnQiOiJUaGlzIGZpZWxkIHN1cHBvcnRzIGNvbnN0YW50cyBhbmQgSlNPTlBhdGggZXhwcmVzc2lvbnMuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWF4LW51bWJlci1vZi13b3JrZXJzIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIiwibWF4LW51bWJlci1vZi13b3JrZXJzLWhpbnQiOiJNYXhpbWFsIG51bWJlciBvZiB3b3JrZXJzIHRocmVhZHMgZm9yIGNvbnZlcnRlcnMgXG4oVGhlIGFtb3VudCBvZiB3b3JrZXJzIGNoYW5nZXMgZHluYW1pY2FsbHksIGRlcGVuZGluZyBvbiBsb2FkKSBcblJlY29tbWVuZGVkIGFtb3VudCA1MC0xNTAuIiwibWF4LW51bWJlci1vZi13b3JrZXJzLXJlcXVpcmVkIjoiTWF4IG51bWJlciBvZiB3b3JrZXJzIGlzIHJlcXVpcmVkLiIsIm1heC1tZXNzYWdlcy1xdWV1ZS1mb3Itd29ya2VyIjoiTWF4IG1lc3NhZ2VzIHF1ZXVlIHBlciB3b3JrZXIiLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1oaW50IjoiTWF4aW1hbCBtZXNzYWdlcyBjb3VudCB0aGF0IHdpbGwgYmUgaW4gdGhlIHF1ZXVlIFxuZm9yIGVhY2ggY29udmVydGVyIHdvcmtlci4iLCJtYXgtbWVzc2FnZXMtcXVldWUtZm9yLXdvcmtlci1yZXF1aXJlZCI6Ik1heCBtZXNzYWdlcyBxdWV1ZSBwZXIgd29ya2VyIGlzIHJlcXVpcmVkLiIsbWV0aG9kOiJNZXRob2QiLCJtZXRob2QtbmFtZSI6Ik1ldGhvZCBuYW1lIiwibWV0aG9kLXJlcXVpcmVkIjoiTWV0aG9kIG5hbWUgaXMgcmVxdWlyZWQuIiwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwIiwibWluLXBhY2stc2VuZC1kZWxheS1wYXR0ZXJuIjoiTWluIHBhY2sgc2VuZCBkZWxheSBpcyBub3QgdmFsaWQiLG11bHRpcGxpZXI6Ik11bHRpcGxpZXIiLG1vZGU6Ik1vZGUiLCJtb2RlbC1uYW1lIjoiTW9kZWwgbmFtZSIsbW9kaWZpZXI6Ik1vZGlmaWVyIiwibW9kaWZpZXItaW52YWxpZCI6Ik1vZGlmaWVyIGlzIG5vdCB2YWxpZCIsIm1xdHQtdmVyc2lvbiI6Ik1RVFQgdmVyc2lvbiIsbmFtZToiTmFtZSIsIm5hbWUtcmVxdWlyZWQiOiJOYW1lIGlzIHJlcXVpcmVkLiIsIm5vLWF0dHJpYnV0ZXMiOiJObyBhdHRyaWJ1dGVzIiwibm8tYXR0cmlidXRlLXVwZGF0ZXMiOiJObyBhdHRyaWJ1dGUgdXBkYXRlcyIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJuby10aW1lc2VyaWVzIjoiTm8gdGltZSBzZXJpZXMiLCJuby1rZXlzIjoiTm8ga2V5cyIsIm5vLXZhbHVlIjoiTm8gYXJndW1lbnRzIiwibm8tcnBjLW1ldGhvZHMiOiJObyBSUEMgbWV0aG9kcyIsIm5vLXJwYy1yZXF1ZXN0cyI6Ik5vIFJQQyByZXF1ZXN0cyIsInBhdGgtaGludCI6IlRoZSBwYXRoIGlzIGxvY2FsIHRvIHRoZSBnYXRld2F5IGZpbGUgc3lzdGVtIiwicGF0aC1sb2dzIjoiUGF0aCB0byBsb2cgZmlsZXMiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYXRoIGlzIHJlcXVpcmVkLiIscGFzc3dvcmQ6IlBhc3N3b3JkIiwicGFzc3dvcmQtcmVxdWlyZWQiOiJQYXNzd29yZCBpcyByZXF1aXJlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IktlZXAgYWxpdmUgcGVybWl0IHdpdGhvdXQgY2FsbHMiLCJwb2xsLXBlcmlvZCI6IlBvbGwgcGVyaW9kIChtcykiLCJwb2xsLXBlcmlvZC1lcnJvciI6IlBvbGwgcGVyaW9kIHNob3VsZCBiZSBhdCBsZWFzdCB7e21pbn19IChtcykuIixwb3J0OiJQb3J0IiwicG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIiwicG9ydC1saW1pdHMtZXJyb3IiOiJQb3J0IHNob3VsZCBiZSBudW1iZXIgZnJvbSB7e21pbn19IHRvIHt7bWF4fX0uIiwicHJpdmF0ZS1rZXktcGF0aCI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgZmlsZSIsInBhdGgtdG8tcHJpdmF0ZS1rZXktcmVxdWlyZWQiOiJQYXRoIHRvIHByaXZhdGUga2V5IGZpbGUgaXMgcmVxdWlyZWQuIixwYXJpdHk6IlBhcml0eSIsInByb2R1Y3QtY29kZSI6IlByb2R1Y3QgY29kZSIsInByb2R1Y3QtbmFtZSI6IlByb2R1Y3QgbmFtZSIscmF3OiJSYXciLHJldGFpbjoiUmV0YWluIiwicmV0YWluLWhpbnQiOiJUaGlzIGZsYWcgdGVsbHMgdGhlIGJyb2tlciB0byBzdG9yZSB0aGUgbWVzc2FnZSBmb3IgYSB0b3BpY1xuYW5kIGVuc3VyZXMgYW55IG5ldyBjbGllbnQgc3Vic2NyaWJpbmcgdG8gdGhhdCB0b3BpY1xud2lsbCByZWNlaXZlIHRoZSBzdG9yZWQgbWVzc2FnZS4iLHJlbW90ZToiUmVtb3RlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IkxvZ2dpbmcgbGV2ZWwiLCJyZW1vdmUtZW50cnkiOiJSZW1vdmUgY29uZmlndXJhdGlvbiIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLHJldHJpZXM6IlJldHJpZXMiLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cmllcyBvbiBlbXB0eSIsInJldHJpZXMtb24taW52YWxpZCI6IlJldHJpZXMgb24gaW52YWxpZCIscnBjOnt0aXRsZToie3t0eXBlfX0gQ29ubmVjdG9yIFJQQyBwYXJhbWV0ZXJzIiwidGVtcGxhdGVzLXRpdGxlIjoiQ29ubmVjdG9yIFJQQyBUZW1wbGF0ZXMiLG1ldGhvZEZpbHRlcjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1uYW1lIjoiTWV0aG9kIG5hbWUiLHJlcXVlc3RUb3BpY0V4cHJlc3Npb246IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiIscmVzcG9uc2VUb3BpY0V4cHJlc3Npb246IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLHJlc3BvbnNlVGltZW91dDoiUmVzcG9uc2UgdGltZW91dCIsdmFsdWVFeHByZXNzaW9uOiJWYWx1ZSBleHByZXNzaW9uIix0YWc6IlRhZyIsdHlwZToiVHlwZSIsZnVuY3Rpb25Db2RlOiJGdW5jdGlvbiBDb2RlIixvYmplY3RzQ291bnQ6Ik9iamVjdHMgQ291bnQiLGFkZHJlc3M6IkFkZHJlc3MiLG1ldGhvZDoiTWV0aG9kIixyZXF1ZXN0VHlwZToiUmVxdWVzdCBUeXBlIixyZXF1ZXN0VGltZW91dDoiUmVxdWVzdCBUaW1lb3V0IixvYmplY3RUeXBlOiJPYmplY3QgdHlwZSIsaWRlbnRpZmllcjoiSWRlbnRpZmllciIscHJvcGVydHlJZDoiUHJvcGVydHkgSUQiLG1ldGhvZFJQQzoiTWV0aG9kIFJQQyBuYW1lIix3aXRoUmVzcG9uc2U6IldpdGggUmVzcG9uc2UiLGNoYXJhY3RlcmlzdGljVVVJRDoiQ2hhcmFjdGVyaXN0aWMgVVVJRCIsbWV0aG9kUHJvY2Vzc2luZzoiTWV0aG9kIFByb2Nlc3NpbmciLG5vZGVJRDoiTm9kZSBJRCIsaXNFeHRlbmRlZElEOiJJcyBFeHRlbmRlZCBJRCIsaXNGRDoiSXMgRkQiLGJpdHJhdGVTd2l0Y2g6IkJpdHJhdGUgU3dpdGNoIixkYXRhSW5IRVg6IkRhdGEgSW4gSEVYIixkYXRhTGVuZ3RoOiJEYXRhIExlbmd0aCIsZGF0YUJ5dGVvcmRlcjoiRGF0YSBCeXRlIE9yZGVyIixkYXRhQmVmb3JlOiJEYXRhIEJlZm9yZSIsZGF0YUFmdGVyOiJEYXRhIEFmdGVyIixkYXRhRXhwcmVzc2lvbjoiRGF0YSBFeHByZXNzaW9uIixlbmNvZGluZzoiRW5jb2RpbmciLG9pZDoiT0lEIiwiYWRkLW9pZCI6IkFkZCBPSUQiLCJhZGQtaGVhZGVyIjoiQWRkIGhlYWRlciIsImFkZC1zZWN1cml0eSI6IkFkZCBzZWN1cml0eSIscmVtb3ZlOiJSZW1vdmUiLHJlcXVlc3RGaWx0ZXI6IlJlcXVlc3QgRmlsdGVyIixyZXF1ZXN0VXJsRXhwcmVzc2lvbjoiUmVxdWVzdCBVUkwgRXhwcmVzc2lvbiIsaHR0cE1ldGhvZDoiSFRUUCBNZXRob2QiLHRpbWVvdXQ6IlRpbWVvdXQiLHRyaWVzOiJUcmllcyIsaHR0cEhlYWRlcnM6IkhUVFAgSGVhZGVycyIsImhlYWRlci1uYW1lIjoiSGVhZGVyIG5hbWUiLGhpbnQ6eyJtb2RidXMtcmVzcG9uc2UtcmVhZGluZyI6IlJQQyByZXNwb25zZSB3aWxsIHJldHVybiBhbGwgc3VidHJhY3RlZCB2YWx1ZXMgZnJvbSBhbGwgY29ubmVjdGVkIGRldmljZXMgd2hlbiB0aGUgcmVhZGluZyBmdW5jdGlvbnMgYXJlIHNlbGVjdGVkLiIsIm1vZGJ1cy13cml0aW5nLWZ1bmN0aW9ucyI6IlJQQyB3aWxsIHdyaXRlIGEgZmlsbGVkIHZhbHVlIHRvIGFsbCBjb25uZWN0ZWQgZGV2aWNlcyB3aGVuIHRoZSB3cml0aW5nIGZ1bmN0aW9ucyBhcmUgc2VsZWN0ZWQuIiwib3BjLW1ldGhvZCI6IkEgZmlsbGVkIG1ldGhvZCBuYW1lIGlzIHRoZSBPUEMtVUEgbWV0aG9kIHRoYXQgd2lsbCBwcm9jZXNzZWQgb24gdGhlIHNlcnZlciBzaWRlIChtYWtlIHN1cmUgeW91ciBub2RlIGhhcyB0aGUgcmVxdWVzdGVkIG1ldGhvZCkuIn0sInNlY3VyaXR5LW5hbWUiOiJTZWN1cml0eSBuYW1lIix2YWx1ZToiVmFsdWUiLHNlY3VyaXR5OiJTZWN1cml0eSIscmVzcG9uc2VWYWx1ZUV4cHJlc3Npb246IlJlc3BvbnNlIFZhbHVlIEV4cHJlc3Npb24iLHJlcXVlc3RWYWx1ZUV4cHJlc3Npb246IlJlcXVlc3QgVmFsdWUgRXhwcmVzc2lvbiIsYXJndW1lbnRzOiJBcmd1bWVudHMiLCJhZGQtYXJndW1lbnQiOiJBZGQgYXJndW1lbnQiLCJ3cml0ZS1wcm9wZXJ0eSI6IldyaXRlIHByb3BlcnR5IiwicmVhZC1wcm9wZXJ0eSI6IlJlYWQgcHJvcGVydHkiLCJhbmFsb2ctb3V0cHV0IjoiQW5hbG9nIG91dHB1dCIsImFuYWxvZy1pbnB1dCI6IkFuYWxvZyBpbnB1dCIsImJpbmFyeS1vdXRwdXQiOiJCaW5hcnkgb3V0cHV0IiwiYmluYXJ5LWlucHV0IjoiQmluYXJ5IGlucHV0IiwiYmluYXJ5LXZhbHVlIjoiQmluYXJ5IHZhbHVlIiwiYW5hbG9nLXZhbHVlIjoiQW5hbG9nIHZhbHVlIix3cml0ZToiV3JpdGUiLHJlYWQ6IlJlYWQiLHNjYW46IlNjYW4iLG9pZHM6Ik9JRFMiLHNldDoiU2V0IixtdWx0aXNldDoiTXVsdGlzZXQiLGdldDoiR2V0IiwiYnVsay13YWxrIjoiQnVsayB3YWxrIix0YWJsZToiVGFibGUiLCJtdWx0aS1nZXQiOiJNdWx0aWdldCIsImdldC1uZXh0IjoiR2V0IG5leHQiLCJidWxrLWdldCI6IkJ1bGsgZ2V0Iix3YWxrOiJXYWxrIiwic2F2ZS10ZW1wbGF0ZSI6IlNhdmUgdGVtcGxhdGUiLCJ0ZW1wbGF0ZS1uYW1lIjoiVGVtcGxhdGUgbmFtZSIsInRlbXBsYXRlLW5hbWUtcmVxdWlyZWQiOiJUZW1wbGF0ZSBuYW1lIGlzIHJlcXVpcmVkLiIsInRlbXBsYXRlLW5hbWUtZHVwbGljYXRlIjoiVGVtcGxhdGUgd2l0aCBzdWNoIG5hbWUgYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgdXBkYXRlZC4iLGNvbW1hbmQ6IkNvbW1hbmQiLHBhcmFtczoiUGFyYW1zIiwianNvbi12YWx1ZS1pbnZhbGlkIjoiSlNPTiB2YWx1ZSBoYXMgYW4gaW52YWxpZCBmb3JtYXQifSwicnBjLW1ldGhvZHMiOiJSUEMgbWV0aG9kcyIsInJwYy1yZXF1ZXN0cyI6IlJQQyByZXF1ZXN0cyIscmVxdWVzdDp7ImNvbm5lY3QtcmVxdWVzdCI6IkNvbm5lY3QgcmVxdWVzdCIsImRpc2Nvbm5lY3QtcmVxdWVzdCI6IkRpc2Nvbm5lY3QgcmVxdWVzdCIsImF0dHJpYnV0ZS1yZXF1ZXN0IjoiQXR0cmlidXRlIHJlcXVlc3QiLCJhdHRyaWJ1dGUtdXBkYXRlIjoiQXR0cmlidXRlIHVwZGF0ZSIsInJwYy1jb25uZWN0aW9uIjoiUlBDIGNvbW1hbmQifSwicmVxdWVzdC10eXBlIjoiUmVxdWVzdCB0eXBlIiwicmVxdWVzdHMtbWFwcGluZyI6IlJlcXVlc3RzIG1hcHBpbmciLCJyZXF1ZXN0cy1tYXBwaW5nLWhpbnQiOiJNUVRUIENvbm5lY3RvciByZXF1ZXN0cyBhbGxvd3MgeW91IHRvIGNvbm5lY3QsIGRpc2Nvbm5lY3QsIHByb2Nlc3MgYXR0cmlidXRlIHJlcXVlc3RzIGZyb20gdGhlIGRldmljZSwgaGFuZGxlIGF0dHJpYnV0ZSB1cGRhdGVzIG9uIHRoZSBzZXJ2ZXIgYW5kIFJQQyBwcm9jZXNzaW5nIGNvbmZpZ3VyYXRpb24uIiwicmVxdWVzdC10b3BpYy1leHByZXNzaW9uIjoiUmVxdWVzdCB0b3BpYyBleHByZXNzaW9uIiwicmVxdWVzdC1jbGllbnQtY2VydGlmaWNhdGUiOiJSZXF1ZXN0IGNsaWVudCBjZXJ0aWZpY2F0ZSIsInJlcXVlc3QtdG9waWMtZXhwcmVzc2lvbi1yZXF1aXJlZCI6IlJlcXVlc3QgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS10aW1lb3V0IjoiUmVzcG9uc2UgdGltZW91dCAobXMpIiwicmVzcG9uc2UtdGltZW91dC1yZXF1aXJlZCI6IlJlc3BvbnNlIHRpbWVvdXQgaXMgcmVxdWlyZWQuIiwicmVzcG9uc2UtdGltZW91dC1saW1pdHMtZXJyb3IiOiJUaW1lb3V0IG11c3QgYmUgbW9yZSB0aGVuIHt7bWlufX0gbXMuIiwicmVzcG9uc2UtdG9waWMtUW9zIjoiUmVzcG9uc2UgdG9waWMgUW9TIiwicmVzcG9uc2UtdG9waWMtUW9zLWhpbnQiOiJNUVRUIFF1YWxpdHkgb2YgU2VydmljZSAoUW9TKSBpcyBhbiBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgbWVzc2FnZSBzZW5kZXIgYW5kIHJlY2VpdmVyIHRoYXQgZGVmaW5lcyB0aGUgbGV2ZWwgb2YgZGVsaXZlcnkgZ3VhcmFudGVlIGZvciBhIHNwZWNpZmljIG1lc3NhZ2UuIiwicmVzcG9uc2UtdG9waWMtZXhwcmVzc2lvbiI6IlJlc3BvbnNlIHRvcGljIGV4cHJlc3Npb24iLCJyZXNwb25zZS10b3BpYy1leHByZXNzaW9uLXJlcXVpcmVkIjoiUmVzcG9uc2UgdG9waWMgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJyZXNwb25zZS12YWx1ZS1leHByZXNzaW9uIjoiUmVzcG9uc2UgdmFsdWUgZXhwcmVzc2lvbiIsInJlc3BvbnNlLXZhbHVlLWV4cHJlc3Npb24tcmVxdWlyZWQiOiJSZXNwb25zZSB2YWx1ZSBleHByZXNzaW9uIGlzIHJlcXVpcmVkLiIsInZlbmRvci1uYW1lIjoiVmVuZG9yIG5hbWUiLCJ2ZW5kb3ItdXJsIjoiVmVuZG9yIFVSTCIsdmFsdWU6IlZhbHVlIix2YWx1ZXM6IlZhbHVlcyIsInZhbHVlLXJlcXVpcmVkIjoiVmFsdWUgaXMgcmVxdWlyZWQuIiwidmFsdWUtZXhwcmVzc2lvbiI6IlZhbHVlIGV4cHJlc3Npb24iLCJ2YWx1ZS1leHByZXNzaW9uLXJlcXVpcmVkIjoiVmFsdWUgZXhwcmVzc2lvbiBpcyByZXF1aXJlZC4iLCJ3aXRoLXJlc3BvbnNlIjoiV2l0aCByZXNwb25zZSIsIndpdGhvdXQtcmVzcG9uc2UiOiJXaXRob3V0IHJlc3BvbnNlIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2Nhbi1wZXJpb2QiOiJTY2FuIHBlcmlvZCAobXMpIiwic2Nhbi1wZXJpb2QtZXJyb3IiOiJTY2FuIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJTdWJzY3JpcHRpb24gY2hlY2sgcGVyaW9kIChtcykiLCJzdWItY2hlY2stcGVyaW9kLWVycm9yIjoiU3Vic2NyaXB0aW9uIGNoZWNrIHBlcmlvZCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInNlY3VyaXR5LWxhYmVsIjoiU2VjdXJpdHkiLCJzZWN1cml0eS1wb2xpY3kiOiJTZWN1cml0eSBwb2xpY3kiLCJzZWN1cml0eS10eXBlIjoiU2VjdXJpdHkgdHlwZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkFjY2VzcyBUb2tlbiIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXNlcm5hbWUgYW5kIFBhc3N3b3JkIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBBY2Nlc3MgVG9rZW4iLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyBQcml2YXRlIEtleSJ9LCJzZWxlY3QtY29ubmVjdG9yIjoiU2VsZWN0IGNvbm5lY3RvciB0byBkaXNwbGF5IGNvbmZpZyIsInNlbmQtY2hhbmdlLWRhdGEiOiJTZW5kIGRhdGEgb25seSBvbiBjaGFuZ2UiLCJzZW5kLWRhdGEtdG8tcGxhdGZvcm0iOiJTZW5kIGRhdGEgdG8gcGxhdGZvcm0iLCJzZW5kLWRhdGEtb24tY2hhbmdlIjoiU2VuZCBkYXRhIG9ubHkgb24gY2hhbmdlIiwic2VuZC1jaGFuZ2UtZGF0YS1oaW50IjoiVGhlIHZhbHVlcyB3aWxsIGJlIHNhdmVkIHRvIHRoZSBkYXRhYmFzZSBvbmx5IGlmIHRoZXkgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlcyBpbiB0aGUgcHJldmlvdXMgY29udmVydGVkIG1lc3NhZ2UuIFRoaXMgZnVuY3Rpb25hbGl0eSBhcHBsaWVzIHRvIGJvdGggYXR0cmlidXRlcyBhbmQgdGltZSBzZXJpZXMgaW4gdGhlIGNvbnZlcnRlciBvdXRwdXQuIixzZXJ2ZXI6IlNlcnZlciIsInNlcnZlci1ob3N0bmFtZSI6IlNlcnZlciBob3N0bmFtZSIsInNlcnZlci1zbGF2ZSI6IlNlcnZlciAoU2xhdmUpIiwic2VydmVycy1zbGF2ZXMiOiJTZXJ2ZXJzIChTbGF2ZXMpIiwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsInNlcnZlci11cmwiOiJTZXJ2ZXIgZW5kcG9pbnQgdXJsIiwic2VydmVyLWNvbm5lY3Rpb24iOiJTZXJ2ZXIgQ29ubmVjdGlvbiIsInNlcnZlci1jb25maWciOiJTZXJ2ZXIgY29uZmlndXJhdGlvbiIsInNlcnZlci1zbGF2ZS1jb25maWciOiJTZXJ2ZXIgKFNsYXZlKSBjb25maWd1cmF0aW9uIiwic2VydmVyLXVybC1yZXF1aXJlZCI6IlNlcnZlciBlbmRwb2ludCB1cmwgaXMgcmVxdWlyZWQuIixzdG9wYml0czoiU3RvcGJpdHMiLHN0cmljdDoiU3RyaWN0IixzZXQ6IlNldCIsInNob3ctbWFwIjoiU2hvdyBtYXAiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiU3RhdGlzdGljIixzdGF0aXN0aWNzOiJTdGF0aXN0aWNzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjonTm8gY29uZmlndXJlZCBzdGF0aXN0aWMga2V5cyBmb3VuZC4gWW91IGNhbiBjb25maWd1cmUgdGhlbSBpbiAiU3RhdGlzdGljcyIgdGFiIGluIGdlbmVyYWwgY29uZmlndXJhdGlvbi4nLCJzdGF0aXN0aWNzLWJ1dHRvbiI6IkdvIHRvIGNvbmZpZ3VyYXRpb24iLGNvbW1hbmRzOiJDb21tYW5kcyIsInNlbmQtcGVyaW9kIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIChpbiBzZWMpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgcmVxdWlyZWQiLCJzZW5kLXBlcmlvZC1taW4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gNjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoiU3RhdGlzdGljIHNlbmQgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiAoaW4gc2VjKSIsIm1heC1wYXlsb2FkLXNpemUtYnl0ZXMiOiJNYXggcGF5bG9hZCBzaXplIGluIGJ5dGVzIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1yZXF1aXJlZCI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgaXMgcmVxdWlyZWQiLCJtYXgtcGF5bG9hZC1zaXplLWJ5dGVzLW1pbiI6Ik1heCBwYXlsb2FkIHNpemUgaW4gYnl0ZXMgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMTAwIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcy1wYXR0ZXJuIjoiTWF4IHBheWxvYWQgc2l6ZSBpbiBieXRlcyBpcyBub3QgdmFsaWQiLCJtaW4tcGFjay1zaXplLXRvLXNlbmQiOiJNaW4gcGFja2V0IHNpemUgdG8gc2VuZCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1yZXF1aXJlZCI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2l6ZS10by1zZW5kLW1pbiI6Ik1pbiBwYWNrZXQgc2l6ZSB0byBzZW5kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEwMCIsIm1pbi1wYWNrLXNpemUtdG8tc2VuZC1wYXR0ZXJuIjoiTWluIHBhY2tldCBzaXplIHRvIHNlbmQgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IChpbiBzZWMpIiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLCJjb21tYW5kLXBhdHRlcm4iOiJDb21tYW5kIGlzIG5vdCB2YWxpZCIscmVtb3ZlOiJSZW1vdmUgY29tbWFuZCJ9LHN0b3JhZ2U6IlN0b3JhZ2UiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gZmlsZSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWF4aW11bSBudW1iZXIgb2YgZmlsZXMiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtYmVyIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJNYXhpbXVtIHJlY29yZHMgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1heGltdW0gcmVjb3JkcyBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiUmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50IjoiTWF4IHJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJNYXggUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiRGF0YSBmb2xkZXIgcGF0aCIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aC1yZXF1aXJlZCI6IkRhdGEgZm9sZGVyIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJNYXhpbXVtIGV2ZW50IHBhY2sgc2l6ZSBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhdGgiOiJTdG9yYWdlIHBhdGgiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJTdG9yYWdlIHBhdGggaXMgcmVxdWlyZWQuIiwic3RvcmFnZS10eXBlIjoiU3RvcmFnZSB0eXBlIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJGaWxlIHN0b3JhZ2UiLCJtZW1vcnktc3RvcmFnZSI6Ik1lbW9yeSBzdG9yYWdlIixzcWxpdGU6IlNRTElURSJ9LCJyZXBvcnQtc3RyYXRlZ3kiOntsYWJlbDoiUmVwb3J0IHN0cmF0ZWd5Iiwib24tY2hhbmdlIjoiT24gdmFsdWUgY2hhbmdlIiwib24tcmVwb3J0LXBlcmlvZCI6Ik9uIHJlcG9ydCBwZXJpb2QiLCJvbi1jaGFuZ2Utb3ItcmVwb3J0LXBlcmlvZCI6Ik9uIHZhbHVlIGNoYW5nZSBvciByZXBvcnQgcGVyaW9kIiwicmVwb3J0LXBlcmlvZCI6IlJlcG9ydCBwZXJpb2QifSwic291cmNlLXR5cGUiOnttc2c6IkV4dHJhY3QgZnJvbSBtZXNzYWdlIix0b3BpYzoiRXh0cmFjdCBmcm9tIHRvcGljIixjb25zdDoiQ29uc3RhbnQiLGlkZW50aWZpZXI6IklkZW50aWZpZXIiLHBhdGg6IlBhdGgifSwid29ya2Vycy1zZXR0aW5ncyI6IldvcmtlcnMgc2V0dGluZ3MiLHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsZ2VuZXJhbDoiR2VuZXJhbCIsdGltZXNlcmllczoiVGltZSBzZXJpZXMiLGtleToiS2V5IixrZXlzOiJLZXlzIiwia2V5LXJlcXVpcmVkIjoiS2V5IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLWhvc3QiOiJQbGF0Zm9ybSBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBsYXRmb3JtIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIix0aW1lb3V0OiJUaW1lb3V0IChtcykiLCJ0aW1lb3V0LWVycm9yIjoiVGltZW91dCBzaG91bGQgYmUgYXQgbGVhc3Qge3ttaW59fSAobXMpLiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsdHlwZToiVHlwZSIsInRvcGljLWZpbHRlciI6IlRvcGljIGZpbHRlciIsInRvcGljLXJlcXVpcmVkIjoiVG9waWMgZmlsdGVyIGlzIHJlcXVpcmVkLiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1jb25uZWN0aW9uIjoiVExTIENvbm5lY3Rpb24iLCJtYXN0ZXItY29ubmVjdGlvbnMiOiJNYXN0ZXIgQ29ubmVjdGlvbnMiLCJtZXRob2QtZmlsdGVyIjoiTWV0aG9kIGZpbHRlciIsIm1ldGhvZC1maWx0ZXItaGludCI6IlJlZ3VsYXIgZXhwcmVzc2lvbiB0byBmaWx0ZXIgaW5jb21pbmcgUlBDIG1ldGhvZCBmcm9tIHBsYXRmb3JtLiIsIm1ldGhvZC1maWx0ZXItcmVxdWlyZWQiOiJNZXRob2QgZmlsdGVyIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIscW9zOnsiYXQtbW9zdC1vbmNlIjoiMCAtIEF0IG1vc3Qgb25jZSIsImF0LWxlYXN0LW9uY2UiOiIxIC0gQXQgbGVhc3Qgb25jZSIsImV4YWN0bHktb25jZSI6IjIgLSBFeGFjdGx5IG9uY2UifSwib2JqZWN0cy1jb3VudCI6Ik9iamVjdHMgY291bnQiLCJvYmplY3RzLWNvdW50LXJlcXVpcmVkIjoiT2JqZWN0cyBjb3VudCBpcyByZXF1aXJlZCIsIndhaXQtYWZ0ZXItZmFpbGVkLWF0dGVtcHRzIjoiV2FpdCBhZnRlciBmYWlsZWQgYXR0ZW1wdHMgKG1zKSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsdXNlcm5hbWU6IlVzZXJuYW1lIiwidXNlcm5hbWUtcmVxdWlyZWQiOiJVc2VybmFtZSBpcyByZXF1aXJlZC4iLCJ1bml0LWlkLXJlcXVpcmVkIjoiVW5pdCBJRCBpcyByZXF1aXJlZC4iLCJ3cml0ZS1jb2lsIjoiV3JpdGUgQ29pbCIsIndyaXRlLWNvaWxzIjoiV3JpdGUgQ29pbHMiLCJ3cml0ZS1yZWdpc3RlciI6IldyaXRlIFJlZ2lzdGVyIiwid3JpdGUtcmVnaXN0ZXJzIjoiV3JpdGUgUmVnaXN0ZXJzIixoaW50czp7Im1vZGJ1cy1tYXN0ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb25zIGZvciBjb25uZWN0aW5nIHRvIE1vZGJ1cyBzZXJ2ZXJzIGFuZCByZWFkaW5nIGRhdGEgZnJvbSB0aGVtLiIsIm1vZGJ1cy1zZXJ2ZXIiOiJDb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yIHRoZSBNb2RidXMgc2VydmVyLCBzdG9yaW5nIGRhdGEgYW5kIHNlbmRpbmcgdXBkYXRlcyB0byB0aGUgcGxhdGZvcm0gd2hlbiBjaGFuZ2VzIG9jY3VyIG9yIGF0IGZpeGVkIGludGVydmFscy4iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBwbGF0Zm9ybSBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIHBsYXRmb3JtIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBwbGF0Zm9ybSBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBwbGF0Zm9ybSBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIHBsYXRmb3JtIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gcGxhdGZvcm0gc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIHRoZSBmb2xkZXIgdGhhdCB3aWxsIGNvbnRhaW4gZGF0YSAoUmVsYXRpdmUgb3IgQWJzb2x1dGUpIiwibG9nLWZvcm1hdCI6IkxvZyBtZXNzYWdlIGZvcm1hdCIsInJlbW90ZS1sb2ciOiJFbmFibGVzIHJlbW90ZSBsb2dnaW5nIGFuZCBsb2dzIHJlYWRpbmcgZnJvbSB0aGUgZ2F0ZXdheSIsImJhY2t1cC1jb3VudCI6IklmIGJhY2t1cCBjb3VudCBpcyA+IDAsIHdoZW4gYSByb2xsb3ZlciBpcyBkb25lLCBubyBtb3JlIHRoYW4gYmFja3VwIGNvdW50IGZpbGVzIGFyZSBrZXB0IC0gdGhlIG9sZGVzdCBvbmVzIGFyZSBkZWxldGVkIixzdG9yYWdlOiJQcm92aWRlcyBjb25maWd1cmF0aW9uIGZvciBzYXZpbmcgaW5jb21pbmcgZGF0YSBiZWZvcmUgaXQgaXMgc2VudCB0byB0aGUgcGxhdGZvcm0iLCJtYXgtZmlsZS1jb3VudCI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJOdW1iZXIgb2YgbWVzc2FnZXMgdG8gcmV0cmlldmUgZnJvbSB0aGUgc3RvcmFnZSBhbmQgc2VuZCB0byBwbGF0Zm9ybSIsIm1heC1yZWNvcmRzIjoiTWF4aW11bSBjb3VudCBvZiByZWNvcmRzIHRoYXQgd2lsbCBiZSBzdG9yZWQgaW4gb25lIGZpbGUiLCJyZWFkLXJlY29yZC1jb3VudCI6Ik51bWJlciBvZiBtZXNzYWdlcyB0byByZXRyaWV2ZSBmcm9tIHRoZSBzdG9yYWdlIGFuZCBzZW5kIHRvIHBsYXRmb3JtIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIG51bWJlciBvZiBkYXRhIGVudHJpZXMgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZGluZyB0byBwbGF0Zm9ybSIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgdGhlIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gbnVtYmVyIG9mIGRheXMgdGhhdCB0aGUgc3RvcmFnZSB3aWxsIHJldGFpbiBkYXRhIixjb21tYW5kczoiQ29tbWFuZHMgZm9yIGNvbGxlY3RpbmcgYWRkaXRpb25hbCBzdGF0aXN0aWMiLGF0dHJpYnV0ZToiU3RhdGlzdGljIHRlbGVtZXRyeSBrZXkiLHRpbWVvdXQ6IlRpbWVvdXQgZm9yIGNvbW1hbmQgZXhlY3V0aW5nIixjb21tYW5kOiJUaGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kIGV4ZWN1dGlvbiwgd2lsbCBiZSB1c2VkIGFzIHRoZSB2YWx1ZSBmb3IgdGVsZW1ldHJ5IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiRW5hYmxlcyBtb25pdG9yIHRoZSBhY3Rpdml0eSBvZiBlYWNoIGNvbm5lY3RlZCBkZXZpY2UiLCJpbmFjdGl2aXR5LXRpbWVvdXQiOiJUaW1lIGFmdGVyIHdob3NlIHRoZSBnYXRld2F5IHdpbGwgZGlzY29ubmVjdCBkZXZpY2UiLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZGljaXR5IG9mIGRldmljZSBhY3Rpdml0eSBjaGVjayIsIm1pbmltYWwtcGFjay1kZWxheSI6IkRlbGF5IGJldHdlZW4gc2VuZGluZyBwYWNrcyBvZiBtZXNzYWdlcyAoRGVjcmVhc2luZyB0aGlzIHNldHRpbmcgcmVzdWx0cyBpbiBpbmNyZWFzZWQgQ1BVIHVzYWdlKSIscW9zOiJRdWFsaXR5IG9mIFNlcnZpY2UgaW4gTVFUVCBtZXNzYWdpbmcgKDAgLSBhdCBtb3N0IG9uY2UsIDEgLSBhdCBsZWFzdCBvbmNlKSIsInNlcnZlci1wb3J0IjoiTmV0d29yayBwb3J0IG9uIHdoaWNoIEdSUEMgc2VydmVyIHdpbGwgbGlzdGVuIGZvciBpbmNvbWluZyBjb25uZWN0aW9ucy4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Ik1heGltdW0gdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGZvciBhIGtlZXBhbGl2ZSBwaW5nIHJlc3BvbnNlIGJlZm9yZSBjb25zaWRlcmluZyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMta2VlcC1hbGl2ZSI6IkR1cmF0aW9uIGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBhY3RpdmUgUlBDIGNhbGwuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6Ik1heGltdW0gbnVtYmVyIG9mIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHRoYXQgdGhlIHNlcnZlciBjYW4gc2VuZCB3aXRob3V0IHJlY2VpdmluZyBhbnkgZGF0YSBiZWZvcmUgaXQgY29uc2lkZXJzIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gZGF0YSBiZWluZyBzZW50IG9yIHJlY2VpdmVkLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiQWxsb3cgc2VydmVyIHRvIGtlZXAgdGhlIEdSUEMgY29ubmVjdGlvbiBhbGl2ZSBldmVuIHdoZW4gdGhlcmUgYXJlIG5vIGFjdGl2ZSBSUEMgY2FsbHMuIiwicGF0aC1pbi1vcyI6IlBhdGggaW4gZ2F0ZXdheSBvcy4iLG1lbW9yeToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBpbi1tZW1vcnkgcXVldWUsIGl0IGlzIGEgZmFzdGVzdCBidXQgbm8gcGVyc2lzdGVuY2UgZ3VhcmFudGVlLiIsZmlsZToiWW91ciBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHNlcGFyYXRlZCBmaWxlcyBhbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIixzcWxpdGU6IllvdXIgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBmaWxlIGJhc2VkIGRhdGFiYXNlLiBBbmQgd2lsbCBiZSBzYXZlZCBldmVuIGFmdGVyIHRoZSBnYXRld2F5IHJlc3RhcnQuIiwib3BjLXRpbWVvdXQiOiJUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgY29ubmVjdGluZyB0byBPUEMtVUEgc2VydmVyLiIsInNlY3VyaXR5LXBvbGljeSI6IlNlY3VyaXR5IFBvbGljeSBkZWZpbmVzIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHRvIGJlIGFwcGxpZWQuIiwic2Nhbi1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlc2NhbiB0aGUgc2VydmVyLiIsInN1Yi1jaGVjay1wZXJpb2QiOiJQZXJpb2QgdG8gY2hlY2sgdGhlIHN1YnNjcmlwdGlvbnMgaW4gdGhlIE9QQy1VQSBzZXJ2ZXIuIiwiZW5hYmxlLXN1YnNjcmlwdGlvbiI6IklmIHRydWUgLSB0aGUgZ2F0ZXdheSB3aWxsIHN1YnNjcmliZSB0byBpbnRlcmVzdGluZyBub2RlcyBhbmQgd2FpdCBmb3IgZGF0YSB1cGRhdGUgYW5kIGlmIGZhbHNlIC0gdGhlIGdhdGV3YXkgd2lsbCByZXNjYW4gT1BDLVVBIHNlcnZlciBldmVyeSBzY2FuUGVyaW9kSW5NaWxsaXMuIiwic2hvdy1tYXAiOiJTaG93IG5vZGVzIG9uIHNjYW5uaW5nLiIsIm1ldGhvZC1uYW1lIjoiTmFtZSBvZiBtZXRob2Qgb24gT1BDLVVBIHNlcnZlci4iLGFyZ3VtZW50czoiQXJndW1lbnRzIGZvciB0aGUgbWV0aG9kICh3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGFyZ3VtZW50cyBmcm9tIHRoZSBSUEMgcmVxdWVzdCkuIiwibWluLXBhY2stc2l6ZS10by1zZW5kIjoiTWluaW11bSBwYWNrYWdlIHNpemUgZm9yIHNlbmRpbmcuIiwibWF4LXBheWxvYWQtc2l6ZS1ieXRlcyI6Ik1heGltdW0gcGFja2FnZSBzaXplIGluIGJ5dGVzIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIHJlYWQgZGF0YSBmcm9tIG5vZGVzLiIsbW9kYnVzOnsiZnJhbWVyLXR5cGUiOiJUeXBlIG9mIGEgZnJhbWVyIChTb2NrZXQsIFJUVSwgb3IgQVNDSUkpLCBpZiBuZWVkZWQuIixob3N0OiJIb3N0bmFtZSBvciBJUCBhZGRyZXNzIG9mIE1vZGJ1cyBzZXJ2ZXIuIixwb3J0OiJNb2RidXMgc2VydmVyIHBvcnQgZm9yIGNvbm5lY3Rpb24uIiwidW5pdC1pZCI6Ik1vZGJ1cyBzbGF2ZSBJRC4iLCJjb25uZWN0aW9uLXRpbWVvdXQiOiJDb25uZWN0aW9uIHRpbWVvdXQgKGluIHNlY29uZHMpIGZvciB0aGUgTW9kYnVzIHNlcnZlci4iLCJieXRlLW9yZGVyIjoiQnl0ZSBvcmRlciBmb3IgcmVhZGluZyBkYXRhLiIsIndvcmQtb3JkZXIiOiJXb3JkIG9yZGVyIHdoZW4gcmVhZGluZyBtdWx0aXBsZSByZWdpc3RlcnMuIixyZXRyaWVzOiJSZXRyeWluZyBkYXRhIHRyYW5zbWlzc2lvbiB0byB0aGUgbWFzdGVyLiBBY2NlcHRhYmxlIHZhbHVlczogdHJ1ZSBvciBmYWxzZS4iLCJyZXRyaWVzLW9uLWVtcHR5IjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgdGhlIGRhdGEgaXMgZW1wdHkuIiwicmV0cmllcy1vbi1pbnZhbGlkIjoiUmV0cnkgc2VuZGluZyBkYXRhIHRvIHRoZSBtYXN0ZXIgaWYgaXQgZmFpbHMuIiwicG9sbC1wZXJpb2QiOiJQZXJpb2QgaW4gbWlsbGlzZWNvbmRzIHRvIGNoZWNrIGF0dHJpYnV0ZXMgYW5kIHRlbGVtZXRyeSBvbiB0aGUgc2xhdmUuIiwiY29ubmVjdC1hdHRlbXB0LXRpbWUiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgZXN0YWJsaXNoaW5nIGEgY29ubmVjdGlvbiB0byB0aGUgbWFzdGVyLiIsImNvbm5lY3QtYXR0ZW1wdC1jb3VudCI6IlRoZSBudW1iZXIgb2YgY29ubmVjdGlvbiBhdHRlbXB0cyBtYWRlIHRocm91Z2ggdGhlIGdhdGV3YXkuIiwid2FpdC1hZnRlci1mYWlsZWQtYXR0ZW1wdHMiOiJBIHdhaXRpbmcgcGVyaW9kIGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgYXR0ZW1wdGluZyB0byBzZW5kIGRhdGEgdG8gdGhlIG1hc3Rlci4iLCJzZXJpYWwtcG9ydCI6IlNlcmlhbCBwb3J0IGZvciBjb25uZWN0aW9uLiIsYmF1ZHJhdGU6IkJhdWQgcmF0ZSBmb3IgdGhlIHNlcmlhbCBkZXZpY2UuIixzdG9wYml0czoiVGhlIG51bWJlciBvZiBzdG9wIGJpdHMgc2VudCBhZnRlciBlYWNoIGNoYXJhY3RlciBpbiBhIG1lc3NhZ2UgdG8gaW5kaWNhdGUgdGhlIGVuZCBvZiB0aGUgYnl0ZS4iLGJ5dGVzaXplOiJUaGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBieXRlIG9mIHNlcmlhbCBkYXRhLiBUaGlzIGNhbiBiZSBvbmUgb2YgNSwgNiwgNywgb3IgOC4iLHBhcml0eToiVGhlIHR5cGUgb2YgY2hlY2tzdW0gdXNlZCB0byB2ZXJpZnkgZGF0YSBpbnRlZ3JpdHkuIE9wdGlvbnM6IChFKXZlbiwgKE8pZGQsIChOKW9uZS4iLHN0cmljdDoiVXNlIGludGVyLWNoYXJhY3RlciB0aW1lb3V0IGZvciBiYXVkcmF0ZXMg4omkIDE5MjAwLiIsIm9iamVjdHMtY291bnQiOiJEZXBlbmRzIG9uIHRoZSBzZWxlY3RlZCB0eXBlLiIsYWRkcmVzczoiUmVnaXN0ZXIgYWRkcmVzcyB0byB2ZXJpZnkuIixrZXk6IktleSB0byBiZSB1c2VkIGFzIHRoZSBhdHRyaWJ1dGUga2V5IGZvciB0aGUgcGxhdGZvcm0gaW5zdGFuY2UuIiwiZGF0YS1rZXlzIjoiRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZnVuY3Rpb24gY29kZXMgYW5kIGRhdGEgdHlwZXMgY2xpY2sgb24gaGVscCBpY29uIixtb2RpZmllcjoiVGhlIHJldHJpZXZlZCB2YWx1ZSB3aWxsIGJlIGFkanVzdGVkIChieSBtdWx0aXBseWluZyBvciBkaXZpZGluZyBpdCkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBtb2RpZmllciB2YWx1ZS4ifX19fSxSbz17ImFkZC1lbnRyeSI6Itil2LbYp9mB2Kkg2KrZg9mI2YrZhiIsYWR2YW5jZWQ6ItmF2KrZgtiv2YUiLCJjaGVja2luZy1kZXZpY2UtYWN0aXZpdHkiOiLZgdit2LUg2YbYtNin2Lcg2KfZhNis2YfYp9iyIixjb21tYW5kOiLYo9mI2KfZhdixIERvY2tlciIsImNvbW1hbmQtY29waWVkLW1lc3NhZ2UiOiLYqtmFINmG2LPYriDYo9mF2LEgRG9ja2VyINil2YTZiSDYp9mE2K3Yp9mB2LjYqSIsY29uZmlndXJhdGlvbjoi2KfZhNiq2YPZiNmK2YYiLCJjb25uZWN0b3ItYWRkIjoi2KXYttin2YHYqSDZhdmI2LXZhCDYrNiv2YrYryIsImNvbm5lY3Rvci1lbmFibGVkIjoi2KrZhdmD2YrZhiDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZSI6Itin2LPZhSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLCJjb25uZWN0b3ItdHlwZSI6ItmG2YjYuSDYp9mE2YXZiNi12YQiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6ItmG2YjYuSDYp9mE2YXZiNi12YQg2YXYt9mE2YjYqC4iLGNvbm5lY3RvcnM6Itin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLWNvbmZpZyI6Itiq2YPZiNmK2YbYp9iqINin2YTZhdmI2LXZhNin2KoiLCJjb25uZWN0b3JzLXRhYmxlLWVuYWJsZWQiOiLZhdmF2YPZkdmGIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi2KfZhNin2LPZhSIsImNvbm5lY3RvcnMtdGFibGUtdHlwZSI6Itin2YTZhtmI2LkiLCJjb25uZWN0b3JzLXRhYmxlLXN0YXR1cyI6Itin2YTYrdin2YTYqSIsImNvbm5lY3RvcnMtdGFibGUtYWN0aW9ucyI6Itin2YTYpdis2LHYp9ih2KfYqiIsImNvbm5lY3RvcnMtdGFibGUta2V5Ijoi2KfZhNmF2YHYqtin2K0iLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoi2KfZhNmB2KbYqSIsInJwYy1jb21tYW5kLXNlbmQiOiLYpdix2LPYp9mEIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi2KfZhNin2LPYqtis2KfYqNipIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLYqtit2LHZitixINin2YTZhdi52YTZhdin2KoiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLYqtmD2YjZitmGINi52KfZhSIsImRvY2tlci1sYWJlbCI6Itin2LPYqtiu2K/ZhSDYp9mE2KrYudmE2YrZhdin2Kog2KfZhNiq2KfZhNmK2Kkg2YTYqti02LrZitmEIElvVCBHYXRld2F5INmB2YogRG9ja2VyIGNvbXBvc2Ug2YXYuSDYqNmK2KfZhtin2Kog2KfYudiq2YXYp9ivINmE2YTYrNmH2KfYsiDYp9mE2YXYrdiv2K8iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi2KfYs9iq2K7Yr9mFINin2YTYqti52YTZitmF2KfYqiDZhNiq2YbYstmK2YQg2YjYqtir2KjZitiqINmI2KXYudiv2KfYryBkb2NrZXIgY29tcG9zZSIsImRvd25sb2FkLWNvbmZpZ3VyYXRpb24tZmlsZSI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLYqtmG2LLZitmEIGRvY2tlci1jb21wb3NlLnltbCDZhNio2YjYp9io2KrZgyIsImxhdW5jaC1nYXRld2F5Ijoi2KrYtNi62YrZhCDYp9mE2KjZiNin2KjYqSIsImxhdW5jaC1kb2NrZXItY29tcG9zZSI6Itio2K/YoSDYqti02LrZitmEINin2YTYqNmI2KfYqNipINio2KfYs9iq2K7Yr9in2YUg2KfZhNij2YXYsSDYp9mE2KrYp9mE2Yog2YHZiiDYp9mE2LfYsdmB2YrYqSDZhdmGINin2YTZhdis2YTYryDYp9mE2LDZiiDZitit2KrZiNmKINi52YTZiSDZhdmE2YEgZG9ja2VyLWNvbXBvc2UueW1sIiwiY3JlYXRlLW5ldy1nYXRld2F5Ijoi2KXZhti02KfYoSDYqNmI2KfYqNipINis2K/Zitiv2KkiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6ItmH2YQg2KPZhtiqINmF2KrYo9mD2K8g2KPZhtmDINiq2LHZitivINil2YbYtNin2KEg2KjZiNin2KjYqSDYrNiv2YrYr9ipINio2KfYs9mFOiAne3tnYXRld2F5TmFtZX19J9ifIiwiY3JlYXRlZC10aW1lIjoi2YjZgtiqINin2YTYpdmG2LTYp9ihIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6Itiz2YrYqtmFINit2LDZgSDYp9mE2KrZg9mI2YrZhtin2KoiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctYm9keSI6ItmK2YXZg9mGINiq2LnYt9mK2YQg2KfZhNiq2YPZiNmK2YYg2LnZhiDYqNmP2LnYryDZgdmC2Lcg2KXYsNinINmD2KfZhiDZh9mG2KfZgyDZiNi12YjZhCDYrNiz2K/ZiiDYpdmE2Ykg2KfZhNio2YjYp9io2KkuINiz2KrYqtmFINit2LDZgSDYrNmF2YrYuSDYp9mE2KrZg9mI2YrZhtin2Kog2KfZhNiz2KfYqNmC2KkuPGJyPjxicj4gXG4g2YTYqti52LfZitmEINin2YTYqtmD2YjZitmG2Iwg2KPYr9iu2YQg2KfYs9mFINin2YTYqNmI2KfYqNipINij2K/Zhtin2YciLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQiOiLYp9iz2YUg2KfZhNio2YjYp9io2KkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaW5wdXQtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNio2YjYp9io2Kkg2KXZhNiy2KfZhdmKIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLYpdmK2YLYp9mBINin2YTYqti02LrZitmEIixkZWxldGU6Itit2LDZgSDYp9mE2KrZg9mI2YrZhiIsImRvd25sb2FkLXRpcCI6Itiq2YbYstmK2YQg2YXZhNmBINin2YTYqtmD2YjZitmGIiwiZHJvcC1maWxlIjoi2KPZgdmE2YIg2KfZhNmF2YTZgSDZh9mG2Kcg2KPZiCIsZ2F0ZXdheToi2KfZhNio2YjYp9io2KkiLCJnYXRld2F5LWV4aXN0cyI6Itin2YTYrNmH2KfYsiDYqNmG2YHYsyDYp9mE2KfYs9mFINmF2YjYrNmI2K8g2KjYp9mE2YHYudmELiIsImdhdGV3YXktbmFtZSI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Itin2LPZhSDYp9mE2KjZiNin2KjYqSDZhdi32YTZiNioLiIsImdhdGV3YXktc2F2ZWQiOiLYqtmFINit2YHYuCDYqtmD2YjZitmGINin2YTYqNmI2KfYqNipINio2YbYrNin2K0uIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcmVxdWlyZWQiOiLZhdmH2YTYqSDYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqNipIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi2YXZh9mE2Kkg2KfZhNio2YLYp9ihINi52YTZiSDZgtmK2K8g2KfZhNit2YrYp9ipINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6ItmF2YfZhNipINin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K3YqSIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YXYt9mE2YjYqCIsImdycGMta2VlcC1hbGl2ZS1taW4iOiLYp9mE2KjZgtin2KEg2LnZhNmJINmC2YrYryDYp9mE2K3Zitin2Kkg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINij2YLZhCDZhdmGIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6Itin2YTYqNmC2KfYoSDYudmE2Ykg2YLZitivINin2YTYrdmK2KfYqSDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiAo2KjYp9mE2YXZhNmE2Yog2KvYp9mG2YrYqSkiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDZhdi32YTZiNioIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmE2YjZgtiqINio2YrZhiDYp9mE2KjZitmG2LrYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZhNmI2YLYqiDYqNmK2YYg2KfZhNio2YrZhti62KfYqiDYutmK2LEg2LXYp9mE2K0iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2KogKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTZgdin2LXZhCDYp9mE2KjZitmG2Log2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNmB2KfYtdmEINin2YTYqNmK2YbYuiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmF2LfZhNmI2KgiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTYqNmK2YbYutin2Kog2KjYr9mI2YYg2KjZitin2YbYp9iqINmE2Kcg2YrZhdmD2YYg2KPZhiDZitmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNio2YrZhti62KfYqiDYqNiv2YjZhiDYqNmK2KfZhtin2Kog2LrZitixINi12KfZhNitIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQgKNio2KfZhNir2YjYp9mG2YopIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6ItmB2KrYsdipINmB2K3YtSDYp9mE2K7ZhdmI2YQg2YXYt9mE2YjYqNipIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiLZgdiq2LHYqSDZgdit2LUg2KfZhNiu2YXZiNmEINmE2Kcg2YrZhdmD2YYg2KPZhiDYqtmD2YjZhiDYo9mC2YQg2YXZhiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoi2YHYqtix2Kkg2YHYrdi1INin2YTYrtmF2YjZhCDYutmK2LEg2LXYp9mE2K3YqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEICjYqNin2YTYq9mI2KfZhtmKKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KfZhNiu2YXZiNmEINmF2LfZhNmI2KjYqSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6ItmB2KrYsdipINin2YTYrtmF2YjZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiLZgdiq2LHYqSDYp9mE2K7ZhdmI2YQg2LrZitixINi12KfZhNit2KkiLCJqc29uLXBhcnNlIjoiSlNPTiDYutmK2LEg2LXYp9mE2K0uIiwianNvbi1yZXF1aXJlZCI6Itin2YTYrdmC2YQg2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINmB2KfYsdi62YvYpy4iLGxvZ3M6e2xvZ3M6Itin2YTYs9is2YTYp9iqIixkYXlzOiLYo9mK2KfZhSIsaG91cnM6Itiz2KfYudin2KoiLG1pbnV0ZXM6Itiv2YLYp9im2YIiLHNlY29uZHM6Itir2YjYp9mG2YoiLCJkYXRlLWZvcm1hdCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiq2KfYsdmK2K4g2YXYt9mE2YjYqCIsImxvZy1mb3JtYXQiOiLYqtmG2LPZitmCINin2YTYs9is2YQiLCJsb2ctdHlwZSI6ItmG2YjYuSDYp9mE2LPYrNmEIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6Itiq2YbYs9mK2YIg2KfZhNiz2KzZhCDZhdi32YTZiNioIixyZW1vdGU6Itin2YTYqtiz2KzZitmEINi52YYg2KjZj9i52K8iLCJyZW1vdGUtbG9ncyI6Itin2YTYs9is2YTYp9iqINi52YYg2KjZj9i52K8iLGxvY2FsOiLYp9mE2KrYs9is2YrZhCDYp9mE2YXYrdmE2YoiLGxldmVsOiLZhdiz2KrZiNmJINin2YTYs9is2YQiLCJmaWxlLXBhdGgiOiLZhdiz2KfYsSDYp9mE2YXZhNmBIiwiZmlsZS1wYXRoLXJlcXVpcmVkIjoi2YXYs9in2LEg2KfZhNmF2YTZgSDZhdi32YTZiNioIiwic2F2aW5nLXBlcmlvZCI6ItmB2KrYsdipINit2YHYuCDYp9mE2LPYrNmEIiwic2F2aW5nLXBlcmlvZC1taW4iOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KPZgtmEINmF2YYgMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiLZgdiq2LHYqSDYrdmB2Lgg2KfZhNiz2KzZhCDZhdi32YTZiNio2KkiLCJiYWNrdXAtY291bnQiOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSIsImJhY2t1cC1jb3VudC1taW4iOiLYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDZhNinINmK2YXZg9mGINij2YYg2YrZg9mI2YYg2KPZgtmEINmF2YYgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6Iti52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipINmF2LfZhNmI2KgifSwibWluLXBhY2stc2VuZC1kZWxheSI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2KkgKNio2KfZhNmF2YTZhNmKINir2KfZhtmK2KkpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2YXYt9mE2YjYqCIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoi2YTYpyDZitmF2YPZhiDYo9mGINmK2YPZiNmGINin2YTYrdivINin2YTYo9iv2YbZiSDZhNiq2KPYrtmK2LEg2KXYsdiz2KfZhCDYp9mE2K3YstmF2Kkg2KPZgtmEINmF2YYgMCIsIm5vLWNvbm5lY3RvcnMiOiLZhNinINiq2YjYrNivINmF2YjYtdmE2KfYqiIsIm5vLWRhdGEiOiLZhNinINiq2YjYrNivINiq2YPZiNmK2YbYp9iqIiwibm8tZ2F0ZXdheS1mb3VuZCI6ItmE2YUg2YrYqtmFINin2YTYudir2YjYsSDYudmE2Ykg2KjZiNin2KjYqS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiJ3t7aXRlbX19JyDYutmK2LEg2YXZiNis2YjYry4iLCJwYXRoLWxvZ3MiOiLZhdiz2KfYsSDYpdmE2Ykg2YXZhNmB2KfYqiDYp9mE2LPYrNmEIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi2KfZhNmF2LPYp9ixINmF2LfZhNmI2KguIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2KjZgtin2KEg2LnZhNmJINin2YTYrdmK2KfYqSDZitiz2YXYrSDYqNiv2YjZhiDZhdmD2KfZhNmF2KfYqiIscmVtb3RlOiLYp9mE2KrZg9mI2YrZhiDYudmGINio2Y/YudivIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiLZhdiz2KrZiNmJINin2YTYqtiz2KzZitmEIiwicmVtb3ZlLWVudHJ5Ijoi2KXYstin2YTYqSDYp9mE2KrZg9mI2YrZhiIsInJlbW90ZS1zaGVsbCI6ItmC2LTYsdipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Itin2YTYqtmD2YjZitmGINi52YYg2KjZj9i52K8iLG90aGVyOiLYotiu2LEiLCJzYXZlLXRpcCI6Itit2YHYuCDZhdmE2YEg2KfZhNiq2YPZiNmK2YYiLCJzZWN1cml0eS10eXBlIjoi2YbZiNi5INin2YTYo9mF2KfZhiIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Itix2YXYsiDYp9mE2YjYtdmI2YQiLCJ1c2VybmFtZS1wYXNzd29yZCI6Itin2LPZhSDYp9mE2YXYs9iq2K7Yr9mFINmI2YPZhNmF2Kkg2KfZhNmF2LHZiNixIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDYsdmF2LIg2KfZhNmI2LXZiNmEIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsg2KfZhNmF2YHYqtin2K0g2KfZhNiu2KfYtSJ9LCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYrtin2K/ZhSIsc3RhdGlzdGljczp7c3RhdGlzdGljOiLYpdit2LXYp9im2YrYqSIsc3RhdGlzdGljczoi2KfZhNil2K3Ytdin2KbZitin2KoiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLZhNinINiq2KrZiNmB2LEg2KXYrdi12KfYptmK2KfYqiIsY29tbWFuZHM6Itin2YTYo9mI2KfZhdixIiwic2VuZC1wZXJpb2QiOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqICjYqNin2YTYq9mI2KfZhtmKKSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDZhdi32YTZiNio2KkiLCJzZW5kLXBlcmlvZC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2KXYsdiz2KfZhCDYp9mE2KXYrdi12KfYptmK2KfYqiDYo9mC2YQg2YXZhiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiLZgdiq2LHYqSDYpdix2LPYp9mEINin2YTYpdit2LXYp9im2YrYp9iqINi62YrYsSDYtdin2YTYrdipIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiAo2KjYp9mE2KvZiNin2YbZiikiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINmF2LfZhNmI2KjYqSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2YHYqtix2Kkg2YHYrdi1INiq2YPZiNmK2YYg2KfZhNmF2YjYtdmE2KfYqiDYo9mC2YQg2YXZhiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiLZgdiq2LHYqSDZgdit2LUg2KrZg9mI2YrZhiDYp9mE2YXZiNi12YTYp9iqINi62YrYsSDYtdin2YTYrdipIixhZGQ6Itil2LbYp9mB2Kkg2KPZhdixIix0aW1lb3V0OiLYp9mE2YXZh9mE2KkiLCJ0aW1lb3V0LW1zIjoi2KfZhNmF2YfZhNipICjYqNin2YTZhdmE2YTZiiDYq9in2YbZitipKSIsInRpbWVvdXQtcmVxdWlyZWQiOiLYp9mE2YXZh9mE2Kkg2YXYt9mE2YjYqNipIiwidGltZW91dC1taW4iOiLZhNinINmK2YXZg9mGINij2YYg2KrZg9mI2YYg2KfZhNmF2YfZhNipINij2YLZhCDZhdmGIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiLYp9mE2YXZh9mE2Kkg2LrZitixINi12KfZhNit2KkiLCJhdHRyaWJ1dGUtbmFtZSI6Itin2LPZhSDYp9mE2LPZhdipIiwiYXR0cmlidXRlLW5hbWUtcmVxdWlyZWQiOiLYp9iz2YUg2KfZhNiz2YXYqSDZhdi32YTZiNioIixjb21tYW5kOiLYp9mE2KPZhdixIiwiY29tbWFuZC1yZXF1aXJlZCI6Itin2YTYo9mF2LEg2YXYt9mE2YjYqCIsImNvbW1hbmQtcGF0dGVybiI6Itin2YTYo9mF2LEg2LrZitixINi12KfZhNitIixyZW1vdmU6Itil2LLYp9mE2Kkg2KfZhNij2YXYsSJ9LHN0b3JhZ2U6Itin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi2KfZhNiz2KzZhNin2Kog2KfZhNmC2LXZiNmJINmB2Yog2KfZhNmF2YTZgSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINin2YTZhdmE2YHYp9iqIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmH2YggMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi2KfZhNi52K/YryDYutmK2LEg2LXYp9mE2K0uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLYp9mE2LnYr9ivINmF2LfZhNmI2KguIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Itin2YTYs9is2YTYp9iqINin2YTZgti12YjZiSDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLYp9mE2LPYrNmE2KfYqiDYp9mE2YLYtdmI2Ykg2YXYt9mE2YjYqNipLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZgdmKINin2YTYqtiu2LLZitmGIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YTYudiv2K8g2KfZhNiz2KzZhNin2Kog2YfZiCAxLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiLYudiv2K8g2YLYsdin2KHYqSDYp9mE2LPYrNmE2KfYqiDZhdi32YTZiNioLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50Ijoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINmC2LHYp9ih2Kkg2KfZhNiz2KzZhNin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNi52K/YryDYp9mE2LPYrNmE2KfYqiDZh9mIIDEuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi2LnYr9ivINin2YTZgtix2KfYodipINin2YTZgti12YjZiSDZhdi32YTZiNioLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6ItmF2LPYp9ixINmF2KzZhNivINin2YTYqNmK2KfZhtin2KoiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDZhdis2YTYryDYp9mE2KjZitin2YbYp9iqINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYWNrLXNpemUiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYrdis2YUg2K3YstmF2Kkg2KfZhNit2K/YqyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZh9mIIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Itin2YTYudiv2K8g2LrZitixINi12KfZhNitLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi2KfZhNit2KzZhSDYp9mE2KPZgti12Ykg2YTYrdiy2YXYqSDYp9mE2K3Yr9irINmF2LfZhNmI2KguIiwic3RvcmFnZS1wYXRoIjoi2YXYs9in2LEg2KfZhNiq2K7YstmK2YYiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLZhdiz2KfYsSDYp9mE2KrYrtiy2YrZhiDZhdi32YTZiNioLiIsInN0b3JhZ2UtdHlwZSI6ItmG2YjYuSDYp9mE2KrYrtiy2YrZhiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2YXZhNmB2KfYqiIsIm1lbW9yeS1zdG9yYWdlIjoi2KrYrtiy2YrZhiDYp9mE2LDYp9mD2LHYqSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoi2KvZitmG2LrYstio2YjYsdivIixnZW5lcmFsOiLYudin2YUiLCJ0aGluZ3Nib2FyZC1ob3N0Ijoi2YXYttmK2YEg2KvZitmG2LrYstio2YjYsdivIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Itin2YTZhdi22YrZgSDZhdi32YTZiNioLiIsInRoaW5nc2JvYXJkLXBvcnQiOiLZhdmG2YHYsCDYq9mK2YbYutiy2KjZiNix2K8iLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Itin2YTYrdivINin2YTYo9iv2YbZiSDZhNix2YLZhSDYp9mE2YXZhtmB2LAg2YfZiCAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6Itin2YTZhdmG2YHYsCDYutmK2LEg2LXYp9mE2K0uIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Itin2YTZhdmG2YHYsCDZhdi32YTZiNioLiIsdGlkeToi2KrYsdiq2YrYqCIsInRpZHktdGlwIjoi2KrYsdiq2YrYqCDYqtmD2YjZitmGIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiLYqtmD2YjZitmGINmF2YjYtdmEIHt7dHlwZU5hbWV9fSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoi2KfZhNmF2LPYp9ixINil2YTZiSDYtNmH2KfYr9ipIENBINi52YTZiSDYp9mE2KjZiNin2KjYqSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2LTZh9in2K/YqSDYp9mE2LnZhdmK2YQg2LnZhNmJINin2YTYqNmI2KfYqNipIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi2YrYrNioINiq2K3Yr9mK2K8g2YHYrdi1IFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYs9in2LnYp9iqLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoi2KfZhNix2YLZhSDYutmK2LEg2LXYp9mE2K0uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwg2KfZhNix2LPYp9im2YQg2KjYp9mE2KPZitin2YUiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6ItmK2KzYqCDYqtit2K/ZitivIFRUTCDYp9mE2LHYs9in2KbZhCDYqNin2YTYo9mK2KfZhS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLYp9mE2K3YryDYp9mE2KPYr9mG2Ykg2YfZiCAxLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLXBhdHRlcm4iOiLYp9mE2LHZgtmFINi62YrYsSDYtdin2YTYrS4iLCJtcXR0LXFvcyI6Itis2YjYr9ipINin2YTYrtiv2YXYqSAoUW9TKSIsIm1xdHQtcW9zLXJlcXVpcmVkIjoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipIChRb1MpINmF2LfZhNmI2KjYqSIsIm1xdHQtcW9zLXJhbmdlIjoi2KrYqtix2KfZiNitINmC2YrZhSDYrNmI2K/YqSDYp9mE2K7Yr9mF2KkgKFFvUykg2YXZhiAwINil2YTZiSAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdmB2KrYp9itINin2YTYrtin2LUg2LnZhNmJINin2YTYqNmI2KfYqNipIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLYqtio2K/ZitmEINmI2LbYuSDZhdmE2KEg2KfZhNi02KfYtNipIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiLYqtmD2YjZitmGIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6Itil2LbYp9mB2Kkv2KrYrdiv2YrYqyDYqtmD2YjZitmGIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2YPZiNmK2YYg2YjYpdiv2KfYsdipINin2YTYqNmI2KfYqNipINi52YYg2KjZj9i52K8iLCJyZW1vdGUtc2hlbGwiOiLZitmF2YPZhtmDINiq2YXZg9mK2YYg2KfZhNiq2K3Zg9mFINin2YTYqNi52YrYryDZgdmKINmG2LjYp9mFINin2YTYqti02LrZitmEINmF2Lkg2KfZhNio2YjYp9io2Kkg2YXZhiDYudmG2LXYsSDZiNin2KzZh9ipINin2YTZhdiz2KrYrtiv2YUg2YLYtNix2Kkg2LnZhiDYqNmP2LnYryIsaG9zdDoi2KfYs9mFINin2YTZhdi22YrZgSDYo9mIINi52YbZiNin2YYgSVAg2YTYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLHBvcnQ6ItmF2YbZgdiwINiu2K/ZhdipIE1RVFQg2LnZhNmJINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIsdG9rZW46Itix2YXYsiDYp9mE2YjYtdmI2YQg2YTZhNio2YjYp9io2Kkg2YXZhiDYrtin2K/ZhSDYq9mK2YbYutiy2KjZiNix2K8iLCJjbGllbnQtaWQiOiLZhdi52LHZgSDYudmF2YrZhCBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIix1c2VybmFtZToi2KfYs9mFINin2YTZhdiz2KrYrtiv2YUgTVFUVCDZhNmE2KjZiNin2KjYqSDZhdmGINiu2KfYr9mFINir2YrZhti62LLYqNmI2LHYryIscGFzc3dvcmQ6ItmD2YTZhdipINin2YTZhdix2YjYsSBNUVRUINmE2YTYqNmI2KfYqNipINmF2YYg2K7Yp9iv2YUg2KvZitmG2LrYstio2YjYsdivIiwiY2EtY2VydCI6Itin2YTZhdiz2KfYsSDYpdmE2Ykg2YXZhNmBINi02YfYp9iv2KkgQ0EiLCJkYXRlLWZvcm0iOiLYqtmG2LPZitmCINin2YTYqtin2LHZitiuINmB2Yog2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwiZGF0YS1mb2xkZXIiOiLYp9mE2YXYs9in2LEg2KXZhNmJINin2YTZhdis2YTYryDYp9mE2LDZiiDYs9mK2K3YqtmI2Yog2LnZhNmJINin2YTYqNmK2KfZhtin2KogKNmG2LPYqNmKINij2Ygg2YXYt9mE2YIpIiwibG9nLWZvcm1hdCI6Itiq2YbYs9mK2YIg2LHYs9in2YTYqSDYp9mE2LPYrNmEIiwicmVtb3RlLWxvZyI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDYp9mE2KrYs9is2YrZhCDYp9mE2KjYudmK2K8g2YjZgtix2KfYodipINin2YTYs9is2YTYp9iqINmF2YYg2KfZhNio2YjYp9io2KkiLCJiYWNrdXAtY291bnQiOiLYpdiw2Kcg2YPYp9mGINi52K/YryDYp9mE2YbYs9iuINin2YTYp9it2KrZitin2LfZitipID4gMNiMINi52YbYryDYudmF2YTZitipINiq2K/ZiNmK2LHYjCDZhNinINmK2KrZhSDYp9mE2KfYrdiq2YHYp9i4INio2KPZg9ir2LEg2YXZhiDYudiv2K8g2KfZhNmG2LPYriDYp9mE2KfYrdiq2YrYp9i32YrYqSDYp9mE2YXYrdiv2K/YqSAtINmK2KrZhSDYrdiw2YEg2KfZhNij2YLYr9mFIixzdG9yYWdlOiLZitmI2YHYsSDYqtmD2YjZitmG2YvYpyDZhNit2YHYuCDYp9mE2KjZitin2YbYp9iqINin2YTZiNin2LHYr9ipINmC2KjZhCDYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KfZhNmF2YbYtdipIiwibWF4LWZpbGUtY291bnQiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNi52K/YryDYp9mE2YXZhNmB2KfYqiDYp9mE2KrZiiDYs9mK2KrZhSDYpdmG2LTYp9ik2YfYpyIsIm1heC1yZWFkLWNvdW50Ijoi2LnYr9ivINin2YTYsdiz2KfYptmEINmE2YTYrdi12YjZhCDYudmE2YrZh9inINmF2YYg2KfZhNiq2K7YstmK2YYg2YjYpdix2LPYp9mE2YfYpyDYpdmE2Ykg2KvZitmG2LrYstio2YjYsdivIiwibWF4LXJlY29yZHMiOiLYp9mE2LnYr9ivINin2YTYo9mC2LXZiSDZhNmE2LPYrNmE2KfYqiDYp9mE2KrZiiDYs9iq2K7YstmGINmB2Yog2YXZhNmBINmI2KfYrdivIiwicmVhZC1yZWNvcmQtY291bnQiOiLYudiv2K8g2KfZhNix2LPYp9im2YQg2YTZhNit2LXZiNmEINi52YTZitmH2Kcg2YXZhiDYp9mE2KrYrtiy2YrZhiDZiNil2LHYs9in2YTZh9inINil2YTZiSDYq9mK2YbYutiy2KjZiNix2K8iLCJtYXgtcmVjb3Jkcy1jb3VudCI6Itin2YTYudiv2K8g2KfZhNij2YLYtdmJINmE2YTYqNmK2KfZhtin2Kog2YHZiiDYp9mE2KrYrtiy2YrZhiDZgtio2YQg2KXYsdiz2KfZhNmH2Kcg2KXZhNmJINir2YrZhti62LLYqNmI2LHYryIsInR0bC1jaGVjay1ob3VyIjoi2YPZhSDZhdix2Kkg2LPZitiq2K3ZgtmCINin2YTYqNmI2KfYqNipINmF2YYg2KfZhNio2YrYp9mG2KfYqiDYp9mE2YLYr9mK2YXYqSIsInR0bC1tZXNzYWdlcy1kYXkiOiLYp9mE2K3YryDYp9mE2KPZgti12Ykg2YTYudiv2K8g2KfZhNij2YrYp9mFINin2YTYqtmKINiz2KrYrdiq2YHYuCDZgdmK2YfYpyDYp9mE2KrYrtiy2YrZhiDYqNin2YTYqNmK2KfZhtin2KoiLGNvbW1hbmRzOiLYp9mE2KPZiNin2YXYsSDZhNis2YXYuSDYp9mE2KXYrdi12KfYptmK2KfYqiDYp9mE2KXYttin2YHZitipIixhdHRyaWJ1dGU6ItmF2YHYqtin2K0g2KrZhNmC2Yog2KfZhNil2K3Ytdin2KbZitin2KoiLHRpbWVvdXQ6ItmF2YfZhNipINiy2YXZhtmK2Kkg2YTYqtmG2YHZitiwINin2YTYo9mF2LEiLGNvbW1hbmQ6Itiz2YrYqtmFINin2LPYqtiu2K/Yp9mFINmG2KrZitis2Kkg2KrZhtmB2YrYsCDYp9mE2KPZhdixINmD2YLZitmF2Kkg2YTYqtmE2YLZiiDYp9mE2KXYrdi12KfYptmK2KfYqiIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6ItmK2YXZg9mG2YMg2KrZhdmD2YrZhiDZhdix2KfZgtio2Kkg2YbYtNin2Lcg2YPZhCDYrNmH2KfYsiDZhdiq2LXZhCIsImluYWN0aXZpdHktdGltZW91dCI6Itin2YTZiNmC2Kog2KjYudivINin2YTYsNmKINiz2KrZgdi12YQg2KfZhNio2YjYp9io2Kkg2KfZhNis2YfYp9iyIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLYqtmD2LHYp9ixINmB2K3YtSDZhti02KfYtyDYp9mE2KzZh9in2LIiLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLYp9mE2KrYo9iu2YrYsSDYqNmK2YYg2KXYsdiz2KfZhCDYrdiy2YUg2KfZhNix2LPYp9im2YQgKNmK2KTYr9mKINiq2YLZhNmK2YQg2YfYsNinINin2YTYpdi52K/Yp9ivINil2YTZiSDYstmK2KfYr9ipINin2LPYqtiu2K/Yp9mFINmI2K3Yr9ipINin2YTZhdi52KfZhNis2Kkg2KfZhNmF2LHZg9iy2YrYqSkiLHFvczoi2KzZiNiv2Kkg2KfZhNiu2K/ZhdipINmB2Yog2LHYs9in2KbZhCBNUVRUICgwIC0g2LnZhNmJINin2YTYo9mD2KvYsSDZhdix2Kkg2YjYp9it2K/YqdiMIDEgLSDYudmE2Ykg2KfZhNij2YLZhCDZhdix2Kkg2YjYp9it2K/YqSkiLCJzZXJ2ZXItcG9ydCI6ItmF2YbZgdiwINin2YTYtNio2YPYqSDYp9mE2LDZiiDYs9mK2LPYqtmF2Lkg2YHZitmHINiu2KfYr9mFIEdSUEMg2YTZhNin2LPYqtmB2LPYp9ix2KfYqiDYp9mE2YjYp9ix2K/YqS4iLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6Itin2YTYrdivINin2YTYo9mC2LXZiSDZhNmE2YjZgtiqINin2YTYsNmKINmK2KzYqCDYo9mGINmK2YbYqti42LHZhyDYp9mE2K7Yp9iv2YUg2YTYp9iz2KrYrNin2KjYqSDYsdiz2KfZhNipINin2YTYrdmB2KfYuCDYudmE2Ykg2KfZhNin2KrYtdin2YQg2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMta2VlcC1hbGl2ZSI6Itin2YTZhdiv2Kkg2KjZitmGINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTZhdiq2LnYp9mC2KjYqSDYudmG2K8g2LnYr9mFINmI2KzZiNivINin2LPYqtiv2LnYp9ihIFJQQyDZhti02LcuIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2YLYtdmJINmE2LnYr9ivINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINin2YTYqtmKINmK2YXZg9mGINmE2YTYrtin2K/ZhSDYpdix2LPYp9mE2YfYpyDYr9mI2YYg2KrZhNmC2Yog2KPZiiDYqNmK2KfZhtin2Kog2YLYqNmEINin2LnYqtio2KfYsSDYp9mE2KfYqti12KfZhCDZhdmK2KrZi9inLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoi2KfZhNit2K8g2KfZhNij2K/ZhtmJINmE2YTZiNmC2Kog2KfZhNiw2Yog2YrYrNioINmB2YrZhyDYo9mGINmK2YbYqti42LEg2KfZhNiu2KfYr9mFINio2YrZhiDYpdix2LPYp9mEINix2LPYp9im2YQg2K3Zgdi4INin2YTYp9iq2LXYp9mEINi52YbYryDYudiv2YUg2KXYsdiz2KfZhCDYo9mIINin2LPYqtmE2KfZhSDYqNmK2KfZhtin2KouIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiLYp9mE2LPZhdin2K0g2YTZhNiu2KfYr9mFINio2KXYqNmC2KfYoSDYp9iq2LXYp9mEIEdSUEMg2K3ZitmL2Kcg2K3YqtmJINi52YbYr9mF2Kcg2YTYpyDYqtmD2YjZhiDZh9mG2KfZgyDYp9iz2KrYr9i52KfYodin2KogUlBDINmG2LTYt9ipLiJ9fSxWbz17ImFkZC1lbnRyeSI6IkFmZWdpciBjb25maWd1cmFjacOzIiwiY29ubmVjdG9yLWFkZCI6IkFmZWdpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJDYWwgbm9tIGNvbmVjdG9yLiIsImNvbm5lY3Rvci10eXBlIjoiVGlwdXMgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNhbCB0aXB1cyBjb25lY3Rvci4iLGNvbm5lY3RvcnM6IkNvbmZpZ3VyYWNpw7MgZGUgY29uZWN0b3JzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JlYXIgdW4gZ2F0ZXdheSBub3UiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IkNyZWFyIHVuIG5vdSBnYXRld2F5IGFtYiBlbCBub206ICd7e2dhdGV3YXlOYW1lfX0nPyIsZGVsZXRlOiJFc2JvcnJhciBjb25maWd1cmFjacOzIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FycmVnYXIgZml0eGVyIGRlIGNvbmZpZ3VyYWNpw7MiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkphIGV4aXN0ZWl4IHVuIGRpc3Bvc2l0aXUgYW1iIGVsIG1hdGVpeCBub20uIiwiZ2F0ZXdheS1uYW1lIjoiTm9tIGRlIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJDYWwgdW4gbm9tIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7MgZGUgZ2F0ZXdheSBncmF2YWRhIHNhdGlzZmFjdMOycmlhbWVudC4iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6BsaWQuIiwianNvbi1yZXF1aXJlZCI6IkVsIGNhbXAgbm8gcG90IHNlciBidWl0LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBoaSBoYSBjb25lY3RvcnMiLCJuby1kYXRhIjoiTm8gaGkgaGEgY29uZmlndXJhY2lvbnMiLCJuby1nYXRld2F5LWZvdW5kIjoiTm8gcydoYSB0cm9iYXQgY2FwIGdhdGV3YXkuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vIHRyb2JhdC4iLCJwYXRoLWxvZ3MiOiJSdXRhIGFscyBmaXR4ZXJzIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IkNhbCBydXRhLiIscmVtb3RlOiJDb25maWd1cmFjacOzIHJlbW90YSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTml2ZWwgZGUgbG9nZ2luZyIsInJlbW92ZS1lbnRyeSI6IkVzYm9ycmFyIGNvbmZpZ3VyYWNpw7MiLCJzYXZlLXRpcCI6IkdyYXZhciBmaXR4ZXIgZGUgY29uZmlndXJhY2nDsyIsInNlY3VyaXR5LXR5cGUiOiJUaXB1cyBkZSBzZWd1cmV0YXQiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkJ2FjY8OpcyIsdGxzOiJUTFMifSxzdG9yYWdlOiJHcmFiYWNpw7MiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJOw7ptZXJvIG3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZml0eGVyIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoHhpbSBkZSBmaXR4ZXJzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiRWwgbsO6bWVybyBtw61uaW0gw6lzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiQ2FsIG7Dum1lcm8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik3DoHhpbSBkZSByZWdpc3RyZXMgZW4gZWwgbWFnYXR6ZW0iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltIMOpcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOgbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1pZGEgbcOgeGltIGRlIGVzZGV2ZW5pbWVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbSDDqXMgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6BsaWQuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJDYWwgbsO6bWVyby4iLCJzdG9yYWdlLXBhdGgiOiJSdXRhIGRlIG1hZ2F0emVtIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiQ2FsIHJ1dGEgZGUgbWFnYXR6ZW0uIiwic3RvcmFnZS10eXBlIjoiVGlwdXMgZGUgbWFnYXR6ZW0iLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik1hZ2F0emVtIGZpdHhlciIsIm1lbW9yeS1zdG9yYWdlIjoiTWFnYXR6ZW0gZW4gbWVtb3JpYSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IkNhbCBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQb3J0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJFbCBwb3J0IG3DoHhpbSDDqXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJFbCBwb3J0IG3DrW5pbSDDqXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQb3J0IG5vIHbDoGxpZC4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiQ2FsIHBvcnQuIix0aWR5OiJFbmRyZcOnYXQiLCJ0aWR5LXRpcCI6IkVuZHJlw6dhdCBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDsyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlJ1dGEgYWwgY2VydGlmaWNhdCBDQSBhbCBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUnV0YSBhbCBjZXJ0aWZpY2F0IGNsaWVudCBhbCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJSdXRhIGEgbGEgY2xhdSBwcml2YWRhIGFsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7MgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWZlZ2lyL2FjdHVhbGl6YXIgY29uZmlndXJhY2nDsyBKU09OIn0sQm89eyJhZGQtZW50cnkiOiJQxZlpZGF0IGtvbmZpZ3VyYWNpIiwiY29ubmVjdG9yLWFkZCI6IlDFmWlkYXQgbm92w70ga29uZWt0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IlBvdm9saXQga29uZWt0b3IiLCJjb25uZWN0b3ItbmFtZSI6Ik7DoXpldiBrb25la3RvcnUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Ik7DoXpldiBrb25la3RvcnUgamUgcG92aW5uw70uIiwiY29ubmVjdG9yLXR5cGUiOiJUeXAga29uZWt0b3J1IiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJUeXAga29uZWt0b3J1IGplIHBvdmlubsO9LiIsY29ubmVjdG9yczoiS29uZmlndXJhY2Uga29uZWt0b3J1IiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiVnl0dm/FmWl0IG5vdm91IGJyw6FudSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiSnN0ZSBzaSBqaXN0aSwgxb5lIGNoY2V0ZSB2eXR2b8WZaXQgbm92b3UgYnLDoW51IHMgbsOhenZlbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IlNtYXphdCBrb25maWd1cmFjaSIsImRvd25sb2FkLXRpcCI6IlN0w6Fobm91dCBzb3Vib3Iga29uZmlndXJhY2UiLGdhdGV3YXk6IkJyw6FuYSIsImdhdGV3YXktZXhpc3RzIjoiWmHFmcOtemVuw60gc2Ugc2hvZG7DvW0gbsOhenZlbSBqacW+IGV4aXN0dWplLiIsImdhdGV3YXktbmFtZSI6Ik7DoXpldiBicsOhbnkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOw6F6ZXYgYnLDoW55IGplIHBvdmlubsO9LiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjZSBicsOhbnkgYnlsYSDDunNwxJvFoW7EmyB1bG/FvmVuYS4iLCJqc29uLXBhcnNlIjoiTmVwbGF0bsO9IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmVtxa/FvmUgYsO9dCBwcsOhemRuw6kuIiwibm8tY29ubmVjdG9ycyI6IsW9w6FkbsOpIGtvbmVrdG9yeSIsIm5vLWRhdGEiOiLFvcOhZG7DqSBrb25maWd1cmFjZSIsIm5vLWdhdGV3YXktZm91bmQiOiLFvcOhZG7DqSBicsOhbnkgbmVieWx5IG5hbGV6ZW55LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIgJ3t7aXRlbX19JyBuZW5hbGV6ZW5hLiIsInBhdGgtbG9ncyI6IkNlc3RhIGsgc291Ym9yxa9tIGxvZ3UiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJDZXN0YSBqZSBwb3Zpbm7DoS4iLHJlbW90ZToiVnpkw6FsZW7DoSBrb25maWd1cmFjZSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiw5pyb3ZlxYggbG9nb3bDoW7DrSIsInJlbW92ZS1lbnRyeSI6Ik9kc3RyYW5pdCBrb25maWd1cmFjaSIsInNhdmUtdGlwIjoiVWxvxb5pdCBzb3Vib3Iga29uZmlndXJhY2UiLCJzZWN1cml0eS10eXBlIjoiVHlwIHphYmV6cGXEjWVuw60iLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJQxZnDrXN0dXBvdsO9IHRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IsOabG/FvmnFoXTEmyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiBzb3Vib3J1Iiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbcOhbG7DrSBwb8SNZXQgc291Ym9yxa8iLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbcOhbG7DrSBwb8SNZXQgamUgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiUG/EjWV0IG5lbsOtIHBsYXRuw70uIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJQb8SNZXQgamUgcG92aW5uw70uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltw6FsbsOtIHBvxI1ldCB6w6F6bmFtxa8gdiDDumxvxb5pxaF0aSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IHrDoXpuYW3FryBqZSAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbcOhbG7DrSBwb8SNZXQgesOhem5hbcWvIGplIHBvdmlubsO9LiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW3DoWxuw60gcG/EjWV0IGplIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IlBvxI1ldCBuZW7DrSBwbGF0bsO9LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW3DoWxuw60gdmVsaWtvc3Qgc291Ym9ydSB1ZMOhbG9zdMOtIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtcGF0aCI6IkNlc3RhIGsgw7psb8W+acWhdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJDZXN0YSBrIMO6bG/FvmnFoXRpIGplIHBvdmlubsOhLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCDDumxvxb5pxaF0xJsiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IlNvdWJvciIsIm1lbW9yeS1zdG9yYWdlIjoiUGFtxJvFpSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJIb3N0IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamUgcG92aW5uw70uIiwidGhpbmdzYm9hcmQtcG9ydCI6IlBvcnQgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltw6FsbsOtIMSNw61zbG8gcG9ydHUgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbcOhbG7DrSDEjcOtc2xvIHBvcnR1IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBuZW7DrSBwbGF0bsO9LiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGplIHBvdmlubsO9LiIsdGlkeToiVXNwb8WZw6FkYXQiLCJ0aWR5LXRpcCI6IlVzcG/FmcOhZGF0IEpTT04ga29uZmlndXJhY2kiLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJLb25maWd1cmFjZSB7e3R5cGVOYW1lfX0ga29uZWt0b3J1IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBDQSBicsOhbnkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDZXN0YSBrIGNlcnRpZmlrw6F0dSBrbGllbnRhIGJyw6FueSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiQ2VzdGEgayBwcml2w6F0bsOtbXUga2zDrcSNaSBicsOhbnkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlDFmWVwbm91dCBkbyByZcW+aW11IGNlbMOpIG9icmF6b3ZreSIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiSlNPTioga29uZmlndXJhY2UiLCJ1cGRhdGUtY29uZmlnIjoiUMWZaWRhdC9lZGl0b3ZhdCBKU09OIGtvbmZpZ3VyYWNpIn0sVW89eyJhZGQtZW50cnkiOiJUaWxmw7hqIGtvbmZpZ3VyYXRpb24iLCJjb25uZWN0b3ItYWRkIjoiVGlsZsO4aiBueSBzdGlrZm9yYmluZGVsc2UiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkFrdGl2w6lyIHN0aWtmb3JiaW5kZWxzZSIsImNvbm5lY3Rvci1uYW1lIjoiTmF2biBww6Ugc3Rpa2ZvcmJpbmRlbHNlIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJOYXZuIHDDpSBzdGlrZm9yYmluZGVsc2UgZXIgcMOla3LDpnZldC4iLCJjb25uZWN0b3ItdHlwZSI6IlN0aWtmb3JiaW5kZWxzZXN0eXBlIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTdGlrZm9yYmluZGVsc2VzdHlwZSBlciBww6VrcsOmdmV0LiIsY29ubmVjdG9yczoiS29uZmlndXJhdGlvbiBhZiBzdGlrZm9yYmluZGVsc2VyIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiT3ByZXQgZW4gbnkgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiIixkZWxldGU6IlNsZXQga29uZmlndXJhdGlvbiIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGtvbmZpZ3VyYXRpb25zZmlsIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJFbmhlZCBtZWQgc2FtbWUgbmF2biBmaW5kZXMgYWxsZXJlZGUuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheS1uYXZuIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheS1uYXZuIGVyIHDDpWtyw6Z2ZXQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkta29uZmlndXJhdGlvbmVuIGJsZXYgZ2VtdC4iLCJqc29uLXBhcnNlIjoiSWtrZSBneWxkaWcgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmVsdGV0IG3DpSBpa2tlIHbDpnJlIHRvbXQuIiwibm8tY29ubmVjdG9ycyI6IkluZ2VuIHN0aWtmb3JiaW5kZWxzZXIiLCJuby1kYXRhIjoiSW5nZW4ga29uZmlndXJhdGlvbmVyIiwibm8tZ2F0ZXdheS1mb3VuZCI6IkluZ2VuIGdhdGV3YXkgZnVuZGV0LiIsIm5vLWdhdGV3YXktbWF0Y2hpbmciOiIiLCJwYXRoLWxvZ3MiOiJTdGkgdGlsIGxvZ2ZpbGVyIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiU3RpIGVyIHDDpWtyw6Z2ZXQuIixyZW1vdGU6IkZqZXJua29uZmlndXJhdGlvbiIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nZsO4cmluZ3NuaXZlYXUiLCJyZW1vdmUtZW50cnkiOiJGamVybiBrb25maWd1cmF0aW9uIiwic2F2ZS10aXAiOiJHZW0ga29uZmlndXJhdGlvbnNmaWwiLCJzZWN1cml0eS10eXBlIjoiU2lra2VyaGVkc3R5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBZGdhbmdzdG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiTGFncmluZyIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGZpbCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrcy4gYW50YWwgZmlsZXIiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW4uIGFudGFsIGVyIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IkFudGFsIGVyIGlra2UgZ3lsZGlndC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6IkFudGFsIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3MuIGFudGFsIHBvc3RlciBpIGxhZ3JpbmciLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbi4gYW50YWwgcG9zdGVyIGVyIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYWtzLiBhbnRhbCBwb3N0ZXIgZXIgcMOla3LDpnZldC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3MuIGFudGFsIHBha2tlc3TDuHJyZWxzZSBmb3IgYmVnaXZlbmhlZCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbi4gYW50YWwgZXIgMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiQW50YWwgZXIgaWtrZSBneWxkaWd0LiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrcy4gYW50YWwgcGFra2VzdMO4cnJlbHNlIGZvciBiZWdpdmVuaGVkIGVyIHDDpWtyw6Z2ZXQuIiwic3RvcmFnZS1wYXRoIjoiTGFncmluZ3NzdGkiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJMYWdyaW5nc3N0aSBlciBww6VrcsOmdmV0LiIsInN0b3JhZ2UtdHlwZSI6IkxhZ3JpbmdzdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiTGFncmluZyBhZiBmaWx0ZXIiLCJtZW1vcnktc3RvcmFnZSI6IkxhZ3JpbmcgYWYgaHVrb21tZWxzZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZC12w6ZydCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJWw6ZydCBlciBww6VrcsOmdmV0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZC1wb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzLiBwb3J0bnVtbWVyIGVyIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluLiBwb3J0bnVtbWVyIGVyIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBlciBpa2tlIGd5bGRpZy4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBlciBww6VrcsOmdmV0LiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBrb25maWcuIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiIiLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwgQ0EtY2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlN0aSB0aWwga2xpZW50Y2VydGlmaWthdCBww6UgZ2F0ZXdheSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiU3RpIHRpbCBwcml2YXQgbsO4Z2xlIHDDpSBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJTa2lmdCB0aWwgZnVsZCBza8Omcm0iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiVGlsZsO4ai9vcGRhdGVyIGtvbmZpZ3VyYXRpb24gSlNPTiJ9LF9vPXsiYWRkLWVudHJ5IjoiQcOxYWRpciBjb25maWd1cmFjacOzbiIsYWR2YW5jZWQ6IkF2YW56YWRvIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiUHJvYmFuZG8gYWN0aXZpZGFkIGRlIGRpc3Bvc2l0aXZvIixjb21tYW5kOiJDb21hbmRvcyBEb2NrZXIiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiU2UgaGFuIGNvcGlhZG8gbG9zIGNvbWFuZG9zIGFsIHBvcnRhcGFwZWxlcyIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhY2nDs24iLCJjb25uZWN0b3ItYWRkIjoiQcOxYWRpciBjb25lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiQWN0aXZhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tYnJlIGNvbmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBub21icmUgY29uZWN0b3IuIiwiY29ubmVjdG9yLXR5cGUiOiJUaXBvIGNvbmVjdG9yIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aXBvIGNvbmVjdG9yLiIsY29ubmVjdG9yczoiQ29uZWN0b3JlcyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29uZmlndXJhY2nDs24gZGUgY29uZWN0b3JlcyIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOb21icmUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUaXBvIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJFc3RhZG8iLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY2Npb25lcyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiQ2xhdmUiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc2UiLCJycGMtY29tbWFuZC1zZW5kIjoiRW52aWFyIiwicnBjLWNvbW1hbmQtcmVzdWx0IjoiUmVzdWx0YWRvIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiJFZGl0YXIgcGFyYW1ldHJvcyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkNvbmZpZ3VyYWNpw7NuIEdlbmVyYWwiLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhciB1biBnYXRld2F5IG51ZXZvIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJDcmVhciB1biBudWV2byBnYXRld2F5IGNvbiBlbCBub21icmU6ICd7e2dhdGV3YXlOYW1lfX0nPyIsImNyZWF0ZWQtdGltZSI6IkhvcmEgZGUgY3JlYWNpw7NuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWhlYWRlciI6IkxhcyBjb25maWd1cmFjaW9uZXMgc2UgYm9ycmFyw6FuIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJTw7NsbyBlcyBwb3NpYmxlIGRlc2FjdGl2YXIgbGEgY29uZmlndXJhY2nDs24gcmVtb3RhLCBzaSBoYXkgYWNjZXNvIGbDrXNpY28gYWwgZ2F0ZXdheS4gU2UgYm9ycmFyw6FuIHRvZGFzIGxhcyBjb25maWd1cmFjaW9uZXMgcHJldmlhcy48YnI+PGJyPiBcblBhcmEgZGVzYWN0aXZhciBsYSBjb25maWd1cmFjacOzbiwgaW50cm9kdWNlIGVsIG5vbWJyZSBkZWwgZ2F0ZXdheSBhcXXDrSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6Ik5vbWJyZSBHYXRld2F5IiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGdhdGV3YXkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IkRlc2FjdGl2YXIiLGRlbGV0ZToiQm9ycmFyIGNvbmZpZ3VyYWNpw7NuIiwiZG93bmxvYWQtdGlwIjoiRGVzY2FyZ2FyIGZpY2hlcm8gZGUgY29uZmlndXJhY2nDs24iLCJkcm9wLWZpbGUiOiJBcnJhc3RyYSB1biBmaWNoZXJvIG8iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IllhIGV4aXN0ZSB1biBkaXNwb3NpdGl2byBjb24gZWwgbWlzbW8gbm9tYnJlLiIsImdhdGV3YXktbmFtZSI6Ik5vbWJyZSBkZSBHYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdW4gbm9tYnJlIGRlIGdhdGV3YXkuIiwiZ2F0ZXdheS1zYXZlZCI6IkNvbmZpZ3VyYWNpw7NuIGRlIGdhdGV3YXkgZ3JhYmFkYSBzYXRpc2ZhY3RvcmlhbWVudGUuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaW1lb3V0IEtlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgVGltZW91dCBLZWVwIGFsaXZlIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiRWwgdmFsb3Igbm8gZXMgdsOhbGlkbyIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGVuIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGtlZXAgYWxpdmUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiRWwgdmFsb3Igbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJncnBjLWtlZXAtYWxpdmUtcGF0dGVybiI6IkVsIHZhbG9yIGtlZXAgYWxpdmUgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6IlRpZW1wbyBtw61uaW1vIGVudHJlIHBpbmdzIChlbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB0aWVtcG8gbcOtbmltbyBlbnRyZSBwaW5ncyIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiRWwgdmFsb3IgZGUgdGllbXBvIG3DrW5pbW8gZW50cmUgcGluZ3Mgbm8gZXMgdsOhbGlkbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DrW5pbW8gc2luIGRhdG9zIChlbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGludGVydmFsbyIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGludGVydmFsbyBubyBlcyB2w6FsaWRvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiSW50ZXJ2YWxvIG3DoXhpbW8gc2luIGRhdG9zIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgaW50ZXJ2YWxvIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJFbCB2YWxvciBkZSBpbnRlcnZhbG8gbm8gZXMgdsOhbGlkbyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJQZXJpb2RvIGRlIGNvbnRyb2wgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlbCBwZXJpb2RvIG5vIGVzIHbDoWxpZG8iLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcyI6IlRpbWVvdXQgZGUgaW5hY3RpdmlkYWQgKGVuIHNlZ3VuZG9zKSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGltZW91dCBkZSBpbmFjdGl2aWRhZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkVsIHZhbG9yIG5vIHB1ZWRlIHNlciBtZW5vciBkZSAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkVsIHZhbG9yIGRlIGluYWN0aXZpZGFkIG5vIGVzIHbDoWxpZG8iLCJqc29uLXBhcnNlIjoiSlNPTiBubyB2w6FsaWRvLiIsImpzb24tcmVxdWlyZWQiOiJFbCBjYW1wbyBubyBwdWVkZSBlc3RhciB2YWPDrW8uIixsb2dzOntsb2dzOiJSZWdpc3Ryb3MiLGRheXM6ImTDrWFzIixob3VyczoiaG9yYXMiLG1pbnV0ZXM6Im1pbnV0b3MiLHNlY29uZHM6InNlZ3VuZG9zIiwiZGF0ZS1mb3JtYXQiOiJGb3JtYXRvIGRlIGZlY2hhIiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBmb3JtYXRvIGRlIGZlY2hhIiwibG9nLWZvcm1hdCI6IkZvcm1hdG8gZGUgcmVnaXN0cm8iLCJsb2ctdHlwZSI6IlRpcG8gZGUgcmVnaXN0cm8iLCJsb2ctZm9ybWF0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGlwbyBkZSByZWdpc3RybyIscmVtb3RlOiJSZWdpc3RybyByZW1vdG8iLCJyZW1vdGUtbG9ncyI6IlJlZ2lzdHJvIHJlbW90byIsbG9jYWw6IlJlZ2lzdHJvIGxvY2FsIixsZXZlbDoiTml2ZWwgZGUgcmVnaXN0cm8iLCJmaWxlLXBhdGgiOiJSdXRhIGRlIGZpY2hlcm8iLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBydXRhIGRlIGZpY2hlcm8iLCJzYXZpbmctcGVyaW9kIjoiUGVyaW9kbyBkZSBndWFyZGFkbyBkZSByZWdpc3Ryb3MiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gbm8gcHVlZGUgc2VyIG1lbm9yIHF1ZSAxIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHBlcmlvZG8gZGUgZ3VhcmRhZG8iLCJiYWNrdXAtY291bnQiOiJOw7ptZXJvIGRlIGJhY2t1cHMiLCJiYWNrdXAtY291bnQtbWluIjoiRWwgbsO6bWVybyBkZSBiYWNrdXBzIG5vIHB1ZWRlIHNlciBtZW5vciBxdWUgMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgYmFja3VwcyJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiVGllbXBvIGRlIGVzcGVyYSwgZW52w61vIGRlIHBhcXVldGVzIChlbiBtcykiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgdGllbXBvIGRlIGVzcGVyYSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktbWluIjoiRWwgdGllbXBvIGRlIGVzcGVyYSBubyBwdWVkZSBzZXIgbWVub3IgcXVlIDAiLCJuby1jb25uZWN0b3JzIjoiTm8gaGF5IGNvbmVjdG9yZXMiLCJuby1kYXRhIjoiTm8gaGF5IGNvbmZpZ3VyYWNpb25lcyIsIm5vLWdhdGV3YXktZm91bmQiOiJObyBzZSBoYSBlbmNvbnRyYWRvIG5pbmfDum4gZ2F0ZXdheS4iLCJuby1nYXRld2F5LW1hdGNoaW5nIjoiICd7e2l0ZW19fScgbm8gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJSdXRhIGEgbG9zIGFyY2hpdm9zIGRlIGxvZyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlJ1dGEgcmVxdWVyaWRhLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiUGVybWl0aXIgS2VlcCBhbGl2ZSBzaSBsbGFtYWRhcyIscmVtb3RlOiJDb25maWd1cmFjacOzbiByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik5pdmVsIGRlIGxvZ2dpbmciLCJyZW1vdmUtZW50cnkiOiJCb3JyYXIgY29uZmlndXJhY2nDs24iLCJyZW1vdGUtc2hlbGwiOiJDb25zb2xhIHJlbW90YSIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiQ29uZmlndXJhY2nDs24gcmVtb3RhIixvdGhlcjoib3Ryb3MiLCJzYXZlLXRpcCI6IkdyYWJhciBmaWNoZXJvIGRlIGNvbmZpZ3VyYWNpw7NuIiwic2VjdXJpdHktdHlwZSI6IlRpcG8gZGUgc2VndXJpZGFkIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVMOza2VuIGRlIGFjY2VzbyIsInVzZXJuYW1lLXBhc3N3b3JkIjoiVXN1YXJpbyB5IGNvbnRyYXNlw7FhIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyBUw7NrZW4gZGUgYWNjZXNvIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgQ2xhdmUgcHJpdmFkYSJ9LCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZWwgc2Vydmlkb3IiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoiRXN0YWTDrXN0aWNhIixzdGF0aXN0aWNzOiJFc3RhZMOtc3RpY2FzIiwic3RhdGlzdGljLWNvbW1hbmRzLWVtcHR5IjoiTm8gaGF5IGVzdGFkw61zdGljYXMiLGNvbW1hbmRzOiJDb21hbmRvcyIsInNlbmQtcGVyaW9kIjoiUGVyaW9kbyBkZSBlbnbDrW8gZGUgZXN0YWTDrXN0aWNhcyAoZW4gc2VndW5kb3MpIiwic2VuZC1wZXJpb2QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBwZXJpb2RvIGRlIGVudsOtbyIsInNlbmQtcGVyaW9kLW1pbiI6IkVsIHBlcmlvZG8gZGUgZW52w61vIG5vIHB1ZWRlIHNlciBtZW5vciBkZSA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJFbCBwZXJpb2RvIGRlIGVudsOtbyBubyBlcyB2w6FsaWRvIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiUmV2aXNhciBjb25maWd1cmFjacOzbiBkZSBjb25lY3RvcmVzIChlbiBzZWd1bmRvcykiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcmVxdWlyZWQiOiJTZSByZXF1aWVyZSB1biB2YWxvciIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1taW4iOiJFbCB2YWxvciBubyBwdWVkZSBzZXIgbWVub3IgZGUgMSIsImNoZWNrLWNvbm5lY3RvcnMtY29uZmlndXJhdGlvbi1wYXR0ZXJuIjoiTGEgY29uZmlndXJhY2nDs24gbm8gZXMgdsOhbGlkYSIsYWRkOiJBw7FhZGlyIGNvbWFuZG8iLHRpbWVvdXQ6IlRpbWVvdXQiLCJ0aW1lb3V0LW1zIjoiVGltZW91dCAoZW4gbXMpIiwidGltZW91dC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHRpbWVvdXQiLCJ0aW1lb3V0LW1pbiI6IkVsIHRpbWVvdXQgbm8gcHVlZGUgc2VyIG1lbm9yIGRlIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJFbCB0aW1lb3V0IG5vIGVzIHbDoWxpZG8iLCJhdHRyaWJ1dGUtbmFtZSI6Ik5vbWJyZSBkZSBhdHJpYnV0byIsImF0dHJpYnV0ZS1uYW1lLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbm9tYnJlIGRlIGF0cmlidXRvIixjb21tYW5kOiJDb21hbmRvIiwiY29tbWFuZC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIGNvbWFuZG8iLHJlbW92ZToiQm9ycmFyIGNvbWFuZG8ifSxzdG9yYWdlOiJHcmFiYWNpw7NuIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTsO6bWVybyBtw6F4aW1vIGRlIHJlZ2lzdHJvcyBlbiBmaWNoZXJvIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZmljaGVyb3MiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTsO6bWVybyBubyB2w6FsaWRvLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTcOheGltbyBkZSByZWdpc3Ryb3MgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6IkVsIG7Dum1lcm8gbcOtbmltbyBlcyAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgbsO6bWVyby4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50IjoiTGVlciBuw7ptZXJvIGRlIGVudHJhZGFzIGVuIGFsbWFjw6luIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZGUgZW50cmFkYXMgZXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJOw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMgZW4gZWwgYWxtYWPDqW4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBuw7ptZXJvIG3DoXhpbW8gZGUgZW50cmFkYXMuIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoiUnV0YSBkZSBjYXJwZXRhIGRlIGRhdG9zIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcnV0YS4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWHDsW8gbcOheGltbyBkZSBldmVudG9zIiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiRWwgbsO6bWVybyBtw61uaW1vIGVzIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik7Dum1lcm8gbm8gdsOhbGlkby4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIG7Dum1lcm8uIiwic3RvcmFnZS1wYXRoIjoiUnV0YSBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIHJ1dGEgZGUgYWxtYWPDqW4uIiwic3RvcmFnZS10eXBlIjoiVGlwbyBkZSBhbG1hY8OpbiIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gZmljaGVybyIsIm1lbW9yeS1zdG9yYWdlIjoiQWxtYWPDqW4gZW4gbWVtb3JpYSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiSG9zdCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBIb3N0LiIsInRoaW5nc2JvYXJkLXBvcnQiOiJQdWVydG8gVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkVsIHB1ZXJ0byBtw6F4aW1vIGVzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiRWwgcHVlcnRvIG3DrW5pbW8gZXMgMS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXBhdHRlcm4iOiJQdWVydG8gbm8gdsOhbGlkby4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiU2UgcmVxdWllcmUgcHVlcnRvLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29uZmlndXJhY2nDs24gY29uZWN0b3Ige3t0eXBlTmFtZX19IiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIENBIGVuIGVsIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJSdXRhIGFsIGNlcnRpZmljYWRvIGNsaWVudGUgZW4gZWwgZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6IkNvbXByb2JhY2nDs24gZGUgVFRMIGRlIG1lbnNhamVzIGVuIGhvcmFzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiQ2FtcG8gcmVxdWVyaWRvLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJFbCBtw61uaW1vIGVzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJFbCBuw7ptZXJvIG5vIGVzIHbDoWxpZG8uIiwibWVzc2FnZXMtdHRsLWluLWRheXMiOiJUVEwgKFRpbWUgdG8gbGl2ZSkgZGUgbWVuc2FnZXMgZW4gZMOtYXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6IlNlIHJlcXVpZXJlIFRUTCBkZSBtZW5zYWplcy4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJFbCBuw7ptZXJvIG3DrW5pbW8gZXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiRWwgbsO6bWVybyBubyBlcyB2w6FsaWRvLiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiJTZSByZXF1aWVyZSBRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IkVsIHJhbmdvIGRlIHZhbG9yZXMgZXMgZGVzZGUgMCBhIDEiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlJ1dGEgYSBsYSBjbGF2ZSBwcml2YWRhIGVuIGVsIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlBhbnRhbGxhIGNvbXBsZXRhIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYWNpw7NuIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkHDsWFkaXIvYWN0dWFsaXphciBjb25maWd1cmFjacOzbiBKU09OIixoaW50czp7InJlbW90ZS1jb25maWd1cmF0aW9uIjoiSGFiaWxpdGEgbGEgYWRtaW5pc3RyYWNpw7NuIHkgY29uZmlndXJhY2nDs24gcmVtb3RhIGRlbCBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiSGFiaWxpdGEgZWwgY29udHJvbCByZW1vdG8gZGVsIHNpc3RlbWEgb3BlcmF0aXZvIGRlbCBnYXRld2F5IGRlc2RlIGVsIHdpZGdldCB0ZXJtaW5hbCByZW1vdG8iLGhvc3Q6Ikhvc3RuYW1lIG8gZGlyZWNjacOzbiBJUCBkZWwgc2Vydmlkb3IgVGhpbmdzYm9hcmQiLHBvcnQ6IlB1ZXJ0byBkZWwgc2VydmljaW8gTVFUVCBlbiBlbCBzZXJ2aWRvciBUaGluZ3Nib2FyZCIsdG9rZW46IkFjY2VzcyB0b2tlbiBwYXJhIGVsIGdhdGV3YXkiLCJjbGllbnQtaWQiOiJJRCBkZSBjbGllbnRlIE1RVFQgcGFyYSBlbCBnYXRld2F5Iix1c2VybmFtZToiVXN1YXJpbyBNUVRUIHBhcmEgZWwgZ2F0ZXdheSIscGFzc3dvcmQ6IkNvbnRyYXNlw7FhIE1RVFQgcGFyYSBlbCBnYXRld2F5IiwiY2EtY2VydCI6IlJ1dGEgYWwgZmljaGVybyBkZWwgY2VydGlmaWNhZG8gQ0EiLCJkYXRlLWZvcm0iOiJGb3JtYXRvIGRlIGZlY2hhIGVuIGxvcyBtZW5zYWplcyBkZSByZWdpc3RybyIsImRhdGEtZm9sZGVyIjoiUnV0YSBhIGxhIGNhcnBldGEgcXVlIGNvbnRlbmRyw6EgbG9zIGRhdG9zIChSZWxhdGl2YSBvIGFic29sdXRhKSIsImxvZy1mb3JtYXQiOiJGb3JtYXRvIGRlIG1lbnNhamVzIGVuIHJlZ2lzdHJvIiwicmVtb3RlLWxvZyI6IkhhYmlsaXRhIGVsIHJlZ2lzdHJvIHJlbW90byB5IGxhIHBvc3RlcmlvciBsZWN0dXJhIGRlc2RlIGVsIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJTaSBlbCBjb250YWplIGRlIGNvcGlhcyBkZSBzZWd1cmlkYWQgZXMgbWF5b3IgcXVlIDAsIGN1YW5kbyBzZSByZWFsaWNlIHVuYSByZW5vdmFjacOzbiwgbm8gc2UgY29uc2VydmFuIG3DoXMgcXVlIGxvcyBhcmNoaXZvcyBkZSByZWN1ZW50byBkZSBjb3BpYXMgZGUgc2VndXJpZGFkLCBsb3MgbcOhcyBhbnTDrWd1b3Mgc2UgZWxpbWluYXLDoW4iLHN0b3JhZ2U6IlByb3ZlZSBsYSBjb25maWd1cmFjacOzbiBwYXJhIGVsIGdyYWJhZG8gZGUgZGF0b3MgZW50cmFudGVzIGFudGVzIGRlIHF1ZSBzZSBlbnbDrWVuIGEgbGEgcGxhdGFmb3JtYSIsIm1heC1maWxlLWNvdW50IjoiTsO6bWVybyBtw6F4aW1vIGRlIGZpY2hlcm9zIHF1ZSBzZSBjcmVhcsOhbiIsIm1heC1yZWFkLWNvdW50IjoiTsO6bWVvIG3DoXhpbW8gZGUgbWVuc2FqZXMgYSBvYnRlbmVyIGRlc2RlIGVsIGRpc2NvIHkgZW52aWFkb3MgYSBsYSBwbGF0YWZvcm1hIiwibWF4LXJlY29yZHMiOiJOw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIHF1ZSBzZSBndWFyZGFyw6FuIGVuIHVuIHNvbG8gZmljaGVybyIsInJlYWQtcmVjb3JkLWNvdW50IjoiTsO6bWVybyBkZSBtZW5zYWdlcyBhIG9idGVuZXIgZGVzZGUgZWwgYWxtYWNlbmFtaWVudG8geSBlbnZpYWRvcyBhIGxhIHBsYXRhZm9ybWEiLCJtYXgtcmVjb3Jkcy1jb3VudCI6Ik7Dum1lcm8gbcOheGltbyBkZSBkYXRvcyBlbiBhbG1hY2VuYW1pZW50byBhbnRlcyBkZSBlbnZpYXIgYSBsYSBwbGF0YWZvcm1hIiwidHRsLWNoZWNrLWhvdXIiOiJDb24gcXXDqSBmcmVjdWVuY2lhIGVsIGdhdGV3YXkgY29tcHJvYmFyw6Egc2kgbG9zIGRhdG9zIGVzdMOhbiBvYnNvbGV0b3MiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTsO6bWVybyBtw6F4aW1vIGRlIGTDrWFzIHBhcmEgbGEgcmV0ZW5jacOzbiBkZSBkYXRvcyBlbiBlbCBhbG1hY8OpbiIsY29tbWFuZHM6IkNvbWFuZG9zIHBhcmEgcmVjb2dlciBlc3RhZMOtc3RpY2FzIGFkaWNpb25hbGVzIixhdHRyaWJ1dGU6IkNsYXZlIGRlIHRlbGVtZXRyw61hIHBhcmEgZXN0YWTDrXN0aWNhcyIsdGltZW91dDoiVGltZW91dCBwYXJhIGxhIGVqZWN1Y2nDs24gZGUgY29tYW5kb3MiLGNvbW1hbmQ6IkVsIHJlc3VsdGFkbyBkZSBsYSBlamVjdWNpw7NuIGRlbCBjb21hbmRvLCBzZSB1c2Fyw6EgY29tbyB2YWxvciBwYXJhIGxhIHRlbGVtZXRyw61hIiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5IjoiSGFiaWxpdGEgbGEgbW9uaXRvcml6YWNpw7NuIGRlIGNhZGEgdW5vIGRlIGxvcyBkaXNwb3NpdGl2b3MgY29uZWN0YWRvcyIsImluYWN0aXZpdHktdGltZW91dCI6IlRpZW1wbyB0cmFzIHF1ZSBlbCBnYXRld2F5IGRlc2NvbmVjdGFyw6EgZWwgZGlzcG9zaXRpdm8iLCJpbmFjdGl2aXR5LXBlcmlvZCI6IlBlcmlvZG8gZGUgbW9uaXRvcml6YWNpw7NuIGRlIGFjdGl2aWRhZCBlbiBlbCBkaXNwb3NpdGl2byIsIm1pbmltYWwtcGFjay1kZWxheSI6IlRpZW1wbyBkZSBlc3BlcmEgZW50cmUgZW52w61vIGRlIHBhcXVldGVzIGRlIG1lbnNhamVzIChVbiB2YWxvciBtdXkgYmFqbywgcmVzdWx0YXLDoSBlbiB1biBhdW1lbnRvIGRlIHVzbyBkZSBsYSBDUFUgZW4gZWwgZ2F0ZXdheSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGVuIGxvcyBtZW5zYWplcyBNUVRUICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6IlB1ZXJ0byBkZSByZWQgZW4gZWwgY3VhbCBlbCBzZXJ2aWRvciBHUlBDIGVzY3VjaGFyw6EgY29uZXhpb25lcyBlbnRyYW50ZXMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJUaWVtcG8gbcOheGltbywgZWwgY3VhbCBlbCBzZXJ2aWRvciBlc3BlcmFyYSB1biBwaW5nIGtlZXBhbGl2ZSBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYWNpw7NuIGVudHJlIGRvcyBwaW5ncyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbGxhbWFkYSBSUEMgYWN0aXZhLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik3DrW5pbW8gdGllbXBvIHF1ZSBlbCBzZXJ2aWRvciBkZWJlIGVzcGVyYXIgZW50cmUgZW52w61vcyBkZSBtZW5zYWplcyBkZSBwaW5nIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTsO6bWVybyBtw6F4aW1vIGRlIHBpbmdzIGtlZXBhbGl2ZSBxdWUgZWwgc2Vydmlkb3IgcHVlZGUgZW52aWFyIHNpbiByZWNpYmlyIG5pbmfDum4gZGF0byBhbnRlcyBkZSBjb25zaWRlcmFyIGxhIGNvbmV4acOzbiB0ZXJtaW5hZGEuIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiJNw61uaW1vIHRpZW1wbyBxdWUgZWwgc2Vydmlkb3IgZGViZSBlc3BlcmFyIGVudHJlIGVudsOtb3MgZGUgcGluZyBrZWVwYWxpdmUgY3VhbmRvIG5vIGhheWEgbmluZ8O6biBkYXRvIGVuIGVudsOtbyBvIHJlY2VwY2nDs24uIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJQZXJtaXRpciBhbCBzZXJ2aWRvciBtYW50ZW5lciBsYSBjb25leGnDs24gR1JQQyBhYmllcnRhLCBjdWFuZG8gbm8gaGF5YSBsbGFtYWRhcyBSUEMgYWN0aXZhcy4ifX0sSG89eyJhZGQtZW50cnkiOiLshKTsoJUg7LaU6rCAIiwiY29ubmVjdG9yLWFkZCI6IuyDiOuhnOyatCDsl7DqsrDsnpAg7LaU6rCAIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJFbmFibGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUiOiJDb25uZWN0b3IgbmFtZSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiQ29ubmVjdG9yIG5hbWUgaXMgcmVxdWlyZWQuIiwiY29ubmVjdG9yLXR5cGUiOiJDb25uZWN0b3IgdHlwZSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiQ29ubmVjdG9yIHR5cGUgaXMgcmVxdWlyZWQuIixjb25uZWN0b3JzOiJDb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJDcmVhdGUgYSBuZXcgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQXJlIHlvdSBzdXJlIHlvdSB3YW50IGNyZWF0ZSBhIG5ldyBnYXRld2F5IHdpdGggbmFtZTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2Ugd2l0aCBzYW1lIG5hbWUgaXMgYWxyZWFkeSBleGlzdHMuIiwiZ2F0ZXdheS1uYW1lIjoiR2F0ZXdheSBuYW1lIiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiR2F0ZXdheSBuYW1lIGlzIHJlcXVpcmVkLiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5IGNvbmZpZ3VyYXRpb24gc3VjY2Vzc2Z1bGx5IHNhdmVkLiIsImpzb24tcGFyc2UiOiJOb3QgdmFsaWQgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiRmllbGQgY2Fubm90IGJlIGVtcHR5LiIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToiU3RvcmFnZSIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBmaWxlIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbXVtIG51bWJlciBvZiBmaWxlcyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIGlzIDEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJOdW1iZXIgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gcmVjb3JkcyBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWF4aW11bSByZWNvcmRzIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSJ9LHRoaW5nc2JvYXJkOiJUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZCBob3N0IiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgaXMgcmVxdWlyZWQuIiwidGhpbmdzYm9hcmQtcG9ydCI6IlRoaW5nc0JvYXJkIHBvcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik1heGltdW0gcG9ydCBudW1iZXIgaXMgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJNaW5pbXVtIHBvcnQgbnVtYmVyIGlzIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBpcyBub3QgdmFsaWQuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgaXMgcmVxdWlyZWQuIix0aWR5OiJUaWR5IiwidGlkeS10aXAiOiJUaWR5IGNvbmZpZyBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiQ29ubmVjdG9yIHt7dHlwZU5hbWV9fSBjb25maWd1cmF0aW9uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYXRoIHRvIGNsaWVudCBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYXRoIHRvIHByaXZhdGUga2V5IG9uIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlRvZ2dsZSBmdWxsc2NyZWVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aW9uIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkZC91cGRhdGUgY29uZmlndXJhdGlvbiBKU09OIn0sem89eyJhZGQtZW50cnkiOiJBZGQgY29uZmlndXJhdGlvbiIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJBZGQgbmV3IGNvbm5lY3RvciIsImNvbm5lY3Rvci1lbmFibGVkIjoiRW5hYmxlIGNvbm5lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiQ29ubmVjdG9yIG5hbWUiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkNvbm5lY3RvciBuYW1lIGlzIHJlcXVpcmVkLiIsImNvbm5lY3Rvci10eXBlIjoiQ29ubmVjdG9yIHR5cGUiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkNvbm5lY3RvciB0eXBlIGlzIHJlcXVpcmVkLiIsY29ubmVjdG9yczoiQ29ubmVjdG9ycyIsImNvbm5lY3RvcnMtY29uZmlnIjoiQ29ubmVjdG9ycyBjb25maWd1cmF0aW9uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoiRW5hYmxlZCIsImNvbm5lY3RvcnMtdGFibGUtbmFtZSI6Ik5hbWUiLCJjb25uZWN0b3JzLXRhYmxlLXR5cGUiOiJUeXBlIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiJTdGF0dXMiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiJBY3Rpb25zIiwiY29ubmVjdG9ycy10YWJsZS1rZXkiOiJLZXkiLCJjb25uZWN0b3JzLXRhYmxlLWNsYXNzIjoiQ2xhc3MiLCJycGMtY29tbWFuZC1zZW5kIjoiU2VuZCIsInJwYy1jb21tYW5kLXJlc3VsdCI6IlJlc3VsdCIsInJwYy1jb21tYW5kLWVkaXQtcGFyYW1zIjoiRWRpdCBwYXJhbWV0ZXJzIiwiZ2F0ZXdheS1jb25maWd1cmF0aW9uIjoiR2VuZXJhbCBDb25maWd1cmF0aW9uIiwiZG9ja2VyLWxhYmVsIjoiSW4gb3JkZXIgdG8gcnVuIFRoaW5nc0JvYXJkIElvVCBnYXRld2F5IGluIGRvY2tlciB3aXRoIGNyZWRlbnRpYWxzIGZvciB0aGlzIGRldmljZSB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmRzLiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkNyZWF0ZSBhIG5ldyBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJBcmUgeW91IHN1cmUgeW91IHdhbnQgY3JlYXRlIGEgbmV3IGdhdGV3YXkgd2l0aCBuYW1lOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IkRlbGV0ZSBjb25maWd1cmF0aW9uIiwiZG93bmxvYWQtdGlwIjoiRG93bmxvYWQgY29uZmlndXJhdGlvbiBmaWxlIiwiZHJvcC1maWxlIjoiRHJvcCBmaWxlIGhlcmUgb3IiLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkRldmljZSB3aXRoIHNhbWUgbmFtZSBpcyBhbHJlYWR5IGV4aXN0cy4iLCJnYXRld2F5LW5hbWUiOiJHYXRld2F5IG5hbWUiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJHYXRld2F5IG5hbWUgaXMgcmVxdWlyZWQuIiwiZ2F0ZXdheS1zYXZlZCI6IkdhdGV3YXkgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHkgc2F2ZWQuIixncnBjOiJHUlBDIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJLZWVwIGFsaXZlIHRpbWVvdXQgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSB0aW1lb3V0IGlzIG5vdCB2YWxpZCIsImdycGMta2VlcC1hbGl2ZSI6IktlZXAgYWxpdmUgKGluIG1zKSIsImdycGMta2VlcC1hbGl2ZS1yZXF1aXJlZCI6IktlZXAgYWxpdmUgaXMgcmVxdWlyZWQiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoiS2VlcCBhbGl2ZSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXBhdHRlcm4iOiJLZWVwIGFsaXZlIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgKGluIG1zKSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLXBhdHRlcm4iOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIG5vdCB2YWxpZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluIHBpbmcgaW50ZXJ2YWwgd2l0aG91dCBkYXRhIChpbiBtcykiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLW1pbiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSBpcyBub3QgdmFsaWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXJlcXVpcmVkIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBpcyByZXF1aXJlZCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1taW4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcyI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIChpbiBzZWMpIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIHJlcXVpcmVkIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1wYXR0ZXJuIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgaXMgbm90IHZhbGlkIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMiOiJJbmFjdGl2aXR5IHRpbWVvdXQgKGluIHNlYykiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1yZXF1aXJlZCI6IkluYWN0aXZpdHkgdGltZW91dCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLW1pbiI6IkluYWN0aXZpdHkgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgdGltZW91dCBpcyBub3QgdmFsaWQiLCJqc29uLXBhcnNlIjoiTm90IHZhbGlkIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IkZpZWxkIGNhbm5vdCBiZSBlbXB0eS4iLGxvZ3M6e2xvZ3M6IkxvZ3MiLGRheXM6ImRheXMiLGhvdXJzOiJob3VycyIsbWludXRlczoibWludXRlcyIsc2Vjb25kczoic2Vjb25kcyIsImRhdGUtZm9ybWF0IjoiRGF0ZSBmb3JtYXQiLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IkRhdGUgZm9ybWF0IHJlcXVpcmVkIiwibG9nLWZvcm1hdCI6IkxvZyBmb3JtYXQiLCJsb2ctdHlwZSI6IkxvZyB0eXBlIiwibG9nLWZvcm1hdC1yZXF1aXJlZCI6IkxvZyBmb3JtYXQgcmVxdWlyZWQiLHJlbW90ZToiUmVtb3RlIGxvZ2dpbmciLCJyZW1vdGUtbG9ncyI6IlJlbW90ZSBsb2dzIixsb2NhbDoiTG9jYWwgbG9nZ2luZyIsbGV2ZWw6IkxvZyBsZXZlbCIsImZpbGUtcGF0aCI6IkZpbGUgcGF0aCIsImZpbGUtcGF0aC1yZXF1aXJlZCI6IkZpbGUgcGF0aCByZXF1aXJlZCIsInNhdmluZy1wZXJpb2QiOiJMb2cgc2F2aW5nIHBlcmlvZCIsInNhdmluZy1wZXJpb2QtbWluIjoiTG9nIHNhdmluZyBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsInNhdmluZy1wZXJpb2QtcmVxdWlyZWQiOiJMb2cgc2F2aW5nIHBlcmlvZCByZXF1aXJlZCIsImJhY2t1cC1jb3VudCI6IkJhY2t1cCBjb3VudCIsImJhY2t1cC1jb3VudC1taW4iOiJCYWNrdXAgY291bnQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImJhY2t1cC1jb3VudC1yZXF1aXJlZCI6IkJhY2t1cCBjb3VudCByZXF1aXJlZCJ9LCJtaW4tcGFjay1zZW5kLWRlbGF5IjoiTWluIHBhY2sgc2VuZCBkZWxheSAoaW4gbXMpIiwibWluLXBhY2stc2VuZC1kZWxheS1yZXF1aXJlZCI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgaXMgcmVxdWlyZWQiLCJtaW4tcGFjay1zZW5kLWRlbGF5LW1pbiI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMCIsIm5vLWNvbm5lY3RvcnMiOiJObyBjb25uZWN0b3JzIiwibm8tZGF0YSI6Ik5vIGNvbmZpZ3VyYXRpb25zIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5vIGdhdGV3YXkgZm91bmQuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5vdCBmb3VuZC4iLCJwYXRoLWxvZ3MiOiJQYXRoIHRvIGxvZyBmaWxlcyIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IlBhdGggaXMgcmVxdWlyZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJLZWVwIGFsaXZlIHBlcm1pdCB3aXRob3V0IGNhbGxzIixyZW1vdGU6IlJlbW90ZSBjb25maWd1cmF0aW9uIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJMb2dnaW5nIGxldmVsIiwicmVtb3ZlLWVudHJ5IjoiUmVtb3ZlIGNvbmZpZ3VyYXRpb24iLCJyZW1vdGUtc2hlbGwiOiJSZW1vdGUgc2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6IlJlbW90ZSBDb25maWd1cmF0aW9uIixvdGhlcjoiT3RoZXIiLCJzYXZlLXRpcCI6IlNhdmUgY29uZmlndXJhdGlvbiBmaWxlIiwic2VjdXJpdHktdHlwZSI6IlNlY3VyaXR5IHR5cGUiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJBY2Nlc3MgVG9rZW4iLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTdG9yYWdlIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIGZpbGUiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik1heGltdW0gbnVtYmVyIG9mIGZpbGVzIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBudW1iZXIgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWJlciBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTWF4aW11bSByZWNvcmRzIGluIHN0b3JhZ2UiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbXVtIHJlY29yZHMgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudCI6IlJlYWQgcmVjb3JkIGNvdW50IGluIHN0b3JhZ2UiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQtcmVxdWlyZWQiOiJSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudCI6Ik1heCByZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtbWluIjoiTWluaW11bSBudW1iZXIgb2YgcmVjb3JkcyBpcyAxLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiTWF4IFJlYWQgcmVjb3JkIGNvdW50IGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtZGF0YS1mb2xkZXItcGF0aCI6IkRhdGEgZm9sZGVyIHBhdGgiLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgtcmVxdWlyZWQiOiJEYXRhIGZvbGRlciBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtcGFjay1zaXplIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIG51bWJlciBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWF4aW11bSBldmVudCBwYWNrIHNpemUgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1wYXRoIjoiU3RvcmFnZSBwYXRoIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiU3RvcmFnZSBwYXRoIGlzIHJlcXVpcmVkLiIsInN0b3JhZ2UtdHlwZSI6IlN0b3JhZ2UgdHlwZSIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiRmlsZSBzdG9yYWdlIiwibWVtb3J5LXN0b3JhZ2UiOiJNZW1vcnkgc3RvcmFnZSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQgaG9zdCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJIb3N0IGlzIHJlcXVpcmVkLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYXhpbXVtIHBvcnQgbnVtYmVyIGlzIDY1NTM1LiIsInRoaW5nc2JvYXJkLXBvcnQtbWluIjoiTWluaW11bSBwb3J0IG51bWJlciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgaXMgbm90IHZhbGlkLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb3J0IGlzIHJlcXVpcmVkLiIsdGlkeToiVGlkeSIsInRpZHktdGlwIjoiVGlkeSBjb25maWcgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IkNvbm5lY3RvciB7e3R5cGVOYW1lfX0gY29uZmlndXJhdGlvbiIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoiUGF0aCB0byBDQSBjZXJ0aWZpY2F0ZSBvbiBnYXRld2F5IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUGF0aCB0byBjbGllbnQgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3VycyI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBjaGVjayBpbiBob3VycyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtbWluIjoiTWluIG51bWJlciBpcyAxLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cyI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiJNZXNzYWdlcyBUVEwgaW4gZGF5cyBpcyByZXF1aXJlZC4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6Ik51bWJlciBpcyBub3QgdmFsaWQuIiwibXF0dC1xb3MiOiJRb1MiLCJtcXR0LXFvcy1yZXF1aXJlZCI6IlFvUyBpcyByZXF1aXJlZCIsIm1xdHQtcW9zLXJhbmdlIjoiUW9TIHZhbHVlcyByYW5nZSBpcyBmcm9tIDAgdG8gMSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUGF0aCB0byBwcml2YXRlIGtleSBvbiBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJUb2dnbGUgZnVsbHNjcmVlbiIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoiQ29uZmlndXJhdGlvbiBKU09OKiIsInVwZGF0ZS1jb25maWciOiJBZGQvdXBkYXRlIGNvbmZpZ3VyYXRpb24gSlNPTiIsaGludHM6eyJyZW1vdGUtY29uZmlndXJhdGlvbiI6IkVuYWJsZXMgcmVtb3RlIGNvbmZpZ3VyYXRpb24gYW5kIG1hbmFnZW1lbnQgb2YgdGhlIGdhdGV3YXkiLCJyZW1vdGUtc2hlbGwiOiJFbmFibGVzIHJlbW90ZSBjb250cm9sIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHdpdGggdGhlIGdhdGV3YXkgZnJvbSB0aGUgUmVtb3RlIFNoZWxsIHdpZGdldCIsaG9zdDoiSG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBvcnQ6IlBvcnQgb2YgTVFUVCBzZXJ2aWNlIG9uIFRoaW5nc0JvYXJkIHNlcnZlciIsdG9rZW46IkFjY2VzcyB0b2tlbiBmb3IgdGhlIGdhdGV3YXkgZnJvbSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLCJjbGllbnQtaWQiOiJNUVRUIGNsaWVudCBpZCBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHVzZXJuYW1lOiJNUVRUIHVzZXJuYW1lIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIscGFzc3dvcmQ6Ik1RVFQgcGFzc3dvcmQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2EtY2VydCI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgZmlsZSIsImRhdGUtZm9ybSI6IkRhdGUgZm9ybWF0IGluIGxvZyBtZXNzYWdlIiwiZGF0YS1mb2xkZXIiOiJQYXRoIHRvIGZvbGRlciwgdGhhdCB3aWxsIGNvbnRhaW5zIGRhdGEgKFJlbGF0aXZlIG9yIEFic29sdXRlKSIsImxvZy1mb3JtYXQiOiJMb2cgbWVzc2FnZSBmb3JtYXQiLCJyZW1vdGUtbG9nIjoiRW5hYmxlcyByZW1vdGUgbG9nZ2luZyBhbmQgbG9ncyByZWFkaW5nIGZyb20gdGhlIGdhdGV3YXkiLCJiYWNrdXAtY291bnQiOiJJZiBiYWNrdXAgY291bnQgaXMgPiAwLCB3aGVuIGEgcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cCBjb3VudCBmaWxlcyBhcmUga2VwdCAtIHRoZSBvbGRlc3Qgb25lcyBhcmUgZGVsZXRlZCIsc3RvcmFnZToiUHJvdmlkZXMgY29uZmlndXJhdGlvbiBmb3Igc2F2aW5nIGluY29taW5nIGRhdGEgYmVmb3JlIGl0IGlzIHNlbnQgdG8gdGhlIHBsYXRmb3JtIiwibWF4LWZpbGUtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGZpbGUgdGhhdCB3aWxsIGJlIGNyZWF0ZWQiLCJtYXgtcmVhZC1jb3VudCI6IkNvdW50IG9mIG1lc3NhZ2VzIHRvIGdldCBmcm9tIHN0b3JhZ2UgYW5kIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJtYXgtcmVjb3JkcyI6Ik1heGltdW0gY291bnQgb2YgcmVjb3JkcyB0aGF0IHdpbGwgYmUgc3RvcmVkIGluIG9uZSBmaWxlIiwicmVhZC1yZWNvcmQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiJNYXhpbXVtIGNvdW50IG9mIGRhdGEgaW4gc3RvcmFnZSBiZWZvcmUgc2VuZCB0byBUaGluZ3NCb2FyZCIsInR0bC1jaGVjay1ob3VyIjoiSG93IG9mdGVuIHdpbGwgR2F0ZXdheSBjaGVjayBkYXRhIGZvciBvYnNvbGVzY2VuY2UiLCJ0dGwtbWVzc2FnZXMtZGF5IjoiTWF4aW11bSBkYXlzIHRoYXQgc3RvcmFnZSB3aWxsIHNhdmUgZGF0YSIsY29tbWFuZHM6IkNvbW1hbmRzIGZvciBjb2xsZWN0aW5nIGFkZGl0aW9uYWwgc3RhdGlzdGljIixhdHRyaWJ1dGU6IlN0YXRpc3RpYyB0ZWxlbWV0cnkga2V5Iix0aW1lb3V0OiJUaW1lb3V0IGZvciBjb21tYW5kIGV4ZWN1dGluZyIsY29tbWFuZDoiVGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24sIHdpbGwgYmUgdXNlZCBhcyB0aGUgdmFsdWUgZm9yIHRlbGVtZXRyeSIsImNoZWNrLWRldmljZS1hY3Rpdml0eSI6IkVuYWJsZXMgbW9uaXRvciB0aGUgYWN0aXZpdHkgb2YgZWFjaCBjb25uZWN0ZWQgZGV2aWNlIiwiaW5hY3Rpdml0eS10aW1lb3V0IjoiVGltZSBhZnRlciB3aG9zZSB0aGUgZ2F0ZXdheSB3aWxsIGRpc2Nvbm5lY3QgZGV2aWNlIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiJQZXJpb2RpY2l0eSBvZiBkZXZpY2UgYWN0aXZpdHkgY2hlY2siLCJtaW5pbWFsLXBhY2stZGVsYXkiOiJEZWxheSBiZXR3ZWVuIHNlbmRpbmcgcGFja3Mgb2YgbWVzc2FnZXMgKERlY3JlYXNpbmcgdGhpcyBzZXR0aW5nIHJlc3VsdHMgaW4gaW5jcmVhc2VkIENQVSB1c2FnZSkiLHFvczoiUXVhbGl0eSBvZiBTZXJ2aWNlIGluIE1RVFQgbWVzc2FnaW5nICgwIC0gYXQgbW9zdCBvbmNlLCAxIC0gYXQgbGVhc3Qgb25jZSkiLCJzZXJ2ZXItcG9ydCI6Ik5ldHdvcmsgcG9ydCBvbiB3aGljaCBHUlBDIHNlcnZlciB3aWxsIGxpc3RlbiBmb3IgaW5jb21pbmcgY29ubmVjdGlvbnMuIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQiOiJNYXhpbXVtIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBmb3IgYSBrZWVwYWxpdmUgcGluZyByZXNwb25zZSBiZWZvcmUgY29uc2lkZXJpbmcgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLWtlZXAtYWxpdmUiOiJEdXJhdGlvbiBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIHdoZW4gdGhlcmUgaXMgbm8gYWN0aXZlIFJQQyBjYWxsLiIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncyI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEiOiJNYXhpbXVtIG51bWJlciBvZiBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB0aGF0IHRoZSBzZXJ2ZXIgY2FuIHNlbmQgd2l0aG91dCByZWNlaXZpbmcgYW55IGRhdGEgYmVmb3JlIGl0IGNvbnNpZGVycyB0aGUgY29ubmVjdGlvbiBkZWFkLiIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhIjoiTWluaW11bSBhbW91bnQgb2YgdGltZSB0aGUgc2VydmVyIHNob3VsZCB3YWl0IGJldHdlZW4gc2VuZGluZyBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGRhdGEgYmVpbmcgc2VudCBvciByZWNlaXZlZC4iLCJwZXJtaXQtd2l0aG91dC1jYWxscyI6IkFsbG93IHNlcnZlciB0byBrZWVwIHRoZSBHUlBDIGNvbm5lY3Rpb24gYWxpdmUgZXZlbiB3aGVuIHRoZXJlIGFyZSBubyBhY3RpdmUgUlBDIGNhbGxzLiJ9fSxXbz17ImFkZC1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB0b2V2b2VnZW4iLCJjb25uZWN0b3ItYWRkIjoiTmlldXdlIGNvbm5lY3RvciB0b2V2b2VnZW4iLCJjb25uZWN0b3ItZW5hYmxlZCI6IkNvbm5lY3RvciBpbnNjaGFrZWxlbiIsImNvbm5lY3Rvci1uYW1lIjoiTmFhbSB2YW4gZGUgY29ubmVjdG9yIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJEZSBuYWFtIHZhbiBkZSBjb25uZWN0b3IgaXMgdmVyZWlzdC4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cGUgYWFuc2x1aXRpbmciLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkhldCB0eXBlIGNvbm5lY3RvciBpcyB2ZXJlaXN0LiIsY29ubmVjdG9yczoiQ29uZmlndXJhdGllIHZhbiBjb25uZWN0b3JlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IkVlbiBuaWV1d2UgZ2F0ZXdheSBtYWtlbiIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiV2VldCB1IHpla2VyIGRhdCB1IGVlbiBuaWV1d2UgZ2F0ZXdheSB3aWx0IG1ha2VuIG1ldCBkZSBuYWFtOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiQ29uZmlndXJhdGllIHZlcndpamRlcmVuIiwiZG93bmxvYWQtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBkb3dubG9hZGVuIixnYXRld2F5OiJHYXRld2F5IiwiZ2F0ZXdheS1leGlzdHMiOiJEZXZpY2UgbWV0IGRlemVsZmRlIG5hYW0gYmVzdGFhdCBhbC4iLCJnYXRld2F5LW5hbWUiOiJOYWFtIHZhbiBkZSBnYXRld2F5IiwiZ2F0ZXdheS1uYW1lLXJlcXVpcmVkIjoiRGUgbmFhbSB2YW4gZGUgZ2F0ZXdheSBpcyB2ZXJlaXN0LiIsImdhdGV3YXktc2F2ZWQiOiJHYXRld2F5Y29uZmlndXJhdGllIHN1Y2Nlc3ZvbCBvcGdlc2xhZ2VuLiIsImpzb24tcGFyc2UiOiJPbmdlbGRpZ2UgSlNPTi4iLCJqc29uLXJlcXVpcmVkIjoiSGV0IHZlbGQgbWFnIG5pZXQgbGVlZyB6aWpuLiIsIm5vLWNvbm5lY3RvcnMiOiJHZWVuIGNvbm5lY3RvcmVuIiwibm8tZGF0YSI6IkdlZW4gY29uZmlndXJhdGllcyIsIm5vLWdhdGV3YXktZm91bmQiOiJHZWVuIGdhdGV3YXkgZ2V2b25kZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6Iid7e2l0ZW19fScgbmlldCBnZXZvbmRlbi4iLCJwYXRoLWxvZ3MiOiJQYWQgbmFhciBsb2diZXN0YW5kZW4iLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQYWQgaXMgdmVyZWlzdC4iLHJlbW90ZToiQ29uZmlndXJhdGllIG9wIGFmc3RhbmQiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJlZ2lzdHJhdGllIG5pdmVhdSIsInJlbW92ZS1lbnRyeSI6IkNvbmZpZ3VyYXRpZSB2ZXJ3aWpkZXJlbiIsInNhdmUtdGlwIjoiQ29uZmlndXJhdGllYmVzdGFuZCBvcHNsYWFuIiwic2VjdXJpdHktdHlwZSI6IlNvb3J0IGJldmVpbGlnaW5nIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9lZ2FuZyB0b3QgdG9rZW4iLHRsczoiVExTIChUTFMpIn0sc3RvcmFnZToiT3BzbGFnIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTWF4aW11bSBhYW50YWwgcmVjb3JkcyBpbiBiZXN0YW5kIiwic3RvcmFnZS1tYXgtZmlsZXMiOiJNYXhpbWFhbCBhYW50YWwgYmVzdGFuZGVuIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTWluaW11bSBhYW50YWwgaXMgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoiTnVtbWVyIGlzIHZlcmVpc3QuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1heGltdW0gYWFudGFsIHJlY29yZHMgaW4gb3BzbGFnIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbXVtIGFhbnRhbCByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTnVtbWVyIGlzIG5pZXQgZ2VsZGlnLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJNYXhpbWFsZSByZWNvcmRzIHppam4gdmVyZWlzdC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1heGltYWxlIHBha2tldGdyb290dGUgdm9vciBldmVudHMiLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiJNaW5pbXVtIGFhbnRhbCBpcyAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiJOdW1tZXIgaXMgbmlldCBnZWxkaWcuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJEZSBtYXhpbWFsZSBwYWtrZXRncm9vdHRlIHZhbiBoZXQgZXZlbnQgaXMgdmVyZWlzdC4iLCJzdG9yYWdlLXBhdGgiOiJPcHNsYWcgcGFkIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiT3BzbGFncGFkIGlzIHZlcmVpc3QuIiwic3RvcmFnZS10eXBlIjoiVHlwZSBvcHNsYWciLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik9wc2xhZyB2YW4gYmVzdGFuZGVuIiwibWVtb3J5LXN0b3JhZ2UiOiJHZWhldWdlbiBvcHNsYWcifSx0aGluZ3Nib2FyZDoiRGluZ2VuIEJvcmQiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiVGhpbmdzQm9hcmQtZ2FzdGhlZXIiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiU2VydmVyIGhvc3QgaXMgdmVyZWlzdC4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmQtcG9vcnQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IkhldCBtYXhpbWFsZSBwb29ydG51bW1lciBpcyA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6IkhldCBtaW5pbWFsZSBwb29ydG51bW1lciBpcyAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvb3J0IGlzIG5pZXQgZ2VsZGlnLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJQb29ydCBpcyB2ZXJlaXN0LiIsdGlkeToiT3JkZWxpamsiLCJ0aWR5LXRpcCI6Ik9wZ2VydWltZGUgY29uZmlndXJhdGllIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmF0aWUgdmFuIGNvbm5lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhZCBuYWFyIENBLWNlcnRpZmljYWF0IG9wIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJQYWQgbmFhciBjbGllbnRjZXJ0aWZpY2FhdCBvcCBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJQYWQgbmFhciBwcml2w6lzbGV1dGVsIG9wIGdhdGV3YXkiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlZvbGxlZGlnIHNjaGVybSBpbi0gZW4gdWl0c2NoYWtlbGVuIiwidHJhbnNmb3JtZXItanNvbi1jb25maWciOiJDb25maWd1cmF0aWUgSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQ29uZmlndXJhdGllIEpTT04gdG9ldm9lZ2VuL2JpandlcmtlbiJ9LGpvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2rEmSIsYWR2YW5jZWQ6IkFkdmFuY2VkIiwiY2hlY2tpbmctZGV2aWNlLWFjdGl2aXR5IjoiQ2hlY2tpbmcgZGV2aWNlIGFjdGl2aXR5Iixjb21tYW5kOiJEb2NrZXIgY29tbWFuZHMiLCJjb21tYW5kLWNvcGllZC1tZXNzYWdlIjoiRG9ja2VyIGNvbW1hbmQgaGFzIGJlZW4gY29waWVkIHRvIGNsaXBib2FyZCIsY29uZmlndXJhdGlvbjoiQ29uZmlndXJhdGlvbiIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3dlIHrFgsSFY3plIiwiY29ubmVjdG9yLWVuYWJsZWQiOiJXxYLEhWN6IHrFgsSFY3plIiwiY29ubmVjdG9yLW5hbWUiOiJOYXp3YSB6xYLEhWN6YSIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTmF6d2EgesWCxIVjemEgamVzdCB3eW1hZ2FuYS4iLCJjb25uZWN0b3ItdHlwZSI6IlR5cCB6xYLEhWN6YSIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoiVHlwIHrFgsSFY3phIGplc3Qgd3ltYWdhbnkuIixjb25uZWN0b3JzOiJLb25maWd1cmFjamEgesWCxIVjenkiLCJjb25uZWN0b3JzLWNvbmZpZyI6IkNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiIsImNvbm5lY3RvcnMtdGFibGUtZW5hYmxlZCI6IkVuYWJsZWQiLCJjb25uZWN0b3JzLXRhYmxlLW5hbWUiOiJOYW1lIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoiVHlwZSIsImNvbm5lY3RvcnMtdGFibGUtc3RhdHVzIjoiU3RhdHVzIiwiY29ubmVjdG9ycy10YWJsZS1hY3Rpb25zIjoiQWN0aW9ucyIsImNvbm5lY3RvcnMtdGFibGUta2V5IjoiS2V5IiwiY29ubmVjdG9ycy10YWJsZS1jbGFzcyI6IkNsYXNzIiwicnBjLWNvbW1hbmQtc2VuZCI6IlNlbmQiLCJycGMtY29tbWFuZC1yZXN1bHQiOiJSZXN1bHQiLCJycGMtY29tbWFuZC1lZGl0LXBhcmFtcyI6IkVkaXQgcGFyYW1ldGVycyIsImdhdGV3YXktY29uZmlndXJhdGlvbiI6IkdlbmVyYWwgQ29uZmlndXJhdGlvbiIsImRvY2tlci1sYWJlbCI6IkluIG9yZGVyIHRvIHJ1biBUaGluZ3NCb2FyZCBJb1QgZ2F0ZXdheSBpbiBkb2NrZXIgd2l0aCBjcmVkZW50aWFscyBmb3IgdGhpcyBkZXZpY2UgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kcy4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiJVdHfDs3J6IG5vd3kgZ2F0ZXdheSIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQ3p5IG5hIHBld25vIGNoY2VzeiB1dHdvcnp5xIcgbm93eSBnYXRld2F5IG8gbmF6d2llOiAne3tnYXRld2F5TmFtZX19Jz8iLCJjcmVhdGVkLXRpbWUiOiJDcmVhdGVkIHRpbWUiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoiQ29uZmlndXJhdGlvbnMgd2lsbCBiZSBkZWxldGVkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiJUdXJuaW5nIG9mZiBSZW1vdGUgQ29uZmlndXJhdGlvbiBpcyBwb3NzaWJsZSBvbmx5IGlmIHRoZXJlIGlzIHBoeXNpY2FsIGFjY2VzcyB0byB0aGUgR2F0ZXdheS4gQWxsIHByZXZpb3VzIGNvbmZpZ3VyYXRpb25zIHdpbGwgYmUgZGVsZXRlZC48YnI+PGJyPiBcblRvIHR1cm4gb2ZmIGNvbmZpZ3VyYXRpb24sIGVudGVyIGdhdGV3YXkgbmFtZSBiZWxvdyIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dCI6IkdhdGV3YXkgbmFtZSIsImNvbmZpZ3VyYXRpb24tZGVsZXRlLWRpYWxvZy1pbnB1dC1yZXF1aXJlZCI6IkdhdGV3YXkgbmFtZSBpcyBtYW5kYXRvcnkiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctY29uZmlybSI6IlR1cm4gT2ZmIixkZWxldGU6IlVzdcWEIGtvbmZpZ3VyYWNqxJkiLCJkb3dubG9hZC10aXAiOiJQb2JpZXJ6IHBsaWsga29uZmlndXJhY3lqbnkiLCJkcm9wLWZpbGUiOiJEcm9wIGZpbGUgaGVyZSBvciIsZ2F0ZXdheToiV2VqxZtjaWUiLCJnYXRld2F5LWV4aXN0cyI6IlVyesSFZHplbmllIG8gdGVqIHNhbWVqIG5hendpZSBqdcW8IGlzdG5pZWplLiIsImdhdGV3YXktbmFtZSI6Ik5hendhIEdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJOYXp3YSBHYXRld2F5J2EgamVzdCB3eW1hZ2FuYS4iLCJnYXRld2F5LXNhdmVkIjoiS29uZmlndXJhY2phIEdhdGV3ZXknYSB6b3N0YcWCYSBwb215xZtsbmllIHphcGlzYW5hLiIsZ3JwYzoiR1JQQyIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiS2VlcCBhbGl2ZSB0aW1lb3V0IChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dC1yZXF1aXJlZCI6IktlZXAgYWxpdmUgdGltZW91dCBpcyByZXF1aXJlZCIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LW1pbiI6IktlZXAgYWxpdmUgdGltZW91dCBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtcGF0dGVybiI6IktlZXAgYWxpdmUgdGltZW91dCBpcyBub3QgdmFsaWQiLCJncnBjLWtlZXAtYWxpdmUiOiJLZWVwIGFsaXZlIChpbiBtcykiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiJLZWVwIGFsaXZlIGlzIHJlcXVpcmVkIiwiZ3JwYy1rZWVwLWFsaXZlLW1pbiI6IktlZXAgYWxpdmUgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoiS2VlcCBhbGl2ZSBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIChpbiBtcykiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcmVxdWlyZWQiOiJNaW4gdGltZSBiZXR3ZWVuIHBpbmdzIGlzIHJlcXVpcmVkIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzLW1pbiI6Ik1pbiB0aW1lIGJldHdlZW4gcGluZ3MgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1wYXR0ZXJuIjoiTWluIHRpbWUgYmV0d2VlbiBwaW5ncyBpcyBub3QgdmFsaWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbiBwaW5nIGludGVydmFsIHdpdGhvdXQgZGF0YSAoaW4gbXMpIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEtcmVxdWlyZWQiOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNaW4gcGluZyBpbnRlcnZhbCB3aXRob3V0IGRhdGEgaXMgbm90IHZhbGlkIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6Ik1heCBwaW5ncyB3aXRob3V0IGRhdGEgaXMgcmVxdWlyZWQiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoiTWF4IHBpbmdzIHdpdGhvdXQgZGF0YSBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiJNYXggcGluZ3Mgd2l0aG91dCBkYXRhIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCAoaW4gc2VjKSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IGNoZWNrIHBlcmlvZCBpcyByZXF1aXJlZCIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoiSW5hY3Rpdml0eSBjaGVjayBwZXJpb2QgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IkluYWN0aXZpdHkgY2hlY2sgcGVyaW9kIGlzIG5vdCB2YWxpZCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoiSW5hY3Rpdml0eSB0aW1lb3V0IChpbiBzZWMpIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgcmVxdWlyZWQiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgY2FuIG5vdCBiZSBsZXNzIHRoZW4gMSIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzLXBhdHRlcm4iOiJJbmFjdGl2aXR5IHRpbWVvdXQgaXMgbm90IHZhbGlkIiwianNvbi1wYXJzZSI6Ik5pZXByYXdpZMWCb3d5IEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGUgbmllIG1vxbxlIGJ5xIcgcHVzdGUuIixsb2dzOntsb2dzOiJMb2dzIixkYXlzOiJkYXlzIixob3VyczoiaG91cnMiLG1pbnV0ZXM6Im1pbnV0ZXMiLHNlY29uZHM6InNlY29uZHMiLCJkYXRlLWZvcm1hdCI6IkRhdGUgZm9ybWF0IiwiZGF0ZS1mb3JtYXQtcmVxdWlyZWQiOiJEYXRlIGZvcm1hdCByZXF1aXJlZCIsImxvZy1mb3JtYXQiOiJMb2cgZm9ybWF0IiwibG9nLXR5cGUiOiJMb2cgdHlwZSIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiJMb2cgZm9ybWF0IHJlcXVpcmVkIixyZW1vdGU6IlJlbW90ZSBsb2dnaW5nIiwicmVtb3RlLWxvZ3MiOiJSZW1vdGUgbG9ncyIsbG9jYWw6IkxvY2FsIGxvZ2dpbmciLGxldmVsOiJMb2cgbGV2ZWwiLCJmaWxlLXBhdGgiOiJGaWxlIHBhdGgiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiJGaWxlIHBhdGggcmVxdWlyZWQiLCJzYXZpbmctcGVyaW9kIjoiTG9nIHNhdmluZyBwZXJpb2QiLCJzYXZpbmctcGVyaW9kLW1pbiI6IkxvZyBzYXZpbmcgcGVyaW9kIGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJzYXZpbmctcGVyaW9kLXJlcXVpcmVkIjoiTG9nIHNhdmluZyBwZXJpb2QgcmVxdWlyZWQiLCJiYWNrdXAtY291bnQiOiJCYWNrdXAgY291bnQiLCJiYWNrdXAtY291bnQtbWluIjoiQmFja3VwIGNvdW50IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJiYWNrdXAtY291bnQtcmVxdWlyZWQiOiJCYWNrdXAgY291bnQgcmVxdWlyZWQifSwibWluLXBhY2stc2VuZC1kZWxheSI6Ik1pbiBwYWNrIHNlbmQgZGVsYXkgKGluIG1zKSIsIm1pbi1wYWNrLXNlbmQtZGVsYXktcmVxdWlyZWQiOiJNaW4gcGFjayBzZW5kIGRlbGF5IGlzIHJlcXVpcmVkIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiJNaW4gcGFjayBzZW5kIGRlbGF5IGNhbiBub3QgYmUgbGVzcyB0aGVuIDAiLCJuby1jb25uZWN0b3JzIjoiQnJhayB6xYLEhWN6eSIsIm5vLWRhdGEiOiJCcmFrIGtvbmZpZ3VyYWNqaSIsIm5vLWdhdGV3YXktZm91bmQiOiJOaWUgem5hbGV6aW9ubyBnYXRld2F5J2EuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pZSB6bmFsZXppb25vLiIsInBhdGgtbG9ncyI6IsWaY2llxbxrYSBkbyBwbGlrw7N3IGR6aWVubmlrYSIsInBhdGgtbG9ncy1yZXF1aXJlZCI6IsWaY2llxbxrYSBqZXN0IHd5bWFnYW5hLiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoiS2VlcCBhbGl2ZSBwZXJtaXQgd2l0aG91dCBjYWxscyIscmVtb3RlOiJaZGFsbmEga29uZmlndXJhY2phIiwicmVtb3RlLWxvZ2dpbmctbGV2ZWwiOiJQb3ppb20gbG9nb3dhbmlhIiwicmVtb3ZlLWVudHJ5IjoiVXN1xYQga29uZmlndXJhY2rEmSIsInJlbW90ZS1zaGVsbCI6IlJlbW90ZSBzaGVsbCIsInJlbW90ZS1jb25maWd1cmF0aW9uIjoiUmVtb3RlIENvbmZpZ3VyYXRpb24iLG90aGVyOiJPdGhlciIsInNhdmUtdGlwIjoiWmFwaXN6IHBsaWsga29uZmlndXJhY3lqbnkiLCJzZWN1cml0eS10eXBlIjoiUm9kemFqIHphYmV6cGllY3plbmlhIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiVG9rZW4gZG9zdMSZcHUiLCJ1c2VybmFtZS1wYXNzd29yZCI6IlVzZXJuYW1lIGFuZCBQYXNzd29yZCIsdGxzOiJUTFMiLCJ0bHMtYWNjZXNzLXRva2VuIjoiVExTICsgQWNjZXNzIFRva2VuIiwidGxzLXByaXZhdGUta2V5IjoiVExTICsgUHJpdmF0ZSBLZXkifSwic2VydmVyLXBvcnQiOiJTZXJ2ZXIgcG9ydCIsc3RhdGlzdGljczp7c3RhdGlzdGljOiJTdGF0aXN0aWMiLHN0YXRpc3RpY3M6IlN0YXRpc3RpY3MiLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiJObyBzdGF0aXN0aWNzIGF2YWlsYWJsZSIsY29tbWFuZHM6IkNvbW1hbmRzIiwic2VuZC1wZXJpb2QiOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgKGluIHNlYykiLCJzZW5kLXBlcmlvZC1yZXF1aXJlZCI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBpcyByZXF1aXJlZCIsInNlbmQtcGVyaW9kLW1pbiI6IlN0YXRpc3RpYyBzZW5kIHBlcmlvZCBjYW4gbm90IGJlIGxlc3MgdGhlbiA2MCIsInNlbmQtcGVyaW9kLXBhdHRlcm4iOiJTdGF0aXN0aWMgc2VuZCBwZXJpb2QgaXMgbm90IHZhbGlkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIChpbiBzZWMpIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoiQ2hlY2sgY29ubmVjdG9ycyBjb25maWd1cmF0aW9uIGlzIHJlcXVpcmVkIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IkNoZWNrIGNvbm5lY3RvcnMgY29uZmlndXJhdGlvbiBjYW4gbm90IGJlIGxlc3MgdGhlbiAxIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXBhdHRlcm4iOiJDaGVjayBjb25uZWN0b3JzIGNvbmZpZ3VyYXRpb24gaXMgbm90IHZhbGlkIixhZGQ6IkFkZCBjb21tYW5kIix0aW1lb3V0OiJUaW1lb3V0IiwidGltZW91dC1tcyI6IlRpbWVvdXQgKGluIG1zKSIsInRpbWVvdXQtcmVxdWlyZWQiOiJUaW1lb3V0IGlzIHJlcXVpcmVkIiwidGltZW91dC1taW4iOiJUaW1lb3V0IGNhbiBub3QgYmUgbGVzcyB0aGVuIDEiLCJ0aW1lb3V0LXBhdHRlcm4iOiJUaW1lb3V0IGlzIG5vdCB2YWxpZCIsImF0dHJpYnV0ZS1uYW1lIjoiQXR0cmlidXRlIG5hbWUiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IkF0dHJpYnV0ZSBuYW1lIGlzIHJlcXVpcmVkIixjb21tYW5kOiJDb21tYW5kIiwiY29tbWFuZC1yZXF1aXJlZCI6IkNvbW1hbmQgaXMgcmVxdWlyZWQiLHJlbW92ZToiUmVtb3ZlIGNvbW1hbmQifSxzdG9yYWdlOiJTa8WCYWRvd2FuaWUiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiJNYWtzeW1hbG5hIGxpY3piYSByZWtvcmTDs3cgdyBwbGlrdSIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc3ltYWxuYSBsaWN6YmEgcGxpa8OzdyIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik51bWVyIGplc3Qgd3ltYWdhbnkuIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyB3IHBhbWnEmWNpIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiJNaW5pbWFsbmEgbGljemJhIHJla29yZMOzdyB0byAxLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6Ik51bWVyIGplc3QgbmllcHJhd2lkxYJvd3kuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6Ik1ha3N5bWFsbmEgbGljemJhIHJla29yZMOzdyBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiJSZWFkIHJlY29yZCBjb3VudCBpbiBzdG9yYWdlIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1taW4iOiJNaW5pbXVtIG51bWJlciBvZiByZWNvcmRzIGlzIDEuIiwic3RvcmFnZS1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoiUmVhZCByZWNvcmQgY291bnQgaXMgcmVxdWlyZWQuIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiJNYXggcmVhZCByZWNvcmQgY291bnQgaW4gc3RvcmFnZSIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6Ik1pbmltdW0gbnVtYmVyIG9mIHJlY29yZHMgaXMgMS4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1yZXF1aXJlZCI6Ik1heCBSZWFkIHJlY29yZCBjb3VudCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLWRhdGEtZm9sZGVyLXBhdGgiOiJEYXRhIGZvbGRlciBwYXRoIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoiRGF0YSBmb2xkZXIgcGF0aCBpcyByZXF1aXJlZC4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik1pbmltYWxuYSBsaWN6YmEgdG8gMS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiTnVtZXIgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJzdG9yYWdlLXBhY2stc2l6ZS1yZXF1aXJlZCI6Ik1ha3N5bWFsbnkgcm96bWlhciBwYWtpZXR1IHd5ZGFyemXFhCBqZXN0IHd5bWFnYW55LiIsInN0b3JhZ2UtcGF0aCI6IsWaY2llxbxrYSBwcnplY2hvd3l3YW5pYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IsWaY2llxbxrYSBkbyBwcnplY2hvd3l3YW5pYSBqZXN0IHd5bWFnYW5hLiIsInN0b3JhZ2UtdHlwZSI6IlR5cCBza8WCYWRvd2FuaWEiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6Ik5vxZtuaWsgZGFueWNoIiwibWVtb3J5LXN0b3JhZ2UiOiJQcnplY2hvd3l3YW5pZSBwYW1pxJljaSIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IkdlbmVyYWwiLCJ0aGluZ3Nib2FyZC1ob3N0IjoiR29zcG9kYXJ6IFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6Ikhvc3QgamVzdCB3eW1hZ2FueS4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydCBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4IjoiTWFrc3ltYWxueSBudW1lciBwb3J0dSB0byA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltYWxueSBudW1lciBwb3J0dSB0byAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IlBvcnQgamVzdCBuaWVwcmF3aWTFgm93eS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG9ydCBqZXN0IHd5bWFnYW55LiIsdGlkeToiVXBvcnrEhWRrdWoiLCJ0aWR5LXRpcCI6IlVwb3J6xIVka293YW5hIGtvbmZpZ3VyYWNqYSBKU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoiWsWCxIVjemUge3t0eXBlTmFtZX19IGtvbmZpZ3VyYWNqYSIsInRscy1wYXRoLWNhLWNlcnRpZmljYXRlIjoixZpjaWXFvGthIGRvIGNlcnR5ZmlrYXR1IENBIG5hIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiLFmmNpZcW8a2EgZG8gY2VydHlmaWthdHUga2xpZW50YSBuYSBnYXRld2F5IiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoiTWVzc2FnZXMgVFRMIGNoZWNrIGluIGhvdXJzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1jaGVjay1pbi1ob3Vycy1taW4iOiJNaW4gbnVtYmVyIGlzIDEuIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXBhdHRlcm4iOiJOdW1iZXIgaXMgbm90IHZhbGlkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoiTWVzc2FnZXMgVFRMIGluIGRheXMiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1yZXF1aXJlZCI6Ik1lc3NhZ2VzIFRUTCBpbiBkYXlzIGlzIHJlcXVpcmVkLiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzLW1pbiI6Ik1pbiBudW1iZXIgaXMgMS4iLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1wYXR0ZXJuIjoiTnVtYmVyIGlzIG5vdCB2YWxpZC4iLCJtcXR0LXFvcyI6IlFvUyIsIm1xdHQtcW9zLXJlcXVpcmVkIjoiUW9TIGlzIHJlcXVpcmVkIiwibXF0dC1xb3MtcmFuZ2UiOiJRb1MgdmFsdWVzIHJhbmdlIGlzIGZyb20gMCB0byAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLFmmNpZcW8a2EgZG8ga2x1Y3phIHByeXdhdG5lZ28gbmEgYnJhbWNlIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJQcnplxYLEhWN6IHRyeWIgcGXFgm5vZWtyYW5vd3kiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNqYSBKU09OKiIsInVwZGF0ZS1jb25maWciOiJEb2Rhai96YWt0dWFsaXp1aiBrb25maWd1cmFjasSZIEpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiJFbmFibGVzIHJlbW90ZSBjb25maWd1cmF0aW9uIGFuZCBtYW5hZ2VtZW50IG9mIHRoZSBnYXRld2F5IiwicmVtb3RlLXNoZWxsIjoiRW5hYmxlcyByZW1vdGUgY29udHJvbCBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIHRoZSBnYXRld2F5IGZyb20gdGhlIFJlbW90ZSBTaGVsbCB3aWRnZXQiLGhvc3Q6Ikhvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgVGhpbmdzQm9hcmQgc2VydmVyIixwb3J0OiJQb3J0IG9mIE1RVFQgc2VydmljZSBvbiBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHRva2VuOiJBY2Nlc3MgdG9rZW4gZm9yIHRoZSBnYXRld2F5IGZyb20gVGhpbmdzQm9hcmQgc2VydmVyIiwiY2xpZW50LWlkIjoiTVFUVCBjbGllbnQgaWQgZm9yIHRoZSBnYXRld2F5IGZvcm0gVGhpbmdzQm9hcmQgc2VydmVyIix1c2VybmFtZToiTVFUVCB1c2VybmFtZSBmb3IgdGhlIGdhdGV3YXkgZm9ybSBUaGluZ3NCb2FyZCBzZXJ2ZXIiLHBhc3N3b3JkOiJNUVRUIHBhc3N3b3JkIGZvciB0aGUgZ2F0ZXdheSBmb3JtIFRoaW5nc0JvYXJkIHNlcnZlciIsImNhLWNlcnQiOiJQYXRoIHRvIENBIGNlcnRpZmljYXRlIGZpbGUiLCJkYXRlLWZvcm0iOiJEYXRlIGZvcm1hdCBpbiBsb2cgbWVzc2FnZSIsImRhdGEtZm9sZGVyIjoiUGF0aCB0byBmb2xkZXIsIHRoYXQgd2lsbCBjb250YWlucyBkYXRhIChSZWxhdGl2ZSBvciBBYnNvbHV0ZSkiLCJsb2ctZm9ybWF0IjoiTG9nIG1lc3NhZ2UgZm9ybWF0IiwicmVtb3RlLWxvZyI6IkVuYWJsZXMgcmVtb3RlIGxvZ2dpbmcgYW5kIGxvZ3MgcmVhZGluZyBmcm9tIHRoZSBnYXRld2F5IiwiYmFja3VwLWNvdW50IjoiSWYgYmFja3VwIGNvdW50IGlzID4gMCwgd2hlbiBhIHJvbGxvdmVyIGlzIGRvbmUsIG5vIG1vcmUgdGhhbiBiYWNrdXAgY291bnQgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQiLHN0b3JhZ2U6IlByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gZm9yIHNhdmluZyBpbmNvbWluZyBkYXRhIGJlZm9yZSBpdCBpcyBzZW50IHRvIHRoZSBwbGF0Zm9ybSIsIm1heC1maWxlLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBmaWxlIHRoYXQgd2lsbCBiZSBjcmVhdGVkIiwibWF4LXJlYWQtY291bnQiOiJDb3VudCBvZiBtZXNzYWdlcyB0byBnZXQgZnJvbSBzdG9yYWdlIGFuZCBzZW5kIHRvIFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiJNYXhpbXVtIGNvdW50IG9mIHJlY29yZHMgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiBvbmUgZmlsZSIsInJlYWQtcmVjb3JkLWNvdW50IjoiQ291bnQgb2YgbWVzc2FnZXMgdG8gZ2V0IGZyb20gc3RvcmFnZSBhbmQgc2VuZCB0byBUaGluZ3NCb2FyZCIsIm1heC1yZWNvcmRzLWNvdW50IjoiTWF4aW11bSBjb3VudCBvZiBkYXRhIGluIHN0b3JhZ2UgYmVmb3JlIHNlbmQgdG8gVGhpbmdzQm9hcmQiLCJ0dGwtY2hlY2staG91ciI6IkhvdyBvZnRlbiB3aWxsIEdhdGV3YXkgY2hlY2sgZGF0YSBmb3Igb2Jzb2xlc2NlbmNlIiwidHRsLW1lc3NhZ2VzLWRheSI6Ik1heGltdW0gZGF5cyB0aGF0IHN0b3JhZ2Ugd2lsbCBzYXZlIGRhdGEiLGNvbW1hbmRzOiJDb21tYW5kcyBmb3IgY29sbGVjdGluZyBhZGRpdGlvbmFsIHN0YXRpc3RpYyIsYXR0cmlidXRlOiJTdGF0aXN0aWMgdGVsZW1ldHJ5IGtleSIsdGltZW91dDoiVGltZW91dCBmb3IgY29tbWFuZCBleGVjdXRpbmciLGNvbW1hbmQ6IlRoZSByZXN1bHQgb2YgdGhlIGNvbW1hbmQgZXhlY3V0aW9uLCB3aWxsIGJlIHVzZWQgYXMgdGhlIHZhbHVlIGZvciB0ZWxlbWV0cnkiLCJjaGVjay1kZXZpY2UtYWN0aXZpdHkiOiJFbmFibGVzIG1vbml0b3IgdGhlIGFjdGl2aXR5IG9mIGVhY2ggY29ubmVjdGVkIGRldmljZSIsImluYWN0aXZpdHktdGltZW91dCI6IlRpbWUgYWZ0ZXIgd2hvc2UgdGhlIGdhdGV3YXkgd2lsbCBkaXNjb25uZWN0IGRldmljZSIsImluYWN0aXZpdHktcGVyaW9kIjoiUGVyaW9kaWNpdHkgb2YgZGV2aWNlIGFjdGl2aXR5IGNoZWNrIiwibWluaW1hbC1wYWNrLWRlbGF5IjoiRGVsYXkgYmV0d2VlbiBzZW5kaW5nIHBhY2tzIG9mIG1lc3NhZ2VzIChEZWNyZWFzaW5nIHRoaXMgc2V0dGluZyByZXN1bHRzIGluIGluY3JlYXNlZCBDUFUgdXNhZ2UpIixxb3M6IlF1YWxpdHkgb2YgU2VydmljZSBpbiBNUVRUIG1lc3NhZ2luZyAoMCAtIGF0IG1vc3Qgb25jZSwgMSAtIGF0IGxlYXN0IG9uY2UpIiwic2VydmVyLXBvcnQiOiJOZXR3b3JrIHBvcnQgb24gd2hpY2ggR1JQQyBzZXJ2ZXIgd2lsbCBsaXN0ZW4gZm9yIGluY29taW5nIGNvbm5lY3Rpb25zLiIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0IjoiTWF4aW11bSB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgZm9yIGEga2VlcGFsaXZlIHBpbmcgcmVzcG9uc2UgYmVmb3JlIGNvbnNpZGVyaW5nIHRoZSBjb25uZWN0aW9uIGRlYWQuIiwiZ3JwYy1rZWVwLWFsaXZlIjoiRHVyYXRpb24gYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSBrZWVwYWxpdmUgcGluZyBtZXNzYWdlcyB3aGVuIHRoZXJlIGlzIG5vIGFjdGl2ZSBSUEMgY2FsbC4iLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiJNaW5pbXVtIGFtb3VudCBvZiB0aW1lIHRoZSBzZXJ2ZXIgc2hvdWxkIHdhaXQgYmV0d2VlbiBzZW5kaW5nIGtlZXBhbGl2ZSBwaW5nIG1lc3NhZ2VzIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoiTWF4aW11bSBudW1iZXIgb2Yga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgdGhhdCB0aGUgc2VydmVyIGNhbiBzZW5kIHdpdGhvdXQgcmVjZWl2aW5nIGFueSBkYXRhIGJlZm9yZSBpdCBjb25zaWRlcnMgdGhlIGNvbm5lY3Rpb24gZGVhZC4iLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6Ik1pbmltdW0gYW1vdW50IG9mIHRpbWUgdGhlIHNlcnZlciBzaG91bGQgd2FpdCBiZXR3ZWVuIHNlbmRpbmcga2VlcGFsaXZlIHBpbmcgbWVzc2FnZXMgd2hlbiB0aGVyZSBpcyBubyBkYXRhIGJlaW5nIHNlbnQgb3IgcmVjZWl2ZWQuIiwicGVybWl0LXdpdGhvdXQtY2FsbHMiOiJBbGxvdyBzZXJ2ZXIgdG8ga2VlcCB0aGUgR1JQQyBjb25uZWN0aW9uIGFsaXZlIGV2ZW4gd2hlbiB0aGVyZSBhcmUgbm8gYWN0aXZlIFJQQyBjYWxscy4ifX0sS289eyJhZGQtZW50cnkiOiJBZGljaW9uYXIgY29uZmlndXJhw6fDo28iLCJjb25uZWN0b3ItYWRkIjoiQWRpY2lvbmFyIG5vdm8gY29uZWN0b3IiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkhhYmlsaXRhciBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lIjoiTm9tZSBkbyBjb25lY3RvciIsImNvbm5lY3Rvci1uYW1lLXJlcXVpcmVkIjoiTyBub21lIGRvIGNvbmVjdG9yIMOpIG9icmlnYXTDs3Jpby4iLCJjb25uZWN0b3ItdHlwZSI6IlRpcG8gZGUgY29uZWN0b3IiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6Ik8gdGlwbyBkZSBjb25lY3RvciDDqSBvYnJpZ2F0w7NyaW8uIixjb25uZWN0b3JzOiJDb25maWd1cmHDp8OjbyBkZSBjb25lY3RvcmVzIiwiY3JlYXRlLW5ldy1nYXRld2F5IjoiQ3JpYXIgdW0gbm92byBnYXRld2F5IiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiJUZW0gY2VydGV6YSBkZSBxdWUgZGVzZWphIGNyaWFyIHVtIG5vdm8gZ2F0ZXdheSBjb20gbyBub21lOiAne3tnYXRld2F5TmFtZX19Jz8iLGRlbGV0ZToiRXhjbHVpciBjb25maWd1cmHDp8OjbyIsImRvd25sb2FkLXRpcCI6IkRvd25sb2FkIGRlIGFycXVpdm8gZGUgY29uZmlndXJhw6fDo28iLGdhdGV3YXk6IkdhdGV3YXkiLCJnYXRld2F5LWV4aXN0cyI6IkrDoSBleGlzdGUgdW0gZGlzcG9zaXRpdm8gY29tIG8gbWVzbW8gbm9tZS4iLCJnYXRld2F5LW5hbWUiOiJOb21lIGRvIGdhdGV3YXkiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJPIG5vbWUgZG8gZ2F0ZXdheSDDqSBvYnJpZ2F0w7NyaW8uIiwiZ2F0ZXdheS1zYXZlZCI6IkEgY29uZmlndXJhw6fDo28gZG8gZ2F0ZXdheSBmb2kgc2FsdmEgY29ycmV0YW1lbnRlLiIsImpzb24tcGFyc2UiOiJKU09OIGludsOhbGlkby4iLCJqc29uLXJlcXVpcmVkIjoiTyBjYW1wbyBuw6NvIHBvZGUgZXN0YXIgZW0gYnJhbmNvLiIsIm5vLWNvbm5lY3RvcnMiOiJTZW0gY29uZWN0b3JlcyIsIm5vLWRhdGEiOiJTZW0gY29uZmlndXJhw6fDtWVzIiwibm8tZ2F0ZXdheS1mb3VuZCI6Ik5lbmh1bSBnYXRld2F5IGVuY29udHJhZG8uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG7Do28gZW5jb250cmFkby4iLCJwYXRoLWxvZ3MiOiJDYW1pbmhvIHBhcmEgYXJxdWl2b3MgZGUgbG9nIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoiTyBjYW1pbmhvIMOpIG9icmlnYXTDs3JpbyIscmVtb3RlOiJDb25maWd1cmHDp8OjbyByZW1vdGEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6Ik7DrXZlbCBkZSByZWdpc3RybyBlbSBsb2ciLCJyZW1vdmUtZW50cnkiOiJSZW1vdmVyIGNvbmZpZ3VyYcOnw6NvIiwic2F2ZS10aXAiOiJTYWx2YXIgYXJxdWl2byBkZSBjb25maWd1cmHDp8OjbyIsInNlY3VyaXR5LXR5cGUiOiJUaXBvIGRlIHNlZ3VyYW7Dp2EiLCJzZWN1cml0eS10eXBlcyI6eyJhY2Nlc3MtdG9rZW4iOiJUb2tlbiBkZSBBY2Vzc28iLHRsczoiVExTIn0sc3RvcmFnZToiQXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LWZpbGUtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJxdWl2byIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTsO6bWVybyBtw6F4aW1vIGRlIGFycXVpdm9zIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gw6kgMS4iLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1maWxlcy1yZXF1aXJlZCI6Ik8gbsO6bWVybyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6Ik7Dum1lcm8gbcOheGltbyBkZSByZWdpc3Ryb3MgZW0gYXJtYXplbmFtZW50byIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTyBuw7ptZXJvIG3DrW5pbW8gZGUgcmVnaXN0cm9zIMOpIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoiTyBuw7ptZXJvIG7Do28gw6kgdsOhbGlkby4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTyBuw7ptZXJvIG3DoXhpbW8gZGUgcmVnaXN0cm9zIMOpIG9icmlnYXTDs3Jpby4iLCJzdG9yYWdlLXBhY2stc2l6ZSI6IlRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIMOpIDEuIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6Ik8gbsO6bWVybyBuw6NvIMOpIHbDoWxpZG8uIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJPIHRhbWFuaG8gbcOheGltbyBkZSBwYWNvdGUgZGUgZXZlbnRvcyDDqSBvYnJpZ2F0w7NyaW8uIiwic3RvcmFnZS1wYXRoIjoiQ2FtaW5obyBkZSBhcm1hemVuYW1lbnRvIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoiTyBjYW1pbmhvIGRlIGFybWF6ZW5hbWVudG8gw6kgb2JyaWdhdMOzcmlvLiIsInN0b3JhZ2UtdHlwZSI6IlRpcG8gZGUgYXJtYXplbmFtZW50byIsInN0b3JhZ2UtdHlwZXMiOnsiZmlsZS1zdG9yYWdlIjoiQXJtYXplbmFtZW50byBkZSBhcnF1aXZvIiwibWVtb3J5LXN0b3JhZ2UiOiJBcm1hemVuYW1lbnRvIGRlIG1lbcOzcmlhIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikhvc3QgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiTyBob3N0IMOpIG9icmlnYXTDs3Jpby4iLCJ0aGluZ3Nib2FyZC1wb3J0IjoiUG9ydGEgVGhpbmdzQm9hcmQiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6Ik8gbsO6bWVybyBtw6F4aW1vIGRlIHBvcnRhcyDDqSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik8gbsO6bWVybyBtw61uaW1vIGRlIHBvcnRhcyDDqSAxLiIsInRoaW5nc2JvYXJkLXBvcnQtcGF0dGVybiI6IkEgcG9ydGEgbsOjbyDDqSB2w6FsaWRhLiIsInRoaW5nc2JvYXJkLXBvcnQtcmVxdWlyZWQiOiJBIHBvcnRhIMOpIG9icmlnYXTDs3JpYS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IkNvbmZpZyBUaWR5IEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25maWd1cmHDp8OjbyBkbyBjb25lY3RvciB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IkNhbWluaG8gcGFyYSBjZXJ0aWZpY2FkbyBkZSBBdXRvcmlkYWRlIGRlIENlcnRpZmljYcOnw6NvIG5vIGdhdGV3YXkiLCJ0bHMtcGF0aC1jbGllbnQtY2VydGlmaWNhdGUiOiJDYW1pbmhvIHBhcmEgY2VydGlmaWNhZG8gZGUgY2xpZW50ZSBubyBnYXRld2F5IiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiJDYW1pbmhvIHBhcmEgY2hhdmUgcHJpdmFkYSBubyBnYXRld2F5IiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiJBbHRlcm5hciB0ZWxhIGludGVpcmEiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYcOnw6NvIEpTT04qIiwidXBkYXRlLWNvbmZpZyI6IkFkaWNpb25hci9hdHVhbGl6YXIgY29uZmlndXJhw6fDo28gZGUgSlNPTiJ9LCRvPXsiYWRkLWVudHJ5IjoiRG9kYWoga29uZmlndXJhY2lqbyIsImNvbm5lY3Rvci1hZGQiOiJEb2RhaiBub3YgcHJpa2xqdcSNZWsiLCJjb25uZWN0b3ItZW5hYmxlZCI6Ik9tb2dvxI1pIHByaWtsanXEjWVrIiwiY29ubmVjdG9yLW5hbWUiOiJJbWUgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6IkltZSBwcmlrbGp1xI1rYSBqZSBvYnZlem5vLiIsImNvbm5lY3Rvci10eXBlIjoiVnJzdGEgcHJpa2xqdcSNa2EiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IlphaHRldmEgc2UgdnJzdGEgcHJpa2xqdcSNa2EuIixjb25uZWN0b3JzOiJLb25maWd1cmFjaWphIHByaWtsanXEjWtvdiIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlVzdHZhcmkgbm92IHByZWhvZCIsImNyZWF0ZS1uZXctZ2F0ZXdheS10ZXh0IjoiQWxpIHN0ZSBwcmVwcmnEjWFuaSwgZGEgxb5lbGl0ZSB1c3R2YXJpdGkgbm92IHByZWhvZCB6IGltZW5vbTogJ3t7Z2F0ZXdheU5hbWV9fSc/IixkZWxldGU6Ikl6YnJpxaFpIGtvbmZpZ3VyYWNpam8iLCJkb3dubG9hZC10aXAiOiJQcmVub3Mga29uZmlndXJhY2lqc2tlIGRhdG90ZWtlIixnYXRld2F5OiJQcmVob2QiLCJnYXRld2F5LWV4aXN0cyI6Ik5hcHJhdmEgeiBpc3RpbSBpbWVub20gxb5lIG9ic3RhamEuIiwiZ2F0ZXdheS1uYW1lIjoiSW1lIHByZWhvZGEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJJbWUgcHJlaG9kYSBqZSBvYnZlem5vLiIsImdhdGV3YXktc2F2ZWQiOiJLb25maWd1cmFjaWphIHByZWhvZGEgamUgdXNwZcWhbm8gc2hyYW5qZW5hLiIsImpzb24tcGFyc2UiOiJOZXZlbGphdmVuIEpTT04uIiwianNvbi1yZXF1aXJlZCI6IlBvbGplIG5lIHNtZSBiaXRpIHByYXpuby4iLCJuby1jb25uZWN0b3JzIjoiTmkgcHJpa2xqdcSNa292Iiwibm8tZGF0YSI6IkJyZXoga29uZmlndXJhY2lqIiwibm8tZ2F0ZXdheS1mb3VuZCI6IlByZWhvZCBuaSBuYWpkZW4uIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIG5pIG1vZ2/EjWUgbmFqdGkuIiwicGF0aC1sb2dzIjoiUG90IGRvIGRuZXZuacWha2loIGRhdG90ZWsiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJQb3QgamUgb2J2ZXpuYS4iLHJlbW90ZToiT2RkYWxqZW5hIGtvbmZpZ3VyYWNpamEiLCJyZW1vdGUtbG9nZ2luZy1sZXZlbCI6IlJhdmVuIGJlbGXFvmVuamEiLCJyZW1vdmUtZW50cnkiOiJPZHN0cmFuaSBrb25maWd1cmFjaWpvIiwic2F2ZS10aXAiOiJTaHJhbmkga29uZmlndXJhY2lqc2tvIGRhdG90ZWtvIiwic2VjdXJpdHktdHlwZSI6IlZyc3RhIHphxaHEjWl0ZSIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6IkRvc3RvcG5pIMW+ZXRvbiIsdGxzOiJUTFMifSxzdG9yYWdlOiJTaHJhbWJhIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgZGF0b3Rla2kiLCJzdG9yYWdlLW1heC1maWxlcyI6Ik5hanZlxI1qZSDFoXRldmlsbyBkYXRvdGVrIiwic3RvcmFnZS1tYXgtZmlsZXMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLFoHRldmlsa2EgamUgb2J2ZXpuYS4iLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoiTmFqdmXEjSB6YXBpc292IHYgcG9tbmlsbmlrdSIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyB6YXBpc292IGplIDEuIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoixaB0ZXZpbGthIG5pIHZlbGphdm5hLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiJaYWh0ZXZhbiBqZSBuYWp2ZcSNIHphcGlzb3YuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJOYWp2ZcSNamEgdmVsaWtvc3QgcGFrZXRhIGRvZ29ka292Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTmFqbWFuasWhZSDFoXRldmlsbyBqZSAxLiIsInN0b3JhZ2UtcGFjay1zaXplLXBhdHRlcm4iOiLFoHRldmlsa2EgbmkgdmVsamF2bmEuIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiJaYWh0ZXZhbmEgamUgbmFqdmXEjWphIHZlbGlrb3N0IHBha2V0YSBkb2dvZGtvdi4iLCJzdG9yYWdlLXBhdGgiOiJQb3QgcG9tbmlsbmlrYSIsInN0b3JhZ2UtcGF0aC1yZXF1aXJlZCI6IlphaHRldmFuYSBqZSBwb3QgZG8gcG9tbmlsbmlrYS4iLCJzdG9yYWdlLXR5cGUiOiJWcnN0YSBwb21uaWxuaWthIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJTaHJhbWJhIGRhdG90ZWsiLCJtZW1vcnktc3RvcmFnZSI6IlNwb21pbiBwb21uaWxuaWthIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6Ikdvc3RpdGVsaiBUaGluZ3NCb2FyZCIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiJQb3RyZWJlbiBqZSBnb3N0aXRlbGouIiwidGhpbmdzYm9hcmQtcG9ydCI6IlZyYXRhIFRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJOYWp2ZcSNamEgxaF0ZXZpbGthIHZyYXQgamUgNjU1MzUuIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiJOYWptYW5qxaFhIMWhdGV2aWxrYSB2cmF0IGplIDEuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiVnJhdGEgbmlzbyB2ZWxqYXZuYS4iLCJ0aGluZ3Nib2FyZC1wb3J0LXJlcXVpcmVkIjoiUG90cmVibmEgc28gdnJhdGEuIix0aWR5OiJVcmVqZW5vIiwidGlkeS10aXAiOiJVcmVqZW5hIGtvbmZpZ3VyYWNpamEgSlNPTiIsInRpdGxlLWNvbm5lY3RvcnMtanNvbiI6IktvbmZpZ3VyYWNpamEga29uZWt0b3JqYSB7e3R5cGVOYW1lfX0iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBvdCBkbyBwb3RyZGlsYSBDQSBuYSBwcmVob2R1IiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoiUG90IGRvIHBvdHJkaWxhIHN0cmFua2UgbmEgcHJlaG9kdSIsInRscy1wYXRoLXByaXZhdGUta2V5IjoiUG90IGRvIHphc2VibmVnYSBrbGp1xI1hIG5hIHByZWhvZHUiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IlByZWtsb3AgbmEgY2Vsb3phc2xvbnNraSBuYcSNaW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IktvbmZpZ3VyYWNpamEgSlNPTiAqIiwidXBkYXRlLWNvbmZpZyI6IkRvZGFqIC8gcG9zb2RvYmkga29uZmlndXJhY2lqbyBKU09OIn0sWW89eyJhZGQtZW50cnkiOiJZYXDEsWxhbmTEsXJtYSBla2xlIiwiY29ubmVjdG9yLWFkZCI6IlllbmkgYmHEn2xhecSxY8SxIGVrbGUiLCJjb25uZWN0b3ItZW5hYmxlZCI6IkJhxJ9sYXnEsWPEsXnEsSBldGtpbmxlxZ90aXIiLCJjb25uZWN0b3ItbmFtZSI6IkJhxJ9sYXnEsWPEsSBhZMSxIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiJCYcSfbGF5xLFjxLEgYWTEsSBnZXJla2xpLiIsImNvbm5lY3Rvci10eXBlIjoiQmHEn2xhecSxY8SxIHRpcGkiLCJjb25uZWN0b3ItdHlwZS1yZXF1aXJlZCI6IkJhxJ9sYXnEsWPEsSB0w7xyw7wgZ2VyZWtsaS4iLGNvbm5lY3RvcnM6IkJhxJ9sYXnEsWPEsWxhcsSxbiB5YXDEsWxhbmTEsXJtYXPEsSIsImNyZWF0ZS1uZXctZ2F0ZXdheSI6IlllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVyIiwiY3JlYXRlLW5ldy1nYXRld2F5LXRleHQiOiIne3tnYXRld2F5TmFtZX19JyBhZMSxbmRhIHllbmkgYmlyIGHEnyBnZcOnaWRpIG9sdcWfdHVybWFrIGlzdGVkacSfaW5pemRlbiBlbWluIG1pc2luaXo/IixkZWxldGU6IllhcMSxbGFuZMSxcm1hecSxIHNpbCIsImRvd25sb2FkLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGluZGlyaW4iLGdhdGV3YXk6IkHEnyBnZcOnaWRpIiwiZ2F0ZXdheS1leGlzdHMiOiJBeW7EsSBhZGEgc2FoaXAgY2loYXogemF0ZW4gdmFyLiIsImdhdGV3YXktbmFtZSI6IkHEnyBnZcOnaWRpIGFkxLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiJBxJ8gZ2XDp2lkaSBhZMSxIGdlcmVrbGkuIiwiZ2F0ZXdheS1zYXZlZCI6IkHEnyBnZcOnaWRpIHlhcMSxbGFuZMSxcm1hc8SxIGJhxZ9hcsSxeWxhIGtheWRlZGlsZGkuIiwianNvbi1wYXJzZSI6Ikdlw6dlcmxpIGJpciBKU09OIGRlxJ9pbC4iLCJqc29uLXJlcXVpcmVkIjoiQWxhbiBib8WfIG9sYW1hei4iLCJuby1jb25uZWN0b3JzIjoiQmHEn2xhecSxY8SxIHlvayIsIm5vLWRhdGEiOiJZYXDEsWxhbmTEsXJtYSB5b2siLCJuby1nYXRld2F5LWZvdW5kIjoiQcSfIGdlw6dpZGkgYnVsdW5hbWFkxLEuIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiAne3tpdGVtfX0nIGJ1bHVuYW1hZMSxLiIsInBhdGgtbG9ncyI6IkxvZyBkb3N5YWxhcsSxIHlvbHUiLCJwYXRoLWxvZ3MtcmVxdWlyZWQiOiJMb2cgZG9zeWFsYXLEsSBkaXppbmkgZ2VyZWtsaS4iLHJlbW90ZToiVXpha3RhbiB5YXDEsWxhbmTEsXJtYSIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoiTG9nbGFtYSBzZXZpeWVzaSIsInJlbW92ZS1lbnRyeSI6IllhcMSxbGFuZMSxcm1hecSxIGthbGTEsXIiLCJzYXZlLXRpcCI6IllhcMSxbGFuZMSxcm1hIGRvc3lhc8SxbsSxIGtheWRldCIsInNlY3VyaXR5LXR5cGUiOiJHw7x2ZW5saWsgdMO8csO8Iiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoiQWNjZXNzIFRva2VuIix0bHM6IlRMUyJ9LHN0b3JhZ2U6IkRlcG9sYW1hIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoiRG9zeWFkYWtpIG1ha3NpbXVtIGthecSxdCIsInN0b3JhZ2UtbWF4LWZpbGVzIjoiTWFrc2ltdW0gZG9zeWEgc2F5xLFzxLEiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiJNaW5pbXVtIHNhecSxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LWZpbGVzLXBhdHRlcm4iOiJTYXnEsSBnZcOnZXJsaSBkZcSfaWwuIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiJTYXnEsSBnZXJla2xpLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMiOiJEZXBvZGFraSBtYWtzaW11bSBrYXnEsXQiLCJzdG9yYWdlLW1heC1yZWNvcmRzLW1pbiI6Ik1pbmltdW0ga2F5xLF0IHNhecSxc8SxIDEnZGlyLiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IlNhecSxIGdlw6dlcmxpIGRlxJ9pbC4iLCJzdG9yYWdlLW1heC1yZWNvcmRzLXJlcXVpcmVkIjoiTWFrc2ltdW0ga2F5xLF0IGdlcmVrbGkuIiwic3RvcmFnZS1wYWNrLXNpemUiOiJNYWtzaW11bSBldGtpbmxpayBwYWtldGkgYm95dXR1Iiwic3RvcmFnZS1wYWNrLXNpemUtbWluIjoiTWluaW11bSBzYXnEsSAxJ2Rpci4iLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoiU2F5xLEgZ2XDp2VybGkgZGXEn2lsLiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoiTWFrc2ltdW0gZXRraW5saWsgcGFrZXRpIGJveXV0dSBnZXJla2xpLiIsInN0b3JhZ2UtcGF0aCI6IkRlcG9sYW1hIHlvbHUiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiJEZXBvbGFtYSB5b2x1IGdlcmVrbGkuIiwic3RvcmFnZS10eXBlIjoiRGVwb2xhbWEgdMO8csO8Iiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiJEb3N5YSBkZXBvbGFtYSIsIm1lbW9yeS1zdG9yYWdlIjoiQmVsbGVrIGRlcG9sYW1hIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJkIGhvc3QiLCJ0aGluZ3Nib2FyZC1ob3N0LXJlcXVpcmVkIjoiSG9zdCBnZXJla2xpLiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZCBwb3J0IiwidGhpbmdzYm9hcmQtcG9ydC1tYXgiOiJNYWtzaW11bSBwb3J0IG51bWFyYXPEsSA2NTUzNS4iLCJ0aGluZ3Nib2FyZC1wb3J0LW1pbiI6Ik1pbmltdW0gcG9ydCBudW1hcmFzxLEgMSdkaXIuIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoiUG9ydCBnZcOnZXJsaSBkZcSfaWwuIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IlBvcnQgZ2VyZWtsaS4iLHRpZHk6IlRpZHkiLCJ0aWR5LXRpcCI6IlRpZHkgY29uZmlnIEpTT04iLCJ0aXRsZS1jb25uZWN0b3JzLWpzb24iOiJDb25uZWN0b3Ige3t0eXBlTmFtZX19IGNvbmZpZ3VyYXRpb24iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gQ0EgY2VydGlmaWNhdGUgb24gZ2F0ZXdheSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IlBhdGggdG8gY2xpZW50IGNlcnRpZmljYXRlIG9uIGdhdGV3YXkiLCJ0bHMtcGF0aC1wcml2YXRlLWtleSI6IlBhdGggdG8gcHJpdmF0ZSBrZXkgb24gZ2F0ZXdheSIsInRvZ2dsZS1mdWxsc2NyZWVuIjoiVG9nZ2xlIGZ1bGxzY3JlZW4iLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IkNvbmZpZ3VyYXRpb24gSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoiQWRkL3VwZGF0ZSBjb25maWd1cmF0aW9uIEpTT04ifSxRbz17ImFkZC1lbnRyeSI6Iua3u+WKoOmFjee9riIsYWR2YW5jZWQ6IumrmOe6pyIsImNoZWNraW5nLWRldmljZS1hY3Rpdml0eSI6IuajgOafpeiuvuWkh+a0u+WKqCIsY29tbWFuZDoiRG9ja2Vy5ZG95LukIiwiY29tbWFuZC1jb3BpZWQtbWVzc2FnZSI6IkRvY2tlcuWRveS7pOW3suWkjeWItuWIsOWJqui0tOadvyIsY29uZmlndXJhdGlvbjoi6YWN572uIiwiY29ubmVjdG9yLWFkZCI6Iua3u+WKoOi/nuaOpeWZqCIsImNvbm5lY3Rvci1lbmFibGVkIjoi5ZCv55So6L+e5o6l5ZmoIiwiY29ubmVjdG9yLW5hbWUiOiLov57mjqXlmajlkI3np7AiLCJjb25uZWN0b3ItbmFtZS1yZXF1aXJlZCI6Iui/nuaOpeWZqOWQjeensOW/heWhq+OAgiIsImNvbm5lY3Rvci10eXBlIjoi6L+e5o6l5Zmo57G75Z6LIiwiY29ubmVjdG9yLXR5cGUtcmVxdWlyZWQiOiLov57mjqXlmajnsbvlnovlv4XloavjgIIiLGNvbm5lY3RvcnM6Iui/nuaOpeWZqOmFjee9riIsImNvbm5lY3RvcnMtY29uZmlnIjoi6L+e5o6l5Zmo6YWN572uIiwiY29ubmVjdG9ycy10YWJsZS1lbmFibGVkIjoi5bey5ZCv55SoIiwiY29ubmVjdG9ycy10YWJsZS1uYW1lIjoi5ZCN56ewIiwiY29ubmVjdG9ycy10YWJsZS10eXBlIjoi57G75Z6LIiwiY29ubmVjdG9ycy10YWJsZS1zdGF0dXMiOiLnirbmgIEiLCJjb25uZWN0b3JzLXRhYmxlLWFjdGlvbnMiOiLmk43kvZwiLCJjb25uZWN0b3JzLXRhYmxlLWtleSI6IumUriIsImNvbm5lY3RvcnMtdGFibGUtY2xhc3MiOiLnsbsiLCJycGMtY29tbWFuZC1zZW5kIjoi5Y+R6YCBIiwicnBjLWNvbW1hbmQtcmVzdWx0Ijoi57uT5p6cIiwicnBjLWNvbW1hbmQtZWRpdC1wYXJhbXMiOiLnvJbovpHlj4LmlbAiLCJnYXRld2F5LWNvbmZpZ3VyYXRpb24iOiLpgJrnlKjphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLliJvlu7rnvZHlhbMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuehruWumuimgeWIm+W7uuWQjeS4uiAne3tnYXRld2F5TmFtZX19JyDnmoTmlrDnvZHlhbPvvJ8iLCJjcmVhdGVkLXRpbWUiOiLliJvlu7rml7bpl7QiLCJjb25maWd1cmF0aW9uLWRlbGV0ZS1kaWFsb2ctaGVhZGVyIjoi6YWN572u5bCG6KKr5Yig6ZmkIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWJvZHkiOiLlj6rmnInlr7nnvZHlhbPov5vooYzniannkIborr/pl67ml7bvvIzmiY3mnInlj6/og73lhbPpl63ov5znqIvphY3nva7jgILmiYDmnInlhYjliY3nmoTphY3nva7pg73lsIbooqvliKDpmaTjgII8YnI+PGJyPlxu6KaB5YWz6Zet6YWN572u77yM6K+35Zyo5LiL6Z2i6L6T5YWl572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0Ijoi572R5YWz5ZCN56ewIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWlucHV0LXJlcXVpcmVkIjoi572R5YWz5ZCN56ew5piv5b+F6ZyA55qEIiwiY29uZmlndXJhdGlvbi1kZWxldGUtZGlhbG9nLWNvbmZpcm0iOiLlhbPpl60iLGRlbGV0ZToi5Yig6Zmk6YWN572uIiwiZG93bmxvYWQtdGlwIjoi5LiL6L296YWN572uIiwiZHJvcC1maWxlIjoi5bCG5paH5Lu25ouW5pS+5Yiw5q2k5aSE5oiWIixnYXRld2F5OiLnvZHlhbMiLCJnYXRld2F5LWV4aXN0cyI6IuWQjOWQjeiuvuWkh+W3suWtmOWcqOOAgiIsImdhdGV3YXktbmFtZSI6Iue9keWFs+WQjeensCIsImdhdGV3YXktbmFtZS1yZXF1aXJlZCI6Iue9keWFs+WQjeensOW/heWhq+OAgiIsImdhdGV3YXktc2F2ZWQiOiLlt7LmiJDlip/kv53lrZjnvZHlhbPphY3nva7jgIIiLGdycGM6IkdSUEMiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuS/neaMgei/nuaOpei2heaXtu+8iOavq+enku+8iSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXJlcXVpcmVkIjoi6ZyA6KaB5L+d5oyB6L+e5o6l6LaF5pe2IiwiZ3JwYy1rZWVwLWFsaXZlLXRpbWVvdXQtbWluIjoi5L+d5oyB6L+e5o6l6LaF5pe25LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS10aW1lb3V0LXBhdHRlcm4iOiLkv53mjIHov57mjqXotoXml7bml6DmlYgiLCJncnBjLWtlZXAtYWxpdmUiOiLkv53mjIHov57mjqXvvIjmr6vnp5LvvIkiLCJncnBjLWtlZXAtYWxpdmUtcmVxdWlyZWQiOiLpnIDopoHkv53mjIHov57mjqUiLCJncnBjLWtlZXAtYWxpdmUtbWluIjoi5L+d5oyB6L+e5o6l5LiN6IO95bCP5LqOMSIsImdycGMta2VlcC1hbGl2ZS1wYXR0ZXJuIjoi5L+d5oyB6L+e5o6l5peg5pWIIiwiZ3JwYy1taW4tdGltZS1iZXR3ZWVuLXBpbmdzIjoi5pyA5bCPUGluZ+mXtOmalO+8iOavq+enku+8iSIsImdycGMtbWluLXRpbWUtYmV0d2Vlbi1waW5ncy1yZXF1aXJlZCI6IumcgOimgeacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtbWluIjoi5pyA5bCPUGluZ+mXtOmalOS4jeiDveWwj+S6jjEiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MtcGF0dGVybiI6IuacgOWwj1Bpbmfpl7TpmpTml6DmlYgiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YSI6IuaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpTvvIjmr6vnp5LvvIkiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWwj1Bpbmfpl7TpmpQiLCJncnBjLW1pbi1waW5nLWludGVydmFsLXdpdGhvdXQtZGF0YS1taW4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5LiN6IO95bCP5LqOMSIsImdycGMtbWluLXBpbmctaW50ZXJ2YWwtd2l0aG91dC1kYXRhLXBhdHRlcm4iOiLml6DmlbDmja7ml7bnmoTmnIDlsI9QaW5n6Ze06ZqU5peg5pWIIiwiZ3JwYy1tYXgtcGluZ3Mtd2l0aG91dC1kYXRhIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsCIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YS1yZXF1aXJlZCI6IumcgOimgeaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbAiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtbWluIjoi5peg5pWw5o2u5pe255qE5pyA5aSnUGluZ+aVsOS4jeiDveWwj+S6jjEiLCJncnBjLW1heC1waW5ncy13aXRob3V0LWRhdGEtcGF0dGVybiI6IuaXoOaVsOaNruaXtueahOacgOWkp1BpbmfmlbDml6DmlYgiLCJpbmFjdGl2aXR5LWNoZWNrLXBlcmlvZC1zZWNvbmRzIjoi5LiN5rS76LeD5qOA5p+l5pyf77yI56eS77yJIiwiaW5hY3Rpdml0eS1jaGVjay1wZXJpb2Qtc2Vjb25kcy1yZXF1aXJlZCI6IumcgOimgeS4jea0u+i3g+ajgOafpeacnyIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtbWluIjoi5LiN5rS76LeD5qOA5p+l5pyf5LiN6IO95bCP5LqOMSIsImluYWN0aXZpdHktY2hlY2stcGVyaW9kLXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+ajgOafpeacn+aXoOaViCIsImluYWN0aXZpdHktdGltZW91dC1zZWNvbmRzIjoi5LiN5rS76LeD6LaF5pe277yI56eS77yJIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcmVxdWlyZWQiOiLpnIDopoHkuI3mtLvot4PotoXml7YiLCJpbmFjdGl2aXR5LXRpbWVvdXQtc2Vjb25kcy1taW4iOiLkuI3mtLvot4PotoXml7bkuI3og73lsI/kuo4xIiwiaW5hY3Rpdml0eS10aW1lb3V0LXNlY29uZHMtcGF0dGVybiI6IuS4jea0u+i3g+i2heaXtuaXoOaViCIsImpzb24tcGFyc2UiOiLml6DmlYjnmoRKU09O44CCIiwianNvbi1yZXF1aXJlZCI6IuWtl+auteS4jeiDveS4uuepuuOAgiIsbG9nczp7bG9nczoi5pel5b+XIixkYXlzOiLlpKkiLGhvdXJzOiLlsI/ml7YiLG1pbnV0ZXM6IuWIhumSnyIsc2Vjb25kczoi56eSIiwiZGF0ZS1mb3JtYXQiOiLml6XmnJ/moLzlvI8iLCJkYXRlLWZvcm1hdC1yZXF1aXJlZCI6IumcgOimgeaXpeacn+agvOW8jyIsImxvZy1mb3JtYXQiOiLml6Xlv5fmoLzlvI8iLCJsb2ctdHlwZSI6IuaXpeW/l+exu+WeiyIsImxvZy1mb3JtYXQtcmVxdWlyZWQiOiLpnIDopoHml6Xlv5fmoLzlvI8iLHJlbW90ZToi6L+c56iL5pel5b+X6K6w5b2VIiwicmVtb3RlLWxvZ3MiOiLov5znqIvml6Xlv5ciLGxvY2FsOiLmnKzlnLDml6Xlv5forrDlvZUiLGxldmVsOiLml6Xlv5fnuqfliKsiLCJmaWxlLXBhdGgiOiLmlofku7bot6/lvoQiLCJmaWxlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHmlofku7bot6/lvoQiLCJzYXZpbmctcGVyaW9kIjoi5pel5b+X5L+d5a2Y5pyf6ZmQIiwic2F2aW5nLXBlcmlvZC1taW4iOiLml6Xlv5fkv53lrZjmnJ/pmZDkuI3og73lsI/kuo4xIiwic2F2aW5nLXBlcmlvZC1yZXF1aXJlZCI6IumcgOimgeaXpeW/l+S/neWtmOacn+mZkCIsImJhY2t1cC1jb3VudCI6IuWkh+S7veaVsOmHjyIsImJhY2t1cC1jb3VudC1taW4iOiLlpIfku73mlbDph4/kuI3og73lsI/kuo4xIiwiYmFja3VwLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB5aSH5Lu95pWw6YePIn0sIm1pbi1wYWNrLXNlbmQtZGVsYXkiOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/vvIjmr6vnp5LvvIkiLCJtaW4tcGFjay1zZW5kLWRlbGF5LXJlcXVpcmVkIjoi5pyA5bCP5YyF5Y+R6YCB5bu26L+f5piv5b+F6ZyA55qEIiwibWluLXBhY2stc2VuZC1kZWxheS1taW4iOiLmnIDlsI/ljIXlj5HpgIHlu7bov5/kuI3og73lsI/kuo4wIiwibm8tY29ubmVjdG9ycyI6IuaXoOi/nuaOpeWZqCIsIm5vLWRhdGEiOiLmsqHmnInphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw572R5YWz44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IuacquaJvuWIsCAne3tpdGVtfX0nIOOAgiIsInBhdGgtbG9ncyI6IuaXpeW/l+aWh+S7tueahOi3r+W+hCIsInBhdGgtbG9ncy1yZXF1aXJlZCI6Iui3r+W+hOaYr+W/hemcgOeahOOAgiIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5L+d5oyB6L+e5o6l6K645Y+v77yM5peg6ZyA5ZON5bqUIixyZW1vdGU6Iui/nOeoi+mFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel5b+X6K6w5b2V57qn5YirIiwicmVtb3ZlLWVudHJ5Ijoi5Yig6Zmk6YWN572uIiwicmVtb3RlLXNoZWxsIjoi6L+c56iLU2hlbGwiLCJyZW1vdGUtY29uZmlndXJhdGlvbiI6Iui/nOeoi+mFjee9riIsb3RoZXI6IuWFtuS7liIsInNhdmUtdGlwIjoi5L+d5a2Y6YWN572uIiwic2VjdXJpdHktdHlwZSI6IuWuieWFqOexu+WeiyIsInNlY3VyaXR5LXR5cGVzIjp7ImFjY2Vzcy10b2tlbiI6Iuiuv+mXruS7pOeJjCIsInVzZXJuYW1lLXBhc3N3b3JkIjoi55So5oi35ZCN5ZKM5a+G56CBIix0bHM6IlRMUyIsInRscy1hY2Nlc3MtdG9rZW4iOiJUTFMgKyDorr/pl67ku6TniYwiLCJ0bHMtcHJpdmF0ZS1rZXkiOiJUTFMgKyDnp4HpkqUifSwic2VydmVyLXBvcnQiOiLmnI3liqHlmajnq6/lj6MiLHN0YXRpc3RpY3M6e3N0YXRpc3RpYzoi57uf6K6h5L+h5oGvIixzdGF0aXN0aWNzOiLnu5/orqHkv6Hmga8iLCJzdGF0aXN0aWMtY29tbWFuZHMtZW1wdHkiOiLml6Dlj6/nlKjnu5/orqHkv6Hmga8iLGNvbW1hbmRzOiLlkb3ku6QiLCJzZW5kLXBlcmlvZCI6Iue7n+iuoeS/oeaBr+WPkemAgeWRqOacn++8iOenku+8iSIsInNlbmQtcGVyaW9kLXJlcXVpcmVkIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5piv5b+F6ZyA55qEIiwic2VuZC1wZXJpb2QtbWluIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5LiN6IO95bCP5LqONjAiLCJzZW5kLXBlcmlvZC1wYXR0ZXJuIjoi57uf6K6h5L+h5oGv5Y+R6YCB5ZGo5pyf5peg5pWIIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u77yI56eS77yJIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLXJlcXVpcmVkIjoi5qOA5p+l6L+e5o6l5Zmo6YWN572u5piv5b+F6ZyA55qEIiwiY2hlY2stY29ubmVjdG9ycy1jb25maWd1cmF0aW9uLW1pbiI6IuajgOafpei/nuaOpeWZqOmFjee9ruS4jeiDveWwj+S6jjEiLCJjaGVjay1jb25uZWN0b3JzLWNvbmZpZ3VyYXRpb24tcGF0dGVybiI6IuajgOafpei/nuaOpeWZqOmFjee9ruaXoOaViCIsYWRkOiLmt7vliqDlkb3ku6QiLHRpbWVvdXQ6Iui2heaXtuaXtumXtCIsInRpbWVvdXQtbXMiOiLotoXml7bml7bpl7TvvIjmr6vnp5LvvIkiLCJ0aW1lb3V0LXJlcXVpcmVkIjoi6LaF5pe25pe26Ze05piv5b+F6ZyA55qEIiwidGltZW91dC1taW4iOiLotoXml7bml7bpl7TkuI3og73lsI/kuo4xIiwidGltZW91dC1wYXR0ZXJuIjoi6LaF5pe25pe26Ze05peg5pWIIiwiYXR0cmlidXRlLW5hbWUiOiLlsZ7mgKflkI3np7AiLCJhdHRyaWJ1dGUtbmFtZS1yZXF1aXJlZCI6IuWxnuaAp+WQjeensOaYr+W/hemcgOeahCIsY29tbWFuZDoi5ZG95LukIiwiY29tbWFuZC1yZXF1aXJlZCI6IuWRveS7pOaYr+W/hemcgOeahCIsImNvbW1hbmQtcGF0dGVybiI6IuWRveS7pOaXoOaViCIscmVtb3ZlOiLliKDpmaTlkb3ku6QifSxzdG9yYWdlOiLlrZjlgqgiLCJzdG9yYWdlLW1heC1maWxlLXJlY29yZHMiOiLmlofku7bkuK3nmoTmnIDlpKforrDlvZXmlbAiLCJzdG9yYWdlLW1heC1maWxlcyI6IuacgOWkp+aWh+S7tuaVsCIsInN0b3JhZ2UtbWF4LWZpbGVzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJzdG9yYWdlLW1heC1maWxlcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcmVxdWlyZWQiOiLmlbDlrZfmmK/lv4XpnIDnmoTjgIIiLCJzdG9yYWdlLW1heC1yZWNvcmRzIjoi5a2Y5YKo5Lit55qE5pyA5aSn6K6w5b2V5pWwIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1wYXR0ZXJuIjoi5pWw5a2X5peg5pWI44CCIiwic3RvcmFnZS1tYXgtcmVjb3Jkcy1yZXF1aXJlZCI6IuacgOWkp+iusOW9lemhueW/heWhq+OAgiIsInN0b3JhZ2UtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LW1pbiI6IuacgOWwj+iusOW9leaVsOS4ujHjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXBhdHRlcm4iOiLmlbDlrZfkuI3lkIjms5XjgIIiLCJzdG9yYWdlLXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi6ZyA6KaB6K+75Y+W6K6w5b2V5pWw44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQiOiLlrZjlgqjkuK3nmoTmnIDlpKfor7vlj5borrDlvZXmlbAiLCJzdG9yYWdlLW1heC1yZWFkLXJlY29yZC1jb3VudC1taW4iOiLmnIDlsI/orrDlvZXmlbDkuLox44CCIiwic3RvcmFnZS1tYXgtcmVhZC1yZWNvcmQtY291bnQtcGF0dGVybiI6IuaVsOWtl+S4jeWQiOazleOAgiIsInN0b3JhZ2UtbWF4LXJlYWQtcmVjb3JkLWNvdW50LXJlcXVpcmVkIjoi5pyA5aSn6K+75Y+W6K6w5b2V5pWw5b+F6ZyA44CCIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoIjoi5pWw5o2u5paH5Lu25aS56Lev5b6EIiwic3RvcmFnZS1kYXRhLWZvbGRlci1wYXRoLXJlcXVpcmVkIjoi6ZyA6KaB5pWw5o2u5paH5Lu25aS56Lev5b6E44CCIiwic3RvcmFnZS1wYWNrLXNpemUiOiLmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhY2stc2l6ZS1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwic3RvcmFnZS1wYWNrLXNpemUtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsInN0b3JhZ2UtcGFjay1zaXplLXJlcXVpcmVkIjoi5pyA5aSn5LqL5Lu25YyF5aSn5bCP5b+F5aGr44CCIiwic3RvcmFnZS1wYXRoIjoi5a2Y5YKo6Lev5b6EIiwic3RvcmFnZS1wYXRoLXJlcXVpcmVkIjoi5a2Y5YKo6Lev5b6E5b+F5aGr44CCIiwic3RvcmFnZS10eXBlIjoi5a2Y5YKo57G75Z6LIiwic3RvcmFnZS10eXBlcyI6eyJmaWxlLXN0b3JhZ2UiOiLmlofku7blrZjlgqgiLCJtZW1vcnktc3RvcmFnZSI6IuWGheWtmOWtmOWCqCIsc3FsaXRlOiJTUUxJVEUifSx0aGluZ3Nib2FyZDoiVGhpbmdzQm9hcmQiLGdlbmVyYWw6IuW4uOinhCIsInRoaW5nc2JvYXJkLWhvc3QiOiJUaGluZ3NCb2FyZOS4u+acuiIsInRoaW5nc2JvYXJkLWhvc3QtcmVxdWlyZWQiOiLkuLvmnLrlv4XloavjgIIiLCJ0aGluZ3Nib2FyZC1wb3J0IjoiVGhpbmdzQm9hcmTnq6/lj6MiLCJ0aGluZ3Nib2FyZC1wb3J0LW1heCI6IuacgOWkp+err+WPo+WPt+S4ujY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/nq6/lj6Plj7fkuLox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi56uv5Y+j5peg5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6Iuerr+WPo+W/heWhq+OAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6L+e5o6l5ZmoIHt7dHlwZU5hbWV9fSDphY3nva4iLCJ0bHMtcGF0aC1jYS1jZXJ0aWZpY2F0ZSI6Iue9keWFs+S4ikNB6K+B5Lmm55qE6Lev5b6EIiwidGxzLXBhdGgtY2xpZW50LWNlcnRpZmljYXRlIjoi572R5YWz5LiK5a6i5oi356uv6K+B5Lmm55qE6Lev5b6EIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzIjoi5raI5oGvVFRM5qOA5p+l5bCP5pe25pWwIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLXJlcXVpcmVkIjoi6ZyA6KaB5o+Q5L6b5raI5oGvVFRM5qOA5p+l5bCP5pe25pWw44CCIiwibWVzc2FnZXMtdHRsLWNoZWNrLWluLWhvdXJzLW1pbiI6IuacgOWwj+WAvOS4ujHjgIIiLCJtZXNzYWdlcy10dGwtY2hlY2staW4taG91cnMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1lc3NhZ2VzLXR0bC1pbi1kYXlzIjoi5raI5oGvVFRM5aSp5pWwIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcmVxdWlyZWQiOiLpnIDopoHmj5Dkvpvmtojmga9UVEzlpKnmlbDjgIIiLCJtZXNzYWdlcy10dGwtaW4tZGF5cy1taW4iOiLmnIDlsI/lgLzkuLox44CCIiwibWVzc2FnZXMtdHRsLWluLWRheXMtcGF0dGVybiI6IuaVsOWtl+aXoOaViOOAgiIsIm1xdHQtcW9zIjoiUW9TIiwibXF0dC1xb3MtcmVxdWlyZWQiOiLpnIDopoHmj5DkvptRb1MiLCJtcXR0LXFvcy1yYW5nZSI6IlFvU+WAvOeahOiMg+WbtOaYr+S7jjDliLAxIiwidGxzLXBhdGgtcHJpdmF0ZS1rZXkiOiLnvZHlhbPkuIrnp4HpkqXnmoTot6/lvoQiLCJ0b2dnbGUtZnVsbHNjcmVlbiI6IuWIh+aNouWFqOWxjyIsInRyYW5zZm9ybWVyLWpzb24tY29uZmlnIjoi6YWN572uSlNPTioiLCJ1cGRhdGUtY29uZmlnIjoi5re75YqgL+abtOaWsOmFjee9rkpTT04iLGhpbnRzOnsicmVtb3RlLWNvbmZpZ3VyYXRpb24iOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvphY3nva7lkoznrqHnkIYiLCJyZW1vdGUtc2hlbGwiOiLpgJrov4fov5znqItTaGVsbOWwj+mDqOS7tuWQr+eUqOWvuee9keWFs+aTjeS9nOezu+e7n+eahOi/nOeoi+aOp+WItiIsaG9zdDoiVGhpbmdzQm9hcmQg5Li75py65ZCN5oiWSVDlnLDlnYAiLHBvcnQ6IlRoaW5nc0JvYXJkIE1RVFTmnI3liqHnq6/lj6MiLHRva2VuOiJUaGluZ3NCb2FyZCDnvZHlhbPorr/pl67ku6TniYwiLCJjbGllbnQtaWQiOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU5a6i5oi356uvSUQiLHVzZXJuYW1lOiJUaGluZ3NCb2FyZCDnvZHlhbNNUVRU55So5oi35ZCNIixwYXNzd29yZDoiVGhpbmdzQm9hcmQg572R5YWzTVFUVOWvhueggSIsImNhLWNlcnQiOiJDQeivgeS5puaWh+S7tueahOi3r+W+hCIsImRhdGUtZm9ybSI6IuaXpeW/l+a2iOaBr+S4reeahOaXpeacn+agvOW8jyIsImRhdGEtZm9sZGVyIjoi5YyF5ZCr5pWw5o2u55qE5paH5Lu25aS555qE6Lev5b6E77yI55u45a+55oiW57ud5a+56Lev5b6E77yJIiwibG9nLWZvcm1hdCI6IuaXpeW/l+a2iOaBr+agvOW8jyIsInJlbW90ZS1sb2ciOiLlkK/nlKjlr7nnvZHlhbPnmoTov5znqIvml6Xlv5forrDlvZXlkozml6Xlv5for7vlj5YiLCJiYWNrdXAtY291bnQiOiLlpoLmnpzlpIfku73orqHmlbDlpKfkuo4w77yM5YiZ5Zyo5omn6KGM6L2u5o2i5pe277yM5pyA5aSa5L+d55WZ5aSH5Lu96K6h5pWw5Liq5paH5Lu2LeacgOaXp+eahOaWh+S7tuWwhuiiq+WIoOmZpCIsc3RvcmFnZToi5o+Q5L6b5bCG5pWw5o2u5Y+R6YCB5Yiw5bmz5Y+w5LmL5YmN5L+d5a2Y5Lyg5YWl5pWw5o2u55qE6YWN572uIiwibWF4LWZpbGUtY291bnQiOiLlsIbliJvlu7rnmoTmlofku7bnmoTmnIDlpKfmlbDph48iLCJtYXgtcmVhZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMiOiLkuIDkuKrmlofku7bkuK3lrZjlgqjnmoTmnIDlpKforrDlvZXmlbAiLCJyZWFkLXJlY29yZC1jb3VudCI6IuS7juWtmOWCqOS4reiOt+WPlueahOa2iOaBr+iuoeaVsOW5tuWPkemAgeWIsFRoaW5nc0JvYXJkIiwibWF4LXJlY29yZHMtY291bnQiOiLlnKjlsIbmlbDmja7lj5HpgIHliLBUaGluZ3NCb2FyZOS5i+WJje+8jOWtmOWCqOS4reeahOacgOWkp+aVsOaNruiuoeaVsCIsInR0bC1jaGVjay1ob3VyIjoi572R5YWz5aSa5LmF5qOA5p+l5LiA5qyh5pWw5o2u5piv5ZCm6L+H5pe2IiwidHRsLW1lc3NhZ2VzLWRheSI6IuWtmOWCqOWwhuS/neWtmOaVsOaNrueahOacgOWkp+WkqeaVsCIsY29tbWFuZHM6IueUqOS6juaUtumbhumZhOWKoOe7n+iuoeS/oeaBr+eahOWRveS7pCIsYXR0cmlidXRlOiLnu5/orqHpgaXmtYvplK4iLHRpbWVvdXQ6IuWRveS7pOaJp+ihjOeahOi2heaXtuaXtumXtCIsY29tbWFuZDoi5ZG95Luk5omn6KGM55qE57uT5p6c77yM5bCG55So5L2c6YGl5rWL55qE5YC8IiwiY2hlY2stZGV2aWNlLWFjdGl2aXR5Ijoi5ZCv55So55uR6KeG5q+P5Liq6L+e5o6l6K6+5aSH55qE5rS75YqoIiwiaW5hY3Rpdml0eS10aW1lb3V0Ijoi5Zyo5q2k5pe26Ze05ZCO77yM572R5YWz5bCG5pat5byA6K6+5aSH55qE6L+e5o6lIiwiaW5hY3Rpdml0eS1wZXJpb2QiOiLorr7lpIfmtLvliqjmo4Dmn6XnmoTlkajmnJ8iLCJtaW5pbWFsLXBhY2stZGVsYXkiOiLlj5HpgIHmtojmga/ljIXkuYvpl7TnmoTlu7bov5/vvIjlh4/lsI/mraTorr7nva7kvJrlr7zoh7Tlop7liqBDUFXkvb/nlKjnjofvvIkiLHFvczoiTVFUVOa2iOaBr+S8oOmAkueahOacjeWKoei0qOmHj++8iDAt6Iez5aSa5LiA5qyh77yMMS3oh7PlsJHkuIDmrKHvvIkiLCJzZXJ2ZXItcG9ydCI6IkdSUEPmnI3liqHlmajkvqblkKzkvKDlhaXov57mjqXnmoTnvZHnu5znq6/lj6MiLCJncnBjLWtlZXAtYWxpdmUtdGltZW91dCI6IuWcqOiAg+iZkei/nuaOpeatu+S6oeS5i+WJje+8jOacjeWKoeWZqOetieW+hWtlZXBhbGl2ZSBwaW5n5ZON5bqU55qE5pyA6ZW/5pe26Ze0IiwiZ3JwYy1rZWVwLWFsaXZlIjoi5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25Lik5Liq6L+e57uta2VlcGFsaXZlIHBpbmfmtojmga/kuYvpl7TnmoTmjIHnu63ml7bpl7QiLCJncnBjLW1pbi10aW1lLWJldHdlZW4tcGluZ3MiOiLmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsImdycGMtbWF4LXBpbmdzLXdpdGhvdXQtZGF0YSI6IuWcqOayoeacieaOpeaUtuWIsOS7u+S9leaVsOaNruS5i+WJje+8jOacjeWKoeWZqOWPr+S7peWPkemAgeeahGtlZXBhbGl2ZSBwaW5n5raI5oGv55qE5pyA5aSn5pWw6YeP77yM54S25ZCO5bCG6L+e5o6l6KeG5Li65q275LqhIiwiZ3JwYy1taW4tcGluZy1pbnRlcnZhbC13aXRob3V0LWRhdGEiOiLlnKjmsqHmnInlj5HpgIHmiJbmjqXmlLbmlbDmja7ml7bvvIzmnI3liqHlmajlnKjlj5HpgIFrZWVwYWxpdmUgcGluZ+a2iOaBr+S5i+mXtOW6lOetieW+heeahOacgOWwj+aXtumXtOmHjyIsInBlcm1pdC13aXRob3V0LWNhbGxzIjoi5YWB6K645pyN5Yqh5Zmo5Zyo5rKh5pyJ5rS75YqoUlBD6LCD55So5pe25L+d5oyBR1JQQ+i/nuaOpea0u+WKqCJ9LCJkb2NrZXItbGFiZWwiOiLkvb/nlKjku6XkuIvmjIfku6TlnKggRG9ja2VyIGNvbXBvc2Ug5Lit6L+Q6KGMIElvVCDnvZHlhbPvvIzlubbkuLrpgInlrprnmoTorr7lpIfmj5Dkvpvlh63mja4iLCJpbnN0YWxsLWRvY2tlci1jb21wb3NlIjoi5L2/55So5Lul5LiL6K+05piO5LiL6L2944CB5a6J6KOF5ZKM6K6+572uIERvY2tlciBDb21wb3NlIiwiZG93bmxvYWQtY29uZmlndXJhdGlvbi1maWxlIjoi5LiL6L296YWN572u5paH5Lu2IiwiZG93bmxvYWQtZG9ja2VyLWNvbXBvc2UiOiLkuIvovb3mgqjnmoTnvZHlhbPnmoQgZG9ja2VyLWNvbXBvc2UueW1sIOaWh+S7tiIsImxhdW5jaC1nYXRld2F5Ijoi5ZCv5Yqo572R5YWzIiwibGF1bmNoLWRvY2tlci1jb21wb3NlIjoi5Zyo5YyF5ZCrIGRvY2tlci1jb21wb3NlLnltbCDmlofku7bnmoTmlofku7blpLnkuK3vvIzkvb/nlKjku6XkuIvlkb3ku6TlnKjnu4jnq6/kuK3lkK/liqjnvZHlhbMifSxKbz17ImFkZC1lbnRyeSI6IuWinuWKoOmFjee9riIsImNvbm5lY3Rvci1hZGQiOiLlop7liqDmlrDpgKPmjqXlmagiLCJjb25uZWN0b3ItZW5hYmxlZCI6IuWVn+eUqOmAo+aOpeWZqCIsImNvbm5lY3Rvci1uYW1lIjoi6YCj5o6l5Zmo5ZCN56ixIiwiY29ubmVjdG9yLW5hbWUtcmVxdWlyZWQiOiLpnIDopoHpgKPmjqXlmajlkI3nqLHjgIIiLCJjb25uZWN0b3ItdHlwZSI6IumAo+aOpeWZqOmhnuWeiyIsImNvbm5lY3Rvci10eXBlLXJlcXVpcmVkIjoi6ZyA6KaB6YCj5o6l5Zmo6aGe5Z6L44CCIixjb25uZWN0b3JzOiLpgKPmjqXlmajphY3nva4iLCJjcmVhdGUtbmV3LWdhdGV3YXkiOiLlu7rnq4vmlrDplpjpgZMiLCJjcmVhdGUtbmV3LWdhdGV3YXktdGV4dCI6IuaCqOeiuuWumuimgeW7uueri+S4gOWAi+WQjeeoseeCuu+8mid7e2dhdGV3YXlOYW1lfX0n55qE5paw6ZaY6YGT5ZeO77yfIixkZWxldGU6IuWIqumZpOmFjee9riIsImRvd25sb2FkLXRpcCI6IuS4i+i8iemFjee9ruaWh+S7tiIsZ2F0ZXdheToi6ZaY6YGTIiwiZ2F0ZXdheS1leGlzdHMiOiLlkIzlkI3oqK3lgpnlt7LlrZjlnKjjgIIiLCJnYXRld2F5LW5hbWUiOiLplpjpgZPlkI3nqLEiLCJnYXRld2F5LW5hbWUtcmVxdWlyZWQiOiLpnIDopoHplpjpgZPlkI3nqLHjgIIiLCJnYXRld2F5LXNhdmVkIjoi6ZaY6YGT6YWN572u5bey5oiQ5Yqf5L+d5a2Y44CCIiwianNvbi1wYXJzZSI6IueEoeaViOeahEpTT04iLCJqc29uLXJlcXVpcmVkIjoi5qyE5L2N5LiN6IO954K656m644CCIiwibm8tY29ubmVjdG9ycyI6IueEoemAo+aOpeWZqCIsIm5vLWRhdGEiOiLnhKHphY3nva4iLCJuby1nYXRld2F5LWZvdW5kIjoi5pyq5om+5Yiw6ZaY6YGT44CCIiwibm8tZ2F0ZXdheS1tYXRjaGluZyI6IiDmnKrmib7liLAne3tpdGVtfX0n44CCIiwicGF0aC1sb2dzIjoi5pel6KqM5paH5Lu255qE6Lev5b6RIiwicGF0aC1sb2dzLXJlcXVpcmVkIjoi6ZyA6KaB6Lev5b6R44CCIixyZW1vdGU6Iuenu+mZpOmFjee9riIsInJlbW90ZS1sb2dnaW5nLWxldmVsIjoi5pel6KqM6KiY6YyE57Sa5YilIiwicmVtb3ZlLWVudHJ5Ijoi56e76Zmk6YWN572uIiwic2F2ZS10aXAiOiLkv53lrZjphY3nva7mlofku7YiLCJzZWN1cml0eS10eXBlIjoi5a6J5YWo6aGe5Z6LIiwic2VjdXJpdHktdHlwZXMiOnsiYWNjZXNzLXRva2VuIjoi6Kiq5ZWPVG9rZW4iLHRsczoiVExTIn0sc3RvcmFnZToi6LKv5a2YIiwic3RvcmFnZS1tYXgtZmlsZS1yZWNvcmRzIjoi5paH5Lu25Lit55qE5pyA5aSn57SA6YyEIiwic3RvcmFnZS1tYXgtZmlsZXMiOiLmnIDlpKfmlofku7bmlbgiLCJzdG9yYWdlLW1heC1maWxlcy1taW4iOiLmnIDlsI/mlbjph4/ngrox44CCIiwic3RvcmFnZS1tYXgtZmlsZXMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LWZpbGVzLXJlcXVpcmVkIjoi6ZyA6KaB6Jmf56K844CCIiwic3RvcmFnZS1tYXgtcmVjb3JkcyI6IuWtmOWEsuS4reeahOacgOWkp+e0gOmMhCIsInN0b3JhZ2UtbWF4LXJlY29yZHMtbWluIjoi5pyA5bCP57SA6YyE5pW454K6MeOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcGF0dGVybiI6IuiZn+eivOeEoeaViOOAgiIsInN0b3JhZ2UtbWF4LXJlY29yZHMtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfntIDpjITmlbgiLCJzdG9yYWdlLXBhY2stc2l6ZSI6IuacgOWkp+S6i+S7tuWMheWkp+WwjyIsInN0b3JhZ2UtcGFjay1zaXplLW1pbiI6IuacgOWwj+aVuOmHj+eCujHjgIIiLCJzdG9yYWdlLXBhY2stc2l6ZS1wYXR0ZXJuIjoi6Jmf56K854Sh5pWI77yOIiwic3RvcmFnZS1wYWNrLXNpemUtcmVxdWlyZWQiOiLpnIDopoHmnIDlpKfkuovku7bljIXlpKflsI8iLCJzdG9yYWdlLXBhdGgiOiLlrZjlhLLot6/lvpEiLCJzdG9yYWdlLXBhdGgtcmVxdWlyZWQiOiLpnIDopoHlrZjlhLLot6/lvpHjgIIiLCJzdG9yYWdlLXR5cGUiOiLlrZjlhLLpoZ7lnosiLCJzdG9yYWdlLXR5cGVzIjp7ImZpbGUtc3RvcmFnZSI6IuaWh+S7tuWtmOWEsiIsIm1lbW9yeS1zdG9yYWdlIjoi6KiY5oa26auU5a2Y5YSyIn0sdGhpbmdzYm9hcmQ6IlRoaW5nc0JvYXJkIiwidGhpbmdzYm9hcmQtaG9zdCI6IlRoaW5nc0JvYXJk5Li75qmfIiwidGhpbmdzYm9hcmQtaG9zdC1yZXF1aXJlZCI6IumcgOimgeS4u+apn+OAgiIsInRoaW5nc2JvYXJkLXBvcnQiOiJUaGluZ3NCb2FyZOmAo+aOpeWfoCIsInRoaW5nc2JvYXJkLXBvcnQtbWF4Ijoi5pyA5aSn5Z+g6Jmf54K6IDY1NTM144CCIiwidGhpbmdzYm9hcmQtcG9ydC1taW4iOiLmnIDlsI/ln6DomZ/ngrox44CCIiwidGhpbmdzYm9hcmQtcG9ydC1wYXR0ZXJuIjoi6YCj5o6l5Z+g54Sh5pWI44CCIiwidGhpbmdzYm9hcmQtcG9ydC1yZXF1aXJlZCI6IumcgOimgemAo+aOpeWfoOOAgiIsdGlkeToi5pW055CGIiwidGlkeS10aXAiOiLmlbTnkIbphY3nva5KU09OIiwidGl0bGUtY29ubmVjdG9ycy1qc29uIjoi6YCj5o6l5Zmoe3t0eXBlTmFtZX196YWN572uIiwidGxzLXBhdGgtY2EtY2VydGlmaWNhdGUiOiLplpjpgZPkuIpDQeitieabuOeahOi3r+W+kSIsInRscy1wYXRoLWNsaWVudC1jZXJ0aWZpY2F0ZSI6IumWmOmBk+S4iueUqOaItuerr+aGkeaTmueahOi3r+W+kSIsInRscy1wYXRoLXByaXZhdGUta2V5Ijoi6ZaY6YGT5LiK55qE56eB6ZGw6Lev5b6RIiwidG9nZ2xlLWZ1bGxzY3JlZW4iOiLliIfmj5vlhajonqLluZUiLCJ0cmFuc2Zvcm1lci1qc29uLWNvbmZpZyI6IumFjee9rkpTT04qIiwidXBkYXRlLWNvbmZpZyI6IuWinuWKoC/mm7TmlrDphY3nva5KU09OIn07Y29uc3QgWG89W2NhLHBhLEZhLERhLEFhLE5hLFBhLGVvLEVvLGlvLGFvLG9vLHFvLHRvLEdvLG5vXTtjbGFzcyBab3tjb25zdHJ1Y3RvcihlKXt0aGlzLnRyYW5zbGF0ZT1lLGZ1bmN0aW9uKGUpe2Uuc2V0VHJhbnNsYXRpb24oImVuX1VTIixPbywhMCksZS5zZXRUcmFuc2xhdGlvbigiYXJfQUUiLFJvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJjYV9FUyIsVm8sITApLGUuc2V0VHJhbnNsYXRpb24oImNzX0NaIixCbywhMCksZS5zZXRUcmFuc2xhdGlvbigiZGFfREsiLFVvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJlc19FUyIsX28sITApLGUuc2V0VHJhbnNsYXRpb24oImtvX0tSIixIbywhMCksZS5zZXRUcmFuc2xhdGlvbigibHRfTFQiLHpvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJubF9CRSIsV28sITApLGUuc2V0VHJhbnNsYXRpb24oInBsX1BMIixqbywhMCksZS5zZXRUcmFuc2xhdGlvbigicHRfQlIiLEtvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJzbF9TSSIsJG8sITApLGUuc2V0VHJhbnNsYXRpb24oInRyX1RSIixZbywhMCksZS5zZXRUcmFuc2xhdGlvbigiemhfQ04iLFFvLCEwKSxlLnNldFRyYW5zbGF0aW9uKCJ6aF9UVyIsSm8sITApfShlKX1zdGF0aWN7dGhpcy7JtWZhYz10Lsm1ybVuZ0RlY2xhcmVGYWN0b3J5KHttaW5WZXJzaW9uOiIxMi4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlcHM6W3t0b2tlbjpZLlRyYW5zbGF0ZVNlcnZpY2V9XSx0YXJnZXQ6dC7Jtcm1RmFjdG9yeVRhcmdldC5OZ01vZHVsZX0pfXN0YXRpY3t0aGlzLsm1bW9kPXQuybXJtW5nRGVjbGFyZU5nTW9kdWxlKHttaW5WZXJzaW9uOiIxNC4wLjAiLHZlcnNpb246IjE4LjIuNiIsbmdJbXBvcnQ6dCx0eXBlOlpvLGRlY2xhcmF0aW9uczpbY2EscGEsRmEsRGEsQWEsTmEsUGEsZW8sRW8saW8sYW8sb28scW8sdG8sR28sbm9dLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOltjYSxwYSxGYSxEYSxBYSxOYSxQYSxlbyxFbyxpbyxhbyxvbyxxbyx0byxHbyxub119KX1zdGF0aWN7dGhpcy7JtWluaj10Lsm1ybVuZ0RlY2xhcmVJbmplY3Rvcih7bWluVmVyc2lvbjoiMTIuMC4wIix2ZXJzaW9uOiIxOC4yLjYiLG5nSW1wb3J0OnQsdHlwZTpabyxwcm92aWRlcnM6W3ZhXSxpbXBvcnRzOltILEQsUSxNYSxFYSxxYSxJYSxMbyxrbyxGbyxwbyxBbyxObyxnbyxEbyxQb119KX19ZSgiR2F0ZXdheUV4dGVuc2lvbk1vZHVsZSIsWm8pLHQuybXJtW5nRGVjbGFyZUNsYXNzTWV0YWRhdGEoe21pblZlcnNpb246IjEyLjAuMCIsdmVyc2lvbjoiMTguMi42IixuZ0ltcG9ydDp0LHR5cGU6Wm8sZGVjb3JhdG9yczpbe3R5cGU6dSxhcmdzOlt7ZGVjbGFyYXRpb25zOlhvLGltcG9ydHM6W0gsRCxRLE1hLEVhLHFhLHZhLElhLExvLGtvLEZvLHBvLEFvLE5vLGdvLFRhLERvLFBvLGthLENhLFNhXSxleHBvcnRzOlhvLHByb3ZpZGVyczpbdmFdfV19XSxjdG9yUGFyYW1ldGVyczooKT0+W3t0eXBlOlkuVHJhbnNsYXRlU2VydmljZX1dfSl9fX0pKTsvLyMgc291cmNlTWFwcGluZ1VSTD1nYXRld2F5LW1hbmFnZW1lbnQtZXh0ZW5zaW9uLmpzLm1hcAo=", - "public": false - }, - { - "link": "/api/images/system/service_rpc_system_widget_image.png", - "title": "\"Service RPC\" system widget image", - "type": "IMAGE", - "subType": "IMAGE", - "fileName": "service_rpc_system_widget_image.png", - "publicResourceKey": "F6Gh0zrHeMRUb0N90qucChij6ezEz7dA", - "mediaType": "image/png", - "data": "iVBORw0KGgoAAAANSUhEUgAAAMgAAACgCAYAAABJ/yOpAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAA29SURBVHgB7d17bFvVHQfwn5O0zZsk3ZYHoDbptNIg0qRBtGunttrWdl1hMLUIUcS60qEWJvESZRIC9cUf6xIN8QdbEI9SmKohdVA0aaIpYwPRQkUfAdRkTDRJBTTJOmY375ftne+Jr+s48fENvq3t+PuprOtr33vdnHu/95xzH7ZLlLa2trkul2ufelqtHgVClNoO+f3+h8vLy9tdgXCcLlDy8vIkLS1NiFKVz+eT3t5ecbvdHhWSmgwVjqeLiop0OIhSHSqI/Px8BKXg4sWL+1Bd3JaTkyNEdAlColTr9hSbVUTjBTJRwGQQGTAgRAYMCJFBhp2Jhke8MuL1id8vpKS5XJI1K13UEcAJ7/lUIQ0Ne8XrY2EBimhGerrMnJGc++Ko/2uEY3iU4QiFEPQPjU4oE7w+oF5nOC5BGQ2Pqm1oxCfJKGpAUHPQRFjxo2Fl4/X6uSOJYMTrlWQUNSBc4ZH5wwrHz8KKKFmLxlYfJNF43G4pKCwUMuvo6JDS0lKJhRPLiOT8BY/U7X9LevqGJB5233+rlH3bfOmhIwF5/S8HpaCgQDKzsmTp0mVyub3zztvy03W3SPOZM1J5/fWSmZkpyWBwcECOHT2Ki0OlvLxcFlRer171qw2wTGLV0tKsllkRLAu32ol0dpzX4+goFxR8sx1KYWGBHDt2VK/XtrZWGRwYCPy/Y3fvrv06JPHySP1r8ue9W43TxByQluYzUrNokV45eA7v/P1tPURBYqNoaW7WKwwbBfZI626+RU6dPKGn8Xg8wZX6wx/9OBg2zIsVjOkx7/oNt+t5BgcH1bhHBtSK+uCDo9LZ2aHCcrMkg8zMLP03onwwBGx8KiNy+vSpwDSZ+m+sWVSrn58+dTK44zmlnqP2LK+oCC5Pt11UAk6dPKk3XswHmA+fgY0a0zWfeV9Ph2msz+44f15/LsoStQTWhTUP3itUtTSWh8/EetSfof5vpWVl3zhwoeIZDvisvTPqNDEfexsYGAw+x0aNDRorFAWNwLj/51avV8oiFSIU7CJV4B1qw0dBL132A70RWCsM5qoQYX49r1oxS5ctkwULKvUK6uzs1NNir4aVh+dYdjLrVOWlNzq1gX5fhQB/F4bYOVg7GuxgUB6YTm/Ara26XFEmeA1DzG8FBzwetx6GThdeu+O1sXVTq9cNyhmfg8BgvZQEajYrtItqa/XDiXAki5gDUlhUqFcgYIVi4x3b4wyOm07v7aLAitR7yPKKSd8Pb0phhUaadjpAWLBBrt+wQW/8oeWalZWpawOU2WRi2YjHPvdGXQuFLg9ljTJPJTE3sVBo2NMjHNgbIQhoSqE5hJWLvVGWqhECLYHgUAJ7u/KQIeZF57ut9ey4ZkRpWakeYs+KzylxoM0eT6F7epQZ/mbUmtjo8bdZQ7yHPovV1AktV+ws8B6GlWjyqPdRs1hNLNQouoOtyg7lH17egM8NXScY4v+BZeJzrNo5fGeXSlzt7e3+OXPmRJygd2BEaHIzM9LUGeL04Lh1UjVRoOMe6x4fzWEEzIlmVW7WjHHjNXfskng7/dqOiO+dO3cuOQ/zkj1ONIdK41xbb7t9pXxvTrH09A9K/cuH9dCOXffdKg0H35WOGA8EpHxAdCd3YHw73mpmUHzNn1sitZVz9OHgn61YqMaL1ZGvi3KLeo7hX99tko1rF+v2YU/foB7HPCtvnC9l33HmqxVS/mpe9JFeeOF5qa//nX68+OLzETu+dGXhMCwez+/YpI6Eu+RE8zn5/fY75B8f/UtuVMGZP6dE1zAnzrTJXesWS6k66ffopjX6faekfA2CDvCWX90rL6qQoKOK56l0GDOR5WVnyoG/HdfPH/3lGtVcckvZtwrkrp8u0a/51T80uf59rkvXIPk5mXoejJ//jzPnWBwJSOPht/QwNzdX5s37rhSXlOjXVq/5iSQDKySxnHGeir7eXjl69H1Zps4D5agyw/hhVV4ov2QpsytCrY9d99+qaoTPdDC6VQhOtLSroFzU7+lhCLx//r8e2agCNL+8RJzgSBPr0Buvq1CUqpWdp5ope/UKz81Nrm9JQUiuRDi61MnOnTuf1OWDcMDOHU9KdXWNdHV1BXc2JLpW2PGHN3UzC/0Q1AyP1L0mHzW3y5v/bNK1By4Xgfr9h3WHHB35k+p9zNfhwJl6R2oQrOiFCxfq54dez5Xevl450viWPgteX7dXiotL5JOPm2TV6jV6D1lf91vp7e1XG0mOPruLM+qporHxcOCMtl+HBbUtqq6KefME3y7z6qv7WYuEwOUo4ZekIAAW63IRa6invSCOcaQG6erqlFdf2S8Nf3wWlxXpQODLt/R7aiO4+xeb5NHtv5FPPvlYPlZBQf24c9duqaqqVmHqk1TSevZzXVOgtm1oeFYosTlSgyAQ1l6vuLjY1vSp7O67N+la90+vvCyU2Bw7zItg2AkHOvGtrZ/L2bNjj1SD5uQbbxwc+9sDt7SjaYXxY8feV03VaqHE4UhAVqu+RbhVgdesIfaYaHvjSM1tP1+vryOC3EBHNVWgPIqLS/Xfj2Yn3Hf/rwPl4QqWFyWGuFyLhaM2VVUL9f0c2EiStcmV6NdiJZrwa7GWb95r+9KRyyXatVhxOZO+c9ceWagOa2KY6v2RVLb19hUSTzgLHw2v5o0Ba5CpCa9BYLLDuFcC7kWPdj86r+aluLOzocYTv3qUyCBqDTLEJkNEOCka2sQa9flZXgaZXr9kpLskmUQNyKiXX4YWyajXKzMy0iUz8L2zPj/Ly+Ri/4jMzpspySRqQIoLeOOQXbmZGfpB0wf7IEQGDAiRAQNCZMCAEBkwIEQGDAiRgT4miWtOiGgiHRDTxYpEqSpul7sTJQsGhMiAASEyYECIDBgQIgMGhMiAASEy4M0LNC2Njo6K1+sVn2/sDs/09HTJyMiQtLSp1QkMCE0rCER/f78Ox2RmzZqlHy6XvVt/2cSiaQOhwJemRwoHDA0N6Wn8fnu3RidMQL788ktpDvzeOtFUWTWHnQ3fmtaOqE2sDz/8UB577DH9PD8/Xz82b94sq1atEic988wzelhXVyfd3d3S0tIiixcvFiI78GOsVn8DPy/x6aef6h9Fqq2tDY7PmDFDVqwY+zZH9FHwQL/ExFYNgr37gw8+KE888YTcdNNNsnXrVjl+/LhcLkeOHJE777xTiOzCxm5BEwrhuO666/R4UVGR3HDDDeJ2u8fNMzw8HHW5tptY2JsvWbJEHnroIT2O0ACaRdiYly9fLtu3bw9O/9JLL+nXrNdRK2AejFvz7tmzZ9w8gBpr9+7d+jmmJYoG4QhtWiEQ11xzjf5ZCUDNERqY0PmisR2Qr776Sm/Y2PABgcE4woHgNDQ06LCgqYQwPPXUU7rWOXDggG4uoVYAKxyA6bDcUFgW5gPMSzRVCEP4b9XMnDlzQkDs9FdsH+YNbfKgn4CENjY2Sk9Pj37NCgBCgn4K3j948KD+TyA8GA8Nh8lVV12lh5iHKJrwQ7boc6D5dO211wZfwzj6IeiTRJpvMrZrkPfee0+ampokLy8vmDwrHJbVq1frB2Dvv2HDBh0cNJUuZ5+FUlv4yT/0QVpbW3VQQse/+OKLcdPh5GHUZcsUWEew0HxC88g6ynT11VfrZhHG8UAtsnHjRv38ueeekwULFui+BeYHq1llt0YhMkFNEHo0Cn0QNLP6Aj8QOzIyomuQ8CYW+ibRTPk8yD333KNrkH379ukm0AMPPKADg5+B3rZtmw5OZWWlPgy8bt06XXugybR+/fpgwNBcq66unlADWTAvll1RUSFEdmRlZQWbTAhHVVVVcPuxxkMDgloH/ZJoov6Ajl2oDcL7DAgLHpO9DlaNMpVlEkWCWmJgYCDqdAgHjnBFuy4L96Q7FhCiRIBDtwiJddIwHJpiqG3sXLTIX5iiaQcBwIEk9DsQFgQFTS880OeIduZ8wvKEaBpCGOx0wqPh1bxEBgwIkQEDQmRg7IN8/fXX4vE4/xvWdo4/E10J2dnZMnv27IjvGwOCIwB2TsdPlXWVJVG8me4+hLg3sXi5CSUyxwKCy0ZwUdhU4QpLokQVc0AQiscff1y2bNnyjQJClMhiDkhubq4OSE1NjRBNN440sRASoumI50GIDBgQIgPHAoIboNjUounGsat5165dK0TTTdybWCtXrhSiRBX3gODuLqJEFbWJdTn6FbjjiygRRLsYN2pAnLgr60osk+hy4GFeIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIgMGhMiAASEyYECIDBgQIoMM05s5OTnS19cnTrtw4YIQJQJs4ybGgGRnZ+sHUapiE4vIgAEhMkBAPD6fT4joEisTCEhTT0+PENElvb29GBxK8/v9mz1Kd3e3sCahVIcMqDiI2+32qGw87MKLbW1tc10u19Pq6W1ClNo86tGEiqO8vLz9/1FmjD4z/YX3AAAAAElFTkSuQmCC", - "public": true - } ] } \ No newline at end of file diff --git a/application/src/main/data/resources/dashboards/gateways_dashboard.json b/application/src/main/data/resources/dashboards/gateways_dashboard.json index 4f65a0bdb6..71bcad3b66 100644 --- a/application/src/main/data/resources/dashboards/gateways_dashboard.json +++ b/application/src/main/data/resources/dashboards/gateways_dashboard.json @@ -18,7 +18,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 60000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -28,7 +31,11 @@ "startTimeMs": 1680624762213, "endTimeMs": 1680711162213 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -40,7 +47,7 @@ "color": "rgba(0, 0, 0, 0.87)", "padding": "4px", "settings": { - "entitiesTitle": "Gateways list", + "entitiesTitle": "Gateway list", "enableSearch": true, "enableSelectColumnDisplay": false, "enableStickyHeader": true, @@ -55,7 +62,7 @@ "defaultSortOrder": "entityName", "useRowStyleFunction": false }, - "title": "Gateways list", + "title": "Gateway list", "dropShadow": true, "enableFullscreen": false, "titleStyle": { @@ -200,7 +207,7 @@ "id": "ae2e5995-505f-a241-5fb2-6cbaf08b1b55" }, { - "name": "Gateway configuration", + "name": "General configuration", "icon": "settings", "useShowWidgetActionFunction": null, "showWidgetActionFunction": "return true;", @@ -231,6 +238,17 @@ "openInSeparateDialog": false, "openInPopover": false, "id": "e27eea56-c57c-0a45-eb1d-f48f19e5356b" + }, + { + "name": "Delete gateway", + "icon": "delete", + "useShowWidgetActionFunction": false, + "showWidgetActionFunction": "return true;", + "type": "custom", + "customFunction": "const { $scope, servicesMap } = widgetContext;\nconst $injector = $scope.$injector;\nconst dialogs = $injector.get(servicesMap.get('dialogs'));\nconst deviceService = $injector.get(servicesMap.get('deviceService'));\n\nopenDeleteDeviceDialog();\n\nfunction openDeleteDeviceDialog() {\n const title = `Are you sure you want to delete the gateway device '${entityName}'?`;\n const content = 'Be careful, after the confirmation, the device and all related data will become unrecoverable!';\n \n dialogs.confirm(title, content, 'Cancel', 'Delete').subscribe(result => {\n if (result) {\n deleteDevice();\n }\n });\n}\n\nfunction deleteDevice() {\n deviceService.deleteDevice(entityId.id).subscribe(() => {\n widgetContext.updateAliases();\n });\n}", + "openInSeparateDialog": false, + "openInPopover": false, + "id": "0ec170eb-de35-cab1-99a1-a922eb42cdf0" } ], "rowClick": [ @@ -306,7 +324,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 60000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -316,7 +337,11 @@ "startTimeMs": 1680685647526, "endTimeMs": 1680772047526 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "AVG", @@ -405,7 +430,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 60000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -415,7 +443,11 @@ "startTimeMs": 1680769601167, "endTimeMs": 1680856001167 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "AVG", @@ -578,7 +610,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 60000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -588,7 +623,11 @@ "startTimeMs": 1683116949383, "endTimeMs": 1683203349383 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "AVG", @@ -938,127 +977,6 @@ "id": "bcd04dbf-c82a-ca13-6e88-a74f32b4348a", "typeFullFqn": "system.gateway_widgets.gateway_logs" }, - "9b88dc51-b186-90ef-5afb-9648e6e2ac9a": { - "type": "timeseries", - "sizeX": 8, - "sizeY": 5, - "config": { - "datasources": [ - { - "type": "entity", - "name": null, - "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", - "filterId": null, - "dataKeys": [], - "alarmFilterConfig": { - "statusList": [ - "ACTIVE" - ] - } - } - ], - "timewindow": { - "hideInterval": false, - "hideLastInterval": false, - "hideQuickInterval": false, - "hideAggregation": false, - "hideAggInterval": false, - "hideTimezone": false, - "selectedTab": 0, - "realtime": { - "realtimeType": 0, - "timewindowMs": 604800000, - "quickInterval": "CURRENT_DAY", - "interval": 300000 - }, - "aggregation": { - "type": "NONE", - "limit": 25000 - }, - "timezone": null - }, - "showTitle": true, - "backgroundColor": "#fff", - "color": "rgba(0, 0, 0, 0.87)", - "padding": "8px", - "settings": { - "stack": false, - "fontSize": 10, - "fontColor": "#545454", - "showTooltip": true, - "tooltipIndividual": false, - "tooltipCumulative": false, - "hideZeros": false, - "grid": { - "verticalLines": true, - "horizontalLines": true, - "outlineWidth": 0, - "color": "#545454", - "backgroundColor": null, - "tickColor": "#DDDDDD" - }, - "xaxis": { - "title": null, - "showLabels": true, - "color": "#545454" - }, - "yaxis": { - "min": null, - "max": null, - "title": null, - "showLabels": true, - "color": "#545454", - "tickSize": null, - "tickDecimals": 0, - "ticksFormatter": "" - }, - "shadowSize": 4, - "smoothLines": true, - "comparisonEnabled": false, - "timeForComparison": "previousInterval", - "comparisonCustomIntervalValue": 7200000, - "xaxisSecond": { - "axisPosition": "top", - "title": null, - "showLabels": true - }, - "customLegendEnabled": false, - "dataKeysListForLabels": [] - }, - "title": "Gateway Custom Statistics", - "dropShadow": true, - "enableFullscreen": true, - "titleStyle": { - "fontSize": "16px", - "fontWeight": 600 - }, - "useDashboardTimewindow": true, - "displayTimewindow": false, - "showTitleIcon": false, - "titleTooltip": "", - "widgetStyle": {}, - "widgetCss": "", - "pageSize": 1024, - "noDataDisplayMessage": "", - "enableDataExport": false, - "showLegend": false, - "legendConfig": { - "direction": "column", - "position": "bottom", - "sortDataKeys": false, - "showMin": false, - "showMax": false, - "showAvg": true, - "showTotal": false, - "showLatest": false - }, - "borderRadius": "4px" - }, - "row": 0, - "col": 0, - "id": "9b88dc51-b186-90ef-5afb-9648e6e2ac9a", - "typeFullFqn": "system.gateway_widgets.gateway_custom_statistics" - }, "2a318e56-5c83-4f82-bf23-df72dd7e3edf": { "type": "rpc", "sizeX": 9.5, @@ -1133,10 +1051,10 @@ "id": "2a318e56-5c83-4f82-bf23-df72dd7e3edf", "typeFullFqn": "system.control_widgets.rpc_remote_shell" }, - "c50e294a-265a-d13c-c772-b56c4df953fe": { + "da01e13f-c108-39fd-2a74-b40da088769a": { "type": "timeseries", "sizeX": 8, - "sizeY": 5, + "sizeY": 6.5, "config": { "datasources": [ { @@ -1146,104 +1064,47 @@ "filterId": null, "dataKeys": [ { - "name": "allBytesSentToDevices", - "type": "timeseries", - "label": "Sent To Devices (bytes)", - "color": "#2196f3", - "settings": {}, - "_hash": 0.6608774125800538, - "aggregationType": null, - "units": null, - "decimals": null, - "funcBody": null, - "usePostProcessing": null, - "postFuncBody": null - }, - { - "name": "allBytesSentToTB", + "name": "SERVICE_LOGS", "type": "timeseries", - "label": "Send To ThingsBoard (bytes)", + "label": "Status", "color": "#4caf50", - "settings": {}, - "_hash": 0.05525630093240763, - "aggregationType": null, - "units": null, - "decimals": null, - "funcBody": null, - "usePostProcessing": null, - "postFuncBody": null - }, - { - "name": "allReсeivedBytesFromTB", - "type": "timeseries", - "label": "Received From ThingsBoard (bytes)", - "color": "#f44336", - "settings": {}, - "_hash": 0.4539040118567914, - "aggregationType": null, - "units": null, - "decimals": null, - "funcBody": null, - "usePostProcessing": null, - "postFuncBody": null - }, - { - "name": "convertedBytesFromDevice", - "type": "timeseries", - "label": "Converted From Devices (bytes)", - "color": "#ffc107", - "settings": {}, - "_hash": 0.36601736007496366, - "aggregationType": null, - "units": null, - "decimals": null, - "funcBody": null, - "usePostProcessing": null, - "postFuncBody": null - }, - { - "name": "eventsProduced", - "type": "timeseries", - "label": "Events Produced", - "color": "#607d8b", - "settings": {}, - "_hash": 0.6227465527701406, - "aggregationType": null, - "units": null, - "decimals": null, - "funcBody": null, - "usePostProcessing": null, - "postFuncBody": null - }, - { - "name": "eventsSent", - "type": "timeseries", - "label": "Events Sent", - "color": "#9c27b0", - "settings": {}, - "_hash": 0.6043328458525739, + "settings": { + "useCellStyleFunction": false, + "useCellContentFunction": true, + "cellContentFunction": "let cssClass;\r\nswitch (value) {\r\n case \"DEBUG\":\r\n cssClass = \"status status-debug\";\r\n break;\r\n case \"WARNING\":\r\n cssClass = \"status status-warning\";\r\n break;\r\n case \"ERROR\":\r\n case \"EXCEPTION\":\r\n cssClass = \"status status-error\";\r\n break;\r\n case \"INFO\":\r\n default:\r\n cssClass = \"status status-info\";\r\n break;\r\n }\r\n \r\n return `${value}`;" + }, + "_hash": 0.6667576563240645, "aggregationType": null, "units": null, "decimals": null, "funcBody": null, - "usePostProcessing": null, - "postFuncBody": null + "usePostProcessing": true, + "postFuncBody": "if (value.includes(\"RPC\")&&!value.includes(\"GRPC\")) {\n let parsedValue = value.match(/\\|(\\w+)\\|/);\n parsedValue = parsedValue ? parsedValue[1] :\n parsedValue;\n return parsedValue || value;\n} else return '';" }, { - "name": "receivedBytesFromDevices", + "name": "SERVICE_LOGS", "type": "timeseries", - "label": "Received From Devices (bytes)", - "color": "#8bc34a", - "settings": {}, - "_hash": 0.7829761270709421, + "label": "Details", + "color": "#2196f3", + "settings": { + "useCellStyleFunction": false, + "useCellContentFunction": true, + "cellContentFunction": "let statusValue = value.match(/\\|(\\w+)\\|/); \r\nstatusValue = statusValue? statusValue[1] : statusValue;\r\nlet cssClass = statusValue === \"EXCEPTION\" ?\r\n \"msg-status-exception\" : 'msg';\r\nlet parsedValue = /\\[(.*)/.exec(value);\r\nparsedValue = parsedValue ? parsedValue[0] : parsedValue;\r\nreturn `${parsedValue || value}`;" + }, + "_hash": 0.6931154680365814, "aggregationType": null, "units": null, "decimals": null, "funcBody": null, - "usePostProcessing": null, - "postFuncBody": null + "usePostProcessing": true, + "postFuncBody": "if (value.includes(\"RPC\")&&!value.includes(\"GRPC\")) {\n return value;\n} else return '';" } - ] + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + } } ], "timewindow": { @@ -1258,173 +1119,15 @@ "realtimeType": 0, "timewindowMs": 604800000, "quickInterval": "CURRENT_DAY", - "interval": 1800000 + "interval": 1000 }, "aggregation": { - "type": "AVG", - "limit": 25000 - }, - "timezone": null + "type": "NONE", + "limit": 200 + } }, "showTitle": true, - "backgroundColor": "#fff", - "color": "rgba(0, 0, 0, 0.87)", - "padding": "8px", - "settings": { - "stack": false, - "fontSize": 10, - "fontColor": "#545454", - "showTooltip": true, - "tooltipIndividual": false, - "tooltipCumulative": false, - "hideZeros": false, - "grid": { - "verticalLines": true, - "horizontalLines": true, - "outlineWidth": 0, - "color": "#545454", - "backgroundColor": null, - "tickColor": "#DDDDDD" - }, - "xaxis": { - "title": null, - "showLabels": true, - "color": "#545454" - }, - "yaxis": { - "min": null, - "max": null, - "title": null, - "showLabels": true, - "color": "#545454", - "tickSize": null, - "tickDecimals": 0, - "ticksFormatter": "" - }, - "shadowSize": 4, - "smoothLines": true, - "comparisonEnabled": false, - "timeForComparison": "previousInterval", - "comparisonCustomIntervalValue": 7200000, - "xaxisSecond": { - "axisPosition": "top", - "title": null, - "showLabels": true - }, - "customLegendEnabled": false, - "dataKeysListForLabels": [] - }, - "title": "Gateway General Chart Statistics", - "dropShadow": true, - "enableFullscreen": true, - "titleStyle": { - "fontSize": "16px", - "fontWeight": 600 - }, - "useDashboardTimewindow": true, - "displayTimewindow": false, - "showTitleIcon": false, - "titleTooltip": "", - "widgetStyle": {}, - "widgetCss": "", - "pageSize": 1024, - "noDataDisplayMessage": "", - "enableDataExport": false, - "showLegend": false, - "legendConfig": { - "direction": "row", - "position": "bottom", - "sortDataKeys": false, - "showMin": false, - "showMax": false, - "showAvg": false, - "showTotal": false, - "showLatest": false - }, - "borderRadius": "4px" - }, - "row": 0, - "col": 0, - "id": "c50e294a-265a-d13c-c772-b56c4df953fe", - "typeFullFqn": "system.gateway_widgets.gateway_general_chart_statistics" - }, - "da01e13f-c108-39fd-2a74-b40da088769a": { - "type": "timeseries", - "sizeX": 8, - "sizeY": 6.5, - "config": { - "datasources": [ - { - "type": "entity", - "name": null, - "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", - "filterId": null, - "dataKeys": [ - { - "name": "SERVICE_LOGS", - "type": "timeseries", - "label": "Status", - "color": "#4caf50", - "settings": { - "useCellStyleFunction": false, - "useCellContentFunction": true, - "cellContentFunction": "let cssClass;\r\nswitch (value) {\r\n case \"DEBUG\":\r\n cssClass = \"status status-debug\";\r\n break;\r\n case \"WARNING\":\r\n cssClass = \"status status-warning\";\r\n break;\r\n case \"ERROR\":\r\n case \"EXCEPTION\":\r\n cssClass = \"status status-error\";\r\n break;\r\n case \"INFO\":\r\n default:\r\n cssClass = \"status status-info\";\r\n break;\r\n }\r\n \r\n return `${value}`;" - }, - "_hash": 0.6667576563240645, - "aggregationType": null, - "units": null, - "decimals": null, - "funcBody": null, - "usePostProcessing": true, - "postFuncBody": "if (value.includes(\"RPC\")&&!value.includes(\"GRPC\")) {\n let parsedValue = value.match(/\\|(\\w+)\\|/);\n parsedValue = parsedValue ? parsedValue[1] :\n parsedValue;\n return parsedValue || value;\n} else return '';" - }, - { - "name": "SERVICE_LOGS", - "type": "timeseries", - "label": "Details", - "color": "#2196f3", - "settings": { - "useCellStyleFunction": false, - "useCellContentFunction": true, - "cellContentFunction": "let statusValue = value.match(/\\|(\\w+)\\|/); \r\nstatusValue = statusValue? statusValue[1] : statusValue;\r\nlet cssClass = statusValue === \"EXCEPTION\" ?\r\n \"msg-status-exception\" : 'msg';\r\nlet parsedValue = /\\[(.*)/.exec(value);\r\nparsedValue = parsedValue ? parsedValue[0] : parsedValue;\r\nreturn `${parsedValue || value}`;" - }, - "_hash": 0.6931154680365814, - "aggregationType": null, - "units": null, - "decimals": null, - "funcBody": null, - "usePostProcessing": true, - "postFuncBody": "if (value.includes(\"RPC\")&&!value.includes(\"GRPC\")) {\n return value;\n} else return '';" - } - ], - "alarmFilterConfig": { - "statusList": [ - "ACTIVE" - ] - } - } - ], - "timewindow": { - "hideInterval": false, - "hideLastInterval": false, - "hideQuickInterval": false, - "hideAggregation": false, - "hideAggInterval": false, - "hideTimezone": false, - "selectedTab": 0, - "realtime": { - "realtimeType": 0, - "timewindowMs": 604800000, - "quickInterval": "CURRENT_DAY", - "interval": 1000 - }, - "aggregation": { - "type": "NONE", - "limit": 200 - } - }, - "showTitle": true, - "backgroundColor": "rgb(255, 255, 255)", + "backgroundColor": "rgb(255, 255, 255)", "color": "rgba(0, 0, 0, 0.87)", "padding": "8px", "settings": { @@ -1877,7 +1580,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 60000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -1887,7 +1593,11 @@ "startTimeMs": 1685437116892, "endTimeMs": 1685523516892 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "AVG", @@ -1926,7 +1636,7 @@ "useShowWidgetActionFunction": null, "showWidgetActionFunction": "return true;", "type": "customPretty", - "customHtml":"
\n \n

{{ 'gateway.launch-command' | translate }}

\n \n
\n \n
\n \n
\n \n
\n
\n", + "customHtml": "
\n \n

{{ 'gateway.launch-command' | translate }}

\n \n
\n \n
\n \n
\n \n
\n
\n", "customCss": ".container {\n display: grid;\n grid-template-rows: min-content minmax(auto, 1fr) min-content;\n height: 100%;\n max-height: 100vh;\n width: 600px;\n max-width: 100%;\n}", "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\n\nopenCommands();\n\nfunction openCommands() {\n customDialog.customDialog(htmlTemplate, CommandsDialogController, {panelClass: \"test\"}).subscribe();\n}\n\nfunction CommandsDialogController(instance) {\n let vm = instance;\n \n vm.entityId = entityId.id;\n\n vm.cancel = function() {\n vm.dialogRef.close(null);\n };\n}\n", "customResources": [ @@ -1990,7 +1700,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 60000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -2000,7 +1713,11 @@ "startTimeMs": 1685437116892, "endTimeMs": 1685523516892 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "AVG", @@ -2080,11 +1797,16 @@ "icon": "more_horiz", "useShowWidgetActionFunction": null, "showWidgetActionFunction": "return true;", - "type": "openDashboardState", - "targetDashboardStateId": "statistics", - "setEntityId": true, - "stateEntityParamName": null, - "openRightLayout": false, + "type": "customPretty", + "customHtml": "", + "customCss": "", + "customFunction": "widgetContext.stateController.openState('storage_statistics', widgetContext.stateController.getStateParams());", + "customResources": [ + { + "url": "tb-resource;/api/resource/js_module/system/gateway-management-extension.js", + "isModule": true + } + ], "openInSeparateDialog": false, "openInPopover": false, "id": "425ba0d8-8e26-18a5-881d-bebe27fb2a7a" @@ -2597,7 +2319,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 60000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -2607,7 +2332,11 @@ "startTimeMs": 1686652103417, "endTimeMs": 1686738503417 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "AVG", @@ -2662,7 +2391,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -2672,7 +2404,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -2829,7 +2565,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -2839,7 +2578,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -2996,7 +2739,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -3006,7 +2752,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -3162,7 +2912,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -3172,7 +2925,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -3328,7 +3085,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -3338,7 +3098,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -3494,7 +3258,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -3504,7 +3271,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -3660,7 +3431,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -3670,7 +3444,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -3826,7 +3604,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -3836,7 +3617,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -3992,7 +3777,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -4002,7 +3790,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -4158,7 +3950,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -4168,7 +3963,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -4324,7 +4123,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -4334,7 +4136,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -4490,7 +4296,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -4500,7 +4309,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -4656,7 +4469,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -4666,7 +4482,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -4822,7 +4642,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -4832,7 +4655,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -4988,7 +4815,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -4998,7 +4828,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -5154,7 +4988,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -5164,7 +5001,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -5320,7 +5161,10 @@ "realtimeType": 1, "interval": 1000, "timewindowMs": 86400000, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, "history": { "historyType": 0, @@ -5330,7 +5174,11 @@ "startTimeMs": 1684327643501, "endTimeMs": 1684414043501 }, - "quickInterval": "CURRENT_DAY" + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false }, "aggregation": { "type": "NONE", @@ -5473,88 +5321,3327 @@ "col": 0, "id": "75b6372d-4def-42b4-8774-4edf413a8b83", "typeFullFqn": "system.cards.entities_table" - } - }, - "states": { - "default": { - "name": "Gateway List", - "root": true, - "layouts": { - "main": { - "widgets": { - "23b9adc5-b3bd-040f-e5eb-a45925c73257": { - "sizeX": 48, - "sizeY": 23, - "row": 0, - "col": 0 - } - }, - "gridSettings": { - "backgroundColor": "#eeeeee", - "columns": 48, - "margin": 12, - "backgroundSizeMode": "100%", - "autoFillHeight": true, - "backgroundImageUrl": null, - "mobileAutoFillHeight": true, - "mobileRowHeight": 70, - "outerMargin": true - } - } - } }, - "configuration": { - "name": "Configuration", - "root": false, - "layouts": { - "main": { - "widgets": { - "d4a1ffc4-c9f6-7b15-bca0-17feb58bac99": { - "sizeX": 24, - "sizeY": 11, - "row": 0, - "col": 0, - "mobileHeight": null + "b4194e1e-97af-ed0b-a6a4-70011c71c579": { + "typeFullFqn": "system.cards.markdown_card", + "type": "latest", + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] } - }, - "gridSettings": { - "backgroundColor": "#eeeeee", - "columns": 24, - "margin": 12, - "backgroundSizeMode": "100%", - "autoFillHeight": true, - "backgroundImageUrl": null, - "mobileAutoFillHeight": true, - "mobileRowHeight": 70, - "outerMargin": true } - } - } - }, - "connectors": { - "name": "Connectors", - "root": false, - "layouts": { - "main": { - "widgets": { - "02a05113-d878-b086-328e-75bd6f02b2bb": { - "sizeX": 24, - "sizeY": 12, - "row": 0, - "col": 0 - } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false }, - "gridSettings": { - "backgroundColor": "#eeeeee", - "columns": 24, - "margin": 0, - "backgroundSizeMode": "100%", - "autoFillHeight": true, - "backgroundImageUrl": null, - "mobileAutoFillHeight": true, - "mobileRowHeight": 70, - "outerMargin": true - } + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1732109250067, + "endTimeMs": 1732195650067 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "useMarkdownTextFunction": true, + "markdownTextPattern": "let buttonsHtml = \"\" \nctx.actionsApi.getActionDescriptors('elementClick').forEach((btn, index)=>{\n let disabled = false;\n if (index == 2) {\n disabled = data[0] && data[0].RemoteLoggingLevel ? data[0].RemoteLoggingLevel == \"NONE\" : true;\n } else if (index == 4) {\n const conf = data[0].general_configuration ? JSON.parse(data[0].general_configuration) : {};\n disabled = !conf.remoteShell;\n }\n buttonsHtml += ``\n});\n\nreturn `
${buttonsHtml}
`;", + "markdownTextFunction": "const states = ['storage_statistics', 'machine_statistics'];\nconst currentState = ctx.stateController.getStateId();\nlet buttonsHtml = \"\";\nconst buttonName = \nctx.actionsApi.getActionDescriptors('elementClick').forEach((btn, index)=>{\n buttonsHtml += ``\n});\n\nreturn `
${buttonsHtml}
`;", + "applyDefaultMarkdownStyle": false, + "markdownCss": ".action-buttons-container {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n height: 100%;\r\n width: 100%;\r\n align-content: start;\r\n}\r\n\r\nbutton {\r\n flex-grow: 1;\r\n margin: 10px;\r\n min-width: 150px;\r\n height: auto;\r\n line-height: 36px;\r\n}" + }, + "title": "Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": false, + "widgetStyle": {}, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "useDashboardTimewindow": true, + "displayTimewindow": true, + "actions": { + "elementClick": [ + { + "name": "Storage", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "updateDashboardState", + "targetDashboardStateId": "storage_statistics", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "fc4c338d-5799-f7dc-9ecb-448e65f8045d" + }, + { + "name": "Machine", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "updateDashboardState", + "targetDashboardStateId": "machine_statistics", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "b35fc758-b21a-f5d3-e968-3572f1bb9ad4" + } + ] + }, + "borderRadius": "5px", + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "margin": "16px 16px 0 0", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "b4194e1e-97af-ed0b-a6a4-70011c71c579" + }, + "3a005e49-327c-beaa-8d19-c36b833001f0": { + "typeFullFqn": "system.cards.markdown_card", + "type": "latest", + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "dataKeys": [] + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1733234218432, + "endTimeMs": 1733320618432 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "0", + "settings": { + "useMarkdownTextFunction": false, + "markdownTextPattern": "
\n \n
", + "markdownTextFunction": "return '# Some title\\n - Entity name: ' + data[0]['entityName'];", + "applyDefaultMarkdownStyle": false, + "markdownCss": ".tb-card-content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}" + }, + "title": "Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": false, + "enableFullscreen": false, + "widgetStyle": {}, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "3a005e49-327c-beaa-8d19-c36b833001f0" + }, + "5f26fe0d-4417-31c6-0a98-8760cda909c5": { + "typeFullFqn": "system.cards.aggregated_value_card", + "type": "timeseries", + "sizeX": 4.5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [ + { + "name": "serviceStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.storage-message-count}", + "color": "rgba(0, 0, 0, 0.87)", + "settings": {}, + "_hash": 0.9654072247591918, + "units": "", + "decimals": 0, + "aggregationType": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.storageMsgCount ?? 0) : 0;" + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + }, + "latestDataKeys": [ + { + "name": "serviceStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.storage-message-count}", + "color": "#4caf50", + "settings": { + "position": "center", + "font": { + "size": 52, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal", + "lineHeight": "1" + }, + "color": { + "type": "constant", + "color": "rgba(0, 0, 0, 0.87)", + "rangeList": { + "advancedMode": false, + "range": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "showArrow": false + }, + "_hash": 0.33607518861078467, + "units": "", + "decimals": 0, + "aggregationType": "NONE", + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.storageMsgCount ?? 0) : 0;" + } + ] + } + ], + "timewindow": { + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "interval": 300000, + "timewindowMs": 86400000, + "quickInterval": "CURRENT_MONTH_SO_FAR", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 300000, + "timewindowMs": 86400000, + "fixedTimewindow": { + "startTimeMs": 1733156328824, + "endTimeMs": 1733242728824 + }, + "quickInterval": "CURRENT_MONTH_SO_FAR", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "NONE", + "limit": 5000 + } + }, + "showTitle": true, + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": null, + "padding": "0", + "settings": { + "stack": false, + "fontSize": 10, + "fontColor": "#545454", + "showTooltip": true, + "tooltipIndividual": false, + "tooltipCumulative": false, + "hideZeros": false, + "grid": { + "verticalLines": true, + "horizontalLines": true, + "outlineWidth": 1, + "color": "#545454", + "backgroundColor": null, + "tickColor": "#DDDDDD" + }, + "xaxis": { + "title": null, + "showLabels": true, + "color": "#545454" + }, + "yaxis": { + "min": null, + "max": null, + "title": null, + "showLabels": true, + "color": "#545454", + "tickSize": null, + "tickDecimals": 0, + "ticksFormatter": "" + }, + "shadowSize": 4, + "smoothLines": false, + "comparisonEnabled": false, + "xaxisSecond": { + "axisPosition": "top", + "title": null, + "showLabels": true + }, + "showLegend": true, + "legendConfig": { + "direction": "column", + "position": "bottom", + "sortDataKeys": false, + "showMin": false, + "showMax": false, + "showAvg": true, + "showTotal": false, + "showLatest": false + }, + "customLegendEnabled": false, + "showSubtitle": false, + "subtitle": "${entityName}", + "subtitleFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "subtitleColor": "rgba(0, 0, 0, 0.38)", + "showDate": false, + "dateFormat": { + "format": null, + "lastUpdateAgo": true, + "custom": false + }, + "dateFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "dateColor": "rgba(0, 0, 0, 0.38)", + "showChart": true, + "chartColor": "rgba(0, 0, 0, 0.87)", + "background": { + "type": "color", + "color": "#fff", + "overlay": { + "enabled": false, + "color": "rgba(255,255,255,0.72)", + "blur": 3 + } + }, + "autoScale": true, + "padding": "18px" + }, + "title": "{i18n:gateway.statistics.storage-message-count}", + "dropShadow": true, + "enableFullscreen": false, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "mobileHeight": null, + "configMode": "advanced", + "actions": {}, + "showTitleIcon": false, + "titleIcon": "water_drop", + "iconColor": "rgba(0, 0, 0, 0.87)", + "titleFont": { + "size": 16, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal", + "lineHeight": "24px" + }, + "iconSize": "24px", + "titleTooltip": "", + "widgetStyle": {}, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "useDashboardTimewindow": true, + "displayTimewindow": false, + "decimals": 0, + "timewindowStyle": { + "showIcon": true, + "iconSize": "24px", + "icon": null, + "iconPosition": "left", + "font": { + "size": 12, + "sizeUnit": "px", + "family": "Roboto", + "weight": "400", + "style": "normal", + "lineHeight": "16px" + }, + "color": "rgba(0, 0, 0, 0.38)", + "displayTypePrefix": false + }, + "titleColor": "rgba(0, 0, 0, 0.87)", + "borderRadius": "5px", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "5f26fe0d-4417-31c6-0a98-8760cda909c5" + }, + "dc060491-215c-3e63-edc2-66d52888735d": { + "typeFullFqn": "system.cards.aggregated_value_card", + "type": "timeseries", + "sizeX": 4.5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [ + { + "name": "serviceStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.messages-from-platform}", + "color": "rgba(0, 0, 0, 0.87)", + "settings": {}, + "_hash": 0.6231145484349594, + "units": "", + "decimals": 0, + "aggregationType": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.storageMsgPulled ?? 0) : 0;" + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + }, + "latestDataKeys": [ + { + "name": "serviceStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.messages-from-platform}", + "color": "#4caf50", + "settings": { + "position": "center", + "font": { + "size": 52, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal", + "lineHeight": "1" + }, + "color": { + "type": "constant", + "color": "rgba(0, 0, 0, 0.87)", + "rangeList": { + "advancedMode": false, + "range": [] + }, + "colorFunction": "var temperature = value;\nif (typeof temperature !== undefined) {\n var percent = (temperature + 60)/120 * 100;\n return tinycolor.mix('blue', 'red', percent).toHexString();\n}\nreturn 'blue';" + }, + "showArrow": false + }, + "_hash": 0.5477883831089236, + "units": "", + "decimals": 0, + "aggregationType": "NONE", + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.storageMsgPulled ?? 0) : 0;" + } + ] + } + ], + "timewindow": { + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "interval": 300000, + "timewindowMs": 86400000, + "quickInterval": "CURRENT_MONTH_SO_FAR", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 2, + "interval": 7200000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1733156705839, + "endTimeMs": 1733243105839 + }, + "quickInterval": "CURRENT_MONTH_SO_FAR", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "NONE", + "limit": 5000 + } + }, + "showTitle": true, + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": null, + "padding": "0", + "settings": { + "stack": false, + "fontSize": 10, + "fontColor": "#545454", + "showTooltip": true, + "tooltipIndividual": false, + "tooltipCumulative": false, + "hideZeros": false, + "grid": { + "verticalLines": true, + "horizontalLines": true, + "outlineWidth": 1, + "color": "#545454", + "backgroundColor": null, + "tickColor": "#DDDDDD" + }, + "xaxis": { + "title": null, + "showLabels": true, + "color": "#545454" + }, + "yaxis": { + "min": null, + "max": null, + "title": null, + "showLabels": true, + "color": "#545454", + "tickSize": null, + "tickDecimals": 0, + "ticksFormatter": "" + }, + "shadowSize": 4, + "smoothLines": false, + "comparisonEnabled": false, + "xaxisSecond": { + "axisPosition": "top", + "title": null, + "showLabels": true + }, + "showLegend": true, + "legendConfig": { + "direction": "column", + "position": "bottom", + "sortDataKeys": false, + "showMin": false, + "showMax": false, + "showAvg": true, + "showTotal": false, + "showLatest": false + }, + "customLegendEnabled": false, + "showSubtitle": false, + "subtitle": "${entityName}", + "subtitleFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "subtitleColor": "rgba(0, 0, 0, 0.38)", + "showDate": false, + "dateFormat": { + "format": null, + "lastUpdateAgo": true, + "custom": false + }, + "dateFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "dateColor": "rgba(0, 0, 0, 0.38)", + "showChart": true, + "chartColor": "rgba(0, 0, 0, 0.87)", + "background": { + "type": "color", + "color": "#fff", + "overlay": { + "enabled": false, + "color": "rgba(255,255,255,0.72)", + "blur": 3 + } + }, + "autoScale": true, + "padding": "18px" + }, + "title": "{i18n:gateway.statistics.messages-from-platform}", + "dropShadow": true, + "enableFullscreen": false, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "mobileHeight": null, + "configMode": "advanced", + "actions": {}, + "showTitleIcon": false, + "titleIcon": "water_drop", + "iconColor": "rgba(0, 0, 0, 0.87)", + "titleFont": { + "size": 16, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal", + "lineHeight": "24px" + }, + "iconSize": "24px", + "titleTooltip": "", + "widgetStyle": {}, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "useDashboardTimewindow": true, + "displayTimewindow": false, + "decimals": 0, + "timewindowStyle": { + "showIcon": true, + "iconSize": "24px", + "icon": null, + "iconPosition": "left", + "font": { + "size": 12, + "sizeUnit": "px", + "family": "Roboto", + "weight": "400", + "style": "normal", + "lineHeight": "16px" + }, + "color": "rgba(0, 0, 0, 0.38)", + "displayTypePrefix": false + }, + "titleColor": "rgba(0, 0, 0, 0.87)", + "borderRadius": "5px", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "dc060491-215c-3e63-edc2-66d52888735d" + }, + "b37b2916-acd7-353b-6fbc-ceddac152ee8": { + "typeFullFqn": "system.line_chart", + "type": "timeseries", + "sizeX": 8, + "sizeY": 5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [ + { + "name": "serviceStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.attributes}", + "color": "#4CAF50", + "settings": { + "yAxisId": "default", + "showInLegend": true, + "dataHiddenByDefault": false, + "type": "line", + "lineSettings": { + "showLine": true, + "step": false, + "stepType": "start", + "smooth": false, + "lineType": "solid", + "lineWidth": 2, + "showPoints": false, + "showPointLabel": false, + "pointLabelPosition": "top", + "pointLabelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "pointLabelColor": "rgba(0, 0, 0, 0.76)", + "enablePointLabelBackground": false, + "pointLabelBackground": "rgba(255,255,255,0.56)", + "pointShape": "emptyCircle", + "pointSize": 4, + "fillAreaSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "barSettings": { + "showBorder": false, + "borderWidth": 2, + "borderRadius": 0, + "showLabel": false, + "labelPosition": "top", + "labelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.76)", + "enableLabelBackground": false, + "labelBackground": "rgba(255,255,255,0.56)", + "backgroundSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "comparisonSettings": { + "showValuesForComparison": false, + "comparisonValuesLabel": "", + "color": "" + } + }, + "_hash": 0.3127202960057933, + "units": "", + "decimals": 0, + "aggregationType": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.platformAttrProduced ?? 0) : 0;" + }, + { + "name": "serviceStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.telemetry}", + "color": "#F5DD00", + "settings": { + "yAxisId": "default", + "showInLegend": true, + "dataHiddenByDefault": false, + "type": "line", + "lineSettings": { + "showLine": true, + "step": false, + "stepType": "start", + "smooth": false, + "lineType": "solid", + "lineWidth": 2, + "showPoints": false, + "showPointLabel": false, + "pointLabelPosition": "top", + "pointLabelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "pointLabelColor": "rgba(0, 0, 0, 0.76)", + "enablePointLabelBackground": false, + "pointLabelBackground": "rgba(255,255,255,0.56)", + "pointShape": "emptyCircle", + "pointSize": 4, + "fillAreaSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "barSettings": { + "showBorder": false, + "borderWidth": 2, + "borderRadius": 0, + "showLabel": false, + "labelPosition": "top", + "labelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.76)", + "enableLabelBackground": false, + "labelBackground": "rgba(255,255,255,0.56)", + "backgroundSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "comparisonSettings": { + "showValuesForComparison": false, + "comparisonValuesLabel": "", + "color": "" + } + }, + "_hash": 0.40795689707022653, + "decimals": 0, + "aggregationType": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.platformTsProduced ?? 0) : 0;", + "units": null + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + }, + "latestDataKeys": [] + } + ], + "timewindow": { + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "interval": 300000, + "timewindowMs": 86400000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1733156943343, + "endTimeMs": 1733243343343 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "NONE", + "limit": 25000 + }, + "timezone": null + }, + "showTitle": true, + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "0px", + "settings": { + "showLegend": true, + "legendConfig": { + "direction": "column", + "position": "top", + "sortDataKeys": false, + "showMin": false, + "showMax": false, + "showAvg": true, + "showTotal": false, + "showLatest": false + }, + "thresholds": [], + "dataZoom": false, + "stack": false, + "yAxis": { + "show": true, + "label": "", + "labelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "600", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.54)", + "position": "left", + "showTickLabels": true, + "tickLabelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "tickLabelColor": "rgba(0, 0, 0, 0.54)", + "showTicks": true, + "ticksColor": "rgba(0, 0, 0, 0.54)", + "showLine": true, + "lineColor": "rgba(0, 0, 0, 0.54)", + "showSplitLines": true, + "splitLinesColor": "rgba(0, 0, 0, 0.12)" + }, + "xAxis": { + "show": true, + "label": "", + "labelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "600", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.54)", + "position": "bottom", + "showTickLabels": true, + "tickLabelFont": { + "family": "Roboto", + "size": 10, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "tickLabelColor": "rgba(0, 0, 0, 0.54)", + "ticksFormat": {}, + "showTicks": true, + "ticksColor": "rgba(0, 0, 0, 0.54)", + "showLine": true, + "lineColor": "rgba(0, 0, 0, 0.54)", + "showSplitLines": true, + "splitLinesColor": "rgba(0, 0, 0, 0.12)" + }, + "legendLabelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "legendLabelColor": "rgba(0, 0, 0, 0.76)", + "showTooltip": true, + "tooltipTrigger": "axis", + "tooltipValueFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "500", + "lineHeight": "16px" + }, + "tooltipValueColor": "rgba(0, 0, 0, 0.76)", + "tooltipShowDate": true, + "tooltipDateFormat": { + "format": null, + "lastUpdateAgo": false, + "custom": false, + "auto": true, + "autoDateFormatSettings": {} + }, + "tooltipDateFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "tooltipDateColor": "rgba(0, 0, 0, 0.76)", + "tooltipDateInterval": true, + "tooltipBackgroundColor": "rgba(255, 255, 255, 0.76)", + "tooltipBackgroundBlur": 4, + "background": { + "type": "color", + "color": "#fff", + "overlay": { + "enabled": false, + "color": "rgba(255,255,255,0.72)", + "blur": 3 + } + }, + "yAxes": { + "default": { + "units": null, + "decimals": 0, + "show": true, + "label": "", + "labelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "600", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.54)", + "position": "left", + "showTickLabels": true, + "tickLabelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "tickLabelColor": "rgba(0, 0, 0, 0.54)", + "ticksFormatter": null, + "showTicks": true, + "ticksColor": "rgba(0, 0, 0, 0.54)", + "showLine": true, + "lineColor": "rgba(0, 0, 0, 0.54)", + "showSplitLines": true, + "splitLinesColor": "rgba(0, 0, 0, 0.12)", + "id": "default", + "order": 0 + } + }, + "noAggregationBarWidthSettings": { + "strategy": "group", + "groupWidth": { + "relative": true, + "relativeWidth": 2, + "absoluteWidth": 1000 + }, + "barWidth": { + "relative": true, + "relativeWidth": 2, + "absoluteWidth": 1000 + } + }, + "animation": { + "animation": true, + "animationThreshold": 2000, + "animationDuration": 500, + "animationEasing": "cubicOut", + "animationDelay": 0, + "animationDurationUpdate": 300, + "animationEasingUpdate": "cubicOut", + "animationDelayUpdate": 0 + }, + "padding": "12px", + "comparisonEnabled": false, + "timeForComparison": "previousInterval", + "comparisonCustomIntervalValue": 7200000, + "comparisonXAxis": { + "show": true, + "label": "", + "labelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "600", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.54)", + "position": "top", + "showTickLabels": true, + "tickLabelFont": { + "family": "Roboto", + "size": 10, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "tickLabelColor": "rgba(0, 0, 0, 0.54)", + "ticksFormat": {}, + "showTicks": true, + "ticksColor": "rgba(0, 0, 0, 0.54)", + "showLine": true, + "lineColor": "rgba(0, 0, 0, 0.54)", + "showSplitLines": true, + "splitLinesColor": "rgba(0, 0, 0, 0.12)" + }, + "grid": { + "show": false, + "backgroundColor": null, + "borderWidth": 1, + "borderColor": "#ccc" + }, + "legendColumnTitleFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "legendColumnTitleColor": "rgba(0, 0, 0, 0.38)", + "legendValueFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "500", + "lineHeight": "16px" + }, + "legendValueColor": "rgba(0, 0, 0, 0.87)", + "tooltipLabelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "tooltipLabelColor": "rgba(0, 0, 0, 0.76)" + }, + "title": "{i18n:gateway.statistics.pushed-datapoints}", + "dropShadow": true, + "enableFullscreen": false, + "titleStyle": null, + "mobileHeight": null, + "configMode": "advanced", + "actions": {}, + "showTitleIcon": false, + "titleIcon": "thermostat", + "iconColor": "#1F6BDD", + "useDashboardTimewindow": false, + "displayTimewindow": true, + "titleFont": { + "size": 16, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal", + "lineHeight": "24px" + }, + "titleColor": "rgba(0, 0, 0, 0.87)", + "titleTooltip": "", + "widgetStyle": {}, + "widgetCss": "", + "pageSize": 1024, + "units": "", + "decimals": null, + "noDataDisplayMessage": "", + "timewindowStyle": { + "showIcon": false, + "iconSize": "24px", + "icon": null, + "iconPosition": "left", + "font": { + "size": 12, + "sizeUnit": "px", + "family": "Roboto", + "weight": "400", + "style": "normal", + "lineHeight": "16px" + }, + "color": "rgba(0, 0, 0, 0.38)", + "displayTypePrefix": true + }, + "margin": "0px", + "borderRadius": "5px", + "iconSize": "0px", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "b37b2916-acd7-353b-6fbc-ceddac152ee8" + }, + "b5ffefb2-9fb5-cf22-bba2-dba9a98891db": { + "typeFullFqn": "system.line_chart", + "type": "timeseries", + "sizeX": 8, + "sizeY": 5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [ + { + "name": "serviceStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.messages-pulled-from-storage}", + "color": "#4CAF50", + "settings": { + "yAxisId": "default", + "showInLegend": true, + "dataHiddenByDefault": false, + "type": "line", + "lineSettings": { + "showLine": true, + "step": false, + "stepType": "start", + "smooth": false, + "lineType": "solid", + "lineWidth": 2, + "showPoints": false, + "showPointLabel": false, + "pointLabelPosition": "top", + "pointLabelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "pointLabelColor": "rgba(0, 0, 0, 0.76)", + "enablePointLabelBackground": false, + "pointLabelBackground": "rgba(255,255,255,0.56)", + "pointShape": "emptyCircle", + "pointSize": 4, + "fillAreaSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "barSettings": { + "showBorder": false, + "borderWidth": 2, + "borderRadius": 0, + "showLabel": false, + "labelPosition": "top", + "labelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.76)", + "enableLabelBackground": false, + "labelBackground": "rgba(255,255,255,0.56)", + "backgroundSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "comparisonSettings": { + "showValuesForComparison": false, + "comparisonValuesLabel": "", + "color": "" + } + }, + "_hash": 0.870233714866288, + "units": "", + "decimals": 0, + "aggregationType": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.storageMsgPulled ?? 0) : 0;" + }, + { + "name": "serviceStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.messages-pushed-to-platform}", + "color": "#F5DD00", + "settings": { + "yAxisId": "default", + "showInLegend": true, + "dataHiddenByDefault": false, + "type": "line", + "lineSettings": { + "showLine": true, + "step": false, + "stepType": "start", + "smooth": false, + "lineType": "solid", + "lineWidth": 2, + "showPoints": false, + "showPointLabel": false, + "pointLabelPosition": "top", + "pointLabelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "pointLabelColor": "rgba(0, 0, 0, 0.76)", + "enablePointLabelBackground": false, + "pointLabelBackground": "rgba(255,255,255,0.56)", + "pointShape": "emptyCircle", + "pointSize": 4, + "fillAreaSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "barSettings": { + "showBorder": false, + "borderWidth": 2, + "borderRadius": 0, + "showLabel": false, + "labelPosition": "top", + "labelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.76)", + "enableLabelBackground": false, + "labelBackground": "rgba(255,255,255,0.56)", + "backgroundSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "comparisonSettings": { + "showValuesForComparison": false, + "comparisonValuesLabel": "", + "color": "" + } + }, + "_hash": 0.7046592088349717, + "decimals": 0, + "aggregationType": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.platformMsgPushed ?? 0) : 0;", + "units": null + }, + { + "name": "machineStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.messages-sent-to-platform}", + "color": "#048AD3", + "settings": { + "yAxisId": "default", + "showInLegend": true, + "dataHiddenByDefault": false, + "type": "line", + "lineSettings": { + "showLine": true, + "step": false, + "stepType": "start", + "smooth": false, + "lineType": "solid", + "lineWidth": 2, + "showPoints": false, + "showPointLabel": false, + "pointLabelPosition": "top", + "pointLabelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "pointLabelColor": "rgba(0, 0, 0, 0.76)", + "enablePointLabelBackground": false, + "pointLabelBackground": "rgba(255,255,255,0.56)", + "pointShape": "emptyCircle", + "pointSize": 4, + "fillAreaSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "barSettings": { + "showBorder": false, + "borderWidth": 2, + "borderRadius": 0, + "showLabel": false, + "labelPosition": "top", + "labelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.76)", + "enableLabelBackground": false, + "labelBackground": "rgba(255,255,255,0.56)", + "backgroundSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "comparisonSettings": { + "showValuesForComparison": false, + "comparisonValuesLabel": "", + "color": "" + } + }, + "_hash": 0.3711330575822882, + "decimals": 0, + "aggregationType": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.msgsSentToPlatform ?? 0) : 0;", + "units": null + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + }, + "latestDataKeys": [] + } + ], + "timewindow": { + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "interval": 300000, + "timewindowMs": 86400000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1733157438025, + "endTimeMs": 1733243838025 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "NONE", + "limit": 25000 + }, + "timezone": null + }, + "showTitle": true, + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "0px", + "settings": { + "showLegend": true, + "legendConfig": { + "direction": "column", + "position": "top", + "sortDataKeys": false, + "showMin": false, + "showMax": false, + "showAvg": true, + "showTotal": false, + "showLatest": false + }, + "thresholds": [], + "dataZoom": false, + "stack": false, + "yAxis": { + "show": true, + "label": "", + "labelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "600", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.54)", + "position": "left", + "showTickLabels": true, + "tickLabelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "tickLabelColor": "rgba(0, 0, 0, 0.54)", + "showTicks": true, + "ticksColor": "rgba(0, 0, 0, 0.54)", + "showLine": true, + "lineColor": "rgba(0, 0, 0, 0.54)", + "showSplitLines": true, + "splitLinesColor": "rgba(0, 0, 0, 0.12)" + }, + "xAxis": { + "show": true, + "label": "", + "labelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "600", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.54)", + "position": "bottom", + "showTickLabels": true, + "tickLabelFont": { + "family": "Roboto", + "size": 10, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "tickLabelColor": "rgba(0, 0, 0, 0.54)", + "ticksFormat": {}, + "showTicks": true, + "ticksColor": "rgba(0, 0, 0, 0.54)", + "showLine": true, + "lineColor": "rgba(0, 0, 0, 0.54)", + "showSplitLines": true, + "splitLinesColor": "rgba(0, 0, 0, 0.12)" + }, + "legendLabelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "legendLabelColor": "rgba(0, 0, 0, 0.76)", + "showTooltip": true, + "tooltipTrigger": "axis", + "tooltipValueFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "500", + "lineHeight": "16px" + }, + "tooltipValueColor": "rgba(0, 0, 0, 0.76)", + "tooltipShowDate": true, + "tooltipDateFormat": { + "format": null, + "lastUpdateAgo": false, + "custom": false, + "auto": true, + "autoDateFormatSettings": {} + }, + "tooltipDateFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "tooltipDateColor": "rgba(0, 0, 0, 0.76)", + "tooltipDateInterval": true, + "tooltipBackgroundColor": "rgba(255, 255, 255, 0.76)", + "tooltipBackgroundBlur": 4, + "background": { + "type": "color", + "color": "#fff", + "overlay": { + "enabled": false, + "color": "rgba(255,255,255,0.72)", + "blur": 3 + } + }, + "yAxes": { + "default": { + "units": null, + "decimals": 0, + "show": true, + "label": "", + "labelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "600", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.54)", + "position": "left", + "showTickLabels": true, + "tickLabelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "tickLabelColor": "rgba(0, 0, 0, 0.54)", + "ticksFormatter": null, + "showTicks": true, + "ticksColor": "rgba(0, 0, 0, 0.54)", + "showLine": true, + "lineColor": "rgba(0, 0, 0, 0.54)", + "showSplitLines": true, + "splitLinesColor": "rgba(0, 0, 0, 0.12)", + "id": "default", + "order": 0 + } + }, + "noAggregationBarWidthSettings": { + "strategy": "group", + "groupWidth": { + "relative": true, + "relativeWidth": 2, + "absoluteWidth": 1000 + }, + "barWidth": { + "relative": true, + "relativeWidth": 2, + "absoluteWidth": 1000 + } + }, + "animation": { + "animation": true, + "animationThreshold": 2000, + "animationDuration": 500, + "animationEasing": "cubicOut", + "animationDelay": 0, + "animationDurationUpdate": 300, + "animationEasingUpdate": "cubicOut", + "animationDelayUpdate": 0 + }, + "padding": "12px", + "comparisonEnabled": false, + "timeForComparison": "previousInterval", + "comparisonCustomIntervalValue": 7200000, + "comparisonXAxis": { + "show": true, + "label": "", + "labelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "600", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.54)", + "position": "top", + "showTickLabels": true, + "tickLabelFont": { + "family": "Roboto", + "size": 10, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "tickLabelColor": "rgba(0, 0, 0, 0.54)", + "ticksFormat": {}, + "showTicks": true, + "ticksColor": "rgba(0, 0, 0, 0.54)", + "showLine": true, + "lineColor": "rgba(0, 0, 0, 0.54)", + "showSplitLines": true, + "splitLinesColor": "rgba(0, 0, 0, 0.12)" + }, + "grid": { + "show": false, + "backgroundColor": null, + "borderWidth": 1, + "borderColor": "#ccc" + }, + "legendColumnTitleFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "legendColumnTitleColor": "rgba(0, 0, 0, 0.38)", + "legendValueFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "500", + "lineHeight": "16px" + }, + "legendValueColor": "rgba(0, 0, 0, 0.87)", + "tooltipLabelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "tooltipLabelColor": "rgba(0, 0, 0, 0.76)" + }, + "title": "{i18n:gateway.statistics.messages}", + "dropShadow": true, + "enableFullscreen": false, + "titleStyle": null, + "mobileHeight": null, + "configMode": "advanced", + "actions": {}, + "showTitleIcon": false, + "titleIcon": "thermostat", + "iconColor": "#1F6BDD", + "useDashboardTimewindow": false, + "displayTimewindow": true, + "titleFont": { + "size": 16, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal", + "lineHeight": "24px" + }, + "titleColor": "rgba(0, 0, 0, 0.87)", + "titleTooltip": "", + "widgetStyle": {}, + "widgetCss": "", + "pageSize": 1024, + "units": "", + "decimals": null, + "noDataDisplayMessage": "", + "timewindowStyle": { + "showIcon": false, + "iconSize": "24px", + "icon": null, + "iconPosition": "left", + "font": { + "size": 12, + "sizeUnit": "px", + "family": "Roboto", + "weight": "400", + "style": "normal", + "lineHeight": "16px" + }, + "color": "rgba(0, 0, 0, 0.38)", + "displayTypePrefix": true + }, + "margin": "0px", + "borderRadius": "5px", + "iconSize": "0px", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "b5ffefb2-9fb5-cf22-bba2-dba9a98891db" + }, + "bc199c75-00da-ca8a-dd0d-16da97a9fa53": { + "typeFullFqn": "system.gateway_widgets.gateway_status", + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "config": { + "datasources": [ + { + "type": "entity", + "name": "function", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [ + { + "name": "active", + "type": "attribute", + "label": "active", + "color": "#2196f3", + "settings": {}, + "_hash": 0.07932656697286933 + }, + { + "name": "lastDisconnectTime", + "type": "attribute", + "label": "lastDisconnectTime", + "color": "#4caf50", + "settings": {}, + "_hash": 0.06662431625551446 + }, + { + "name": "lastConnectTime", + "type": "attribute", + "label": "lastConnectTime", + "color": "#f44336", + "settings": {}, + "_hash": 0.28485659401606434 + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + } + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1733240126084, + "endTimeMs": 1733326526084 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "rgb(255, 255, 255)", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "", + "settings": { + "cardHtml": "
HTML code here
", + "cardCss": ".card {\n font-weight: bold;\n font-size: 32px;\n color: #999;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}" + }, + "title": "HTML Card", + "dropShadow": true, + "useDashboardTimewindow": true, + "displayTimewindow": true, + "enableFullscreen": false, + "margin": "16px 16px 16px 0", + "borderRadius": "5px", + "widgetStyle": {}, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "bc199c75-00da-ca8a-dd0d-16da97a9fa53" + }, + "7543e668-35b7-bb97-2f14-163399f8d038": { + "typeFullFqn": "system.line_chart", + "type": "timeseries", + "sizeX": 8, + "sizeY": 5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [ + { + "name": "machineStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.process-cpu-usage}", + "color": "#4CAF50", + "settings": { + "yAxisId": "default", + "showInLegend": true, + "dataHiddenByDefault": false, + "type": "line", + "lineSettings": { + "showLine": true, + "step": false, + "stepType": "start", + "smooth": false, + "lineType": "solid", + "lineWidth": 2, + "showPoints": false, + "showPointLabel": false, + "pointLabelPosition": "top", + "pointLabelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "pointLabelColor": "rgba(0, 0, 0, 0.76)", + "enablePointLabelBackground": false, + "pointLabelBackground": "rgba(255,255,255,0.56)", + "pointShape": "emptyCircle", + "pointSize": 4, + "fillAreaSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "barSettings": { + "showBorder": false, + "borderWidth": 2, + "borderRadius": 0, + "showLabel": false, + "labelPosition": "top", + "labelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.76)", + "enableLabelBackground": false, + "labelBackground": "rgba(255,255,255,0.56)", + "backgroundSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "comparisonSettings": { + "showValuesForComparison": false, + "comparisonValuesLabel": "", + "color": "" + } + }, + "_hash": 0.7171861494760787, + "units": "%", + "decimals": null, + "aggregationType": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.gwProcessCpuUsage ?? 0) : 0;" + }, + { + "name": "machineStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.memory}", + "color": "#F5DD00", + "settings": { + "yAxisId": "default", + "showInLegend": true, + "dataHiddenByDefault": false, + "type": "line", + "lineSettings": { + "showLine": true, + "step": false, + "stepType": "start", + "smooth": false, + "lineType": "solid", + "lineWidth": 2, + "showPoints": false, + "showPointLabel": false, + "pointLabelPosition": "top", + "pointLabelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "pointLabelColor": "rgba(0, 0, 0, 0.76)", + "enablePointLabelBackground": false, + "pointLabelBackground": "rgba(255,255,255,0.56)", + "pointShape": "emptyCircle", + "pointSize": 4, + "fillAreaSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "barSettings": { + "showBorder": false, + "borderWidth": 2, + "borderRadius": 0, + "showLabel": false, + "labelPosition": "top", + "labelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.76)", + "enableLabelBackground": false, + "labelBackground": "rgba(255,255,255,0.56)", + "backgroundSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "comparisonSettings": { + "showValuesForComparison": false, + "comparisonValuesLabel": "", + "color": "" + } + }, + "_hash": 0.36156284904340863, + "aggregationType": null, + "units": "%", + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.gwMemory ?? 0) : 0;" + }, + { + "name": "machineStats", + "type": "timeseries", + "label": "{i18n:gateway.statistics.free-disk}", + "color": "#048AD3", + "settings": { + "yAxisId": "default", + "showInLegend": true, + "dataHiddenByDefault": false, + "type": "line", + "lineSettings": { + "showLine": true, + "step": false, + "stepType": "start", + "smooth": false, + "lineType": "solid", + "lineWidth": 2, + "showPoints": false, + "showPointLabel": false, + "pointLabelPosition": "top", + "pointLabelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "pointLabelColor": "rgba(0, 0, 0, 0.76)", + "enablePointLabelBackground": false, + "pointLabelBackground": "rgba(255,255,255,0.56)", + "pointShape": "emptyCircle", + "pointSize": 4, + "fillAreaSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "barSettings": { + "showBorder": false, + "borderWidth": 2, + "borderRadius": 0, + "showLabel": false, + "labelPosition": "top", + "labelFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.76)", + "enableLabelBackground": false, + "labelBackground": "rgba(255,255,255,0.56)", + "backgroundSettings": { + "type": "none", + "opacity": 0.4, + "gradient": { + "start": 100, + "end": 0 + } + } + }, + "comparisonSettings": { + "showValuesForComparison": false, + "comparisonValuesLabel": "", + "color": "" + } + }, + "_hash": 0.17176850375078456, + "aggregationType": null, + "units": "%", + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.diskUsage ?? 0) : 0;" + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + }, + "latestDataKeys": [] + } + ], + "timewindow": { + "hideAggregation": false, + "hideAggInterval": false, + "hideTimezone": false, + "selectedTab": 0, + "realtime": { + "realtimeType": 0, + "interval": 300000, + "timewindowMs": 86400000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1733159943598, + "endTimeMs": 1733246343598 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "NONE", + "limit": 25000 + }, + "timezone": null + }, + "showTitle": true, + "backgroundColor": "rgba(0, 0, 0, 0)", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "0px", + "settings": { + "comparisonEnabled": false, + "timeForComparison": "previousInterval", + "comparisonCustomIntervalValue": 7200000, + "comparisonXAxis": { + "show": true, + "label": "", + "labelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "600", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.54)", + "position": "top", + "showTickLabels": true, + "tickLabelFont": { + "family": "Roboto", + "size": 10, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "tickLabelColor": "rgba(0, 0, 0, 0.54)", + "ticksFormat": {}, + "showTicks": true, + "ticksColor": "rgba(0, 0, 0, 0.54)", + "showLine": true, + "lineColor": "rgba(0, 0, 0, 0.54)", + "showSplitLines": true, + "splitLinesColor": "rgba(0, 0, 0, 0.12)" + }, + "yAxes": { + "default": { + "units": null, + "decimals": 0, + "show": true, + "label": "", + "labelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "600", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.54)", + "position": "left", + "showTickLabels": true, + "tickLabelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "tickLabelColor": "rgba(0, 0, 0, 0.54)", + "ticksFormatter": null, + "showTicks": true, + "ticksColor": "rgba(0, 0, 0, 0.54)", + "showLine": true, + "lineColor": "rgba(0, 0, 0, 0.54)", + "showSplitLines": true, + "splitLinesColor": "rgba(0, 0, 0, 0.12)", + "id": "default", + "order": 0 + } + }, + "thresholds": [], + "dataZoom": false, + "stack": false, + "grid": { + "show": false, + "backgroundColor": null, + "borderWidth": 1, + "borderColor": "#ccc" + }, + "xAxis": { + "show": true, + "label": "", + "labelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "600", + "lineHeight": "1" + }, + "labelColor": "rgba(0, 0, 0, 0.54)", + "position": "bottom", + "showTickLabels": true, + "tickLabelFont": { + "family": "Roboto", + "size": 10, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "1" + }, + "tickLabelColor": "rgba(0, 0, 0, 0.54)", + "ticksFormat": {}, + "showTicks": true, + "ticksColor": "rgba(0, 0, 0, 0.54)", + "showLine": true, + "lineColor": "rgba(0, 0, 0, 0.54)", + "showSplitLines": true, + "splitLinesColor": "rgba(0, 0, 0, 0.12)" + }, + "noAggregationBarWidthSettings": { + "strategy": "group", + "groupWidth": { + "relative": true, + "relativeWidth": 2, + "absoluteWidth": 1000 + }, + "barWidth": { + "relative": true, + "relativeWidth": 2, + "absoluteWidth": 1000 + } + }, + "showLegend": true, + "legendColumnTitleFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "legendColumnTitleColor": "rgba(0, 0, 0, 0.38)", + "legendLabelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "legendLabelColor": "rgba(0, 0, 0, 0.76)", + "legendValueFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "500", + "lineHeight": "16px" + }, + "legendValueColor": "rgba(0, 0, 0, 0.87)", + "legendConfig": { + "direction": "column", + "position": "top", + "sortDataKeys": false, + "showMin": false, + "showMax": false, + "showAvg": true, + "showTotal": false, + "showLatest": false + }, + "showTooltip": true, + "tooltipTrigger": "axis", + "tooltipLabelFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "tooltipLabelColor": "rgba(0, 0, 0, 0.76)", + "tooltipValueFont": { + "family": "Roboto", + "size": 12, + "sizeUnit": "px", + "style": "normal", + "weight": "500", + "lineHeight": "16px" + }, + "tooltipValueColor": "rgba(0, 0, 0, 0.76)", + "tooltipValueFormatter": null, + "tooltipShowDate": true, + "tooltipDateFormat": { + "format": null, + "lastUpdateAgo": false, + "custom": false, + "auto": true, + "autoDateFormatSettings": {} + }, + "tooltipDateFont": { + "family": "Roboto", + "size": 11, + "sizeUnit": "px", + "style": "normal", + "weight": "400", + "lineHeight": "16px" + }, + "tooltipDateColor": "rgba(0, 0, 0, 0.76)", + "tooltipDateInterval": true, + "tooltipBackgroundColor": "rgba(255, 255, 255, 0.76)", + "tooltipBackgroundBlur": 4, + "animation": { + "animation": true, + "animationThreshold": 2000, + "animationDuration": 500, + "animationEasing": "cubicOut", + "animationDelay": 0, + "animationDurationUpdate": 300, + "animationEasingUpdate": "cubicOut", + "animationDelayUpdate": 0 + }, + "background": { + "type": "color", + "color": "#fff", + "overlay": { + "enabled": false, + "color": "rgba(255,255,255,0.72)", + "blur": 3 + } + }, + "padding": "12px" + }, + "title": "Machine resources", + "dropShadow": true, + "enableFullscreen": false, + "titleStyle": null, + "mobileHeight": null, + "configMode": "advanced", + "actions": {}, + "showTitleIcon": false, + "titleIcon": "thermostat", + "iconColor": "#1F6BDD", + "useDashboardTimewindow": false, + "displayTimewindow": true, + "titleFont": { + "size": 16, + "sizeUnit": "px", + "family": "Roboto", + "weight": "500", + "style": "normal", + "lineHeight": "24px" + }, + "titleColor": "rgba(0, 0, 0, 0.87)", + "titleTooltip": "", + "widgetStyle": {}, + "widgetCss": "", + "pageSize": 1024, + "units": "", + "decimals": null, + "noDataDisplayMessage": "", + "timewindowStyle": { + "showIcon": false, + "iconSize": "24px", + "icon": null, + "iconPosition": "left", + "font": { + "size": 12, + "sizeUnit": "px", + "family": "Roboto", + "weight": "400", + "style": "normal", + "lineHeight": "16px" + }, + "color": "rgba(0, 0, 0, 0.38)", + "displayTypePrefix": true + }, + "margin": "0px", + "borderRadius": "5px", + "iconSize": "0px", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "7543e668-35b7-bb97-2f14-163399f8d038" + }, + "7f3ebf9f-d967-44fe-fbe4-4667a2abcf88": { + "typeFullFqn": "system.cards.markdown_card", + "type": "latest", + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [ + { + "name": "machineStats", + "type": "timeseries", + "label": "gwProcessCpuUsage", + "color": "#4caf50", + "settings": {}, + "_hash": 0.635089967416214, + "aggregationType": "NONE", + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.gwProcessCpuUsage ?? 0) : 0;" + }, + { + "name": "machineStats", + "type": "timeseries", + "label": "status", + "color": "#f44336", + "settings": {}, + "_hash": 0.07814671673811158, + "aggregationType": "NONE", + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "const usage = value ? (JSON.parse(value)?.gwProcessCpuUsage ?? 0) : 0;\nlet status = 'status-ok';\nif (usage > 85) {\n status = 'status-critical';\n} else if (usage > 75) {\n status = 'status-warn';\n}\nreturn status;" + }, + { + "name": "machineStats", + "type": "timeseries", + "label": "statusTooltip", + "color": "#ffc107", + "settings": {}, + "_hash": 0.9557245489511306, + "aggregationType": "NONE", + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "const usage = value ? (JSON.parse(value)?.gwProcessCpuUsage ?? 0) : 0;\nlet text = '';\nif (usage > 85) {\n text = '{{ \\'widgets.system-info.cpu-critical-text\\' | translate }}';\n} else if (usage > 75) {\n text = '{{ \\'widgets.system-info.cpu-warning-text\\' | translate }}';\n}\nreturn text;" + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + } + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1733155841882, + "endTimeMs": 1733242241882 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "16px", + "settings": { + "useMarkdownTextFunction": false, + "markdownTextPattern": "
\n
\n
widgets.system-info.cpu
\n
\n
\n
\n ${gwProcessCpuUsage:1}%\n | 1 core\n
\n
", + "markdownTextFunction": "return '# Some title\\n - Entity name: ' + data[0]['entityName'];", + "applyDefaultMarkdownStyle": false, + "markdownCss": ".tb-card-content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n}\n\n.tb-card-title {\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n font-size: 1.5rem;\n}\n\n.tb-status {\n width: 24px;\n height: 24px;\n position: relative;\n}\n\n.tb-status.status-ok {\n background: #F3F6FA;\n border-radius: 4px;\n}\n\n.tb-status:after {\n position: absolute;\n top: 2px;\n left: 2px;\n font-family: 'Material Icons Round';\n font-size: 20px;\n line-height: 1;\n}\n\n.tb-status.status-ok:after {\n content: \"check\";\n color: #198038;\n font-weight: 600;\n}\n\n.tb-status.status-warn:after {\n content: \"warning\";\n color: #FAA405;\n}\n\n.tb-status.status-critical:after {\n content: \"warning\";\n color: #D12730;\n}\n\n.tb-value-container {\n user-select: none;\n}\n\n.tb-count {\n font-style: normal;\n font-weight: 500;\n font-size: 26px;\n line-height: 36px;\n}\n\n.tb-total {\n padding-left: 4px;\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n color: rgba(0, 0, 0, 0.54);\n}\n\n@media screen and (min-width: 960px) and (max-width: 1819px) {\n .tb-status {\n width: 1.25rem;\n height: 1.25rem;\n }\n .tb-status:after {\n font-size: 1rem;\n }\n .tb-count {\n font-size: 1.25rem;\n line-height: 24px;\n }\n .tb-total {\n font-size: 11px;\n line-height: 16px;\n }\n}" + }, + "title": "Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": false, + "widgetStyle": {}, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "useDashboardTimewindow": true, + "displayTimewindow": true, + "borderRadius": "5px", + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "7f3ebf9f-d967-44fe-fbe4-4667a2abcf88" + }, + "ea75a492-d149-9a53-b45f-840a0ce42a40": { + "typeFullFqn": "system.cards.markdown_card", + "type": "latest", + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [ + { + "name": "machineStats", + "type": "timeseries", + "label": "gwMemory", + "color": "#4caf50", + "settings": {}, + "_hash": 0.635089967416214, + "aggregationType": "NONE", + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.gwMemory ?? 0) : 0;" + }, + { + "name": "machineStats", + "type": "timeseries", + "label": "status", + "color": "#f44336", + "settings": {}, + "_hash": 0.07814671673811158, + "aggregationType": "NONE", + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "const usage = value ? (JSON.parse(value)?.gwMemory ?? 0) : 0;\nlet status = 'status-ok';\nif (usage > 85) {\n status = 'status-critical';\n} else if (usage > 75) {\n status = 'status-warn';\n}\nreturn status;" + }, + { + "name": "machineStats", + "type": "timeseries", + "label": "statusTooltip", + "color": "#ffc107", + "settings": {}, + "_hash": 0.9557245489511306, + "aggregationType": "NONE", + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "const usage = value ? (JSON.parse(value)?.gwMemory ?? 0) : 0;\nlet text = '';\nif (usage > 85) {\n text = '{{ \\'widgets.system-info.ram-critical-text\\' | translate }}';\n} else if (usage > 75) {\n text = '{{ \\'widgets.system-info.ram-warning-text\\' | translate }}';\n}\nreturn text;" + }, + { + "name": "totalMemory", + "type": "attribute", + "label": "totalMemory", + "color": "#ffc107", + "settings": {}, + "_hash": 0.4893025210001585, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value || '0G';" + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + } + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1733155841882, + "endTimeMs": 1733242241882 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "16px", + "settings": { + "useMarkdownTextFunction": false, + "markdownTextPattern": "
\n
\n
widgets.system-info.ram
\n
\n
\n
\n ${gwMemory:1}%\n | ${totalMemory}\n
\n
", + "markdownTextFunction": "return '# Some title\\n - Entity name: ' + data[0]['entityName'];", + "applyDefaultMarkdownStyle": false, + "markdownCss": ".tb-card-content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n}\n\n.tb-card-title {\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n font-size: 1.5rem;\n}\n\n.tb-status {\n width: 24px;\n height: 24px;\n position: relative;\n}\n\n.tb-status.status-ok {\n background: #F3F6FA;\n border-radius: 4px;\n}\n\n.tb-status:after {\n position: absolute;\n top: 2px;\n left: 2px;\n font-family: 'Material Icons Round';\n font-size: 20px;\n line-height: 1;\n}\n\n.tb-status.status-ok:after {\n content: \"check\";\n color: #198038;\n font-weight: 600;\n}\n\n.tb-status.status-warn:after {\n content: \"warning\";\n color: #FAA405;\n}\n\n.tb-status.status-critical:after {\n content: \"warning\";\n color: #D12730;\n}\n\n.tb-value-container {\n user-select: none;\n}\n\n.tb-count {\n font-style: normal;\n font-weight: 500;\n font-size: 26px;\n line-height: 36px;\n}\n\n.tb-total {\n padding-left: 4px;\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n color: rgba(0, 0, 0, 0.54);\n}\n\n@media screen and (min-width: 960px) and (max-width: 1819px) {\n .tb-status {\n width: 1.25rem;\n height: 1.25rem;\n }\n .tb-status:after {\n font-size: 1rem;\n }\n .tb-count {\n font-size: 1.25rem;\n line-height: 24px;\n }\n .tb-total {\n font-size: 11px;\n line-height: 16px;\n }\n}" + }, + "title": "Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": false, + "widgetStyle": {}, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "useDashboardTimewindow": true, + "displayTimewindow": true, + "borderRadius": "5px", + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "ea75a492-d149-9a53-b45f-840a0ce42a40" + }, + "13b57ab5-e5ed-701c-4c67-5bb1198e9a53": { + "typeFullFqn": "system.cards.markdown_card", + "type": "latest", + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [ + { + "name": "machineStats", + "type": "timeseries", + "label": "diskUsage", + "color": "#4caf50", + "settings": {}, + "_hash": 0.635089967416214, + "aggregationType": "NONE", + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value ? (JSON.parse(value)?.diskUsage ?? 0) : 0;" + }, + { + "name": "machineStats", + "type": "timeseries", + "label": "status", + "color": "#f44336", + "settings": {}, + "_hash": 0.07814671673811158, + "aggregationType": "NONE", + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "const usage = value ? (JSON.parse(value)?.diskUsage ?? 0) : 0;\nlet status = 'status-ok';\nif (usage > 85) {\n status = 'status-critical';\n} else if (usage > 75) {\n status = 'status-warn';\n}\nreturn status;" + }, + { + "name": "machineStats", + "type": "timeseries", + "label": "statusTooltip", + "color": "#ffc107", + "settings": {}, + "_hash": 0.9557245489511306, + "aggregationType": "NONE", + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "const usage = value ? (JSON.parse(value)?.diskUsage ?? 0) : 0;\nlet text = '';\nif (usage > 85) {\n text = '{{ \\'widgets.system-info.disk-critical-text\\' | translate }}';\n} else if (usage > 75) {\n text = '{{ \\'widgets.system-info.disk-warning-text\\' | translate }}';\n}\nreturn text;" + }, + { + "name": "totalDisk", + "type": "attribute", + "label": "totalDisk", + "color": "#ffc107", + "settings": {}, + "_hash": 0.6337011250870808, + "aggregationType": null, + "units": null, + "decimals": null, + "funcBody": null, + "usePostProcessing": true, + "postFuncBody": "return value || '0G';" + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + } + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1733155841882, + "endTimeMs": 1733242241882 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "16px", + "settings": { + "useMarkdownTextFunction": false, + "markdownTextPattern": "
\n
\n
widgets.system-info.disk
\n
\n
\n
\n ${diskUsage:1}%\n | ${totalDisk}\n
\n
", + "markdownTextFunction": "return '# Some title\\n - Entity name: ' + data[0]['entityName'];", + "applyDefaultMarkdownStyle": false, + "markdownCss": ".tb-card-content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n align-items: flex-start;\n}\n\n.tb-card-title {\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n font-size: 1.5rem;\n}\n\n.tb-status {\n width: 24px;\n height: 24px;\n position: relative;\n}\n\n.tb-status.status-ok {\n background: #F3F6FA;\n border-radius: 4px;\n}\n\n.tb-status:after {\n position: absolute;\n top: 2px;\n left: 2px;\n font-family: 'Material Icons Round';\n font-size: 20px;\n line-height: 1;\n}\n\n.tb-status.status-ok:after {\n content: \"check\";\n color: #198038;\n font-weight: 600;\n}\n\n.tb-status.status-warn:after {\n content: \"warning\";\n color: #FAA405;\n}\n\n.tb-status.status-critical:after {\n content: \"warning\";\n color: #D12730;\n}\n\n.tb-value-container {\n user-select: none;\n}\n\n.tb-count {\n font-style: normal;\n font-weight: 500;\n font-size: 26px;\n line-height: 36px;\n}\n\n.tb-total {\n padding-left: 4px;\n font-weight: 500;\n font-size: 14px;\n line-height: 20px;\n color: rgba(0, 0, 0, 0.54);\n}\n\n@media screen and (min-width: 960px) and (max-width: 1819px) {\n .tb-status {\n width: 1.25rem;\n height: 1.25rem;\n }\n .tb-status:after {\n font-size: 1rem;\n }\n .tb-count {\n font-size: 1.25rem;\n line-height: 24px;\n }\n .tb-total {\n font-size: 11px;\n line-height: 16px;\n }\n}" + }, + "title": "Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": false, + "widgetStyle": {}, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "useDashboardTimewindow": true, + "displayTimewindow": true, + "borderRadius": "5px", + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "13b57ab5-e5ed-701c-4c67-5bb1198e9a53" + }, + "867613d5-9440-fac1-9156-cd8773df5c97": { + "typeFullFqn": "system.cards.markdown_card", + "type": "latest", + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "dataKeys": [] + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1733234218432, + "endTimeMs": 1733320618432 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "0", + "settings": { + "useMarkdownTextFunction": false, + "markdownTextPattern": "
\n \n
", + "markdownTextFunction": "return '# Some title\\n - Entity name: ' + data[0]['entityName'];", + "applyDefaultMarkdownStyle": false, + "markdownCss": ".tb-card-content {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n}" + }, + "title": "Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": false, + "enableFullscreen": false, + "widgetStyle": {}, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "867613d5-9440-fac1-9156-cd8773df5c97" + }, + "56274c38-33fc-fe9d-aa39-ff3e1215276b": { + "typeFullFqn": "system.cards.markdown_card", + "type": "latest", + "sizeX": 5, + "sizeY": 3.5, + "config": { + "datasources": [ + { + "type": "entity", + "name": "", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + } + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1732109250067, + "endTimeMs": 1732195650067 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "#fff", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "8px", + "settings": { + "useMarkdownTextFunction": true, + "markdownTextPattern": "let buttonsHtml = \"\" \nctx.actionsApi.getActionDescriptors('elementClick').forEach((btn, index)=>{\n let disabled = false;\n if (index == 2) {\n disabled = data[0] && data[0].RemoteLoggingLevel ? data[0].RemoteLoggingLevel == \"NONE\" : true;\n } else if (index == 4) {\n const conf = data[0].general_configuration ? JSON.parse(data[0].general_configuration) : {};\n disabled = !conf.remoteShell;\n }\n buttonsHtml += ``\n});\n\nreturn `
${buttonsHtml}
`;", + "markdownTextFunction": "const states = ['storage_statistics', 'machine_statistics'];\nconst currentState = ctx.stateController.getStateId();\nlet buttonsHtml = \"\";\nconst buttonName = \nctx.actionsApi.getActionDescriptors('elementClick').forEach((btn, index)=>{\n buttonsHtml += ``\n});\n\nreturn `
${buttonsHtml}
`;", + "applyDefaultMarkdownStyle": false, + "markdownCss": ".action-buttons-container {\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: row;\r\n height: 100%;\r\n width: 100%;\r\n align-content: start;\r\n}\r\n\r\nbutton {\r\n flex-grow: 1;\r\n margin: 10px;\r\n min-width: 150px;\r\n height: auto;\r\n line-height: 36px;\r\n}" + }, + "title": "Markdown/HTML Card", + "showTitleIcon": false, + "iconColor": "rgba(0, 0, 0, 0.87)", + "iconSize": "24px", + "titleTooltip": "", + "dropShadow": true, + "enableFullscreen": false, + "widgetStyle": {}, + "titleStyle": { + "fontSize": "16px", + "fontWeight": 400 + }, + "showLegend": false, + "useDashboardTimewindow": true, + "displayTimewindow": true, + "actions": { + "elementClick": [ + { + "name": "Storage", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "updateDashboardState", + "targetDashboardStateId": "storage_statistics", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "fc4c338d-5799-f7dc-9ecb-448e65f8045d" + }, + { + "name": "Machine", + "icon": "more_horiz", + "useShowWidgetActionFunction": null, + "showWidgetActionFunction": "return true;", + "type": "updateDashboardState", + "targetDashboardStateId": "machine_statistics", + "setEntityId": true, + "stateEntityParamName": null, + "openRightLayout": false, + "openInSeparateDialog": false, + "openInPopover": false, + "id": "b35fc758-b21a-f5d3-e968-3572f1bb9ad4" + } + ] + }, + "borderRadius": "5px", + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "margin": "16px 16px 0 0", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "56274c38-33fc-fe9d-aa39-ff3e1215276b" + }, + "38063fe5-1bd8-695b-a40b-92c1aed19831": { + "typeFullFqn": "system.gateway_widgets.gateway_status", + "type": "latest", + "sizeX": 7.5, + "sizeY": 3, + "config": { + "datasources": [ + { + "type": "entity", + "name": "function", + "entityAliasId": "a2f01c66-96cf-49c5-303f-e6f21c559ee8", + "dataKeys": [ + { + "name": "active", + "type": "attribute", + "label": "active", + "color": "#2196f3", + "settings": {}, + "_hash": 0.07932656697286933 + }, + { + "name": "lastDisconnectTime", + "type": "attribute", + "label": "lastDisconnectTime", + "color": "#4caf50", + "settings": {}, + "_hash": 0.06662431625551446 + }, + { + "name": "lastConnectTime", + "type": "attribute", + "label": "lastConnectTime", + "color": "#f44336", + "settings": {}, + "_hash": 0.28485659401606434 + } + ], + "alarmFilterConfig": { + "statusList": [ + "ACTIVE" + ] + } + } + ], + "timewindow": { + "displayValue": "", + "selectedTab": 0, + "realtime": { + "realtimeType": 1, + "interval": 1000, + "timewindowMs": 60000, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideQuickInterval": false + }, + "history": { + "historyType": 0, + "interval": 1000, + "timewindowMs": 60000, + "fixedTimewindow": { + "startTimeMs": 1733240126084, + "endTimeMs": 1733326526084 + }, + "quickInterval": "CURRENT_DAY", + "hideInterval": false, + "hideLastInterval": false, + "hideFixedInterval": false, + "hideQuickInterval": false + }, + "aggregation": { + "type": "AVG", + "limit": 25000 + } + }, + "showTitle": false, + "backgroundColor": "rgb(255, 255, 255)", + "color": "rgba(0, 0, 0, 0.87)", + "padding": "", + "settings": { + "cardHtml": "
HTML code here
", + "cardCss": ".card {\n font-weight: bold;\n font-size: 32px;\n color: #999;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n}" + }, + "title": "HTML Card", + "dropShadow": true, + "useDashboardTimewindow": true, + "displayTimewindow": true, + "enableFullscreen": false, + "margin": "16px 16px 16px 0", + "borderRadius": "5px", + "widgetStyle": {}, + "widgetCss": "", + "pageSize": 1024, + "noDataDisplayMessage": "", + "enableDataExport": false + }, + "row": 0, + "col": 0, + "id": "38063fe5-1bd8-695b-a40b-92c1aed19831" + } + }, + "states": { + "default": { + "name": "Gateway List", + "root": true, + "layouts": { + "main": { + "widgets": { + "23b9adc5-b3bd-040f-e5eb-a45925c73257": { + "sizeX": 48, + "sizeY": 23, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 48, + "margin": 12, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": true, + "mobileRowHeight": 70, + "outerMargin": true, + "layoutType": "default" + } + } + } + }, + "configuration": { + "name": "Configuration", + "root": false, + "layouts": { + "main": { + "widgets": { + "d4a1ffc4-c9f6-7b15-bca0-17feb58bac99": { + "sizeX": 24, + "sizeY": 11, + "row": 0, + "col": 0, + "mobileHeight": null + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 12, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": true, + "mobileRowHeight": 70, + "outerMargin": true, + "layoutType": "default" + } + } + } + }, + "connectors": { + "name": "Connectors", + "root": false, + "layouts": { + "main": { + "widgets": { + "02a05113-d878-b086-328e-75bd6f02b2bb": { + "sizeX": 24, + "sizeY": 12, + "row": 0, + "col": 0 + } + }, + "gridSettings": { + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 0, + "backgroundSizeMode": "100%", + "autoFillHeight": true, + "backgroundImageUrl": null, + "mobileAutoFillHeight": true, + "mobileRowHeight": 70, + "outerMargin": true, + "layoutType": "default" + } } } }, @@ -5610,7 +8697,8 @@ "backgroundImageUrl": null, "mobileAutoFillHeight": false, "mobileRowHeight": 70, - "outerMargin": true + "outerMargin": true, + "layoutType": "default" } } } @@ -5637,7 +8725,8 @@ "backgroundImageUrl": null, "mobileAutoFillHeight": true, "mobileRowHeight": 70, - "outerMargin": true + "outerMargin": true, + "layoutType": "default" } } } @@ -5664,41 +8753,8 @@ "backgroundImageUrl": null, "mobileAutoFillHeight": false, "mobileRowHeight": 70, - "outerMargin": true - } - } - } - }, - "statistics": { - "name": "Statistics", - "root": false, - "layouts": { - "main": { - "widgets": { - "9b88dc51-b186-90ef-5afb-9648e6e2ac9a": { - "sizeX": 48, - "sizeY": 12, - "row": 10, - "col": 0 - }, - "c50e294a-265a-d13c-c772-b56c4df953fe": { - "sizeX": 48, - "sizeY": 10, - "row": 0, - "col": 0, - "mobileOrder": 0 - } - }, - "gridSettings": { - "backgroundColor": "#eeeeee", - "columns": 48, - "margin": 12, - "backgroundSizeMode": "100%", - "autoFillHeight": true, - "backgroundImageUrl": null, - "mobileAutoFillHeight": false, - "mobileRowHeight": 70, - "outerMargin": true + "outerMargin": true, + "layoutType": "default" } } } @@ -5725,7 +8781,8 @@ "backgroundImageUrl": null, "mobileAutoFillHeight": false, "mobileRowHeight": 70, - "outerMargin": true + "outerMargin": true, + "layoutType": "default" } } } @@ -5768,7 +8825,8 @@ "backgroundImageUrl": null, "mobileAutoFillHeight": false, "mobileRowHeight": 70, - "outerMargin": true + "outerMargin": true, + "layoutType": "default" } } } @@ -5812,7 +8870,8 @@ "backgroundImageUrl": null, "mobileAutoFillHeight": false, "mobileRowHeight": 70, - "outerMargin": true + "outerMargin": true, + "layoutType": "default" } } } @@ -5839,7 +8898,8 @@ "autoFillHeight": true, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -5866,7 +8926,8 @@ "autoFillHeight": true, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -5893,7 +8954,8 @@ "autoFillHeight": true, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -5920,7 +8982,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -5947,7 +9010,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -5974,7 +9038,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -6001,7 +9066,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -6028,7 +9094,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -6055,7 +9122,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -6082,7 +9150,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -6109,7 +9178,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -6136,7 +9206,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -6163,7 +9234,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -6190,7 +9262,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -6217,7 +9290,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -6244,7 +9318,8 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, - "mobileRowHeight": 70 + "mobileRowHeight": 70, + "layoutType": "default" } } } @@ -6271,6 +9346,234 @@ "autoFillHeight": false, "backgroundImageUrl": null, "mobileAutoFillHeight": false, + "mobileRowHeight": 70, + "layoutType": "default" + } + } + } + }, + "storage_statistics": { + "name": "Storage statistics", + "root": false, + "layouts": { + "main": { + "widgets": { + "b4194e1e-97af-ed0b-a6a4-70011c71c579": { + "sizeX": 5, + "sizeY": 12, + "resizable": true, + "row": 0, + "col": 25, + "mobileOrder": 1, + "mobileHeight": 3 + }, + "3a005e49-327c-beaa-8d19-c36b833001f0": { + "sizeX": 25, + "sizeY": 14, + "row": 0, + "col": 0, + "resizable": true, + "mobileOrder": 2, + "mobileHeight": null + }, + "bc199c75-00da-ca8a-dd0d-16da97a9fa53": { + "sizeX": 5, + "sizeY": 2, + "row": 12, + "col": 25, + "resizable": true, + "preserveAspectRatio": false, + "mobileOrder": 3, + "mobileHeight": 2 + } + }, + "gridSettings": { + "layoutType": "default", + "backgroundColor": "#eeeeee", + "columns": 30, + "margin": 0, + "outerMargin": true, + "backgroundSizeMode": "100%", + "minColumns": 25, + "viewFormat": "grid", + "autoFillHeight": true, + "rowHeight": 70, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 + } + } + } + }, + "machine_statistics": { + "name": "Machine statistics", + "root": false, + "layouts": { + "main": { + "widgets": { + "867613d5-9440-fac1-9156-cd8773df5c97": { + "sizeX": 25, + "sizeY": 14, + "row": 0, + "col": 0, + "resizable": true, + "mobileOrder": 2, + "mobileHeight": null + }, + "56274c38-33fc-fe9d-aa39-ff3e1215276b": { + "sizeX": 5, + "sizeY": 12, + "resizable": true, + "row": 0, + "col": 25, + "mobileOrder": 1, + "mobileHeight": 3 + }, + "38063fe5-1bd8-695b-a40b-92c1aed19831": { + "sizeX": 5, + "sizeY": 2, + "row": 12, + "col": 25, + "resizable": true, + "mobileOrder": 3, + "mobileHeight": 2 + } + }, + "gridSettings": { + "layoutType": "default", + "backgroundColor": "#eeeeee", + "columns": 30, + "margin": 0, + "outerMargin": true, + "backgroundSizeMode": "100%", + "minColumns": 25, + "viewFormat": "grid", + "autoFillHeight": true, + "rowHeight": 70, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 + } + } + } + }, + "storage_statistics_info": { + "name": "Storage statistics info", + "root": false, + "layouts": { + "main": { + "widgets": { + "5f26fe0d-4417-31c6-0a98-8760cda909c5": { + "sizeX": 6, + "sizeY": 3, + "mobileHeight": 3, + "resizable": true, + "row": 0, + "col": 0, + "mobileOrder": 1 + }, + "dc060491-215c-3e63-edc2-66d52888735d": { + "sizeX": 6, + "sizeY": 3, + "mobileHeight": 3, + "resizable": true, + "row": 3, + "col": 0, + "mobileOrder": 2 + }, + "b37b2916-acd7-353b-6fbc-ceddac152ee8": { + "sizeX": 15, + "sizeY": 6, + "mobileHeight": 6, + "resizable": true, + "row": 0, + "col": 6, + "mobileOrder": 3 + }, + "b5ffefb2-9fb5-cf22-bba2-dba9a98891db": { + "sizeX": 21, + "sizeY": 7, + "mobileHeight": 6, + "resizable": true, + "row": 6, + "col": 0, + "mobileOrder": 4 + } + }, + "gridSettings": { + "layoutType": "default", + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 16, + "outerMargin": true, + "backgroundSizeMode": "100%", + "minColumns": 21, + "viewFormat": "grid", + "autoFillHeight": false, + "rowHeight": 70, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, + "mobileRowHeight": 70 + } + } + } + }, + "machine_statistics_info": { + "name": "Machine statistics info", + "root": false, + "layouts": { + "main": { + "widgets": { + "7543e668-35b7-bb97-2f14-163399f8d038": { + "sizeX": 21, + "sizeY": 9, + "mobileHeight": 6, + "resizable": true, + "row": 3, + "col": 0, + "mobileOrder": 4 + }, + "7f3ebf9f-d967-44fe-fbe4-4667a2abcf88": { + "sizeX": 7, + "sizeY": 3, + "resizable": true, + "row": 0, + "col": 0, + "mobileOrder": 1, + "mobileHeight": 2 + }, + "ea75a492-d149-9a53-b45f-840a0ce42a40": { + "sizeX": 7, + "sizeY": 3, + "resizable": true, + "row": 0, + "col": 7, + "mobileOrder": 2, + "mobileHeight": 2 + }, + "13b57ab5-e5ed-701c-4c67-5bb1198e9a53": { + "sizeX": 7, + "sizeY": 3, + "resizable": true, + "row": 0, + "col": 14, + "mobileOrder": 3, + "mobileHeight": 2 + } + }, + "gridSettings": { + "layoutType": "default", + "backgroundColor": "#eeeeee", + "columns": 24, + "margin": 16, + "outerMargin": true, + "backgroundSizeMode": "100%", + "minColumns": 21, + "viewFormat": "grid", + "autoFillHeight": false, + "rowHeight": 70, + "backgroundImageUrl": null, + "mobileAutoFillHeight": false, "mobileRowHeight": 70 } } @@ -6993,9 +10296,6 @@ } }, "timewindow": { - "hideInterval": false, - "hideLastInterval": false, - "hideQuickInterval": false, "hideAggregation": false, "hideAggInterval": false, "hideTimezone": false, @@ -7033,6 +10333,6 @@ "dashboardCss": "" } }, - "externalId": null, - "name": "Gateway" + "name": "ThingsBoard IoT Gateways", + "resources": null } \ No newline at end of file diff --git a/application/src/main/data/resources/js_modules/gateway-management-extension.js b/application/src/main/data/resources/js_modules/gateway-management-extension.js index c8145d0785..9af11f0601 100644 --- a/application/src/main/data/resources/js_modules/gateway-management-extension.js +++ b/application/src/main/data/resources/js_modules/gateway-management-extension.js @@ -1 +1,7 @@ -System.register(["@angular/core","@angular/material/sort","@angular/material/table","@angular/material/paginator","@shared/public-api","@angular/common","@core/public-api","@angular/forms","@angular/material/dialog","@ngrx/store","@angular/router","rxjs","rxjs/operators","tslib","@angular/material/tooltip","@ngx-translate/core","@angular/cdk/collections","@shared/components/dialog/json-object-edit-dialog.component","@shared/import-export/import-export.service","@shared/components/popover.service","@shared/decorators/coercion","@angular/material/core"],(function(e){"use strict";var t,n,a,r,i,o,s,l,p,c,d,m,u,g,h,y,f,v,b,x,C,w,S,E,T,I,k,M,P,F,O,q,B,N,R,_,D,V,A,G,j,L,U,z,K,H,Q,W,J,Y,X,Z,ee,te,ne,ae,re,ie,oe,se,le,pe,ce,de,me,ue,ge,he,ye,fe,ve,be,xe,Ce,we,Se,Ee,Te,Ie,ke,Me,Pe,Fe,Oe,qe,Be,Ne;return{setters:[function(e){t=e,n=e.inject,a=e.KeyValueDiffers,r=e.EventEmitter,i=e.forwardRef,o=e.ChangeDetectionStrategy,s=e.ɵNG_COMP_DEF},function(e){l=e.MatSort},function(e){p=e.MatTableDataSource},function(e){c=e.MatPaginator},function(e){d=e.Direction,m=e.PageLink,u=e.DataKeyType,g=e.SharedModule,h=e.LegendPosition,y=e.NULL_UUID,f=e.AttributeScope,v=e.DatasourceType,b=e.EntityType,x=e.widgetType,C=e.DialogComponent,w=e.coerceBoolean,S=e.emptyPageData,E=e.isClientSideTelemetryType,T=e.TelemetrySubscriber,I=e.coerceNumber,k=e.helpBaseUrl,M=e.ContentType,P=e.PageComponent,F=e.TbTableDatasource,O=e.HOUR,q=e.DeviceCredentialsType},function(e){B=e.CommonModule},function(e){N=e.deepClone,R=e,_=e.isDefinedAndNotNull,D=e.isLiteralObject,V=e.isEqual,A=e.WINDOW,G=e.deleteNullProperties,j=e.isNumber,L=e.isString,U=e.isUndefinedOrNull,z=e.isObject,K=e.generateSecret,H=e.camelCase,Q=e.deepTrim},function(e){W=e,J=e.Validators,Y=e.NG_VALUE_ACCESSOR,X=e.NG_VALIDATORS,Z=e.FormBuilder,ee=e.FormControl},function(e){te=e.MAT_DIALOG_DATA,ne=e},function(e){ae=e},function(e){re=e},function(e){ie=e.Subject,oe=e.fromEvent,se=e.BehaviorSubject,le=e.ReplaySubject,pe=e.of,ce=e.forkJoin},function(e){de=e.takeUntil,me=e.filter,ue=e.tap,ge=e.catchError,he=e.map,ye=e.publishReplay,fe=e.refCount,ve=e.take,be=e.startWith,xe=e.debounceTime,Ce=e.distinctUntilChanged,we=e.switchMap,Se=e.mergeMap},function(e){Ee=e.__decorate},function(e){Te=e,Ie=e.MatTooltip},function(e){ke=e,Me=e.TranslateModule},function(e){Pe=e.SelectionModel},function(e){Fe=e.JsonObjectEditDialogComponent},function(e){Oe=e},function(e){qe=e},function(e){Be=e.coerceBoolean},function(e){Ne=e.ErrorStateMatcher}],execute:function(){e("getDefaultConfig",bt);const Re=e("noLeadTrailSpacesRegex",/^\S+(?: \S+)*$/),_e=e("integerRegex",/^[-+]?\d+$/),De=e("nonZeroFloat",/^-?(?!0(\.0+)?$)\d+(\.\d+)?$/),Ve=e("jsonRequired",(e=>e.value?null:{required:!0}));var Ae,Ge,je;e("GatewayLogLevel",Ae),function(e){e.NONE="NONE",e.CRITICAL="CRITICAL",e.ERROR="ERROR",e.WARNING="WARNING",e.INFO="INFO",e.DEBUG="DEBUG",e.TRACE="TRACE"}(Ae||e("GatewayLogLevel",Ae={})),e("GatewayVersion",Ge),function(e){e.Current="3.6",e.v3_5_2="3.5.2",e.Legacy="legacy"}(Ge||e("GatewayVersion",Ge={})),e("ConnectorType",je),function(e){e.MQTT="mqtt",e.MODBUS="modbus",e.GRPC="grpc",e.OPCUA="opcua",e.BLE="ble",e.REQUEST="request",e.CAN="can",e.BACNET="bacnet",e.ODBC="odbc",e.REST="rest",e.SNMP="snmp",e.FTP="ftp",e.SOCKET="socket",e.XMPP="xmpp",e.OCPP="ocpp",e.CUSTOM="custom"}(je||e("ConnectorType",je={}));const Le=e("GatewayConnectorDefaultTypesTranslatesMap",new Map([[je.MQTT,"MQTT"],[je.MODBUS,"MODBUS"],[je.GRPC,"GRPC"],[je.OPCUA,"OPCUA"],[je.BLE,"BLE"],[je.REQUEST,"REQUEST"],[je.CAN,"CAN"],[je.BACNET,"BACNET"],[je.ODBC,"ODBC"],[je.REST,"REST"],[je.SNMP,"SNMP"],[je.FTP,"FTP"],[je.SOCKET,"SOCKET"],[je.XMPP,"XMPP"],[je.OCPP,"OCPP"],[je.CUSTOM,"CUSTOM"]]));var Ue={gateway:{address:"Address","address-required":"Address required","add-entry":"Add configuration","add-attribute":"Add attribute","add-attribute-update":"Add attribute update","add-attribute-request":"Add attribute request","add-key":"Add key","add-timeseries":"Add time series","add-mapping":"Add mapping","add-slave":"Add Slave",arguments:"Arguments","add-rpc-method":"Add method","add-rpc-request":"Add request","add-value":"Add argument",baudrate:"Baudrate","buffer-size":"Buffer size","buffer-size-required":"Buffer size is required",bytesize:"Bytesize",boolean:"Boolean",bit:"Bit","bit-target-type":"Bit target type","delete-value":"Delete value","delete-rpc-method":"Delete method","delete-rpc-request":"Delete request","delete-attribute-update":"Delete attribute update","delete-attribute-request":"Delete attribute request",advanced:"Advanced","add-device":"Add device","address-filter":"Address filter","address-filter-required":"Address filter is required","advanced-connection-settings":"Advanced connection settings",attributes:"Attributes","attribute-updates":"Attribute updates","attribute-on-platform":"Attribute on platform","attribute-requests":"Attribute requests","attribute-filter":"Attribute filter","attribute-filter-hint":"Filter for incoming attribute name from platform, supports regular expression.","attribute-filter-required":"Attribute filter required.","attribute-name-expression":"Attribute name expression","attribute-name-expression-required":"Attribute name expression required.","attribute-name-expression-hint":"Hint for Attribute name expression",basic:"Basic","byte-order":"Byte order","word-order":"Word order",broker:{connection:"Connection to broker",name:"Broker name","name-required":"Broker name required.","security-types":{anonymous:"Anonymous",basic:"Basic",certificates:"Certificates"}},"CA-certificate-path":"Path to CA certificate file","path-to-CA-cert-required":"Path to CA certificate file is required.","change-connector-title":"Confirm connector change","change-connector-text":"Switching connectors will discard any unsaved changes. Continue?","checking-device-activity":"Checking device activity",command:"Docker commands","command-copied-message":"Docker command has been copied to clipboard",configuration:"Configuration","add-connector":"Add connector","connector-add":"Add new connector","connector-enabled":"Enable connector","connector-name":"Connector name","connector-name-required":"Connector name is required.","connector-type":"Connector type","connector-type-required":"Connector type is required.",connectors:"Connectors","connectors-config":"Connectors configuration","connectors-table-enabled":"Enabled","connectors-table-name":"Name","connectors-table-type":"Type","connectors-table-status":"Status","connectors-table-actions":"Actions","connectors-table-key":"Key","connectors-table-class":"Class","connection-timeout":"Connection timeout (s)","connect-attempt-time":"Connect attempt time (ms)","connect-attempt-count":"Connect attempt count","copy-username":"Copy username","copy-password":"Copy password","copy-client-id":"Copy client ID","connector-created":"Connector created","connector-updated":"Connector updated","rpc-command-save-template":"Save Template","rpc-command-send":"Send","rpc-command-result":"Response","rpc-command-edit-params":"Edit parameters","gateway-configuration":"General Configuration","docker-label":"Use the following instruction to run IoT Gateway in Docker compose with credentials for selected device","install-docker-compose":"Use the instructions to download, install and setup docker compose",integer:"Integer",device:"Device",devices:"Devices","device-profile":"Device profile","device-info-settings":"Device info settings","device-info":{"entity-field":"Entity field",source:"Source",expression:"Value / Expression","expression-hint":"Show help",name:"Name","profile-name":"Profile name","device-name-expression":"Device name expression","device-name-expression-required":"Device name expression is required.","device-profile-expression-required":"Device profile expression is required."},"device-name-filter":"Device name filter","device-name-filter-hint":"This field supports Regular expressions to filter incoming data by device name.","device-name-filter-required":"Device name filter is required.",details:"Details","delete-mapping-title":"Delete mapping?","delete-slave-title":"Delete slave?","delete-device-title":"Delete device ?",divider:"Divider","download-configuration-file":"Download configuration file","download-docker-compose":"Download docker-compose.yml for your gateway","enable-remote-logging":"Enable remote logging","ellipsis-chips-text":"+ {{count}} more","launch-gateway":"Launch gateway","launch-docker-compose":"Start the gateway using the following command in the terminal from folder with docker-compose.yml file","logs-configuration":"Logs configuration","create-new-gateway":"Create a new gateway","create-new-gateway-text":"Are you sure you want create a new gateway with name: '{{gatewayName}}'?","created-time":"Created time","configuration-delete-dialog-header":"Configurations will be deleted","configuration-delete-dialog-body":"Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.

\nTo turn off configuration, enter gateway name below","configuration-delete-dialog-input":"Gateway name","configuration-delete-dialog-input-required":"Gateway name is mandatory","configuration-delete-dialog-confirm":"Turn Off","connector-duplicate-name":"Connector with such name already exists.","connection-type":"Connection type","connector-side":"Connector side","payload-type":"Payload type","platform-side":"Platform side",JSON:"JSON","JSON-hint":"Converter for this payload type processes MQTT messages in JSON format. It uses JSON Path expressions to extract vital details such as device names, device profile names, attributes, and time series from the message. And regular expressions to get device details from topics.",byte:"Byte",bytes:"Bytes","bytes-hint":"Converter for this payload type designed for binary MQTT payloads, this converter directly interprets binary data to retrieve device names and device profile names, along with attributes and time series, using specific byte positions for data extraction.",custom:"Custom","custom-hint":"This option allows you to use a custom converter for specific data tasks. You need to add your custom converter to the extension folder and enter its class name in the UI settings. Any keys you provide will be sent as configuration to your custom converter.","client-cert-path":"Path to client certificate file","path-to-client-cert-required":"Path to client certificate file is required.","client-id":"Client ID","data-conversion":"Data conversion","data-mapping":"Data mapping","data-mapping-hint":"Data mapping provides the capability to parse and convert the data received from a MQTT client in incoming messages into specific attributes and time series data keys.","opcua-data-mapping-hint":"Data mapping provides the capability to parse and convert the data received from a OPCUA server into specific data keys.",delete:"Delete configuration","delete-attribute":"Delete attribute","delete-key":"Delete key","delete-timeseries":"Delete time series",default:"Default","device-node":"Device node","device-node-required":"Device node required.","device-node-hint":"Path or identifier for device node on OPC UA server. Relative paths from it for attributes and time series can be used.","device-name":"Device name","device-profile-label":"Device profile","device-name-required":"Device name required","device-profile-required":"Device profile required","download-tip":"Download configuration file","drop-file":"Drop file here or",enable:"Enable",encoding:"Encoding","enable-subscription":"Enable subscription",extension:"Extension","extension-hint":"Put your converter classname in the field. Custom converter with such class should be in extension/mqtt folder.","extension-required":"Extension is required.","extension-configuration":"Extension configuration","extension-configuration-hint":"Configuration for convertor","fill-connector-defaults":"Fill configuration with default values","fill-connector-defaults-hint":"This property allows to fill connector configuration with default values on it's creation.","from-device-request-settings":"Input request parsing","from-device-request-settings-hint":"These fields support JSONPath expressions to extract a name from incoming message.","function-code":"Function code","function-codes":{"read-coils":"01 - Read Coils","read-discrete-inputs":"02 - Read Discrete Inputs","read-multiple-holding-registers":"03 - Read Multiple Holding Registers","read-input-registers":"04 - Read Input Registers","write-single-coil":"05 - Write Single Coil","write-single-holding-register":"06 - Write Single Holding Register","write-multiple-coils":"15 - Write Multiple Coils","write-multiple-holding-registers":"16 - Write Multiple Holding Registers"},"to-device-response-settings":"Output request processing","to-device-response-settings-hint":"For these fields you can use the following variables and they will be replaced with actual values: ${deviceName}, ${attributeKey}, ${attributeValue}",gateway:"Gateway","gateway-exists":"Device with same name is already exists.","gateway-name":"Gateway name","gateway-name-required":"Gateway name is required.","gateway-saved":"Gateway configuration successfully saved.","generate-client-id":"Generate Client ID",grpc:"GRPC","grpc-keep-alive-timeout":"Keep alive timeout (in ms)","grpc-keep-alive-timeout-required":"Keep alive timeout is required","grpc-keep-alive-timeout-min":"Keep alive timeout can not be less then 1","grpc-keep-alive-timeout-pattern":"Keep alive timeout is not valid","grpc-keep-alive":"Keep alive (in ms)","grpc-keep-alive-required":"Keep alive is required","grpc-keep-alive-min":"Keep alive can not be less then 1","grpc-keep-alive-pattern":"Keep alive is not valid","grpc-min-time-between-pings":"Min time between pings (in ms)","grpc-min-time-between-pings-required":"Min time between pings is required","grpc-min-time-between-pings-min":"Min time between pings can not be less then 1","grpc-min-time-between-pings-pattern":"Min time between pings is not valid","grpc-min-ping-interval-without-data":"Min ping interval without data (in ms)","grpc-min-ping-interval-without-data-required":"Min ping interval without data is required","grpc-min-ping-interval-without-data-min":"Min ping interval without data can not be less then 1","grpc-min-ping-interval-without-data-pattern":"Min ping interval without data is not valid","grpc-max-pings-without-data":"Max pings without data","grpc-max-pings-without-data-required":"Max pings without data is required","grpc-max-pings-without-data-min":"Max pings without data can not be less then 1","grpc-max-pings-without-data-pattern":"Max pings without data is not valid",info:"Info",identity:"Identity","inactivity-check-period-seconds":"Inactivity check period (in sec)","inactivity-check-period-seconds-required":"Inactivity check period is required","inactivity-check-period-seconds-min":"Inactivity check period can not be less then 1","inactivity-check-period-seconds-pattern":"Inactivity check period is not valid","inactivity-timeout-seconds":"Inactivity timeout (in sec)","inactivity-timeout-seconds-required":"Inactivity timeout is required","inactivity-timeout-seconds-min":"Inactivity timeout can not be less then 1","inactivity-timeout-seconds-pattern":"Inactivity timeout is not valid","unit-id":"Unit ID",host:"Host","host-required":"Host is required.",holding_registers:"Holding registers",coils_initializer:"Coils initializer",input_registers:"Input registers",discrete_inputs:"Discrete inputs","json-parse":"Not valid JSON.","json-required":"Field cannot be empty.","JSONPath-hint":"This field supports constants and JSONPath expressions.",logs:{logs:"Logs",days:"days",hours:"hours",minutes:"minutes",seconds:"seconds","date-format":"Date format","date-format-required":"Date format required","log-format":"Log format","log-type":"Log type","log-format-required":"Log format required",remote:"Remote logging","remote-logs":"Remote logs",local:"Local logging",level:"Log level","file-path":"File path","file-path-required":"File path required","saving-period":"Log saving period","saving-period-min":"Log saving period can not be less then 1","saving-period-required":"Log saving period required","backup-count":"Backup count","backup-count-min":"Backup count can not be less then 1","backup-count-required":"Backup count required"},"max-number-of-workers":"Max number of workers","max-number-of-workers-hint":"Maximal number of workers threads for converters \n(The amount of workers changes dynamically, depending on load) \nRecommended amount 50-150.","max-number-of-workers-required":"Max number of workers is required.","max-messages-queue-for-worker":"Max messages queue per worker","max-messages-queue-for-worker-hint":"Maximal messages count that will be in the queue \nfor each converter worker.","max-messages-queue-for-worker-required":"Max messages queue per worker is required.",method:"Method","method-name":"Method name","method-required":"Method name is required.","min-pack-send-delay":"Min pack send delay (in ms)","min-pack-send-delay-required":"Min pack send delay is required","min-pack-send-delay-min":"Min pack send delay can not be less then 10","min-pack-send-delay-pattern":"Min pack send delay is not valid",multiplier:"Multiplier",mode:"Mode","model-name":"Model name",modifier:"Modifier","modifier-invalid":"Modifier is not valid","mqtt-version":"MQTT version",name:"Name","name-required":"Name is required.","no-attributes":"No attributes","no-attribute-updates":"No attribute updates","no-attribute-requests":"No attribute requests","no-connectors":"No connectors","no-data":"No configurations","no-gateway-found":"No gateway found.","no-gateway-matching":" '{{item}}' not found.","no-timeseries":"No time series","no-keys":"No keys","no-value":"No arguments","no-rpc-methods":"No RPC methods","no-rpc-requests":"No RPC requests","path-hint":"The path is local to the gateway file system","path-logs":"Path to log files","path-logs-required":"Path is required.",password:"Password","password-required":"Password is required.","permit-without-calls":"Keep alive permit without calls","poll-period":"Poll period (ms)","poll-period-error":"Poll period should be at least {{min}} (ms).",port:"Port","port-required":"Port is required.","port-limits-error":"Port should be number from {{min}} to {{max}}.","private-key-path":"Path to private key file","path-to-private-key-required":"Path to private key file is required.",parity:"Parity","product-code":"Product code","product-name":"Product name",raw:"Raw",retain:"Retain","retain-hint":"This flag tells the broker to store the message for a topic\nand ensures any new client subscribing to that topic\nwill receive the stored message.",remote:"Remote configuration","remote-logging-level":"Logging level","remove-entry":"Remove configuration","remote-shell":"Remote shell","remote-configuration":"Remote Configuration","request-expression":"Request expression",retries:"Retries","retries-on-empty":"Retries on empty","retries-on-invalid":"Retries on invalid",rpc:{title:"{{type}} Connector RPC parameters","templates-title":"Connector RPC Templates",methodFilter:"Method filter","method-name":"Method name",requestTopicExpression:"Request topic expression",responseTopicExpression:"Response topic expression",responseTimeout:"Response timeout",valueExpression:"Value expression",tag:"Tag",type:"Type",functionCode:"Function Code",objectsCount:"Objects Count",address:"Address",method:"Method",requestType:"Request Type",requestTimeout:"Request Timeout",objectType:"Object type",identifier:"Identifier",propertyId:"Property ID",methodRPC:"Method RPC name",withResponse:"With Response",characteristicUUID:"Characteristic UUID",methodProcessing:"Method Processing",nodeID:"Node ID",isExtendedID:"Is Extended ID",isFD:"Is FD",bitrateSwitch:"Bitrate Switch",dataInHEX:"Data In HEX",dataLength:"Data Length",dataByteorder:"Data Byte Order",dataBefore:"Data Before",dataAfter:"Data After",dataExpression:"Data Expression",oid:"OID","add-oid":"Add OID","add-header":"Add header","add-security":"Add security",remove:"Remove",requestFilter:"Request Filter",requestUrlExpression:"Request URL Expression",httpMethod:"HTTP Method",timeout:"Timeout",tries:"Tries",httpHeaders:"HTTP Headers","header-name":"Header name",hint:{"modbus-response-reading":"RPC response will return all subtracted values from all connected devices when the reading functions are selected.","modbus-writing-functions":"RPC will write a filled value to all connected devices when the writing functions are selected.","opc-method":"A filled method name is the OPC-UA method that will processed on the server side (make sure your node has the requested method)."},"security-name":"Security name",value:"Value",security:"Security",responseValueExpression:"Response Value Expression",requestValueExpression:"Request Value Expression",arguments:"Arguments","add-argument":"Add argument","write-property":"Write property","read-property":"Read property","analog-output":"Analog output","analog-input":"Analog input","binary-output":"Binary output","binary-input":"Binary input","binary-value":"Binary value","analog-value":"Analog value",write:"Write",read:"Read",scan:"Scan",oids:"OIDS",set:"Set",multiset:"Multiset",get:"Get","bulk-walk":"Bulk walk",table:"Table","multi-get":"Multiget","get-next":"Get next","bulk-get":"Bulk get",walk:"Walk","save-template":"Save template","template-name":"Template name","template-name-required":"Template name is required.","template-name-duplicate":"Template with such name already exists, it will be updated.",command:"Command",params:"Params","json-value-invalid":"JSON value has an invalid format"},"rpc-methods":"RPC methods","rpc-requests":"RPC requests",request:{"connect-request":"Connect request","disconnect-request":"Disconnect request","attribute-request":"Attribute request","attribute-update":"Attribute update","rpc-connection":"RPC command"},"request-type":"Request type","requests-mapping":"Requests mapping","requests-mapping-hint":"MQTT Connector requests allows you to connect, disconnect, process attribute requests from the device, handle attribute updates on the server and RPC processing configuration.","request-topic-expression":"Request topic expression","request-client-certificate":"Request client certificate","request-topic-expression-required":"Request topic expression is required.","response-timeout":"Response timeout (ms)","response-timeout-required":"Response timeout is required.","response-timeout-limits-error":"Timeout must be more then {{min}} ms.","response-topic-Qos":"Response topic QoS","response-topic-Qos-hint":"MQTT Quality of Service (QoS) is an agreement between the message sender and receiver that defines the level of delivery guarantee for a specific message.","response-topic-expression":"Response topic expression","response-topic-expression-required":"Response topic expression is required.","response-value-expression":"Response value expression","response-value-expression-required":"Response value expression is required.","vendor-name":"Vendor name","vendor-url":"Vendor URL",value:"Value",values:"Values","value-required":"Value is required.","value-expression":"Value expression","value-expression-required":"Value expression is required.","with-response":"With response","without-response":"Without response",other:"Other",socket:"Socket","save-tip":"Save configuration file","scan-period":"Scan period (ms)","scan-period-error":"Scan period should be at least {{min}} (ms).","sub-check-period":"Subscription check period (ms)","sub-check-period-error":"Subscription check period should be at least {{min}} (ms).",security:"Security","security-policy":"Security policy","security-type":"Security type","security-types":{"access-token":"Access Token","username-password":"Username and Password",tls:"TLS","tls-access-token":"TLS + Access Token","tls-private-key":"TLS + Private Key"},"select-connector":"Select connector to display config","send-change-data":"Send data only on change","send-data-to-platform":"Send data to platform","send-data-on-change":"Send data only on change","send-change-data-hint":"The values will be saved to the database only if they are different from the corresponding values in the previous converted message. This functionality applies to both attributes and time series in the converter output.",server:"Server","server-hostname":"Server hostname","server-slave":"Server (Slave)","servers-slaves":"Servers (Slaves)","server-port":"Server port","server-url":"Server endpoint url","server-connection":"Server Connection","server-config":"Server configuration","server-slave-config":"Server (Slave) configuration","server-url-required":"Server endpoint url is required.",stopbits:"Stopbits",strict:"Strict",set:"Set","show-map":"Show map",statistics:{statistic:"Statistic",statistics:"Statistics","statistic-commands-empty":'No configured statistic keys found. You can configure them in "Statistics" tab in general configuration.',"statistics-button":"Go to configuration",commands:"Commands","send-period":"Statistic send period (in sec)","send-period-required":"Statistic send period is required","send-period-min":"Statistic send period can not be less then 60","send-period-pattern":"Statistic send period is not valid","check-connectors-configuration":"Check connectors configuration (in sec)","max-payload-size-bytes":"Max payload size in bytes","max-payload-size-bytes-required":"Max payload size in bytes is required","max-payload-size-bytes-min":"Max payload size in bytes can not be less then 100","max-payload-size-bytes-pattern":"Max payload size in bytes is not valid","min-pack-size-to-send":"Min packet size to send","min-pack-size-to-send-required":"Min packet size to send is required","min-pack-size-to-send-min":"Min packet size to send can not be less then 100","min-pack-size-to-send-pattern":"Min packet size to send is not valid","check-connectors-configuration-required":"Check connectors configuration is required","check-connectors-configuration-min":"Check connectors configuration can not be less then 1","check-connectors-configuration-pattern":"Check connectors configuration is not valid",add:"Add command",timeout:"Timeout (in sec)","timeout-required":"Timeout is required","timeout-min":"Timeout can not be less then 1","timeout-pattern":"Timeout is not valid","attribute-name":"Attribute name","attribute-name-required":"Attribute name is required",command:"Command","command-required":"Command is required","command-pattern":"Command is not valid",remove:"Remove command"},storage:"Storage","storage-max-file-records":"Maximum records in file","storage-max-files":"Maximum number of files","storage-max-files-min":"Minimum number is 1.","storage-max-files-pattern":"Number is not valid.","storage-max-files-required":"Number is required.","storage-max-records":"Maximum records in storage","storage-max-records-min":"Minimum number of records is 1.","storage-max-records-pattern":"Number is not valid.","storage-max-records-required":"Maximum records is required.","storage-read-record-count":"Read record count in storage","storage-read-record-count-min":"Minimum number of records is 1.","storage-read-record-count-pattern":"Number is not valid.","storage-read-record-count-required":"Read record count is required.","storage-max-read-record-count":"Max read record count in storage","storage-max-read-record-count-min":"Minimum number of records is 1.","storage-max-read-record-count-pattern":"Number is not valid.","storage-max-read-record-count-required":"Max Read record count is required.","storage-data-folder-path":"Data folder path","storage-data-folder-path-required":"Data folder path is required.","storage-pack-size":"Maximum event pack size","storage-pack-size-min":"Minimum number is 1.","storage-pack-size-pattern":"Number is not valid.","storage-pack-size-required":"Maximum event pack size is required.","storage-path":"Storage path","storage-path-required":"Storage path is required.","storage-type":"Storage type","storage-types":{"file-storage":"File storage","memory-storage":"Memory storage",sqlite:"SQLITE"},"report-strategy":{label:"Report strategy","on-change":"On value change","on-report-period":"On report period","on-change-or-report-period":"On value change or report period","report-period":"Report period","on-received":"On received"},"source-type":{msg:"Extract from message",topic:"Extract from topic",const:"Constant",identifier:"Identifier",path:"Path"},"workers-settings":"Workers settings",thingsboard:"ThingsBoard",general:"General",timeseries:"Time series",key:"Key",keys:"Keys","key-required":"Key is required.","thingsboard-host":"Platform host","thingsboard-host-required":"Host is required.","thingsboard-port":"Platform port","thingsboard-port-max":"Maximum port number is 65535.","thingsboard-port-min":"Minimum port number is 1.","thingsboard-port-pattern":"Port is not valid.","thingsboard-port-required":"Port is required.",tidy:"Tidy","tidy-tip":"Tidy config JSON",timeout:"Timeout (ms)","timeout-error":"Timeout should be at least {{min}} (ms).","title-connectors-json":"Connector {{typeName}} configuration",type:"Type","topic-filter":"Topic filter","topic-required":"Topic filter is required.","tls-path-ca-certificate":"Path to CA certificate on gateway","tls-path-client-certificate":"Path to client certificate on gateway","tls-connection":"TLS Connection","master-connections":"Master Connections","method-filter":"Method filter","method-filter-hint":"Regular expression to filter incoming RPC method from platform.","method-filter-required":"Method filter is required.","messages-ttl-check-in-hours":"Messages TTL check in hours","messages-ttl-check-in-hours-required":"Messages TTL check in hours is required.","messages-ttl-check-in-hours-min":"Min number is 1.","messages-ttl-check-in-hours-pattern":"Number is not valid.","messages-ttl-in-days":"Messages TTL in days","messages-ttl-in-days-required":"Messages TTL in days is required.","messages-ttl-in-days-min":"Min number is 1.","messages-ttl-in-days-pattern":"Number is not valid.","mqtt-qos":"QoS","mqtt-qos-required":"QoS is required","mqtt-qos-range":"QoS values range is from 0 to 1",qos:{"at-most-once":"0 - At most once","at-least-once":"1 - At least once","exactly-once":"2 - Exactly once"},"objects-count":"Objects count","objects-count-required":"Objects count is required","wait-after-failed-attempts":"Wait after failed attempts (ms)","tls-path-private-key":"Path to private key on gateway","toggle-fullscreen":"Toggle fullscreen","transformer-json-config":"Configuration JSON*","update-config":"Add/update configuration JSON",username:"Username","username-required":"Username is required.","unit-id-required":"Unit ID is required.","write-coil":"Write Coil","write-coils":"Write Coils","write-register":"Write Register","write-registers":"Write Registers",hints:{encoding:"Encoding used for writing received string data to storage.","modbus-master":"Configuration sections for connecting to Modbus servers and reading data from them.","modbus-server":"Configuration section for the Modbus server, storing data and sending updates to the platform when changes occur or at fixed intervals.","remote-configuration":"Enables remote configuration and management of the gateway","remote-shell":"Enables remote control of the operating system with the gateway from the Remote Shell widget",host:"Hostname or IP address of platform server",port:"Port of MQTT service on platform server",token:"Access token for the gateway from platform server","client-id":"MQTT client id for the gateway form platform server",username:"MQTT username for the gateway form platform server",password:"MQTT password for the gateway form platform server","ca-cert":"Path to CA certificate file","date-form":"Date format in log message","data-folder":"Path to the folder that will contain data (Relative or Absolute)","log-format":"Log message format","remote-log":"Enables remote logging and logs reading from the gateway","backup-count":"If backup count is > 0, when a rollover is done, no more than backup count files are kept - the oldest ones are deleted",storage:"Provides configuration for saving incoming data before it is sent to the platform","max-file-count":"Maximum number of files that will be created","max-read-count":"Number of messages to retrieve from the storage and send to platform","max-records":"Maximum count of records that will be stored in one file","read-record-count":"Number of messages to retrieve from the storage and send to platform","max-records-count":"Maximum number of data entries in storage before sending to platform","ttl-check-hour":"How often will the Gateway check data for obsolescence","ttl-messages-day":"Maximum number of days that the storage will retain data",commands:"Commands for collecting additional statistic",attribute:"Statistic telemetry key",timeout:"Timeout for command executing",command:"The result of the command execution, will be used as the value for telemetry","check-device-activity":"Enables monitor the activity of each connected device","inactivity-timeout":"Time after whose the gateway will disconnect device","inactivity-period":"Periodicity of device activity check","minimal-pack-delay":"Delay between sending packs of messages (Decreasing this setting results in increased CPU usage)",qos:"Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)","server-port":"Network port on which GRPC server will listen for incoming connections.","grpc-keep-alive-timeout":"Maximum time the server should wait for a keepalive ping response before considering the connection dead.","grpc-keep-alive":"Duration between two successive keepalive ping messages when there is no active RPC call.","grpc-min-time-between-pings":"Minimum amount of time the server should wait between sending keepalive ping messages","grpc-max-pings-without-data":"Maximum number of keepalive ping messages that the server can send without receiving any data before it considers the connection dead.","grpc-min-ping-interval-without-data":"Minimum amount of time the server should wait between sending keepalive ping messages when there is no data being sent or received.","permit-without-calls":"Allow server to keep the GRPC connection alive even when there are no active RPC calls.","path-in-os":"Path in gateway os.",memory:"Your data will be stored in the in-memory queue, it is a fastest but no persistence guarantee.",file:"Your data will be stored in separated files and will be saved even after the gateway restart.",sqlite:"Your data will be stored in file based database. And will be saved even after the gateway restart.","opc-timeout":"Timeout in milliseconds for connecting to OPC-UA server.","security-policy":"Security Policy defines the security mechanisms to be applied.","scan-period":"Period in milliseconds to rescan the server.","sub-check-period":"Period to check the subscriptions in the OPC-UA server.","enable-subscription":"If true - the gateway will subscribe to interesting nodes and wait for data update and if false - the gateway will rescan OPC-UA server every scanPeriodInMillis.","show-map":"Show nodes on scanning.","method-name":"Name of method on OPC-UA server.",arguments:"Arguments for the method (will be overwritten by arguments from the RPC request).","min-pack-size-to-send":"Minimum package size for sending.","max-payload-size-bytes":"Maximum package size in bytes","poll-period":"Period in milliseconds to read data from nodes.",socket:{"attribute-on-platform-required":"Attribute on platform is required","attribute-requests-type":"The type of requested attribute can be “shared” or “client.","with-response":"Boolean flag that specifies whether to send a response back to ThingsBoard.",key:"Name for telemetry on platform."},modbus:{"bit-target-type":"The response type can be either an integer (1/0) or a boolean (True/False).",bit:"Specify the index of the bit to read from the array, or leave it blank to read the entire array.","max-bit":"The bit value must not exceed the objects count.","framer-type":"Type of a framer (Socket, RTU, or ASCII), if needed.",host:"Hostname or IP address of Modbus server.",port:"Modbus server port for connection.","unit-id":"Modbus slave ID.","connection-timeout":"Connection timeout (in seconds) for the Modbus server.","byte-order":"Byte order for reading data.","word-order":"Word order when reading multiple registers.",retries:"Retrying data transmission to the master. Acceptable values: true or false.","retries-on-empty":"Retry sending data to the master if the data is empty.","retries-on-invalid":"Retry sending data to the master if it fails.","poll-period":"Period in milliseconds to check attributes and telemetry on the slave.","connect-attempt-time":"A waiting period in milliseconds before establishing a connection to the master.","connect-attempt-count":"The number of connection attempts made through the gateway.","wait-after-failed-attempts":"A waiting period in milliseconds before attempting to send data to the master.","serial-port":"Serial port for connection.",baudrate:"Baud rate for the serial device.",stopbits:"The number of stop bits sent after each character in a message to indicate the end of the byte.",bytesize:"The number of bits in a byte of serial data. This can be one of 5, 6, 7, or 8.",parity:"The type of checksum used to verify data integrity. Options: (E)ven, (O)dd, (N)one.",strict:"Use inter-character timeout for baudrates ≤ 19200.","objects-count":"Depends on the selected type.",address:"Register address to verify.",key:"Key to be used as the attribute key for the platform instance.","data-keys":"For more information about function codes and data types click on help icon",modifier:"The retrieved value will be adjusted (by multiplying or dividing it) based on the specified modifier value."}}}},$e={"add-entry":"إضافة تكوين",advanced:"متقدم","checking-device-activity":"فحص نشاط الجهاز",command:"أوامر Docker","command-copied-message":"تم نسخ أمر Docker إلى الحافظة",configuration:"التكوين","connector-add":"إضافة موصل جديد","connector-enabled":"تمكين الموصل","connector-name":"اسم الموصل","connector-name-required":"اسم الموصل مطلوب.","connector-type":"نوع الموصل","connector-type-required":"نوع الموصل مطلوب.",connectors:"الموصلات","connectors-config":"تكوينات الموصلات","connectors-table-enabled":"ممكّن","connectors-table-name":"الاسم","connectors-table-type":"النوع","connectors-table-status":"الحالة","connectors-table-actions":"الإجراءات","connectors-table-key":"المفتاح","connectors-table-class":"الفئة","rpc-command-send":"إرسال","rpc-command-result":"الاستجابة","rpc-command-edit-params":"تحرير المعلمات","gateway-configuration":"تكوين عام","docker-label":"استخدم التعليمات التالية لتشغيل IoT Gateway في Docker compose مع بيانات اعتماد للجهاز المحدد","install-docker-compose":"استخدم التعليمات لتنزيل وتثبيت وإعداد docker compose","download-configuration-file":"تنزيل ملف التكوين","download-docker-compose":"تنزيل docker-compose.yml لبوابتك","launch-gateway":"تشغيل البوابة","launch-docker-compose":"بدء تشغيل البوابة باستخدام الأمر التالي في الطرفية من المجلد الذي يحتوي على ملف docker-compose.yml","create-new-gateway":"إنشاء بوابة جديدة","create-new-gateway-text":"هل أنت متأكد أنك تريد إنشاء بوابة جديدة باسم: '{{gatewayName}}'؟","created-time":"وقت الإنشاء","configuration-delete-dialog-header":"سيتم حذف التكوينات","configuration-delete-dialog-body":"يمكن تعطيل التكوين عن بُعد فقط إذا كان هناك وصول جسدي إلى البوابة. ستتم حذف جميع التكوينات السابقة.

\n لتعطيل التكوين، أدخل اسم البوابة أدناه","configuration-delete-dialog-input":"اسم البوابة","configuration-delete-dialog-input-required":"اسم البوابة إلزامي","configuration-delete-dialog-confirm":"إيقاف التشغيل",delete:"حذف التكوين","download-tip":"تنزيل ملف التكوين","drop-file":"أفلق الملف هنا أو",gateway:"البوابة","gateway-exists":"الجهاز بنفس الاسم موجود بالفعل.","gateway-name":"اسم البوابة","gateway-name-required":"اسم البوابة مطلوب.","gateway-saved":"تم حفظ تكوين البوابة بنجاح.",grpc:"GRPC","grpc-keep-alive-timeout":"مهلة البقاء على قيد الحياة (بالمللي ثانية)","grpc-keep-alive-timeout-required":"مهلة البقاء على قيد الحياة مطلوبة","grpc-keep-alive-timeout-min":"مهلة البقاء على قيد الحياة لا يمكن أن تكون أقل من 1","grpc-keep-alive-timeout-pattern":"مهلة البقاء على قيد الحياة غير صالحة","grpc-keep-alive":"البقاء على قيد الحياة (بالمللي ثانية)","grpc-keep-alive-required":"البقاء على قيد الحياة مطلوب","grpc-keep-alive-min":"البقاء على قيد الحياة لا يمكن أن يكون أقل من 1","grpc-keep-alive-pattern":"البقاء على قيد الحياة غير صالح","grpc-min-time-between-pings":"الحد الأدنى للوقت بين البينغات (بالمللي ثانية)","grpc-min-time-between-pings-required":"الحد الأدنى للوقت بين البينغات مطلوب","grpc-min-time-between-pings-min":"الحد الأدنى للوقت بين البينغات لا يمكن أن يكون أقل من 1","grpc-min-time-between-pings-pattern":"الحد الأدنى للوقت بين البينغات غير صالح","grpc-min-ping-interval-without-data":"الحد الأدنى لفاصل البينغ بدون بيانات (بالمللي ثانية)","grpc-min-ping-interval-without-data-required":"الحد الأدنى لفاصل البينغ بدون بيانات مطلوب","grpc-min-ping-interval-without-data-min":"الحد الأدنى لفاصل البينغ بدون بيانات لا يمكن أن يكون أقل من 1","grpc-min-ping-interval-without-data-pattern":"الحد الأدنى لفاصل البينغ بدون بيانات غير صالح","grpc-max-pings-without-data":"الحد الأقصى لعدد البينغات بدون بيانات","grpc-max-pings-without-data-required":"الحد الأقصى لعدد البينغات بدون بيانات مطلوب","grpc-max-pings-without-data-min":"الحد الأقصى لعدد البينغات بدون بيانات لا يمكن أن يكون أقل من 1","grpc-max-pings-without-data-pattern":"الحد الأقصى لعدد البينغات بدون بيانات غير صالح","inactivity-check-period-seconds":"فترة فحص الخمول (بالثواني)","inactivity-check-period-seconds-required":"فترة فحص الخمول مطلوبة","inactivity-check-period-seconds-min":"فترة فحص الخمول لا يمكن أن تكون أقل من 1","inactivity-check-period-seconds-pattern":"فترة فحص الخمول غير صالحة","inactivity-timeout-seconds":"فترة الخمول (بالثواني)","inactivity-timeout-seconds-required":"فترة الخمول مطلوبة","inactivity-timeout-seconds-min":"فترة الخمول لا يمكن أن تكون أقل من 1","inactivity-timeout-seconds-pattern":"فترة الخمول غير صالحة","json-parse":"JSON غير صالح.","json-required":"الحقل لا يمكن أن يكون فارغًا.",logs:{logs:"السجلات",days:"أيام",hours:"ساعات",minutes:"دقائق",seconds:"ثواني","date-format":"تنسيق التاريخ","date-format-required":"تنسيق التاريخ مطلوب","log-format":"تنسيق السجل","log-type":"نوع السجل","log-format-required":"تنسيق السجل مطلوب",remote:"التسجيل عن بُعد","remote-logs":"السجلات عن بُعد",local:"التسجيل المحلي",level:"مستوى السجل","file-path":"مسار الملف","file-path-required":"مسار الملف مطلوب","saving-period":"فترة حفظ السجل","saving-period-min":"فترة حفظ السجل لا يمكن أن تكون أقل من 1","saving-period-required":"فترة حفظ السجل مطلوبة","backup-count":"عدد النسخ الاحتياطية","backup-count-min":"عدد النسخ الاحتياطية لا يمكن أن يكون أقل من 1","backup-count-required":"عدد النسخ الاحتياطية مطلوب"},"min-pack-send-delay":"الحد الأدنى لتأخير إرسال الحزمة (بالمللي ثانية)","min-pack-send-delay-required":"الحد الأدنى لتأخير إرسال الحزمة مطلوب","min-pack-send-delay-min":"لا يمكن أن يكون الحد الأدنى لتأخير إرسال الحزمة أقل من 0","no-connectors":"لا توجد موصلات","no-data":"لا توجد تكوينات","no-gateway-found":"لم يتم العثور على بوابة.","no-gateway-matching":"'{{item}}' غير موجود.","path-logs":"مسار إلى ملفات السجل","path-logs-required":"المسار مطلوب.","permit-without-calls":"البقاء على الحياة يسمح بدون مكالمات",remote:"التكوين عن بُعد","remote-logging-level":"مستوى التسجيل","remove-entry":"إزالة التكوين","remote-shell":"قشرة عن بُعد","remote-configuration":"التكوين عن بُعد",other:"آخر","save-tip":"حفظ ملف التكوين","security-type":"نوع الأمان","security-types":{"access-token":"رمز الوصول","username-password":"اسم المستخدم وكلمة المرور",tls:"TLS","tls-access-token":"TLS + رمز الوصول","tls-private-key":"TLS + المفتاح الخاص"},"server-port":"منفذ الخادم",statistics:{statistic:"إحصائية",statistics:"الإحصائيات","statistic-commands-empty":"لا تتوفر إحصائيات",commands:"الأوامر","send-period":"فترة إرسال الإحصائيات (بالثواني)","send-period-required":"فترة إرسال الإحصائيات مطلوبة","send-period-min":"لا يمكن أن تكون فترة إرسال الإحصائيات أقل من 60","send-period-pattern":"فترة إرسال الإحصائيات غير صالحة","check-connectors-configuration":"فترة فحص تكوين الموصلات (بالثواني)","check-connectors-configuration-required":"فترة فحص تكوين الموصلات مطلوبة","check-connectors-configuration-min":"لا يمكن أن تكون فترة فحص تكوين الموصلات أقل من 1","check-connectors-configuration-pattern":"فترة فحص تكوين الموصلات غير صالحة",add:"إضافة أمر",timeout:"المهلة","timeout-required":"المهلة مطلوبة","timeout-min":"لا يمكن أن تكون المهلة أقل من 1","timeout-pattern":"المهلة غير صالحة","attribute-name":"اسم السمة","attribute-name-required":"اسم السمة مطلوب",command:"الأمر","command-required":"الأمر مطلوب","command-pattern":"الأمر غير صالح",remove:"إزالة الأمر"},storage:"التخزين","storage-max-file-records":"السجلات القصوى في الملف","storage-max-files":"الحد الأقصى لعدد الملفات","storage-max-files-min":"الحد الأدنى هو 1.","storage-max-files-pattern":"العدد غير صالح.","storage-max-files-required":"العدد مطلوب.","storage-max-records":"السجلات القصوى في التخزين","storage-max-records-min":"الحد الأدنى لعدد السجلات هو 1.","storage-max-records-pattern":"العدد غير صالح.","storage-max-records-required":"السجلات القصوى مطلوبة.","storage-read-record-count":"عدد قراءة السجلات في التخزين","storage-read-record-count-min":"الحد الأدنى لعدد السجلات هو 1.","storage-read-record-count-pattern":"العدد غير صالح.","storage-read-record-count-required":"عدد قراءة السجلات مطلوب.","storage-max-read-record-count":"الحد الأقصى لعدد قراءة السجلات في التخزين","storage-max-read-record-count-min":"الحد الأدنى لعدد السجلات هو 1.","storage-max-read-record-count-pattern":"العدد غير صالح.","storage-max-read-record-count-required":"عدد القراءة القصوى مطلوب.","storage-data-folder-path":"مسار مجلد البيانات","storage-data-folder-path-required":"مسار مجلد البيانات مطلوب.","storage-pack-size":"الحد الأقصى لحجم حزمة الحدث","storage-pack-size-min":"الحد الأدنى هو 1.","storage-pack-size-pattern":"العدد غير صالح.","storage-pack-size-required":"الحجم الأقصى لحزمة الحدث مطلوب.","storage-path":"مسار التخزين","storage-path-required":"مسار التخزين مطلوب.","storage-type":"نوع التخزين","storage-types":{"file-storage":"تخزين الملفات","memory-storage":"تخزين الذاكرة",sqlite:"SQLITE"},thingsboard:"ثينغزبورد",general:"عام","thingsboard-host":"مضيف ثينغزبورد","thingsboard-host-required":"المضيف مطلوب.","thingsboard-port":"منفذ ثينغزبورد","thingsboard-port-max":"الحد الأقصى لرقم المنفذ هو 65535.","thingsboard-port-min":"الحد الأدنى لرقم المنفذ هو 1.","thingsboard-port-pattern":"المنفذ غير صالح.","thingsboard-port-required":"المنفذ مطلوب.",tidy:"ترتيب","tidy-tip":"ترتيب تكوين JSON","title-connectors-json":"تكوين موصل {{typeName}}","tls-path-ca-certificate":"المسار إلى شهادة CA على البوابة","tls-path-client-certificate":"المسار إلى شهادة العميل على البوابة","messages-ttl-check-in-hours":"فحص TTL الرسائل بالساعات","messages-ttl-check-in-hours-required":"يجب تحديد فحص TTL الرسائل بالساعات.","messages-ttl-check-in-hours-min":"الحد الأدنى هو 1.","messages-ttl-check-in-hours-pattern":"الرقم غير صالح.","messages-ttl-in-days":"TTL الرسائل بالأيام","messages-ttl-in-days-required":"يجب تحديد TTL الرسائل بالأيام.","messages-ttl-in-days-min":"الحد الأدنى هو 1.","messages-ttl-in-days-pattern":"الرقم غير صالح.","mqtt-qos":"جودة الخدمة (QoS)","mqtt-qos-required":"جودة الخدمة (QoS) مطلوبة","mqtt-qos-range":"تتراوح قيم جودة الخدمة (QoS) من 0 إلى 1","tls-path-private-key":"المسار إلى المفتاح الخاص على البوابة","toggle-fullscreen":"تبديل وضع ملء الشاشة","transformer-json-config":"تكوين JSON*","update-config":"إضافة/تحديث تكوين JSON",hints:{"remote-configuration":"يمكنك تمكين التكوين وإدارة البوابة عن بُعد","remote-shell":"يمكنك تمكين التحكم البعيد في نظام التشغيل مع البوابة من عنصر واجهة المستخدم قشرة عن بُعد",host:"اسم المضيف أو عنوان IP لخادم ثينغزبورد",port:"منفذ خدمة MQTT على خادم ثينغزبورد",token:"رمز الوصول للبوابة من خادم ثينغزبورد","client-id":"معرف عميل MQTT للبوابة من خادم ثينغزبورد",username:"اسم المستخدم MQTT للبوابة من خادم ثينغزبورد",password:"كلمة المرور MQTT للبوابة من خادم ثينغزبورد","ca-cert":"المسار إلى ملف شهادة CA","date-form":"تنسيق التاريخ في رسالة السجل","data-folder":"المسار إلى المجلد الذي سيحتوي على البيانات (نسبي أو مطلق)","log-format":"تنسيق رسالة السجل","remote-log":"يمكنك تمكين التسجيل البعيد وقراءة السجلات من البوابة","backup-count":"إذا كان عدد النسخ الاحتياطية > 0، عند عملية تدوير، لا يتم الاحتفاظ بأكثر من عدد النسخ الاحتياطية المحددة - يتم حذف الأقدم",storage:"يوفر تكوينًا لحفظ البيانات الواردة قبل إرسالها إلى المنصة","max-file-count":"العدد الأقصى لعدد الملفات التي سيتم إنشاؤها","max-read-count":"عدد الرسائل للحصول عليها من التخزين وإرسالها إلى ثينغزبورد","max-records":"العدد الأقصى للسجلات التي ستخزن في ملف واحد","read-record-count":"عدد الرسائل للحصول عليها من التخزين وإرسالها إلى ثينغزبورد","max-records-count":"العدد الأقصى للبيانات في التخزين قبل إرسالها إلى ثينغزبورد","ttl-check-hour":"كم مرة سيتحقق البوابة من البيانات القديمة","ttl-messages-day":"الحد الأقصى لعدد الأيام التي ستحتفظ فيها التخزين بالبيانات",commands:"الأوامر لجمع الإحصائيات الإضافية",attribute:"مفتاح تلقي الإحصائيات",timeout:"مهلة زمنية لتنفيذ الأمر",command:"سيتم استخدام نتيجة تنفيذ الأمر كقيمة لتلقي الإحصائيات","check-device-activity":"يمكنك تمكين مراقبة نشاط كل جهاز متصل","inactivity-timeout":"الوقت بعد الذي ستفصل البوابة الجهاز","inactivity-period":"تكرار فحص نشاط الجهاز","minimal-pack-delay":"التأخير بين إرسال حزم الرسائل (يؤدي تقليل هذا الإعداد إلى زيادة استخدام وحدة المعالجة المركزية)",qos:"جودة الخدمة في رسائل MQTT (0 - على الأكثر مرة واحدة، 1 - على الأقل مرة واحدة)","server-port":"منفذ الشبكة الذي سيستمع فيه خادم GRPC للاستفسارات الواردة.","grpc-keep-alive-timeout":"الحد الأقصى للوقت الذي يجب أن ينتظره الخادم لاستجابة رسالة الحفاظ على الاتصال قبل اعتبار الاتصال ميتًا.","grpc-keep-alive":"المدة بين رسائل حفظ الاتصال المتعاقبة عند عدم وجود استدعاء RPC نشط.","grpc-min-time-between-pings":"الحد الأدنى للوقت الذي يجب فيه أن ينتظر الخادم بين إرسال رسائل حفظ الاتصال","grpc-max-pings-without-data":"الحد الأقصى لعدد رسائل حفظ الاتصال التي يمكن للخادم إرسالها دون تلقي أي بيانات قبل اعتبار الاتصال ميتًا.","grpc-min-ping-interval-without-data":"الحد الأدنى للوقت الذي يجب فيه أن ينتظر الخادم بين إرسال رسائل حفظ الاتصال عند عدم إرسال أو استلام بيانات.","permit-without-calls":"السماح للخادم بإبقاء اتصال GRPC حيًا حتى عندما لا تكون هناك استدعاءات RPC نشطة."}},ze={"add-entry":"Afegir configuració","connector-add":"Afegir conector","connector-enabled":"Activar conector","connector-name":"Nom conector","connector-name-required":"Cal nom conector.","connector-type":"Tipus conector","connector-type-required":"Cal tipus conector.",connectors:"Configuració de conectors","create-new-gateway":"Crear un gateway nou","create-new-gateway-text":"Crear un nou gateway amb el nom: '{{gatewayName}}'?",delete:"Esborrar configuració","download-tip":"Descarregar fitxer de configuració",gateway:"Gateway","gateway-exists":"Ja existeix un dispositiu amb el mateix nom.","gateway-name":"Nom de Gateway","gateway-name-required":"Cal un nom de gateway.","gateway-saved":"Configuració de gateway gravada satisfactòriament.","json-parse":"JSON no vàlid.","json-required":"El camp no pot ser buit.","no-connectors":"No hi ha conectors","no-data":"No hi ha configuracions","no-gateway-found":"No s'ha trobat cap gateway.","no-gateway-matching":" '{{item}}' no trobat.","path-logs":"Ruta als fitxers de log","path-logs-required":"Cal ruta.",remote:"Configuració remota","remote-logging-level":"Nivel de logging","remove-entry":"Esborrar configuració","save-tip":"Gravar fitxer de configuració","security-type":"Tipus de seguretat","security-types":{"access-token":"Token d'accés",tls:"TLS"},storage:"Grabació","storage-max-file-records":"Número màxim de registres en fitxer","storage-max-files":"Número màxim de fitxers","storage-max-files-min":"El número mínim és 1.","storage-max-files-pattern":"Número no vàlid.","storage-max-files-required":"Cal número.","storage-max-records":"Màxim de registres en el magatzem","storage-max-records-min":"El número mínim és 1.","storage-max-records-pattern":"Número no vàlid.","storage-max-records-required":"Cal número.","storage-pack-size":"Mida màxim de esdeveniments","storage-pack-size-min":"El número mínim és 1.","storage-pack-size-pattern":"Número no vàlid.","storage-pack-size-required":"Cal número.","storage-path":"Ruta de magatzem","storage-path-required":"Cal ruta de magatzem.","storage-type":"Tipus de magatzem","storage-types":{"file-storage":"Magatzem fitxer","memory-storage":"Magatzem en memoria"},thingsboard:"ThingsBoard","thingsboard-host":"Host ThingsBoard","thingsboard-host-required":"Cal Host.","thingsboard-port":"Port ThingsBoard","thingsboard-port-max":"El port màxim és 65535.","thingsboard-port-min":"El port mínim és 1.","thingsboard-port-pattern":"Port no vàlid.","thingsboard-port-required":"Cal port.",tidy:"Endreçat","tidy-tip":"Endreçat JSON","title-connectors-json":"Configuració conector {{typeName}}","tls-path-ca-certificate":"Ruta al certificat CA al gateway","tls-path-client-certificate":"Ruta al certificat client al gateway","tls-path-private-key":"Ruta a la clau privada al gateway","toggle-fullscreen":"Pantalla completa fullscreen","transformer-json-config":"Configuració JSON*","update-config":"Afegir/actualizar configuració JSON"},Ke={"add-entry":"Přidat konfiguraci","connector-add":"Přidat nový konektor","connector-enabled":"Povolit konektor","connector-name":"Název konektoru","connector-name-required":"Název konektoru je povinný.","connector-type":"Typ konektoru","connector-type-required":"Typ konektoru je povinný.",connectors:"Konfigurace konektoru","create-new-gateway":"Vytvořit novou bránu","create-new-gateway-text":"Jste si jisti, že chcete vytvořit novou bránu s názvem: '{{gatewayName}}'?",delete:"Smazat konfiguraci","download-tip":"Stáhnout soubor konfigurace",gateway:"Brána","gateway-exists":"Zařízení se shodným názvem již existuje.","gateway-name":"Název brány","gateway-name-required":"Název brány je povinný.","gateway-saved":"Konfigurace brány byla úspěšně uložena.","json-parse":"Neplatný JSON.","json-required":"Pole nemůže být prázdné.","no-connectors":"Žádné konektory","no-data":"Žádné konfigurace","no-gateway-found":"Žádné brány nebyly nalezeny.","no-gateway-matching":" '{{item}}' nenalezena.","path-logs":"Cesta k souborům logu","path-logs-required":"Cesta je povinná.",remote:"Vzdálená konfigurace","remote-logging-level":"Úroveň logování","remove-entry":"Odstranit konfiguraci","save-tip":"Uložit soubor konfigurace","security-type":"Typ zabezpečení","security-types":{"access-token":"Přístupový token",tls:"TLS"},storage:"Úložiště","storage-max-file-records":"Maximální počet záznamů v souboru","storage-max-files":"Maximální počet souborů","storage-max-files-min":"Minimální počet je 1.","storage-max-files-pattern":"Počet není platný.","storage-max-files-required":"Počet je povinný.","storage-max-records":"Maximální počet záznamů v úložišti","storage-max-records-min":"Minimální počet záznamů je 1.","storage-max-records-pattern":"Počet není platný.","storage-max-records-required":"Maximální počet záznamů je povinný.","storage-pack-size":"Maximální velikost souboru událostí","storage-pack-size-min":"Minimální počet je 1.","storage-pack-size-pattern":"Počet není platný.","storage-pack-size-required":"Maximální velikost souboru událostí je povinná.","storage-path":"Cesta k úložišti","storage-path-required":"Cesta k úložišti je povinná.","storage-type":"Typ úložiště","storage-types":{"file-storage":"Soubor","memory-storage":"Paměť"},thingsboard:"ThingsBoard","thingsboard-host":"Host ThingsBoard","thingsboard-host-required":"Host je povinný.","thingsboard-port":"Port ThingsBoard","thingsboard-port-max":"Maximální číslo portu je 65535.","thingsboard-port-min":"Minimální číslo portu je 1.","thingsboard-port-pattern":"Port není platný.","thingsboard-port-required":"Port je povinný.",tidy:"Uspořádat","tidy-tip":"Uspořádat JSON konfiguraci","title-connectors-json":"Konfigurace {{typeName}} konektoru","tls-path-ca-certificate":"Cesta k certifikátu CA brány","tls-path-client-certificate":"Cesta k certifikátu klienta brány","tls-path-private-key":"Cesta k privátnímu klíči brány","toggle-fullscreen":"Přepnout do režimu celé obrazovky","transformer-json-config":"JSON* konfigurace","update-config":"Přidat/editovat JSON konfiguraci"},He={"add-entry":"Tilføj konfiguration","connector-add":"Tilføj ny stikforbindelse","connector-enabled":"Aktivér stikforbindelse","connector-name":"Navn på stikforbindelse","connector-name-required":"Navn på stikforbindelse er påkrævet.","connector-type":"Stikforbindelsestype","connector-type-required":"Stikforbindelsestype er påkrævet.",connectors:"Konfiguration af stikforbindelser","create-new-gateway":"Opret en ny gateway","create-new-gateway-text":"",delete:"Slet konfiguration","download-tip":"Download konfigurationsfil",gateway:"Gateway","gateway-exists":"Enhed med samme navn findes allerede.","gateway-name":"Gateway-navn","gateway-name-required":"Gateway-navn er påkrævet.","gateway-saved":"Gateway-konfigurationen blev gemt.","json-parse":"Ikke gyldig JSON.","json-required":"Feltet må ikke være tomt.","no-connectors":"Ingen stikforbindelser","no-data":"Ingen konfigurationer","no-gateway-found":"Ingen gateway fundet.","no-gateway-matching":"","path-logs":"Sti til logfiler","path-logs-required":"Sti er påkrævet.",remote:"Fjernkonfiguration","remote-logging-level":"Logføringsniveau","remove-entry":"Fjern konfiguration","save-tip":"Gem konfigurationsfil","security-type":"Sikkerhedstype","security-types":{"access-token":"Adgangstoken",tls:"TLS"},storage:"Lagring","storage-max-file-records":"Maks. antal poster i fil","storage-max-files":"Maks. antal filer","storage-max-files-min":"Min. antal er 1.","storage-max-files-pattern":"Antal er ikke gyldigt.","storage-max-files-required":"Antal er påkrævet.","storage-max-records":"Maks. antal poster i lagring","storage-max-records-min":"Min. antal poster er 1.","storage-max-records-pattern":"Antal er ikke gyldigt.","storage-max-records-required":"Maks. antal poster er påkrævet.","storage-pack-size":"Maks. antal pakkestørrelse for begivenhed","storage-pack-size-min":"Min. antal er 1.","storage-pack-size-pattern":"Antal er ikke gyldigt.","storage-pack-size-required":"Maks. antal pakkestørrelse for begivenhed er påkrævet.","storage-path":"Lagringssti","storage-path-required":"Lagringssti er påkrævet.","storage-type":"Lagringstype","storage-types":{"file-storage":"Lagring af filter","memory-storage":"Lagring af hukommelse"},thingsboard:"ThingsBoard","thingsboard-host":"ThingsBoard-vært","thingsboard-host-required":"Vært er påkrævet.","thingsboard-port":"ThingsBoard-port","thingsboard-port-max":"Maks. portnummer er 65535.","thingsboard-port-min":"Min. portnummer er 1.","thingsboard-port-pattern":"Port er ikke gyldig.","thingsboard-port-required":"Port er påkrævet.",tidy:"Tidy","tidy-tip":"Tidy konfig. JSON","title-connectors-json":"","tls-path-ca-certificate":"Sti til CA-certifikat på gateway","tls-path-client-certificate":"Sti til klientcertifikat på gateway","tls-path-private-key":"Sti til privat nøgle på gateway","toggle-fullscreen":"Skift til fuld skærm","transformer-json-config":"Konfiguration JSON*","update-config":"Tilføj/opdater konfiguration JSON"},Qe={"add-entry":"Añadir configuración",advanced:"Avanzado","checking-device-activity":"Probando actividad de dispositivo",command:"Comandos Docker","command-copied-message":"Se han copiado los comandos al portapapeles",configuration:"Configuración","connector-add":"Añadir conector","connector-enabled":"Activar conector","connector-name":"Nombre conector","connector-name-required":"Se requiere nombre conector.","connector-type":"Tipo conector","connector-type-required":"Se requiere tipo conector.",connectors:"Conectores","connectors-config":"Configuración de conectores","connectors-table-enabled":"Enabled","connectors-table-name":"Nombre","connectors-table-type":"Tipo","connectors-table-status":"Estado","connectors-table-actions":"Acciones","connectors-table-key":"Clave","connectors-table-class":"Clase","rpc-command-send":"Enviar","rpc-command-result":"Resultado","rpc-command-edit-params":"Editar parametros","gateway-configuration":"Configuración General","create-new-gateway":"Crear un gateway nuevo","create-new-gateway-text":"Crear un nuevo gateway con el nombre: '{{gatewayName}}'?","created-time":"Hora de creación","configuration-delete-dialog-header":"Las configuraciones se borrarán","configuration-delete-dialog-body":"Sólo es posible desactivar la configuración remota, si hay acceso físico al gateway. Se borrarán todas las configuraciones previas.

\nPara desactivar la configuración, introduce el nombre del gateway aquí","configuration-delete-dialog-input":"Nombre Gateway","configuration-delete-dialog-input-required":"Se requiere nombre de gateway","configuration-delete-dialog-confirm":"Desactivar",delete:"Borrar configuración","download-tip":"Descargar fichero de configuración","drop-file":"Arrastra un fichero o",gateway:"Gateway","gateway-exists":"Ya existe un dispositivo con el mismo nombre.","gateway-name":"Nombre de Gateway","gateway-name-required":"Se requiere un nombre de gateway.","gateway-saved":"Configuración de gateway grabada satisfactoriamente.",grpc:"GRPC","grpc-keep-alive-timeout":"Timeout Keep alive (en ms)","grpc-keep-alive-timeout-required":"Se requiere Timeout Keep alive","grpc-keep-alive-timeout-min":"El valor no puede ser menor de 1","grpc-keep-alive-timeout-pattern":"El valor no es válido","grpc-keep-alive":"Keep alive (en ms)","grpc-keep-alive-required":"Se requiere keep alive","grpc-keep-alive-min":"El valor no puede ser menor de 1","grpc-keep-alive-pattern":"El valor keep alive no es válido","grpc-min-time-between-pings":"Tiempo mínimo entre pings (en ms)","grpc-min-time-between-pings-required":"Se requiere tiempo mínimo entre pings","grpc-min-time-between-pings-min":"El valor no puede ser menor de 1","grpc-min-time-between-pings-pattern":"El valor de tiempo mínimo entre pings no es válido","grpc-min-ping-interval-without-data":"Intervalo mínimo sin datos (en ms)","grpc-min-ping-interval-without-data-required":"Se requiere intervalo","grpc-min-ping-interval-without-data-min":"El valor no puede ser menor de 1","grpc-min-ping-interval-without-data-pattern":"El valor de intervalo no es válido","grpc-max-pings-without-data":"Intervalo máximo sin datos","grpc-max-pings-without-data-required":"Se requiere intervalo","grpc-max-pings-without-data-min":"El valor no puede ser menor de 1","grpc-max-pings-without-data-pattern":"El valor de intervalo no es válido","inactivity-check-period-seconds":"Periodo de control de inactividad (en segundos)","inactivity-check-period-seconds-required":"Se requiere periodo","inactivity-check-period-seconds-min":"El valor no puede ser menor de 1","inactivity-check-period-seconds-pattern":"El valor del periodo no es válido","inactivity-timeout-seconds":"Timeout de inactividad (en segundos)","inactivity-timeout-seconds-required":"Se requiere timeout de inactividad","inactivity-timeout-seconds-min":"El valor no puede ser menor de 1","inactivity-timeout-seconds-pattern":"El valor de inactividad no es válido","json-parse":"JSON no válido.","json-required":"El campo no puede estar vacío.",logs:{logs:"Registros",days:"días",hours:"horas",minutes:"minutos",seconds:"segundos","date-format":"Formato de fecha","date-format-required":"Se requiere formato de fecha","log-format":"Formato de registro","log-type":"Tipo de registro","log-format-required":"Se requiere tipo de registro",remote:"Registro remoto","remote-logs":"Registro remoto",local:"Registro local",level:"Nivel de registro","file-path":"Ruta de fichero","file-path-required":"Se requiere ruta de fichero","saving-period":"Periodo de guardado de registros","saving-period-min":"El periodo no puede ser menor que 1","saving-period-required":"Se requiere periodo de guardado","backup-count":"Número de backups","backup-count-min":"El número de backups no puede ser menor que 1","backup-count-required":"Se requiere número de backups"},"min-pack-send-delay":"Tiempo de espera, envío de paquetes (en ms)","min-pack-send-delay-required":"Se requiere tiempo de espera","min-pack-send-delay-min":"El tiempo de espera no puede ser menor que 0","no-connectors":"No hay conectores","no-data":"No hay configuraciones","no-gateway-found":"No se ha encontrado ningún gateway.","no-gateway-matching":" '{{item}}' no encontrado.","path-logs":"Ruta a los archivos de log","path-logs-required":"Ruta requerida.","permit-without-calls":"Permitir Keep alive si llamadas",remote:"Configuración remota","remote-logging-level":"Nivel de logging","remove-entry":"Borrar configuración","remote-shell":"Consola remota","remote-configuration":"Configuración remota",other:"otros","save-tip":"Grabar fichero de configuración","security-type":"Tipo de seguridad","security-types":{"access-token":"Tóken de acceso","username-password":"Usuario y contraseña",tls:"TLS","tls-access-token":"TLS + Tóken de acceso","tls-private-key":"TLS + Clave privada"},"server-port":"Puerto del servidor",statistics:{statistic:"Estadística",statistics:"Estadísticas","statistic-commands-empty":"No hay estadísticas",commands:"Comandos","send-period":"Periodo de envío de estadísticas (en segundos)","send-period-required":"Se requiere periodo de envío","send-period-min":"El periodo de envío no puede ser menor de 60","send-period-pattern":"El periodo de envío no es válido","check-connectors-configuration":"Revisar configuración de conectores (en segundos)","check-connectors-configuration-required":"Se requiere un valor","check-connectors-configuration-min":"El valor no puede ser menor de 1","check-connectors-configuration-pattern":"La configuración no es válida",add:"Añadir comando",timeout:"Timeout","timeout-required":"Se requiere timeout","timeout-min":"El timeout no puede ser menor de 1","timeout-pattern":"El timeout no es válido","attribute-name":"Nombre de atributo","attribute-name-required":"Se requiere nombre de atributo",command:"Comando","command-required":"Se requiere comando",remove:"Borrar comando"},storage:"Grabación","storage-max-file-records":"Número máximo de registros en fichero","storage-max-files":"Número máximo de ficheros","storage-max-files-min":"El número mínimo es 1.","storage-max-files-pattern":"Número no válido.","storage-max-files-required":"Se requiere número.","storage-max-records":"Máximo de registros en el almacén","storage-max-records-min":"El número mínimo es 1.","storage-max-records-pattern":"Número no válido.","storage-max-records-required":"Se requiere número.","storage-read-record-count":"Leer número de entradas en almacén","storage-read-record-count-min":"El número mínimo de entradas es 1.","storage-read-record-count-pattern":"El número no es válido.","storage-read-record-count-required":"Se requiere número de entradas.","storage-max-read-record-count":"Número máximo de entradas en el almacén","storage-max-read-record-count-min":"El número mínimo es 1.","storage-max-read-record-count-pattern":"El número no es válido","storage-max-read-record-count-required":"Se requiere número máximo de entradas.","storage-data-folder-path":"Ruta de carpeta de datos","storage-data-folder-path-required":"Se requiere ruta.","storage-pack-size":"Tamaño máximo de eventos","storage-pack-size-min":"El número mínimo es 1.","storage-pack-size-pattern":"Número no válido.","storage-pack-size-required":"Se requiere número.","storage-path":"Ruta de almacén","storage-path-required":"Se requiere ruta de almacén.","storage-type":"Tipo de almacén","storage-types":{"file-storage":"Almacén en fichero","memory-storage":"Almacén en memoria",sqlite:"SQLITE"},thingsboard:"ThingsBoard",general:"General","thingsboard-host":"Host ThingsBoard","thingsboard-host-required":"Se requiere Host.","thingsboard-port":"Puerto ThingsBoard","thingsboard-port-max":"El puerto máximo es 65535.","thingsboard-port-min":"El puerto mínimo es 1.","thingsboard-port-pattern":"Puerto no válido.","thingsboard-port-required":"Se requiere puerto.",tidy:"Tidy","tidy-tip":"Tidy JSON","title-connectors-json":"Configuración conector {{typeName}}","tls-path-ca-certificate":"Ruta al certificado CA en el gateway","tls-path-client-certificate":"Ruta al certificado cliente en el gateway","messages-ttl-check-in-hours":"Comprobación de TTL de mensajes en horas","messages-ttl-check-in-hours-required":"Campo requerido.","messages-ttl-check-in-hours-min":"El mínimo es 1.","messages-ttl-check-in-hours-pattern":"El número no es válido.","messages-ttl-in-days":"TTL (Time to live) de mensages en días","messages-ttl-in-days-required":"Se requiere TTL de mensajes.","messages-ttl-in-days-min":"El número mínimo es 1.","messages-ttl-in-days-pattern":"El número no es válido.","mqtt-qos":"QoS","mqtt-qos-required":"Se requiere QoS","mqtt-qos-range":"El rango de valores es desde 0 a 1","tls-path-private-key":"Ruta a la clave privada en el gateway","toggle-fullscreen":"Pantalla completa fullscreen","transformer-json-config":"Configuración JSON*","update-config":"Añadir/actualizar configuración JSON",hints:{"remote-configuration":"Habilita la administración y configuración remota del gateway","remote-shell":"Habilita el control remoto del sistema operativo del gateway desde el widget terminal remoto",host:"Hostname o dirección IP del servidor Thingsboard",port:"Puerto del servicio MQTT en el servidor Thingsboard",token:"Access token para el gateway","client-id":"ID de cliente MQTT para el gateway",username:"Usuario MQTT para el gateway",password:"Contraseña MQTT para el gateway","ca-cert":"Ruta al fichero del certificado CA","date-form":"Formato de fecha en los mensajes de registro","data-folder":"Ruta a la carpeta que contendrá los datos (Relativa o absoluta)","log-format":"Formato de mensajes en registro","remote-log":"Habilita el registro remoto y la posterior lectura desde el gateway","backup-count":"Si el contaje de copias de seguridad es mayor que 0, cuando se realice una renovación, no se conservan más que los archivos de recuento de copias de seguridad, los más antíguos se eliminarán",storage:"Provee la configuración para el grabado de datos entrantes antes de que se envíen a la plataforma","max-file-count":"Número máximo de ficheros que se crearán","max-read-count":"Númeo máximo de mensajes a obtener desde el disco y enviados a la plataforma","max-records":"Número máximo de registros que se guardarán en un solo fichero","read-record-count":"Número de mensages a obtener desde el almacenamiento y enviados a la plataforma","max-records-count":"Número máximo de datos en almacenamiento antes de enviar a la plataforma","ttl-check-hour":"Con qué frecuencia el gateway comprobará si los datos están obsoletos","ttl-messages-day":"Número máximo de días para la retención de datos en el almacén",commands:"Comandos para recoger estadísticas adicionales",attribute:"Clave de telemetría para estadísticas",timeout:"Timeout para la ejecución de comandos",command:"El resultado de la ejecución del comando, se usará como valor para la telemetría","check-device-activity":"Habilita la monitorización de cada uno de los dispositivos conectados","inactivity-timeout":"Tiempo tras que el gateway desconectará el dispositivo","inactivity-period":"Periodo de monitorización de actividad en el dispositivo","minimal-pack-delay":"Tiempo de espera entre envío de paquetes de mensajes (Un valor muy bajo, resultará en un aumento de uso de la CPU en el gateway)",qos:"Quality of Service en los mensajes MQTT (0 - at most once, 1 - at least once)","server-port":"Puerto de red en el cual el servidor GRPC escuchará conexiones entrantes.","grpc-keep-alive-timeout":"Tiempo máximo, el cual el servidor esperara un ping keepalive antes de considerar la conexión terminada.","grpc-keep-alive":"Duración entre dos pings keepalive cuando no haya llamada RPC activa.","grpc-min-time-between-pings":"Mínimo tiempo que el servidor debe esperar entre envíos de mensajes de ping","grpc-max-pings-without-data":"Número máximo de pings keepalive que el servidor puede enviar sin recibir ningún dato antes de considerar la conexión terminada.","grpc-min-ping-interval-without-data":"Mínimo tiempo que el servidor debe esperar entre envíos de ping keepalive cuando no haya ningún dato en envío o recepción.","permit-without-calls":"Permitir al servidor mantener la conexión GRPC abierta, cuando no haya llamadas RPC activas."}},We={"add-entry":"설정 추가","connector-add":"새로운 연결자 추가","connector-enabled":"Enable connector","connector-name":"Connector name","connector-name-required":"Connector name is required.","connector-type":"Connector type","connector-type-required":"Connector type is required.",connectors:"Connectors configuration","create-new-gateway":"Create a new gateway","create-new-gateway-text":"Are you sure you want create a new gateway with name: '{{gatewayName}}'?",delete:"Delete configuration","download-tip":"Download configuration file",gateway:"Gateway","gateway-exists":"Device with same name is already exists.","gateway-name":"Gateway name","gateway-name-required":"Gateway name is required.","gateway-saved":"Gateway configuration successfully saved.","json-parse":"Not valid JSON.","json-required":"Field cannot be empty.","no-connectors":"No connectors","no-data":"No configurations","no-gateway-found":"No gateway found.","no-gateway-matching":" '{{item}}' not found.","path-logs":"Path to log files","path-logs-required":"Path is required.",remote:"Remote configuration","remote-logging-level":"Logging level","remove-entry":"Remove configuration","save-tip":"Save configuration file","security-type":"Security type","security-types":{"access-token":"Access Token",tls:"TLS"},storage:"Storage","storage-max-file-records":"Maximum records in file","storage-max-files":"Maximum number of files","storage-max-files-min":"Minimum number is 1.","storage-max-files-pattern":"Number is not valid.","storage-max-files-required":"Number is required.","storage-max-records":"Maximum records in storage","storage-max-records-min":"Minimum number of records is 1.","storage-max-records-pattern":"Number is not valid.","storage-max-records-required":"Maximum records is required.","storage-pack-size":"Maximum event pack size","storage-pack-size-min":"Minimum number is 1.","storage-pack-size-pattern":"Number is not valid.","storage-pack-size-required":"Maximum event pack size is required.","storage-path":"Storage path","storage-path-required":"Storage path is required.","storage-type":"Storage type","storage-types":{"file-storage":"File storage","memory-storage":"Memory storage"},thingsboard:"ThingsBoard","thingsboard-host":"ThingsBoard host","thingsboard-host-required":"Host is required.","thingsboard-port":"ThingsBoard port","thingsboard-port-max":"Maximum port number is 65535.","thingsboard-port-min":"Minimum port number is 1.","thingsboard-port-pattern":"Port is not valid.","thingsboard-port-required":"Port is required.",tidy:"Tidy","tidy-tip":"Tidy config JSON","title-connectors-json":"Connector {{typeName}} configuration","tls-path-ca-certificate":"Path to CA certificate on gateway","tls-path-client-certificate":"Path to client certificate on gateway","tls-path-private-key":"Path to private key on gateway","toggle-fullscreen":"Toggle fullscreen","transformer-json-config":"Configuration JSON*","update-config":"Add/update configuration JSON"},Je={"add-entry":"Add configuration",advanced:"Advanced","checking-device-activity":"Checking device activity",command:"Docker commands","command-copied-message":"Docker command has been copied to clipboard",configuration:"Configuration","connector-add":"Add new connector","connector-enabled":"Enable connector","connector-name":"Connector name","connector-name-required":"Connector name is required.","connector-type":"Connector type","connector-type-required":"Connector type is required.",connectors:"Connectors","connectors-config":"Connectors configuration","connectors-table-enabled":"Enabled","connectors-table-name":"Name","connectors-table-type":"Type","connectors-table-status":"Status","connectors-table-actions":"Actions","connectors-table-key":"Key","connectors-table-class":"Class","rpc-command-send":"Send","rpc-command-result":"Result","rpc-command-edit-params":"Edit parameters","gateway-configuration":"General Configuration","docker-label":"In order to run ThingsBoard IoT gateway in docker with credentials for this device you can use the following commands.","create-new-gateway":"Create a new gateway","create-new-gateway-text":"Are you sure you want create a new gateway with name: '{{gatewayName}}'?","created-time":"Created time","configuration-delete-dialog-header":"Configurations will be deleted","configuration-delete-dialog-body":"Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.

\nTo turn off configuration, enter gateway name below","configuration-delete-dialog-input":"Gateway name","configuration-delete-dialog-input-required":"Gateway name is mandatory","configuration-delete-dialog-confirm":"Turn Off",delete:"Delete configuration","download-tip":"Download configuration file","drop-file":"Drop file here or",gateway:"Gateway","gateway-exists":"Device with same name is already exists.","gateway-name":"Gateway name","gateway-name-required":"Gateway name is required.","gateway-saved":"Gateway configuration successfully saved.",grpc:"GRPC","grpc-keep-alive-timeout":"Keep alive timeout (in ms)","grpc-keep-alive-timeout-required":"Keep alive timeout is required","grpc-keep-alive-timeout-min":"Keep alive timeout can not be less then 1","grpc-keep-alive-timeout-pattern":"Keep alive timeout is not valid","grpc-keep-alive":"Keep alive (in ms)","grpc-keep-alive-required":"Keep alive is required","grpc-keep-alive-min":"Keep alive can not be less then 1","grpc-keep-alive-pattern":"Keep alive is not valid","grpc-min-time-between-pings":"Min time between pings (in ms)","grpc-min-time-between-pings-required":"Min time between pings is required","grpc-min-time-between-pings-min":"Min time between pings can not be less then 1","grpc-min-time-between-pings-pattern":"Min time between pings is not valid","grpc-min-ping-interval-without-data":"Min ping interval without data (in ms)","grpc-min-ping-interval-without-data-required":"Min ping interval without data is required","grpc-min-ping-interval-without-data-min":"Min ping interval without data can not be less then 1","grpc-min-ping-interval-without-data-pattern":"Min ping interval without data is not valid","grpc-max-pings-without-data":"Max pings without data","grpc-max-pings-without-data-required":"Max pings without data is required","grpc-max-pings-without-data-min":"Max pings without data can not be less then 1","grpc-max-pings-without-data-pattern":"Max pings without data is not valid","inactivity-check-period-seconds":"Inactivity check period (in sec)","inactivity-check-period-seconds-required":"Inactivity check period is required","inactivity-check-period-seconds-min":"Inactivity check period can not be less then 1","inactivity-check-period-seconds-pattern":"Inactivity check period is not valid","inactivity-timeout-seconds":"Inactivity timeout (in sec)","inactivity-timeout-seconds-required":"Inactivity timeout is required","inactivity-timeout-seconds-min":"Inactivity timeout can not be less then 1","inactivity-timeout-seconds-pattern":"Inactivity timeout is not valid","json-parse":"Not valid JSON.","json-required":"Field cannot be empty.",logs:{logs:"Logs",days:"days",hours:"hours",minutes:"minutes",seconds:"seconds","date-format":"Date format","date-format-required":"Date format required","log-format":"Log format","log-type":"Log type","log-format-required":"Log format required",remote:"Remote logging","remote-logs":"Remote logs",local:"Local logging",level:"Log level","file-path":"File path","file-path-required":"File path required","saving-period":"Log saving period","saving-period-min":"Log saving period can not be less then 1","saving-period-required":"Log saving period required","backup-count":"Backup count","backup-count-min":"Backup count can not be less then 1","backup-count-required":"Backup count required"},"min-pack-send-delay":"Min pack send delay (in ms)","min-pack-send-delay-required":"Min pack send delay is required","min-pack-send-delay-min":"Min pack send delay can not be less then 0","no-connectors":"No connectors","no-data":"No configurations","no-gateway-found":"No gateway found.","no-gateway-matching":" '{{item}}' not found.","path-logs":"Path to log files","path-logs-required":"Path is required.","permit-without-calls":"Keep alive permit without calls",remote:"Remote configuration","remote-logging-level":"Logging level","remove-entry":"Remove configuration","remote-shell":"Remote shell","remote-configuration":"Remote Configuration",other:"Other","save-tip":"Save configuration file","security-type":"Security type","security-types":{"access-token":"Access Token","username-password":"Username and Password",tls:"TLS","tls-access-token":"TLS + Access Token","tls-private-key":"TLS + Private Key"},"server-port":"Server port",statistics:{statistic:"Statistic",statistics:"Statistics","statistic-commands-empty":"No statistics available",commands:"Commands","send-period":"Statistic send period (in sec)","send-period-required":"Statistic send period is required","send-period-min":"Statistic send period can not be less then 60","send-period-pattern":"Statistic send period is not valid","check-connectors-configuration":"Check connectors configuration (in sec)","check-connectors-configuration-required":"Check connectors configuration is required","check-connectors-configuration-min":"Check connectors configuration can not be less then 1","check-connectors-configuration-pattern":"Check connectors configuration is not valid",add:"Add command",timeout:"Timeout","timeout-required":"Timeout is required","timeout-min":"Timeout can not be less then 1","timeout-pattern":"Timeout is not valid","attribute-name":"Attribute name","attribute-name-required":"Attribute name is required",command:"Command","command-required":"Command is required",remove:"Remove command"},storage:"Storage","storage-max-file-records":"Maximum records in file","storage-max-files":"Maximum number of files","storage-max-files-min":"Minimum number is 1.","storage-max-files-pattern":"Number is not valid.","storage-max-files-required":"Number is required.","storage-max-records":"Maximum records in storage","storage-max-records-min":"Minimum number of records is 1.","storage-max-records-pattern":"Number is not valid.","storage-max-records-required":"Maximum records is required.","storage-read-record-count":"Read record count in storage","storage-read-record-count-min":"Minimum number of records is 1.","storage-read-record-count-pattern":"Number is not valid.","storage-read-record-count-required":"Read record count is required.","storage-max-read-record-count":"Max read record count in storage","storage-max-read-record-count-min":"Minimum number of records is 1.","storage-max-read-record-count-pattern":"Number is not valid.","storage-max-read-record-count-required":"Max Read record count is required.","storage-data-folder-path":"Data folder path","storage-data-folder-path-required":"Data folder path is required.","storage-pack-size":"Maximum event pack size","storage-pack-size-min":"Minimum number is 1.","storage-pack-size-pattern":"Number is not valid.","storage-pack-size-required":"Maximum event pack size is required.","storage-path":"Storage path","storage-path-required":"Storage path is required.","storage-type":"Storage type","storage-types":{"file-storage":"File storage","memory-storage":"Memory storage",sqlite:"SQLITE"},thingsboard:"ThingsBoard",general:"General","thingsboard-host":"ThingsBoard host","thingsboard-host-required":"Host is required.","thingsboard-port":"ThingsBoard port","thingsboard-port-max":"Maximum port number is 65535.","thingsboard-port-min":"Minimum port number is 1.","thingsboard-port-pattern":"Port is not valid.","thingsboard-port-required":"Port is required.",tidy:"Tidy","tidy-tip":"Tidy config JSON","title-connectors-json":"Connector {{typeName}} configuration","tls-path-ca-certificate":"Path to CA certificate on gateway","tls-path-client-certificate":"Path to client certificate on gateway","messages-ttl-check-in-hours":"Messages TTL check in hours","messages-ttl-check-in-hours-required":"Messages TTL check in hours is required.","messages-ttl-check-in-hours-min":"Min number is 1.","messages-ttl-check-in-hours-pattern":"Number is not valid.","messages-ttl-in-days":"Messages TTL in days","messages-ttl-in-days-required":"Messages TTL in days is required.","messages-ttl-in-days-min":"Min number is 1.","messages-ttl-in-days-pattern":"Number is not valid.","mqtt-qos":"QoS","mqtt-qos-required":"QoS is required","mqtt-qos-range":"QoS values range is from 0 to 1","tls-path-private-key":"Path to private key on gateway","toggle-fullscreen":"Toggle fullscreen","transformer-json-config":"Configuration JSON*","update-config":"Add/update configuration JSON",hints:{"remote-configuration":"Enables remote configuration and management of the gateway","remote-shell":"Enables remote control of the operating system with the gateway from the Remote Shell widget",host:"Hostname or IP address of ThingsBoard server",port:"Port of MQTT service on ThingsBoard server",token:"Access token for the gateway from ThingsBoard server","client-id":"MQTT client id for the gateway form ThingsBoard server",username:"MQTT username for the gateway form ThingsBoard server",password:"MQTT password for the gateway form ThingsBoard server","ca-cert":"Path to CA certificate file","date-form":"Date format in log message","data-folder":"Path to folder, that will contains data (Relative or Absolute)","log-format":"Log message format","remote-log":"Enables remote logging and logs reading from the gateway","backup-count":"If backup count is > 0, when a rollover is done, no more than backup count files are kept - the oldest ones are deleted",storage:"Provides configuration for saving incoming data before it is sent to the platform","max-file-count":"Maximum count of file that will be created","max-read-count":"Count of messages to get from storage and send to ThingsBoard","max-records":"Maximum count of records that will be stored in one file","read-record-count":"Count of messages to get from storage and send to ThingsBoard","max-records-count":"Maximum count of data in storage before send to ThingsBoard","ttl-check-hour":"How often will Gateway check data for obsolescence","ttl-messages-day":"Maximum days that storage will save data",commands:"Commands for collecting additional statistic",attribute:"Statistic telemetry key",timeout:"Timeout for command executing",command:"The result of the command execution, will be used as the value for telemetry","check-device-activity":"Enables monitor the activity of each connected device","inactivity-timeout":"Time after whose the gateway will disconnect device","inactivity-period":"Periodicity of device activity check","minimal-pack-delay":"Delay between sending packs of messages (Decreasing this setting results in increased CPU usage)",qos:"Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)","server-port":"Network port on which GRPC server will listen for incoming connections.","grpc-keep-alive-timeout":"Maximum time the server should wait for a keepalive ping response before considering the connection dead.","grpc-keep-alive":"Duration between two successive keepalive ping messages when there is no active RPC call.","grpc-min-time-between-pings":"Minimum amount of time the server should wait between sending keepalive ping messages","grpc-max-pings-without-data":"Maximum number of keepalive ping messages that the server can send without receiving any data before it considers the connection dead.","grpc-min-ping-interval-without-data":"Minimum amount of time the server should wait between sending keepalive ping messages when there is no data being sent or received.","permit-without-calls":"Allow server to keep the GRPC connection alive even when there are no active RPC calls."}},Ye={"add-entry":"Configuratie toevoegen","connector-add":"Nieuwe connector toevoegen","connector-enabled":"Connector inschakelen","connector-name":"Naam van de connector","connector-name-required":"De naam van de connector is vereist.","connector-type":"Type aansluiting","connector-type-required":"Het type connector is vereist.",connectors:"Configuratie van connectoren","create-new-gateway":"Een nieuwe gateway maken","create-new-gateway-text":"Weet u zeker dat u een nieuwe gateway wilt maken met de naam: '{{gatewayName}}'?",delete:"Configuratie verwijderen","download-tip":"Configuratiebestand downloaden",gateway:"Gateway","gateway-exists":"Device met dezelfde naam bestaat al.","gateway-name":"Naam van de gateway","gateway-name-required":"De naam van de gateway is vereist.","gateway-saved":"Gatewayconfiguratie succesvol opgeslagen.","json-parse":"Ongeldige JSON.","json-required":"Het veld mag niet leeg zijn.","no-connectors":"Geen connectoren","no-data":"Geen configuraties","no-gateway-found":"Geen gateway gevonden.","no-gateway-matching":"'{{item}}' niet gevonden.","path-logs":"Pad naar logbestanden","path-logs-required":"Pad is vereist.",remote:"Configuratie op afstand","remote-logging-level":"Registratie niveau","remove-entry":"Configuratie verwijderen","save-tip":"Configuratiebestand opslaan","security-type":"Soort beveiliging","security-types":{"access-token":"Toegang tot token",tls:"TLS (TLS)"},storage:"Opslag","storage-max-file-records":"Maximum aantal records in bestand","storage-max-files":"Maximaal aantal bestanden","storage-max-files-min":"Minimum aantal is 1.","storage-max-files-pattern":"Nummer is niet geldig.","storage-max-files-required":"Nummer is vereist.","storage-max-records":"Maximum aantal records in opslag","storage-max-records-min":"Minimum aantal records is 1.","storage-max-records-pattern":"Nummer is niet geldig.","storage-max-records-required":"Maximale records zijn vereist.","storage-pack-size":"Maximale pakketgrootte voor events","storage-pack-size-min":"Minimum aantal is 1.","storage-pack-size-pattern":"Nummer is niet geldig.","storage-pack-size-required":"De maximale pakketgrootte van het event is vereist.","storage-path":"Opslag pad","storage-path-required":"Opslagpad is vereist.","storage-type":"Type opslag","storage-types":{"file-storage":"Opslag van bestanden","memory-storage":"Geheugen opslag"},thingsboard:"Dingen Bord","thingsboard-host":"ThingsBoard-gastheer","thingsboard-host-required":"Server host is vereist.","thingsboard-port":"ThingsBoard-poort","thingsboard-port-max":"Het maximale poortnummer is 65535.","thingsboard-port-min":"Het minimale poortnummer is 1.","thingsboard-port-pattern":"Poort is niet geldig.","thingsboard-port-required":"Poort is vereist.",tidy:"Ordelijk","tidy-tip":"Opgeruimde configuratie JSON","title-connectors-json":"Configuratie van connector {{typeName}}","tls-path-ca-certificate":"Pad naar CA-certificaat op gateway","tls-path-client-certificate":"Pad naar clientcertificaat op gateway","tls-path-private-key":"Pad naar privésleutel op gateway","toggle-fullscreen":"Volledig scherm in- en uitschakelen","transformer-json-config":"Configuratie JSON*","update-config":"Configuratie JSON toevoegen/bijwerken"},Xe={"add-entry":"Dodaj konfigurację",advanced:"Advanced","checking-device-activity":"Checking device activity",command:"Docker commands","command-copied-message":"Docker command has been copied to clipboard",configuration:"Configuration","connector-add":"Dodaj nowe złącze","connector-enabled":"Włącz złącze","connector-name":"Nazwa złącza","connector-name-required":"Nazwa złącza jest wymagana.","connector-type":"Typ złącza","connector-type-required":"Typ złącza jest wymagany.",connectors:"Konfiguracja złączy","connectors-config":"Connectors configuration","connectors-table-enabled":"Enabled","connectors-table-name":"Name","connectors-table-type":"Type","connectors-table-status":"Status","connectors-table-actions":"Actions","connectors-table-key":"Key","connectors-table-class":"Class","rpc-command-send":"Send","rpc-command-result":"Result","rpc-command-edit-params":"Edit parameters","gateway-configuration":"General Configuration","docker-label":"In order to run ThingsBoard IoT gateway in docker with credentials for this device you can use the following commands.","create-new-gateway":"Utwórz nowy gateway","create-new-gateway-text":"Czy na pewno chcesz utworzyć nowy gateway o nazwie: '{{gatewayName}}'?","created-time":"Created time","configuration-delete-dialog-header":"Configurations will be deleted","configuration-delete-dialog-body":"Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.

\nTo turn off configuration, enter gateway name below","configuration-delete-dialog-input":"Gateway name","configuration-delete-dialog-input-required":"Gateway name is mandatory","configuration-delete-dialog-confirm":"Turn Off",delete:"Usuń konfigurację","download-tip":"Pobierz plik konfiguracyjny","drop-file":"Drop file here or",gateway:"Wejście","gateway-exists":"Urządzenie o tej samej nazwie już istnieje.","gateway-name":"Nazwa Gateway","gateway-name-required":"Nazwa Gateway'a jest wymagana.","gateway-saved":"Konfiguracja Gatewey'a została pomyślnie zapisana.",grpc:"GRPC","grpc-keep-alive-timeout":"Keep alive timeout (in ms)","grpc-keep-alive-timeout-required":"Keep alive timeout is required","grpc-keep-alive-timeout-min":"Keep alive timeout can not be less then 1","grpc-keep-alive-timeout-pattern":"Keep alive timeout is not valid","grpc-keep-alive":"Keep alive (in ms)","grpc-keep-alive-required":"Keep alive is required","grpc-keep-alive-min":"Keep alive can not be less then 1","grpc-keep-alive-pattern":"Keep alive is not valid","grpc-min-time-between-pings":"Min time between pings (in ms)","grpc-min-time-between-pings-required":"Min time between pings is required","grpc-min-time-between-pings-min":"Min time between pings can not be less then 1","grpc-min-time-between-pings-pattern":"Min time between pings is not valid","grpc-min-ping-interval-without-data":"Min ping interval without data (in ms)","grpc-min-ping-interval-without-data-required":"Min ping interval without data is required","grpc-min-ping-interval-without-data-min":"Min ping interval without data can not be less then 1","grpc-min-ping-interval-without-data-pattern":"Min ping interval without data is not valid","grpc-max-pings-without-data":"Max pings without data","grpc-max-pings-without-data-required":"Max pings without data is required","grpc-max-pings-without-data-min":"Max pings without data can not be less then 1","grpc-max-pings-without-data-pattern":"Max pings without data is not valid","inactivity-check-period-seconds":"Inactivity check period (in sec)","inactivity-check-period-seconds-required":"Inactivity check period is required","inactivity-check-period-seconds-min":"Inactivity check period can not be less then 1","inactivity-check-period-seconds-pattern":"Inactivity check period is not valid","inactivity-timeout-seconds":"Inactivity timeout (in sec)","inactivity-timeout-seconds-required":"Inactivity timeout is required","inactivity-timeout-seconds-min":"Inactivity timeout can not be less then 1","inactivity-timeout-seconds-pattern":"Inactivity timeout is not valid","json-parse":"Nieprawidłowy JSON.","json-required":"Pole nie może być puste.",logs:{logs:"Logs",days:"days",hours:"hours",minutes:"minutes",seconds:"seconds","date-format":"Date format","date-format-required":"Date format required","log-format":"Log format","log-type":"Log type","log-format-required":"Log format required",remote:"Remote logging","remote-logs":"Remote logs",local:"Local logging",level:"Log level","file-path":"File path","file-path-required":"File path required","saving-period":"Log saving period","saving-period-min":"Log saving period can not be less then 1","saving-period-required":"Log saving period required","backup-count":"Backup count","backup-count-min":"Backup count can not be less then 1","backup-count-required":"Backup count required"},"min-pack-send-delay":"Min pack send delay (in ms)","min-pack-send-delay-required":"Min pack send delay is required","min-pack-send-delay-min":"Min pack send delay can not be less then 0","no-connectors":"Brak złączy","no-data":"Brak konfiguracji","no-gateway-found":"Nie znaleziono gateway'a.","no-gateway-matching":" '{{item}}' nie znaleziono.","path-logs":"Ścieżka do plików dziennika","path-logs-required":"Ścieżka jest wymagana.","permit-without-calls":"Keep alive permit without calls",remote:"Zdalna konfiguracja","remote-logging-level":"Poziom logowania","remove-entry":"Usuń konfigurację","remote-shell":"Remote shell","remote-configuration":"Remote Configuration",other:"Other","save-tip":"Zapisz plik konfiguracyjny","security-type":"Rodzaj zabezpieczenia","security-types":{"access-token":"Token dostępu","username-password":"Username and Password",tls:"TLS","tls-access-token":"TLS + Access Token","tls-private-key":"TLS + Private Key"},"server-port":"Server port",statistics:{statistic:"Statistic",statistics:"Statistics","statistic-commands-empty":"No statistics available",commands:"Commands","send-period":"Statistic send period (in sec)","send-period-required":"Statistic send period is required","send-period-min":"Statistic send period can not be less then 60","send-period-pattern":"Statistic send period is not valid","check-connectors-configuration":"Check connectors configuration (in sec)","check-connectors-configuration-required":"Check connectors configuration is required","check-connectors-configuration-min":"Check connectors configuration can not be less then 1","check-connectors-configuration-pattern":"Check connectors configuration is not valid",add:"Add command",timeout:"Timeout","timeout-required":"Timeout is required","timeout-min":"Timeout can not be less then 1","timeout-pattern":"Timeout is not valid","attribute-name":"Attribute name","attribute-name-required":"Attribute name is required",command:"Command","command-required":"Command is required",remove:"Remove command"},storage:"Składowanie","storage-max-file-records":"Maksymalna liczba rekordów w pliku","storage-max-files":"Maksymalna liczba plików","storage-max-files-min":"Minimalna liczba to 1.","storage-max-files-pattern":"Numer jest nieprawidłowy.","storage-max-files-required":"Numer jest wymagany.","storage-max-records":"Maksymalna liczba rekordów w pamięci","storage-max-records-min":"Minimalna liczba rekordów to 1.","storage-max-records-pattern":"Numer jest nieprawidłowy.","storage-max-records-required":"Maksymalna liczba rekordów jest wymagana.","storage-read-record-count":"Read record count in storage","storage-read-record-count-min":"Minimum number of records is 1.","storage-read-record-count-pattern":"Number is not valid.","storage-read-record-count-required":"Read record count is required.","storage-max-read-record-count":"Max read record count in storage","storage-max-read-record-count-min":"Minimum number of records is 1.","storage-max-read-record-count-pattern":"Number is not valid.","storage-max-read-record-count-required":"Max Read record count is required.","storage-data-folder-path":"Data folder path","storage-data-folder-path-required":"Data folder path is required.","storage-pack-size":"Maksymalny rozmiar pakietu wydarzeń","storage-pack-size-min":"Minimalna liczba to 1.","storage-pack-size-pattern":"Numer jest nieprawidłowy.","storage-pack-size-required":"Maksymalny rozmiar pakietu wydarzeń jest wymagany.","storage-path":"Ścieżka przechowywania","storage-path-required":"Ścieżka do przechowywania jest wymagana.","storage-type":"Typ składowania","storage-types":{"file-storage":"Nośnik danych","memory-storage":"Przechowywanie pamięci",sqlite:"SQLITE"},thingsboard:"ThingsBoard",general:"General","thingsboard-host":"Gospodarz ThingsBoard","thingsboard-host-required":"Host jest wymagany.","thingsboard-port":"Port ThingsBoard","thingsboard-port-max":"Maksymalny numer portu to 65535.","thingsboard-port-min":"Minimalny numer portu to 1.","thingsboard-port-pattern":"Port jest nieprawidłowy.","thingsboard-port-required":"Port jest wymagany.",tidy:"Uporządkuj","tidy-tip":"Uporządkowana konfiguracja JSON","title-connectors-json":"Złącze {{typeName}} konfiguracja","tls-path-ca-certificate":"Ścieżka do certyfikatu CA na gateway","tls-path-client-certificate":"Ścieżka do certyfikatu klienta na gateway","messages-ttl-check-in-hours":"Messages TTL check in hours","messages-ttl-check-in-hours-required":"Messages TTL check in hours is required.","messages-ttl-check-in-hours-min":"Min number is 1.","messages-ttl-check-in-hours-pattern":"Number is not valid.","messages-ttl-in-days":"Messages TTL in days","messages-ttl-in-days-required":"Messages TTL in days is required.","messages-ttl-in-days-min":"Min number is 1.","messages-ttl-in-days-pattern":"Number is not valid.","mqtt-qos":"QoS","mqtt-qos-required":"QoS is required","mqtt-qos-range":"QoS values range is from 0 to 1","tls-path-private-key":"Ścieżka do klucza prywatnego na bramce","toggle-fullscreen":"Przełącz tryb pełnoekranowy","transformer-json-config":"Konfiguracja JSON*","update-config":"Dodaj/zaktualizuj konfigurację JSON",hints:{"remote-configuration":"Enables remote configuration and management of the gateway","remote-shell":"Enables remote control of the operating system with the gateway from the Remote Shell widget",host:"Hostname or IP address of ThingsBoard server",port:"Port of MQTT service on ThingsBoard server",token:"Access token for the gateway from ThingsBoard server","client-id":"MQTT client id for the gateway form ThingsBoard server",username:"MQTT username for the gateway form ThingsBoard server",password:"MQTT password for the gateway form ThingsBoard server","ca-cert":"Path to CA certificate file","date-form":"Date format in log message","data-folder":"Path to folder, that will contains data (Relative or Absolute)","log-format":"Log message format","remote-log":"Enables remote logging and logs reading from the gateway","backup-count":"If backup count is > 0, when a rollover is done, no more than backup count files are kept - the oldest ones are deleted",storage:"Provides configuration for saving incoming data before it is sent to the platform","max-file-count":"Maximum count of file that will be created","max-read-count":"Count of messages to get from storage and send to ThingsBoard","max-records":"Maximum count of records that will be stored in one file","read-record-count":"Count of messages to get from storage and send to ThingsBoard","max-records-count":"Maximum count of data in storage before send to ThingsBoard","ttl-check-hour":"How often will Gateway check data for obsolescence","ttl-messages-day":"Maximum days that storage will save data",commands:"Commands for collecting additional statistic",attribute:"Statistic telemetry key",timeout:"Timeout for command executing",command:"The result of the command execution, will be used as the value for telemetry","check-device-activity":"Enables monitor the activity of each connected device","inactivity-timeout":"Time after whose the gateway will disconnect device","inactivity-period":"Periodicity of device activity check","minimal-pack-delay":"Delay between sending packs of messages (Decreasing this setting results in increased CPU usage)",qos:"Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)","server-port":"Network port on which GRPC server will listen for incoming connections.","grpc-keep-alive-timeout":"Maximum time the server should wait for a keepalive ping response before considering the connection dead.","grpc-keep-alive":"Duration between two successive keepalive ping messages when there is no active RPC call.","grpc-min-time-between-pings":"Minimum amount of time the server should wait between sending keepalive ping messages","grpc-max-pings-without-data":"Maximum number of keepalive ping messages that the server can send without receiving any data before it considers the connection dead.","grpc-min-ping-interval-without-data":"Minimum amount of time the server should wait between sending keepalive ping messages when there is no data being sent or received.","permit-without-calls":"Allow server to keep the GRPC connection alive even when there are no active RPC calls."}},Ze={"add-entry":"Adicionar configuração","connector-add":"Adicionar novo conector","connector-enabled":"Habilitar conector","connector-name":"Nome do conector","connector-name-required":"O nome do conector é obrigatório.","connector-type":"Tipo de conector","connector-type-required":"O tipo de conector é obrigatório.",connectors:"Configuração de conectores","create-new-gateway":"Criar um novo gateway","create-new-gateway-text":"Tem certeza de que deseja criar um novo gateway com o nome: '{{gatewayName}}'?",delete:"Excluir configuração","download-tip":"Download de arquivo de configuração",gateway:"Gateway","gateway-exists":"Já existe um dispositivo com o mesmo nome.","gateway-name":"Nome do gateway","gateway-name-required":"O nome do gateway é obrigatório.","gateway-saved":"A configuração do gateway foi salva corretamente.","json-parse":"JSON inválido.","json-required":"O campo não pode estar em branco.","no-connectors":"Sem conectores","no-data":"Sem configurações","no-gateway-found":"Nenhum gateway encontrado.","no-gateway-matching":" '{{item}}' não encontrado.","path-logs":"Caminho para arquivos de log","path-logs-required":"O caminho é obrigatório",remote:"Configuração remota","remote-logging-level":"Nível de registro em log","remove-entry":"Remover configuração","save-tip":"Salvar arquivo de configuração","security-type":"Tipo de segurança","security-types":{"access-token":"Token de Acesso",tls:"TLS"},storage:"Armazenamento","storage-max-file-records":"Número máximo de registros em arquivo","storage-max-files":"Número máximo de arquivos","storage-max-files-min":"O número mínimo é 1.","storage-max-files-pattern":"O número não é válido.","storage-max-files-required":"O número é obrigatório.","storage-max-records":"Número máximo de registros em armazenamento","storage-max-records-min":"O número mínimo de registros é 1.","storage-max-records-pattern":"O número não é válido.","storage-max-records-required":"O número máximo de registros é obrigatório.","storage-pack-size":"Tamanho máximo de pacote de eventos","storage-pack-size-min":"O número mínimo é 1.","storage-pack-size-pattern":"O número não é válido.","storage-pack-size-required":"O tamanho máximo de pacote de eventos é obrigatório.","storage-path":"Caminho de armazenamento","storage-path-required":"O caminho de armazenamento é obrigatório.","storage-type":"Tipo de armazenamento","storage-types":{"file-storage":"Armazenamento de arquivo","memory-storage":"Armazenamento de memória"},thingsboard:"ThingsBoard","thingsboard-host":"Host ThingsBoard","thingsboard-host-required":"O host é obrigatório.","thingsboard-port":"Porta ThingsBoard","thingsboard-port-max":"O número máximo de portas é 65535.","thingsboard-port-min":"O número mínimo de portas é 1.","thingsboard-port-pattern":"A porta não é válida.","thingsboard-port-required":"A porta é obrigatória.",tidy:"Tidy","tidy-tip":"Config Tidy JSON","title-connectors-json":"Configuração do conector {{typeName}}","tls-path-ca-certificate":"Caminho para certificado de Autoridade de Certificação no gateway","tls-path-client-certificate":"Caminho para certificado de cliente no gateway","tls-path-private-key":"Caminho para chave privada no gateway","toggle-fullscreen":"Alternar tela inteira","transformer-json-config":"Configuração JSON*","update-config":"Adicionar/atualizar configuração de JSON"},et={"add-entry":"Dodaj konfiguracijo","connector-add":"Dodaj nov priključek","connector-enabled":"Omogoči priključek","connector-name":"Ime priključka","connector-name-required":"Ime priključka je obvezno.","connector-type":"Vrsta priključka","connector-type-required":"Zahteva se vrsta priključka.",connectors:"Konfiguracija priključkov","create-new-gateway":"Ustvari nov prehod","create-new-gateway-text":"Ali ste prepričani, da želite ustvariti nov prehod z imenom: '{{gatewayName}}'?",delete:"Izbriši konfiguracijo","download-tip":"Prenos konfiguracijske datoteke",gateway:"Prehod","gateway-exists":"Naprava z istim imenom že obstaja.","gateway-name":"Ime prehoda","gateway-name-required":"Ime prehoda je obvezno.","gateway-saved":"Konfiguracija prehoda je uspešno shranjena.","json-parse":"Neveljaven JSON.","json-required":"Polje ne sme biti prazno.","no-connectors":"Ni priključkov","no-data":"Brez konfiguracij","no-gateway-found":"Prehod ni najden.","no-gateway-matching":" '{{item}}' ni mogoče najti.","path-logs":"Pot do dnevniških datotek","path-logs-required":"Pot je obvezna.",remote:"Oddaljena konfiguracija","remote-logging-level":"Raven beleženja","remove-entry":"Odstrani konfiguracijo","save-tip":"Shrani konfiguracijsko datoteko","security-type":"Vrsta zaščite","security-types":{"access-token":"Dostopni žeton",tls:"TLS"},storage:"Shramba","storage-max-file-records":"Največ zapisov v datoteki","storage-max-files":"Največje število datotek","storage-max-files-min":"Najmanjše število je 1.","storage-max-files-pattern":"Številka ni veljavna.","storage-max-files-required":"Številka je obvezna.","storage-max-records":"Največ zapisov v pomnilniku","storage-max-records-min":"Najmanjše število zapisov je 1.","storage-max-records-pattern":"Številka ni veljavna.","storage-max-records-required":"Zahtevan je največ zapisov.","storage-pack-size":"Največja velikost paketa dogodkov","storage-pack-size-min":"Najmanjše število je 1.","storage-pack-size-pattern":"Številka ni veljavna.","storage-pack-size-required":"Zahtevana je največja velikost paketa dogodkov.","storage-path":"Pot pomnilnika","storage-path-required":"Zahtevana je pot do pomnilnika.","storage-type":"Vrsta pomnilnika","storage-types":{"file-storage":"Shramba datotek","memory-storage":"Spomin pomnilnika"},thingsboard:"ThingsBoard","thingsboard-host":"Gostitelj ThingsBoard","thingsboard-host-required":"Potreben je gostitelj.","thingsboard-port":"Vrata ThingsBoard","thingsboard-port-max":"Največja številka vrat je 65535.","thingsboard-port-min":"Najmanjša številka vrat je 1.","thingsboard-port-pattern":"Vrata niso veljavna.","thingsboard-port-required":"Potrebna so vrata.",tidy:"Urejeno","tidy-tip":"Urejena konfiguracija JSON","title-connectors-json":"Konfiguracija konektorja {{typeName}}","tls-path-ca-certificate":"Pot do potrdila CA na prehodu","tls-path-client-certificate":"Pot do potrdila stranke na prehodu","tls-path-private-key":"Pot do zasebnega ključa na prehodu","toggle-fullscreen":"Preklop na celozaslonski način","transformer-json-config":"Konfiguracija JSON *","update-config":"Dodaj / posodobi konfiguracijo JSON"},tt={"add-entry":"Yapılandırma ekle","connector-add":"Yeni bağlayıcı ekle","connector-enabled":"Bağlayıcıyı etkinleştir","connector-name":"Bağlayıcı adı","connector-name-required":"Bağlayıcı adı gerekli.","connector-type":"Bağlayıcı tipi","connector-type-required":"Bağlayıcı türü gerekli.",connectors:"Bağlayıcıların yapılandırması","create-new-gateway":"Yeni bir ağ geçidi oluştur","create-new-gateway-text":"'{{gatewayName}}' adında yeni bir ağ geçidi oluşturmak istediğinizden emin misiniz?",delete:"Yapılandırmayı sil","download-tip":"Yapılandırma dosyasını indirin",gateway:"Ağ geçidi","gateway-exists":"Aynı ada sahip cihaz zaten var.","gateway-name":"Ağ geçidi adı","gateway-name-required":"Ağ geçidi adı gerekli.","gateway-saved":"Ağ geçidi yapılandırması başarıyla kaydedildi.","json-parse":"Geçerli bir JSON değil.","json-required":"Alan boş olamaz.","no-connectors":"Bağlayıcı yok","no-data":"Yapılandırma yok","no-gateway-found":"Ağ geçidi bulunamadı.","no-gateway-matching":" '{{item}}' bulunamadı.","path-logs":"Log dosyaları yolu","path-logs-required":"Log dosyaları dizini gerekli.",remote:"Uzaktan yapılandırma","remote-logging-level":"Loglama seviyesi","remove-entry":"Yapılandırmayı kaldır","save-tip":"Yapılandırma dosyasını kaydet","security-type":"Güvenlik türü","security-types":{"access-token":"Access Token",tls:"TLS"},storage:"Depolama","storage-max-file-records":"Dosyadaki maksimum kayıt","storage-max-files":"Maksimum dosya sayısı","storage-max-files-min":"Minimum sayı 1'dir.","storage-max-files-pattern":"Sayı geçerli değil.","storage-max-files-required":"Sayı gerekli.","storage-max-records":"Depodaki maksimum kayıt","storage-max-records-min":"Minimum kayıt sayısı 1'dir.","storage-max-records-pattern":"Sayı geçerli değil.","storage-max-records-required":"Maksimum kayıt gerekli.","storage-pack-size":"Maksimum etkinlik paketi boyutu","storage-pack-size-min":"Minimum sayı 1'dir.","storage-pack-size-pattern":"Sayı geçerli değil.","storage-pack-size-required":"Maksimum etkinlik paketi boyutu gerekli.","storage-path":"Depolama yolu","storage-path-required":"Depolama yolu gerekli.","storage-type":"Depolama türü","storage-types":{"file-storage":"Dosya depolama","memory-storage":"Bellek depolama"},thingsboard:"ThingsBoard","thingsboard-host":"ThingsBoard host","thingsboard-host-required":"Host gerekli.","thingsboard-port":"ThingsBoard port","thingsboard-port-max":"Maksimum port numarası 65535.","thingsboard-port-min":"Minimum port numarası 1'dir.","thingsboard-port-pattern":"Port geçerli değil.","thingsboard-port-required":"Port gerekli.",tidy:"Tidy","tidy-tip":"Tidy config JSON","title-connectors-json":"Connector {{typeName}} configuration","tls-path-ca-certificate":"Path to CA certificate on gateway","tls-path-client-certificate":"Path to client certificate on gateway","tls-path-private-key":"Path to private key on gateway","toggle-fullscreen":"Toggle fullscreen","transformer-json-config":"Configuration JSON*","update-config":"Add/update configuration JSON"},nt={"add-entry":"添加配置",advanced:"高级","checking-device-activity":"检查设备活动",command:"Docker命令","command-copied-message":"Docker命令已复制到剪贴板",configuration:"配置","connector-add":"添加连接器","connector-enabled":"启用连接器","connector-name":"连接器名称","connector-name-required":"连接器名称必填。","connector-type":"连接器类型","connector-type-required":"连接器类型必填。",connectors:"连接器配置","connectors-config":"连接器配置","connectors-table-enabled":"已启用","connectors-table-name":"名称","connectors-table-type":"类型","connectors-table-status":"状态","connectors-table-actions":"操作","connectors-table-key":"键","connectors-table-class":"类","rpc-command-send":"发送","rpc-command-result":"结果","rpc-command-edit-params":"编辑参数","gateway-configuration":"通用配置","create-new-gateway":"创建网关","create-new-gateway-text":"确定要创建名为 '{{gatewayName}}' 的新网关?","created-time":"创建时间","configuration-delete-dialog-header":"配置将被删除","configuration-delete-dialog-body":"只有对网关进行物理访问时,才有可能关闭远程配置。所有先前的配置都将被删除。

\n要关闭配置,请在下面输入网关名称","configuration-delete-dialog-input":"网关名称","configuration-delete-dialog-input-required":"网关名称是必需的","configuration-delete-dialog-confirm":"关闭",delete:"删除配置","download-tip":"下载配置","drop-file":"将文件拖放到此处或",gateway:"网关","gateway-exists":"同名设备已存在。","gateway-name":"网关名称","gateway-name-required":"网关名称必填。","gateway-saved":"已成功保存网关配置。",grpc:"GRPC","grpc-keep-alive-timeout":"保持连接超时(毫秒)","grpc-keep-alive-timeout-required":"需要保持连接超时","grpc-keep-alive-timeout-min":"保持连接超时不能小于1","grpc-keep-alive-timeout-pattern":"保持连接超时无效","grpc-keep-alive":"保持连接(毫秒)","grpc-keep-alive-required":"需要保持连接","grpc-keep-alive-min":"保持连接不能小于1","grpc-keep-alive-pattern":"保持连接无效","grpc-min-time-between-pings":"最小Ping间隔(毫秒)","grpc-min-time-between-pings-required":"需要最小Ping间隔","grpc-min-time-between-pings-min":"最小Ping间隔不能小于1","grpc-min-time-between-pings-pattern":"最小Ping间隔无效","grpc-min-ping-interval-without-data":"无数据时的最小Ping间隔(毫秒)","grpc-min-ping-interval-without-data-required":"需要无数据时的最小Ping间隔","grpc-min-ping-interval-without-data-min":"无数据时的最小Ping间隔不能小于1","grpc-min-ping-interval-without-data-pattern":"无数据时的最小Ping间隔无效","grpc-max-pings-without-data":"无数据时的最大Ping数","grpc-max-pings-without-data-required":"需要无数据时的最大Ping数","grpc-max-pings-without-data-min":"无数据时的最大Ping数不能小于1","grpc-max-pings-without-data-pattern":"无数据时的最大Ping数无效","inactivity-check-period-seconds":"不活跃检查期(秒)","inactivity-check-period-seconds-required":"需要不活跃检查期","inactivity-check-period-seconds-min":"不活跃检查期不能小于1","inactivity-check-period-seconds-pattern":"不活跃检查期无效","inactivity-timeout-seconds":"不活跃超时(秒)","inactivity-timeout-seconds-required":"需要不活跃超时","inactivity-timeout-seconds-min":"不活跃超时不能小于1","inactivity-timeout-seconds-pattern":"不活跃超时无效","json-parse":"无效的JSON。","json-required":"字段不能为空。",logs:{logs:"日志",days:"天",hours:"小时",minutes:"分钟",seconds:"秒","date-format":"日期格式","date-format-required":"需要日期格式","log-format":"日志格式","log-type":"日志类型","log-format-required":"需要日志格式",remote:"远程日志记录","remote-logs":"远程日志",local:"本地日志记录",level:"日志级别","file-path":"文件路径","file-path-required":"需要文件路径","saving-period":"日志保存期限","saving-period-min":"日志保存期限不能小于1","saving-period-required":"需要日志保存期限","backup-count":"备份数量","backup-count-min":"备份数量不能小于1","backup-count-required":"需要备份数量"},"min-pack-send-delay":"最小包发送延迟(毫秒)","min-pack-send-delay-required":"最小包发送延迟是必需的","min-pack-send-delay-min":"最小包发送延迟不能小于0","no-connectors":"无连接器","no-data":"没有配置","no-gateway-found":"未找到网关。","no-gateway-matching":"未找到 '{{item}}' 。","path-logs":"日志文件的路径","path-logs-required":"路径是必需的。","permit-without-calls":"保持连接许可,无需响应",remote:"远程配置","remote-logging-level":"日志记录级别","remove-entry":"删除配置","remote-shell":"远程Shell","remote-configuration":"远程配置",other:"其他","save-tip":"保存配置","security-type":"安全类型","security-types":{"access-token":"访问令牌","username-password":"用户名和密码",tls:"TLS","tls-access-token":"TLS + 访问令牌","tls-private-key":"TLS + 私钥"},"server-port":"服务器端口",statistics:{statistic:"统计信息",statistics:"统计信息","statistic-commands-empty":"无可用统计信息",commands:"命令","send-period":"统计信息发送周期(秒)","send-period-required":"统计信息发送周期是必需的","send-period-min":"统计信息发送周期不能小于60","send-period-pattern":"统计信息发送周期无效","check-connectors-configuration":"检查连接器配置(秒)","check-connectors-configuration-required":"检查连接器配置是必需的","check-connectors-configuration-min":"检查连接器配置不能小于1","check-connectors-configuration-pattern":"检查连接器配置无效",add:"添加命令",timeout:"超时时间","timeout-required":"超时时间是必需的","timeout-min":"超时时间不能小于1","timeout-pattern":"超时时间无效","attribute-name":"属性名称","attribute-name-required":"属性名称是必需的",command:"命令","command-required":"命令是必需的","command-pattern":"命令无效",remove:"删除命令"},storage:"存储","storage-max-file-records":"文件中的最大记录数","storage-max-files":"最大文件数","storage-max-files-min":"最小值为1。","storage-max-files-pattern":"数字无效。","storage-max-files-required":"数字是必需的。","storage-max-records":"存储中的最大记录数","storage-max-records-min":"最小记录数为1。","storage-max-records-pattern":"数字无效。","storage-max-records-required":"最大记录项必填。","storage-read-record-count":"存储中的读取记录数","storage-read-record-count-min":"最小记录数为1。","storage-read-record-count-pattern":"数字不合法。","storage-read-record-count-required":"需要读取记录数。","storage-max-read-record-count":"存储中的最大读取记录数","storage-max-read-record-count-min":"最小记录数为1。","storage-max-read-record-count-pattern":"数字不合法。","storage-max-read-record-count-required":"最大读取记录数必需。","storage-data-folder-path":"数据文件夹路径","storage-data-folder-path-required":"需要数据文件夹路径。","storage-pack-size":"最大事件包大小","storage-pack-size-min":"最小值为1。","storage-pack-size-pattern":"数字无效。","storage-pack-size-required":"最大事件包大小必填。","storage-path":"存储路径","storage-path-required":"存储路径必填。","storage-type":"存储类型","storage-types":{"file-storage":"文件存储","memory-storage":"内存存储",sqlite:"SQLITE"},thingsboard:"ThingsBoard",general:"常规","thingsboard-host":"ThingsBoard主机","thingsboard-host-required":"主机必填。","thingsboard-port":"ThingsBoard端口","thingsboard-port-max":"最大端口号为65535。","thingsboard-port-min":"最小端口号为1。","thingsboard-port-pattern":"端口无效。","thingsboard-port-required":"端口必填。",tidy:"整理","tidy-tip":"整理配置JSON","title-connectors-json":"连接器 {{typeName}} 配置","tls-path-ca-certificate":"网关上CA证书的路径","tls-path-client-certificate":"网关上客户端证书的路径","messages-ttl-check-in-hours":"消息TTL检查小时数","messages-ttl-check-in-hours-required":"需要提供消息TTL检查小时数。","messages-ttl-check-in-hours-min":"最小值为1。","messages-ttl-check-in-hours-pattern":"数字无效。","messages-ttl-in-days":"消息TTL天数","messages-ttl-in-days-required":"需要提供消息TTL天数。","messages-ttl-in-days-min":"最小值为1。","messages-ttl-in-days-pattern":"数字无效。","mqtt-qos":"QoS","mqtt-qos-required":"需要提供QoS","mqtt-qos-range":"QoS值的范围是从0到1","tls-path-private-key":"网关上私钥的路径","toggle-fullscreen":"切换全屏","transformer-json-config":"配置JSON*","update-config":"添加/更新配置JSON",hints:{"remote-configuration":"启用对网关的远程配置和管理","remote-shell":"通过远程Shell小部件启用对网关操作系统的远程控制",host:"ThingsBoard 主机名或IP地址",port:"ThingsBoard MQTT服务端口",token:"ThingsBoard 网关访问令牌","client-id":"ThingsBoard 网关MQTT客户端ID",username:"ThingsBoard 网关MQTT用户名",password:"ThingsBoard 网关MQTT密码","ca-cert":"CA证书文件的路径","date-form":"日志消息中的日期格式","data-folder":"包含数据的文件夹的路径(相对或绝对路径)","log-format":"日志消息格式","remote-log":"启用对网关的远程日志记录和日志读取","backup-count":"如果备份计数大于0,则在执行轮换时,最多保留备份计数个文件-最旧的文件将被删除",storage:"提供将数据发送到平台之前保存传入数据的配置","max-file-count":"将创建的文件的最大数量","max-read-count":"从存储中获取的消息计数并发送到ThingsBoard","max-records":"一个文件中存储的最大记录数","read-record-count":"从存储中获取的消息计数并发送到ThingsBoard","max-records-count":"在将数据发送到ThingsBoard之前,存储中的最大数据计数","ttl-check-hour":"网关多久检查一次数据是否过时","ttl-messages-day":"存储将保存数据的最大天数",commands:"用于收集附加统计信息的命令",attribute:"统计遥测键",timeout:"命令执行的超时时间",command:"命令执行的结果,将用作遥测的值","check-device-activity":"启用监视每个连接设备的活动","inactivity-timeout":"在此时间后,网关将断开设备的连接","inactivity-period":"设备活动检查的周期","minimal-pack-delay":"发送消息包之间的延迟(减小此设置会导致增加CPU使用率)",qos:"MQTT消息传递的服务质量(0-至多一次,1-至少一次)","server-port":"GRPC服务器侦听传入连接的网络端口","grpc-keep-alive-timeout":"在考虑连接死亡之前,服务器等待keepalive ping响应的最长时间","grpc-keep-alive":"没有活动RPC调用时两个连续keepalive ping消息之间的持续时间","grpc-min-time-between-pings":"服务器在发送keepalive ping消息之间应等待的最小时间量","grpc-max-pings-without-data":"在没有接收到任何数据之前,服务器可以发送的keepalive ping消息的最大数量,然后将连接视为死亡","grpc-min-ping-interval-without-data":"在没有发送或接收数据时,服务器在发送keepalive ping消息之间应等待的最小时间量","permit-without-calls":"允许服务器在没有活动RPC调用时保持GRPC连接活动"},"docker-label":"使用以下指令在 Docker compose 中运行 IoT 网关,并为选定的设备提供凭据","install-docker-compose":"使用以下说明下载、安装和设置 Docker Compose","download-configuration-file":"下载配置文件","download-docker-compose":"下载您的网关的 docker-compose.yml 文件","launch-gateway":"启动网关","launch-docker-compose":"在包含 docker-compose.yml 文件的文件夹中,使用以下命令在终端中启动网关"},at={"add-entry":"增加配置","connector-add":"增加新連接器","connector-enabled":"啟用連接器","connector-name":"連接器名稱","connector-name-required":"需要連接器名稱。","connector-type":"連接器類型","connector-type-required":"需要連接器類型。",connectors:"連接器配置","create-new-gateway":"建立新閘道","create-new-gateway-text":"您確定要建立一個名稱為:'{{gatewayName}}'的新閘道嗎?",delete:"刪除配置","download-tip":"下載配置文件",gateway:"閘道","gateway-exists":"同名設備已存在。","gateway-name":"閘道名稱","gateway-name-required":"需要閘道名稱。","gateway-saved":"閘道配置已成功保存。","json-parse":"無效的JSON","json-required":"欄位不能為空。","no-connectors":"無連接器","no-data":"無配置","no-gateway-found":"未找到閘道。","no-gateway-matching":" 未找到'{{item}}'。","path-logs":"日誌文件的路徑","path-logs-required":"需要路徑。",remote:"移除配置","remote-logging-level":"日誌記錄級別","remove-entry":"移除配置","save-tip":"保存配置文件","security-type":"安全類型","security-types":{"access-token":"訪問Token",tls:"TLS"},storage:"貯存","storage-max-file-records":"文件中的最大紀錄","storage-max-files":"最大文件數","storage-max-files-min":"最小數量為1。","storage-max-files-pattern":"號碼無效。","storage-max-files-required":"需要號碼。","storage-max-records":"存儲中的最大紀錄","storage-max-records-min":"最小紀錄數為1。","storage-max-records-pattern":"號碼無效。","storage-max-records-required":"需要最大紀錄數","storage-pack-size":"最大事件包大小","storage-pack-size-min":"最小數量為1。","storage-pack-size-pattern":"號碼無效.","storage-pack-size-required":"需要最大事件包大小","storage-path":"存儲路徑","storage-path-required":"需要存儲路徑。","storage-type":"存儲類型","storage-types":{"file-storage":"文件存儲","memory-storage":"記憶體存儲"},thingsboard:"ThingsBoard","thingsboard-host":"ThingsBoard主機","thingsboard-host-required":"需要主機。","thingsboard-port":"ThingsBoard連接埠","thingsboard-port-max":"最大埠號為 65535。","thingsboard-port-min":"最小埠號為1。","thingsboard-port-pattern":"連接埠無效。","thingsboard-port-required":"需要連接埠。",tidy:"整理","tidy-tip":"整理配置JSON","title-connectors-json":"連接器{{typeName}}配置","tls-path-ca-certificate":"閘道上CA證書的路徑","tls-path-client-certificate":"閘道上用戶端憑據的路徑","tls-path-private-key":"閘道上的私鑰路徑","toggle-fullscreen":"切換全螢幕","transformer-json-config":"配置JSON*","update-config":"增加/更新配置JSON"};var rt={"3.5.4":{socket:{type:"TCP",address:"127.0.0.1",port:5e4,bufferSize:1024},devices:[{address:"*:*",deviceName:"Device Example",deviceType:"default",encoding:"utf-8",telemetry:[{key:"temp",byteFrom:0,byteTo:-1},{key:"hum",byteFrom:0,byteTo:2}],attributes:[{key:"name",byteFrom:0,byteTo:-1},{key:"num",byteFrom:2,byteTo:4}],attributeRequests:[{type:"shared",requestExpression:"${[0:3]==atr}",attributeNameExpression:"[3:]"}],attributeUpdates:[{encoding:"utf-16",attributeOnThingsBoard:"sharedName"}],serverSideRpc:[{methodRPC:"rpcMethod1",withResponse:!0,encoding:"utf-8"}]}]},legacy:{type:"TCP",address:"127.0.0.1",port:5e4,bufferSize:1024,devices:[{address:"*:*",deviceName:"Device Example",deviceType:"default",encoding:"utf-8",telemetry:[{key:"temp",byteFrom:0,byteTo:-1},{key:"hum",byteFrom:0,byteTo:2}],attributes:[{key:"name",byteFrom:0,byteTo:-1},{key:"num",byteFrom:2,byteTo:4}],attributeRequests:[{type:"shared",requestExpression:"${[0:3]==atr}",attributeNameExpression:"[3:]"}],attributeUpdates:[{encoding:"utf-16",attributeOnThingsBoard:"sharedName"}],serverSideRpc:[{methodRPC:"rpcMethod1",withResponse:!0,methodProcessing:"write",encoding:"utf-8"}]}]}},it={"3.5.2":{broker:{host:"127.0.0.1",port:1883,clientId:"ThingsBoard_gateway",version:5,maxMessageNumberPerWorker:10,maxNumberOfWorkers:100,sendDataOnlyOnChange:!1,security:{type:"anonymous"}},mapping:[{topicFilter:"sensor/data",subscriptionQos:1,converter:{type:"json",deviceInfo:{deviceNameExpressionSource:"message",deviceNameExpression:"${serialNumber}",deviceProfileExpressionSource:"message",deviceProfileExpression:"${sensorType}"},sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"string",key:"model",value:"${sensorModel}"},{type:"string",key:"${sensorModel}",value:"on"}],timeseries:[{type:"string",key:"temperature",value:"${temp}"},{type:"double",key:"humidity",value:"${hum}"},{type:"string",key:"combine",value:"${hum}:${temp}"}]}},{topicFilter:"sensor/+/data",subscriptionQos:1,converter:{type:"json",deviceInfo:{deviceNameExpressionSource:"topic",deviceNameExpression:"(?<=sensor/)(.*?)(?=/data)",deviceProfileExpressionSource:"constant",deviceProfileExpression:"Thermometer"},sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"string",key:"model",value:"${sensorModel}"}],timeseries:[{type:"double",key:"temperature",value:"${temp}"},{type:"string",key:"humidity",value:"${hum}"}]}},{topicFilter:"sensor/raw_data",subscriptionQos:1,converter:{type:"bytes",deviceInfo:{deviceNameExpressionSource:"message",deviceNameExpression:"[0:4]",deviceProfileExpressionSource:"constant",deviceProfileExpression:"default"},sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"raw",key:"rawData",value:"[:]"}],timeseries:[{type:"raw",key:"temp",value:"[4:]"}]}},{topicFilter:"custom/sensors/+",subscriptionQos:1,converter:{type:"custom",extension:"CustomMqttUplinkConverter",cached:!0,extensionConfig:{temperature:2,humidity:2,batteryLevel:1}}}],requestsMapping:{connectRequests:[{topicFilter:"sensor/connect",deviceInfo:{deviceNameExpressionSource:"message",deviceNameExpression:"${serialNumber}",deviceProfileExpressionSource:"constant",deviceProfileExpression:"Thermometer"}},{topicFilter:"sensor/+/connect",deviceInfo:{deviceNameExpressionSource:"topic",deviceNameExpression:"(?<=sensor/)(.*?)(?=/connect)",deviceProfileExpressionSource:"constant",deviceProfileExpression:"Thermometer"}}],disconnectRequests:[{topicFilter:"sensor/disconnect",deviceInfo:{deviceNameExpressionSource:"message",deviceNameExpression:"${serialNumber}"}},{topicFilter:"sensor/+/disconnect",deviceInfo:{deviceNameExpressionSource:"topic",deviceNameExpression:"(?<=sensor/)(.*?)(?=/connect)"}}],attributeRequests:[{retain:!1,topicFilter:"v1/devices/me/attributes/request",deviceInfo:{deviceNameExpressionSource:"message",deviceNameExpression:"${serialNumber}"},attributeNameExpressionSource:"message",attributeNameExpression:"${versionAttribute}, ${pduAttribute}",topicExpression:"devices/${deviceName}/attrs",valueExpression:"${attributeKey}: ${attributeValue}"}],attributeUpdates:[{retain:!0,deviceNameFilter:".*",attributeFilter:"firmwareVersion",topicExpression:"sensor/${deviceName}/${attributeKey}",valueExpression:'{"${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{type:"twoWay",deviceNameFilter:".*",methodFilter:"echo",requestTopicExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",responseTopicExpression:"sensor/${deviceName}/response/${methodName}/${requestId}",responseTopicQoS:1,responseTimeout:1e4,valueExpression:"${params}"},{type:"oneWay",deviceNameFilter:".*",methodFilter:"no-reply",requestTopicExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",valueExpression:"${params}"}]}},legacy:{broker:{name:"Default Local Broker",host:"127.0.0.1",port:1883,clientId:"ThingsBoard_gateway",version:5,maxMessageNumberPerWorker:10,maxNumberOfWorkers:100,sendDataOnlyOnChange:!1,security:{type:"basic",username:"user",password:"password"}},mapping:[{topicFilter:"sensor/data",converter:{type:"json",deviceNameJsonExpression:"${serialNumber}",deviceTypeJsonExpression:"${sensorType}",sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"string",key:"model",value:"${sensorModel}"},{type:"string",key:"${sensorModel}",value:"on"}],timeseries:[{type:"double",key:"temperature",value:"${temp}"},{type:"double",key:"humidity",value:"${hum}"},{type:"string",key:"combine",value:"${hum}:${temp}"}]}},{topicFilter:"sensor/+/data",converter:{type:"json",deviceNameTopicExpression:"(?<=sensor/)(.*?)(?=/data)",deviceTypeTopicExpression:"Thermometer",sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"string",key:"model",value:"${sensorModel}"}],timeseries:[{type:"double",key:"temperature",value:"${temp}"},{type:"double",key:"humidity",value:"${hum}"}]}},{topicFilter:"sensor/raw_data",converter:{type:"bytes",deviceNameExpression:"[0:4]",deviceTypeExpression:"default",sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"raw",key:"rawData",value:"[:]"}],timeseries:[{type:"raw",key:"temp",value:"[4:]"}]}},{topicFilter:"custom/sensors/+",converter:{type:"custom",extension:"CustomMqttUplinkConverter",cached:!0,"extension-config":{temperatureBytes:2,humidityBytes:2,batteryLevelBytes:1}}}],connectRequests:[{topicFilter:"sensor/connect",deviceNameJsonExpression:"${serialNumber}"},{topicFilter:"sensor/+/connect",deviceNameTopicExpression:"(?<=sensor/)(.*?)(?=/connect)"}],disconnectRequests:[{topicFilter:"sensor/disconnect",deviceNameJsonExpression:"${serialNumber}"},{topicFilter:"sensor/+/disconnect",deviceNameTopicExpression:"(?<=sensor/)(.*?)(?=/disconnect)"}],attributeRequests:[{retain:!1,topicFilter:"v1/devices/me/attributes/request",deviceNameJsonExpression:"${serialNumber}",attributeNameJsonExpression:"${versionAttribute}, ${pduAttribute}",topicExpression:"devices/${deviceName}/attrs",valueExpression:"${attributeKey}: ${attributeValue}"}],attributeUpdates:[{retain:!0,deviceNameFilter:".*",attributeFilter:"firmwareVersion",topicExpression:"sensor/${deviceName}/${attributeKey}",valueExpression:'{"${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{deviceNameFilter:".*",methodFilter:"echo",requestTopicExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",responseTopicExpression:"sensor/${deviceName}/response/${methodName}/${requestId}",responseTimeout:1e4,valueExpression:"${params}"},{deviceNameFilter:".*",methodFilter:"no-reply",requestTopicExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",valueExpression:"${params}"}]}},ot={"3.5.2":{master:{slaves:[{host:"127.0.0.1",port:5021,type:"tcp",method:"socket",timeout:35,byteOrder:"LITTLE",wordOrder:"LITTLE",retries:!0,retryOnEmpty:!0,retryOnInvalid:!0,pollPeriod:5e3,unitId:1,deviceName:"Temp Sensor",deviceType:"default",connectAttemptTimeMs:5e3,connectAttemptCount:5,waitAfterFailedAttemptsMs:3e5,reportStrategy:{type:"ON_REPORT_PERIOD",reportPeriod:3e4},attributes:[{tag:"string_read",type:"string",functionCode:4,objectsCount:4,address:1,reportStrategy:{type:"ON_REPORT_PERIOD",reportPeriod:15e3}},{tag:"bits_read",type:"bits",functionCode:4,objectsCount:1,address:5},{tag:"8int_read",type:"8int",functionCode:4,objectsCount:1,address:6},{tag:"16int_read",type:"16int",functionCode:4,objectsCount:1,address:7},{tag:"32int_read_divider",type:"32int",functionCode:4,objectsCount:2,address:8,divider:10},{tag:"8int_read_multiplier",type:"8int",functionCode:4,objectsCount:1,address:10,multiplier:10},{tag:"32int_read",type:"32int",functionCode:4,objectsCount:2,address:11},{tag:"64int_read",type:"64int",functionCode:4,objectsCount:4,address:13}],timeseries:[{tag:"8uint_read",type:"8uint",functionCode:4,objectsCount:1,address:17,reportStrategy:{type:"ON_REPORT_PERIOD",reportPeriod:15e3}},{tag:"16uint_read",type:"16uint",functionCode:4,objectsCount:2,address:18},{tag:"32uint_read",type:"32uint",functionCode:4,objectsCount:4,address:20},{tag:"64uint_read",type:"64uint",functionCode:4,objectsCount:1,address:24},{tag:"16float_read",type:"16float",functionCode:4,objectsCount:1,address:25},{tag:"32float_read",type:"32float",functionCode:4,objectsCount:2,address:26},{tag:"64float_read",type:"64float",functionCode:4,objectsCount:4,address:28}],attributeUpdates:[{tag:"shared_attribute_write",type:"32int",functionCode:6,objectsCount:2,address:29}],rpc:[{tag:"setValue",type:"bits",functionCode:5,objectsCount:1,address:31},{tag:"getValue",type:"bits",functionCode:1,objectsCount:1,address:31},{tag:"setCPUFanSpeed",type:"32int",functionCode:16,objectsCount:2,address:33},{tag:"getCPULoad",type:"32int",functionCode:4,objectsCount:2,address:35}]}]},slave:{type:"tcp",host:"127.0.0.1",port:5026,method:"socket",deviceName:"Modbus Slave Example",deviceType:"default",pollPeriod:5e3,sendDataToThingsBoard:!1,byteOrder:"LITTLE",wordOrder:"LITTLE",unitId:0,values:{holding_registers:{attributes:[{address:1,type:"string",tag:"sm",objectsCount:1,value:"ON"}],timeseries:[{address:2,type:"8int",tag:"smm",objectsCount:1,value:"12334"}],attributeUpdates:[{tag:"shared_attribute_write",type:"32int",functionCode:6,objectsCount:2,address:29,value:1243}],rpc:[{tag:"setValue",type:"bits",functionCode:5,objectsCount:1,address:31,value:22}]},coils_initializer:{attributes:[{address:5,type:"8int",tag:"coil",objectsCount:1,value:0}],timeseries:[],attributeUpdates:[],rpc:[]}}}},legacy:{master:{slaves:[{host:"127.0.0.1",port:5021,type:"tcp",method:"socket",timeout:35,byteOrder:"LITTLE",wordOrder:"LITTLE",retries:!0,retryOnEmpty:!0,retryOnInvalid:!0,pollPeriod:5e3,unitId:1,deviceName:"Temp Sensor",deviceType:"default",sendDataOnlyOnChange:!0,connectAttemptTimeMs:5e3,connectAttemptCount:5,waitAfterFailedAttemptsMs:3e5,attributes:[{tag:"string_read",type:"string",functionCode:4,objectsCount:4,address:1},{tag:"bits_read",type:"bits",functionCode:4,objectsCount:1,address:5},{tag:"16int_read",type:"16int",functionCode:4,objectsCount:1,address:7},{tag:"32int_read_divider",type:"32int",functionCode:4,objectsCount:2,address:8,divider:10},{tag:"32int_read",type:"32int",functionCode:4,objectsCount:2,address:11},{tag:"64int_read",type:"64int",functionCode:4,objectsCount:4,address:13}],timeseries:[{tag:"16uint_read",type:"16uint",functionCode:4,objectsCount:2,address:18},{tag:"32uint_read",type:"32uint",functionCode:4,objectsCount:4,address:20},{tag:"64uint_read",type:"64uint",functionCode:4,objectsCount:1,address:24},{tag:"16float_read",type:"16float",functionCode:4,objectsCount:1,address:25},{tag:"32float_read",type:"32float",functionCode:4,objectsCount:2,address:26},{tag:"64float_read",type:"64float",functionCode:4,objectsCount:4,address:28}],attributeUpdates:[{tag:"shared_attribute_write",type:"32int",functionCode:6,objectsCount:2,address:29}],rpc:[{tag:"setValue",type:"bits",functionCode:5,objectsCount:1,address:31},{tag:"getValue",type:"bits",functionCode:1,objectsCount:1,address:31},{tag:"setCPUFanSpeed",type:"32int",functionCode:16,objectsCount:2,address:33},{tag:"getCPULoad",type:"32int",functionCode:4,objectsCount:2,address:35}]}]},slave:{type:"tcp",host:"127.0.0.1",port:5026,method:"socket",deviceName:"Modbus Slave Example",deviceType:"default",pollPeriod:5e3,sendDataToThingsBoard:!1,byteOrder:"LITTLE",wordOrder:"LITTLE",unitId:0,values:{holding_registers:[{attributes:[{address:1,type:"string",tag:"sm",objectsCount:1,value:"ON"}],timeseries:[{address:2,type:"int",tag:"smm",objectsCount:1,value:"12334"}],attributeUpdates:[{tag:"shared_attribute_write",type:"32int",functionCode:6,objectsCount:2,address:29,value:1243}],rpc:[{tag:"setValue",type:"bits",functionCode:5,objectsCount:1,address:31,value:22}]}],coils_initializer:[{attributes:[{address:5,type:"string",tag:"sm",objectsCount:1,value:"12"}],timeseries:[],attributeUpdates:[],rpc:[]}]}}}},st={"3.5.2":{server:{url:"localhost:4840/freeopcua/server/",timeoutInMillis:5e3,scanPeriodInMillis:36e5,pollPeriodInMillis:5e3,enableSubscriptions:!0,subCheckPeriodInMillis:100,showMap:!1,security:"Basic128Rsa15",identity:{type:"anonymous"}},mapping:[{deviceNodePattern:"Root\\.Objects\\.Device1",deviceNodeSource:"path",deviceInfo:{deviceNameExpression:"Device ${Root\\.Objects\\.Device1\\.serialNumber}",deviceNameExpressionSource:"path",deviceProfileExpression:"Device",deviceProfileExpressionSource:"constant"},attributes:[{key:"temperature °C",type:"path",value:"${ns=2;i=5}"}],timeseries:[{key:"humidity",type:"path",value:"${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Humidity}"},{key:"batteryLevel",type:"path",value:"${Battery\\.batteryLevel}"}],rpc_methods:[{method:"multiply",arguments:[{type:"integer",value:2},{type:"integer",value:4}]}],attributes_updates:[{key:"deviceName",type:"path",value:"Root\\.Objects\\.Device1\\.serialNumber"}]}]},legacy:{server:{name:"OPC-UA Default Server",url:"localhost:4840/freeopcua/server/",timeoutInMillis:5e3,scanPeriodInMillis:5e3,disableSubscriptions:!1,subCheckPeriodInMillis:100,showMap:!1,security:"Basic128Rsa15",identity:{type:"anonymous"},mapping:[{deviceNodePattern:"Root\\.Objects\\.Device1",deviceNamePattern:"Device ${Root\\.Objects\\.Device1\\.serialNumber}",attributes:[{key:"temperature °C",path:"${ns=2;i=5}"}],timeseries:[{key:"humidity",path:"${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Humidity}"},{key:"batteryLevel",path:"${Battery\\.batteryLevel}"}],rpc_methods:[{method:"multiply",arguments:[2,4]}],attributes_updates:[{attributeOnThingsBoard:"deviceName",attributeOnDevice:"Root\\.Objects\\.Device1\\.serialNumber"}]}]}}},lt={passiveScanMode:!0,showMap:!1,scanner:{timeout:1e4,deviceName:"Device name"},devices:[{name:"Temperature and humidity sensor",MACAddress:"4C:65:A8:DF:85:C0",pollPeriod:5e5,showMap:!1,timeout:1e4,connectRetry:5,connectRetryInSeconds:0,waitAfterConnectRetries:10,telemetry:[{key:"temperature",method:"notify",characteristicUUID:"226CAA55-6476-4566-7562-66734470666D",valueExpression:"[2]"},{key:"humidity",method:"notify",characteristicUUID:"226CAA55-6476-4566-7562-66734470666D",valueExpression:"[0]"}],attributes:[{key:"name",method:"read",characteristicUUID:"00002A00-0000-1000-8000-00805F9B34FB",valueExpression:"[0:2]cm [2:]A"},{key:"values",method:"read",characteristicUUID:"00002A00-0000-1000-8000-00805F9B34FB",valueExpression:"All values: [:]"}],attributeUpdates:[{attributeOnThingsBoard:"sharedName",characteristicUUID:"00002A00-0000-1000-8000-00805F9B34FB"}],serverSideRpc:[{methodRPC:"rpcMethod1",withResponse:!0,characteristicUUID:"00002A00-0000-1000-8000-00805F9B34FB",methodProcessing:"read"},{methodRPC:"rpcMethod2",withResponse:!0,characteristicUUID:"00002A00-0000-1000-8000-00805F9B34FB",methodProcessing:"write"},{methodRPC:"rpcMethod3",withResponse:!0,methodProcessing:"scan"}]}]},pt={host:"http://127.0.0.1:5000",SSLVerify:!0,security:{type:"basic",username:"user",password:"password"},mapping:[{url:"getdata",httpMethod:"GET",httpHeaders:{ACCEPT:"application/json"},content:{name:"morpheus",job:"leader"},allowRedirects:!0,timeout:.5,scanPeriod:5,converter:{type:"json",deviceNameJsonExpression:"SD8500",deviceTypeJsonExpression:"SD",attributes:[{key:"serialNumber",type:"string",value:"${serial}"}],telemetry:[{key:"Maintainer",type:"string",value:"${Developer}"},{key:"combine",type:"string",value:"${Developer}:${hum}"}]}},{url:"get_info",httpMethod:"GET",httpHeaders:{ACCEPT:"application/json"},allowRedirects:!0,timeout:.5,scanPeriod:100,converter:{type:"custom",deviceNameJsonExpression:"SD8500",deviceTypeJsonExpression:"SD",extension:"CustomRequestUplinkConverter","extension-config":[{key:"Totaliser",type:"float",fromByte:0,toByte:4,byteorder:"big",signed:!0,multiplier:1},{key:"Flow",type:"int",fromByte:4,toByte:6,byteorder:"big",signed:!0,multiplier:.01},{key:"Temperature",type:"int",fromByte:8,toByte:10,byteorder:"big",signed:!0,multiplier:.01},{key:"Pressure",type:"int",fromByte:12,toByte:14,byteorder:"big",signed:!0,multiplier:.01},{key:"deviceStatus",type:"int",byteAddress:15,fromBit:4,toBit:8,byteorder:"big",signed:!1},{key:"OUT2",type:"int",byteAddress:15,fromBit:1,toBit:2,byteorder:"big"},{key:"OUT1",type:"int",byteAddress:15,fromBit:0,toBit:1,byteorder:"big"}]}}],attributeUpdates:[{httpMethod:"POST",httpHeaders:{"CONTENT-TYPE":"application/json"},timeout:.5,tries:3,allowRedirects:!0,deviceNameFilter:"SD.*",attributeFilter:"send_data",requestUrlExpression:"sensor/${deviceName}/${attributeKey}",requestValueExpression:'{"${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{deviceNameFilter:".*",methodFilter:"echo",requestUrlExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",responseTimeout:1,httpMethod:"GET",requestValueExpression:"${params}",responseValueExpression:"${temp}",timeout:.5,tries:3,httpHeaders:{"Content-Type":"application/json"}},{deviceNameFilter:".*",methodFilter:"no-reply",requestUrlExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",httpMethod:"POST",requestValueExpression:"${params}",httpHeaders:{"Content-Type":"application/json"}}]},ct={interface:"socketcan",channel:"vcan0",backend:{fd:!0},reconnectPeriod:5,devices:[{name:"Car",sendDataOnlyOnChange:!1,enableUnknownRpc:!0,strictEval:!1,attributes:[{key:"isDriverDoorOpened",nodeId:41,command:"2:2:big:8717",value:"4:1:int",expression:"bool(value & 0b00000100)",polling:{type:"once",dataInHex:"AB CD AB CD"}}],timeseries:[{key:"rpm",nodeId:1918,isExtendedId:!0,command:"2:2:big:48059",value:"4:2:big:int",expression:"value / 4",polling:{type:"always",period:5,dataInHex:"aaaa bbbb aaaa bbbb"}},{key:"milliage",nodeId:1918,isExtendedId:!0,value:"4:2:little:int",expression:"value * 10",polling:{type:"always",period:30,dataInHex:"aa bb cc dd ee ff aa bb"}}],attributeUpdates:[{attributeOnThingsBoard:"softwareVersion",nodeId:64,isExtendedId:!0,dataLength:4,dataExpression:"value + 5",dataByteorder:"little"}],serverSideRpc:[{method:"sendSameData",nodeId:4,isExtendedId:!0,isFd:!0,bitrateSwitch:!0,dataInHex:"aa bb cc dd ee ff aa bb aa bb cc d ee ff"},{method:"setLightLevel",nodeId:5,dataLength:2,dataByteorder:"little",dataBefore:"00AA"},{method:"setSpeed",nodeId:16,dataAfter:"0102",dataExpression:"userSpeed if maxAllowedSpeed > userSpeed else maxAllowedSpeed"}]}]},dt={general:{objectName:"TB_gateway",address:"0.0.0.0:47808",objectIdentifier:599,maxApduLengthAccepted:1476,segmentationSupported:"segmentedBoth",vendorIdentifier:15},devices:[{deviceName:"BACnet Device ${objectName}",deviceType:"default",address:"192.168.2.110:47808",pollPeriod:1e4,attributes:[{key:"temperature",type:"string",objectId:"analogOutput:1",propertyId:"presentValue"}],timeseries:[{key:"state",type:"bool",objectId:"binaryValue:1",propertyId:"presentValue"}],attributeUpdates:[{key:"brightness",requestType:"writeProperty",objectId:"analogOutput:1",propertyId:"presentValue"}],serverSideRpc:[{method:"set_state",requestType:"writeProperty",requestTimeout:1e4,objectId:"binaryOutput:1",propertyId:"presentValue"},{method:"get_state",requestType:"readProperty",requestTimeout:1e4,objectId:"binaryOutput:1",propertyId:"presentValue"}]}]},mt={connection:{str:"Driver={PostgreSQL};Server=localhost;Port=5432;Database=thingsboard;Uid=postgres;Pwd=postgres;",attributes:{autocommit:!0,timeout:0},encoding:"utf-8",decoding:{char:"utf-8",wchar:"utf-8",metadata:"utf-16le"},reconnect:!0,reconnectPeriod:60},pyodbc:{pooling:!1},polling:{query:"SELECT bool_v, str_v, dbl_v, long_v, entity_id, ts FROM ts_kv WHERE ts > ? ORDER BY ts ASC LIMIT 10",period:10,iterator:{column:"ts",query:"SELECT MIN(ts) - 1 FROM ts_kv",persistent:!1}},mapping:{device:{type:"postgres",name:"'ODBC ' + entity_id"},sendDataOnlyOnChange:!1,attributes:"*",timeseries:[{name:"value",value:"[i for i in [str_v, long_v, dbl_v,bool_v] if i is not None][0]"}]},serverSideRpc:{enableUnknownRpc:!1,overrideRpcConfig:!0,methods:["procedureOne",{name:"procedureTwo",args:["One",2,3]}]}},ut={host:"127.0.0.1",port:"5000",SSL:!1,security:{cert:"~/ssl/cert.pem",key:"~/ssl/key.pem"},mapping:[{endpoint:"/my_devices",HTTPMethods:["POST"],security:{type:"anonymous"},converter:{type:"json",deviceNameExpression:"${sensorName}",deviceTypeExpression:"${sensorType}",attributes:[{type:"string",key:"model",value:"${sensorModel}"},{type:"string",key:"certificateNumber",value:"${certificateNumber}"}],timeseries:[{type:"double",key:"temperature",value:"${temp}"},{type:"double",key:"humidity",value:"${hum}"}]}},{endpoint:"/anon1",HTTPMethods:["GET","POST"],security:{type:"anonymous"},converter:{type:"json",deviceNameExpression:"Device 2",deviceTypeExpression:"default",attributes:[{type:"string",key:"model",value:"Model2"}],timeseries:[{type:"double",key:"temperature",value:"${temp}"},{type:"double",key:"humidity",value:"${hum}"}]}},{endpoint:"/anon2",HTTPMethods:["POST"],security:{type:"anonymous"},converter:{type:"custom",deviceNameExpression:"SuperAnonDevice",deviceTypeExpression:"default",extension:"CustomRestUplinkConverter","extension-config":[{key:"Totaliser",datatype:"float",fromByte:0,toByte:4,byteorder:"big",signed:!0,multiplier:1}]}}],attributeRequests:[{endpoint:"/sharedAttributes",type:"shared",HTTPMethods:["POST"],security:{type:"anonymous"},timeout:10,deviceNameExpression:"${deviceName}",attributeNameExpression:"${attribute}${attribute1}"}],attributeUpdates:[{HTTPMethod:"POST",SSLVerify:!1,httpHeaders:{"CONTENT-TYPE":"application/json"},security:{type:"anonymous"},timeout:.5,tries:3,allowRedirects:!0,deviceNameFilter:"SN.*",attributeFilter:".*",requestUrlExpression:"http://127.0.0.1:5001/",valueExpression:'{"deviceName":"${deviceName}","${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{deviceNameFilter:".*",methodFilter:"echo",requestUrlExpression:"http://127.0.0.1:5001/${deviceName}",responseTimeout:1,HTTPMethod:"GET",valueExpression:"${params}",timeout:10,tries:3,httpHeaders:{"Content-Type":"application/json"},security:{type:"anonymous"}},{deviceNameFilter:"SN.*",methodFilter:"post_attributes",requestUrlExpression:"http://127.0.0.1:5000/my_devices",responseTimeout:1,HTTPMethod:"POST",valueExpression:'{"sensorName":"${deviceName}", "sensorModel":"${params.sensorModel}", "certificateNumber":"${params.certificateNumber}", "temp":"${params.temp}", "hum":"${params.hum}"}',timeout:10,tries:3,httpHeaders:{"Content-Type":"application/json"},security:{type:"anonymous"}},{deviceNameFilter:".*",methodFilter:"no-reply",requestUrlExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",HTTPMethod:"POST",valueExpression:"${params}",httpHeaders:{"Content-Type":"application/json"},security:{type:"anonymous"}}]},gt={devices:[{deviceName:"SNMP router",deviceType:"snmp",ip:"snmp.live.gambitcommunications.com",port:161,pollPeriod:5e3,community:"public",attributes:[{key:"ReceivedFromGet",method:"get",oid:"1.3.6.1.2.1.1.1.0",timeout:6},{key:"ReceivedFromMultiGet",method:"multiget",oid:["1.3.6.1.2.1.1.1.0","1.3.6.1.2.1.1.2.0"],timeout:6},{key:"ReceivedFromGetNext",method:"getnext",oid:"1.3.6.1.2.1.1.1.0",timeout:6},{key:"ReceivedFromMultiWalk",method:"multiwalk",oid:["1.3.6.1.2.1.1.1.0","1.3.6.0.1.2.1"]},{key:"ReceivedFromBulkWalk",method:"bulkwalk",oid:["1.3.6.1.2.1.1.1.0","1.3.6.1.2.1.1.2.0"]},{key:"ReceivedFromBulkGet",method:"bulkget",scalarOid:["1.3.6.1.2.1.1.1.0","1.3.6.1.2.1.1.2.0"],repeatingOid:["1.3.6.1.2.1.1.1.0","1.3.6.1.2.1.1.2.0"],maxListSize:10}],telemetry:[{key:"ReceivedFromWalk",community:"private",method:"walk",oid:"1.3.6.1.2.1.1.1.0"},{key:"ReceivedFromTable",method:"table",oid:"1.3.6.1.2.1.1"}],attributeUpdateRequests:[{attributeFilter:"dataToSet",method:"set",oid:"1.3.6.1.2.1.1.1.0"},{attributeFilter:"dataToMultiSet",method:"multiset",mappings:{"1.2.3":"10","2.3.4":"${attribute}"}}],serverSideRpcRequests:[{requestFilter:"setData",method:"set",oid:"1.3.6.1.2.1.1.1.0"},{requestFilter:"multiSetData",method:"multiset"},{requestFilter:"getData",method:"get",oid:"1.3.6.1.2.1.1.1.0"},{requestFilter:"runBulkWalk",method:"bulkwalk",oid:["1.3.6.1.2.1.1.1.0","1.3.6.1.2.1.1.2.0"]}]},{deviceName:"SNMP router",deviceType:"snmp",ip:"127.0.0.1",pollPeriod:5e3,community:"public",converter:"CustomSNMPConverter",attributes:[{key:"ReceivedFromGetWithCustomConverter",method:"get",oid:"1.3.6.1.2.1.1.1.0"}],telemetry:[{key:"ReceivedFromTableWithCustomConverter",method:"table",oid:"1.3.6.1.2.1.1.1.0"}]}]},ht={host:"0.0.0.0",port:21,TLSSupport:!1,security:{type:"basic",username:"admin",password:"admin"},paths:[{devicePatternName:"asd",devicePatternType:"Device",delimiter:",",path:"fol/*_hello*.txt",readMode:"FULL",maxFileSize:5,pollPeriod:500,txtFileDataView:"SLICED",withSortingFiles:!0,attributes:[{key:"temp",value:"[1:]"},{key:"tmp",value:"[0:1]"}],timeseries:[{type:"int",key:"[0:1]",value:"[0:1]"},{type:"int",key:"temp",value:"[1:]"}]}],attributeUpdates:[{path:"fol/hello.json",deviceNameFilter:".*",writingMode:"WRITE",valueExpression:"{'${attributeKey}':'${attributeValue}'}"}],serverSideRpc:[{deviceNameFilter:".*",methodFilter:"read",valueExpression:"${params}"},{deviceNameFilter:".*",methodFilter:"write",valueExpression:"${params}"}]},yt={server:{jid:"gateway@localhost",password:"password",host:"localhost",port:5222,use_ssl:!1,disable_starttls:!1,force_starttls:!0,timeout:1e4,plugins:["xep_0030","xep_0323","xep_0325"]},devices:[{jid:"device@localhost/TMP_1101",deviceNameExpression:"${serialNumber}",deviceTypeExpression:"default",attributes:[{key:"temperature",value:"${temp}"}],timeseries:[{key:"humidity",value:"${hum}"},{key:"combination",value:"${temp}:${hum}"}],attributeUpdates:[{attributeOnThingsBoard:"shared",valueExpression:'{"${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{methodRPC:"rpc1",withResponse:!0,valueExpression:"${params}"}]}]},ft={centralSystem:{name:"Central System",host:"127.0.0.1",port:9e3,connection:{type:"insecure"},security:[{type:"token",tokens:["Bearer ACCESS_TOKEN"]},{type:"basic",credentials:[{username:"admin",password:"admin"}]}]},chargePoints:[{idRegexpPattern:"bidon/hello/CP_1",deviceNameExpression:"${Vendor} ${Model}",deviceTypeExpression:"default",attributes:[{messageTypeFilter:"MeterValues,",key:"temp1",value:"${meter_value[:].sampled_value[:].value}"},{messageTypeFilter:"MeterValues,",key:"vendorId",value:"${connector_id}"}],timeseries:[{messageTypeFilter:"DataTransfer,",key:"temp",value:"${data.temp}"}],attributeUpdates:[{attributeOnThingsBoard:"shared",valueExpression:'{"${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{methodRPC:"rpc1",withResponse:!0,valueExpression:"${params}"}]}]};const vt=e("connectorConfigs",{[je.MQTT]:it,[je.MODBUS]:ot,[je.OPCUA]:st,[je.BLE]:lt,[je.REQUEST]:pt,[je.CAN]:ct,[je.BACNET]:dt,[je.ODBC]:mt,[je.REST]:ut,[je.SNMP]:gt,[je.FTP]:ht,[je.SOCKET]:rt,[je.XMPP]:yt,[je.OCPP]:ft});function bt(e){const t=vt[e];if(!t)throw new Error("No default config found");return t}var xt;e("ModbusDataType",xt),function(e){e.STRING="string",e.BYTES="bytes",e.BITS="bits",e.INT8="8int",e.UINT8="8uint",e.INT16="16int",e.UINT16="16uint",e.FLOAT16="16float",e.INT32="32int",e.UINT32="32uint",e.FLOAT32="32float",e.INT64="64int",e.UINT64="64uint",e.FLOAT64="64float"}(xt||e("ModbusDataType",xt={}));const Ct=e("ModbusEditableDataTypes",[xt.BYTES,xt.BITS,xt.STRING]);var wt,St;e("ModbusObjectCountByDataType",wt),function(e){e[e["8int"]=1]="8int",e[e["8uint"]=1]="8uint",e[e["16int"]=1]="16int",e[e["16uint"]=1]="16uint",e[e["16float"]=1]="16float",e[e["32int"]=2]="32int",e[e["32uint"]=2]="32uint",e[e["32float"]=2]="32float",e[e["64int"]=4]="64int",e[e["64uint"]=4]="64uint",e[e["64float"]=4]="64float"}(wt||e("ModbusObjectCountByDataType",wt={})),e("MappingValueType",St),function(e){e.STRING="string",e.INTEGER="integer",e.DOUBLE="double",e.BOOLEAN="boolean"}(St||e("MappingValueType",St={}));const Et=e("mappingValueTypesMap",new Map([[St.STRING,{name:"value.string",icon:"mdi:format-text"}],[St.INTEGER,{name:"value.integer",icon:"mdi:numeric"}],[St.DOUBLE,{name:"value.double",icon:"mdi:numeric"}],[St.BOOLEAN,{name:"value.boolean",icon:"mdi:checkbox-marked-outline"}]])),Tt=e("ModbusFunctionCodeTranslationsMap",new Map([[1,"gateway.function-codes.read-coils"],[2,"gateway.function-codes.read-discrete-inputs"],[3,"gateway.function-codes.read-multiple-holding-registers"],[4,"gateway.function-codes.read-input-registers"],[5,"gateway.function-codes.write-single-coil"],[6,"gateway.function-codes.write-single-holding-register"],[15,"gateway.function-codes.write-multiple-coils"],[16,"gateway.function-codes.write-multiple-holding-registers"]]));var It,kt,Mt;e("ConfigurationModes",It),function(e){e.BASIC="basic",e.ADVANCED="advanced"}(It||e("ConfigurationModes",It={})),e("ReportStrategyType",kt),function(e){e.OnChange="ON_CHANGE",e.OnReportPeriod="ON_REPORT_PERIOD",e.OnChangeOrReportPeriod="ON_CHANGE_OR_REPORT_PERIOD",e.OnReceived="ON_RECEIVED"}(kt||e("ReportStrategyType",kt={})),e("ReportStrategyDefaultValue",Mt),function(e){e[e.Gateway=6e4]="Gateway",e[e.Connector=6e4]="Connector",e[e.Device=3e4]="Device",e[e.Key=15e3]="Key"}(Mt||e("ReportStrategyDefaultValue",Mt={}));const Pt=e("ReportStrategyTypeTranslationsMap",new Map([[kt.OnChange,"gateway.report-strategy.on-change"],[kt.OnReportPeriod,"gateway.report-strategy.on-report-period"],[kt.OnChangeOrReportPeriod,"gateway.report-strategy.on-change-or-report-period"],[kt.OnReceived,"gateway.report-strategy.on-received"]]));var Ft;!function(e){e.EXCEPTION="EXCEPTION"}(Ft||(Ft={}));const Ot={...Ae,...Ft},qt=()=>[10,20,30];function Bt(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"a",17),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).$implicit,a=t.ɵɵnextContext();return t.ɵɵresetView(a.onTabChanged(n))})),t.ɵɵtext(1),t.ɵɵelementEnd()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("active",a.activeLink.name===e.name),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}function Nt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",18),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,1,"widgets.gateway.created-time")))}function Rt(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtext(1),t.ɵɵpipe(2,"date"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,e.ts,"yyyy-MM-dd HH:mm:ss")," ")}}function _t(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,1,"widgets.gateway.level")))}function Dt(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell")(1,"span"),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵclassMap(a.statusClass(e.status)),t.ɵɵadvance(),t.ɵɵtextInterpolate(e.status)}}function Vt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",20),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,1,"widgets.gateway.message")))}function At(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵclassMap(a.statusClassMsg(e.status)),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.message," ")}}function Gt(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",21)}function jt(e,n){1&e&&t.ɵɵelement(0,"mat-row",21)}class Lt{constructor(){this.displayedColumns=["ts","status","message"],this.gatewayLogLinks=[{name:"General",key:"LOGS"},{name:"Service",key:"SERVICE_LOGS"},{name:"Connection",key:"CONNECTION_LOGS"},{name:"Storage",key:"STORAGE_LOGS"},{key:"EXTENSIONS_LOGS",name:"Extension"}];const e={property:"ts",direction:d.DESC};this.pageLink=new m(10,0,null,e),this.dataSource=new p([])}ngOnInit(){this.updateWidgetTitle()}ngAfterViewInit(){if(this.dataSource.sort=this.sort,this.dataSource.paginator=this.paginator,this.ctx.defaultSubscription.onTimewindowChangeFunction=e=>(this.ctx.defaultSubscription.options.timeWindowConfig=e,this.ctx.defaultSubscription.updateDataSubscriptions(),e),this.ctx.settings.isConnectorLog&&this.ctx.settings.connectorLogState){const e=this.ctx.stateController.getStateParams()[this.ctx.settings.connectorLogState];this.logLinks=[{key:`${e.key}_LOGS`,name:"Connector",filterFn:e=>!e.message.includes("_converter.py")},{key:`${e.key}_LOGS`,name:"Converter",filterFn:e=>e.message.includes("_converter.py")}]}else this.logLinks=this.gatewayLogLinks;this.activeLink=this.logLinks[0],this.changeSubscription()}updateWidgetTitle(){if(this.ctx.settings.isConnectorLog&&this.ctx.settings.connectorLogState){const e=this.ctx.widgetConfig.title,t="${connectorName}";if(e.includes(t)){const n=this.ctx.stateController.getStateParams()[this.ctx.settings.connectorLogState];this.ctx.widgetTitle=e.replace(t,n.key)}}}updateData(){if(this.ctx.defaultSubscription.data.length&&this.ctx.defaultSubscription.data[0]){let e=this.ctx.defaultSubscription.data[0].data.map((e=>{const t={ts:e[0],key:this.activeLink.key,message:e[1],status:"INVALID LOG FORMAT"};try{t.message=/\[(.*)/.exec(e[1])[0]}catch(n){t.message=e[1]}try{t.status=e[1].match(/\|(\w+)\|/)[1]}catch(e){t.status="INVALID LOG FORMAT"}return t}));this.activeLink.filterFn&&(e=e.filter((e=>this.activeLink.filterFn(e)))),this.dataSource.data=e}}onTabChanged(e){this.activeLink=e,this.changeSubscription()}statusClass(e){switch(e){case Ot.DEBUG:return"status status-debug";case Ot.WARNING:return"status status-warning";case Ot.ERROR:case Ot.EXCEPTION:return"status status-error";default:return"status status-info"}}statusClassMsg(e){if(e===Ot.EXCEPTION)return"msg-status-exception"}trackByLogTs(e,t){return t.ts}changeSubscription(){this.ctx.datasources&&this.ctx.datasources[0].entity&&this.ctx.defaultSubscription.options.datasources&&(this.ctx.defaultSubscription.options.datasources[0].dataKeys=[{name:this.activeLink.key,type:u.timeseries,settings:{}}],this.ctx.defaultSubscription.unsubscribe(),this.ctx.defaultSubscription.updateDataSubscriptions(),this.ctx.defaultSubscription.callbacks.onDataUpdated=()=>{this.updateData()})}static{this.ɵfac=function(e){return new(e||Lt)}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Lt,selectors:[["tb-gateway-logs"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(l,5),t.ɵɵviewQuery(c,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.sort=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.paginator=e.first)}},inputs:{ctx:"ctx",dialogRef:"dialogRef"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:22,vars:21,consts:[["tabPanel",""],["mat-tab-nav-bar","",3,"tabPanel"],["mat-tab-link","",3,"active","click",4,"ngFor","ngForOf"],["mat-table","","matSort","","matSortDisableClear","",3,"dataSource","trackBy","matSortActive","matSortDirection"],["matColumnDef","ts"],["mat-sort-header","","style","width: 20%",4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","status"],["mat-sort-header","","style","width: 10%",4,"matHeaderCellDef"],["matColumnDef","message"],["mat-sort-header","","style","width: 70%",4,"matHeaderCellDef"],[3,"class",4,"matCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],["class","mat-row-select",4,"matRowDef","matRowDefColumns"],[1,"flex-1","justify-center","items-center","no-data-found"],[1,"flex-1"],[3,"length","pageIndex","pageSize","pageSizeOptions"],["mat-tab-link","",3,"click","active"],["mat-sort-header","",2,"width","20%"],["mat-sort-header","",2,"width","10%"],["mat-sort-header","",2,"width","70%"],[1,"mat-row-select"]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"nav",1),t.ɵɵtemplate(1,Bt,2,2,"a",2),t.ɵɵelementEnd(),t.ɵɵelement(2,"mat-tab-nav-panel",null,0),t.ɵɵelementStart(4,"table",3),t.ɵɵelementContainerStart(5,4),t.ɵɵtemplate(6,Nt,3,3,"mat-header-cell",5)(7,Rt,3,4,"mat-cell",6),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(8,7),t.ɵɵtemplate(9,_t,3,3,"mat-header-cell",8)(10,Dt,3,3,"mat-cell",6),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(11,9),t.ɵɵtemplate(12,Vt,3,3,"mat-header-cell",10)(13,At,2,3,"mat-cell",11),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(14,Gt,1,0,"mat-header-row",12)(15,jt,1,0,"mat-row",13),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"span",14),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(19,"span",15)(20,"mat-divider")(21,"mat-paginator",16)),2&e){const e=t.ɵɵreference(3);t.ɵɵproperty("tabPanel",e),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.logLinks),t.ɵɵadvance(3),t.ɵɵproperty("dataSource",n.dataSource)("trackBy",n.trackByLogTs)("matSortActive",n.pageLink.sortOrder.property)("matSortDirection",n.pageLink.sortDirection()),t.ɵɵadvance(10),t.ɵɵproperty("matHeaderRowDef",n.displayedColumns)("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",n.displayedColumns),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",0!==n.dataSource.data.length),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(18,18,"attribute.no-telemetry-text")),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",0===n.dataSource.data.length),t.ɵɵadvance(2),t.ɵɵproperty("length",n.dataSource.data.length)("pageIndex",n.pageLink.page)("pageSize",n.pageLink.pageSize)("pageSizeOptions",t.ɵɵpureFunction0(20,qt))}},dependencies:t.ɵɵgetComponentDepsFactory(Lt,[B,g]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;overflow-x:auto;padding:0}[_nghost-%COMP%] .status[_ngcontent-%COMP%]{border-radius:20px;font-weight:500;padding:5px 15px}[_nghost-%COMP%] .status-debug[_ngcontent-%COMP%]{color:green;background:#0080001a}[_nghost-%COMP%] .status-warning[_ngcontent-%COMP%]{color:orange;background:#ffa5001a}[_nghost-%COMP%] .status-error[_ngcontent-%COMP%]{color:red;background:#ff00001a}[_nghost-%COMP%] .status-info[_ngcontent-%COMP%]{color:#00f;background:#0000801a}[_nghost-%COMP%] .msg-status-exception[_ngcontent-%COMP%]{color:red}']})}}e("GatewayLogsComponent",Lt);const Ut=["statisticChart"],$t=e=>({"hidden-label":e});function zt(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",23),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Kt(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",23),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.attributeOnGateway),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.attributeOnGateway," ")}}function Ht(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.statistic-commands-empty")," "))}function Qt(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",24)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",25),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,2,"gateway.statistics.command")),t.ɵɵadvance(2),t.ɵɵproperty("value",e.commandObj.command)}}function Wt(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-card",16)(1,"mat-form-field",17)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",18),t.ɵɵtemplate(6,zt,2,2,"mat-option",19)(7,Kt,2,2,"mat-option",19),t.ɵɵelementEnd()(),t.ɵɵtemplate(8,Ht,3,3,"mat-error",20),t.ɵɵelementStart(9,"div")(10,"button",21),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.navigateToStatistics())})),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(13,Qt,5,4,"mat-form-field",22),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("formGroup",e.statisticForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,7,"gateway.statistics.statistic")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.statisticsKeys),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.commands),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!e.statisticsKeys.length&&!e.commands.length),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,9,"gateway.statistics.statistics-button")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.commandObj)}}function Jt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",26),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,1,"widgets.gateway.created-time")," "))}function Yt(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtext(1),t.ɵɵpipe(2,"date"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,e[0],"yyyy-MM-dd HH:mm:ss")," ")}}function Xt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",27),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,1,"widgets.gateway.message")," "))}function Zt(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e[1]," ")}}function en(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",28)}function tn(e,n){1&e&&t.ɵɵelement(0,"mat-row",28)}function nn(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",29),t.ɵɵelement(1,"span",30),t.ɵɵelementStart(2,"div",31),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).$implicit,a=t.ɵɵnextContext();return t.ɵɵresetView(a.onLegendKeyHiddenChange(n.dataIndex))})),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵstyleProp("background-color",e.dataKey.color),t.ɵɵadvance(),t.ɵɵclassMap(t.ɵɵpureFunction1(5,$t,a.legendData.keys[e.dataIndex].dataKey.hidden)),t.ɵɵproperty("innerHTML",e.dataKey.label,t.ɵɵsanitizeHtml)}}class an{constructor(e,t,n){this.fb=e,this.attributeService=t,this.utils=n,this.isNumericData=!1,this.dataTypeDefined=!1,this.statisticsKeys=[],this.commands=[],this.subscriptionOptions={callbacks:{onDataUpdated:()=>this.ctx.ngZone.run((()=>{this.onDataUpdated()})),onDataUpdateError:(e,t)=>this.ctx.ngZone.run((()=>{this.onDataUpdateError(t)}))},useDashboardTimewindow:!1,legendConfig:{position:h.bottom}},this.init=()=>{this.flotCtx={$scope:this.ctx.$scope,$injector:this.ctx.$injector,utils:this.ctx.utils,isMobile:this.ctx.isMobile,isEdit:this.ctx.isEdit,subscriptionApi:this.ctx.subscriptionApi,detectChanges:this.ctx.detectChanges,settings:this.ctx.settings}},this.updateChart=()=>{},this.resize=()=>{};const a={property:"0",direction:d.DESC};this.pageLink=new m(Number.POSITIVE_INFINITY,0,null,a),this.displayedColumns=["0","1"],this.dataSource=new p([]),this.statisticForm=this.fb.group({statisticKey:[null,[]]}),this.statisticForm.get("statisticKey").valueChanges.subscribe((e=>{this.commandObj=null,this.commands.length&&(this.commandObj=this.commands.find((t=>t.attributeOnGateway===e))),this.subscriptionInfo&&this.createChartsSubscription(this.ctx.defaultSubscription.datasources[0].entity,e)}))}ngAfterViewInit(){if(this.dataSource.sort=this.sort,this.sort.sortChange.subscribe((()=>this.sortData())),this.init(),this.ctx.defaultSubscription.datasources.length){const e=this.ctx.defaultSubscription.datasources[0].entity;if(e.id.id===y)return;this.general?this.attributeService.getEntityTimeseriesLatest(e.id).subscribe((t=>{const n=Object.keys(t).filter((e=>e.includes("ConnectorEventsProduced")||e.includes("ConnectorEventsSent")));this.createGeneralChartsSubscription(e,n)})):this.attributeService.getEntityAttributes(e.id,f.SHARED_SCOPE,["general_configuration"]).subscribe((t=>{t&&t.length&&(this.commands=t[0].value.statistics.commands,!this.statisticForm.get("statisticKey").value&&this.commands&&this.commands.length&&(this.statisticForm.get("statisticKey").setValue(this.commands[0].attributeOnGateway),this.createChartsSubscription(e,this.commands[0].attributeOnGateway)))}))}}navigateToStatistics(){const e=N(this.ctx.stateController.getStateParams());this.ctx.stateController.openState("configuration",{defaultTab:"statistics",...e})}sortData(){this.dataSource.sortData(this.dataSource.data,this.sort)}onLegendKeyHiddenChange(e){this.legendData.keys[e].dataKey.hidden=!this.legendData.keys[e].dataKey.hidden,this.subscription.updateDataVisibility(e)}createChartsSubscription(e,t){const n=[{type:v.entity,entityType:b.DEVICE,entityId:e.id.id,entityName:e.name,timeseries:[]}];n[0].timeseries=[{name:t,label:t}],this.subscriptionInfo=n,this.changeSubscription(n),this.ctx.defaultSubscription.unsubscribe()}createGeneralChartsSubscription(e,t){const n=[{type:v.entity,entityType:b.DEVICE,entityId:e.id.id,entityName:e.name,timeseries:[]}];n[0].timeseries=[],t?.length&&t.forEach((e=>{n[0].timeseries.push({name:e,label:e})})),this.ctx.defaultSubscription.datasources[0].dataKeys.forEach((e=>{n[0].timeseries.push({name:e.name,label:e.label})})),this.changeSubscription(n),this.ctx.defaultSubscription.unsubscribe()}reset(){this.resize$&&this.resize$.disconnect(),this.subscription&&this.subscription.unsubscribe()}onDataUpdateError(e){const t=this.utils.parseException(e);let n=t.name;t.message&&(n+=": "+t.message),console.error(n)}onDataUpdated(){this.isDataOnlyNumbers(),this.isNumericData&&(this.chartInited||this.initChart())}initChart(){this.chartInited=!0,this.flotCtx.$container=$(this.statisticChart.nativeElement),this.resize$.observe(this.statisticChart.nativeElement)}isDataOnlyNumbers(){this.general?this.isNumericData=!0:(this.dataSource.data=this.subscription.data.length?this.subscription.data[0].data:[],this.dataSource.data.length&&!this.dataTypeDefined&&(this.dataTypeDefined=!0,this.isNumericData=this.dataSource.data.every((e=>!isNaN(+e[1])))))}changeSubscription(e){this.subscription&&this.reset(),this.ctx.datasources[0].entity&&this.ctx.subscriptionApi.createSubscriptionFromInfo(x.timeseries,e,this.subscriptionOptions,!1,!0).subscribe((e=>{this.dataTypeDefined=!1,this.subscription=e,this.isDataOnlyNumbers(),this.legendData=this.subscription.legendData,this.flotCtx.defaultSubscription=e,this.resize$=new ResizeObserver((()=>{this.resize()})),this.ctx.detectChanges(),this.isNumericData&&this.initChart()}))}static{this.ɵfac=function(e){return new(e||an)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(R.AttributeService),t.ɵɵdirectiveInject(R.UtilsService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:an,selectors:[["tb-gateway-statistics"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(l,5),t.ɵɵviewQuery(Ut,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.sort=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.statisticChart=e.first)}},inputs:{ctx:"ctx",general:"general"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:19,vars:19,consts:[["statisticChart",""],[1,"statistics-container","flex","flex-row","lt-md:flex-col"],[3,"formGroup",4,"ngIf"],[1,"chart-box","flex","flex-col"],[1,"chart-container"],["mat-table","","matSort","","matSortDisableClear","",3,"dataSource","matSortActive","matSortDirection"],["matColumnDef","0"],["mat-sort-header","",4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","1"],["mat-sort-header","","style","width: 70%",4,"matHeaderCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],["class","mat-row-select",4,"matRowDef","matRowDefColumns"],[1,"no-data-found","justify-center","items-start"],[1,"legend","flex","flex-1","flex-row","justify-center","items-center"],["class","legend-keys flex flex-row justify-center items-center",4,"ngFor","ngForOf"],[3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["formControlName","statisticKey"],[3,"value",4,"ngFor","ngForOf"],[4,"ngIf"],["mat-flat-button","","color","primary",3,"click"],["class","mat-block",4,"ngIf"],[3,"value"],[1,"mat-block"],["matInput","","disabled","",3,"value"],["mat-sort-header",""],["mat-sort-header","",2,"width","70%"],[1,"mat-row-select"],[1,"legend-keys","flex","flex-row","justify-center","items-center"],[1,"legend-line"],[1,"legend-label",3,"click","innerHTML"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",1),t.ɵɵtemplate(1,Wt,14,11,"mat-card",2),t.ɵɵelementStart(2,"div",3),t.ɵɵelement(3,"div",4,0),t.ɵɵelementStart(5,"table",5),t.ɵɵelementContainerStart(6,6),t.ɵɵtemplate(7,Jt,3,3,"mat-header-cell",7)(8,Yt,3,4,"mat-cell",8),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(9,9),t.ɵɵtemplate(10,Xt,3,3,"mat-header-cell",10)(11,Zt,2,1,"mat-cell",8),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(12,en,1,0,"mat-header-row",11)(13,tn,1,0,"mat-row",12),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"span",13),t.ɵɵtext(15),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"div",14),t.ɵɵtemplate(18,nn,3,7,"div",15),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.general),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.isNumericData),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.isNumericData),t.ɵɵproperty("dataSource",n.dataSource)("matSortActive",n.pageLink.sortOrder.property)("matSortDirection",n.pageLink.sortDirection()),t.ɵɵadvance(7),t.ɵɵproperty("matHeaderRowDef",n.displayedColumns)("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",n.displayedColumns),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",0!==n.dataSource.data.length||n.isNumericData),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(16,17,"attribute.no-telemetry-text")),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.isNumericData),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",null==n.legendData?null:n.legendData.keys))},dependencies:t.ɵɵgetComponentDepsFactory(an,[B,g]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;padding:0}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%]{height:100%;overflow-y:auto}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] mat-card[_ngcontent-%COMP%]{width:40%;height:100%;margin-right:35px;padding:15px;gap:22px}@media only screen and (max-width: 750px){[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] mat-card[_ngcontent-%COMP%]{width:100%}}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] .chart-box[_ngcontent-%COMP%], [_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] .chart-container[_ngcontent-%COMP%]{height:100%;flex-grow:1}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] .chart-box[_ngcontent-%COMP%]{overflow:auto}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{height:100%}[_nghost-%COMP%] .legend[_ngcontent-%COMP%]{flex-wrap:wrap;width:100%;padding-top:8px;padding-bottom:4px;margin-top:15px}[_nghost-%COMP%] .legend[_ngcontent-%COMP%] .legend-keys[_ngcontent-%COMP%] .legend-label[_ngcontent-%COMP%]{padding:2px 20px 2px 10px;white-space:nowrap}[_nghost-%COMP%] .legend[_ngcontent-%COMP%] .legend-keys[_ngcontent-%COMP%] .legend-label.hidden-label[_ngcontent-%COMP%]{text-decoration:line-through;opacity:.6}[_nghost-%COMP%] .legend[_ngcontent-%COMP%] .legend-keys[_ngcontent-%COMP%] .legend-label[_ngcontent-%COMP%]:focus{outline:none}[_nghost-%COMP%] .legend[_ngcontent-%COMP%] .legend-keys[_ngcontent-%COMP%] .legend-line[_ngcontent-%COMP%]{display:inline-block;width:15px;height:3px;text-align:left;vertical-align:middle;outline:none}']})}}var rn;e("GatewayStatisticsComponent",an),e("BACnetRequestTypes",rn),function(e){e.WriteProperty="writeProperty",e.ReadProperty="readProperty"}(rn||e("BACnetRequestTypes",rn={}));const on=e("BACnetRequestTypesTranslates",new Map([[rn.WriteProperty,"gateway.rpc.write-property"],[rn.ReadProperty,"gateway.rpc.read-property"]]));var sn;e("BACnetObjectTypes",sn),function(e){e.BinaryInput="binaryInput",e.BinaryOutput="binaryOutput",e.AnalogInput="analogInput",e.AnalogOutput="analogOutput",e.BinaryValue="binaryValue",e.AnalogValue="analogValue"}(sn||e("BACnetObjectTypes",sn={}));const ln=e("BACnetObjectTypesTranslates",new Map([[sn.AnalogOutput,"gateway.rpc.analog-output"],[sn.AnalogInput,"gateway.rpc.analog-input"],[sn.BinaryOutput,"gateway.rpc.binary-output"],[sn.BinaryInput,"gateway.rpc.binary-input"],[sn.BinaryValue,"gateway.rpc.binary-value"],[sn.AnalogValue,"gateway.rpc.analog-value"]]));var pn;e("BLEMethods",pn),function(e){e.WRITE="write",e.READ="read",e.SCAN="scan"}(pn||e("BLEMethods",pn={}));const cn=e("BLEMethodsTranslates",new Map([[pn.WRITE,"gateway.rpc.write"],[pn.READ,"gateway.rpc.read"],[pn.SCAN,"gateway.rpc.scan"]]));var dn,mn;e("CANByteOrders",dn),function(e){e.LITTLE="LITTLE",e.BIG="BIG"}(dn||e("CANByteOrders",dn={})),e("SocketMethodProcessings",mn),function(e){e.WRITE="write"}(mn||e("SocketMethodProcessings",mn={}));const un=e("SocketMethodProcessingsTranslates",new Map([[mn.WRITE,"gateway.rpc.write"]]));var gn;e("SNMPMethods",gn),function(e){e.SET="set",e.MULTISET="multiset",e.GET="get",e.BULKWALK="bulkwalk",e.TABLE="table",e.MULTIGET="multiget",e.GETNEXT="getnext",e.BULKGET="bulkget",e.WALKS="walk"}(gn||e("SNMPMethods",gn={}));const hn=e("SNMPMethodsTranslations",new Map([[gn.SET,"gateway.rpc.set"],[gn.MULTISET,"gateway.rpc.multiset"],[gn.GET,"gateway.rpc.get"],[gn.BULKWALK,"gateway.rpc.bulk-walk"],[gn.TABLE,"gateway.rpc.table"],[gn.MULTIGET,"gateway.rpc.multi-get"],[gn.GETNEXT,"gateway.rpc.get-next"],[gn.BULKGET,"gateway.rpc.bulk-get"],[gn.WALKS,"gateway.rpc.walk"]]));var yn,fn,vn;e("HTTPMethods",yn),function(e){e.CONNECT="CONNECT",e.DELETE="DELETE",e.GET="GET",e.HEAD="HEAD",e.OPTIONS="OPTIONS",e.PATCH="PATCH",e.POST="POST",e.PUT="PUT",e.TRACE="TRACE"}(yn||e("HTTPMethods",yn={})),e("SocketEncodings",fn),function(e){e.UTF_8="utf-8"}(fn||e("SocketEncodings",fn={})),e("RestSecurityType",vn),function(e){e.ANONYMOUS="anonymous",e.BASIC="basic"}(vn||e("RestSecurityType",vn={}));const bn=e("RestSecurityTypeTranslationsMap",new Map([[vn.ANONYMOUS,"gateway.broker.security-types.anonymous"],[vn.BASIC,"gateway.broker.security-types.basic"]]));class xn{transform(e){return e.map((({value:e})=>e.toString())).join(", ")}static{this.ɵfac=function(e){return new(e||xn)}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"getRpcTemplateArrayView",type:xn,pure:!0,standalone:!0})}}e("RpcTemplateArrayViewPipe",xn);class Cn{constructor(){this.differs=n(a),this.keyValues=[]}transform(e){if(!e||!(e instanceof Map)&&"object"!=typeof e)return null;this.differ??=this.differs.find(e).create();const t=this.differ.diff(e);return t&&(this.keyValues=[],t.forEachItem((e=>{_(e.currentValue)&&this.keyValues.push(this.makeKeyValuePair(e.key,e.currentValue))}))),this.keyValues}makeKeyValuePair(e,t){return{key:e,value:t}}static{this.ɵfac=function(e){return new(e||Cn)}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"keyValueIsNotEmpty",type:Cn,pure:!1,standalone:!0})}}e("KeyValueIsNotEmptyPipe",Cn);const wn=e=>({$implicit:e,innerValue:!1}),Sn=e=>({"padding-left":e}),En=(e,t)=>({"flex-col":e,"flex-row justify-between items-center":t}),Tn=(e,t)=>({"boolean-true":e,"boolean-false":t}),In=e=>({$implicit:e,innerValue:!0});function kn(e,n){if(1&e&&t.ɵɵelementContainer(0,13),2&e){const e=n.$implicit;t.ɵɵnextContext();const a=t.ɵɵreference(15);t.ɵɵproperty("ngTemplateOutlet",a)("ngTemplateOutletContext",t.ɵɵpureFunction1(2,wn,e))}}function Mn(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",19),t.ɵɵtext(1),t.ɵɵpipe(2,"getRpcTemplateArrayView"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,e.value)," ")}}function Pn(e,n){if(1&e&&t.ɵɵelementContainer(0,20),2&e){t.ɵɵnextContext();const e=t.ɵɵreference(12);t.ɵɵproperty("ngTemplateOutlet",e)}}function Fn(e,n){if(1&e&&t.ɵɵelementContainer(0,20),2&e){t.ɵɵnextContext(2);const e=t.ɵɵreference(10);t.ɵɵproperty("ngTemplateOutlet",e)}}function On(e,n){if(1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵtemplate(1,Fn,1,1,"ng-container",21),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵreference(8);t.ɵɵclassMap(t.ɵɵpureFunction2(4,Tn,!0===e.value,!1===e.value)),t.ɵɵadvance(),t.ɵɵproperty("ngIf","method"===e.key)("ngIfElse",n)}}function qn(e,n){if(1&e&&t.ɵɵtext(0),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵtextInterpolate(e.value)}}function Bn(e,n){if(1&e&&(t.ɵɵtext(0),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext(2);t.ɵɵtextInterpolate(t.ɵɵpipeBind1(1,1,n.SNMPMethodsTranslations.get(e.value)))}}function Nn(e,n){if(1&e&&t.ɵɵelementContainer(0,13),2&e){const e=n.$implicit;t.ɵɵnextContext(3);const a=t.ɵɵreference(15);t.ɵɵproperty("ngTemplateOutlet",a)("ngTemplateOutletContext",t.ɵɵpureFunction1(2,In,e))}}function Rn(e,n){if(1&e&&(t.ɵɵtemplate(0,Nn,1,4,"ng-container",12),t.ɵɵpipe(1,"keyvalue")),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext(2);t.ɵɵproperty("ngForOf",t.ɵɵpipeBind2(1,1,e.value,n.originalOrder))}}function _n(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",14)(1,"div",15),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Mn,3,3,"div",16)(5,Pn,1,1,"ng-container",17)(6,On,2,7,"div",18)(7,qn,1,1,"ng-template",null,1,t.ɵɵtemplateRefExtractor)(9,Bn,2,3,"ng-template",null,2,t.ɵɵtemplateRefExtractor)(11,Rn,2,4,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=n.innerValue,r=t.ɵɵnextContext(2);t.ɵɵstyleMap(t.ɵɵpureFunction1(10,Sn,a?"16px":"0")),t.ɵɵclassMap(t.ɵɵpureFunction2(12,En,r.isObject(e.value),!r.isObject(e.value))),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",a?e.key:t.ɵɵpipeBind1(3,8,"gateway.rpc."+e.key)," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",r.isArray(e.value)),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.isObject(e.value)),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!r.isObject(e.value)&&!r.isArray(e.value))}}function Dn(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-expansion-panel",6)(1,"mat-expansion-panel-header")(2,"mat-panel-title",7)(3,"span",8),t.ɵɵtext(4),t.ɵɵelementEnd()(),t.ɵɵelementStart(5,"mat-panel-description")(6,"button",9),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteTemplate(n,a))})),t.ɵɵelementStart(7,"mat-icon",10),t.ɵɵtext(8,"delete"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"button",11),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.applyTemplate(n,a))})),t.ɵɵelementStart(10,"mat-icon",10),t.ɵɵtext(11,"play_arrow"),t.ɵɵelementEnd()()()(),t.ɵɵtemplate(12,kn,1,4,"ng-container",12),t.ɵɵpipe(13,"keyValueIsNotEmpty"),t.ɵɵtemplate(14,_n,13,15,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()}if(2&e){const e=n.$implicit;t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",e.name),t.ɵɵadvance(),t.ɵɵtextInterpolate(e.name),t.ɵɵadvance(8),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(13,3,e.config))}}class Vn{constructor(e){this.attributeService=e,this.saveTemplate=new r,this.useTemplate=new r,this.originalOrder=()=>0,this.isObject=e=>D(e),this.isArray=e=>Array.isArray(e),this.SNMPMethodsTranslations=hn}ngOnInit(){}applyTemplate(e,t){e.stopPropagation(),this.useTemplate.emit(t)}deleteTemplate(e,t){e.stopPropagation();const n=this.rpcTemplates.findIndex((e=>e.name==t.name));this.rpcTemplates.splice(n,1);const a=`${this.connectorType}_template`;this.attributeService.saveEntityAttributes({id:this.ctx.defaultSubscription.targetDeviceId,entityType:b.DEVICE},f.SERVER_SCOPE,[{key:a,value:this.rpcTemplates}]).subscribe((()=>{}))}static{this.ɵfac=function(e){return new(e||Vn)(t.ɵɵdirectiveInject(R.AttributeService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Vn,selectors:[["tb-gateway-service-rpc-connector-templates"]],inputs:{connectorType:"connectorType",ctx:"ctx",rpcTemplates:"rpcTemplates"},outputs:{saveTemplate:"saveTemplate",useTemplate:"useTemplate"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:4,vars:4,consts:[["RPCTemplateRef",""],["value",""],["SNMPMethod",""],["RPCObjectRow",""],[1,"mat-subtitle-1","title"],["hideToggle","",4,"ngFor","ngForOf"],["hideToggle",""],[1,"template-name"],["matTooltipPosition","above",3,"matTooltip"],["mat-icon-button","","matTooltip","Delete",3,"click"],[1,"material-icons"],["mat-icon-button","","matTooltip","Use",3,"click"],[3,"ngTemplateOutlet","ngTemplateOutletContext",4,"ngFor","ngForOf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"rpc-params-row","flex"],[1,"template-key"],["tbTruncateWithTooltip","","class","array-value",4,"ngIf"],[3,"ngTemplateOutlet",4,"ngIf"],[3,"class",4,"ngIf"],["tbTruncateWithTooltip","",1,"array-value"],[3,"ngTemplateOutlet"],[3,"ngTemplateOutlet",4,"ngIf","ngIfElse"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",4),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(3,Dn,16,5,"mat-expansion-panel",5)),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,2,"gateway.rpc.templates-title")),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.rpcTemplates))},dependencies:t.ɵɵgetComponentDepsFactory(Vn,[B,g,xn,Cn]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;padding:0}[_nghost-%COMP%] .title[_ngcontent-%COMP%]{font-weight:500}[_nghost-%COMP%] .template-key[_ngcontent-%COMP%]{color:#00000061;height:32px;line-height:32px}[_nghost-%COMP%] .boolean-true[_ngcontent-%COMP%], [_nghost-%COMP%] .boolean-false[_ngcontent-%COMP%]{border-radius:3px;height:32px;line-height:32px;padding:0 12px;width:fit-content;font-size:14px;text-transform:capitalize}[_nghost-%COMP%] .boolean-false[_ngcontent-%COMP%]{color:#d12730;background-color:#d1273014}[_nghost-%COMP%] .boolean-true[_ngcontent-%COMP%]{color:#198038;background-color:#19803814}[_nghost-%COMP%] mat-expansion-panel[_ngcontent-%COMP%]{margin-top:10px;overflow:visible}[_nghost-%COMP%] .mat-expansion-panel-header-description[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center;margin-right:0;flex:0}[_nghost-%COMP%] .mat-expansion-panel-header-description[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{margin-left:15px;color:#00000061}[_nghost-%COMP%] .mat-expansion-panel-header[_ngcontent-%COMP%]{padding:0 0 0 12px}[_nghost-%COMP%] .mat-expansion-panel-header.mat-expansion-panel-header.mat-expanded[_ngcontent-%COMP%]{height:48px}[_nghost-%COMP%] .mat-expansion-panel-header[_ngcontent-%COMP%] .mat-content.mat-content-hide-toggle[_ngcontent-%COMP%]{margin-right:0}[_nghost-%COMP%] .rpc-params-row[_ngcontent-%COMP%]{overflow:hidden;white-space:nowrap}[_nghost-%COMP%] .rpc-params-row[_ngcontent-%COMP%] [_ngcontent-%COMP%]:not(:first-child){white-space:pre;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .template-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;display:block}[_nghost-%COMP%] .mat-content{align-items:center}[_nghost-%COMP%] .mat-expansion-panel-header-title[_ngcontent-%COMP%]{flex:1;margin:0}[_nghost-%COMP%] .array-value[_ngcontent-%COMP%]{margin-left:10px}']})}}function An(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.rpc.template-name-required")," "))}function Gn(e,n){1&e&&(t.ɵɵelementStart(0,"div",12),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.rpc.template-name-duplicate")," "))}e("GatewayServiceRPCConnectorTemplatesComponent",Vn);class jn extends C{constructor(e,t,n,a,r){super(e,t,a),this.store=e,this.router=t,this.data=n,this.dialogRef=a,this.fb=r,this.config=this.data.config,this.templates=this.data.templates,this.templateNameCtrl=this.fb.control("",[J.required])}validateDuplicateName(e){const t=e.value.trim();return!!this.templates.find((e=>e.name===t))}close(){this.dialogRef.close()}save(){this.templateNameCtrl.setValue(this.templateNameCtrl.value.trim()),this.templateNameCtrl.valid&&this.dialogRef.close(this.templateNameCtrl.value)}static{this.ɵfac=function(e){return new(e||jn)(t.ɵɵdirectiveInject(ae.Store),t.ɵɵdirectiveInject(re.Router),t.ɵɵdirectiveInject(te),t.ɵɵdirectiveInject(ne.MatDialogRef),t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:jn,selectors:[["tb-gateway-service-rpc-connector-template-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:20,vars:10,consts:[["color","primary",1,"justify-between"],["translate",""],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content","",1,"mat-content","flex","flex-col",2,"width","600px"],[1,"mat-block","tb-value-type",2,"flex-grow","0"],["matInput","","required","",3,"formControl"],[4,"ngIf"],["class","mat-mdc-form-field-error","style","margin-top: -15px; padding-left: 10px; font-size: 14px;",4,"ngIf"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","type","button",3,"click"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[1,"mat-mdc-form-field-error",2,"margin-top","-15px","padding-left","10px","font-size","14px"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-toolbar",0)(1,"h2",1),t.ɵɵtext(2,"gateway.rpc.save-template"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"button",2),t.ɵɵlistener("click",(function(){return n.close()})),t.ɵɵelementStart(4,"mat-icon",3),t.ɵɵtext(5,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(6,"div",4)(7,"mat-form-field",5)(8,"mat-label",1),t.ɵɵtext(9,"gateway.rpc.template-name"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",6),t.ɵɵtemplate(11,An,3,3,"mat-error",7),t.ɵɵelementEnd(),t.ɵɵtemplate(12,Gn,3,3,"div",8),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",9)(14,"button",10),t.ɵɵlistener("click",(function(){return n.close()})),t.ɵɵtext(15),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"button",11),t.ɵɵlistener("click",(function(){return n.save()})),t.ɵɵtext(18),t.ɵɵpipe(19,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(10),t.ɵɵproperty("formControl",n.templateNameCtrl),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.templateNameCtrl.hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.validateDuplicateName(n.templateNameCtrl)),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(16,6,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",!n.templateNameCtrl.valid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(19,8,"action.save")," "))},dependencies:t.ɵɵgetComponentDepsFactory(jn,[B,g]),encapsulation:2})}}function Ln(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",6),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SecurityTypeTranslationsMap.get(e))," ")}}function Un(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",16),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.username-required"))}function $n(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",16),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.password-required"))}function zn(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",7)(2,"div",8),t.ɵɵtext(3,"gateway.username"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",9)(5,"mat-form-field",10),t.ɵɵelement(6,"input",11),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,Un,3,3,"mat-icon",12),t.ɵɵelementEnd()()(),t.ɵɵelementStart(9,"div",7)(10,"div",8),t.ɵɵtext(11,"gateway.password"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"div",9)(13,"mat-form-field",10),t.ɵɵelement(14,"input",13),t.ɵɵpipe(15,"translate"),t.ɵɵtemplate(16,$n,3,3,"mat-icon",12),t.ɵɵelementStart(17,"div",14),t.ɵɵelement(18,"tb-toggle-password",15),t.ɵɵelementEnd()()()(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,6,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.securityFormGroup.get("username").hasError("required")&&e.securityFormGroup.get("username").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(15,8,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.securityFormGroup.get("password").hasError("required")&&e.securityFormGroup.get("password").touched),t.ɵɵadvance(),t.ɵɵclassProp("hide-toggle",e.securityFormGroup.get("password").hasError("required"))}}e("GatewayServiceRPCConnectorTemplateDialogComponent",jn);class Kn{constructor(e){this.fb=e,this.BrokerSecurityType=vn,this.securityTypes=Object.values(vn),this.SecurityTypeTranslationsMap=bn,this.destroy$=new ie,this.propagateChange=e=>{},this.securityFormGroup=this.fb.group({type:[vn.ANONYMOUS,[]],username:["",[J.required,J.pattern(Re)]],password:["",[J.required,J.pattern(Re)]]}),this.observeSecurityForm()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}writeValue(e){e.type||(e.type=vn.ANONYMOUS),this.securityFormGroup.reset(e),this.updateView(e)}validate(){return this.securityFormGroup.valid?null:{securityForm:{valid:!1}}}updateView(e){this.propagateChange(e)}updateValidators(e){e===vn.BASIC?(this.securityFormGroup.get("username").enable({emitEvent:!1}),this.securityFormGroup.get("password").enable({emitEvent:!1})):(this.securityFormGroup.get("username").disable({emitEvent:!1}),this.securityFormGroup.get("password").disable({emitEvent:!1}))}observeSecurityForm(){this.securityFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>this.updateView(e))),this.securityFormGroup.get("type").valueChanges.pipe(de(this.destroy$)).subscribe((e=>this.updateValidators(e)))}static{this.ɵfac=function(e){return new(e||Kn)(t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Kn,selectors:[["tb-rest-connector-security"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Kn)),multi:!0},{provide:X,useExisting:i((()=>Kn)),multi:!0}]),t.ɵɵStandaloneFeature],decls:7,vars:3,consts:[[1,"tb-form-row","space-between","same-padding","tb-flex","column",3,"formGroup"],[1,"tb-flex","row","space-between","align-center","no-gap","fill-width"],["translate","",1,"fields-label"],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],[4,"ngIf"],[3,"value"],[1,"tb-form-row","space-between","tb-flex","fill-width"],["translate","",1,"fixed-title-width"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","username",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","type","password","name","value","formControlName","password",3,"placeholder"],["matSuffix","",1,"tb-flex","no-gap","align-center","fill-height"],[1,"tb-flex","align-center","fill-height"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"gateway.security"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"tb-toggle-select",3),t.ɵɵtemplate(5,Ln,3,4,"tb-toggle-option",4),t.ɵɵelementEnd()(),t.ɵɵtemplate(6,zn,19,10,"ng-container",5),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.securityFormGroup),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.securityTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.securityFormGroup.get("type").value===n.BrokerSecurityType.BASIC))},dependencies:t.ɵɵgetComponentDepsFactory(Kn,[g,B]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block;margin-bottom:10px}[_nghost-%COMP%] .fields-label[_ngcontent-%COMP%]{font-weight:500}[_nghost-%COMP%] .hide-toggle[_ngcontent-%COMP%]{display:none}'],changeDetection:o.OnPush})}}e("RestConnectorSecurityComponent",Kn);class Hn{constructor(e,t,n){this.elementRef=e,this.renderer=t,this.tooltip=n,this.tooltipEnabled=!0,this.position="above",this.destroy$=new ie}ngOnInit(){this.observeMouseEvents(),this.applyTruncationStyles()}ngAfterViewInit(){this.tooltip.position=this.position}ngOnDestroy(){this.tooltip._isTooltipVisible()&&this.hideTooltip(),this.destroy$.next(),this.destroy$.complete()}observeMouseEvents(){oe(this.elementRef.nativeElement,"mouseenter").pipe(me((()=>this.tooltipEnabled)),me((()=>this.isOverflown(this.elementRef.nativeElement))),ue((()=>this.showTooltip())),de(this.destroy$)).subscribe(),oe(this.elementRef.nativeElement,"mouseleave").pipe(me((()=>this.tooltipEnabled)),me((()=>this.tooltip._isTooltipVisible())),ue((()=>this.hideTooltip())),de(this.destroy$)).subscribe()}applyTruncationStyles(){this.renderer.setStyle(this.elementRef.nativeElement,"white-space","nowrap"),this.renderer.setStyle(this.elementRef.nativeElement,"overflow","hidden"),this.renderer.setStyle(this.elementRef.nativeElement,"text-overflow","ellipsis")}isOverflown(e){return e.clientWidth{this.adjustChips()}),0))}constructor(e,t,n,a){this.el=e,this.renderer=t,this.translate=n,this.window=a,this.destroy$=new ie,this.renderer.setStyle(this.el.nativeElement,"max-height","48px"),this.renderer.setStyle(this.el.nativeElement,"overflow","auto"),oe(a,"resize").pipe(de(this.destroy$)).subscribe((()=>{this.adjustChips()})),this.observeIntersection()}observeIntersection(){this.intersectionObserver=new IntersectionObserver((e=>{e.forEach((e=>{e.isIntersecting&&this.adjustChips()}))})),this.intersectionObserver.observe(this.el.nativeElement)}adjustChips(){const e=this.el.nativeElement,t=this.el.nativeElement.querySelector(".ellipsis-chip"),n=parseFloat(this.window.getComputedStyle(t).marginLeft)||0,a=e.querySelectorAll("mat-chip:not(.ellipsis-chip)");if(this.chipsValue.length>1){const r=this.el.nativeElement.querySelector(".ellipsis-text");this.renderer.setStyle(t,"display","inline-flex"),r.innerHTML=this.translate.instant("gateway.ellipsis-chips-text",{count:this.chipsValue.length});const i=e.offsetWidth-(t.offsetWidth+n);let o=0,s=0;a.forEach((e=>{this.renderer.setStyle(e,"display","inline-flex");const t=e.querySelector(".mdc-evolution-chip__text-label");this.applyMaxChipTextWidth(t,i/3),o+(e.offsetWidth+n)<=i&&spe(S())))).subscribe((e=>{this.attributesSubject.next(e.data),this.pageDataSubject.next(e),r.next(e)})),r}fetchAttributes(e,t,n){return this.getAllAttributes(e,t).pipe(he((e=>{const t=e.filter((e=>0!==e.lastUpdateTs));return n.filterData(t)})))}getAllAttributes(e,t){if(!this.allAttributes){let n;E.get(t)?(this.telemetrySubscriber=T.createEntityAttributesSubscription(this.telemetryWsService,e,t,this.zone),this.telemetrySubscriber.subscribe(),n=this.telemetrySubscriber.attributeData$()):n=this.attributeService.getEntityAttributes(e,t),this.allAttributes=n.pipe(ye(1),fe())}return this.allAttributes}isAllSelected(){const e=this.selection.selected.length;return this.attributesSubject.pipe(he((t=>e===t.length)))}isEmpty(){return this.attributesSubject.pipe(he((e=>!e.length)))}total(){return this.pageDataSubject.pipe(he((e=>e.totalElements)))}masterToggle(){this.attributesSubject.pipe(ue((e=>{this.selection.selected.length===e.length?this.selection.clear():e.forEach((e=>{this.selection.select(e)}))})),ve(1)).subscribe()}}function Jn(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-expansion-panel",4)(1,"mat-expansion-panel-header",5)(2,"mat-panel-title")(3,"mat-slide-toggle",6),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(4,"mat-label"),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementContainer(7,7),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(),n=t.ɵɵreference(5);t.ɵɵproperty("expanded",e.showStrategyControl.value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.showStrategyControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,4,"gateway.report-strategy.label")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n)}}function Yn(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",8),t.ɵɵtext(1,"gateway.report-strategy.label"),t.ɵɵelementEnd(),t.ɵɵelementContainer(2,7)),2&e){t.ɵɵnextContext();const e=t.ɵɵreference(5);t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",e)}}function Xn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",15),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,2,a.ReportTypeTranslateMap.get(e)))}}function Zn(e,n){1&e&&(t.ɵɵelementStart(0,"div",9)(1,"div",16)(2,"span",17),t.ɵɵtext(3," gateway.report-strategy.report-period "),t.ɵɵelementEnd()(),t.ɵɵelementStart(4,"mat-form-field",11),t.ɵɵelement(5,"input",18),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,1,"gateway.set")))}function ea(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",9)(1,"div",10),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",11)(5,"mat-select",12),t.ɵɵtemplate(6,Xn,3,4,"mat-option",13),t.ɵɵelementEnd()()(),t.ɵɵtemplate(7,Zn,7,3,"div",14)),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"gateway.type")),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.reportStrategyTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.reportStrategyFormGroup.get("type").value!==e.ReportStrategyType.OnChange&&e.reportStrategyFormGroup.get("type").value!==e.ReportStrategyType.OnReceived)}}e("AttributeDatasource",Wn);class ta{constructor(e){this.fb=e,this.isExpansionMode=!1,this.defaultValue=Mt.Key,this.reportStrategyTypes=Object.values(kt),this.ReportTypeTranslateMap=Pt,this.ReportStrategyType=kt,this.destroy$=new ie,this.showStrategyControl=this.fb.control(!1),this.reportStrategyFormGroup=this.fb.group({type:[{value:kt.OnReportPeriod,disabled:!0},[]],reportPeriod:[{value:this.defaultValue,disabled:!0},[J.required]]}),this.observeStrategyFormChange(),this.observeStrategyToggle()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}writeValue(e){this.isExpansionMode&&this.showStrategyControl.setValue(!!e,{emitEvent:!1}),e&&this.reportStrategyFormGroup.enable({emitEvent:!1});const{type:t=kt.OnReportPeriod,reportPeriod:n=this.defaultValue}=e??{};this.reportStrategyFormGroup.setValue({type:t,reportPeriod:n},{emitEvent:!1}),this.onTypeChange(t)}validate(){return this.reportStrategyFormGroup.valid||this.reportStrategyFormGroup.disabled?null:{reportStrategyForm:{valid:!1}}}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}observeStrategyFormChange(){this.reportStrategyFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()})),this.reportStrategyFormGroup.get("type").valueChanges.pipe(de(this.destroy$)).subscribe((e=>this.onTypeChange(e)))}observeStrategyToggle(){this.showStrategyControl.valueChanges.pipe(de(this.destroy$),me((()=>this.isExpansionMode))).subscribe((e=>{e?(this.reportStrategyFormGroup.enable({emitEvent:!1}),this.reportStrategyFormGroup.get("reportPeriod").addValidators(J.required),this.onChange(this.reportStrategyFormGroup.value)):(this.reportStrategyFormGroup.disable({emitEvent:!1}),this.reportStrategyFormGroup.get("reportPeriod").removeValidators(J.required),this.onChange(null)),this.reportStrategyFormGroup.updateValueAndValidity({emitEvent:!1})}))}onTypeChange(e){const t=this.reportStrategyFormGroup.get("reportPeriod");e===kt.OnChange||e===kt.OnReceived?t.disable({emitEvent:!1}):this.isExpansionMode&&!this.showStrategyControl.value||t.enable({emitEvent:!1})}static{this.ɵfac=function(e){return new(e||ta)(t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ta,selectors:[["tb-report-strategy"]],inputs:{isExpansionMode:"isExpansionMode",defaultValue:"defaultValue"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>ta)),multi:!0},{provide:X,useExisting:i((()=>ta)),multi:!0}]),t.ɵɵStandaloneFeature],decls:6,vars:3,consts:[["defaultMode",""],["strategyFields",""],[3,"formGroup"],["class","tb-settings",3,"expanded",4,"ngIf","ngIfElse"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],[1,"mat-slide",3,"click","formControl"],[3,"ngTemplateOutlet"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["formControlName","type"],[3,"value",4,"ngFor","ngForOf"],["class","tb-form-row column-xs",4,"ngIf"],[3,"value"],[1,"fixed-title-width","tb-required"],["tbTruncateWithTooltip","","translate",""],["matInput","","type","number","min","0","name","value","formControlName","reportPeriod",3,"placeholder"]],template:function(e,n){if(1&e&&(t.ɵɵelementContainerStart(0,2),t.ɵɵtemplate(1,Jn,8,6,"mat-expansion-panel",3)(2,Yn,3,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor)(4,ea,8,5,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵreference(3);t.ɵɵproperty("formGroup",n.reportStrategyFormGroup),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.isExpansionMode)("ngIfElse",e)}},dependencies:t.ɵɵgetComponentDepsFactory(ta,[B,g,Hn]),encapsulation:2,changeDetection:o.OnPush})}}var na,aa;e("ReportStrategyComponent",ta),Ee([w()],ta.prototype,"isExpansionMode",void 0),Ee([I()],ta.prototype,"defaultValue",void 0),e("ConvertorType",na),function(e){e.JSON="json",e.BYTES="bytes",e.CUSTOM="custom"}(na||e("ConvertorType",na={})),e("SourceType",aa),function(e){e.MSG="message",e.TOPIC="topic",e.CONST="constant"}(aa||e("SourceType",aa={}));const ra=e("MqttVersions",[{name:3.1,value:3},{name:3.11,value:4},{name:5,value:5}]),ia=e("QualityTypeTranslationsMap",new Map([[0,"gateway.qos.at-most-once"],[1,"gateway.qos.at-least-once"],[2,"gateway.qos.exactly-once"]])),oa=e("ConvertorTypeTranslationsMap",new Map([[na.JSON,"gateway.JSON"],[na.BYTES,"gateway.bytes"],[na.CUSTOM,"gateway.custom"]]));var sa;e("RequestType",sa),function(e){e.CONNECT_REQUEST="connectRequests",e.DISCONNECT_REQUEST="disconnectRequests",e.ATTRIBUTE_REQUEST="attributeRequests",e.ATTRIBUTE_UPDATE="attributeUpdates",e.SERVER_SIDE_RPC="serverSideRpc"}(sa||e("RequestType",sa={}));const la=e("RequestTypesTranslationsMap",new Map([[sa.CONNECT_REQUEST,"gateway.request.connect-request"],[sa.DISCONNECT_REQUEST,"gateway.request.disconnect-request"],[sa.ATTRIBUTE_REQUEST,"gateway.request.attribute-request"],[sa.ATTRIBUTE_UPDATE,"gateway.request.attribute-update"],[sa.SERVER_SIDE_RPC,"gateway.request.rpc-connection"]])),pa=e("DataConversionTranslationsMap",new Map([[na.JSON,"gateway.JSON-hint"],[na.BYTES,"gateway.bytes-hint"],[na.CUSTOM,"gateway.custom-hint"]]));var ca;e("PortLimits",ca),function(e){e[e.MIN=1]="MIN",e[e.MAX=65535]="MAX"}(ca||e("PortLimits",ca={}));const da=e("GatewayConnectorConfigVersionMap",new Map([[je.SOCKET,Ge.Current],[je.MQTT,Ge.v3_5_2],[je.OPCUA,Ge.v3_5_2],[je.MODBUS,Ge.v3_5_2]]));var ma,ua,ga,ha;e("OPCUaSourceType",ma),function(e){e.PATH="path",e.IDENTIFIER="identifier",e.CONST="constant"}(ma||e("OPCUaSourceType",ma={})),e("SecurityType",ua),function(e){e.ANONYMOUS="anonymous",e.BASIC="basic",e.CERTIFICATES="certificates"}(ua||e("SecurityType",ua={})),e("ModeType",ga),function(e){e.NONE="None",e.SIGN="Sign",e.SIGNANDENCRYPT="SignAndEncrypt"}(ga||e("ModeType",ga={})),e("MappingType",ha),function(e){e.DATA="data",e.REQUESTS="requests",e.OPCUA="OPCua"}(ha||e("MappingType",ha={}));const ya=e("MappingTypeTranslationsMap",new Map([[ha.DATA,"gateway.data-mapping"],[ha.REQUESTS,"gateway.requests-mapping"],[ha.OPCUA,"gateway.data-mapping"]]));var fa;e("SecurityPolicy",fa),function(e){e.BASIC128="Basic128Rsa15",e.BASIC256="Basic256",e.BASIC256SHA="Basic256Sha256"}(fa||e("SecurityPolicy",fa={}));const va=e("SecurityPolicyTypes",[{value:fa.BASIC128,name:"Basic128RSA15"},{value:fa.BASIC256,name:"Basic256"},{value:fa.BASIC256SHA,name:"Basic256SHA256"}]),ba=e("SecurityTypeTranslationsMap",new Map([[ua.ANONYMOUS,"gateway.broker.security-types.anonymous"],[ua.BASIC,"gateway.broker.security-types.basic"],[ua.CERTIFICATES,"gateway.broker.security-types.certificates"]])),xa=e("SourceTypeTranslationsMap",new Map([[aa.MSG,"gateway.source-type.msg"],[aa.TOPIC,"gateway.source-type.topic"],[aa.CONST,"gateway.source-type.const"],[ma.PATH,"gateway.source-type.path"],[ma.IDENTIFIER,"gateway.source-type.identifier"],[ma.CONST,"gateway.source-type.const"]]));var Ca;e("MappingKeysType",Ca),function(e){e.ATTRIBUTES="attributes",e.TIMESERIES="timeseries",e.CUSTOM="extensionConfig",e.RPC_METHODS="rpc_methods",e.ATTRIBUTES_UPDATES="attributes_updates"}(Ca||e("MappingKeysType",Ca={}));const wa=e("MappingKeysPanelTitleTranslationsMap",new Map([[Ca.ATTRIBUTES,"gateway.attributes"],[Ca.TIMESERIES,"gateway.timeseries"],[Ca.CUSTOM,"gateway.keys"],[Ca.ATTRIBUTES_UPDATES,"gateway.attribute-updates"],[Ca.RPC_METHODS,"gateway.rpc-methods"]])),Sa=e("MappingKeysAddKeyTranslationsMap",new Map([[Ca.ATTRIBUTES,"gateway.add-attribute"],[Ca.TIMESERIES,"gateway.add-timeseries"],[Ca.CUSTOM,"gateway.add-key"],[Ca.ATTRIBUTES_UPDATES,"gateway.add-attribute-update"],[Ca.RPC_METHODS,"gateway.add-rpc-method"]])),Ea=e("MappingKeysDeleteKeyTranslationsMap",new Map([[Ca.ATTRIBUTES,"gateway.delete-attribute"],[Ca.TIMESERIES,"gateway.delete-timeseries"],[Ca.CUSTOM,"gateway.delete-key"],[Ca.ATTRIBUTES_UPDATES,"gateway.delete-attribute-update"],[Ca.RPC_METHODS,"gateway.delete-rpc-method"]])),Ta=e("MappingKeysNoKeysTextTranslationsMap",new Map([[Ca.ATTRIBUTES,"gateway.no-attributes"],[Ca.TIMESERIES,"gateway.no-timeseries"],[Ca.CUSTOM,"gateway.no-keys"],[Ca.ATTRIBUTES_UPDATES,"gateway.no-attribute-updates"],[Ca.RPC_METHODS,"gateway.no-rpc-methods"]])),Ia=e("QualityTypes",[0,1,2]);var ka;e("ServerSideRpcType",ka),function(e){e.WithResponse="twoWay",e.WithoutResponse="oneWay"}(ka||e("ServerSideRpcType",ka={}));const Ma=e("HelpLinkByMappingTypeMap",new Map([[ha.DATA,k+"/docs/iot-gateway/config/mqtt/#section-mapping"],[ha.OPCUA,k+"/docs/iot-gateway/config/opc-ua/#section-mapping"],[ha.REQUESTS,k+"/docs/iot-gateway/config/mqtt/#requests-mapping"]])),Pa=e("MappingHintTranslationsMap",new Map([[ha.DATA,"gateway.data-mapping-hint"],[ha.OPCUA,"gateway.opcua-data-mapping-hint"],[ha.REQUESTS,"gateway.requests-mapping-hint"]]));var Fa,Oa,qa,Ba,Na,Ra,_a,Da;e("ServerSideRPCType",Fa),function(e){e.ONE_WAY="oneWay",e.TWO_WAY="twoWay"}(Fa||e("ServerSideRPCType",Fa={})),e("ModbusProtocolType",Oa),function(e){e.TCP="tcp",e.UDP="udp",e.Serial="serial"}(Oa||e("ModbusProtocolType",Oa={})),e("ModbusMethodType",qa),function(e){e.SOCKET="socket",e.RTU="rtu"}(qa||e("ModbusMethodType",qa={})),e("ModbusSerialMethodType",Ba),function(e){e.RTU="rtu",e.ASCII="ascii"}(Ba||e("ModbusSerialMethodType",Ba={})),e("ModbusParity",Na),function(e){e.Even="E",e.Odd="O",e.None="N"}(Na||e("ModbusParity",Na={})),e("ModbusOrderType",Ra),function(e){e.BIG="BIG",e.LITTLE="LITTLE"}(Ra||e("ModbusOrderType",Ra={})),e("ModbusRegisterType",_a),function(e){e.HoldingRegisters="holding_registers",e.CoilsInitializer="coils_initializer",e.InputRegisters="input_registers",e.DiscreteInputs="discrete_inputs"}(_a||e("ModbusRegisterType",_a={})),e("ModbusValueKey",Da),function(e){e.ATTRIBUTES="attributes",e.TIMESERIES="timeseries",e.ATTRIBUTES_UPDATES="attributeUpdates",e.RPC_REQUESTS="rpc"}(Da||e("ModbusValueKey",Da={}));const Va=e("ModbusBaudrates",[4800,9600,19200,38400,57600,115200,230400,460800,921600]),Aa=e("ModbusByteSizes",[5,6,7,8]),Ga=e("ModbusRegisterTranslationsMap",new Map([[_a.HoldingRegisters,"gateway.holding_registers"],[_a.CoilsInitializer,"gateway.coils_initializer"],[_a.InputRegisters,"gateway.input_registers"],[_a.DiscreteInputs,"gateway.discrete_inputs"]]));var ja;e("ModbusBitTargetType",ja),function(e){e.Boolean="bool",e.Integer="int"}(ja||e("ModbusBitTargetType",ja={}));const La=e("ModbusBitTargetTypeTranslationMap",new Map([[ja.Boolean,"gateway.boolean"],[ja.Integer,"gateway.integer"]])),Ua=e("ModbusMethodLabelsMap",new Map([[qa.SOCKET,"Socket"],[qa.RTU,"RTU"],[Ba.ASCII,"ASCII"]])),$a=e("ModbusProtocolLabelsMap",new Map([[Oa.TCP,"TCP"],[Oa.UDP,"UDP"],[Oa.Serial,"Serial"]])),za=e("ModbusParityLabelsMap",new Map([[Na.Even,"Even"],[Na.Odd,"Odd"],[Na.None,"None"]])),Ka=e("ModbusKeysPanelTitleTranslationsMap",new Map([[Da.ATTRIBUTES,"gateway.attributes"],[Da.TIMESERIES,"gateway.timeseries"],[Da.ATTRIBUTES_UPDATES,"gateway.attribute-updates"],[Da.RPC_REQUESTS,"gateway.rpc-requests"]])),Ha=e("ModbusKeysAddKeyTranslationsMap",new Map([[Da.ATTRIBUTES,"gateway.add-attribute"],[Da.TIMESERIES,"gateway.add-timeseries"],[Da.ATTRIBUTES_UPDATES,"gateway.add-attribute-update"],[Da.RPC_REQUESTS,"gateway.add-rpc-request"]])),Qa=e("ModbusKeysDeleteKeyTranslationsMap",new Map([[Da.ATTRIBUTES,"gateway.delete-attribute"],[Da.TIMESERIES,"gateway.delete-timeseries"],[Da.ATTRIBUTES_UPDATES,"gateway.delete-attribute-update"],[Da.RPC_REQUESTS,"gateway.delete-rpc-request"]])),Wa=e("ModbusKeysNoKeysTextTranslationsMap",new Map([[Da.ATTRIBUTES,"gateway.no-attributes"],[Da.TIMESERIES,"gateway.no-timeseries"],[Da.ATTRIBUTES_UPDATES,"gateway.no-attribute-updates"],[Da.RPC_REQUESTS,"gateway.no-rpc-requests"]]));var Ja;e("ModifierType",Ja),function(e){e.DIVIDER="divider",e.MULTIPLIER="multiplier"}(Ja||e("ModifierType",Ja={}));const Ya=e("ModifierTypesMap",new Map([[Ja.DIVIDER,{name:"gateway.divider",icon:"mdi:division"}],[Ja.MULTIPLIER,{name:"gateway.multiplier",icon:"mdi:multiplication"}]]));var Xa,Za,er,tr;e("DeviceInfoType",Xa),function(e){e.FULL="full",e.PARTIAL="partial"}(Xa||e("DeviceInfoType",Xa={})),e("SocketType",Za),function(e){e.TCP="TCP",e.UDP="UDP"}(Za||e("SocketType",Za={})),e("SocketValueKey",er),function(e){e.TIMESERIES="telemetry",e.ATTRIBUTES="attributes",e.ATTRIBUTES_REQUESTS="attributeRequests",e.ATTRIBUTES_UPDATES="attributeUpdates",e.RPC_METHODS="serverSideRpc"}(er||e("SocketValueKey",er={})),e("SocketEncoding",tr),function(e){e.UTF8="utf-8",e.HEX="hex",e.UTF16="utf-16",e.UTF32="utf-32",e.UTF16BE="utf-16-be",e.UTF16LE="utf-16-le",e.UTF32BE="utf-32-be",e.UTF32LE="utf-32-le"}(tr||e("SocketEncoding",tr={}));const nr=e("SocketKeysPanelTitleTranslationsMap",new Map([[er.ATTRIBUTES,"gateway.attributes"],[er.TIMESERIES,"gateway.timeseries"],[er.ATTRIBUTES_REQUESTS,"gateway.attribute-requests"],[er.ATTRIBUTES_UPDATES,"gateway.attribute-updates"],[er.RPC_METHODS,"gateway.rpc-methods"]]));var ar,rr;e("RequestsType",ar),function(e){e.Shared="shared",e.Client="client"}(ar||e("RequestsType",ar={})),e("ExpressionType",rr),function(e){e.Constant="constant",e.Expression="expression"}(rr||e("ExpressionType",rr={}));const ir=e("SocketKeysAddKeyTranslationsMap",new Map([[er.ATTRIBUTES,"gateway.add-attribute"],[er.TIMESERIES,"gateway.add-timeseries"],[er.ATTRIBUTES_REQUESTS,"gateway.add-attribute-request"],[er.ATTRIBUTES_UPDATES,"gateway.add-attribute-update"],[er.RPC_METHODS,"gateway.add-rpc-method"]])),or=e("SocketKeysDeleteKeyTranslationsMap",new Map([[er.ATTRIBUTES,"gateway.delete-attribute"],[er.TIMESERIES,"gateway.delete-timeseries"],[er.ATTRIBUTES_REQUESTS,"gateway.delete-attribute-request"],[er.ATTRIBUTES_UPDATES,"gateway.delete-attribute-update"],[er.RPC_METHODS,"gateway.delete-rpc-method"]])),sr=e("SocketKeysNoKeysTextTranslationsMap",new Map([[er.ATTRIBUTES,"gateway.no-attributes"],[er.TIMESERIES,"gateway.no-timeseries"],[er.ATTRIBUTES_REQUESTS,"gateway.no-attribute-requests"],[er.ATTRIBUTES_UPDATES,"gateway.no-attribute-updates"],[er.RPC_METHODS,"gateway.no-rpc-methods"]]));class lr{static{this.mqttRequestTypeKeys=Object.values(sa)}static{this.mqttRequestMappingOldFields=["attributeNameJsonExpression","deviceNameJsonExpression","deviceNameTopicExpression","extension-config"]}static{this.mqttRequestMappingNewFields=["attributeNameExpressionSource","responseTopicQoS","extensionConfig"]}static mapMappingToUpgradedVersion(e){return e?.map((({converter:e,topicFilter:t,subscriptionQos:n=1})=>{const a=e.deviceInfo??this.extractConverterDeviceInfo(e),r={...e,deviceInfo:a,extensionConfig:e.extensionConfig||e["extension-config"]||null};return this.cleanUpOldFields(r),{converter:r,topicFilter:t,subscriptionQos:n}}))}static mapRequestsToUpgradedVersion(e){return this.mqttRequestTypeKeys.reduce(((t,n)=>e[n]?(t[n]=e[n].map((e=>{const t=this.mapRequestToUpgradedVersion(e,n);return this.cleanUpOldFields(t),t})),t):t),{})}static mapRequestsToDowngradedVersion(e){return this.mqttRequestTypeKeys.reduce(((t,n)=>e[n]?(t[n]=e[n].map((e=>{n===sa.SERVER_SIDE_RPC&&delete e.type;const{attributeNameExpression:t,deviceInfo:a,...r}=e,i={...r,attributeNameJsonExpression:t||null,deviceNameJsonExpression:a?.deviceNameExpressionSource!==aa.TOPIC?a?.deviceNameExpression:null,deviceNameTopicExpression:a?.deviceNameExpressionSource===aa.TOPIC?a?.deviceNameExpression:null};return this.cleanUpNewFields(i),i})),t):t),{})}static mapMappingToDowngradedVersion(e){return e?.map((e=>{const t=this.mapConverterToDowngradedVersion(e.converter);return this.cleanUpNewFields(t),{converter:t,topicFilter:e.topicFilter}}))}static mapConverterToDowngradedVersion(e){const{deviceInfo:t,...n}=e;return e.type!==na.BYTES?{...n,deviceNameJsonExpression:t?.deviceNameExpressionSource===aa.MSG?t.deviceNameExpression:null,deviceTypeJsonExpression:t?.deviceProfileExpressionSource===aa.MSG?t.deviceProfileExpression:null,deviceNameTopicExpression:t?.deviceNameExpressionSource!==aa.MSG?t?.deviceNameExpression:null,deviceTypeTopicExpression:t?.deviceProfileExpressionSource!==aa.MSG?t?.deviceProfileExpression:null}:{...n,deviceNameExpression:t.deviceNameExpression,deviceTypeExpression:t.deviceProfileExpression,"extension-config":e.extensionConfig}}static cleanUpOldFields(e){this.mqttRequestMappingOldFields.forEach((t=>delete e[t])),G(e)}static cleanUpNewFields(e){this.mqttRequestMappingNewFields.forEach((t=>delete e[t])),G(e)}static getTypeSourceByValue(e){return e.includes("${")?aa.MSG:e.includes("/")?aa.TOPIC:aa.CONST}static extractConverterDeviceInfo(e){const t=e.deviceNameExpression||e.deviceNameJsonExpression||e.deviceNameTopicExpression||null,n=e.deviceNameExpressionSource?e.deviceNameExpressionSource:t?this.getTypeSourceByValue(t):null,a=e.deviceProfileExpression||e.deviceTypeTopicExpression||e.deviceTypeJsonExpression||"default",r=e.deviceProfileExpressionSource?e.deviceProfileExpressionSource:a?this.getTypeSourceByValue(a):null;return t||a?{deviceNameExpression:t,deviceNameExpressionSource:n,deviceProfileExpression:a,deviceProfileExpressionSource:r}:null}static mapRequestToUpgradedVersion(e,t){const n=e.deviceNameJsonExpression||e.deviceNameTopicExpression||null,a=e.deviceTypeTopicExpression||e.deviceTypeJsonExpression||"default",r=a?this.getTypeSourceByValue(a):null,i=e.attributeNameExpressionSource||e.attributeNameJsonExpression||null,o=t===sa.SERVER_SIDE_RPC?1:null,s=t===sa.SERVER_SIDE_RPC?e.responseTopicExpression?ka.WithResponse:ka.WithoutResponse:null;return{...e,attributeNameExpression:i,attributeNameExpressionSource:i?this.getTypeSourceByValue(i):null,deviceInfo:e.deviceInfo?e.deviceInfo:n?{deviceNameExpression:n,deviceNameExpressionSource:this.getTypeSourceByValue(n),deviceProfileExpression:a,deviceProfileExpressionSource:r}:null,responseTopicQoS:o,type:s}}}e("MqttVersionMappingUtil",lr);class pr{constructor(e,t){this.gatewayVersionIn=e,this.connector=t,this.gatewayVersion=hr.parseVersion(this.gatewayVersionIn),this.configVersion=hr.parseVersion(this.connector.configVersion??this.connector.configurationJson.configVersion)}getProcessedByVersion(){return this.isVersionUpdateNeeded()?this.processVersionUpdate():this.connector}processVersionUpdate(){return this.isVersionUpgradeNeeded()?this.getUpgradedVersion():this.isVersionDowngradeNeeded()?this.getDowngradedVersion():this.connector}isVersionUpdateNeeded(){return!!this.gatewayVersion&&this.configVersion!==this.gatewayVersion}isVersionUpgradeNeeded(){const e=hr.parseVersion(da.get(this.connector.type)),t=this.gatewayVersion>=e,n=!this.configVersion||this.configVersion=hr.parseVersion(da.get(this.connector.type))&&this.configVersion>this.gatewayVersion}}e("GatewayConnectorVersionProcessor",pr);class cr extends pr{constructor(e,t){super(e,t),this.gatewayVersionIn=e,this.connector=t,this.mqttRequestTypeKeys=Object.values(sa)}getUpgradedVersion(){const{connectRequests:e,disconnectRequests:t,attributeRequests:n,attributeUpdates:a,serverSideRpc:r}=this.connector.configurationJson;let i={...this.connector.configurationJson,requestsMapping:lr.mapRequestsToUpgradedVersion({connectRequests:e,disconnectRequests:t,attributeRequests:n,attributeUpdates:a,serverSideRpc:r}),mapping:lr.mapMappingToUpgradedVersion(this.connector.configurationJson.mapping)};return this.mqttRequestTypeKeys.forEach((e=>{const{[e]:t,...n}=i;i={...n}})),this.cleanUpConfigJson(i),{...this.connector,configurationJson:i,configVersion:this.gatewayVersionIn}}getDowngradedVersion(){const{requestsMapping:e,mapping:t,...n}=this.connector.configurationJson,a=e?lr.mapRequestsToDowngradedVersion(e):{},r=lr.mapMappingToDowngradedVersion(t);return{...this.connector,configurationJson:{...n,...a,mapping:r},configVersion:this.gatewayVersionIn}}cleanUpConfigJson(e){V(e.requestsMapping,{})&&delete e.requestsMapping,V(e.mapping,[])&&delete e.mapping}}e("MqttVersionProcessor",cr);class dr extends pr{constructor(e,t){super(e,t),this.gatewayVersionIn=e,this.connector=t}getUpgradedVersion(){const e=this.connector.configurationJson;return{...this.connector,configurationJson:{master:e.master?.slaves?yr.mapMasterToUpgradedVersion(e.master):{slaves:[]},slave:e.slave?yr.mapSlaveToUpgradedVersion(e.slave):{}},configVersion:this.gatewayVersionIn}}getDowngradedVersion(){const e=this.connector.configurationJson;return{...this.connector,configurationJson:{...e,slave:e.slave?yr.mapSlaveToDowngradedVersion(e.slave):{},master:e.master?.slaves?yr.mapMasterToDowngradedVersion(e.master):{slaves:[]}},configVersion:this.gatewayVersionIn}}}e("ModbusVersionProcessor",dr);class mr extends pr{constructor(e,t){super(e,t),this.gatewayVersionIn=e,this.connector=t}getUpgradedVersion(){const e=this.connector.configurationJson.server;return{...this.connector,configurationJson:{server:e?fr.mapServerToUpgradedVersion(e):{},mapping:e?.mapping?fr.mapMappingToUpgradedVersion(e.mapping):[]},configVersion:this.gatewayVersionIn}}getDowngradedVersion(){return{...this.connector,configurationJson:{server:fr.mapServerToDowngradedVersion(this.connector.configurationJson)},configVersion:this.gatewayVersionIn}}}e("OpcVersionProcessor",mr);class ur{constructor(){this.initialized=new r,this.fb=n(Z),this.destroy$=new ie,this.basicFormGroup=this.initBasicFormGroup(),this.basicFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>this.onBasicFormGroupChange(e)))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}ngAfterViewInit(){this.initialized.emit()}validate(){return this.basicFormGroup.valid?null:{basicFormGroup:{valid:!1}}}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){this.basicFormGroup.setValue(this.mapConfigToFormValue(e),{emitEvent:!1})}onBasicFormGroupChange(e){this.onChange(this.getMappedValue(e)),this.onTouched()}static{this.ɵfac=function(e){return new(e||ur)}}static{this.ɵdir=t.ɵɵdefineDirective({type:ur,inputs:{generalTabContent:"generalTabContent"},outputs:{initialized:"initialized"}})}}e("GatewayConnectorBasicConfigDirective",ur);class gr extends pr{constructor(e,t){super(e,t),this.gatewayVersionIn=e,this.connector=t}getUpgradedVersion(){const e=this.connector.configurationJson;return{...this.connector,configurationJson:{socket:e?vr.mapSocketToUpgradedVersion(e):{},devices:e?.devices?vr.mapDevicesToUpgradedVersion(e.devices):[]},configVersion:this.gatewayVersionIn}}getDowngradedVersion(){return{...this.connector,configurationJson:vr.mapSocketToDowngradedVersion(this.connector.configurationJson),configVersion:this.gatewayVersionIn}}}e("SocketVersionProcessor",gr);class hr{static getConfig(e,t){switch(e.type){case je.MQTT:return new cr(t,e).getProcessedByVersion();case je.OPCUA:return new mr(t,e).getProcessedByVersion();case je.MODBUS:return new dr(t,e).getProcessedByVersion();case je.SOCKET:return new gr(t,e).getProcessedByVersion();default:return e}}static parseVersion(e){if(j(e))return e;if(L(e)){const[t,n="0",a="0"]=e.split(".");return parseFloat(`${t}.${n}${a.slice(0,1)}`)}return 0}}e("GatewayConnectorVersionMappingUtil",hr);class yr{static mapMasterToUpgradedVersion(e){return{slaves:e.slaves.map((e=>{const{sendDataOnlyOnChange:t,...n}=e;return{...n,deviceType:e.deviceType??"default",reportStrategy:t?{type:kt.OnChange}:{type:kt.OnReportPeriod,reportPeriod:e.pollPeriod}}}))}}static mapMasterToDowngradedVersion(e){return{slaves:e.slaves.map((e=>{const{reportStrategy:t,...n}=e;return{...n,sendDataOnlyOnChange:t?.type!==kt.OnReportPeriod}}))}}static mapSlaveToDowngradedVersion(e){if(!e?.values)return e;const t=Object.keys(e.values).reduce(((t,n)=>t={...t,[n]:[e.values[n]]}),{});return{...e,values:t}}static mapSlaveToUpgradedVersion(e){if(!e?.values)return e;const t=Object.keys(e.values).reduce(((t,n)=>t={...t,[n]:this.mapValuesToUpgradedVersion(e.values[n][0]??{})}),{});return{...e,values:t}}static mapValuesToUpgradedVersion(e){return Object.keys(e).reduce(((t,n)=>t={...t,[n]:e[n].map((e=>({...e,type:"int"===e.type?xt.INT16:e.type})))}),{})}}e("ModbusVersionMappingUtil",yr);class fr{static mapServerToUpgradedVersion(e){const{mapping:t,disableSubscriptions:n,pollPeriodInMillis:a,...r}=e;return{...r,pollPeriodInMillis:a??5e3,enableSubscriptions:!n}}static mapServerToDowngradedVersion(e){const{mapping:t,server:n}=e,{enableSubscriptions:a,...r}=n??{};return{...r,mapping:t?this.mapMappingToDowngradedVersion(t):[],disableSubscriptions:!a}}static mapMappingToUpgradedVersion(e){return e.map((e=>({deviceNodePattern:e.deviceNodePattern,deviceNodeSource:this.getDeviceNodeSourceByValue(e.deviceNodePattern),deviceInfo:{deviceNameExpression:e.deviceNamePattern,deviceNameExpressionSource:this.getTypeSourceByValue(e.deviceNamePattern),deviceProfileExpression:e.deviceTypePattern??"default",deviceProfileExpressionSource:this.getTypeSourceByValue(e.deviceTypePattern??"default")},attributes:e.attributes?.map((e=>({key:e.key,type:this.getTypeSourceByValue(e.path),value:e.path})))??[],attributes_updates:e.attributes_updates?.map((e=>({key:e.attributeOnThingsBoard,type:this.getTypeSourceByValue(e.attributeOnDevice),value:e.attributeOnDevice})))??[],timeseries:e.timeseries?.map((e=>({key:e.key,type:this.getTypeSourceByValue(e.path),value:e.path})))??[],rpc_methods:e.rpc_methods?.map((e=>({method:e.method,arguments:e.arguments.map((e=>({value:e,type:this.getArgumentType(e)})))})))??[]})))}static mapMappingToDowngradedVersion(e){return e.map((e=>({deviceNodePattern:e.deviceNodePattern,deviceNamePattern:e.deviceInfo.deviceNameExpression,deviceTypePattern:e.deviceInfo.deviceProfileExpression,attributes:e.attributes.map((e=>({key:e.key,path:e.value}))),attributes_updates:e.attributes_updates.map((e=>({attributeOnThingsBoard:e.key,attributeOnDevice:e.value}))),timeseries:e.timeseries.map((e=>({key:e.key,path:e.value}))),rpc_methods:e.rpc_methods.map((e=>({method:e.method,arguments:e.arguments.map((e=>e.value))})))})))}static getTypeSourceByValue(e){return e.includes("${")?ma.IDENTIFIER:e.includes("/")||e.includes("\\")?ma.PATH:ma.CONST}static getDeviceNodeSourceByValue(e){return e.includes("${")?ma.IDENTIFIER:ma.PATH}static getArgumentType(e){switch(typeof e){case"boolean":return"boolean";case"number":return Number.isInteger(e)?"integer":"float";default:return"string"}}}e("OpcVersionMappingUtil",fr);class vr{static mapSocketToUpgradedVersion(e){const{devices:t,...n}=e??{};return n}static mapSocketToDowngradedVersion(e){const{devices:t,socket:n}=e??{};return{...n,devices:this.mapDevicesToDowngradedVersion(t??[])}}static mapDevicesToUpgradedVersion(e){return e?.map((e=>({...e,attributeRequests:e.attributeRequests?.map((e=>({...e,requestExpressionSource:this.getExpressionSource(e.requestExpression),attributeNameExpressionSource:this.getExpressionSource(e.attributeNameExpression)})))??[]})))??[]}static mapDevicesToDowngradedVersion(e){return e.map((e=>({...e,attributeRequests:e.attributeRequests?.map((({requestExpressionSource:e,attributeNameExpressionSource:t,...n})=>n))??[]})))}static getExpressionSource(e){return e.includes("${")||e.includes("[")?rr.Expression:rr.Constant}}e("SocketVersionMappingUtil",vr);class br{transform(e,t){const n=hr.parseVersion(e);return t===je.MODBUS?n>=hr.parseVersion(Ge.v3_5_2):n>=hr.parseVersion(Ge.Current)}static{this.ɵfac=function(e){return new(e||br)}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"withReportStrategy",type:br,pure:!0,standalone:!0})}}e("ReportStrategyVersionPipe",br);const xr=e=>({type:e});function Cr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.bACnetRequestTypesTranslates.get(e))," ")}}function wr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.bACnetObjectTypesTranslates.get(e))," ")}}function Sr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",9),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",10)(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-select",11),t.ɵɵtemplate(10,Cr,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field")(12,"mat-label"),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",13),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"div",14)(17,"mat-form-field",15)(18,"mat-label"),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-select",16),t.ɵɵtemplate(22,wr,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(23,"mat-form-field",15)(24,"mat-label"),t.ɵɵtext(25),t.ɵɵpipe(26,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(27,"input",17),t.ɵɵelementEnd()(),t.ɵɵelementStart(28,"mat-form-field",10)(29,"mat-label"),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(32,"input",18),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,8,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,10,"gateway.rpc.requestType")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.bACnetRequestTypes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,12,"gateway.rpc.requestTimeout")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(20,14,"gateway.rpc.objectType")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.bACnetObjectTypes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(26,16,"gateway.rpc.identifier")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(31,18,"gateway.rpc.propertyId"))}}function Er(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.bLEMethodsTranslates.get(e))," ")}}function Tr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",20),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",21),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-form-field",10)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-select",22),t.ɵɵtemplate(15,Er,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(16,"mat-slide-toggle",23),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,5,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,7,"gateway.rpc.characteristicUUID")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,9,"gateway.rpc.methodProcessing")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.bLEMethods),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,11,"gateway.rpc.withResponse")," ")}}function Ir(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,e)," ")}}function kr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",24),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",25),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-slide-toggle",26),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-slide-toggle",27),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"mat-slide-toggle",28),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"div",14)(20,"mat-form-field",15)(21,"mat-label"),t.ɵɵtext(22),t.ɵɵpipe(23,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",29),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-form-field",15)(26,"mat-label"),t.ɵɵtext(27),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-select",30),t.ɵɵtemplate(30,Ir,3,4,"mat-option",12),t.ɵɵelementEnd()()(),t.ɵɵelementStart(31,"div",14)(32,"mat-form-field",15)(33,"mat-label"),t.ɵɵtext(34),t.ɵɵpipe(35,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(36,"input",31),t.ɵɵelementEnd(),t.ɵɵelementStart(37,"mat-form-field",15)(38,"mat-label"),t.ɵɵtext(39),t.ɵɵpipe(40,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(41,"input",32),t.ɵɵelementEnd()(),t.ɵɵelementStart(42,"mat-form-field")(43,"mat-label"),t.ɵɵtext(44),t.ɵɵpipe(45,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(46,"input",33),t.ɵɵelementEnd(),t.ɵɵelementStart(47,"mat-form-field")(48,"mat-label"),t.ɵɵtext(49),t.ɵɵpipe(50,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(51,"input",34),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,12,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,14,"gateway.rpc.nodeID")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,16,"gateway.rpc.isExtendedID")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,18,"gateway.rpc.isFD")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,20,"gateway.rpc.bitrateSwitch")," "),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(23,22,"gateway.rpc.dataLength")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(28,24,"gateway.rpc.dataByteorder")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.cANByteOrders),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(35,26,"gateway.rpc.dataBefore")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(40,28,"gateway.rpc.dataAfter")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(45,30,"gateway.rpc.dataInHEX")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(50,32,"gateway.rpc.dataExpression"))}}function Mr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",35),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",36),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,2,"gateway.rpc.methodFilter")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,4,"gateway.rpc.valueExpression")))}function Pr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",37),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",36),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-slide-toggle",38),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,5,"gateway.rpc.valueExpression")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,7,"gateway.rpc.withResponse")," "))}function Fr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SocketMethodProcessingsTranslates.get(e))," ")}}function Or(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",20),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",10)(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-select",22),t.ɵɵtemplate(10,Fr,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",10)(12,"mat-label"),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",39),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"mat-slide-toggle",38),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,6,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,8,"gateway.rpc.methodProcessing")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.socketMethodProcessings),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,10,"gateway.encoding")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",e.socketEncodings[0]),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,12,"gateway.rpc.withResponse")," ")}}function qr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",37),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",36),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-slide-toggle",38),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,5,"gateway.rpc.valueExpression")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,7,"gateway.rpc.withResponse")," "))}function Br(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SNMPMethodsTranslations.get(e))," ")}}function Nr(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",46)(1,"mat-form-field",47),t.ɵɵelement(2,"input",48),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-icon",49),t.ɵɵpipe(4,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,a=t.ɵɵnextContext(3);return t.ɵɵresetView(a.removeSNMPoid(n))})),t.ɵɵtext(5,"delete "),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵproperty("formControl",e),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(4,2,"gateway.rpc.remove"))}}function Rr(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",40),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",10)(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-select",41),t.ɵɵtemplate(10,Br,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-slide-toggle",38),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"fieldset",42)(15,"span",43),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(18,Nr,6,4,"div",44),t.ɵɵelementStart(19,"button",45),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.addSNMPoid())})),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,7,"gateway.rpc.requestFilter")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,9,"gateway.rpc.method")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.sNMPMethods),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(13,11,"gateway.rpc.withResponse")," "),t.ɵɵadvance(4),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(17,13,"gateway.rpc.oids"),"*"),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",e.getFormArrayControls("oid")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(21,15,"gateway.rpc.add-oid")," ")}}function _r(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Dr(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",60),t.ɵɵelementContainerStart(1,64),t.ɵɵelementStart(2,"mat-form-field",65),t.ɵɵelement(3,"input",66),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",65),t.ɵɵelement(5,"input",67),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-icon",68),t.ɵɵpipe(7,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,a=t.ɵɵnextContext(4);return t.ɵɵresetView(a.removeHTTPHeader(n))})),t.ɵɵtext(8,"delete "),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()}if(2&e){const e=n.index;t.ɵɵadvance(),t.ɵɵproperty("formGroupName",e),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,2,"gateway.rpc.remove"))}}function Vr(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",59)(1,"div",60)(2,"span",61),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"span",61),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(8,"span",62),t.ɵɵelementEnd(),t.ɵɵelement(9,"mat-divider"),t.ɵɵtemplate(10,Dr,9,4,"div",63),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(3);t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.rpc.header-name")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,5,"gateway.rpc.value")),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.getFormArrayControls("httpHeaders"))}}function Ar(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",50),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",14)(6,"mat-form-field",51)(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-select",52),t.ɵɵtemplate(11,_r,2,2,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"mat-form-field",15)(13,"mat-label"),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",53),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"div",14)(18,"mat-form-field",15)(19,"mat-label"),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(22,"input",54),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-form-field",15)(24,"mat-label"),t.ɵɵtext(25),t.ɵɵpipe(26,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(27,"input",55),t.ɵɵelementEnd(),t.ɵɵelementStart(28,"mat-form-field",15)(29,"mat-label"),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(32,"input",56),t.ɵɵelementEnd()(),t.ɵɵelementStart(33,"mat-form-field")(34,"mat-label"),t.ɵɵtext(35),t.ɵɵpipe(36,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(37,"input",36),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"fieldset",57)(39,"span",43),t.ɵɵtext(40),t.ɵɵpipe(41,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(42,Vr,11,7,"div",58),t.ɵɵelementStart(43,"button",45),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.addHTTPHeader())})),t.ɵɵtext(44),t.ɵɵpipe(45,"translate"),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,11,"gateway.rpc.methodFilter")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,13,"gateway.rpc.httpMethod")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.hTTPMethods),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,15,"gateway.rpc.requestUrlExpression")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(21,17,"gateway.rpc.responseTimeout")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(26,19,"gateway.rpc.timeout")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(31,21,"gateway.rpc.tries")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(36,23,"gateway.rpc.valueExpression")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(41,25,"gateway.rpc.httpHeaders")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.getFormArrayControls("httpHeaders").length),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(45,27,"gateway.rpc.add-header")," ")}}function Gr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function jr(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",60),t.ɵɵelementContainerStart(1,64),t.ɵɵelementStart(2,"mat-form-field",65),t.ɵɵelement(3,"input",74),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",65),t.ɵɵelement(6,"input",75),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-icon",68),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,a=t.ɵɵnextContext(4);return t.ɵɵresetView(a.removeHTTPHeader(n))})),t.ɵɵtext(9,"delete "),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()}if(2&e){const e=n.index;t.ɵɵadvance(),t.ɵɵproperty("formGroupName",e),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(4,3,"gateway.rpc.set")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,5,"gateway.rpc.remove"))}}function Lr(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",59)(1,"div",60)(2,"span",61),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"span",61),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(8,"span",62),t.ɵɵelementEnd(),t.ɵɵelement(9,"mat-divider"),t.ɵɵtemplate(10,jr,10,7,"div",63),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(3);t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.rpc.header-name")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,5,"gateway.rpc.value")),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.getFormArrayControls("httpHeaders"))}}function Ur(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",69),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",60)(6,"mat-form-field",51)(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-select",52),t.ɵɵtemplate(11,Gr,2,2,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"mat-form-field",15)(13,"mat-label"),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",53),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"div",60)(18,"mat-form-field",15)(19,"mat-label"),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(22,"input",54),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-form-field",15)(24,"mat-label"),t.ɵɵtext(25),t.ɵɵpipe(26,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(27,"input",70),t.ɵɵelementEnd(),t.ɵɵelementStart(28,"mat-form-field",15)(29,"mat-label"),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(32,"input",71),t.ɵɵelementEnd()(),t.ɵɵelementStart(33,"mat-form-field")(34,"mat-label"),t.ɵɵtext(35),t.ɵɵpipe(36,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(37,"input",72),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"mat-form-field")(39,"mat-label"),t.ɵɵtext(40),t.ɵɵpipe(41,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(42,"input",73),t.ɵɵelementEnd(),t.ɵɵelementStart(43,"fieldset",57)(44,"span",43),t.ɵɵtext(45),t.ɵɵpipe(46,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(47,Lr,11,7,"div",58),t.ɵɵelementStart(48,"button",45),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.addHTTPHeader())})),t.ɵɵtext(49),t.ɵɵpipe(50,"translate"),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,12,"gateway.rpc.methodFilter")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,14,"gateway.rpc.httpMethod")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.hTTPMethods),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,16,"gateway.rpc.requestUrlExpression")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(21,18,"gateway.rpc.responseTimeout")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(26,20,"gateway.rpc.timeout")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(31,22,"gateway.rpc.tries")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(36,24,"gateway.rpc.requestValueExpression")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(41,26,"gateway.rpc.responseValueExpression")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(46,28,"gateway.rpc.httpHeaders")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.getFormArrayControls("httpHeaders").length),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(50,30,"gateway.rpc.add-header")," ")}}function $r(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.rpc.json-value-invalid")," "))}function zr(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",76),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",77),t.ɵɵelementStart(10,"mat-icon",78),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext(2);return t.ɵɵresetView(a.openEditJSONDialog(n))})),t.ɵɵtext(12,"edit "),t.ɵɵelementEnd(),t.ɵɵtemplate(13,$r,3,3,"mat-error",79),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,4,"gateway.statistics.command")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,6,"widget-config.datasource-parameters")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(11,8,"gateway.rpc-command-edit-params")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.commandForm.get("params").hasError("invalidJSON"))}}function Kr(e,n){if(1&e&&(t.ɵɵelementContainerStart(0,6),t.ɵɵtemplate(1,Sr,33,20,"ng-template",7)(2,Tr,19,13,"ng-template",7)(3,kr,52,34,"ng-template",7)(4,Mr,10,6,"ng-template",7)(5,Pr,13,9,"ng-template",7)(6,Or,19,14,"ng-template",7)(7,qr,13,9,"ng-template",7)(8,Rr,22,17,"ng-template",7)(9,Ar,46,29,"ng-template",7)(10,Ur,51,32,"ng-template",7)(11,zr,14,10,"ng-template",8),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("ngSwitch",e.connectorType),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.BACNET),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.BLE),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.CAN),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.FTP),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.OCPP),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.SOCKET),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.XMPP),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.SNMP),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.REST),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.REQUEST)}}class Hr{constructor(e,t){this.fb=e,this.dialog=t,this.sendCommand=new r,this.saveTemplate=new r,this.ConnectorType=je,this.bACnetRequestTypes=Object.values(rn),this.bACnetObjectTypes=Object.values(sn),this.bLEMethods=Object.values(pn),this.cANByteOrders=Object.values(dn),this.socketMethodProcessings=Object.values(mn),this.socketEncodings=Object.values(fn),this.sNMPMethods=Object.values(gn),this.hTTPMethods=Object.values(yn),this.bACnetRequestTypesTranslates=on,this.bACnetObjectTypesTranslates=ln,this.bLEMethodsTranslates=cn,this.SocketMethodProcessingsTranslates=un,this.SNMPMethodsTranslations=hn,this.gatewayConnectorDefaultTypesTranslates=Le,this.urlPattern=/^[-a-zA-Zd_$:{}?~+=\/.0-9-]*$/,this.numbersOnlyPattern=/^[0-9]*$/,this.hexOnlyPattern=/^[0-9A-Fa-f ]+$/,this.propagateChange=e=>{},this.destroy$=new ie}ngOnInit(){this.commandForm=this.connectorParamsFormGroupByType(this.connectorType),this.observeFormChanges()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}connectorParamsFormGroupByType(e){let t;switch(e){case je.BACNET:t=this.fb.group({method:[null,[J.required,J.pattern(Re)]],requestType:[null,[J.required,J.pattern(Re)]],requestTimeout:[null,[J.required,J.min(10),J.pattern(this.numbersOnlyPattern)]],objectType:[null,[]],identifier:[null,[J.required,J.min(1),J.pattern(this.numbersOnlyPattern)]],propertyId:[null,[J.required,J.pattern(Re)]]});break;case je.BLE:t=this.fb.group({methodRPC:[null,[J.required,J.pattern(Re)]],characteristicUUID:["00002A00-0000-1000-8000-00805F9B34FB",[J.required,J.pattern(Re)]],methodProcessing:[null,[J.required]],withResponse:[!1,[]]});break;case je.CAN:t=this.fb.group({method:[null,[J.required,J.pattern(Re)]],nodeID:[null,[J.required,J.min(0),J.pattern(this.numbersOnlyPattern)]],isExtendedID:[!1,[]],isFD:[!1,[]],bitrateSwitch:[!1,[]],dataLength:[null,[J.min(1),J.pattern(this.numbersOnlyPattern)]],dataByteorder:[null,[]],dataBefore:[null,[J.pattern(Re),J.pattern(this.hexOnlyPattern)]],dataAfter:[null,[J.pattern(Re),J.pattern(this.hexOnlyPattern)]],dataInHEX:[null,[J.pattern(Re),J.pattern(this.hexOnlyPattern)]],dataExpression:[null,[J.pattern(Re)]]});break;case je.FTP:t=this.fb.group({methodFilter:[null,[J.required,J.pattern(Re)]],valueExpression:[null,[J.required,J.pattern(Re)]]});break;case je.OCPP:t=this.fb.group({methodRPC:[null,[J.required,J.pattern(Re)]],valueExpression:[null,[J.required,J.pattern(Re)]],withResponse:[!1,[]]});break;case je.SOCKET:t=this.fb.group({methodRPC:[null,[J.required,J.pattern(Re)]],methodProcessing:[null,[J.required]],encoding:[fn.UTF_8,[J.required,J.pattern(Re)]],withResponse:[!1,[]]});break;case je.XMPP:t=this.fb.group({methodRPC:[null,[J.required,J.pattern(Re)]],valueExpression:[null,[J.required,J.pattern(Re)]],withResponse:[!1,[]]});break;case je.SNMP:t=this.fb.group({requestFilter:[null,[J.required,J.pattern(Re)]],method:[null,[J.required]],withResponse:[!1,[]],oid:this.fb.array([],[J.required])});break;case je.REST:t=this.fb.group({methodFilter:[null,[J.required,J.pattern(Re)]],httpMethod:[null,[J.required]],requestUrlExpression:[null,[J.required,J.pattern(this.urlPattern)]],responseTimeout:[null,[J.required,J.min(10),J.pattern(this.numbersOnlyPattern)]],timeout:[null,[J.required,J.min(10),J.pattern(this.numbersOnlyPattern)]],tries:[null,[J.required,J.min(1),J.pattern(this.numbersOnlyPattern)]],valueExpression:[null,[J.required,J.pattern(Re)]],httpHeaders:this.fb.array([]),security:[{},[J.required]]});break;case je.REQUEST:t=this.fb.group({methodFilter:[null,[J.required,J.pattern(Re)]],httpMethod:[null,[J.required]],requestUrlExpression:[null,[J.required,J.pattern(this.urlPattern)]],responseTimeout:[null,[J.required,J.min(10),J.pattern(this.numbersOnlyPattern)]],timeout:[null,[J.required,J.min(10),J.pattern(this.numbersOnlyPattern)]],tries:[null,[J.required,J.min(1),J.pattern(this.numbersOnlyPattern)]],requestValueExpression:[null,[J.required,J.pattern(Re)]],responseValueExpression:[null,[J.pattern(Re)]],httpHeaders:this.fb.array([])});break;default:t=this.fb.group({command:[null,[J.required,J.pattern(Re)]],params:[{},[Ve]]})}return t}addSNMPoid(e=null){const t=this.commandForm.get("oid");t&&t.push(this.fb.control(e,[J.required,J.pattern(Re)]),{emitEvent:!1})}removeSNMPoid(e){this.commandForm.get("oid").removeAt(e)}addHTTPHeader(e={headerName:null,value:null}){const t=this.commandForm.get("httpHeaders"),n=this.fb.group({headerName:[e.headerName,[J.required,J.pattern(Re)]],value:[e.value,[J.required,J.pattern(Re)]]});t&&t.push(n,{emitEvent:!1})}removeHTTPHeader(e){this.commandForm.get("httpHeaders").removeAt(e)}getFormArrayControls(e){return this.commandForm.get(e).controls}openEditJSONDialog(e){e&&e.stopPropagation(),this.dialog.open(Fe,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{jsonValue:this.commandForm.get("params").value,required:!0}}).afterClosed().subscribe((e=>{e&&this.commandForm.get("params").setValue(e)}))}save(){this.saveTemplate.emit()}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}clearFromArrayByName(e){const t=this.commandForm.get(e);for(;0!==t.length;)t.removeAt(0)}writeValue(e){if("object"==typeof e){switch(e=N(e),this.connectorType){case je.SNMP:this.clearFromArrayByName("oid"),e.oid.forEach((e=>{this.addSNMPoid(e)})),delete e.oid;break;case je.REQUEST:case je.REST:this.clearFromArrayByName("httpHeaders"),e.httpHeaders&&Object.entries(e.httpHeaders).forEach((e=>{this.addHTTPHeader({headerName:e[0],value:e[1]})})),delete e.httpHeaders}this.commandForm.patchValue(e,{onlySelf:!1})}}observeFormChanges(){this.commandForm.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.connectorType!==je.REST&&this.connectorType!==je.REQUEST||(e.httpHeaders=e.httpHeaders.reduce(((e,t)=>(e[t.headerName]=t.value,e)),{})),this.commandForm.valid&&this.propagateChange({...this.commandForm.value,...e})}))}static{this.ɵfac=function(e){return new(e||Hr)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(ne.MatDialog))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Hr,selectors:[["tb-gateway-service-rpc-connector"]],inputs:{connectorType:"connectorType"},outputs:{sendCommand:"sendCommand",saveTemplate:"saveTemplate"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Hr)),multi:!0}]),t.ɵɵStandaloneFeature],decls:12,vars:16,consts:[[1,"command-form","flex","flex-col",3,"formGroup"],[1,"mat-subtitle-1","title"],[3,"ngIf"],[1,"template-actions","flex","flex-row","justify-end","gap-2.5"],["mat-raised-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click","disabled"],[3,"ngSwitch"],[3,"ngSwitchCase"],["ngSwitchDefault",""],["matInput","","formControlName","method","placeholder","set_state"],[1,"mat-block"],["formControlName","requestType"],[3,"value",4,"ngFor","ngForOf"],["matInput","","formControlName","requestTimeout","type","number","min","10","step","1","placeholder","1000"],[1,"flex","flex-1","flex-row","gap-2.5"],[1,"flex-1"],["formControlName","objectType"],["matInput","","formControlName","identifier","type","number","min","1","step","1","placeholder","1"],["matInput","","formControlName","propertyId","placeholder","presentValue"],[3,"value"],["matInput","","formControlName","methodRPC","placeholder","rpcMethod1"],["matInput","","formControlName","characteristicUUID","placeholder","00002A00-0000-1000-8000-00805F9B34FB"],["formControlName","methodProcessing"],["formControlName","withResponse",1,"mat-slide"],["matInput","","formControlName","method","placeholder","sendSameData"],["matInput","","formControlName","nodeID","type","number","placeholder","4","min","0","step","1"],["formControlName","isExtendedID",1,"mat-slide","margin"],["formControlName","isFD",1,"mat-slide","margin"],["formControlName","bitrateSwitch",1,"mat-slide","margin"],["matInput","","formControlName","dataLength","type","number","placeholder","2","min","1","step","1"],["formControlName","dataByteorder"],["matInput","","formControlName","dataBefore","placeholder","00AA"],["matInput","","formControlName","dataAfter","placeholder","0102"],["matInput","","formControlName","dataInHEX","placeholder","aa bb cc dd ee ff aa bb aa bb cc d ee ff"],["matInput","","formControlName","dataExpression","placeholder","userSpeed if maxAllowedSpeed > userSpeed else maxAllowedSpeed"],["matInput","","formControlName","methodFilter","placeholder","read"],["matInput","","formControlName","valueExpression","placeholder","${params}"],["matInput","","formControlName","methodRPC","placeholder","rpc1"],["formControlName","withResponse",1,"mat-slide","margin"],["matInput","","formControlName","encoding",3,"placeholder"],["matInput","","formControlName","requestFilter","placeholder","setData"],["formControlName","method"],["formArrayName","oid",1,"fields","border","flex","flex-col","gap-2.5"],[1,"fields-label"],["class","flex flex-1 flex-row justify-center items-center gap-2.5",4,"ngFor","ngForOf"],["mat-raised-button","",1,"self-start",3,"click"],[1,"flex","flex-1","flex-row","justify-center","items-center","gap-2.5"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","flex-1"],["matInput","","required","",3,"formControl"],[1,"flex-[1_1_30px]",2,"cursor","pointer","max-width","30px","min-width","30px",3,"click","matTooltip"],["matInput","","formControlName","methodFilter","placeholder","post_attributes"],[1,"flex-[1_1_33%]","max-w-4/12"],["formControlName","httpMethod"],["matInput","","formControlName","requestUrlExpression","placeholder","http://127.0.0.1:5000/my_devices"],["matInput","","formControlName","responseTimeout","type","number","step","1","min","10","placeholder","10"],["matInput","","formControlName","timeout","type","number","step","1","min","10","placeholder","1000"],["matInput","","formControlName","tries","type","number","step","1","min","1","placeholder","3"],["formArrayName","httpHeaders",1,"fields","border","flex","flex-col","gap-2.5"],["class","border flex flex-col gap-2.5",4,"ngIf"],[1,"border","flex","flex-col","gap-2.5"],[1,"flex","flex-row","justify-center","items-center","gap-2.5"],[1,"title","flex-1"],[2,"width","30px"],["class","flex flex-row justify-center items-center gap-2.5",4,"ngFor","ngForOf"],[3,"formGroupName"],["appearance","outline",1,"flex-1"],["matInput","","formControlName","headerName"],["matInput","","formControlName","value","placeholder","application/json"],[2,"cursor","pointer","width","30px",3,"click","matTooltip"],["matInput","","formControlName","methodFilter","placeholder","echo"],["matInput","","formControlName","timeout","type","number","step","1","min","10","placeholder","10"],["matInput","","formControlName","tries","type","number","step","1","min","1","placeholder","1"],["matInput","","formControlName","requestValueExpression","placeholder","${params}"],["matInput","","formControlName","responseValueExpression","placeholder","${temp}"],["matInput","","formControlName","headerName",3,"placeholder"],["matInput","","formControlName","value"],["matInput","","formControlName","command"],["matInput","","formControlName","params","type","JSON","tb-json-to-string",""],["aria-hidden","false","aria-label","help-icon","matIconSuffix","",1,"material-icons-outlined",2,"cursor","pointer",3,"click","matTooltip"],[4,"ngIf"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Kr,12,11,"ng-template",2),t.ɵɵelementStart(5,"div",3)(6,"button",4),t.ɵɵlistener("click",(function(){return n.save()})),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"button",5),t.ɵɵlistener("click",(function(){return n.sendCommand.emit()})),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.commandForm),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind2(3,7,"gateway.rpc.title",t.ɵɵpureFunction1(14,xr,n.gatewayConnectorDefaultTypesTranslates.get(n.connectorType)))),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.connectorType),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.commandForm.invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(8,10,"gateway.rpc-command-save-template")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.commandForm.invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(11,12,"gateway.rpc-command-send")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Hr,[B,g,Kn]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;padding:0}[_nghost-%COMP%] .title[_ngcontent-%COMP%]{font-weight:500}[_nghost-%COMP%] .command-form[_ngcontent-%COMP%]{flex-wrap:nowrap}[_nghost-%COMP%] .command-form[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{margin-top:10px}[_nghost-%COMP%] .mat-mdc-slide-toggle.margin[_ngcontent-%COMP%]{margin-bottom:10px;margin-left:10px}[_nghost-%COMP%] .fields[_ngcontent-%COMP%] .fields-label[_ngcontent-%COMP%]{font-weight:500}[_nghost-%COMP%] .border[_ngcontent-%COMP%]{padding:16px;margin-bottom:10px;box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f;border:solid 1px #e0e0e0;border-radius:4px}[_nghost-%COMP%] .border[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{color:#0000008a}[_nghost-%COMP%] .border[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{color:#00000061}[_nghost-%COMP%] .border[_ngcontent-%COMP%] .mat-divider[_ngcontent-%COMP%]{margin-left:-16px;margin-right:-16px;margin-bottom:16px}']})}}function Qr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",11),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Wr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",11),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,2,a.ModbusFunctionCodeTranslationsMap.get(e)))}}function Jr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",12),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.address-required"))}function Yr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",12),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function Xr(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",13)(1,"mat-form-field",3)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",14),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Yr,3,3,"mat-icon",8),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.rpc.value")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.rpcParametersFormGroup.get("value").hasError("required")&&e.rpcParametersFormGroup.get("value").touched)}}class Zr{constructor(e){this.fb=e,this.ModbusEditableDataTypes=Ct,this.ModbusFunctionCodeTranslationsMap=Tt,this.modbusDataTypes=Object.values(xt),this.writeFunctionCodes=[5,6,15,16],this.defaultFunctionCodes=[3,4,6,16],this.readFunctionCodes=[1,2,3,4],this.bitsFunctionCodes=[...this.readFunctionCodes,...this.writeFunctionCodes],this.destroy$=new ie,this.rpcParametersFormGroup=this.fb.group({type:[xt.BYTES,[J.required]],functionCode:[this.defaultFunctionCodes[0],[J.required]],value:[{value:"",disabled:!0},[J.required,J.pattern(Re)]],address:[null,[J.required]],objectsCount:[1,[J.required]]}),this.updateFunctionCodes(this.rpcParametersFormGroup.get("type").value),this.observeValueChanges(),this.observeKeyDataType(),this.observeFunctionCode()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}validate(){return this.rpcParametersFormGroup.valid?null:{rpcParametersFormGroup:{valid:!1}}}writeValue(e){this.rpcParametersFormGroup.patchValue(e,{emitEvent:!1})}observeValueChanges(){this.rpcParametersFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}observeKeyDataType(){this.rpcParametersFormGroup.get("type").valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.ModbusEditableDataTypes.includes(e)||this.rpcParametersFormGroup.get("objectsCount").patchValue(wt[e],{emitEvent:!1}),this.updateFunctionCodes(e)}))}observeFunctionCode(){this.rpcParametersFormGroup.get("functionCode").valueChanges.pipe(de(this.destroy$)).subscribe((e=>this.updateValueEnabling(e)))}updateValueEnabling(e){this.writeFunctionCodes.includes(e)?this.rpcParametersFormGroup.get("value").enable({emitEvent:!1}):(this.rpcParametersFormGroup.get("value").setValue(null),this.rpcParametersFormGroup.get("value").disable({emitEvent:!1}))}updateFunctionCodes(e){this.functionCodes=e===xt.BITS?this.bitsFunctionCodes:this.defaultFunctionCodes,this.functionCodes.includes(this.rpcParametersFormGroup.get("functionCode").value)||this.rpcParametersFormGroup.get("functionCode").patchValue(this.functionCodes[0],{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||Zr)(t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Zr,selectors:[["tb-gateway-modbus-rpc-parameters"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Zr)),multi:!0},{provide:X,useExisting:i((()=>Zr)),multi:!0}]),t.ɵɵStandaloneFeature],decls:35,vars:30,consts:[[3,"formGroup"],[1,"tb-form-hint","tb-primary-fill","no-padding-top","hint-container"],[1,"flex","flex-row","flex-1","gap-2.5"],[1,"flex-1"],["formControlName","type"],[3,"value",4,"ngFor","ngForOf"],["formControlName","functionCode"],["matInput","","type","number","min","0","max","50000","name","value","formControlName","address",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","type","number","min","1","max","50000","name","value","formControlName","objectsCount",3,"placeholder","readonly"],["class","flex",4,"ngIf"],[3,"value"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[1,"flex"],["matInput","","name","value","formControlName","value",3,"placeholder"]],template:function(e,n){1&e&&(t.ɵɵelementContainerStart(0,0),t.ɵɵelementStart(1,"div",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelement(4,"br"),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"div",2)(8,"mat-form-field",3)(9,"mat-label"),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-select",4),t.ɵɵtemplate(13,Qr,2,2,"mat-option",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"mat-form-field",3)(15,"mat-label"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"mat-select",6),t.ɵɵtemplate(19,Wr,3,4,"mat-option",5),t.ɵɵelementEnd()()(),t.ɵɵelementStart(20,"div",2)(21,"mat-form-field",3)(22,"mat-label"),t.ɵɵtext(23),t.ɵɵpipe(24,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(25,"input",7),t.ɵɵpipe(26,"translate"),t.ɵɵtemplate(27,Jr,3,3,"mat-icon",8),t.ɵɵelementEnd(),t.ɵɵelementStart(28,"mat-form-field",3)(29,"mat-label"),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(32,"input",9),t.ɵɵpipe(33,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(34,Xr,8,7,"div",10),t.ɵɵelementContainerEnd()),2&e&&(t.ɵɵproperty("formGroup",n.rpcParametersFormGroup),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,14,"gateway.rpc.hint.modbus-response-reading"),""),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,16,"gateway.rpc.hint.modbus-writing-functions")," "),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(11,18,"gateway.rpc.type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.modbusDataTypes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(17,20,"gateway.rpc.functionCode")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.functionCodes),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(24,22,"gateway.rpc.address")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(26,24,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.rpcParametersFormGroup.get("address").hasError("required")&&n.rpcParametersFormGroup.get("address").touched),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(31,26,"gateway.rpc.objectsCount")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(33,28,"gateway.set")),t.ɵɵproperty("readonly",!n.ModbusEditableDataTypes.includes(n.rpcParametersFormGroup.get("type").value)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.writeFunctionCodes.includes(n.rpcParametersFormGroup.get("functionCode").value)))},dependencies:t.ɵɵgetComponentDepsFactory(Zr,[B,g]),styles:['@charset "UTF-8";[_nghost-%COMP%] .hint-container[_ngcontent-%COMP%]{margin-bottom:12px}'],changeDetection:o.OnPush})}}function ei(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",6),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.rpc.responseTopicExpression")))}function ti(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",7),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.rpc.responseTimeout")))}class ni{constructor(e){this.fb=e,this.onChange=e=>{},this.onTouched=()=>{},this.destroy$=new ie,this.rpcParametersFormGroup=this.fb.group({methodFilter:[null,[J.required,J.pattern(Re)]],requestTopicExpression:[null,[J.required,J.pattern(Re)]],responseTopicExpression:[{value:null,disabled:!0},[J.required,J.pattern(Re)]],responseTimeout:[{value:null,disabled:!0},[J.min(10),J.pattern(_e)]],valueExpression:[null,[J.required,J.pattern(Re)]],withResponse:[!1,[]]}),this.observeValueChanges(),this.observeWithResponse()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}validate(){return this.rpcParametersFormGroup.valid?null:{rpcParametersFormGroup:{valid:!1}}}writeValue(e){this.rpcParametersFormGroup.patchValue(e,{emitEvent:!1}),this.toggleResponseFields(e.withResponse)}observeValueChanges(){this.rpcParametersFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}observeWithResponse(){this.rpcParametersFormGroup.get("withResponse").valueChanges.pipe(ue((e=>this.toggleResponseFields(e))),de(this.destroy$)).subscribe()}toggleResponseFields(e){const t=this.rpcParametersFormGroup.get("responseTopicExpression"),n=this.rpcParametersFormGroup.get("responseTimeout");e?(t.enable(),n.enable()):(t.disable(),n.disable())}static{this.ɵfac=function(e){return new(e||ni)(t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ni,selectors:[["tb-gateway-mqtt-rpc-parameters"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>ni)),multi:!0},{provide:X,useExisting:i((()=>ni)),multi:!0}]),t.ɵɵStandaloneFeature],decls:21,vars:15,consts:[[3,"formGroup"],["matInput","","formControlName","methodFilter","placeholder","echo"],["matInput","","formControlName","requestTopicExpression","placeholder","sensor/${deviceName}/request/${methodName}/${requestId}"],["formControlName","withResponse",1,"margin",3,"click"],[4,"ngIf"],["matInput","","formControlName","valueExpression","placeholder","${params}"],["matInput","","formControlName","responseTopicExpression","placeholder","sensor/${deviceName}/response/${methodName}/${requestId}"],["matInput","","formControlName","responseTimeout","type","number","placeholder","10000","min","10","step","1"]],template:function(e,n){if(1&e&&(t.ɵɵelementContainerStart(0,0),t.ɵɵelementStart(1,"mat-form-field")(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",1),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-form-field")(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",2),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-slide-toggle",3),t.ɵɵlistener("click",(function(e){return e.stopPropagation()})),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(14,ei,5,3,"mat-form-field",4)(15,ti,5,3,"mat-form-field",4),t.ɵɵelementStart(16,"mat-form-field")(17,"mat-label"),t.ɵɵtext(18),t.ɵɵpipe(19,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(20,"input",5),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd()),2&e){let e,a;t.ɵɵproperty("formGroup",n.rpcParametersFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,7,"gateway.rpc.method-name")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,9,"gateway.rpc.requestTopicExpression")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(13,11,"gateway.rpc.withResponse")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",null==(e=n.rpcParametersFormGroup.get("withResponse"))?null:e.value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",null==(a=n.rpcParametersFormGroup.get("withResponse"))?null:a.value),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(19,13,"gateway.rpc.valueExpression"))}},dependencies:t.ɵɵgetComponentDepsFactory(ni,[B,g]),styles:['@charset "UTF-8";[_nghost-%COMP%]{display:flex;flex-direction:column}[_nghost-%COMP%] .mat-mdc-slide-toggle.margin[_ngcontent-%COMP%]{margin-bottom:10px;margin-left:10px}'],changeDetection:o.OnPush})}}function ai(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",26),t.ɵɵelement(1,"mat-icon",27),t.ɵɵelementStart(2,"span"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("svgIcon",a.valueTypes.get(e).icon),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,a.valueTypes.get(e).name))}}function ri(e,n){1&e&&(t.ɵɵelement(0,"input",28),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function ii(e,n){1&e&&(t.ɵɵelement(0,"input",29),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function oi(e,n){1&e&&(t.ɵɵelement(0,"input",30),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function si(e,n){1&e&&(t.ɵɵelementStart(0,"mat-select",31)(1,"mat-option",26),t.ɵɵtext(2,"true"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-option",26),t.ɵɵtext(4,"false"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(),t.ɵɵproperty("value",!0),t.ɵɵadvance(2),t.ɵɵproperty("value",!1))}function li(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",32),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function pi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",8)(1,"div",9)(2,"div",10),t.ɵɵtext(3,"gateway.type"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",11)(5,"mat-form-field",12)(6,"mat-select",13)(7,"mat-select-trigger")(8,"div",14),t.ɵɵelement(9,"mat-icon",15),t.ɵɵelementStart(10,"span"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(13,ai,5,5,"mat-option",16),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(14,"div",17)(15,"div",10),t.ɵɵtext(16,"gateway.value"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"mat-form-field",18),t.ɵɵelementContainerStart(18,19),t.ɵɵtemplate(19,ri,2,3,"input",20)(20,ii,2,3,"input",21)(21,oi,2,3,"input",22)(22,si,5,2,"mat-select",23),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(23,li,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵelementStart(24,"button",25),t.ɵɵpipe(25,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,a=t.ɵɵnextContext();return t.ɵɵresetView(a.removeArgument(n))})),t.ɵɵelementStart(26,"mat-icon"),t.ɵɵtext(27,"delete"),t.ɵɵelementEnd()()()}if(2&e){let e,a;const r=n.$implicit,i=t.ɵɵnextContext();t.ɵɵproperty("formGroup",r),t.ɵɵadvance(9),t.ɵɵproperty("svgIcon",null==(e=i.valueTypes.get(r.get("type").value))?null:e.icon),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(12,11,null==(a=i.valueTypes.get(r.get("type").value))?null:a.name)),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",i.valueTypeKeys),t.ɵɵadvance(5),t.ɵɵproperty("ngSwitch",r.get("type").value),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",i.MappingValueType.STRING),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",i.MappingValueType.INTEGER),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",i.MappingValueType.DOUBLE),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",i.MappingValueType.BOOLEAN),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.get(r.get("type").value).hasError("required")&&r.get(r.get("type").value).touched),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(25,13,"gateway.rpc.remove"))}}class ci{constructor(e,t){this.fb=e,this.cdr=t,this.valueTypeKeys=Object.values(St),this.MappingValueType=St,this.valueTypes=Et,this.onChange=e=>{},this.onTouched=()=>{},this.destroy$=new ie,this.rpcParametersFormGroup=this.fb.group({method:[null,[J.required,J.pattern(Re)]],arguments:this.fb.array([])}),this.observeValueChanges()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}validate(){return this.rpcParametersFormGroup.valid?null:{rpcParametersFormGroup:{valid:!1}}}writeValue(e){this.clearArguments(),e.arguments?.map((({type:e,value:t})=>({type:e,[e]:t}))).forEach((e=>this.addArgument(e))),this.cdr.markForCheck(),this.rpcParametersFormGroup.get("method").patchValue(e.method)}observeValueChanges(){this.rpcParametersFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{const t=e.arguments.map((({type:e,...t})=>({type:e,value:t[e]})));this.onChange({method:e.method,arguments:t}),this.onTouched()}))}removeArgument(e){this.rpcParametersFormGroup.get("arguments").removeAt(e)}addArgument(e={}){const t=this.fb.group({type:[e.type??St.STRING],string:[e.string??{value:"",disabled:!(V(e,{})||e.string)},[J.required,J.pattern(Re)]],integer:[{value:e.integer??0,disabled:!_(e.integer)},[J.required,J.pattern(_e)]],double:[{value:e.double??0,disabled:!_(e.double)},[J.required]],boolean:[{value:e.boolean??!1,disabled:!_(e.boolean)},[J.required]]});this.observeTypeChange(t),this.rpcParametersFormGroup.get("arguments").push(t,{emitEvent:!1})}clearArguments(){const e=this.rpcParametersFormGroup.get("arguments");for(;0!==e.length;)e.removeAt(0)}observeTypeChange(e){e.get("type").valueChanges.pipe(de(this.destroy$)).subscribe((t=>{e.disable({emitEvent:!1}),e.get("type").enable({emitEvent:!1}),e.get(t).enable({emitEvent:!1})}))}static{this.ɵfac=function(e){return new(e||ci)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ci,selectors:[["tb-gateway-opc-rpc-parameters"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>ci)),multi:!0},{provide:X,useExisting:i((()=>ci)),multi:!0}]),t.ɵɵStandaloneFeature],decls:18,vars:14,consts:[[3,"formGroup"],[1,"tb-form-hint","tb-primary-fill","tb-flex","no-padding-top","hint-container"],[1,"tb-flex"],["matInput","","formControlName","method","placeholder","multiply"],["formArrayName","arguments",1,"tb-form-panel","stroked","arguments-container"],[1,"fields-label"],["class","flex flex-1 justify-center items-center gap-2.5",3,"formGroup",4,"ngFor","ngForOf"],["mat-raised-button","",1,"self-start",3,"click"],[1,"flex","flex-1","justify-center","items-center","gap-2.5",3,"formGroup"],[1,"tb-form-row","column-xs","type-container","justify-between","items-center"],["translate","",1,"tb-required"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap","fill-width"],["formControlName","type"],[1,"tb-flex","align-center"],[1,"tb-mat-18",3,"svgIcon"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-row","column-xs","value-container","justify-between","item-center"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","flex","tb-suffix-absolute"],[3,"ngSwitch"],["matInput","","required","","formControlName","string",3,"placeholder",4,"ngSwitchCase"],["matInput","","required","","formControlName","integer","type","number",3,"placeholder",4,"ngSwitchCase"],["matInput","","required","","formControlName","double","type","number",3,"placeholder",4,"ngSwitchCase"],["formControlName","boolean",4,"ngSwitchCase"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["mat-icon-button","","matTooltipPosition","above",1,"tb-box-button",3,"click","matTooltip"],[3,"value"],[1,"tb-mat-20",3,"svgIcon"],["matInput","","required","","formControlName","string",3,"placeholder"],["matInput","","required","","formControlName","integer","type","number",3,"placeholder"],["matInput","","required","","formControlName","double","type","number",3,"placeholder"],["formControlName","boolean"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementContainerStart(0,0),t.ɵɵelementStart(1,"div",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",2)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",3),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"fieldset",4)(10,"strong")(11,"span",5),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(14,pi,28,15,"div",6),t.ɵɵelementStart(15,"button",7),t.ɵɵlistener("click",(function(){return n.addArgument()})),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementContainerEnd()),2&e&&(t.ɵɵproperty("formGroup",n.rpcParametersFormGroup),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,6,"gateway.rpc.hint.opc-method")," "),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,8,"gateway.rpc.method")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,10,"gateway.rpc.arguments")),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.rpcParametersFormGroup.get("arguments").controls),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(17,12,"gateway.rpc.add-argument")," "))},dependencies:t.ɵɵgetComponentDepsFactory(ci,[B,g]),styles:['@charset "UTF-8";[_nghost-%COMP%] .arguments-container[_ngcontent-%COMP%]{margin-bottom:10px}[_nghost-%COMP%] .type-container[_ngcontent-%COMP%]{width:40%}[_nghost-%COMP%] .value-container[_ngcontent-%COMP%]{width:50%}[_nghost-%COMP%] .hint-container[_ngcontent-%COMP%]{margin-bottom:12px}'],changeDetection:o.OnPush})}}const di=e=>({border:e}),mi=e=>({type:e});function ui(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",15),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function gi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.timeout-min")," "))}function hi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"mat-form-field")(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",9),t.ɵɵtemplate(6,ui,2,2,"mat-option",10),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",11)(8,"mat-label"),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",12),t.ɵɵtemplate(12,gi,3,3,"mat-error",13),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"button",14),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.sendCommand())})),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,6,"gateway.statistics.command")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.RPCCommands),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,8,"gateway.statistics.timeout")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.commandForm.get("time").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("disabled",e.commandForm.invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,10,"gateway.rpc-command-send")," ")}}function yi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-gateway-service-rpc-connector",17),t.ɵɵlistener("sendCommand",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.sendCommand())}))("saveTemplate",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.saveTemplate())})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("connectorType",e.connectorType)}}function fi(e,n){1&e&&t.ɵɵelement(0,"tb-gateway-modbus-rpc-parameters",24)}function vi(e,n){1&e&&t.ɵɵelement(0,"tb-gateway-mqtt-rpc-parameters",24)}function bi(e,n){1&e&&t.ɵɵelement(0,"tb-gateway-opc-rpc-parameters",24)}function xi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",18)(1,"div",19),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(4,20),t.ɵɵtemplate(5,fi,1,0,"tb-gateway-modbus-rpc-parameters",21)(6,vi,1,0,"tb-gateway-mqtt-rpc-parameters",21)(7,bi,1,0,"tb-gateway-opc-rpc-parameters",21),t.ɵɵelementContainerEnd(),t.ɵɵelementStart(8,"div",22)(9,"button",23),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.saveTemplate())})),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"button",14),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.sendCommand())})),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind2(3,9,"gateway.rpc.title",t.ɵɵpureFunction1(16,mi,e.gatewayConnectorDefaultTypesTranslates.get(e.connectorType)))),t.ɵɵadvance(2),t.ɵɵproperty("ngSwitch",e.connectorType),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.MODBUS),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.MQTT),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.OPCUA),t.ɵɵadvance(2),t.ɵɵproperty("disabled",e.commandForm.get("params").invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(11,12,"gateway.rpc-command-save-template")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",e.commandForm.get("params").invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(14,14,"gateway.rpc-command-send")," ")}}function Ci(e,n){if(1&e&&t.ɵɵtemplate(0,yi,1,1,"tb-gateway-service-rpc-connector",16)(1,xi,15,18,"ng-template",null,1,t.ɵɵtemplateRefExtractor),2&e){const e=t.ɵɵreference(2),n=t.ɵɵnextContext();t.ɵɵproperty("ngIf",!n.typesWithUpdatedParams.has(n.connectorType))("ngIfElse",e)}}function wi(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",25)(1,"mat-icon",26),t.ɵɵtext(2,"schedule"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"span"),t.ɵɵtext(4),t.ɵɵpipe(5,"date"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind2(5,1,e.resultTime,"yyyy/MM/dd HH:mm:ss"))}}function Si(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-gateway-service-rpc-connector-templates",27),t.ɵɵlistener("useTemplate",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.useTemplate(n))})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("rpcTemplates",e.templates)("ctx",e.ctx)("connectorType",e.connectorType)}}class Ei{constructor(e,t,n,a,r){this.fb=e,this.dialog=t,this.utils=n,this.cd=a,this.attributeService=r,this.contentTypes=M,this.RPCCommands=["Ping","Stats","Devices","Update","Version","Restart","Reboot"],this.templates=[],this.ConnectorType=je,this.gatewayConnectorDefaultTypesTranslates=Le,this.typesWithUpdatedParams=new Set([je.MQTT,je.OPCUA,je.MODBUS]),this.subscriptionOptions={callbacks:{onDataUpdated:()=>this.ctx.ngZone.run((()=>{this.updateTemplates()})),onDataUpdateError:(e,t)=>this.ctx.ngZone.run((()=>{this.onDataUpdateError(t)})),dataLoading:()=>{}}},this.commandForm=this.fb.group({command:[null,[J.required]],time:[60,[J.required,J.min(1)]],params:["{}",[Ve]],result:[null]})}ngOnInit(){if(this.isConnector=this.ctx.settings.isConnector,this.isConnector){this.connectorType=this.ctx.stateController.getStateParams().connector_rpc.value.type;const e=[{type:v.entity,entityType:b.DEVICE,entityId:this.ctx.defaultSubscription.targetDeviceId,entityName:"Connector",attributes:[{name:`${this.connectorType}_template`}]}];this.ctx.subscriptionApi.createSubscriptionFromInfo(x.latest,e,this.subscriptionOptions,!1,!0).subscribe((e=>{this.subscription=e}))}else this.commandForm.get("command").setValue(this.RPCCommands[0])}sendCommand(e){this.resultTime=null;const t=e||this.commandForm.value,n=this.isConnector?`${this.connectorType}_`:"gateway_",a=this.isConnector?this.getCommandFromParamsByType(t.params):t.command.toLowerCase(),r=t.params;this.ctx.controlApi.sendTwoWayCommand(n+a,r,t.time).subscribe({next:e=>{this.resultTime=(new Date).getTime(),this.commandForm.get("result").setValue(JSON.stringify(e))},error:e=>{this.resultTime=(new Date).getTime(),console.error(e),this.commandForm.get("result").setValue(JSON.stringify(e.error))}})}getCommandFromParamsByType(e){switch(this.connectorType){case je.MQTT:case je.FTP:case je.SNMP:case je.REST:case je.REQUEST:return e.methodFilter;case je.MODBUS:return e.tag;case je.BACNET:case je.CAN:case je.OPCUA:return e.method;case je.BLE:case je.OCPP:case je.SOCKET:case je.XMPP:return e.methodRPC;default:return e.command}}saveTemplate(){this.dialog.open(jn,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{config:this.commandForm.value.params,templates:this.templates}}).afterClosed().subscribe((e=>{if(e){const t={name:e,config:this.commandForm.value.params},n=this.templates,a=n.findIndex((e=>e.name==t.name));a>-1&&n.splice(a,1),n.push(t);const r=`${this.connectorType}_template`;this.attributeService.saveEntityAttributes({id:this.ctx.defaultSubscription.targetDeviceId,entityType:b.DEVICE},f.SERVER_SCOPE,[{key:r,value:n}]).subscribe((()=>{this.cd.detectChanges()}))}}))}useTemplate(e){this.commandForm.get("params").patchValue(e.config)}updateTemplates(){this.templates=this.subscription.data[0].data[0][1].length?JSON.parse(this.subscription.data[0].data[0][1]):[],this.cd.detectChanges()}onDataUpdateError(e){const t=this.utils.parseException(e);let n=t.name;t.message&&(n+=": "+t.message),console.error(n)}static{this.ɵfac=function(e){return new(e||Ei)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(ne.MatDialog),t.ɵɵdirectiveInject(R.UtilsService),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(R.AttributeService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ei,selectors:[["tb-gateway-service-rpc"]],inputs:{ctx:"ctx",dialogRef:"dialogRef"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:12,vars:14,consts:[["connectorForm",""],["updatedParameters",""],[1,"flex","flex-1","flex-col"],[1,"command-form","flex","flex-row","lt-sm:flex-col","gap-2.5",3,"formGroup"],[4,"ngIf","ngIfElse"],[1,"result-block",3,"formGroup"],["class","flex flex-1 flex-row justify-center items-center result-time",4,"ngIf"],["readonly","true","formControlName","result",3,"contentType"],["class","border",3,"rpcTemplates","ctx","connectorType","useTemplate",4,"ngIf"],["formControlName","command"],[3,"value",4,"ngFor","ngForOf"],[1,"flex-1"],["matInput","","formControlName","time","type","number","min","1"],[4,"ngIf"],["mat-raised-button","","color","primary",3,"click","disabled"],[3,"value"],["formControlName","params",3,"connectorType","sendCommand","saveTemplate",4,"ngIf","ngIfElse"],["formControlName","params",3,"sendCommand","saveTemplate","connectorType"],[1,"flex","flex-col","rpc-parameters"],[1,"mat-subtitle-1","tb-form-panel-title"],[3,"ngSwitch"],["formControlName","params",4,"ngSwitchCase"],[1,"flex","flex-1","fex-row","justify-end","items-center","template-actions","gap-2.5"],["mat-raised-button","",3,"click","disabled"],["formControlName","params"],[1,"flex","flex-1","flex-row","justify-center","items-center","result-time"],[1,"material-icons"],[1,"border",3,"useTemplate","rpcTemplates","ctx","connectorType"]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",2)(1,"div",3),t.ɵɵtemplate(2,hi,16,12,"ng-container",4)(3,Ci,3,2,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"section",5)(6,"span"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵtemplate(9,wi,6,4,"div",6),t.ɵɵelementEnd(),t.ɵɵelement(10,"tb-json-content",7),t.ɵɵelementEnd()(),t.ɵɵtemplate(11,Si,1,3,"tb-gateway-service-rpc-connector-templates",8)),2&e){const e=t.ɵɵreference(4);t.ɵɵclassMap(t.ɵɵpureFunction1(12,di,n.isConnector)),t.ɵɵadvance(),t.ɵɵproperty("formGroup",n.commandForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.isConnector)("ngIfElse",e),t.ɵɵadvance(3),t.ɵɵproperty("formGroup",n.commandForm),t.ɵɵadvance(2),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(8,10,"gateway.rpc-command-result")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.resultTime),t.ɵɵadvance(),t.ɵɵproperty("contentType",n.contentTypes.JSON),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.isConnector)}},dependencies:t.ɵɵgetComponentDepsFactory(Ei,[B,g,Hr,Zr,ni,ci,Vn]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;overflow:auto;display:flex;flex-direction:row;padding:0 5px}[_nghost-%COMP%] > *[_ngcontent-%COMP%]{height:100%;overflow:auto}[_nghost-%COMP%] > tb-gateway-service-rpc-connector-templates[_ngcontent-%COMP%]:last-child{margin-left:10px}[_nghost-%COMP%] tb-gateway-service-rpc-connector-templates[_ngcontent-%COMP%]{flex:1 1 30%;max-width:30%}[_nghost-%COMP%] .command-form[_ngcontent-%COMP%]{flex-wrap:nowrap;padding:0 5px 5px}[_nghost-%COMP%] .command-form[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{margin-top:10px}[_nghost-%COMP%] .rpc-parameters[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .result-block[_ngcontent-%COMP%]{padding:0 5px;display:flex;flex-direction:column;flex:1}[_nghost-%COMP%] .result-block[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{font-weight:600;position:relative;font-size:14px;margin-bottom:10px}[_nghost-%COMP%] .result-block[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] .result-time[_ngcontent-%COMP%]{font-weight:400;font-size:14px;line-height:32px;position:absolute;left:0;top:25px;z-index:5;color:#0000008a}[_nghost-%COMP%] .result-block[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] .result-time[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{padding-left:10px}[_nghost-%COMP%] .result-block[_ngcontent-%COMP%] tb-json-content[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] .border[_ngcontent-%COMP%]{padding:16px;box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f;border:solid 1px #e0e0e0;border-radius:4px}']})}}function Ti(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.configuration-delete-dialog-input-required")," "))}e("GatewayServiceRPCComponent",Ei);class Ii extends C{constructor(e,t,n,a,r){super(e,t,a),this.store=e,this.router=t,this.data=n,this.dialogRef=a,this.fb=r,this.gatewayName=this.data.gatewayName,this.gatewayControl=this.fb.control("")}close(){this.dialogRef.close()}turnOff(){this.dialogRef.close(!0)}static{this.ɵfac=function(e){return new(e||Ii)(t.ɵɵdirectiveInject(ae.Store),t.ɵɵdirectiveInject(re.Router),t.ɵɵdirectiveInject(te),t.ɵɵdirectiveInject(ne.MatDialogRef),t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ii,selectors:[["tb-gateway-remote-configuration-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:24,vars:14,consts:[["color","warn"],["translate",""],[1,"flex-1"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content","",1,"mat-content","flex-col",2,"max-width","600px"],[3,"innerHTML"],[1,"mat-block","tb-value-type",2,"flex-grow","0"],["matInput","","required","",3,"formControl"],[4,"ngIf"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","warn","type","button","cdkFocusInitial","",3,"click"],["mat-button","","color","warn","type","button",3,"click","disabled"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-toolbar",0)(1,"mat-icon"),t.ɵɵtext(2,"warning"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"h2",1),t.ɵɵtext(4,"gateway.configuration-delete-dialog-header"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",2),t.ɵɵelementStart(6,"button",3),t.ɵɵlistener("click",(function(){return n.close()})),t.ɵɵelementStart(7,"mat-icon",4),t.ɵɵtext(8,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(9,"div",5),t.ɵɵelement(10,"span",6),t.ɵɵpipe(11,"translate"),t.ɵɵelementStart(12,"mat-form-field",7)(13,"mat-label",1),t.ɵɵtext(14,"gateway.configuration-delete-dialog-input"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",8),t.ɵɵtemplate(16,Ti,3,3,"mat-error",9),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"div",10)(18,"button",11),t.ɵɵlistener("click",(function(){return n.close()})),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"button",12),t.ɵɵlistener("click",(function(){return n.turnOff()})),t.ɵɵtext(22),t.ɵɵpipe(23,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(10),t.ɵɵpropertyInterpolate2("innerHTML","",t.ɵɵpipeBind1(11,8,"gateway.configuration-delete-dialog-body")," ",n.gatewayName,"",t.ɵɵsanitizeHtml),t.ɵɵadvance(5),t.ɵɵproperty("formControl",n.gatewayControl),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayControl.hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(20,10,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.gatewayControl.value!==n.gatewayName),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(23,12,"gateway.configuration-delete-dialog-confirm")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Ii,[B,g]),encapsulation:2})}}var ki;e("GatewayRemoteConfigurationDialogComponent",Ii),function(e){e.tls="tls",e.accessToken="accessToken"}(ki||(ki={}));const Mi="configuration_drafts",Pi="RemoteLoggingLevel",Fi=new Map([[ki.tls,"gateway.security-types.tls"],[ki.accessToken,"gateway.security-types.access-token"]]);var Oi,qi;!function(e){e.none="NONE",e.critical="CRITICAL",e.error="ERROR",e.warning="WARNING",e.info="INFO",e.debug="DEBUG"}(Oi||(Oi={})),function(e){e.memory="memory",e.file="file"}(qi||(qi={}));const Bi=new Map([[qi.memory,"gateway.storage-types.memory-storage"],[qi.file,"gateway.storage-types.file-storage"]]);var Ni;!function(e){e.mqtt="MQTT",e.modbus="Modbus",e.opcua="OPC-UA",e.ble="BLE",e.request="Request",e.can="CAN",e.bacnet="BACnet",e.custom="Custom"}(Ni||(Ni={}));const Ri={config:{},name:"",configType:null,enabled:!1};function _i(e){return JSON.stringify(e.value)===JSON.stringify({})?{validJSON:!0}:null}function Di(e){return e.replace("_","").replace("-","").replace(/^\s+|\s+/g,"").toLowerCase()+".json"}function Vi(e,t){return'[loggers]}}keys=root, service, connector, converter, tb_connection, storage, extension}}[handlers]}}keys=consoleHandler, serviceHandler, connectorHandler, converterHandler, tb_connectionHandler, storageHandler, extensionHandler}}[formatters]}}keys=LogFormatter}}[logger_root]}}level=ERROR}}handlers=consoleHandler}}[logger_connector]}}level={ERROR}}}handlers=connectorHandler}}formatter=LogFormatter}}qualname=connector}}[logger_storage]}}level={ERROR}}}handlers=storageHandler}}formatter=LogFormatter}}qualname=storage}}[logger_tb_connection]}}level={ERROR}}}handlers=tb_connectionHandler}}formatter=LogFormatter}}qualname=tb_connection}}[logger_service]}}level={ERROR}}}handlers=serviceHandler}}formatter=LogFormatter}}qualname=service}}[logger_converter]}}level={ERROR}}}handlers=converterHandler}}formatter=LogFormatter}}qualname=converter}}[logger_extension]}}level={ERROR}}}handlers=connectorHandler}}formatter=LogFormatter}}qualname=extension}}[handler_consoleHandler]}}class=StreamHandler}}level={ERROR}}}formatter=LogFormatter}}args=(sys.stdout,)}}[handler_connectorHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}connector.log", "d", 1, 7,)}}[handler_storageHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}storage.log", "d", 1, 7,)}}[handler_serviceHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}service.log", "d", 1, 7,)}}[handler_converterHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}converter.log", "d", 1, 3,)}}[handler_extensionHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}extension.log", "d", 1, 3,)}}[handler_tb_connectionHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}tb_connection.log", "d", 1, 3,)}}[formatter_LogFormatter]}}format="%(asctime)s - %(levelname)s - [%(filename)s] - %(module)s - %(lineno)d - %(message)s" }}datefmt="%Y-%m-%d %H:%M:%S"'.replace(/{ERROR}/g,e).replace(/{.\/logs\/}/g,t)}function Ai(e){return{id:e,entityType:b.DEVICE}}function Gi(e){const t={};return Object.prototype.hasOwnProperty.call(e,"thingsboard")&&(t.host=e.thingsboard.host,t.port=e.thingsboard.port,t.remoteConfiguration=e.thingsboard.remoteConfiguration,Object.prototype.hasOwnProperty.call(e.thingsboard.security,ki.accessToken)?(t.securityType=ki.accessToken,t.accessToken=e.thingsboard.security.accessToken):(t.securityType=ki.tls,t.caCertPath=e.thingsboard.security.caCert,t.privateKeyPath=e.thingsboard.security.privateKey,t.certPath=e.thingsboard.security.cert)),Object.prototype.hasOwnProperty.call(e,"storage")&&Object.prototype.hasOwnProperty.call(e.storage,"type")&&(e.storage.type===qi.memory?(t.storageType=qi.memory,t.readRecordsCount=e.storage.read_records_count,t.maxRecordsCount=e.storage.max_records_count):e.storage.type===qi.file&&(t.storageType=qi.file,t.dataFolderPath=e.storage.data_folder_path,t.maxFilesCount=e.storage.max_file_count,t.readRecordsCount=e.storage.read_records_count,t.maxRecordsCount=e.storage.max_records_count)),t}function ji(e){const t={};for(const n of e)n.enabled||(t[n.name]={connector:n.configType,config:n.config});return t}function Li(e){const t={thingsboard:Ui(e)};return function(e,t){for(const n of t)if(n.enabled){const t=n.configType;Array.isArray(e[t])||(e[t]=[]);const a={name:n.name,config:n.config};e[t].push(a)}}(t,e.connectors),t}function Ui(e){let t;t=e.securityType===ki.accessToken?{accessToken:e.accessToken}:{caCert:e.caCertPath,privateKey:e.privateKeyPath,cert:e.certPath};const n={host:e.host,remoteConfiguration:e.remoteConfiguration,port:e.port,security:t};let a;a=e.storageType===qi.memory?{type:qi.memory,read_records_count:e.readRecordsCount,max_records_count:e.maxRecordsCount}:{type:qi.file,data_folder_path:e.dataFolderPath,max_file_count:e.maxFilesCount,max_read_records_count:e.readRecordsCount,max_records_per_file:e.maxRecordsCount};const r=[];for(const t of e.connectors)if(t.enabled){const e={configuration:Di(t.name),name:t.name,type:t.configType};r.push(e)}return{thingsboard:n,connectors:r,storage:a,logs:window.btoa(Vi(e.remoteLoggingLevel,e.remoteLoggingPathToLogs))}}const $i=["formContainer"],zi=(e,t,n)=>({"gap-1.25":e,"flex-row":t,"flex-col":n}),Ki=(e,t,n)=>({"gap-1.25":e,"flex-row justify-end item-center":t,"flex-col justify-evenly item-center":n});function Hi(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",28),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.key),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,e.value.toString())," ")}}function Qi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.thingsboard-host-required "),t.ɵɵelementEnd())}function Wi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.thingsboard-port-required "),t.ɵɵelementEnd())}function Ji(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.thingsboard-port-min "),t.ɵɵelementEnd())}function Yi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.thingsboard-port-max "),t.ɵɵelementEnd())}function Xi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.thingsboard-port-pattern "),t.ɵɵelementEnd())}function Zi(e,n){1&e&&(t.ɵɵelementStart(0,"div",16)(1,"mat-form-field")(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",30),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-form-field")(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",31),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field")(12,"mat-label"),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",32),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.tls-path-ca-certificate")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,5,"gateway.tls-path-private-key")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,7,"gateway.tls-path-client-certificate")))}function eo(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",28),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function to(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.path-logs-required "),t.ɵɵelementEnd())}function no(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",28),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.key),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,e.value.toString())," ")}}function ao(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-pack-size-required "),t.ɵɵelementEnd())}function ro(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-pack-size-min "),t.ɵɵelementEnd())}function io(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-pack-size-pattern "),t.ɵɵelementEnd())}function oo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-records-required "),t.ɵɵelementEnd())}function so(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-records-min "),t.ɵɵelementEnd())}function lo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-records-pattern "),t.ɵɵelementEnd())}function po(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-files-required "),t.ɵɵelementEnd())}function co(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-files-min "),t.ɵɵelementEnd())}function mo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-files-pattern "),t.ɵɵelementEnd())}function uo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-path-required "),t.ɵɵelementEnd())}function go(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",5)(1,"mat-form-field",8)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",33),t.ɵɵtemplate(6,po,2,0,"mat-error",10)(7,co,2,0,"mat-error",10)(8,mo,2,0,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",8)(10,"mat-label"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(13,"input",34),t.ɵɵtemplate(14,uo,2,0,"mat-error",10),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵclassMap(t.ɵɵpureFunction3(12,zi,e.layoutGap,e.alignment,!e.alignment)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,8,"gateway.storage-max-files")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.gatewayConfigurationGroup.get("maxFilesCount").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.gatewayConfigurationGroup.get("maxFilesCount").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.gatewayConfigurationGroup.get("maxFilesCount").hasError("pattern")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(12,10,"gateway.storage-path")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.gatewayConfigurationGroup.get("dataFolderPath").hasError("required"))}}function ho(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",28),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function yo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.connector-type-required "),t.ɵɵelementEnd())}function fo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.connector-name-required "),t.ɵɵelementEnd())}function vo(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section",35)(1,"div",36)(2,"div",37),t.ɵɵelement(3,"mat-slide-toggle",38),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",39)(5,"mat-form-field",8)(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-select",40),t.ɵɵlistener("selectionChange",(function(){const n=t.ɵɵrestoreView(e).$implicit,a=t.ɵɵnextContext();return t.ɵɵresetView(a.changeConnectorType(n))})),t.ɵɵtemplate(10,ho,2,2,"mat-option",7),t.ɵɵelementEnd(),t.ɵɵtemplate(11,yo,2,0,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",8)(13,"mat-label"),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"input",41),t.ɵɵlistener("blur",(function(){const n=t.ɵɵrestoreView(e),a=n.$implicit,r=n.index,i=t.ɵɵnextContext();return t.ɵɵresetView(i.changeConnectorName(a,r))})),t.ɵɵelementEnd(),t.ɵɵtemplate(17,fo,2,0,"mat-error",10),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",42)(19,"button",43),t.ɵɵpipe(20,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e),r=a.$implicit,i=a.index,o=t.ɵɵnextContext();return t.ɵɵresetView(o.openConfigDialog(n,i,r.get("config").value,r.get("name").value))})),t.ɵɵelementStart(21,"mat-icon"),t.ɵɵtext(22,"more_horiz"),t.ɵɵelementEnd()(),t.ɵɵelementStart(23,"button",43),t.ɵɵpipe(24,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,a=t.ɵɵnextContext();return t.ɵɵresetView(a.removeConnector(n))})),t.ɵɵelementStart(25,"mat-icon"),t.ɵɵtext(26,"close"),t.ɵɵelementEnd()()()()()}if(2&e){const e=n.$implicit,a=n.index,r=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("formGroupName",a),t.ɵɵadvance(3),t.ɵɵclassMap(t.ɵɵpureFunction3(24,zi,r.layoutGap,r.alignment,!r.alignment)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,16,"gateway.connector-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",r.connectorTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("configType").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,18,"gateway.connector-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.get("name").hasError("required")),t.ɵɵadvance(),t.ɵɵclassMap(t.ɵɵpureFunction3(28,Ki,r.layoutGap,r.alignment,!r.alignment)),t.ɵɵadvance(),t.ɵɵclassProp("mat-warn",e.get("config").invalid),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(20,20,"gateway.update-config")),t.ɵɵproperty("disabled",r.isReadOnlyForm),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(24,22,"gateway.delete")),t.ɵɵproperty("disabled",r.isReadOnlyForm)}}function bo(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",44),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.exportConfig())})),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,3,"gateway.download-tip")),t.ɵɵproperty("disabled",!e.gatewayConfigurationGroup.dirty||e.gatewayConfigurationGroup.invalid),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,5,"action.download")," ")}}function xo(e,n){if(1&e&&(t.ɵɵelementStart(0,"button",45),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,3,"gateway.save-tip")),t.ɵɵproperty("disabled",!e.gatewayConfigurationGroup.dirty||e.gatewayConfigurationGroup.invalid),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,5,"action.save")," ")}}class Co extends P{constructor(e,t,n,a,r,i,o,s,l,p,c){super(e),this.store=e,this.elementRef=t,this.utils=n,this.ngZone=a,this.fb=r,this.window=i,this.dialog=o,this.translate=s,this.deviceService=l,this.attributeService=p,this.importExport=c,this.alignment=!0,this.layoutGap=!0,this.securityTypes=Fi,this.gatewayLogLevels=Object.keys(Oi).map((e=>Oi[e])),this.connectorTypes=Object.keys(Ni),this.storageTypes=Bi,this.toastTargetId="gateway-configuration-widget"+this.utils.guid(),this.isReadOnlyForm=!1}get connectors(){return this.gatewayConfigurationGroup.get("connectors")}ngOnInit(){this.initWidgetSettings(this.ctx.settings),this.ctx.datasources&&this.ctx.datasources.length&&(this.deviceNameForm=this.ctx.datasources[0].name),this.buildForm(),this.ctx.updateWidgetParams(),this.formResize$=new ResizeObserver((()=>{this.resize()})),this.formResize$.observe(this.formContainerRef.nativeElement)}ngOnDestroy(){this.formResize$&&this.formResize$.disconnect(),this.subscribeGateway$.unsubscribe(),this.subscribeStorageType$.unsubscribe()}initWidgetSettings(e){let t;t=e.gatewayTitle&&e.gatewayTitle.length?this.utils.customTranslation(e.gatewayTitle,e.gatewayTitle):this.translate.instant("gateway.gateway"),this.ctx.widgetTitle=t,this.isReadOnlyForm=!!e.readOnly&&e.readOnly,this.archiveFileName=e.archiveFileName?.length?e.archiveFileName:"gatewayConfiguration",this.gatewayType=e.gatewayType?.length?e.gatewayType:"Gateway",this.gatewayNameExists=this.utils.customTranslation(e.gatewayNameExists,e.gatewayNameExists)||this.translate.instant("gateway.gateway-exists"),this.successfulSaved=this.utils.customTranslation(e.successfulSave,e.successfulSave)||this.translate.instant("gateway.gateway-saved"),this.updateWidgetDisplaying()}resize(){this.ngZone.run((()=>{this.updateWidgetDisplaying(),this.ctx.detectChanges()}))}updateWidgetDisplaying(){this.ctx.$container&&this.ctx.$container[0].offsetWidth<=425?(this.layoutGap=!1,this.alignment=!1):(this.layoutGap=!0,this.alignment=!0)}saveAttribute(e,t,n){const a=this.gatewayConfigurationGroup.get("gateway").value,r={key:e,value:t};return this.attributeService.saveEntityAttributes(Ai(a),n,[r])}createConnector(e=Ri){this.connectors.push(this.fb.group({enabled:[e.enabled],configType:[e.configType,[J.required]],name:[e.name,[J.required]],config:[e.config,[J.nullValidator,_i]]}))}getFormField(e){return this.gatewayConfigurationGroup.get(e)}buildForm(){this.gatewayConfigurationGroup=this.fb.group({gateway:[null,[]],accessToken:[null,[J.required]],securityType:[ki.accessToken],host:[this.window.location.hostname,[J.required]],port:[1883,[J.required,J.min(1),J.max(65535),J.pattern(/^-?[0-9]+$/)]],remoteConfiguration:[!0],caCertPath:["/etc/thingsboard-gateway/ca.pem"],privateKeyPath:["/etc/thingsboard-gateway/privateKey.pem"],certPath:["/etc/thingsboard-gateway/certificate.pem"],remoteLoggingLevel:[Oi.debug],remoteLoggingPathToLogs:["./logs/",[J.required]],storageType:[qi.memory],readRecordsCount:[100,[J.required,J.min(1),J.pattern(/^-?[0-9]+$/)]],maxRecordsCount:[1e4,[J.required,J.min(1),J.pattern(/^-?[0-9]+$/)]],maxFilesCount:[5,[J.required,J.min(1),J.pattern(/^-?[0-9]+$/)]],dataFolderPath:["./data/",[J.required]],connectors:this.fb.array([])}),this.isReadOnlyForm&&this.gatewayConfigurationGroup.disable({emitEvent:!1}),this.subscribeStorageType$=this.getFormField("storageType").valueChanges.subscribe((e=>{e===qi.memory?(this.getFormField("maxFilesCount").disable(),this.getFormField("dataFolderPath").disable()):(this.getFormField("maxFilesCount").enable(),this.getFormField("dataFolderPath").enable())})),this.subscribeGateway$=this.getFormField("gateway").valueChanges.subscribe((e=>{null!==e?ce([this.deviceService.getDeviceCredentials(e).pipe(ue((e=>{this.getFormField("accessToken").patchValue(e.credentialsId)}))),...this.getAttributes(e)]).subscribe((()=>{this.gatewayConfigurationGroup.markAsPristine(),this.ctx.detectChanges()})):this.getFormField("accessToken").patchValue("")}))}gatewayExist(){this.ctx.showErrorToast(this.gatewayNameExists,"top","left",this.toastTargetId)}exportConfig(){const e=this.gatewayConfigurationGroup.value,t={};var n,a,r;t["tb_gateway.yaml"]=function(e){let t;t="thingsboard:\n",t+=" host: "+e.host+"\n",t+=" remoteConfiguration: "+e.remoteConfiguration+"\n",t+=" port: "+e.port+"\n",t+=" security:\n",e.securityType===ki.accessToken?t+=" access-token: "+e.accessToken+"\n":(t+=" ca_cert: "+e.caCertPath+"\n",t+=" privateKey: "+e.privateKeyPath+"\n",t+=" cert: "+e.certPath+"\n"),t+="storage:\n",e.storageType===qi.memory?(t+=" type: memory\n",t+=" read_records_count: "+e.readRecordsCount+"\n",t+=" max_records_count: "+e.maxRecordsCount+"\n"):(t+=" type: file\n",t+=" data_folder_path: "+e.dataFolderPath+"\n",t+=" max_file_count: "+e.maxFilesCount+"\n",t+=" max_read_records_count: "+e.readRecordsCount+"\n",t+=" max_records_per_file: "+e.maxRecordsCount+"\n"),t+="connectors:\n";for(const n of e.connectors)n.enabled&&(t+=" -\n",t+=" name: "+n.name+"\n",t+=" type: "+n.configType+"\n",t+=" configuration: "+Di(n.name)+"\n");return t}(e),function(e,t){for(const n of t)n.enabled&&(e[Di(n.name)]=JSON.stringify(n.config))}(t,e.connectors),n=t,a=e.remoteLoggingLevel,r=e.remoteLoggingPathToLogs,n["logs.conf"]=Vi(a,r),this.importExport.exportJSZip(t,this.archiveFileName),this.saveAttribute(Pi,this.gatewayConfigurationGroup.value.remoteLoggingLevel.toUpperCase(),f.SHARED_SCOPE)}addNewConnector(){this.createConnector()}removeConnector(e){e>-1&&(this.connectors.removeAt(e),this.connectors.markAsDirty())}openConfigDialog(e,t,n,a){e&&(e.stopPropagation(),e.preventDefault()),this.dialog.open(Fe,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{jsonValue:n,required:!0,title:this.translate.instant("gateway.title-connectors-json",{typeName:a})}}).afterClosed().subscribe((e=>{e&&(this.connectors.at(t).get("config").patchValue(e),this.ctx.detectChanges())}))}createConnectorName(e,t,n=0){const a=n?t+n:t;return-1===e.findIndex((e=>e.name===a))?a:this.createConnectorName(e,t,++n)}validateConnectorName(e,t,n,a=0){for(let r=0;r{this.ctx.showSuccessToast(this.successfulSaved,2e3,"top","left",this.toastTargetId),this.gatewayConfigurationGroup.markAsPristine()}))}getAttributes(e){const t=[];return t.push(ce([this.getAttribute("current_configuration",f.CLIENT_SCOPE,e),this.getAttribute(Mi,f.SERVER_SCOPE,e)]).pipe(ue((([e,t])=>{this.setFormGatewaySettings(e),this.setFormConnectorsDraft(t),this.isReadOnlyForm&&this.gatewayConfigurationGroup.disable({emitEvent:!1})})))),t.push(this.getAttribute(Pi,f.SHARED_SCOPE,e).pipe(ue((e=>this.processLoggingLevel(e))))),t}getAttribute(e,t,n){return this.attributeService.getEntityAttributes(Ai(n),t,[e])}setFormGatewaySettings(e){if(this.connectors.clear(),e.length>0){const t=JSON.parse(window.atob(e[0].value));for(const e of Object.keys(t)){const n=t[e];if("thingsboard"===e)null!==n&&Object.keys(n).length>0&&this.gatewayConfigurationGroup.patchValue(Gi(n));else for(const t of Object.keys(n)){let a="No name";Object.prototype.hasOwnProperty.call(n[t],"name")&&(a=n[t].name);const r={enabled:!0,configType:e,config:n[t].config,name:a};this.createConnector(r)}}}}setFormConnectorsDraft(e){if(e.length>0){const t=JSON.parse(window.atob(e[0].value));for(const e of Object.keys(t)){const n={enabled:!1,configType:t[e].connector,config:t[e].config,name:e};this.createConnector(n)}}}processLoggingLevel(e){let t=Oi.debug;e.length>0&&Oi[e[0].value.toLowerCase()]&&(t=Oi[e[0].value.toLowerCase()]),this.getFormField("remoteLoggingLevel").patchValue(t)}static{this.ɵfac=function(e){return new(e||Co)(t.ɵɵdirectiveInject(ae.Store),t.ɵɵdirectiveInject(t.ElementRef),t.ɵɵdirectiveInject(R.UtilsService),t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(W.UntypedFormBuilder),t.ɵɵdirectiveInject(A),t.ɵɵdirectiveInject(ne.MatDialog),t.ɵɵdirectiveInject(ke.TranslateService),t.ɵɵdirectiveInject(R.DeviceService),t.ɵɵdirectiveInject(R.AttributeService),t.ɵɵdirectiveInject(Oe.ImportExportService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Co,selectors:[["tb-gateway-form"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery($i,7),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.formContainerRef=e.first)}},inputs:{ctx:"ctx",isStateForm:"isStateForm"},standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:104,vars:104,consts:[["formContainer",""],["tb-toast","",1,"gateway-form",3,"ngSubmit","formGroup","toastTarget"],["multi","true",1,"mat-body-2"],[1,"tb-panel-title"],["formControlName","gateway","required","",3,"gatewayNameExist","deviceName","isStateForm","newGatewayType"],[1,"flex"],["formControlName","securityType"],[3,"value",4,"ngFor","ngForOf"],[1,"flex-1"],["matInput","","type","text","formControlName","host"],["translate","",4,"ngIf"],["matInput","","type","number","formControlName","port"],["class","flex flex-col",4,"ngIf"],["formControlName","remoteConfiguration"],["formControlName","remoteLoggingLevel"],["matInput","","type","text","formControlName","remoteLoggingPathToLogs"],[1,"flex","flex-col"],["formControlName","storageType"],["matInput","","type","number","formControlName","readRecordsCount"],["matInput","","type","number","formControlName","maxRecordsCount"],["class","flex",3,"class",4,"ngIf"],[1,"flex","flex-col","gateway-config"],["formArrayName","connectors",4,"ngFor","ngForOf"],[1,"no-data-found","justify-center","items-center"],["mat-raised-button","","type","button","matTooltipPosition","above",3,"click","matTooltip"],[1,"flex","flex-row","justify-end","items-center","form-action-buttons"],["mat-raised-button","","color","primary","type","button",3,"disabled","matTooltip","click",4,"ngIf"],["mat-raised-button","","color","primary","type","submit",3,"disabled","matTooltip",4,"ngIf"],[3,"value"],["translate",""],["matInput","","type","text","formControlName","caCertPath"],["matInput","","type","text","formControlName","privateKeyPath"],["matInput","","type","text","formControlName","certPath"],["matInput","","type","number","formControlName","maxFilesCount"],["matInput","","type","text","formControlName","dataFolderPath"],["formArrayName","connectors"],[1,"flex","flex-row","justify-between","items-stretch","gap-2",3,"formGroupName"],[1,"flex","flex-col","justify-center"],["formControlName","enabled"],[1,"flex","flex-full"],["formControlName","configType",3,"selectionChange"],["matInput","","type","text","formControlName","name",3,"blur"],[1,"flex","action-buttons"],["mat-icon-button","","matTooltipPosition","above",3,"click","disabled","matTooltip"],["mat-raised-button","","color","primary","type","button",3,"click","disabled","matTooltip"],["mat-raised-button","","color","primary","type","submit",3,"disabled","matTooltip"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"form",1,0),t.ɵɵlistener("ngSubmit",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.save())})),t.ɵɵelementStart(2,"mat-accordion",2)(3,"mat-expansion-panel")(4,"mat-expansion-panel-header")(5,"mat-panel-title")(6,"div",3),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"uppercase"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"tb-entity-gateway-select",4),t.ɵɵlistener("gatewayNameExist",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.gatewayExist())})),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field",5)(12,"mat-label"),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"mat-select",6),t.ɵɵtemplate(16,Hi,3,4,"mat-option",7),t.ɵɵpipe(17,"keyvalue"),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",5)(19,"mat-form-field",8)(20,"mat-label"),t.ɵɵtext(21),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(23,"input",9),t.ɵɵtemplate(24,Qi,2,0,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-form-field",8)(26,"mat-label"),t.ɵɵtext(27),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(29,"input",11),t.ɵɵtemplate(30,Wi,2,0,"mat-error",10)(31,Ji,2,0,"mat-error",10)(32,Yi,2,0,"mat-error",10)(33,Xi,2,0,"mat-error",10),t.ɵɵelementEnd()(),t.ɵɵtemplate(34,Zi,16,9,"div",12),t.ɵɵelementStart(35,"mat-checkbox",13),t.ɵɵtext(36),t.ɵɵpipe(37,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"div",5)(39,"mat-form-field",8)(40,"mat-label"),t.ɵɵtext(41),t.ɵɵpipe(42,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(43,"mat-select",14),t.ɵɵtemplate(44,eo,2,2,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelementStart(45,"mat-form-field",8)(46,"mat-label"),t.ɵɵtext(47),t.ɵɵpipe(48,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(49,"input",15),t.ɵɵtemplate(50,to,2,0,"mat-error",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(51,"mat-expansion-panel")(52,"mat-expansion-panel-header")(53,"mat-panel-title")(54,"div",3),t.ɵɵtext(55),t.ɵɵpipe(56,"translate"),t.ɵɵpipe(57,"uppercase"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(58,"div",16)(59,"mat-form-field")(60,"mat-label"),t.ɵɵtext(61),t.ɵɵpipe(62,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(63,"mat-select",17),t.ɵɵtemplate(64,no,3,4,"mat-option",7),t.ɵɵpipe(65,"keyvalue"),t.ɵɵelementEnd()(),t.ɵɵelementStart(66,"div",5)(67,"mat-form-field",8)(68,"mat-label"),t.ɵɵtext(69),t.ɵɵpipe(70,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(71,"input",18),t.ɵɵtemplate(72,ao,2,0,"mat-error",10)(73,ro,2,0,"mat-error",10)(74,io,2,0,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(75,"mat-form-field",8)(76,"mat-label"),t.ɵɵtext(77),t.ɵɵpipe(78,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(79,"input",19),t.ɵɵtemplate(80,oo,2,0,"mat-error",10)(81,so,2,0,"mat-error",10)(82,lo,2,0,"mat-error",10),t.ɵɵelementEnd()(),t.ɵɵtemplate(83,go,15,16,"div",20),t.ɵɵelementEnd()(),t.ɵɵelementStart(84,"mat-expansion-panel")(85,"mat-expansion-panel-header")(86,"mat-panel-title")(87,"div",3),t.ɵɵtext(88),t.ɵɵpipe(89,"translate"),t.ɵɵpipe(90,"uppercase"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(91,"div",21),t.ɵɵtemplate(92,vo,27,32,"section",22),t.ɵɵelementStart(93,"span",23),t.ɵɵtext(94),t.ɵɵpipe(95,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(96,"div")(97,"button",24),t.ɵɵpipe(98,"translate"),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addNewConnector())})),t.ɵɵtext(99),t.ɵɵpipe(100,"translate"),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(101,"section",25),t.ɵɵtemplate(102,bo,4,7,"button",26)(103,xo,4,7,"button",27),t.ɵɵelementEnd()()}2&e&&(t.ɵɵpropertyInterpolate("toastTarget",n.toastTargetId),t.ɵɵproperty("formGroup",n.gatewayConfigurationGroup),t.ɵɵadvance(7),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,54,t.ɵɵpipeBind1(8,52,"gateway.thingsboard"))),t.ɵɵadvance(3),t.ɵɵproperty("deviceName",n.deviceNameForm)("isStateForm",n.isStateForm)("newGatewayType",n.gatewayType),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,56,"gateway.security-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(17,58,n.securityTypes)),t.ɵɵadvance(2),t.ɵɵclassMap(t.ɵɵpureFunction3(92,zi,n.layoutGap,n.alignment,!n.alignment)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(22,60,"gateway.thingsboard-host")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("host").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(28,62,"gateway.thingsboard-port")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("port").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("port").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("port").hasError("max")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("port").hasError("pattern")),t.ɵɵadvance(),t.ɵɵproperty("ngIf","tls"==n.gatewayConfigurationGroup.get("securityType").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(37,64,"gateway.remote")),t.ɵɵadvance(2),t.ɵɵclassMap(t.ɵɵpureFunction3(96,zi,n.layoutGap,n.alignment,!n.alignment)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(42,66,"gateway.remote-logging-level")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.gatewayLogLevels),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(48,68,"gateway.path-logs")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("remoteLoggingPathToLogs").hasError("required")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(57,72,t.ɵɵpipeBind1(56,70,"gateway.storage"))),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(62,74,"gateway.storage-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(65,76,n.storageTypes)),t.ɵɵadvance(2),t.ɵɵclassMap(t.ɵɵpureFunction3(100,zi,n.layoutGap,n.alignment,!n.alignment)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(70,78,"gateway.storage-pack-size")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("readRecordsCount").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("readRecordsCount").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("readRecordsCount").hasError("pattern")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(78,80,"file"!==n.gatewayConfigurationGroup.get("storageType").value?"gateway.storage-max-records":"gateway.storage-max-file-records")," "),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("maxRecordsCount").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("maxRecordsCount").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("maxRecordsCount").hasError("pattern")),t.ɵɵadvance(),t.ɵɵproperty("ngIf","file"==n.gatewayConfigurationGroup.get("storageType").value),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(90,84,t.ɵɵpipeBind1(89,82,"gateway.connectors-config"))),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",n.connectors.controls),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",n.connectors.length),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(95,86,"gateway.no-connectors")),t.ɵɵadvance(3),t.ɵɵclassProp("!hidden",n.isReadOnlyForm),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(98,88,"gateway.connector-add")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(100,90,"action.add")," "),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.isReadOnlyForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.gatewayConfigurationGroup.get("remoteConfiguration").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("remoteConfiguration").value))},dependencies:t.ɵɵgetComponentDepsFactory(Co,[B,g]),styles:['@charset "UTF-8";[_nghost-%COMP%] .gateway-form[_ngcontent-%COMP%]{height:100%;padding:5px;background-color:transparent;overflow-y:auto;overflow-x:hidden}[_nghost-%COMP%] .gateway-form[_ngcontent-%COMP%] .form-action-buttons[_ngcontent-%COMP%]{padding-top:8px}[_nghost-%COMP%] .gateway-form[_ngcontent-%COMP%] .gateway-config[_ngcontent-%COMP%] .no-data-found[_ngcontent-%COMP%]{position:relative;display:flex;height:40px}']})}}e("GatewayFormComponent",Co);class wo{transform(e,t){return hr.parseVersion(e)>=hr.parseVersion(da.get(t))}static{this.ɵfac=function(e){return new(e||wo)}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"isLatestVersionConfig",type:wo,pure:!0,standalone:!0})}}class So{constructor(e){this.translate=e}transform(e){return e.hasError("required")?this.translate.instant("gateway.port-required"):e.hasError("min")||e.hasError("max")?this.translate.instant("gateway.port-limits-error",{min:ca.MIN,max:ca.MAX}):""}static{this.ɵfac=function(e){return new(e||So)(t.ɵɵdirectiveInject(ke.TranslateService,16))}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"getGatewayPortTooltip",type:So,pure:!0,standalone:!0})}}class Eo{transform(e,t,n){return!n||n?.includes(ma.PATH)?t!==ma.CONST?`widget/lib/gateway/${e}-${t}_fn`:void 0:"attributes"===e||"timeseries"===e?"widget/lib/gateway/attributes_timeseries_expressions_fn":"widget/lib/gateway/expressions_fn"}static{this.ɵfac=function(e){return new(e||Eo)}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"getConnectorMappingHelpLink",type:Eo,pure:!0,standalone:!0})}}function To(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.key),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.value," ")}}function Io(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",22),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.connectorForm.get("name").hasError("duplicateName")?"gateway.connector-duplicate-name":"gateway.name-required"))}}function ko(e,n){1&e&&(t.ɵɵelementStart(0,"div",8)(1,"div",9),t.ɵɵtext(2,"gateway.connectors-table-class"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",10),t.ɵɵelement(4,"input",23),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(5,1,"gateway.set")))}function Mo(e,n){1&e&&(t.ɵɵelementStart(0,"div",8)(1,"div",9),t.ɵɵtext(2,"gateway.connectors-table-key"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",10),t.ɵɵelement(4,"input",24),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(5,1,"gateway.set")))}function Po(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Fo(e,n){1&e&&(t.ɵɵelementStart(0,"div",8)(1,"mat-slide-toggle",25)(2,"mat-label",26),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,2,"gateway.fill-connector-defaults-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,4,"gateway.fill-connector-defaults")," "))}function Oo(e,n){1&e&&(t.ɵɵelementStart(0,"div",8)(1,"mat-slide-toggle",27)(2,"mat-label",26),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,2,"gateway.send-change-data-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,4,"gateway.send-change-data")," "))}class qo extends C{constructor(e,t,n,a,r,i){super(e,t,a),this.store=e,this.router=t,this.data=n,this.dialogRef=a,this.fb=r,this.isLatestVersionConfig=i,this.connectorType=je,this.gatewayConnectorDefaultTypesTranslatesMap=Le,this.gatewayLogLevel=Object.values(Ae),this.submitted=!1,this.destroy$=new ie,this.connectorForm=this.fb.group({type:[je.MQTT,[]],name:["",[J.required,this.uniqNameRequired(),J.pattern(Re)]],logLevel:[Ae.INFO,[]],useDefaults:[!0,[]],sendDataOnlyOnChange:[!1,[]],class:["",[]],key:["auto",[]]})}ngOnInit(){this.observeTypeChange()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),super.ngOnDestroy()}helpLinkId(){return k+"/docs/iot-gateway/configuration/"}cancel(){this.dialogRef.close(null)}add(){this.submitted=!0;const e=this.connectorForm.getRawValue();if(e.useDefaults){const t=bt(e.type),n=this.data.gatewayVersion;n&&(e.configVersion=n),e.configurationJson=(this.isLatestVersionConfig.transform(n,e.type)?t[da.get(e.type)]:t[Ge.Legacy])??t,this.connectorForm.valid&&this.dialogRef.close(e)}else this.connectorForm.valid&&this.dialogRef.close(e)}uniqNameRequired(){return e=>{const t=e.value.trim().toLowerCase();return this.data.dataSourceData.some((({value:{name:e}})=>e.toLowerCase()===t))?{duplicateName:{valid:!1}}:null}}observeTypeChange(){this.connectorForm.get("type").valueChanges.pipe(ue((e=>{const t=this.connectorForm.get("useDefaults");e===je.GRPC||e===je.CUSTOM?t.setValue(!1):t.value||t.setValue(!0)})),de(this.destroy$)).subscribe()}static{this.ɵfac=function(e){return new(e||qo)(t.ɵɵdirectiveInject(ae.Store),t.ɵɵdirectiveInject(re.Router),t.ɵɵdirectiveInject(te),t.ɵɵdirectiveInject(ne.MatDialogRef),t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(wo))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:qo,selectors:[["tb-add-connector-dialog"]],standalone:!0,features:[t.ɵɵProvidersFeature([wo]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:44,vars:27,consts:[[1,"add-connector",3,"formGroup"],["color","primary"],[1,"flex-1"],[3,"tb-help"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content",""],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["formControlName","type"],[3,"value",4,"ngFor","ngForOf"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","autocomplete","off","name","value","formControlName","name",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["class","tb-form-row column-xs",4,"ngIf"],["formControlName","logLevel"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","primary","type","button","cdkFocusInitial","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[3,"value"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","name","value","formControlName","class",3,"placeholder"],["matInput","","name","value","formControlName","key",3,"placeholder"],["formControlName","useDefaults",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["formControlName","sendDataOnlyOnChange",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"mat-toolbar",1)(2,"h2"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",2)(6,"div",3),t.ɵɵelementStart(7,"button",4),t.ɵɵlistener("click",(function(){return n.cancel()})),t.ɵɵelementStart(8,"mat-icon",5),t.ɵɵtext(9,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",6)(11,"div",7)(12,"div",8)(13,"div",9),t.ɵɵtext(14,"gateway.type"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"mat-form-field",10)(16,"mat-select",11),t.ɵɵtemplate(17,To,2,2,"mat-option",12),t.ɵɵpipe(18,"keyvalue"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(19,"div",8)(20,"div",13),t.ɵɵtext(21,"gateway.name"),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"mat-form-field",10),t.ɵɵelement(23,"input",14),t.ɵɵpipe(24,"translate"),t.ɵɵtemplate(25,Io,3,3,"mat-icon",15),t.ɵɵelementEnd()(),t.ɵɵtemplate(26,ko,6,3,"div",16)(27,Mo,6,3,"div",16),t.ɵɵelementStart(28,"div",8)(29,"div",9),t.ɵɵtext(30,"gateway.remote-logging-level"),t.ɵɵelementEnd(),t.ɵɵelementStart(31,"mat-form-field",10)(32,"mat-select",17),t.ɵɵtemplate(33,Po,2,2,"mat-option",12),t.ɵɵelementEnd()()(),t.ɵɵtemplate(34,Fo,6,6,"div",16)(35,Oo,6,6,"div",16),t.ɵɵpipe(36,"withReportStrategy"),t.ɵɵelementEnd()(),t.ɵɵelementStart(37,"div",18)(38,"button",19),t.ɵɵlistener("click",(function(){return n.cancel()})),t.ɵɵtext(39),t.ɵɵpipe(40,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(41,"button",20),t.ɵɵlistener("click",(function(){return n.add()})),t.ɵɵtext(42),t.ɵɵpipe(43,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.connectorForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,14,"gateway.add-connector")),t.ɵɵadvance(3),t.ɵɵproperty("tb-help",n.helpLinkId()),t.ɵɵadvance(11),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(18,16,n.gatewayConnectorDefaultTypesTranslatesMap)),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(24,18,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.connectorForm.get("name").hasError("required")&&n.connectorForm.get("name").touched||n.connectorForm.get("name").hasError("duplicateName")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.connectorForm.get("type").value===n.connectorType.CUSTOM),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.connectorForm.get("type").value===n.connectorType.GRPC),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.gatewayLogLevel),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.connectorForm.get("type").value!==n.connectorType.GRPC&&n.connectorForm.get("type").value!==n.connectorType.CUSTOM),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.connectorForm.get("type").value===n.connectorType.MQTT&&!t.ɵɵpipeBind2(36,20,n.data.gatewayVersion,n.connectorType.MQTT)),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(40,23,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.connectorForm.invalid||!n.connectorForm.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(43,25,"action.add")," "))},dependencies:t.ɵɵgetComponentDepsFactory(qo,[B,g,br]),styles:['@charset "UTF-8";[_nghost-%COMP%] .add-connector[_ngcontent-%COMP%]{min-width:400px;width:500px}']})}}e("AddConnectorDialogComponent",qo);const Bo=()=>({maxWidth:"970px"});function No(e,n){1&e&&(t.ɵɵelementStart(0,"div",6),t.ɵɵtext(1,"gateway.device-info.source"),t.ɵɵelementEnd())}function Ro(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",20),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SourceTypeTranslationsMap.get(e))," ")}}function _o(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"mat-form-field",12)(2,"mat-select",18),t.ɵɵtemplate(3,Ro,3,4,"mat-option",19),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.sourceTypes)}}function Do(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",21),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-info.device-name-expression-required"))}function Vo(e,n){if(1&e&&(t.ɵɵelement(0,"div",22),t.ɵɵpipe(1,"getConnectorMappingHelpLink")),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("tb-help-popup",t.ɵɵpipeBind3(1,2,"name-field",e.mappingFormGroup.get("deviceNameExpressionSource").value,e.sourceTypes))("tb-help-popup-style",t.ɵɵpureFunction0(6,Bo))}}function Ao(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",20),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SourceTypeTranslationsMap.get(e))," ")}}function Go(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"mat-form-field",12)(2,"mat-select",25),t.ɵɵtemplate(3,Ao,3,4,"mat-option",19),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.sourceTypes)}}function jo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",21),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-info.device-profile-expression-required"))}function Lo(e,n){if(1&e&&(t.ɵɵelement(0,"div",22),t.ɵɵpipe(1,"getConnectorMappingHelpLink")),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("tb-help-popup",t.ɵɵpipeBind3(1,2,"profile-name",e.mappingFormGroup.get("deviceProfileExpressionSource").value,e.sourceTypes))("tb-help-popup-style",t.ɵɵpureFunction0(6,Bo))}}function Uo(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",23)(1,"div",9),t.ɵɵtext(2,"gateway.device-info.profile-name"),t.ɵɵelementEnd(),t.ɵɵtemplate(3,Go,4,1,"div",10),t.ɵɵelementStart(4,"div",11)(5,"mat-form-field",12),t.ɵɵelement(6,"input",24),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,jo,3,3,"mat-icon",14)(9,Lo,2,7,"div",15),t.ɵɵpipe(10,"getConnectorMappingHelpLink"),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.useSource),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,4,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingFormGroup.get("deviceProfileExpression").hasError("required")&&e.mappingFormGroup.get("deviceProfileExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind3(10,6,"profile-name",e.mappingFormGroup.get("deviceProfileExpressionSource").value,e.sourceTypes))}}class $o extends P{get deviceInfoType(){return this.deviceInfoTypeValue}set deviceInfoType(e){this.deviceInfoTypeValue!==e&&(this.deviceInfoTypeValue=e)}constructor(e,t,n,a){super(e),this.store=e,this.translate=t,this.dialog=n,this.fb=a,this.SourceTypeTranslationsMap=xa,this.DeviceInfoType=Xa,this.useSource=!0,this.required=!1,this.sourceTypes=Object.values(aa),this.destroy$=new ie,this.propagateChange=e=>{}}ngOnInit(){this.mappingFormGroup=this.fb.group({deviceNameExpression:["",this.required?[J.required,J.pattern(Re)]:[J.pattern(Re)]]}),this.useSource&&this.mappingFormGroup.addControl("deviceNameExpressionSource",this.fb.control(this.sourceTypes[0],[])),this.deviceInfoType===Xa.FULL&&(this.useSource&&this.mappingFormGroup.addControl("deviceProfileExpressionSource",this.fb.control(this.sourceTypes[0],[])),this.mappingFormGroup.addControl("deviceProfileExpression",this.fb.control("",this.required?[J.required,J.pattern(Re)]:[J.pattern(Re)]))),this.mappingFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.updateView(e)}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),super.ngOnDestroy()}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}writeValue(e){this.mappingFormGroup.patchValue(e,{emitEvent:!1})}validate(){return this.mappingFormGroup.valid?null:{mappingForm:{valid:!1}}}updateView(e){this.propagateChange(e)}static{this.ɵfac=function(e){return new(e||$o)(t.ɵɵdirectiveInject(ae.Store),t.ɵɵdirectiveInject(ke.TranslateService),t.ɵɵdirectiveInject(ne.MatDialog),t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:$o,selectors:[["tb-device-info-table"]],inputs:{useSource:"useSource",required:"required",sourceTypes:"sourceTypes",deviceInfoType:"deviceInfoType"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>$o)),multi:!0},{provide:X,useExisting:i((()=>$o)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:23,vars:17,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-table","no-padding","no-gap"],[1,"tb-form-table-header"],["translate","",1,"tb-form-table-header-cell","table-name-column"],["class","tb-form-table-header-cell table-column","translate","",4,"ngIf"],["translate","",1,"tb-form-table-header-cell","table-column"],[1,"tb-form-table-body","no-gap"],[1,"tb-form-table-row","tb-form-row","no-border","same-padding","top-same-padding"],["translate","",1,"fixed-title-width","tb-required"],["class","tb-flex no-gap raw-value-option",4,"ngIf"],[1,"tb-form-table-row-cell","tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","deviceNameExpression",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matSuffix","","class","see-example","tb-help-popup-placement","left",3,"tb-help-popup","tb-help-popup-style",4,"ngIf"],["class","tb-form-table-row tb-form-row no-border same-padding bottom-same-padding",4,"ngIf"],[1,"tb-flex","no-gap","raw-value-option"],["formControlName","deviceNameExpressionSource"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],[1,"tb-form-table-row","tb-form-row","no-border","same-padding","bottom-same-padding"],["matInput","","name","value","formControlName","deviceProfileExpression",3,"placeholder"],["formControlName","deviceProfileExpressionSource"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1),t.ɵɵtext(2,"device.device"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2)(4,"div",3)(5,"div",4),t.ɵɵtext(6,"gateway.device-info.entity-field"),t.ɵɵelementEnd(),t.ɵɵtemplate(7,No,2,0,"div",5),t.ɵɵelementStart(8,"div",6),t.ɵɵtext(9," gateway.device-info.expression "),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"div",7)(11,"div",8)(12,"div",9),t.ɵɵtext(13,"gateway.device-info.name"),t.ɵɵelementEnd(),t.ɵɵtemplate(14,_o,4,1,"div",10),t.ɵɵelementStart(15,"div",11)(16,"mat-form-field",12),t.ɵɵelement(17,"input",13),t.ɵɵpipe(18,"translate"),t.ɵɵtemplate(19,Do,3,3,"mat-icon",14)(20,Vo,2,7,"div",15),t.ɵɵpipe(21,"getConnectorMappingHelpLink"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(22,Uo,11,10,"div",16),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.mappingFormGroup),t.ɵɵadvance(),t.ɵɵclassProp("tb-required",n.required),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.useSource),t.ɵɵadvance(4),t.ɵɵclassProp("bottom-same-padding",n.deviceInfoType!==n.DeviceInfoType.FULL),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.useSource),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(18,11,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.mappingFormGroup.get("deviceNameExpression").hasError("required")&&n.mappingFormGroup.get("deviceNameExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind3(21,13,"name-field",n.mappingFormGroup.get("deviceNameExpressionSource").value,n.sourceTypes)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deviceInfoType===n.DeviceInfoType.FULL))},dependencies:t.ɵɵgetComponentDepsFactory($o,[B,g,Eo]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}[_nghost-%COMP%] .tb-form-row.bottom-same-padding[_ngcontent-%COMP%]{padding-bottom:16px}[_nghost-%COMP%] .tb-form-row.top-same-padding[_ngcontent-%COMP%]{padding-top:16px}[_nghost-%COMP%] .tb-form-row[_ngcontent-%COMP%] .fixed-title-width[_ngcontent-%COMP%]{width:19%}[_nghost-%COMP%] .table-column[_ngcontent-%COMP%]{width:40%}[_nghost-%COMP%] .table-name-column[_ngcontent-%COMP%]{width:20%}[_nghost-%COMP%] .raw-name[_ngcontent-%COMP%]{width:19%}[_nghost-%COMP%] .raw-value-option[_ngcontent-%COMP%]{max-width:40%}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}'],changeDetection:o.OnPush})}}function zo(e,n){if(1&e&&t.ɵɵelement(0,"mat-icon",18),2&e){let e;const n=t.ɵɵnextContext();t.ɵɵproperty("svgIcon",null==(e=n.valueTypes.get(n.valueTypeFormGroup.get("type").value))?null:e.icon)}}function Ko(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",20),t.ɵɵelement(1,"mat-icon",21),t.ɵɵelementStart(2,"span"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e){let e,a;const r=n.$implicit,i=t.ɵɵnextContext(2);t.ɵɵproperty("value",r),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("svgIcon",null==(e=i.valueTypes.get(r))?null:e.icon),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,null==(a=i.valueTypes.get(r))?null:a.name))}}function Ho(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,Ko,5,5,"mat-option",19),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.valueTypeKeys)}}function Qo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-option",22)(1,"span"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.raw")))}function Wo(e,n){1&e&&(t.ɵɵelement(0,"input",23),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function Jo(e,n){1&e&&(t.ɵɵelement(0,"input",24),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function Yo(e,n){1&e&&(t.ɵɵelement(0,"input",25),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function Xo(e,n){1&e&&(t.ɵɵelement(0,"input",26),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function Zo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-select",27)(1,"mat-option",20),t.ɵɵtext(2,"true"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-option",20),t.ɵɵtext(4,"false"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(),t.ɵɵproperty("value",!0),t.ɵɵadvance(2),t.ɵɵproperty("value",!1))}function es(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",28),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}Ee([w()],$o.prototype,"useSource",void 0),Ee([w()],$o.prototype,"required",void 0);class ts{constructor(e){this.fb=e,this.valueTypeKeys=Object.values(St),this.valueTypes=Et,this.MappingValueType=St,this.destroy$=new ie,this.onChange=e=>{},this.valueTypeFormGroup=this.fb.group({type:[St.STRING],string:[{value:"",disabled:this.rawData},[J.required,J.pattern(Re)]],integer:[{value:0,disabled:!0},[J.required,J.pattern(_e)]],double:[{value:0,disabled:!0},[J.required]],boolean:[{value:!1,disabled:!0},[J.required]],raw:[{value:"",disabled:!this.rawData},[J.required,J.pattern(Re)]]}),this.valueTypeFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((({type:e,...t})=>{this.onChange({type:e,value:t[e]})})),this.observeTypeChange()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}observeTypeChange(){this.valueTypeFormGroup.get("type").valueChanges.pipe(de(this.destroy$)).subscribe((e=>this.toggleTypeInputs(e)))}toggleTypeInputs(e){this.valueTypeFormGroup.disable({emitEvent:!1}),this.valueTypeFormGroup.get("type").enable({emitEvent:!1}),this.valueTypeFormGroup.get(e).enable({emitEvent:!1})}registerOnChange(e){this.onChange=e}registerOnTouched(e){}writeValue(e){const t=this.getValueType(e?.value),n={string:"",raw:"",integer:0,double:0,boolean:!1,type:t};n[t]=e?.value,this.toggleTypeInputs(t),this.valueTypeFormGroup.patchValue(n,{emitEvent:!1})}validate(){return this.valueTypeFormGroup.valid?null:{valueTypeFormGroup:{valid:!1}}}getValueType(e){if(this.rawData)return"raw";switch(typeof e){case"boolean":return"boolean";case"number":return Number.isInteger(e)?"integer":"float";default:return"string"}}static{this.ɵfac=function(e){return new(e||ts)(t.ɵɵdirectiveInject(W.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ts,selectors:[["tb-type-value-field"]],inputs:{rawData:"rawData"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>ts)),multi:!0},{provide:X,useExisting:i((()=>ts)),multi:!0}]),t.ɵɵStandaloneFeature],decls:28,vars:16,consts:[["raw",""],[3,"formGroup"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap","fill-width"],["formControlName","type"],[1,"tb-flex","align-center"],["class","tb-mat-18",3,"svgIcon",4,"ngIf"],[4,"ngIf","ngIfElse"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","flex","tb-suffix-absolute"],[3,"ngSwitch"],["matInput","","required","","formControlName","string",3,"placeholder",4,"ngSwitchCase"],["matInput","","required","","formControlName","integer","type","number",3,"placeholder",4,"ngSwitchCase"],["matInput","","required","","formControlName","double","type","number",3,"placeholder",4,"ngSwitchCase"],["matInput","","required","","formControlName","raw",3,"placeholder",4,"ngSwitchCase"],["formControlName","boolean",4,"ngSwitchCase"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],[1,"tb-mat-18",3,"svgIcon"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],[1,"tb-mat-20",3,"svgIcon"],["value","raw"],["matInput","","required","","formControlName","string",3,"placeholder"],["matInput","","required","","formControlName","integer","type","number",3,"placeholder"],["matInput","","required","","formControlName","double","type","number",3,"placeholder"],["matInput","","required","","formControlName","raw",3,"placeholder"],["formControlName","boolean"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"]],template:function(e,n){if(1&e&&(t.ɵɵelementContainerStart(0,1),t.ɵɵelementStart(1,"div",2)(2,"div",3),t.ɵɵtext(3,"gateway.type"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",4)(5,"mat-form-field",5)(6,"mat-select",6)(7,"mat-select-trigger")(8,"div",7),t.ɵɵtemplate(9,zo,1,1,"mat-icon",8),t.ɵɵelementStart(10,"span"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(14,Ho,2,1,"ng-container",9)(15,Qo,4,3,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(17,"div",2)(18,"div",3),t.ɵɵtext(19,"gateway.value"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"mat-form-field",10),t.ɵɵelementContainerStart(21,11),t.ɵɵtemplate(22,Wo,2,3,"input",12)(23,Jo,2,3,"input",13)(24,Yo,2,3,"input",14)(25,Xo,2,3,"input",15)(26,Zo,5,2,"mat-select",16),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(27,es,3,3,"mat-icon",17),t.ɵɵelementEnd()(),t.ɵɵelementContainerEnd()),2&e){let e,a;const r=t.ɵɵreference(16);t.ɵɵproperty("formGroup",n.valueTypeFormGroup),t.ɵɵadvance(9),t.ɵɵproperty("ngIf",!n.rawData),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(12,12,null==(e=n.valueTypes.get(n.valueTypeFormGroup.get("type").value))?null:e.name)||t.ɵɵpipeBind1(13,14,"gateway.raw")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",!n.rawData)("ngIfElse",r),t.ɵɵadvance(7),t.ɵɵproperty("ngSwitch",n.valueTypeFormGroup.get("type").value),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingValueType.STRING),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingValueType.INTEGER),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingValueType.DOUBLE),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase","raw"),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingValueType.BOOLEAN),t.ɵɵadvance(),t.ɵɵproperty("ngIf",(null==(a=n.valueTypeFormGroup.get(n.valueTypeFormGroup.get("type").value))?null:a.hasError("required"))&&n.valueTypeFormGroup.get(n.valueTypeFormGroup.get("type").value).touched)}},dependencies:t.ɵɵgetComponentDepsFactory(ts,[g,B]),styles:['@charset "UTF-8";[_nghost-%COMP%]{gap:16px;display:grid;width:100%}']})}}function ns(e,n){1&e&&t.ɵɵelement(0,"tb-type-value-field",14)}function as(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",6)(1,"div",7),t.ɵɵelementContainerStart(2,8),t.ɵɵelementStart(3,"mat-expansion-panel",9)(4,"mat-expansion-panel-header",10)(5,"mat-panel-title")(6,"div",11),t.ɵɵtext(7),t.ɵɵelementEnd()()(),t.ɵɵtemplate(8,ns,1,0,"ng-template",12),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"button",13),t.ɵɵpipe(10,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.deleteKey(n,a))})),t.ɵɵelementStart(11,"mat-icon"),t.ɵɵtext(12,"delete"),t.ɵɵelementEnd()()()}if(2&e){let e;const a=n.$implicit,r=n.last;t.ɵɵadvance(2),t.ɵɵproperty("formGroup",a),t.ɵɵadvance(),t.ɵɵproperty("expanded",r),t.ɵɵadvance(4),t.ɵɵtextInterpolate(null!==(e=null==(e=a.get("typeValue").value)?null:e.value)&&void 0!==e?e:""),t.ɵɵadvance(2),t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(10,4,"gateway.delete-value"))}}function rs(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",4),t.ɵɵtemplate(1,as,13,6,"div",5),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.valueListFormArray.controls)("ngForTrackBy",e.trackByKey)}}function is(e,n){1&e&&(t.ɵɵelementStart(0,"div",15)(1,"span",16),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate("gateway.no-value"))}Ee([w()],ts.prototype,"rawData",void 0);class os{constructor(e){this.fb=e,this.destroy$=new ie,this.onChange=e=>{}}ngOnInit(){this.valueListFormArray=this.fb.array([]),this.valueListFormArray.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e.map((({typeValue:e})=>({...e}))))}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}trackByKey(e,t){return t}addKey(){const e=this.fb.group({typeValue:[]});this.valueListFormArray.push(e)}deleteKey(e,t){e&&e.stopPropagation(),this.valueListFormArray.removeAt(t),this.valueListFormArray.markAsDirty()}registerOnChange(e){this.onChange=e}registerOnTouched(e){}writeValue(e){for(const t of e){const e={typeValue:[t]},n=this.fb.group(e);this.valueListFormArray.push(n)}}validate(){return this.valueListFormArray.valid?null:{valueListForm:{valid:!1}}}static{this.ɵfac=function(e){return new(e||os)(t.ɵɵdirectiveInject(W.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:os,selectors:[["tb-type-value-panel"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>os)),multi:!0},{provide:X,useExisting:i((()=>os)),multi:!0}]),t.ɵɵStandaloneFeature],decls:8,vars:5,consts:[["noKeys",""],[1,"tb-form-panel","no-border","no-padding"],["class","tb-form-panel no-border no-padding key-panel",4,"ngIf","ngIfElse"],["type","button","mat-stroked-button","","color","primary",3,"click"],[1,"tb-form-panel","no-border","no-padding","key-panel"],["class","tb-form-panel no-border no-padding tb-flex no-flex row center fill-width",4,"ngFor","ngForOf","ngForTrackBy"],[1,"tb-form-panel","no-border","no-padding","tb-flex","no-flex","row","center","fill-width"],[1,"tb-form-panel","stroked","tb-flex"],[3,"formGroup"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],["tbTruncateWithTooltip","",1,"title-container"],["matExpansionPanelContent",""],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],["formControlName","typeValue"],[1,"tb-flex","no-flex","center","align-center","key-panel"],["translate","",1,"tb-prompt"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",1),t.ɵɵtemplate(1,rs,2,2,"div",2),t.ɵɵelementStart(2,"div")(3,"button",3),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addKey())})),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(6,is,3,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor)}if(2&e){const e=t.ɵɵreference(7);t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.valueListFormArray.controls.length)("ngIfElse",e),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,3,"gateway.add-value")," ")}},dependencies:t.ɵɵgetComponentDepsFactory(os,[B,g,ts]),styles:['@charset "UTF-8";[_nghost-%COMP%] .title-container[_ngcontent-%COMP%]{max-width:11vw}[_nghost-%COMP%] .key-panel[_ngcontent-%COMP%]{height:250px;overflow:auto}[_nghost-%COMP%] .tb-form-panel[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%]{width:56px;height:56px;padding:16px;color:#0000008a}[_nghost-%COMP%] .see-example[_ngcontent-%COMP%]{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}']})}}function ss(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",17),t.ɵɵtext(2),t.ɵɵelementEnd(),t.ɵɵtext(3),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",e.get("key").value," "),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",":","  ")}}function ls(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",30),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.key-required"))}function ps(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",2)(1,"div",22)(2,"div",23),t.ɵɵtext(3,"gateway.platform-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",24)(5,"div",25),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",26),t.ɵɵelement(10,"input",27),t.ɵɵpipe(11,"translate"),t.ɵɵtemplate(12,ls,3,3,"mat-icon",28),t.ɵɵelementEnd()()(),t.ɵɵelementStart(13,"div",22)(14,"div",23),t.ɵɵtext(15,"gateway.connector-side"),t.ɵɵelementEnd(),t.ɵɵelement(16,"tb-type-value-field",29),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(6,5,"gateway.JSONPath-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(8,7,"gateway.key")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(11,9,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("key").hasError("required")&&e.get("key").touched),t.ɵɵadvance(4),t.ɵɵproperty("rawData",n.rawData)}}function cs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",30),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.key-required"))}function ds(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",30),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function ms(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",2)(1,"div",24)(2,"div",31),t.ɵɵtext(3,"gateway.key"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",26),t.ɵɵelement(5,"input",27),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,cs,3,3,"mat-icon",28),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",24)(9,"div",31),t.ɵɵtext(10,"gateway.value"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field",32),t.ɵɵelement(12,"input",33),t.ɵɵpipe(13,"translate"),t.ɵɵtemplate(14,ds,3,3,"mat-icon",28),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,4,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("key").hasError("required")&&e.get("key").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(13,6,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("value").hasError("required")&&e.get("value").touched)}}function us(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",30),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.method-required"))}function gs(e,n){1&e&&t.ɵɵelement(0,"tb-type-value-panel",38)}function hs(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",2)(1,"div",24)(2,"div",25),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-form-field",26),t.ɵɵelement(7,"input",34),t.ɵɵpipe(8,"translate"),t.ɵɵtemplate(9,us,3,3,"mat-icon",28),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"div",12)(11,"mat-expansion-panel",35)(12,"mat-expansion-panel-header",36)(13,"mat-panel-title")(14,"div",37),t.ɵɵpipe(15,"translate"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(18,gs,1,0,"ng-template",18),t.ɵɵelementEnd()()()),2&e){let e;const n=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,7,"gateway.hints.method-name")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,9,"gateway.method-name")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,11,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.get("method").hasError("required")&&n.get("method").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(15,13,"gateway.hints.arguments")),t.ɵɵadvance(2),t.ɵɵtextInterpolate2(" ",t.ɵɵpipeBind1(17,15,"gateway.arguments"),""," ("+(null==(e=n.get("arguments").value)?null:e.length)+")"," ")}}function ys(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",39),2&e){const e=t.ɵɵnextContext(4);t.ɵɵproperty("isExpansionMode",!0)("defaultValue",e.ReportStrategyDefaultValue.Key)}}function fs(e,n){if(1&e&&t.ɵɵtemplate(0,ps,17,11,"div",20)(1,ms,15,8,"div",20)(2,hs,19,17,"div",20)(3,ys,1,2,"tb-report-strategy",21),2&e){const e=t.ɵɵnextContext(3);t.ɵɵproperty("ngIf",e.keysType!==e.MappingKeysType.CUSTOM&&e.keysType!==e.MappingKeysType.RPC_METHODS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.keysType===e.MappingKeysType.CUSTOM),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.keysType===e.MappingKeysType.RPC_METHODS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.withReportStrategy&&(e.keysType===e.MappingKeysType.ATTRIBUTES||e.keysType===e.MappingKeysType.TIMESERIES))}}function vs(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",11)(1,"div",12),t.ɵɵelementContainerStart(2,13),t.ɵɵelementStart(3,"mat-expansion-panel",14)(4,"mat-expansion-panel-header",15)(5,"mat-panel-title"),t.ɵɵtemplate(6,ss,4,2,"ng-container",16),t.ɵɵelementStart(7,"div",17),t.ɵɵtext(8),t.ɵɵelementEnd()()(),t.ɵɵtemplate(9,fs,4,4,"ng-template",18),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"button",19),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.deleteKey(n,a))})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"delete"),t.ɵɵelementEnd()()()}if(2&e){const e=n.$implicit,a=n.last,r=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵproperty("formGroup",e),t.ɵɵadvance(),t.ɵɵproperty("expanded",a),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",r.keysType!==r.MappingKeysType.RPC_METHODS),t.ɵɵadvance(2),t.ɵɵtextInterpolate(r.valueTitle(e)),t.ɵɵadvance(2),t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(11,5,r.deleteKeyTitle))}}function bs(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",9),t.ɵɵtemplate(1,vs,14,7,"div",10),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.keysListFormArray.controls)("ngForTrackBy",e.trackByKey)}}function xs(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",40)(1,"span",41),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.noKeysText)}}class Cs extends P{constructor(e,t){super(t),this.fb=e,this.store=t,this.valueTypeKeys=Object.values(St),this.valueTypeEnum=St,this.valueTypes=Et,this.rawData=!1,this.withReportStrategy=!0,this.keysDataApplied=new r,this.MappingKeysType=Ca,this.ReportStrategyDefaultValue=Mt,this.errorText=""}ngOnInit(){this.keysListFormArray=this.prepareKeysFormArray(this.keys)}trackByKey(e,t){return t}addKey(){let e;e=this.keysType===Ca.RPC_METHODS?this.fb.group({method:["",[J.required]],arguments:[[],[]]}):this.keysType===Ca.CUSTOM?this.fb.group({key:["",[J.required,J.pattern(Re)]],value:["",[J.required,J.pattern(Re)]]}):this.fb.group({key:["",[J.required,J.pattern(Re)]],typeValue:[],reportStrategy:[{value:null,disabled:this.isReportStrategyDisabled()}]}),this.keysListFormArray.push(e)}deleteKey(e,t){e&&e.stopPropagation(),this.keysListFormArray.removeAt(t),this.keysListFormArray.markAsDirty()}cancel(){this.popover?.hide()}applyKeysData(){let e=this.keysListFormArray.value.map((({typeValue:e,reportStrategy:t,...n})=>({...n,...t&&{reportStrategy:t},...e&&{...e}})));if(this.keysType===Ca.CUSTOM){e={};for(let t of this.keysListFormArray.value)e[t.key]=t.value}this.keysDataApplied.emit(e)}prepareKeysFormArray(e){const t=[];return e&&(this.keysType===Ca.CUSTOM&&(e=Object.keys(e).map((t=>({key:t,value:e[t],type:""})))),e.forEach((e=>{let n;if(this.keysType===Ca.RPC_METHODS)n=this.fb.group({method:[e.method,[J.required]],arguments:[[...e.arguments],[]]});else if(this.keysType===Ca.CUSTOM){const{key:t,value:a}=e;n=this.fb.group({key:[t,[J.required,J.pattern(Re)]],value:[a,[J.required,J.pattern(Re)]]})}else{const{key:t,value:a,type:r,reportStrategy:i}=e;n=this.fb.group({key:[t,[J.required,J.pattern(Re)]],typeValue:[{type:r,value:a}],reportStrategy:[{value:i,disabled:this.isReportStrategyDisabled()}]})}t.push(n)}))),this.fb.array(t)}valueTitle(e){let t;switch(this.keysType){case Ca.CUSTOM:t=e.get("value").value;break;case Ca.RPC_METHODS:t=e.get("method").value;break;default:t=e.get("typeValue").value?.value}return _(t)?"object"==typeof t?JSON.stringify(t):t:""}isReportStrategyDisabled(){return!(this.withReportStrategy&&(this.keysType===Ca.ATTRIBUTES||this.keysType===Ca.TIMESERIES))}static{this.ɵfac=function(e){return new(e||Cs)(t.ɵɵdirectiveInject(W.UntypedFormBuilder),t.ɵɵdirectiveInject(ae.Store))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Cs,selectors:[["tb-mapping-data-keys-panel"]],inputs:{panelTitle:"panelTitle",addKeyTitle:"addKeyTitle",deleteKeyTitle:"deleteKeyTitle",noKeysText:"noKeysText",keys:"keys",keysType:"keysType",valueTypeKeys:"valueTypeKeys",valueTypeEnum:"valueTypeEnum",valueTypes:"valueTypes",rawData:"rawData",withReportStrategy:"withReportStrategy",popover:"popover"},outputs:{keysDataApplied:"keysDataApplied"},standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:16,consts:[["noKeys",""],[1,"tb-mapping-keys-panel"],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-panel-title"],["class","tb-form-panel no-border no-padding key-panel",4,"ngIf","ngIfElse"],["type","button","mat-stroked-button","","color","primary",3,"click"],[1,"tb-flex","flex-end"],["mat-button","","color","primary","type","button",3,"click"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[1,"tb-form-panel","no-border","no-padding","key-panel"],["class","tb-form-panel no-border no-padding tb-flex no-flex row center fill-width",4,"ngFor","ngForOf","ngForTrackBy"],[1,"tb-form-panel","no-border","no-padding","tb-flex","no-flex","row","center","fill-width"],[1,"tb-form-panel","stroked","tb-flex"],[3,"formGroup"],[1,"tb-settings",3,"expanded"],[1,"flex","flex-row","flex-wrap"],[4,"ngIf"],["tbTruncateWithTooltip","",1,"title-container"],["matExpansionPanelContent",""],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],["class","tb-form-panel no-border no-padding",4,"ngIf"],["formControlName","reportStrategy",3,"isExpansionMode","defaultValue",4,"ngIf"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","key",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["formControlName","typeValue",3,"rawData"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["translate","",1,"fixed-title-width","tb-required"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","flex","tb-suffix-absolute"],["matInput","","required","","formControlName","value",3,"placeholder"],["matInput","","name","value","formControlName","method",3,"placeholder"],[1,"tb-settings"],[1,"flex","flex-wrap"],[1,"title-container",3,"tb-hint-tooltip-icon"],["formControlName","arguments"],["formControlName","reportStrategy",3,"isExpansionMode","defaultValue"],[1,"tb-flex","no-flex","center","align-center","key-panel"],["translate","",1,"tb-prompt"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",1)(1,"div",2)(2,"div",3),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(5,bs,2,2,"div",4),t.ɵɵelementStart(6,"div")(7,"button",5),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addKey())})),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(10,xs,3,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(12,"div",6)(13,"button",7),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"button",8),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.applyKeysData())})),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(11);t.ɵɵadvance(3),t.ɵɵtextInterpolate2("",t.ɵɵpipeBind1(4,8,n.panelTitle),""," ("+n.keysListFormArray.controls.length+")",""),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.keysListFormArray.controls.length)("ngIfElse",e),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(9,10,n.addKeyTitle)," "),t.ɵɵadvance(6),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,12,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.keysListFormArray.invalid||!n.keysListFormArray.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,14,"action.apply")," ")}},dependencies:t.ɵɵgetComponentDepsFactory(Cs,[B,g,ta,os,ts]),styles:['@charset "UTF-8";[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%]{width:77vw;max-width:700px}[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{max-width:11vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%] .key-panel[_ngcontent-%COMP%]{height:500px;overflow:auto}[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%] tb-value-input[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%] .tb-form-panel[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%]{width:56px;height:56px;padding:16px;color:#0000008a}[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%] .see-example[_ngcontent-%COMP%]{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}']})}}Ee([w()],Cs.prototype,"rawData",void 0),Ee([w()],Cs.prototype,"withReportStrategy",void 0);const ws=()=>({maxWidth:"970px"}),Ss=(e,t)=>[e,t];function Es(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.topic-required"))}function Ts(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.QualityTranslationsMap.get(e))," ")}}function Is(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.ConvertorTypeTranslationsMap.get(e))," ")}}function ks(e,n){if(1&e&&t.ɵɵelement(0,"tb-device-info-table",40),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("deviceInfoType",e.DeviceInfoType.FULL)}}function Ms(e,n){if(1&e&&t.ɵɵelement(0,"tb-device-info-table",41),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("deviceInfoType",e.DeviceInfoType.FULL)("sourceTypes",t.ɵɵpureFunction2(2,Ss,e.sourceTypesEnum.MSG,e.sourceTypesEnum.CONST))}}function Ps(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Fs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Os(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",14)(1,"div",31)(2,"div",32),t.ɵɵtext(3,"gateway.attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",42)(5,"mat-chip-listbox",43),t.ɵɵtemplate(6,Ps,2,1,"mat-chip",44),t.ɵɵelementStart(7,"mat-chip",45),t.ɵɵelement(8,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"button",47,0),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(10),r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.ATTRIBUTES))})),t.ɵɵelementStart(12,"tb-icon",48),t.ɵɵtext(13,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(14,"div",31)(15,"div",32),t.ɵɵtext(16,"gateway.timeseries"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"div",42)(18,"mat-chip-listbox",43),t.ɵɵtemplate(19,Fs,2,1,"mat-chip",44),t.ɵɵelementStart(20,"mat-chip",45),t.ɵɵelement(21,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(22,"button",47,1),t.ɵɵpipe(24,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(23),r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.TIMESERIES))})),t.ɵɵelementStart(25,"tb-icon",48),t.ɵɵtext(26,"edit"),t.ɵɵelementEnd()()()()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(5),t.ɵɵproperty("tb-ellipsis-chip-list",e.converterAttributes),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.converterAttributes),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(11,6,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tb-ellipsis-chip-list",e.converterTelemetry),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.converterTelemetry),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(24,8,"action.edit"))}}function qs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.extension-required"))}function Bs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Ns(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",14)(1,"div",21)(2,"div",49),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-form-field",23),t.ɵɵelement(7,"input",50),t.ɵɵpipe(8,"translate"),t.ɵɵtemplate(9,qs,3,3,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"div",51)(11,"div",35),t.ɵɵtext(12,"gateway.extension-configuration"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",15),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"div",31)(17,"div",32),t.ɵɵtext(18,"gateway.keys"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"div",42)(20,"mat-chip-listbox",43),t.ɵɵtemplate(21,Bs,2,1,"mat-chip",44),t.ɵɵelementStart(22,"mat-chip",45),t.ɵɵelement(23,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(24,"button",47,2),t.ɵɵpipe(26,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(25),r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.CUSTOM))})),t.ɵɵelementStart(27,"tb-icon",48),t.ɵɵtext(28,"edit"),t.ɵɵelementEnd()()()()()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,8,"gateway.extension-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,10,"gateway.extension")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,12,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("converter.custom.extension").hasError("required")&&e.mappingForm.get("converter.custom.extension").touched),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,14,"gateway.extension-configuration-hint")),t.ɵɵadvance(6),t.ɵɵproperty("tb-ellipsis-chip-list",e.customKeys),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.customKeys),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(26,16,"action.edit"))}}function Rs(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21)(1,"div",22),t.ɵɵtext(2,"gateway.topic-filter"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",23),t.ɵɵelement(4,"input",24),t.ɵɵpipe(5,"translate"),t.ɵɵtemplate(6,Es,3,3,"mat-icon",25),t.ɵɵelement(7,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",21)(9,"div",27),t.ɵɵpipe(10,"translate"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",23)(14,"mat-select",28),t.ɵɵtemplate(15,Ts,3,4,"mat-option",29),t.ɵɵelementEnd()()(),t.ɵɵelementContainerStart(16,30),t.ɵɵelementStart(17,"div",31)(18,"div",32),t.ɵɵtext(19,"gateway.payload-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"tb-toggle-select",33),t.ɵɵtemplate(21,Is,3,4,"tb-toggle-option",29),t.ɵɵelementEnd()(),t.ɵɵelementStart(22,"div",34)(23,"div",35),t.ɵɵtext(24,"gateway.data-conversion"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"div",15),t.ɵɵtext(26),t.ɵɵpipe(27,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(28,36),t.ɵɵtemplate(29,ks,1,1,"ng-template",17)(30,Ms,1,5,"ng-template",17)(31,Os,27,10,"div",37)(32,Ns,29,18,"div",37),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(5,15,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("topicFilter").hasError("required")&&e.mappingForm.get("topicFilter").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/topic-filter_fn")("tb-help-popup-style",t.ɵɵpureFunction0(23,ws)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(10,17,"gateway.response-topic-Qos-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,19,"gateway.mqtt-qos")," "),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.qualityTypes),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",e.convertorTypes),t.ɵɵadvance(5),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(27,21,e.DataConversionTranslationsMap.get(e.converterType))," "),t.ɵɵadvance(2),t.ɵɵproperty("formGroupName",e.converterType)("ngSwitch",e.converterType),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConvertorTypeEnum.JSON),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConvertorTypeEnum.BYTES),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.converterType===e.ConvertorTypeEnum.BYTES||e.converterType===e.ConvertorTypeEnum.JSON),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.converterType===e.ConvertorTypeEnum.CUSTOM)}}function _s(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.RequestTypesTranslationsMap.get(e))," ")}}function Ds(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.topic-required"))}function Vs(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21)(1,"div",22),t.ɵɵtext(2,"gateway.topic-filter"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",23),t.ɵɵelement(4,"input",56),t.ɵɵpipe(5,"translate"),t.ɵɵtemplate(6,Ds,3,3,"mat-icon",25),t.ɵɵelement(7,"div",26),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(5,5,"gateway.set")),t.ɵɵproperty("formControl",e.mappingForm.get("requestValue").get(e.requestMappingType).get("topicFilter")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue").get(e.requestMappingType).get("topicFilter").hasError("required")&&e.mappingForm.get("requestValue").get(e.requestMappingType).get("topicFilter").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/topic-filter_fn")("tb-help-popup-style",t.ɵɵpureFunction0(7,ws))}}function As(e,n){if(1&e&&t.ɵɵelement(0,"tb-device-info-table",40),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("deviceInfoType",e.DeviceInfoType.FULL)}}function Gs(e,n){if(1&e&&t.ɵɵelement(0,"tb-device-info-table",40),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("deviceInfoType",e.DeviceInfoType.PARTIAL)}}function js(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SourceTypeTranslationsMap.get(e))," ")}}function Ls(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-info.device-name-expression-required"))}function Us(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SourceTypeTranslationsMap.get(e))," ")}}function $s(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.attribute-name-expression-required"))}function zs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.response-value-expression-required"))}function Ks(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.response-topic-expression-required"))}function Hs(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",34)(1,"div",57),t.ɵɵtext(2,"gateway.from-device-request-settings"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",58),t.ɵɵtext(4," gateway.from-device-request-settings-hint "),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",59)(6,"div",60)(7,"div",61),t.ɵɵtext(8,"gateway.device-info.device-name-expression"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",62)(10,"mat-form-field",23)(11,"mat-select",63),t.ɵɵtemplate(12,js,3,4,"mat-option",29),t.ɵɵelementEnd()(),t.ɵɵelementStart(13,"mat-form-field",23),t.ɵɵelement(14,"input",64),t.ɵɵpipe(15,"translate"),t.ɵɵtemplate(16,Ls,3,3,"mat-icon",25),t.ɵɵelement(17,"div",26),t.ɵɵelementEnd()()(),t.ɵɵelementStart(18,"div",21)(19,"div",22),t.ɵɵtext(20,"gateway.attribute-name-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"div",62)(22,"mat-form-field",23)(23,"mat-select",65),t.ɵɵtemplate(24,Us,3,4,"mat-option",29),t.ɵɵelementEnd()(),t.ɵɵelementStart(25,"mat-form-field",23),t.ɵɵelement(26,"input",66),t.ɵɵpipe(27,"translate"),t.ɵɵtemplate(28,$s,3,3,"mat-icon",25),t.ɵɵelement(29,"div",26),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(30,"div",34)(31,"div",57),t.ɵɵtext(32,"gateway.to-device-response-settings"),t.ɵɵelementEnd(),t.ɵɵelementStart(33,"div",58),t.ɵɵtext(34," gateway.to-device-response-settings-hint "),t.ɵɵelementEnd(),t.ɵɵelementStart(35,"div",21)(36,"div",22),t.ɵɵtext(37,"gateway.response-value-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"mat-form-field",23),t.ɵɵelement(39,"input",67),t.ɵɵpipe(40,"translate"),t.ɵɵtemplate(41,zs,3,3,"mat-icon",25),t.ɵɵelement(42,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(43,"div",21)(44,"div",22),t.ɵɵtext(45,"gateway.response-topic-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(46,"mat-form-field",23),t.ɵɵelement(47,"input",68),t.ɵɵpipe(48,"translate"),t.ɵɵtemplate(49,Ks,3,3,"mat-icon",25),t.ɵɵelement(50,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(51,"div",69)(52,"mat-slide-toggle",70)(53,"mat-label",71),t.ɵɵpipe(54,"translate"),t.ɵɵtext(55),t.ɵɵpipe(56,"translate"),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(12),t.ɵɵproperty("ngForOf",e.sourceTypes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(15,20,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeRequests.deviceInfo.deviceNameExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeRequests.deviceInfo.deviceNameExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(32,ws)),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",e.sourceTypes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(27,22,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeRequests.attributeNameExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeRequests.attributeNameExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(33,ws)),t.ɵɵadvance(10),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(40,24,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeRequests.valueExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeRequests.valueExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(34,ws)),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(48,26,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeRequests.topicExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeRequests.topicExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(35,ws)),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(54,28,"gateway.retain-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(56,30,"gateway.retain")," ")}}function Qs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-filter-required"))}function Ws(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.attribute-filter-required"))}function Js(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.response-value-expression-required"))}function Ys(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.response-topic-expression-required"))}function Xs(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21)(1,"div",49),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",23),t.ɵɵelement(6,"input",72),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,Qs,3,3,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",21)(10,"div",49),t.ɵɵpipe(11,"translate"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-form-field",23),t.ɵɵelement(15,"input",73),t.ɵɵpipe(16,"translate"),t.ɵɵtemplate(17,Ws,3,3,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",21)(19,"div",22),t.ɵɵtext(20,"gateway.response-value-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",23),t.ɵɵelement(22,"input",67),t.ɵɵpipe(23,"translate"),t.ɵɵtemplate(24,Js,3,3,"mat-icon",25),t.ɵɵelement(25,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(26,"div",21)(27,"div",22),t.ɵɵtext(28,"gateway.response-topic-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-form-field",23),t.ɵɵelement(30,"input",68),t.ɵɵpipe(31,"translate"),t.ɵɵtemplate(32,Ys,3,3,"mat-icon",25),t.ɵɵelement(33,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(34,"div",69)(35,"mat-slide-toggle",70)(36,"mat-label",71),t.ɵɵpipe(37,"translate"),t.ɵɵtext(38),t.ɵɵpipe(39,"translate"),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,18,"gateway.device-name-filter-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,20,"gateway.device-name-filter")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,22,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeUpdates.deviceNameFilter").hasError("required")&&e.mappingForm.get("requestValue.attributeUpdates.deviceNameFilter").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(11,24,"gateway.attribute-filter-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(13,26,"gateway.attribute-filter")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,28,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeUpdates.attributeFilter").hasError("required")&&e.mappingForm.get("requestValue.attributeUpdates.attributeFilter").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(23,30,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeUpdates.valueExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeUpdates.valueExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(38,ws)),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(31,32,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeUpdates.topicExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeUpdates.topicExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(39,ws)),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(37,34,"gateway.retain-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(39,36,"gateway.retain")," ")}}function Zs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-filter-required"))}function el(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.method-filter-required"))}function tl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.request-topic-expression-required"))}function nl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-expression-required"))}function al(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.response-topic-expression-required"))}function rl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(4);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.QualityTranslationsMap.get(e))," ")}}function il(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵtext(1," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(4);t.ɵɵproperty("matTooltip",e.responseTimeoutErrorTooltip)}}function ol(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",21)(2,"div",22),t.ɵɵtext(3,"gateway.response-topic-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",23),t.ɵɵelement(5,"input",78),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,al,3,3,"mat-icon",25),t.ɵɵelement(8,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",21)(10,"div",27),t.ɵɵpipe(11,"translate"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-form-field",23)(15,"mat-select",79),t.ɵɵtemplate(16,rl,3,4,"mat-option",29),t.ɵɵelementEnd()()(),t.ɵɵelementStart(17,"div",21)(18,"div",22),t.ɵɵtext(19,"gateway.response-timeout"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"mat-form-field",23),t.ɵɵelement(21,"input",80),t.ɵɵpipe(22,"translate"),t.ɵɵtemplate(23,il,2,1,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(3);t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,9,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.responseTopicExpression").hasError("required")&&e.mappingForm.get("requestValue.serverSideRpc.responseTopicExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(17,ws)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(11,11,"gateway.response-topic-Qos-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(13,13,"gateway.response-topic-Qos")," "),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.qualityTypes),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(22,15,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(e.mappingForm.get("requestValue.serverSideRpc.responseTimeout").hasError("required")||e.mappingForm.get("requestValue.serverSideRpc.responseTimeout").hasError("min"))&&e.mappingForm.get("requestValue.serverSideRpc.responseTimeout").touched)}}function sl(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",74)(1,"tb-toggle-select",33)(2,"tb-toggle-option",39),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"tb-toggle-option",39),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(8,"div",21)(9,"div",49),t.ɵɵpipe(10,"translate"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",23),t.ɵɵelement(14,"input",72),t.ɵɵpipe(15,"translate"),t.ɵɵtemplate(16,Zs,3,3,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"div",21)(18,"div",49),t.ɵɵpipe(19,"translate"),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"mat-form-field",23),t.ɵɵelement(23,"input",75),t.ɵɵpipe(24,"translate"),t.ɵɵtemplate(25,el,3,3,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementStart(26,"div",21)(27,"div",22),t.ɵɵtext(28,"gateway.request-topic-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-form-field",23),t.ɵɵelement(30,"input",76),t.ɵɵpipe(31,"translate"),t.ɵɵtemplate(32,tl,3,3,"mat-icon",25),t.ɵɵelement(33,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(34,"div",21)(35,"div",22),t.ɵɵtext(36,"gateway.value-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(37,"mat-form-field",23),t.ɵɵelement(38,"input",67),t.ɵɵpipe(39,"translate"),t.ɵɵtemplate(40,nl,3,3,"mat-icon",25),t.ɵɵelement(41,"div",26),t.ɵɵelementEnd()(),t.ɵɵtemplate(42,ol,24,18,"ng-container",77)),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵproperty("value",e.ServerSideRPCType.TWO_WAY),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,21,"gateway.with-response")," "),t.ɵɵadvance(2),t.ɵɵproperty("value",e.ServerSideRPCType.ONE_WAY),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,23,"gateway.without-response")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(10,25,"gateway.device-name-filter-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,27,"gateway.device-name-filter")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(15,29,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.deviceNameFilter").hasError("required")&&e.mappingForm.get("requestValue.serverSideRpc.deviceNameFilter").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(19,31,"gateway.method-filter-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(21,33,"gateway.method-filter")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(24,35,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.methodFilter").hasError("required")&&e.mappingForm.get("requestValue.serverSideRpc.methodFilter").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(31,37,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.requestTopicExpression").hasError("required")&&e.mappingForm.get("requestValue.serverSideRpc.requestTopicExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(41,ws)),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(39,39,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.valueExpression").hasError("required")&&e.mappingForm.get("requestValue.serverSideRpc.valueExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(42,ws)),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.type").value===e.ServerSideRPCType.TWO_WAY)}}function ll(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21)(1,"div",32),t.ɵɵtext(2,"gateway.request-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",23)(4,"mat-select",52),t.ɵɵtemplate(5,_s,3,4,"mat-option",29),t.ɵɵelementEnd()()(),t.ɵɵelementContainerStart(6,53)(7,54),t.ɵɵtemplate(8,Vs,8,8,"div",55)(9,As,1,1,"ng-template",17)(10,Gs,1,1,"ng-template",17)(11,Hs,57,36,"ng-template",17)(12,Xs,40,40,"ng-template",17)(13,sl,43,43,"ng-template",17),t.ɵɵelementContainerEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.requestTypes),t.ɵɵadvance(2),t.ɵɵproperty("formGroup",e.mappingForm.get("requestValue").get(e.requestMappingType))("ngSwitch",e.requestMappingType),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.requestMappingType===e.RequestTypeEnum.ATTRIBUTE_REQUEST||e.requestMappingType===e.RequestTypeEnum.CONNECT_REQUEST||e.requestMappingType===e.RequestTypeEnum.DISCONNECT_REQUEST),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.RequestTypeEnum.CONNECT_REQUEST),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.RequestTypeEnum.DISCONNECT_REQUEST),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.RequestTypeEnum.ATTRIBUTE_REQUEST),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.RequestTypeEnum.ATTRIBUTE_UPDATE),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.RequestTypeEnum.SERVER_SIDE_RPC)}}function pl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SourceTypeTranslationsMap.get(e))," ")}}function cl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-node-required"))}function dl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function ml(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function ul(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function gl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function hl(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",21)(1,"div",81)(2,"div",82),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"div",83)(7,"mat-form-field",23)(8,"mat-select",84),t.ɵɵtemplate(9,pl,3,4,"mat-option",29),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",85),t.ɵɵelement(11,"input",86),t.ɵɵpipe(12,"translate"),t.ɵɵtemplate(13,cl,3,3,"mat-icon",25),t.ɵɵelement(14,"div",26),t.ɵɵpipe(15,"getConnectorMappingHelpLink"),t.ɵɵelementEnd()()(),t.ɵɵelement(16,"tb-device-info-table",87),t.ɵɵelementStart(17,"div",31)(18,"div",32),t.ɵɵtext(19,"gateway.attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"div",42)(21,"mat-chip-listbox",43),t.ɵɵtemplate(22,dl,2,1,"mat-chip",44),t.ɵɵelementStart(23,"mat-chip",45),t.ɵɵelement(24,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(25,"button",47,3),t.ɵɵpipe(27,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(26),r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.ATTRIBUTES))})),t.ɵɵelementStart(28,"tb-icon",48),t.ɵɵtext(29,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(30,"div",31)(31,"div",32),t.ɵɵtext(32,"gateway.timeseries"),t.ɵɵelementEnd(),t.ɵɵelementStart(33,"div",42)(34,"mat-chip-listbox",43),t.ɵɵtemplate(35,ml,2,1,"mat-chip",44),t.ɵɵelementStart(36,"mat-chip",45),t.ɵɵelement(37,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(38,"button",47,4),t.ɵɵpipe(40,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(39),r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.TIMESERIES))})),t.ɵɵelementStart(41,"tb-icon",48),t.ɵɵtext(42,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(43,"div",31)(44,"div",32),t.ɵɵtext(45,"gateway.attribute-updates"),t.ɵɵelementEnd(),t.ɵɵelementStart(46,"div",42)(47,"mat-chip-listbox",43),t.ɵɵtemplate(48,ul,2,1,"mat-chip",44),t.ɵɵelementStart(49,"mat-chip",45),t.ɵɵelement(50,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(51,"button",47,5),t.ɵɵpipe(53,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(52),r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.ATTRIBUTES_UPDATES))})),t.ɵɵelementStart(54,"tb-icon",48),t.ɵɵtext(55,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(56,"div",31)(57,"div",32),t.ɵɵtext(58,"gateway.rpc-methods"),t.ɵɵelementEnd(),t.ɵɵelementStart(59,"div",42)(60,"mat-chip-listbox",43),t.ɵɵtemplate(61,gl,2,1,"mat-chip",44),t.ɵɵelementStart(62,"mat-chip",45),t.ɵɵelement(63,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(64,"button",47,6),t.ɵɵpipe(66,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(65),r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.RPC_METHODS))})),t.ɵɵelementStart(67,"tb-icon",48),t.ɵɵtext(68,"edit"),t.ɵɵelementEnd()()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,21,"gateway.device-node-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,23,"gateway.device-node")," "),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",t.ɵɵpureFunction2(38,Ss,e.OPCUaSourceTypesEnum.PATH,e.OPCUaSourceTypesEnum.IDENTIFIER)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(12,25,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("deviceNodePattern").hasError("required")&&e.mappingForm.get("deviceNodePattern").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup",t.ɵɵpipeBind2(15,27,"device-node",e.mappingForm.get("deviceNodeSource").value))("tb-help-popup-style",t.ɵɵpureFunction0(41,ws)),t.ɵɵadvance(2),t.ɵɵproperty("sourceTypes",e.OPCUaSourceTypes)("deviceInfoType",e.DeviceInfoType.FULL),t.ɵɵadvance(5),t.ɵɵproperty("tb-ellipsis-chip-list",e.opcAttributes),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.opcAttributes),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(27,30,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tb-ellipsis-chip-list",e.opcTelemetry),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.opcTelemetry),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(40,32,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tb-ellipsis-chip-list",e.opcAttributesUpdates),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.opcAttributesUpdates),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(53,34,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tb-ellipsis-chip-list",e.opcRpcMethods),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.opcRpcMethods),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(66,36,"action.edit"))}}class yl extends C{constructor(e,t,n,a,r,i,o,s,l){super(e,t,a),this.store=e,this.router=t,this.data=n,this.dialogRef=a,this.fb=r,this.popoverService=i,this.renderer=o,this.viewContainerRef=s,this.translate=l,this.MappingType=ha,this.qualityTypes=Ia,this.QualityTranslationsMap=ia,this.convertorTypes=Object.values(na),this.ConvertorTypeEnum=na,this.ConvertorTypeTranslationsMap=oa,this.sourceTypes=Object.values(aa),this.OPCUaSourceTypes=Object.values(ma),this.OPCUaSourceTypesEnum=ma,this.sourceTypesEnum=aa,this.SourceTypeTranslationsMap=xa,this.requestTypes=Object.values(sa),this.RequestTypeEnum=sa,this.RequestTypesTranslationsMap=la,this.DeviceInfoType=Xa,this.ServerSideRPCType=Fa,this.MappingKeysType=Ca,this.MappingHintTranslationsMap=Pa,this.MappingTypeTranslationsMap=ya,this.DataConversionTranslationsMap=pa,this.HelpLinkByMappingTypeMap=Ma,this.keysPopupClosed=!0,this.destroy$=new ie,this.createMappingForm()}get converterAttributes(){if(this.converterType)return this.mappingForm.get("converter").get(this.converterType).value.attributes.map((e=>e.key))}get converterTelemetry(){if(this.converterType)return this.mappingForm.get("converter").get(this.converterType).value.timeseries.map((e=>e.key))}get opcAttributes(){return this.mappingForm.get("attributes").value?.map((e=>e.key))||[]}get opcTelemetry(){return this.mappingForm.get("timeseries").value?.map((e=>e.key))||[]}get opcRpcMethods(){return this.mappingForm.get("rpc_methods").value?.map((e=>e.method))||[]}get opcAttributesUpdates(){return this.mappingForm.get("attributes_updates")?.value?.map((e=>e.key))||[]}get converterType(){return this.mappingForm.get("converter").get("type").value}get customKeys(){return Object.keys(this.mappingForm.get("converter").get("custom").value.extensionConfig)}get requestMappingType(){return this.mappingForm.get("requestType").value}get responseTimeoutErrorTooltip(){const e=this.mappingForm.get("requestValue.serverSideRpc.responseTimeout");return e.hasError("required")?this.translate.instant("gateway.response-timeout-required"):e.hasError("min")?this.translate.instant("gateway.response-timeout-limits-error",{min:1}):""}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),super.ngOnDestroy()}createMappingForm(){switch(this.data.mappingType){case ha.DATA:this.mappingForm=this.fb.group({}),this.createDataMappingForm();break;case ha.REQUESTS:this.mappingForm=this.fb.group({}),this.createRequestMappingForm();break;case ha.OPCUA:this.createOPCUAMappingForm()}}cancel(){this.keysPopupClosed&&this.dialogRef.close(null)}add(){this.mappingForm.valid&&this.dialogRef.close(this.prepareMappingData())}manageKeys(e,t,n){e&&e.stopPropagation();const a=t._elementRef.nativeElement;if(this.popoverService.hasPopover(a))this.popoverService.hidePopover(a);else{const e=(this.data.mappingType!==ha.OPCUA?this.mappingForm.get("converter").get(this.converterType):this.mappingForm).get(n),t={keys:e.value,keysType:n,rawData:this.mappingForm.get("converter.type")?.value===na.BYTES,panelTitle:wa.get(n),addKeyTitle:Sa.get(n),deleteKeyTitle:Ea.get(n),noKeysText:Ta.get(n),withReportStrategy:this.data.withReportStrategy};this.data.mappingType===ha.OPCUA&&(t.valueTypeKeys=Object.values(ma),t.valueTypeEnum=ma,t.valueTypes=xa),this.keysPopupClosed=!1;const r=this.popoverService.displayPopover(a,this.renderer,this.viewContainerRef,Cs,"leftBottom",!1,null,t,{},{},{},!0);r.tbComponentRef.instance.popover=r,r.tbComponentRef.instance.keysDataApplied.pipe(de(this.destroy$)).subscribe((t=>{r.hide(),e.patchValue(t),e.markAsDirty()})),r.tbHideStart.pipe(de(this.destroy$)).subscribe((()=>{this.keysPopupClosed=!0}))}}prepareMappingData(){const e=this.mappingForm.value;switch(this.data.mappingType){case ha.DATA:const{converter:t,topicFilter:n,subscriptionQos:a}=e;return{topicFilter:n,subscriptionQos:a,converter:{type:t.type,...t[t.type]}};case ha.REQUESTS:return{requestType:e.requestType,requestValue:e.requestValue[e.requestType]};default:return e}}getFormValueData(){if(this.data.value&&Object.keys(this.data.value).length)switch(this.data.mappingType){case ha.DATA:const{converter:e,topicFilter:t,subscriptionQos:n}=this.data.value;return{topicFilter:t,subscriptionQos:n,converter:{type:e.type,[e.type]:{...e}}};case ha.REQUESTS:return{requestType:this.data.value.requestType,requestValue:{[this.data.value.requestType]:this.data.value.requestValue}};default:return this.data.value}}createDataMappingForm(){this.mappingForm.addControl("topicFilter",this.fb.control("",[J.required,J.pattern(Re)])),this.mappingForm.addControl("subscriptionQos",this.fb.control(0)),this.mappingForm.addControl("converter",this.fb.group({type:[na.JSON,[]],json:this.fb.group({deviceInfo:[{},[]],attributes:[[],[]],timeseries:[[],[]]}),bytes:this.fb.group({deviceInfo:[{},[]],attributes:[[],[]],timeseries:[[],[]]}),custom:this.fb.group({extension:["",[J.required,J.pattern(Re)]],extensionConfig:[{},[]]})})),this.mappingForm.patchValue(this.getFormValueData()),this.mappingForm.get("converter.type").valueChanges.pipe(be(this.mappingForm.get("converter.type").value),de(this.destroy$)).subscribe((e=>{const t=this.mappingForm.get("converter");t.get("json").disable({emitEvent:!1}),t.get("bytes").disable({emitEvent:!1}),t.get("custom").disable({emitEvent:!1}),t.get(e).enable({emitEvent:!1})}))}createRequestMappingForm(){this.mappingForm.addControl("requestType",this.fb.control(sa.CONNECT_REQUEST,[])),this.mappingForm.addControl("requestValue",this.fb.group({connectRequests:this.fb.group({topicFilter:["",[J.required,J.pattern(Re)]],deviceInfo:[{},[]]}),disconnectRequests:this.fb.group({topicFilter:["",[J.required,J.pattern(Re)]],deviceInfo:[{},[]]}),attributeRequests:this.fb.group({topicFilter:["",[J.required,J.pattern(Re)]],deviceInfo:this.fb.group({deviceNameExpressionSource:[aa.MSG,[]],deviceNameExpression:["",[J.required]]}),attributeNameExpressionSource:[aa.MSG,[]],attributeNameExpression:["",[J.required,J.pattern(Re)]],topicExpression:["",[J.required,J.pattern(Re)]],valueExpression:["",[J.required,J.pattern(Re)]],retain:[!1,[]]}),attributeUpdates:this.fb.group({deviceNameFilter:["",[J.required,J.pattern(Re)]],attributeFilter:["",[J.required,J.pattern(Re)]],topicExpression:["",[J.required,J.pattern(Re)]],valueExpression:["",[J.required,J.pattern(Re)]],retain:[!0,[]]}),serverSideRpc:this.fb.group({type:[Fa.TWO_WAY,[]],deviceNameFilter:["",[J.required,J.pattern(Re)]],methodFilter:["",[J.required,J.pattern(Re)]],requestTopicExpression:["",[J.required,J.pattern(Re)]],responseTopicExpression:["",[J.required,J.pattern(Re)]],valueExpression:["",[J.required,J.pattern(Re)]],responseTopicQoS:[0,[]],responseTimeout:[1e4,[J.required,J.min(1)]]})})),this.mappingForm.get("requestType").valueChanges.pipe(be(this.mappingForm.get("requestType").value),de(this.destroy$)).subscribe((e=>{const t=this.mappingForm.get("requestValue");t.get("connectRequests").disable({emitEvent:!1}),t.get("disconnectRequests").disable({emitEvent:!1}),t.get("attributeRequests").disable({emitEvent:!1}),t.get("attributeUpdates").disable({emitEvent:!1}),t.get("serverSideRpc").disable({emitEvent:!1}),t.get(e).enable()})),this.mappingForm.get("requestValue.serverSideRpc.type").valueChanges.pipe(de(this.destroy$)).subscribe((e=>{const t=this.mappingForm.get("requestValue.serverSideRpc");e===Fa.ONE_WAY?(t.get("responseTopicExpression").disable({emitEvent:!1}),t.get("responseTopicQoS").disable({emitEvent:!1}),t.get("responseTimeout").disable({emitEvent:!1})):(t.get("responseTopicExpression").enable({emitEvent:!1}),t.get("responseTopicQoS").enable({emitEvent:!1}),t.get("responseTimeout").enable({emitEvent:!1}))})),this.mappingForm.patchValue(this.getFormValueData())}createOPCUAMappingForm(){this.mappingForm=this.fb.group({deviceNodeSource:[ma.PATH,[]],deviceNodePattern:["",[J.required]],deviceInfo:[{},[]],attributes:[[],[]],timeseries:[[],[]],rpc_methods:[[],[]],attributes_updates:[[],[]]}),this.mappingForm.patchValue(this.getFormValueData())}static{this.ɵfac=function(e){return new(e||yl)(t.ɵɵdirectiveInject(ae.Store),t.ɵɵdirectiveInject(re.Router),t.ɵɵdirectiveInject(te),t.ɵɵdirectiveInject(ne.MatDialogRef),t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(qe.TbPopoverService),t.ɵɵdirectiveInject(t.Renderer2),t.ɵɵdirectiveInject(t.ViewContainerRef),t.ɵɵdirectiveInject(ke.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:yl,selectors:[["tb-mapping-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:26,vars:19,consts:[["attributesButton",""],["telemetryButton",""],["keysButton",""],["opcAttributesButton",""],["opcTelemetryButton",""],["attributesUpdatesButton",""],["rpcMethodsButton",""],[1,"key-mapping",3,"formGroup"],["color","primary"],[1,"flex-1"],[3,"tb-help"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content",""],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-hint","tb-primary-fill"],[3,"ngSwitch"],[3,"ngSwitchCase"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","primary","type","button","cdkFocusInitial","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex"],["matInput","","name","value","formControlName","topicFilter",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],[1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["formControlName","subscriptionQos"],[3,"value",4,"ngFor","ngForOf"],["formGroupName","converter"],[1,"tb-form-row","space-between","tb-flex"],["translate","",1,"fixed-title-width"],["formControlName","type","appearance","fill"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[3,"formGroupName","ngSwitch"],["class","tb-form-panel no-border no-padding",4,"ngIf"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[3,"value"],["formControlName","deviceInfo","required","true",3,"deviceInfoType"],["formControlName","deviceInfo","required","true",3,"deviceInfoType","sourceTypes"],[1,"tb-flex","ellipsis-chips-container"],[1,"tb-flex",3,"tb-ellipsis-chip-list"],[4,"ngFor","ngForOf"],[1,"mat-mdc-chip","ellipsis-chip"],[1,"ellipsis-text"],["type","button","mat-icon-button","","color","primary","matTooltipPosition","above",3,"click","matTooltip"],["matButtonIcon",""],[1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","name","value","formControlName","extension",3,"placeholder"],[1,"tb-form-row","space-between","same-padding","tb-flex","column"],["formControlName","requestType"],["formGroupName","requestValue"],[3,"formGroup","ngSwitch"],["class","tb-form-row column-xs",4,"ngIf"],["matInput","","name","value",3,"formControl","placeholder"],["translate","",1,"tb-form-panel-title","tb-required"],["translate","",1,"tb-form-hint","tb-primary-fill"],["formGroupName","deviceInfo",1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-flex","no-flex","align-center"],["translate","",1,"tb-required"],[1,"flex","flex-1"],["formControlName","deviceNameExpressionSource"],["matInput","","name","value","formControlName","deviceNameExpression",3,"placeholder"],["formControlName","attributeNameExpressionSource"],["matInput","","name","value","formControlName","attributeNameExpression",3,"placeholder"],["matInput","","name","value","formControlName","valueExpression",3,"placeholder"],["matInput","","name","value","formControlName","topicExpression",3,"placeholder"],[1,"tb-form-row"],["formControlName","retain",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["matInput","","name","value","formControlName","deviceNameFilter",3,"placeholder"],["matInput","","name","value","formControlName","attributeFilter",3,"placeholder"],[1,"tb-flex","row","center","align-center","no-gap","fill-width"],["matInput","","name","value","formControlName","methodFilter",3,"placeholder"],["matInput","","name","value","formControlName","requestTopicExpression",3,"placeholder"],[4,"ngIf"],["matInput","","name","value","formControlName","responseTopicExpression",3,"placeholder"],["formControlName","responseTopicQoS"],["matInput","","name","value","type","number","min","1","formControlName","responseTimeout",3,"placeholder"],["translate","",1,"tb-flex","no-flex","align-center"],[1,"tb-required",3,"tb-hint-tooltip-icon"],[1,"tb-flex","device-config"],["formControlName","deviceNodeSource"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","device-node-pattern-field"],["matInput","","name","value","formControlName","deviceNodePattern",3,"placeholder"],["formControlName","deviceInfo","required","true",3,"sourceTypes","deviceInfoType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",7)(1,"mat-toolbar",8)(2,"h2"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",9)(6,"div",10),t.ɵɵelementStart(7,"button",11),t.ɵɵlistener("click",(function(){return n.cancel()})),t.ɵɵelementStart(8,"mat-icon",12),t.ɵɵtext(9,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",13)(11,"div",14)(12,"div",15),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(15,16),t.ɵɵtemplate(16,Rs,33,24,"ng-template",17)(17,ll,14,9,"ng-template",17)(18,hl,69,42,"ng-template",17),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()(),t.ɵɵelementStart(19,"div",18)(20,"button",19),t.ɵɵlistener("click",(function(){return n.cancel()})),t.ɵɵtext(21),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"button",20),t.ɵɵlistener("click",(function(){return n.add()})),t.ɵɵtext(24),t.ɵɵpipe(25,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.mappingForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,11,n.MappingTypeTranslationsMap.get(null==n.data?null:n.data.mappingType))),t.ɵɵadvance(3),t.ɵɵproperty("tb-help",n.HelpLinkByMappingTypeMap.get(n.data.mappingType)),t.ɵɵadvance(7),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(14,13,n.MappingHintTranslationsMap.get(null==n.data?null:n.data.mappingType))," "),t.ɵɵadvance(2),t.ɵɵproperty("ngSwitch",n.data.mappingType),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingType.DATA),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingType.REQUESTS),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingType.OPCUA),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(22,15,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.mappingForm.invalid||!n.mappingForm.dirty||!n.keysPopupClosed),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(25,17,n.data.buttonTitle)," "))},dependencies:t.ɵɵgetComponentDepsFactory(yl,[B,g,Eo,Qn,$o,Cs]),styles:['@charset "UTF-8";[_nghost-%COMP%]{display:grid;height:100%}[_nghost-%COMP%] .key-mapping[_ngcontent-%COMP%]{max-width:900px;display:flex;flex-direction:column}[_nghost-%COMP%] .key-mapping[_ngcontent-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{min-height:64px}[_nghost-%COMP%] .key-mapping[_ngcontent-%COMP%] tb-toggle-select[_ngcontent-%COMP%]{padding:4px 0}[_nghost-%COMP%] .mat-mdc-dialog-content[_ngcontent-%COMP%]{height:670px}[_nghost-%COMP%] .ellipsis-chips-container[_ngcontent-%COMP%]{max-width:70%}[_nghost-%COMP%] .key-mapping .mat-mdc-chip-listbox .mdc-evolution-chip-set__chips{justify-content:flex-end;align-items:center;flex-wrap:nowrap}[_nghost-%COMP%] .tb-form-row .fixed-title-width{min-width:40px;width:35%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .tb-form-row .mat-mdc-form-field{width:0}[_nghost-%COMP%] .see-example{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}[_nghost-%COMP%] .device-config{gap:12px;padding-left:10px;padding-right:10px}[_nghost-%COMP%] .device-node-pattern-field{flex-basis:3%}']})}}e("MappingDialogComponent",yl);const fl=["searchInput"],vl=()=>({minWidth:"96px",textAlign:"center"});function bl(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",7)(1,"div",24)(2,"span",25),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()(),t.ɵɵelement(5,"span",9),t.ɵɵelementStart(6,"button",11),t.ɵɵpipe(7,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.manageMapping(n))})),t.ɵɵelementStart(8,"mat-icon"),t.ɵɵtext(9,"add"),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"button",11),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.enterFilterMode())})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"search"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,e.mappingTypeTranslationsMap.get(e.mappingType))),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,5,"action.add")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(11,7,"action.search"))}}function xl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-header-cell",29),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext();t.ɵɵclassProp("request-column",n.mappingType===n.mappingTypeEnum.REQUESTS),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,3,e.title)," ")}}function Cl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",30),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext().$implicit,r=t.ɵɵnextContext();t.ɵɵclassProp("request-column",r.mappingType===r.mappingTypeEnum.REQUESTS),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e[a.def]," ")}}function wl(e,n){if(1&e&&(t.ɵɵelementContainerStart(0,26),t.ɵɵtemplate(1,xl,3,5,"mat-header-cell",27)(2,Cl,2,3,"mat-cell",28),t.ɵɵelementContainerEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("matColumnDef",e.def)}}function Sl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell"),t.ɵɵelement(1,"div",31)(2,"div",32),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵstyleMap(t.ɵɵpureFunction0(2,vl)))}function El(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",11),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageMapping(n,a))})),t.ɵɵelementStart(2,"tb-icon"),t.ɵɵtext(3,"edit"),t.ɵɵelementEnd()(),t.ɵɵelementStart(4,"button",11),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteMapping(n,a))})),t.ɵɵelementStart(6,"tb-icon"),t.ɵɵtext(7,"delete"),t.ɵɵelementEnd()()}2&e&&(t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,2,"action.edit")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(5,4,"action.delete")))}function Tl(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtemplate(1,El,8,6,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(3,"div",33),t.ɵɵelementContainer(4,34),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",35)(6,"button",36),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(7,"mat-icon",37),t.ɵɵtext(8,"more_vert"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"mat-menu",38,2),t.ɵɵelementContainer(11,34),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(2),n=t.ɵɵreference(10);t.ɵɵadvance(3),t.ɵɵstyleMap(t.ɵɵpureFunction0(5,vl)),t.ɵɵadvance(),t.ɵɵproperty("ngTemplateOutlet",e),t.ɵɵadvance(2),t.ɵɵproperty("matMenuTriggerFor",n),t.ɵɵadvance(5),t.ɵɵproperty("ngTemplateOutlet",e)}}function Il(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",39)}function kl(e,n){1&e&&t.ɵɵelement(0,"mat-row")}class Ml{set mappingType(e){this.mappingTypeValue!==e&&(this.mappingTypeValue=e)}get mappingType(){return this.mappingTypeValue}constructor(e,t,n,a){this.translate=e,this.dialog=t,this.dialogService=n,this.fb=a,this.required=!1,this.withReportStrategy=!0,this.mappingTypeTranslationsMap=ya,this.mappingTypeEnum=ha,this.displayedColumns=[],this.mappingColumns=[],this.textSearchMode=!1,this.hidePageSize=!1,this.activeValue=!1,this.dirtyValue=!1,this.textSearch=this.fb.control("",{nonNullable:!0}),this.onChange=()=>{},this.onTouched=()=>{},this.destroy$=new ie,this.mappingFormGroup=this.fb.array([]),this.dirtyValue=!this.activeValue,this.dataSource=new Pl}ngOnInit(){this.setMappingColumns(),this.displayedColumns.push(...this.mappingColumns.map((e=>e.def)),"actions"),this.mappingFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.updateTableData(e),this.onChange(e),this.onTouched()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}ngAfterViewInit(){this.textSearch.valueChanges.pipe(xe(150),Ce(((e,t)=>(e??"")===t.trim())),de(this.destroy$)).subscribe((e=>{const t=e.trim();this.updateTableData(this.mappingFormGroup.value,t.trim())}))}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){this.mappingFormGroup.clear(),this.pushDataAsFormArrays(e)}validate(){return!this.required||this.mappingFormGroup.controls.length?null:{mappingFormGroup:{valid:!1}}}enterFilterMode(){this.textSearchMode=!0,setTimeout((()=>{this.searchInputField.nativeElement.focus(),this.searchInputField.nativeElement.setSelectionRange(0,0)}),10)}exitFilterMode(){this.updateTableData(this.mappingFormGroup.value),this.textSearchMode=!1,this.textSearch.reset()}manageMapping(e,t){e&&e.stopPropagation();const n=_(t)?this.mappingFormGroup.at(t).value:{};this.dialog.open(yl,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{mappingType:this.mappingType,value:n,buttonTitle:U(t)?"action.add":"action.apply",withReportStrategy:this.withReportStrategy}}).afterClosed().pipe(ve(1),de(this.destroy$)).subscribe((e=>{e&&(_(t)?this.mappingFormGroup.at(t).patchValue(e):this.pushDataAsFormArrays([e]),this.mappingFormGroup.markAsDirty())}))}updateTableData(e,t){let n=e.map((e=>this.getMappingValue(e)));t&&(n=n.filter((e=>Object.values(e).some((e=>e.toString().toLowerCase().includes(t.toLowerCase())))))),this.dataSource.loadData(n)}deleteMapping(e,t){e&&e.stopPropagation(),this.dialogService.confirm(this.translate.instant("gateway.delete-mapping-title"),"",this.translate.instant("action.no"),this.translate.instant("action.yes"),!0).subscribe((e=>{e&&(this.mappingFormGroup.removeAt(t),this.mappingFormGroup.markAsDirty())}))}pushDataAsFormArrays(e){e?.length&&e.forEach((e=>this.mappingFormGroup.push(this.fb.control(e))))}getMappingValue(e){switch(this.mappingType){case ha.DATA:const t=oa.get(e.converter?.type);return{topicFilter:e.topicFilter,QoS:e.subscriptionQos,converter:t?this.translate.instant(t):""};case ha.REQUESTS:let n;const a=e;return n=a.requestType===sa.ATTRIBUTE_UPDATE?a.requestValue.attributeFilter:a.requestType===sa.SERVER_SIDE_RPC?a.requestValue.methodFilter:a.requestValue.topicFilter,{requestType:e.requestType,type:this.translate.instant(la.get(e.requestType)),details:n};case ha.OPCUA:const r=e.deviceInfo?.deviceNameExpression,i=e.deviceInfo?.deviceProfileExpression,{deviceNodePattern:o}=e;return{deviceNodePattern:o,deviceNamePattern:r,deviceProfileExpression:i};default:return{}}}setMappingColumns(){switch(this.mappingType){case ha.DATA:this.mappingColumns.push({def:"topicFilter",title:"gateway.topic-filter"},{def:"QoS",title:"gateway.mqtt-qos"},{def:"converter",title:"gateway.payload-type"});break;case ha.REQUESTS:this.mappingColumns.push({def:"type",title:"gateway.type"},{def:"details",title:"gateway.details"});break;case ha.OPCUA:this.mappingColumns.push({def:"deviceNodePattern",title:"gateway.device-node"},{def:"deviceNamePattern",title:"gateway.device-name"},{def:"deviceProfileExpression",title:"gateway.device-profile"})}}static{this.ɵfac=function(e){return new(e||Ml)(t.ɵɵdirectiveInject(ke.TranslateService),t.ɵɵdirectiveInject(ne.MatDialog),t.ɵɵdirectiveInject(R.DialogService),t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ml,selectors:[["tb-mapping-table"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(fl,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.searchInputField=e.first)}},inputs:{required:"required",withReportStrategy:"withReportStrategy",mappingType:"mappingType"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Ml)),multi:!0},{provide:X,useExisting:i((()=>Ml)),multi:!0}]),t.ɵɵStandaloneFeature],decls:40,vars:33,consts:[["searchInput",""],["rowActions",""],["cellActionsMenu","matMenu"],[1,"tb-mapping-table","tb-absolute-fill"],[1,"tb-mapping-table-content","flex","flex-col"],[1,"mat-mdc-table-toolbar"],["class","mat-toolbar-tools",4,"ngIf"],[1,"mat-toolbar-tools"],["mat-icon-button","","matTooltipPosition","above",3,"matTooltip"],[1,"flex-1"],["matInput","",3,"formControl","placeholder"],["mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],[1,"table-container"],["mat-table","",3,"dataSource"],[3,"matColumnDef",4,"ngFor","ngForOf"],["matColumnDef","actions","stickyEnd",""],[4,"matHeaderCellDef"],[4,"matCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],[4,"matRowDef","matRowDefColumns"],[1,"mat-headline-5","tb-absolute-fill","tb-add-new","justify-center","items-center"],["mat-button","",1,"connector",3,"click"],[1,"tb-mat-96"],["translate","",1,"no-data-found","justify-center","items-center"],[1,"title-container"],[1,"tb-mapping-table-title"],[3,"matColumnDef"],["class","table-value-column",3,"request-column",4,"matHeaderCellDef"],["tbTruncateWithTooltip","","class","table-value-column",3,"request-column",4,"matCellDef"],[1,"table-value-column"],["tbTruncateWithTooltip","",1,"table-value-column"],[1,"gt-md:!hidden",2,"width","48px","min-width","48px","max-width","48px"],[1,"lt-lg:!hidden"],[1,"flex","flex-1","flex-row","justify-end","items-stretch","lt-lg:!hidden"],[3,"ngTemplateOutlet"],[1,"gt-md:!hidden"],["mat-icon-button","",3,"click","matMenuTriggerFor"],[1,"material-icons"],["xPosition","before"],[1,"mat-row-select"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",3)(1,"div",4)(2,"mat-toolbar",5),t.ɵɵtemplate(3,bl,14,9,"div",6),t.ɵɵpipe(4,"async"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-toolbar",5)(6,"div",7)(7,"button",8),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"mat-icon"),t.ɵɵtext(10,"search"),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",9)(12,"mat-label"),t.ɵɵtext(13," "),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",10,0),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"button",11),t.ɵɵpipe(18,"translate"),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.exitFilterMode())})),t.ɵɵelementStart(19,"mat-icon"),t.ɵɵtext(20,"close"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(21,"div",12)(22,"table",13),t.ɵɵtemplate(23,wl,3,1,"ng-container",14),t.ɵɵelementContainerStart(24,15),t.ɵɵtemplate(25,Sl,3,3,"mat-header-cell",16)(26,Tl,12,6,"mat-cell",17),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(27,Il,1,0,"mat-header-row",18)(28,kl,1,0,"mat-row",19),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"section",20),t.ɵɵpipe(30,"async"),t.ɵɵelementStart(31,"button",21),t.ɵɵlistener("click",(function(a){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.manageMapping(a))})),t.ɵɵelementStart(32,"mat-icon",22),t.ɵɵtext(33,"add"),t.ɵɵelementEnd(),t.ɵɵelementStart(34,"span"),t.ɵɵtext(35),t.ɵɵpipe(36,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(37,"span",23),t.ɵɵpipe(38,"async"),t.ɵɵtext(39," widget.no-data-found "),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.textSearchMode),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!1===t.ɵɵpipeBind1(4,19,n.dataSource.isEmpty())),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,21,"action.search")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,23,"common.enter-search")),t.ɵɵproperty("formControl",n.textSearch),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,25,"action.close")),t.ɵɵadvance(5),t.ɵɵproperty("dataSource",n.dataSource),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.mappingColumns),t.ɵɵadvance(4),t.ɵɵproperty("matHeaderRowDef",n.displayedColumns)("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",n.displayedColumns),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",n.textSearchMode||!1===t.ɵɵpipeBind1(30,27,n.dataSource.isEmpty())),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(36,29,"gateway.add-mapping")),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode||!1===t.ɵɵpipeBind1(38,31,n.dataSource.isEmpty())))},dependencies:t.ɵɵgetComponentDepsFactory(Ml,[B,g,Hn,yl]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%]{width:100%;height:100%;background:#fff;overflow:hidden}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content.tb-outlined-border[_ngcontent-%COMP%]{box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f;border:solid 1px #e0e0e0;border-radius:4px}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .mat-toolbar-tools[_ngcontent-%COMP%]{min-height:auto}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{overflow:hidden}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .tb-mapping-table-title[_ngcontent-%COMP%]{padding-right:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%]{overflow:auto}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%]{table-layout:fixed;min-width:450px}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%] .table-value-column[_ngcontent-%COMP%]{padding:0 12px;width:23%}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%] .table-value-column.request-column[_ngcontent-%COMP%]{width:38%}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .ellipsis[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .no-data-found[_ngcontent-%COMP%]{height:calc(100% - 120px)}@media screen and (max-width: 599px){[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{height:auto;min-height:100px}[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%] .tb-mapping-table-title[_ngcontent-%COMP%]{padding-bottom:5px;width:100%}}[_nghost-%COMP%] mat-cell.tb-value-cell{cursor:pointer}[_nghost-%COMP%] mat-cell.tb-value-cell .mat-icon{height:24px;width:24px;font-size:24px;color:#757575}'],changeDetection:o.OnPush})}}e("MappingTableComponent",Ml),Ee([w()],Ml.prototype,"required",void 0),Ee([w()],Ml.prototype,"withReportStrategy",void 0);class Pl extends F{constructor(){super()}}function Fl(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",7),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SecurityTypeTranslationsMap.get(e))," ")}}function Ol(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",17),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.username-required"))}function ql(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",8)(1,"div",9),t.ɵɵtext(2,"gateway.username"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",10)(4,"mat-form-field",11),t.ɵɵelement(5,"input",12),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Ol,3,3,"mat-icon",13),t.ɵɵelementEnd()()(),t.ɵɵelementStart(8,"div",8)(9,"div",9),t.ɵɵtext(10,"gateway.password"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"div",10)(12,"mat-form-field",11),t.ɵɵelement(13,"input",14),t.ɵɵpipe(14,"translate"),t.ɵɵelementStart(15,"div",15),t.ɵɵelement(16,"tb-toggle-password",16),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,3,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.securityFormGroup.get("username").hasError("required")&&e.securityFormGroup.get("username").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(14,5,"gateway.set"))}}function Bl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",7),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Nl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",17),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.username-required"))}function Rl(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",8)(2,"div",9),t.ɵɵtext(3,"gateway.mode"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",10)(5,"mat-form-field",11)(6,"mat-select",23),t.ɵɵtemplate(7,Bl,2,2,"mat-option",4),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(8,"div",8)(9,"div",9),t.ɵɵtext(10,"gateway.username"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"div",10)(12,"mat-form-field",11),t.ɵɵelement(13,"input",12),t.ɵɵpipe(14,"translate"),t.ɵɵtemplate(15,Nl,3,3,"mat-icon",13),t.ɵɵelementEnd()()(),t.ɵɵelementStart(16,"div",8)(17,"div",9),t.ɵɵtext(18,"gateway.password"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"div",10)(20,"mat-form-field",11),t.ɵɵelement(21,"input",14),t.ɵɵpipe(22,"translate"),t.ɵɵelementStart(23,"div",15),t.ɵɵelement(24,"tb-toggle-password",16),t.ɵɵelementEnd()()()(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",e.modeTypes),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(14,4,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.securityFormGroup.get("username").hasError("required")&&e.securityFormGroup.get("username").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(22,6,"gateway.set"))}}function _l(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",18),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",8)(4,"div",9),t.ɵɵtext(5,"gateway.CA-certificate-path"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"div",10)(7,"mat-form-field",11),t.ɵɵelement(8,"input",19),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",8)(11,"div",9),t.ɵɵtext(12,"gateway.private-key-path"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",10)(14,"mat-form-field",11),t.ɵɵelement(15,"input",20),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(17,"div",8)(18,"div",9),t.ɵɵtext(19,"gateway.client-cert-path"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"div",10)(21,"mat-form-field",11),t.ɵɵelement(22,"input",21),t.ɵɵpipe(23,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(24,Rl,25,8,"ng-container",22)),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,5,"gateway.path-hint")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(9,7,"gateway.set")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,9,"gateway.set")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(23,11,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.extendCertificatesModel)}}e("MappingDatasource",Pl);class Dl{constructor(e,t){this.fb=e,this.cdr=t,this.title="gateway.security",this.extendCertificatesModel=!1,this.BrokerSecurityType=ua,this.securityTypes=Object.values(ua),this.modeTypes=Object.values(ga),this.SecurityTypeTranslationsMap=ba,this.destroy$=new ie}ngOnInit(){this.securityFormGroup=this.fb.group({type:[ua.ANONYMOUS,[]],username:["",[J.required,J.pattern(Re)]],password:["",[J.pattern(Re)]],pathToCACert:["",[J.pattern(Re)]],pathToPrivateKey:["",[J.pattern(Re)]],pathToClientCert:["",[J.pattern(Re)]]}),this.extendCertificatesModel&&this.securityFormGroup.addControl("mode",this.fb.control(ga.NONE,[])),this.securityFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()})),this.securityFormGroup.get("type").valueChanges.pipe(de(this.destroy$)).subscribe((e=>this.updateValidators(e)))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}writeValue(e){if(e)e.type||(e.type=ua.ANONYMOUS),this.updateValidators(e.type),this.securityFormGroup.reset(e,{emitEvent:!1});else{const e={type:ua.ANONYMOUS};this.securityFormGroup.reset(e,{emitEvent:!1})}this.cdr.markForCheck()}validate(){return this.securityFormGroup.get("type").value!==ua.BASIC||this.securityFormGroup.valid?null:{securityForm:{valid:!1}}}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}updateValidators(e){if(e)if(this.securityFormGroup.get("username").disable({emitEvent:!1}),this.securityFormGroup.get("password").disable({emitEvent:!1}),this.securityFormGroup.get("pathToCACert").disable({emitEvent:!1}),this.securityFormGroup.get("pathToPrivateKey").disable({emitEvent:!1}),this.securityFormGroup.get("pathToClientCert").disable({emitEvent:!1}),this.securityFormGroup.get("mode")?.disable({emitEvent:!1}),e===ua.BASIC)this.securityFormGroup.get("username").enable({emitEvent:!1}),this.securityFormGroup.get("password").enable({emitEvent:!1});else if(e===ua.CERTIFICATES&&(this.securityFormGroup.get("pathToCACert").enable({emitEvent:!1}),this.securityFormGroup.get("pathToPrivateKey").enable({emitEvent:!1}),this.securityFormGroup.get("pathToClientCert").enable({emitEvent:!1}),this.extendCertificatesModel)){const e=this.securityFormGroup.get("mode");e&&!e.value&&e.setValue(ga.NONE,{emitEvent:!1}),e?.enable({emitEvent:!1}),this.securityFormGroup.get("username").enable({emitEvent:!1}),this.securityFormGroup.get("password").enable({emitEvent:!1})}}static{this.ɵfac=function(e){return new(e||Dl)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Dl,selectors:[["tb-security-config"]],inputs:{title:"title",extendCertificatesModel:"extendCertificatesModel"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Dl)),multi:!0},{provide:X,useExisting:i((()=>Dl)),multi:!0}]),t.ɵɵStandaloneFeature],decls:10,vars:8,consts:[[1,"tb-form-row","space-between","same-padding","tb-flex","column",3,"formGroup"],[1,"tb-flex","row","space-between","align-center","no-gap","fill-width"],[1,"fixed-title-width","tb-required"],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],[3,"ngSwitch"],[3,"ngSwitchCase"],[3,"value"],[1,"tb-form-row","space-between","tb-flex","fill-width"],["translate","",1,"fixed-title-width"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","username",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","type","password","name","value","formControlName","password",3,"placeholder"],["matSuffix","",1,"tb-flex","no-gap","align-center","fill-height"],[1,"tb-flex","align-center","fill-height"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[1,"tb-form-hint","tb-primary-fill"],["matInput","","name","value","formControlName","pathToCACert",3,"placeholder"],["matInput","","name","value","formControlName","pathToPrivateKey",3,"placeholder"],["matInput","","name","value","formControlName","pathToClientCert",3,"placeholder"],[4,"ngIf"],["formControlName","mode"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"tb-toggle-select",3),t.ɵɵtemplate(6,Fl,3,4,"tb-toggle-option",4),t.ɵɵelementEnd()(),t.ɵɵelementContainerStart(7,5),t.ɵɵtemplate(8,ql,17,7,"ng-template",6)(9,_l,25,13,"ng-template",6),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.securityFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,6,n.title)),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.securityTypes),t.ɵɵadvance(),t.ɵɵproperty("ngSwitch",n.securityFormGroup.get("type").value),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.BrokerSecurityType.BASIC),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.BrokerSecurityType.CERTIFICATES))},dependencies:t.ɵɵgetComponentDepsFactory(Dl,[B,g]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}'],changeDetection:o.OnPush})}}e("SecurityConfigComponent",Dl),Ee([w()],Dl.prototype,"extendCertificatesModel",void 0);const Vl=()=>({min:1e3}),Al=()=>({min:50}),Gl=()=>({min:100});function jl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",19),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.server-url-required"))}function Ll(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",19),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind2(1,1,"gateway.timeout-error",t.ɵɵpureFunction0(4,Vl)))}function Ul(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",20),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate(e.name)}}function $l(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",19),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind2(1,1,"gateway.scan-period-error",t.ɵɵpureFunction0(4,Vl)))}function zl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",19),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind2(1,1,"gateway.poll-period-error",t.ɵɵpureFunction0(4,Al)))}function Kl(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",1)(1,"div",6),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"div",7),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"mat-form-field",3),t.ɵɵelement(7,"input",21),t.ɵɵpipe(8,"translate"),t.ɵɵtemplate(9,zl,3,5,"mat-icon",5),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,4,"gateway.hints.poll-period")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,6,"gateway.poll-period")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,8,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(e.serverConfigFormGroup.get("pollPeriodInMillis").hasError("required")||e.serverConfigFormGroup.get("pollPeriodInMillis").hasError("min"))&&e.serverConfigFormGroup.get("pollPeriodInMillis").touched)}}function Hl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",19),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind2(1,1,"gateway.sub-check-period-error",t.ɵɵpureFunction0(4,Gl)))}class Ql{constructor(e){this.fb=e,this.hideNewFields=!1,this.securityPolicyTypes=va,this.destroy$=new ie,this.serverConfigFormGroup=this.fb.group({url:["",[J.required,J.pattern(Re)]],timeoutInMillis:[1e3,[J.required,J.min(1e3)]],scanPeriodInMillis:[O,[J.required,J.min(1e3)]],pollPeriodInMillis:[5e3,[J.required,J.min(50)]],enableSubscriptions:[!0,[]],subCheckPeriodInMillis:[100,[J.required,J.min(100)]],showMap:[!1,[]],security:[fa.BASIC128,[]],identity:[]}),this.serverConfigFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}ngAfterViewInit(){this.hideNewFields&&this.serverConfigFormGroup.get("pollPeriodInMillis").disable({emitEvent:!1})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}validate(){return this.serverConfigFormGroup.valid?null:{serverConfigFormGroup:{valid:!1}}}writeValue(e){const{timeoutInMillis:t=1e3,scanPeriodInMillis:n=O,pollPeriodInMillis:a=5e3,enableSubscriptions:r=!0,subCheckPeriodInMillis:i=100,showMap:o=!1,security:s=fa.BASIC128,identity:l={}}=e;this.serverConfigFormGroup.reset({...e,timeoutInMillis:t,scanPeriodInMillis:n,pollPeriodInMillis:a,enableSubscriptions:r,subCheckPeriodInMillis:i,showMap:o,security:s,identity:l},{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||Ql)(t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ql,selectors:[["tb-opc-server-config"]],inputs:{hideNewFields:"hideNewFields"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Ql)),multi:!0},{provide:X,useExisting:i((()=>Ql)),multi:!0}]),t.ɵɵStandaloneFeature],decls:62,vars:56,consts:[[1,"tb-form-panel","no-border","no-padding","padding-top",3,"formGroup"],[1,"tb-form-row","column-xs"],["tbTruncateWithTooltip","","translate","",1,"fixed-title-width"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","url",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],[1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip",""],["matInput","","type","number","min","1000","name","value","formControlName","timeoutInMillis",3,"placeholder"],["formControlName","security"],[3,"value",4,"ngFor","ngForOf"],["matInput","","type","number","min","1000","name","value","formControlName","scanPeriodInMillis",3,"placeholder"],["class","tb-form-row column-xs",4,"ngIf"],["matInput","","type","number","min","100","name","value","formControlName","subCheckPeriodInMillis",3,"placeholder"],[1,"tb-form-row"],["formControlName","enableSubscriptions",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["formControlName","showMap",1,"mat-slide"],["formControlName","identity",3,"extendCertificatesModel"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[3,"value"],["matInput","","type","number","min","50","name","value","formControlName","pollPeriodInMillis",3,"placeholder"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"gateway.server-url"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",3),t.ɵɵelement(5,"input",4),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,jl,3,3,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",1)(9,"div",6),t.ɵɵpipe(10,"translate"),t.ɵɵelementStart(11,"div",7),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"mat-form-field",3),t.ɵɵelement(15,"input",8),t.ɵɵpipe(16,"translate"),t.ɵɵtemplate(17,Ll,3,5,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",1)(19,"div",6),t.ɵɵpipe(20,"translate"),t.ɵɵelementStart(21,"div",7),t.ɵɵtext(22),t.ɵɵpipe(23,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(24,"mat-form-field",3)(25,"mat-select",9),t.ɵɵtemplate(26,Ul,2,2,"mat-option",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(27,"div",1)(28,"div",6),t.ɵɵpipe(29,"translate"),t.ɵɵelementStart(30,"div",7),t.ɵɵtext(31),t.ɵɵpipe(32,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(33,"mat-form-field",3),t.ɵɵelement(34,"input",11),t.ɵɵpipe(35,"translate"),t.ɵɵtemplate(36,$l,3,5,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵtemplate(37,Kl,10,10,"div",12),t.ɵɵelementStart(38,"div",1)(39,"div",6),t.ɵɵpipe(40,"translate"),t.ɵɵelementStart(41,"div",7),t.ɵɵtext(42),t.ɵɵpipe(43,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(44,"mat-form-field",3),t.ɵɵelement(45,"input",13),t.ɵɵpipe(46,"translate"),t.ɵɵtemplate(47,Hl,3,5,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(48,"div",14)(49,"mat-slide-toggle",15)(50,"mat-label",16),t.ɵɵpipe(51,"translate"),t.ɵɵelementStart(52,"div",7),t.ɵɵtext(53),t.ɵɵpipe(54,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(55,"div",14)(56,"mat-slide-toggle",17)(57,"mat-label",16),t.ɵɵpipe(58,"translate"),t.ɵɵtext(59),t.ɵɵpipe(60,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelement(61,"tb-security-config",18),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.serverConfigFormGroup),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,24,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.serverConfigFormGroup.get("url").hasError("required")&&n.serverConfigFormGroup.get("url").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(10,26,"gateway.hints.opc-timeout")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,28,"gateway.timeout")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,30,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(n.serverConfigFormGroup.get("timeoutInMillis").hasError("required")||n.serverConfigFormGroup.get("timeoutInMillis").hasError("min"))&&n.serverConfigFormGroup.get("timeoutInMillis").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(20,32,"gateway.hints.security-policy")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(23,34,"gateway.security-policy")),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",n.securityPolicyTypes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(29,36,"gateway.hints.scan-period")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(32,38,"gateway.scan-period")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(35,40,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(n.serverConfigFormGroup.get("scanPeriodInMillis").hasError("required")||n.serverConfigFormGroup.get("scanPeriodInMillis").hasError("min"))&&n.serverConfigFormGroup.get("scanPeriodInMillis").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.hideNewFields),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(40,42,"gateway.hints.sub-check-period")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(43,44,"gateway.sub-check-period")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(46,46,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(n.serverConfigFormGroup.get("subCheckPeriodInMillis").hasError("required")||n.serverConfigFormGroup.get("subCheckPeriodInMillis").hasError("min"))&&n.serverConfigFormGroup.get("subCheckPeriodInMillis").touched),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(51,48,"gateway.hints.enable-subscription")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(54,50,"gateway.enable-subscription")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(58,52,"gateway.hints.show-map")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(60,54,"gateway.show-map")," "),t.ɵɵadvance(2),t.ɵɵproperty("extendCertificatesModel",!0))},dependencies:t.ɵɵgetComponentDepsFactory(Ql,[B,g,Dl,Hn]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}'],changeDetection:o.OnPush})}}e("OpcServerConfigComponent",Ql),Ee([w()],Ql.prototype,"hideNewFields",void 0);class Wl extends ur{constructor(){super(...arguments),this.withReportStrategy=!0,this.mappingTypes=ha,this.isLegacy=!0}initBasicFormGroup(){return this.fb.group({mapping:[],server:[]})}mapConfigToFormValue(e){return{server:e.server?fr.mapServerToUpgradedVersion(e.server):{},mapping:e.server?.mapping?fr.mapMappingToUpgradedVersion(e.server.mapping):[]}}getMappedValue(e){return{server:fr.mapServerToDowngradedVersion(e)}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Wl)))(n||Wl)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:Wl,selectors:[["tb-opc-ua-legacy-basic-config"]],inputs:{withReportStrategy:"withReportStrategy"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Wl)),multi:!0},{provide:X,useExisting:i((()=>Wl)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:11,vars:17,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","server",3,"hideNewFields"],[1,"tb-form-panel","no-border","no-padding","padding-top","tb-flex","fill-height"],["formControlName","mapping",3,"required","withReportStrategy","mappingType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-opc-server-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4),t.ɵɵelement(10,"tb-mapping-table",5),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,11,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,13,"gateway.server"),"*"),t.ɵɵadvance(2),t.ɵɵproperty("hideNewFields",n.isLegacy),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,15,"gateway.data-mapping"),"*"),t.ɵɵadvance(3),t.ɵɵproperty("required",!0)("withReportStrategy",n.withReportStrategy)("mappingType",n.mappingTypes.OPCUA))},dependencies:t.ɵɵgetComponentDepsFactory(Wl,[B,g,Dl,Ml,Ql]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}e("OpcUaLegacyBasicConfigComponent",Wl),Ee([w()],Wl.prototype,"withReportStrategy",void 0);class Jl extends ur{constructor(){super(...arguments),this.withReportStrategy=!0,this.mappingTypes=ha,this.isLegacy=!1}initBasicFormGroup(){return this.fb.group({mapping:[],server:[]})}mapConfigToFormValue(e){return{server:e.server??{},mapping:e.mapping??[]}}getMappedValue(e){return{server:e.server,mapping:e.mapping}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Jl)))(n||Jl)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:Jl,selectors:[["tb-opc-ua-basic-config"]],inputs:{withReportStrategy:"withReportStrategy"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Jl)),multi:!0},{provide:X,useExisting:i((()=>Jl)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:11,vars:17,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","server",3,"hideNewFields"],[1,"tb-form-panel","no-border","no-padding","padding-top","tb-flex","fill-height"],["formControlName","mapping",3,"required","withReportStrategy","mappingType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-opc-server-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4),t.ɵɵelement(10,"tb-mapping-table",5),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,11,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,13,"gateway.server"),"*"),t.ɵɵadvance(2),t.ɵɵproperty("hideNewFields",n.isLegacy),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,15,"gateway.data-mapping"),"*"),t.ɵɵadvance(3),t.ɵɵproperty("required",!0)("withReportStrategy",n.withReportStrategy)("mappingType",n.mappingTypes.OPCUA))},dependencies:t.ɵɵgetComponentDepsFactory(Jl,[B,g,Dl,Ml,Ql]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}e("OpcUaBasicConfigComponent",Jl),Ee([w()],Jl.prototype,"withReportStrategy",void 0);class Yl extends ur{constructor(){super(...arguments),this.withReportStrategy=!0,this.MappingType=ha}initBasicFormGroup(){return this.fb.group({mapping:[],requestsMapping:[],broker:[],workers:[]})}getRequestDataArray(e){const t=[];return z(e)&&Object.keys(e).forEach((n=>{for(const a of e[n])t.push({requestType:n,requestValue:a})})),t}getRequestDataObject(e){return e.reduce(((e,{requestType:t,requestValue:n})=>(e[t].push(n),e)),{connectRequests:[],disconnectRequests:[],attributeRequests:[],attributeUpdates:[],serverSideRpc:[]})}getBrokerMappedValue(e,t){return{...e,maxNumberOfWorkers:t.maxNumberOfWorkers??100,maxMessageNumberPerWorker:t.maxMessageNumberPerWorker??10}}writeValue(e){this.basicFormGroup.setValue(this.mapConfigToFormValue(e),{emitEvent:!1})}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Yl)))(n||Yl)}})()}static{this.ɵdir=t.ɵɵdefineDirective({type:Yl,inputs:{withReportStrategy:"withReportStrategy"},features:[t.ɵɵInheritDefinitionFeature]})}}function Xl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",8),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.max-number-of-workers-required"))}function Zl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",8),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.max-messages-queue-for-worker-required"))}e("MqttBasicConfigDirective",Yl),Ee([w()],Yl.prototype,"withReportStrategy",void 0);class ep{constructor(e){this.fb=e,this.destroy$=new ie,this.workersConfigFormGroup=this.fb.group({maxNumberOfWorkers:[100,[J.required,J.min(1)]],maxMessageNumberPerWorker:[10,[J.required,J.min(1)]]}),this.workersConfigFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){const{maxNumberOfWorkers:t,maxMessageNumberPerWorker:n}=e;this.workersConfigFormGroup.reset({maxNumberOfWorkers:t||100,maxMessageNumberPerWorker:n||10},{emitEvent:!1})}validate(){return this.workersConfigFormGroup.valid?null:{workersConfigFormGroup:{valid:!1}}}static{this.ɵfac=function(e){return new(e||ep)(t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ep,selectors:[["tb-workers-config-control"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>ep)),multi:!0},{provide:X,useExisting:i((()=>ep)),multi:!0}]),t.ɵɵStandaloneFeature],decls:21,vars:21,consts:[[1,"tb-form-panel","no-border","no-padding","padding-top",3,"formGroup"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width","tb-required",2,"width","50%",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip",""],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","type","number","min","1","formControlName","maxNumberOfWorkers",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","name","value","type","number","min","1","formControlName","maxMessageNumberPerWorker",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵpipe(3,"translate"),t.ɵɵelementStart(4,"div",3),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",4),t.ɵɵelement(8,"input",5),t.ɵɵpipe(9,"translate"),t.ɵɵtemplate(10,Xl,3,3,"mat-icon",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"div",1)(12,"div",2),t.ɵɵpipe(13,"translate"),t.ɵɵelementStart(14,"div",3),t.ɵɵtext(15),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"mat-form-field",4),t.ɵɵelement(18,"input",7),t.ɵɵpipe(19,"translate"),t.ɵɵtemplate(20,Zl,3,3,"mat-icon",6),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.workersConfigFormGroup),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,9,"gateway.max-number-of-workers-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(6,11,"gateway.max-number-of-workers")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(9,13,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.workersConfigFormGroup.get("maxNumberOfWorkers").hasError("min")||n.workersConfigFormGroup.get("maxNumberOfWorkers").hasError("required")&&n.workersConfigFormGroup.get("maxNumberOfWorkers").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(13,15,"gateway.max-messages-queue-for-worker-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(16,17,"gateway.max-messages-queue-for-worker")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(19,19,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.workersConfigFormGroup.get("maxMessageNumberPerWorker").hasError("min")||n.workersConfigFormGroup.get("maxMessageNumberPerWorker").hasError("required")&&n.workersConfigFormGroup.get("maxMessageNumberPerWorker").touched))},dependencies:t.ɵɵgetComponentDepsFactory(ep,[B,g,Hn]),encapsulation:2,changeDetection:o.OnPush})}}function tp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",13),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.host-required"))}function np(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",13),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.brokerConfigFormGroup.get("port")))}}function ap(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",14),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate(e.name)}}function rp(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",15),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.generate("clientId"))})),t.ɵɵelementStart(2,"mat-icon"),t.ɵɵtext(3,"autorenew"),t.ɵɵelementEnd()()}2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.generate-client-id"))}e("WorkersConfigControlComponent",ep);class ip{constructor(e,t){this.fb=e,this.cdr=t,this.mqttVersions=ra,this.portLimits=ca,this.destroy$=new ie,this.brokerConfigFormGroup=this.fb.group({host:["",[J.required,J.pattern(Re)]],port:[null,[J.required,J.min(ca.MIN),J.max(ca.MAX)]],version:[5,[]],clientId:["tb_gw_"+K(5),[J.pattern(Re)]],security:[]}),this.brokerConfigFormGroup.valueChanges.subscribe((e=>{this.onChange(e),this.onTouched()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}generate(e){this.brokerConfigFormGroup.get(e)?.patchValue("tb_gw_"+K(5))}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){const{version:t=5,clientId:n=`tb_gw_${K(5)}`,security:a={}}=e;this.brokerConfigFormGroup.reset({...e,version:t,clientId:n,security:a},{emitEvent:!1}),this.cdr.markForCheck()}validate(){return this.brokerConfigFormGroup.valid?null:{brokerConfigFormGroup:{valid:!1}}}static{this.ɵfac=function(e){return new(e||ip)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ip,selectors:[["tb-broker-config-control"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>ip)),multi:!0},{provide:X,useExisting:i((()=>ip)),multi:!0}]),t.ɵɵStandaloneFeature],decls:29,vars:16,consts:[[1,"tb-form-panel","no-border","no-padding","padding-top",3,"formGroup"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","host",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],["translate","",1,"fixed-title-width"],["formControlName","version"],[3,"value",4,"ngFor","ngForOf"],["matInput","","name","value","formControlName","clientId",3,"placeholder"],["type","button","matSuffix","","mat-icon-button","","aria-label","Generate","matTooltipPosition","above",3,"matTooltip","click",4,"ngIf"],["formControlName","security"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[3,"value"],["type","button","matSuffix","","mat-icon-button","","aria-label","Generate","matTooltipPosition","above",3,"click","matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"gateway.host"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",3),t.ɵɵelement(5,"input",4),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,tp,3,3,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",1)(9,"div",2),t.ɵɵtext(10,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field",3),t.ɵɵelement(12,"input",6),t.ɵɵpipe(13,"translate"),t.ɵɵtemplate(14,np,3,3,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"div",1)(16,"div",7),t.ɵɵtext(17,"gateway.mqtt-version"),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"mat-form-field",3)(19,"mat-select",8),t.ɵɵtemplate(20,ap,2,2,"mat-option",9),t.ɵɵelementEnd()()(),t.ɵɵelementStart(21,"div",1)(22,"div",7),t.ɵɵtext(23,"gateway.client-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(24,"mat-form-field",3),t.ɵɵelement(25,"input",10),t.ɵɵpipe(26,"translate"),t.ɵɵtemplate(27,rp,4,3,"button",11),t.ɵɵelementEnd()(),t.ɵɵelement(28,"tb-security-config",12),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.brokerConfigFormGroup),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,10,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.brokerConfigFormGroup.get("host").hasError("required")&&n.brokerConfigFormGroup.get("host").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("min",n.portLimits.MIN),t.ɵɵpropertyInterpolate("max",n.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(13,12,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(n.brokerConfigFormGroup.get("port").hasError("required")||n.brokerConfigFormGroup.get("port").hasError("min")||n.brokerConfigFormGroup.get("port").hasError("max"))&&n.brokerConfigFormGroup.get("port").touched),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.mqttVersions),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(26,14,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!n.brokerConfigFormGroup.get("clientId").value))},dependencies:t.ɵɵgetComponentDepsFactory(ip,[B,g,Dl,So]),encapsulation:2,changeDetection:o.OnPush})}}e("BrokerConfigControlComponent",ip);class op extends Yl{mapConfigToFormValue(e){const{broker:t,mapping:n=[],requestsMapping:a}=e;return{workers:t&&(t.maxNumberOfWorkers||t.maxMessageNumberPerWorker)?{maxNumberOfWorkers:t.maxNumberOfWorkers,maxMessageNumberPerWorker:t.maxMessageNumberPerWorker}:{},mapping:n??[],broker:t??{},requestsMapping:this.getRequestDataArray(a)}}getMappedValue(e){const{broker:t,workers:n,mapping:a,requestsMapping:r}=e||{};return{broker:this.getBrokerMappedValue(t,n),mapping:a,requestsMapping:r?.length?this.getRequestDataObject(r):{}}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(op)))(n||op)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:op,selectors:[["tb-mqtt-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>op)),multi:!0},{provide:X,useExisting:i((()=>op)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:23,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","broker"],[1,"tb-form-panel","no-border","no-padding","padding-top","tb-flex","fill-height"],["formControlName","mapping",3,"required","mappingType"],["formControlName","requestsMapping",3,"withReportStrategy","mappingType"],[1,"tb-form-panel","no-border","no-padding"],["formControlName","workers"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-broker-config-control",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4),t.ɵɵelement(10,"tb-mapping-table",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-tab",1),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"div",4),t.ɵɵelement(14,"tb-mapping-table",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"mat-tab",1),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"div",7),t.ɵɵelement(18,"tb-workers-config-control",8),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,13,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,15,"gateway.broker.connection"),"*"),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,17,"gateway.data-mapping"),"*"),t.ɵɵadvance(3),t.ɵɵproperty("required",!0)("mappingType",n.MappingType.DATA),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(12,19,"gateway.requests-mapping")),t.ɵɵadvance(3),t.ɵɵproperty("withReportStrategy",n.withReportStrategy)("mappingType",n.MappingType.REQUESTS),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(16,21,"gateway.workers-settings")))},dependencies:t.ɵɵgetComponentDepsFactory(op,[B,g,Dl,ep,ip,Ml]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}e("MqttBasicConfigComponent",op);class sp extends Yl{mapConfigToFormValue(e){const{broker:t,mapping:n=[],connectRequests:a=[],disconnectRequests:r=[],attributeRequests:i=[],attributeUpdates:o=[],serverSideRpc:s=[]}=e,l=lr.mapRequestsToUpgradedVersion({connectRequests:a,disconnectRequests:r,attributeRequests:i,attributeUpdates:o,serverSideRpc:s});return{workers:t&&(t.maxNumberOfWorkers||t.maxMessageNumberPerWorker)?{maxNumberOfWorkers:t.maxNumberOfWorkers,maxMessageNumberPerWorker:t.maxMessageNumberPerWorker}:{},mapping:lr.mapMappingToUpgradedVersion(n)||[],broker:t||{},requestsMapping:this.getRequestDataArray(l)}}getMappedValue(e){const{broker:t,workers:n,mapping:a,requestsMapping:r}=e||{},i=r?.length?this.getRequestDataObject(r):{};return{broker:this.getBrokerMappedValue(t,n),mapping:lr.mapMappingToDowngradedVersion(a),...lr.mapRequestsToDowngradedVersion(i)}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(sp)))(n||sp)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:sp,selectors:[["tb-mqtt-legacy-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>sp)),multi:!0},{provide:X,useExisting:i((()=>sp)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:23,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","broker"],[1,"tb-form-panel","no-border","no-padding","padding-top","tb-flex","fill-height"],["formControlName","mapping",3,"required","mappingType"],["formControlName","requestsMapping",3,"withReportStrategy","mappingType"],[1,"tb-form-panel","no-border","no-padding"],["formControlName","workers"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-broker-config-control",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4),t.ɵɵelement(10,"tb-mapping-table",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-tab",1),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"div",4),t.ɵɵelement(14,"tb-mapping-table",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"mat-tab",1),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"div",7),t.ɵɵelement(18,"tb-workers-config-control",8),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,13,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,15,"gateway.broker.connection"),"*"),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,17,"gateway.data-mapping"),"*"),t.ɵɵadvance(3),t.ɵɵproperty("required",!0)("mappingType",n.MappingType.DATA),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(12,19,"gateway.requests-mapping")),t.ɵɵadvance(3),t.ɵɵproperty("withReportStrategy",n.withReportStrategy)("mappingType",n.MappingType.REQUESTS),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(16,21,"gateway.workers-settings")))},dependencies:t.ɵɵgetComponentDepsFactory(sp,[B,g,Dl,ep,ip,Ml]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}e("MqttLegacyBasicConfigComponent",sp);class lp extends C{constructor(e,t,n,a,r){super(t,n,r),this.fb=e,this.store=t,this.router=n,this.data=a,this.dialogRef=r,this.portLimits=ca,this.modbusProtocolTypes=Object.values(Oa),this.modbusMethodTypes=Object.values(qa),this.modbusSerialMethodTypes=Object.values(Ba),this.modbusParities=Object.values(Na),this.modbusByteSizes=Aa,this.modbusBaudrates=Va,this.modbusOrderType=Object.values(Ra),this.ModbusProtocolType=Oa,this.ModbusParityLabelsMap=za,this.ModbusProtocolLabelsMap=$a,this.ModbusMethodLabelsMap=Ua,this.ReportStrategyDefaultValue=Mt,this.modbusHelpLink=k+"/docs/iot-gateway/config/modbus/#section-master-description-and-configuration-parameters",this.serialSpecificControlKeys=["serialPort","baudrate","stopbits","bytesize","parity","strict"],this.tcpUdpSpecificControlKeys=["port","security","host"],this.destroy$=new ie,this.showSecurityControl=this.fb.control(!1),this.initializeSlaveFormGroup(),this.updateSlaveFormGroup(),this.updateControlsEnabling(this.data.value.type),this.observeTypeChange(),this.observeShowSecurity(),this.showSecurityControl.patchValue(!!this.data.value.security&&!V(this.data.value.security,{}))}get protocolType(){return this.slaveConfigFormGroup.get("type").value}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}cancel(){this.dialogRef.close(null)}add(){this.slaveConfigFormGroup.valid&&this.dialogRef.close(this.getSlaveResultData())}initializeSlaveFormGroup(){this.slaveConfigFormGroup=this.fb.group({type:[Oa.TCP],host:["",[J.required,J.pattern(Re)]],port:[null,[J.required,J.min(ca.MIN),J.max(ca.MAX)]],serialPort:["",[J.required,J.pattern(Re)]],method:[qa.SOCKET,[J.required]],baudrate:[this.modbusBaudrates[0]],stopbits:[1],bytesize:[Aa[0]],parity:[Na.None],strict:[!0],unitId:[null,[J.required]],deviceName:["",[J.required,J.pattern(Re)]],deviceType:["",[J.required,J.pattern(Re)]],timeout:[35],byteOrder:[Ra.BIG],wordOrder:[Ra.BIG],retries:[!0],retryOnEmpty:[!0],retryOnInvalid:[!0],pollPeriod:[5e3,[J.required]],connectAttemptTimeMs:[5e3,[J.required]],connectAttemptCount:[5,[J.required]],waitAfterFailedAttemptsMs:[3e5,[J.required]],values:[{}],security:[{}]}),this.addFieldsToFormGroup()}updateSlaveFormGroup(){this.slaveConfigFormGroup.patchValue({...this.data.value,port:this.data.value.type===Oa.Serial?null:this.data.value.port,serialPort:this.data.value.type===Oa.Serial?this.data.value.port:"",values:{attributes:this.data.value.attributes??[],timeseries:this.data.value.timeseries??[],attributeUpdates:this.data.value.attributeUpdates??[],rpc:this.data.value.rpc??[]}})}observeTypeChange(){this.slaveConfigFormGroup.get("type").valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.updateControlsEnabling(e),this.updateMethodType(e)}))}updateMethodType(e){this.slaveConfigFormGroup.get("method").value!==qa.RTU&&this.slaveConfigFormGroup.get("method").patchValue(e===Oa.Serial?Ba.ASCII:qa.SOCKET,{emitEvent:!1})}updateControlsEnabling(e){const[t,n]=e===Oa.Serial?[this.serialSpecificControlKeys,this.tcpUdpSpecificControlKeys]:[this.tcpUdpSpecificControlKeys,this.serialSpecificControlKeys];t.forEach((e=>this.slaveConfigFormGroup.get(e)?.enable({emitEvent:!1}))),n.forEach((e=>this.slaveConfigFormGroup.get(e)?.disable({emitEvent:!1}))),this.updateSecurityEnabling(this.showSecurityControl.value)}observeShowSecurity(){this.showSecurityControl.valueChanges.pipe(de(this.destroy$)).subscribe((e=>this.updateSecurityEnabling(e)))}updateSecurityEnabling(e){e&&this.protocolType!==Oa.Serial?this.slaveConfigFormGroup.get("security").enable({emitEvent:!1}):this.slaveConfigFormGroup.get("security").disable({emitEvent:!1})}static{this.ɵfac=function(e){return new(e||lp)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(ae.Store),t.ɵɵdirectiveInject(re.Router),t.ɵɵdirectiveInject(te),t.ɵɵdirectiveInject(ne.MatDialogRef))}}static{this.ɵdir=t.ɵɵdefineDirective({type:lp,features:[t.ɵɵInheritDefinitionFeature]})}}e("ModbusSlaveDialogAbstract",lp);const pp=()=>({maxWidth:"970px"});function cp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",20),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate3(" ",e.get("tag").value,"",": ","",e.get("value").value," ")}}function dp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21)(1,"div",22),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementStart(4,"span",23),t.ɵɵtext(5),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"div",24),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"span",25),t.ɵɵtext(10),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"div",24),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementStart(14,"span",25),t.ɵɵtext(15),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(3,6,"gateway.key"),": "),t.ɵɵadvance(3),t.ɵɵtextInterpolate(e.get("tag").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(8,8,"gateway.address"),": "),t.ɵɵadvance(3),t.ɵɵtextInterpolate(e.get("address").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(13,10,"gateway.type"),": "),t.ɵɵadvance(3),t.ɵɵtextInterpolate(e.get("type").value)}}function mp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.key-required"))}function up(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",45),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function gp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",45),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(5);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.ModbusFunctionCodeTranslationsMap.get(e))," ")}}function hp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",30)(1,"div",35),t.ɵɵtext(2,"gateway.function-code"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",32)(4,"mat-select",46),t.ɵɵtemplate(5,gp,3,4,"mat-option",37),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.functionCodesMap.get(e.get("id").value)||n.defaultFunctionCodes)}}function yp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.objects-count-required"))}function fp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.hints.modbus.max-bit"))}function vp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",30)(1,"div",47),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.bit"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",48),t.ɵɵelement(5,"input",49),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,fp,3,3,"mat-icon",34),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(3).$implicit;t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.bit")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("bit").hasError("max")&&e.get("bit").touched)}}function bp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",45),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(6);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,2,a.BitTargetTypeTranslationMap.get(e)))}}function xp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",30)(1,"div",47),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.bit-target-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",50)(5,"mat-form-field",51)(6,"mat-select",52),t.ɵɵtemplate(7,bp,3,4,"mat-option",37),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext(5);t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,2,"gateway.hints.modbus.bit-target-type")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",e.bitTargetTypes)}}function Cp(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,vp,8,7,"div",38)(2,xp,8,4,"div",38),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("objectsCount").value>1),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.hideNewFields)}}function wp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.address-required"))}function Sp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",45),t.ɵɵelement(1,"mat-icon",60),t.ɵɵelementStart(2,"span"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(5);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("svgIcon",a.ModifierTypesMap.get(e).icon),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,a.ModifierTypesMap.get(e).name))}}function Ep(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.modifier-invalid"))}function Tp(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",53)(1,"mat-expansion-panel",15)(2,"mat-expansion-panel-header",16)(3,"mat-panel-title")(4,"mat-slide-toggle",54),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(5,"mat-label",55),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(9,"div",50)(10,"div",30)(11,"div",35),t.ɵɵtext(12,"gateway.type"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",51)(14,"mat-select",56)(15,"mat-select-trigger")(16,"div",57),t.ɵɵelement(17,"mat-icon",58),t.ɵɵelementStart(18,"span"),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(21,Sp,5,5,"mat-option",37),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(22,"div",30)(23,"div",35),t.ɵɵtext(24,"gateway.value"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-form-field",48),t.ɵɵelement(26,"input",59),t.ɵɵpipe(27,"translate"),t.ɵɵtemplate(28,Ep,3,3,"mat-icon",34),t.ɵɵelementEnd()()()()}if(2&e){let e,n;const a=t.ɵɵnextContext(2).$implicit,r=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵproperty("expanded",r.enableModifiersControlMap.get(a.get("id").value).value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",r.enableModifiersControlMap.get(a.get("id").value)),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(6,9,"gateway.hints.modbus.modifier")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(8,11,"gateway.modifier")," "),t.ɵɵadvance(10),t.ɵɵproperty("svgIcon",null==(e=r.ModifierTypesMap.get(a.get("modifierType").value))?null:e.icon),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(20,13,null==(n=r.ModifierTypesMap.get(a.get("modifierType").value))?null:n.name)),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",r.modifierTypes),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(27,15,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",a.get("modifierValue").hasError("pattern")&&a.get("modifierValue").touched)}}function Ip(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function kp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",30)(1,"div",61),t.ɵɵtext(2,"gateway.value"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",32),t.ɵɵelement(4,"input",62),t.ɵɵpipe(5,"translate"),t.ɵɵtemplate(6,Ip,3,3,"mat-icon",34),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(5,2,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("value").hasError("required")&&e.get("value").touched)}}function Mp(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",63),2&e){const e=t.ɵɵnextContext(4);t.ɵɵproperty("defaultValue",e.ReportStrategyDefaultValue.Key)("isExpansionMode",!0)}}function Pp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",26),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelement(3,"div",27),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",28)(5,"div",29),t.ɵɵtext(6,"gateway.platform-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"div",30)(8,"div",31),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10," gateway.key "),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field",32),t.ɵɵelement(12,"input",33),t.ɵɵpipe(13,"translate"),t.ɵɵtemplate(14,mp,3,3,"mat-icon",34),t.ɵɵelementEnd()()(),t.ɵɵelementStart(15,"div",28)(16,"div",29),t.ɵɵtext(17,"gateway.connector-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"div",30)(19,"div",35),t.ɵɵtext(20," gateway.type "),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",32)(22,"mat-select",36),t.ɵɵtemplate(23,up,2,2,"mat-option",37),t.ɵɵelementEnd()()(),t.ɵɵtemplate(24,hp,6,1,"div",38),t.ɵɵelementStart(25,"div",30)(26,"div",31),t.ɵɵpipe(27,"translate"),t.ɵɵtext(28,"gateway.objects-count"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-form-field",32),t.ɵɵelement(30,"input",39),t.ɵɵpipe(31,"translate"),t.ɵɵtemplate(32,yp,3,3,"mat-icon",34),t.ɵɵelementEnd()(),t.ɵɵtemplate(33,Cp,3,2,"ng-container",40),t.ɵɵelementStart(34,"div",30)(35,"div",31),t.ɵɵpipe(36,"translate"),t.ɵɵtext(37,"gateway.address"),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"mat-form-field",32),t.ɵɵelement(39,"input",41),t.ɵɵpipe(40,"translate"),t.ɵɵtemplate(41,wp,3,3,"mat-icon",34),t.ɵɵelementEnd()(),t.ɵɵtemplate(42,Tp,29,17,"div",42)(43,kp,7,4,"div",38)(44,Mp,1,2,"tb-report-strategy",43),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,19,"gateway.hints.modbus.data-keys")," "),t.ɵɵadvance(2),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/modbus-functions-data-types_fn")("tb-help-popup-style",t.ɵɵpureFunction0(33,pp)),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(9,21,"gateway.hints.modbus.key")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(13,23,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("tag").hasError("required")&&e.get("tag").touched),t.ɵɵadvance(9),t.ɵɵproperty("ngForOf",n.modbusDataTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.withFunctionCode),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(27,25,"gateway.hints.modbus.objects-count")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(31,27,"gateway.set")),t.ɵɵproperty("readonly",!n.ModbusEditableDataTypes.includes(e.get("type").value)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("objectsCount").hasError("required")&&e.get("objectsCount").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("type").value===n.ModbusDataType.BITS&&!n.isMaster),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(36,29,"gateway.hints.modbus.address")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(40,31,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("address").hasError("required")&&e.get("address").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.showModifiersMap.get(e.get("id").value)),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.isMaster),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.withReportStrategy)}}function Fp(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",12)(1,"div",13),t.ɵɵelementContainerStart(2,14),t.ɵɵelementStart(3,"mat-expansion-panel",15)(4,"mat-expansion-panel-header",16)(5,"mat-panel-title"),t.ɵɵtemplate(6,cp,2,3,"div",17)(7,dp,16,12,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()(),t.ɵɵtemplate(9,Pp,45,34,"ng-template",18),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"button",19),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.deleteKey(n,a))})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"delete"),t.ɵɵelementEnd()()()}if(2&e){const e=n.$implicit,a=n.last,r=t.ɵɵreference(8),i=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵproperty("formGroup",e),t.ɵɵadvance(),t.ɵɵproperty("expanded",a),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",i.isMaster)("ngIfElse",r),t.ɵɵadvance(4),t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(11,5,i.deleteKeyTitle))}}function Op(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10),t.ɵɵtemplate(1,Fp,14,7,"div",11),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.keysListFormArray.controls)("ngForTrackBy",e.trackByControlId)}}function qp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",64)(1,"span",65),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.noKeysText)}}class Bp{constructor(e){this.fb=e,this.isMaster=!1,this.hideNewFields=!1,this.keysDataApplied=new r,this.withFunctionCode=!0,this.withReportStrategy=!0,this.enableModifiersControlMap=new Map,this.showModifiersMap=new Map,this.functionCodesMap=new Map,this.defaultFunctionCodes=[],this.modbusDataTypes=Object.values(xt),this.modifierTypes=Object.values(Ja),this.bitTargetTypes=Object.values(ja),this.BitTargetTypeTranslationMap=La,this.ModbusEditableDataTypes=Ct,this.ModbusFunctionCodeTranslationsMap=Tt,this.ModifierTypesMap=Ya,this.ReportStrategyDefaultValue=Mt,this.ModbusDataType=xt,this.destroy$=new ie,this.defaultReadFunctionCodes=[3,4],this.bitsReadFunctionCodes=[1,2],this.defaultWriteFunctionCodes=[6,16],this.bitsWriteFunctionCodes=[5,15]}ngOnInit(){this.withFunctionCode=!this.isMaster||this.keysType!==Da.ATTRIBUTES&&this.keysType!==Da.TIMESERIES,this.withReportStrategy=!(this.isMaster||this.keysType!==Da.ATTRIBUTES&&this.keysType!==Da.TIMESERIES||this.hideNewFields),this.keysListFormArray=this.prepareKeysFormArray(this.values),this.defaultFunctionCodes=this.getDefaultFunctionCodes()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}trackByControlId(e,t){return t.value.id}addKey(){const e=K(5),t=this.fb.group({tag:["",[J.required,J.pattern(Re)]],value:[{value:"",disabled:!this.isMaster},[J.required,J.pattern(Re)]],type:[xt.BYTES,[J.required]],address:[null,[J.required]],objectsCount:[1,[J.required]],functionCode:[{value:this.getDefaultFunctionCodes()[0],disabled:!this.withFunctionCode},[J.required]],reportStrategy:[{value:null,disabled:!this.withReportStrategy}],modifierType:[{value:Ja.MULTIPLIER,disabled:!0}],modifierValue:[{value:1,disabled:!0},[J.pattern(De)]],bit:[{value:null,disabled:!0}],bitTargetType:[{value:ja.Integer,disabled:!0}],id:[{value:e,disabled:!0}]});this.showModifiersMap.set(e,!1),this.enableModifiersControlMap.set(e,this.fb.control(!1)),this.observeKeyDataType(t),this.observeObjectsCount(t),this.observeEnableModifier(t),this.keysListFormArray.push(t)}deleteKey(e,t){e&&e.stopPropagation(),this.keysListFormArray.removeAt(t),this.keysListFormArray.markAsDirty()}cancel(){this.popover.hide()}applyKeysData(){this.keysDataApplied.emit(this.getFormValue())}getFormValue(){return this.mapKeysWithModifier(this.withReportStrategy?this.cleanUpEmptyStrategies(this.keysListFormArray.value):this.keysListFormArray.value)}cleanUpEmptyStrategies(e){return e.map((e=>{const{reportStrategy:t,...n}=e;return t?e:n}))}mapKeysWithModifier(e){return e.map(((e,t)=>{if(this.showModifiersMap.get(this.keysListFormArray.controls[t].get("id").value)){const{modifierType:t,modifierValue:n,...a}=e;return t?{...a,[t]:n}:a}return e}))}prepareKeysFormArray(e){const t=[];return e&&e.forEach((e=>{const n=this.createDataKeyFormGroup(e);this.observeKeyDataType(n),this.observeObjectsCount(n),this.observeEnableModifier(n),this.functionCodesMap.set(n.get("id").value,this.getFunctionCodes(e.type)),t.push(n)})),this.fb.array(t)}createDataKeyFormGroup(e){const{tag:t,value:n,type:a,address:r,objectsCount:i,functionCode:o,multiplier:s,divider:l,reportStrategy:p,bit:c,bitTargetType:d}=e,m=K(5),u=this.shouldShowModifier(a);return this.showModifiersMap.set(m,u),this.enableModifiersControlMap.set(m,this.fb.control((s||l)&&u)),this.fb.group({tag:[t,[J.required,J.pattern(Re)]],value:[{value:n,disabled:!this.isMaster},[J.required,J.pattern(Re)]],type:[a,[J.required]],address:[r,[J.required]],objectsCount:[i,[J.required]],functionCode:[{value:o,disabled:!this.withFunctionCode},[J.required]],modifierType:[{value:l?Ja.DIVIDER:Ja.MULTIPLIER,disabled:!this.enableModifiersControlMap.get(m).value}],bit:[{value:c,disabled:a!==xt.BITS||i<2},[J.max(i-1)]],bitTargetType:[{value:d??ja.Integer,disabled:a!==xt.BITS||this.hideNewFields}],modifierValue:[{value:s??l??1,disabled:!this.enableModifiersControlMap.get(m).value},[J.pattern(De)]],id:[{value:m,disabled:!0}],reportStrategy:[{value:p,disabled:!this.withReportStrategy}]})}shouldShowModifier(e){return!(this.isMaster||this.keysType!==Da.ATTRIBUTES&&this.keysType!==Da.TIMESERIES||this.ModbusEditableDataTypes.includes(e))}observeKeyDataType(e){e.get("type").valueChanges.pipe(de(this.destroy$)).subscribe((t=>{this.ModbusEditableDataTypes.includes(t)||e.get("objectsCount").patchValue(wt[t],{emitEvent:!1}),this.toggleBitsFields(e);const n=this.shouldShowModifier(t);this.showModifiersMap.set(e.get("id").value,n),this.updateFunctionCodes(e,t)}))}observeObjectsCount(e){e.get("objectsCount").valueChanges.pipe(me((()=>e.get("type").value===xt.BITS)),de(this.destroy$)).subscribe((()=>this.toggleBitsFields(e)))}toggleBitsFields(e){const{objectsCount:t,type:n,bit:a,bitTargetType:r}=e.controls,i=n.value===xt.BITS,o=t.value>1;i&&o?(a.enable({emitEvent:!1}),a.setValidators(J.max(t.value-1))):a.disable({emitEvent:!1}),a.updateValueAndValidity({emitEvent:!1}),r[i?"enable":"disable"]({emitEvent:!1})}observeEnableModifier(e){this.enableModifiersControlMap.get(e.get("id").value).valueChanges.pipe(de(this.destroy$)).subscribe((t=>this.toggleModifierControls(e,t)))}toggleModifierControls(e,t){const n=e.get("modifierType"),a=e.get("modifierValue");t?(n.enable(),a.enable()):(n.disable(),a.disable())}updateFunctionCodes(e,t){const n=this.getFunctionCodes(t);this.functionCodesMap.set(e.get("id").value,n),n.includes(e.get("functionCode").value)||e.get("functionCode").patchValue(n[0],{emitEvent:!1})}getFunctionCodes(e){const t=[...e===xt.BITS?this.bitsWriteFunctionCodes:[],...this.defaultWriteFunctionCodes];if(this.keysType===Da.ATTRIBUTES_UPDATES)return t.sort(((e,t)=>e-t));const n=[...this.defaultReadFunctionCodes];return e===xt.BITS&&n.push(...this.bitsReadFunctionCodes),this.keysType===Da.RPC_REQUESTS&&n.push(...t),n.sort(((e,t)=>e-t))}getDefaultFunctionCodes(){return this.keysType===Da.ATTRIBUTES_UPDATES?this.defaultWriteFunctionCodes:this.keysType===Da.RPC_REQUESTS?[...this.defaultReadFunctionCodes,...this.defaultWriteFunctionCodes]:this.defaultReadFunctionCodes}static{this.ɵfac=function(e){return new(e||Bp)(t.ɵɵdirectiveInject(W.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Bp,selectors:[["tb-modbus-data-keys-panel"]],inputs:{isMaster:"isMaster",hideNewFields:"hideNewFields",panelTitle:"panelTitle",addKeyTitle:"addKeyTitle",deleteKeyTitle:"deleteKeyTitle",noKeysText:"noKeysText",keysType:"keysType",values:"values",popover:"popover"},outputs:{keysDataApplied:"keysDataApplied"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:19,vars:16,consts:[["noKeys",""],["tagName",""],[1,"tb-modbus-keys-panel"],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-panel-title"],["class","tb-form-panel no-border no-padding key-panel",4,"ngIf","ngIfElse"],["type","button","mat-stroked-button","","color","primary",3,"click"],[1,"tb-flex","flex-end"],["mat-button","","color","primary","type","button",3,"click"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[1,"tb-form-panel","no-border","no-padding","key-panel"],["class","tb-form-panel no-border no-padding tb-flex no-flex row center fill-width",4,"ngFor","ngForOf","ngForTrackBy"],[1,"tb-form-panel","no-border","no-padding","tb-flex","no-flex","row","center","fill-width"],[1,"tb-form-panel","stroked","tb-flex"],[3,"formGroup"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],["class","title-container","tbTruncateWithTooltip","",4,"ngIf","ngIfElse"],["matExpansionPanelContent",""],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],["tbTruncateWithTooltip","",1,"title-container"],[1,"tb-flex"],[1,"title-container","tb-flex"],["tbTruncateWithTooltip","",1,"key-label"],[1,"title-container"],[1,"key-label"],[1,"tb-form-hint","tb-primary-fill","tb-flex","center","align-center"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","tag",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["translate","",1,"fixed-title-width"],["formControlName","type"],[3,"value",4,"ngFor","ngForOf"],["class","tb-form-row column-xs",4,"ngIf"],["matInput","","type","number","min","1","max","50000","name","value","formControlName","objectsCount",3,"placeholder","readonly"],[4,"ngIf"],["matInput","","type","number","min","0","max","50000","name","value","formControlName","address",3,"placeholder"],["class","tb-form-panel stroked tb-slide-toggle",4,"ngIf"],["class","stroked tb-form-panel","formControlName","reportStrategy",3,"defaultValue","isExpansionMode",4,"ngIf"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[3,"value"],["formControlName","functionCode"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","flex","tb-suffix-absolute"],["matInput","","formControlName","bit","step","1","type","number","min","0",3,"placeholder"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap","fill-width"],["formControlName","bitTargetType"],[1,"tb-form-panel","stroked","tb-slide-toggle"],[1,"mat-slide",3,"click","formControl"],[3,"tb-hint-tooltip-icon"],["formControlName","modifierType"],[1,"tb-flex","align-center"],[1,"tb-mat-18",3,"svgIcon"],["matInput","","required","","formControlName","modifierValue","step","0.1","type","number",3,"placeholder"],[1,"tb-mat-20",3,"svgIcon"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","value",3,"placeholder"],["formControlName","reportStrategy",1,"stroked","tb-form-panel",3,"defaultValue","isExpansionMode"],[1,"tb-flex","no-flex","center","align-center","key-panel"],["translate","",1,"tb-prompt"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",2)(1,"div",3)(2,"div",4),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(5,Op,2,2,"div",5),t.ɵɵelementStart(6,"div")(7,"button",6),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addKey())})),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(10,qp,3,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(12,"div",7)(13,"button",8),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"button",9),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.applyKeysData())})),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(11);t.ɵɵadvance(3),t.ɵɵtextInterpolate2("",t.ɵɵpipeBind1(4,8,n.panelTitle),""," ("+n.keysListFormArray.controls.length+")",""),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.keysListFormArray.controls.length)("ngIfElse",e),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(9,10,n.addKeyTitle)," "),t.ɵɵadvance(6),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,12,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.keysListFormArray.invalid||!n.keysListFormArray.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,14,"action.apply")," ")}},dependencies:t.ɵɵgetComponentDepsFactory(Bp,[B,g,Eo,ta,Hn]),styles:['@charset "UTF-8";[_nghost-%COMP%] .tb-modbus-keys-panel[_ngcontent-%COMP%]{width:77vw;max-width:700px}[_nghost-%COMP%] .tb-modbus-keys-panel[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{width:180px}[_nghost-%COMP%] .tb-modbus-keys-panel[_ngcontent-%COMP%] .key-label[_ngcontent-%COMP%]{font-weight:400}[_nghost-%COMP%] .tb-modbus-keys-panel[_ngcontent-%COMP%] .key-panel[_ngcontent-%COMP%]{height:500px;overflow:auto}[_nghost-%COMP%] .tb-modbus-keys-panel[_ngcontent-%COMP%] .tb-form-panel[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%]{width:56px;height:56px;padding:16px;color:#0000008a}']})}}e("ModbusDataKeysPanelComponent",Bp),Ee([w()],Bp.prototype,"isMaster",void 0),Ee([w()],Bp.prototype,"hideNewFields",void 0);const Np=()=>({$implicit:null}),Rp=e=>({$implicit:e});function _p(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",7),t.ɵɵelementContainer(2,8),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(),n=t.ɵɵreference(4);t.ɵɵadvance(),t.ɵɵproperty("formGroup",e.valuesFormGroup),t.ɵɵadvance(),t.ɵɵproperty("ngTemplateOutlet",n)("ngTemplateOutletContext",t.ɵɵpureFunction0(3,Np))}}function Dp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-tab",11),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"div",7),t.ɵɵelementContainer(3,8),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2),r=t.ɵɵreference(4);t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(1,4,a.ModbusValuesTranslationsMap.get(e))),t.ɵɵadvance(2),t.ɵɵproperty("formGroup",a.valuesFormGroup.get(e)),t.ɵɵadvance(),t.ɵɵproperty("ngTemplateOutlet",r)("ngTemplateOutletContext",t.ɵɵpureFunction1(6,Rp,e))}}function Vp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-tab-group",9),t.ɵɵtemplate(1,Dp,4,8,"mat-tab",10),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("formGroup",e.valuesFormGroup),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.modbusRegisterTypes)}}function Ap(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.tag," ")}}function Gp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.tag," ")}}function jp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.tag," ")}}function Lp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.tag," ")}}function Up(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",12)(1,"div",13),t.ɵɵtext(2,"gateway.attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",14)(4,"mat-chip-listbox",15),t.ɵɵtemplate(5,Ap,2,1,"mat-chip",16),t.ɵɵelementStart(6,"mat-chip",17),t.ɵɵelement(7,"label",18),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"button",19,2),t.ɵɵpipe(10,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵreference(9),i=t.ɵɵnextContext();return t.ɵɵresetView(i.manageKeys(n,r,i.ModbusValueKey.ATTRIBUTES,a))})),t.ɵɵelementStart(11,"tb-icon",20),t.ɵɵtext(12,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(13,"div",12)(14,"div",13),t.ɵɵtext(15,"gateway.timeseries"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"div",14)(17,"mat-chip-listbox",15),t.ɵɵtemplate(18,Gp,2,1,"mat-chip",16),t.ɵɵelementStart(19,"mat-chip",17),t.ɵɵelement(20,"label",18),t.ɵɵelementEnd()(),t.ɵɵelementStart(21,"button",19,3),t.ɵɵpipe(23,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵreference(22),i=t.ɵɵnextContext();return t.ɵɵresetView(i.manageKeys(n,r,i.ModbusValueKey.TIMESERIES,a))})),t.ɵɵelementStart(24,"tb-icon",20),t.ɵɵtext(25,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(26,"div",12)(27,"div",13),t.ɵɵtext(28,"gateway.attribute-updates"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"div",14)(30,"mat-chip-listbox",15),t.ɵɵtemplate(31,jp,2,1,"mat-chip",16),t.ɵɵelementStart(32,"mat-chip",17),t.ɵɵelement(33,"label",18),t.ɵɵelementEnd()(),t.ɵɵelementStart(34,"button",19,4),t.ɵɵpipe(36,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵreference(35),i=t.ɵɵnextContext();return t.ɵɵresetView(i.manageKeys(n,r,i.ModbusValueKey.ATTRIBUTES_UPDATES,a))})),t.ɵɵelementStart(37,"tb-icon",20),t.ɵɵtext(38,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(39,"div",12)(40,"div",13),t.ɵɵtext(41,"gateway.rpc-requests"),t.ɵɵelementEnd(),t.ɵɵelementStart(42,"div",14)(43,"mat-chip-listbox",15),t.ɵɵtemplate(44,Lp,2,1,"mat-chip",16),t.ɵɵelementStart(45,"mat-chip",17),t.ɵɵelement(46,"label",18),t.ɵɵelementEnd()(),t.ɵɵelementStart(47,"button",19,5),t.ɵɵpipe(49,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵreference(48),i=t.ɵɵnextContext();return t.ɵɵresetView(i.manageKeys(n,r,i.ModbusValueKey.RPC_REQUESTS,a))})),t.ɵɵelementStart(50,"tb-icon",20),t.ɵɵtext(51,"edit"),t.ɵɵelementEnd()()()()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("tb-ellipsis-chip-list",a.getValueGroup(a.ModbusValueKey.ATTRIBUTES,e).value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",a.getValueGroup(a.ModbusValueKey.ATTRIBUTES,e).value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(10,16,"action.edit")),t.ɵɵproperty("disabled",a.disabled),t.ɵɵadvance(9),t.ɵɵproperty("tb-ellipsis-chip-list",a.getValueGroup(a.ModbusValueKey.TIMESERIES,e).value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",a.getValueGroup(a.ModbusValueKey.TIMESERIES,e).value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(23,18,"action.edit")),t.ɵɵproperty("disabled",a.disabled),t.ɵɵadvance(9),t.ɵɵproperty("tb-ellipsis-chip-list",a.getValueGroup(a.ModbusValueKey.ATTRIBUTES_UPDATES,e).value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",a.getValueGroup(a.ModbusValueKey.ATTRIBUTES_UPDATES,e).value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(36,20,"action.edit")),t.ɵɵproperty("disabled",a.disabled),t.ɵɵadvance(9),t.ɵɵproperty("tb-ellipsis-chip-list",a.getValueGroup(a.ModbusValueKey.RPC_REQUESTS,e).value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",a.getValueGroup(a.ModbusValueKey.RPC_REQUESTS,e).value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(49,22,"action.edit")),t.ɵɵproperty("disabled",a.disabled)}}class $p{constructor(e,t,n,a,r){this.fb=e,this.popoverService=t,this.renderer=n,this.viewContainerRef=a,this.cdr=r,this.singleMode=!1,this.hideNewFields=!1,this.disabled=!1,this.modbusRegisterTypes=Object.values(_a),this.modbusValueKeys=Object.values(Da),this.ModbusValuesTranslationsMap=Ga,this.ModbusValueKey=Da,this.destroy$=new ie}ngOnInit(){this.initializeValuesFormGroup(),this.observeValuesChanges()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){if(this.singleMode)this.valuesFormGroup.setValue(this.getSingleRegisterState(e),{emitEvent:!1});else{const{holding_registers:t,coils_initializer:n,input_registers:a,discrete_inputs:r}=e;this.valuesFormGroup.setValue({holding_registers:this.getSingleRegisterState(t),coils_initializer:this.getSingleRegisterState(n),input_registers:this.getSingleRegisterState(a),discrete_inputs:this.getSingleRegisterState(r)},{emitEvent:!1})}this.cdr.markForCheck()}validate(){return this.valuesFormGroup.valid?null:{valuesFormGroup:{valid:!1}}}setDisabledState(e){this.disabled=e,this.cdr.markForCheck()}getValueGroup(e,t){return t?this.valuesFormGroup.get(t).get(e):this.valuesFormGroup.get(e)}manageKeys(e,t,n,a){e.stopPropagation();const r=t._elementRef.nativeElement;if(this.popoverService.hasPopover(r))return void this.popoverService.hidePopover(r);const i=this.getValueGroup(n,a),o={values:i.value,isMaster:!this.singleMode,keysType:n,panelTitle:Ka.get(n),addKeyTitle:Ha.get(n),deleteKeyTitle:Qa.get(n),noKeysText:Wa.get(n),hideNewFields:this.hideNewFields},s=this.popoverService.displayPopover(r,this.renderer,this.viewContainerRef,Bp,"leftBottom",!1,null,o,{},{},{},!0);s.tbComponentRef.instance.popover=s,s.tbComponentRef.instance.keysDataApplied.pipe(de(this.destroy$)).subscribe((e=>{s.hide(),i.patchValue(e),i.markAsDirty(),this.cdr.markForCheck()}))}initializeValuesFormGroup(){const e=()=>this.fb.group(this.modbusValueKeys.reduce(((e,t)=>(e[t]=this.fb.control([[],[]]),e)),{}));this.singleMode?this.valuesFormGroup=e():this.valuesFormGroup=this.fb.group(this.modbusRegisterTypes.reduce(((t,n)=>(t[n]=e(),t)),{}))}observeValuesChanges(){this.valuesFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}getSingleRegisterState(e){return{attributes:e?.attributes??[],timeseries:e?.timeseries??[],attributeUpdates:e?.attributeUpdates??[],rpc:e?.rpc??[]}}static{this.ɵfac=function(e){return new(e||$p)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(qe.TbPopoverService),t.ɵɵdirectiveInject(t.Renderer2),t.ɵɵdirectiveInject(t.ViewContainerRef),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:$p,selectors:[["tb-modbus-values"]],inputs:{singleMode:"singleMode",hideNewFields:"hideNewFields"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>$p)),multi:!0},{provide:X,useExisting:i((()=>$p)),multi:!0}]),t.ɵɵStandaloneFeature],decls:5,vars:2,consts:[["multipleView",""],["singleView",""],["attributesButton",""],["telemetryButton",""],["attributesUpdatesButton",""],["rpcRequestsButton",""],[4,"ngIf","ngIfElse"],[1,"tb-form-panel","no-border","no-padding","padding-top",3,"formGroup"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[3,"formGroup"],[3,"label",4,"ngFor","ngForOf"],[3,"label"],[1,"tb-form-row","space-between","tb-flex"],["translate","",1,"fixed-title-width"],[1,"tb-flex","ellipsis-chips-container"],[1,"tb-flex",3,"tb-ellipsis-chip-list"],[4,"ngFor","ngForOf"],[1,"mat-mdc-chip","ellipsis-chip"],[1,"ellipsis-text"],["type","button","mat-icon-button","","color","primary","matTooltipPosition","above",3,"click","disabled","matTooltip"],["matButtonIcon",""]],template:function(e,n){if(1&e&&t.ɵɵtemplate(0,_p,3,4,"ng-container",6)(1,Vp,2,2,"ng-template",null,0,t.ɵɵtemplateRefExtractor)(3,Up,52,24,"ng-template",null,1,t.ɵɵtemplateRefExtractor),2&e){const e=t.ɵɵreference(2);t.ɵɵproperty("ngIf",n.singleMode)("ngIfElse",e)}},dependencies:t.ɵɵgetComponentDepsFactory($p,[B,g,Qn]),styles:['@charset "UTF-8";[_nghost-%COMP%] .mat-mdc-tab-body-wrapper{min-height:320px} .mdc-evolution-chip-set__chips{align-items:center}'],changeDetection:o.OnPush})}}function zp(e,n){1&e&&(t.ɵɵelementStart(0,"div",2)(1,"div",10),t.ɵɵtext(2,"gateway.server-hostname"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",5)(4,"mat-form-field",6),t.ɵɵelement(5,"input",16),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,1,"gateway.set")))}function Kp(e,n){1&e&&(t.ɵɵelementStart(0,"div",17)(1,"mat-slide-toggle",18)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,1,"gateway.request-client-certificate")," "))}e("ModbusValuesComponent",$p),Ee([w()],$p.prototype,"singleMode",void 0),Ee([w()],$p.prototype,"hideNewFields",void 0);class Hp{constructor(e,t){this.fb=e,this.cdr=t,this.isMaster=!1,this.disabled=!1,this.destroy$=new ie,this.securityConfigFormGroup=this.fb.group({certfile:["",[J.pattern(Re)]],keyfile:["",[J.pattern(Re)]],password:["",[J.pattern(Re)]],server_hostname:["",[J.pattern(Re)]],reqclicert:[{value:!1,disabled:!0}]}),this.observeValueChanges()}ngOnChanges(){this.updateMasterEnabling()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}setDisabledState(e){this.disabled=e,this.disabled?this.securityConfigFormGroup.disable({emitEvent:!1}):this.securityConfigFormGroup.enable({emitEvent:!1}),this.updateMasterEnabling(),this.cdr.markForCheck()}validate(){return this.securityConfigFormGroup.valid?null:{securityConfigFormGroup:{valid:!1}}}writeValue(e){const{certfile:t,password:n,keyfile:a,server_hostname:r}=e,i={certfile:t??"",password:n??"",keyfile:a??"",server_hostname:r??"",reqclicert:!!e.reqclicert};this.securityConfigFormGroup.reset(i,{emitEvent:!1})}updateMasterEnabling(){this.isMaster?(this.disabled||this.securityConfigFormGroup.get("reqclicert").enable({emitEvent:!1}),this.securityConfigFormGroup.get("server_hostname").disable({emitEvent:!1})):(this.disabled||this.securityConfigFormGroup.get("server_hostname").enable({emitEvent:!1}),this.securityConfigFormGroup.get("reqclicert").disable({emitEvent:!1}))}observeValueChanges(){this.securityConfigFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}static{this.ɵfac=function(e){return new(e||Hp)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Hp,selectors:[["tb-modbus-security-config"]],inputs:{isMaster:"isMaster"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Hp)),multi:!0},{provide:X,useExisting:i((()=>Hp)),multi:!0}]),t.ɵɵNgOnChangesFeature,t.ɵɵStandaloneFeature],decls:33,vars:21,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-hint","tb-primary-fill"],[1,"tb-form-row","space-between","tb-flex","fill-width"],["tbTruncateWithTooltip","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip","","translate",""],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","certfile",3,"placeholder"],[1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["matInput","","name","value","formControlName","keyfile",3,"placeholder"],["translate","",1,"fixed-title-width"],["matInput","","type","password","name","value","formControlName","password",3,"placeholder"],["matSuffix","",1,"tb-flex","no-gap","align-center","fill-height"],[1,"tb-flex","align-center","fill-height"],["class","tb-form-row space-between tb-flex fill-width",4,"ngIf"],["class","tb-form-row",4,"ngIf"],["matInput","","name","value","formControlName","server_hostname",3,"placeholder"],[1,"tb-form-row"],["formControlName","reqclicert",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",2)(5,"div",3),t.ɵɵpipe(6,"translate"),t.ɵɵelementStart(7,"span",4),t.ɵɵtext(8,"gateway.client-cert-path"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",5)(10,"mat-form-field",6),t.ɵɵelement(11,"input",7),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(13,"div",2)(14,"div",8),t.ɵɵpipe(15,"translate"),t.ɵɵelementStart(16,"span",4),t.ɵɵtext(17,"gateway.private-key-path"),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",5)(19,"mat-form-field",6),t.ɵɵelement(20,"input",9),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(22,"div",2)(23,"div",10),t.ɵɵtext(24,"gateway.password"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"div",5)(26,"mat-form-field",6),t.ɵɵelement(27,"input",11),t.ɵɵpipe(28,"translate"),t.ɵɵelementStart(29,"div",12),t.ɵɵelement(30,"tb-toggle-password",13),t.ɵɵelementEnd()()()(),t.ɵɵtemplate(31,zp,7,3,"div",14)(32,Kp,5,3,"div",15),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.securityConfigFormGroup),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,9,"gateway.hints.path-in-os")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(6,11,"gateway.hints.ca-cert")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(12,13,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(15,15,"gateway.private-key-path")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(21,17,"gateway.set")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(28,19,"gateway.set")),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",!n.isMaster),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.isMaster))},dependencies:t.ɵɵgetComponentDepsFactory(Hp,[B,g,Hn]),encapsulation:2,changeDetection:o.OnPush})}}function Qp(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusProtocolLabelsMap.get(e))}}function Wp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.host-required"))}function Jp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.host"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",53),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Wp,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.host")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("host").hasError("required")&&e.slaveConfigFormGroup.get("host").touched)}}function Yp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.slaveConfigFormGroup.get("port")))}}function Xp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",55),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Yp,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,5,"gateway.hints.modbus.port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("min",e.portLimits.MIN),t.ɵɵpropertyInterpolate("max",e.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,7,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(e.slaveConfigFormGroup.get("port").hasError("required")||e.slaveConfigFormGroup.get("port").hasError("min")||e.slaveConfigFormGroup.get("port").hasError("max"))&&e.slaveConfigFormGroup.get("port").touched)}}function Zp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.port-required"))}function ec(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",56),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Zp,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.serial-port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("serialPort").hasError("required")&&e.slaveConfigFormGroup.get("serialPort").touched)}}function tc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusMethodLabelsMap.get(e))}}function nc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function ac(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function rc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusParityLabelsMap.get(e))}}function ic(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",17)(2,"div",18),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4,"gateway.baudrate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",19)(6,"mat-select",57),t.ɵɵtemplate(7,nc,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(8,"div",17)(9,"div",18),t.ɵɵpipe(10,"translate"),t.ɵɵtext(11,"gateway.bytesize"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",19)(13,"mat-select",58),t.ɵɵtemplate(14,ac,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(15,"div",17)(16,"div",18),t.ɵɵpipe(17,"translate"),t.ɵɵtext(18,"gateway.stopbits"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"mat-form-field",19),t.ɵɵelement(20,"input",59),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(22,"div",17)(23,"div",18),t.ɵɵpipe(24,"translate"),t.ɵɵtext(25,"gateway.parity"),t.ɵɵelementEnd(),t.ɵɵelementStart(26,"mat-form-field",19)(27,"mat-select",60),t.ɵɵtemplate(28,rc,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(29,"div",36)(30,"mat-slide-toggle",61)(31,"mat-label",38),t.ɵɵpipe(32,"translate"),t.ɵɵtext(33),t.ɵɵpipe(34,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,10,"gateway.hints.modbus.baudrate")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusBaudrates),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(10,12,"gateway.hints.modbus.bytesize")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusByteSizes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(17,14,"gateway.hints.modbus.stopbits")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(21,16,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(24,18,"gateway.hints.modbus.parity")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusParities),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(32,20,"gateway.hints.modbus.strict")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(34,22,"gateway.strict")," ")}}function oc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.unit-id-required"))}function sc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-required"))}function lc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-profile-required"))}function pc(e,n){1&e&&(t.ɵɵelementStart(0,"div",36)(1,"mat-slide-toggle",62)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,1,"gateway.send-data-on-change")," "))}function cc(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",63),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("defaultValue",e.ReportStrategyDefaultValue.Device)("isExpansionMode",!0)}}function dc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function mc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function uc(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",64)(1,"mat-expansion-panel",65)(2,"mat-expansion-panel-header",66)(3,"mat-panel-title")(4,"mat-slide-toggle",67),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelement(8,"tb-modbus-security-config",68),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("expanded",e.showSecurityControl.value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.showSecurityControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,3,"gateway.tls-connection")," ")}}e("ModbusSecurityConfigComponent",Hp),Ee([w()],Hp.prototype,"isMaster",void 0);class gc extends lp{constructor(e,t,n,a,r){super(e,t,n,a,r),this.fb=e,this.store=t,this.router=n,this.data=a,this.dialogRef=r}getSlaveResultData(){const{values:e,type:t,serialPort:n,...a}=this.slaveConfigFormGroup.value,r={...a,type:t,...e};return t===Oa.Serial&&(r.port=n),r.reportStrategy||delete r.reportStrategy,r}addFieldsToFormGroup(){this.slaveConfigFormGroup.addControl("reportStrategy",this.fb.control(null))}static{this.ɵfac=function(e){return new(e||gc)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(ae.Store),t.ɵɵdirectiveInject(re.Router),t.ɵɵdirectiveInject(te),t.ɵɵdirectiveInject(ne.MatDialogRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:gc,selectors:[["tb-modbus-slave-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:141,vars:97,consts:[["serialPort",""],["reportStrategy",""],[1,"slaves-config-container"],["color","primary"],[1,"flex-1"],[3,"tb-help"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content","",1,"tb-form-panel",3,"formGroup"],[1,"stroked","tb-form-panel"],[1,"tb-form-panel","no-border","no-padding","padding-top"],[1,"tb-flex","row","space-between","align-center","no-gap","fill-width"],["translate","",1,"fixed-title-width"],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],["class","tb-form-row column-xs",4,"ngIf"],["class","tb-form-row column-xs",4,"ngIf","ngIfElse"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["formControlName","method"],[4,"ngIf"],["translate","",1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","min","0","name","value","formControlName","unitId",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","deviceName",3,"placeholder"],["matInput","","name","value","formControlName","deviceType",3,"placeholder"],["class","tb-form-row",4,"ngIf","ngIfElse"],[1,"tb-form-panel","stroked"],[1,"tb-settings"],["translate","",1,"tb-form-panel-title"],["matInput","","type","number","min","0","name","value","formControlName","timeout",3,"placeholder"],["formControlName","byteOrder"],["formControlName","wordOrder"],["class","tb-form-panel stroked tb-slide-toggle",4,"ngIf"],[1,"tb-form-row"],["formControlName","retries",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["formControlName","retryOnEmpty",1,"mat-slide"],["formControlName","retryOnInvalid",1,"mat-slide"],[1,"fixed-title-width-260","tb-required",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip","","translate",""],["matInput","","type","number","min","0","name","value","formControlName","pollPeriod",3,"placeholder"],["translate","",1,"fixed-title-width-260","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","min","0","name","value","formControlName","connectAttemptTimeMs",3,"placeholder"],["matInput","","type","number","min","0","name","value","formControlName","connectAttemptCount",3,"placeholder"],["matInput","","type","number","min","0","name","value","formControlName","waitAfterFailedAttemptsMs",3,"placeholder"],["formControlName","values",3,"singleMode","hideNewFields"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","primary","type","button","cdkFocusInitial","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[3,"value"],["matInput","","name","value","formControlName","host",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],["matInput","","name","value","formControlName","serialPort",3,"placeholder"],["formControlName","baudrate"],["formControlName","bytesize"],["matInput","","type","number","min","0","name","value","formControlName","stopbits",3,"placeholder"],["formControlName","parity"],["formControlName","strict",1,"mat-slide"],["formControlName","sendDataOnlyOnChange",1,"mat-slide"],["formControlName","reportStrategy",1,"stroked","tb-form-panel",3,"defaultValue","isExpansionMode"],[1,"tb-form-panel","stroked","tb-slide-toggle"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],[1,"mat-slide","justify-start",3,"click","formControl"],["formControlName","security",1,"security-config"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",2)(1,"mat-toolbar",3)(2,"h2"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",4)(6,"div",5),t.ɵɵelementStart(7,"button",6),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵelementStart(8,"mat-icon",7),t.ɵɵtext(9,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",8)(11,"div",9)(12,"div",10)(13,"div",11)(14,"div",12),t.ɵɵtext(15,"gateway.server-connection"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"tb-toggle-select",13),t.ɵɵtemplate(17,Qp,2,2,"tb-toggle-option",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",10),t.ɵɵtemplate(19,Jp,8,7,"div",15)(20,Xp,8,9,"div",16)(21,ec,8,7,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(23,"div",17)(24,"div",18),t.ɵɵpipe(25,"translate"),t.ɵɵtext(26," gateway.method "),t.ɵɵelementEnd(),t.ɵɵelementStart(27,"mat-form-field",19)(28,"mat-select",20),t.ɵɵtemplate(29,tc,2,2,"mat-option",14),t.ɵɵelementEnd()()()(),t.ɵɵtemplate(30,ic,35,24,"ng-container",21),t.ɵɵelementStart(31,"div",17)(32,"div",22),t.ɵɵpipe(33,"translate"),t.ɵɵtext(34,"gateway.unit-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(35,"mat-form-field",19),t.ɵɵelement(36,"input",23),t.ɵɵpipe(37,"translate"),t.ɵɵtemplate(38,oc,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵelementStart(39,"div",17)(40,"div",25),t.ɵɵtext(41,"gateway.device-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(42,"mat-form-field",19),t.ɵɵelement(43,"input",26),t.ɵɵpipe(44,"translate"),t.ɵɵtemplate(45,sc,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"div",17)(47,"div",25),t.ɵɵtext(48,"gateway.device-profile"),t.ɵɵelementEnd(),t.ɵɵelementStart(49,"mat-form-field",19),t.ɵɵelement(50,"input",27),t.ɵɵpipe(51,"translate"),t.ɵɵtemplate(52,lc,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵtemplate(53,pc,5,3,"div",28)(54,cc,1,2,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(56,"div",29)(57,"mat-expansion-panel",30)(58,"mat-expansion-panel-header")(59,"mat-panel-title")(60,"div",31),t.ɵɵtext(61,"gateway.advanced-connection-settings"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(62,"div",10)(63,"div",17)(64,"div",18),t.ɵɵpipe(65,"translate"),t.ɵɵtext(66,"gateway.connection-timeout"),t.ɵɵelementEnd(),t.ɵɵelementStart(67,"mat-form-field",19),t.ɵɵelement(68,"input",32),t.ɵɵpipe(69,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(70,"div",17)(71,"div",18),t.ɵɵpipe(72,"translate"),t.ɵɵtext(73,"gateway.byte-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(74,"mat-form-field",19)(75,"mat-select",33),t.ɵɵtemplate(76,dc,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(77,"div",17)(78,"div",18),t.ɵɵpipe(79,"translate"),t.ɵɵtext(80,"gateway.word-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(81,"mat-form-field",19)(82,"mat-select",34),t.ɵɵtemplate(83,mc,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵtemplate(84,uc,9,5,"div",35),t.ɵɵelementStart(85,"div",36)(86,"mat-slide-toggle",37)(87,"mat-label",38),t.ɵɵpipe(88,"translate"),t.ɵɵtext(89),t.ɵɵpipe(90,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(91,"div",36)(92,"mat-slide-toggle",39)(93,"mat-label",38),t.ɵɵpipe(94,"translate"),t.ɵɵtext(95),t.ɵɵpipe(96,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(97,"div",36)(98,"mat-slide-toggle",40)(99,"mat-label",38),t.ɵɵpipe(100,"translate"),t.ɵɵtext(101),t.ɵɵpipe(102,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(103,"div",17)(104,"div",41),t.ɵɵpipe(105,"translate"),t.ɵɵelementStart(106,"span",42),t.ɵɵtext(107," gateway.poll-period "),t.ɵɵelementEnd()(),t.ɵɵelementStart(108,"mat-form-field",19),t.ɵɵelement(109,"input",43),t.ɵɵpipe(110,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(111,"div",17)(112,"div",44),t.ɵɵpipe(113,"translate"),t.ɵɵtext(114,"gateway.connect-attempt-time"),t.ɵɵelementEnd(),t.ɵɵelementStart(115,"mat-form-field",19),t.ɵɵelement(116,"input",45),t.ɵɵpipe(117,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(118,"div",17)(119,"div",44),t.ɵɵpipe(120,"translate"),t.ɵɵtext(121,"gateway.connect-attempt-count"),t.ɵɵelementEnd(),t.ɵɵelementStart(122,"mat-form-field",19),t.ɵɵelement(123,"input",46),t.ɵɵpipe(124,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(125,"div",17)(126,"div",44),t.ɵɵpipe(127,"translate"),t.ɵɵtext(128,"gateway.wait-after-failed-attempts"),t.ɵɵelementEnd(),t.ɵɵelementStart(129,"mat-form-field",19),t.ɵɵelement(130,"input",47),t.ɵɵpipe(131,"translate"),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(132,"div",29),t.ɵɵelement(133,"tb-modbus-values",48),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(134,"div",49)(135,"button",50),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(136),t.ɵɵpipe(137,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(138,"button",51),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.add())})),t.ɵɵtext(139),t.ɵɵpipe(140,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(22),a=t.ɵɵreference(55);t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,45,"gateway.server-slave")),t.ɵɵadvance(3),t.ɵɵproperty("tb-help",n.modbusHelpLink),t.ɵɵadvance(4),t.ɵɵproperty("formGroup",n.slaveConfigFormGroup),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",n.modbusProtocolTypes),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial)("ngIfElse",e),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(25,47,"gateway.hints.modbus.framer-type")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.protocolType===n.ModbusProtocolType.Serial?n.modbusSerialMethodTypes:n.modbusMethodTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType===n.ModbusProtocolType.Serial),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(33,49,"gateway.hints.modbus.unit-id")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(37,51,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("unitId").hasError("required")&&n.slaveConfigFormGroup.get("unitId").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(44,53,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceName").hasError("required")&&n.slaveConfigFormGroup.get("deviceName").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(51,55,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceType").hasError("required")&&n.slaveConfigFormGroup.get("deviceType").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.data.hideNewFields)("ngIfElse",a),t.ɵɵadvance(11),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(65,57,"gateway.hints.modbus.connection-timeout")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(69,59,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(72,61,"gateway.hints.modbus.byte-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(79,63,"gateway.hints.modbus.word-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(88,65,"gateway.hints.modbus.retries")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(90,67,"gateway.retries")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(94,69,"gateway.hints.modbus.retries-on-empty")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(96,71,"gateway.retries-on-empty")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(100,73,"gateway.hints.modbus.retries-on-invalid")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(102,75,"gateway.retries-on-invalid")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(105,77,"gateway.hints.modbus.poll-period")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(110,79,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(113,81,"gateway.hints.modbus.connect-attempt-time")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(117,83,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(120,85,"gateway.hints.modbus.connect-attempt-count")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(124,87,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(127,89,"gateway.hints.modbus.wait-after-failed-attempts")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(131,91,"gateway.set")),t.ɵɵadvance(3),t.ɵɵproperty("singleMode",!0)("hideNewFields",n.data.hideNewFields),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(137,93,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.slaveConfigFormGroup.invalid||!n.slaveConfigFormGroup.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(140,95,n.data.buttonTitle)," ")}},dependencies:t.ɵɵgetComponentDepsFactory(gc,[B,g,$p,Hp,So,ta,Hn]),styles:['@charset "UTF-8";[_nghost-%COMP%] .slaves-config-container[_ngcontent-%COMP%]{width:80vw;max-width:900px}[_nghost-%COMP%] .slave-name-label[_ngcontent-%COMP%]{margin-right:16px;color:#000000de}[_nghost-%COMP%] .fixed-title-width-260[_ngcontent-%COMP%]{min-width:260px}[_nghost-%COMP%] .security-config .fixed-title-width{min-width:230px}'],changeDetection:o.OnPush})}}function hc(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusProtocolLabelsMap.get(e))}}function yc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.host-required"))}function fc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.host"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",53),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,yc,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.host")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("host").hasError("required")&&e.slaveConfigFormGroup.get("host").touched)}}function vc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.slaveConfigFormGroup.get("port")))}}function bc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",55),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,vc,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,5,"gateway.hints.modbus.port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("min",e.portLimits.MIN),t.ɵɵpropertyInterpolate("max",e.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,7,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(e.slaveConfigFormGroup.get("port").hasError("required")||e.slaveConfigFormGroup.get("port").hasError("min")||e.slaveConfigFormGroup.get("port").hasError("max"))&&e.slaveConfigFormGroup.get("port").touched)}}function xc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.port-required"))}function Cc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",56),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,xc,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.serial-port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("serialPort").hasError("required")&&e.slaveConfigFormGroup.get("serialPort").touched)}}function wc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusMethodLabelsMap.get(e))}}function Sc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Ec(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Tc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusParityLabelsMap.get(e))}}function Ic(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",17)(2,"div",18),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4,"gateway.baudrate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",19)(6,"mat-select",57),t.ɵɵtemplate(7,Sc,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(8,"div",17)(9,"div",18),t.ɵɵpipe(10,"translate"),t.ɵɵtext(11,"gateway.bytesize"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",19)(13,"mat-select",58),t.ɵɵtemplate(14,Ec,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(15,"div",17)(16,"div",18),t.ɵɵpipe(17,"translate"),t.ɵɵtext(18,"gateway.stopbits"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"mat-form-field",19),t.ɵɵelement(20,"input",59),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(22,"div",17)(23,"div",18),t.ɵɵpipe(24,"translate"),t.ɵɵtext(25,"gateway.parity"),t.ɵɵelementEnd(),t.ɵɵelementStart(26,"mat-form-field",19)(27,"mat-select",60),t.ɵɵtemplate(28,Tc,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(29,"div",36)(30,"mat-slide-toggle",61)(31,"mat-label",38),t.ɵɵpipe(32,"translate"),t.ɵɵtext(33),t.ɵɵpipe(34,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,10,"gateway.hints.modbus.baudrate")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusBaudrates),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(10,12,"gateway.hints.modbus.bytesize")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusByteSizes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(17,14,"gateway.hints.modbus.stopbits")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(21,16,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(24,18,"gateway.hints.modbus.parity")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusParities),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(32,20,"gateway.hints.modbus.strict")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(34,22,"gateway.strict")," ")}}function kc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.unit-id-required"))}function Mc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-required"))}function Pc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-profile-required"))}function Fc(e,n){1&e&&(t.ɵɵelementStart(0,"div",36)(1,"mat-slide-toggle",62)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,1,"gateway.send-data-on-change")," "))}function Oc(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",63),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("defaultValue",e.ReportStrategyDefaultValue.Device)("isExpansionMode",!0)}}function qc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Bc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Nc(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",64)(1,"mat-expansion-panel",65)(2,"mat-expansion-panel-header",66)(3,"mat-panel-title")(4,"mat-slide-toggle",67),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelement(8,"tb-modbus-security-config",68),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("expanded",e.showSecurityControl.value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.showSecurityControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,3,"gateway.tls-connection")," ")}}e("ModbusSlaveDialogComponent",gc);class Rc extends lp{constructor(e,t,n,a,r){super(e,t,n,a,r),this.fb=e,this.store=t,this.router=n,this.data=a,this.dialogRef=r}getSlaveResultData(){const{values:e,type:t,serialPort:n,...a}=this.slaveConfigFormGroup.value,r={...a,type:t,...e};return t===Oa.Serial&&(r.port=n),r}addFieldsToFormGroup(){this.slaveConfigFormGroup.addControl("sendDataOnlyOnChange",this.fb.control(!1))}static{this.ɵfac=function(e){return new(e||Rc)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(ae.Store),t.ɵɵdirectiveInject(re.Router),t.ɵɵdirectiveInject(te),t.ɵɵdirectiveInject(ne.MatDialogRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Rc,selectors:[["tb-modbus-legacy-slave-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:141,vars:97,consts:[["serialPort",""],["reportStrategy",""],[1,"slaves-config-container"],["color","primary"],[1,"flex-1"],[3,"tb-help"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content","",1,"tb-form-panel",3,"formGroup"],[1,"stroked","tb-form-panel"],[1,"tb-form-panel","no-border","no-padding","padding-top"],[1,"tb-flex","row","space-between","align-center","no-gap","fill-width"],["translate","",1,"fixed-title-width"],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],["class","tb-form-row column-xs",4,"ngIf"],["class","tb-form-row column-xs",4,"ngIf","ngIfElse"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["formControlName","method"],[4,"ngIf"],["translate","",1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","min","0","name","value","formControlName","unitId",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","deviceName",3,"placeholder"],["matInput","","name","value","formControlName","deviceType",3,"placeholder"],["class","tb-form-row",4,"ngIf","ngIfElse"],[1,"tb-form-panel","stroked"],[1,"tb-settings"],["translate","",1,"tb-form-panel-title"],["matInput","","type","number","min","0","name","value","formControlName","timeout",3,"placeholder"],["formControlName","byteOrder"],["formControlName","wordOrder"],["class","tb-form-panel stroked tb-slide-toggle",4,"ngIf"],[1,"tb-form-row"],["formControlName","retries",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["formControlName","retryOnEmpty",1,"mat-slide"],["formControlName","retryOnInvalid",1,"mat-slide"],[1,"fixed-title-width-260","tb-required",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip","","translate",""],["matInput","","type","number","min","0","name","value","formControlName","pollPeriod",3,"placeholder"],["translate","",1,"fixed-title-width-260","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","min","0","name","value","formControlName","connectAttemptTimeMs",3,"placeholder"],["matInput","","type","number","min","0","name","value","formControlName","connectAttemptCount",3,"placeholder"],["matInput","","type","number","min","0","name","value","formControlName","waitAfterFailedAttemptsMs",3,"placeholder"],["formControlName","values",3,"singleMode","hideNewFields"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","primary","type","button","cdkFocusInitial","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[3,"value"],["matInput","","name","value","formControlName","host",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],["matInput","","name","value","formControlName","serialPort",3,"placeholder"],["formControlName","baudrate"],["formControlName","bytesize"],["matInput","","type","number","min","0","name","value","formControlName","stopbits",3,"placeholder"],["formControlName","parity"],["formControlName","strict",1,"mat-slide"],["formControlName","sendDataOnlyOnChange",1,"mat-slide"],["formControlName","reportStrategy",1,"stroked","tb-form-panel",3,"defaultValue","isExpansionMode"],[1,"tb-form-panel","stroked","tb-slide-toggle"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],[1,"mat-slide","justify-start",3,"click","formControl"],["formControlName","security",1,"security-config"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",2)(1,"mat-toolbar",3)(2,"h2"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",4)(6,"div",5),t.ɵɵelementStart(7,"button",6),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵelementStart(8,"mat-icon",7),t.ɵɵtext(9,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",8)(11,"div",9)(12,"div",10)(13,"div",11)(14,"div",12),t.ɵɵtext(15,"gateway.server-connection"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"tb-toggle-select",13),t.ɵɵtemplate(17,hc,2,2,"tb-toggle-option",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",10),t.ɵɵtemplate(19,fc,8,7,"div",15)(20,bc,8,9,"div",16)(21,Cc,8,7,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(23,"div",17)(24,"div",18),t.ɵɵpipe(25,"translate"),t.ɵɵtext(26," gateway.method "),t.ɵɵelementEnd(),t.ɵɵelementStart(27,"mat-form-field",19)(28,"mat-select",20),t.ɵɵtemplate(29,wc,2,2,"mat-option",14),t.ɵɵelementEnd()()()(),t.ɵɵtemplate(30,Ic,35,24,"ng-container",21),t.ɵɵelementStart(31,"div",17)(32,"div",22),t.ɵɵpipe(33,"translate"),t.ɵɵtext(34,"gateway.unit-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(35,"mat-form-field",19),t.ɵɵelement(36,"input",23),t.ɵɵpipe(37,"translate"),t.ɵɵtemplate(38,kc,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵelementStart(39,"div",17)(40,"div",25),t.ɵɵtext(41,"gateway.device-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(42,"mat-form-field",19),t.ɵɵelement(43,"input",26),t.ɵɵpipe(44,"translate"),t.ɵɵtemplate(45,Mc,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"div",17)(47,"div",25),t.ɵɵtext(48,"gateway.device-profile"),t.ɵɵelementEnd(),t.ɵɵelementStart(49,"mat-form-field",19),t.ɵɵelement(50,"input",27),t.ɵɵpipe(51,"translate"),t.ɵɵtemplate(52,Pc,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵtemplate(53,Fc,5,3,"div",28)(54,Oc,1,2,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(56,"div",29)(57,"mat-expansion-panel",30)(58,"mat-expansion-panel-header")(59,"mat-panel-title")(60,"div",31),t.ɵɵtext(61,"gateway.advanced-connection-settings"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(62,"div",10)(63,"div",17)(64,"div",18),t.ɵɵpipe(65,"translate"),t.ɵɵtext(66,"gateway.connection-timeout"),t.ɵɵelementEnd(),t.ɵɵelementStart(67,"mat-form-field",19),t.ɵɵelement(68,"input",32),t.ɵɵpipe(69,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(70,"div",17)(71,"div",18),t.ɵɵpipe(72,"translate"),t.ɵɵtext(73,"gateway.byte-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(74,"mat-form-field",19)(75,"mat-select",33),t.ɵɵtemplate(76,qc,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(77,"div",17)(78,"div",18),t.ɵɵpipe(79,"translate"),t.ɵɵtext(80,"gateway.word-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(81,"mat-form-field",19)(82,"mat-select",34),t.ɵɵtemplate(83,Bc,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵtemplate(84,Nc,9,5,"div",35),t.ɵɵelementStart(85,"div",36)(86,"mat-slide-toggle",37)(87,"mat-label",38),t.ɵɵpipe(88,"translate"),t.ɵɵtext(89),t.ɵɵpipe(90,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(91,"div",36)(92,"mat-slide-toggle",39)(93,"mat-label",38),t.ɵɵpipe(94,"translate"),t.ɵɵtext(95),t.ɵɵpipe(96,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(97,"div",36)(98,"mat-slide-toggle",40)(99,"mat-label",38),t.ɵɵpipe(100,"translate"),t.ɵɵtext(101),t.ɵɵpipe(102,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(103,"div",17)(104,"div",41),t.ɵɵpipe(105,"translate"),t.ɵɵelementStart(106,"span",42),t.ɵɵtext(107," gateway.poll-period "),t.ɵɵelementEnd()(),t.ɵɵelementStart(108,"mat-form-field",19),t.ɵɵelement(109,"input",43),t.ɵɵpipe(110,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(111,"div",17)(112,"div",44),t.ɵɵpipe(113,"translate"),t.ɵɵtext(114,"gateway.connect-attempt-time"),t.ɵɵelementEnd(),t.ɵɵelementStart(115,"mat-form-field",19),t.ɵɵelement(116,"input",45),t.ɵɵpipe(117,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(118,"div",17)(119,"div",44),t.ɵɵpipe(120,"translate"),t.ɵɵtext(121,"gateway.connect-attempt-count"),t.ɵɵelementEnd(),t.ɵɵelementStart(122,"mat-form-field",19),t.ɵɵelement(123,"input",46),t.ɵɵpipe(124,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(125,"div",17)(126,"div",44),t.ɵɵpipe(127,"translate"),t.ɵɵtext(128,"gateway.wait-after-failed-attempts"),t.ɵɵelementEnd(),t.ɵɵelementStart(129,"mat-form-field",19),t.ɵɵelement(130,"input",47),t.ɵɵpipe(131,"translate"),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(132,"div",29),t.ɵɵelement(133,"tb-modbus-values",48),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(134,"div",49)(135,"button",50),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(136),t.ɵɵpipe(137,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(138,"button",51),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.add())})),t.ɵɵtext(139),t.ɵɵpipe(140,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(22),a=t.ɵɵreference(55);t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,45,"gateway.server-slave")),t.ɵɵadvance(3),t.ɵɵproperty("tb-help",n.modbusHelpLink),t.ɵɵadvance(4),t.ɵɵproperty("formGroup",n.slaveConfigFormGroup),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",n.modbusProtocolTypes),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial)("ngIfElse",e),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(25,47,"gateway.hints.modbus.framer-type")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.protocolType===n.ModbusProtocolType.Serial?n.modbusSerialMethodTypes:n.modbusMethodTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType===n.ModbusProtocolType.Serial),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(33,49,"gateway.hints.modbus.unit-id")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(37,51,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("unitId").hasError("required")&&n.slaveConfigFormGroup.get("unitId").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(44,53,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceName").hasError("required")&&n.slaveConfigFormGroup.get("deviceName").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(51,55,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceType").hasError("required")&&n.slaveConfigFormGroup.get("deviceType").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.data.hideNewFields)("ngIfElse",a),t.ɵɵadvance(11),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(65,57,"gateway.hints.modbus.connection-timeout")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(69,59,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(72,61,"gateway.hints.modbus.byte-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(79,63,"gateway.hints.modbus.word-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(88,65,"gateway.hints.modbus.retries")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(90,67,"gateway.retries")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(94,69,"gateway.hints.modbus.retries-on-empty")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(96,71,"gateway.retries-on-empty")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(100,73,"gateway.hints.modbus.retries-on-invalid")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(102,75,"gateway.retries-on-invalid")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(105,77,"gateway.hints.modbus.poll-period")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(110,79,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(113,81,"gateway.hints.modbus.connect-attempt-time")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(117,83,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(120,85,"gateway.hints.modbus.connect-attempt-count")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(124,87,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(127,89,"gateway.hints.modbus.wait-after-failed-attempts")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(131,91,"gateway.set")),t.ɵɵadvance(3),t.ɵɵproperty("singleMode",!0)("hideNewFields",n.data.hideNewFields),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(137,93,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.slaveConfigFormGroup.invalid||!n.slaveConfigFormGroup.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(140,95,n.data.buttonTitle)," ")}},dependencies:t.ɵɵgetComponentDepsFactory(Rc,[B,g,$p,Hp,So,ta]),styles:['@charset "UTF-8";[_nghost-%COMP%] .slaves-config-container[_ngcontent-%COMP%]{width:80vw;max-width:900px}[_nghost-%COMP%] .slave-name-label[_ngcontent-%COMP%]{margin-right:16px;color:#000000de}[_nghost-%COMP%] .fixed-title-width-260[_ngcontent-%COMP%]{min-width:260px}[_nghost-%COMP%] .security-config .fixed-title-width{min-width:230px}'],changeDetection:o.OnPush})}}function _c(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",38),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusProtocolLabelsMap.get(e))}}function Dc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.host-required"))}function Vc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10)(1,"div",14),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.host"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",12),t.ɵɵelement(5,"input",39),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Dc,3,3,"mat-icon",16),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.host")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("host").hasError("required")&&e.slaveConfigFormGroup.get("host").touched)}}function Ac(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.slaveConfigFormGroup.get("port")))}}function Gc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10)(1,"div",14),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",12),t.ɵɵelement(5,"input",41),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Ac,3,3,"mat-icon",16),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,5,"gateway.hints.modbus.port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("min",e.portLimits.MIN),t.ɵɵpropertyInterpolate("max",e.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,7,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(e.slaveConfigFormGroup.get("port").hasError("required")||e.slaveConfigFormGroup.get("port").hasError("min")||e.slaveConfigFormGroup.get("port").hasError("max"))&&e.slaveConfigFormGroup.get("port").touched)}}function jc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.port-required"))}function Lc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10)(1,"div",14),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",12),t.ɵɵelement(5,"input",42),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,jc,3,3,"mat-icon",16),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.serial-port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("port").hasError("required")&&e.slaveConfigFormGroup.get("port").touched)}}function Uc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",38),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusMethodLabelsMap.get(e))}}function $c(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.unit-id-required"))}function zc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-required"))}function Kc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-profile-required"))}function Hc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",38),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Qc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10)(1,"div",11),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.baudrate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",12)(5,"mat-select",43),t.ɵɵtemplate(6,Hc,2,2,"mat-option",6),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,2,"gateway.hints.modbus.baudrate")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusBaudrates)}}function Wc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",38),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Jc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",38),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Yc(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",44)(1,"mat-expansion-panel",45)(2,"mat-expansion-panel-header",46)(3,"mat-panel-title")(4,"mat-slide-toggle",47),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelement(8,"tb-modbus-security-config",48),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("expanded",e.showSecurityControl.value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.showSecurityControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,3,"gateway.tls-connection")," ")}}e("ModbusLegacySlaveDialogComponent",Rc);class Xc{constructor(e){this.fb=e,this.ModbusProtocolLabelsMap=$a,this.ModbusMethodLabelsMap=Ua,this.portLimits=ca,this.modbusProtocolTypes=Object.values(Oa),this.modbusMethodTypes=Object.values(qa),this.modbusSerialMethodTypes=Object.values(Ba),this.modbusOrderType=Object.values(Ra),this.ModbusProtocolType=Oa,this.modbusBaudrates=Va,this.isSlaveEnabled=!1,this.serialSpecificControlKeys=["serialPort","baudrate"],this.tcpUdpSpecificControlKeys=["port","security","host"],this.destroy$=new ie,this.showSecurityControl=this.fb.control(!1),this.slaveConfigFormGroup=this.fb.group({type:[Oa.TCP],host:["",[J.required,J.pattern(Re)]],port:[null,[J.required,J.min(ca.MIN),J.max(ca.MAX)]],serialPort:["",[J.required,J.pattern(Re)]],method:[qa.SOCKET],unitId:[null,[J.required]],baudrate:[this.modbusBaudrates[0]],deviceName:["",[J.required,J.pattern(Re)]],deviceType:["",[J.required,J.pattern(Re)]],pollPeriod:[5e3,[J.required]],sendDataToThingsBoard:[!1],byteOrder:[Ra.BIG],wordOrder:[Ra.BIG],security:[],identity:this.fb.group({vendorName:["",[J.pattern(Re)]],productCode:["",[J.pattern(Re)]],vendorUrl:["",[J.pattern(Re)]],productName:["",[J.pattern(Re)]],modelName:["",[J.pattern(Re)]]}),values:[]}),this.observeValueChanges(),this.observeTypeChange(),this.observeShowSecurity()}get protocolType(){return this.slaveConfigFormGroup.get("type").value}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}validate(){return this.slaveConfigFormGroup.valid?null:{slaveConfigFormGroup:{valid:!1}}}writeValue(e){this.showSecurityControl.patchValue(!!e.security&&!V(e.security,{})),this.updateSlaveConfig(e)}setDisabledState(e){this.isSlaveEnabled=!e,this.updateFormEnableState()}observeValueChanges(){this.slaveConfigFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{e.type===Oa.Serial&&(e.port=e.serialPort,delete e.serialPort),this.onChange(e),this.onTouched()}))}observeTypeChange(){this.slaveConfigFormGroup.get("type").valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.updateFormEnableState(),this.updateMethodType(e)}))}updateMethodType(e){this.slaveConfigFormGroup.get("method").value!==qa.RTU&&this.slaveConfigFormGroup.get("method").patchValue(e===Oa.Serial?Ba.ASCII:qa.SOCKET,{emitEvent:!1})}updateFormEnableState(){this.isSlaveEnabled?(this.slaveConfigFormGroup.enable({emitEvent:!1}),this.showSecurityControl.enable({emitEvent:!1})):(this.slaveConfigFormGroup.disable({emitEvent:!1}),this.showSecurityControl.disable({emitEvent:!1})),this.updateEnablingByProtocol(),this.updateSecurityEnable(this.showSecurityControl.value)}observeShowSecurity(){this.showSecurityControl.valueChanges.pipe(de(this.destroy$)).subscribe((e=>this.updateSecurityEnable(e)))}updateSecurityEnable(e){e&&this.isSlaveEnabled&&this.protocolType!==Oa.Serial?this.slaveConfigFormGroup.get("security").enable({emitEvent:!1}):this.slaveConfigFormGroup.get("security").disable({emitEvent:!1})}updateEnablingByProtocol(){const e=this.protocolType===Oa.Serial,t=e?this.serialSpecificControlKeys:this.tcpUdpSpecificControlKeys,n=e?this.tcpUdpSpecificControlKeys:this.serialSpecificControlKeys;this.isSlaveEnabled&&t.forEach((e=>this.slaveConfigFormGroup.get(e)?.enable({emitEvent:!1}))),n.forEach((e=>this.slaveConfigFormGroup.get(e)?.disable({emitEvent:!1})))}updateSlaveConfig(e){const{type:t=Oa.TCP,method:n=qa.RTU,unitId:a=0,deviceName:r="",deviceType:i="",pollPeriod:o=5e3,sendDataToThingsBoard:s=!1,byteOrder:l=Ra.BIG,wordOrder:p=Ra.BIG,security:c={},identity:d={vendorName:"",productCode:"",vendorUrl:"",productName:"",modelName:""},values:m={},baudrate:u=this.modbusBaudrates[0],host:g="",port:h=null}=e,y={type:t,method:n,unitId:a,deviceName:r,deviceType:i,pollPeriod:o,sendDataToThingsBoard:!!s,byteOrder:l,wordOrder:p,security:c,identity:d,values:m,baudrate:u,host:t===Oa.Serial?"":g,port:t===Oa.Serial?null:h,serialPort:t===Oa.Serial?h:""};this.slaveConfigFormGroup.setValue(y,{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||Xc)(t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Xc,selectors:[["tb-modbus-slave-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Xc)),multi:!0},{provide:X,useExisting:i((()=>Xc)),multi:!0}]),t.ɵɵStandaloneFeature],decls:112,vars:59,consts:[["serialPort",""],[1,"slave-container",3,"formGroup"],[1,"slave-content","tb-form-panel","no-border","no-padding","padding-top"],[1,"tb-flex","row","space-between","align-center","no-gap","fill-width"],["translate","",1,"fixed-title-width"],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-panel","no-border","no-padding","padding-top"],["class","tb-form-row column-xs",4,"ngIf"],["class","tb-form-row column-xs",4,"ngIf","ngIfElse"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["formControlName","method"],["translate","",1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","min","0","name","value","formControlName","unitId",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","deviceName",3,"placeholder"],["matInput","","name","value","formControlName","deviceType",3,"placeholder"],[1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip","","translate",""],["matInput","","type","number","min","0","name","value","formControlName","pollPeriod",3,"placeholder"],[1,"tb-form-row"],["formControlName","sendDataToThingsBoard",1,"mat-slide"],[1,"tb-form-panel","stroked"],[1,"tb-settings"],["translate","",1,"tb-form-panel-title"],["formControlName","byteOrder"],["formControlName","wordOrder"],["class","tb-form-panel stroked tb-slide-toggle",4,"ngIf"],[3,"formGroup"],["matInput","","name","value","formControlName","vendorName",3,"placeholder"],["matInput","","name","value","formControlName","productCode",3,"placeholder"],["matInput","","name","value","formControlName","vendorUrl",3,"placeholder"],["matInput","","name","value","formControlName","productName",3,"placeholder"],["matInput","","name","value","formControlName","modelName",3,"placeholder"],["formControlName","values"],[3,"value"],["matInput","","name","value","formControlName","host",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],["matInput","","name","value","formControlName","serialPort",3,"placeholder"],["formControlName","baudrate"],[1,"tb-form-panel","stroked","tb-slide-toggle"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],[1,"mat-slide",3,"click","formControl"],["formControlName","security"]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",1)(1,"div",2)(2,"div",3)(3,"div",4),t.ɵɵtext(4,"gateway.server-slave-config"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"tb-toggle-select",5),t.ɵɵtemplate(6,_c,2,2,"tb-toggle-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"div",7),t.ɵɵtemplate(8,Vc,8,7,"div",8)(9,Gc,8,9,"div",9)(10,Lc,8,7,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(12,"div",10)(13,"div",11),t.ɵɵpipe(14,"translate"),t.ɵɵtext(15," gateway.method "),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"mat-form-field",12)(17,"mat-select",13),t.ɵɵtemplate(18,Uc,2,2,"mat-option",6),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(19,"div",10)(20,"div",14),t.ɵɵpipe(21,"translate"),t.ɵɵtext(22,"gateway.unit-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-form-field",12),t.ɵɵelement(24,"input",15),t.ɵɵpipe(25,"translate"),t.ɵɵtemplate(26,$c,3,3,"mat-icon",16),t.ɵɵelementEnd()(),t.ɵɵelementStart(27,"div",10)(28,"div",17),t.ɵɵtext(29,"gateway.device-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(30,"mat-form-field",12),t.ɵɵelement(31,"input",18),t.ɵɵpipe(32,"translate"),t.ɵɵtemplate(33,zc,3,3,"mat-icon",16),t.ɵɵelementEnd()(),t.ɵɵelementStart(34,"div",10)(35,"div",17),t.ɵɵtext(36,"gateway.device-profile"),t.ɵɵelementEnd(),t.ɵɵelementStart(37,"mat-form-field",12),t.ɵɵelement(38,"input",19),t.ɵɵpipe(39,"translate"),t.ɵɵtemplate(40,Kc,3,3,"mat-icon",16),t.ɵɵelementEnd()(),t.ɵɵelementStart(41,"div",10)(42,"div",20),t.ɵɵpipe(43,"translate"),t.ɵɵelementStart(44,"span",21),t.ɵɵtext(45," gateway.poll-period "),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"mat-form-field",12),t.ɵɵelement(47,"input",22),t.ɵɵpipe(48,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(49,Qc,7,4,"div",8),t.ɵɵelementStart(50,"div",23)(51,"mat-slide-toggle",24)(52,"mat-label"),t.ɵɵtext(53),t.ɵɵpipe(54,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(55,"div",25)(56,"mat-expansion-panel",26)(57,"mat-expansion-panel-header")(58,"mat-panel-title")(59,"div",27),t.ɵɵtext(60,"gateway.advanced-connection-settings"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(61,"div",7)(62,"div",10)(63,"div",11),t.ɵɵpipe(64,"translate"),t.ɵɵtext(65,"gateway.byte-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(66,"mat-form-field",12)(67,"mat-select",28),t.ɵɵtemplate(68,Wc,2,2,"mat-option",6),t.ɵɵelementEnd()()(),t.ɵɵelementStart(69,"div",10)(70,"div",11),t.ɵɵpipe(71,"translate"),t.ɵɵtext(72,"gateway.word-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(73,"mat-form-field",12)(74,"mat-select",29),t.ɵɵtemplate(75,Jc,2,2,"mat-option",6),t.ɵɵelementEnd()()(),t.ɵɵtemplate(76,Yc,9,5,"div",30),t.ɵɵelementContainerStart(77,31),t.ɵɵelementStart(78,"div",10)(79,"div",4),t.ɵɵtext(80,"gateway.vendor-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(81,"mat-form-field",12),t.ɵɵelement(82,"input",32),t.ɵɵpipe(83,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(84,"div",10)(85,"div",4),t.ɵɵtext(86,"gateway.product-code"),t.ɵɵelementEnd(),t.ɵɵelementStart(87,"mat-form-field",12),t.ɵɵelement(88,"input",33),t.ɵɵpipe(89,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(90,"div",10)(91,"div",4),t.ɵɵtext(92,"gateway.vendor-url"),t.ɵɵelementEnd(),t.ɵɵelementStart(93,"mat-form-field",12),t.ɵɵelement(94,"input",34),t.ɵɵpipe(95,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(96,"div",10)(97,"div",4),t.ɵɵtext(98,"gateway.product-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(99,"mat-form-field",12),t.ɵɵelement(100,"input",35),t.ɵɵpipe(101,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(102,"div",10)(103,"div",4),t.ɵɵtext(104,"gateway.model-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(105,"mat-form-field",12),t.ɵɵelement(106,"input",36),t.ɵɵpipe(107,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()()(),t.ɵɵelementStart(108,"div",25)(109,"div",27),t.ɵɵtext(110,"gateway.values"),t.ɵɵelementEnd(),t.ɵɵelement(111,"tb-modbus-values",37),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵreference(11);t.ɵɵproperty("formGroup",n.slaveConfigFormGroup),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.modbusProtocolTypes),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial)("ngIfElse",e),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(14,29,"gateway.hints.modbus.framer-type")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.protocolType===n.ModbusProtocolType.Serial?n.modbusSerialMethodTypes:n.modbusMethodTypes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(21,31,"gateway.hints.modbus.unit-id")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(25,33,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("unitId").hasError("required")&&n.slaveConfigFormGroup.get("unitId").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(32,35,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceName").hasError("required")&&n.slaveConfigFormGroup.get("deviceName").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(39,37,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceType").hasError("required")&&n.slaveConfigFormGroup.get("deviceType").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(43,39,"gateway.hints.modbus.poll-period")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(48,41,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.protocolType===n.ModbusProtocolType.Serial),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(54,43,"gateway.send-data-to-platform")," "),t.ɵɵadvance(10),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(64,45,"gateway.hints.modbus.byte-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(71,47,"gateway.hints.modbus.word-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(),t.ɵɵproperty("formGroup",n.slaveConfigFormGroup.get("identity")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(83,49,"gateway.set")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(89,51,"gateway.set")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(95,53,"gateway.set")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(101,55,"gateway.set")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(107,57,"gateway.set"))}},dependencies:t.ɵɵgetComponentDepsFactory(Xc,[B,g,$p,Hp,So,Hn]),encapsulation:2,changeDetection:o.OnPush})}}e("ModbusSlaveConfigComponent",Xc);const Zc=["searchInput"],ed=()=>["deviceName","info","unitId","type","actions"],td=()=>({minWidth:"48px",textAlign:"center"}),nd=()=>({minWidth:"96px",textAlign:"center"});function ad(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",9)(1,"div",28)(2,"span",29),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()(),t.ɵɵelement(5,"span",11),t.ɵɵelementStart(6,"button",13),t.ɵɵpipe(7,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.manageSlave(n))})),t.ɵɵelementStart(8,"mat-icon"),t.ɵɵtext(9,"add"),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"button",13),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.enterFilterMode())})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"search"),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.servers-slaves")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,5,"action.add")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(11,7,"action.search")))}function rd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",30)(1,"div",31),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.device-name")))}function id(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",30)(1,"div",31),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.deviceName)}}function od(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",30),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.info")," "))}function sd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",30)(1,"div",31),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){let e;const a=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(null!==(e=a.host)&&void 0!==e?e:a.port)}}function ld(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",30),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.unit-id")," "))}function pd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",30)(1,"div",31),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.unitId)}}function cd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",30)(1,"div"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.type")))}function dd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",30),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",a.ModbusProtocolLabelsMap.get(e.type)," ")}}function md(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell"),t.ɵɵelement(1,"div",32)(2,"div",33),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵstyleMap(t.ɵɵpureFunction0(2,td)))}function ud(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",13),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageSlave(n,a))})),t.ɵɵelementStart(2,"tb-icon"),t.ɵɵtext(3,"edit"),t.ɵɵelementEnd()(),t.ɵɵelementStart(4,"button",13),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteSlave(n,a))})),t.ɵɵelementStart(6,"tb-icon"),t.ɵɵtext(7,"delete"),t.ɵɵelementEnd()()}2&e&&(t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,2,"action.edit")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(5,4,"action.delete")))}function gd(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtemplate(1,ud,8,6,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(3,"div",34),t.ɵɵelementContainer(4,35),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",36)(6,"button",37),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(7,"mat-icon",38),t.ɵɵtext(8,"more_vert"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"mat-menu",39,2),t.ɵɵelementContainer(11,35),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(2),n=t.ɵɵreference(10);t.ɵɵadvance(3),t.ɵɵstyleMap(t.ɵɵpureFunction0(5,nd)),t.ɵɵadvance(),t.ɵɵproperty("ngTemplateOutlet",e),t.ɵɵadvance(2),t.ɵɵproperty("matMenuTriggerFor",n),t.ɵɵadvance(5),t.ɵɵproperty("ngTemplateOutlet",e)}}function hd(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",40)}function yd(e,n){1&e&&t.ɵɵelement(0,"mat-row")}class fd{constructor(e,t,n,a,r){this.translate=e,this.dialog=t,this.dialogService=n,this.fb=a,this.cdr=r,this.isLegacy=!1,this.textSearchMode=!1,this.textSearch=this.fb.control("",{nonNullable:!0}),this.ModbusProtocolLabelsMap=$a,this.onChange=()=>{},this.onTouched=()=>{},this.destroy$=new ie,this.masterFormGroup=this.fb.group({slaves:this.fb.array([])}),this.dataSource=new vd}get slaves(){return this.masterFormGroup.get("slaves")}ngOnInit(){this.masterFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.updateTableData(e.slaves),this.onChange(e),this.onTouched()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}ngAfterViewInit(){this.textSearch.valueChanges.pipe(xe(150),Ce(((e,t)=>(e??"")===t.trim())),de(this.destroy$)).subscribe((e=>this.updateTableData(this.slaves.value,e.trim())))}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){this.slaves.clear(),this.pushDataAsFormArrays(e.slaves)}enterFilterMode(){this.textSearchMode=!0,this.cdr.detectChanges();const e=this.searchInputField.nativeElement;e.focus(),e.setSelectionRange(0,0)}exitFilterMode(){this.updateTableData(this.slaves.value),this.textSearchMode=!1,this.textSearch.reset()}manageSlave(e,t){e&&e.stopPropagation();const n=_(t),a=n?this.slaves.at(t).value:{};this.getSlaveDialog(a,n?"action.apply":"action.add").afterClosed().pipe(ve(1),de(this.destroy$)).subscribe((e=>{e&&(n?this.slaves.at(t).patchValue(e):this.slaves.push(this.fb.control(e)),this.masterFormGroup.markAsDirty())}))}getSlaveDialog(e,t){return this.isLegacy?this.dialog.open(Rc,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{value:e,hideNewFields:!0,buttonTitle:t}}):this.dialog.open(gc,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{value:e,buttonTitle:t,hideNewFields:!1}})}deleteSlave(e,t){e&&e.stopPropagation(),this.dialogService.confirm(this.translate.instant("gateway.delete-slave-title"),"",this.translate.instant("action.no"),this.translate.instant("action.yes"),!0).pipe(ve(1),de(this.destroy$)).subscribe((e=>{e&&(this.slaves.removeAt(t),this.masterFormGroup.markAsDirty())}))}updateTableData(e,t){t&&(e=e.filter((e=>Object.values(e).some((e=>e.toString().toLowerCase().includes(t.toLowerCase())))))),this.dataSource.loadData(e)}pushDataAsFormArrays(e){e?.length&&e.forEach((e=>this.slaves.push(this.fb.control(e))))}static{this.ɵfac=function(e){return new(e||fd)(t.ɵɵdirectiveInject(ke.TranslateService),t.ɵɵdirectiveInject(ne.MatDialog),t.ɵɵdirectiveInject(R.DialogService),t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:fd,selectors:[["tb-modbus-master-table"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(Zc,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.searchInputField=e.first)}},inputs:{isLegacy:"isLegacy"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>fd)),multi:!0}]),t.ɵɵStandaloneFeature],decls:55,vars:41,consts:[["searchInput",""],["rowActions",""],["cellActionsMenu","matMenu"],[1,"tb-master-table","tb-absolute-fill"],[1,"tb-form-panel","no-border","no-padding","padding-top","hint-container"],["tbTruncateWithTooltip","",1,"tb-form-hint","tb-primary-fill","tb-flex","center"],[1,"tb-master-table-content","flex","flex-col"],[1,"mat-mdc-table-toolbar"],["class","mat-toolbar-tools",4,"ngIf"],[1,"mat-toolbar-tools"],["mat-icon-button","","matTooltipPosition","above",3,"matTooltip"],[1,"flex-1"],["matInput","",3,"formControl","placeholder"],["mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],[1,"table-container"],["mat-table","",3,"dataSource"],[3,"matColumnDef"],["class","table-value-column",4,"matHeaderCellDef"],["class","table-value-column",4,"matCellDef"],["matColumnDef","actions","stickyEnd",""],[4,"matHeaderCellDef"],[4,"matCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],[4,"matRowDef","matRowDefColumns"],[1,"mat-headline-5","tb-absolute-fill","tb-add-new","justify-center","items-center"],["mat-button","",1,"connector",3,"click"],[1,"tb-mat-96"],["translate","",1,"no-data-found","justify-center","items-center"],[1,"title-container"],[1,"tb-master-table-title"],[1,"table-value-column"],["tbTruncateWithTooltip",""],[1,"gt-md:!hidden",2,"width","48px","min-width","48px","max-width","48px"],[1,"lt-lg:!hidden"],[1,"flex","flex-1","flex-row","justify-end","items-stretch","lt-lg:!hidden"],[3,"ngTemplateOutlet"],[1,"gt-md:!hidden"],["mat-icon-button","",3,"click","matMenuTriggerFor"],[1,"material-icons"],["xPosition","before"],[1,"mat-row-select"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",3)(1,"div",4)(2,"div",5),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(5,"div",6)(6,"mat-toolbar",7),t.ɵɵtemplate(7,ad,14,9,"div",8),t.ɵɵpipe(8,"async"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-toolbar",7)(10,"div",9)(11,"button",10),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"mat-icon"),t.ɵɵtext(14,"search"),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"mat-form-field",11)(16,"mat-label"),t.ɵɵtext(17," "),t.ɵɵelementEnd(),t.ɵɵelement(18,"input",12,0),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"button",13),t.ɵɵpipe(22,"translate"),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.exitFilterMode())})),t.ɵɵelementStart(23,"mat-icon"),t.ɵɵtext(24,"close"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(25,"div",14)(26,"table",15),t.ɵɵelementContainerStart(27,16),t.ɵɵtemplate(28,rd,4,3,"mat-header-cell",17)(29,id,3,1,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(30,16),t.ɵɵtemplate(31,od,3,3,"mat-header-cell",17)(32,sd,3,1,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(33,16),t.ɵɵtemplate(34,ld,3,3,"mat-header-cell",17)(35,pd,3,1,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(36,16),t.ɵɵtemplate(37,cd,4,3,"mat-header-cell",17)(38,dd,2,1,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(39,19),t.ɵɵtemplate(40,md,3,3,"mat-header-cell",20)(41,gd,12,6,"mat-cell",21),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(42,hd,1,0,"mat-header-row",22)(43,yd,1,0,"mat-row",23),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"section",24),t.ɵɵpipe(45,"async"),t.ɵɵelementStart(46,"button",25),t.ɵɵlistener("click",(function(a){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.manageSlave(a))})),t.ɵɵelementStart(47,"mat-icon",26),t.ɵɵtext(48,"add"),t.ɵɵelementEnd(),t.ɵɵelementStart(49,"span"),t.ɵɵtext(50),t.ɵɵpipe(51,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(52,"span",27),t.ɵɵpipe(53,"async"),t.ɵɵtext(54," widget.no-data-found "),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,23,"gateway.hints.modbus-master")),t.ɵɵadvance(3),t.ɵɵclassProp("!hidden",n.textSearchMode),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!1===t.ɵɵpipeBind1(8,25,n.dataSource.isEmpty())),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(12,27,"action.search")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(20,29,"common.enter-search")),t.ɵɵproperty("formControl",n.textSearch),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(22,31,"action.close")),t.ɵɵadvance(5),t.ɵɵproperty("dataSource",n.dataSource),t.ɵɵadvance(),t.ɵɵproperty("matColumnDef","deviceName"),t.ɵɵadvance(3),t.ɵɵproperty("matColumnDef","info"),t.ɵɵadvance(3),t.ɵɵproperty("matColumnDef","unitId"),t.ɵɵadvance(3),t.ɵɵproperty("matColumnDef","type"),t.ɵɵadvance(6),t.ɵɵproperty("matHeaderRowDef",t.ɵɵpureFunction0(39,ed))("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",t.ɵɵpureFunction0(40,ed)),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",n.textSearchMode||!1===t.ɵɵpipeBind1(45,33,n.dataSource.isEmpty())),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(51,35,"gateway.add-slave")),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode||!1===t.ɵɵpipeBind1(53,37,n.dataSource.isEmpty())))},dependencies:t.ɵɵgetComponentDepsFactory(fd,[B,g,Hn]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%]{width:100%;height:calc(100% - 60px);background:#fff;overflow:hidden}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .mat-toolbar-tools[_ngcontent-%COMP%]{min-height:auto}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{overflow:hidden}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .tb-master-table-title[_ngcontent-%COMP%]{padding-right:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%]{overflow:auto}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%]{table-layout:fixed;min-width:450px}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%] .table-value-column[_ngcontent-%COMP%]{padding:0 12px;width:16%}[_nghost-%COMP%] .no-data-found[_ngcontent-%COMP%]{height:calc(100% - 120px)}@media screen and (max-width: 599px){[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{height:auto;min-height:100px}[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%] .tb-master-table-title[_ngcontent-%COMP%]{padding-bottom:5px;width:100%}}[_nghost-%COMP%] .hint-container[_ngcontent-%COMP%]{z-index:1000}[_nghost-%COMP%] mat-cell.tb-value-cell{cursor:pointer}[_nghost-%COMP%] mat-cell.tb-value-cell .mat-icon{height:24px;width:24px;font-size:24px;color:#757575}'],changeDetection:o.OnPush})}}e("ModbusMasterTableComponent",fd),Ee([Be()],fd.prototype,"isLegacy",void 0);class vd extends F{constructor(){super()}}e("SlavesDatasource",vd);class bd extends ur{constructor(){super(),this.enableSlaveControl=new ee(!1),this.enableSlaveControl.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.updateSlaveEnabling(e),this.basicFormGroup.get("slave").updateValueAndValidity({emitEvent:!!this.onChange})}))}writeValue(e){super.writeValue(e),this.onEnableSlaveControl(e)}validate(){const{master:e,slave:t}=this.basicFormGroup.value,n=!e?.slaves?.length&&(V(t,{})||!t);return!this.basicFormGroup.valid||n?{basicFormGroup:{valid:!1}}:null}initBasicFormGroup(){return this.fb.group({master:[],slave:[]})}updateSlaveEnabling(e){e?this.basicFormGroup.get("slave").enable({emitEvent:!1}):this.basicFormGroup.get("slave").disable({emitEvent:!1})}onEnableSlaveControl(e){this.enableSlaveControl.setValue(!!e.slave&&!V(e.slave,{}))}static{this.ɵfac=function(e){return new(e||bd)}}static{this.ɵdir=t.ɵɵdefineDirective({type:bd,features:[t.ɵɵInheritDefinitionFeature]})}}e("ModbusBasicConfigDirective",bd);class xd extends bd{constructor(){super(...arguments),this.isLegacy=!1}mapConfigToFormValue({master:e,slave:t}){return{master:e?.slaves?e:{slaves:[]},slave:t??{}}}getMappedValue(e){return{master:e.master,slave:e.slave}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(xd)))(n||xd)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:xd,selectors:[["tb-modbus-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>xd)),multi:!0},{provide:X,useExisting:i((()=>xd)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:19,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","master",3,"isLegacy"],[1,"tb-form-panel","no-border","no-padding","padding-top"],[1,"tb-form-hint","tb-primary-fill","tb-flex","center"],[1,"tb-form-row"],[1,"mat-slide",3,"formControl"],["formControlName","slave"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-modbus-master-table",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4)(10,"div",5),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",6)(14,"mat-slide-toggle",7)(15,"mat-label"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelement(18,"tb-modbus-slave-config",8),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,9,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(5,11,"gateway.master-connections")),t.ɵɵadvance(2),t.ɵɵproperty("isLegacy",n.isLegacy),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(8,13,"gateway.server-config")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(12,15,"gateway.hints.modbus-server")),t.ɵɵadvance(3),t.ɵɵproperty("formControl",n.enableSlaveControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(17,17,"gateway.enable")," "))},dependencies:t.ɵɵgetComponentDepsFactory(xd,[B,g,Xc,fd,Qn]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}'],changeDetection:o.OnPush})}}e("ModbusBasicConfigComponent",xd);class Cd extends bd{constructor(){super(...arguments),this.isLegacy=!0}mapConfigToFormValue(e){return{master:e.master?.slaves?e.master:{slaves:[]},slave:e.slave?yr.mapSlaveToUpgradedVersion(e.slave):{}}}getMappedValue(e){return{master:e.master,slave:e.slave?yr.mapSlaveToDowngradedVersion(e.slave):{}}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Cd)))(n||Cd)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:Cd,selectors:[["tb-modbus-legacy-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Cd)),multi:!0},{provide:X,useExisting:i((()=>Cd)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:19,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","master",3,"isLegacy"],[1,"tb-form-panel","no-border","no-padding","padding-top"],[1,"tb-form-hint","tb-primary-fill","tb-flex","center"],[1,"tb-form-row"],[1,"mat-slide",3,"formControl"],["formControlName","slave"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-modbus-master-table",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4)(10,"div",5),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",6)(14,"mat-slide-toggle",7)(15,"mat-label"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelement(18,"tb-modbus-slave-config",8),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,9,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(5,11,"gateway.master-connections")),t.ɵɵadvance(2),t.ɵɵproperty("isLegacy",n.isLegacy),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(8,13,"gateway.server-config")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(12,15,"gateway.hints.modbus-server")),t.ɵɵadvance(3),t.ɵɵproperty("formControl",n.enableSlaveControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(17,17,"gateway.enable")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Cd,[B,g,Xc,fd,Qn]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}'],changeDetection:o.OnPush})}}e("ModbusLegacyBasicConfigComponent",Cd);const wd=()=>({maxWidth:"970px"});function Sd(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",20),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.get("key").value," ")}}function Ed(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtext(1),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate(e.get("methodRPC").value)}}function Td(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtext(1),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate(e.get("attributeOnThingsBoard").value)}}function Id(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtext(1),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate2(" ",e.get("requestExpression").value+" - ","",e.get("attributeNameExpression").value," ")}}function kd(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21),t.ɵɵtemplate(1,Ed,2,1,"ng-container",22)(2,Td,2,1,"ng-container",22)(3,Id,2,2,"ng-container",22),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(3);t.ɵɵproperty("ngSwitch",e.keysType),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.SocketValueKey.RPC_METHODS),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.SocketValueKey.ATTRIBUTES_UPDATES),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.SocketValueKey.ATTRIBUTES_REQUESTS)}}function Md(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.key-required"))}function Pd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function Fd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function Od(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",3)(1,"div",24)(2,"div",25),t.ɵɵtext(3,"gateway.platform-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",26)(5,"div",27),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"div",28)(10,"mat-form-field",29),t.ɵɵelement(11,"input",30),t.ɵɵpipe(12,"translate"),t.ɵɵtemplate(13,Md,3,3,"mat-icon",31),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(14,"div",24)(15,"div",25),t.ɵɵtext(16,"gateway.connector-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"div",26)(18,"div",32)(19,"span",33),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(22,"div",34),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"label",35),t.ɵɵtext(24,"from"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-form-field",36),t.ɵɵelement(26,"input",37),t.ɵɵpipe(27,"translate"),t.ɵɵtemplate(28,Pd,3,3,"mat-icon",31),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"label",38),t.ɵɵtext(30,"to"),t.ɵɵelementEnd(),t.ɵɵelementStart(31,"mat-form-field",36),t.ɵɵelement(32,"input",39),t.ɵɵpipe(33,"translate"),t.ɵɵtemplate(34,Fd,3,3,"mat-icon",31),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(6,11,"gateway.hints.socket.key")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(8,13,"gateway.key")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(12,15,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("key").hasError("required")&&e.get("key").touched),t.ɵɵadvance(7),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(21,17,"gateway.byte")),t.ɵɵadvance(2),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/byte_fn")("tb-help-popup-style",t.ɵɵpureFunction0(23,wd)),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(27,19,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("byteFrom").hasError("required")&&e.get("byteFrom").touched),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(33,21,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("byteTo").hasError("required")&&e.get("byteTo").touched)}}function qd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.method-required"))}function Bd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",49),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",e.toUpperCase()," ")}}function Nd(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",3)(1,"div",26)(2,"div",41),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",28)(6,"mat-form-field",29),t.ɵɵelement(7,"input",42),t.ɵɵpipe(8,"translate"),t.ɵɵtemplate(9,qd,3,3,"mat-icon",31),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",26)(11,"div",43),t.ɵɵpipe(12,"translate"),t.ɵɵtext(13," gateway.encoding "),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"div",28)(15,"mat-form-field",29)(16,"mat-select",44),t.ɵɵtemplate(17,Bd,2,2,"mat-option",45),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(18,"div",46)(19,"mat-slide-toggle",47),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(20,"mat-label",48),t.ɵɵpipe(21,"translate"),t.ɵɵtext(22),t.ɵɵpipe(23,"translate"),t.ɵɵelementEnd()()()()}if(2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,7,"gateway.method-name")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,9,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("methodRPC").hasError("required")&&e.get("methodRPC").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(12,11,"gateway.hints.encoding")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.socketEncoding),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(21,13,"gateway.hints.socket.with-response")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(23,15,"gateway.rpc.withResponse")," ")}}function Rd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",49),t.ɵɵtext(1),t.ɵɵpipe(2,"titlecase"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,2,e)," ")}}function _d(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",49),t.ɵɵtext(1),t.ɵɵpipe(2,"titlecase"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,2,e)," ")}}function Dd(e,n){1&e&&t.ɵɵelement(0,"div",34),2&e&&t.ɵɵproperty("tb-help-popup","widget/lib/gateway/request-expression_fn")("tb-help-popup-style",t.ɵɵpureFunction0(2,wd))}function Vd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",49),t.ɵɵtext(1),t.ɵɵpipe(2,"titlecase"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,2,e)," ")}}function Ad(e,n){1&e&&t.ɵɵelement(0,"div",34),2&e&&t.ɵɵproperty("tb-help-popup","widget/lib/gateway/attribute-name-expression_fn")("tb-help-popup-style",t.ɵɵpureFunction0(2,wd))}function Gd(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",3)(1,"div",26)(2,"div",43),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4," gateway.type "),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",28)(6,"mat-form-field",29)(7,"mat-select",50),t.ɵɵtemplate(8,Rd,3,4,"mat-option",45),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(9,"div",26)(10,"div",51),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",52)(14,"mat-form-field",29)(15,"mat-select",53),t.ɵɵtemplate(16,_d,3,4,"mat-option",45),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"mat-form-field",29),t.ɵɵelement(18,"input",54),t.ɵɵpipe(19,"translate"),t.ɵɵtemplate(20,Dd,1,3,"div",55),t.ɵɵelementEnd()()(),t.ɵɵelementStart(21,"div",26)(22,"div",51),t.ɵɵtext(23),t.ɵɵpipe(24,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"div",52)(26,"mat-form-field",29)(27,"mat-select",56),t.ɵɵtemplate(28,Vd,3,4,"mat-option",45),t.ɵɵelementEnd()(),t.ɵɵelementStart(29,"mat-form-field",29),t.ɵɵelement(30,"input",57),t.ɵɵpipe(31,"translate"),t.ɵɵtemplate(32,Ad,1,3,"div",55),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,10,"gateway.hints.socket.attribute-requests-type")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.requestsType),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,12,"gateway.request-expression")," "),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.expressionType),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(19,14,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("requestExpressionSource").value===n.ExpressionType.Expression),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(24,16,"gateway.attribute-name-expression")," "),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.expressionType),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(31,18,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("attributeNameExpressionSource").value===n.ExpressionType.Expression)}}function jd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",49),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",e.toUpperCase()," ")}}function Ld(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.attribute-on-platform-required"))}function Ud(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",3)(1,"div",26)(2,"div",43),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4," gateway.encoding "),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",28)(6,"mat-form-field",29)(7,"mat-select",44),t.ɵɵtemplate(8,jd,2,2,"mat-option",45),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(9,"div",26)(10,"div",41),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",28)(14,"mat-form-field",29),t.ɵɵelement(15,"input",58),t.ɵɵpipe(16,"translate"),t.ɵɵtemplate(17,Ld,3,3,"mat-icon",31),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,5,"gateway.hints.encoding")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.socketEncoding),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,7,"gateway.attribute-on-platform")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,9,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("attributeOnThingsBoard").hasError("required")&&e.get("attributeOnThingsBoard").touched)}}function $d(e,n){if(1&e&&t.ɵɵtemplate(0,Od,35,24,"div",23)(1,Nd,24,17,"div",23)(2,Gd,33,20,"div",23)(3,Ud,18,11,"div",23),2&e){const e=t.ɵɵnextContext(3);t.ɵɵproperty("ngIf",e.keysType===e.SocketValueKey.TIMESERIES||e.keysType===e.SocketValueKey.ATTRIBUTES),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.keysType===e.SocketValueKey.RPC_METHODS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.keysType===e.SocketValueKey.ATTRIBUTES_REQUESTS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.keysType===e.SocketValueKey.ATTRIBUTES_UPDATES)}}function zd(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",12)(1,"div",13),t.ɵɵelementContainerStart(2,14),t.ɵɵelementStart(3,"mat-expansion-panel",15)(4,"mat-expansion-panel-header",16)(5,"mat-panel-title"),t.ɵɵtemplate(6,Sd,2,1,"div",17)(7,kd,4,4,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()(),t.ɵɵtemplate(9,$d,4,4,"ng-template",18),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"button",19),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.deleteKey(n,a))})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"delete"),t.ɵɵelementEnd()()()}if(2&e){const e=n.$implicit,a=n.last,r=t.ɵɵreference(8),i=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵproperty("formGroup",e),t.ɵɵadvance(),t.ɵɵproperty("expanded",a),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",i.keysType===i.SocketValueKey.TIMESERIES||i.keysType===i.SocketValueKey.ATTRIBUTES)("ngIfElse",r),t.ɵɵadvance(4),t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(11,5,i.deleteKeyTitle))}}function Kd(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10),t.ɵɵtemplate(1,zd,14,7,"div",11),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.keysListFormArray.controls)("ngForTrackBy",e.trackByKey)}}function Hd(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",59)(1,"span",60),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.noKeysText)}}class Qd extends P{constructor(e,t){super(t),this.fb=e,this.store=t,this.keysDataApplied=new r,this.SocketValueKey=er,this.socketEncoding=Object.values(tr),this.requestsType=Object.values(ar),this.expressionType=Object.values(rr),this.ExpressionType=rr}ngOnInit(){this.keysListFormArray=this.prepareKeysFormArray(this.keys)}trackByKey(e,t){return t}addKey(){let e;e=this.keysType===er.RPC_METHODS?this.fb.group({methodRPC:["",[J.required]],encoding:[tr.UTF16,[J.required]],withResponse:[!0]}):this.keysType===er.ATTRIBUTES_UPDATES?this.fb.group({encoding:[tr.UTF16,[J.required]],attributeOnThingsBoard:["",[J.required]]}):this.keysType===er.ATTRIBUTES_REQUESTS?this.fb.group({type:[ar.Shared],requestExpressionSource:[rr.Constant],attributeNameExpressionSource:[rr.Constant],requestExpression:["",[J.required]],attributeNameExpression:["",[J.required]]}):this.fb.group({key:["",[J.required,J.pattern(Re)]],byteFrom:[0,[J.required]],byteTo:[0,[J.required]]}),this.keysListFormArray.push(e)}deleteKey(e,t){e&&e.stopPropagation(),this.keysListFormArray.removeAt(t),this.keysListFormArray.markAsDirty()}cancel(){this.popover?.hide()}applyKeysData(){this.keysDataApplied.emit(this.keysListFormArray.value)}prepareKeysFormArray(e){const t=[];return e?.forEach((e=>{let n;if(this.keysType===er.RPC_METHODS){const t=e;n=this.fb.group({methodRPC:[t.methodRPC,[J.required]],encoding:[t.encoding,[J.required]],withResponse:[!0]})}else if(this.keysType===er.ATTRIBUTES_REQUESTS){const t=e;n=this.fb.group({type:[t.type??ar.Shared],requestExpressionSource:[t.requestExpressionSource??rr.Constant],attributeNameExpressionSource:[t.attributeNameExpressionSource??rr.Constant],requestExpression:[t.requestExpression,[J.required]],attributeNameExpression:[t.attributeNameExpression,[J.required]]})}else if(this.keysType===er.ATTRIBUTES_UPDATES)n=this.fb.group({encoding:[e.encoding??tr.UTF16],attributeOnThingsBoard:[e.attributeOnThingsBoard,[J.required]]});else{const{key:t,byteFrom:a,byteTo:r}=e;n=this.fb.group({key:[t,[J.required,J.pattern(Re)]],byteFrom:[a??0,[J.required]],byteTo:[r??0,[J.required]]})}t.push(n)})),this.fb.array(t)}static{this.ɵfac=function(e){return new(e||Qd)(t.ɵɵdirectiveInject(W.UntypedFormBuilder),t.ɵɵdirectiveInject(ae.Store))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Qd,selectors:[["tb-device-data-keys-panel"]],inputs:{panelTitle:"panelTitle",addKeyTitle:"addKeyTitle",deleteKeyTitle:"deleteKeyTitle",noKeysText:"noKeysText",keys:"keys",keysType:"keysType",popover:"popover"},outputs:{keysDataApplied:"keysDataApplied"},standalone:!0,features:[t.ɵɵProvidersFeature([]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:16,consts:[["noKeys",""],["valueTitle",""],[1,"tb-device-keys-panel"],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-panel-title"],["class","tb-form-panel no-border no-padding key-panel",4,"ngIf","ngIfElse"],["type","button","mat-stroked-button","","color","primary",3,"click"],[1,"tb-flex","flex-end"],["mat-button","","color","primary","type","button",3,"click"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[1,"tb-form-panel","no-border","no-padding","key-panel"],["class","tb-form-panel no-border no-padding tb-flex no-flex row center fill-width",4,"ngFor","ngForOf","ngForTrackBy"],[1,"tb-form-panel","no-border","no-padding","tb-flex","no-flex","row","center","fill-width"],[1,"tb-form-panel","stroked","tb-flex"],[3,"formGroup"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],["class","title-container",4,"ngIf","ngIfElse"],["matExpansionPanelContent",""],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],[1,"title-container"],[1,"title-container",3,"ngSwitch"],[4,"ngSwitchCase"],["class","tb-form-panel no-border no-padding",4,"ngIf"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","key",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],[1,"fixed-title-width","tb-flex","align-center"],[1,"tb-required"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],["for","byteFrom",1,"tb-small-label"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap","flex-1"],["matInput","","required","","formControlName","byteFrom","type","number","id","byteFrom",3,"placeholder"],["for","byteTo",1,"tb-small-label"],["matInput","","required","","formControlName","byteTo","type","number","id","byteTo",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","methodRPC",3,"placeholder"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["formControlName","encoding"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-row"],["formControlName","withResponse",1,"mat-slide",3,"click"],[3,"tb-hint-tooltip-icon"],[3,"value"],["formControlName","type"],[1,"fixed-title-width"],[1,"tb-flex"],["formControlName","requestExpressionSource"],["matInput","","name","value","formControlName","requestExpression",3,"placeholder"],["matSuffix","","class","see-example","tb-help-popup-placement","left",3,"tb-help-popup","tb-help-popup-style",4,"ngIf"],["formControlName","attributeNameExpressionSource"],["matInput","","name","value","formControlName","attributeNameExpression",3,"placeholder"],["matInput","","name","value","formControlName","attributeOnThingsBoard",3,"placeholder"],[1,"tb-flex","no-flex","center","align-center","key-panel"],["translate","",1,"tb-prompt"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",2)(1,"div",3)(2,"div",4),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(5,Kd,2,2,"div",5),t.ɵɵelementStart(6,"div")(7,"button",6),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addKey())})),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(10,Hd,3,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(12,"div",7)(13,"button",8),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"button",9),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.applyKeysData())})),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(11);t.ɵɵadvance(3),t.ɵɵtextInterpolate2("",t.ɵɵpipeBind1(4,8,n.panelTitle),""," ("+n.keysListFormArray.controls.length+")"," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.keysListFormArray.controls.length)("ngIfElse",e),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(9,10,n.addKeyTitle)," "),t.ɵɵadvance(6),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,12,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.keysListFormArray.invalid||!n.keysListFormArray.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,14,"action.apply")," ")}},dependencies:t.ɵɵgetComponentDepsFactory(Qd,[B,g,Qn,Eo]),styles:['@charset "UTF-8";[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%]{width:77vw;max-width:700px}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{max-width:11vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .key-panel[_ngcontent-%COMP%]{height:500px;overflow:auto}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .tb-form-panel[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%]{width:56px;height:56px;padding:16px;color:#0000008a}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .tb-small-label[_ngcontent-%COMP%]{font-size:16px;padding-right:0}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .see-example[_ngcontent-%COMP%]{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}'],changeDetection:o.OnPush})}}e("DeviceDataKeysPanelComponent",Qd);const Wd=()=>({maxWidth:"970px"});function Jd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",39),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.address-filter-required"))}function Yd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",39),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-required"))}function Xd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",39),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-profile-required"))}function Zd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",40),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",e.toUpperCase()," ")}}function em(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.key," ")}}function tm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.key," ")}}function nm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.type," ")}}function am(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.encoding," ")}}function rm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.methodRPC," ")}}class im extends C{constructor(e,t,n,a,r,i,o,s,l){super(e,t,a),this.store=e,this.router=t,this.data=n,this.dialogRef=a,this.fb=r,this.popoverService=i,this.renderer=o,this.viewContainerRef=s,this.cdr=l,this.SocketValueKey=er,this.keysPopupClosed=!0,this.socketDeviceHelpLink=k+"/docs/iot-gateway/config/socket/#device-subsection",this.socketEncoding=Object.values(tr),this.destroy$=new ie,this.deviceFormGroup=this.fb.group({address:["",[J.required,J.pattern(Re)]],deviceName:["",[J.required,J.pattern(Re)]],deviceType:["",[J.required,J.pattern(Re)]],encoding:[tr.UTF8],telemetry:[[]],attributes:[[]],attributeRequests:[[]],attributeUpdates:[[]],serverSideRpc:[[]]}),this.deviceFormGroup.patchValue(this.data.value,{emitEvent:!1})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),super.ngOnDestroy()}cancel(){this.keysPopupClosed&&this.dialogRef.close(null)}add(){this.deviceFormGroup.valid&&this.dialogRef.close(this.deviceFormGroup.value)}manageKeys(e,t,n){e.stopPropagation();const a=t._elementRef.nativeElement;if(this.popoverService.hasPopover(a))return void this.popoverService.hidePopover(a);this.popoverService.hasPopover(a)&&this.popoverService.hidePopover(a);const r=this.deviceFormGroup.get(n),i={keys:r.value,keysType:n,panelTitle:nr.get(n),addKeyTitle:ir.get(n),deleteKeyTitle:or.get(n),noKeysText:sr.get(n)};this.keysPopupClosed=!1;const o=this.popoverService.displayPopover(a,this.renderer,this.viewContainerRef,Qd,"leftBottom",!1,null,i,{},{},{},!0);o.tbComponentRef.instance.popover=o,o.tbComponentRef.instance.keysDataApplied.pipe(de(this.destroy$)).subscribe((e=>{o.hide(),r.patchValue(e),r.markAsDirty(),this.cdr.markForCheck()})),o.tbHideStart.pipe(de(this.destroy$)).subscribe((()=>{this.keysPopupClosed=!0}))}static{this.ɵfac=function(e){return new(e||im)(t.ɵɵdirectiveInject(ae.Store),t.ɵɵdirectiveInject(re.Router),t.ɵɵdirectiveInject(te),t.ɵɵdirectiveInject(ne.MatDialogRef),t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(qe.TbPopoverService),t.ɵɵdirectiveInject(t.Renderer2),t.ɵɵdirectiveInject(t.ViewContainerRef),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:im,selectors:[["tb-device-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:113,vars:41,consts:[["socketTelemetryButton",""],["attributesButton",""],["attributeRequestsButton",""],["attributesUpdatesButton",""],["rpcMethodsButton",""],[1,"dialog-mapping",3,"formGroup"],["color","primary"],[1,"flex-1"],[3,"tb-help"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content",""],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width"],["translate","",1,"tb-required"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","address",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","deviceName",3,"placeholder"],["matInput","","name","value","formControlName","deviceType",3,"placeholder"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["formControlName","encoding"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-row","space-between","tb-flex"],["translate","",1,"fixed-title-width"],[1,"tb-flex","ellipsis-chips-container"],[1,"tb-flex",3,"tb-ellipsis-chip-list"],[4,"ngFor","ngForOf"],[1,"mat-mdc-chip","ellipsis-chip"],[1,"ellipsis-text"],["type","button","mat-icon-button","","color","primary",3,"click"],["matButtonIcon",""],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","primary","type","button","cdkFocusInitial","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[3,"value"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",5)(1,"mat-toolbar",6)(2,"h2"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",7)(6,"div",8),t.ɵɵelementStart(7,"button",9),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵelementStart(8,"mat-icon",10),t.ɵɵtext(9,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",11)(11,"div",12)(12,"div",13)(13,"div",14)(14,"div",15),t.ɵɵtext(15," gateway.address-filter "),t.ɵɵelementEnd(),t.ɵɵelement(16,"div",16),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"div",17)(18,"mat-form-field",18),t.ɵɵelement(19,"input",19),t.ɵɵpipe(20,"translate"),t.ɵɵtemplate(21,Jd,3,3,"mat-icon",20),t.ɵɵelementEnd()()(),t.ɵɵelementStart(22,"div",13)(23,"div",21),t.ɵɵtext(24,"gateway.device-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"div",17)(26,"mat-form-field",18),t.ɵɵelement(27,"input",22),t.ɵɵpipe(28,"translate"),t.ɵɵtemplate(29,Yd,3,3,"mat-icon",20),t.ɵɵelementEnd()()(),t.ɵɵelementStart(30,"div",13)(31,"div",21),t.ɵɵtext(32,"gateway.device-profile"),t.ɵɵelementEnd(),t.ɵɵelementStart(33,"div",17)(34,"mat-form-field",18),t.ɵɵelement(35,"input",23),t.ɵɵpipe(36,"translate"),t.ɵɵtemplate(37,Xd,3,3,"mat-icon",20),t.ɵɵelementEnd()()(),t.ɵɵelementStart(38,"div",13)(39,"div",24),t.ɵɵpipe(40,"translate"),t.ɵɵtext(41," gateway.encoding "),t.ɵɵelementEnd(),t.ɵɵelementStart(42,"div",17)(43,"mat-form-field",18)(44,"mat-select",25),t.ɵɵtemplate(45,Zd,2,2,"mat-option",26),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(46,"div",27)(47,"div",28),t.ɵɵtext(48,"gateway.timeseries"),t.ɵɵelementEnd(),t.ɵɵelementStart(49,"div",29)(50,"mat-chip-listbox",30),t.ɵɵtemplate(51,em,2,1,"mat-chip",31),t.ɵɵelementStart(52,"mat-chip",32),t.ɵɵelement(53,"label",33),t.ɵɵelementEnd()(),t.ɵɵelementStart(54,"button",34,0),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(55);return t.ɵɵresetView(n.manageKeys(a,r,n.SocketValueKey.TIMESERIES))})),t.ɵɵelementStart(56,"tb-icon",35),t.ɵɵtext(57,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(58,"div",27)(59,"div",28),t.ɵɵtext(60,"gateway.attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(61,"div",29)(62,"mat-chip-listbox",30),t.ɵɵtemplate(63,tm,2,1,"mat-chip",31),t.ɵɵelementStart(64,"mat-chip",32),t.ɵɵelement(65,"label",33),t.ɵɵelementEnd()(),t.ɵɵelementStart(66,"button",34,1),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(67);return t.ɵɵresetView(n.manageKeys(a,r,n.SocketValueKey.ATTRIBUTES))})),t.ɵɵelementStart(68,"tb-icon",35),t.ɵɵtext(69,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(70,"div",27)(71,"div",28),t.ɵɵtext(72,"gateway.attribute-requests"),t.ɵɵelementEnd(),t.ɵɵelementStart(73,"div",29)(74,"mat-chip-listbox",30),t.ɵɵtemplate(75,nm,2,1,"mat-chip",31),t.ɵɵelementStart(76,"mat-chip",32),t.ɵɵelement(77,"label",33),t.ɵɵelementEnd()(),t.ɵɵelementStart(78,"button",34,2),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(79);return t.ɵɵresetView(n.manageKeys(a,r,n.SocketValueKey.ATTRIBUTES_REQUESTS))})),t.ɵɵelementStart(80,"tb-icon",35),t.ɵɵtext(81,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(82,"div",27)(83,"div",28),t.ɵɵtext(84,"gateway.attribute-updates"),t.ɵɵelementEnd(),t.ɵɵelementStart(85,"div",29)(86,"mat-chip-listbox",30),t.ɵɵtemplate(87,am,2,1,"mat-chip",31),t.ɵɵelementStart(88,"mat-chip",32),t.ɵɵelement(89,"label",33),t.ɵɵelementEnd()(),t.ɵɵelementStart(90,"button",34,3),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(91);return t.ɵɵresetView(n.manageKeys(a,r,n.SocketValueKey.ATTRIBUTES_UPDATES))})),t.ɵɵelementStart(92,"tb-icon",35),t.ɵɵtext(93,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(94,"div",27)(95,"div",28),t.ɵɵtext(96,"gateway.rpc-methods"),t.ɵɵelementEnd(),t.ɵɵelementStart(97,"div",29)(98,"mat-chip-listbox",30),t.ɵɵtemplate(99,rm,2,1,"mat-chip",31),t.ɵɵelementStart(100,"mat-chip",32),t.ɵɵelement(101,"label",33),t.ɵɵelementEnd()(),t.ɵɵelementStart(102,"button",34,4),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(103);return t.ɵɵresetView(n.manageKeys(a,r,n.SocketValueKey.RPC_METHODS))})),t.ɵɵelementStart(104,"tb-icon",35),t.ɵɵtext(105,"edit"),t.ɵɵelementEnd()()()()()(),t.ɵɵelementStart(106,"div",36)(107,"button",37),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(108),t.ɵɵpipe(109,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(110,"button",38),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.add())})),t.ɵɵtext(111),t.ɵɵpipe(112,"translate"),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵproperty("formGroup",n.deviceFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,26,"gateway.device")),t.ɵɵadvance(3),t.ɵɵproperty("tb-help",n.socketDeviceHelpLink),t.ɵɵadvance(10),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/address-filter_fn")("tb-help-popup-style",t.ɵɵpureFunction0(40,Wd)),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(20,28,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deviceFormGroup.get("address").hasError("required")&&n.deviceFormGroup.get("address").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(28,30,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deviceFormGroup.get("deviceName").hasError("required")&&n.deviceFormGroup.get("deviceName").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(36,32,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deviceFormGroup.get("deviceType").hasError("required")&&n.deviceFormGroup.get("deviceType").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(40,34,"gateway.hints.encoding")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.socketEncoding),t.ɵɵadvance(5),t.ɵɵproperty("tb-ellipsis-chip-list",n.deviceFormGroup.get("telemetry").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.deviceFormGroup.get("telemetry").value),t.ɵɵadvance(11),t.ɵɵproperty("tb-ellipsis-chip-list",n.deviceFormGroup.get("attributes").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.deviceFormGroup.get("attributes").value),t.ɵɵadvance(11),t.ɵɵproperty("tb-ellipsis-chip-list",n.deviceFormGroup.get("attributeRequests").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.deviceFormGroup.get("attributeRequests").value),t.ɵɵadvance(11),t.ɵɵproperty("tb-ellipsis-chip-list",n.deviceFormGroup.get("attributeUpdates").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.deviceFormGroup.get("attributeUpdates").value),t.ɵɵadvance(11),t.ɵɵproperty("tb-ellipsis-chip-list",n.deviceFormGroup.get("serverSideRpc").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.deviceFormGroup.get("serverSideRpc").value),t.ɵɵadvance(9),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(109,36,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.deviceFormGroup.invalid||!n.deviceFormGroup.dirty||!n.keysPopupClosed),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(112,38,n.data.buttonTitle)," "))},dependencies:t.ɵɵgetComponentDepsFactory(im,[B,g,Qn]),styles:['@charset "UTF-8";[_nghost-%COMP%]{display:grid;height:100%}[_nghost-%COMP%] .tb-form-panel[_ngcontent-%COMP%]{width:77vw;max-width:800px}[_nghost-%COMP%] .dialog-mapping[_ngcontent-%COMP%]{max-width:900px;display:flex;flex-direction:column}[_nghost-%COMP%] .dialog-mapping[_ngcontent-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{min-height:64px}[_nghost-%COMP%] .dialog-mapping[_ngcontent-%COMP%] tb-toggle-select[_ngcontent-%COMP%]{padding:4px 0}[_nghost-%COMP%] .mat-mdc-dialog-content[_ngcontent-%COMP%]{height:670px}[_nghost-%COMP%] .ellipsis-chips-container[_ngcontent-%COMP%]{max-width:70%}[_nghost-%COMP%] .dialog-mapping .mat-mdc-chip-listbox .mdc-evolution-chip-set__chips{justify-content:flex-end;align-items:center}[_nghost-%COMP%] .tb-form-row .fixed-title-width{min-width:40px;width:35%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center}[_nghost-%COMP%] .tb-form-row .mat-mdc-form-field{width:0}[_nghost-%COMP%] .see-example{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}[_nghost-%COMP%] .device-config{gap:12px;padding-left:10px;padding-right:10px}[_nghost-%COMP%] .device-node-pattern-field{flex-basis:3%}'],changeDetection:o.OnPush})}}e("DeviceDialogComponent",im);const om=["searchInput"],sm=()=>["address","deviceName","actions"],lm=()=>({minWidth:"96px",textAlign:"center"});function pm(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",7)(1,"div",26)(2,"span",27),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()(),t.ɵɵelement(5,"span",9),t.ɵɵelementStart(6,"button",11),t.ɵɵpipe(7,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.manageDevices(n))})),t.ɵɵelementStart(8,"mat-icon"),t.ɵɵtext(9,"add"),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"button",11),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.enterFilterMode())})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"search"),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.devices")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,5,"action.add")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(11,7,"action.search")))}function cm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",28),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.address-filter")," "))}function dm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",28)(1,"div",29),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.address)}}function mm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",28)(1,"div",29),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.device-name")))}function um(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",28)(1,"div",29),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.deviceName)}}function gm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell"),t.ɵɵelement(1,"div",30)(2,"div",31),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵstyleMap(t.ɵɵpureFunction0(2,lm)))}function hm(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",11),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageDevices(n,a))})),t.ɵɵelementStart(2,"tb-icon"),t.ɵɵtext(3,"edit"),t.ɵɵelementEnd()(),t.ɵɵelementStart(4,"button",11),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteDevice(n,a))})),t.ɵɵelementStart(6,"tb-icon"),t.ɵɵtext(7,"delete"),t.ɵɵelementEnd()()}2&e&&(t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,2,"action.edit")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(5,4,"action.delete")))}function ym(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtemplate(1,hm,8,6,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(3,"div",32),t.ɵɵelementContainer(4,33),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",34)(6,"button",35),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(7,"mat-icon",36),t.ɵɵtext(8,"more_vert"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"mat-menu",37,2),t.ɵɵelementContainer(11,33),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(2),n=t.ɵɵreference(10);t.ɵɵadvance(3),t.ɵɵstyleMap(t.ɵɵpureFunction0(5,lm)),t.ɵɵadvance(),t.ɵɵproperty("ngTemplateOutlet",e),t.ɵɵadvance(2),t.ɵɵproperty("matMenuTriggerFor",n),t.ɵɵadvance(5),t.ɵɵproperty("ngTemplateOutlet",e)}}function fm(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",38)}function vm(e,n){1&e&&t.ɵɵelement(0,"mat-row")}class bm{constructor(e,t,n,a,r){this.translate=e,this.dialog=t,this.dialogService=n,this.fb=a,this.cdr=r,this.textSearchMode=!1,this.textSearch=this.fb.control("",{nonNullable:!0}),this.onChange=()=>{},this.destroy$=new ie,this.devicesFormGroup=this.fb.array([]),this.dataSource=new xm}ngOnInit(){this.devicesFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.updateTableData(e),this.onChange(e)}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}ngAfterViewInit(){this.textSearch.valueChanges.pipe(xe(150),Ce(((e,t)=>(e??"")===t.trim())),de(this.destroy$)).subscribe((e=>this.updateTableData(this.devicesFormGroup.value,e.trim())))}registerOnChange(e){this.onChange=e}registerOnTouched(e){}writeValue(e){this.devicesFormGroup.clear(),this.pushDataAsFormArrays(e)}enterFilterMode(){this.textSearchMode=!0,this.cdr.detectChanges();const e=this.searchInputField.nativeElement;e.focus(),e.setSelectionRange(0,0)}exitFilterMode(){this.updateTableData(this.devicesFormGroup.value),this.textSearchMode=!1,this.textSearch.reset()}manageDevices(e,t){e&&e.stopPropagation();const n=_(t),a=n?this.devicesFormGroup.at(t).value:{};this.getDeviceDialog(a,n?"action.apply":"action.add").afterClosed().pipe(ve(1),de(this.destroy$)).subscribe((e=>{e&&(n?this.devicesFormGroup.at(t).patchValue(e):this.devicesFormGroup.push(this.fb.control(e)),this.devicesFormGroup.markAsDirty())}))}getDeviceDialog(e,t){return this.dialog.open(im,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{value:e,buttonTitle:t}})}deleteDevice(e,t){e&&e.stopPropagation(),this.dialogService.confirm(this.translate.instant("gateway.delete-device-title"),"",this.translate.instant("action.no"),this.translate.instant("action.yes"),!0).pipe(ve(1),de(this.destroy$)).subscribe((e=>{e&&(this.devicesFormGroup.removeAt(t),this.devicesFormGroup.markAsDirty())}))}updateTableData(e,t){t&&(e=e.filter((e=>Object.values(e).some((e=>e.toString().toLowerCase().includes(t.toLowerCase())))))),this.dataSource.loadData(e)}pushDataAsFormArrays(e){e?.length&&e.forEach((e=>this.devicesFormGroup.push(this.fb.control(e))))}static{this.ɵfac=function(e){return new(e||bm)(t.ɵɵdirectiveInject(ke.TranslateService),t.ɵɵdirectiveInject(ne.MatDialog),t.ɵɵdirectiveInject(R.DialogService),t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:bm,selectors:[["tb-devices-config-table"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(om,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.searchInputField=e.first)}},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>bm)),multi:!0}]),t.ɵɵStandaloneFeature],decls:45,vars:36,consts:[["searchInput",""],["rowActions",""],["cellActionsMenu","matMenu"],[1,"tb-device-table","tb-absolute-fill"],[1,"tb-master-table-content","flex","flex-col"],[1,"mat-mdc-table-toolbar"],["class","mat-toolbar-tools",4,"ngIf"],[1,"mat-toolbar-tools"],["mat-icon-button","","matTooltipPosition","above",3,"matTooltip"],[1,"flex-1"],["matInput","",3,"formControl","placeholder"],["mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],[1,"table-container"],["mat-table","",3,"dataSource"],[3,"matColumnDef"],["class","table-value-column",4,"matHeaderCellDef"],["class","table-value-column",4,"matCellDef"],["matColumnDef","actions","stickyEnd",""],[4,"matHeaderCellDef"],[4,"matCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],[4,"matRowDef","matRowDefColumns"],[1,"mat-headline-5","tb-absolute-fill","tb-add-new","justify-center","items-center"],["mat-button","",1,"connector",3,"click"],[1,"tb-mat-96"],["translate","",1,"no-data-found","justify-center","items-center"],[1,"title-container"],[1,"tb-device-table-title"],[1,"table-value-column"],["tbTruncateWithTooltip",""],[1,"gt-md:!hidden",2,"width","48px","min-width","48px","max-width","48px"],[1,"lt-lg:!hidden"],[1,"flex","flex-1","flex-row","justify-end","items-stretch","lt-lg:!hidden"],[3,"ngTemplateOutlet"],[1,"gt-md:!hidden"],["mat-icon-button","",3,"click","matMenuTriggerFor"],[1,"material-icons"],["xPosition","before"],[1,"mat-row-select"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",3)(1,"div",4)(2,"mat-toolbar",5),t.ɵɵtemplate(3,pm,14,9,"div",6),t.ɵɵpipe(4,"async"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-toolbar",5)(6,"div",7)(7,"button",8),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"mat-icon"),t.ɵɵtext(10,"search"),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",9)(12,"mat-label"),t.ɵɵtext(13," "),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",10,0),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"button",11),t.ɵɵpipe(18,"translate"),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.exitFilterMode())})),t.ɵɵelementStart(19,"mat-icon"),t.ɵɵtext(20,"close"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(21,"div",12)(22,"table",13),t.ɵɵelementContainerStart(23,14),t.ɵɵtemplate(24,cm,3,3,"mat-header-cell",15)(25,dm,3,1,"mat-cell",16),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(26,14),t.ɵɵtemplate(27,mm,4,3,"mat-header-cell",15)(28,um,3,1,"mat-cell",16),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(29,17),t.ɵɵtemplate(30,gm,3,3,"mat-header-cell",18)(31,ym,12,6,"mat-cell",19),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(32,fm,1,0,"mat-header-row",20)(33,vm,1,0,"mat-row",21),t.ɵɵelementEnd(),t.ɵɵelementStart(34,"section",22),t.ɵɵpipe(35,"async"),t.ɵɵelementStart(36,"button",23),t.ɵɵlistener("click",(function(a){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.manageDevices(a))})),t.ɵɵelementStart(37,"mat-icon",24),t.ɵɵtext(38,"add"),t.ɵɵelementEnd(),t.ɵɵelementStart(39,"span"),t.ɵɵtext(40),t.ɵɵpipe(41,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(42,"span",25),t.ɵɵpipe(43,"async"),t.ɵɵtext(44," widget.no-data-found "),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.textSearchMode),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!1===t.ɵɵpipeBind1(4,20,n.dataSource.isEmpty())),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,22,"action.search")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,24,"common.enter-search")),t.ɵɵproperty("formControl",n.textSearch),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,26,"action.close")),t.ɵɵadvance(5),t.ɵɵproperty("dataSource",n.dataSource),t.ɵɵadvance(),t.ɵɵproperty("matColumnDef","address"),t.ɵɵadvance(3),t.ɵɵproperty("matColumnDef","deviceName"),t.ɵɵadvance(6),t.ɵɵproperty("matHeaderRowDef",t.ɵɵpureFunction0(34,sm))("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",t.ɵɵpureFunction0(35,sm)),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",n.textSearchMode||!1===t.ɵɵpipeBind1(35,28,n.dataSource.isEmpty())),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(41,30,"gateway.add-device")),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode||!1===t.ɵɵpipeBind1(43,32,n.dataSource.isEmpty())))},dependencies:t.ɵɵgetComponentDepsFactory(bm,[B,g,Hn]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%]{width:100%;height:100%;background:#fff;overflow:hidden}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .mat-toolbar-tools[_ngcontent-%COMP%]{min-height:auto}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{overflow:hidden}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .tb-device-table-title[_ngcontent-%COMP%]{padding-right:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%]{overflow:auto}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%]{table-layout:fixed;min-width:450px}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%] .table-value-column[_ngcontent-%COMP%]{padding:0 12px;width:38%}[_nghost-%COMP%] .no-data-found[_ngcontent-%COMP%]{height:calc(100% - 120px)}@media screen and (max-width: 599px){[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{height:auto;min-height:100px}[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%] .tb-device-table-title[_ngcontent-%COMP%]{padding-bottom:5px;width:100%}}[_nghost-%COMP%] mat-cell.tb-value-cell{cursor:pointer}[_nghost-%COMP%] mat-cell.tb-value-cell .mat-icon{height:24px;width:24px;font-size:24px;color:#757575}'],changeDetection:o.OnPush})}}e("DevicesConfigTableComponent",bm);class xm extends F{constructor(){super()}}function Cm(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",13),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function wm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",14),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.address-required"))}function Sm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",14),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.socketConfigFormGroup.get("port")))}}function Em(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",14),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.buffer-size-required"))}e("DevicesDatasource",xm);class Tm{constructor(e){this.fb=e,this.portLimits=ca,this.socketTypes=Object.values(Za),this.destroy$=new ie,this.socketConfigFormGroup=this.fb.group({address:["",[J.required,J.pattern(Re)]],type:[Za.TCP],port:[5e4,[J.required,J.min(ca.MIN),J.max(ca.MAX)]],bufferSize:[1024,[J.required,J.pattern(Re)]]}),this.socketConfigFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e)}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){}writeValue(e){const{address:t="",type:n=Za.TCP,port:a=5e4,bufferSize:r=1024}=e??{};this.socketConfigFormGroup.reset({address:t,type:n,port:a,bufferSize:r},{emitEvent:!1})}validate(){return this.socketConfigFormGroup.valid?null:{socketConfigFormGroup:{valid:!1}}}static{this.ɵfac=function(e){return new(e||Tm)(t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Tm,selectors:[["tb-socket-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Tm)),multi:!0},{provide:X,useExisting:i((()=>Tm)),multi:!0}]),t.ɵɵStandaloneFeature],decls:32,vars:19,consts:[[1,"tb-form-panel","no-border","no-padding","padding-top",3,"formGroup"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width"],["tbTruncateWithTooltip",""],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],["translate","",1,"fixed-title-width","tb-required"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","address",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],["matInput","","type","number","name","value","formControlName","bufferSize",3,"placeholder"],[3,"value"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"tb-toggle-select",4),t.ɵɵtemplate(7,Cm,2,2,"tb-toggle-option",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",1)(9,"div",6),t.ɵɵtext(10,"gateway.address"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"div",7)(12,"mat-form-field",8),t.ɵɵelement(13,"input",9),t.ɵɵpipe(14,"translate"),t.ɵɵtemplate(15,wm,3,3,"mat-icon",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(16,"div",1)(17,"div",6),t.ɵɵtext(18,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"div",7)(20,"mat-form-field",8),t.ɵɵelement(21,"input",11),t.ɵɵpipe(22,"translate"),t.ɵɵtemplate(23,Sm,3,3,"mat-icon",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(24,"div",1)(25,"div",6),t.ɵɵtext(26,"gateway.buffer-size"),t.ɵɵelementEnd(),t.ɵɵelementStart(27,"div",7)(28,"mat-form-field",8),t.ɵɵelement(29,"input",12),t.ɵɵpipe(30,"translate"),t.ɵɵtemplate(31,Em,3,3,"mat-icon",10),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.socketConfigFormGroup),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,11,"gateway.connection-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.socketTypes),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(14,13,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.socketConfigFormGroup.get("address").hasError("required")&&n.socketConfigFormGroup.get("address").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("min",n.portLimits.MIN),t.ɵɵpropertyInterpolate("max",n.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(22,15,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(n.socketConfigFormGroup.get("port").hasError("required")||n.socketConfigFormGroup.get("port").hasError("min")||n.socketConfigFormGroup.get("port").hasError("max"))&&n.socketConfigFormGroup.get("port").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(30,17,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.socketConfigFormGroup.get("bufferSize").hasError("required")&&n.socketConfigFormGroup.get("bufferSize").touched))},dependencies:t.ɵɵgetComponentDepsFactory(Tm,[B,g,So,Hn]),encapsulation:2,changeDetection:o.OnPush})}}e("SocketConfigComponent",Tm);class Im extends ur{getMappedValue(e){return e}initBasicFormGroup(){return this.fb.group({socket:[],devices:[]})}mapConfigToFormValue(e){return{socket:e.socket??{},devices:e.devices??[]}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Im)))(n||Im)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:Im,selectors:[["tb-socket-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Im)),multi:!0},{provide:X,useExisting:i((()=>Im)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:10,vars:11,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","socket"],["formControlName","devices"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-socket-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelement(9,"tb-devices-config-table",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,5,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(5,7,"gateway.socket")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(8,9,"gateway.devices")))},dependencies:t.ɵɵgetComponentDepsFactory(Im,[B,g,Tm,bm]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}e("SocketBasicConfigComponent",Im);class km extends ur{getMappedValue(e){return vr.mapSocketToDowngradedVersion(e)}initBasicFormGroup(){return this.fb.group({socket:[],devices:[]})}mapConfigToFormValue(e){return{socket:vr.mapSocketToUpgradedVersion(e),devices:e?.devices?vr.mapDevicesToUpgradedVersion(e.devices):[]}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(km)))(n||km)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:km,selectors:[["tb-socket-legacy-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>km)),multi:!0},{provide:X,useExisting:i((()=>km)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:10,vars:11,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","socket"],["formControlName","devices"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-socket-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelement(9,"tb-devices-config-table",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,5,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(5,7,"gateway.socket")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(8,9,"gateway.devices")))},dependencies:t.ɵɵgetComponentDepsFactory(km,[B,g,Tm,bm]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}e("SocketLegacyBasicConfigComponent",km);const Mm=(e,t)=>({hasErrors:e,noErrors:t}),Pm=()=>({minWidth:"144px",maxWidth:"144px",textAlign:"center"}),Fm=()=>({minWidth:"144px",maxWidth:"144px",width:"144px",textAlign:"center"}),Om=e=>({"tb-current-entity":e});function qm(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",32),t.ɵɵpipe(1,"translate"),t.ɵɵpipe(2,"async"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.onAddConnector(n))})),t.ɵɵelementStart(3,"mat-icon"),t.ɵɵtext(4,"add"),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,2,"action.add")),t.ɵɵproperty("disabled",t.ɵɵpipeBind1(2,4,e.isLoading$))}}function Bm(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section",33)(1,"button",34),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.onAddConnector(n))})),t.ɵɵelementStart(2,"mat-icon",35),t.ɵɵtext(3,"add"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"span"),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(6,1,"gateway.add-connector")))}function Nm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",36),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.connectors-table-enabled")," "))}function Rm(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell")(1,"mat-slide-toggle",37),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return n.stopPropagation(),t.ɵɵresetView(r.onEnableConnector(a))})),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("checked",a.activeConnectors.includes(e.key))}}function _m(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",38),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.connectors-table-name"),""))}function Dm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.key," ")}}function Vm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.connectors-table-type")," "))}function Am(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",40),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",a.returnType(e)," ")}}function Gm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.configuration")," "))}function jm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",40)(1,"div",41),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵclassMap(a.isConnectorSynced(e)?"status-sync":"status-unsync"),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",a.isConnectorSynced(e)?"sync":"out of sync"," ")}}function Lm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.connectors-table-status")," "))}function Um(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell",40)(1,"span",42),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.connectorLogs(a,n))})),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵclassMap(t.ɵɵpureFunction2(3,Mm,+a.getErrorsCount(e)>0,0==+a.getErrorsCount(e)||""===a.getErrorsCount(e))),t.ɵɵpropertyInterpolate("matTooltip","Errors: "+a.getErrorsCount(e))}}function $m(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell"),t.ɵɵelement(1,"div",43),t.ɵɵelementStart(2,"div",44),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵstyleMap(t.ɵɵpureFunction0(5,Pm)),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.connectors-table-actions")))}function zm(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell")(1,"div",45)(2,"button",46),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.connectorRpc(a,n))})),t.ɵɵelementStart(3,"mat-icon"),t.ɵɵtext(4,"private_connectivity"),t.ɵɵelementEnd()(),t.ɵɵelementStart(5,"button",47),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.connectorLogs(a,n))})),t.ɵɵelementStart(6,"mat-icon"),t.ɵɵtext(7,"list"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"button",48),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteConnector(a,n))})),t.ɵɵelementStart(9,"mat-icon"),t.ɵɵtext(10,"delete"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(11,"div",49)(12,"button",50),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(13,"mat-icon",51),t.ɵɵtext(14,"more_vert"),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"mat-menu",52,1)(17,"button",46),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.connectorRpc(a,n))})),t.ɵɵelementStart(18,"mat-icon"),t.ɵɵtext(19,"private_connectivity"),t.ɵɵelementEnd()(),t.ɵɵelementStart(20,"button",47),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.connectorLogs(a,n))})),t.ɵɵelementStart(21,"mat-icon"),t.ɵɵtext(22,"list"),t.ɵɵelementEnd()(),t.ɵɵelementStart(23,"button",48),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteConnector(a,n))})),t.ɵɵelementStart(24,"mat-icon"),t.ɵɵtext(25,"delete"),t.ɵɵelementEnd()()()()()}if(2&e){const e=t.ɵɵreference(16);t.ɵɵadvance(),t.ɵɵstyleMap(t.ɵɵpureFunction0(3,Fm)),t.ɵɵadvance(11),t.ɵɵproperty("matMenuTriggerFor",e)}}function Km(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",53)}function Hm(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-row",54),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.selectConnector(n,a))})),t.ɵɵelementEnd()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵclassMap(t.ɵɵpureFunction1(2,Om,a.isSameConnector(e)))}}function Qm(e,n){if(1&e&&(t.ɵɵelementStart(0,"span",55),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1("v",e.connectorForm.get("configVersion").value,"")}}function Wm(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-select",56)(1,"tb-toggle-option",57),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"tb-toggle-option",57),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("value",e.ConnectorConfigurationModes.BASIC),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,4,"gateway.basic")," "),t.ɵɵadvance(2),t.ɵɵproperty("value",e.ConnectorConfigurationModes.ADVANCED),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,6,"gateway.advanced")," ")}}function Jm(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-mqtt-basic-config",65),t.ɵɵpipe(1,"withReportStrategy"),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(4),n=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",n)("withReportStrategy",t.ɵɵpipeBind2(1,2,e.connectorForm.get("configVersion").value,e.ConnectorType.OPCUA))}}function Ym(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-mqtt-legacy-basic-config",66),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){t.ɵɵnextContext(4);const e=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",e)}}function Xm(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,Jm,2,5,"tb-mqtt-basic-config",64),t.ɵɵpipe(2,"isLatestVersionConfig"),t.ɵɵtemplate(3,Ym,1,1,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵreference(4),n=t.ɵɵnextContext(3);t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind2(2,2,n.connectorForm.get("configVersion").value,n.ConnectorType.MQTT))("ngIfElse",e)}}function Zm(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-opc-ua-basic-config",65),t.ɵɵpipe(1,"withReportStrategy"),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(4),n=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",n)("withReportStrategy",t.ɵɵpipeBind2(1,2,e.connectorForm.get("configVersion").value,e.ConnectorType.OPCUA))}}function eu(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-opc-ua-legacy-basic-config",66),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){t.ɵɵnextContext(4);const e=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",e)}}function tu(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,Zm,2,5,"tb-opc-ua-basic-config",64),t.ɵɵpipe(2,"isLatestVersionConfig"),t.ɵɵtemplate(3,eu,1,1,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵreference(4),n=t.ɵɵnextContext(3);t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind2(2,2,n.connectorForm.get("configVersion").value,n.ConnectorType.OPCUA))("ngIfElse",e)}}function nu(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-modbus-basic-config",66),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){t.ɵɵnextContext(4);const e=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",e)}}function au(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-modbus-legacy-basic-config",66),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){t.ɵɵnextContext(4);const e=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",e)}}function ru(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,nu,1,1,"tb-modbus-basic-config",67),t.ɵɵpipe(2,"isLatestVersionConfig"),t.ɵɵtemplate(3,au,1,1,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵreference(4),n=t.ɵɵnextContext(3);t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind2(2,2,n.connectorForm.get("configVersion").value,n.ConnectorType.MODBUS))("ngIfElse",e)}}function iu(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-socket-basic-config",66),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){t.ɵɵnextContext(4);const e=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",e)}}function ou(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-socket-legacy-basic-config",66),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){t.ɵɵnextContext(4);const e=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",e)}}function su(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,iu,1,1,"tb-socket-basic-config",67),t.ɵɵpipe(2,"isLatestVersionConfig"),t.ɵɵtemplate(3,ou,1,1,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵreference(4),n=t.ɵɵnextContext(3);t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind2(2,2,n.connectorForm.get("configVersion").value,n.ConnectorType.SOCKET))("ngIfElse",e)}}function lu(e,n){if(1&e&&(t.ɵɵelementContainerStart(0)(1,62),t.ɵɵtemplate(2,Xm,5,5,"ng-container",63)(3,tu,5,5,"ng-container",63)(4,ru,5,5,"ng-container",63)(5,su,5,5,"ng-container",63),t.ɵɵelementContainerEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵproperty("ngSwitch",e.initialConnector.type),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.MQTT),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.OPCUA),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.MODBUS),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.SOCKET)}}function pu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-tab-group")(1,"mat-tab",68),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,69),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",68),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-json-object-edit",70),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()),2&e){t.ɵɵnextContext(2);const e=t.ɵɵreference(41);t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,6,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",e),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,8,"gateway.configuration"),"*"),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(7,10,"gateway.configuration")),t.ɵɵproperty("fillHeight",!0)}}function cu(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section",58),t.ɵɵtemplate(1,lu,6,5,"ng-container",59)(2,pu,8,12,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(4,"div",60)(5,"button",61),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.onSaveConnector())})),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()}if(2&e){let e;const n=t.ɵɵreference(3),a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngIf",(null==(e=a.connectorForm.get("mode"))?null:e.value)===a.ConnectorConfigurationModes.BASIC)("ngIfElse",n),t.ɵɵadvance(4),t.ɵɵproperty("disabled",!a.connectorForm.dirty||a.connectorForm.invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,4,"action.save")," ")}}function du(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",87),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.connectorForm.get("name").hasError("duplicateName")?"gateway.connector-duplicate-name":"gateway.name-required"))}}function mu(e,n){1&e&&(t.ɵɵelementStart(0,"div",72)(1,"div",83),t.ɵɵtext(2,"gateway.connectors-table-class"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",74)(4,"mat-form-field",75),t.ɵɵelement(5,"input",88),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,1,"gateway.set")))}function uu(e,n){1&e&&(t.ɵɵelementStart(0,"div",72)(1,"div",83),t.ɵɵtext(2,"gateway.connectors-table-key"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",74)(4,"mat-form-field",75),t.ɵɵelement(5,"input",89),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,1,"gateway.set")))}function gu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",57),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function hu(e,n){1&e&&(t.ɵɵelementStart(0,"div",72)(1,"mat-slide-toggle",90)(2,"mat-label",91),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,2,"gateway.send-change-data-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,4,"gateway.send-change-data")," "))}function yu(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",92),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("isExpansionMode",!0)("defaultValue",e.ReportStrategyDefaultValue.Connector)}}function fu(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",71)(1,"div",72)(2,"div",73),t.ɵɵtext(3,"gateway.name"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",74)(5,"mat-form-field",75),t.ɵɵelement(6,"input",76),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,du,3,3,"mat-icon",77),t.ɵɵelementEnd()()(),t.ɵɵtemplate(9,mu,7,3,"div",78)(10,uu,7,3,"div",78),t.ɵɵelementStart(11,"div",79)(12,"div",80),t.ɵɵtext(13,"gateway.logs-configuration"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"div",81)(15,"mat-slide-toggle",82)(16,"mat-label"),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(19,"div",72)(20,"div",83),t.ɵɵtext(21,"gateway.remote-logging-level"),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"div",74)(23,"mat-form-field",75)(24,"mat-select",84),t.ɵɵtemplate(25,gu,2,2,"mat-option",85),t.ɵɵelementEnd()()()()(),t.ɵɵtemplate(26,hu,6,6,"div",78),t.ɵɵpipe(27,"withReportStrategy"),t.ɵɵtemplate(28,yu,1,2,"tb-report-strategy",86),t.ɵɵpipe(29,"withReportStrategy"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("formGroup",e.connectorForm),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,9,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.connectorForm.get("name").hasError("required")&&e.connectorForm.get("name").touched||e.connectorForm.get("name").hasError("duplicateName")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.connectorForm.get("type").value===e.ConnectorType.CUSTOM),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.connectorForm.get("type").value===e.ConnectorType.GRPC),t.ɵɵadvance(7),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,11,"gateway.enable-remote-logging")," "),t.ɵɵadvance(8),t.ɵɵproperty("ngForOf",e.gatewayLogLevel),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.connectorForm.get("type").value===e.ConnectorType.MQTT&&!t.ɵɵpipeBind2(27,13,e.connectorForm.get("configVersion").value,e.ConnectorType.MQTT)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",t.ɵɵpipeBind2(29,16,e.connectorForm.get("configVersion").value,e.connectorForm.get("type").value))}}class vu{isErrorState(e){return e&&e.invalid}}e("ForceErrorStateMatcher",vu);class bu extends P{constructor(e,t,n,a,r,i,o,s,l,p,c){super(e),this.store=e,this.fb=t,this.translate=n,this.attributeService=a,this.dialogService=r,this.dialog=i,this.telemetryWsService=o,this.zone=s,this.utils=l,this.withReportStrategy=p,this.cd=c,this.ConnectorType=je,this.allowBasicConfig=new Set([je.MQTT,je.OPCUA,je.MODBUS,je.SOCKET]),this.gatewayLogLevel=Object.values(Ae),this.displayedColumns=["enabled","key","type","syncStatus","errors","actions"],this.GatewayConnectorTypesTranslatesMap=Le,this.ConnectorConfigurationModes=It,this.ReportStrategyDefaultValue=Mt,this.basicConfigInitSubject=new ie,this.activeData=[],this.inactiveData=[],this.sharedAttributeData=[],this.subscriptionOptions={callbacks:{onDataUpdated:()=>this.ctx.ngZone.run((()=>{this.onErrorsUpdated()})),onDataUpdateError:(e,t)=>this.ctx.ngZone.run((()=>{this.onDataUpdateError(t)}))}},this.destroy$=new ie,this.attributeUpdateSubject=new ie,this.initDataSources(),this.initConnectorForm(),this.observeAttributeChange()}ngAfterViewInit(){this.dataSource.sort=this.sort,this.dataSource.sortingDataAccessor=this.getSortingDataAccessor(),this.ctx.$scope.gatewayConnectors=this,this.loadConnectors(),this.loadGatewayState(),this.observeModeChange()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),super.ngOnDestroy()}onSaveConnector(){this.saveConnector(this.getUpdatedConnectorData(this.connectorForm.value),!1)}saveConnector(e,t=!0){const n=t||this.activeConnectors.includes(this.initialConnector.name)?f.SHARED_SCOPE:f.SERVER_SCOPE;ce(this.getEntityAttributeTasks(e,n)).pipe(ve(1)).subscribe((n=>{this.showToast(t?this.translate.instant("gateway.connector-created"):this.translate.instant("gateway.connector-updated")),this.initialConnector=e,this.updateData(!0),this.connectorForm.markAsPristine()}))}getEntityAttributeTasks(e,t){const n=[],a=[{key:e.name,value:e}],r=[],i=!this.activeConnectors.includes(e.name)&&t===f.SHARED_SCOPE||!this.inactiveConnectors.includes(e.name)&&t===f.SERVER_SCOPE,o=this.initialConnector&&this.initialConnector.name!==e.name;return o&&(r.push({key:this.initialConnector.name}),this.removeConnectorFromList(this.initialConnector.name,!0),this.removeConnectorFromList(this.initialConnector.name,!1)),i&&(t===f.SHARED_SCOPE?this.activeConnectors.push(e.name):this.inactiveConnectors.push(e.name)),(o||i)&&n.push(this.getSaveEntityAttributesTask(t)),n.push(this.attributeService.saveEntityAttributes(this.device,t,a)),r.length&&n.push(this.attributeService.deleteEntityAttributes(this.device,t,r)),n}getSaveEntityAttributesTask(e){const t=e===f.SHARED_SCOPE?"active_connectors":"inactive_connectors",n=e===f.SHARED_SCOPE?this.activeConnectors:this.inactiveConnectors;return this.attributeService.saveEntityAttributes(this.device,e,[{key:t,value:n}])}removeConnectorFromList(e,t){const n=t?this.activeConnectors:this.inactiveConnectors,a=n.indexOf(e);-1!==a&&n.splice(a,1)}getUpdatedConnectorData(e){const t={...e};return t.configuration=`${H(t.name)}.json`,delete t.basicConfig,t.type!==je.GRPC&&delete t.key,t.type!==je.CUSTOM&&delete t.class,this.allowBasicConfig.has(t.type)||delete t.mode,this.withReportStrategy.transform(t.configVersion,t.type)&&U(t.reportStrategy)&&delete t.reportStrategy,this.gatewayVersion&&!t.configVersion&&(t.configVersion=this.gatewayVersion),t.ts=Date.now(),t}updateData(e=!1){this.pageLink.sortOrder.property=this.sort.active,this.pageLink.sortOrder.direction=d[this.sort.direction.toUpperCase()],this.attributeDataSource.loadAttributes(this.device,f.CLIENT_SCOPE,this.pageLink,e).subscribe((e=>{this.activeData=e.data.filter((e=>this.activeConnectors.includes(e.key))),this.combineData(),this.generateSubscription(),this.setClientData(e)})),this.inactiveConnectorsDataSource.loadAttributes(this.device,f.SHARED_SCOPE,this.pageLink,e).subscribe((e=>{this.sharedAttributeData=e.data.filter((e=>this.activeConnectors.includes(e.key))),this.combineData()})),this.serverDataSource.loadAttributes(this.device,f.SERVER_SCOPE,this.pageLink,e).subscribe((e=>{this.inactiveData=e.data.filter((e=>this.inactiveConnectors.includes(e.key))),this.combineData()}))}isConnectorSynced(e){const t=e.value;if(!t.ts||e.skipSync||!this.isGatewayActive)return!1;if(-1===this.activeData.findIndex((e=>("string"==typeof e.value?JSON.parse(e.value):e.value).name===t.name)))return!1;return-1!==this.sharedAttributeData.findIndex((e=>{const n=e.value,a=n.name===t.name,r=V(n.configurationJson,{})&&a,i=this.hasSameConfig(n.configurationJson,t.configurationJson),o=n.ts&&n.ts<=t.ts;return a&&o&&(i||r)}))}hasSameConfig(e,t){const{name:n,id:a,enableRemoteLogging:r,logLevel:i,reportStrategy:o,configVersion:s,...l}=e,{name:p,id:c,enableRemoteLogging:d,logLevel:m,reportStrategy:u,configVersion:g,...h}=t;return V(l,h)}combineData(){const e=[...this.activeData,...this.inactiveData,...this.sharedAttributeData].reduce(((e,t)=>{const n=e.findIndex((e=>e.key===t.key));return-1===n?e.push(t):t.lastUpdateTs>e[n].lastUpdateTs&&!this.isConnectorSynced(e[n])&&(e[n]={...t,skipSync:!0}),e}),[]);this.dataSource.data=e.map((e=>({...e,value:"string"==typeof e.value?JSON.parse(e.value):e.value})))}clearOutConnectorForm(){this.initialConnector=null,this.connectorForm.setValue({mode:It.BASIC,name:"",type:je.MQTT,sendDataOnlyOnChange:!1,enableRemoteLogging:!1,logLevel:Ae.INFO,key:"auto",class:"",configuration:"",configurationJson:{},basicConfig:{},configVersion:"",reportStrategy:[{value:{},disabled:!0}]},{emitEvent:!1}),this.connectorForm.markAsPristine()}selectConnector(e,t){e&&e.stopPropagation();const n=t.value;n?.name!==this.initialConnector?.name&&this.confirmConnectorChange().subscribe((e=>{e&&this.setFormValue(n)}))}isSameConnector(e){if(!this.initialConnector)return!1;const t=e.value;return this.initialConnector.name===t.name}showToast(e){this.store.dispatch({type:"[Notification] Show",notification:{message:e,type:"success",duration:1e3,verticalPosition:"top",horizontalPosition:"left",target:"dashboardRoot",forceDismiss:!0}})}returnType(e){const t=e.value;return this.GatewayConnectorTypesTranslatesMap.get(t.type)}deleteConnector(e,t){t?.stopPropagation();const n=`Delete connector "${e.key}"?`;this.dialogService.confirm(n,"All connector data will be deleted.","Cancel","Delete").pipe(ve(1),we((t=>{if(!t)return;const n=[],a=this.activeConnectors.includes(e.value?.name)?f.SHARED_SCOPE:f.SERVER_SCOPE;return n.push(this.attributeService.deleteEntityAttributes(this.device,a,[e])),this.removeConnectorFromList(e.key,!0),this.removeConnectorFromList(e.key,!1),n.push(this.getSaveEntityAttributesTask(a)),ce(n)}))).subscribe((()=>{this.initialConnector&&this.initialConnector.name!==e.key||(this.clearOutConnectorForm(),this.cd.detectChanges(),this.connectorForm.disable()),this.updateData(!0)}))}connectorLogs(e,t){t&&t.stopPropagation();const n=N(this.ctx.stateController.getStateParams());n.connector_logs=e,n.targetEntityParamName="connector_logs",this.ctx.stateController.openState("connector_logs",n)}connectorRpc(e,t){t&&t.stopPropagation();const n=N(this.ctx.stateController.getStateParams());n.connector_rpc=e,n.targetEntityParamName="connector_rpc",this.ctx.stateController.openState("connector_rpc",n)}onEnableConnector(e){e.value.ts=(new Date).getTime(),this.updateActiveConnectorKeys(e.key),this.attributeUpdateSubject.next(e)}getErrorsCount(e){const t=e.key,n=this.subscription&&this.subscription.data.find((e=>e&&e.dataKey.name===`${t}_ERRORS_COUNT`));return n&&this.activeConnectors.includes(t)?n.data[0][1]||0:"Inactive"}onAddConnector(e){e?.stopPropagation(),this.confirmConnectorChange().pipe(ve(1),me(Boolean),we((()=>this.openAddConnectorDialog())),me(Boolean)).subscribe((e=>this.addConnector(e)))}addConnector(e){this.connectorForm.disabled&&this.connectorForm.enable(),e.configurationJson||(e.configurationJson={}),this.gatewayVersion&&!e.configVersion&&(e.configVersion=this.gatewayVersion),e.basicConfig=e.configurationJson,this.initialConnector=e;const t=this.connectorForm.get("type").value;this.setInitialConnectorValues(e),this.saveConnector(this.getUpdatedConnectorData(e)),t!==e.type&&this.allowBasicConfig.has(e.type)?this.basicConfigInitSubject.pipe(ve(1)).subscribe((()=>{this.patchConnectorBasicConfig(e.basicConfig)})):this.patchConnectorBasicConfig(e.basicConfig)}setInitialConnectorValues(e){const{basicConfig:t,mode:n,...a}=e;this.toggleReportStrategy(e),this.connectorForm.get("mode").setValue(this.allowBasicConfig.has(e.type)?e.mode??It.BASIC:null,{emitEvent:!1}),this.connectorForm.patchValue(a,{emitEvent:!1})}openAddConnectorDialog(){return this.ctx.ngZone.run((()=>this.dialog.open(qo,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{dataSourceData:this.dataSource.data,gatewayVersion:this.gatewayVersion}}).afterClosed()))}uniqNameRequired(){return e=>{const t=e.value?.trim().toLowerCase(),n=this.dataSource.data.some((e=>e.value.name.toLowerCase()===t)),a=this.initialConnector?.name.toLowerCase()===t;return n&&!a?{duplicateName:{valid:!1}}:null}}initDataSources(){const e={property:"key",direction:d.ASC};this.pageLink=new m(1e3,0,null,e),this.attributeDataSource=new Wn(this.attributeService,this.telemetryWsService,this.zone,this.translate),this.inactiveConnectorsDataSource=new Wn(this.attributeService,this.telemetryWsService,this.zone,this.translate),this.serverDataSource=new Wn(this.attributeService,this.telemetryWsService,this.zone,this.translate),this.dataSource=new p([])}initConnectorForm(){this.connectorForm=this.fb.group({mode:[It.BASIC],name:["",[J.required,this.uniqNameRequired(),J.pattern(Re)]],type:["",[J.required]],enableRemoteLogging:[!1],logLevel:["",[J.required]],sendDataOnlyOnChange:[!1],key:["auto"],class:[""],configuration:[""],configurationJson:[{},[J.required]],basicConfig:[{}],configVersion:[""],reportStrategy:[{value:{},disabled:!0}]}),this.connectorForm.disable()}getSortingDataAccessor(){return(e,t)=>{switch(t){case"syncStatus":return this.isConnectorSynced(e)?1:0;case"enabled":return this.activeConnectors.includes(e.key)?1:0;case"errors":const n=this.getErrorsCount(e);return"string"==typeof n?this.sort.direction.toUpperCase()===d.DESC?-1:1/0:n;default:return e[t]||e.value[t]}}}loadConnectors(){this.device&&this.device.id!==y&&ce([this.attributeService.getEntityAttributes(this.device,f.SHARED_SCOPE,["active_connectors"]),this.attributeService.getEntityAttributes(this.device,f.SERVER_SCOPE,["inactive_connectors"]),this.attributeService.getEntityAttributes(this.device,f.CLIENT_SCOPE,["Version"])]).pipe(de(this.destroy$)).subscribe((e=>{this.activeConnectors=this.parseConnectors(e[0]),this.inactiveConnectors=this.parseConnectors(e[1]),this.gatewayVersion=e[2][0]?.value,this.updateData(!0)}))}loadGatewayState(){this.attributeService.getEntityAttributes(this.device,f.SERVER_SCOPE).pipe(de(this.destroy$)).subscribe((e=>{const t=e.find((e=>"active"===e.key)).value,n=e.find((e=>"lastDisconnectTime"===e.key))?.value,a=e.find((e=>"lastConnectTime"===e.key))?.value;this.isGatewayActive=this.getGatewayStatus(t,a,n)}))}parseConnectors(e){const t=e?.[0]?.value||[];return L(t)?JSON.parse(t):t}observeModeChange(){this.connectorForm.get("mode").valueChanges.pipe(de(this.destroy$)).subscribe((e=>{e===It.BASIC&&this.patchConnectorBasicConfig(this.connectorForm.get("configurationJson").value)}))}observeAttributeChange(){this.attributeUpdateSubject.pipe(xe(300),ue((e=>this.executeAttributeUpdates(e))),de(this.destroy$)).subscribe()}updateActiveConnectorKeys(e){if(this.activeConnectors.includes(e)){const t=this.activeConnectors.indexOf(e);-1!==t&&this.activeConnectors.splice(t,1),this.inactiveConnectors.push(e)}else{const t=this.inactiveConnectors.indexOf(e);-1!==t&&this.inactiveConnectors.splice(t,1),this.activeConnectors.push(e)}}executeAttributeUpdates(e){ce(this.getAttributeExecutionTasks(e)).pipe(ve(1),ue((()=>this.updateData(!0))),de(this.destroy$)).subscribe()}getAttributeExecutionTasks(e){const t=this.activeConnectors.includes(e.key),n=t?f.SERVER_SCOPE:f.SHARED_SCOPE,a=t?f.SHARED_SCOPE:f.SERVER_SCOPE;return[this.attributeService.saveEntityAttributes(this.device,f.SHARED_SCOPE,[{key:"active_connectors",value:this.activeConnectors}]),this.attributeService.saveEntityAttributes(this.device,f.SERVER_SCOPE,[{key:"inactive_connectors",value:this.inactiveConnectors}]),this.attributeService.deleteEntityAttributes(this.device,n,[e]),this.attributeService.saveEntityAttributes(this.device,a,[e])]}onDataUpdateError(e){const t=this.utils.parseException(e);let n=t.name;t.message&&(n+=": "+t.message),console.error(n)}onErrorsUpdated(){this.cd.detectChanges()}onDataUpdated(){const e=this.ctx.defaultSubscription.data,t=e.find((e=>"active"===e.dataKey.name)).data[0][1],n=e.find((e=>"lastDisconnectTime"===e.dataKey.name)).data[0][1],a=e.find((e=>"lastConnectTime"===e.dataKey.name)).data[0][1];this.isGatewayActive=this.getGatewayStatus(t,a,n),this.cd.detectChanges()}getGatewayStatus(e,t,n){return!!e&&(!n||t>n)}generateSubscription(){if(this.subscription&&this.subscription.unsubscribe(),this.device){const e=[{type:v.entity,entityType:b.DEVICE,entityId:this.device.id,entityName:"Gateway",timeseries:[]}];this.dataSource.data.forEach((t=>{e[0].timeseries.push({name:`${t.key}_ERRORS_COUNT`,label:`${t.key}_ERRORS_COUNT`})})),this.ctx.subscriptionApi.createSubscriptionFromInfo(x.latest,e,this.subscriptionOptions,!1,!0).subscribe((e=>{this.subscription=e}))}}createBasicConfigWatcher(){this.basicConfigSub&&this.basicConfigSub.unsubscribe(),this.basicConfigSub=this.connectorForm.get("basicConfig").valueChanges.pipe(me((()=>!!this.initialConnector)),de(this.destroy$)).subscribe((e=>{const t=this.connectorForm.get("configurationJson"),n=this.connectorForm.get("type").value,a=this.connectorForm.get("mode").value;if(!V(e,t?.value)&&this.allowBasicConfig.has(n)&&a===It.BASIC){const n={...t.value,...e};this.connectorForm.get("configurationJson").patchValue(n,{emitEvent:!1})}}))}createJsonConfigWatcher(){this.jsonConfigSub&&this.jsonConfigSub.unsubscribe(),this.jsonConfigSub=this.connectorForm.get("configurationJson").valueChanges.pipe(de(this.destroy$)).subscribe((e=>{const t=this.connectorForm.get("basicConfig"),n=this.connectorForm.get("type").value,a=this.connectorForm.get("mode").value;!V(e,t?.value)&&this.allowBasicConfig.has(n)&&a===It.ADVANCED&&this.connectorForm.get("basicConfig").patchValue(e,{emitEvent:!1})}))}confirmConnectorChange(){return this.initialConnector&&this.connectorForm.dirty?this.dialogService.confirm(this.translate.instant("gateway.change-connector-title"),this.translate.instant("gateway.change-connector-text"),this.translate.instant("action.no"),this.translate.instant("action.yes"),!0):pe(!0)}setFormValue(e){this.connectorForm.disabled&&this.connectorForm.enable();const t=hr.getConfig({configuration:"",key:"auto",configurationJson:{},...e},this.gatewayVersion);this.gatewayVersion&&!t.configVersion&&(t.configVersion=this.gatewayVersion),t.basicConfig=t.configurationJson,this.initialConnector=t,this.updateConnector(t)}updateConnector(e){this.jsonConfigSub?.unsubscribe(),this.allowBasicConfig.has(e.type)?this.updateBasicConfigConnector(e):(this.connectorForm.patchValue({...e,mode:null}),this.connectorForm.markAsPristine(),this.createJsonConfigWatcher())}updateBasicConfigConnector(e){this.basicConfigSub?.unsubscribe();const t=this.connectorForm.get("type").value;this.setInitialConnectorValues(e),t!==e.type&&this.allowBasicConfig.has(e.type)&&e.mode!==It.ADVANCED?this.basicConfigInitSubject.asObservable().pipe(ve(1)).subscribe((()=>{this.patchConnectorBasicConfig(e.basicConfig)})):this.patchConnectorBasicConfig(e.basicConfig)}patchConnectorBasicConfig(e){this.connectorForm.get("basicConfig").patchValue(e,{emitEvent:!1}),this.connectorForm.markAsPristine(),this.createBasicConfigWatcher(),this.createJsonConfigWatcher()}toggleReportStrategy(e){const t=this.connectorForm.get("reportStrategy"),n=this.connectorForm.get("sendDataOnlyOnChange");this.connectorForm.get("reportStrategy").reset(e.reportStrategy,{emitEvent:!1}),this.withReportStrategy.transform(e.configVersion,e.type)?(t.enable({emitEvent:!1}),n.disable({emitEvent:!1})):(t.disable({emitEvent:!1}),e.type===je.MQTT&&n.enable({emitEvent:!1}))}setClientData(e){if(this.initialConnector){const t=e.data.find((e=>e.key===this.initialConnector.name));t&&(t.value="string"==typeof t.value?JSON.parse(t.value):t.value,this.isConnectorSynced(t)&&t.value.configurationJson&&this.setFormValue({...t.value,mode:this.connectorForm.get("mode").value??t.value.mode}))}}static{this.ɵfac=function(e){return new(e||bu)(t.ɵɵdirectiveInject(ae.Store),t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(ke.TranslateService),t.ɵɵdirectiveInject(R.AttributeService),t.ɵɵdirectiveInject(R.DialogService),t.ɵɵdirectiveInject(ne.MatDialog),t.ɵɵdirectiveInject(R.TelemetryWebsocketService),t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(R.UtilsService),t.ɵɵdirectiveInject(br),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:bu,selectors:[["tb-gateway-connector"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(l,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.sort=e.first)}},inputs:{ctx:"ctx",device:"device"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Ne,useClass:vu},br]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:42,vars:21,consts:[["generalTabContent",""],["cellActionsMenu","matMenu"],["defaultConfig",""],["legacy",""],[1,"connector-container","tb-form-panel","no-border"],[1,"table-section","tb-form-panel","no-padding","flex","section-container"],[1,"mat-mdc-table-toolbar","justify-between"],["mat-icon-button","","matTooltipPosition","above",3,"disabled","matTooltip","click",4,"ngIf"],[1,"table-container"],["class","mat-headline-5 tb-absolute-fill tb-add-new justify-center items-center",4,"ngIf"],["mat-table","","matSort","","matSortDisableClear","",3,"dataSource","matSortActive","matSortDirection"],["matColumnDef","enabled","sticky",""],["style","width: 60px;min-width: 60px;",4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","key"],["mat-sort-header","","style","width: 40%",4,"matHeaderCellDef"],["matColumnDef","type"],["mat-sort-header","","style","width: 30%",4,"matHeaderCellDef"],["style","text-transform: uppercase",4,"matCellDef"],["matColumnDef","syncStatus"],["matColumnDef","errors"],["matColumnDef","actions","stickyEnd",""],[4,"matHeaderCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],["class","mat-row-select",3,"class","click",4,"matRowDef","matRowDefColumns"],[1,"tb-form-panel","section-container","flex",3,"formGroup"],[1,"tb-form-panel-title","tb-flex","no-flex","space-between","align-center"],[1,"tb-form-panel-title"],["class","version-placeholder",4,"ngIf"],["formControlName","mode","appearance","fill",4,"ngIf"],["translate","",1,"no-data-found","justify-center","items-center"],["class","tb-form-panel section-container no-border no-padding tb-flex space-between",4,"ngIf"],["mat-icon-button","","matTooltipPosition","above",3,"click","disabled","matTooltip"],[1,"mat-headline-5","tb-absolute-fill","tb-add-new","justify-center","items-center"],["mat-button","",1,"connector",3,"click"],[1,"tb-mat-96"],[2,"width","60px","min-width","60px"],[3,"click","checked"],["mat-sort-header","",2,"width","40%"],["mat-sort-header","",2,"width","30%"],[2,"text-transform","uppercase"],[1,"status"],["matTooltipPosition","above",1,"dot",3,"click","matTooltip"],[1,"gt-md:!hidden",2,"width","48px","min-width","48px","max-width","48px"],[1,"lt-lg:!hidden"],[1,"flex-row","justify-end","lt-md:!hidden"],["mat-icon-button","","matTooltip","RPC","matTooltipPosition","above",3,"click"],["mat-icon-button","","matTooltip","Logs","matTooltipPosition","above",3,"click"],["mat-icon-button","","matTooltip","Delete connector","matTooltipPosition","above",3,"click"],[1,"gt-sm:!hidden"],["mat-icon-button","",3,"click","matMenuTriggerFor"],[1,"material-icons"],["xPosition","before"],[1,"mat-row-select"],[1,"mat-row-select",3,"click"],[1,"version-placeholder"],["formControlName","mode","appearance","fill"],[3,"value"],[1,"tb-form-panel","section-container","no-border","no-padding","tb-flex","space-between"],[4,"ngIf","ngIfElse"],[1,"flex","justify-end"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[3,"ngSwitch"],[4,"ngSwitchCase"],["formControlName","basicConfig",3,"generalTabContent","withReportStrategy","initialized",4,"ngIf","ngIfElse"],["formControlName","basicConfig",3,"initialized","generalTabContent","withReportStrategy"],["formControlName","basicConfig",3,"initialized","generalTabContent"],["formControlName","basicConfig",3,"generalTabContent","initialized",4,"ngIf","ngIfElse"],[3,"label"],[3,"ngTemplateOutlet"],["jsonRequired","","formControlName","configurationJson",1,"configuration-json",3,"fillHeight","label"],[1,"tb-form-panel","no-border","no-padding","padding-top","section-container","flex",3,"formGroup"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","autocomplete","off","name","value","formControlName","name",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["class","tb-form-row column-xs",4,"ngIf"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row"],["formControlName","enableRemoteLogging",1,"mat-slide"],["translate","",1,"fixed-title-width"],["formControlName","logLevel"],[3,"value",4,"ngFor","ngForOf"],["class","stroked tb-form-panel","formControlName","reportStrategy",3,"isExpansionMode","defaultValue",4,"ngIf"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","name","value","formControlName","class",3,"placeholder"],["matInput","","name","value","formControlName","key",3,"placeholder"],["formControlName","sendDataOnlyOnChange",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["formControlName","reportStrategy",1,"stroked","tb-form-panel",3,"isExpansionMode","defaultValue"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",4)(1,"section",5)(2,"mat-toolbar",6)(3,"h2"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(6,qm,5,6,"button",7),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"div",8),t.ɵɵtemplate(8,Bm,7,3,"section",9),t.ɵɵelementStart(9,"table",10),t.ɵɵelementContainerStart(10,11),t.ɵɵtemplate(11,Nm,3,3,"mat-header-cell",12)(12,Rm,2,1,"mat-cell",13),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(13,14),t.ɵɵtemplate(14,_m,3,3,"mat-header-cell",15)(15,Dm,2,1,"mat-cell",13),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(16,16),t.ɵɵtemplate(17,Vm,3,3,"mat-header-cell",17)(18,Am,2,1,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(19,19),t.ɵɵtemplate(20,Gm,3,3,"mat-header-cell",17)(21,jm,3,3,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(22,20),t.ɵɵtemplate(23,Lm,3,3,"mat-header-cell",17)(24,Um,2,6,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(25,21),t.ɵɵtemplate(26,$m,5,6,"mat-header-cell",22)(27,zm,26,4,"mat-cell",13),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(28,Km,1,0,"mat-header-row",23)(29,Hm,1,4,"mat-row",24),t.ɵɵelementEnd()()(),t.ɵɵelementStart(30,"section",25)(31,"div",26)(32,"div",27),t.ɵɵtext(33),t.ɵɵpipe(34,"translate"),t.ɵɵtemplate(35,Qm,2,1,"span",28),t.ɵɵelementEnd(),t.ɵɵtemplate(36,Wm,7,8,"tb-toggle-select",29),t.ɵɵelementEnd(),t.ɵɵelementStart(37,"span",30),t.ɵɵtext(38," gateway.select-connector "),t.ɵɵelementEnd(),t.ɵɵtemplate(39,cu,8,6,"section",31),t.ɵɵelementEnd()(),t.ɵɵtemplate(40,fu,30,19,"ng-template",null,0,t.ɵɵtemplateRefExtractor)),2&e&&(t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,17,"gateway.connectors")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",null==n.dataSource||null==n.dataSource.data?null:n.dataSource.data.length),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!(null!=n.dataSource&&(null!=n.dataSource.data&&n.dataSource.data.length))),t.ɵɵadvance(),t.ɵɵproperty("dataSource",n.dataSource)("matSortActive",n.pageLink.sortOrder.property)("matSortDirection",n.pageLink.sortDirection()),t.ɵɵadvance(19),t.ɵɵproperty("matHeaderRowDef",n.displayedColumns)("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",n.displayedColumns),t.ɵɵadvance(),t.ɵɵproperty("formGroup",n.connectorForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate2(" ",null!=n.initialConnector&&n.initialConnector.type?n.GatewayConnectorTypesTranslatesMap.get(n.initialConnector.type):""," ",t.ɵɵpipeBind1(34,19,"gateway.configuration")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.connectorForm.get("configVersion").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.initialConnector&&n.allowBasicConfig.has(n.initialConnector.type)),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",n.initialConnector),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.initialConnector))},dependencies:t.ɵɵgetComponentDepsFactory(bu,[B,g,br,wo,op,sp,Jl,Wl,xd,Cd,Im,km,ta,qo]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block;overflow-x:auto;padding:0}[_nghost-%COMP%] .version-placeholder[_ngcontent-%COMP%]{color:gray;font-size:12px}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%]{height:100%;width:100%;flex-direction:row}@media screen and (max-width: 1279px){[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%]{flex-direction:column}}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] > section[_ngcontent-%COMP%]:not(.table-section){max-width:unset}@media screen and (min-width: 1280px){[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] > section[_ngcontent-%COMP%]:not(.table-section){max-width:50%}}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] .table-section[_ngcontent-%COMP%]{min-height:35vh;overflow:hidden}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] .table-section[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%]{overflow:auto}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] .flex[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] .input-container[_ngcontent-%COMP%]{height:auto}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] .section-container[_ngcontent-%COMP%]{background-color:#fff}[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{background:transparent;color:#000000de!important}[_nghost-%COMP%] .mat-mdc-slide-toggle[_ngcontent-%COMP%]{margin:0 8px}[_nghost-%COMP%] .status[_ngcontent-%COMP%]{text-align:center;border-radius:16px;font-weight:500;width:fit-content;padding:5px 15px}[_nghost-%COMP%] .status-sync[_ngcontent-%COMP%]{background:#1980380f;color:#198038}[_nghost-%COMP%] .status-unsync[_ngcontent-%COMP%]{background:#cb25300f;color:#cb2530}[_nghost-%COMP%] mat-row[_ngcontent-%COMP%]{cursor:pointer}[_nghost-%COMP%] .dot[_ngcontent-%COMP%]{height:12px;width:12px;background-color:#bbb;border-radius:50%;display:inline-block}[_nghost-%COMP%] .hasErrors[_ngcontent-%COMP%]{background-color:#cb2530}[_nghost-%COMP%] .noErrors[_ngcontent-%COMP%]{background-color:#198038}[_nghost-%COMP%] .connector-container .mat-mdc-tab-group, [_nghost-%COMP%] .connector-container .mat-mdc-tab-body-wrapper{height:100%}[_nghost-%COMP%] .connector-container .mat-mdc-tab-body.mat-mdc-tab-body-active{position:absolute}[_nghost-%COMP%] .connector-container .tb-form-row .fixed-title-width{min-width:120px;width:30%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .connector-container .tb-add-new{display:flex;z-index:999;pointer-events:none;background-color:#fff}[_nghost-%COMP%] .connector-container .tb-add-new button.connector{height:auto;padding-right:12px;font-size:20px;border-style:dashed;border-width:2px;border-radius:8px;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;color:#00000061}@media screen and (min-width: 960px){[_nghost-%COMP%] .configuration-json .ace_tooltip{transform:translate(-250px,-120px)}}']})}}e("GatewayConnectorComponent",bu);class xu{constructor(e){this.deviceService=e}download(e){e&&e.stopPropagation(),this.deviceId&&this.deviceService.downloadGatewayDockerComposeFile(this.deviceId).subscribe((()=>{}))}static{this.ɵfac=function(e){return new(e||xu)(t.ɵɵdirectiveInject(R.DeviceService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:xu,selectors:[["tb-gateway-command"]],inputs:{deviceId:"deviceId"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:32,vars:9,consts:[["mat-dialog-content","",1,"tb-form-panel","no-border",2,"padding","16px 16px 8px"],[1,"tb-no-data-text"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","no-border","no-padding","space-between"],["translate","",1,"tb-no-data-text","tb-commands-hint"],["mat-stroked-button","","color","primary","href","https://docs.docker.com/compose/install/","target","_blank"],["mat-stroked-button","","color","primary",3,"click"],["usePlainMarkdown","","containerClass","start-code","data","\n ```bash\n docker compose up\n {:copy-code}\n ```\n "]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",2)(5,"div",3),t.ɵɵtext(6,"device.connectivity.install-necessary-client-tools"),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"div",4)(8,"div",5),t.ɵɵtext(9,"gateway.install-docker-compose"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"a",6)(11,"mat-icon"),t.ɵɵtext(12,"description"),t.ɵɵelementEnd(),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(15,"div",2)(16,"div",3),t.ɵɵtext(17,"gateway.download-configuration-file"),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"div",4)(19,"div",5),t.ɵɵtext(20,"gateway.download-docker-compose"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"button",7),t.ɵɵlistener("click",(function(e){return n.download(e)})),t.ɵɵelementStart(22,"mat-icon"),t.ɵɵtext(23,"download"),t.ɵɵelementEnd(),t.ɵɵtext(24),t.ɵɵpipe(25,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(26,"div",2)(27,"div",3),t.ɵɵtext(28,"gateway.launch-gateway"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"div",5),t.ɵɵtext(30,"gateway.launch-docker-compose"),t.ɵɵelementEnd(),t.ɵɵelement(31,"tb-markdown",8),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"gateway.docker-label")),t.ɵɵadvance(11),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(14,5,"common.documentation")," "),t.ɵɵadvance(11),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(25,7,"action.download")," "))},dependencies:t.ɵɵgetComponentDepsFactory(xu,[B,g]),styles:['@charset "UTF-8";[_nghost-%COMP%] .tb-commands-hint[_ngcontent-%COMP%]{color:inherit;font-weight:400;flex:1}[_nghost-%COMP%] .tb-markdown-view .start-code .code-wrapper{padding:0}[_nghost-%COMP%] .tb-markdown-view .start-code .code-wrapper pre[class*=language-]{margin:0;background:#f3f6fa;border-color:#305680;padding-right:38px;overflow:scroll;padding-bottom:4px;min-height:42px;scrollbar-width:thin}[_nghost-%COMP%] .tb-markdown-view .start-code .code-wrapper pre[class*=language-]::-webkit-scrollbar{width:4px;height:4px}[_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn{right:-2px}[_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn p{color:#305680}[_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn p, [_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn div{background-color:#f3f6fa}[_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn div img{display:none}[_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn div:after{content:"";position:initial;display:block;width:18px;height:18px;background:#305680;mask-image:url(/assets/copy-code-icon.svg);-webkit-mask-image:url(/assets/copy-code-icon.svg);mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat}']})}}var Cu,wu,Su;e("DeviceGatewayCommandComponent",xu),e("GatewayBasicConfigTab",Cu),function(e){e[e.general=0]="general",e[e.logs=1]="logs",e[e.storage=2]="storage",e[e.grpc=3]="grpc",e[e.statistics=4]="statistics",e[e.other=5]="other"}(Cu||e("GatewayBasicConfigTab",Cu={})),e("StorageTypes",wu),function(e){e.MEMORY="memory",e.FILE="file",e.SQLITE="sqlite"}(wu||e("StorageTypes",wu={})),e("LocalLogsConfigs",Su),function(e){e.service="service",e.connector="connector",e.converter="converter",e.tb_connection="tb_connection",e.storage="storage",e.extension="extension"}(Su||e("LocalLogsConfigs",Su={}));const Eu=e("LocalLogsConfigTranslateMap",new Map([[Su.service,"Service"],[Su.connector,"Connector"],[Su.converter,"Converter"],[Su.tb_connection,"TB Connection"],[Su.storage,"Storage"],[Su.extension,"Extension"]])),Tu=e("StorageTypesTranslationMap",new Map([[wu.MEMORY,"gateway.storage-types.memory-storage"],[wu.FILE,"gateway.storage-types.file-storage"],[wu.SQLITE,"gateway.storage-types.sqlite"]]));var Iu;e("LogSavingPeriod",Iu),function(e){e.days="D",e.hours="H",e.minutes="M",e.seconds="S"}(Iu||e("LogSavingPeriod",Iu={}));const ku=e("LogSavingPeriodTranslations",new Map([[Iu.days,"gateway.logs.days"],[Iu.hours,"gateway.logs.hours"],[Iu.minutes,"gateway.logs.minutes"],[Iu.seconds,"gateway.logs.seconds"]]));var Mu;e("SecurityTypes",Mu),function(e){e.ACCESS_TOKEN="accessToken",e.USERNAME_PASSWORD="usernamePassword",e.TLS_ACCESS_TOKEN="tlsAccessToken",e.TLS_PRIVATE_KEY="tlsPrivateKey"}(Mu||e("SecurityTypes",Mu={}));const Pu=e("SecurityTypesTranslationsMap",new Map([[Mu.ACCESS_TOKEN,"gateway.security-types.access-token"],[Mu.USERNAME_PASSWORD,"gateway.security-types.username-password"],[Mu.TLS_ACCESS_TOKEN,"gateway.security-types.tls-access-token"]])),Fu=["configGroup"];function Ou(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-host-required")," "))}function qu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-required")," "))}function Bu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-min")," "))}function Nu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-max")," "))}function Ru(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-pattern")," "))}function _u(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",25),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.key),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,2,e.value)," ")}}function Du(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"security.access-token-required")," "))}function Vu(e,n){if(1&e&&(t.ɵɵelement(0,"tb-copy-button",29),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext(3);t.ɵɵpropertyInterpolate("tooltipText",t.ɵɵpipeBind1(1,2,"device.copy-access-token")),t.ɵɵproperty("copyText",e.basicFormGroup.get("thingsboard.security.accessToken").value)}}function Au(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",26)(1,"mat-label",11),t.ɵɵtext(2,"security.access-token"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",27),t.ɵɵtemplate(4,Du,3,3,"mat-error",14)(5,Vu,2,4,"tb-copy-button",28),t.ɵɵelementStart(6,"mat-icon",13),t.ɵɵpipe(7,"translate"),t.ɵɵtext(8,"info_outlined "),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.security.accessToken").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.security.accessToken").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,3,"gateway.hints.token"))}}function Gu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"security.clientId-required")," "))}function ju(e,n){if(1&e&&(t.ɵɵelement(0,"tb-copy-button",29),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext(3);t.ɵɵpropertyInterpolate("tooltipText",t.ɵɵpipeBind1(1,2,"gateway.copy-client-id")),t.ɵɵproperty("copyText",e.basicFormGroup.get("thingsboard.security.clientId").value)}}function Lu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"security.username-required")," "))}function Uu(e,n){if(1&e&&(t.ɵɵelement(0,"tb-copy-button",29),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext(3);t.ɵɵpropertyInterpolate("tooltipText",t.ɵɵpipeBind1(1,2,"gateway.copy-username")),t.ɵɵproperty("copyText",e.basicFormGroup.get("thingsboard.security.username").value)}}function $u(e,n){if(1&e&&(t.ɵɵelement(0,"tb-copy-button",29),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext(4);t.ɵɵpropertyInterpolate("tooltipText",t.ɵɵpipeBind1(1,2,"gateway.copy-password")),t.ɵɵproperty("copyText",e.basicFormGroup.get("thingsboard.security.password").value)}}function zu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",33)(1,"mat-label",11),t.ɵɵtext(2,"gateway.password"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",34),t.ɵɵtemplate(4,$u,2,4,"tb-copy-button",28),t.ɵɵelementStart(5,"mat-icon",13),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7,"info_outlined "),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(3);t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.security.password").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(6,2,"gateway.hints.password"))}}function Ku(e,n){if(1&e&&(t.ɵɵelementStart(0,"section")(1,"div",9)(2,"mat-form-field",10)(3,"mat-label",11),t.ɵɵtext(4,"security.clientId"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",30),t.ɵɵtemplate(6,Gu,3,3,"mat-error",14)(7,ju,2,4,"tb-copy-button",28),t.ɵɵelementStart(8,"mat-icon",13),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",10)(12,"mat-label",11),t.ɵɵtext(13,"security.username"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",31),t.ɵɵtemplate(15,Lu,3,3,"mat-error",14)(16,Uu,2,4,"tb-copy-button",28),t.ɵɵelementStart(17,"mat-icon",13),t.ɵɵpipe(18,"translate"),t.ɵɵtext(19,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵtemplate(20,zu,8,4,"mat-form-field",32),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.security.clientId").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.security.clientId").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(9,7,"gateway.hints.client-id")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.security.username").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.security.username").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,9,"gateway.hints.username")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf","usernamePassword"===e.basicFormGroup.get("thingsboard.security.type").value)}}function Hu(e,n){if(1&e&&(t.ɵɵelement(0,"tb-error",35),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("error",e.basicFormGroup.get("thingsboard.security").hasError("atLeastOne")?t.ɵɵpipeBind1(1,1,"device.client-id-or-user-name-necessary"):"")}}function Qu(e,n){1&e&&(t.ɵɵelement(0,"tb-file-input",36),t.ɵɵpipe(1,"translate"),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"translate")),2&e&&(t.ɵɵpropertyInterpolate("hint",t.ɵɵpipeBind1(1,5,"gateway.hints.ca-cert")),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,7,"security.ca-cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(3,9,"gateway.drop-file")),t.ɵɵproperty("allowedExtensions","pem,cert,key")("accept",".pem, application/pem,.cert, application/cert, .key,application/key"))}function Wu(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",37),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("defaultValue",e.ReportStrategyDefaultValue.Gateway)}}function Ju(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",4)(1,"div",5)(2,"div",6),t.ɵɵpipe(3,"translate"),t.ɵɵelementStart(4,"mat-slide-toggle",7),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"div",6),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"mat-slide-toggle",8),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"div",9)(13,"mat-form-field",10)(14,"mat-label",11),t.ɵɵtext(15,"gateway.thingsboard-host"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",12),t.ɵɵelementStart(17,"mat-icon",13),t.ɵɵpipe(18,"translate"),t.ɵɵtext(19,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(20,Ou,3,3,"mat-error",14),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",10)(22,"mat-label",11),t.ɵɵtext(23,"gateway.thingsboard-port"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",15),t.ɵɵtemplate(25,qu,3,3,"mat-error",14)(26,Bu,3,3,"mat-error",14)(27,Nu,3,3,"mat-error",14)(28,Ru,3,3,"mat-error",14),t.ɵɵelementStart(29,"mat-icon",13),t.ɵɵpipe(30,"translate"),t.ɵɵtext(31,"info_outlined "),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(32,"div",16)(33,"div",17),t.ɵɵtext(34,"security.security"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(35,18),t.ɵɵelementStart(36,"tb-toggle-select",19),t.ɵɵtemplate(37,_u,3,4,"tb-toggle-option",20),t.ɵɵpipe(38,"keyvalue"),t.ɵɵelementEnd(),t.ɵɵtemplate(39,Au,9,5,"mat-form-field",21)(40,Ku,21,11,"section",14)(41,Hu,2,3,"tb-error",22)(42,Qu,4,11,"tb-file-input",23),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵtemplate(43,Wu,1,1,"tb-report-strategy",24),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,17,"gateway.hints.remote-configuration")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,19,"gateway.remote-configuration")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(8,21,"gateway.hints.remote-shell")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(11,23,"gateway.remote-shell")," "),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,25,"gateway.hints.host")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.host").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.port").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.port").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.port").hasError("max")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.port").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(30,27,"gateway.hints.port")),t.ɵɵadvance(8),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(38,29,e.securityTypes)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.security.type").value.toLowerCase().includes("accesstoken")),t.ɵɵadvance(),t.ɵɵproperty("ngIf","usernamePassword"===e.basicFormGroup.get("thingsboard.security.type").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf","usernamePassword"===e.basicFormGroup.get("thingsboard.security.type").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.security.type").value.toLowerCase().includes("tls")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.withReportStrategy)}}function Yu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.date-format-required")," "))}function Xu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.log-format-required")," "))}function Zu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",25),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function eg(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",58),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.localLogsConfigTranslateMap.get(e))}}function tg(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",25),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function ng(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.file-path-required")," "))}function ag(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.saving-period-required")," "))}function rg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.saving-period-min")," "))}function ig(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",25),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.key),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,e.value)," ")}}function og(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.backup-count-required")," "))}function sg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.backup-count-min")," "))}function lg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",38)(1,"div",5)(2,"div",39)(3,"mat-form-field",26)(4,"mat-label",11),t.ɵɵtext(5,"gateway.logs.date-format"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",40),t.ɵɵtemplate(7,Yu,3,3,"mat-error",14),t.ɵɵelementStart(8,"mat-icon",13),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",26)(12,"mat-label",11),t.ɵɵtext(13,"gateway.logs.log-format"),t.ɵɵelementEnd(),t.ɵɵelement(14,"textarea",41),t.ɵɵtemplate(15,Xu,3,3,"mat-error",14),t.ɵɵelementStart(16,"mat-icon",13),t.ɵɵpipe(17,"translate"),t.ɵɵtext(18,"info_outlined "),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(19,"div",16)(20,"mat-expansion-panel",42)(21,"mat-expansion-panel-header",43)(22,"mat-panel-title")(23,"mat-slide-toggle",44),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(24,"mat-label")(25,"div",45),t.ɵɵpipe(26,"translate"),t.ɵɵtext(27),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(29,"mat-form-field",26)(30,"mat-label",11),t.ɵɵtext(31,"gateway.logs.level"),t.ɵɵelementEnd(),t.ɵɵelementStart(32,"mat-select",46),t.ɵɵtemplate(33,Zu,2,2,"mat-option",20),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(34,"div",47)(35,"div",17),t.ɵɵtext(36,"gateway.logs.local"),t.ɵɵelementEnd(),t.ɵɵelementStart(37,"tb-toggle-select",48),t.ɵɵtemplate(38,eg,2,2,"tb-toggle-option",49),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(39,50),t.ɵɵelementStart(40,"div",51)(41,"mat-form-field",10)(42,"mat-label",11),t.ɵɵtext(43,"gateway.logs.level"),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"mat-select",46),t.ɵɵtemplate(45,tg,2,2,"mat-option",20),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"mat-form-field",10)(47,"mat-label",11),t.ɵɵtext(48,"gateway.logs.file-path"),t.ɵɵelementEnd(),t.ɵɵelement(49,"input",52),t.ɵɵtemplate(50,ng,3,3,"mat-error",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(51,"div",51)(52,"div",53)(53,"mat-form-field",10)(54,"mat-label",11),t.ɵɵtext(55,"gateway.logs.saving-period"),t.ɵɵelementEnd(),t.ɵɵelement(56,"input",54),t.ɵɵtemplate(57,ag,3,3,"mat-error",14)(58,rg,3,3,"mat-error",14),t.ɵɵelementEnd(),t.ɵɵelementStart(59,"mat-form-field",55)(60,"mat-select",56),t.ɵɵtemplate(61,ig,3,4,"mat-option",20),t.ɵɵpipe(62,"keyvalue"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(63,"mat-form-field",10)(64,"mat-label",11),t.ɵɵtext(65,"gateway.logs.backup-count"),t.ɵɵelementEnd(),t.ɵɵelement(66,"input",57),t.ɵɵtemplate(67,og,3,3,"mat-error",14)(68,sg,3,3,"mat-error",14),t.ɵɵelementStart(69,"mat-icon",13),t.ɵɵpipe(70,"translate"),t.ɵɵtext(71,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("logs.dateFormat").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(9,20,"gateway.hints.date-form")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("logs.logFormat").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(17,22,"gateway.hints.log-format")),t.ɵɵadvance(4),t.ɵɵproperty("expanded",e.showRemoteLogsControl.value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.showRemoteLogsControl),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(26,24,"gateway.hints.remote-log")),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(28,26,"gateway.logs.remote")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",e.remoteLogLevel),t.ɵɵadvance(4),t.ɵɵproperty("formControl",e.logSelector),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.localLogsConfigs),t.ɵɵadvance(),t.ɵɵproperty("formGroup",e.getLogFormGroup(e.logSelector.value)),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",e.gatewayLogLevel),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.basicFormGroup.get("logs.local."+e.logSelector.value+".filePath").hasError("required")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("logs.local."+e.logSelector.value+".savingTime").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("logs.local."+e.logSelector.value+".savingTime").hasError("min")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(62,28,e.logSavingPeriods)),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.basicFormGroup.get("logs.local."+e.logSelector.value+".backupCount").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("logs.local."+e.logSelector.value+".backupCount").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(70,30,"gateway.hints.backup-count"))}}function pg(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",25),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.storageTypesTranslationMap.get(e))," ")}}function cg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-read-record-count-required")," "))}function dg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-read-record-count-min")," "))}function mg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-read-record-count-pattern")," "))}function ug(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-required")," "))}function gg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-min")," "))}function hg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-pattern")," "))}function yg(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",51)(1,"mat-form-field",10)(2,"mat-label",11),t.ɵɵtext(3,"gateway.storage-read-record-count"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",65),t.ɵɵtemplate(5,cg,3,3,"mat-error",14)(6,dg,3,3,"mat-error",14)(7,mg,3,3,"mat-error",14),t.ɵɵelementStart(8,"mat-icon",13),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",10)(12,"mat-label",11),t.ɵɵtext(13,"gateway.storage-max-records"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",66),t.ɵɵtemplate(15,ug,3,3,"mat-error",14)(16,gg,3,3,"mat-error",14)(17,hg,3,3,"mat-error",14),t.ɵɵelementStart(18,"mat-icon",13),t.ɵɵpipe(19,"translate"),t.ɵɵtext(20,"info_outlined "),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.read_records_count").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.read_records_count").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.read_records_count").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(9,8,"gateway.hints.read-record-count")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_records_count").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_records_count").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_records_count").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(19,10,"gateway.hints.max-records-count"))}}function fg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-data-folder-path-required")," "))}function vg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-files-required")," "))}function bg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-files-min")," "))}function xg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-files-pattern")," "))}function Cg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-read-record-count-required")," "))}function wg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-read-record-count-min")," "))}function Sg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-read-record-count-pattern")," "))}function Eg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-required")," "))}function Tg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-min")," "))}function Ig(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-pattern")," "))}function kg(e,n){if(1&e&&(t.ɵɵelementStart(0,"section")(1,"div",51)(2,"mat-form-field",10)(3,"mat-label",11),t.ɵɵtext(4,"gateway.storage-data-folder-path"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",67),t.ɵɵtemplate(6,fg,3,3,"mat-error",14),t.ɵɵelementStart(7,"mat-icon",68),t.ɵɵpipe(8,"translate"),t.ɵɵtext(9,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",10)(11,"mat-label",11),t.ɵɵtext(12,"gateway.storage-max-files"),t.ɵɵelementEnd(),t.ɵɵelement(13,"input",69),t.ɵɵtemplate(14,vg,3,3,"mat-error",14)(15,bg,3,3,"mat-error",14)(16,xg,3,3,"mat-error",14),t.ɵɵelementStart(17,"mat-icon",13),t.ɵɵpipe(18,"translate"),t.ɵɵtext(19,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(20,"div",51)(21,"mat-form-field",10)(22,"mat-label",11),t.ɵɵtext(23,"gateway.storage-max-read-record-count"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",70),t.ɵɵtemplate(25,Cg,3,3,"mat-error",14)(26,wg,3,3,"mat-error",14)(27,Sg,3,3,"mat-error",14),t.ɵɵelementStart(28,"mat-icon",13),t.ɵɵpipe(29,"translate"),t.ɵɵtext(30,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(31,"mat-form-field",10)(32,"mat-label",11),t.ɵɵtext(33,"gateway.storage-max-file-records"),t.ɵɵelementEnd(),t.ɵɵelement(34,"input",71),t.ɵɵtemplate(35,Eg,3,3,"mat-error",14)(36,Tg,3,3,"mat-error",14)(37,Ig,3,3,"mat-error",14),t.ɵɵelementStart(38,"mat-icon",13),t.ɵɵpipe(39,"translate"),t.ɵɵtext(40,"info_outlined "),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.data_folder_path").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,14,"gateway.hints.data-folder")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_file_count").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_file_count").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_file_count").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,16,"gateway.hints.max-file-count")),t.ɵɵadvance(8),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_read_records_count").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_read_records_count").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_read_records_count").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(29,18,"gateway.hints.max-read-count")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_records_per_file").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_records_per_file").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.max_records_per_file").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(39,20,"gateway.hints.max-records"))}}function Mg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-path-required")," "))}function Pg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-check-in-hours-required")," "))}function Fg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-check-in-hours-min")," "))}function Og(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-check-in-hours-pattern")," "))}function qg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-in-days-required")," "))}function Bg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-in-days-min")," "))}function Ng(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-in-days-pattern")," "))}function Rg(e,n){if(1&e&&(t.ɵɵelementStart(0,"section")(1,"div",51)(2,"mat-form-field",10)(3,"mat-label",11),t.ɵɵtext(4,"gateway.storage-path"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",72),t.ɵɵtemplate(6,Mg,3,3,"mat-error",14),t.ɵɵelementStart(7,"mat-icon",13),t.ɵɵpipe(8,"translate"),t.ɵɵtext(9,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",10)(11,"mat-label",11),t.ɵɵtext(12,"gateway.messages-ttl-check-in-hours"),t.ɵɵelementEnd(),t.ɵɵelement(13,"input",73),t.ɵɵtemplate(14,Pg,3,3,"mat-error",14)(15,Fg,3,3,"mat-error",14)(16,Og,3,3,"mat-error",14),t.ɵɵelementStart(17,"mat-icon",13),t.ɵɵpipe(18,"translate"),t.ɵɵtext(19,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(20,"mat-form-field",74)(21,"mat-label",11),t.ɵɵtext(22,"gateway.messages-ttl-in-days"),t.ɵɵelementEnd(),t.ɵɵelement(23,"input",75),t.ɵɵtemplate(24,qg,3,3,"mat-error",14)(25,Bg,3,3,"mat-error",14)(26,Ng,3,3,"mat-error",14),t.ɵɵelementStart(27,"mat-icon",13),t.ɵɵpipe(28,"translate"),t.ɵɵtext(29,"info_outlined "),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.data_file_path").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,10,"gateway.hints.data-folder")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.messages_ttl_check_in_hours").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.messages_ttl_check_in_hours").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.messages_ttl_check_in_hours").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,12,"gateway.hints.ttl-check-hour")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.messages_ttl_in_days").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.messages_ttl_in_days").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("storage.messages_ttl_in_days").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(28,14,"gateway.hints.ttl-messages-day"))}}function _g(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",59)(1,"div",5)(2,"div",17),t.ɵɵtext(3,"gateway.storage"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",60),t.ɵɵtext(5,"gateway.hints.storage"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"tb-toggle-select",19),t.ɵɵtemplate(7,pg,3,4,"tb-toggle-option",20),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"div",61),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(11,62),t.ɵɵtemplate(12,yg,21,12,"section",63)(13,kg,41,22,"section",64)(14,Rg,30,16,"section",64),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",e.storageTypes),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,6,"gateway.hints."+e.basicFormGroup.get("storage.type").value)),t.ɵɵadvance(2),t.ɵɵproperty("ngSwitch",e.basicFormGroup.get("storage.type").value),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.StorageTypes.MEMORY),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.StorageTypes.FILE),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.StorageTypes.SQLITE)}}function Dg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-required")," "))}function Vg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-min")," "))}function Ag(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-max")," "))}function Gg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-pattern")," "))}function jg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-timeout-required")," "))}function Lg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-timeout-min")," "))}function Ug(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-timeout-pattern")," "))}function $g(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-required")," "))}function zg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-min")," "))}function Kg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-pattern")," "))}function Hg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-time-between-pings-required")," "))}function Qg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-time-between-pings-min")," "))}function Wg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-time-between-pings-pattern")," "))}function Jg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-max-pings-without-data-required")," "))}function Yg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-max-pings-without-data-min")," "))}function Xg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-max-pings-without-data-pattern")," "))}function Zg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-ping-interval-without-data-required")," "))}function eh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-ping-interval-without-data-min")," "))}function th(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-ping-interval-without-data-pattern")," "))}function nh(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",76)(1,"div",5)(2,"mat-slide-toggle",77),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",6),t.ɵɵpipe(6,"translate"),t.ɵɵelementStart(7,"mat-slide-toggle",78),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"section")(11,"section",51)(12,"mat-form-field",10)(13,"mat-label",11),t.ɵɵtext(14,"gateway.server-port"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",79),t.ɵɵelementStart(16,"mat-icon",13),t.ɵɵpipe(17,"translate"),t.ɵɵtext(18,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(19,Dg,3,3,"mat-error",14)(20,Vg,3,3,"mat-error",14)(21,Ag,3,3,"mat-error",14)(22,Gg,3,3,"mat-error",14),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-form-field",10)(24,"mat-label",11),t.ɵɵtext(25,"gateway.grpc-keep-alive-timeout"),t.ɵɵelementEnd(),t.ɵɵelement(26,"input",80),t.ɵɵelementStart(27,"mat-icon",13),t.ɵɵpipe(28,"translate"),t.ɵɵtext(29,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(30,jg,3,3,"mat-error",14)(31,Lg,3,3,"mat-error",14)(32,Ug,3,3,"mat-error",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(33,"section",51)(34,"mat-form-field",10)(35,"mat-label",11),t.ɵɵtext(36,"gateway.grpc-keep-alive"),t.ɵɵelementEnd(),t.ɵɵelement(37,"input",81),t.ɵɵelementStart(38,"mat-icon",13),t.ɵɵpipe(39,"translate"),t.ɵɵtext(40,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(41,$g,3,3,"mat-error",14)(42,zg,3,3,"mat-error",14)(43,Kg,3,3,"mat-error",14),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"mat-form-field",10)(45,"mat-label",11),t.ɵɵtext(46,"gateway.grpc-min-time-between-pings"),t.ɵɵelementEnd(),t.ɵɵelement(47,"input",82),t.ɵɵelementStart(48,"mat-icon",13),t.ɵɵpipe(49,"translate"),t.ɵɵtext(50,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(51,Hg,3,3,"mat-error",14)(52,Qg,3,3,"mat-error",14)(53,Wg,3,3,"mat-error",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(54,"section",51)(55,"mat-form-field",10)(56,"mat-label",11),t.ɵɵtext(57,"gateway.grpc-max-pings-without-data"),t.ɵɵelementEnd(),t.ɵɵelement(58,"input",83),t.ɵɵelementStart(59,"mat-icon",13),t.ɵɵpipe(60,"translate"),t.ɵɵtext(61,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(62,Jg,3,3,"mat-error",14)(63,Yg,3,3,"mat-error",14)(64,Xg,3,3,"mat-error",14),t.ɵɵelementEnd(),t.ɵɵelementStart(65,"mat-form-field",10)(66,"mat-label",11),t.ɵɵtext(67,"gateway.grpc-min-ping-interval-without-data"),t.ɵɵelementEnd(),t.ɵɵelement(68,"input",84),t.ɵɵelementStart(69,"mat-icon",13),t.ɵɵpipe(70,"translate"),t.ɵɵtext(71,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(72,Zg,3,3,"mat-error",14)(73,eh,3,3,"mat-error",14)(74,th,3,3,"mat-error",14),t.ɵɵelementEnd()()()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,28,"gateway.grpc")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(6,30,"gateway.hints.permit-without-calls")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(9,32,"gateway.permit-without-calls")," "),t.ɵɵadvance(8),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(17,34,"gateway.hints.server-port")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.serverPort").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.serverPort").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.serverPort").hasError("max")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.serverPort").hasError("pattern")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(28,36,"gateway.hints.grpc-keep-alive-timeout")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.keepAliveTimeoutMs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.keepAliveTimeoutMs").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.keepAliveTimeoutMs").hasError("pattern")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(39,38,"gateway.hints.grpc-keep-alive")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.keepAliveTimeMs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.keepAliveTimeMs").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.keepAliveTimeMs").hasError("pattern")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(49,40,"gateway.hints.grpc-min-time-between-pings")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.minTimeBetweenPingsMs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.minTimeBetweenPingsMs").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.minTimeBetweenPingsMs").hasError("pattern")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(60,42,"gateway.hints.grpc-max-pings-without-data")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.maxPingsWithoutData").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.maxPingsWithoutData").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.maxPingsWithoutData").hasError("pattern")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(70,44,"gateway.hints.grpc-min-ping-interval-without-data")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.minPingIntervalWithoutDataMs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.minPingIntervalWithoutDataMs").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("grpc.minPingIntervalWithoutDataMs").hasError("pattern"))}}function ah(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.send-period-required")," "))}function rh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.send-period-min")," "))}function ih(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.send-period-pattern")," "))}function oh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.attribute-name-required")," "))}function sh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.timeout-required")," "))}function lh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.timeout-min")," "))}function ph(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.timeout-pattern")," "))}function ch(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.command-required")," "))}function dh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.command-pattern")," "))}function mh(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",91)(1,"section",92)(2,"section",51)(3,"mat-form-field",10)(4,"mat-label",11),t.ɵɵtext(5,"gateway.statistics.attribute-name"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",93),t.ɵɵtemplate(7,oh,3,3,"mat-error",14),t.ɵɵelementStart(8,"mat-icon",13),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",10)(12,"mat-label",11),t.ɵɵtext(13,"gateway.statistics.timeout"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",94),t.ɵɵtemplate(15,sh,3,3,"mat-error",14)(16,lh,3,3,"mat-error",14)(17,ph,3,3,"mat-error",14),t.ɵɵelementStart(18,"mat-icon",13),t.ɵɵpipe(19,"translate"),t.ɵɵtext(20,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(21,"mat-form-field",74)(22,"mat-label",11),t.ɵɵtext(23,"gateway.statistics.command"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",95),t.ɵɵtemplate(25,ch,3,3,"mat-error",14)(26,dh,3,3,"mat-error",14),t.ɵɵelementStart(27,"mat-icon",13),t.ɵɵpipe(28,"translate"),t.ɵɵtext(29,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(30,"button",96),t.ɵɵpipe(31,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.removeCommandControl(a,n))})),t.ɵɵelementStart(32,"mat-icon"),t.ɵɵtext(33,"delete"),t.ɵɵelementEnd()()()}if(2&e){const e=n.$implicit,a=n.index,r=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵproperty("formGroupName",a),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.get("attributeOnGateway").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(9,12,"gateway.hints.attribute")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.get("timeout").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("timeout").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("timeout").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(19,14,"gateway.hints.timeout")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.get("command").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("command").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(28,16,"gateway.hints.command")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(31,18,"gateway.statistics.remove")),t.ɵɵproperty("disabled",!r.basicFormGroup.get("thingsboard.remoteConfiguration").value)}}function uh(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",4)(1,"div",85)(2,"mat-slide-toggle",86),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",26)(6,"mat-label",11),t.ɵɵtext(7,"gateway.statistics.send-period"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",87),t.ɵɵtemplate(9,ah,3,3,"mat-error",14)(10,rh,3,3,"mat-error",14)(11,ih,3,3,"mat-error",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"div",16)(13,"div",17),t.ɵɵtext(14,"gateway.statistics.commands"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"div",60),t.ɵɵtext(16,"gateway.hints.commands"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(17,88),t.ɵɵtemplate(18,mh,34,20,"div",89),t.ɵɵelementStart(19,"button",90),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.addCommand())})),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,7,"gateway.statistics.statistics")," "),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.statistics.statsSendPeriodInSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.statistics.statsSendPeriodInSeconds").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.statistics.statsSendPeriodInSeconds").hasError("pattern")),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",e.commandFormArray().controls),t.ɵɵadvance(),t.ɵɵproperty("disabled",!e.basicFormGroup.get("thingsboard.remoteConfiguration").value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(21,9,"gateway.statistics.add")," ")}}function gh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-timeout-seconds-required")," "))}function hh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-timeout-seconds-min")," "))}function yh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-timeout-seconds-pattern")," "))}function fh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-check-period-seconds-required")," "))}function vh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-check-period-seconds-min")," "))}function bh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-check-period-seconds-pattern")," "))}function xh(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",51)(1,"mat-form-field",10)(2,"mat-label",11),t.ɵɵtext(3,"gateway.inactivity-timeout-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",105),t.ɵɵtemplate(5,gh,3,3,"mat-error",14)(6,hh,3,3,"mat-error",14)(7,yh,3,3,"mat-error",14),t.ɵɵelementStart(8,"mat-icon",13),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",10)(12,"mat-label",11),t.ɵɵtext(13,"gateway.inactivity-check-period-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",106),t.ɵɵtemplate(15,fh,3,3,"mat-error",14)(16,vh,3,3,"mat-error",14)(17,bh,3,3,"mat-error",14),t.ɵɵelementStart(18,"mat-icon",13),t.ɵɵpipe(19,"translate"),t.ɵɵtext(20,"info_outlined "),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityTimeoutSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityTimeoutSeconds").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityTimeoutSeconds").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(9,8,"gateway.hints.inactivity-timeout")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityCheckPeriodSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityCheckPeriodSeconds").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityCheckPeriodSeconds").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(19,10,"gateway.hints.inactivity-period"))}}function Ch(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.min-pack-send-delay-required")," "))}function wh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.min-pack-send-delay-min")," "))}function Sh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.min-pack-send-delay-pattern")," "))}function Eh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.mqtt-qos-required")," "))}function Th(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.mqtt-qos-range")," "))}function Ih(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.mqtt-qos-range")," "))}function kh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.check-connectors-configuration-required")," "))}function Mh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.check-connectors-configuration-min")," "))}function Ph(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.check-connectors-configuration-pattern")," "))}function Fh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.max-payload-size-bytes-required")," "))}function Oh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.max-payload-size-bytes-min")," "))}function qh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.max-payload-size-bytes-pattern")," "))}function Bh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.min-pack-size-to-send-required")," "))}function Nh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.min-pack-size-to-send-min")," "))}function Rh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.min-pack-size-to-send-pattern")," "))}function _h(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",4)(1,"div",97)(2,"div",6),t.ɵɵpipe(3,"translate"),t.ɵɵelementStart(4,"mat-slide-toggle",98),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(7,xh,21,12,"section",99),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"div",5)(9,"div",17),t.ɵɵtext(10,"gateway.advanced"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"section",51)(12,"mat-form-field",10)(13,"mat-label",11),t.ɵɵtext(14,"gateway.min-pack-send-delay"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",100),t.ɵɵtemplate(16,Ch,3,3,"mat-error",14)(17,wh,3,3,"mat-error",14)(18,Sh,3,3,"mat-error",14),t.ɵɵelementStart(19,"mat-icon",13),t.ɵɵpipe(20,"translate"),t.ɵɵtext(21,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(22,"mat-form-field",10)(23,"mat-label",11),t.ɵɵtext(24,"gateway.mqtt-qos"),t.ɵɵelementEnd(),t.ɵɵelement(25,"input",101),t.ɵɵtemplate(26,Eh,3,3,"mat-error",14)(27,Th,3,3,"mat-error",14)(28,Ih,3,3,"mat-error",14),t.ɵɵelementStart(29,"mat-icon",13),t.ɵɵpipe(30,"translate"),t.ɵɵtext(31,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(32,"section",51)(33,"mat-form-field",10)(34,"mat-label",11),t.ɵɵtext(35,"gateway.statistics.check-connectors-configuration"),t.ɵɵelementEnd(),t.ɵɵelement(36,"input",102),t.ɵɵtemplate(37,kh,3,3,"mat-error",14)(38,Mh,3,3,"mat-error",14)(39,Ph,3,3,"mat-error",14),t.ɵɵelementEnd(),t.ɵɵelementStart(40,"mat-form-field",10)(41,"mat-label",11),t.ɵɵtext(42,"gateway.statistics.max-payload-size-bytes"),t.ɵɵelementEnd(),t.ɵɵelement(43,"input",103),t.ɵɵtemplate(44,Fh,3,3,"mat-error",14)(45,Oh,3,3,"mat-error",14)(46,qh,3,3,"mat-error",14),t.ɵɵelementStart(47,"mat-icon",13),t.ɵɵpipe(48,"translate"),t.ɵɵtext(49,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(50,"section",51)(51,"mat-form-field",10)(52,"mat-label",11),t.ɵɵtext(53,"gateway.statistics.min-pack-size-to-send"),t.ɵɵelementEnd(),t.ɵɵelement(54,"input",104),t.ɵɵtemplate(55,Bh,3,3,"mat-error",14)(56,Nh,3,3,"mat-error",14)(57,Rh,3,3,"mat-error",14),t.ɵɵelementStart(58,"mat-icon",13),t.ɵɵpipe(59,"translate"),t.ɵɵtext(60,"info_outlined "),t.ɵɵelementEnd()()()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵclassProp("no-padding-bottom",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.checkDeviceInactivity").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,24,"gateway.hints.check-device-activity")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,26,"gateway.checking-device-activity")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.checkDeviceInactivity").value),t.ɵɵadvance(9),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSendDelayMS").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSendDelayMS").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSendDelayMS").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(20,28,"gateway.hints.minimal-pack-delay")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.qos").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.qos").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.qos").hasError("max")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(30,30,"gateway.hints.qos")),t.ɵɵadvance(8),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkConnectorsConfigurationInSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkConnectorsConfigurationInSeconds").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkConnectorsConfigurationInSeconds").hasError("pattern")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.maxPayloadSizeBytes").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.maxPayloadSizeBytes").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.maxPayloadSizeBytes").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(48,32,"gateway.hints.max-payload-size-bytes")),t.ɵɵadvance(8),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSizeToSend").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSizeToSend").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSizeToSend").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(59,34,"gateway.hints.min-pack-size-to-send"))}}class Dh{constructor(e,t,n,a){this.fb=e,this.deviceService=t,this.cd=n,this.dialog=a,this.dialogMode=!1,this.withReportStrategy=!1,this.initialCredentialsUpdated=new r,this.StorageTypes=wu,this.storageTypes=Object.values(wu),this.storageTypesTranslationMap=Tu,this.logSavingPeriods=ku,this.localLogsConfigs=Object.keys(Su),this.localLogsConfigTranslateMap=Eu,this.securityTypes=Pu,this.gatewayLogLevel=Object.values(Ae),this.remoteLogLevel=Object.values(Ae).filter((e=>e!==Ae.NONE)),this.ReportStrategyDefaultValue=Mt,this.numberInputPattern=new RegExp(/^\d{1,15}$/),this.onChange=()=>{},this.destroy$=new ie,this.showRemoteLogsControl=this.fb.control(!1),this.showRemoteLogsControl.valueChanges.pipe(de(this.destroy$)).subscribe((e=>this.basicFormGroup.get("logs.logLevel")[e?"enable":"disable"]())),this.initBasicFormGroup(),this.observeFormChanges(),this.basicFormGroup.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e)}))}ngOnChanges(e){e.withReportStrategy&&!e.withReportStrategy.firstChange&&this.withReportStrategy&&this.basicFormGroup.get("thingsboard.reportStrategy").enable({emitEvent:!1})}ngAfterViewInit(){this.defaultTab&&(this.configGroup.selectedIndex=Cu[this.defaultTab])}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){}writeValue(e){this.basicFormGroup.patchValue(e,{emitEvent:!1}),this.updateRemoteLogs(e?.logs?.logLevel??Ae.NONE),this.checkAndFetchCredentials(e?.thingsboard?.security??{}),e?.grpc&&this.toggleRpcFields(e.grpc.enabled);(e?.thingsboard?.statistics?.commands??[]).forEach((e=>this.addCommand(e,!1)))}validate(){return this.basicFormGroup.valid?null:{basicFormGroup:{valid:!1}}}updateRemoteLogs(e){this.showRemoteLogsControl.patchValue(e&&e!==Ae.NONE),this.basicFormGroup.get("logs.logLevel").patchValue(e===Ae.NONE?Ae.INFO:e,{emitEvent:!1})}atLeastOneRequired(e,t=null){return n=>{t||(t=Object.keys(n.controls));return n?.controls&&t.some((t=>!e(n.controls[t])))?null:{atLeastOne:!0}}}toggleRpcFields(e){const t=this.basicFormGroup.get("grpc");e?(t.get("serverPort").enable({emitEvent:!1}),t.get("keepAliveTimeMs").enable({emitEvent:!1}),t.get("keepAliveTimeoutMs").enable({emitEvent:!1}),t.get("keepalivePermitWithoutCalls").enable({emitEvent:!1}),t.get("maxPingsWithoutData").enable({emitEvent:!1}),t.get("minTimeBetweenPingsMs").enable({emitEvent:!1}),t.get("minPingIntervalWithoutDataMs").enable({emitEvent:!1})):(t.get("serverPort").disable({emitEvent:!1}),t.get("keepAliveTimeMs").disable({emitEvent:!1}),t.get("keepAliveTimeoutMs").disable({emitEvent:!1}),t.get("keepalivePermitWithoutCalls").disable({emitEvent:!1}),t.get("maxPingsWithoutData").disable({emitEvent:!1}),t.get("minTimeBetweenPingsMs").disable({emitEvent:!1}),t.get("minPingIntervalWithoutDataMs").disable({emitEvent:!1}))}addLocalLogConfig(e,t){const n=this.basicFormGroup.get("logs.local"),a=this.fb.group({logLevel:[t.logLevel||Ae.INFO,[J.required]],filePath:[t.filePath||"./logs",[J.required]],backupCount:[t.backupCount||7,[J.required,J.min(0)]],savingTime:[t.savingTime||3,[J.required,J.min(0)]],savingPeriod:[t.savingPeriod||Iu.days,[J.required]]});n.addControl(e,a)}getLogFormGroup(e){return this.basicFormGroup.get(`logs.local.${e}`)}commandFormArray(){return this.basicFormGroup.get("thingsboard.statistics.commands")}removeCommandControl(e,t){""!==t.pointerType&&(this.commandFormArray().removeAt(e),this.basicFormGroup.markAsDirty())}removeAllSecurityValidators(){const e=this.basicFormGroup.get("thingsboard.security");e.clearValidators();for(const t in e.controls)"type"!==t&&(e.controls[t].clearValidators(),e.controls[t].setErrors(null),e.controls[t].updateValueAndValidity())}removeAllStorageValidators(){const e=this.basicFormGroup.get("storage");for(const t in e.controls)"type"!==t&&(e.controls[t].clearValidators(),e.controls[t].setErrors(null),e.controls[t].updateValueAndValidity())}openConfigurationConfirmDialog(){this.deviceService.getDevice(this.device.id).pipe(de(this.destroy$)).subscribe((e=>{this.dialog.open(Ii,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{gatewayName:e.name}}).afterClosed().pipe(ve(1)).subscribe((e=>{e||this.basicFormGroup.get("thingsboard.remoteConfiguration").setValue(!0,{emitEvent:!1})}))}))}addCommand(e,t=!0){const{attributeOnGateway:n=null,command:a=null,timeout:r=null}=e||{},i=this.fb.group({attributeOnGateway:[n,[J.required,J.pattern(/^[^.\s]+$/)]],command:[a,[J.required,J.pattern(/^(?=\S).*\S$/)]],timeout:[r,[J.required,J.min(1),J.pattern(this.numberInputPattern),J.pattern(/^[^.\s]+$/)]]});this.commandFormArray().push(i,{emitEvent:t})}initBasicFormGroup(){this.basicFormGroup=this.fb.group({thingsboard:this.initThingsboardFormGroup(),storage:this.initStorageFormGroup(),grpc:this.initGrpcFormGroup(),connectors:this.fb.array([]),logs:this.initLogsFormGroup()})}initThingsboardFormGroup(){return this.fb.group({host:[window.location.hostname,[J.required,J.pattern(/^[^\s]+$/)]],port:[1883,[J.required,J.min(1),J.max(65535),J.pattern(this.numberInputPattern)]],remoteShell:[!1],remoteConfiguration:[!0],checkConnectorsConfigurationInSeconds:[60,[J.required,J.min(1),J.pattern(this.numberInputPattern)]],statistics:this.fb.group({enable:[!0],statsSendPeriodInSeconds:[3600,[J.required,J.min(60),J.pattern(this.numberInputPattern)]],commands:this.fb.array([])}),maxPayloadSizeBytes:[8196,[J.required,J.min(100),J.pattern(this.numberInputPattern)]],minPackSendDelayMS:[50,[J.required,J.min(10),J.pattern(this.numberInputPattern)]],minPackSizeToSend:[500,[J.required,J.min(100),J.pattern(this.numberInputPattern)]],handleDeviceRenaming:[!0],checkingDeviceActivity:this.initCheckingDeviceActivityFormGroup(),security:this.initSecurityFormGroup(),qos:[1,[J.required,J.min(0),J.max(1),J.pattern(/^[^.\s]+$/)]],reportStrategy:[{value:{type:kt.OnReportPeriod,reportPeriod:Mt.Gateway},disabled:!0}]})}initStorageFormGroup(){return this.fb.group({type:[wu.MEMORY,[J.required]],read_records_count:[100,[J.required,J.min(1),J.pattern(this.numberInputPattern)]],max_records_count:[1e5,[J.required,J.min(1),J.pattern(this.numberInputPattern)]],data_folder_path:["./data/",[J.required]],max_file_count:[10,[J.min(1),J.pattern(this.numberInputPattern)]],max_read_records_count:[10,[J.min(1),J.pattern(this.numberInputPattern)]],max_records_per_file:[1e4,[J.min(1),J.pattern(this.numberInputPattern)]],data_file_path:["./data/data.db",[J.required]],messages_ttl_check_in_hours:[1,[J.min(1),J.pattern(this.numberInputPattern)]],messages_ttl_in_days:[7,[J.min(1),J.pattern(this.numberInputPattern)]]})}initGrpcFormGroup(){return this.fb.group({enabled:[!1],serverPort:[9595,[J.required,J.min(1),J.max(65535),J.pattern(this.numberInputPattern)]],keepAliveTimeMs:[1e4,[J.required,J.min(1),J.pattern(this.numberInputPattern)]],keepAliveTimeoutMs:[5e3,[J.required,J.min(1),J.pattern(this.numberInputPattern)]],keepalivePermitWithoutCalls:[!0],maxPingsWithoutData:[0,[J.required,J.min(0),J.pattern(this.numberInputPattern)]],minTimeBetweenPingsMs:[1e4,[J.required,J.min(1),J.pattern(this.numberInputPattern)]],minPingIntervalWithoutDataMs:[5e3,[J.required,J.min(1),J.pattern(this.numberInputPattern)]]})}initLogsFormGroup(){return this.fb.group({dateFormat:["%Y-%m-%d %H:%M:%S",[J.required,J.pattern(/^[^\s].*[^\s]$/)]],logFormat:["%(asctime)s - |%(levelname)s| - [%(filename)s] - %(module)s - %(funcName)s - %(lineno)d - %(message)s",[J.required,J.pattern(/^[^\s].*[^\s]$/)]],type:["remote",[J.required]],logLevel:[Ae.INFO],local:this.fb.group({})})}initCheckingDeviceActivityFormGroup(){return this.fb.group({checkDeviceInactivity:[!1],inactivityTimeoutSeconds:[200,[J.min(1),J.pattern(this.numberInputPattern)]],inactivityCheckPeriodSeconds:[500,[J.min(1),J.pattern(this.numberInputPattern)]]})}initSecurityFormGroup(){return this.fb.group({type:[Mu.ACCESS_TOKEN,[J.required]],accessToken:[null,[J.required,J.pattern(/^[^.\s]+$/)]],clientId:[null,[J.pattern(/^[^.\s]+$/)]],username:[null,[J.pattern(/^[^.\s]+$/)]],password:[null,[J.pattern(/^[^.\s]+$/)]],caCert:[null],cert:[null],privateKey:[null]})}observeFormChanges(){this.observeSecurityPasswordChanges(),this.observeRemoteConfigurationChanges(),this.observeDeviceActivityChanges(),this.observeSecurityTypeChanges(),this.observeStorageTypeChanges()}observeSecurityPasswordChanges(){const e=this.basicFormGroup.get("thingsboard.security.username");this.basicFormGroup.get("thingsboard.security.password").valueChanges.pipe(de(this.destroy$)).subscribe((t=>{t&&""!==t?e.setValidators([J.required]):e.clearValidators(),e.updateValueAndValidity({emitEvent:!1})}))}observeRemoteConfigurationChanges(){this.basicFormGroup.get("thingsboard.remoteConfiguration").valueChanges.pipe(de(this.destroy$)).subscribe((e=>{e||this.openConfigurationConfirmDialog()})),this.logSelector=this.fb.control(Su.service);for(const e of Object.keys(Su))this.addLocalLogConfig(e,{})}observeDeviceActivityChanges(){const e=this.basicFormGroup.get("thingsboard.checkingDeviceActivity");e.get("checkDeviceInactivity").valueChanges.pipe(de(this.destroy$)).subscribe((t=>{e.updateValueAndValidity();const n=[J.min(1),J.required,J.pattern(this.numberInputPattern)];t?(e.get("inactivityTimeoutSeconds").setValidators(n),e.get("inactivityCheckPeriodSeconds").setValidators(n)):(e.get("inactivityTimeoutSeconds").clearValidators(),e.get("inactivityCheckPeriodSeconds").clearValidators()),e.get("inactivityTimeoutSeconds").updateValueAndValidity({emitEvent:!1}),e.get("inactivityCheckPeriodSeconds").updateValueAndValidity({emitEvent:!1})})),this.basicFormGroup.get("grpc.enabled").valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.toggleRpcFields(e)}))}observeSecurityTypeChanges(){const e=this.basicFormGroup.get("thingsboard.security");e.get("type").valueChanges.pipe(de(this.destroy$)).subscribe((t=>{switch(this.removeAllSecurityValidators(),t){case Mu.ACCESS_TOKEN:this.addAccessTokenValidators(e);break;case Mu.TLS_PRIVATE_KEY:this.addTlsPrivateKeyValidators(e);break;case Mu.TLS_ACCESS_TOKEN:this.addTlsAccessTokenValidators(e);break;case Mu.USERNAME_PASSWORD:e.addValidators([this.atLeastOneRequired(J.required,["clientId","username"])])}e.updateValueAndValidity()})),["caCert","privateKey","cert"].forEach((t=>{e.get(t).valueChanges.pipe(de(this.destroy$)).subscribe((()=>this.cd.detectChanges()))}))}observeStorageTypeChanges(){const e=this.basicFormGroup.get("storage");e.get("type").valueChanges.pipe(de(this.destroy$)).subscribe((t=>{switch(this.removeAllStorageValidators(),t){case wu.MEMORY:this.addMemoryStorageValidators(e);break;case wu.FILE:this.addFileStorageValidators(e);break;case wu.SQLITE:this.addSqliteStorageValidators(e)}}))}addAccessTokenValidators(e){e.get("accessToken").addValidators([J.required,J.pattern(/^[^.\s]+$/)]),e.get("accessToken").updateValueAndValidity()}addTlsPrivateKeyValidators(e){["caCert","privateKey","cert"].forEach((t=>{e.get(t).addValidators([J.required]),e.get(t).updateValueAndValidity()}))}addTlsAccessTokenValidators(e){this.addAccessTokenValidators(e),e.get("caCert").addValidators([J.required]),e.get("caCert").updateValueAndValidity()}addMemoryStorageValidators(e){e.get("read_records_count").addValidators([J.required,J.min(1),J.pattern(this.numberInputPattern)]),e.get("max_records_count").addValidators([J.required,J.min(1),J.pattern(this.numberInputPattern)]),e.get("read_records_count").updateValueAndValidity({emitEvent:!1}),e.get("max_records_count").updateValueAndValidity({emitEvent:!1})}addFileStorageValidators(e){["max_file_count","max_read_records_count","max_records_per_file"].forEach((t=>{e.get(t).addValidators([J.required,J.min(1),J.pattern(this.numberInputPattern)]),e.get(t).updateValueAndValidity({emitEvent:!1})}))}addSqliteStorageValidators(e){["messages_ttl_check_in_hours","messages_ttl_in_days"].forEach((t=>{e.get(t).addValidators([J.required,J.min(1),J.pattern(this.numberInputPattern)]),e.get(t).updateValueAndValidity({emitEvent:!1})}))}checkAndFetchCredentials(e){e.type!==Mu.TLS_PRIVATE_KEY&&this.deviceService.getDeviceCredentials(this.device.id).pipe(de(this.destroy$)).subscribe((t=>{this.updateSecurityType(e,t),this.updateCredentials(t,e),this.basicFormGroup.updateValueAndValidity(),this.initialCredentialsUpdated.emit(t)}))}updateSecurityType(e,t){const n=t.credentialsType===q.ACCESS_TOKEN||e.type===Mu.TLS_ACCESS_TOKEN?e.type===Mu.TLS_ACCESS_TOKEN?Mu.TLS_ACCESS_TOKEN:Mu.ACCESS_TOKEN:t.credentialsType===q.MQTT_BASIC?Mu.USERNAME_PASSWORD:null;n&&this.basicFormGroup.get("thingsboard.security.type").setValue(n,{emitEvent:!1})}updateCredentials(e,t){switch(e.credentialsType){case q.ACCESS_TOKEN:this.updateAccessTokenCredentials(e,t);break;case q.MQTT_BASIC:this.updateMqttBasicCredentials(e);case q.X509_CERTIFICATE:}}updateAccessTokenCredentials(e,t){this.basicFormGroup.get("thingsboard.security.accessToken").setValue(e.credentialsId,{emitEvent:!1}),t.type===Mu.TLS_ACCESS_TOKEN&&this.basicFormGroup.get("thingsboard.security.caCert").setValue(t.caCert,{emitEvent:!1})}updateMqttBasicCredentials(e){const t=JSON.parse(e.credentialsValue);this.basicFormGroup.get("thingsboard.security.clientId").setValue(t.clientId,{emitEvent:!1}),this.basicFormGroup.get("thingsboard.security.username").setValue(t.userName,{emitEvent:!1}),this.basicFormGroup.get("thingsboard.security.password").setValue(t.password,{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||Dh)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(R.DeviceService),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(ne.MatDialog))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Dh,selectors:[["tb-gateway-basic-configuration"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(Fu,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.configGroup=e.first)}},inputs:{device:"device",defaultTab:"defaultTab",dialogMode:"dialogMode",withReportStrategy:"withReportStrategy"},outputs:{initialCredentialsUpdated:"initialCredentialsUpdated"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Dh)),multi:!0},{provide:X,useExisting:i((()=>Dh)),multi:!0}]),t.ɵɵNgOnChangesFeature,t.ɵɵStandaloneFeature],decls:20,vars:21,consts:[["configGroup",""],[1,"tab-group-block",3,"formGroup"],[3,"label"],["matTabContent",""],["formGroupName","thingsboard",1,"mat-content","mat-padding","configuration-block"],[1,"tb-form-panel","no-padding-bottom"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["color","primary","formControlName","remoteConfiguration",1,"mat-slide"],["color","primary","formControlName","remoteShell",1,"mat-slide"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],["appearance","outline",1,"flex"],["translate",""],["matInput","","formControlName","host"],["matIconSuffix","",2,"cursor","pointer",3,"matTooltip"],[4,"ngIf"],["matInput","","formControlName","port","type","number","min","0"],[1,"tb-form-panel"],["translate","",1,"tb-form-panel-title"],["formGroupName","security"],["formControlName","type",1,"toggle-group"],[3,"value",4,"ngFor","ngForOf"],["appearance","outline",4,"ngIf"],["style","margin-top: -12px; display: block;",3,"error",4,"ngIf"],["formControlName","caCert",3,"hint","label","allowedExtensions","accept","dropLabel",4,"ngIf"],["class","tb-form-panel","formControlName","reportStrategy",3,"defaultValue",4,"ngIf"],[3,"value"],["appearance","outline"],["matInput","","formControlName","accessToken"],["matSuffix","","miniButton","false","tooltipPosition","above","icon","content_copy",3,"copyText","tooltipText",4,"ngIf"],["matSuffix","","miniButton","false","tooltipPosition","above","icon","content_copy",3,"copyText","tooltipText"],["matInput","","formControlName","clientId"],["matInput","","formControlName","username"],["appearance","outline","subscriptSizing","dynamic","style","width: 100%",4,"ngIf"],["appearance","outline","subscriptSizing","dynamic",2,"width","100%"],["matInput","","formControlName","password"],[2,"margin-top","-12px","display","block",3,"error"],["formControlName","caCert",3,"hint","label","allowedExtensions","accept","dropLabel"],["formControlName","reportStrategy",1,"tb-form-panel",3,"defaultValue"],["formGroupName","logs",1,"mat-content","mat-padding","configuration-block"],[1,"flex","flex-col"],["matInput","","formControlName","dateFormat"],["matInput","","formControlName","logFormat","rows","2"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],[1,"mat-slide",3,"click","formControl"],[3,"tb-hint-tooltip-icon"],["formControlName","logLevel"],["formGroupName","local",1,"tb-form-panel","no-padding-bottom"],[1,"toggle-group",3,"formControl"],["class","first-capital",3,"value",4,"ngFor","ngForOf"],[3,"formGroup"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs"],["matInput","","formControlName","filePath"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","saving-period"],["matInput","","formControlName","savingTime","type","number","min","0"],["appearance","outline","hideRequiredMarker","",2,"min-width","110px","width","30%"],["formControlName","savingPeriod"],["matInput","","formControlName","backupCount","type","number","min","0"],[1,"first-capital",3,"value"],["formGroupName","storage",1,"mat-content","mat-padding","configuration-block"],["translate","",1,"tb-form-panel-hint"],[1,"tb-form-panel-hint"],[3,"ngSwitch"],["class","tb-form-row no-border no-padding tb-standard-fields column-xs",4,"ngSwitchCase"],[4,"ngSwitchCase"],["type","number","matInput","","formControlName","read_records_count"],["type","number","matInput","","formControlName","max_records_count"],["matInput","","formControlName","data_folder_path"],["aria-hidden","false","aria-label","help-icon","matSuffix","",1,"mat-form-field-infix","pointer-event","suffix-icon",2,"cursor","pointer",3,"matTooltip"],["matInput","","type","number","formControlName","max_file_count"],["matInput","","type","number","formControlName","max_read_records_count"],["matInput","","type","number","formControlName","max_records_per_file"],["matInput","","formControlName","data_file_path"],["matInput","","type","number","formControlName","messages_ttl_check_in_hours"],["appearance","outline",1,"mat-block"],["matInput","","type","number","formControlName","messages_ttl_in_days"],["formGroupName","grpc",1,"mat-content","mat-padding","configuration-block"],["color","primary","formControlName","enabled",1,"mat-slide"],["color","primary","formControlName","keepalivePermitWithoutCalls",1,"mat-slide"],["matInput","","formControlName","serverPort","type","number","min","0"],["matInput","","formControlName","keepAliveTimeoutMs","type","number","min","0"],["matInput","","formControlName","keepAliveTimeMs","type","number","min","0"],["matInput","","formControlName","minTimeBetweenPingsMs","type","number","min","0"],["matInput","","formControlName","maxPingsWithoutData","type","number","min","0"],["matInput","","formControlName","minPingIntervalWithoutDataMs","type","number","min","0"],["formGroupName","statistics",1,"tb-form-panel","no-padding-bottom"],["color","primary","formControlName","enable",1,"mat-slide"],["matInput","","formControlName","statsSendPeriodInSeconds","type","number","min","60"],["formGroupName","statistics"],["formArrayName","commands","class","flex flex-row statistics-container",4,"ngFor","ngForOf"],["mat-stroked-button","","color","primary","type","button",2,"width","fit-content",3,"click","disabled"],["formArrayName","commands",1,"flex","flex-row","statistics-container"],[1,"tb-form-panel","stroked","no-padding-bottom","no-gap","command-container",3,"formGroupName"],["matInput","","formControlName","attributeOnGateway"],["matInput","","formControlName","timeout","type","number","min","0"],["matInput","","formControlName","command"],["mat-icon-button","","matTooltipPosition","above",1,"tb-box-button",3,"click","disabled","matTooltip"],["formGroupName","checkingDeviceActivity",1,"tb-form-panel"],["color","primary","formControlName","checkDeviceInactivity",1,"mat-slide"],["class","tb-form-row no-border no-padding tb-standard-fields column-xs",4,"ngIf"],["matInput","","formControlName","minPackSendDelayMS","type","number","min","0"],["matInput","","formControlName","qos","type","number","min","0","max","1"],["matInput","","formControlName","checkConnectorsConfigurationInSeconds","type","number","min","0"],["matInput","","formControlName","maxPayloadSizeBytes","type","number","min","0"],["matInput","","formControlName","minPackSizeToSend","type","number","min","0"],["matInput","","formControlName","inactivityTimeoutSeconds","type","number","min","0"],["matInput","","type","number","min","0","formControlName","inactivityCheckPeriodSeconds"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",1,0)(2,"mat-tab",2),t.ɵɵpipe(3,"translate"),t.ɵɵtemplate(4,Ju,44,31,"ng-template",3),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-tab",2),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,lg,72,32,"ng-template",3),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-tab",2),t.ɵɵpipe(9,"translate"),t.ɵɵtemplate(10,_g,15,8,"ng-template",3),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-tab",2),t.ɵɵpipe(12,"translate"),t.ɵɵtemplate(13,nh,75,46,"ng-template",3),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-tab",2),t.ɵɵpipe(15,"translate"),t.ɵɵtemplate(16,uh,22,11,"ng-template",3),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"mat-tab",2),t.ɵɵpipe(18,"translate"),t.ɵɵtemplate(19,_h,61,36,"ng-template",3),t.ɵɵelementEnd()()),2&e&&(t.ɵɵclassProp("dialog-mode",n.dialogMode),t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(3,9,"gateway.general")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(6,11,"gateway.logs.logs")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(9,13,"gateway.storage")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(12,15,"gateway.grpc")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(15,17,"gateway.statistics.statistics")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(18,19,"gateway.other")))},dependencies:t.ɵɵgetComponentDepsFactory(Dh,[B,g,ta]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:grid;grid-template-rows:min-content minmax(auto,1fr) min-content}[_nghost-%COMP%] .configuration-block[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;max-height:70vh}[_nghost-%COMP%] .dialog-mode[_ngcontent-%COMP%] .configuration-block[_ngcontent-%COMP%]{max-height:60vh}[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{grid-row:1;background:transparent;color:#000000de!important}[_nghost-%COMP%] .tab-group-block[_ngcontent-%COMP%]{min-width:0;height:100%;min-height:0;grid-row:2}[_nghost-%COMP%] .toggle-group[_ngcontent-%COMP%]{margin-right:auto}[_nghost-%COMP%] .first-capital[_ngcontent-%COMP%]{text-transform:capitalize}[_nghost-%COMP%] textarea[_ngcontent-%COMP%]{resize:none}[_nghost-%COMP%] .saving-period[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] .command-container[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%]{display:none!important}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%]:first-child{display:block!important}[_nghost-%COMP%] .pointer-event{pointer-events:all}[_nghost-%COMP%] .toggle-group span{padding:0 25px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{color:#e0e0e0}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix:hover{color:#9e9e9e}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex;align-items:center}']})}}e("GatewayBasicConfigurationComponent",Dh),Ee([w()],Dh.prototype,"dialogMode",void 0),Ee([w()],Dh.prototype,"withReportStrategy",void 0);class Vh{constructor(e){this.fb=e,this.destroy$=new ie,this.advancedFormControl=this.fb.control(""),this.advancedFormControl.valueChanges.pipe(de(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){this.advancedFormControl.reset(e,{emitEvent:!1})}validate(){return this.advancedFormControl.valid?null:{advancedFormControl:{valid:!1}}}static{this.ɵfac=function(e){return new(e||Vh)(t.ɵɵdirectiveInject(W.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Vh,selectors:[["tb-gateway-advanced-configuration"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Y,useExisting:i((()=>Vh)),multi:!0},{provide:X,useExisting:i((()=>Vh)),multi:!0}]),t.ɵɵStandaloneFeature],decls:2,vars:4,consts:[["fillHeight","true","jsonRequired","",1,"flex","flex-col","config-container",3,"label","formControl"]],template:function(e,n){1&e&&(t.ɵɵelement(0,"tb-json-object-edit",0),t.ɵɵpipe(1,"translate")),2&e&&(t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(1,2,"gateway.configuration")),t.ɵɵproperty("formControl",n.advancedFormControl))},dependencies:t.ɵɵgetComponentDepsFactory(Vh,[B,g]),styles:['@charset "UTF-8";[_nghost-%COMP%] .config-container[_ngcontent-%COMP%]{height:calc(100% - 60px);padding:8px}']})}}function Ah(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",14),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.cancel())})),t.ɵɵelementStart(1,"mat-icon",15),t.ɵɵtext(2,"close"),t.ɵɵelementEnd()()}}function Gh(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-gateway-basic-configuration",16),t.ɵɵpipe(1,"withReportStrategy"),t.ɵɵlistener("initialCredentialsUpdated",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.onInitialCredentialsUpdate(n))})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("device",e.device)("defaultTab",e.defaultTab)("dialogMode",!!e.dialogRef)("withReportStrategy",t.ɵɵpipeBind1(1,4,e.gatewayVersion))}}function jh(e,n){1&e&&t.ɵɵelement(0,"tb-gateway-advanced-configuration",17)}function Lh(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",18),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.cancel())})),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()}2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"action.cancel")," "))}e("GatewayAdvancedConfigurationComponent",Vh);class Uh{constructor(e,t,n,a){this.fb=e,this.attributeService=t,this.deviceService=n,this.cd=a,this.ConfigurationModes=It,this.destroy$=new ie,this.gatewayConfigAttributeKeys=["general_configuration","grpc_configuration","logs_configuration","storage_configuration","RemoteLoggingLevel","mode"],this.gatewayConfigGroup=this.fb.group({basicConfig:[],advancedConfig:[],mode:[It.BASIC]}),this.observeAlignConfigs()}ngAfterViewInit(){this.fetchConfigAttribute(this.device)}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}saveConfig(){const{mode:e,advancedConfig:t}=Q(this.removeEmpty(this.gatewayConfigGroup.value)),n={mode:e,...t};n.thingsboard.statistics.commands=Object.values(n.thingsboard.statistics.commands??[]);const a=this.generateAttributes(n);this.attributeService.saveEntityAttributes(this.device,f.SHARED_SCOPE,a).pipe(we((e=>this.updateCredentials(n.thingsboard.security))),de(this.destroy$)).subscribe((()=>{this.dialogRef?this.dialogRef.close():(this.gatewayConfigGroup.markAsPristine(),this.cd.detectChanges())}))}onInitialCredentialsUpdate(e){this.initialCredentials=e,this.gatewayConfigGroup.markAsPristine({emitEvent:!1})}observeAlignConfigs(){this.gatewayConfigGroup.get("basicConfig").valueChanges.pipe(de(this.destroy$)).subscribe((e=>{const t=this.gatewayConfigGroup.get("advancedConfig");V(t.value,e)||this.gatewayConfigGroup.get("mode").value!==It.BASIC||t.patchValue(e,{emitEvent:!1})})),this.gatewayConfigGroup.get("advancedConfig").valueChanges.pipe(de(this.destroy$)).subscribe((e=>{const t=this.gatewayConfigGroup.get("basicConfig");V(t.value,e)||this.gatewayConfigGroup.get("mode").value!==It.ADVANCED||t.patchValue(e,{emitEvent:!1})}))}generateAttributes(e){const t=[],n=(e,n)=>{t.push({key:e,value:n})},a=(e,t)=>{t={...t,ts:(new Date).getTime()},n(e,t)};return n("RemoteLoggingLevel",e.logs?.logLevel??Ae.NONE),delete e.connectors,n("logs_configuration",this.generateLogsFile(e.logs)),a("grpc_configuration",e.grpc),a("storage_configuration",e.storage),a("general_configuration",e.thingsboard),n("mode",e.mode),t}updateCredentials(e){let t={};switch(e.type){case Mu.USERNAME_PASSWORD:this.shouldUpdateCredentials(e)&&(t=this.generateMqttCredentials(e));break;case Mu.ACCESS_TOKEN:case Mu.TLS_ACCESS_TOKEN:this.shouldUpdateAccessToken(e)&&(t={credentialsType:q.ACCESS_TOKEN,credentialsId:e.accessToken})}return Object.keys(t).length?this.deviceService.saveDeviceCredentials({...this.initialCredentials,...t}):pe(null)}shouldUpdateCredentials(e){if(this.initialCredentials.credentialsType!==q.MQTT_BASIC)return!0;const t=JSON.parse(this.initialCredentials.credentialsValue);return!(t.clientId===e.clientId&&t.userName===e.username&&t.password===e.password)}generateMqttCredentials(e){const{clientId:t,username:n,password:a}=e,r={...t&&{clientId:t},...n&&{userName:n},...a&&{password:a}};return{credentialsType:q.MQTT_BASIC,credentialsValue:JSON.stringify(r)}}shouldUpdateAccessToken(e){return this.initialCredentials.credentialsType!==q.ACCESS_TOKEN||this.initialCredentials.credentialsId!==e.accessToken}cancel(){this.dialogRef&&this.dialogRef.close()}removeEmpty(e){return Object.fromEntries(Object.entries(e).filter((([e,t])=>null!=t)).map((([e,t])=>[e,t===Object(t)?this.removeEmpty(t):t])))}generateLogsFile(e){const t={version:1,disable_existing_loggers:!1,formatters:{LogFormatter:{class:"logging.Formatter",format:e.logFormat,datefmt:e.dateFormat}},handlers:{consoleHandler:{class:"logging.StreamHandler",formatter:"LogFormatter",level:0,stream:"ext://sys.stdout"},databaseHandler:{class:"thingsboard_gateway.tb_utility.tb_handler.TimedRotatingFileHandler",formatter:"LogFormatter",filename:"./logs/database.log",backupCount:1,encoding:"utf-8"}},loggers:{database:{handlers:["databaseHandler","consoleHandler"],level:"DEBUG",propagate:!1}},root:{level:"ERROR",handlers:["consoleHandler"]},ts:(new Date).getTime()};return this.addLocalLoggers(t,e.local),t}addLocalLoggers(e,t){for(const n of Object.keys(t))e.handlers[n+"Handler"]=this.createHandlerObj(t[n],n),e.loggers[n]=this.createLoggerObj(t[n],n)}createHandlerObj(e,t){return{class:"thingsboard_gateway.tb_utility.tb_handler.TimedRotatingFileHandler",formatter:"LogFormatter",filename:`${e.filePath}/${t}.log`,backupCount:e.backupCount,interval:e.savingTime,when:e.savingPeriod,encoding:"utf-8"}}createLoggerObj(e,t){return{handlers:[`${t}Handler`,"consoleHandler"],level:e.logLevel,propagate:!1}}fetchConfigAttribute(e){e.id!==y&&this.attributeService.getEntityAttributes(e,f.CLIENT_SCOPE).pipe(Se((t=>t.length?pe(t):this.attributeService.getEntityAttributes(e,f.SHARED_SCOPE,this.gatewayConfigAttributeKeys))),de(this.destroy$)).subscribe((e=>{this.gatewayVersion=e.find((e=>"Version"===e.key))?.value,this.updateConfigs(e),this.cd.detectChanges()}))}updateConfigs(e){const t={thingsboard:{},grpc:{},logs:{},storage:{},mode:It.BASIC};e.forEach((e=>{switch(e.key){case"general_configuration":t.thingsboard=e.value,this.updateFormControls(e.value);break;case"grpc_configuration":t.grpc=e.value;break;case"logs_configuration":t.logs=this.logsToObj(e.value);break;case"storage_configuration":t.storage=e.value;break;case"mode":t.mode=e.value;break;case"RemoteLoggingLevel":t.logs={...t.logs,logLevel:e.value}}})),this.gatewayConfigGroup.get("basicConfig").setValue(t,{emitEvent:!1}),this.gatewayConfigGroup.get("advancedConfig").setValue(t,{emitEvent:!1})}updateFormControls(e){const{type:t,accessToken:n,...a}=e.security??{};this.initialCredentials={deviceId:this.device,credentialsType:t,credentialsId:n,credentialsValue:JSON.stringify(a)}}logsToObj(e){const{format:t,datefmt:n}=e.formatters.LogFormatter;return{local:Object.keys(Su).reduce(((t,n)=>{const a=e.handlers[`${n}Handler`]||{},r=e.loggers[n]||{};return t[n]={logLevel:r.level||Ae.INFO,filePath:a.filename?.split(`/${n}`)[0]||"./logs",backupCount:a.backupCount||7,savingTime:a.interval||3,savingPeriod:a.when||Iu.days},t}),{}),logFormat:t,dateFormat:n}}static{this.ɵfac=function(e){return new(e||Uh)(t.ɵɵdirectiveInject(W.FormBuilder),t.ɵɵdirectiveInject(R.AttributeService),t.ɵɵdirectiveInject(R.DeviceService),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Uh,selectors:[["tb-gateway-configuration"]],inputs:{device:"device",defaultTab:"defaultTab",dialogRef:"dialogRef"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:22,vars:22,consts:[[1,"gateway-config-container",3,"formGroup"],[1,"content-wrapper"],["color","primary"],[1,"tb-flex","space-between","align-center"],["translate",""],[1,"toolbar-actions"],["formControlName","mode",3,"appearance"],[3,"value"],["mat-icon-button","","type","button",3,"click",4,"ngIf"],["formControlName","basicConfig",3,"device","defaultTab","dialogMode","withReportStrategy","initialCredentialsUpdated",4,"ngIf"],["formControlName","advancedConfig",4,"ngIf"],[1,"actions"],["mat-button","","color","primary","type","button",3,"click",4,"ngIf"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["formControlName","basicConfig",3,"initialCredentialsUpdated","device","defaultTab","dialogMode","withReportStrategy"],["formControlName","advancedConfig"],["mat-button","","color","primary","type","button",3,"click"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"mat-toolbar",2)(3,"div",3)(4,"h2",4),t.ɵɵtext(5,"gateway.gateway-configuration"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"div",5)(7,"tb-toggle-select",6)(8,"tb-toggle-option",7),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"tb-toggle-option",7),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(14,Ah,3,0,"button",8),t.ɵɵelementEnd()()(),t.ɵɵtemplate(15,Gh,2,6,"tb-gateway-basic-configuration",9)(16,jh,1,0,"tb-gateway-advanced-configuration",10),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"div",11),t.ɵɵtemplate(18,Lh,3,3,"button",12),t.ɵɵelementStart(19,"button",13),t.ɵɵlistener("click",(function(){return n.saveConfig()})),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.gatewayConfigGroup),t.ɵɵadvance(2),t.ɵɵclassProp("page-header",!n.dialogRef),t.ɵɵadvance(5),t.ɵɵclassProp("dialog-toggle",!!n.dialogRef),t.ɵɵpropertyInterpolate("appearance",n.dialogRef?"stroked":"fill"),t.ɵɵadvance(),t.ɵɵproperty("value",n.ConfigurationModes.BASIC),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(10,16,"gateway.basic")," "),t.ɵɵadvance(2),t.ɵɵproperty("value",n.ConfigurationModes.ADVANCED),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(13,18,"gateway.advanced")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.dialogRef),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigGroup.get("mode").value===n.ConfigurationModes.BASIC),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigGroup.get("mode").value===n.ConfigurationModes.ADVANCED),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.dialogRef),t.ɵɵadvance(),t.ɵɵproperty("disabled",n.gatewayConfigGroup.invalid||!n.gatewayConfigGroup.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(21,20,"action.save")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Uh,[B,g,br,Dh,Vh]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;overflow:hidden}[_nghost-%COMP%] .page-header.mat-toolbar[_ngcontent-%COMP%]{background:transparent;color:#000000de!important}[_nghost-%COMP%] .actions[_ngcontent-%COMP%]{grid-row:3;padding:8px 16px 8px 8px;display:flex;gap:8px;justify-content:flex-end;position:absolute;bottom:0;right:0;z-index:1;background:#fff;width:100%}[_nghost-%COMP%] .gateway-config-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden}[_nghost-%COMP%] .content-wrapper[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] .toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.dialog-toggle[_ngcontent-%COMP%] .mat-button-toggle-button{color:#ffffffbf}']})}}e("GatewayConfigurationComponent",Uh);class $h{constructor(){}static{this.ɵfac=function(e){return new(e||$h)}}static{this.ɵcmp=t.ɵɵdefineComponent({type:$h,selectors:[["tb-lib-styles-entry"]],standalone:!0,features:[t.ɵɵStandaloneFeature],decls:0,vars:0,template:function(e,t){},styles:['@charset "UTF-8";\n'],encapsulation:2})}}const zh=(e,t)=>{const n=e[s];if(n.styles?.length){const e=n.styles[0];let a=document.getElementById(t);if(!a){a=document.createElement("style"),a.id=t;(document.head||document.getElementsByTagName("head")[0]).appendChild(a)}a.innerHTML=e}};class Kh{constructor(e){this.translate=e,function(e){e.setTranslation("en_US",Ue,!0),e.setTranslation("ar_AE",$e,!0),e.setTranslation("ca_ES",ze,!0),e.setTranslation("cs_CZ",Ke,!0),e.setTranslation("da_DK",He,!0),e.setTranslation("es_ES",Qe,!0),e.setTranslation("ko_KR",We,!0),e.setTranslation("lt_LT",Je,!0),e.setTranslation("nl_BE",Ye,!0),e.setTranslation("pl_PL",Xe,!0),e.setTranslation("pt_BR",Ze,!0),e.setTranslation("sl_SI",et,!0),e.setTranslation("tr_TR",tt,!0),e.setTranslation("zh_CN",nt,!0),e.setTranslation("zh_TW",at,!0)}(e),zh($h,"tb-gateway-css")}static{this.ɵfac=function(e){return new(e||Kh)(t.ɵɵinject(ke.TranslateService))}}static{this.ɵmod=t.ɵɵdefineNgModule({type:Kh})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[B,g,Me,an,Ei,Co,Uh,Lt,xu,bu]})}}e("GatewayExtensionModule",Kh),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(Kh,{imports:[B,g,Me,an,Ei,Co,Uh,Lt,xu,bu]})}}}));//# sourceMappingURL=gateway-management-extension.js.map +System.register(["@angular/core","@angular/material/sort","@angular/material/table","@angular/material/paginator","@shared/public-api","@angular/common","@core/public-api","@angular/forms","@angular/material/dialog","@ngrx/store","@angular/router","rxjs","rxjs/operators","tslib","@angular/material/tooltip","@ngx-translate/core","@angular/cdk/collections","@shared/components/dialog/json-object-edit-dialog.component","@shared/import-export/import-export.service","@shared/components/popover.service","@shared/decorators/coercion","@angular/material/core"],(function(e){"use strict";var t,n,a,r,i,o,s,p,l,c,d,m,u,g,y,h,f,v,b,x,w,C,S,E,T,I,k,M,P,F,O,q,B,R,N,_,D,V,G,A,j,L,U,z,K,H,W,Q,J,Y,X,Z,ee,te,ne,ae,re,ie,oe,se,pe,le,ce,de,me,ue,ge,ye,he,fe,ve,be,xe,we,Ce,Se,Ee,Te,Ie,ke,Me,Pe,Fe,Oe,qe,Be,Re,Ne,_e,De,Ve,Ge,Ae,je,Le,Ue;return{setters:[function(e){t=e,n=e.inject,a=e.KeyValueDiffers,r=e.EventEmitter,i=e.forwardRef,o=e.ChangeDetectionStrategy,s=e.assertInInjectionContext,p=e.DestroyRef,e.ɵRuntimeError,e.ɵgetOutputDestroyRef,e.Injector,e.effect,e.untracked,e.assertNotInReactiveContext,e.signal,e.computed,l=e.booleanAttribute,c=e.ChangeDetectorRef,d=e.output,m=e.ɵNG_COMP_DEF},function(e){u=e.MatSort},function(e){g=e.MatTableDataSource},function(e){y=e.MatPaginator},function(e){h=e.Direction,f=e.PageLink,v=e.DataKeyType,b=e.SharedModule,x=e.LegendPosition,w=e.NULL_UUID,C=e.AttributeScope,S=e.DatasourceType,E=e.EntityType,T=e.widgetType,I=e.DialogComponent,k=e.coerceBoolean,M=e.emptyPageData,P=e.isClientSideTelemetryType,F=e.TelemetrySubscriber,O=e.coerceNumber,q=e.helpBaseUrl,B=e.ContentType,R=e.PageComponent,N=e.TbTableDatasource,_=e.HOUR,D=e.DeviceCredentialsType},function(e){V=e.CommonModule},function(e){G=e.deepClone,A=e,j=e.isDefinedAndNotNull,L=e.isLiteralObject,U=e.isEqual,z=e.WINDOW,K=e.deleteNullProperties,H=e.DialogService,W=e.isNumber,Q=e.isString,J=e.isUndefinedOrNull,Y=e.isObject,X=e.generateSecret,Z=e.camelCase,ee=e.deepTrim},function(e){te=e,ne=e.Validators,ae=e.NG_VALUE_ACCESSOR,re=e.NG_VALIDATORS,ie=e.FormBuilder,oe=e.FormControl},function(e){se=e.MAT_DIALOG_DATA,pe=e,le=e.MatDialog},function(e){ce=e},function(e){de=e},function(e){me=e.Subject,ue=e.fromEvent,ge=e.BehaviorSubject,ye=e.ReplaySubject,he=e.of,fe=e.Observable,ve=e.forkJoin},function(e){be=e.takeUntil,xe=e.filter,we=e.tap,Ce=e.catchError,Se=e.map,Ee=e.publishReplay,Te=e.refCount,Ie=e.take,ke=e.debounceTime,Me=e.distinctUntilChanged,Pe=e.startWith,Fe=e.switchMap,Oe=e.mergeMap},function(e){qe=e.__decorate},function(e){Be=e,Re=e.MatTooltip},function(e){Ne=e,_e=e.TranslateService,De=e.TranslateModule},function(e){Ve=e.SelectionModel},function(e){Ge=e.JsonObjectEditDialogComponent},function(e){Ae=e},function(e){je=e},function(e){Le=e.coerceBoolean},function(e){Ue=e.ErrorStateMatcher}],execute:function(){e("getDefaultConfig",Pt);const $e=e("noLeadTrailSpacesRegex",/^\S+(?: \S+)*$/),ze=e("integerRegex",/^[-+]?\d+$/),Ke=e("nonZeroFloat",/^-?(?!0(\.0+)?$)\d+(\.\d+)?$/),He=e("jsonRequired",(e=>e.value?null:{required:!0}));var We,Qe,Je;e("GatewayLogLevel",We),function(e){e.NONE="NONE",e.CRITICAL="CRITICAL",e.ERROR="ERROR",e.WARNING="WARNING",e.INFO="INFO",e.DEBUG="DEBUG",e.TRACE="TRACE"}(We||e("GatewayLogLevel",We={})),e("GatewayVersion",Qe),function(e){e.v3_6_3="3.6.3",e.v3_6_2="3.6.2",e.v3_6_0="3.6",e.v3_5_2="3.5.2",e.Legacy="legacy"}(Qe||e("GatewayVersion",Qe={})),e("ConnectorType",Je),function(e){e.MQTT="mqtt",e.MODBUS="modbus",e.GRPC="grpc",e.OPCUA="opcua",e.BLE="ble",e.REQUEST="request",e.CAN="can",e.BACNET="bacnet",e.ODBC="odbc",e.REST="rest",e.SNMP="snmp",e.FTP="ftp",e.SOCKET="socket",e.XMPP="xmpp",e.OCPP="ocpp",e.CUSTOM="custom"}(Je||e("ConnectorType",Je={}));const Ye=e("GatewayConnectorDefaultTypesTranslatesMap",new Map([[Je.MQTT,"MQTT"],[Je.MODBUS,"MODBUS"],[Je.GRPC,"GRPC"],[Je.OPCUA,"OPCUA"],[Je.BLE,"BLE"],[Je.REQUEST,"REQUEST"],[Je.CAN,"CAN"],[Je.BACNET,"BACNET"],[Je.ODBC,"ODBC"],[Je.REST,"REST"],[Je.SNMP,"SNMP"],[Je.FTP,"FTP"],[Je.SOCKET,"SOCKET"],[Je.XMPP,"XMPP"],[Je.OCPP,"OCPP"],[Je.CUSTOM,"CUSTOM"]]));var Xe;e("SocketEncoding",Xe),function(e){e.UTF8="utf-8",e.HEX="hex",e.UTF16="utf-16",e.UTF32="utf-32",e.UTF16BE="utf-16-be",e.UTF16LE="utf-16-le",e.UTF32BE="utf-32-be",e.UTF32LE="utf-32-le"}(Xe||e("SocketEncoding",Xe={}));var Ze={gateway:{active:"Active",address:"Address","address-required":"Address required","add-entry":"Add configuration","add-attribute":"Add attribute","add-attribute-update":"Add attribute update","add-attribute-request":"Add attribute request","add-key":"Add key","add-timeseries":"Add time series","add-mapping":"Add mapping","add-slave":"Add Slave",arguments:"Arguments","add-rpc-method":"Add method","add-rpc-request":"Add request","add-value":"Add argument","advanced-settings":"Advanced settings",application:"Application",bacnet:{"alt-responses-address":"Alternative responses address","apdu-length":"APDU Length","object-name":"Object Name","object-type":{"analog-input":"Analog Input","analog-output":"Analog Output","analog-value":"Analog Value","binary-input":"Binary Input","binary-output":"Binary Output","binary-value":"Binary Value"},"request-type":{label:"Request Type",write:"Write Property",read:"Read Property"},"property-id":{"present-value":"Present Value","status-flags":"Status Flags","cov-increment":"COV Increment","event-state":"Event State","out-of-service":"Out of Service",polarity:"Polarity","priority-array":"Priority Array","relinquish-default":"Relinquish Default","current-command-priority":"Current Command Priority","event-message-texts":"Event Message Texts","event-message-texts-config":"Event Message Texts Config","event-algorithm-inhibit-reference":"Event Algorithm Inhibit Reference","time-delay-normal":"Time Delay Normal"},segmentation:{label:"Segmentation",no:"None",both:"Both",transmit:"Transmit",receive:"Receive"}},baudrate:"Baudrate","buffer-size":"Buffer size","buffer-size-required":"Buffer size is required","buffer-size-range":"Buffer size should be greater than 0",bytesize:"Bytesize",boolean:"Boolean",bit:"Bit","bit-target-type":"Bit target type","delete-value":"Delete value","delete-rpc-method":"Delete method","delete-rpc-request":"Delete request","delete-attribute-update":"Delete attribute update","delete-attribute-request":"Delete attribute request",advanced:"Advanced","add-device":"Add device","address-filter":"Address filter","address-filter-required":"Address filter is required","advanced-connection-settings":"Advanced connection settings","advanced-configuration-settings":"Advanced configuration settings",attributes:"Attributes","attribute-updates":"Attribute updates","attribute-on-platform":"Attribute on platform","attribute-requests":"Attribute requests","attribute-filter":"Attribute filter","attribute-filter-hint":"Filter for incoming attribute name from platform, supports regular expression.","attribute-filter-required":"Attribute filter required.","attribute-name-expression":"Attribute name expression","attribute-name-expression-required":"Attribute name expression required.","attribute-name-expression-hint":"Hint for Attribute name expression",basic:"Basic","byte-order":"Byte order","word-order":"Word order",broker:{connection:"Connection to broker",name:"Broker name","name-required":"Broker name required.","security-types":{anonymous:"Anonymous",basic:"Basic",certificates:"Certificates"}},"CA-certificate-path":"Path to CA certificate file","path-to-CA-cert-required":"Path to CA certificate file is required.","change-connector-title":"Confirm connector change","change-connector-text":"Switching connectors will discard any unsaved changes. Continue?","checking-device-activity":"Checking device activity",command:"Docker commands","command-copied-message":"Docker command has been copied to clipboard",configuration:"Configuration","add-connector":"Add connector","connector-add":"Add new connector","connector-enabled":"Enable connector","connector-name":"Connector name","connector-name-required":"Connector name is required.","connector-type":"Connector type","connector-type-required":"Connector type is required.",connectors:"Connectors","connectors-config":"Connectors configuration","connectors-table-enabled":"Enabled","connectors-table-name":"Name","connectors-table-type":"Type","connectors-table-status":"Status","connectors-table-actions":"Actions","connectors-table-key":"Key","connectors-table-class":"Class","connection-timeout":"Connection timeout (s)","connect-attempt-time":"Connect attempt time (ms)","connect-attempt-count":"Connect attempt count","copy-username":"Copy username","copy-password":"Copy password","copy-client-id":"Copy client ID","connector-created":"Connector created","connector-updated":"Connector updated","rpc-command-save-template":"Save Template","rpc-command-send":"Send","rpc-command-result":"Response","rpc-command-edit-params":"Edit parameters","gateway-configuration":"General Configuration","docker-label":"Use the following instruction to run IoT Gateway in Docker compose with credentials for selected device","install-docker-compose":"Use the instructions to download, install and setup docker compose",integer:"Integer",inactive:"Inactive",device:"Device",devices:"Devices","device-profile":"Device profile","device-info-settings":"Device info settings","device-info":{"entity-field":"Entity field",source:"Source",expression:"Value / Expression","expression-hint":"Show help",name:"Name","profile-name":"Profile name","device-name-expression":"Device name expression","device-name-expression-required":"Device name expression is required.","device-profile-expression-required":"Device profile expression is required."},"device-name-filter":"Device name filter","device-name-filter-hint":"This field supports Regular expressions to filter incoming data by device name.","device-name-filter-required":"Device name filter is required.",details:"Details","delete-mapping-title":"Delete mapping?","delete-slave-title":"Delete slave?","delete-device-title":"Delete device ?",divider:"Divider","download-configuration-file":"Download configuration file","download-docker-compose":"Download docker-compose.yml for your gateway","enable-remote-logging":"Enable remote logging","ellipsis-chips-text":"+ {{count}} more","launch-gateway":"Launch gateway","launch-docker-compose":"Start the gateway using the following command in the terminal from folder with docker-compose.yml file","logs-configuration":"Logs configuration","create-new-gateway":"Create a new gateway","create-new-gateway-text":"Are you sure you want create a new gateway with name: '{{gatewayName}}'?","created-time":"Created time","configuration-delete-dialog-header":"Configurations will be deleted","configuration-delete-dialog-body":"Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.

\nTo turn off configuration, enter gateway name below","configuration-delete-dialog-input":"Gateway name","configuration-delete-dialog-input-required":"Gateway name is mandatory","configuration-delete-dialog-confirm":"Turn Off","connector-duplicate-name":"Connector with such name already exists.","connection-type":"Connection type","connector-side":"Connector side","payload-type":"Payload type","platform-side":"Platform side",JSON:"JSON","JSON-hint":"Converter for this payload type processes MQTT messages in JSON format. It uses JSON Path expressions to extract vital details such as device names, device profile names, attributes, and time series from the message. And regular expressions to get device details from topics.",byte:"Byte",bytes:"Bytes","bytes-hint":"Converter for this payload type designed for binary MQTT payloads, this converter directly interprets binary data to retrieve device names and device profile names, along with attributes and time series, using specific byte positions for data extraction.",custom:"Custom","custom-hint":"This option allows you to use a custom converter for specific data tasks. You need to add your custom converter to the extension folder and enter its class name in the UI settings. Any keys you provide will be sent as configuration to your custom converter.","client-cert-path":"Path to client certificate file","path-to-client-cert-required":"Path to client certificate file is required.","client-id":"Client ID","data-conversion":"Data conversion","data-mapping":"Data mapping","data-mapping-hint":"Data mapping provides the capability to parse and convert the data received from a MQTT client in incoming messages into specific attributes and time series data keys.","opcua-data-mapping-hint":"Data mapping provides the capability to parse and convert the data received from a OPCUA server into specific data keys.",delete:"Delete configuration","delete-attribute":"Delete attribute","delete-key":"Delete key","delete-timeseries":"Delete time series",default:"Default","device-node":"Device node","device-node-required":"Device node required.","device-node-hint":"Path or identifier for device node on OPC UA server. Relative paths from it for attributes and time series can be used.","device-name":"Device name","device-profile-label":"Device profile","device-name-required":"Device name required","device-profile-required":"Device profile required","download-tip":"Download configuration file","drop-file":"Drop file here or",enable:"Enable",encoding:"Encoding","enable-subscription":"Enable subscription",extension:"Extension","extension-hint":"Put your converter classname in the field. Custom converter with such class should be in extension/mqtt folder.","extension-required":"Extension is required.","extension-configuration":"Extension configuration","extension-configuration-hint":"Configuration for convertor","fill-connector-defaults":"Fill configuration with default values","fill-connector-defaults-hint":"This property allows to fill connector configuration with default values on it's creation.","from-device-request-settings":"Input request parsing","from-device-request-settings-hint":"These fields support JSONPath expressions to extract a name from incoming message.","function-code":"Function code","function-codes":{"read-coils":"01 - Read Coils","read-discrete-inputs":"02 - Read Discrete Inputs","read-multiple-holding-registers":"03 - Read Multiple Holding Registers","read-input-registers":"04 - Read Input Registers","write-single-coil":"05 - Write Single Coil","write-single-holding-register":"06 - Write Single Holding Register","write-multiple-coils":"15 - Write Multiple Coils","write-multiple-holding-registers":"16 - Write Multiple Holding Registers"},"to-device-response-settings":"Output request processing","to-device-response-settings-hint":"For these fields you can use the following variables and they will be replaced with actual values: ${deviceName}, ${attributeKey}, ${attributeValue}",gateway:"Gateway","gateway-exists":"Device with same name is already exists.","gateway-status":"Gateway status","gateway-name":"Gateway name","gateway-name-required":"Gateway name is required.","gateway-saved":"Gateway configuration successfully saved.","generate-client-id":"Generate Client ID",grpc:"GRPC","grpc-keep-alive-timeout":"Keep alive timeout (in ms)","grpc-keep-alive-timeout-required":"Keep alive timeout is required","grpc-keep-alive-timeout-min":"Keep alive timeout can not be less then 1","grpc-keep-alive-timeout-pattern":"Keep alive timeout is not valid","grpc-keep-alive":"Keep alive (in ms)","grpc-keep-alive-required":"Keep alive is required","grpc-keep-alive-min":"Keep alive can not be less then 1","grpc-keep-alive-pattern":"Keep alive is not valid","grpc-min-time-between-pings":"Min time between pings (in ms)","grpc-min-time-between-pings-required":"Min time between pings is required","grpc-min-time-between-pings-min":"Min time between pings can not be less then 1","grpc-min-time-between-pings-pattern":"Min time between pings is not valid","grpc-min-ping-interval-without-data":"Min ping interval without data (in ms)","grpc-min-ping-interval-without-data-required":"Min ping interval without data is required","grpc-min-ping-interval-without-data-min":"Min ping interval without data can not be less then 1","grpc-min-ping-interval-without-data-pattern":"Min ping interval without data is not valid","grpc-max-pings-without-data":"Max pings without data","grpc-max-pings-without-data-required":"Max pings without data is required","grpc-max-pings-without-data-min":"Max pings without data can not be less then 1","grpc-max-pings-without-data-pattern":"Max pings without data is not valid",info:"Info",identity:"Identity","inactivity-check-period-seconds":"Inactivity check period (in sec)","inactivity-check-period-seconds-required":"Inactivity check period is required","inactivity-check-period-seconds-min":"Inactivity check period can not be less then 1","inactivity-check-period-seconds-pattern":"Inactivity check period is not valid","inactivity-timeout-seconds":"Inactivity timeout (in sec)","inactivity-timeout-seconds-required":"Inactivity timeout is required","inactivity-timeout-seconds-min":"Inactivity timeout can not be less then 1","inactivity-timeout-seconds-pattern":"Inactivity timeout is not valid","unit-id":"Unit ID",host:"Host","host-required":"Host is required.",holding_registers:"Holding registers",coils_initializer:"Coils initializer",input_registers:"Input registers",discrete_inputs:"Discrete inputs","json-parse":"Not valid JSON.","json-required":"Field cannot be empty.","JSONPath-hint":"This field supports constants and JSONPath expressions.",logs:{logs:"Logs",days:"days",hours:"hours",minutes:"minutes",seconds:"seconds","date-format":"Date format","date-format-required":"Date format required","log-format":"Log format","log-type":"Log type","log-format-required":"Log format required",remote:"Remote logging","remote-logs":"Remote logs",local:"Local logging",level:"Log level","file-path":"File path","file-path-required":"File path required","saving-period":"Log saving period","saving-period-min":"Log saving period can not be less then 1","saving-period-required":"Log saving period required","backup-count":"Backup count","backup-count-min":"Backup count can not be less then 1","backup-count-required":"Backup count required"},"max-number-of-workers":"Max number of workers","max-number-of-workers-hint":"Maximal number of workers threads for converters \n(The amount of workers changes dynamically, depending on load) \nRecommended amount 50-150.","max-number-of-workers-required":"Max number of workers is required.","max-messages-queue-for-worker":"Max messages queue per worker","max-messages-queue-for-worker-hint":"Maximal messages count that will be in the queue \nfor each converter worker.","max-messages-queue-for-worker-required":"Max messages queue per worker is required.",method:"Method","method-name":"Method name","method-required":"Method name is required.","min-pack-send-delay":"Min pack send delay (in ms)","min-pack-send-delay-required":"Min pack send delay is required","min-pack-send-delay-min":"Min pack send delay can not be less then 10","min-pack-send-delay-pattern":"Min pack send delay is not valid",multiplier:"Multiplier",mode:"Mode","model-name":"Model name",modifier:"Modifier","modifier-invalid":"Modifier is not valid","mqtt-version":"MQTT version",name:"Name","name-required":"Name is required.","network-mask":"Network mask","no-attributes":"No attributes","no-attribute-updates":"No attribute updates","no-attribute-requests":"No attribute requests","no-connectors":"No connectors","no-data":"No configurations","no-gateway-found":"No gateway found.","no-gateway-matching":" '{{item}}' not found.","no-timeseries":"No time series","no-keys":"No keys","no-value":"No arguments","no-rpc-methods":"No RPC methods","no-rpc-requests":"No RPC requests","path-hint":"The path is local to the gateway file system","path-logs":"Path to log files","path-logs-required":"Path is required.",password:"Password","password-required":"Password is required.","permit-without-calls":"Keep alive permit without calls","property-id":"Property ID","poll-period":"Poll period (ms)","poll-period-error":"Poll period should be at least {{min}} (ms).",port:"Port","port-required":"Port is required.","port-limits-error":"Port should be number from {{min}} to {{max}}.","private-key-path":"Path to private key file","path-to-private-key-required":"Path to private key file is required.",parity:"Parity","product-code":"Product code","product-name":"Product name",raw:"Raw",retain:"Retain","retain-hint":"This flag tells the broker to store the message for a topic\nand ensures any new client subscribing to that topic\nwill receive the stored message.",remote:"Remote configuration","remote-logging-level":"Logging level","remove-entry":"Remove configuration","remote-shell":"Remote shell","remote-configuration":"Remote Configuration","request-expression":"Request expression","request-expression-required":"Request expression is required",retries:"Retries","retries-on-empty":"Retries on empty","retries-on-invalid":"Retries on invalid",rpc:{title:"{{type}} Connector RPC parameters","templates-title":"Connector RPC Templates",methodFilter:"Method filter","method-name":"Method name",requestTopicExpression:"Request topic expression",responseTopicExpression:"Response topic expression",responseTimeout:"Response timeout",valueExpression:"Value expression",tag:"Tag",type:"Type",functionCode:"Function Code",objectsCount:"Objects Count",address:"Address",method:"Method",requestType:"Request Type",requestTimeout:"Request Timeout",objectType:"Object type",identifier:"Identifier",propertyId:"Property ID",methodRPC:"Method RPC name",withResponse:"With Response",characteristicUUID:"Characteristic UUID",methodProcessing:"Method Processing",nodeID:"Node ID",isExtendedID:"Is Extended ID",isFD:"Is FD",bitrateSwitch:"Bitrate Switch",dataInHEX:"Data In HEX",dataLength:"Data Length",dataByteorder:"Data Byte Order",dataBefore:"Data Before",dataAfter:"Data After",dataExpression:"Data Expression",oid:"OID","add-oid":"Add OID","add-header":"Add header","add-security":"Add security",remove:"Remove",requestFilter:"Request Filter",requestUrlExpression:"Request URL Expression",httpMethod:"HTTP Method",timeout:"Timeout",tries:"Tries",httpHeaders:"HTTP Headers","header-name":"Header name",hint:{"modbus-response-reading":"RPC response will return all subtracted values from all connected devices when the reading functions are selected.","modbus-writing-functions":"RPC will write a filled value to all connected devices when the writing functions are selected.","opc-method":"A filled method name is the OPC-UA method that will processed on the server side (make sure your node has the requested method)."},"security-name":"Security name",value:"Value",security:"Security",responseValueExpression:"Response Value Expression",requestValueExpression:"Request Value Expression",arguments:"Arguments","add-argument":"Add argument","write-property":"Write property","read-property":"Read property","analog-output":"Analog output","analog-input":"Analog input","binary-output":"Binary output","binary-input":"Binary input","binary-value":"Binary value","analog-value":"Analog value",write:"Write",read:"Read",scan:"Scan",oids:"OIDS",set:"Set",multiset:"Multiset",get:"Get","bulk-walk":"Bulk walk",table:"Table","multi-get":"Multiget","get-next":"Get next","bulk-get":"Bulk get",walk:"Walk","save-template":"Save template","template-name":"Template name","template-name-required":"Template name is required.","template-name-duplicate":"Template with such name already exists, it will be updated.",command:"Command",params:"Params","json-value-invalid":"JSON value has an invalid format"},"rpc-methods":"RPC methods","rpc-requests":"RPC requests",request:{"connect-request":"Connect request","disconnect-request":"Disconnect request","attribute-request":"Attribute request","attribute-update":"Attribute update","rpc-connection":"RPC command"},"request-type":"Request type","request-timeout":"Request timeout (ms)","requests-mapping":"Requests mapping","requests-mapping-hint":"MQTT Connector requests allows you to connect, disconnect, process attribute requests from the device, handle attribute updates on the server and RPC processing configuration.","request-topic-expression":"Request topic expression","request-client-certificate":"Request client certificate","request-topic-expression-required":"Request topic expression is required.","response-timeout":"Response timeout (ms)","response-timeout-required":"Response timeout is required.","response-timeout-limits-error":"Timeout must be more then {{min}} ms.","response-topic-Qos":"Response topic QoS","response-topic-Qos-hint":"MQTT Quality of Service (QoS) is an agreement between the message sender and receiver that defines the level of delivery guarantee for a specific message.","response-topic-expression":"Response topic expression","response-topic-expression-required":"Response topic expression is required.","response-value-expression":"Response value expression","response-value-expression-required":"Response value expression is required.","vendor-name":"Vendor name","vendor-url":"Vendor URL",value:"Value",values:"Values","value-required":"Value is required.","value-expression":"Value expression","value-expression-required":"Value expression is required.","with-response":"With response","without-response":"Without response",other:"Other",socket:"Socket","save-tip":"Save configuration file","scan-period":"Scan period (ms)","scan-period-error":"Scan period should be at least {{min}} (ms).","sub-check-period":"Subscription check period (ms)","sub-check-period-error":"Subscription check period should be at least {{min}} (ms).",security:"Security","security-policy":"Security policy","security-type":"Security type","security-types":{"access-token":"Access Token","username-password":"Username and Password",tls:"TLS","tls-access-token":"TLS + Access Token","tls-private-key":"TLS + Private Key"},"select-connector":"Select connector to display config","send-change-data":"Send data only on change","send-data-to-platform":"Send data to platform","send-data-on-change":"Send data only on change","send-change-data-hint":"The values will be saved to the database only if they are different from the corresponding values in the previous converted message. This functionality applies to both attributes and time series in the converter output.",server:"Server","server-hostname":"Server hostname","server-slave":"Server (Slave)","servers-slaves":"Servers (Slaves)","server-port":"Server port","server-url":"Server endpoint url","server-connection":"Server Connection","server-config":"Server configuration","server-slave-config":"Server (Slave) configuration","server-url-required":"Server endpoint url is required.",stopbits:"Stopbits",strict:"Strict",set:"Set","show-map":"Show map",statistics:{attributes:"Attributes",telemetry:"Telemetry","storage-message-count":"Storage message count","messages-from-platform":"Messages from platform","pushed-datapoints":"Pushed datapoints","messages-pulled-from-storage":"Messages pulled from storage","messages-pushed-to-platform":"Messages pushed to platform","messages-sent-to-platform":"Messages sent to platform","process-cpu-usage":"Gateway process CPU usage",memory:"Gateway memory","machine-resources":"Machine resources","free-disk":"Gateway free disk",statistic:"Statistic",statistics:"Statistics","statistic-commands-empty":'No configured statistic keys found. You can configure them in "Statistics" tab in general configuration.',"statistics-button":"Go to configuration",commands:"Commands","send-period":"Statistic send period (in sec)","send-period-required":"Statistic send period is required","send-period-min":"Statistic send period can not be less then 60","send-period-pattern":"Statistic send period is not valid","check-connectors-configuration":"Check connectors configuration (in sec)",messages:"Messages","max-payload-size-bytes":"Max payload size in bytes","max-payload-size-bytes-required":"Max payload size in bytes is required","max-payload-size-bytes-min":"Max payload size in bytes can not be less then 100","max-payload-size-bytes-pattern":"Max payload size in bytes is not valid","min-pack-size-to-send":"Min packet size to send","min-pack-size-to-send-required":"Min packet size to send is required","min-pack-size-to-send-min":"Min packet size to send can not be less then 100","min-pack-size-to-send-pattern":"Min packet size to send is not valid","check-connectors-configuration-required":"Check connectors configuration is required","check-connectors-configuration-min":"Check connectors configuration can not be less then 1","check-connectors-configuration-pattern":"Check connectors configuration is not valid",add:"Add command",timeout:"Timeout (in sec)","timeout-required":"Timeout is required","timeout-min":"Timeout can not be less then 1","timeout-pattern":"Timeout is not valid","attribute-name":"Attribute name","attribute-name-required":"Attribute name is required",command:"Command","command-required":"Command is required","command-pattern":"Command is not valid",remove:"Remove command"},storage:"Storage","storage-max-file-records":"Maximum records in file","storage-max-files":"Maximum number of files","storage-max-files-min":"Minimum number is 1.","storage-max-files-pattern":"Number is not valid.","storage-max-files-required":"Number is required.","storage-max-records":"Maximum records in storage","storage-max-records-min":"Minimum number of records is 1.","storage-max-records-pattern":"Number is not valid.","storage-max-records-required":"Maximum records is required.","storage-read-record-count":"Read record count in storage","storage-read-record-count-min":"Minimum number of records is 1.","storage-read-record-count-pattern":"Number is not valid.","storage-read-record-count-required":"Read record count is required.","storage-max-read-record-count":"Max read record count in storage","storage-max-read-record-count-min":"Minimum number of records is 1.","storage-max-read-record-count-pattern":"Number is not valid.","storage-max-read-record-count-required":"Max Read record count is required.","storage-data-folder-path":"Data folder path","storage-data-folder-path-required":"Data folder path is required.","storage-pack-size":"Maximum event pack size","storage-pack-size-min":"Minimum number is 1.","storage-pack-size-pattern":"Number is not valid.","storage-pack-size-required":"Maximum event pack size is required.","storage-path":"Storage path","storage-path-required":"Storage path is required.","storage-type":"Storage type","storage-types":{"file-storage":"File storage","memory-storage":"Memory storage",sqlite:"SQLITE"},suffix:{ms:"ms"},"report-strategy":{label:"Report strategy","on-change":"On value change","on-report-period":"On report period","on-change-or-report-period":"On value change or report period","report-period":"Report period","on-received":"On received"},"source-type":{msg:"Extract from message",topic:"Extract from topic",const:"Constant",identifier:"Identifier",path:"Path",expression:"Expression"},"workers-settings":"Workers settings",thingsboard:"ThingsBoard",general:"General",timeseries:"Time series",key:"Key",keys:"Keys","key-required":"Key is required.","thingsboard-host":"Platform host","thingsboard-host-required":"Host is required.","thingsboard-port":"Platform port","thingsboard-port-max":"Maximum port number is 65535.","thingsboard-port-min":"Minimum port number is 1.","thingsboard-port-pattern":"Port is not valid.","thingsboard-port-required":"Port is required.",tidy:"Tidy","tidy-tip":"Tidy config JSON",timeout:"Timeout (ms)","timeout-error":"Timeout should be at least {{min}} (ms).","title-connectors-json":"Connector {{typeName}} configuration",type:"Type","topic-filter":"Topic filter","topic-required":"Topic filter is required.","tls-path-ca-certificate":"Path to CA certificate on gateway","tls-path-client-certificate":"Path to client certificate on gateway","tls-connection":"TLS Connection","master-connections":"Master Connections","method-filter":"Method filter","method-filter-hint":"Regular expression to filter incoming RPC method from platform.","method-filter-required":"Method filter is required.","messages-ttl-check-in-hours":"Messages TTL check in hours","messages-ttl-check-in-hours-required":"Messages TTL check in hours is required.","messages-ttl-check-in-hours-min":"Min number is 1.","messages-ttl-check-in-hours-pattern":"Number is not valid.","messages-ttl-in-days":"Messages TTL in days","messages-ttl-in-days-required":"Messages TTL in days is required.","messages-ttl-in-days-min":"Min number is 1.","messages-ttl-in-days-pattern":"Number is not valid.","mqtt-qos":"QoS","mqtt-qos-required":"QoS is required","mqtt-qos-range":"QoS values range is from 0 to 1",qos:{"at-most-once":"0 - At most once","at-least-once":"1 - At least once","exactly-once":"2 - Exactly once"},"objects-count":"Objects count","object-id":"Object ID","objects-count-required":"Objects count is required","wait-after-failed-attempts":"Wait after failed attempts (ms)","tls-path-private-key":"Path to private key on gateway","toggle-fullscreen":"Toggle fullscreen","transformer-json-config":"Configuration JSON*","update-config":"Add/update configuration JSON",username:"Username","username-required":"Username is required.","unit-id-required":"Unit ID is required.","vendor-id":"Vendor ID","write-coil":"Write Coil","write-coils":"Write Coils","write-register":"Write Register","write-registers":"Write Registers",hints:{"buffer-size":"Buffer size for received data blocks.",encoding:"Encoding used for writing received string data to storage.",method:"Name for method on a platform.","modbus-master":"Configuration sections for connecting to Modbus servers and reading data from them.","modbus-server":"Configuration section for the Modbus server, storing data and sending updates to the platform when changes occur or at fixed intervals.","remote-configuration":"Enables remote configuration and management of the gateway","remote-shell":"Enables remote control of the operating system with the gateway from the Remote Shell widget",host:"Hostname or IP address of platform server",port:"Port of MQTT service on platform server",token:"Access token for the gateway from platform server","client-id":"MQTT client id for the gateway form platform server",username:"MQTT username for the gateway form platform server",password:"MQTT password for the gateway form platform server","ca-cert":"Path to CA certificate file","date-form":"Date format in log message","object-id-required":"Object ID is required","vendor-id-required":"Vendor ID is required","data-folder":"Path to the folder that will contain data (Relative or Absolute)","log-format":"Log message format","remote-log":"Enables remote logging and logs reading from the gateway","backup-count":"If backup count is > 0, when a rollover is done, no more than backup count files are kept - the oldest ones are deleted",storage:"Provides configuration for saving incoming data before it is sent to the platform","max-file-count":"Maximum number of files that will be created","max-read-count":"Number of messages to retrieve from the storage and send to platform","max-records":"Maximum count of records that will be stored in one file","read-record-count":"Number of messages to retrieve from the storage and send to platform","max-records-count":"Maximum number of data entries in storage before sending to platform","ttl-check-hour":"How often will the Gateway check data for obsolescence","ttl-messages-day":"Maximum number of days that the storage will retain data","username-required-with-password":"Username required if password is specified",commands:"Commands for collecting additional statistic",attribute:"Statistic telemetry key",timeout:"Timeout for command executing",command:"The result of the command execution, will be used as the value for telemetry","check-device-activity":"Enables monitor the activity of each connected device","inactivity-timeout":"Time after whose the gateway will disconnect device","inactivity-period":"Periodicity of device activity check","minimal-pack-delay":"Delay between sending packs of messages (Decreasing this setting results in increased CPU usage)",qos:"Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)","server-port":"Network port on which GRPC server will listen for incoming connections.","grpc-keep-alive-timeout":"Maximum time the server should wait for a keepalive ping response before considering the connection dead.","grpc-keep-alive":"Duration between two successive keepalive ping messages when there is no active RPC call.","grpc-min-time-between-pings":"Minimum amount of time the server should wait between sending keepalive ping messages","grpc-max-pings-without-data":"Maximum number of keepalive ping messages that the server can send without receiving any data before it considers the connection dead.","grpc-min-ping-interval-without-data":"Minimum amount of time the server should wait between sending keepalive ping messages when there is no data being sent or received.","permit-without-calls":"Allow server to keep the GRPC connection alive even when there are no active RPC calls.","path-in-os":"Path in gateway os.",memory:"Your data will be stored in the in-memory queue, it is a fastest but no persistence guarantee.",file:"Your data will be stored in separated files and will be saved even after the gateway restart.",sqlite:"Your data will be stored in file based database. And will be saved even after the gateway restart.","opc-timeout":"Timeout in milliseconds for connecting to OPC-UA server.","security-policy":"Security Policy defines the security mechanisms to be applied.","scan-period":"Period in milliseconds to rescan the server.","sub-check-period":"Period to check the subscriptions in the OPC-UA server.","enable-subscription":"If true - the gateway will subscribe to interesting nodes and wait for data update and if false - the gateway will rescan OPC-UA server every scanPeriodInMillis.","show-map":"Show nodes on scanning.","method-name":"Name of method on OPC-UA server.",arguments:"Arguments for the method (will be overwritten by arguments from the RPC request).","min-pack-size-to-send":"Minimum package size for sending.","max-payload-size-bytes":"Maximum package size in bytes","poll-period":"Period in milliseconds to read data from nodes.","poll-period-required":"Poll period is required.","report-period-required":"Report period is required.","report-period-range":"Report period must be greater than 100.",socket:{"attribute-on-platform-required":"Attribute on platform is required","attribute-requests-type":"The type of requested attribute can be “shared” or “client.“","with-response":"Boolean flag that specifies whether to send a response back to platform.","key-telemetry":"Name for telemetry on platform.","key-attribute":"Name for attribute on platform."},modbus:{"bit-target-type":"The response type can be either an integer (1/0) or a boolean (True/False).",bit:"Specify the index of the bit to read from the array, or leave it blank to read the entire array.","max-bit":"The bit value must not exceed the objects count.","framer-type":"Type of a framer (Socket, RTU, or ASCII), if needed.",host:"Hostname or IP address of Modbus server.",port:"Modbus server port for connection.","unit-id":"Modbus slave ID.","connection-timeout":"Connection timeout (in seconds) for the Modbus server.","byte-order":"Byte order for reading data.","word-order":"Word order when reading multiple registers.",retries:"Retrying data transmission to the master. Acceptable values: true or false.","retries-on-empty":"Retry sending data to the master if the data is empty.","retries-on-invalid":"Retry sending data to the master if it fails.","poll-period":"Period in milliseconds to check attributes and telemetry on the slave.","connect-attempt-time":"A waiting period in milliseconds before establishing a connection to the master.","connect-attempt-count":"The number of connection attempts made through the gateway.","wait-after-failed-attempts":"A waiting period in milliseconds before attempting to send data to the master.","serial-port":"Serial port for connection.",baudrate:"Baud rate for the serial device.",stopbits:"The number of stop bits sent after each character in a message to indicate the end of the byte.",bytesize:"The number of bits in a byte of serial data. This can be one of 5, 6, 7, or 8.",parity:"The type of checksum used to verify data integrity. Options: (E)ven, (O)dd, (N)one.",strict:"Use inter-character timeout for baudrates ≤ 19200.","objects-count":"Depends on the selected type.",address:"Register address to verify.",key:"Key to be used as the attribute key for the platform instance.","data-keys":"For more information about function codes and data types click on help icon",modifier:"The retrieved value will be adjusted (by multiplying or dividing it) based on the specified modifier value."},bacnet:{"object-id":"The gateway object identifier in the BACnet network.","vendor-id":"The gateway vendor identifier in the BACnet network","apdu-length":"Maximal length of the APDU.",segmentation:"Segmentation type for transmitting large BACnet messages.","key-object-id":"Object id in the BACnet device.","property-id":"Property id in the BACnet device.","request-type":"“writeProperty” to write data and “readProperty” to read data.","request-timeout":"Timeout to wait the response from the BACnet device, milliseconds."}}}},et={"add-entry":"إضافة تكوين",advanced:"متقدم","checking-device-activity":"فحص نشاط الجهاز",command:"أوامر Docker","command-copied-message":"تم نسخ أمر Docker إلى الحافظة",configuration:"التكوين","connector-add":"إضافة موصل جديد","connector-enabled":"تمكين الموصل","connector-name":"اسم الموصل","connector-name-required":"اسم الموصل مطلوب.","connector-type":"نوع الموصل","connector-type-required":"نوع الموصل مطلوب.",connectors:"الموصلات","connectors-config":"تكوينات الموصلات","connectors-table-enabled":"ممكّن","connectors-table-name":"الاسم","connectors-table-type":"النوع","connectors-table-status":"الحالة","connectors-table-actions":"الإجراءات","connectors-table-key":"المفتاح","connectors-table-class":"الفئة","rpc-command-send":"إرسال","rpc-command-result":"الاستجابة","rpc-command-edit-params":"تحرير المعلمات","gateway-configuration":"تكوين عام","docker-label":"استخدم التعليمات التالية لتشغيل IoT Gateway في Docker compose مع بيانات اعتماد للجهاز المحدد","install-docker-compose":"استخدم التعليمات لتنزيل وتثبيت وإعداد docker compose","download-configuration-file":"تنزيل ملف التكوين","download-docker-compose":"تنزيل docker-compose.yml لبوابتك","launch-gateway":"تشغيل البوابة","launch-docker-compose":"بدء تشغيل البوابة باستخدام الأمر التالي في الطرفية من المجلد الذي يحتوي على ملف docker-compose.yml","create-new-gateway":"إنشاء بوابة جديدة","create-new-gateway-text":"هل أنت متأكد أنك تريد إنشاء بوابة جديدة باسم: '{{gatewayName}}'؟","created-time":"وقت الإنشاء","configuration-delete-dialog-header":"سيتم حذف التكوينات","configuration-delete-dialog-body":"يمكن تعطيل التكوين عن بُعد فقط إذا كان هناك وصول جسدي إلى البوابة. ستتم حذف جميع التكوينات السابقة.

\n لتعطيل التكوين، أدخل اسم البوابة أدناه","configuration-delete-dialog-input":"اسم البوابة","configuration-delete-dialog-input-required":"اسم البوابة إلزامي","configuration-delete-dialog-confirm":"إيقاف التشغيل",delete:"حذف التكوين","download-tip":"تنزيل ملف التكوين","drop-file":"أفلق الملف هنا أو",gateway:"البوابة","gateway-exists":"الجهاز بنفس الاسم موجود بالفعل.","gateway-name":"اسم البوابة","gateway-name-required":"اسم البوابة مطلوب.","gateway-saved":"تم حفظ تكوين البوابة بنجاح.",grpc:"GRPC","grpc-keep-alive-timeout":"مهلة البقاء على قيد الحياة (بالمللي ثانية)","grpc-keep-alive-timeout-required":"مهلة البقاء على قيد الحياة مطلوبة","grpc-keep-alive-timeout-min":"مهلة البقاء على قيد الحياة لا يمكن أن تكون أقل من 1","grpc-keep-alive-timeout-pattern":"مهلة البقاء على قيد الحياة غير صالحة","grpc-keep-alive":"البقاء على قيد الحياة (بالمللي ثانية)","grpc-keep-alive-required":"البقاء على قيد الحياة مطلوب","grpc-keep-alive-min":"البقاء على قيد الحياة لا يمكن أن يكون أقل من 1","grpc-keep-alive-pattern":"البقاء على قيد الحياة غير صالح","grpc-min-time-between-pings":"الحد الأدنى للوقت بين البينغات (بالمللي ثانية)","grpc-min-time-between-pings-required":"الحد الأدنى للوقت بين البينغات مطلوب","grpc-min-time-between-pings-min":"الحد الأدنى للوقت بين البينغات لا يمكن أن يكون أقل من 1","grpc-min-time-between-pings-pattern":"الحد الأدنى للوقت بين البينغات غير صالح","grpc-min-ping-interval-without-data":"الحد الأدنى لفاصل البينغ بدون بيانات (بالمللي ثانية)","grpc-min-ping-interval-without-data-required":"الحد الأدنى لفاصل البينغ بدون بيانات مطلوب","grpc-min-ping-interval-without-data-min":"الحد الأدنى لفاصل البينغ بدون بيانات لا يمكن أن يكون أقل من 1","grpc-min-ping-interval-without-data-pattern":"الحد الأدنى لفاصل البينغ بدون بيانات غير صالح","grpc-max-pings-without-data":"الحد الأقصى لعدد البينغات بدون بيانات","grpc-max-pings-without-data-required":"الحد الأقصى لعدد البينغات بدون بيانات مطلوب","grpc-max-pings-without-data-min":"الحد الأقصى لعدد البينغات بدون بيانات لا يمكن أن يكون أقل من 1","grpc-max-pings-without-data-pattern":"الحد الأقصى لعدد البينغات بدون بيانات غير صالح","inactivity-check-period-seconds":"فترة فحص الخمول (بالثواني)","inactivity-check-period-seconds-required":"فترة فحص الخمول مطلوبة","inactivity-check-period-seconds-min":"فترة فحص الخمول لا يمكن أن تكون أقل من 1","inactivity-check-period-seconds-pattern":"فترة فحص الخمول غير صالحة","inactivity-timeout-seconds":"فترة الخمول (بالثواني)","inactivity-timeout-seconds-required":"فترة الخمول مطلوبة","inactivity-timeout-seconds-min":"فترة الخمول لا يمكن أن تكون أقل من 1","inactivity-timeout-seconds-pattern":"فترة الخمول غير صالحة","json-parse":"JSON غير صالح.","json-required":"الحقل لا يمكن أن يكون فارغًا.",logs:{logs:"السجلات",days:"أيام",hours:"ساعات",minutes:"دقائق",seconds:"ثواني","date-format":"تنسيق التاريخ","date-format-required":"تنسيق التاريخ مطلوب","log-format":"تنسيق السجل","log-type":"نوع السجل","log-format-required":"تنسيق السجل مطلوب",remote:"التسجيل عن بُعد","remote-logs":"السجلات عن بُعد",local:"التسجيل المحلي",level:"مستوى السجل","file-path":"مسار الملف","file-path-required":"مسار الملف مطلوب","saving-period":"فترة حفظ السجل","saving-period-min":"فترة حفظ السجل لا يمكن أن تكون أقل من 1","saving-period-required":"فترة حفظ السجل مطلوبة","backup-count":"عدد النسخ الاحتياطية","backup-count-min":"عدد النسخ الاحتياطية لا يمكن أن يكون أقل من 1","backup-count-required":"عدد النسخ الاحتياطية مطلوب"},"min-pack-send-delay":"الحد الأدنى لتأخير إرسال الحزمة (بالمللي ثانية)","min-pack-send-delay-required":"الحد الأدنى لتأخير إرسال الحزمة مطلوب","min-pack-send-delay-min":"لا يمكن أن يكون الحد الأدنى لتأخير إرسال الحزمة أقل من 0","no-connectors":"لا توجد موصلات","no-data":"لا توجد تكوينات","no-gateway-found":"لم يتم العثور على بوابة.","no-gateway-matching":"'{{item}}' غير موجود.","path-logs":"مسار إلى ملفات السجل","path-logs-required":"المسار مطلوب.","permit-without-calls":"البقاء على الحياة يسمح بدون مكالمات",remote:"التكوين عن بُعد","remote-logging-level":"مستوى التسجيل","remove-entry":"إزالة التكوين","remote-shell":"قشرة عن بُعد","remote-configuration":"التكوين عن بُعد",other:"آخر","save-tip":"حفظ ملف التكوين","security-type":"نوع الأمان","security-types":{"access-token":"رمز الوصول","username-password":"اسم المستخدم وكلمة المرور",tls:"TLS","tls-access-token":"TLS + رمز الوصول","tls-private-key":"TLS + المفتاح الخاص"},"server-port":"منفذ الخادم",statistics:{statistic:"إحصائية",statistics:"الإحصائيات","statistic-commands-empty":"لا تتوفر إحصائيات",commands:"الأوامر","send-period":"فترة إرسال الإحصائيات (بالثواني)","send-period-required":"فترة إرسال الإحصائيات مطلوبة","send-period-min":"لا يمكن أن تكون فترة إرسال الإحصائيات أقل من 60","send-period-pattern":"فترة إرسال الإحصائيات غير صالحة","check-connectors-configuration":"فترة فحص تكوين الموصلات (بالثواني)","check-connectors-configuration-required":"فترة فحص تكوين الموصلات مطلوبة","check-connectors-configuration-min":"لا يمكن أن تكون فترة فحص تكوين الموصلات أقل من 1","check-connectors-configuration-pattern":"فترة فحص تكوين الموصلات غير صالحة",add:"إضافة أمر",timeout:"المهلة","timeout-required":"المهلة مطلوبة","timeout-min":"لا يمكن أن تكون المهلة أقل من 1","timeout-pattern":"المهلة غير صالحة","attribute-name":"اسم السمة","attribute-name-required":"اسم السمة مطلوب",command:"الأمر","command-required":"الأمر مطلوب","command-pattern":"الأمر غير صالح",remove:"إزالة الأمر"},storage:"التخزين","storage-max-file-records":"السجلات القصوى في الملف","storage-max-files":"الحد الأقصى لعدد الملفات","storage-max-files-min":"الحد الأدنى هو 1.","storage-max-files-pattern":"العدد غير صالح.","storage-max-files-required":"العدد مطلوب.","storage-max-records":"السجلات القصوى في التخزين","storage-max-records-min":"الحد الأدنى لعدد السجلات هو 1.","storage-max-records-pattern":"العدد غير صالح.","storage-max-records-required":"السجلات القصوى مطلوبة.","storage-read-record-count":"عدد قراءة السجلات في التخزين","storage-read-record-count-min":"الحد الأدنى لعدد السجلات هو 1.","storage-read-record-count-pattern":"العدد غير صالح.","storage-read-record-count-required":"عدد قراءة السجلات مطلوب.","storage-max-read-record-count":"الحد الأقصى لعدد قراءة السجلات في التخزين","storage-max-read-record-count-min":"الحد الأدنى لعدد السجلات هو 1.","storage-max-read-record-count-pattern":"العدد غير صالح.","storage-max-read-record-count-required":"عدد القراءة القصوى مطلوب.","storage-data-folder-path":"مسار مجلد البيانات","storage-data-folder-path-required":"مسار مجلد البيانات مطلوب.","storage-pack-size":"الحد الأقصى لحجم حزمة الحدث","storage-pack-size-min":"الحد الأدنى هو 1.","storage-pack-size-pattern":"العدد غير صالح.","storage-pack-size-required":"الحجم الأقصى لحزمة الحدث مطلوب.","storage-path":"مسار التخزين","storage-path-required":"مسار التخزين مطلوب.","storage-type":"نوع التخزين","storage-types":{"file-storage":"تخزين الملفات","memory-storage":"تخزين الذاكرة",sqlite:"SQLITE"},thingsboard:"ثينغزبورد",general:"عام","thingsboard-host":"مضيف ثينغزبورد","thingsboard-host-required":"المضيف مطلوب.","thingsboard-port":"منفذ ثينغزبورد","thingsboard-port-max":"الحد الأقصى لرقم المنفذ هو 65535.","thingsboard-port-min":"الحد الأدنى لرقم المنفذ هو 1.","thingsboard-port-pattern":"المنفذ غير صالح.","thingsboard-port-required":"المنفذ مطلوب.",tidy:"ترتيب","tidy-tip":"ترتيب تكوين JSON","title-connectors-json":"تكوين موصل {{typeName}}","tls-path-ca-certificate":"المسار إلى شهادة CA على البوابة","tls-path-client-certificate":"المسار إلى شهادة العميل على البوابة","messages-ttl-check-in-hours":"فحص TTL الرسائل بالساعات","messages-ttl-check-in-hours-required":"يجب تحديد فحص TTL الرسائل بالساعات.","messages-ttl-check-in-hours-min":"الحد الأدنى هو 1.","messages-ttl-check-in-hours-pattern":"الرقم غير صالح.","messages-ttl-in-days":"TTL الرسائل بالأيام","messages-ttl-in-days-required":"يجب تحديد TTL الرسائل بالأيام.","messages-ttl-in-days-min":"الحد الأدنى هو 1.","messages-ttl-in-days-pattern":"الرقم غير صالح.","mqtt-qos":"جودة الخدمة (QoS)","mqtt-qos-required":"جودة الخدمة (QoS) مطلوبة","mqtt-qos-range":"تتراوح قيم جودة الخدمة (QoS) من 0 إلى 1","tls-path-private-key":"المسار إلى المفتاح الخاص على البوابة","toggle-fullscreen":"تبديل وضع ملء الشاشة","transformer-json-config":"تكوين JSON*","update-config":"إضافة/تحديث تكوين JSON",hints:{"remote-configuration":"يمكنك تمكين التكوين وإدارة البوابة عن بُعد","remote-shell":"يمكنك تمكين التحكم البعيد في نظام التشغيل مع البوابة من عنصر واجهة المستخدم قشرة عن بُعد",host:"اسم المضيف أو عنوان IP لخادم ثينغزبورد",port:"منفذ خدمة MQTT على خادم ثينغزبورد",token:"رمز الوصول للبوابة من خادم ثينغزبورد","client-id":"معرف عميل MQTT للبوابة من خادم ثينغزبورد",username:"اسم المستخدم MQTT للبوابة من خادم ثينغزبورد",password:"كلمة المرور MQTT للبوابة من خادم ثينغزبورد","ca-cert":"المسار إلى ملف شهادة CA","date-form":"تنسيق التاريخ في رسالة السجل","data-folder":"المسار إلى المجلد الذي سيحتوي على البيانات (نسبي أو مطلق)","log-format":"تنسيق رسالة السجل","remote-log":"يمكنك تمكين التسجيل البعيد وقراءة السجلات من البوابة","backup-count":"إذا كان عدد النسخ الاحتياطية > 0، عند عملية تدوير، لا يتم الاحتفاظ بأكثر من عدد النسخ الاحتياطية المحددة - يتم حذف الأقدم",storage:"يوفر تكوينًا لحفظ البيانات الواردة قبل إرسالها إلى المنصة","max-file-count":"العدد الأقصى لعدد الملفات التي سيتم إنشاؤها","max-read-count":"عدد الرسائل للحصول عليها من التخزين وإرسالها إلى ثينغزبورد","max-records":"العدد الأقصى للسجلات التي ستخزن في ملف واحد","read-record-count":"عدد الرسائل للحصول عليها من التخزين وإرسالها إلى ثينغزبورد","max-records-count":"العدد الأقصى للبيانات في التخزين قبل إرسالها إلى ثينغزبورد","ttl-check-hour":"كم مرة سيتحقق البوابة من البيانات القديمة","ttl-messages-day":"الحد الأقصى لعدد الأيام التي ستحتفظ فيها التخزين بالبيانات",commands:"الأوامر لجمع الإحصائيات الإضافية",attribute:"مفتاح تلقي الإحصائيات",timeout:"مهلة زمنية لتنفيذ الأمر",command:"سيتم استخدام نتيجة تنفيذ الأمر كقيمة لتلقي الإحصائيات","check-device-activity":"يمكنك تمكين مراقبة نشاط كل جهاز متصل","inactivity-timeout":"الوقت بعد الذي ستفصل البوابة الجهاز","inactivity-period":"تكرار فحص نشاط الجهاز","minimal-pack-delay":"التأخير بين إرسال حزم الرسائل (يؤدي تقليل هذا الإعداد إلى زيادة استخدام وحدة المعالجة المركزية)",qos:"جودة الخدمة في رسائل MQTT (0 - على الأكثر مرة واحدة، 1 - على الأقل مرة واحدة)","server-port":"منفذ الشبكة الذي سيستمع فيه خادم GRPC للاستفسارات الواردة.","grpc-keep-alive-timeout":"الحد الأقصى للوقت الذي يجب أن ينتظره الخادم لاستجابة رسالة الحفاظ على الاتصال قبل اعتبار الاتصال ميتًا.","grpc-keep-alive":"المدة بين رسائل حفظ الاتصال المتعاقبة عند عدم وجود استدعاء RPC نشط.","grpc-min-time-between-pings":"الحد الأدنى للوقت الذي يجب فيه أن ينتظر الخادم بين إرسال رسائل حفظ الاتصال","grpc-max-pings-without-data":"الحد الأقصى لعدد رسائل حفظ الاتصال التي يمكن للخادم إرسالها دون تلقي أي بيانات قبل اعتبار الاتصال ميتًا.","grpc-min-ping-interval-without-data":"الحد الأدنى للوقت الذي يجب فيه أن ينتظر الخادم بين إرسال رسائل حفظ الاتصال عند عدم إرسال أو استلام بيانات.","permit-without-calls":"السماح للخادم بإبقاء اتصال GRPC حيًا حتى عندما لا تكون هناك استدعاءات RPC نشطة."}},tt={"add-entry":"Afegir configuració","connector-add":"Afegir conector","connector-enabled":"Activar conector","connector-name":"Nom conector","connector-name-required":"Cal nom conector.","connector-type":"Tipus conector","connector-type-required":"Cal tipus conector.",connectors:"Configuració de conectors","create-new-gateway":"Crear un gateway nou","create-new-gateway-text":"Crear un nou gateway amb el nom: '{{gatewayName}}'?",delete:"Esborrar configuració","download-tip":"Descarregar fitxer de configuració",gateway:"Gateway","gateway-exists":"Ja existeix un dispositiu amb el mateix nom.","gateway-name":"Nom de Gateway","gateway-name-required":"Cal un nom de gateway.","gateway-saved":"Configuració de gateway gravada satisfactòriament.","json-parse":"JSON no vàlid.","json-required":"El camp no pot ser buit.","no-connectors":"No hi ha conectors","no-data":"No hi ha configuracions","no-gateway-found":"No s'ha trobat cap gateway.","no-gateway-matching":" '{{item}}' no trobat.","path-logs":"Ruta als fitxers de log","path-logs-required":"Cal ruta.",remote:"Configuració remota","remote-logging-level":"Nivel de logging","remove-entry":"Esborrar configuració","save-tip":"Gravar fitxer de configuració","security-type":"Tipus de seguretat","security-types":{"access-token":"Token d'accés",tls:"TLS"},storage:"Grabació","storage-max-file-records":"Número màxim de registres en fitxer","storage-max-files":"Número màxim de fitxers","storage-max-files-min":"El número mínim és 1.","storage-max-files-pattern":"Número no vàlid.","storage-max-files-required":"Cal número.","storage-max-records":"Màxim de registres en el magatzem","storage-max-records-min":"El número mínim és 1.","storage-max-records-pattern":"Número no vàlid.","storage-max-records-required":"Cal número.","storage-pack-size":"Mida màxim de esdeveniments","storage-pack-size-min":"El número mínim és 1.","storage-pack-size-pattern":"Número no vàlid.","storage-pack-size-required":"Cal número.","storage-path":"Ruta de magatzem","storage-path-required":"Cal ruta de magatzem.","storage-type":"Tipus de magatzem","storage-types":{"file-storage":"Magatzem fitxer","memory-storage":"Magatzem en memoria"},thingsboard:"ThingsBoard","thingsboard-host":"Host ThingsBoard","thingsboard-host-required":"Cal Host.","thingsboard-port":"Port ThingsBoard","thingsboard-port-max":"El port màxim és 65535.","thingsboard-port-min":"El port mínim és 1.","thingsboard-port-pattern":"Port no vàlid.","thingsboard-port-required":"Cal port.",tidy:"Endreçat","tidy-tip":"Endreçat JSON","title-connectors-json":"Configuració conector {{typeName}}","tls-path-ca-certificate":"Ruta al certificat CA al gateway","tls-path-client-certificate":"Ruta al certificat client al gateway","tls-path-private-key":"Ruta a la clau privada al gateway","toggle-fullscreen":"Pantalla completa fullscreen","transformer-json-config":"Configuració JSON*","update-config":"Afegir/actualizar configuració JSON"},nt={"add-entry":"Přidat konfiguraci","connector-add":"Přidat nový konektor","connector-enabled":"Povolit konektor","connector-name":"Název konektoru","connector-name-required":"Název konektoru je povinný.","connector-type":"Typ konektoru","connector-type-required":"Typ konektoru je povinný.",connectors:"Konfigurace konektoru","create-new-gateway":"Vytvořit novou bránu","create-new-gateway-text":"Jste si jisti, že chcete vytvořit novou bránu s názvem: '{{gatewayName}}'?",delete:"Smazat konfiguraci","download-tip":"Stáhnout soubor konfigurace",gateway:"Brána","gateway-exists":"Zařízení se shodným názvem již existuje.","gateway-name":"Název brány","gateway-name-required":"Název brány je povinný.","gateway-saved":"Konfigurace brány byla úspěšně uložena.","json-parse":"Neplatný JSON.","json-required":"Pole nemůže být prázdné.","no-connectors":"Žádné konektory","no-data":"Žádné konfigurace","no-gateway-found":"Žádné brány nebyly nalezeny.","no-gateway-matching":" '{{item}}' nenalezena.","path-logs":"Cesta k souborům logu","path-logs-required":"Cesta je povinná.",remote:"Vzdálená konfigurace","remote-logging-level":"Úroveň logování","remove-entry":"Odstranit konfiguraci","save-tip":"Uložit soubor konfigurace","security-type":"Typ zabezpečení","security-types":{"access-token":"Přístupový token",tls:"TLS"},storage:"Úložiště","storage-max-file-records":"Maximální počet záznamů v souboru","storage-max-files":"Maximální počet souborů","storage-max-files-min":"Minimální počet je 1.","storage-max-files-pattern":"Počet není platný.","storage-max-files-required":"Počet je povinný.","storage-max-records":"Maximální počet záznamů v úložišti","storage-max-records-min":"Minimální počet záznamů je 1.","storage-max-records-pattern":"Počet není platný.","storage-max-records-required":"Maximální počet záznamů je povinný.","storage-pack-size":"Maximální velikost souboru událostí","storage-pack-size-min":"Minimální počet je 1.","storage-pack-size-pattern":"Počet není platný.","storage-pack-size-required":"Maximální velikost souboru událostí je povinná.","storage-path":"Cesta k úložišti","storage-path-required":"Cesta k úložišti je povinná.","storage-type":"Typ úložiště","storage-types":{"file-storage":"Soubor","memory-storage":"Paměť"},thingsboard:"ThingsBoard","thingsboard-host":"Host ThingsBoard","thingsboard-host-required":"Host je povinný.","thingsboard-port":"Port ThingsBoard","thingsboard-port-max":"Maximální číslo portu je 65535.","thingsboard-port-min":"Minimální číslo portu je 1.","thingsboard-port-pattern":"Port není platný.","thingsboard-port-required":"Port je povinný.",tidy:"Uspořádat","tidy-tip":"Uspořádat JSON konfiguraci","title-connectors-json":"Konfigurace {{typeName}} konektoru","tls-path-ca-certificate":"Cesta k certifikátu CA brány","tls-path-client-certificate":"Cesta k certifikátu klienta brány","tls-path-private-key":"Cesta k privátnímu klíči brány","toggle-fullscreen":"Přepnout do režimu celé obrazovky","transformer-json-config":"JSON* konfigurace","update-config":"Přidat/editovat JSON konfiguraci"},at={"add-entry":"Tilføj konfiguration","connector-add":"Tilføj ny stikforbindelse","connector-enabled":"Aktivér stikforbindelse","connector-name":"Navn på stikforbindelse","connector-name-required":"Navn på stikforbindelse er påkrævet.","connector-type":"Stikforbindelsestype","connector-type-required":"Stikforbindelsestype er påkrævet.",connectors:"Konfiguration af stikforbindelser","create-new-gateway":"Opret en ny gateway","create-new-gateway-text":"",delete:"Slet konfiguration","download-tip":"Download konfigurationsfil",gateway:"Gateway","gateway-exists":"Enhed med samme navn findes allerede.","gateway-name":"Gateway-navn","gateway-name-required":"Gateway-navn er påkrævet.","gateway-saved":"Gateway-konfigurationen blev gemt.","json-parse":"Ikke gyldig JSON.","json-required":"Feltet må ikke være tomt.","no-connectors":"Ingen stikforbindelser","no-data":"Ingen konfigurationer","no-gateway-found":"Ingen gateway fundet.","no-gateway-matching":"","path-logs":"Sti til logfiler","path-logs-required":"Sti er påkrævet.",remote:"Fjernkonfiguration","remote-logging-level":"Logføringsniveau","remove-entry":"Fjern konfiguration","save-tip":"Gem konfigurationsfil","security-type":"Sikkerhedstype","security-types":{"access-token":"Adgangstoken",tls:"TLS"},storage:"Lagring","storage-max-file-records":"Maks. antal poster i fil","storage-max-files":"Maks. antal filer","storage-max-files-min":"Min. antal er 1.","storage-max-files-pattern":"Antal er ikke gyldigt.","storage-max-files-required":"Antal er påkrævet.","storage-max-records":"Maks. antal poster i lagring","storage-max-records-min":"Min. antal poster er 1.","storage-max-records-pattern":"Antal er ikke gyldigt.","storage-max-records-required":"Maks. antal poster er påkrævet.","storage-pack-size":"Maks. antal pakkestørrelse for begivenhed","storage-pack-size-min":"Min. antal er 1.","storage-pack-size-pattern":"Antal er ikke gyldigt.","storage-pack-size-required":"Maks. antal pakkestørrelse for begivenhed er påkrævet.","storage-path":"Lagringssti","storage-path-required":"Lagringssti er påkrævet.","storage-type":"Lagringstype","storage-types":{"file-storage":"Lagring af filter","memory-storage":"Lagring af hukommelse"},thingsboard:"ThingsBoard","thingsboard-host":"ThingsBoard-vært","thingsboard-host-required":"Vært er påkrævet.","thingsboard-port":"ThingsBoard-port","thingsboard-port-max":"Maks. portnummer er 65535.","thingsboard-port-min":"Min. portnummer er 1.","thingsboard-port-pattern":"Port er ikke gyldig.","thingsboard-port-required":"Port er påkrævet.",tidy:"Tidy","tidy-tip":"Tidy konfig. JSON","title-connectors-json":"","tls-path-ca-certificate":"Sti til CA-certifikat på gateway","tls-path-client-certificate":"Sti til klientcertifikat på gateway","tls-path-private-key":"Sti til privat nøgle på gateway","toggle-fullscreen":"Skift til fuld skærm","transformer-json-config":"Konfiguration JSON*","update-config":"Tilføj/opdater konfiguration JSON"},rt={"add-entry":"Añadir configuración",advanced:"Avanzado","checking-device-activity":"Probando actividad de dispositivo",command:"Comandos Docker","command-copied-message":"Se han copiado los comandos al portapapeles",configuration:"Configuración","connector-add":"Añadir conector","connector-enabled":"Activar conector","connector-name":"Nombre conector","connector-name-required":"Se requiere nombre conector.","connector-type":"Tipo conector","connector-type-required":"Se requiere tipo conector.",connectors:"Conectores","connectors-config":"Configuración de conectores","connectors-table-enabled":"Enabled","connectors-table-name":"Nombre","connectors-table-type":"Tipo","connectors-table-status":"Estado","connectors-table-actions":"Acciones","connectors-table-key":"Clave","connectors-table-class":"Clase","rpc-command-send":"Enviar","rpc-command-result":"Resultado","rpc-command-edit-params":"Editar parametros","gateway-configuration":"Configuración General","create-new-gateway":"Crear un gateway nuevo","create-new-gateway-text":"Crear un nuevo gateway con el nombre: '{{gatewayName}}'?","created-time":"Hora de creación","configuration-delete-dialog-header":"Las configuraciones se borrarán","configuration-delete-dialog-body":"Sólo es posible desactivar la configuración remota, si hay acceso físico al gateway. Se borrarán todas las configuraciones previas.

\nPara desactivar la configuración, introduce el nombre del gateway aquí","configuration-delete-dialog-input":"Nombre Gateway","configuration-delete-dialog-input-required":"Se requiere nombre de gateway","configuration-delete-dialog-confirm":"Desactivar",delete:"Borrar configuración","download-tip":"Descargar fichero de configuración","drop-file":"Arrastra un fichero o",gateway:"Gateway","gateway-exists":"Ya existe un dispositivo con el mismo nombre.","gateway-name":"Nombre de Gateway","gateway-name-required":"Se requiere un nombre de gateway.","gateway-saved":"Configuración de gateway grabada satisfactoriamente.",grpc:"GRPC","grpc-keep-alive-timeout":"Timeout Keep alive (en ms)","grpc-keep-alive-timeout-required":"Se requiere Timeout Keep alive","grpc-keep-alive-timeout-min":"El valor no puede ser menor de 1","grpc-keep-alive-timeout-pattern":"El valor no es válido","grpc-keep-alive":"Keep alive (en ms)","grpc-keep-alive-required":"Se requiere keep alive","grpc-keep-alive-min":"El valor no puede ser menor de 1","grpc-keep-alive-pattern":"El valor keep alive no es válido","grpc-min-time-between-pings":"Tiempo mínimo entre pings (en ms)","grpc-min-time-between-pings-required":"Se requiere tiempo mínimo entre pings","grpc-min-time-between-pings-min":"El valor no puede ser menor de 1","grpc-min-time-between-pings-pattern":"El valor de tiempo mínimo entre pings no es válido","grpc-min-ping-interval-without-data":"Intervalo mínimo sin datos (en ms)","grpc-min-ping-interval-without-data-required":"Se requiere intervalo","grpc-min-ping-interval-without-data-min":"El valor no puede ser menor de 1","grpc-min-ping-interval-without-data-pattern":"El valor de intervalo no es válido","grpc-max-pings-without-data":"Intervalo máximo sin datos","grpc-max-pings-without-data-required":"Se requiere intervalo","grpc-max-pings-without-data-min":"El valor no puede ser menor de 1","grpc-max-pings-without-data-pattern":"El valor de intervalo no es válido","inactivity-check-period-seconds":"Periodo de control de inactividad (en segundos)","inactivity-check-period-seconds-required":"Se requiere periodo","inactivity-check-period-seconds-min":"El valor no puede ser menor de 1","inactivity-check-period-seconds-pattern":"El valor del periodo no es válido","inactivity-timeout-seconds":"Timeout de inactividad (en segundos)","inactivity-timeout-seconds-required":"Se requiere timeout de inactividad","inactivity-timeout-seconds-min":"El valor no puede ser menor de 1","inactivity-timeout-seconds-pattern":"El valor de inactividad no es válido","json-parse":"JSON no válido.","json-required":"El campo no puede estar vacío.",logs:{logs:"Registros",days:"días",hours:"horas",minutes:"minutos",seconds:"segundos","date-format":"Formato de fecha","date-format-required":"Se requiere formato de fecha","log-format":"Formato de registro","log-type":"Tipo de registro","log-format-required":"Se requiere tipo de registro",remote:"Registro remoto","remote-logs":"Registro remoto",local:"Registro local",level:"Nivel de registro","file-path":"Ruta de fichero","file-path-required":"Se requiere ruta de fichero","saving-period":"Periodo de guardado de registros","saving-period-min":"El periodo no puede ser menor que 1","saving-period-required":"Se requiere periodo de guardado","backup-count":"Número de backups","backup-count-min":"El número de backups no puede ser menor que 1","backup-count-required":"Se requiere número de backups"},"min-pack-send-delay":"Tiempo de espera, envío de paquetes (en ms)","min-pack-send-delay-required":"Se requiere tiempo de espera","min-pack-send-delay-min":"El tiempo de espera no puede ser menor que 0","no-connectors":"No hay conectores","no-data":"No hay configuraciones","no-gateway-found":"No se ha encontrado ningún gateway.","no-gateway-matching":" '{{item}}' no encontrado.","path-logs":"Ruta a los archivos de log","path-logs-required":"Ruta requerida.","permit-without-calls":"Permitir Keep alive si llamadas",remote:"Configuración remota","remote-logging-level":"Nivel de logging","remove-entry":"Borrar configuración","remote-shell":"Consola remota","remote-configuration":"Configuración remota",other:"otros","save-tip":"Grabar fichero de configuración","security-type":"Tipo de seguridad","security-types":{"access-token":"Tóken de acceso","username-password":"Usuario y contraseña",tls:"TLS","tls-access-token":"TLS + Tóken de acceso","tls-private-key":"TLS + Clave privada"},"server-port":"Puerto del servidor",statistics:{statistic:"Estadística",statistics:"Estadísticas","statistic-commands-empty":"No hay estadísticas",commands:"Comandos","send-period":"Periodo de envío de estadísticas (en segundos)","send-period-required":"Se requiere periodo de envío","send-period-min":"El periodo de envío no puede ser menor de 60","send-period-pattern":"El periodo de envío no es válido","check-connectors-configuration":"Revisar configuración de conectores (en segundos)","check-connectors-configuration-required":"Se requiere un valor","check-connectors-configuration-min":"El valor no puede ser menor de 1","check-connectors-configuration-pattern":"La configuración no es válida",add:"Añadir comando",timeout:"Timeout","timeout-required":"Se requiere timeout","timeout-min":"El timeout no puede ser menor de 1","timeout-pattern":"El timeout no es válido","attribute-name":"Nombre de atributo","attribute-name-required":"Se requiere nombre de atributo",command:"Comando","command-required":"Se requiere comando",remove:"Borrar comando"},storage:"Grabación","storage-max-file-records":"Número máximo de registros en fichero","storage-max-files":"Número máximo de ficheros","storage-max-files-min":"El número mínimo es 1.","storage-max-files-pattern":"Número no válido.","storage-max-files-required":"Se requiere número.","storage-max-records":"Máximo de registros en el almacén","storage-max-records-min":"El número mínimo es 1.","storage-max-records-pattern":"Número no válido.","storage-max-records-required":"Se requiere número.","storage-read-record-count":"Leer número de entradas en almacén","storage-read-record-count-min":"El número mínimo de entradas es 1.","storage-read-record-count-pattern":"El número no es válido.","storage-read-record-count-required":"Se requiere número de entradas.","storage-max-read-record-count":"Número máximo de entradas en el almacén","storage-max-read-record-count-min":"El número mínimo es 1.","storage-max-read-record-count-pattern":"El número no es válido","storage-max-read-record-count-required":"Se requiere número máximo de entradas.","storage-data-folder-path":"Ruta de carpeta de datos","storage-data-folder-path-required":"Se requiere ruta.","storage-pack-size":"Tamaño máximo de eventos","storage-pack-size-min":"El número mínimo es 1.","storage-pack-size-pattern":"Número no válido.","storage-pack-size-required":"Se requiere número.","storage-path":"Ruta de almacén","storage-path-required":"Se requiere ruta de almacén.","storage-type":"Tipo de almacén","storage-types":{"file-storage":"Almacén en fichero","memory-storage":"Almacén en memoria",sqlite:"SQLITE"},thingsboard:"ThingsBoard",general:"General","thingsboard-host":"Host ThingsBoard","thingsboard-host-required":"Se requiere Host.","thingsboard-port":"Puerto ThingsBoard","thingsboard-port-max":"El puerto máximo es 65535.","thingsboard-port-min":"El puerto mínimo es 1.","thingsboard-port-pattern":"Puerto no válido.","thingsboard-port-required":"Se requiere puerto.",tidy:"Tidy","tidy-tip":"Tidy JSON","title-connectors-json":"Configuración conector {{typeName}}","tls-path-ca-certificate":"Ruta al certificado CA en el gateway","tls-path-client-certificate":"Ruta al certificado cliente en el gateway","messages-ttl-check-in-hours":"Comprobación de TTL de mensajes en horas","messages-ttl-check-in-hours-required":"Campo requerido.","messages-ttl-check-in-hours-min":"El mínimo es 1.","messages-ttl-check-in-hours-pattern":"El número no es válido.","messages-ttl-in-days":"TTL (Time to live) de mensages en días","messages-ttl-in-days-required":"Se requiere TTL de mensajes.","messages-ttl-in-days-min":"El número mínimo es 1.","messages-ttl-in-days-pattern":"El número no es válido.","mqtt-qos":"QoS","mqtt-qos-required":"Se requiere QoS","mqtt-qos-range":"El rango de valores es desde 0 a 1","tls-path-private-key":"Ruta a la clave privada en el gateway","toggle-fullscreen":"Pantalla completa fullscreen","transformer-json-config":"Configuración JSON*","update-config":"Añadir/actualizar configuración JSON",hints:{"remote-configuration":"Habilita la administración y configuración remota del gateway","remote-shell":"Habilita el control remoto del sistema operativo del gateway desde el widget terminal remoto",host:"Hostname o dirección IP del servidor Thingsboard",port:"Puerto del servicio MQTT en el servidor Thingsboard",token:"Access token para el gateway","client-id":"ID de cliente MQTT para el gateway",username:"Usuario MQTT para el gateway",password:"Contraseña MQTT para el gateway","ca-cert":"Ruta al fichero del certificado CA","date-form":"Formato de fecha en los mensajes de registro","data-folder":"Ruta a la carpeta que contendrá los datos (Relativa o absoluta)","log-format":"Formato de mensajes en registro","remote-log":"Habilita el registro remoto y la posterior lectura desde el gateway","backup-count":"Si el contaje de copias de seguridad es mayor que 0, cuando se realice una renovación, no se conservan más que los archivos de recuento de copias de seguridad, los más antíguos se eliminarán",storage:"Provee la configuración para el grabado de datos entrantes antes de que se envíen a la plataforma","max-file-count":"Número máximo de ficheros que se crearán","max-read-count":"Númeo máximo de mensajes a obtener desde el disco y enviados a la plataforma","max-records":"Número máximo de registros que se guardarán en un solo fichero","read-record-count":"Número de mensages a obtener desde el almacenamiento y enviados a la plataforma","max-records-count":"Número máximo de datos en almacenamiento antes de enviar a la plataforma","ttl-check-hour":"Con qué frecuencia el gateway comprobará si los datos están obsoletos","ttl-messages-day":"Número máximo de días para la retención de datos en el almacén",commands:"Comandos para recoger estadísticas adicionales",attribute:"Clave de telemetría para estadísticas",timeout:"Timeout para la ejecución de comandos",command:"El resultado de la ejecución del comando, se usará como valor para la telemetría","check-device-activity":"Habilita la monitorización de cada uno de los dispositivos conectados","inactivity-timeout":"Tiempo tras que el gateway desconectará el dispositivo","inactivity-period":"Periodo de monitorización de actividad en el dispositivo","minimal-pack-delay":"Tiempo de espera entre envío de paquetes de mensajes (Un valor muy bajo, resultará en un aumento de uso de la CPU en el gateway)",qos:"Quality of Service en los mensajes MQTT (0 - at most once, 1 - at least once)","server-port":"Puerto de red en el cual el servidor GRPC escuchará conexiones entrantes.","grpc-keep-alive-timeout":"Tiempo máximo, el cual el servidor esperara un ping keepalive antes de considerar la conexión terminada.","grpc-keep-alive":"Duración entre dos pings keepalive cuando no haya llamada RPC activa.","grpc-min-time-between-pings":"Mínimo tiempo que el servidor debe esperar entre envíos de mensajes de ping","grpc-max-pings-without-data":"Número máximo de pings keepalive que el servidor puede enviar sin recibir ningún dato antes de considerar la conexión terminada.","grpc-min-ping-interval-without-data":"Mínimo tiempo que el servidor debe esperar entre envíos de ping keepalive cuando no haya ningún dato en envío o recepción.","permit-without-calls":"Permitir al servidor mantener la conexión GRPC abierta, cuando no haya llamadas RPC activas."}},it={"add-entry":"설정 추가","connector-add":"새로운 연결자 추가","connector-enabled":"Enable connector","connector-name":"Connector name","connector-name-required":"Connector name is required.","connector-type":"Connector type","connector-type-required":"Connector type is required.",connectors:"Connectors configuration","create-new-gateway":"Create a new gateway","create-new-gateway-text":"Are you sure you want create a new gateway with name: '{{gatewayName}}'?",delete:"Delete configuration","download-tip":"Download configuration file",gateway:"Gateway","gateway-exists":"Device with same name is already exists.","gateway-name":"Gateway name","gateway-name-required":"Gateway name is required.","gateway-saved":"Gateway configuration successfully saved.","json-parse":"Not valid JSON.","json-required":"Field cannot be empty.","no-connectors":"No connectors","no-data":"No configurations","no-gateway-found":"No gateway found.","no-gateway-matching":" '{{item}}' not found.","path-logs":"Path to log files","path-logs-required":"Path is required.",remote:"Remote configuration","remote-logging-level":"Logging level","remove-entry":"Remove configuration","save-tip":"Save configuration file","security-type":"Security type","security-types":{"access-token":"Access Token",tls:"TLS"},storage:"Storage","storage-max-file-records":"Maximum records in file","storage-max-files":"Maximum number of files","storage-max-files-min":"Minimum number is 1.","storage-max-files-pattern":"Number is not valid.","storage-max-files-required":"Number is required.","storage-max-records":"Maximum records in storage","storage-max-records-min":"Minimum number of records is 1.","storage-max-records-pattern":"Number is not valid.","storage-max-records-required":"Maximum records is required.","storage-pack-size":"Maximum event pack size","storage-pack-size-min":"Minimum number is 1.","storage-pack-size-pattern":"Number is not valid.","storage-pack-size-required":"Maximum event pack size is required.","storage-path":"Storage path","storage-path-required":"Storage path is required.","storage-type":"Storage type","storage-types":{"file-storage":"File storage","memory-storage":"Memory storage"},thingsboard:"ThingsBoard","thingsboard-host":"ThingsBoard host","thingsboard-host-required":"Host is required.","thingsboard-port":"ThingsBoard port","thingsboard-port-max":"Maximum port number is 65535.","thingsboard-port-min":"Minimum port number is 1.","thingsboard-port-pattern":"Port is not valid.","thingsboard-port-required":"Port is required.",tidy:"Tidy","tidy-tip":"Tidy config JSON","title-connectors-json":"Connector {{typeName}} configuration","tls-path-ca-certificate":"Path to CA certificate on gateway","tls-path-client-certificate":"Path to client certificate on gateway","tls-path-private-key":"Path to private key on gateway","toggle-fullscreen":"Toggle fullscreen","transformer-json-config":"Configuration JSON*","update-config":"Add/update configuration JSON"},ot={"add-entry":"Add configuration",advanced:"Advanced","checking-device-activity":"Checking device activity",command:"Docker commands","command-copied-message":"Docker command has been copied to clipboard",configuration:"Configuration","connector-add":"Add new connector","connector-enabled":"Enable connector","connector-name":"Connector name","connector-name-required":"Connector name is required.","connector-type":"Connector type","connector-type-required":"Connector type is required.",connectors:"Connectors","connectors-config":"Connectors configuration","connectors-table-enabled":"Enabled","connectors-table-name":"Name","connectors-table-type":"Type","connectors-table-status":"Status","connectors-table-actions":"Actions","connectors-table-key":"Key","connectors-table-class":"Class","rpc-command-send":"Send","rpc-command-result":"Result","rpc-command-edit-params":"Edit parameters","gateway-configuration":"General Configuration","docker-label":"In order to run ThingsBoard IoT gateway in docker with credentials for this device you can use the following commands.","create-new-gateway":"Create a new gateway","create-new-gateway-text":"Are you sure you want create a new gateway with name: '{{gatewayName}}'?","created-time":"Created time","configuration-delete-dialog-header":"Configurations will be deleted","configuration-delete-dialog-body":"Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.

\nTo turn off configuration, enter gateway name below","configuration-delete-dialog-input":"Gateway name","configuration-delete-dialog-input-required":"Gateway name is mandatory","configuration-delete-dialog-confirm":"Turn Off",delete:"Delete configuration","download-tip":"Download configuration file","drop-file":"Drop file here or",gateway:"Gateway","gateway-exists":"Device with same name is already exists.","gateway-name":"Gateway name","gateway-name-required":"Gateway name is required.","gateway-saved":"Gateway configuration successfully saved.",grpc:"GRPC","grpc-keep-alive-timeout":"Keep alive timeout (in ms)","grpc-keep-alive-timeout-required":"Keep alive timeout is required","grpc-keep-alive-timeout-min":"Keep alive timeout can not be less then 1","grpc-keep-alive-timeout-pattern":"Keep alive timeout is not valid","grpc-keep-alive":"Keep alive (in ms)","grpc-keep-alive-required":"Keep alive is required","grpc-keep-alive-min":"Keep alive can not be less then 1","grpc-keep-alive-pattern":"Keep alive is not valid","grpc-min-time-between-pings":"Min time between pings (in ms)","grpc-min-time-between-pings-required":"Min time between pings is required","grpc-min-time-between-pings-min":"Min time between pings can not be less then 1","grpc-min-time-between-pings-pattern":"Min time between pings is not valid","grpc-min-ping-interval-without-data":"Min ping interval without data (in ms)","grpc-min-ping-interval-without-data-required":"Min ping interval without data is required","grpc-min-ping-interval-without-data-min":"Min ping interval without data can not be less then 1","grpc-min-ping-interval-without-data-pattern":"Min ping interval without data is not valid","grpc-max-pings-without-data":"Max pings without data","grpc-max-pings-without-data-required":"Max pings without data is required","grpc-max-pings-without-data-min":"Max pings without data can not be less then 1","grpc-max-pings-without-data-pattern":"Max pings without data is not valid","inactivity-check-period-seconds":"Inactivity check period (in sec)","inactivity-check-period-seconds-required":"Inactivity check period is required","inactivity-check-period-seconds-min":"Inactivity check period can not be less then 1","inactivity-check-period-seconds-pattern":"Inactivity check period is not valid","inactivity-timeout-seconds":"Inactivity timeout (in sec)","inactivity-timeout-seconds-required":"Inactivity timeout is required","inactivity-timeout-seconds-min":"Inactivity timeout can not be less then 1","inactivity-timeout-seconds-pattern":"Inactivity timeout is not valid","json-parse":"Not valid JSON.","json-required":"Field cannot be empty.",logs:{logs:"Logs",days:"days",hours:"hours",minutes:"minutes",seconds:"seconds","date-format":"Date format","date-format-required":"Date format required","log-format":"Log format","log-type":"Log type","log-format-required":"Log format required",remote:"Remote logging","remote-logs":"Remote logs",local:"Local logging",level:"Log level","file-path":"File path","file-path-required":"File path required","saving-period":"Log saving period","saving-period-min":"Log saving period can not be less then 1","saving-period-required":"Log saving period required","backup-count":"Backup count","backup-count-min":"Backup count can not be less then 1","backup-count-required":"Backup count required"},"min-pack-send-delay":"Min pack send delay (in ms)","min-pack-send-delay-required":"Min pack send delay is required","min-pack-send-delay-min":"Min pack send delay can not be less then 0","no-connectors":"No connectors","no-data":"No configurations","no-gateway-found":"No gateway found.","no-gateway-matching":" '{{item}}' not found.","path-logs":"Path to log files","path-logs-required":"Path is required.","permit-without-calls":"Keep alive permit without calls",remote:"Remote configuration","remote-logging-level":"Logging level","remove-entry":"Remove configuration","remote-shell":"Remote shell","remote-configuration":"Remote Configuration",other:"Other","save-tip":"Save configuration file","security-type":"Security type","security-types":{"access-token":"Access Token","username-password":"Username and Password",tls:"TLS","tls-access-token":"TLS + Access Token","tls-private-key":"TLS + Private Key"},"server-port":"Server port",statistics:{statistic:"Statistic",statistics:"Statistics","statistic-commands-empty":"No statistics available",commands:"Commands","send-period":"Statistic send period (in sec)","send-period-required":"Statistic send period is required","send-period-min":"Statistic send period can not be less then 60","send-period-pattern":"Statistic send period is not valid","check-connectors-configuration":"Check connectors configuration (in sec)","check-connectors-configuration-required":"Check connectors configuration is required","check-connectors-configuration-min":"Check connectors configuration can not be less then 1","check-connectors-configuration-pattern":"Check connectors configuration is not valid",add:"Add command",timeout:"Timeout","timeout-required":"Timeout is required","timeout-min":"Timeout can not be less then 1","timeout-pattern":"Timeout is not valid","attribute-name":"Attribute name","attribute-name-required":"Attribute name is required",command:"Command","command-required":"Command is required",remove:"Remove command"},storage:"Storage","storage-max-file-records":"Maximum records in file","storage-max-files":"Maximum number of files","storage-max-files-min":"Minimum number is 1.","storage-max-files-pattern":"Number is not valid.","storage-max-files-required":"Number is required.","storage-max-records":"Maximum records in storage","storage-max-records-min":"Minimum number of records is 1.","storage-max-records-pattern":"Number is not valid.","storage-max-records-required":"Maximum records is required.","storage-read-record-count":"Read record count in storage","storage-read-record-count-min":"Minimum number of records is 1.","storage-read-record-count-pattern":"Number is not valid.","storage-read-record-count-required":"Read record count is required.","storage-max-read-record-count":"Max read record count in storage","storage-max-read-record-count-min":"Minimum number of records is 1.","storage-max-read-record-count-pattern":"Number is not valid.","storage-max-read-record-count-required":"Max Read record count is required.","storage-data-folder-path":"Data folder path","storage-data-folder-path-required":"Data folder path is required.","storage-pack-size":"Maximum event pack size","storage-pack-size-min":"Minimum number is 1.","storage-pack-size-pattern":"Number is not valid.","storage-pack-size-required":"Maximum event pack size is required.","storage-path":"Storage path","storage-path-required":"Storage path is required.","storage-type":"Storage type","storage-types":{"file-storage":"File storage","memory-storage":"Memory storage",sqlite:"SQLITE"},thingsboard:"ThingsBoard",general:"General","thingsboard-host":"ThingsBoard host","thingsboard-host-required":"Host is required.","thingsboard-port":"ThingsBoard port","thingsboard-port-max":"Maximum port number is 65535.","thingsboard-port-min":"Minimum port number is 1.","thingsboard-port-pattern":"Port is not valid.","thingsboard-port-required":"Port is required.",tidy:"Tidy","tidy-tip":"Tidy config JSON","title-connectors-json":"Connector {{typeName}} configuration","tls-path-ca-certificate":"Path to CA certificate on gateway","tls-path-client-certificate":"Path to client certificate on gateway","messages-ttl-check-in-hours":"Messages TTL check in hours","messages-ttl-check-in-hours-required":"Messages TTL check in hours is required.","messages-ttl-check-in-hours-min":"Min number is 1.","messages-ttl-check-in-hours-pattern":"Number is not valid.","messages-ttl-in-days":"Messages TTL in days","messages-ttl-in-days-required":"Messages TTL in days is required.","messages-ttl-in-days-min":"Min number is 1.","messages-ttl-in-days-pattern":"Number is not valid.","mqtt-qos":"QoS","mqtt-qos-required":"QoS is required","mqtt-qos-range":"QoS values range is from 0 to 1","tls-path-private-key":"Path to private key on gateway","toggle-fullscreen":"Toggle fullscreen","transformer-json-config":"Configuration JSON*","update-config":"Add/update configuration JSON",hints:{"remote-configuration":"Enables remote configuration and management of the gateway","remote-shell":"Enables remote control of the operating system with the gateway from the Remote Shell widget",host:"Hostname or IP address of ThingsBoard server",port:"Port of MQTT service on ThingsBoard server",token:"Access token for the gateway from ThingsBoard server","client-id":"MQTT client id for the gateway form ThingsBoard server",username:"MQTT username for the gateway form ThingsBoard server",password:"MQTT password for the gateway form ThingsBoard server","ca-cert":"Path to CA certificate file","date-form":"Date format in log message","data-folder":"Path to folder, that will contains data (Relative or Absolute)","log-format":"Log message format","remote-log":"Enables remote logging and logs reading from the gateway","backup-count":"If backup count is > 0, when a rollover is done, no more than backup count files are kept - the oldest ones are deleted",storage:"Provides configuration for saving incoming data before it is sent to the platform","max-file-count":"Maximum count of file that will be created","max-read-count":"Count of messages to get from storage and send to ThingsBoard","max-records":"Maximum count of records that will be stored in one file","read-record-count":"Count of messages to get from storage and send to ThingsBoard","max-records-count":"Maximum count of data in storage before send to ThingsBoard","ttl-check-hour":"How often will Gateway check data for obsolescence","ttl-messages-day":"Maximum days that storage will save data",commands:"Commands for collecting additional statistic",attribute:"Statistic telemetry key",timeout:"Timeout for command executing",command:"The result of the command execution, will be used as the value for telemetry","check-device-activity":"Enables monitor the activity of each connected device","inactivity-timeout":"Time after whose the gateway will disconnect device","inactivity-period":"Periodicity of device activity check","minimal-pack-delay":"Delay between sending packs of messages (Decreasing this setting results in increased CPU usage)",qos:"Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)","server-port":"Network port on which GRPC server will listen for incoming connections.","grpc-keep-alive-timeout":"Maximum time the server should wait for a keepalive ping response before considering the connection dead.","grpc-keep-alive":"Duration between two successive keepalive ping messages when there is no active RPC call.","grpc-min-time-between-pings":"Minimum amount of time the server should wait between sending keepalive ping messages","grpc-max-pings-without-data":"Maximum number of keepalive ping messages that the server can send without receiving any data before it considers the connection dead.","grpc-min-ping-interval-without-data":"Minimum amount of time the server should wait between sending keepalive ping messages when there is no data being sent or received.","permit-without-calls":"Allow server to keep the GRPC connection alive even when there are no active RPC calls."}},st={"add-entry":"Configuratie toevoegen","connector-add":"Nieuwe connector toevoegen","connector-enabled":"Connector inschakelen","connector-name":"Naam van de connector","connector-name-required":"De naam van de connector is vereist.","connector-type":"Type aansluiting","connector-type-required":"Het type connector is vereist.",connectors:"Configuratie van connectoren","create-new-gateway":"Een nieuwe gateway maken","create-new-gateway-text":"Weet u zeker dat u een nieuwe gateway wilt maken met de naam: '{{gatewayName}}'?",delete:"Configuratie verwijderen","download-tip":"Configuratiebestand downloaden",gateway:"Gateway","gateway-exists":"Device met dezelfde naam bestaat al.","gateway-name":"Naam van de gateway","gateway-name-required":"De naam van de gateway is vereist.","gateway-saved":"Gatewayconfiguratie succesvol opgeslagen.","json-parse":"Ongeldige JSON.","json-required":"Het veld mag niet leeg zijn.","no-connectors":"Geen connectoren","no-data":"Geen configuraties","no-gateway-found":"Geen gateway gevonden.","no-gateway-matching":"'{{item}}' niet gevonden.","path-logs":"Pad naar logbestanden","path-logs-required":"Pad is vereist.",remote:"Configuratie op afstand","remote-logging-level":"Registratie niveau","remove-entry":"Configuratie verwijderen","save-tip":"Configuratiebestand opslaan","security-type":"Soort beveiliging","security-types":{"access-token":"Toegang tot token",tls:"TLS (TLS)"},storage:"Opslag","storage-max-file-records":"Maximum aantal records in bestand","storage-max-files":"Maximaal aantal bestanden","storage-max-files-min":"Minimum aantal is 1.","storage-max-files-pattern":"Nummer is niet geldig.","storage-max-files-required":"Nummer is vereist.","storage-max-records":"Maximum aantal records in opslag","storage-max-records-min":"Minimum aantal records is 1.","storage-max-records-pattern":"Nummer is niet geldig.","storage-max-records-required":"Maximale records zijn vereist.","storage-pack-size":"Maximale pakketgrootte voor events","storage-pack-size-min":"Minimum aantal is 1.","storage-pack-size-pattern":"Nummer is niet geldig.","storage-pack-size-required":"De maximale pakketgrootte van het event is vereist.","storage-path":"Opslag pad","storage-path-required":"Opslagpad is vereist.","storage-type":"Type opslag","storage-types":{"file-storage":"Opslag van bestanden","memory-storage":"Geheugen opslag"},thingsboard:"Dingen Bord","thingsboard-host":"ThingsBoard-gastheer","thingsboard-host-required":"Server host is vereist.","thingsboard-port":"ThingsBoard-poort","thingsboard-port-max":"Het maximale poortnummer is 65535.","thingsboard-port-min":"Het minimale poortnummer is 1.","thingsboard-port-pattern":"Poort is niet geldig.","thingsboard-port-required":"Poort is vereist.",tidy:"Ordelijk","tidy-tip":"Opgeruimde configuratie JSON","title-connectors-json":"Configuratie van connector {{typeName}}","tls-path-ca-certificate":"Pad naar CA-certificaat op gateway","tls-path-client-certificate":"Pad naar clientcertificaat op gateway","tls-path-private-key":"Pad naar privésleutel op gateway","toggle-fullscreen":"Volledig scherm in- en uitschakelen","transformer-json-config":"Configuratie JSON*","update-config":"Configuratie JSON toevoegen/bijwerken"},pt={"add-entry":"Dodaj konfigurację",advanced:"Advanced","checking-device-activity":"Checking device activity",command:"Docker commands","command-copied-message":"Docker command has been copied to clipboard",configuration:"Configuration","connector-add":"Dodaj nowe złącze","connector-enabled":"Włącz złącze","connector-name":"Nazwa złącza","connector-name-required":"Nazwa złącza jest wymagana.","connector-type":"Typ złącza","connector-type-required":"Typ złącza jest wymagany.",connectors:"Konfiguracja złączy","connectors-config":"Connectors configuration","connectors-table-enabled":"Enabled","connectors-table-name":"Name","connectors-table-type":"Type","connectors-table-status":"Status","connectors-table-actions":"Actions","connectors-table-key":"Key","connectors-table-class":"Class","rpc-command-send":"Send","rpc-command-result":"Result","rpc-command-edit-params":"Edit parameters","gateway-configuration":"General Configuration","docker-label":"In order to run ThingsBoard IoT gateway in docker with credentials for this device you can use the following commands.","create-new-gateway":"Utwórz nowy gateway","create-new-gateway-text":"Czy na pewno chcesz utworzyć nowy gateway o nazwie: '{{gatewayName}}'?","created-time":"Created time","configuration-delete-dialog-header":"Configurations will be deleted","configuration-delete-dialog-body":"Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.

\nTo turn off configuration, enter gateway name below","configuration-delete-dialog-input":"Gateway name","configuration-delete-dialog-input-required":"Gateway name is mandatory","configuration-delete-dialog-confirm":"Turn Off",delete:"Usuń konfigurację","download-tip":"Pobierz plik konfiguracyjny","drop-file":"Drop file here or",gateway:"Wejście","gateway-exists":"Urządzenie o tej samej nazwie już istnieje.","gateway-name":"Nazwa Gateway","gateway-name-required":"Nazwa Gateway'a jest wymagana.","gateway-saved":"Konfiguracja Gatewey'a została pomyślnie zapisana.",grpc:"GRPC","grpc-keep-alive-timeout":"Keep alive timeout (in ms)","grpc-keep-alive-timeout-required":"Keep alive timeout is required","grpc-keep-alive-timeout-min":"Keep alive timeout can not be less then 1","grpc-keep-alive-timeout-pattern":"Keep alive timeout is not valid","grpc-keep-alive":"Keep alive (in ms)","grpc-keep-alive-required":"Keep alive is required","grpc-keep-alive-min":"Keep alive can not be less then 1","grpc-keep-alive-pattern":"Keep alive is not valid","grpc-min-time-between-pings":"Min time between pings (in ms)","grpc-min-time-between-pings-required":"Min time between pings is required","grpc-min-time-between-pings-min":"Min time between pings can not be less then 1","grpc-min-time-between-pings-pattern":"Min time between pings is not valid","grpc-min-ping-interval-without-data":"Min ping interval without data (in ms)","grpc-min-ping-interval-without-data-required":"Min ping interval without data is required","grpc-min-ping-interval-without-data-min":"Min ping interval without data can not be less then 1","grpc-min-ping-interval-without-data-pattern":"Min ping interval without data is not valid","grpc-max-pings-without-data":"Max pings without data","grpc-max-pings-without-data-required":"Max pings without data is required","grpc-max-pings-without-data-min":"Max pings without data can not be less then 1","grpc-max-pings-without-data-pattern":"Max pings without data is not valid","inactivity-check-period-seconds":"Inactivity check period (in sec)","inactivity-check-period-seconds-required":"Inactivity check period is required","inactivity-check-period-seconds-min":"Inactivity check period can not be less then 1","inactivity-check-period-seconds-pattern":"Inactivity check period is not valid","inactivity-timeout-seconds":"Inactivity timeout (in sec)","inactivity-timeout-seconds-required":"Inactivity timeout is required","inactivity-timeout-seconds-min":"Inactivity timeout can not be less then 1","inactivity-timeout-seconds-pattern":"Inactivity timeout is not valid","json-parse":"Nieprawidłowy JSON.","json-required":"Pole nie może być puste.",logs:{logs:"Logs",days:"days",hours:"hours",minutes:"minutes",seconds:"seconds","date-format":"Date format","date-format-required":"Date format required","log-format":"Log format","log-type":"Log type","log-format-required":"Log format required",remote:"Remote logging","remote-logs":"Remote logs",local:"Local logging",level:"Log level","file-path":"File path","file-path-required":"File path required","saving-period":"Log saving period","saving-period-min":"Log saving period can not be less then 1","saving-period-required":"Log saving period required","backup-count":"Backup count","backup-count-min":"Backup count can not be less then 1","backup-count-required":"Backup count required"},"min-pack-send-delay":"Min pack send delay (in ms)","min-pack-send-delay-required":"Min pack send delay is required","min-pack-send-delay-min":"Min pack send delay can not be less then 0","no-connectors":"Brak złączy","no-data":"Brak konfiguracji","no-gateway-found":"Nie znaleziono gateway'a.","no-gateway-matching":" '{{item}}' nie znaleziono.","path-logs":"Ścieżka do plików dziennika","path-logs-required":"Ścieżka jest wymagana.","permit-without-calls":"Keep alive permit without calls",remote:"Zdalna konfiguracja","remote-logging-level":"Poziom logowania","remove-entry":"Usuń konfigurację","remote-shell":"Remote shell","remote-configuration":"Remote Configuration",other:"Other","save-tip":"Zapisz plik konfiguracyjny","security-type":"Rodzaj zabezpieczenia","security-types":{"access-token":"Token dostępu","username-password":"Username and Password",tls:"TLS","tls-access-token":"TLS + Access Token","tls-private-key":"TLS + Private Key"},"server-port":"Server port",statistics:{statistic:"Statistic",statistics:"Statistics","statistic-commands-empty":"No statistics available",commands:"Commands","send-period":"Statistic send period (in sec)","send-period-required":"Statistic send period is required","send-period-min":"Statistic send period can not be less then 60","send-period-pattern":"Statistic send period is not valid","check-connectors-configuration":"Check connectors configuration (in sec)","check-connectors-configuration-required":"Check connectors configuration is required","check-connectors-configuration-min":"Check connectors configuration can not be less then 1","check-connectors-configuration-pattern":"Check connectors configuration is not valid",add:"Add command",timeout:"Timeout","timeout-required":"Timeout is required","timeout-min":"Timeout can not be less then 1","timeout-pattern":"Timeout is not valid","attribute-name":"Attribute name","attribute-name-required":"Attribute name is required",command:"Command","command-required":"Command is required",remove:"Remove command"},storage:"Składowanie","storage-max-file-records":"Maksymalna liczba rekordów w pliku","storage-max-files":"Maksymalna liczba plików","storage-max-files-min":"Minimalna liczba to 1.","storage-max-files-pattern":"Numer jest nieprawidłowy.","storage-max-files-required":"Numer jest wymagany.","storage-max-records":"Maksymalna liczba rekordów w pamięci","storage-max-records-min":"Minimalna liczba rekordów to 1.","storage-max-records-pattern":"Numer jest nieprawidłowy.","storage-max-records-required":"Maksymalna liczba rekordów jest wymagana.","storage-read-record-count":"Read record count in storage","storage-read-record-count-min":"Minimum number of records is 1.","storage-read-record-count-pattern":"Number is not valid.","storage-read-record-count-required":"Read record count is required.","storage-max-read-record-count":"Max read record count in storage","storage-max-read-record-count-min":"Minimum number of records is 1.","storage-max-read-record-count-pattern":"Number is not valid.","storage-max-read-record-count-required":"Max Read record count is required.","storage-data-folder-path":"Data folder path","storage-data-folder-path-required":"Data folder path is required.","storage-pack-size":"Maksymalny rozmiar pakietu wydarzeń","storage-pack-size-min":"Minimalna liczba to 1.","storage-pack-size-pattern":"Numer jest nieprawidłowy.","storage-pack-size-required":"Maksymalny rozmiar pakietu wydarzeń jest wymagany.","storage-path":"Ścieżka przechowywania","storage-path-required":"Ścieżka do przechowywania jest wymagana.","storage-type":"Typ składowania","storage-types":{"file-storage":"Nośnik danych","memory-storage":"Przechowywanie pamięci",sqlite:"SQLITE"},thingsboard:"ThingsBoard",general:"General","thingsboard-host":"Gospodarz ThingsBoard","thingsboard-host-required":"Host jest wymagany.","thingsboard-port":"Port ThingsBoard","thingsboard-port-max":"Maksymalny numer portu to 65535.","thingsboard-port-min":"Minimalny numer portu to 1.","thingsboard-port-pattern":"Port jest nieprawidłowy.","thingsboard-port-required":"Port jest wymagany.",tidy:"Uporządkuj","tidy-tip":"Uporządkowana konfiguracja JSON","title-connectors-json":"Złącze {{typeName}} konfiguracja","tls-path-ca-certificate":"Ścieżka do certyfikatu CA na gateway","tls-path-client-certificate":"Ścieżka do certyfikatu klienta na gateway","messages-ttl-check-in-hours":"Messages TTL check in hours","messages-ttl-check-in-hours-required":"Messages TTL check in hours is required.","messages-ttl-check-in-hours-min":"Min number is 1.","messages-ttl-check-in-hours-pattern":"Number is not valid.","messages-ttl-in-days":"Messages TTL in days","messages-ttl-in-days-required":"Messages TTL in days is required.","messages-ttl-in-days-min":"Min number is 1.","messages-ttl-in-days-pattern":"Number is not valid.","mqtt-qos":"QoS","mqtt-qos-required":"QoS is required","mqtt-qos-range":"QoS values range is from 0 to 1","tls-path-private-key":"Ścieżka do klucza prywatnego na bramce","toggle-fullscreen":"Przełącz tryb pełnoekranowy","transformer-json-config":"Konfiguracja JSON*","update-config":"Dodaj/zaktualizuj konfigurację JSON",hints:{"remote-configuration":"Enables remote configuration and management of the gateway","remote-shell":"Enables remote control of the operating system with the gateway from the Remote Shell widget",host:"Hostname or IP address of ThingsBoard server",port:"Port of MQTT service on ThingsBoard server",token:"Access token for the gateway from ThingsBoard server","client-id":"MQTT client id for the gateway form ThingsBoard server",username:"MQTT username for the gateway form ThingsBoard server",password:"MQTT password for the gateway form ThingsBoard server","ca-cert":"Path to CA certificate file","date-form":"Date format in log message","data-folder":"Path to folder, that will contains data (Relative or Absolute)","log-format":"Log message format","remote-log":"Enables remote logging and logs reading from the gateway","backup-count":"If backup count is > 0, when a rollover is done, no more than backup count files are kept - the oldest ones are deleted",storage:"Provides configuration for saving incoming data before it is sent to the platform","max-file-count":"Maximum count of file that will be created","max-read-count":"Count of messages to get from storage and send to ThingsBoard","max-records":"Maximum count of records that will be stored in one file","read-record-count":"Count of messages to get from storage and send to ThingsBoard","max-records-count":"Maximum count of data in storage before send to ThingsBoard","ttl-check-hour":"How often will Gateway check data for obsolescence","ttl-messages-day":"Maximum days that storage will save data",commands:"Commands for collecting additional statistic",attribute:"Statistic telemetry key",timeout:"Timeout for command executing",command:"The result of the command execution, will be used as the value for telemetry","check-device-activity":"Enables monitor the activity of each connected device","inactivity-timeout":"Time after whose the gateway will disconnect device","inactivity-period":"Periodicity of device activity check","minimal-pack-delay":"Delay between sending packs of messages (Decreasing this setting results in increased CPU usage)",qos:"Quality of Service in MQTT messaging (0 - at most once, 1 - at least once)","server-port":"Network port on which GRPC server will listen for incoming connections.","grpc-keep-alive-timeout":"Maximum time the server should wait for a keepalive ping response before considering the connection dead.","grpc-keep-alive":"Duration between two successive keepalive ping messages when there is no active RPC call.","grpc-min-time-between-pings":"Minimum amount of time the server should wait between sending keepalive ping messages","grpc-max-pings-without-data":"Maximum number of keepalive ping messages that the server can send without receiving any data before it considers the connection dead.","grpc-min-ping-interval-without-data":"Minimum amount of time the server should wait between sending keepalive ping messages when there is no data being sent or received.","permit-without-calls":"Allow server to keep the GRPC connection alive even when there are no active RPC calls."}},lt={"add-entry":"Adicionar configuração","connector-add":"Adicionar novo conector","connector-enabled":"Habilitar conector","connector-name":"Nome do conector","connector-name-required":"O nome do conector é obrigatório.","connector-type":"Tipo de conector","connector-type-required":"O tipo de conector é obrigatório.",connectors:"Configuração de conectores","create-new-gateway":"Criar um novo gateway","create-new-gateway-text":"Tem certeza de que deseja criar um novo gateway com o nome: '{{gatewayName}}'?",delete:"Excluir configuração","download-tip":"Download de arquivo de configuração",gateway:"Gateway","gateway-exists":"Já existe um dispositivo com o mesmo nome.","gateway-name":"Nome do gateway","gateway-name-required":"O nome do gateway é obrigatório.","gateway-saved":"A configuração do gateway foi salva corretamente.","json-parse":"JSON inválido.","json-required":"O campo não pode estar em branco.","no-connectors":"Sem conectores","no-data":"Sem configurações","no-gateway-found":"Nenhum gateway encontrado.","no-gateway-matching":" '{{item}}' não encontrado.","path-logs":"Caminho para arquivos de log","path-logs-required":"O caminho é obrigatório",remote:"Configuração remota","remote-logging-level":"Nível de registro em log","remove-entry":"Remover configuração","save-tip":"Salvar arquivo de configuração","security-type":"Tipo de segurança","security-types":{"access-token":"Token de Acesso",tls:"TLS"},storage:"Armazenamento","storage-max-file-records":"Número máximo de registros em arquivo","storage-max-files":"Número máximo de arquivos","storage-max-files-min":"O número mínimo é 1.","storage-max-files-pattern":"O número não é válido.","storage-max-files-required":"O número é obrigatório.","storage-max-records":"Número máximo de registros em armazenamento","storage-max-records-min":"O número mínimo de registros é 1.","storage-max-records-pattern":"O número não é válido.","storage-max-records-required":"O número máximo de registros é obrigatório.","storage-pack-size":"Tamanho máximo de pacote de eventos","storage-pack-size-min":"O número mínimo é 1.","storage-pack-size-pattern":"O número não é válido.","storage-pack-size-required":"O tamanho máximo de pacote de eventos é obrigatório.","storage-path":"Caminho de armazenamento","storage-path-required":"O caminho de armazenamento é obrigatório.","storage-type":"Tipo de armazenamento","storage-types":{"file-storage":"Armazenamento de arquivo","memory-storage":"Armazenamento de memória"},thingsboard:"ThingsBoard","thingsboard-host":"Host ThingsBoard","thingsboard-host-required":"O host é obrigatório.","thingsboard-port":"Porta ThingsBoard","thingsboard-port-max":"O número máximo de portas é 65535.","thingsboard-port-min":"O número mínimo de portas é 1.","thingsboard-port-pattern":"A porta não é válida.","thingsboard-port-required":"A porta é obrigatória.",tidy:"Tidy","tidy-tip":"Config Tidy JSON","title-connectors-json":"Configuração do conector {{typeName}}","tls-path-ca-certificate":"Caminho para certificado de Autoridade de Certificação no gateway","tls-path-client-certificate":"Caminho para certificado de cliente no gateway","tls-path-private-key":"Caminho para chave privada no gateway","toggle-fullscreen":"Alternar tela inteira","transformer-json-config":"Configuração JSON*","update-config":"Adicionar/atualizar configuração de JSON"},ct={"add-entry":"Dodaj konfiguracijo","connector-add":"Dodaj nov priključek","connector-enabled":"Omogoči priključek","connector-name":"Ime priključka","connector-name-required":"Ime priključka je obvezno.","connector-type":"Vrsta priključka","connector-type-required":"Zahteva se vrsta priključka.",connectors:"Konfiguracija priključkov","create-new-gateway":"Ustvari nov prehod","create-new-gateway-text":"Ali ste prepričani, da želite ustvariti nov prehod z imenom: '{{gatewayName}}'?",delete:"Izbriši konfiguracijo","download-tip":"Prenos konfiguracijske datoteke",gateway:"Prehod","gateway-exists":"Naprava z istim imenom že obstaja.","gateway-name":"Ime prehoda","gateway-name-required":"Ime prehoda je obvezno.","gateway-saved":"Konfiguracija prehoda je uspešno shranjena.","json-parse":"Neveljaven JSON.","json-required":"Polje ne sme biti prazno.","no-connectors":"Ni priključkov","no-data":"Brez konfiguracij","no-gateway-found":"Prehod ni najden.","no-gateway-matching":" '{{item}}' ni mogoče najti.","path-logs":"Pot do dnevniških datotek","path-logs-required":"Pot je obvezna.",remote:"Oddaljena konfiguracija","remote-logging-level":"Raven beleženja","remove-entry":"Odstrani konfiguracijo","save-tip":"Shrani konfiguracijsko datoteko","security-type":"Vrsta zaščite","security-types":{"access-token":"Dostopni žeton",tls:"TLS"},storage:"Shramba","storage-max-file-records":"Največ zapisov v datoteki","storage-max-files":"Največje število datotek","storage-max-files-min":"Najmanjše število je 1.","storage-max-files-pattern":"Številka ni veljavna.","storage-max-files-required":"Številka je obvezna.","storage-max-records":"Največ zapisov v pomnilniku","storage-max-records-min":"Najmanjše število zapisov je 1.","storage-max-records-pattern":"Številka ni veljavna.","storage-max-records-required":"Zahtevan je največ zapisov.","storage-pack-size":"Največja velikost paketa dogodkov","storage-pack-size-min":"Najmanjše število je 1.","storage-pack-size-pattern":"Številka ni veljavna.","storage-pack-size-required":"Zahtevana je največja velikost paketa dogodkov.","storage-path":"Pot pomnilnika","storage-path-required":"Zahtevana je pot do pomnilnika.","storage-type":"Vrsta pomnilnika","storage-types":{"file-storage":"Shramba datotek","memory-storage":"Spomin pomnilnika"},thingsboard:"ThingsBoard","thingsboard-host":"Gostitelj ThingsBoard","thingsboard-host-required":"Potreben je gostitelj.","thingsboard-port":"Vrata ThingsBoard","thingsboard-port-max":"Največja številka vrat je 65535.","thingsboard-port-min":"Najmanjša številka vrat je 1.","thingsboard-port-pattern":"Vrata niso veljavna.","thingsboard-port-required":"Potrebna so vrata.",tidy:"Urejeno","tidy-tip":"Urejena konfiguracija JSON","title-connectors-json":"Konfiguracija konektorja {{typeName}}","tls-path-ca-certificate":"Pot do potrdila CA na prehodu","tls-path-client-certificate":"Pot do potrdila stranke na prehodu","tls-path-private-key":"Pot do zasebnega ključa na prehodu","toggle-fullscreen":"Preklop na celozaslonski način","transformer-json-config":"Konfiguracija JSON *","update-config":"Dodaj / posodobi konfiguracijo JSON"},dt={"add-entry":"Yapılandırma ekle","connector-add":"Yeni bağlayıcı ekle","connector-enabled":"Bağlayıcıyı etkinleştir","connector-name":"Bağlayıcı adı","connector-name-required":"Bağlayıcı adı gerekli.","connector-type":"Bağlayıcı tipi","connector-type-required":"Bağlayıcı türü gerekli.",connectors:"Bağlayıcıların yapılandırması","create-new-gateway":"Yeni bir ağ geçidi oluştur","create-new-gateway-text":"'{{gatewayName}}' adında yeni bir ağ geçidi oluşturmak istediğinizden emin misiniz?",delete:"Yapılandırmayı sil","download-tip":"Yapılandırma dosyasını indirin",gateway:"Ağ geçidi","gateway-exists":"Aynı ada sahip cihaz zaten var.","gateway-name":"Ağ geçidi adı","gateway-name-required":"Ağ geçidi adı gerekli.","gateway-saved":"Ağ geçidi yapılandırması başarıyla kaydedildi.","json-parse":"Geçerli bir JSON değil.","json-required":"Alan boş olamaz.","no-connectors":"Bağlayıcı yok","no-data":"Yapılandırma yok","no-gateway-found":"Ağ geçidi bulunamadı.","no-gateway-matching":" '{{item}}' bulunamadı.","path-logs":"Log dosyaları yolu","path-logs-required":"Log dosyaları dizini gerekli.",remote:"Uzaktan yapılandırma","remote-logging-level":"Loglama seviyesi","remove-entry":"Yapılandırmayı kaldır","save-tip":"Yapılandırma dosyasını kaydet","security-type":"Güvenlik türü","security-types":{"access-token":"Access Token",tls:"TLS"},storage:"Depolama","storage-max-file-records":"Dosyadaki maksimum kayıt","storage-max-files":"Maksimum dosya sayısı","storage-max-files-min":"Minimum sayı 1'dir.","storage-max-files-pattern":"Sayı geçerli değil.","storage-max-files-required":"Sayı gerekli.","storage-max-records":"Depodaki maksimum kayıt","storage-max-records-min":"Minimum kayıt sayısı 1'dir.","storage-max-records-pattern":"Sayı geçerli değil.","storage-max-records-required":"Maksimum kayıt gerekli.","storage-pack-size":"Maksimum etkinlik paketi boyutu","storage-pack-size-min":"Minimum sayı 1'dir.","storage-pack-size-pattern":"Sayı geçerli değil.","storage-pack-size-required":"Maksimum etkinlik paketi boyutu gerekli.","storage-path":"Depolama yolu","storage-path-required":"Depolama yolu gerekli.","storage-type":"Depolama türü","storage-types":{"file-storage":"Dosya depolama","memory-storage":"Bellek depolama"},thingsboard:"ThingsBoard","thingsboard-host":"ThingsBoard host","thingsboard-host-required":"Host gerekli.","thingsboard-port":"ThingsBoard port","thingsboard-port-max":"Maksimum port numarası 65535.","thingsboard-port-min":"Minimum port numarası 1'dir.","thingsboard-port-pattern":"Port geçerli değil.","thingsboard-port-required":"Port gerekli.",tidy:"Tidy","tidy-tip":"Tidy config JSON","title-connectors-json":"Connector {{typeName}} configuration","tls-path-ca-certificate":"Path to CA certificate on gateway","tls-path-client-certificate":"Path to client certificate on gateway","tls-path-private-key":"Path to private key on gateway","toggle-fullscreen":"Toggle fullscreen","transformer-json-config":"Configuration JSON*","update-config":"Add/update configuration JSON"},mt={"add-entry":"添加配置",advanced:"高级","checking-device-activity":"检查设备活动",command:"Docker命令","command-copied-message":"Docker命令已复制到剪贴板",configuration:"配置","connector-add":"添加连接器","connector-enabled":"启用连接器","connector-name":"连接器名称","connector-name-required":"连接器名称必填。","connector-type":"连接器类型","connector-type-required":"连接器类型必填。",connectors:"连接器配置","connectors-config":"连接器配置","connectors-table-enabled":"已启用","connectors-table-name":"名称","connectors-table-type":"类型","connectors-table-status":"状态","connectors-table-actions":"操作","connectors-table-key":"键","connectors-table-class":"类","rpc-command-send":"发送","rpc-command-result":"结果","rpc-command-edit-params":"编辑参数","gateway-configuration":"通用配置","create-new-gateway":"创建网关","create-new-gateway-text":"确定要创建名为 '{{gatewayName}}' 的新网关?","created-time":"创建时间","configuration-delete-dialog-header":"配置将被删除","configuration-delete-dialog-body":"只有对网关进行物理访问时,才有可能关闭远程配置。所有先前的配置都将被删除。

\n要关闭配置,请在下面输入网关名称","configuration-delete-dialog-input":"网关名称","configuration-delete-dialog-input-required":"网关名称是必需的","configuration-delete-dialog-confirm":"关闭",delete:"删除配置","download-tip":"下载配置","drop-file":"将文件拖放到此处或",gateway:"网关","gateway-exists":"同名设备已存在。","gateway-name":"网关名称","gateway-name-required":"网关名称必填。","gateway-saved":"已成功保存网关配置。",grpc:"GRPC","grpc-keep-alive-timeout":"保持连接超时(毫秒)","grpc-keep-alive-timeout-required":"需要保持连接超时","grpc-keep-alive-timeout-min":"保持连接超时不能小于1","grpc-keep-alive-timeout-pattern":"保持连接超时无效","grpc-keep-alive":"保持连接(毫秒)","grpc-keep-alive-required":"需要保持连接","grpc-keep-alive-min":"保持连接不能小于1","grpc-keep-alive-pattern":"保持连接无效","grpc-min-time-between-pings":"最小Ping间隔(毫秒)","grpc-min-time-between-pings-required":"需要最小Ping间隔","grpc-min-time-between-pings-min":"最小Ping间隔不能小于1","grpc-min-time-between-pings-pattern":"最小Ping间隔无效","grpc-min-ping-interval-without-data":"无数据时的最小Ping间隔(毫秒)","grpc-min-ping-interval-without-data-required":"需要无数据时的最小Ping间隔","grpc-min-ping-interval-without-data-min":"无数据时的最小Ping间隔不能小于1","grpc-min-ping-interval-without-data-pattern":"无数据时的最小Ping间隔无效","grpc-max-pings-without-data":"无数据时的最大Ping数","grpc-max-pings-without-data-required":"需要无数据时的最大Ping数","grpc-max-pings-without-data-min":"无数据时的最大Ping数不能小于1","grpc-max-pings-without-data-pattern":"无数据时的最大Ping数无效","inactivity-check-period-seconds":"不活跃检查期(秒)","inactivity-check-period-seconds-required":"需要不活跃检查期","inactivity-check-period-seconds-min":"不活跃检查期不能小于1","inactivity-check-period-seconds-pattern":"不活跃检查期无效","inactivity-timeout-seconds":"不活跃超时(秒)","inactivity-timeout-seconds-required":"需要不活跃超时","inactivity-timeout-seconds-min":"不活跃超时不能小于1","inactivity-timeout-seconds-pattern":"不活跃超时无效","json-parse":"无效的JSON。","json-required":"字段不能为空。",logs:{logs:"日志",days:"天",hours:"小时",minutes:"分钟",seconds:"秒","date-format":"日期格式","date-format-required":"需要日期格式","log-format":"日志格式","log-type":"日志类型","log-format-required":"需要日志格式",remote:"远程日志记录","remote-logs":"远程日志",local:"本地日志记录",level:"日志级别","file-path":"文件路径","file-path-required":"需要文件路径","saving-period":"日志保存期限","saving-period-min":"日志保存期限不能小于1","saving-period-required":"需要日志保存期限","backup-count":"备份数量","backup-count-min":"备份数量不能小于1","backup-count-required":"需要备份数量"},"min-pack-send-delay":"最小包发送延迟(毫秒)","min-pack-send-delay-required":"最小包发送延迟是必需的","min-pack-send-delay-min":"最小包发送延迟不能小于0","no-connectors":"无连接器","no-data":"没有配置","no-gateway-found":"未找到网关。","no-gateway-matching":"未找到 '{{item}}' 。","path-logs":"日志文件的路径","path-logs-required":"路径是必需的。","permit-without-calls":"保持连接许可,无需响应",remote:"远程配置","remote-logging-level":"日志记录级别","remove-entry":"删除配置","remote-shell":"远程Shell","remote-configuration":"远程配置",other:"其他","save-tip":"保存配置","security-type":"安全类型","security-types":{"access-token":"访问令牌","username-password":"用户名和密码",tls:"TLS","tls-access-token":"TLS + 访问令牌","tls-private-key":"TLS + 私钥"},"server-port":"服务器端口",statistics:{statistic:"统计信息",statistics:"统计信息","statistic-commands-empty":"无可用统计信息",commands:"命令","send-period":"统计信息发送周期(秒)","send-period-required":"统计信息发送周期是必需的","send-period-min":"统计信息发送周期不能小于60","send-period-pattern":"统计信息发送周期无效","check-connectors-configuration":"检查连接器配置(秒)","check-connectors-configuration-required":"检查连接器配置是必需的","check-connectors-configuration-min":"检查连接器配置不能小于1","check-connectors-configuration-pattern":"检查连接器配置无效",add:"添加命令",timeout:"超时时间","timeout-required":"超时时间是必需的","timeout-min":"超时时间不能小于1","timeout-pattern":"超时时间无效","attribute-name":"属性名称","attribute-name-required":"属性名称是必需的",command:"命令","command-required":"命令是必需的","command-pattern":"命令无效",remove:"删除命令"},storage:"存储","storage-max-file-records":"文件中的最大记录数","storage-max-files":"最大文件数","storage-max-files-min":"最小值为1。","storage-max-files-pattern":"数字无效。","storage-max-files-required":"数字是必需的。","storage-max-records":"存储中的最大记录数","storage-max-records-min":"最小记录数为1。","storage-max-records-pattern":"数字无效。","storage-max-records-required":"最大记录项必填。","storage-read-record-count":"存储中的读取记录数","storage-read-record-count-min":"最小记录数为1。","storage-read-record-count-pattern":"数字不合法。","storage-read-record-count-required":"需要读取记录数。","storage-max-read-record-count":"存储中的最大读取记录数","storage-max-read-record-count-min":"最小记录数为1。","storage-max-read-record-count-pattern":"数字不合法。","storage-max-read-record-count-required":"最大读取记录数必需。","storage-data-folder-path":"数据文件夹路径","storage-data-folder-path-required":"需要数据文件夹路径。","storage-pack-size":"最大事件包大小","storage-pack-size-min":"最小值为1。","storage-pack-size-pattern":"数字无效。","storage-pack-size-required":"最大事件包大小必填。","storage-path":"存储路径","storage-path-required":"存储路径必填。","storage-type":"存储类型","storage-types":{"file-storage":"文件存储","memory-storage":"内存存储",sqlite:"SQLITE"},thingsboard:"ThingsBoard",general:"常规","thingsboard-host":"ThingsBoard主机","thingsboard-host-required":"主机必填。","thingsboard-port":"ThingsBoard端口","thingsboard-port-max":"最大端口号为65535。","thingsboard-port-min":"最小端口号为1。","thingsboard-port-pattern":"端口无效。","thingsboard-port-required":"端口必填。",tidy:"整理","tidy-tip":"整理配置JSON","title-connectors-json":"连接器 {{typeName}} 配置","tls-path-ca-certificate":"网关上CA证书的路径","tls-path-client-certificate":"网关上客户端证书的路径","messages-ttl-check-in-hours":"消息TTL检查小时数","messages-ttl-check-in-hours-required":"需要提供消息TTL检查小时数。","messages-ttl-check-in-hours-min":"最小值为1。","messages-ttl-check-in-hours-pattern":"数字无效。","messages-ttl-in-days":"消息TTL天数","messages-ttl-in-days-required":"需要提供消息TTL天数。","messages-ttl-in-days-min":"最小值为1。","messages-ttl-in-days-pattern":"数字无效。","mqtt-qos":"QoS","mqtt-qos-required":"需要提供QoS","mqtt-qos-range":"QoS值的范围是从0到1","tls-path-private-key":"网关上私钥的路径","toggle-fullscreen":"切换全屏","transformer-json-config":"配置JSON*","update-config":"添加/更新配置JSON",hints:{"remote-configuration":"启用对网关的远程配置和管理","remote-shell":"通过远程Shell小部件启用对网关操作系统的远程控制",host:"ThingsBoard 主机名或IP地址",port:"ThingsBoard MQTT服务端口",token:"ThingsBoard 网关访问令牌","client-id":"ThingsBoard 网关MQTT客户端ID",username:"ThingsBoard 网关MQTT用户名",password:"ThingsBoard 网关MQTT密码","ca-cert":"CA证书文件的路径","date-form":"日志消息中的日期格式","data-folder":"包含数据的文件夹的路径(相对或绝对路径)","log-format":"日志消息格式","remote-log":"启用对网关的远程日志记录和日志读取","backup-count":"如果备份计数大于0,则在执行轮换时,最多保留备份计数个文件-最旧的文件将被删除",storage:"提供将数据发送到平台之前保存传入数据的配置","max-file-count":"将创建的文件的最大数量","max-read-count":"从存储中获取的消息计数并发送到ThingsBoard","max-records":"一个文件中存储的最大记录数","read-record-count":"从存储中获取的消息计数并发送到ThingsBoard","max-records-count":"在将数据发送到ThingsBoard之前,存储中的最大数据计数","ttl-check-hour":"网关多久检查一次数据是否过时","ttl-messages-day":"存储将保存数据的最大天数",commands:"用于收集附加统计信息的命令",attribute:"统计遥测键",timeout:"命令执行的超时时间",command:"命令执行的结果,将用作遥测的值","check-device-activity":"启用监视每个连接设备的活动","inactivity-timeout":"在此时间后,网关将断开设备的连接","inactivity-period":"设备活动检查的周期","minimal-pack-delay":"发送消息包之间的延迟(减小此设置会导致增加CPU使用率)",qos:"MQTT消息传递的服务质量(0-至多一次,1-至少一次)","server-port":"GRPC服务器侦听传入连接的网络端口","grpc-keep-alive-timeout":"在考虑连接死亡之前,服务器等待keepalive ping响应的最长时间","grpc-keep-alive":"没有活动RPC调用时两个连续keepalive ping消息之间的持续时间","grpc-min-time-between-pings":"服务器在发送keepalive ping消息之间应等待的最小时间量","grpc-max-pings-without-data":"在没有接收到任何数据之前,服务器可以发送的keepalive ping消息的最大数量,然后将连接视为死亡","grpc-min-ping-interval-without-data":"在没有发送或接收数据时,服务器在发送keepalive ping消息之间应等待的最小时间量","permit-without-calls":"允许服务器在没有活动RPC调用时保持GRPC连接活动"},"docker-label":"使用以下指令在 Docker compose 中运行 IoT 网关,并为选定的设备提供凭据","install-docker-compose":"使用以下说明下载、安装和设置 Docker Compose","download-configuration-file":"下载配置文件","download-docker-compose":"下载您的网关的 docker-compose.yml 文件","launch-gateway":"启动网关","launch-docker-compose":"在包含 docker-compose.yml 文件的文件夹中,使用以下命令在终端中启动网关"},ut={"add-entry":"增加配置","connector-add":"增加新連接器","connector-enabled":"啟用連接器","connector-name":"連接器名稱","connector-name-required":"需要連接器名稱。","connector-type":"連接器類型","connector-type-required":"需要連接器類型。",connectors:"連接器配置","create-new-gateway":"建立新閘道","create-new-gateway-text":"您確定要建立一個名稱為:'{{gatewayName}}'的新閘道嗎?",delete:"刪除配置","download-tip":"下載配置文件",gateway:"閘道","gateway-exists":"同名設備已存在。","gateway-name":"閘道名稱","gateway-name-required":"需要閘道名稱。","gateway-saved":"閘道配置已成功保存。","json-parse":"無效的JSON","json-required":"欄位不能為空。","no-connectors":"無連接器","no-data":"無配置","no-gateway-found":"未找到閘道。","no-gateway-matching":" 未找到'{{item}}'。","path-logs":"日誌文件的路徑","path-logs-required":"需要路徑。",remote:"移除配置","remote-logging-level":"日誌記錄級別","remove-entry":"移除配置","save-tip":"保存配置文件","security-type":"安全類型","security-types":{"access-token":"訪問Token",tls:"TLS"},storage:"貯存","storage-max-file-records":"文件中的最大紀錄","storage-max-files":"最大文件數","storage-max-files-min":"最小數量為1。","storage-max-files-pattern":"號碼無效。","storage-max-files-required":"需要號碼。","storage-max-records":"存儲中的最大紀錄","storage-max-records-min":"最小紀錄數為1。","storage-max-records-pattern":"號碼無效。","storage-max-records-required":"需要最大紀錄數","storage-pack-size":"最大事件包大小","storage-pack-size-min":"最小數量為1。","storage-pack-size-pattern":"號碼無效.","storage-pack-size-required":"需要最大事件包大小","storage-path":"存儲路徑","storage-path-required":"需要存儲路徑。","storage-type":"存儲類型","storage-types":{"file-storage":"文件存儲","memory-storage":"記憶體存儲"},thingsboard:"ThingsBoard","thingsboard-host":"ThingsBoard主機","thingsboard-host-required":"需要主機。","thingsboard-port":"ThingsBoard連接埠","thingsboard-port-max":"最大埠號為 65535。","thingsboard-port-min":"最小埠號為1。","thingsboard-port-pattern":"連接埠無效。","thingsboard-port-required":"需要連接埠。",tidy:"整理","tidy-tip":"整理配置JSON","title-connectors-json":"連接器{{typeName}}配置","tls-path-ca-certificate":"閘道上CA證書的路徑","tls-path-client-certificate":"閘道上用戶端憑據的路徑","tls-path-private-key":"閘道上的私鑰路徑","toggle-fullscreen":"切換全螢幕","transformer-json-config":"配置JSON*","update-config":"增加/更新配置JSON"};var gt={3.6:{socket:{type:"TCP",address:"127.0.0.1",port:5e4,bufferSize:1024},devices:[{address:"*:*",deviceName:"Device Example",deviceType:"default",encoding:"utf-8",telemetry:[{key:"temp",byteFrom:0,byteTo:-1},{key:"hum",byteFrom:0,byteTo:2}],attributes:[{key:"name",byteFrom:0,byteTo:-1},{key:"num",byteFrom:2,byteTo:4}],attributeRequests:[{type:"shared",requestExpressionSource:"constant",attributeNameExpressionSource:"constant",requestExpression:"${[0:3]==atr}",attributeNameExpression:"[3:]"}],attributeUpdates:[{encoding:"utf-16",attributeOnThingsBoard:"sharedName"}],serverSideRpc:[{methodRPC:"rpcMethod1",withResponse:!0,encoding:"utf-8"}]}]},legacy:{type:"TCP",address:"127.0.0.1",port:5e4,bufferSize:1024,devices:[{address:"*:*",deviceName:"Device Example",deviceType:"default",encoding:"utf-8",telemetry:[{key:"temp",byteFrom:0,byteTo:-1},{key:"hum",byteFrom:0,byteTo:2}],attributes:[{key:"name",byteFrom:0,byteTo:-1},{key:"num",byteFrom:2,byteTo:4}],attributeRequests:[{type:"shared",requestExpression:"${[0:3]==atr}",attributeNameExpression:"[3:]"}],attributeUpdates:[{encoding:"utf-16",attributeOnThingsBoard:"sharedName"}],serverSideRpc:[{methodRPC:"rpcMethod1",withResponse:!0,methodProcessing:"write",encoding:"utf-8"}]}]}},yt={"3.5.2":{broker:{host:"127.0.0.1",port:1883,clientId:"ThingsBoard_gateway",version:5,maxMessageNumberPerWorker:10,maxNumberOfWorkers:100,sendDataOnlyOnChange:!1,security:{type:"anonymous"}},mapping:[{topicFilter:"sensor/data",subscriptionQos:1,converter:{type:"json",deviceInfo:{deviceNameExpressionSource:"message",deviceNameExpression:"${serialNumber}",deviceProfileExpressionSource:"message",deviceProfileExpression:"${sensorType}"},sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"string",key:"model",value:"${sensorModel}"},{type:"string",key:"${sensorModel}",value:"on"}],timeseries:[{type:"string",key:"temperature",value:"${temp}"},{type:"double",key:"humidity",value:"${hum}"},{type:"string",key:"combine",value:"${hum}:${temp}"}]}},{topicFilter:"sensor/+/data",subscriptionQos:1,converter:{type:"json",deviceInfo:{deviceNameExpressionSource:"topic",deviceNameExpression:"(?<=sensor/)(.*?)(?=/data)",deviceProfileExpressionSource:"constant",deviceProfileExpression:"Thermometer"},sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"string",key:"model",value:"${sensorModel}"}],timeseries:[{type:"double",key:"temperature",value:"${temp}"},{type:"string",key:"humidity",value:"${hum}"}]}},{topicFilter:"sensor/raw_data",subscriptionQos:1,converter:{type:"bytes",deviceInfo:{deviceNameExpressionSource:"message",deviceNameExpression:"[0:4]",deviceProfileExpressionSource:"constant",deviceProfileExpression:"default"},sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"raw",key:"rawData",value:"[:]"}],timeseries:[{type:"raw",key:"temp",value:"[4:]"}]}},{topicFilter:"custom/sensors/+",subscriptionQos:1,converter:{type:"custom",extension:"CustomMqttUplinkConverter",cached:!0,extensionConfig:{temperature:2,humidity:2,batteryLevel:1}}}],requestsMapping:{connectRequests:[{topicFilter:"sensor/connect",deviceInfo:{deviceNameExpressionSource:"message",deviceNameExpression:"${serialNumber}",deviceProfileExpressionSource:"constant",deviceProfileExpression:"Thermometer"}},{topicFilter:"sensor/+/connect",deviceInfo:{deviceNameExpressionSource:"topic",deviceNameExpression:"(?<=sensor/)(.*?)(?=/connect)",deviceProfileExpressionSource:"constant",deviceProfileExpression:"Thermometer"}}],disconnectRequests:[{topicFilter:"sensor/disconnect",deviceInfo:{deviceNameExpressionSource:"message",deviceNameExpression:"${serialNumber}"}},{topicFilter:"sensor/+/disconnect",deviceInfo:{deviceNameExpressionSource:"topic",deviceNameExpression:"(?<=sensor/)(.*?)(?=/connect)"}}],attributeRequests:[{retain:!1,topicFilter:"v1/devices/me/attributes/request",deviceInfo:{deviceNameExpressionSource:"message",deviceNameExpression:"${serialNumber}"},attributeNameExpressionSource:"message",attributeNameExpression:"${versionAttribute}, ${pduAttribute}",topicExpression:"devices/${deviceName}/attrs",valueExpression:"${attributeKey}: ${attributeValue}"}],attributeUpdates:[{retain:!0,deviceNameFilter:".*",attributeFilter:"firmwareVersion",topicExpression:"sensor/${deviceName}/${attributeKey}",valueExpression:'{"${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{type:"twoWay",deviceNameFilter:".*",methodFilter:"echo",requestTopicExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",responseTopicExpression:"sensor/${deviceName}/response/${methodName}/${requestId}",responseTopicQoS:1,responseTimeout:1e4,valueExpression:"${params}"},{type:"oneWay",deviceNameFilter:".*",methodFilter:"no-reply",requestTopicExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",valueExpression:"${params}"}]}},legacy:{broker:{name:"Default Local Broker",host:"127.0.0.1",port:1883,clientId:"ThingsBoard_gateway",version:5,maxMessageNumberPerWorker:10,maxNumberOfWorkers:100,sendDataOnlyOnChange:!1,security:{type:"basic",username:"user",password:"password"}},mapping:[{topicFilter:"sensor/data",converter:{type:"json",deviceNameJsonExpression:"${serialNumber}",deviceTypeJsonExpression:"${sensorType}",sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"string",key:"model",value:"${sensorModel}"},{type:"string",key:"${sensorModel}",value:"on"}],timeseries:[{type:"double",key:"temperature",value:"${temp}"},{type:"double",key:"humidity",value:"${hum}"},{type:"string",key:"combine",value:"${hum}:${temp}"}]}},{topicFilter:"sensor/+/data",converter:{type:"json",deviceNameTopicExpression:"(?<=sensor/)(.*?)(?=/data)",deviceTypeTopicExpression:"Thermometer",sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"string",key:"model",value:"${sensorModel}"}],timeseries:[{type:"double",key:"temperature",value:"${temp}"},{type:"double",key:"humidity",value:"${hum}"}]}},{topicFilter:"sensor/raw_data",converter:{type:"bytes",deviceNameExpression:"[0:4]",deviceTypeExpression:"default",sendDataOnlyOnChange:!1,timeout:6e4,attributes:[{type:"raw",key:"rawData",value:"[:]"}],timeseries:[{type:"raw",key:"temp",value:"[4:]"}]}},{topicFilter:"custom/sensors/+",converter:{type:"custom",extension:"CustomMqttUplinkConverter",cached:!0,"extension-config":{temperatureBytes:2,humidityBytes:2,batteryLevelBytes:1}}}],connectRequests:[{topicFilter:"sensor/connect",deviceNameJsonExpression:"${serialNumber}"},{topicFilter:"sensor/+/connect",deviceNameTopicExpression:"(?<=sensor/)(.*?)(?=/connect)"}],disconnectRequests:[{topicFilter:"sensor/disconnect",deviceNameJsonExpression:"${serialNumber}"},{topicFilter:"sensor/+/disconnect",deviceNameTopicExpression:"(?<=sensor/)(.*?)(?=/disconnect)"}],attributeRequests:[{retain:!1,topicFilter:"v1/devices/me/attributes/request",deviceNameJsonExpression:"${serialNumber}",attributeNameJsonExpression:"${versionAttribute}, ${pduAttribute}",topicExpression:"devices/${deviceName}/attrs",valueExpression:"${attributeKey}: ${attributeValue}"}],attributeUpdates:[{retain:!0,deviceNameFilter:".*",attributeFilter:"firmwareVersion",topicExpression:"sensor/${deviceName}/${attributeKey}",valueExpression:'{"${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{deviceNameFilter:".*",methodFilter:"echo",requestTopicExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",responseTopicExpression:"sensor/${deviceName}/response/${methodName}/${requestId}",responseTimeout:1e4,valueExpression:"${params}"},{deviceNameFilter:".*",methodFilter:"no-reply",requestTopicExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",valueExpression:"${params}"}]}},ht={"3.5.2":{master:{slaves:[{host:"127.0.0.1",port:5021,type:"tcp",method:"socket",timeout:35,byteOrder:"LITTLE",wordOrder:"LITTLE",retries:!0,retryOnEmpty:!0,retryOnInvalid:!0,pollPeriod:5e3,unitId:1,deviceName:"Temp Sensor",deviceType:"default",connectAttemptTimeMs:5e3,connectAttemptCount:5,waitAfterFailedAttemptsMs:3e5,reportStrategy:{type:"ON_REPORT_PERIOD",reportPeriod:3e4},attributes:[{tag:"string_read",type:"string",functionCode:4,objectsCount:4,address:1,reportStrategy:{type:"ON_REPORT_PERIOD",reportPeriod:15e3}},{tag:"bits_read",type:"bits",functionCode:4,objectsCount:1,address:5},{tag:"8int_read",type:"8int",functionCode:4,objectsCount:1,address:6},{tag:"16int_read",type:"16int",functionCode:4,objectsCount:1,address:7},{tag:"32int_read_divider",type:"32int",functionCode:4,objectsCount:2,address:8,divider:10},{tag:"8int_read_multiplier",type:"8int",functionCode:4,objectsCount:1,address:10,multiplier:10},{tag:"32int_read",type:"32int",functionCode:4,objectsCount:2,address:11},{tag:"64int_read",type:"64int",functionCode:4,objectsCount:4,address:13}],timeseries:[{tag:"8uint_read",type:"8uint",functionCode:4,objectsCount:1,address:17,reportStrategy:{type:"ON_REPORT_PERIOD",reportPeriod:15e3}},{tag:"16uint_read",type:"16uint",functionCode:4,objectsCount:2,address:18},{tag:"32uint_read",type:"32uint",functionCode:4,objectsCount:4,address:20},{tag:"64uint_read",type:"64uint",functionCode:4,objectsCount:1,address:24},{tag:"16float_read",type:"16float",functionCode:4,objectsCount:1,address:25},{tag:"32float_read",type:"32float",functionCode:4,objectsCount:2,address:26},{tag:"64float_read",type:"64float",functionCode:4,objectsCount:4,address:28}],attributeUpdates:[{tag:"shared_attribute_write",type:"32int",functionCode:6,objectsCount:2,address:29}],rpc:[{tag:"setValue",type:"bits",functionCode:5,objectsCount:1,address:31},{tag:"getValue",type:"bits",functionCode:1,objectsCount:1,address:31},{tag:"setCPUFanSpeed",type:"32int",functionCode:16,objectsCount:2,address:33},{tag:"getCPULoad",type:"32int",functionCode:4,objectsCount:2,address:35}]}]},slave:{type:"tcp",host:"127.0.0.1",port:5026,method:"socket",deviceName:"Modbus Slave Example",deviceType:"default",pollPeriod:5e3,sendDataToThingsBoard:!1,byteOrder:"LITTLE",wordOrder:"LITTLE",unitId:0,values:{holding_registers:{attributes:[{address:1,type:"string",tag:"sm",objectsCount:1,value:"ON"}],timeseries:[{address:2,type:"8int",tag:"smm",objectsCount:1,value:"12334"}],attributeUpdates:[{tag:"shared_attribute_write",type:"32int",functionCode:6,objectsCount:2,address:29,value:1243}],rpc:[{tag:"setValue",type:"bits",functionCode:5,objectsCount:1,address:31,value:1}]},coils_initializer:{attributes:[{address:5,type:"8int",tag:"coil",objectsCount:1,value:0}],timeseries:[],attributeUpdates:[],rpc:[]}}}},legacy:{master:{slaves:[{host:"127.0.0.1",port:5021,type:"tcp",method:"socket",timeout:35,byteOrder:"LITTLE",wordOrder:"LITTLE",retries:!0,retryOnEmpty:!0,retryOnInvalid:!0,pollPeriod:5e3,unitId:1,deviceName:"Temp Sensor",deviceType:"default",sendDataOnlyOnChange:!0,connectAttemptTimeMs:5e3,connectAttemptCount:5,waitAfterFailedAttemptsMs:3e5,attributes:[{tag:"string_read",type:"string",functionCode:4,objectsCount:4,address:1},{tag:"bits_read",type:"bits",functionCode:4,objectsCount:1,address:5},{tag:"16int_read",type:"16int",functionCode:4,objectsCount:1,address:7},{tag:"32int_read_divider",type:"32int",functionCode:4,objectsCount:2,address:8,divider:10},{tag:"32int_read",type:"32int",functionCode:4,objectsCount:2,address:11},{tag:"64int_read",type:"64int",functionCode:4,objectsCount:4,address:13}],timeseries:[{tag:"16uint_read",type:"16uint",functionCode:4,objectsCount:2,address:18},{tag:"32uint_read",type:"32uint",functionCode:4,objectsCount:4,address:20},{tag:"64uint_read",type:"64uint",functionCode:4,objectsCount:1,address:24},{tag:"16float_read",type:"16float",functionCode:4,objectsCount:1,address:25},{tag:"32float_read",type:"32float",functionCode:4,objectsCount:2,address:26},{tag:"64float_read",type:"64float",functionCode:4,objectsCount:4,address:28}],attributeUpdates:[{tag:"shared_attribute_write",type:"32int",functionCode:6,objectsCount:2,address:29}],rpc:[{tag:"setValue",type:"bits",functionCode:5,objectsCount:1,address:31},{tag:"getValue",type:"bits",functionCode:1,objectsCount:1,address:31},{tag:"setCPUFanSpeed",type:"32int",functionCode:16,objectsCount:2,address:33},{tag:"getCPULoad",type:"32int",functionCode:4,objectsCount:2,address:35}]}]},slave:{type:"tcp",host:"127.0.0.1",port:5026,method:"socket",deviceName:"Modbus Slave Example",deviceType:"default",pollPeriod:5e3,sendDataToThingsBoard:!1,byteOrder:"LITTLE",wordOrder:"LITTLE",unitId:0,values:{holding_registers:[{attributes:[{address:1,type:"string",tag:"sm",objectsCount:1,value:"ON"}],timeseries:[{address:2,type:"int",tag:"smm",objectsCount:1,value:"12334"}],attributeUpdates:[{tag:"shared_attribute_write",type:"32int",functionCode:6,objectsCount:2,address:29,value:1243}],rpc:[{tag:"setValue",type:"bits",functionCode:5,objectsCount:1,address:31,value:1}]}],coils_initializer:[{attributes:[{address:5,type:"string",tag:"sm",objectsCount:1,value:"12"}],timeseries:[],attributeUpdates:[],rpc:[]}]}}}},ft={"3.5.2":{server:{url:"localhost:4840/freeopcua/server/",timeoutInMillis:5e3,scanPeriodInMillis:36e5,pollPeriodInMillis:5e3,enableSubscriptions:!0,subCheckPeriodInMillis:100,showMap:!1,security:"Basic128Rsa15",identity:{type:"anonymous"}},mapping:[{deviceNodePattern:"Root\\.Objects\\.Device1",deviceNodeSource:"path",deviceInfo:{deviceNameExpression:"Device ${Root\\.Objects\\.Device1\\.serialNumber}",deviceNameExpressionSource:"path",deviceProfileExpression:"Device",deviceProfileExpressionSource:"constant"},attributes:[{key:"temperature °C",type:"path",value:"${ns=2;i=5}"}],timeseries:[{key:"humidity",type:"path",value:"${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Humidity}"},{key:"batteryLevel",type:"path",value:"${Battery\\.batteryLevel}"}],rpc_methods:[{method:"multiply",arguments:[{type:"integer",value:2},{type:"integer",value:4}]}],attributes_updates:[{key:"deviceName",type:"path",value:"Root\\.Objects\\.Device1\\.serialNumber"}]}]},legacy:{server:{name:"OPC-UA Default Server",url:"localhost:4840/freeopcua/server/",timeoutInMillis:5e3,scanPeriodInMillis:5e3,disableSubscriptions:!1,subCheckPeriodInMillis:100,showMap:!1,security:"Basic128Rsa15",identity:{type:"anonymous"},mapping:[{deviceNodePattern:"Root\\.Objects\\.Device1",deviceNamePattern:"Device ${Root\\.Objects\\.Device1\\.serialNumber}",attributes:[{key:"temperature °C",path:"${ns=2;i=5}"}],timeseries:[{key:"humidity",path:"${Root\\.Objects\\.Device1\\.TemperatureAndHumiditySensor\\.Humidity}"},{key:"batteryLevel",path:"${Battery\\.batteryLevel}"}],rpc_methods:[{method:"multiply",arguments:[2,4]}],attributes_updates:[{attributeOnThingsBoard:"deviceName",attributeOnDevice:"Root\\.Objects\\.Device1\\.serialNumber"}]}]}}},vt={passiveScanMode:!0,showMap:!1,scanner:{timeout:1e4,deviceName:"Device name"},devices:[{name:"Temperature and humidity sensor",MACAddress:"4C:65:A8:DF:85:C0",pollPeriod:5e5,showMap:!1,timeout:1e4,connectRetry:5,connectRetryInSeconds:0,waitAfterConnectRetries:10,telemetry:[{key:"temperature",method:"notify",characteristicUUID:"226CAA55-6476-4566-7562-66734470666D",valueExpression:"[2]"},{key:"humidity",method:"notify",characteristicUUID:"226CAA55-6476-4566-7562-66734470666D",valueExpression:"[0]"}],attributes:[{key:"name",method:"read",characteristicUUID:"00002A00-0000-1000-8000-00805F9B34FB",valueExpression:"[0:2]cm [2:]A"},{key:"values",method:"read",characteristicUUID:"00002A00-0000-1000-8000-00805F9B34FB",valueExpression:"All values: [:]"}],attributeUpdates:[{attributeOnThingsBoard:"sharedName",characteristicUUID:"00002A00-0000-1000-8000-00805F9B34FB"}],serverSideRpc:[{methodRPC:"rpcMethod1",withResponse:!0,characteristicUUID:"00002A00-0000-1000-8000-00805F9B34FB",methodProcessing:"read"},{methodRPC:"rpcMethod2",withResponse:!0,characteristicUUID:"00002A00-0000-1000-8000-00805F9B34FB",methodProcessing:"write"},{methodRPC:"rpcMethod3",withResponse:!0,methodProcessing:"scan"}]}]},bt={host:"http://127.0.0.1:5000",SSLVerify:!0,security:{type:"basic",username:"user",password:"password"},mapping:[{url:"getdata",httpMethod:"GET",httpHeaders:{ACCEPT:"application/json"},content:{name:"morpheus",job:"leader"},allowRedirects:!0,timeout:.5,scanPeriod:5,converter:{type:"json",deviceNameJsonExpression:"SD8500",deviceTypeJsonExpression:"SD",attributes:[{key:"serialNumber",type:"string",value:"${serial}"}],telemetry:[{key:"Maintainer",type:"string",value:"${Developer}"},{key:"combine",type:"string",value:"${Developer}:${hum}"}]}},{url:"get_info",httpMethod:"GET",httpHeaders:{ACCEPT:"application/json"},allowRedirects:!0,timeout:.5,scanPeriod:100,converter:{type:"custom",deviceNameJsonExpression:"SD8500",deviceTypeJsonExpression:"SD",extension:"CustomRequestUplinkConverter","extension-config":[{key:"Totaliser",type:"float",fromByte:0,toByte:4,byteorder:"big",signed:!0,multiplier:1},{key:"Flow",type:"int",fromByte:4,toByte:6,byteorder:"big",signed:!0,multiplier:.01},{key:"Temperature",type:"int",fromByte:8,toByte:10,byteorder:"big",signed:!0,multiplier:.01},{key:"Pressure",type:"int",fromByte:12,toByte:14,byteorder:"big",signed:!0,multiplier:.01},{key:"deviceStatus",type:"int",byteAddress:15,fromBit:4,toBit:8,byteorder:"big",signed:!1},{key:"OUT2",type:"int",byteAddress:15,fromBit:1,toBit:2,byteorder:"big"},{key:"OUT1",type:"int",byteAddress:15,fromBit:0,toBit:1,byteorder:"big"}]}}],attributeUpdates:[{httpMethod:"POST",httpHeaders:{"CONTENT-TYPE":"application/json"},timeout:.5,tries:3,allowRedirects:!0,deviceNameFilter:"SD.*",attributeFilter:"send_data",requestUrlExpression:"sensor/${deviceName}/${attributeKey}",requestValueExpression:'{"${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{deviceNameFilter:".*",methodFilter:"echo",requestUrlExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",responseTimeout:1,httpMethod:"GET",requestValueExpression:"${params}",responseValueExpression:"${temp}",timeout:.5,tries:3,httpHeaders:{"Content-Type":"application/json"}},{deviceNameFilter:".*",methodFilter:"no-reply",requestUrlExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",httpMethod:"POST",requestValueExpression:"${params}",httpHeaders:{"Content-Type":"application/json"}}]},xt={interface:"socketcan",channel:"vcan0",backend:{fd:!0},reconnectPeriod:5,devices:[{name:"Car",sendDataOnlyOnChange:!1,enableUnknownRpc:!0,strictEval:!1,attributes:[{key:"isDriverDoorOpened",nodeId:41,command:"2:2:big:8717",value:"4:1:int",expression:"bool(value & 0b00000100)",polling:{type:"once",dataInHex:"AB CD AB CD"}}],timeseries:[{key:"rpm",nodeId:1918,isExtendedId:!0,command:"2:2:big:48059",value:"4:2:big:int",expression:"value / 4",polling:{type:"always",period:5,dataInHex:"aaaa bbbb aaaa bbbb"}},{key:"milliage",nodeId:1918,isExtendedId:!0,value:"4:2:little:int",expression:"value * 10",polling:{type:"always",period:30,dataInHex:"aa bb cc dd ee ff aa bb"}}],attributeUpdates:[{attributeOnThingsBoard:"softwareVersion",nodeId:64,isExtendedId:!0,dataLength:4,dataExpression:"value + 5",dataByteorder:"little"}],serverSideRpc:[{method:"sendSameData",nodeId:4,isExtendedId:!0,isFd:!0,bitrateSwitch:!0,dataInHex:"aa bb cc dd ee ff aa bb aa bb cc d ee ff"},{method:"setLightLevel",nodeId:5,dataLength:2,dataByteorder:"little",dataBefore:"00AA"},{method:"setSpeed",nodeId:16,dataAfter:"0102",dataExpression:"userSpeed if maxAllowedSpeed > userSpeed else maxAllowedSpeed"}]}]},wt={"3.6.2":{application:{objectName:"TB_gateway",host:"0.0.0.0",port:"47808",objectIdentifier:599,maxApduLengthAccepted:1476,segmentationSupported:"segmentedBoth",vendorIdentifier:15},devices:[{deviceInfo:{deviceNameExpression:"BACnet Device ${objectName}",deviceProfileExpression:"default",deviceNameExpressionSource:"expression",deviceProfileExpressionSource:"constant"},host:"192.168.2.110",port:"47808",pollPeriod:1e4,attributes:[{key:"temperature",objectType:"analogOutput",objectId:"1",propertyId:"presentValue"}],timeseries:[{key:"state",objectType:"binaryValue",objectId:"1",propertyId:"presentValue"}],attributeUpdates:[{key:"brightness",objectType:"analogOutput",objectId:"1",propertyId:"presentValue"}],serverSideRpc:[{method:"set_state",requestType:"writeProperty",requestTimeout:1e4,objectType:"binaryOutput",objectId:"1",propertyId:"presentValue"},{method:"get_state",requestType:"readProperty",requestTimeout:1e4,objectType:"binaryOutput",objectId:"1",propertyId:"presentValue"}]}]},legacy:{general:{objectName:"TB_gateway",address:"0.0.0.0:47808",objectIdentifier:599,maxApduLengthAccepted:1476,segmentationSupported:"segmentedBoth",vendorIdentifier:15},devices:[{deviceName:"BACnet Device ${objectName}",deviceType:"default",address:"192.168.2.110:47808",pollPeriod:1e4,attributes:[{key:"temperature",type:"string",objectId:"analogOutput:1",propertyId:"presentValue"}],timeseries:[{key:"state",type:"bool",objectId:"binaryValue:1",propertyId:"presentValue"}],attributeUpdates:[{key:"brightness",requestType:"writeProperty",objectId:"analogOutput:1",propertyId:"presentValue"}],serverSideRpc:[{method:"set_state",requestType:"writeProperty",requestTimeout:1e4,objectId:"binaryOutput:1",propertyId:"presentValue"},{method:"get_state",requestType:"readProperty",requestTimeout:1e4,objectId:"binaryOutput:1",propertyId:"presentValue"}]}]}},Ct={connection:{str:"Driver={PostgreSQL};Server=localhost;Port=5432;Database=thingsboard;Uid=postgres;Pwd=postgres;",attributes:{autocommit:!0,timeout:0},encoding:"utf-8",decoding:{char:"utf-8",wchar:"utf-8",metadata:"utf-16le"},reconnect:!0,reconnectPeriod:60},pyodbc:{pooling:!1},polling:{query:"SELECT bool_v, str_v, dbl_v, long_v, entity_id, ts FROM ts_kv WHERE ts > ? ORDER BY ts ASC LIMIT 10",period:10,iterator:{column:"ts",query:"SELECT MIN(ts) - 1 FROM ts_kv",persistent:!1}},mapping:{device:{type:"postgres",name:"'ODBC ' + entity_id"},sendDataOnlyOnChange:!1,attributes:"*",timeseries:[{name:"value",value:"[i for i in [str_v, long_v, dbl_v,bool_v] if i is not None][0]"}]},serverSideRpc:{enableUnknownRpc:!1,overrideRpcConfig:!0,methods:["procedureOne",{name:"procedureTwo",args:["One",2,3]}]}},St={host:"127.0.0.1",port:"5000",SSL:!1,security:{cert:"~/ssl/cert.pem",key:"~/ssl/key.pem"},mapping:[{endpoint:"/my_devices",HTTPMethods:["POST"],security:{type:"anonymous"},converter:{type:"json",deviceNameExpression:"${sensorName}",deviceTypeExpression:"${sensorType}",attributes:[{type:"string",key:"model",value:"${sensorModel}"},{type:"string",key:"certificateNumber",value:"${certificateNumber}"}],timeseries:[{type:"double",key:"temperature",value:"${temp}"},{type:"double",key:"humidity",value:"${hum}"}]}},{endpoint:"/anon1",HTTPMethods:["GET","POST"],security:{type:"anonymous"},converter:{type:"json",deviceNameExpression:"Device 2",deviceTypeExpression:"default",attributes:[{type:"string",key:"model",value:"Model2"}],timeseries:[{type:"double",key:"temperature",value:"${temp}"},{type:"double",key:"humidity",value:"${hum}"}]}},{endpoint:"/anon2",HTTPMethods:["POST"],security:{type:"anonymous"},converter:{type:"custom",deviceNameExpression:"SuperAnonDevice",deviceTypeExpression:"default",extension:"CustomRestUplinkConverter","extension-config":[{key:"Totaliser",datatype:"float",fromByte:0,toByte:4,byteorder:"big",signed:!0,multiplier:1}]}}],attributeRequests:[{endpoint:"/sharedAttributes",type:"shared",HTTPMethods:["POST"],security:{type:"anonymous"},timeout:10,deviceNameExpression:"${deviceName}",attributeNameExpression:"${attribute}${attribute1}"}],attributeUpdates:[{HTTPMethod:"POST",SSLVerify:!1,httpHeaders:{"CONTENT-TYPE":"application/json"},security:{type:"anonymous"},timeout:.5,tries:3,allowRedirects:!0,deviceNameFilter:"SN.*",attributeFilter:".*",requestUrlExpression:"http://127.0.0.1:5001/",valueExpression:'{"deviceName":"${deviceName}","${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{deviceNameFilter:".*",methodFilter:"echo",requestUrlExpression:"http://127.0.0.1:5001/${deviceName}",responseTimeout:1,HTTPMethod:"GET",valueExpression:"${params}",timeout:10,tries:3,httpHeaders:{"Content-Type":"application/json"},security:{type:"anonymous"}},{deviceNameFilter:"SN.*",methodFilter:"post_attributes",requestUrlExpression:"http://127.0.0.1:5000/my_devices",responseTimeout:1,HTTPMethod:"POST",valueExpression:'{"sensorName":"${deviceName}", "sensorModel":"${params.sensorModel}", "certificateNumber":"${params.certificateNumber}", "temp":"${params.temp}", "hum":"${params.hum}"}',timeout:10,tries:3,httpHeaders:{"Content-Type":"application/json"},security:{type:"anonymous"}},{deviceNameFilter:".*",methodFilter:"no-reply",requestUrlExpression:"sensor/${deviceName}/request/${methodName}/${requestId}",HTTPMethod:"POST",valueExpression:"${params}",httpHeaders:{"Content-Type":"application/json"},security:{type:"anonymous"}}]},Et={devices:[{deviceName:"SNMP router",deviceType:"snmp",ip:"snmp.live.gambitcommunications.com",port:161,pollPeriod:5e3,community:"public",attributes:[{key:"ReceivedFromGet",method:"get",oid:"1.3.6.1.2.1.1.1.0",timeout:6},{key:"ReceivedFromMultiGet",method:"multiget",oid:["1.3.6.1.2.1.1.1.0","1.3.6.1.2.1.1.2.0"],timeout:6},{key:"ReceivedFromGetNext",method:"getnext",oid:"1.3.6.1.2.1.1.1.0",timeout:6},{key:"ReceivedFromMultiWalk",method:"multiwalk",oid:["1.3.6.1.2.1.1.1.0","1.3.6.0.1.2.1"]},{key:"ReceivedFromBulkWalk",method:"bulkwalk",oid:["1.3.6.1.2.1.1.1.0","1.3.6.1.2.1.1.2.0"]},{key:"ReceivedFromBulkGet",method:"bulkget",scalarOid:["1.3.6.1.2.1.1.1.0","1.3.6.1.2.1.1.2.0"],repeatingOid:["1.3.6.1.2.1.1.1.0","1.3.6.1.2.1.1.2.0"],maxListSize:10}],telemetry:[{key:"ReceivedFromWalk",community:"private",method:"walk",oid:"1.3.6.1.2.1.1.1.0"},{key:"ReceivedFromTable",method:"table",oid:"1.3.6.1.2.1.1"}],attributeUpdateRequests:[{attributeFilter:"dataToSet",method:"set",oid:"1.3.6.1.2.1.1.1.0"},{attributeFilter:"dataToMultiSet",method:"multiset",mappings:{"1.2.3":"10","2.3.4":"${attribute}"}}],serverSideRpcRequests:[{requestFilter:"setData",method:"set",oid:"1.3.6.1.2.1.1.1.0"},{requestFilter:"multiSetData",method:"multiset"},{requestFilter:"getData",method:"get",oid:"1.3.6.1.2.1.1.1.0"},{requestFilter:"runBulkWalk",method:"bulkwalk",oid:["1.3.6.1.2.1.1.1.0","1.3.6.1.2.1.1.2.0"]}]},{deviceName:"SNMP router",deviceType:"snmp",ip:"127.0.0.1",pollPeriod:5e3,community:"public",converter:"CustomSNMPConverter",attributes:[{key:"ReceivedFromGetWithCustomConverter",method:"get",oid:"1.3.6.1.2.1.1.1.0"}],telemetry:[{key:"ReceivedFromTableWithCustomConverter",method:"table",oid:"1.3.6.1.2.1.1.1.0"}]}]},Tt={host:"0.0.0.0",port:21,TLSSupport:!1,security:{type:"basic",username:"admin",password:"admin"},paths:[{devicePatternName:"asd",devicePatternType:"Device",delimiter:",",path:"fol/*_hello*.txt",readMode:"FULL",maxFileSize:5,pollPeriod:500,txtFileDataView:"SLICED",withSortingFiles:!0,attributes:[{key:"temp",value:"[1:]"},{key:"tmp",value:"[0:1]"}],timeseries:[{type:"int",key:"[0:1]",value:"[0:1]"},{type:"int",key:"temp",value:"[1:]"}]}],attributeUpdates:[{path:"fol/hello.json",deviceNameFilter:".*",writingMode:"WRITE",valueExpression:"{'${attributeKey}':'${attributeValue}'}"}],serverSideRpc:[{deviceNameFilter:".*",methodFilter:"read",valueExpression:"${params}"},{deviceNameFilter:".*",methodFilter:"write",valueExpression:"${params}"}]},It={server:{jid:"gateway@localhost",password:"password",host:"localhost",port:5222,use_ssl:!1,disable_starttls:!1,force_starttls:!0,timeout:1e4,plugins:["xep_0030","xep_0323","xep_0325"]},devices:[{jid:"device@localhost/TMP_1101",deviceNameExpression:"${serialNumber}",deviceTypeExpression:"default",attributes:[{key:"temperature",value:"${temp}"}],timeseries:[{key:"humidity",value:"${hum}"},{key:"combination",value:"${temp}:${hum}"}],attributeUpdates:[{attributeOnThingsBoard:"shared",valueExpression:'{"${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{methodRPC:"rpc1",withResponse:!0,valueExpression:"${params}"}]}]},kt={centralSystem:{name:"Central System",host:"127.0.0.1",port:9e3,connection:{type:"insecure"},security:[{type:"token",tokens:["Bearer ACCESS_TOKEN"]},{type:"basic",credentials:[{username:"admin",password:"admin"}]}]},chargePoints:[{idRegexpPattern:"bidon/hello/CP_1",deviceNameExpression:"${Vendor} ${Model}",deviceTypeExpression:"default",attributes:[{messageTypeFilter:"MeterValues,",key:"temp1",value:"${meter_value[:].sampled_value[:].value}"},{messageTypeFilter:"MeterValues,",key:"vendorId",value:"${connector_id}"}],timeseries:[{messageTypeFilter:"DataTransfer,",key:"temp",value:"${data.temp}"}],attributeUpdates:[{attributeOnThingsBoard:"shared",valueExpression:'{"${attributeKey}":"${attributeValue}"}'}],serverSideRpc:[{methodRPC:"rpc1",withResponse:!0,valueExpression:"${params}"}]}]};const Mt=e("connectorConfigs",{[Je.MQTT]:yt,[Je.MODBUS]:ht,[Je.OPCUA]:ft,[Je.BLE]:vt,[Je.REQUEST]:bt,[Je.CAN]:xt,[Je.BACNET]:wt,[Je.ODBC]:Ct,[Je.REST]:St,[Je.SNMP]:Et,[Je.FTP]:Tt,[Je.SOCKET]:gt,[Je.XMPP]:It,[Je.OCPP]:kt});function Pt(e){const t=Mt[e];if(!t)throw new Error("No default config found");return t}var Ft;e("ModbusDataType",Ft),function(e){e.STRING="string",e.BYTES="bytes",e.BITS="bits",e.INT8="8int",e.UINT8="8uint",e.INT16="16int",e.UINT16="16uint",e.FLOAT16="16float",e.INT32="32int",e.UINT32="32uint",e.FLOAT32="32float",e.INT64="64int",e.UINT64="64uint",e.FLOAT64="64float"}(Ft||e("ModbusDataType",Ft={}));const Ot=e("ModbusEditableDataTypes",[Ft.BYTES,Ft.BITS,Ft.STRING]);var qt,Bt;e("ModbusObjectCountByDataType",qt),function(e){e[e["8int"]=1]="8int",e[e["8uint"]=1]="8uint",e[e["16int"]=1]="16int",e[e["16uint"]=1]="16uint",e[e["16float"]=1]="16float",e[e["32int"]=2]="32int",e[e["32uint"]=2]="32uint",e[e["32float"]=2]="32float",e[e["64int"]=4]="64int",e[e["64uint"]=4]="64uint",e[e["64float"]=4]="64float"}(qt||e("ModbusObjectCountByDataType",qt={})),e("MappingValueType",Bt),function(e){e.STRING="string",e.INTEGER="integer",e.DOUBLE="double",e.BOOLEAN="boolean"}(Bt||e("MappingValueType",Bt={}));const Rt=e("mappingValueTypesMap",new Map([[Bt.STRING,{name:"value.string",icon:"mdi:format-text"}],[Bt.INTEGER,{name:"value.integer",icon:"mdi:numeric"}],[Bt.DOUBLE,{name:"value.double",icon:"mdi:numeric"}],[Bt.BOOLEAN,{name:"value.boolean",icon:"mdi:checkbox-marked-outline"}]])),Nt=e("ModbusFunctionCodeTranslationsMap",new Map([[1,"gateway.function-codes.read-coils"],[2,"gateway.function-codes.read-discrete-inputs"],[3,"gateway.function-codes.read-multiple-holding-registers"],[4,"gateway.function-codes.read-input-registers"],[5,"gateway.function-codes.write-single-coil"],[6,"gateway.function-codes.write-single-holding-register"],[15,"gateway.function-codes.write-multiple-coils"],[16,"gateway.function-codes.write-multiple-holding-registers"]]));var _t,Dt,Vt;e("ConfigurationModes",_t),function(e){e.BASIC="basic",e.ADVANCED="advanced"}(_t||e("ConfigurationModes",_t={})),e("ReportStrategyType",Dt),function(e){e.OnChange="ON_CHANGE",e.OnReportPeriod="ON_REPORT_PERIOD",e.OnChangeOrReportPeriod="ON_CHANGE_OR_REPORT_PERIOD",e.OnReceived="ON_RECEIVED"}(Dt||e("ReportStrategyType",Dt={})),e("ReportStrategyDefaultValue",Vt),function(e){e[e.Gateway=6e4]="Gateway",e[e.Connector=6e4]="Connector",e[e.Device=3e4]="Device",e[e.Key=15e3]="Key"}(Vt||e("ReportStrategyDefaultValue",Vt={}));const Gt=e("ReportStrategyTypeTranslationsMap",new Map([[Dt.OnChange,"gateway.report-strategy.on-change"],[Dt.OnReportPeriod,"gateway.report-strategy.on-report-period"],[Dt.OnChangeOrReportPeriod,"gateway.report-strategy.on-change-or-report-period"],[Dt.OnReceived,"gateway.report-strategy.on-received"]]));var At;!function(e){e.EXCEPTION="EXCEPTION"}(At||(At={}));const jt={...We,...At},Lt=()=>[10,20,30];function Ut(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"a",17),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).$implicit,a=t.ɵɵnextContext();return t.ɵɵresetView(a.onTabChanged(n))})),t.ɵɵtext(1),t.ɵɵelementEnd()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("active",a.activeLink.name===e.name),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}function $t(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",18),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,1,"widgets.gateway.created-time")))}function zt(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtext(1),t.ɵɵpipe(2,"date"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,e.ts,"yyyy-MM-dd HH:mm:ss")," ")}}function Kt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,1,"widgets.gateway.level")))}function Ht(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell")(1,"span"),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵclassMap(a.statusClass(e.status)),t.ɵɵadvance(),t.ɵɵtextInterpolate(e.status)}}function Wt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",20),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,1,"widgets.gateway.message")))}function Qt(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵclassMap(a.statusClassMsg(e.status)),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.message," ")}}function Jt(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",21)}function Yt(e,n){1&e&&t.ɵɵelement(0,"mat-row",21)}class Xt{constructor(){this.displayedColumns=["ts","status","message"],this.gatewayLogLinks=[{name:"General",key:"LOGS"},{name:"Service",key:"SERVICE_LOGS"},{name:"Connection",key:"CONNECTION_LOGS"},{name:"Storage",key:"STORAGE_LOGS"},{key:"EXTENSIONS_LOGS",name:"Extension"}];const e={property:"ts",direction:h.DESC};this.pageLink=new f(10,0,null,e),this.dataSource=new g([])}ngOnInit(){this.updateWidgetTitle()}ngAfterViewInit(){if(this.dataSource.sort=this.sort,this.dataSource.paginator=this.paginator,this.ctx.defaultSubscription.onTimewindowChangeFunction=e=>(this.ctx.defaultSubscription.options.timeWindowConfig=e,this.ctx.defaultSubscription.updateDataSubscriptions(),e),this.ctx.settings.isConnectorLog&&this.ctx.settings.connectorLogState){const e=this.ctx.stateController.getStateParams()[this.ctx.settings.connectorLogState];this.logLinks=[{key:`${e.key}_LOGS`,name:"Connector",filterFn:e=>!e.message.includes("_converter.py")},{key:`${e.key}_LOGS`,name:"Converter",filterFn:e=>e.message.includes("_converter.py")}]}else this.logLinks=this.gatewayLogLinks;this.activeLink=this.logLinks[0],this.changeSubscription()}updateWidgetTitle(){if(this.ctx.settings.isConnectorLog&&this.ctx.settings.connectorLogState){const e=this.ctx.widgetConfig.title,t="${connectorName}";if(e.includes(t)){const n=this.ctx.stateController.getStateParams()[this.ctx.settings.connectorLogState];this.ctx.widgetTitle=e.replace(t,n.key)}}}updateData(){if(this.ctx.defaultSubscription.data.length&&this.ctx.defaultSubscription.data[0]){let e=this.ctx.defaultSubscription.data[0].data.map((e=>{const t={ts:e[0],key:this.activeLink.key,message:e[1],status:"INVALID LOG FORMAT"};try{t.message=/\[(.*)/.exec(e[1])[0]}catch(n){t.message=e[1]}try{t.status=e[1].match(/\|(\w+)\|/)[1]}catch(e){t.status="INVALID LOG FORMAT"}return t}));this.activeLink.filterFn&&(e=e.filter((e=>this.activeLink.filterFn(e)))),this.dataSource.data=e}}onTabChanged(e){this.activeLink=e,this.changeSubscription()}statusClass(e){switch(e){case jt.DEBUG:return"status status-debug";case jt.WARNING:return"status status-warning";case jt.ERROR:case jt.EXCEPTION:return"status status-error";default:return"status status-info"}}statusClassMsg(e){if(e===jt.EXCEPTION)return"msg-status-exception"}trackByLogTs(e,t){return t.ts}changeSubscription(){this.ctx.datasources&&this.ctx.datasources[0].entity&&this.ctx.defaultSubscription.options.datasources&&(this.ctx.defaultSubscription.options.datasources[0].dataKeys=[{name:this.activeLink.key,type:v.timeseries,settings:{}}],this.ctx.defaultSubscription.unsubscribe(),this.ctx.defaultSubscription.updateDataSubscriptions(),this.ctx.defaultSubscription.callbacks.onDataUpdated=()=>{this.updateData()})}static{this.ɵfac=function(e){return new(e||Xt)}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Xt,selectors:[["tb-gateway-logs"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(u,5),t.ɵɵviewQuery(y,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.sort=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.paginator=e.first)}},inputs:{ctx:"ctx",dialogRef:"dialogRef"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:22,vars:21,consts:[["tabPanel",""],["mat-tab-nav-bar","",3,"tabPanel"],["mat-tab-link","",3,"active","click",4,"ngFor","ngForOf"],["mat-table","","matSort","","matSortDisableClear","",3,"dataSource","trackBy","matSortActive","matSortDirection"],["matColumnDef","ts"],["mat-sort-header","","style","width: 20%",4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","status"],["mat-sort-header","","style","width: 10%",4,"matHeaderCellDef"],["matColumnDef","message"],["mat-sort-header","","style","width: 70%",4,"matHeaderCellDef"],[3,"class",4,"matCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],["class","mat-row-select",4,"matRowDef","matRowDefColumns"],[1,"no-data-found","flex-1","items-center","justify-center"],[1,"flex-1"],[3,"length","pageIndex","pageSize","pageSizeOptions"],["mat-tab-link","",3,"click","active"],["mat-sort-header","",2,"width","20%"],["mat-sort-header","",2,"width","10%"],["mat-sort-header","",2,"width","70%"],[1,"mat-row-select"]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"nav",1),t.ɵɵtemplate(1,Ut,2,2,"a",2),t.ɵɵelementEnd(),t.ɵɵelement(2,"mat-tab-nav-panel",null,0),t.ɵɵelementStart(4,"table",3),t.ɵɵelementContainerStart(5,4),t.ɵɵtemplate(6,$t,3,3,"mat-header-cell",5)(7,zt,3,4,"mat-cell",6),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(8,7),t.ɵɵtemplate(9,Kt,3,3,"mat-header-cell",8)(10,Ht,3,3,"mat-cell",6),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(11,9),t.ɵɵtemplate(12,Wt,3,3,"mat-header-cell",10)(13,Qt,2,3,"mat-cell",11),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(14,Jt,1,0,"mat-header-row",12)(15,Yt,1,0,"mat-row",13),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"span",14),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(19,"span",15)(20,"mat-divider")(21,"mat-paginator",16)),2&e){const e=t.ɵɵreference(3);t.ɵɵproperty("tabPanel",e),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.logLinks),t.ɵɵadvance(3),t.ɵɵproperty("dataSource",n.dataSource)("trackBy",n.trackByLogTs)("matSortActive",n.pageLink.sortOrder.property)("matSortDirection",n.pageLink.sortDirection()),t.ɵɵadvance(10),t.ɵɵproperty("matHeaderRowDef",n.displayedColumns)("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",n.displayedColumns),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",0!==n.dataSource.data.length),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(18,18,"attribute.no-telemetry-text")),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",0===n.dataSource.data.length),t.ɵɵadvance(2),t.ɵɵproperty("length",n.dataSource.data.length)("pageIndex",n.pageLink.page)("pageSize",n.pageLink.pageSize)("pageSizeOptions",t.ɵɵpureFunction0(20,Lt))}},dependencies:t.ɵɵgetComponentDepsFactory(Xt,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;overflow-x:auto;padding:0}[_nghost-%COMP%] .status[_ngcontent-%COMP%]{border-radius:20px;font-weight:500;padding:5px 15px}[_nghost-%COMP%] .status-debug[_ngcontent-%COMP%]{color:green;background:#0080001a}[_nghost-%COMP%] .status-warning[_ngcontent-%COMP%]{color:orange;background:#ffa5001a}[_nghost-%COMP%] .status-error[_ngcontent-%COMP%]{color:red;background:#ff00001a}[_nghost-%COMP%] .status-info[_ngcontent-%COMP%]{color:#00f;background:#0000801a}[_nghost-%COMP%] .msg-status-exception[_ngcontent-%COMP%]{color:red}']})}}e("GatewayLogsComponent",Xt);const Zt=["statisticChart"],en=e=>({"hidden-label":e});function tn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",23),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function nn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",23),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.attributeOnGateway),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.attributeOnGateway," ")}}function an(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.statistic-commands-empty")," "))}function rn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",24)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",25),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,2,"gateway.statistics.command")),t.ɵɵadvance(2),t.ɵɵproperty("value",e.commandObj.command)}}function on(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-card",16)(1,"mat-form-field",17)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",18),t.ɵɵtemplate(6,tn,2,2,"mat-option",19)(7,nn,2,2,"mat-option",19),t.ɵɵelementEnd()(),t.ɵɵtemplate(8,an,3,3,"mat-error",20),t.ɵɵelementStart(9,"div")(10,"button",21),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.navigateToStatistics())})),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(13,rn,5,4,"mat-form-field",22),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("formGroup",e.statisticForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,7,"gateway.statistics.statistic")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.statisticsKeys),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.commands),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!e.statisticsKeys.length&&!e.commands.length),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,9,"gateway.statistics.statistics-button")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.commandObj)}}function sn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",26),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,1,"widgets.gateway.created-time")," "))}function pn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtext(1),t.ɵɵpipe(2,"date"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,e[0],"yyyy-MM-dd HH:mm:ss")," ")}}function ln(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",27),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,1,"widgets.gateway.message")," "))}function cn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e[1]," ")}}function dn(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",28)}function mn(e,n){1&e&&t.ɵɵelement(0,"mat-row",28)}function un(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",29),t.ɵɵelement(1,"span",30),t.ɵɵelementStart(2,"div",31),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).$implicit,a=t.ɵɵnextContext();return t.ɵɵresetView(a.onLegendKeyHiddenChange(n.dataIndex))})),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵstyleProp("background-color",e.dataKey.color),t.ɵɵadvance(),t.ɵɵclassMap(t.ɵɵpureFunction1(5,en,a.legendData.keys[e.dataIndex].dataKey.hidden)),t.ɵɵproperty("innerHTML",e.dataKey.label,t.ɵɵsanitizeHtml)}}class gn{constructor(e,t,n){this.fb=e,this.attributeService=t,this.utils=n,this.isNumericData=!1,this.dataTypeDefined=!1,this.statisticsKeys=[],this.commands=[],this.subscriptionOptions={callbacks:{onDataUpdated:()=>this.ctx.ngZone.run((()=>{this.onDataUpdated()})),onDataUpdateError:(e,t)=>this.ctx.ngZone.run((()=>{this.onDataUpdateError(t)}))},useDashboardTimewindow:!1,legendConfig:{position:x.bottom}},this.init=()=>{this.flotCtx={$scope:this.ctx.$scope,$injector:this.ctx.$injector,utils:this.ctx.utils,isMobile:this.ctx.isMobile,isEdit:this.ctx.isEdit,subscriptionApi:this.ctx.subscriptionApi,detectChanges:this.ctx.detectChanges,settings:this.ctx.settings}},this.updateChart=()=>{},this.resize=()=>{};const a={property:"0",direction:h.DESC};this.pageLink=new f(Number.POSITIVE_INFINITY,0,null,a),this.displayedColumns=["0","1"],this.dataSource=new g([]),this.statisticForm=this.fb.group({statisticKey:[null,[]]}),this.statisticForm.get("statisticKey").valueChanges.subscribe((e=>{this.commandObj=null,this.commands.length&&(this.commandObj=this.commands.find((t=>t.attributeOnGateway===e))),this.subscriptionInfo&&this.createChartsSubscription(this.ctx.defaultSubscription.datasources[0].entity,e)}))}ngAfterViewInit(){if(this.dataSource.sort=this.sort,this.sort.sortChange.subscribe((()=>this.sortData())),this.init(),this.ctx.defaultSubscription.datasources.length){const e=this.ctx.defaultSubscription.datasources[0].entity;if(e.id.id===w)return;this.general?this.attributeService.getEntityTimeseriesLatest(e.id).subscribe((t=>{const n=Object.keys(t).filter((e=>e.includes("ConnectorEventsProduced")||e.includes("ConnectorEventsSent")));this.createGeneralChartsSubscription(e,n)})):this.attributeService.getEntityAttributes(e.id,C.SHARED_SCOPE,["general_configuration"]).subscribe((t=>{t&&t.length&&(this.commands=t[0].value.statistics.commands,!this.statisticForm.get("statisticKey").value&&this.commands&&this.commands.length&&(this.statisticForm.get("statisticKey").setValue(this.commands[0].attributeOnGateway),this.createChartsSubscription(e,this.commands[0].attributeOnGateway)))}))}}navigateToStatistics(){const e=G(this.ctx.stateController.getStateParams());this.ctx.stateController.openState("configuration",{defaultTab:"statistics",...e})}sortData(){this.dataSource.sortData(this.dataSource.data,this.sort)}onLegendKeyHiddenChange(e){this.legendData.keys[e].dataKey.hidden=!this.legendData.keys[e].dataKey.hidden,this.subscription.updateDataVisibility(e)}createChartsSubscription(e,t){const n=[{type:S.entity,entityType:E.DEVICE,entityId:e.id.id,entityName:e.name,timeseries:[]}];n[0].timeseries=[{name:t,label:t}],this.subscriptionInfo=n,this.changeSubscription(n),this.ctx.defaultSubscription.unsubscribe()}createGeneralChartsSubscription(e,t){const n=[{type:S.entity,entityType:E.DEVICE,entityId:e.id.id,entityName:e.name,timeseries:[]}];n[0].timeseries=[],t?.length&&t.forEach((e=>{n[0].timeseries.push({name:e,label:e})})),this.ctx.defaultSubscription.datasources[0].dataKeys.forEach((e=>{n[0].timeseries.push({name:e.name,label:e.label})})),this.changeSubscription(n),this.ctx.defaultSubscription.unsubscribe()}reset(){this.resize$&&this.resize$.disconnect(),this.subscription&&this.subscription.unsubscribe()}onDataUpdateError(e){const t=this.utils.parseException(e);let n=t.name;t.message&&(n+=": "+t.message),console.error(n)}onDataUpdated(){this.isDataOnlyNumbers(),this.isNumericData&&(this.chartInited||this.initChart())}initChart(){this.chartInited=!0,this.flotCtx.$container=$(this.statisticChart.nativeElement),this.resize$.observe(this.statisticChart.nativeElement)}isDataOnlyNumbers(){this.general?this.isNumericData=!0:(this.dataSource.data=this.subscription.data.length?this.subscription.data[0].data:[],this.dataSource.data.length&&!this.dataTypeDefined&&(this.dataTypeDefined=!0,this.isNumericData=this.dataSource.data.every((e=>!isNaN(+e[1])))))}changeSubscription(e){this.subscription&&this.reset(),this.ctx.datasources[0].entity&&this.ctx.subscriptionApi.createSubscriptionFromInfo(T.timeseries,e,this.subscriptionOptions,!1,!0).subscribe((e=>{this.dataTypeDefined=!1,this.subscription=e,this.isDataOnlyNumbers(),this.legendData=this.subscription.legendData,this.flotCtx.defaultSubscription=e,this.resize$=new ResizeObserver((()=>{this.resize()})),this.ctx.detectChanges(),this.isNumericData&&this.initChart()}))}static{this.ɵfac=function(e){return new(e||gn)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(A.AttributeService),t.ɵɵdirectiveInject(A.UtilsService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:gn,selectors:[["tb-gateway-statistics"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(u,5),t.ɵɵviewQuery(Zt,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.sort=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.statisticChart=e.first)}},inputs:{ctx:"ctx",general:"general"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:19,vars:19,consts:[["statisticChart",""],[1,"statistics-container","lt-md:flex-col","flex","flex-row"],[3,"formGroup",4,"ngIf"],[1,"chart-box","flex","flex-col"],[1,"chart-container"],["mat-table","","matSort","","matSortDisableClear","",3,"dataSource","matSortActive","matSortDirection"],["matColumnDef","0"],["mat-sort-header","",4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","1"],["mat-sort-header","","style","width: 70%",4,"matHeaderCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],["class","mat-row-select",4,"matRowDef","matRowDefColumns"],[1,"no-data-found","items-start","justify-center"],[1,"legend","flex","flex-1","flex-row","items-center","justify-center"],["class","legend-keys flex flex-row items-center justify-center",4,"ngFor","ngForOf"],[3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["formControlName","statisticKey"],[3,"value",4,"ngFor","ngForOf"],[4,"ngIf"],["mat-flat-button","","color","primary",3,"click"],["class","mat-block",4,"ngIf"],[3,"value"],[1,"mat-block"],["matInput","","disabled","",3,"value"],["mat-sort-header",""],["mat-sort-header","",2,"width","70%"],[1,"mat-row-select"],[1,"legend-keys","flex","flex-row","items-center","justify-center"],[1,"legend-line"],[1,"legend-label",3,"click","innerHTML"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",1),t.ɵɵtemplate(1,on,14,11,"mat-card",2),t.ɵɵelementStart(2,"div",3),t.ɵɵelement(3,"div",4,0),t.ɵɵelementStart(5,"table",5),t.ɵɵelementContainerStart(6,6),t.ɵɵtemplate(7,sn,3,3,"mat-header-cell",7)(8,pn,3,4,"mat-cell",8),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(9,9),t.ɵɵtemplate(10,ln,3,3,"mat-header-cell",10)(11,cn,2,1,"mat-cell",8),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(12,dn,1,0,"mat-header-row",11)(13,mn,1,0,"mat-row",12),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"span",13),t.ɵɵtext(15),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"div",14),t.ɵɵtemplate(18,un,3,7,"div",15),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.general),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.isNumericData),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.isNumericData),t.ɵɵproperty("dataSource",n.dataSource)("matSortActive",n.pageLink.sortOrder.property)("matSortDirection",n.pageLink.sortDirection()),t.ɵɵadvance(7),t.ɵɵproperty("matHeaderRowDef",n.displayedColumns)("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",n.displayedColumns),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",0!==n.dataSource.data.length||n.isNumericData),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(16,17,"attribute.no-telemetry-text")),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.isNumericData),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",null==n.legendData?null:n.legendData.keys))},dependencies:t.ɵɵgetComponentDepsFactory(gn,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;padding:0}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%]{height:100%;overflow-y:auto}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] mat-card[_ngcontent-%COMP%]{width:40%;height:100%;margin-right:35px;padding:15px;gap:22px}@media only screen and (max-width: 750px){[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] mat-card[_ngcontent-%COMP%]{width:100%}}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] .chart-box[_ngcontent-%COMP%], [_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] .chart-container[_ngcontent-%COMP%]{height:100%;flex-grow:1}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] .chart-box[_ngcontent-%COMP%]{overflow:auto}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{height:100%}[_nghost-%COMP%] .legend[_ngcontent-%COMP%]{flex-wrap:wrap;width:100%;padding-top:8px;padding-bottom:4px;margin-top:15px}[_nghost-%COMP%] .legend[_ngcontent-%COMP%] .legend-keys[_ngcontent-%COMP%] .legend-label[_ngcontent-%COMP%]{padding:2px 20px 2px 10px;white-space:nowrap}[_nghost-%COMP%] .legend[_ngcontent-%COMP%] .legend-keys[_ngcontent-%COMP%] .legend-label.hidden-label[_ngcontent-%COMP%]{text-decoration:line-through;opacity:.6}[_nghost-%COMP%] .legend[_ngcontent-%COMP%] .legend-keys[_ngcontent-%COMP%] .legend-label[_ngcontent-%COMP%]:focus{outline:none}[_nghost-%COMP%] .legend[_ngcontent-%COMP%] .legend-keys[_ngcontent-%COMP%] .legend-line[_ngcontent-%COMP%]{display:inline-block;width:15px;height:3px;text-align:left;vertical-align:middle;outline:none}']})}}var yn;e("GatewayStatisticsComponent",gn),e("BACnetRequestTypes",yn),function(e){e.WriteProperty="writeProperty",e.ReadProperty="readProperty"}(yn||e("BACnetRequestTypes",yn={}));const hn=e("BACnetRequestTypesTranslates",new Map([[yn.WriteProperty,"gateway.rpc.write-property"],[yn.ReadProperty,"gateway.rpc.read-property"]]));var fn;e("BACnetObjectTypes",fn),function(e){e.BinaryInput="binaryInput",e.BinaryOutput="binaryOutput",e.AnalogInput="analogInput",e.AnalogOutput="analogOutput",e.BinaryValue="binaryValue",e.AnalogValue="analogValue"}(fn||e("BACnetObjectTypes",fn={}));const vn=e("BACnetObjectTypesTranslates",new Map([[fn.AnalogOutput,"gateway.rpc.analog-output"],[fn.AnalogInput,"gateway.rpc.analog-input"],[fn.BinaryOutput,"gateway.rpc.binary-output"],[fn.BinaryInput,"gateway.rpc.binary-input"],[fn.BinaryValue,"gateway.rpc.binary-value"],[fn.AnalogValue,"gateway.rpc.analog-value"]]));var bn;e("BLEMethods",bn),function(e){e.WRITE="write",e.READ="read",e.SCAN="scan"}(bn||e("BLEMethods",bn={}));const xn=e("BLEMethodsTranslates",new Map([[bn.WRITE,"gateway.rpc.write"],[bn.READ,"gateway.rpc.read"],[bn.SCAN,"gateway.rpc.scan"]]));var wn,Cn;e("CANByteOrders",wn),function(e){e.LITTLE="LITTLE",e.BIG="BIG"}(wn||e("CANByteOrders",wn={})),e("SocketMethodProcessings",Cn),function(e){e.WRITE="write",e.READ="read"}(Cn||e("SocketMethodProcessings",Cn={}));const Sn=e("SocketMethodProcessingsTranslates",new Map([[Cn.WRITE,"gateway.rpc.write"],[Cn.READ,"gateway.rpc.read"]]));var En;e("SNMPMethods",En),function(e){e.SET="set",e.MULTISET="multiset",e.GET="get",e.BULKWALK="bulkwalk",e.TABLE="table",e.MULTIGET="multiget",e.GETNEXT="getnext",e.BULKGET="bulkget",e.WALKS="walk"}(En||e("SNMPMethods",En={}));const Tn=e("SNMPMethodsTranslations",new Map([[En.SET,"gateway.rpc.set"],[En.MULTISET,"gateway.rpc.multiset"],[En.GET,"gateway.rpc.get"],[En.BULKWALK,"gateway.rpc.bulk-walk"],[En.TABLE,"gateway.rpc.table"],[En.MULTIGET,"gateway.rpc.multi-get"],[En.GETNEXT,"gateway.rpc.get-next"],[En.BULKGET,"gateway.rpc.bulk-get"],[En.WALKS,"gateway.rpc.walk"]]));var In,kn,Mn;e("HTTPMethods",In),function(e){e.CONNECT="CONNECT",e.DELETE="DELETE",e.GET="GET",e.HEAD="HEAD",e.OPTIONS="OPTIONS",e.PATCH="PATCH",e.POST="POST",e.PUT="PUT",e.TRACE="TRACE"}(In||e("HTTPMethods",In={})),e("SocketEncodings",kn),function(e){e.UTF_8="utf-8"}(kn||e("SocketEncodings",kn={})),e("RestSecurityType",Mn),function(e){e.ANONYMOUS="anonymous",e.BASIC="basic"}(Mn||e("RestSecurityType",Mn={}));const Pn=e("RestSecurityTypeTranslationsMap",new Map([[Mn.ANONYMOUS,"gateway.broker.security-types.anonymous"],[Mn.BASIC,"gateway.broker.security-types.basic"]]));class Fn{transform(e){return e.map((({value:e})=>e.toString())).join(", ")}static{this.ɵfac=function(e){return new(e||Fn)}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"getRpcTemplateArrayView",type:Fn,pure:!0,standalone:!0})}}e("RpcTemplateArrayViewPipe",Fn);class On{constructor(){this.differs=n(a),this.keyValues=[]}transform(e){if(!e||!(e instanceof Map)&&"object"!=typeof e)return null;this.differ??=this.differs.find(e).create();const t=this.differ.diff(e);return t&&(this.keyValues=[],t.forEachItem((e=>{j(e.currentValue)&&this.keyValues.push(this.makeKeyValuePair(e.key,e.currentValue))}))),this.keyValues}makeKeyValuePair(e,t){return{key:e,value:t}}static{this.ɵfac=function(e){return new(e||On)}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"keyValueIsNotEmpty",type:On,pure:!1,standalone:!0})}}e("KeyValueIsNotEmptyPipe",On);const qn=e=>({$implicit:e,innerValue:!1}),Bn=e=>({"padding-left":e}),Rn=(e,t)=>({"boolean-true":e,"boolean-false":t}),Nn=e=>({$implicit:e,innerValue:!0});function _n(e,n){if(1&e&&t.ɵɵelementContainer(0,13),2&e){const e=n.$implicit;t.ɵɵnextContext();const a=t.ɵɵreference(15);t.ɵɵproperty("ngTemplateOutlet",a)("ngTemplateOutletContext",t.ɵɵpureFunction1(2,qn,e))}}function Dn(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",19),t.ɵɵtext(1),t.ɵɵpipe(2,"getRpcTemplateArrayView"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,e.value)," ")}}function Vn(e,n){if(1&e&&t.ɵɵelementContainer(0,20),2&e){t.ɵɵnextContext();const e=t.ɵɵreference(12);t.ɵɵproperty("ngTemplateOutlet",e)}}function Gn(e,n){if(1&e&&t.ɵɵelementContainer(0,20),2&e){t.ɵɵnextContext(2);const e=t.ɵɵreference(10);t.ɵɵproperty("ngTemplateOutlet",e)}}function An(e,n){if(1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵtemplate(1,Gn,1,1,"ng-container",21),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵreference(8);t.ɵɵclassMap(t.ɵɵpureFunction2(4,Rn,!0===e.value,!1===e.value)),t.ɵɵadvance(),t.ɵɵproperty("ngIf","method"===e.key)("ngIfElse",n)}}function jn(e,n){if(1&e&&t.ɵɵtext(0),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵtextInterpolate(e.value)}}function Ln(e,n){if(1&e&&(t.ɵɵtext(0),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext(2);t.ɵɵtextInterpolate(t.ɵɵpipeBind1(1,1,n.SNMPMethodsTranslations.get(e.value)))}}function Un(e,n){if(1&e&&t.ɵɵelementContainer(0,13),2&e){const e=n.$implicit;t.ɵɵnextContext(3);const a=t.ɵɵreference(15);t.ɵɵproperty("ngTemplateOutlet",a)("ngTemplateOutletContext",t.ɵɵpureFunction1(2,Nn,e))}}function $n(e,n){if(1&e&&(t.ɵɵtemplate(0,Un,1,4,"ng-container",12),t.ɵɵpipe(1,"keyvalue")),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext(2);t.ɵɵproperty("ngForOf",t.ɵɵpipeBind2(1,1,e.value,n.originalOrder))}}function zn(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",14)(1,"div",15),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Dn,3,3,"div",16)(5,Vn,1,1,"ng-container",17)(6,An,2,7,"div",18)(7,jn,1,1,"ng-template",null,1,t.ɵɵtemplateRefExtractor)(9,Ln,2,3,"ng-template",null,2,t.ɵɵtemplateRefExtractor)(11,$n,2,4,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=n.innerValue,r=t.ɵɵnextContext(2);t.ɵɵstyleMap(t.ɵɵpureFunction1(10,Bn,a?"16px":"0")),t.ɵɵclassMap(r.getRpcParamsRowClasses(e.value)),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",a?e.key:t.ɵɵpipeBind1(3,8,"gateway.rpc."+e.key)," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",r.isArray(e.value)),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.isObject(e.value)),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!r.isObject(e.value)&&!r.isArray(e.value))}}function Kn(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-expansion-panel",6)(1,"mat-expansion-panel-header")(2,"mat-panel-title",7)(3,"span",8),t.ɵɵtext(4),t.ɵɵelementEnd()(),t.ɵɵelementStart(5,"mat-panel-description")(6,"button",9),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteTemplate(n,a))})),t.ɵɵelementStart(7,"mat-icon",10),t.ɵɵtext(8,"delete"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"button",11),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.applyTemplate(n,a))})),t.ɵɵelementStart(10,"mat-icon",10),t.ɵɵtext(11,"play_arrow"),t.ɵɵelementEnd()()()(),t.ɵɵtemplate(12,_n,1,4,"ng-container",12),t.ɵɵpipe(13,"keyValueIsNotEmpty"),t.ɵɵtemplate(14,zn,13,12,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()}if(2&e){const e=n.$implicit;t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",e.name),t.ɵɵadvance(),t.ɵɵtextInterpolate(e.name),t.ɵɵadvance(8),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(13,3,e.config))}}class Hn{constructor(e){this.attributeService=e,this.saveTemplate=new r,this.useTemplate=new r,this.originalOrder=()=>0,this.isObject=e=>L(e),this.isArray=e=>Array.isArray(e),this.SNMPMethodsTranslations=Tn}applyTemplate(e,t){e.stopPropagation(),this.useTemplate.emit(t)}deleteTemplate(e,t){e.stopPropagation();const n=this.rpcTemplates.findIndex((e=>e.name==t.name));this.rpcTemplates.splice(n,1);const a=`${this.connectorType}_template`;this.attributeService.saveEntityAttributes({id:this.ctx.defaultSubscription.targetDeviceId,entityType:E.DEVICE},C.SERVER_SCOPE,[{key:a,value:this.rpcTemplates}]).subscribe((()=>{}))}getRpcParamsRowClasses(e){return this.isObject(e)?"flex-col":"flex-row justify-between items-center"}static{this.ɵfac=function(e){return new(e||Hn)(t.ɵɵdirectiveInject(A.AttributeService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Hn,selectors:[["tb-gateway-service-rpc-connector-templates"]],inputs:{connectorType:"connectorType",ctx:"ctx",rpcTemplates:"rpcTemplates"},outputs:{saveTemplate:"saveTemplate",useTemplate:"useTemplate"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:4,vars:4,consts:[["RPCTemplateRef",""],["value",""],["SNMPMethod",""],["RPCObjectRow",""],[1,"mat-subtitle-1","title"],["hideToggle","",4,"ngFor","ngForOf"],["hideToggle",""],[1,"template-name"],["matTooltipPosition","above",3,"matTooltip"],["mat-icon-button","","matTooltip","Delete",3,"click"],[1,"material-icons"],["mat-icon-button","","matTooltip","Use",3,"click"],[3,"ngTemplateOutlet","ngTemplateOutletContext",4,"ngFor","ngForOf"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[1,"rpc-params-row","flex"],[1,"template-key"],["tbTruncateWithTooltip","","class","array-value",4,"ngIf"],[3,"ngTemplateOutlet",4,"ngIf"],[3,"class",4,"ngIf"],["tbTruncateWithTooltip","",1,"array-value"],[3,"ngTemplateOutlet"],[3,"ngTemplateOutlet",4,"ngIf","ngIfElse"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",4),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(3,Kn,16,5,"mat-expansion-panel",5)),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,2,"gateway.rpc.templates-title")),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.rpcTemplates))},dependencies:t.ɵɵgetComponentDepsFactory(Hn,[V,b,Fn,On]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;padding:0}[_nghost-%COMP%] .title[_ngcontent-%COMP%]{font-weight:500}[_nghost-%COMP%] .template-key[_ngcontent-%COMP%]{color:#00000061;height:32px;line-height:32px}[_nghost-%COMP%] .boolean-true[_ngcontent-%COMP%], [_nghost-%COMP%] .boolean-false[_ngcontent-%COMP%]{border-radius:3px;height:32px;line-height:32px;padding:0 12px;width:fit-content;font-size:14px;text-transform:capitalize}[_nghost-%COMP%] .boolean-false[_ngcontent-%COMP%]{color:#d12730;background-color:#d1273014}[_nghost-%COMP%] .boolean-true[_ngcontent-%COMP%]{color:#198038;background-color:#19803814}[_nghost-%COMP%] mat-expansion-panel[_ngcontent-%COMP%]{margin-top:10px;overflow:visible}[_nghost-%COMP%] .mat-expansion-panel-header-description[_ngcontent-%COMP%]{flex-direction:row-reverse;align-items:center;margin-right:0;flex:0}[_nghost-%COMP%] .mat-expansion-panel-header-description[_ngcontent-%COMP%] > mat-icon[_ngcontent-%COMP%]{margin-left:15px;color:#00000061}[_nghost-%COMP%] .mat-expansion-panel-header[_ngcontent-%COMP%]{padding:0 0 0 12px}[_nghost-%COMP%] .mat-expansion-panel-header.mat-expansion-panel-header.mat-expanded[_ngcontent-%COMP%]{height:48px}[_nghost-%COMP%] .mat-expansion-panel-header[_ngcontent-%COMP%] .mat-content.mat-content-hide-toggle[_ngcontent-%COMP%]{margin-right:0}[_nghost-%COMP%] .rpc-params-row[_ngcontent-%COMP%]{overflow:hidden;white-space:nowrap}[_nghost-%COMP%] .rpc-params-row[_ngcontent-%COMP%] [_ngcontent-%COMP%]:not(:first-child){white-space:pre;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .template-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;display:block}[_nghost-%COMP%] .mat-content{align-items:center}[_nghost-%COMP%] .mat-expansion-panel-header-title[_ngcontent-%COMP%]{flex:1;margin:0}[_nghost-%COMP%] .array-value[_ngcontent-%COMP%]{margin-left:10px}']})}}function Wn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.rpc.template-name-required")," "))}function Qn(e,n){1&e&&(t.ɵɵelementStart(0,"div",12),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.rpc.template-name-duplicate")," "))}e("GatewayServiceRPCConnectorTemplatesComponent",Hn);class Jn extends I{constructor(e,t,n,a,r){super(e,t,a),this.store=e,this.router=t,this.data=n,this.dialogRef=a,this.fb=r,this.config=this.data.config,this.templates=this.data.templates,this.templateNameCtrl=this.fb.control("",[ne.required])}validateDuplicateName(e){const t=e.value.trim();return!!this.templates.find((e=>e.name===t))}close(){this.dialogRef.close()}save(){this.templateNameCtrl.setValue(this.templateNameCtrl.value.trim()),this.templateNameCtrl.valid&&this.dialogRef.close(this.templateNameCtrl.value)}static{this.ɵfac=function(e){return new(e||Jn)(t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(de.Router),t.ɵɵdirectiveInject(se),t.ɵɵdirectiveInject(pe.MatDialogRef),t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Jn,selectors:[["tb-gateway-service-rpc-connector-template-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:20,vars:10,consts:[["color","primary",1,"justify-between"],["translate",""],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content","",1,"mat-content","flex","flex-col",2,"width","600px"],[1,"mat-block","tb-value-type",2,"flex-grow","0"],["matInput","","required","",3,"formControl"],[4,"ngIf"],["class","mat-mdc-form-field-error","style","margin-top: -15px; padding-left: 10px; font-size: 14px;",4,"ngIf"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","type","button",3,"click"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[1,"mat-mdc-form-field-error",2,"margin-top","-15px","padding-left","10px","font-size","14px"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-toolbar",0)(1,"h2",1),t.ɵɵtext(2,"gateway.rpc.save-template"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"button",2),t.ɵɵlistener("click",(function(){return n.close()})),t.ɵɵelementStart(4,"mat-icon",3),t.ɵɵtext(5,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(6,"div",4)(7,"mat-form-field",5)(8,"mat-label",1),t.ɵɵtext(9,"gateway.rpc.template-name"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",6),t.ɵɵtemplate(11,Wn,3,3,"mat-error",7),t.ɵɵelementEnd(),t.ɵɵtemplate(12,Qn,3,3,"div",8),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",9)(14,"button",10),t.ɵɵlistener("click",(function(){return n.close()})),t.ɵɵtext(15),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"button",11),t.ɵɵlistener("click",(function(){return n.save()})),t.ɵɵtext(18),t.ɵɵpipe(19,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(10),t.ɵɵproperty("formControl",n.templateNameCtrl),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.templateNameCtrl.hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.validateDuplicateName(n.templateNameCtrl)),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(16,6,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",!n.templateNameCtrl.valid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(19,8,"action.save")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Jn,[V,b]),encapsulation:2})}}function Yn(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",6),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SecurityTypeTranslationsMap.get(e))," ")}}function Xn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",16),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.username-required"))}function Zn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",16),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.password-required"))}function ea(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",7)(2,"div",8),t.ɵɵtext(3,"gateway.username"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",9)(5,"mat-form-field",10),t.ɵɵelement(6,"input",11),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,Xn,3,3,"mat-icon",12),t.ɵɵelementEnd()()(),t.ɵɵelementStart(9,"div",7)(10,"div",8),t.ɵɵtext(11,"gateway.password"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"div",9)(13,"mat-form-field",10),t.ɵɵelement(14,"input",13),t.ɵɵpipe(15,"translate"),t.ɵɵtemplate(16,Zn,3,3,"mat-icon",12),t.ɵɵelementStart(17,"div",14),t.ɵɵelement(18,"tb-toggle-password",15),t.ɵɵelementEnd()()()(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,6,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.securityFormGroup.get("username").hasError("required")&&e.securityFormGroup.get("username").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(15,8,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.securityFormGroup.get("password").hasError("required")&&e.securityFormGroup.get("password").touched),t.ɵɵadvance(),t.ɵɵclassProp("hide-toggle",e.securityFormGroup.get("password").hasError("required"))}}e("GatewayServiceRPCConnectorTemplateDialogComponent",Jn);class ta{constructor(e){this.fb=e,this.BrokerSecurityType=Mn,this.securityTypes=Object.values(Mn),this.SecurityTypeTranslationsMap=Pn,this.destroy$=new me,this.propagateChange=e=>{},this.securityFormGroup=this.fb.group({type:[Mn.ANONYMOUS,[]],username:["",[ne.required,ne.pattern($e)]],password:["",[ne.required,ne.pattern($e)]]}),this.observeSecurityForm()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}writeValue(e){e.type||(e.type=Mn.ANONYMOUS),this.securityFormGroup.reset(e),this.updateView(e)}validate(){return this.securityFormGroup.valid?null:{securityForm:{valid:!1}}}updateView(e){this.propagateChange(e)}updateValidators(e){e===Mn.BASIC?(this.securityFormGroup.get("username").enable({emitEvent:!1}),this.securityFormGroup.get("password").enable({emitEvent:!1})):(this.securityFormGroup.get("username").disable({emitEvent:!1}),this.securityFormGroup.get("password").disable({emitEvent:!1}))}observeSecurityForm(){this.securityFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>this.updateView(e))),this.securityFormGroup.get("type").valueChanges.pipe(be(this.destroy$)).subscribe((e=>this.updateValidators(e)))}static{this.ɵfac=function(e){return new(e||ta)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ta,selectors:[["tb-rest-connector-security"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>ta)),multi:!0},{provide:re,useExisting:i((()=>ta)),multi:!0}]),t.ɵɵStandaloneFeature],decls:7,vars:3,consts:[[1,"tb-form-row","space-between","same-padding","tb-flex","column",3,"formGroup"],[1,"tb-flex","row","space-between","align-center","no-gap","fill-width"],["translate","",1,"fields-label"],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],[4,"ngIf"],[3,"value"],[1,"tb-form-row","space-between","tb-flex","fill-width"],["translate","",1,"fixed-title-width"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","username",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","type","password","name","value","formControlName","password",3,"placeholder"],["matSuffix","",1,"tb-flex","no-gap","align-center","fill-height"],[1,"tb-flex","align-center","fill-height"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"gateway.security"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"tb-toggle-select",3),t.ɵɵtemplate(5,Yn,3,4,"tb-toggle-option",4),t.ɵɵelementEnd()(),t.ɵɵtemplate(6,ea,19,10,"ng-container",5),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.securityFormGroup),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.securityTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.securityFormGroup.get("type").value===n.BrokerSecurityType.BASIC))},dependencies:t.ɵɵgetComponentDepsFactory(ta,[b,V]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block;margin-bottom:10px}[_nghost-%COMP%] .fields-label[_ngcontent-%COMP%]{font-weight:500}[_nghost-%COMP%] .hide-toggle[_ngcontent-%COMP%]{display:none}'],changeDetection:o.OnPush})}}e("RestConnectorSecurityComponent",ta);class na{constructor(e,t,n){this.elementRef=e,this.renderer=t,this.tooltip=n,this.tooltipEnabled=!0,this.position="above",this.destroy$=new me}ngOnInit(){this.observeMouseEvents(),this.applyTruncationStyles()}ngAfterViewInit(){this.tooltip.position=this.position}ngOnDestroy(){this.tooltip._isTooltipVisible()&&this.hideTooltip(),this.destroy$.next(),this.destroy$.complete()}observeMouseEvents(){ue(this.elementRef.nativeElement,"mouseenter").pipe(xe((()=>this.tooltipEnabled)),xe((()=>this.isOverflown(this.elementRef.nativeElement))),we((()=>this.showTooltip())),be(this.destroy$)).subscribe(),ue(this.elementRef.nativeElement,"mouseleave").pipe(xe((()=>this.tooltipEnabled)),xe((()=>this.tooltip._isTooltipVisible())),we((()=>this.hideTooltip())),be(this.destroy$)).subscribe()}applyTruncationStyles(){this.renderer.setStyle(this.elementRef.nativeElement,"white-space","nowrap"),this.renderer.setStyle(this.elementRef.nativeElement,"overflow","hidden"),this.renderer.setStyle(this.elementRef.nativeElement,"text-overflow","ellipsis")}isOverflown(e){return e.clientWidth{this.adjustChips()}),0))}constructor(e,t,n,a){this.el=e,this.renderer=t,this.translate=n,this.window=a,this.destroy$=new me,this.renderer.setStyle(this.el.nativeElement,"max-height","48px"),this.renderer.setStyle(this.el.nativeElement,"overflow","auto"),ue(a,"resize").pipe(be(this.destroy$)).subscribe((()=>{this.adjustChips()})),this.observeIntersection()}observeIntersection(){this.intersectionObserver=new IntersectionObserver((e=>{e.forEach((e=>{e.isIntersecting&&this.adjustChips()}))})),this.intersectionObserver.observe(this.el.nativeElement)}adjustChips(){const e=this.el.nativeElement,t=this.el.nativeElement.querySelector(".ellipsis-chip"),n=parseFloat(this.window.getComputedStyle(t).marginLeft)||0,a=e.querySelectorAll("mat-chip:not(.ellipsis-chip)");if(this.chipsValue.length>1){const r=this.el.nativeElement.querySelector(".ellipsis-text");this.renderer.setStyle(t,"display","inline-flex"),r.innerHTML=this.translate.instant("gateway.ellipsis-chips-text",{count:this.chipsValue.length});const i=e.offsetWidth-(t.offsetWidth+n);let o=0,s=0;a.forEach((e=>{this.renderer.setStyle(e,"display","inline-flex");const t=e.querySelector(".mdc-evolution-chip__text-label");this.applyMaxChipTextWidth(t,i/3),o+(e.offsetWidth+n)<=i&&she(M())))).subscribe((e=>{this.attributesSubject.next(e.data),this.pageDataSubject.next(e),r.next(e)})),r}fetchAttributes(e,t,n){return this.getAllAttributes(e,t).pipe(Se((e=>{const t=e.filter((e=>0!==e.lastUpdateTs));return n.filterData(t)})))}getAllAttributes(e,t){if(!this.allAttributes){let n;P.get(t)?(this.telemetrySubscriber=F.createEntityAttributesSubscription(this.telemetryWsService,e,t,this.zone),this.telemetrySubscriber.subscribe(),n=this.telemetrySubscriber.attributeData$()):n=this.attributeService.getEntityAttributes(e,t),this.allAttributes=n.pipe(Ee(1),Te())}return this.allAttributes}isAllSelected(){const e=this.selection.selected.length;return this.attributesSubject.pipe(Se((t=>e===t.length)))}isEmpty(){return this.attributesSubject.pipe(Se((e=>!e.length)))}total(){return this.pageDataSubject.pipe(Se((e=>e.totalElements)))}masterToggle(){this.attributesSubject.pipe(we((e=>{this.selection.selected.length===e.length?this.selection.clear():e.forEach((e=>{this.selection.select(e)}))})),Ie(1)).subscribe()}}e("AttributeDatasource",ra);const ia=()=>({maxWidth:"970px"});function oa(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-expansion-panel",4)(1,"mat-expansion-panel-header",5)(2,"mat-panel-title")(3,"mat-slide-toggle",6),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(4,"mat-label"),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementContainer(7,7),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(),n=t.ɵɵreference(5);t.ɵɵproperty("expanded",e.showStrategyControl.value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.showStrategyControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,4,"gateway.report-strategy.label")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n)}}function sa(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",8),t.ɵɵtext(1,"gateway.report-strategy.label"),t.ɵɵelementEnd(),t.ɵɵelementContainer(2,7)),2&e){t.ɵɵnextContext();const e=t.ɵɵreference(5);t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",e)}}function pa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",16),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,2,a.ReportTypeTranslateMap.get(e)))}}function la(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",19),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(3);t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.reportStrategyFormGroup.get("reportPeriod").hasError("min")?"gateway.hints.report-period-range":"gateway.hints.report-period-required"))}}function ca(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",9)(1,"div",17),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",12),t.ɵɵelement(5,"input",18),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,la,3,3,"mat-icon",19),t.ɵɵelementStart(8,"span",20),t.ɵɵtext(9,"gateway.suffix.ms"),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,3,"gateway.report-strategy.report-period")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional(e.reportStrategyFormGroup.get("reportPeriod").hasError("required")||e.reportStrategyFormGroup.get("reportPeriod").hasError("min")&&e.reportStrategyFormGroup.get("reportPeriod").touched?7:-1)}}function da(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",9)(1,"div",10),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelement(4,"div",11),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",12)(6,"mat-select",13),t.ɵɵtemplate(7,pa,3,4,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵtemplate(8,ca,10,7,"div",15)),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,5,"gateway.type")," "),t.ɵɵadvance(2),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/report-strategy_fn")("tb-help-popup-style",t.ɵɵpureFunction0(7,ia)),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.reportStrategyTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.reportStrategyFormGroup.get("type").value!==e.ReportStrategyType.OnChange&&e.reportStrategyFormGroup.get("type").value!==e.ReportStrategyType.OnReceived)}}class ma{constructor(e){this.fb=e,this.isExpansionMode=!1,this.defaultValue=Vt.Key,this.reportStrategyTypes=Object.values(Dt),this.ReportTypeTranslateMap=Gt,this.ReportStrategyType=Dt,this.destroy$=new me,this.showStrategyControl=this.fb.control(!1),this.reportStrategyFormGroup=this.fb.group({type:[{value:Dt.OnReportPeriod,disabled:!0},[]],reportPeriod:[{value:this.defaultValue,disabled:!0},[ne.required,ne.min(100)]]}),this.observeStrategyFormChange(),this.observeStrategyToggle()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}writeValue(e){this.isExpansionMode&&this.showStrategyControl.setValue(!!e,{emitEvent:!1}),e&&this.reportStrategyFormGroup.enable({emitEvent:!1});const{type:t=Dt.OnReportPeriod,reportPeriod:n=this.defaultValue}=e??{};this.reportStrategyFormGroup.setValue({type:t,reportPeriod:n},{emitEvent:!1}),this.onTypeChange(t)}validate(){return this.reportStrategyFormGroup.valid||this.reportStrategyFormGroup.disabled?null:{reportStrategyForm:{valid:!1}}}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}observeStrategyFormChange(){this.reportStrategyFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()})),this.reportStrategyFormGroup.get("type").valueChanges.pipe(be(this.destroy$)).subscribe((e=>this.onTypeChange(e)))}observeStrategyToggle(){this.showStrategyControl.valueChanges.pipe(be(this.destroy$),xe((()=>this.isExpansionMode))).subscribe((e=>{e?(this.reportStrategyFormGroup.enable({emitEvent:!1}),this.reportStrategyFormGroup.get("reportPeriod").addValidators(ne.required),this.onChange(this.reportStrategyFormGroup.value)):(this.reportStrategyFormGroup.disable({emitEvent:!1}),this.reportStrategyFormGroup.get("reportPeriod").removeValidators(ne.required),this.onChange(null)),this.reportStrategyFormGroup.updateValueAndValidity({emitEvent:!1})}))}onTypeChange(e){const t=this.reportStrategyFormGroup.get("reportPeriod");e===Dt.OnChange||e===Dt.OnReceived?t.disable({emitEvent:!1}):this.isExpansionMode&&!this.showStrategyControl.value||t.enable({emitEvent:!1})}static{this.ɵfac=function(e){return new(e||ma)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ma,selectors:[["tb-report-strategy"]],inputs:{isExpansionMode:"isExpansionMode",defaultValue:"defaultValue"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>ma)),multi:!0},{provide:re,useExisting:i((()=>ma)),multi:!0}]),t.ɵɵStandaloneFeature],decls:6,vars:3,consts:[["defaultMode",""],["strategyFields",""],[3,"formGroup"],["class","tb-settings",3,"expanded",4,"ngIf","ngIfElse"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],[1,"mat-slide",3,"click","formControl"],[3,"ngTemplateOutlet"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width","flex","items-center","gap-2"],["matSuffix","","tb-help-popup-placement","right",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["formControlName","type"],[3,"value",4,"ngFor","ngForOf"],["class","tb-form-row column-xs",4,"ngIf"],[3,"value"],["tbTruncateWithTooltip","",1,"fixed-title-width","tb-required"],["matInput","","type","number","min","100","name","value","formControlName","reportPeriod",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["translate","","matSuffix","",1,"block","pr-2"]],template:function(e,n){if(1&e&&(t.ɵɵelementContainerStart(0,2),t.ɵɵtemplate(1,oa,8,6,"mat-expansion-panel",3)(2,sa,3,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor)(4,da,9,8,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵreference(3);t.ɵɵproperty("formGroup",n.reportStrategyFormGroup),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.isExpansionMode)("ngIfElse",e)}},dependencies:t.ɵɵgetComponentDepsFactory(ma,[V,b,na]),encapsulation:2,changeDetection:o.OnPush})}}e("ReportStrategyComponent",ma),qe([k()],ma.prototype,"isExpansionMode",void 0),qe([O()],ma.prototype,"defaultValue",void 0);class ua{constructor(e,t){this.attributeService=e,this.cd=t,this.isGatewayActive=!1}ngAfterViewInit(){this.ctx.$scope.gatewayStatus=this,this.loadGatewayState()}loadGatewayState(){this.attributeService.getEntityAttributes(this.deviceId,C.SERVER_SCOPE,["active","lastDisconnectTime","lastConnectTime"]).subscribe((e=>{const t=e.find((e=>"active"===e.key)).value,n=e.find((e=>"lastDisconnectTime"===e.key))?.value,a=e.find((e=>"lastConnectTime"===e.key))?.value;this.isGatewayActive=this.getGatewayStatus(t,a,n),this.cd.detectChanges()}))}getGatewayStatus(e,t,n){return!!e&&(!n||t>n)}onDataUpdated(){const e=this.ctx.defaultSubscription.data,t=e.find((e=>"active"===e.dataKey.name)).data[0][1],n=e.find((e=>"lastDisconnectTime"===e.dataKey.name)).data[0][1],a=e.find((e=>"lastConnectTime"===e.dataKey.name)).data[0][1];this.isGatewayActive=this.getGatewayStatus(t,a,n),this.cd.detectChanges()}static{this.ɵfac=function(e){return new(e||ua)(t.ɵɵdirectiveInject(A.AttributeService),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ua,selectors:[["tb-gateway-status"]],inputs:{ctx:"ctx",deviceId:"deviceId"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:9,vars:10,consts:[[1,"min-h-10","flex-1","flex","justify-center"],[1,"divider"],[1,"whitespace-nowrap"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-card",0),t.ɵɵelement(1,"div",1),t.ɵɵelementStart(2,"mat-card-header")(3,"mat-card-subtitle",2),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"mat-card-content"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵclassProp("divider-red",!n.isGatewayActive)("divider-green",n.isGatewayActive),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,6,"gateway.gateway-status")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,8,n.isGatewayActive?"gateway.active":"gateway.inactive")))},dependencies:t.ɵɵgetComponentDepsFactory(ua,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:flex}[_nghost-%COMP%] .divider[_ngcontent-%COMP%]{position:absolute;width:3px;top:12px;border-radius:2px;bottom:4px;left:10px}[_nghost-%COMP%] .divider-green[_ngcontent-%COMP%] .divider[_ngcontent-%COMP%]{border:1px solid rgb(25,128,56);background-color:#198038}[_nghost-%COMP%] .divider-green[_ngcontent-%COMP%] .mat-mdc-card-content[_ngcontent-%COMP%]{color:#198038}[_nghost-%COMP%] .divider-red[_ngcontent-%COMP%] .divider[_ngcontent-%COMP%]{border:1px solid rgb(203,37,48);background-color:#cb2530}[_nghost-%COMP%] .divider-red[_ngcontent-%COMP%] .mat-mdc-card-content[_ngcontent-%COMP%]{color:#cb2530}.mdc-card[_ngcontent-%COMP%]{position:relative;padding-left:10px;box-shadow:none}.mat-mdc-card-subtitle[_ngcontent-%COMP%]{font-weight:400;font-size:12px}.mat-mdc-card-header[_ngcontent-%COMP%]{padding:8px 16px 0}.mat-mdc-card-content[_ngcontent-%COMP%]:last-child{padding-bottom:8px;font-size:16px}'],changeDetection:o.OnPush})}}var ga,ya;e("GatewayStatusComponent",ua),e("ConvertorType",ga),function(e){e.JSON="json",e.BYTES="bytes",e.CUSTOM="custom"}(ga||e("ConvertorType",ga={})),e("MQTTSourceType",ya),function(e){e.MSG="message",e.TOPIC="topic",e.CONST="constant"}(ya||e("MQTTSourceType",ya={}));const ha=e("MqttVersions",[{name:3.1,value:3},{name:3.11,value:4},{name:5,value:5}]),fa=e("QualityTypeTranslationsMap",new Map([[0,"gateway.qos.at-most-once"],[1,"gateway.qos.at-least-once"],[2,"gateway.qos.exactly-once"]])),va=e("ConvertorTypeTranslationsMap",new Map([[ga.JSON,"gateway.JSON"],[ga.BYTES,"gateway.bytes"],[ga.CUSTOM,"gateway.custom"]]));var ba;e("RequestType",ba),function(e){e.CONNECT_REQUEST="connectRequests",e.DISCONNECT_REQUEST="disconnectRequests",e.ATTRIBUTE_REQUEST="attributeRequests",e.ATTRIBUTE_UPDATE="attributeUpdates",e.SERVER_SIDE_RPC="serverSideRpc"}(ba||e("RequestType",ba={}));const xa=e("RequestTypesTranslationsMap",new Map([[ba.CONNECT_REQUEST,"gateway.request.connect-request"],[ba.DISCONNECT_REQUEST,"gateway.request.disconnect-request"],[ba.ATTRIBUTE_REQUEST,"gateway.request.attribute-request"],[ba.ATTRIBUTE_UPDATE,"gateway.request.attribute-update"],[ba.SERVER_SIDE_RPC,"gateway.request.rpc-connection"]])),wa=e("DataConversionTranslationsMap",new Map([[ga.JSON,"gateway.JSON-hint"],[ga.BYTES,"gateway.bytes-hint"],[ga.CUSTOM,"gateway.custom-hint"]]));var Ca,Sa;e("SocketType",Ca),function(e){e.TCP="TCP",e.UDP="UDP"}(Ca||e("SocketType",Ca={})),e("SocketValueKey",Sa),function(e){e.TIMESERIES="telemetry",e.ATTRIBUTES="attributes",e.ATTRIBUTES_REQUESTS="attributeRequests",e.ATTRIBUTES_UPDATES="attributeUpdates",e.RPC_METHODS="serverSideRpc"}(Sa||e("SocketValueKey",Sa={}));const Ea=e("SocketKeysPanelTitleTranslationsMap",new Map([[Sa.ATTRIBUTES,"gateway.attributes"],[Sa.TIMESERIES,"gateway.timeseries"],[Sa.ATTRIBUTES_REQUESTS,"gateway.attribute-requests"],[Sa.ATTRIBUTES_UPDATES,"gateway.attribute-updates"],[Sa.RPC_METHODS,"gateway.rpc-methods"]]));var Ta,Ia;e("RequestsType",Ta),function(e){e.Shared="shared",e.Client="client"}(Ta||e("RequestsType",Ta={})),e("ExpressionType",Ia),function(e){e.Constant="constant",e.Expression="expression"}(Ia||e("ExpressionType",Ia={}));const ka=e("SocketKeysAddKeyTranslationsMap",new Map([[Sa.ATTRIBUTES,"gateway.add-attribute"],[Sa.TIMESERIES,"gateway.add-timeseries"],[Sa.ATTRIBUTES_REQUESTS,"gateway.add-attribute-request"],[Sa.ATTRIBUTES_UPDATES,"gateway.add-attribute-update"],[Sa.RPC_METHODS,"gateway.add-rpc-method"]])),Ma=e("SocketKeysDeleteKeyTranslationsMap",new Map([[Sa.ATTRIBUTES,"gateway.delete-attribute"],[Sa.TIMESERIES,"gateway.delete-timeseries"],[Sa.ATTRIBUTES_REQUESTS,"gateway.delete-attribute-request"],[Sa.ATTRIBUTES_UPDATES,"gateway.delete-attribute-update"],[Sa.RPC_METHODS,"gateway.delete-rpc-method"]])),Pa=e("SocketKeysNoKeysTextTranslationsMap",new Map([[Sa.ATTRIBUTES,"gateway.no-attributes"],[Sa.TIMESERIES,"gateway.no-timeseries"],[Sa.ATTRIBUTES_REQUESTS,"gateway.no-attribute-requests"],[Sa.ATTRIBUTES_UPDATES,"gateway.no-attribute-updates"],[Sa.RPC_METHODS,"gateway.no-rpc-methods"]]));var Fa;e("PortLimits",Fa),function(e){e[e.MIN=1]="MIN",e[e.MAX=65535]="MAX"}(Fa||e("PortLimits",Fa={}));const Oa=e("GatewayConnectorConfigVersionMap",new Map([[Je.BACNET,Qe.v3_6_2],[Je.SOCKET,Qe.v3_6_0],[Je.MQTT,Qe.v3_5_2],[Je.OPCUA,Qe.v3_5_2],[Je.MODBUS,Qe.v3_5_2]]));var qa,Ba,Ra,Na;e("OPCUaSourceType",qa),function(e){e.PATH="path",e.IDENTIFIER="identifier",e.CONST="constant"}(qa||e("OPCUaSourceType",qa={})),e("SecurityType",Ba),function(e){e.ANONYMOUS="anonymous",e.BASIC="basic",e.CERTIFICATES="certificates"}(Ba||e("SecurityType",Ba={})),e("ModeType",Ra),function(e){e.NONE="None",e.SIGN="Sign",e.SIGNANDENCRYPT="SignAndEncrypt"}(Ra||e("ModeType",Ra={})),e("MappingType",Na),function(e){e.DATA="data",e.REQUESTS="requests",e.OPCUA="OPCua"}(Na||e("MappingType",Na={}));const _a=e("MappingTypeTranslationsMap",new Map([[Na.DATA,"gateway.data-mapping"],[Na.REQUESTS,"gateway.requests-mapping"],[Na.OPCUA,"gateway.data-mapping"]]));var Da;e("SecurityPolicy",Da),function(e){e.BASIC128="Basic128Rsa15",e.BASIC256="Basic256",e.BASIC256SHA="Basic256Sha256"}(Da||e("SecurityPolicy",Da={}));const Va=e("SecurityPolicyTypes",[{value:Da.BASIC128,name:"Basic128RSA15"},{value:Da.BASIC256,name:"Basic256"},{value:Da.BASIC256SHA,name:"Basic256SHA256"}]),Ga=e("SecurityTypeTranslationsMap",new Map([[Ba.ANONYMOUS,"gateway.broker.security-types.anonymous"],[Ba.BASIC,"gateway.broker.security-types.basic"],[Ba.CERTIFICATES,"gateway.broker.security-types.certificates"]])),Aa=e("SourceTypeTranslationsMap",new Map([[ya.MSG,"gateway.source-type.msg"],[ya.TOPIC,"gateway.source-type.topic"],[ya.CONST,"gateway.source-type.const"],[qa.PATH,"gateway.source-type.path"],[qa.IDENTIFIER,"gateway.source-type.identifier"],[qa.CONST,"gateway.source-type.const"],[Ia.Expression,"gateway.source-type.expression"]]));var ja;e("MappingKeysType",ja),function(e){e.ATTRIBUTES="attributes",e.TIMESERIES="timeseries",e.CUSTOM="extensionConfig",e.RPC_METHODS="rpc_methods",e.ATTRIBUTES_UPDATES="attributes_updates"}(ja||e("MappingKeysType",ja={}));const La=e("MappingKeysPanelTitleTranslationsMap",new Map([[ja.ATTRIBUTES,"gateway.attributes"],[ja.TIMESERIES,"gateway.timeseries"],[ja.CUSTOM,"gateway.keys"],[ja.ATTRIBUTES_UPDATES,"gateway.attribute-updates"],[ja.RPC_METHODS,"gateway.rpc-methods"]])),Ua=e("MappingKeysAddKeyTranslationsMap",new Map([[ja.ATTRIBUTES,"gateway.add-attribute"],[ja.TIMESERIES,"gateway.add-timeseries"],[ja.CUSTOM,"gateway.add-key"],[ja.ATTRIBUTES_UPDATES,"gateway.add-attribute-update"],[ja.RPC_METHODS,"gateway.add-rpc-method"]])),$a=e("MappingKeysDeleteKeyTranslationsMap",new Map([[ja.ATTRIBUTES,"gateway.delete-attribute"],[ja.TIMESERIES,"gateway.delete-timeseries"],[ja.CUSTOM,"gateway.delete-key"],[ja.ATTRIBUTES_UPDATES,"gateway.delete-attribute-update"],[ja.RPC_METHODS,"gateway.delete-rpc-method"]])),za=e("MappingKeysNoKeysTextTranslationsMap",new Map([[ja.ATTRIBUTES,"gateway.no-attributes"],[ja.TIMESERIES,"gateway.no-timeseries"],[ja.CUSTOM,"gateway.no-keys"],[ja.ATTRIBUTES_UPDATES,"gateway.no-attribute-updates"],[ja.RPC_METHODS,"gateway.no-rpc-methods"]])),Ka=e("QualityTypes",[0,1,2]);var Ha;e("ServerSideRpcType",Ha),function(e){e.WithResponse="twoWay",e.WithoutResponse="oneWay"}(Ha||e("ServerSideRpcType",Ha={}));const Wa=e("HelpLinkByMappingTypeMap",new Map([[Na.DATA,q+"/docs/iot-gateway/config/mqtt/#section-mapping"],[Na.OPCUA,q+"/docs/iot-gateway/config/opc-ua/#section-mapping"],[Na.REQUESTS,q+"/docs/iot-gateway/config/mqtt/#requests-mapping"]])),Qa=e("MappingHintTranslationsMap",new Map([[Na.DATA,"gateway.data-mapping-hint"],[Na.OPCUA,"gateway.opcua-data-mapping-hint"],[Na.REQUESTS,"gateway.requests-mapping-hint"]]));var Ja,Ya,Xa,Za,er,tr,nr,ar;e("ServerSideRPCType",Ja),function(e){e.ONE_WAY="oneWay",e.TWO_WAY="twoWay"}(Ja||e("ServerSideRPCType",Ja={})),e("ModbusProtocolType",Ya),function(e){e.TCP="tcp",e.UDP="udp",e.Serial="serial"}(Ya||e("ModbusProtocolType",Ya={})),e("ModbusMethodType",Xa),function(e){e.SOCKET="socket",e.RTU="rtu"}(Xa||e("ModbusMethodType",Xa={})),e("ModbusSerialMethodType",Za),function(e){e.RTU="rtu",e.ASCII="ascii"}(Za||e("ModbusSerialMethodType",Za={})),e("ModbusParity",er),function(e){e.Even="E",e.Odd="O",e.None="N"}(er||e("ModbusParity",er={})),e("ModbusOrderType",tr),function(e){e.BIG="BIG",e.LITTLE="LITTLE"}(tr||e("ModbusOrderType",tr={})),e("ModbusRegisterType",nr),function(e){e.HoldingRegisters="holding_registers",e.CoilsInitializer="coils_initializer",e.InputRegisters="input_registers",e.DiscreteInputs="discrete_inputs"}(nr||e("ModbusRegisterType",nr={})),e("ModbusValueKey",ar),function(e){e.ATTRIBUTES="attributes",e.TIMESERIES="timeseries",e.ATTRIBUTES_UPDATES="attributeUpdates",e.RPC_REQUESTS="rpc"}(ar||e("ModbusValueKey",ar={}));const rr=e("ModbusBaudrates",[4800,9600,19200,38400,57600,115200,230400,460800,921600]),ir=e("ModbusByteSizes",[5,6,7,8]),or=e("ModbusRegisterTranslationsMap",new Map([[nr.HoldingRegisters,"gateway.holding_registers"],[nr.CoilsInitializer,"gateway.coils_initializer"],[nr.InputRegisters,"gateway.input_registers"],[nr.DiscreteInputs,"gateway.discrete_inputs"]]));var sr;e("ModbusBitTargetType",sr),function(e){e.BooleanType="bool",e.IntegerType="int"}(sr||e("ModbusBitTargetType",sr={}));const pr=e("ModbusBitTargetTypeTranslationMap",new Map([[sr.BooleanType,"gateway.boolean"],[sr.IntegerType,"gateway.integer"]])),lr=e("ModbusMethodLabelsMap",new Map([[Xa.SOCKET,"Socket"],[Xa.RTU,"RTU"],[Za.ASCII,"ASCII"]])),cr=e("ModbusProtocolLabelsMap",new Map([[Ya.TCP,"TCP"],[Ya.UDP,"UDP"],[Ya.Serial,"Serial"]])),dr=e("ModbusParityLabelsMap",new Map([[er.Even,"Even"],[er.Odd,"Odd"],[er.None,"None"]])),mr=e("ModbusKeysPanelTitleTranslationsMap",new Map([[ar.ATTRIBUTES,"gateway.attributes"],[ar.TIMESERIES,"gateway.timeseries"],[ar.ATTRIBUTES_UPDATES,"gateway.attribute-updates"],[ar.RPC_REQUESTS,"gateway.rpc-requests"]])),ur=e("ModbusKeysAddKeyTranslationsMap",new Map([[ar.ATTRIBUTES,"gateway.add-attribute"],[ar.TIMESERIES,"gateway.add-timeseries"],[ar.ATTRIBUTES_UPDATES,"gateway.add-attribute-update"],[ar.RPC_REQUESTS,"gateway.add-rpc-request"]])),gr=e("ModbusKeysDeleteKeyTranslationsMap",new Map([[ar.ATTRIBUTES,"gateway.delete-attribute"],[ar.TIMESERIES,"gateway.delete-timeseries"],[ar.ATTRIBUTES_UPDATES,"gateway.delete-attribute-update"],[ar.RPC_REQUESTS,"gateway.delete-rpc-request"]])),yr=e("ModbusKeysNoKeysTextTranslationsMap",new Map([[ar.ATTRIBUTES,"gateway.no-attributes"],[ar.TIMESERIES,"gateway.no-timeseries"],[ar.ATTRIBUTES_UPDATES,"gateway.no-attribute-updates"],[ar.RPC_REQUESTS,"gateway.no-rpc-requests"]]));var hr;e("ModifierType",hr),function(e){e.DIVIDER="divider",e.MULTIPLIER="multiplier"}(hr||e("ModifierType",hr={}));const fr=e("ModifierTypesMap",new Map([[hr.DIVIDER,{name:"gateway.divider",icon:"mdi:division"}],[hr.MULTIPLIER,{name:"gateway.multiplier",icon:"mdi:multiplication"}]]));var vr,br;e("DeviceInfoType",vr),function(e){e.FULL="full",e.PARTIAL="partial"}(vr||e("DeviceInfoType",vr={})),e("SegmentationType",br),function(e){e.BOTH="segmentedBoth",e.TRANSMIT="segmentedTransmit",e.RECEIVE="segmentedReceive",e.NO="noSegmentation"}(br||e("SegmentationType",br={}));const xr=e("SegmentationTypeTranslationsMap",new Map([[br.BOTH,"gateway.bacnet.segmentation.both"],[br.TRANSMIT,"gateway.bacnet.segmentation.transmit"],[br.RECEIVE,"gateway.bacnet.segmentation.receive"],[br.NO,"gateway.bacnet.segmentation.no"]]));var wr;e("BacnetDeviceKeysType",wr),function(e){e.ATTRIBUTES="attributes",e.TIMESERIES="timeseries",e.RPC_METHODS="serverSideRpc",e.ATTRIBUTES_UPDATES="attributeUpdates"}(wr||e("BacnetDeviceKeysType",wr={}));const Cr=e("BacnetDeviceKeysPanelTitleTranslationsMap",new Map([[wr.ATTRIBUTES,"gateway.attributes"],[wr.TIMESERIES,"gateway.timeseries"],[wr.ATTRIBUTES_UPDATES,"gateway.attribute-updates"],[wr.RPC_METHODS,"gateway.rpc-methods"]])),Sr=e("BacnetDeviceKeysAddKeyTranslationsMap",new Map([[wr.ATTRIBUTES,"gateway.add-attribute"],[wr.TIMESERIES,"gateway.add-timeseries"],[wr.ATTRIBUTES_UPDATES,"gateway.add-attribute-update"],[wr.RPC_METHODS,"gateway.add-rpc-method"]])),Er=e("BacnetDeviceKeysDeleteKeyTranslationsMap",new Map([[wr.ATTRIBUTES,"gateway.delete-attribute"],[wr.TIMESERIES,"gateway.delete-timeseries"],[wr.ATTRIBUTES_UPDATES,"gateway.delete-attribute-update"],[wr.RPC_METHODS,"gateway.delete-rpc-method"]])),Tr=e("BacnetDeviceKeysNoKeysTextTranslationsMap",new Map([[wr.ATTRIBUTES,"gateway.no-attributes"],[wr.TIMESERIES,"gateway.no-timeseries"],[wr.ATTRIBUTES_UPDATES,"gateway.no-attribute-updates"],[wr.RPC_METHODS,"gateway.no-rpc-methods"]]));var Ir;e("BacnetKeyObjectType",Ir),function(e){e.analogInput="analogInput",e.analogOutput="analogOutput",e.analogValue="analogValue",e.binaryInput="binaryInput",e.binaryOutput="binaryOutput",e.binaryValue="binaryValue"}(Ir||e("BacnetKeyObjectType",Ir={}));const kr=e("BacnetKeyObjectTypeTranslationsMap",new Map([[Ir.analogInput,"gateway.bacnet.object-type.analog-input"],[Ir.analogOutput,"gateway.bacnet.object-type.analog-output"],[Ir.analogValue,"gateway.bacnet.object-type.analog-value"],[Ir.binaryInput,"gateway.bacnet.object-type.binary-input"],[Ir.binaryOutput,"gateway.bacnet.object-type.binary-output"],[Ir.binaryValue,"gateway.bacnet.object-type.binary-value"]]));var Mr;e("BacnetPropertyId",Mr),function(e){e.presentValue="presentValue",e.statusFlags="statusFlags",e.covIncrement="covIncrement",e.eventState="eventState",e.outOfService="outOfService",e.polarity="polarity",e.priorityArray="priorityArray",e.relinquishDefault="relinquishDefault",e.currentCommandPriority="currentCommandPriority",e.eventMessageTexts="eventMessageTexts",e.eventMessageTextsConfig="eventMessageTextsConfig",e.eventAlgorithmInhibitReference="eventAlgorithmInhibitReference",e.timeDelayNormal="timeDelayNormal"}(Mr||e("BacnetPropertyId",Mr={}));const Pr=e("BacnetPropertyIdByObjectType",new Map([[Ir.analogInput,[Mr.presentValue,Mr.statusFlags,Mr.covIncrement]],[Ir.analogOutput,[Mr.presentValue,Mr.statusFlags,Mr.covIncrement]],[Ir.analogValue,[Mr.presentValue,Mr.statusFlags,Mr.covIncrement]],[Ir.binaryInput,[Mr.presentValue,Mr.statusFlags,Mr.eventState,Mr.outOfService,Mr.polarity]],[Ir.binaryOutput,[Mr.presentValue,Mr.statusFlags,Mr.eventState,Mr.outOfService,Mr.polarity,Mr.priorityArray,Mr.relinquishDefault,Mr.currentCommandPriority,Mr.eventMessageTexts,Mr.eventMessageTextsConfig,Mr.eventAlgorithmInhibitReference,Mr.timeDelayNormal]],[Ir.binaryValue,[Mr.presentValue,Mr.statusFlags,Mr.eventState,Mr.outOfService]]])),Fr=e("BacnetPropertyIdTranslationsMap",new Map([[Mr.presentValue,"gateway.bacnet.property-id.present-value"],[Mr.statusFlags,"gateway.bacnet.property-id.status-flags"],[Mr.covIncrement,"gateway.bacnet.property-id.cov-increment"],[Mr.eventState,"gateway.bacnet.property-id.event-state"],[Mr.outOfService,"gateway.bacnet.property-id.out-of-service"],[Mr.polarity,"gateway.bacnet.property-id.polarity"],[Mr.priorityArray,"gateway.bacnet.property-id.priority-array"],[Mr.relinquishDefault,"gateway.bacnet.property-id.relinquish-default"],[Mr.currentCommandPriority,"gateway.bacnet.property-id.current-command-priority"],[Mr.eventMessageTexts,"gateway.bacnet.property-id.event-message-texts"],[Mr.eventMessageTextsConfig,"gateway.bacnet.property-id.event-message-texts-config"],[Mr.eventAlgorithmInhibitReference,"gateway.bacnet.property-id.event-algorithm-inhibit-reference"],[Mr.timeDelayNormal,"gateway.bacnet.property-id.time-delay-normal"]]));var Or;e("BacnetRequestType",Or),function(e){e.Write="writeProperty",e.Read="readProperty"}(Or||e("BacnetRequestType",Or={}));const qr=e("BacnetRequestTypeTranslationsMap",new Map([[Or.Write,"gateway.bacnet.request-type.write"],[Or.Read,"gateway.bacnet.request-type.read"]]));class Br{static{this.mqttRequestTypeKeys=Object.values(ba)}static{this.mqttRequestMappingOldFields=["attributeNameJsonExpression","deviceNameJsonExpression","deviceNameTopicExpression","extension-config"]}static{this.mqttRequestMappingNewFields=["attributeNameExpressionSource","responseTopicQoS","extensionConfig"]}static mapMappingToUpgradedVersion(e){return e?.map((({converter:e,topicFilter:t,subscriptionQos:n=1})=>{const a=e.deviceInfo??this.extractConverterDeviceInfo(e),r={...e,deviceInfo:a,extensionConfig:e.extensionConfig||e["extension-config"]||null};return this.cleanUpOldFields(r),{converter:r,topicFilter:t,subscriptionQos:n}}))}static mapRequestsToUpgradedVersion(e){return this.mqttRequestTypeKeys.reduce(((t,n)=>e[n]?(t[n]=e[n].map((e=>{const t=this.mapRequestToUpgradedVersion(e,n);return this.cleanUpOldFields(t),t})),t):t),{})}static mapRequestsToDowngradedVersion(e){return this.mqttRequestTypeKeys.reduce(((t,n)=>e[n]?(t[n]=e[n].map((e=>{n===ba.SERVER_SIDE_RPC&&delete e.type;const{attributeNameExpression:t,deviceInfo:a,...r}=e,i={...r,attributeNameJsonExpression:t||null,deviceNameJsonExpression:a?.deviceNameExpressionSource!==ya.TOPIC?a?.deviceNameExpression:null,deviceNameTopicExpression:a?.deviceNameExpressionSource===ya.TOPIC?a?.deviceNameExpression:null};return this.cleanUpNewFields(i),i})),t):t),{})}static mapMappingToDowngradedVersion(e){return e?.map((e=>{const t=this.mapConverterToDowngradedVersion(e.converter);return this.cleanUpNewFields(t),{converter:t,topicFilter:e.topicFilter}}))}static mapConverterToDowngradedVersion(e){const{deviceInfo:t,...n}=e;return e.type!==ga.BYTES?{...n,deviceNameJsonExpression:t?.deviceNameExpressionSource===ya.MSG?t.deviceNameExpression:null,deviceTypeJsonExpression:t?.deviceProfileExpressionSource===ya.MSG?t.deviceProfileExpression:null,deviceNameTopicExpression:t?.deviceNameExpressionSource!==ya.MSG?t?.deviceNameExpression:null,deviceTypeTopicExpression:t?.deviceProfileExpressionSource!==ya.MSG?t?.deviceProfileExpression:null}:{...n,deviceNameExpression:t.deviceNameExpression,deviceTypeExpression:t.deviceProfileExpression,"extension-config":e.extensionConfig}}static cleanUpOldFields(e){this.mqttRequestMappingOldFields.forEach((t=>delete e[t])),K(e)}static cleanUpNewFields(e){this.mqttRequestMappingNewFields.forEach((t=>delete e[t])),K(e)}static getTypeSourceByValue(e){return e.includes("${")?ya.MSG:e.includes("/")?ya.TOPIC:ya.CONST}static extractConverterDeviceInfo(e){const t=e.deviceNameExpression||e.deviceNameJsonExpression||e.deviceNameTopicExpression||null,n=e.deviceNameExpressionSource?e.deviceNameExpressionSource:t?this.getTypeSourceByValue(t):null,a=e.deviceProfileExpression||e.deviceTypeTopicExpression||e.deviceTypeJsonExpression||"default",r=e.deviceProfileExpressionSource?e.deviceProfileExpressionSource:a?this.getTypeSourceByValue(a):null;return t||a?{deviceNameExpression:t,deviceNameExpressionSource:n,deviceProfileExpression:a,deviceProfileExpressionSource:r}:null}static mapRequestToUpgradedVersion(e,t){const n=e.deviceNameJsonExpression||e.deviceNameTopicExpression||null,a=e.deviceTypeTopicExpression||e.deviceTypeJsonExpression||"default",r=a?this.getTypeSourceByValue(a):null,i=e.attributeNameExpressionSource||e.attributeNameJsonExpression||null,o=t===ba.SERVER_SIDE_RPC?1:null,s=t===ba.SERVER_SIDE_RPC?e.responseTopicExpression?Ha.WithResponse:Ha.WithoutResponse:null;return{...e,attributeNameExpression:i,attributeNameExpressionSource:i?this.getTypeSourceByValue(i):null,deviceInfo:e.deviceInfo?e.deviceInfo:n?{deviceNameExpression:n,deviceNameExpressionSource:this.getTypeSourceByValue(n),deviceProfileExpression:a,deviceProfileExpressionSource:r}:null,responseTopicQoS:o,type:s}}}e("MqttVersionMappingUtil",Br);class Rr{constructor(e,t){this.gatewayVersionIn=e,this.connector=t,this.gatewayVersion=zr.parseVersion(this.gatewayVersionIn),this.configVersion=zr.parseVersion(this.connector.configVersion??this.connector.configurationJson.configVersion)}getProcessedByVersion(){return this.isVersionUpdateNeeded()?this.processVersionUpdate():this.connector}processVersionUpdate(){return this.isVersionUpgradeNeeded()?this.getUpgradedVersion():this.isVersionDowngradeNeeded()?this.getDowngradedVersion():this.connector}isVersionUpdateNeeded(){return!!this.gatewayVersion&&this.configVersion!==this.gatewayVersion}isVersionUpgradeNeeded(){const e=zr.parseVersion(Oa.get(this.connector.type)),t=this.gatewayVersion>=e,n=!this.configVersion||this.configVersion=e&&e>this.gatewayVersion}}e("GatewayConnectorVersionProcessor",Rr);class Nr extends Rr{constructor(e,t){super(e,t),this.gatewayVersionIn=e,this.connector=t,this.mqttRequestTypeKeys=Object.values(ba)}getUpgradedVersion(){const{connectRequests:e,disconnectRequests:t,attributeRequests:n,attributeUpdates:a,serverSideRpc:r}=this.connector.configurationJson;let i={...this.connector.configurationJson,requestsMapping:Br.mapRequestsToUpgradedVersion({connectRequests:e,disconnectRequests:t,attributeRequests:n,attributeUpdates:a,serverSideRpc:r}),mapping:Br.mapMappingToUpgradedVersion(this.connector.configurationJson.mapping)};return this.mqttRequestTypeKeys.forEach((e=>{const{[e]:t,...n}=i;i={...n}})),this.cleanUpConfigJson(i),{...this.connector,configurationJson:i,configVersion:this.gatewayVersionIn}}getDowngradedVersion(){const{requestsMapping:e,mapping:t,...n}=this.connector.configurationJson,a=e?Br.mapRequestsToDowngradedVersion(e):{},r=Br.mapMappingToDowngradedVersion(t);return{...this.connector,configurationJson:{...n,...a,mapping:r},configVersion:this.gatewayVersionIn}}cleanUpConfigJson(e){U(e.requestsMapping,{})&&delete e.requestsMapping,U(e.mapping,[])&&delete e.mapping}}e("MqttVersionProcessor",Nr);class _r extends Rr{constructor(e,t){super(e,t),this.gatewayVersionIn=e,this.connector=t}getUpgradedVersion(){const e=this.connector.configurationJson;return{...this.connector,configurationJson:{master:e.master?.slaves?Kr.mapMasterToUpgradedVersion(e.master):{slaves:[]},slave:e.slave?Kr.mapSlaveToUpgradedVersion(e.slave):{}},configVersion:this.gatewayVersionIn}}getDowngradedVersion(){const e=this.connector.configurationJson;return{...this.connector,configurationJson:{...e,slave:e.slave?Kr.mapSlaveToDowngradedVersion(e.slave):{},master:e.master?.slaves?Kr.mapMasterToDowngradedVersion(e.master):{slaves:[]}},configVersion:this.gatewayVersionIn}}}e("ModbusVersionProcessor",_r);class Dr extends Rr{constructor(e,t){super(e,t),this.gatewayVersionIn=e,this.connector=t}getUpgradedVersion(){const e=this.connector.configurationJson.server;return{...this.connector,configurationJson:{server:e?Hr.mapServerToUpgradedVersion(e):{},mapping:e?.mapping?Hr.mapMappingToUpgradedVersion(e.mapping):[]},configVersion:this.gatewayVersionIn}}getDowngradedVersion(){return{...this.connector,configurationJson:{server:Hr.mapServerToDowngradedVersion(this.connector.configurationJson)},configVersion:this.gatewayVersionIn}}} +/** + * @license Angular v18.2.6 + * (c) 2010-2024 Google LLC. https://angular.io/ + * License: MIT + */ +function Vr(e){e||(s(Vr),e=n(p));const t=new fe((t=>e.onDestroy(t.next.bind(t))));return e=>e.pipe(be(t))}e("OpcVersionProcessor",Dr);class Gr{constructor(){this.fb=n(ie),this.destroyRef=n(p),this.formGroup=this.initFormGroup(),this.observeValueChanges()}registerOnChange(e){this.onChange=e}registerOnTouched(e){}validate(){return this.formGroup.valid?null:{formGroup:{valid:!1}}}writeValue(e){this.onWriteValue(e)}onWriteValue(e){this.formGroup.patchValue(e,{emitEvent:!1})}mapOnChangeValue(e){return e}observeValueChanges(){this.formGroup.valueChanges.pipe(Vr(this.destroyRef)).subscribe((e=>this.onChange(this.mapOnChangeValue(e))))}static{this.ɵfac=function(e){return new(e||Gr)}}static{this.ɵdir=t.ɵɵdefineDirective({type:Gr})}}e("ControlValueAccessorBaseAbstract",Gr);class Ar extends Gr{constructor(){super(...arguments),this.withReportStrategy=!0,this.initialized=new r,this.isLegacy=!1,this.fb=n(ie)}get basicFormGroup(){return this.formGroup}ngAfterViewInit(){this.initialized.emit()}onWriteValue(e){this.formGroup.setValue(this.mapConfigToFormValue(e),{emitEvent:!1})}mapOnChangeValue(e){return this.getMappedValue(e)}initFormGroup(){return this.initBasicFormGroup()}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Ar)))(n||Ar)}})()}static{this.ɵdir=t.ɵɵdefineDirective({type:Ar,inputs:{generalTabContent:"generalTabContent",withReportStrategy:[2,"withReportStrategy","withReportStrategy",l]},outputs:{initialized:"initialized"},features:[t.ɵɵInputTransformsFeature,t.ɵɵInheritDefinitionFeature]})}}e("GatewayConnectorBasicConfigDirective",Ar);class jr extends Rr{constructor(e,t){super(e,t),this.gatewayVersionIn=e,this.connector=t}getUpgradedVersion(){const e=this.connector.configurationJson;return{...this.connector,configurationJson:{socket:e?Wr.mapSocketToUpgradedVersion(e):{},devices:e?.devices?Wr.mapDevicesToUpgradedVersion(e.devices):[]},configVersion:this.gatewayVersionIn}}getDowngradedVersion(){return{...this.connector,configurationJson:Wr.mapSocketToDowngradedVersion(this.connector.configurationJson),configVersion:this.gatewayVersionIn}}}e("SocketVersionProcessor",jr);class Lr extends Rr{constructor(e,t){super(e,t),this.gatewayVersionIn=e,this.connector=t}getUpgradedVersion(){const e=this.connector.configurationJson;return{...this.connector,configurationJson:{application:e?.general?Qr.mapApplicationToUpgradedVersion(e.general):{},devices:e?.devices?Qr.mapDevicesToUpgradedVersion(e.devices):[]},configVersion:this.gatewayVersionIn}}getDowngradedVersion(){const e=this.connector.configurationJson;return{...this.connector,configurationJson:{general:e?.application?Qr.mapApplicationToDowngradedVersion(e.application):{},devices:e?.devices?Qr.mapDevicesToDowngradedVersion(e.devices):[]},configVersion:this.gatewayVersionIn}}}e("BacnetVersionProcessor",Lr);const Ur=["searchInput"];class $r{constructor(){this.withReportStrategy=!0,this.textSearchMode=!1,this.onChange=()=>{},this.translate=n(_e),this.dialog=n(le),this.dialogService=n(H),this.fb=n(ie),this.cd=n(c),this.destroyRef=n(p),this.textSearch=this.fb.control("",{nonNullable:!0}),this.entityFormArray=this.fb.array([]),this.entityFormArray.valueChanges.pipe(Vr()).subscribe((e=>{this.updateTableData(e),this.onChange(e)})),this.dataSource=this.getDatasource()}ngAfterViewInit(){this.textSearch.valueChanges.pipe(ke(150),Me(((e,t)=>(e??"")===t.trim())),Vr(this.destroyRef)).subscribe((e=>this.updateTableData(this.entityFormArray.value,e.trim())))}registerOnChange(e){this.onChange=e}registerOnTouched(e){}writeValue(e){this.entityFormArray.clear(),this.pushDataAsFormArrays(e)}enterFilterMode(){this.textSearchMode=!0,this.cd.detectChanges();const e=this.searchInputField.nativeElement;e.focus(),e.setSelectionRange(0,0)}exitFilterMode(){this.updateTableData(this.entityFormArray.value),this.textSearchMode=!1,this.textSearch.reset()}validate(){return this.entityFormArray.controls.length?null:{devicesFormGroup:{valid:!1}}}updateTableData(e,t){t&&(e=e.filter((e=>Object.values(e).some((e=>e.toString().toLowerCase().includes(t.toLowerCase())))))),this.dataSource.loadData(e)}pushDataAsFormArrays(e){e?.length&&e.forEach((e=>this.entityFormArray.push(this.fb.control(e))))}static{this.ɵfac=function(e){return new(e||$r)}}static{this.ɵdir=t.ɵɵdefineDirective({type:$r,viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(Ur,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.searchInputField=e.first)}},inputs:{withReportStrategy:[2,"withReportStrategy","withReportStrategy",l]},features:[t.ɵɵInputTransformsFeature]})}}e("AbstractDevicesConfigTableComponent",$r);class zr{static getConfig(e,t){switch(e.type){case Je.MQTT:return new Nr(t,e).getProcessedByVersion();case Je.OPCUA:return new Dr(t,e).getProcessedByVersion();case Je.MODBUS:return new _r(t,e).getProcessedByVersion();case Je.SOCKET:return new jr(t,e).getProcessedByVersion();case Je.BACNET:return new Lr(t,e).getProcessedByVersion();default:return e}}static parseVersion(e){if(W(e))return e;if(Q(e)){const[t,n="0",a="0"]=e.split(".");return parseFloat(`${t}.${n}${a.slice(0,1)}`)}return 0}}e("GatewayConnectorVersionMappingUtil",zr);class Kr{static mapMasterToUpgradedVersion(e){return{slaves:e.slaves.map((e=>{const{sendDataOnlyOnChange:t,...n}=e;return{...n,deviceType:e.deviceType??"default",reportStrategy:t?{type:Dt.OnChange}:{type:Dt.OnReportPeriod,reportPeriod:e.pollPeriod}}}))}}static mapMasterToDowngradedVersion(e){return{slaves:e.slaves.map((e=>{const{reportStrategy:t,...n}=e;return{...n,sendDataOnlyOnChange:t?.type!==Dt.OnReportPeriod}}))}}static mapSlaveToDowngradedVersion(e){if(!e?.values)return e;const t=Object.keys(e.values).reduce(((t,n)=>t={...t,[n]:[e.values[n]]}),{});return{...e,values:t}}static mapSlaveToUpgradedVersion(e){if(!e?.values)return e;const t=Object.keys(e.values).reduce(((t,n)=>t={...t,[n]:this.mapValuesToUpgradedVersion(e.values[n][0]??{})}),{});return{...e,values:t}}static mapValuesToUpgradedVersion(e){return Object.keys(e).reduce(((t,n)=>t={...t,[n]:e[n].map((e=>({...e,type:"int"===e.type?Ft.INT16:e.type})))}),{})}}e("ModbusVersionMappingUtil",Kr);class Hr{static mapServerToUpgradedVersion(e){const{mapping:t,disableSubscriptions:n,pollPeriodInMillis:a,...r}=e;return{...r,pollPeriodInMillis:a??5e3,enableSubscriptions:!n}}static mapServerToDowngradedVersion(e){const{mapping:t,server:n}=e,{enableSubscriptions:a,...r}=n??{};return{...r,mapping:t?this.mapMappingToDowngradedVersion(t):[],disableSubscriptions:!a}}static mapMappingToUpgradedVersion(e){return e.map((e=>({deviceNodePattern:e.deviceNodePattern,deviceNodeSource:this.getDeviceNodeSourceByValue(e.deviceNodePattern),deviceInfo:{deviceNameExpression:e.deviceNamePattern,deviceNameExpressionSource:this.getTypeSourceByValue(e.deviceNamePattern),deviceProfileExpression:e.deviceTypePattern??"default",deviceProfileExpressionSource:this.getTypeSourceByValue(e.deviceTypePattern??"default")},attributes:e.attributes?.map((e=>({key:e.key,type:this.getTypeSourceByValue(e.path),value:e.path})))??[],attributes_updates:e.attributes_updates?.map((e=>({key:e.attributeOnThingsBoard,type:this.getTypeSourceByValue(e.attributeOnDevice),value:e.attributeOnDevice})))??[],timeseries:e.timeseries?.map((e=>({key:e.key,type:this.getTypeSourceByValue(e.path),value:e.path})))??[],rpc_methods:e.rpc_methods?.map((e=>({method:e.method,arguments:e.arguments.map((e=>({value:e,type:this.getArgumentType(e)})))})))??[]})))}static mapMappingToDowngradedVersion(e){return e.map((e=>({deviceNodePattern:e.deviceNodePattern,deviceNamePattern:e.deviceInfo.deviceNameExpression,deviceTypePattern:e.deviceInfo.deviceProfileExpression,attributes:e.attributes.map((e=>({key:e.key,path:e.value}))),attributes_updates:e.attributes_updates.map((e=>({attributeOnThingsBoard:e.key,attributeOnDevice:e.value}))),timeseries:e.timeseries.map((e=>({key:e.key,path:e.value}))),rpc_methods:e.rpc_methods.map((e=>({method:e.method,arguments:e.arguments.map((e=>e.value))})))})))}static getTypeSourceByValue(e){return e.includes("${")?qa.IDENTIFIER:e.includes("/")||e.includes("\\")?qa.PATH:qa.CONST}static getDeviceNodeSourceByValue(e){return e.includes("${")?qa.IDENTIFIER:qa.PATH}static getArgumentType(e){switch(typeof e){case"boolean":return"boolean";case"number":return Number.isInteger(e)?"integer":"float";default:return"string"}}}e("OpcVersionMappingUtil",Hr);class Wr{static mapSocketToUpgradedVersion(e){const{devices:t,...n}=e??{};return n}static mapSocketToDowngradedVersion(e){const{devices:t,socket:n}=e??{};return{...n,devices:this.mapDevicesToDowngradedVersion(t??[])}}static mapDevicesToUpgradedVersion(e){return e?.map((e=>({...e,attributeRequests:e.attributeRequests?.map((e=>({...e,requestExpressionSource:this.getExpressionSource(e.requestExpression),attributeNameExpressionSource:this.getExpressionSource(e.attributeNameExpression)})))??[]})))??[]}static mapDevicesToDowngradedVersion(e){return e.map((e=>({...e,attributeRequests:e.attributeRequests?.map((({requestExpressionSource:e,attributeNameExpressionSource:t,...n})=>n))??[]})))}static getExpressionSource(e){return e.includes("${")||e.includes("[")?Ia.Expression:Ia.Constant}}e("SocketVersionMappingUtil",Wr);class Qr{static mapApplicationToUpgradedVersion(e){const{address:t="",...n}=e,[a,r]=t.split(":"),[i,o]=a.split("/");return{host:i,port:r,mask:o,...n}}static mapApplicationToDowngradedVersion(e){const{host:t="",port:n="",mask:a="",...r}=e;return{address:a?`${t}/${a}:${n}`:`${t}:${n}`,...r}}static mapDevicesToUpgradedVersion(e){return e?.map((({address:e="",deviceName:t,deviceType:n,attributes:a,timeseries:r,attributeUpdates:i,serverSideRpc:o,...s})=>({...s,host:e.split(":")[0],port:e.split(":")[1],deviceInfo:{deviceNameExpression:t,deviceProfileExpression:n,deviceNameExpressionSource:this.getExpressionSource(t),deviceProfileExpressionSource:this.getExpressionSource(n)},attributes:this.getUpdateKeys(a),timeseries:this.getUpdateKeys(r),attributeUpdates:this.getUpdateKeys(i),serverSideRpc:this.getUpdateKeys(o)})))??[]}static mapDevicesToDowngradedVersion(e){return e?.map((({port:e,host:t,deviceInfo:n,attributes:a,timeseries:r,attributeUpdates:i,serverSideRpc:o,...s})=>({...s,address:`${t}:${e}`,deviceName:n?.deviceNameExpression,deviceType:n?.deviceProfileExpression,attributes:this.getDowngradedKeys(a),timeseries:this.getDowngradedKeys(r),attributeUpdates:this.getDowngradedKeys(i),serverSideRpc:this.getDowngradedKeys(o)})))??[]}static getExpressionSource(e){return e.includes("${")||e.includes("[")?Ia.Expression:Ia.Constant}static getUpdateKeys(e){return e?.map((({objectId:e="",...t})=>({objectType:e.split(":")[0],objectId:e.split(":")[1],...t})))??[]}static getDowngradedKeys(e){return e?.map((({objectId:e="",objectType:t="",...n})=>({objectId:`${t}:${e}`,...n})))??[]}}e("BacnetVersionMappingUtil",Qr);class Jr{transform(e,t){const n=zr.parseVersion(e);return t===Je.MODBUS?n>=zr.parseVersion(Qe.v3_5_2):n>=zr.parseVersion(Qe.v3_6_0)}static{this.ɵfac=function(e){return new(e||Jr)}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"withReportStrategy",type:Jr,pure:!0,standalone:!0})}}e("ReportStrategyVersionPipe",Jr);const Yr=e=>({type:e});function Xr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.bACnetRequestTypesTranslates.get(e))," ")}}function Zr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.bACnetObjectTypesTranslates.get(e))," ")}}function ei(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",9),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",10)(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-select",11),t.ɵɵtemplate(10,Xr,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field")(12,"mat-label"),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",13),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"div",14)(17,"mat-form-field",15)(18,"mat-label"),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-select",16),t.ɵɵtemplate(22,Zr,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(23,"mat-form-field",15)(24,"mat-label"),t.ɵɵtext(25),t.ɵɵpipe(26,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(27,"input",17),t.ɵɵelementEnd()(),t.ɵɵelementStart(28,"mat-form-field",10)(29,"mat-label"),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(32,"input",18),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,8,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,10,"gateway.rpc.requestType")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.bACnetRequestTypes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,12,"gateway.rpc.requestTimeout")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(20,14,"gateway.rpc.objectType")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.bACnetObjectTypes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(26,16,"gateway.rpc.identifier")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(31,18,"gateway.rpc.propertyId"))}}function ti(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.bLEMethodsTranslates.get(e))," ")}}function ni(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",20),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",21),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-form-field",10)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-select",22),t.ɵɵtemplate(15,ti,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(16,"mat-slide-toggle",23),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,5,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,7,"gateway.rpc.characteristicUUID")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,9,"gateway.rpc.methodProcessing")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.bLEMethods),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,11,"gateway.rpc.withResponse")," ")}}function ai(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,e)," ")}}function ri(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",24),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",25),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-slide-toggle",26),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-slide-toggle",27),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"mat-slide-toggle",28),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"div",14)(20,"mat-form-field",15)(21,"mat-label"),t.ɵɵtext(22),t.ɵɵpipe(23,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",29),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-form-field",15)(26,"mat-label"),t.ɵɵtext(27),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-select",30),t.ɵɵtemplate(30,ai,3,4,"mat-option",12),t.ɵɵelementEnd()()(),t.ɵɵelementStart(31,"div",14)(32,"mat-form-field",15)(33,"mat-label"),t.ɵɵtext(34),t.ɵɵpipe(35,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(36,"input",31),t.ɵɵelementEnd(),t.ɵɵelementStart(37,"mat-form-field",15)(38,"mat-label"),t.ɵɵtext(39),t.ɵɵpipe(40,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(41,"input",32),t.ɵɵelementEnd()(),t.ɵɵelementStart(42,"mat-form-field")(43,"mat-label"),t.ɵɵtext(44),t.ɵɵpipe(45,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(46,"input",33),t.ɵɵelementEnd(),t.ɵɵelementStart(47,"mat-form-field")(48,"mat-label"),t.ɵɵtext(49),t.ɵɵpipe(50,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(51,"input",34),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,12,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,14,"gateway.rpc.nodeID")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,16,"gateway.rpc.isExtendedID")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,18,"gateway.rpc.isFD")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,20,"gateway.rpc.bitrateSwitch")," "),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(23,22,"gateway.rpc.dataLength")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(28,24,"gateway.rpc.dataByteorder")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.cANByteOrders),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(35,26,"gateway.rpc.dataBefore")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(40,28,"gateway.rpc.dataAfter")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(45,30,"gateway.rpc.dataInHEX")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(50,32,"gateway.rpc.dataExpression"))}}function ii(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",35),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",36),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,2,"gateway.rpc.methodFilter")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,4,"gateway.rpc.valueExpression")))}function oi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",37),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",36),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-slide-toggle",38),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,5,"gateway.rpc.valueExpression")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,7,"gateway.rpc.withResponse")," "))}function si(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",37),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",36),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-slide-toggle",38),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,5,"gateway.rpc.valueExpression")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,7,"gateway.rpc.withResponse")," "))}function pi(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SNMPMethodsTranslations.get(e))," ")}}function li(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",45)(1,"mat-form-field",46),t.ɵɵelement(2,"input",47),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-icon",48),t.ɵɵpipe(4,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,a=t.ɵɵnextContext(3);return t.ɵɵresetView(a.removeSNMPoid(n))})),t.ɵɵtext(5,"delete "),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵproperty("formControl",e),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(4,2,"gateway.rpc.remove"))}}function ci(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",39),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",10)(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-select",40),t.ɵɵtemplate(10,pi,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-slide-toggle",38),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"fieldset",41)(15,"span",42),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(18,li,6,4,"div",43),t.ɵɵelementStart(19,"button",44),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.addSNMPoid())})),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,7,"gateway.rpc.requestFilter")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,9,"gateway.rpc.method")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.sNMPMethods),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(13,11,"gateway.rpc.withResponse")," "),t.ɵɵadvance(4),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(17,13,"gateway.rpc.oids"),"*"),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",e.getFormArrayControls("oid")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(21,15,"gateway.rpc.add-oid")," ")}}function di(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function mi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",59),t.ɵɵelementContainerStart(1,63),t.ɵɵelementStart(2,"mat-form-field",64),t.ɵɵelement(3,"input",65),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",64),t.ɵɵelement(5,"input",66),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-icon",67),t.ɵɵpipe(7,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,a=t.ɵɵnextContext(4);return t.ɵɵresetView(a.removeHTTPHeader(n))})),t.ɵɵtext(8,"delete "),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()}if(2&e){const e=n.index;t.ɵɵadvance(),t.ɵɵproperty("formGroupName",e),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,2,"gateway.rpc.remove"))}}function ui(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",58)(1,"div",59)(2,"span",60),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"span",60),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(8,"span",61),t.ɵɵelementEnd(),t.ɵɵelement(9,"mat-divider"),t.ɵɵtemplate(10,mi,9,4,"div",62),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(3);t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.rpc.header-name")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,5,"gateway.rpc.value")),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.getFormArrayControls("httpHeaders"))}}function gi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",49),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",14)(6,"mat-form-field",50)(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-select",51),t.ɵɵtemplate(11,di,2,2,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"mat-form-field",15)(13,"mat-label"),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",52),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"div",14)(18,"mat-form-field",15)(19,"mat-label"),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(22,"input",53),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-form-field",15)(24,"mat-label"),t.ɵɵtext(25),t.ɵɵpipe(26,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(27,"input",54),t.ɵɵelementEnd(),t.ɵɵelementStart(28,"mat-form-field",15)(29,"mat-label"),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(32,"input",55),t.ɵɵelementEnd()(),t.ɵɵelementStart(33,"mat-form-field")(34,"mat-label"),t.ɵɵtext(35),t.ɵɵpipe(36,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(37,"input",36),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"fieldset",56)(39,"span",42),t.ɵɵtext(40),t.ɵɵpipe(41,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(42,ui,11,7,"div",57),t.ɵɵelementStart(43,"button",44),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.addHTTPHeader())})),t.ɵɵtext(44),t.ɵɵpipe(45,"translate"),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,11,"gateway.rpc.methodFilter")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,13,"gateway.rpc.httpMethod")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.hTTPMethods),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,15,"gateway.rpc.requestUrlExpression")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(21,17,"gateway.rpc.responseTimeout")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(26,19,"gateway.rpc.timeout")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(31,21,"gateway.rpc.tries")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(36,23,"gateway.rpc.valueExpression")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(41,25,"gateway.rpc.httpHeaders")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.getFormArrayControls("httpHeaders").length),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(45,27,"gateway.rpc.add-header")," ")}}function yi(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",19),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function hi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",59),t.ɵɵelementContainerStart(1,63),t.ɵɵelementStart(2,"mat-form-field",64),t.ɵɵelement(3,"input",73),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",64),t.ɵɵelement(6,"input",74),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-icon",67),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,a=t.ɵɵnextContext(4);return t.ɵɵresetView(a.removeHTTPHeader(n))})),t.ɵɵtext(9,"delete "),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()}if(2&e){const e=n.index;t.ɵɵadvance(),t.ɵɵproperty("formGroupName",e),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(4,3,"gateway.rpc.set")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,5,"gateway.rpc.remove"))}}function fi(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",58)(1,"div",59)(2,"span",60),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"span",60),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(8,"span",61),t.ɵɵelementEnd(),t.ɵɵelement(9,"mat-divider"),t.ɵɵtemplate(10,hi,10,7,"div",62),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(3);t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.rpc.header-name")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,5,"gateway.rpc.value")),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.getFormArrayControls("httpHeaders"))}}function vi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",68),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",59)(6,"mat-form-field",50)(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-select",51),t.ɵɵtemplate(11,yi,2,2,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"mat-form-field",15)(13,"mat-label"),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",52),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"div",59)(18,"mat-form-field",15)(19,"mat-label"),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(22,"input",53),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-form-field",15)(24,"mat-label"),t.ɵɵtext(25),t.ɵɵpipe(26,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(27,"input",69),t.ɵɵelementEnd(),t.ɵɵelementStart(28,"mat-form-field",15)(29,"mat-label"),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(32,"input",70),t.ɵɵelementEnd()(),t.ɵɵelementStart(33,"mat-form-field")(34,"mat-label"),t.ɵɵtext(35),t.ɵɵpipe(36,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(37,"input",71),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"mat-form-field")(39,"mat-label"),t.ɵɵtext(40),t.ɵɵpipe(41,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(42,"input",72),t.ɵɵelementEnd(),t.ɵɵelementStart(43,"fieldset",56)(44,"span",42),t.ɵɵtext(45),t.ɵɵpipe(46,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(47,fi,11,7,"div",57),t.ɵɵelementStart(48,"button",44),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.addHTTPHeader())})),t.ɵɵtext(49),t.ɵɵpipe(50,"translate"),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,12,"gateway.rpc.methodFilter")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,14,"gateway.rpc.httpMethod")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.hTTPMethods),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,16,"gateway.rpc.requestUrlExpression")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(21,18,"gateway.rpc.responseTimeout")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(26,20,"gateway.rpc.timeout")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(31,22,"gateway.rpc.tries")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(36,24,"gateway.rpc.requestValueExpression")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(41,26,"gateway.rpc.responseValueExpression")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(46,28,"gateway.rpc.httpHeaders")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.getFormArrayControls("httpHeaders").length),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(50,30,"gateway.rpc.add-header")," ")}}function bi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.rpc.json-value-invalid")," "))}function xi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",75),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field")(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",76),t.ɵɵelementStart(10,"mat-icon",77),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext(2);return t.ɵɵresetView(a.openEditJSONDialog(n))})),t.ɵɵtext(12,"edit "),t.ɵɵelementEnd(),t.ɵɵtemplate(13,bi,3,3,"mat-error",78),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,4,"gateway.statistics.command")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,6,"widget-config.datasource-parameters")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(11,8,"gateway.rpc-command-edit-params")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.commandForm.get("params").hasError("invalidJSON"))}}function wi(e,n){if(1&e&&(t.ɵɵelementContainerStart(0,6),t.ɵɵtemplate(1,ei,33,20,"ng-template",7)(2,ni,19,13,"ng-template",7)(3,ri,52,34,"ng-template",7)(4,ii,10,6,"ng-template",7)(5,oi,13,9,"ng-template",7)(6,si,13,9,"ng-template",7)(7,ci,22,17,"ng-template",7)(8,gi,46,29,"ng-template",7)(9,vi,51,32,"ng-template",7)(10,xi,14,10,"ng-template",8),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("ngSwitch",e.connectorType),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.BACNET),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.BLE),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.CAN),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.FTP),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.OCPP),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.XMPP),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.SNMP),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.REST),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.REQUEST)}}class Ci{constructor(e,t){this.fb=e,this.dialog=t,this.sendCommand=new r,this.saveTemplate=new r,this.ConnectorType=Je,this.bACnetRequestTypes=Object.values(yn),this.bACnetObjectTypes=Object.values(fn),this.bLEMethods=Object.values(bn),this.cANByteOrders=Object.values(wn),this.sNMPMethods=Object.values(En),this.hTTPMethods=Object.values(In),this.bACnetRequestTypesTranslates=hn,this.bACnetObjectTypesTranslates=vn,this.bLEMethodsTranslates=xn,this.SNMPMethodsTranslations=Tn,this.gatewayConnectorDefaultTypesTranslates=Ye,this.urlPattern=/^[-a-zA-Zd_$:{}?~+=\/.0-9-]*$/,this.numbersOnlyPattern=/^[0-9]*$/,this.hexOnlyPattern=/^[0-9A-Fa-f ]+$/,this.propagateChange=e=>{},this.destroy$=new me}ngOnInit(){this.commandForm=this.connectorParamsFormGroupByType(this.connectorType),this.observeFormChanges()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}connectorParamsFormGroupByType(e){let t;switch(e){case Je.BACNET:t=this.fb.group({method:[null,[ne.required,ne.pattern($e)]],requestType:[null,[ne.required,ne.pattern($e)]],requestTimeout:[null,[ne.required,ne.min(10),ne.pattern(this.numbersOnlyPattern)]],objectType:[null,[]],identifier:[null,[ne.required,ne.min(1),ne.pattern(this.numbersOnlyPattern)]],propertyId:[null,[ne.required,ne.pattern($e)]]});break;case Je.BLE:t=this.fb.group({methodRPC:[null,[ne.required,ne.pattern($e)]],characteristicUUID:["00002A00-0000-1000-8000-00805F9B34FB",[ne.required,ne.pattern($e)]],methodProcessing:[null,[ne.required]],withResponse:[!1,[]]});break;case Je.CAN:t=this.fb.group({method:[null,[ne.required,ne.pattern($e)]],nodeID:[null,[ne.required,ne.min(0),ne.pattern(this.numbersOnlyPattern)]],isExtendedID:[!1,[]],isFD:[!1,[]],bitrateSwitch:[!1,[]],dataLength:[null,[ne.min(1),ne.pattern(this.numbersOnlyPattern)]],dataByteorder:[null,[]],dataBefore:[null,[ne.pattern($e),ne.pattern(this.hexOnlyPattern)]],dataAfter:[null,[ne.pattern($e),ne.pattern(this.hexOnlyPattern)]],dataInHEX:[null,[ne.pattern($e),ne.pattern(this.hexOnlyPattern)]],dataExpression:[null,[ne.pattern($e)]]});break;case Je.FTP:t=this.fb.group({methodFilter:[null,[ne.required,ne.pattern($e)]],valueExpression:[null,[ne.required,ne.pattern($e)]]});break;case Je.OCPP:case Je.XMPP:t=this.fb.group({methodRPC:[null,[ne.required,ne.pattern($e)]],valueExpression:[null,[ne.required,ne.pattern($e)]],withResponse:[!1,[]]});break;case Je.SNMP:t=this.fb.group({requestFilter:[null,[ne.required,ne.pattern($e)]],method:[null,[ne.required]],withResponse:[!1,[]],oid:this.fb.array([],[ne.required])});break;case Je.REST:t=this.fb.group({methodFilter:[null,[ne.required,ne.pattern($e)]],httpMethod:[null,[ne.required]],requestUrlExpression:[null,[ne.required,ne.pattern(this.urlPattern)]],responseTimeout:[null,[ne.required,ne.min(10),ne.pattern(this.numbersOnlyPattern)]],timeout:[null,[ne.required,ne.min(10),ne.pattern(this.numbersOnlyPattern)]],tries:[null,[ne.required,ne.min(1),ne.pattern(this.numbersOnlyPattern)]],valueExpression:[null,[ne.required,ne.pattern($e)]],httpHeaders:this.fb.array([]),security:[{},[ne.required]]});break;case Je.REQUEST:t=this.fb.group({methodFilter:[null,[ne.required,ne.pattern($e)]],httpMethod:[null,[ne.required]],requestUrlExpression:[null,[ne.required,ne.pattern(this.urlPattern)]],responseTimeout:[null,[ne.required,ne.min(10),ne.pattern(this.numbersOnlyPattern)]],timeout:[null,[ne.required,ne.min(10),ne.pattern(this.numbersOnlyPattern)]],tries:[null,[ne.required,ne.min(1),ne.pattern(this.numbersOnlyPattern)]],requestValueExpression:[null,[ne.required,ne.pattern($e)]],responseValueExpression:[null,[ne.pattern($e)]],httpHeaders:this.fb.array([])});break;default:t=this.fb.group({command:[null,[ne.required,ne.pattern($e)]],params:[{},[He]]})}return t}addSNMPoid(e=null){const t=this.commandForm.get("oid");t&&t.push(this.fb.control(e,[ne.required,ne.pattern($e)]),{emitEvent:!1})}removeSNMPoid(e){this.commandForm.get("oid").removeAt(e)}addHTTPHeader(e={headerName:null,value:null}){const t=this.commandForm.get("httpHeaders"),n=this.fb.group({headerName:[e.headerName,[ne.required,ne.pattern($e)]],value:[e.value,[ne.required,ne.pattern($e)]]});t&&t.push(n,{emitEvent:!1})}removeHTTPHeader(e){this.commandForm.get("httpHeaders").removeAt(e)}getFormArrayControls(e){return this.commandForm.get(e).controls}openEditJSONDialog(e){e&&e.stopPropagation(),this.dialog.open(Ge,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{jsonValue:this.commandForm.get("params").value,required:!0}}).afterClosed().subscribe((e=>{e&&this.commandForm.get("params").setValue(e)}))}save(){this.saveTemplate.emit()}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}clearFromArrayByName(e){const t=this.commandForm.get(e);for(;0!==t.length;)t.removeAt(0)}writeValue(e){if("object"==typeof e){switch(e=G(e),this.connectorType){case Je.SNMP:this.clearFromArrayByName("oid"),e.oid.forEach((e=>{this.addSNMPoid(e)})),delete e.oid;break;case Je.REQUEST:case Je.REST:this.clearFromArrayByName("httpHeaders"),e.httpHeaders&&Object.entries(e.httpHeaders).forEach((e=>{this.addHTTPHeader({headerName:e[0],value:e[1]})})),delete e.httpHeaders}this.commandForm.patchValue(e,{onlySelf:!1})}}observeFormChanges(){this.commandForm.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.connectorType!==Je.REST&&this.connectorType!==Je.REQUEST||(e.httpHeaders=e.httpHeaders.reduce(((e,t)=>(e[t.headerName]=t.value,e)),{})),this.commandForm.valid&&this.propagateChange({...this.commandForm.value,...e})}))}static{this.ɵfac=function(e){return new(e||Ci)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(pe.MatDialog))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ci,selectors:[["tb-gateway-service-rpc-connector"]],inputs:{connectorType:"connectorType"},outputs:{sendCommand:"sendCommand",saveTemplate:"saveTemplate"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Ci)),multi:!0}]),t.ɵɵStandaloneFeature],decls:12,vars:16,consts:[[1,"command-form","flex","flex-col",3,"formGroup"],[1,"mat-subtitle-1","title"],[3,"ngIf"],[1,"template-actions","flex","flex-row","justify-end","gap-2.5"],["mat-raised-button","",3,"click","disabled"],["mat-raised-button","","color","primary",3,"click","disabled"],[3,"ngSwitch"],[3,"ngSwitchCase"],["ngSwitchDefault",""],["matInput","","formControlName","method","placeholder","set_state"],[1,"mat-block"],["formControlName","requestType"],[3,"value",4,"ngFor","ngForOf"],["matInput","","formControlName","requestTimeout","type","number","min","10","step","1","placeholder","1000"],[1,"flex","flex-1","flex-row","gap-2.5"],[1,"flex-1"],["formControlName","objectType"],["matInput","","formControlName","identifier","type","number","min","1","step","1","placeholder","1"],["matInput","","formControlName","propertyId","placeholder","presentValue"],[3,"value"],["matInput","","formControlName","methodRPC","placeholder","rpcMethod1"],["matInput","","formControlName","characteristicUUID","placeholder","00002A00-0000-1000-8000-00805F9B34FB"],["formControlName","methodProcessing"],["formControlName","withResponse",1,"mat-slide"],["matInput","","formControlName","method","placeholder","sendSameData"],["matInput","","formControlName","nodeID","type","number","placeholder","4","min","0","step","1"],["formControlName","isExtendedID",1,"mat-slide","margin"],["formControlName","isFD",1,"mat-slide","margin"],["formControlName","bitrateSwitch",1,"mat-slide","margin"],["matInput","","formControlName","dataLength","type","number","placeholder","2","min","1","step","1"],["formControlName","dataByteorder"],["matInput","","formControlName","dataBefore","placeholder","00AA"],["matInput","","formControlName","dataAfter","placeholder","0102"],["matInput","","formControlName","dataInHEX","placeholder","aa bb cc dd ee ff aa bb aa bb cc d ee ff"],["matInput","","formControlName","dataExpression","placeholder","userSpeed if maxAllowedSpeed > userSpeed else maxAllowedSpeed"],["matInput","","formControlName","methodFilter","placeholder","read"],["matInput","","formControlName","valueExpression","placeholder","${params}"],["matInput","","formControlName","methodRPC","placeholder","rpc1"],["formControlName","withResponse",1,"mat-slide","margin"],["matInput","","formControlName","requestFilter","placeholder","setData"],["formControlName","method"],["formArrayName","oid",1,"fields","flex","flex-col","gap-2.5","border"],[1,"fields-label"],["class","flex flex-1 flex-row items-center justify-center gap-2.5",4,"ngFor","ngForOf"],["mat-raised-button","",1,"self-start",3,"click"],[1,"flex","flex-1","flex-row","items-center","justify-center","gap-2.5"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","flex-1"],["matInput","","required","",3,"formControl"],[1,"flex-[1_1_30px]",2,"cursor","pointer","max-width","30px","min-width","30px",3,"click","matTooltip"],["matInput","","formControlName","methodFilter","placeholder","post_attributes"],[1,"max-w-4/12","flex-[1_1_33%]"],["formControlName","httpMethod"],["matInput","","formControlName","requestUrlExpression","placeholder","http://127.0.0.1:5000/my_devices"],["matInput","","formControlName","responseTimeout","type","number","step","1","min","10","placeholder","10"],["matInput","","formControlName","timeout","type","number","step","1","min","10","placeholder","1000"],["matInput","","formControlName","tries","type","number","step","1","min","1","placeholder","3"],["formArrayName","httpHeaders",1,"fields","flex","flex-col","gap-2.5","border"],["class","flex flex-col gap-2.5 border",4,"ngIf"],[1,"flex","flex-col","gap-2.5","border"],[1,"flex","flex-row","items-center","justify-center","gap-2.5"],[1,"title","flex-1"],[2,"width","30px"],["class","flex flex-row items-center justify-center gap-2.5",4,"ngFor","ngForOf"],[3,"formGroupName"],["appearance","outline",1,"flex-1"],["matInput","","formControlName","headerName"],["matInput","","formControlName","value","placeholder","application/json"],[2,"cursor","pointer","width","30px",3,"click","matTooltip"],["matInput","","formControlName","methodFilter","placeholder","echo"],["matInput","","formControlName","timeout","type","number","step","1","min","10","placeholder","10"],["matInput","","formControlName","tries","type","number","step","1","min","1","placeholder","1"],["matInput","","formControlName","requestValueExpression","placeholder","${params}"],["matInput","","formControlName","responseValueExpression","placeholder","${temp}"],["matInput","","formControlName","headerName",3,"placeholder"],["matInput","","formControlName","value"],["matInput","","formControlName","command"],["matInput","","formControlName","params","type","JSON","tb-json-to-string",""],["aria-hidden","false","aria-label","help-icon","matIconSuffix","",1,"material-icons-outlined",2,"cursor","pointer",3,"click","matTooltip"],[4,"ngIf"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(4,wi,11,10,"ng-template",2),t.ɵɵelementStart(5,"div",3)(6,"button",4),t.ɵɵlistener("click",(function(){return n.save()})),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"button",5),t.ɵɵlistener("click",(function(){return n.sendCommand.emit()})),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.commandForm),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind2(3,7,"gateway.rpc.title",t.ɵɵpureFunction1(14,Yr,n.gatewayConnectorDefaultTypesTranslates.get(n.connectorType)))),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.connectorType),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.commandForm.invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(8,10,"gateway.rpc-command-save-template")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.commandForm.invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(11,12,"gateway.rpc-command-send")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Ci,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;padding:0}[_nghost-%COMP%] .title[_ngcontent-%COMP%]{font-weight:500}[_nghost-%COMP%] .command-form[_ngcontent-%COMP%]{flex-wrap:nowrap}[_nghost-%COMP%] .command-form[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{margin-top:10px}[_nghost-%COMP%] .mat-mdc-slide-toggle.margin[_ngcontent-%COMP%]{margin-bottom:10px;margin-left:10px}[_nghost-%COMP%] .fields[_ngcontent-%COMP%] .fields-label[_ngcontent-%COMP%]{font-weight:500}[_nghost-%COMP%] .border[_ngcontent-%COMP%]{padding:16px;margin-bottom:10px;box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f;border:solid 1px #e0e0e0;border-radius:4px}[_nghost-%COMP%] .border[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{color:#0000008a}[_nghost-%COMP%] .border[_ngcontent-%COMP%] .mat-icon[_ngcontent-%COMP%]{color:#00000061}[_nghost-%COMP%] .border[_ngcontent-%COMP%] .mat-divider[_ngcontent-%COMP%]{margin-left:-16px;margin-right:-16px;margin-bottom:16px}']})}}function Si(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",11),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Ei(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",11),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,2,a.ModbusFunctionCodeTranslationsMap.get(e)))}}function Ti(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",12),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.address-required"))}function Ii(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",12),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function ki(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",13)(1,"mat-form-field",3)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",14),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Ii,3,3,"mat-icon",8),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.rpc.value")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.rpcParametersFormGroup.get("value").hasError("required")&&e.rpcParametersFormGroup.get("value").touched)}}class Mi{constructor(e){this.fb=e,this.ModbusEditableDataTypes=Ot,this.ModbusFunctionCodeTranslationsMap=Nt,this.modbusDataTypes=Object.values(Ft),this.writeFunctionCodes=[5,6,15,16],this.defaultFunctionCodes=[3,4,6,16],this.readFunctionCodes=[1,2,3,4],this.bitsFunctionCodes=[...this.readFunctionCodes,...this.writeFunctionCodes],this.destroy$=new me,this.rpcParametersFormGroup=this.fb.group({type:[Ft.BYTES,[ne.required]],functionCode:[this.defaultFunctionCodes[0],[ne.required]],value:[{value:"",disabled:!0},[ne.required,ne.pattern($e)]],address:[null,[ne.required]],objectsCount:[1,[ne.required]]}),this.updateFunctionCodes(this.rpcParametersFormGroup.get("type").value),this.observeValueChanges(),this.observeKeyDataType(),this.observeFunctionCode()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}validate(){return this.rpcParametersFormGroup.valid?null:{rpcParametersFormGroup:{valid:!1}}}writeValue(e){this.rpcParametersFormGroup.patchValue(e,{emitEvent:!1})}observeValueChanges(){this.rpcParametersFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}observeKeyDataType(){this.rpcParametersFormGroup.get("type").valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.ModbusEditableDataTypes.includes(e)||this.rpcParametersFormGroup.get("objectsCount").patchValue(qt[e],{emitEvent:!1}),this.updateFunctionCodes(e)}))}observeFunctionCode(){this.rpcParametersFormGroup.get("functionCode").valueChanges.pipe(be(this.destroy$)).subscribe((e=>this.updateValueEnabling(e)))}updateValueEnabling(e){this.writeFunctionCodes.includes(e)?this.rpcParametersFormGroup.get("value").enable({emitEvent:!1}):(this.rpcParametersFormGroup.get("value").setValue(null),this.rpcParametersFormGroup.get("value").disable({emitEvent:!1}))}updateFunctionCodes(e){this.functionCodes=e===Ft.BITS?this.bitsFunctionCodes:this.defaultFunctionCodes,this.functionCodes.includes(this.rpcParametersFormGroup.get("functionCode").value)||this.rpcParametersFormGroup.get("functionCode").patchValue(this.functionCodes[0],{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||Mi)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Mi,selectors:[["tb-gateway-modbus-rpc-parameters"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Mi)),multi:!0},{provide:re,useExisting:i((()=>Mi)),multi:!0}]),t.ɵɵStandaloneFeature],decls:35,vars:30,consts:[[3,"formGroup"],[1,"tb-form-hint","tb-primary-fill","no-padding-top","hint-container"],[1,"flex","flex-1","flex-row","gap-2.5"],[1,"flex-1"],["formControlName","type"],[3,"value",4,"ngFor","ngForOf"],["formControlName","functionCode"],["matInput","","type","number","min","0","max","50000","name","value","formControlName","address",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","type","number","min","1","max","50000","name","value","formControlName","objectsCount",3,"placeholder","readonly"],["class","flex",4,"ngIf"],[3,"value"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[1,"flex"],["matInput","","name","value","formControlName","value",3,"placeholder"]],template:function(e,n){1&e&&(t.ɵɵelementContainerStart(0,0),t.ɵɵelementStart(1,"div",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelement(4,"br"),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"div",2)(8,"mat-form-field",3)(9,"mat-label"),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-select",4),t.ɵɵtemplate(13,Si,2,2,"mat-option",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"mat-form-field",3)(15,"mat-label"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"mat-select",6),t.ɵɵtemplate(19,Ei,3,4,"mat-option",5),t.ɵɵelementEnd()()(),t.ɵɵelementStart(20,"div",2)(21,"mat-form-field",3)(22,"mat-label"),t.ɵɵtext(23),t.ɵɵpipe(24,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(25,"input",7),t.ɵɵpipe(26,"translate"),t.ɵɵtemplate(27,Ti,3,3,"mat-icon",8),t.ɵɵelementEnd(),t.ɵɵelementStart(28,"mat-form-field",3)(29,"mat-label"),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(32,"input",9),t.ɵɵpipe(33,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(34,ki,8,7,"div",10),t.ɵɵelementContainerEnd()),2&e&&(t.ɵɵproperty("formGroup",n.rpcParametersFormGroup),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,14,"gateway.rpc.hint.modbus-response-reading"),""),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,16,"gateway.rpc.hint.modbus-writing-functions")," "),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(11,18,"gateway.rpc.type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.modbusDataTypes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(17,20,"gateway.rpc.functionCode")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.functionCodes),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(24,22,"gateway.rpc.address")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(26,24,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.rpcParametersFormGroup.get("address").hasError("required")&&n.rpcParametersFormGroup.get("address").touched),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(31,26,"gateway.rpc.objectsCount")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(33,28,"gateway.set")),t.ɵɵproperty("readonly",!n.ModbusEditableDataTypes.includes(n.rpcParametersFormGroup.get("type").value)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.writeFunctionCodes.includes(n.rpcParametersFormGroup.get("functionCode").value)))},dependencies:t.ɵɵgetComponentDepsFactory(Mi,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%] .hint-container[_ngcontent-%COMP%]{margin-bottom:12px}'],changeDetection:o.OnPush})}}function Pi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",6),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.rpc.responseTopicExpression")))}function Fi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field")(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",7),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.rpc.responseTimeout")))}class Oi{constructor(e){this.fb=e,this.onChange=e=>{},this.onTouched=()=>{},this.destroy$=new me,this.rpcParametersFormGroup=this.fb.group({methodFilter:[null,[ne.required,ne.pattern($e)]],requestTopicExpression:[null,[ne.required,ne.pattern($e)]],responseTopicExpression:[{value:null,disabled:!0},[ne.required,ne.pattern($e)]],responseTimeout:[{value:null,disabled:!0},[ne.min(10),ne.pattern(ze)]],valueExpression:[null,[ne.required,ne.pattern($e)]],withResponse:[!1,[]]}),this.observeValueChanges(),this.observeWithResponse()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}validate(){return this.rpcParametersFormGroup.valid?null:{rpcParametersFormGroup:{valid:!1}}}writeValue(e){this.rpcParametersFormGroup.patchValue(e,{emitEvent:!1}),this.toggleResponseFields(e.withResponse)}observeValueChanges(){this.rpcParametersFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}observeWithResponse(){this.rpcParametersFormGroup.get("withResponse").valueChanges.pipe(we((e=>this.toggleResponseFields(e))),be(this.destroy$)).subscribe()}toggleResponseFields(e){const t=this.rpcParametersFormGroup.get("responseTopicExpression"),n=this.rpcParametersFormGroup.get("responseTimeout");e?(t.enable(),n.enable()):(t.disable(),n.disable())}static{this.ɵfac=function(e){return new(e||Oi)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Oi,selectors:[["tb-gateway-mqtt-rpc-parameters"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Oi)),multi:!0},{provide:re,useExisting:i((()=>Oi)),multi:!0}]),t.ɵɵStandaloneFeature],decls:21,vars:15,consts:[[3,"formGroup"],["matInput","","formControlName","methodFilter","placeholder","echo"],["matInput","","formControlName","requestTopicExpression","placeholder","sensor/${deviceName}/request/${methodName}/${requestId}"],["formControlName","withResponse",1,"margin",3,"click"],[4,"ngIf"],["matInput","","formControlName","valueExpression","placeholder","${params}"],["matInput","","formControlName","responseTopicExpression","placeholder","sensor/${deviceName}/response/${methodName}/${requestId}"],["matInput","","formControlName","responseTimeout","type","number","placeholder","10000","min","10","step","1"]],template:function(e,n){if(1&e&&(t.ɵɵelementContainerStart(0,0),t.ɵɵelementStart(1,"mat-form-field")(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",1),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-form-field")(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",2),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-slide-toggle",3),t.ɵɵlistener("click",(function(e){return e.stopPropagation()})),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(14,Pi,5,3,"mat-form-field",4)(15,Fi,5,3,"mat-form-field",4),t.ɵɵelementStart(16,"mat-form-field")(17,"mat-label"),t.ɵɵtext(18),t.ɵɵpipe(19,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(20,"input",5),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd()),2&e){let e,a;t.ɵɵproperty("formGroup",n.rpcParametersFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,7,"gateway.rpc.method-name")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,9,"gateway.rpc.requestTopicExpression")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(13,11,"gateway.rpc.withResponse")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",null==(e=n.rpcParametersFormGroup.get("withResponse"))?null:e.value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",null==(a=n.rpcParametersFormGroup.get("withResponse"))?null:a.value),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(19,13,"gateway.rpc.valueExpression"))}},dependencies:t.ɵɵgetComponentDepsFactory(Oi,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%]{display:flex;flex-direction:column}[_nghost-%COMP%] .mat-mdc-slide-toggle.margin[_ngcontent-%COMP%]{margin-bottom:10px;margin-left:10px}'],changeDetection:o.OnPush})}}function qi(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",26),t.ɵɵelement(1,"mat-icon",27),t.ɵɵelementStart(2,"span"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("svgIcon",a.valueTypes.get(e).icon),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,a.valueTypes.get(e).name))}}function Bi(e,n){1&e&&(t.ɵɵelement(0,"input",28),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function Ri(e,n){1&e&&(t.ɵɵelement(0,"input",29),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function Ni(e,n){1&e&&(t.ɵɵelement(0,"input",30),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function _i(e,n){1&e&&(t.ɵɵelementStart(0,"mat-select",31)(1,"mat-option",26),t.ɵɵtext(2,"true"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-option",26),t.ɵɵtext(4,"false"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(),t.ɵɵproperty("value",!0),t.ɵɵadvance(2),t.ɵɵproperty("value",!1))}function Di(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",32),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function Vi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",8)(1,"div",9)(2,"div",10),t.ɵɵtext(3,"gateway.type"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",11)(5,"mat-form-field",12)(6,"mat-select",13)(7,"mat-select-trigger")(8,"div",14),t.ɵɵelement(9,"mat-icon",15),t.ɵɵelementStart(10,"span"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(13,qi,5,5,"mat-option",16),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(14,"div",17)(15,"div",10),t.ɵɵtext(16,"gateway.value"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"mat-form-field",18),t.ɵɵelementContainerStart(18,19),t.ɵɵtemplate(19,Bi,2,3,"input",20)(20,Ri,2,3,"input",21)(21,Ni,2,3,"input",22)(22,_i,5,2,"mat-select",23),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(23,Di,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵelementStart(24,"button",25),t.ɵɵpipe(25,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,a=t.ɵɵnextContext();return t.ɵɵresetView(a.removeArgument(n))})),t.ɵɵelementStart(26,"mat-icon"),t.ɵɵtext(27,"delete"),t.ɵɵelementEnd()()()}if(2&e){let e,a;const r=n.$implicit,i=t.ɵɵnextContext();t.ɵɵproperty("formGroup",r),t.ɵɵadvance(9),t.ɵɵproperty("svgIcon",null==(e=i.valueTypes.get(r.get("type").value))?null:e.icon),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(12,11,null==(a=i.valueTypes.get(r.get("type").value))?null:a.name)),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",i.valueTypeKeys),t.ɵɵadvance(5),t.ɵɵproperty("ngSwitch",r.get("type").value),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",i.MappingValueType.STRING),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",i.MappingValueType.INTEGER),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",i.MappingValueType.DOUBLE),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",i.MappingValueType.BOOLEAN),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.get(r.get("type").value+"Value").hasError("required")&&r.get(r.get("type").value+"Value").touched),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(25,13,"gateway.rpc.remove"))}}class Gi{constructor(e,t){this.fb=e,this.cdr=t,this.valueTypeKeys=Object.values(Bt),this.MappingValueType=Bt,this.valueTypes=Rt,this.onChange=e=>{},this.onTouched=()=>{},this.destroy$=new me,this.rpcParametersFormGroup=this.fb.group({method:[null,[ne.required,ne.pattern($e)]],arguments:this.fb.array([])}),this.observeValueChanges()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}validate(){return this.rpcParametersFormGroup.valid?null:{rpcParametersFormGroup:{valid:!1}}}writeValue(e){this.clearArguments(),e.arguments?.map((({type:e,value:t})=>({type:e,[e+"Value"]:t}))).forEach((e=>this.addArgument(e))),this.cdr.markForCheck(),this.rpcParametersFormGroup.get("method").patchValue(e.method)}observeValueChanges(){this.rpcParametersFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{const t=e.arguments.map((({type:e,...t})=>({type:e,value:t[e+"Value"]})));this.onChange({method:e.method,arguments:t}),this.onTouched()}))}removeArgument(e){this.rpcParametersFormGroup.get("arguments").removeAt(e)}addArgument(e={}){const t=this.fb.group({type:[e.type??Bt.STRING],stringValue:[e.stringValue??{value:"",disabled:!(U(e,{})||e.stringValue)},[ne.required,ne.pattern($e)]],integerValue:[{value:e.integerValue??0,disabled:!j(e.integerValue)},[ne.required,ne.pattern(ze)]],doubleValue:[{value:e.doubleValue??0,disabled:!j(e.doubleValue)},[ne.required]],booleanValue:[{value:e.booleanValue??!1,disabled:!j(e.booleanValue)},[ne.required]]});this.observeTypeChange(t),this.rpcParametersFormGroup.get("arguments").push(t,{emitEvent:!1})}clearArguments(){const e=this.rpcParametersFormGroup.get("arguments");for(;0!==e.length;)e.removeAt(0)}observeTypeChange(e){e.get("type").valueChanges.pipe(be(this.destroy$)).subscribe((t=>{e.disable({emitEvent:!1}),e.get("type").enable({emitEvent:!1}),e.get(t+"Value").enable({emitEvent:!1})}))}static{this.ɵfac=function(e){return new(e||Gi)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Gi,selectors:[["tb-gateway-opc-rpc-parameters"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Gi)),multi:!0},{provide:re,useExisting:i((()=>Gi)),multi:!0}]),t.ɵɵStandaloneFeature],decls:18,vars:14,consts:[[3,"formGroup"],[1,"tb-form-hint","tb-primary-fill","tb-flex","no-padding-top","hint-container"],[1,"tb-flex"],["matInput","","formControlName","method","placeholder","multiply"],["formArrayName","arguments",1,"tb-form-panel","stroked","arguments-container"],[1,"fields-label"],["class","flex flex-1 items-center justify-center gap-2.5",3,"formGroup",4,"ngFor","ngForOf"],["mat-raised-button","",1,"self-start",3,"click"],[1,"flex","flex-1","items-center","justify-center","gap-2.5",3,"formGroup"],[1,"tb-form-row","column-xs","type-container","items-center","justify-between"],["translate","",1,"tb-required"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap","fill-width"],["formControlName","type"],[1,"tb-flex","align-center"],[1,"tb-mat-18",3,"svgIcon"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-row","column-xs","value-container","item-center","justify-between"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","tb-suffix-absolute","flex"],[3,"ngSwitch"],["matInput","","required","","formControlName","stringValue",3,"placeholder",4,"ngSwitchCase"],["matInput","","required","","formControlName","integerValue","type","number",3,"placeholder",4,"ngSwitchCase"],["matInput","","required","","formControlName","doubleValue","type","number",3,"placeholder",4,"ngSwitchCase"],["formControlName","booleanValue",4,"ngSwitchCase"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["mat-icon-button","","matTooltipPosition","above",1,"tb-box-button",3,"click","matTooltip"],[3,"value"],[1,"tb-mat-20",3,"svgIcon"],["matInput","","required","","formControlName","stringValue",3,"placeholder"],["matInput","","required","","formControlName","integerValue","type","number",3,"placeholder"],["matInput","","required","","formControlName","doubleValue","type","number",3,"placeholder"],["formControlName","booleanValue"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementContainerStart(0,0),t.ɵɵelementStart(1,"div",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",2)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",3),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"fieldset",4)(10,"strong")(11,"span",5),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(14,Vi,28,15,"div",6),t.ɵɵelementStart(15,"button",7),t.ɵɵlistener("click",(function(){return n.addArgument()})),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementContainerEnd()),2&e&&(t.ɵɵproperty("formGroup",n.rpcParametersFormGroup),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,6,"gateway.rpc.hint.opc-method")," "),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,8,"gateway.rpc.method")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,10,"gateway.rpc.arguments")),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.rpcParametersFormGroup.get("arguments").controls),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(17,12,"gateway.rpc.add-argument")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Gi,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%] .arguments-container[_ngcontent-%COMP%]{margin-bottom:10px}[_nghost-%COMP%] .type-container[_ngcontent-%COMP%]{width:40%}[_nghost-%COMP%] .value-container[_ngcontent-%COMP%]{width:50%}[_nghost-%COMP%] .hint-container[_ngcontent-%COMP%]{margin-bottom:12px}'],changeDetection:o.OnPush})}}function Ai(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",8),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SocketMethodProcessingsTranslates.get(e))," ")}}function ji(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",8),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",e.toUpperCase()," ")}}class Li extends Gr{constructor(){super(...arguments),this.SocketMethodProcessingsTranslates=Sn,this.socketMethodProcessings=Object.values(Cn),this.socketEncoding=Object.values(Xe)}initFormGroup(){return this.fb.group({methodRPC:[null,[ne.required,ne.pattern($e)]],methodProcessing:[Cn.WRITE,[ne.required]],encoding:[kn.UTF_8,[ne.required,ne.pattern($e)]],withResponse:[!1,[]]})}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Li)))(n||Li)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:Li,selectors:[["tb-gateway-socket-rpc-parameters"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Li)),multi:!0},{provide:re,useExisting:i((()=>Li)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:21,vars:15,consts:[[3,"formGroup"],[1,"w-full"],["matInput","","formControlName","methodRPC","placeholder","rpcMethod1"],[1,"mat-block"],["formControlName","methodProcessing"],[3,"value",4,"ngFor","ngForOf"],["formControlName","encoding"],["formControlName","withResponse",1,"mat-slide","margin"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementContainerStart(0,0),t.ɵɵelementStart(1,"mat-form-field",1)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",2),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-form-field",3)(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-select",4),t.ɵɵtemplate(11,Ai,3,4,"mat-option",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"mat-form-field",3)(13,"mat-label"),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"mat-select",6),t.ɵɵtemplate(17,ji,2,2,"mat-option",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"mat-slide-toggle",7),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd()),2&e&&(t.ɵɵproperty("formGroup",n.formGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,7,"gateway.rpc.methodRPC")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,9,"gateway.rpc.methodProcessing")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.socketMethodProcessings),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,11,"gateway.encoding")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.socketEncoding),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(20,13,"gateway.rpc.withResponse")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Li,[V,b]),encapsulation:2,changeDetection:o.OnPush})}}const Ui=e=>({border:e}),$i=e=>({type:e});function zi(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",15),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Ki(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.timeout-min")," "))}function Hi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"mat-form-field")(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",9),t.ɵɵtemplate(6,zi,2,2,"mat-option",10),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",11)(8,"mat-label"),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",12),t.ɵɵtemplate(12,Ki,3,3,"mat-error",13),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"button",14),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.sendCommand())})),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,6,"gateway.statistics.command")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.RPCCommands),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,8,"gateway.statistics.timeout")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.commandForm.get("time").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("disabled",e.commandForm.invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,10,"gateway.rpc-command-send")," ")}}function Wi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-gateway-service-rpc-connector",17),t.ɵɵlistener("sendCommand",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.sendCommand())}))("saveTemplate",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.saveTemplate())})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("connectorType",e.connectorType)}}function Qi(e,n){1&e&&t.ɵɵelement(0,"tb-gateway-modbus-rpc-parameters",24)}function Ji(e,n){1&e&&t.ɵɵelement(0,"tb-gateway-mqtt-rpc-parameters",24)}function Yi(e,n){1&e&&t.ɵɵelement(0,"tb-gateway-opc-rpc-parameters",24)}function Xi(e,n){1&e&&t.ɵɵelement(0,"tb-gateway-socket-rpc-parameters",24)}function Zi(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",18)(1,"div",19),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(4,20),t.ɵɵtemplate(5,Qi,1,0,"tb-gateway-modbus-rpc-parameters",21)(6,Ji,1,0,"tb-gateway-mqtt-rpc-parameters",21)(7,Yi,1,0,"tb-gateway-opc-rpc-parameters",21)(8,Xi,1,0,"tb-gateway-socket-rpc-parameters",21),t.ɵɵelementContainerEnd(),t.ɵɵelementStart(9,"div",22)(10,"button",23),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.saveTemplate())})),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"button",14),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.sendCommand())})),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind2(3,10,"gateway.rpc.title",t.ɵɵpureFunction1(17,$i,e.gatewayConnectorDefaultTypesTranslates.get(e.connectorType)))),t.ɵɵadvance(2),t.ɵɵproperty("ngSwitch",e.connectorType),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.MODBUS),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.MQTT),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.OPCUA),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.SOCKET),t.ɵɵadvance(2),t.ɵɵproperty("disabled",e.commandForm.get("params").invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,13,"gateway.rpc-command-save-template")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",e.commandForm.get("params").invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,15,"gateway.rpc-command-send")," ")}}function eo(e,n){if(1&e&&t.ɵɵtemplate(0,Wi,1,1,"tb-gateway-service-rpc-connector",16)(1,Zi,16,19,"ng-template",null,1,t.ɵɵtemplateRefExtractor),2&e){const e=t.ɵɵreference(2),n=t.ɵɵnextContext();t.ɵɵproperty("ngIf",!n.typesWithUpdatedParams.has(n.connectorType))("ngIfElse",e)}}function to(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",25)(1,"mat-icon",26),t.ɵɵtext(2,"schedule"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"span"),t.ɵɵtext(4),t.ɵɵpipe(5,"date"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind2(5,1,e.resultTime,"yyyy/MM/dd HH:mm:ss"))}}function no(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-gateway-service-rpc-connector-templates",27),t.ɵɵlistener("useTemplate",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.useTemplate(n))})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("rpcTemplates",e.templates)("ctx",e.ctx)("connectorType",e.connectorType)}}class ao{constructor(e,t,n,a,r){this.fb=e,this.dialog=t,this.utils=n,this.cd=a,this.attributeService=r,this.contentTypes=B,this.RPCCommands=["Ping","Stats","Devices","Update","Version","Restart","Reboot"],this.templates=[],this.ConnectorType=Je,this.gatewayConnectorDefaultTypesTranslates=Ye,this.typesWithUpdatedParams=new Set([Je.MQTT,Je.OPCUA,Je.MODBUS,Je.SOCKET]),this.subscriptionOptions={callbacks:{onDataUpdated:()=>this.ctx.ngZone.run((()=>{this.updateTemplates()})),onDataUpdateError:(e,t)=>this.ctx.ngZone.run((()=>{this.onDataUpdateError(t)})),dataLoading:()=>{}}},this.commandForm=this.fb.group({command:[null,[ne.required]],time:[60,[ne.required,ne.min(1)]],params:["{}",[He]],result:[null]})}ngOnInit(){if(this.isConnector=this.ctx.settings.isConnector,this.isConnector){this.connectorType=this.ctx.stateController.getStateParams().connector_rpc.value.type;const e=[{type:S.entity,entityType:E.DEVICE,entityId:this.ctx.defaultSubscription.targetDeviceId,entityName:"Connector",attributes:[{name:`${this.connectorType}_template`}]}];this.ctx.subscriptionApi.createSubscriptionFromInfo(T.latest,e,this.subscriptionOptions,!1,!0).subscribe((e=>{this.subscription=e}))}else this.commandForm.get("command").setValue(this.RPCCommands[0])}sendCommand(e){this.resultTime=null;const t=e||this.commandForm.value,n=this.isConnector?`${this.connectorType}_`:"gateway_",a=this.isConnector?this.getCommandFromParamsByType(t.params):t.command.toLowerCase(),r=this.ctx.stateController.getStateParams().connector_rpc?.value.configurationJson.id,i=r?{...t.params,connectorId:r}:t.params;this.ctx.controlApi.sendTwoWayCommand(n+a,i,t.time).subscribe({next:e=>{this.resultTime=(new Date).getTime(),this.commandForm.get("result").setValue(JSON.stringify(e))},error:e=>{this.resultTime=(new Date).getTime(),console.error(e),this.commandForm.get("result").setValue(JSON.stringify(e.error))}})}getCommandFromParamsByType(e){switch(this.connectorType){case Je.MQTT:case Je.FTP:case Je.SNMP:case Je.REST:case Je.REQUEST:return e.methodFilter;case Je.MODBUS:return e.tag;case Je.BACNET:case Je.CAN:case Je.OPCUA:return e.method;case Je.BLE:case Je.OCPP:case Je.SOCKET:case Je.XMPP:return e.methodRPC;default:return e.command}}saveTemplate(){this.dialog.open(Jn,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{config:this.commandForm.value.params,templates:this.templates}}).afterClosed().subscribe((e=>{if(e){const t={name:e,config:this.commandForm.value.params},n=this.templates,a=n.findIndex((e=>e.name==t.name));a>-1&&n.splice(a,1),n.push(t);const r=`${this.connectorType}_template`;this.attributeService.saveEntityAttributes({id:this.ctx.defaultSubscription.targetDeviceId,entityType:E.DEVICE},C.SERVER_SCOPE,[{key:r,value:n}]).subscribe((()=>{this.cd.detectChanges()}))}}))}useTemplate(e){this.commandForm.get("params").patchValue(e.config)}updateTemplates(){this.templates=this.subscription.data[0].data[0][1].length?JSON.parse(this.subscription.data[0].data[0][1]):[],this.cd.detectChanges()}onDataUpdateError(e){const t=this.utils.parseException(e);let n=t.name;t.message&&(n+=": "+t.message),console.error(n)}static{this.ɵfac=function(e){return new(e||ao)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(pe.MatDialog),t.ɵɵdirectiveInject(A.UtilsService),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(A.AttributeService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ao,selectors:[["tb-gateway-service-rpc"]],inputs:{ctx:"ctx",dialogRef:"dialogRef"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:12,vars:14,consts:[["connectorForm",""],["updatedParameters",""],[1,"flex","flex-1","flex-col"],[1,"command-form","flex","flex-row","gap-2.5","lt-sm:flex-col",3,"formGroup"],[4,"ngIf","ngIfElse"],[1,"result-block",3,"formGroup"],["class","result-time flex flex-1 flex-row items-center justify-center",4,"ngIf"],["readonly","true","formControlName","result",3,"contentType"],["class","border",3,"rpcTemplates","ctx","connectorType","useTemplate",4,"ngIf"],["formControlName","command"],[3,"value",4,"ngFor","ngForOf"],[1,"flex-1"],["matInput","","formControlName","time","type","number","min","1"],[4,"ngIf"],["mat-raised-button","","color","primary",3,"click","disabled"],[3,"value"],["formControlName","params",3,"connectorType","sendCommand","saveTemplate",4,"ngIf","ngIfElse"],["formControlName","params",3,"sendCommand","saveTemplate","connectorType"],[1,"rpc-parameters","flex","flex-col"],[1,"mat-subtitle-1","tb-form-panel-title"],[3,"ngSwitch"],["formControlName","params",4,"ngSwitchCase"],[1,"fex-row","template-actions","flex","flex-1","items-center","justify-end","gap-2.5"],["mat-raised-button","",3,"click","disabled"],["formControlName","params"],[1,"result-time","flex","flex-1","flex-row","items-center","justify-center"],[1,"material-icons"],[1,"border",3,"useTemplate","rpcTemplates","ctx","connectorType"]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",2)(1,"div",3),t.ɵɵtemplate(2,Hi,16,12,"ng-container",4)(3,eo,3,2,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"section",5)(6,"span"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵtemplate(9,to,6,4,"div",6),t.ɵɵelementEnd(),t.ɵɵelement(10,"tb-json-content",7),t.ɵɵelementEnd()(),t.ɵɵtemplate(11,no,1,3,"tb-gateway-service-rpc-connector-templates",8)),2&e){const e=t.ɵɵreference(4);t.ɵɵclassMap(t.ɵɵpureFunction1(12,Ui,n.isConnector)),t.ɵɵadvance(),t.ɵɵproperty("formGroup",n.commandForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.isConnector)("ngIfElse",e),t.ɵɵadvance(3),t.ɵɵproperty("formGroup",n.commandForm),t.ɵɵadvance(2),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(8,10,"gateway.rpc-command-result")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.resultTime),t.ɵɵadvance(),t.ɵɵproperty("contentType",n.contentTypes.JSON),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.isConnector)}},dependencies:t.ɵɵgetComponentDepsFactory(ao,[V,b,Ci,Mi,Oi,Gi,Hn,Li]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;overflow:auto;display:flex;flex-direction:row;padding:0 5px}[_nghost-%COMP%] > *[_ngcontent-%COMP%]{height:100%;overflow:auto}[_nghost-%COMP%] > tb-gateway-service-rpc-connector-templates[_ngcontent-%COMP%]:last-child{margin-left:10px}[_nghost-%COMP%] tb-gateway-service-rpc-connector-templates[_ngcontent-%COMP%]{flex:1 1 30%;max-width:30%}[_nghost-%COMP%] .command-form[_ngcontent-%COMP%]{flex-wrap:nowrap;padding:0 5px 5px}[_nghost-%COMP%] .command-form[_ngcontent-%COMP%] > button[_ngcontent-%COMP%]{margin-top:10px}[_nghost-%COMP%] .rpc-parameters[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .result-block[_ngcontent-%COMP%]{padding:0 5px;display:flex;flex-direction:column;flex:1}[_nghost-%COMP%] .result-block[_ngcontent-%COMP%] > span[_ngcontent-%COMP%]{font-weight:600;position:relative;font-size:14px;margin-bottom:10px}[_nghost-%COMP%] .result-block[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] .result-time[_ngcontent-%COMP%]{font-weight:400;font-size:14px;line-height:32px;position:absolute;left:0;top:25px;z-index:5;color:#0000008a}[_nghost-%COMP%] .result-block[_ngcontent-%COMP%] > span[_ngcontent-%COMP%] .result-time[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{padding-left:10px}[_nghost-%COMP%] .result-block[_ngcontent-%COMP%] tb-json-content[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] .border[_ngcontent-%COMP%]{padding:16px;box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f;border:solid 1px #e0e0e0;border-radius:4px}']})}}function ro(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.configuration-delete-dialog-input-required")," "))}e("GatewayServiceRPCComponent",ao);class io extends I{constructor(e,t,n,a,r){super(e,t,a),this.store=e,this.router=t,this.data=n,this.dialogRef=a,this.fb=r,this.gatewayName=this.data.gatewayName,this.gatewayControl=this.fb.control("")}close(){this.dialogRef.close()}turnOff(){this.dialogRef.close(!0)}static{this.ɵfac=function(e){return new(e||io)(t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(de.Router),t.ɵɵdirectiveInject(se),t.ɵɵdirectiveInject(pe.MatDialogRef),t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:io,selectors:[["tb-gateway-remote-configuration-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:24,vars:14,consts:[["color","warn"],["translate",""],[1,"flex-1"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content","",1,"mat-content","flex-col",2,"max-width","600px"],[3,"innerHTML"],[1,"mat-block","tb-value-type",2,"flex-grow","0"],["matInput","","required","",3,"formControl"],[4,"ngIf"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","warn","type","button","cdkFocusInitial","",3,"click"],["mat-button","","color","warn","type","button",3,"click","disabled"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-toolbar",0)(1,"mat-icon"),t.ɵɵtext(2,"warning"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"h2",1),t.ɵɵtext(4,"gateway.configuration-delete-dialog-header"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",2),t.ɵɵelementStart(6,"button",3),t.ɵɵlistener("click",(function(){return n.close()})),t.ɵɵelementStart(7,"mat-icon",4),t.ɵɵtext(8,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(9,"div",5),t.ɵɵelement(10,"span",6),t.ɵɵpipe(11,"translate"),t.ɵɵelementStart(12,"mat-form-field",7)(13,"mat-label",1),t.ɵɵtext(14,"gateway.configuration-delete-dialog-input"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",8),t.ɵɵtemplate(16,ro,3,3,"mat-error",9),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"div",10)(18,"button",11),t.ɵɵlistener("click",(function(){return n.close()})),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"button",12),t.ɵɵlistener("click",(function(){return n.turnOff()})),t.ɵɵtext(22),t.ɵɵpipe(23,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(10),t.ɵɵpropertyInterpolate2("innerHTML","",t.ɵɵpipeBind1(11,8,"gateway.configuration-delete-dialog-body")," ",n.gatewayName,"",t.ɵɵsanitizeHtml),t.ɵɵadvance(5),t.ɵɵproperty("formControl",n.gatewayControl),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayControl.hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(20,10,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.gatewayControl.value!==n.gatewayName),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(23,12,"gateway.configuration-delete-dialog-confirm")," "))},dependencies:t.ɵɵgetComponentDepsFactory(io,[V,b]),encapsulation:2})}}var oo;e("GatewayRemoteConfigurationDialogComponent",io),function(e){e.tls="tls",e.accessToken="accessToken"}(oo||(oo={}));const so="configuration_drafts",po="RemoteLoggingLevel",lo=new Map([[oo.tls,"gateway.security-types.tls"],[oo.accessToken,"gateway.security-types.access-token"]]);var co,mo;!function(e){e.none="NONE",e.critical="CRITICAL",e.error="ERROR",e.warning="WARNING",e.info="INFO",e.debug="DEBUG"}(co||(co={})),function(e){e.memory="memory",e.file="file"}(mo||(mo={}));const uo=new Map([[mo.memory,"gateway.storage-types.memory-storage"],[mo.file,"gateway.storage-types.file-storage"]]);var go;!function(e){e.mqtt="MQTT",e.modbus="Modbus",e.opcua="OPC-UA",e.ble="BLE",e.request="Request",e.can="CAN",e.bacnet="BACnet",e.custom="Custom"}(go||(go={}));const yo={config:{},name:"",configType:null,enabled:!1};function ho(e){return JSON.stringify(e.value)===JSON.stringify({})?{validJSON:!0}:null}function fo(e){return e.replace("_","").replace("-","").replace(/^\s+|\s+/g,"").toLowerCase()+".json"}function vo(e,t){return'[loggers]}}keys=root, service, connector, converter, tb_connection, storage, extension}}[handlers]}}keys=consoleHandler, serviceHandler, connectorHandler, converterHandler, tb_connectionHandler, storageHandler, extensionHandler}}[formatters]}}keys=LogFormatter}}[logger_root]}}level=ERROR}}handlers=consoleHandler}}[logger_connector]}}level={ERROR}}}handlers=connectorHandler}}formatter=LogFormatter}}qualname=connector}}[logger_storage]}}level={ERROR}}}handlers=storageHandler}}formatter=LogFormatter}}qualname=storage}}[logger_tb_connection]}}level={ERROR}}}handlers=tb_connectionHandler}}formatter=LogFormatter}}qualname=tb_connection}}[logger_service]}}level={ERROR}}}handlers=serviceHandler}}formatter=LogFormatter}}qualname=service}}[logger_converter]}}level={ERROR}}}handlers=converterHandler}}formatter=LogFormatter}}qualname=converter}}[logger_extension]}}level={ERROR}}}handlers=connectorHandler}}formatter=LogFormatter}}qualname=extension}}[handler_consoleHandler]}}class=StreamHandler}}level={ERROR}}}formatter=LogFormatter}}args=(sys.stdout,)}}[handler_connectorHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}connector.log", "d", 1, 7,)}}[handler_storageHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}storage.log", "d", 1, 7,)}}[handler_serviceHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}service.log", "d", 1, 7,)}}[handler_converterHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}converter.log", "d", 1, 3,)}}[handler_extensionHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}extension.log", "d", 1, 3,)}}[handler_tb_connectionHandler]}}level={ERROR}}}class=logging.handlers.TimedRotatingFileHandler}}formatter=LogFormatter}}args=("{./logs/}tb_connection.log", "d", 1, 3,)}}[formatter_LogFormatter]}}format="%(asctime)s - %(levelname)s - [%(filename)s] - %(module)s - %(lineno)d - %(message)s" }}datefmt="%Y-%m-%d %H:%M:%S"'.replace(/{ERROR}/g,e).replace(/{.\/logs\/}/g,t)}function bo(e){return{id:e,entityType:E.DEVICE}}function xo(e){const t={};return Object.prototype.hasOwnProperty.call(e,"thingsboard")&&(t.host=e.thingsboard.host,t.port=e.thingsboard.port,t.remoteConfiguration=e.thingsboard.remoteConfiguration,Object.prototype.hasOwnProperty.call(e.thingsboard.security,oo.accessToken)?(t.securityType=oo.accessToken,t.accessToken=e.thingsboard.security.accessToken):(t.securityType=oo.tls,t.caCertPath=e.thingsboard.security.caCert,t.privateKeyPath=e.thingsboard.security.privateKey,t.certPath=e.thingsboard.security.cert)),Object.prototype.hasOwnProperty.call(e,"storage")&&Object.prototype.hasOwnProperty.call(e.storage,"type")&&(e.storage.type===mo.memory?(t.storageType=mo.memory,t.readRecordsCount=e.storage.read_records_count,t.maxRecordsCount=e.storage.max_records_count):e.storage.type===mo.file&&(t.storageType=mo.file,t.dataFolderPath=e.storage.data_folder_path,t.maxFilesCount=e.storage.max_file_count,t.readRecordsCount=e.storage.read_records_count,t.maxRecordsCount=e.storage.max_records_count)),t}function wo(e){const t={};for(const n of e)n.enabled||(t[n.name]={connector:n.configType,config:n.config});return t}function Co(e){const t={thingsboard:So(e)};return function(e,t){for(const n of t)if(n.enabled){const t=n.configType;Array.isArray(e[t])||(e[t]=[]);const a={name:n.name,config:n.config};e[t].push(a)}}(t,e.connectors),t}function So(e){let t;t=e.securityType===oo.accessToken?{accessToken:e.accessToken}:{caCert:e.caCertPath,privateKey:e.privateKeyPath,cert:e.certPath};const n={host:e.host,remoteConfiguration:e.remoteConfiguration,port:e.port,security:t};let a;a=e.storageType===mo.memory?{type:mo.memory,read_records_count:e.readRecordsCount,max_records_count:e.maxRecordsCount}:{type:mo.file,data_folder_path:e.dataFolderPath,max_file_count:e.maxFilesCount,max_read_records_count:e.readRecordsCount,max_records_per_file:e.maxRecordsCount};const r=[];for(const t of e.connectors)if(t.enabled){const e={configuration:fo(t.name),name:t.name,type:t.configType};r.push(e)}return{thingsboard:n,connectors:r,storage:a,logs:window.btoa(vo(e.remoteLoggingLevel,e.remoteLoggingPathToLogs))}}const Eo=["formContainer"],To=(e,t,n)=>({"gap-1.25":e,"flex-row":t,"flex-col":n}),Io=(e,t,n)=>({"gap-1.25":e,"flex-row justify-end item-center":t,"flex-col justify-evenly item-center":n});function ko(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",28),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.key),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,e.value.toString())," ")}}function Mo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.thingsboard-host-required "),t.ɵɵelementEnd())}function Po(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.thingsboard-port-required "),t.ɵɵelementEnd())}function Fo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.thingsboard-port-min "),t.ɵɵelementEnd())}function Oo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.thingsboard-port-max "),t.ɵɵelementEnd())}function qo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.thingsboard-port-pattern "),t.ɵɵelementEnd())}function Bo(e,n){1&e&&(t.ɵɵelementStart(0,"div",16)(1,"mat-form-field")(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",30),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-form-field")(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",31),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field")(12,"mat-label"),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",32),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.tls-path-ca-certificate")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,5,"gateway.tls-path-private-key")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,7,"gateway.tls-path-client-certificate")))}function Ro(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",28),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function No(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.path-logs-required "),t.ɵɵelementEnd())}function _o(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",28),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.key),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,e.value.toString())," ")}}function Do(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-pack-size-required "),t.ɵɵelementEnd())}function Vo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-pack-size-min "),t.ɵɵelementEnd())}function Go(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-pack-size-pattern "),t.ɵɵelementEnd())}function Ao(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-records-required "),t.ɵɵelementEnd())}function jo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-records-min "),t.ɵɵelementEnd())}function Lo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-records-pattern "),t.ɵɵelementEnd())}function Uo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-files-required "),t.ɵɵelementEnd())}function $o(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-files-min "),t.ɵɵelementEnd())}function zo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-max-files-pattern "),t.ɵɵelementEnd())}function Ko(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.storage-path-required "),t.ɵɵelementEnd())}function Ho(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",5)(1,"mat-form-field",8)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",33),t.ɵɵtemplate(6,Uo,2,0,"mat-error",10)(7,$o,2,0,"mat-error",10)(8,zo,2,0,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",8)(10,"mat-label"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(13,"input",34),t.ɵɵtemplate(14,Ko,2,0,"mat-error",10),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵclassMap(t.ɵɵpureFunction3(12,To,e.layoutGap,e.alignment,!e.alignment)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,8,"gateway.storage-max-files")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.gatewayConfigurationGroup.get("maxFilesCount").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.gatewayConfigurationGroup.get("maxFilesCount").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.gatewayConfigurationGroup.get("maxFilesCount").hasError("pattern")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(12,10,"gateway.storage-path")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.gatewayConfigurationGroup.get("dataFolderPath").hasError("required"))}}function Wo(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",28),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Qo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.connector-type-required "),t.ɵɵelementEnd())}function Jo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",29),t.ɵɵtext(1," gateway.connector-name-required "),t.ɵɵelementEnd())}function Yo(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section",35)(1,"div",36)(2,"div",37),t.ɵɵelement(3,"mat-slide-toggle",38),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",39)(5,"mat-form-field",8)(6,"mat-label"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-select",40),t.ɵɵlistener("selectionChange",(function(){const n=t.ɵɵrestoreView(e).$implicit,a=t.ɵɵnextContext();return t.ɵɵresetView(a.changeConnectorType(n))})),t.ɵɵtemplate(10,Wo,2,2,"mat-option",7),t.ɵɵelementEnd(),t.ɵɵtemplate(11,Qo,2,0,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",8)(13,"mat-label"),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"input",41),t.ɵɵlistener("blur",(function(){const n=t.ɵɵrestoreView(e),a=n.$implicit,r=n.index,i=t.ɵɵnextContext();return t.ɵɵresetView(i.changeConnectorName(a,r))})),t.ɵɵelementEnd(),t.ɵɵtemplate(17,Jo,2,0,"mat-error",10),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",42)(19,"button",43),t.ɵɵpipe(20,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e),r=a.$implicit,i=a.index,o=t.ɵɵnextContext();return t.ɵɵresetView(o.openConfigDialog(n,i,r.get("config").value,r.get("name").value))})),t.ɵɵelementStart(21,"mat-icon"),t.ɵɵtext(22,"more_horiz"),t.ɵɵelementEnd()(),t.ɵɵelementStart(23,"button",43),t.ɵɵpipe(24,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,a=t.ɵɵnextContext();return t.ɵɵresetView(a.removeConnector(n))})),t.ɵɵelementStart(25,"mat-icon"),t.ɵɵtext(26,"close"),t.ɵɵelementEnd()()()()()}if(2&e){const e=n.$implicit,a=n.index,r=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("formGroupName",a),t.ɵɵadvance(3),t.ɵɵclassMap(t.ɵɵpureFunction3(24,To,r.layoutGap,r.alignment,!r.alignment)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,16,"gateway.connector-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",r.connectorTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("configType").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,18,"gateway.connector-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.get("name").hasError("required")),t.ɵɵadvance(),t.ɵɵclassMap(t.ɵɵpureFunction3(28,Io,r.layoutGap,r.alignment,!r.alignment)),t.ɵɵadvance(),t.ɵɵclassProp("mat-warn",e.get("config").invalid),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(20,20,"gateway.update-config")),t.ɵɵproperty("disabled",r.isReadOnlyForm),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(24,22,"gateway.delete")),t.ɵɵproperty("disabled",r.isReadOnlyForm)}}function Xo(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",44),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.exportConfig())})),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,3,"gateway.download-tip")),t.ɵɵproperty("disabled",!e.gatewayConfigurationGroup.dirty||e.gatewayConfigurationGroup.invalid),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,5,"action.download")," ")}}function Zo(e,n){if(1&e&&(t.ɵɵelementStart(0,"button",45),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,3,"gateway.save-tip")),t.ɵɵproperty("disabled",!e.gatewayConfigurationGroup.dirty||e.gatewayConfigurationGroup.invalid),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,5,"action.save")," ")}}class es extends R{constructor(e,t,n,a,r,i,o,s,p,l,c){super(e),this.store=e,this.elementRef=t,this.utils=n,this.ngZone=a,this.fb=r,this.window=i,this.dialog=o,this.translate=s,this.deviceService=p,this.attributeService=l,this.importExport=c,this.alignment=!0,this.layoutGap=!0,this.securityTypes=lo,this.gatewayLogLevels=Object.keys(co).map((e=>co[e])),this.connectorTypes=Object.keys(go),this.storageTypes=uo,this.toastTargetId="gateway-configuration-widget"+this.utils.guid(),this.isReadOnlyForm=!1}get connectors(){return this.gatewayConfigurationGroup.get("connectors")}ngOnInit(){this.initWidgetSettings(this.ctx.settings),this.ctx.datasources&&this.ctx.datasources.length&&(this.deviceNameForm=this.ctx.datasources[0].name),this.buildForm(),this.ctx.updateWidgetParams(),this.formResize$=new ResizeObserver((()=>{this.resize()})),this.formResize$.observe(this.formContainerRef.nativeElement)}ngOnDestroy(){this.formResize$&&this.formResize$.disconnect(),this.subscribeGateway$.unsubscribe(),this.subscribeStorageType$.unsubscribe()}initWidgetSettings(e){let t;t=e.gatewayTitle&&e.gatewayTitle.length?this.utils.customTranslation(e.gatewayTitle,e.gatewayTitle):this.translate.instant("gateway.gateway"),this.ctx.widgetTitle=t,this.isReadOnlyForm=!!e.readOnly&&e.readOnly,this.archiveFileName=e.archiveFileName?.length?e.archiveFileName:"gatewayConfiguration",this.gatewayType=e.gatewayType?.length?e.gatewayType:"Gateway",this.gatewayNameExists=this.utils.customTranslation(e.gatewayNameExists,e.gatewayNameExists)||this.translate.instant("gateway.gateway-exists"),this.successfulSaved=this.utils.customTranslation(e.successfulSave,e.successfulSave)||this.translate.instant("gateway.gateway-saved"),this.updateWidgetDisplaying()}resize(){this.ngZone.run((()=>{this.updateWidgetDisplaying(),this.ctx.detectChanges()}))}updateWidgetDisplaying(){this.ctx.$container&&this.ctx.$container[0].offsetWidth<=425?(this.layoutGap=!1,this.alignment=!1):(this.layoutGap=!0,this.alignment=!0)}saveAttribute(e,t,n){const a=this.gatewayConfigurationGroup.get("gateway").value,r={key:e,value:t};return this.attributeService.saveEntityAttributes(bo(a),n,[r])}createConnector(e=yo){this.connectors.push(this.fb.group({enabled:[e.enabled],configType:[e.configType,[ne.required]],name:[e.name,[ne.required]],config:[e.config,[ne.nullValidator,ho]]}))}getFormField(e){return this.gatewayConfigurationGroup.get(e)}buildForm(){this.gatewayConfigurationGroup=this.fb.group({gateway:[null,[]],accessToken:[null,[ne.required]],securityType:[oo.accessToken],host:[this.window.location.hostname,[ne.required]],port:[1883,[ne.required,ne.min(1),ne.max(65535),ne.pattern(/^-?[0-9]+$/)]],remoteConfiguration:[!0],caCertPath:["/etc/thingsboard-gateway/ca.pem"],privateKeyPath:["/etc/thingsboard-gateway/privateKey.pem"],certPath:["/etc/thingsboard-gateway/certificate.pem"],remoteLoggingLevel:[co.debug],remoteLoggingPathToLogs:["./logs/",[ne.required]],storageType:[mo.memory],readRecordsCount:[100,[ne.required,ne.min(1),ne.pattern(/^-?[0-9]+$/)]],maxRecordsCount:[1e4,[ne.required,ne.min(1),ne.pattern(/^-?[0-9]+$/)]],maxFilesCount:[5,[ne.required,ne.min(1),ne.pattern(/^-?[0-9]+$/)]],dataFolderPath:["./data/",[ne.required]],connectors:this.fb.array([])}),this.isReadOnlyForm&&this.gatewayConfigurationGroup.disable({emitEvent:!1}),this.subscribeStorageType$=this.getFormField("storageType").valueChanges.subscribe((e=>{e===mo.memory?(this.getFormField("maxFilesCount").disable(),this.getFormField("dataFolderPath").disable()):(this.getFormField("maxFilesCount").enable(),this.getFormField("dataFolderPath").enable())})),this.subscribeGateway$=this.getFormField("gateway").valueChanges.subscribe((e=>{null!==e?ve([this.deviceService.getDeviceCredentials(e).pipe(we((e=>{this.getFormField("accessToken").patchValue(e.credentialsId)}))),...this.getAttributes(e)]).subscribe((()=>{this.gatewayConfigurationGroup.markAsPristine(),this.ctx.detectChanges()})):this.getFormField("accessToken").patchValue("")}))}gatewayExist(){this.ctx.showErrorToast(this.gatewayNameExists,"top","left",this.toastTargetId)}exportConfig(){const e=this.gatewayConfigurationGroup.value,t={};var n,a,r;t["tb_gateway.yaml"]=function(e){let t;t="thingsboard:\n",t+=" host: "+e.host+"\n",t+=" remoteConfiguration: "+e.remoteConfiguration+"\n",t+=" port: "+e.port+"\n",t+=" security:\n",e.securityType===oo.accessToken?t+=" access-token: "+e.accessToken+"\n":(t+=" ca_cert: "+e.caCertPath+"\n",t+=" privateKey: "+e.privateKeyPath+"\n",t+=" cert: "+e.certPath+"\n"),t+="storage:\n",e.storageType===mo.memory?(t+=" type: memory\n",t+=" read_records_count: "+e.readRecordsCount+"\n",t+=" max_records_count: "+e.maxRecordsCount+"\n"):(t+=" type: file\n",t+=" data_folder_path: "+e.dataFolderPath+"\n",t+=" max_file_count: "+e.maxFilesCount+"\n",t+=" max_read_records_count: "+e.readRecordsCount+"\n",t+=" max_records_per_file: "+e.maxRecordsCount+"\n"),t+="connectors:\n";for(const n of e.connectors)n.enabled&&(t+=" -\n",t+=" name: "+n.name+"\n",t+=" type: "+n.configType+"\n",t+=" configuration: "+fo(n.name)+"\n");return t}(e),function(e,t){for(const n of t)n.enabled&&(e[fo(n.name)]=JSON.stringify(n.config))}(t,e.connectors),n=t,a=e.remoteLoggingLevel,r=e.remoteLoggingPathToLogs,n["logs.conf"]=vo(a,r),this.importExport.exportJSZip(t,this.archiveFileName),this.saveAttribute(po,this.gatewayConfigurationGroup.value.remoteLoggingLevel.toUpperCase(),C.SHARED_SCOPE)}addNewConnector(){this.createConnector()}removeConnector(e){e>-1&&(this.connectors.removeAt(e),this.connectors.markAsDirty())}openConfigDialog(e,t,n,a){e&&(e.stopPropagation(),e.preventDefault()),this.dialog.open(Ge,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{jsonValue:n,required:!0,title:this.translate.instant("gateway.title-connectors-json",{typeName:a})}}).afterClosed().subscribe((e=>{e&&(this.connectors.at(t).get("config").patchValue(e),this.ctx.detectChanges())}))}createConnectorName(e,t,n=0){const a=n?t+n:t;return-1===e.findIndex((e=>e.name===a))?a:this.createConnectorName(e,t,++n)}validateConnectorName(e,t,n,a=0){for(let r=0;r{this.ctx.showSuccessToast(this.successfulSaved,2e3,"top","left",this.toastTargetId),this.gatewayConfigurationGroup.markAsPristine()}))}getAttributes(e){const t=[];return t.push(ve([this.getAttribute("current_configuration",C.CLIENT_SCOPE,e),this.getAttribute(so,C.SERVER_SCOPE,e)]).pipe(we((([e,t])=>{this.setFormGatewaySettings(e),this.setFormConnectorsDraft(t),this.isReadOnlyForm&&this.gatewayConfigurationGroup.disable({emitEvent:!1})})))),t.push(this.getAttribute(po,C.SHARED_SCOPE,e).pipe(we((e=>this.processLoggingLevel(e))))),t}getAttribute(e,t,n){return this.attributeService.getEntityAttributes(bo(n),t,[e])}setFormGatewaySettings(e){if(this.connectors.clear(),e.length>0){const t=JSON.parse(window.atob(e[0].value));for(const e of Object.keys(t)){const n=t[e];if("thingsboard"===e)null!==n&&Object.keys(n).length>0&&this.gatewayConfigurationGroup.patchValue(xo(n));else for(const t of Object.keys(n)){let a="No name";Object.prototype.hasOwnProperty.call(n[t],"name")&&(a=n[t].name);const r={enabled:!0,configType:e,config:n[t].config,name:a};this.createConnector(r)}}}}setFormConnectorsDraft(e){if(e.length>0){const t=JSON.parse(window.atob(e[0].value));for(const e of Object.keys(t)){const n={enabled:!1,configType:t[e].connector,config:t[e].config,name:e};this.createConnector(n)}}}processLoggingLevel(e){let t=co.debug;e.length>0&&co[e[0].value.toLowerCase()]&&(t=co[e[0].value.toLowerCase()]),this.getFormField("remoteLoggingLevel").patchValue(t)}static{this.ɵfac=function(e){return new(e||es)(t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(t.ElementRef),t.ɵɵdirectiveInject(A.UtilsService),t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(te.UntypedFormBuilder),t.ɵɵdirectiveInject(z),t.ɵɵdirectiveInject(pe.MatDialog),t.ɵɵdirectiveInject(Ne.TranslateService),t.ɵɵdirectiveInject(A.DeviceService),t.ɵɵdirectiveInject(A.AttributeService),t.ɵɵdirectiveInject(Ae.ImportExportService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:es,selectors:[["tb-gateway-form"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(Eo,7),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.formContainerRef=e.first)}},inputs:{ctx:"ctx",isStateForm:"isStateForm"},standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:104,vars:104,consts:[["formContainer",""],["tb-toast","",1,"gateway-form",3,"ngSubmit","formGroup","toastTarget"],["multi","true",1,"mat-body-2"],[1,"tb-panel-title"],["formControlName","gateway","required","",3,"gatewayNameExist","deviceName","isStateForm","newGatewayType"],[1,"flex"],["formControlName","securityType"],[3,"value",4,"ngFor","ngForOf"],[1,"flex-1"],["matInput","","type","text","formControlName","host"],["translate","",4,"ngIf"],["matInput","","type","number","formControlName","port"],["class","flex flex-col",4,"ngIf"],["formControlName","remoteConfiguration"],["formControlName","remoteLoggingLevel"],["matInput","","type","text","formControlName","remoteLoggingPathToLogs"],[1,"flex","flex-col"],["formControlName","storageType"],["matInput","","type","number","formControlName","readRecordsCount"],["matInput","","type","number","formControlName","maxRecordsCount"],["class","flex",3,"class",4,"ngIf"],[1,"gateway-config","flex","flex-col"],["formArrayName","connectors",4,"ngFor","ngForOf"],[1,"no-data-found","items-center","justify-center"],["mat-raised-button","","type","button","matTooltipPosition","above",3,"click","matTooltip"],[1,"form-action-buttons","flex","flex-row","items-center","justify-end"],["mat-raised-button","","color","primary","type","button",3,"disabled","matTooltip","click",4,"ngIf"],["mat-raised-button","","color","primary","type","submit",3,"disabled","matTooltip",4,"ngIf"],[3,"value"],["translate",""],["matInput","","type","text","formControlName","caCertPath"],["matInput","","type","text","formControlName","privateKeyPath"],["matInput","","type","text","formControlName","certPath"],["matInput","","type","number","formControlName","maxFilesCount"],["matInput","","type","text","formControlName","dataFolderPath"],["formArrayName","connectors"],[1,"flex","flex-row","items-stretch","justify-between","gap-2",3,"formGroupName"],[1,"flex","flex-col","justify-center"],["formControlName","enabled"],[1,"flex-full","flex"],["formControlName","configType",3,"selectionChange"],["matInput","","type","text","formControlName","name",3,"blur"],[1,"action-buttons","flex"],["mat-icon-button","","matTooltipPosition","above",3,"click","disabled","matTooltip"],["mat-raised-button","","color","primary","type","button",3,"click","disabled","matTooltip"],["mat-raised-button","","color","primary","type","submit",3,"disabled","matTooltip"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"form",1,0),t.ɵɵlistener("ngSubmit",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.save())})),t.ɵɵelementStart(2,"mat-accordion",2)(3,"mat-expansion-panel")(4,"mat-expansion-panel-header")(5,"mat-panel-title")(6,"div",3),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"uppercase"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"tb-entity-gateway-select",4),t.ɵɵlistener("gatewayNameExist",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.gatewayExist())})),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field",5)(12,"mat-label"),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"mat-select",6),t.ɵɵtemplate(16,ko,3,4,"mat-option",7),t.ɵɵpipe(17,"keyvalue"),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",5)(19,"mat-form-field",8)(20,"mat-label"),t.ɵɵtext(21),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(23,"input",9),t.ɵɵtemplate(24,Mo,2,0,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-form-field",8)(26,"mat-label"),t.ɵɵtext(27),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(29,"input",11),t.ɵɵtemplate(30,Po,2,0,"mat-error",10)(31,Fo,2,0,"mat-error",10)(32,Oo,2,0,"mat-error",10)(33,qo,2,0,"mat-error",10),t.ɵɵelementEnd()(),t.ɵɵtemplate(34,Bo,16,9,"div",12),t.ɵɵelementStart(35,"mat-checkbox",13),t.ɵɵtext(36),t.ɵɵpipe(37,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"div",5)(39,"mat-form-field",8)(40,"mat-label"),t.ɵɵtext(41),t.ɵɵpipe(42,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(43,"mat-select",14),t.ɵɵtemplate(44,Ro,2,2,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelementStart(45,"mat-form-field",8)(46,"mat-label"),t.ɵɵtext(47),t.ɵɵpipe(48,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(49,"input",15),t.ɵɵtemplate(50,No,2,0,"mat-error",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(51,"mat-expansion-panel")(52,"mat-expansion-panel-header")(53,"mat-panel-title")(54,"div",3),t.ɵɵtext(55),t.ɵɵpipe(56,"translate"),t.ɵɵpipe(57,"uppercase"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(58,"div",16)(59,"mat-form-field")(60,"mat-label"),t.ɵɵtext(61),t.ɵɵpipe(62,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(63,"mat-select",17),t.ɵɵtemplate(64,_o,3,4,"mat-option",7),t.ɵɵpipe(65,"keyvalue"),t.ɵɵelementEnd()(),t.ɵɵelementStart(66,"div",5)(67,"mat-form-field",8)(68,"mat-label"),t.ɵɵtext(69),t.ɵɵpipe(70,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(71,"input",18),t.ɵɵtemplate(72,Do,2,0,"mat-error",10)(73,Vo,2,0,"mat-error",10)(74,Go,2,0,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(75,"mat-form-field",8)(76,"mat-label"),t.ɵɵtext(77),t.ɵɵpipe(78,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(79,"input",19),t.ɵɵtemplate(80,Ao,2,0,"mat-error",10)(81,jo,2,0,"mat-error",10)(82,Lo,2,0,"mat-error",10),t.ɵɵelementEnd()(),t.ɵɵtemplate(83,Ho,15,16,"div",20),t.ɵɵelementEnd()(),t.ɵɵelementStart(84,"mat-expansion-panel")(85,"mat-expansion-panel-header")(86,"mat-panel-title")(87,"div",3),t.ɵɵtext(88),t.ɵɵpipe(89,"translate"),t.ɵɵpipe(90,"uppercase"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(91,"div",21),t.ɵɵtemplate(92,Yo,27,32,"section",22),t.ɵɵelementStart(93,"span",23),t.ɵɵtext(94),t.ɵɵpipe(95,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(96,"div")(97,"button",24),t.ɵɵpipe(98,"translate"),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addNewConnector())})),t.ɵɵtext(99),t.ɵɵpipe(100,"translate"),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(101,"section",25),t.ɵɵtemplate(102,Xo,4,7,"button",26)(103,Zo,4,7,"button",27),t.ɵɵelementEnd()()}2&e&&(t.ɵɵpropertyInterpolate("toastTarget",n.toastTargetId),t.ɵɵproperty("formGroup",n.gatewayConfigurationGroup),t.ɵɵadvance(7),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,54,t.ɵɵpipeBind1(8,52,"gateway.thingsboard"))),t.ɵɵadvance(3),t.ɵɵproperty("deviceName",n.deviceNameForm)("isStateForm",n.isStateForm)("newGatewayType",n.gatewayType),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,56,"gateway.security-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(17,58,n.securityTypes)),t.ɵɵadvance(2),t.ɵɵclassMap(t.ɵɵpureFunction3(92,To,n.layoutGap,n.alignment,!n.alignment)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(22,60,"gateway.thingsboard-host")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("host").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(28,62,"gateway.thingsboard-port")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("port").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("port").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("port").hasError("max")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("port").hasError("pattern")),t.ɵɵadvance(),t.ɵɵproperty("ngIf","tls"===n.gatewayConfigurationGroup.get("securityType").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(37,64,"gateway.remote")),t.ɵɵadvance(2),t.ɵɵclassMap(t.ɵɵpureFunction3(96,To,n.layoutGap,n.alignment,!n.alignment)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(42,66,"gateway.remote-logging-level")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.gatewayLogLevels),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(48,68,"gateway.path-logs")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("remoteLoggingPathToLogs").hasError("required")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(57,72,t.ɵɵpipeBind1(56,70,"gateway.storage"))),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(62,74,"gateway.storage-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(65,76,n.storageTypes)),t.ɵɵadvance(2),t.ɵɵclassMap(t.ɵɵpureFunction3(100,To,n.layoutGap,n.alignment,!n.alignment)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(70,78,"gateway.storage-pack-size")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("readRecordsCount").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("readRecordsCount").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("readRecordsCount").hasError("pattern")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(78,80,"file"!==n.gatewayConfigurationGroup.get("storageType").value?"gateway.storage-max-records":"gateway.storage-max-file-records")," "),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("maxRecordsCount").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("maxRecordsCount").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("maxRecordsCount").hasError("pattern")),t.ɵɵadvance(),t.ɵɵproperty("ngIf","file"===n.gatewayConfigurationGroup.get("storageType").value),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(90,84,t.ɵɵpipeBind1(89,82,"gateway.connectors-config"))),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",n.connectors.controls),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",n.connectors.length),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(95,86,"gateway.no-connectors")),t.ɵɵadvance(3),t.ɵɵclassProp("!hidden",n.isReadOnlyForm),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(98,88,"gateway.connector-add")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(100,90,"action.add")," "),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.isReadOnlyForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.gatewayConfigurationGroup.get("remoteConfiguration").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigurationGroup.get("remoteConfiguration").value))},dependencies:t.ɵɵgetComponentDepsFactory(es,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%] .gateway-form[_ngcontent-%COMP%]{height:100%;padding:5px;background-color:transparent;overflow-y:auto;overflow-x:hidden}[_nghost-%COMP%] .gateway-form[_ngcontent-%COMP%] .form-action-buttons[_ngcontent-%COMP%]{padding-top:8px}[_nghost-%COMP%] .gateway-form[_ngcontent-%COMP%] .gateway-config[_ngcontent-%COMP%] .no-data-found[_ngcontent-%COMP%]{position:relative;display:flex;height:40px}']})}}e("GatewayFormComponent",es);class ts{transform(e,t){return zr.parseVersion(e)>=zr.parseVersion(Oa.get(t))}static{this.ɵfac=function(e){return new(e||ts)}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"isLatestVersionConfig",type:ts,pure:!0,standalone:!0})}}class ns{constructor(e){this.translate=e}transform(e){return e.hasError("required")?this.translate.instant("gateway.port-required"):e.hasError("min")||e.hasError("max")?this.translate.instant("gateway.port-limits-error",{min:Fa.MIN,max:Fa.MAX}):""}static{this.ɵfac=function(e){return new(e||ns)(t.ɵɵdirectiveInject(Ne.TranslateService,16))}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"getGatewayPortTooltip",type:ns,pure:!0,standalone:!0})}}class as{transform(e,t,n,a){switch(e){case Je.OPCUA:return this.getOpcConnectorHelpLink(t,n);case Je.MQTT:return this.getMqttConnectorHelpLink(t,n,a);case Je.BACNET:return this.getBacnetConnectorHelpLink(t,n)}}getOpcConnectorHelpLink(e,t){if(t!==qa.CONST)return`widget/lib/gateway/${e}-${t}_fn`}getMqttConnectorHelpLink(e,t,n){if(t!==ya.CONST)return n?e!==ja.ATTRIBUTES&&e!==ja.TIMESERIES||n!==ga.JSON?`widget/lib/gateway/mqtt-${n}-expression_fn`:"widget/lib/gateway/mqtt-json-key-expression_fn":"widget/lib/gateway/mqtt-expression_fn"}getBacnetConnectorHelpLink(e,t){if(t!==qa.CONST)return`widget/lib/gateway/bacnet-device-${e}-${t}_fn`}static{this.ɵfac=function(e){return new(e||as)}}static{this.ɵpipe=t.ɵɵdefinePipe({name:"getConnectorMappingHelpLink",type:as,pure:!0,standalone:!0})}}function rs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.key),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.value," ")}}function is(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",22),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.connectorForm.get("name").hasError("duplicateName")?"gateway.connector-duplicate-name":"gateway.name-required"))}}function os(e,n){1&e&&(t.ɵɵelementStart(0,"div",8)(1,"div",9),t.ɵɵtext(2,"gateway.connectors-table-class"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",10),t.ɵɵelement(4,"input",23),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(5,1,"gateway.set")))}function ss(e,n){1&e&&(t.ɵɵelementStart(0,"div",8)(1,"div",9),t.ɵɵtext(2,"gateway.connectors-table-key"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",10),t.ɵɵelement(4,"input",24),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(5,1,"gateway.set")))}function ps(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function ls(e,n){1&e&&(t.ɵɵelementStart(0,"div",8)(1,"mat-slide-toggle",25)(2,"mat-label",26),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,2,"gateway.fill-connector-defaults-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,4,"gateway.fill-connector-defaults")," "))}function cs(e,n){1&e&&(t.ɵɵelementStart(0,"div",8)(1,"mat-slide-toggle",27)(2,"mat-label",26),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,2,"gateway.send-change-data-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,4,"gateway.send-change-data")," "))}class ds extends I{constructor(e,t,n,a,r,i){super(e,t,a),this.store=e,this.router=t,this.data=n,this.dialogRef=a,this.fb=r,this.isLatestVersionConfig=i,this.connectorType=Je,this.gatewayConnectorDefaultTypesTranslatesMap=Ye,this.gatewayLogLevel=Object.values(We),this.submitted=!1,this.destroy$=new me,this.connectorForm=this.fb.group({type:[Je.MQTT,[]],name:["",[ne.required,this.uniqNameRequired(),ne.pattern($e)]],logLevel:[We.INFO,[]],useDefaults:[!0,[]],sendDataOnlyOnChange:[!1,[]],class:["",[]],key:["auto",[]]})}ngOnInit(){this.observeTypeChange()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),super.ngOnDestroy()}helpLinkId(){return q+"/docs/iot-gateway/configuration/"}cancel(){this.dialogRef.close(null)}add(){this.submitted=!0;const e=this.connectorForm.getRawValue();if(e.useDefaults){const t=Pt(e.type),n=this.data.gatewayVersion;n&&(e.configVersion=n),e.configurationJson=(this.isLatestVersionConfig.transform(n,e.type)?t[Oa.get(e.type)]:t[Qe.Legacy])??t,this.connectorForm.valid&&this.dialogRef.close(e)}else this.connectorForm.valid&&this.dialogRef.close(e)}uniqNameRequired(){return e=>{const t=e.value.trim().toLowerCase();return this.data.dataSourceData.some((({value:{name:e}})=>e.toLowerCase()===t))?{duplicateName:{valid:!1}}:null}}observeTypeChange(){this.connectorForm.get("type").valueChanges.pipe(we((e=>{const t=this.connectorForm.get("useDefaults");e===Je.GRPC||e===Je.CUSTOM?t.setValue(!1):t.value||t.setValue(!0)})),be(this.destroy$)).subscribe()}static{this.ɵfac=function(e){return new(e||ds)(t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(de.Router),t.ɵɵdirectiveInject(se),t.ɵɵdirectiveInject(pe.MatDialogRef),t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(ts))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ds,selectors:[["tb-add-connector-dialog"]],standalone:!0,features:[t.ɵɵProvidersFeature([ts]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:44,vars:27,consts:[[1,"add-connector",3,"formGroup"],["color","primary"],[1,"flex-1"],[3,"tb-help"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content",""],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["formControlName","type"],[3,"value",4,"ngFor","ngForOf"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","autocomplete","off","name","value","formControlName","name",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["class","tb-form-row column-xs",4,"ngIf"],["formControlName","logLevel"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","primary","type","button","cdkFocusInitial","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[3,"value"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","name","value","formControlName","class",3,"placeholder"],["matInput","","name","value","formControlName","key",3,"placeholder"],["formControlName","useDefaults",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["formControlName","sendDataOnlyOnChange",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"mat-toolbar",1)(2,"h2"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",2)(6,"div",3),t.ɵɵelementStart(7,"button",4),t.ɵɵlistener("click",(function(){return n.cancel()})),t.ɵɵelementStart(8,"mat-icon",5),t.ɵɵtext(9,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",6)(11,"div",7)(12,"div",8)(13,"div",9),t.ɵɵtext(14,"gateway.type"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"mat-form-field",10)(16,"mat-select",11),t.ɵɵtemplate(17,rs,2,2,"mat-option",12),t.ɵɵpipe(18,"keyvalue"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(19,"div",8)(20,"div",13),t.ɵɵtext(21,"gateway.name"),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"mat-form-field",10),t.ɵɵelement(23,"input",14),t.ɵɵpipe(24,"translate"),t.ɵɵtemplate(25,is,3,3,"mat-icon",15),t.ɵɵelementEnd()(),t.ɵɵtemplate(26,os,6,3,"div",16)(27,ss,6,3,"div",16),t.ɵɵelementStart(28,"div",8)(29,"div",9),t.ɵɵtext(30,"gateway.remote-logging-level"),t.ɵɵelementEnd(),t.ɵɵelementStart(31,"mat-form-field",10)(32,"mat-select",17),t.ɵɵtemplate(33,ps,2,2,"mat-option",12),t.ɵɵelementEnd()()(),t.ɵɵtemplate(34,ls,6,6,"div",16)(35,cs,6,6,"div",16),t.ɵɵpipe(36,"withReportStrategy"),t.ɵɵelementEnd()(),t.ɵɵelementStart(37,"div",18)(38,"button",19),t.ɵɵlistener("click",(function(){return n.cancel()})),t.ɵɵtext(39),t.ɵɵpipe(40,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(41,"button",20),t.ɵɵlistener("click",(function(){return n.add()})),t.ɵɵtext(42),t.ɵɵpipe(43,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.connectorForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,14,"gateway.add-connector")),t.ɵɵadvance(3),t.ɵɵproperty("tb-help",n.helpLinkId()),t.ɵɵadvance(11),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(18,16,n.gatewayConnectorDefaultTypesTranslatesMap)),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(24,18,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.connectorForm.get("name").hasError("required")&&n.connectorForm.get("name").touched||n.connectorForm.get("name").hasError("duplicateName")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.connectorForm.get("type").value===n.connectorType.CUSTOM),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.connectorForm.get("type").value===n.connectorType.GRPC),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.gatewayLogLevel),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.connectorForm.get("type").value!==n.connectorType.GRPC&&n.connectorForm.get("type").value!==n.connectorType.CUSTOM),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.connectorForm.get("type").value===n.connectorType.MQTT&&!t.ɵɵpipeBind2(36,20,n.data.gatewayVersion,n.connectorType.MQTT)),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(40,23,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.connectorForm.invalid||!n.connectorForm.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(43,25,"action.add")," "))},dependencies:t.ɵɵgetComponentDepsFactory(ds,[V,b,Jr]),styles:['@charset "UTF-8";[_nghost-%COMP%] .add-connector[_ngcontent-%COMP%]{min-width:400px;width:500px}']})}}e("AddConnectorDialogComponent",ds);const ms=()=>({maxWidth:"970px"});function us(e,n){1&e&&(t.ɵɵelementStart(0,"div",6),t.ɵɵtext(1,"gateway.device-info.source"),t.ɵɵelementEnd())}function gs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",20),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SourceTypeTranslationsMap.get(e))," ")}}function ys(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"mat-form-field",12)(2,"mat-select",18),t.ɵɵtemplate(3,gs,3,4,"mat-option",19),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.sourceTypes)}}function hs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",21),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-info.device-name-expression-required"))}function fs(e,n){if(1&e&&(t.ɵɵelement(0,"div",22),t.ɵɵpipe(1,"getConnectorMappingHelpLink")),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("tb-help-popup",t.ɵɵpipeBind4(1,2,e.connectorType,"name-field",e.mappingFormGroup.get("deviceNameExpressionSource").value,e.convertorType))("tb-help-popup-style",t.ɵɵpureFunction0(7,ms))}}function vs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",20),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SourceTypeTranslationsMap.get(e))," ")}}function bs(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"mat-form-field",12)(2,"mat-select",25),t.ɵɵtemplate(3,vs,3,4,"mat-option",19),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.sourceTypes)}}function xs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",21),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-info.device-profile-expression-required"))}function ws(e,n){if(1&e&&(t.ɵɵelement(0,"div",22),t.ɵɵpipe(1,"getConnectorMappingHelpLink")),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("tb-help-popup",t.ɵɵpipeBind4(1,2,e.connectorType,"profile-name",e.mappingFormGroup.get("deviceProfileExpressionSource").value,e.convertorType))("tb-help-popup-style",t.ɵɵpureFunction0(7,ms))}}function Cs(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",23)(1,"div",9),t.ɵɵtext(2,"gateway.device-info.profile-name"),t.ɵɵelementEnd(),t.ɵɵtemplate(3,bs,4,1,"div",10),t.ɵɵelementStart(4,"div",11)(5,"mat-form-field",12),t.ɵɵelement(6,"input",24),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,xs,3,3,"mat-icon",14)(9,ws,2,8,"div",15),t.ɵɵpipe(10,"getConnectorMappingHelpLink"),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.useSource),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,4,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingFormGroup.get("deviceProfileExpression").hasError("required")&&e.mappingFormGroup.get("deviceProfileExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind4(10,6,e.connectorType,"profile-name",e.mappingFormGroup.get("deviceProfileExpressionSource").value,e.convertorType))}}class Ss extends R{get deviceInfoType(){return this.deviceInfoTypeValue}set deviceInfoType(e){this.deviceInfoTypeValue!==e&&(this.deviceInfoTypeValue=e)}constructor(e,t,n,a){super(e),this.store=e,this.translate=t,this.dialog=n,this.fb=a,this.SourceTypeTranslationsMap=Aa,this.DeviceInfoType=vr,this.useSource=!0,this.required=!1,this.connectorType=Je.MQTT,this.sourceTypes=Object.values(ya),this.destroy$=new me,this.propagateChange=e=>{}}ngOnInit(){this.mappingFormGroup=this.fb.group({deviceNameExpression:["",this.required?[ne.required,ne.pattern($e)]:[ne.pattern($e)]]}),this.useSource&&this.mappingFormGroup.addControl("deviceNameExpressionSource",this.fb.control(this.sourceTypes[0],[])),this.deviceInfoType===vr.FULL&&(this.useSource&&this.mappingFormGroup.addControl("deviceProfileExpressionSource",this.fb.control(this.sourceTypes[0],[])),this.mappingFormGroup.addControl("deviceProfileExpression",this.fb.control("",this.required?[ne.required,ne.pattern($e)]:[ne.pattern($e)]))),this.mappingFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.updateView(e)}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),super.ngOnDestroy()}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}writeValue(e){this.mappingFormGroup.patchValue(e,{emitEvent:!1})}validate(){return this.mappingFormGroup.valid?null:{mappingForm:{valid:!1}}}updateView(e){this.propagateChange(e)}static{this.ɵfac=function(e){return new(e||Ss)(t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(Ne.TranslateService),t.ɵɵdirectiveInject(pe.MatDialog),t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ss,selectors:[["tb-device-info-table"]],inputs:{useSource:"useSource",required:"required",connectorType:"connectorType",convertorType:"convertorType",sourceTypes:"sourceTypes",deviceInfoType:"deviceInfoType"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Ss)),multi:!0},{provide:re,useExisting:i((()=>Ss)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:23,vars:18,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-table","no-padding","no-gap"],[1,"tb-form-table-header"],["translate","",1,"tb-form-table-header-cell","table-name-column"],["class","tb-form-table-header-cell table-column","translate","",4,"ngIf"],["translate","",1,"tb-form-table-header-cell","table-column"],[1,"tb-form-table-body","no-gap"],[1,"tb-form-table-row","tb-form-row","no-border","same-padding","top-same-padding"],["translate","",1,"fixed-title-width","tb-required"],["class","tb-flex no-gap raw-value-option",4,"ngIf"],[1,"tb-form-table-row-cell","tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","deviceNameExpression",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matSuffix","","class","see-example","tb-help-popup-placement","left",3,"tb-help-popup","tb-help-popup-style",4,"ngIf"],["class","tb-form-table-row tb-form-row no-border same-padding bottom-same-padding",4,"ngIf"],[1,"tb-flex","no-gap","raw-value-option"],["formControlName","deviceNameExpressionSource"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],[1,"tb-form-table-row","tb-form-row","no-border","same-padding","bottom-same-padding"],["matInput","","name","value","formControlName","deviceProfileExpression",3,"placeholder"],["formControlName","deviceProfileExpressionSource"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1),t.ɵɵtext(2,"device.device"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2)(4,"div",3)(5,"div",4),t.ɵɵtext(6,"gateway.device-info.entity-field"),t.ɵɵelementEnd(),t.ɵɵtemplate(7,us,2,0,"div",5),t.ɵɵelementStart(8,"div",6),t.ɵɵtext(9," gateway.device-info.expression "),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"div",7)(11,"div",8)(12,"div",9),t.ɵɵtext(13,"gateway.device-info.name"),t.ɵɵelementEnd(),t.ɵɵtemplate(14,ys,4,1,"div",10),t.ɵɵelementStart(15,"div",11)(16,"mat-form-field",12),t.ɵɵelement(17,"input",13),t.ɵɵpipe(18,"translate"),t.ɵɵtemplate(19,hs,3,3,"mat-icon",14)(20,fs,2,8,"div",15),t.ɵɵpipe(21,"getConnectorMappingHelpLink"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(22,Cs,11,11,"div",16),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.mappingFormGroup),t.ɵɵadvance(),t.ɵɵclassProp("tb-required",n.required),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.useSource),t.ɵɵadvance(4),t.ɵɵclassProp("bottom-same-padding",n.deviceInfoType!==n.DeviceInfoType.FULL),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.useSource),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(18,11,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.mappingFormGroup.get("deviceNameExpression").hasError("required")&&n.mappingFormGroup.get("deviceNameExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind4(21,13,n.connectorType,"name-field",n.mappingFormGroup.get("deviceNameExpressionSource").value,n.convertorType)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deviceInfoType===n.DeviceInfoType.FULL))},dependencies:t.ɵɵgetComponentDepsFactory(Ss,[V,b,as]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}[_nghost-%COMP%] .tb-form-row.bottom-same-padding[_ngcontent-%COMP%]{padding-bottom:16px}[_nghost-%COMP%] .tb-form-row.top-same-padding[_ngcontent-%COMP%]{padding-top:16px}[_nghost-%COMP%] .tb-form-row[_ngcontent-%COMP%] .fixed-title-width[_ngcontent-%COMP%]{width:19%}[_nghost-%COMP%] .table-column[_ngcontent-%COMP%]{width:40%}[_nghost-%COMP%] .table-name-column[_ngcontent-%COMP%]{width:20%}[_nghost-%COMP%] .raw-name[_ngcontent-%COMP%]{width:19%}[_nghost-%COMP%] .raw-value-option[_ngcontent-%COMP%]{max-width:40%}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}'],changeDetection:o.OnPush})}}qe([k()],Ss.prototype,"useSource",void 0),qe([k()],Ss.prototype,"required",void 0);const Es=()=>({maxWidth:"970px"});function Ts(e,n){if(1&e&&t.ɵɵelement(0,"mat-icon",19),2&e){let e;const n=t.ɵɵnextContext();t.ɵɵproperty("svgIcon",null==(e=n.valueTypes.get(n.valueTypeFormGroup.get("type").value))?null:e.icon)}}function Is(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵelement(1,"mat-icon",22),t.ɵɵelementStart(2,"span"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e){let e,a;const r=n.$implicit,i=t.ɵɵnextContext(2);t.ɵɵproperty("value",r),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("svgIcon",null==(e=i.valueTypes.get(r))?null:e.icon),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,null==(a=i.valueTypes.get(r))?null:a.name))}}function ks(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,Is,5,5,"mat-option",20),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.valueTypeKeys)}}function Ms(e,n){1&e&&(t.ɵɵelementStart(0,"mat-option",23)(1,"span"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.raw")))}function Ps(e,n){1&e&&(t.ɵɵelement(0,"input",24),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function Fs(e,n){1&e&&(t.ɵɵelement(0,"input",25),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function Os(e,n){1&e&&(t.ɵɵelement(0,"input",26),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function qs(e,n){1&e&&(t.ɵɵelement(0,"input",27),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(1,1,"gateway.set"))}function Bs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-select",28)(1,"mat-option",21),t.ɵɵtext(2,"true"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-option",21),t.ɵɵtext(4,"false"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(),t.ɵɵproperty("value",!0),t.ɵɵadvance(2),t.ɵɵproperty("value",!1))}function Rs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",29),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function Ns(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",30),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("tb-help-popup",e.helpLink)("tb-help-popup-style",t.ɵɵpureFunction0(2,Es))}}class _s{constructor(e){this.fb=e,this.valueTypeKeys=Object.values(Bt),this.valueTypes=Rt,this.MappingValueType=Bt,this.destroy$=new me,this.onChange=e=>{},this.valueTypeFormGroup=this.fb.group({type:[Bt.STRING],stringValue:[{value:"",disabled:this.rawData},[ne.required,ne.pattern($e)]],integerValue:[{value:0,disabled:!0},[ne.required,ne.pattern(ze)]],doubleValue:[{value:0,disabled:!0},[ne.required]],booleanValue:[{value:!1,disabled:!0},[ne.required]],rawValue:[{value:"",disabled:!this.rawData},[ne.required,ne.pattern($e)]]}),this.valueTypeFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((({type:e,...t})=>{this.onChange({type:e,value:t[e+"Value"]})})),this.observeTypeChange()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}observeTypeChange(){this.valueTypeFormGroup.get("type").valueChanges.pipe(be(this.destroy$)).subscribe((e=>this.toggleTypeInputs(e)))}toggleTypeInputs(e){this.valueTypeFormGroup.disable({emitEvent:!1}),this.valueTypeFormGroup.get("type").enable({emitEvent:!1}),this.valueTypeFormGroup.get(e+"Value").enable({emitEvent:!1})}registerOnChange(e){this.onChange=e}registerOnTouched(e){}writeValue(e){const t=this.getValueType(e?.value),n={stringValue:"",rawValue:"",integerValue:0,doubleValue:0,booleanValue:!1,type:t};n[t+"Value"]=e?.value,this.toggleTypeInputs(t),this.valueTypeFormGroup.patchValue(n,{emitEvent:!1})}validate(){return this.valueTypeFormGroup.valid?null:{valueTypeFormGroup:{valid:!1}}}getValueType(e){if(this.rawData)return"raw";switch(typeof e){case"boolean":return Bt.BOOLEAN;case"number":return Number.isInteger(e)?Bt.INTEGER:Bt.DOUBLE;default:return Bt.STRING}}static{this.ɵfac=function(e){return new(e||_s)(t.ɵɵdirectiveInject(te.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:_s,selectors:[["tb-type-value-field"]],inputs:{rawData:"rawData",helpLink:"helpLink"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>_s)),multi:!0},{provide:re,useExisting:i((()=>_s)),multi:!0}]),t.ɵɵStandaloneFeature],decls:29,vars:17,consts:[["raw",""],[3,"formGroup"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap","fill-width"],["formControlName","type"],[1,"tb-flex","align-center"],["class","tb-mat-18",3,"svgIcon",4,"ngIf"],[4,"ngIf","ngIfElse"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","flex","tb-suffix-absolute"],[3,"ngSwitch"],["matInput","","required","","formControlName","stringValue",3,"placeholder",4,"ngSwitchCase"],["matInput","","required","","formControlName","integerValue","type","number",3,"placeholder",4,"ngSwitchCase"],["matInput","","required","","formControlName","doubleValue","type","number",3,"placeholder",4,"ngSwitchCase"],["matInput","","required","","formControlName","rawValue",3,"placeholder",4,"ngSwitchCase"],["formControlName","booleanValue",4,"ngSwitchCase"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matSuffix","","class","see-example","tb-help-popup-placement","left",3,"tb-help-popup","tb-help-popup-style","click",4,"ngIf"],[1,"tb-mat-18",3,"svgIcon"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],[1,"tb-mat-20",3,"svgIcon"],["value","raw"],["matInput","","required","","formControlName","stringValue",3,"placeholder"],["matInput","","required","","formControlName","integerValue","type","number",3,"placeholder"],["matInput","","required","","formControlName","doubleValue","type","number",3,"placeholder"],["matInput","","required","","formControlName","rawValue",3,"placeholder"],["formControlName","booleanValue"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"click","tb-help-popup","tb-help-popup-style"]],template:function(e,n){if(1&e&&(t.ɵɵelementContainerStart(0,1),t.ɵɵelementStart(1,"div",2)(2,"div",3),t.ɵɵtext(3,"gateway.type"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",4)(5,"mat-form-field",5)(6,"mat-select",6)(7,"mat-select-trigger")(8,"div",7),t.ɵɵtemplate(9,Ts,1,1,"mat-icon",8),t.ɵɵelementStart(10,"span"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(14,ks,2,1,"ng-container",9)(15,Ms,4,3,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(17,"div",2)(18,"div",3),t.ɵɵtext(19,"gateway.value"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"mat-form-field",10),t.ɵɵelementContainerStart(21,11),t.ɵɵtemplate(22,Ps,2,3,"input",12)(23,Fs,2,3,"input",13)(24,Os,2,3,"input",14)(25,qs,2,3,"input",15)(26,Bs,5,2,"mat-select",16),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(27,Rs,3,3,"mat-icon",17)(28,Ns,1,3,"div",18),t.ɵɵelementEnd()(),t.ɵɵelementContainerEnd()),2&e){let e,a;const r=t.ɵɵreference(16);t.ɵɵproperty("formGroup",n.valueTypeFormGroup),t.ɵɵadvance(9),t.ɵɵproperty("ngIf",!n.rawData),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(12,13,null==(e=n.valueTypes.get(n.valueTypeFormGroup.get("type").value))?null:e.name)||t.ɵɵpipeBind1(13,15,"gateway.raw")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",!n.rawData)("ngIfElse",r),t.ɵɵadvance(7),t.ɵɵproperty("ngSwitch",n.valueTypeFormGroup.get("type").value),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingValueType.STRING),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingValueType.INTEGER),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingValueType.DOUBLE),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase","raw"),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingValueType.BOOLEAN),t.ɵɵadvance(),t.ɵɵproperty("ngIf",(null==(a=n.valueTypeFormGroup.get(n.valueTypeFormGroup.get("type").value))?null:a.hasError("required"))&&n.valueTypeFormGroup.get(n.valueTypeFormGroup.get("type").value).touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.helpLink)}},dependencies:t.ɵɵgetComponentDepsFactory(_s,[b,V]),styles:['@charset "UTF-8";[_nghost-%COMP%]{gap:16px;display:grid;width:100%}']})}}function Ds(e,n){if(1&e&&t.ɵɵelement(0,"tb-type-value-field",14),2&e){const e=t.ɵɵnextContext(3);t.ɵɵproperty("helpLink",e.helpLink)}}function Vs(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",6)(1,"div",7),t.ɵɵelementContainerStart(2,8),t.ɵɵelementStart(3,"mat-expansion-panel",9)(4,"mat-expansion-panel-header",10)(5,"mat-panel-title")(6,"div",11),t.ɵɵtext(7),t.ɵɵelementEnd()()(),t.ɵɵtemplate(8,Ds,1,1,"ng-template",12),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"button",13),t.ɵɵpipe(10,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.deleteKey(n,a))})),t.ɵɵelementStart(11,"mat-icon"),t.ɵɵtext(12,"delete"),t.ɵɵelementEnd()()()}if(2&e){let e;const a=n.$implicit,r=n.last;t.ɵɵadvance(2),t.ɵɵproperty("formGroup",a),t.ɵɵadvance(),t.ɵɵproperty("expanded",r),t.ɵɵadvance(4),t.ɵɵtextInterpolate(null!==(e=null==(e=a.get("typeValue").value)?null:e.value)&&void 0!==e?e:""),t.ɵɵadvance(2),t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(10,4,"gateway.delete-value"))}}function Gs(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",4),t.ɵɵtemplate(1,Vs,13,6,"div",5),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.valueListFormArray.controls)("ngForTrackBy",e.trackByKey)}}function As(e,n){1&e&&(t.ɵɵelementStart(0,"div",15)(1,"span",16),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate("gateway.no-value"))}qe([k()],_s.prototype,"rawData",void 0);class js{constructor(e){this.fb=e,this.destroy$=new me,this.onChange=e=>{}}ngOnInit(){this.valueListFormArray=this.fb.array([]),this.valueListFormArray.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.onChange(e.map((({typeValue:e})=>({...e}))))}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}trackByKey(e,t){return t}addKey(){const e=this.fb.group({typeValue:[]});this.valueListFormArray.push(e)}deleteKey(e,t){e&&e.stopPropagation(),this.valueListFormArray.removeAt(t),this.valueListFormArray.markAsDirty()}registerOnChange(e){this.onChange=e}registerOnTouched(e){}writeValue(e){for(const t of e){const e={typeValue:[t]},n=this.fb.group(e);this.valueListFormArray.push(n)}}validate(){return this.valueListFormArray.valid?null:{valueListForm:{valid:!1}}}static{this.ɵfac=function(e){return new(e||js)(t.ɵɵdirectiveInject(te.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:js,selectors:[["tb-type-value-panel"]],inputs:{helpLink:"helpLink"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>js)),multi:!0},{provide:re,useExisting:i((()=>js)),multi:!0}]),t.ɵɵStandaloneFeature],decls:8,vars:5,consts:[["noKeys",""],[1,"tb-form-panel","no-border","no-padding"],["class","tb-form-panel no-border no-padding key-panel",4,"ngIf","ngIfElse"],["type","button","mat-stroked-button","","color","primary",3,"click"],[1,"tb-form-panel","no-border","no-padding","key-panel"],["class","tb-form-panel no-border no-padding tb-flex no-flex row center fill-width",4,"ngFor","ngForOf","ngForTrackBy"],[1,"tb-form-panel","no-border","no-padding","tb-flex","no-flex","row","center","fill-width"],[1,"tb-form-panel","stroked","tb-flex"],[3,"formGroup"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],["tbTruncateWithTooltip","",1,"title-container"],["matExpansionPanelContent",""],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],["formControlName","typeValue",3,"helpLink"],[1,"tb-flex","no-flex","center","align-center","key-panel"],["translate","",1,"tb-prompt"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",1),t.ɵɵtemplate(1,Gs,2,2,"div",2),t.ɵɵelementStart(2,"div")(3,"button",3),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addKey())})),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(6,As,3,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor)}if(2&e){const e=t.ɵɵreference(7);t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.valueListFormArray.controls.length)("ngIfElse",e),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,3,"gateway.add-value")," ")}},dependencies:t.ɵɵgetComponentDepsFactory(js,[V,b,_s]),styles:['@charset "UTF-8";[_nghost-%COMP%] .title-container[_ngcontent-%COMP%]{max-width:11vw}[_nghost-%COMP%] .key-panel[_ngcontent-%COMP%]{height:250px;overflow:auto}[_nghost-%COMP%] .tb-form-panel[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%]{width:56px;height:56px;padding:16px;color:#0000008a}[_nghost-%COMP%] .see-example[_ngcontent-%COMP%]{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}']})}}const Ls=()=>({maxWidth:"970px"});function Us(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",19),t.ɵɵtext(2),t.ɵɵelementEnd(),t.ɵɵtext(3),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",e.get("key").value," "),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",":","  ")}}function $s(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.key-required"))}function zs(e,n){if(1&e&&(t.ɵɵelement(0,"div",41),t.ɵɵpipe(1,"getConnectorMappingHelpLink")),2&e){const e=t.ɵɵnextContext(3).$implicit,n=t.ɵɵnextContext(2);t.ɵɵproperty("tb-help-popup",t.ɵɵpipeBind4(1,2,n.connectorType,n.keysType,e.get("type").value,n.convertorType))("tb-help-popup-style",t.ɵɵpureFunction0(7,Ls))}}function Ks(e,n){if(1&e&&t.ɵɵelement(0,"mat-icon",44),2&e){let e;const n=t.ɵɵnextContext(4).$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("svgIcon",null==(e=a.valueTypes.get(n.get("type").value))?null:e.icon)}}function Hs(e,n){if(1&e&&(t.ɵɵelementStart(0,"span"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){let e;const n=t.ɵɵnextContext(4).$implicit,a=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,null!==(e=null==(e=a.valueTypes.get(n.get("type").value))?null:e.name)&&void 0!==e?e:a.valueTypes.get(n.get("type").value))," ")}}function Ws(e,n){1&e&&(t.ɵɵelementStart(0,"span"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,1,"gateway.raw")))}function Qs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-select-trigger")(1,"div",42),t.ɵɵtemplate(2,Ks,1,1,"mat-icon",43)(3,Hs,3,3,"span",36)(4,Ws,3,3,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()()),2&e){let e;const n=t.ɵɵreference(5),a=t.ɵɵnextContext(3).$implicit,r=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵproperty("ngIf",null==(e=r.valueTypes.get(a.get("type").value))?null:e.icon),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!r.rawData)("ngIfElse",n)}}function Js(e,n){if(1&e&&t.ɵɵelement(0,"mat-icon",48),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext(6);t.ɵɵpropertyInterpolate("svgIcon",n.valueTypes.get(e).icon)}}function Ys(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",46),t.ɵɵtemplate(1,Js,1,1,"mat-icon",47),t.ɵɵelementStart(2,"span"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e){let e,a;const r=n.$implicit,i=t.ɵɵnextContext(6);t.ɵɵproperty("value",r),t.ɵɵadvance(),t.ɵɵproperty("ngIf",null==(e=i.valueTypes.get(r))?null:e.icon),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,3,null!==(a=null==(a=i.valueTypes.get(r))?null:a.name)&&void 0!==a?a:i.valueTypes.get(r))," ")}}function Xs(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,Ys,5,5,"mat-option",45),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(5);t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.valueTypeKeys)}}function Zs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-option",46)(1,"span"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("value","raw"),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,2,"gateway.raw")))}function ep(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function tp(e,n){if(1&e&&(t.ɵɵelement(0,"div",41),t.ɵɵpipe(1,"getConnectorMappingHelpLink")),2&e){const e=t.ɵɵnextContext(3).$implicit,n=t.ɵɵnextContext(2);t.ɵɵproperty("tb-help-popup",t.ɵɵpipeBind4(1,2,n.connectorType,n.keysType,e.get("type").value,n.convertorType))("tb-help-popup-style",t.ɵɵpureFunction0(7,Ls))}}function np(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",4)(1,"div",24)(2,"div",25),t.ɵɵtext(3,"gateway.platform-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",26)(5,"div",27),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",28),t.ɵɵelement(10,"input",29),t.ɵɵpipe(11,"translate"),t.ɵɵtemplate(12,$s,3,3,"mat-icon",30)(13,zs,2,8,"div",31),t.ɵɵpipe(14,"getConnectorMappingHelpLink"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(15,"div",24)(16,"div",25),t.ɵɵtext(17,"gateway.connector-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"div",32)(19,"div",33),t.ɵɵtext(20,"gateway.type"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",34)(22,"mat-select",35),t.ɵɵtemplate(23,Qs,6,3,"mat-select-trigger",18)(24,Xs,2,1,"ng-container",36)(25,Zs,4,4,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()()(),t.ɵɵelementStart(27,"div",37)(28,"div",27),t.ɵɵpipe(29,"translate"),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(32,"mat-form-field",38),t.ɵɵelement(33,"input",39),t.ɵɵpipe(34,"translate"),t.ɵɵtemplate(35,ep,3,3,"mat-icon",30)(36,tp,2,8,"div",31),t.ɵɵpipe(37,"getConnectorMappingHelpLink"),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵreference(26),n=t.ɵɵnextContext(2).$implicit,a=t.ɵɵnextContext(2);t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(6,13,"gateway.JSONPath-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(8,15,"gateway.key")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(11,17,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.get("key").hasError("required")&&n.get("key").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind4(14,19,a.connectorType===a.ConnectorType.MQTT&&a.connectorType,a.keysType,n.get("type").value,a.convertorType)),t.ɵɵadvance(10),t.ɵɵproperty("ngIf",!a.rawData),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!a.rawData)("ngIfElse",e),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(29,24,"gateway.JSONPath-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(31,26,"gateway.value")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(34,28,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.get("value").hasError("required")&&n.get("value").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind4(37,30,a.connectorType,a.keysType,n.get("type").value,a.convertorType))}}function ap(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.key-required"))}function rp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function ip(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",4)(1,"div",26)(2,"div",33),t.ɵɵtext(3,"gateway.key"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",28),t.ɵɵelement(5,"input",29),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,ap,3,3,"mat-icon",30),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",26)(9,"div",33),t.ɵɵtext(10,"gateway.value"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field",49),t.ɵɵelement(12,"input",39),t.ɵɵpipe(13,"translate"),t.ɵɵtemplate(14,rp,3,3,"mat-icon",30),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,4,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("key").hasError("required")&&e.get("key").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(13,6,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("value").hasError("required")&&e.get("value").touched)}}function op(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.method-required"))}function sp(e,n){1&e&&t.ɵɵelement(0,"tb-type-value-panel",54)}function pp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",4)(1,"div",26)(2,"div",27),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-form-field",28),t.ɵɵelement(7,"input",50),t.ɵɵpipe(8,"translate"),t.ɵɵtemplate(9,op,3,3,"mat-icon",30),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"div",14)(11,"mat-expansion-panel",51)(12,"mat-expansion-panel-header",52)(13,"mat-panel-title")(14,"div",53),t.ɵɵpipe(15,"translate"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(18,sp,1,0,"ng-template",20),t.ɵɵelementEnd()()()),2&e){let e;const n=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,7,"gateway.hints.method-name")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,9,"gateway.method-name")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,11,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.get("method").hasError("required")&&n.get("method").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(15,13,"gateway.hints.arguments")),t.ɵɵadvance(2),t.ɵɵtextInterpolate2(" ",t.ɵɵpipeBind1(17,15,"gateway.arguments"),""," ("+(null==(e=n.get("arguments").value)?null:e.length)+")"," ")}}function lp(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",55),2&e){const e=t.ɵɵnextContext(4);t.ɵɵproperty("isExpansionMode",!0)("defaultValue",e.ReportStrategyDefaultValue.Key)}}function cp(e,n){if(1&e&&t.ɵɵtemplate(0,np,38,35,"div",22)(1,ip,15,8,"div",22)(2,pp,19,17,"div",22)(3,lp,1,2,"tb-report-strategy",23),2&e){const e=t.ɵɵnextContext(3);t.ɵɵproperty("ngIf",e.keysType!==e.MappingKeysType.CUSTOM&&e.keysType!==e.MappingKeysType.RPC_METHODS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.keysType===e.MappingKeysType.CUSTOM),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.keysType===e.MappingKeysType.RPC_METHODS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.withReportStrategy&&(e.keysType===e.MappingKeysType.ATTRIBUTES||e.keysType===e.MappingKeysType.TIMESERIES))}}function dp(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",13)(1,"div",14),t.ɵɵelementContainerStart(2,15),t.ɵɵelementStart(3,"mat-expansion-panel",16)(4,"mat-expansion-panel-header",17)(5,"mat-panel-title"),t.ɵɵtemplate(6,Us,4,2,"ng-container",18),t.ɵɵelementStart(7,"div",19),t.ɵɵtext(8),t.ɵɵelementEnd()()(),t.ɵɵtemplate(9,cp,4,4,"ng-template",20),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"button",21),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.deleteKey(n,a))})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"delete"),t.ɵɵelementEnd()()()}if(2&e){const e=n.$implicit,a=n.last,r=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵproperty("formGroup",e),t.ɵɵadvance(),t.ɵɵproperty("expanded",a),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",r.keysType!==r.MappingKeysType.RPC_METHODS),t.ɵɵadvance(2),t.ɵɵtextInterpolate(r.valueTitle(e)),t.ɵɵadvance(2),t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(11,5,r.deleteKeyTitle))}}function mp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",11),t.ɵɵtemplate(1,dp,14,7,"div",12),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.keysListFormArray.controls)("ngForTrackBy",e.trackByKey)}}function up(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",56)(1,"span",57),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.noKeysText)}}class gp extends R{constructor(e,t){super(t),this.fb=e,this.store=t,this.valueTypeEnum=Bt,this.valueTypes=Rt,this.valueTypeKeys=Object.values(Bt),this.rawData=!1,this.withReportStrategy=!0,this.keysDataApplied=new r,this.MappingKeysType=ja,this.ReportStrategyDefaultValue=Vt,this.ConnectorType=Je,this.errorText=""}ngOnInit(){this.keysListFormArray=this.prepareKeysFormArray(this.keys)}trackByKey(e,t){return t}addKey(){let e;e=this.keysType===ja.RPC_METHODS?this.fb.group({method:["",[ne.required]],arguments:[[],[]]}):this.keysType===ja.CUSTOM?this.fb.group({key:["",[ne.required,ne.pattern($e)]],value:["",[ne.required,ne.pattern($e)]]}):this.fb.group({key:["",[ne.required,ne.pattern($e)]],type:[this.rawData?"raw":this.valueTypeKeys[0]],value:["",[ne.required,ne.pattern($e)]],reportStrategy:[{value:null,disabled:this.isReportStrategyDisabled()}]}),this.keysListFormArray.push(e)}deleteKey(e,t){e&&e.stopPropagation(),this.keysListFormArray.removeAt(t),this.keysListFormArray.markAsDirty()}cancel(){this.popover?.hide()}applyKeysData(){let e=this.keysListFormArray.value.map((({reportStrategy:e,...t})=>({...t,...e&&{reportStrategy:e}})));if(this.keysType===ja.CUSTOM){e={};for(let t of this.keysListFormArray.value)e[t.key]=t.value}this.keysDataApplied.emit(e)}prepareKeysFormArray(e){const t=[];return e&&(this.keysType===ja.CUSTOM&&(e=Object.keys(e).map((t=>({key:t,value:e[t],type:""})))),e.forEach((e=>{let n;if(this.keysType===ja.RPC_METHODS)n=this.fb.group({method:[e.method,[ne.required]],arguments:[[...e.arguments],[]]});else if(this.keysType===ja.CUSTOM){const{key:t,value:a}=e;n=this.fb.group({key:[t,[ne.required,ne.pattern($e)]],value:[a,[ne.required,ne.pattern($e)]]})}else{const{key:t,value:a,type:r,reportStrategy:i}=e;n=this.fb.group({key:[t,[ne.required,ne.pattern($e)]],type:[r],value:[a,[ne.required,ne.pattern($e)]],reportStrategy:[{value:i,disabled:this.isReportStrategyDisabled()}]})}t.push(n)}))),this.fb.array(t)}valueTitle(e){const t=this.keysType===ja.RPC_METHODS?e.get("method").value:e.get("value").value;return j(t)?"object"==typeof t?JSON.stringify(t):t:""}isReportStrategyDisabled(){return!(this.withReportStrategy&&(this.keysType===ja.ATTRIBUTES||this.keysType===ja.TIMESERIES))}static{this.ɵfac=function(e){return new(e||gp)(t.ɵɵdirectiveInject(te.UntypedFormBuilder),t.ɵɵdirectiveInject(ce.Store))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:gp,selectors:[["tb-mapping-data-keys-panel"]],inputs:{panelTitle:"panelTitle",addKeyTitle:"addKeyTitle",deleteKeyTitle:"deleteKeyTitle",noKeysText:"noKeysText",keys:"keys",keysType:"keysType",connectorType:"connectorType",convertorType:"convertorType",sourceType:"sourceType",valueTypeEnum:"valueTypeEnum",valueTypes:"valueTypes",valueTypeKeys:"valueTypeKeys",rawData:"rawData",withReportStrategy:"withReportStrategy",popover:"popover"},outputs:{keysDataApplied:"keysDataApplied"},standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:16,consts:[["noKeys",""],["rawOption",""],["rawText",""],[1,"tb-mapping-keys-panel"],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-panel-title"],["class","tb-form-panel no-border no-padding key-panel",4,"ngIf","ngIfElse"],["type","button","mat-stroked-button","","color","primary",3,"click"],[1,"tb-flex","flex-end"],["mat-button","","color","primary","type","button",3,"click"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[1,"tb-form-panel","no-border","no-padding","key-panel"],["class","tb-form-panel no-border no-padding tb-flex no-flex row center fill-width",4,"ngFor","ngForOf","ngForTrackBy"],[1,"tb-form-panel","no-border","no-padding","tb-flex","no-flex","row","center","fill-width"],[1,"tb-form-panel","stroked","tb-flex"],[3,"formGroup"],[1,"tb-settings",3,"expanded"],[1,"flex","flex-row","flex-wrap"],[4,"ngIf"],["tbTruncateWithTooltip","",1,"title-container"],["matExpansionPanelContent",""],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],["class","tb-form-panel no-border no-padding",4,"ngIf"],["formControlName","reportStrategy",3,"isExpansionMode","defaultValue",4,"ngIf"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","key",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matSuffix","","class","see-example","tb-help-popup-placement","left",3,"tb-help-popup","tb-help-popup-style",4,"ngIf"],[1,"tb-form-row"],["translate","",1,"fixed-title-width","tb-required"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap","fill-width"],["formControlName","type"],[4,"ngIf","ngIfElse"],[1,"tb-form-row","column-xs","flex","items-center","justify-between"],["appearance","outline","subscriptSizing","dynamic",1,"no-gap","flex","flex-1"],["matInput","","required","","formControlName","value",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],[1,"tb-flex","align-center"],["class","tb-mat-18",3,"svgIcon",4,"ngIf"],[1,"tb-mat-18",3,"svgIcon"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["class","tb-mat-20",3,"svgIcon",4,"ngIf"],[1,"tb-mat-20",3,"svgIcon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","tb-suffix-absolute","flex"],["matInput","","name","value","formControlName","method",3,"placeholder"],[1,"tb-settings"],[1,"flex","flex-wrap"],[1,"title-container",3,"tb-hint-tooltip-icon"],["formControlName","arguments"],["formControlName","reportStrategy",3,"isExpansionMode","defaultValue"],[1,"tb-flex","no-flex","center","align-center","key-panel"],["translate","",1,"tb-prompt"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",3)(1,"div",4)(2,"div",5),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(5,mp,2,2,"div",6),t.ɵɵelementStart(6,"div")(7,"button",7),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addKey())})),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(10,up,3,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(12,"div",8)(13,"button",9),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"button",10),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.applyKeysData())})),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(11);t.ɵɵadvance(3),t.ɵɵtextInterpolate2("",t.ɵɵpipeBind1(4,8,n.panelTitle),""," ("+n.keysListFormArray.controls.length+")",""),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.keysListFormArray.controls.length)("ngIfElse",e),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(9,10,n.addKeyTitle)," "),t.ɵɵadvance(6),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,12,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.keysListFormArray.invalid||!n.keysListFormArray.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,14,"action.apply")," ")}},dependencies:t.ɵɵgetComponentDepsFactory(gp,[V,b,ma,js,as]),styles:['@charset "UTF-8";[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%]{width:77vw;max-width:700px}[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{max-width:11vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%] .key-panel[_ngcontent-%COMP%]{height:500px;overflow:auto}[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%] tb-value-input[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%] .tb-form-panel[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%]{width:56px;height:56px;padding:16px;color:#0000008a}[_nghost-%COMP%] .tb-mapping-keys-panel[_ngcontent-%COMP%] .see-example[_ngcontent-%COMP%]{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}']})}}qe([k()],gp.prototype,"rawData",void 0),qe([k()],gp.prototype,"withReportStrategy",void 0);const yp=()=>({maxWidth:"970px"}),hp=(e,t)=>[e,t];function fp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.topic-required"))}function vp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.QualityTranslationsMap.get(e))," ")}}function bp(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.ConvertorTypeTranslationsMap.get(e))," ")}}function xp(e,n){if(1&e&&t.ɵɵelement(0,"tb-device-info-table",40),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("convertorType",e.ConvertorTypeEnum.JSON)("deviceInfoType",e.DeviceInfoType.FULL)}}function wp(e,n){if(1&e&&t.ɵɵelement(0,"tb-device-info-table",41),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("deviceInfoType",e.DeviceInfoType.FULL)("convertorType",e.ConvertorTypeEnum.BYTES)("sourceTypes",t.ɵɵpureFunction2(3,hp,e.sourceTypesEnum.MSG,e.sourceTypesEnum.CONST))}}function Cp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Sp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Ep(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",14)(1,"div",31)(2,"div",32),t.ɵɵtext(3,"gateway.attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",42)(5,"mat-chip-listbox",43),t.ɵɵtemplate(6,Cp,2,1,"mat-chip",44),t.ɵɵelementStart(7,"mat-chip",45),t.ɵɵelement(8,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"button",47,0),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(10),r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.ATTRIBUTES))})),t.ɵɵelementStart(12,"tb-icon",48),t.ɵɵtext(13,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(14,"div",31)(15,"div",32),t.ɵɵtext(16,"gateway.timeseries"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"div",42)(18,"mat-chip-listbox",43),t.ɵɵtemplate(19,Sp,2,1,"mat-chip",44),t.ɵɵelementStart(20,"mat-chip",45),t.ɵɵelement(21,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(22,"button",47,1),t.ɵɵpipe(24,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(23),r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.TIMESERIES))})),t.ɵɵelementStart(25,"tb-icon",48),t.ɵɵtext(26,"edit"),t.ɵɵelementEnd()()()()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(5),t.ɵɵproperty("tbEllipsisChipList",e.converterAttributes),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.converterAttributes),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(11,6,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",e.converterTelemetry),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.converterTelemetry),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(24,8,"action.edit"))}}function Tp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.extension-required"))}function Ip(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function kp(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",14)(1,"div",21)(2,"div",49),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-form-field",23),t.ɵɵelement(7,"input",50),t.ɵɵpipe(8,"translate"),t.ɵɵtemplate(9,Tp,3,3,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"div",51)(11,"div",35),t.ɵɵtext(12,"gateway.extension-configuration"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",15),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"div",31)(17,"div",32),t.ɵɵtext(18,"gateway.keys"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"div",42)(20,"mat-chip-listbox",43),t.ɵɵtemplate(21,Ip,2,1,"mat-chip",44),t.ɵɵelementStart(22,"mat-chip",45),t.ɵɵelement(23,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(24,"button",47,2),t.ɵɵpipe(26,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(25),r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.CUSTOM))})),t.ɵɵelementStart(27,"tb-icon",48),t.ɵɵtext(28,"edit"),t.ɵɵelementEnd()()()()()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,8,"gateway.extension-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,10,"gateway.extension")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,12,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("converter.custom.extension").hasError("required")&&e.mappingForm.get("converter.custom.extension").touched),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,14,"gateway.extension-configuration-hint")),t.ɵɵadvance(6),t.ɵɵproperty("tbEllipsisChipList",e.customKeys),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.customKeys),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(26,16,"action.edit"))}}function Mp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21)(1,"div",22),t.ɵɵtext(2,"gateway.topic-filter"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",23),t.ɵɵelement(4,"input",24),t.ɵɵpipe(5,"translate"),t.ɵɵtemplate(6,fp,3,3,"mat-icon",25),t.ɵɵelement(7,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",21)(9,"div",27),t.ɵɵpipe(10,"translate"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",23)(14,"mat-select",28),t.ɵɵtemplate(15,vp,3,4,"mat-option",29),t.ɵɵelementEnd()()(),t.ɵɵelementContainerStart(16,30),t.ɵɵelementStart(17,"div",31)(18,"div",32),t.ɵɵtext(19,"gateway.payload-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"tb-toggle-select",33),t.ɵɵtemplate(21,bp,3,4,"tb-toggle-option",29),t.ɵɵelementEnd()(),t.ɵɵelementStart(22,"div",34)(23,"div",35),t.ɵɵtext(24,"gateway.data-conversion"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"div",15),t.ɵɵtext(26),t.ɵɵpipe(27,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(28,36),t.ɵɵtemplate(29,xp,1,2,"ng-template",17)(30,wp,1,6,"ng-template",17)(31,Ep,27,10,"div",37)(32,kp,29,18,"div",37),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(5,15,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("topicFilter").hasError("required")&&e.mappingForm.get("topicFilter").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/topic-filter_fn")("tb-help-popup-style",t.ɵɵpureFunction0(23,yp)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(10,17,"gateway.response-topic-Qos-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,19,"gateway.mqtt-qos")," "),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.qualityTypes),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",e.convertorTypes),t.ɵɵadvance(5),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(27,21,e.DataConversionTranslationsMap.get(e.converterType))," "),t.ɵɵadvance(2),t.ɵɵproperty("formGroupName",e.converterType)("ngSwitch",e.converterType),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConvertorTypeEnum.JSON),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConvertorTypeEnum.BYTES),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.converterType===e.ConvertorTypeEnum.BYTES||e.converterType===e.ConvertorTypeEnum.JSON),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.converterType===e.ConvertorTypeEnum.CUSTOM)}}function Pp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.RequestTypesTranslationsMap.get(e))," ")}}function Fp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.topic-required"))}function Op(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21)(1,"div",22),t.ɵɵtext(2,"gateway.topic-filter"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",23),t.ɵɵelement(4,"input",56),t.ɵɵpipe(5,"translate"),t.ɵɵtemplate(6,Fp,3,3,"mat-icon",25),t.ɵɵelement(7,"div",26),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(5,5,"gateway.set")),t.ɵɵproperty("formControl",e.mappingForm.get("requestValue").get(e.requestMappingType).get("topicFilter")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue").get(e.requestMappingType).get("topicFilter").hasError("required")&&e.mappingForm.get("requestValue").get(e.requestMappingType).get("topicFilter").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/topic-filter_fn")("tb-help-popup-style",t.ɵɵpureFunction0(7,yp))}}function qp(e,n){if(1&e&&t.ɵɵelement(0,"tb-device-info-table",57),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("deviceInfoType",e.DeviceInfoType.FULL)}}function Bp(e,n){if(1&e&&t.ɵɵelement(0,"tb-device-info-table",57),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("deviceInfoType",e.DeviceInfoType.PARTIAL)}}function Rp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SourceTypeTranslationsMap.get(e))," ")}}function Np(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-info.device-name-expression-required"))}function _p(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SourceTypeTranslationsMap.get(e))," ")}}function Dp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.attribute-name-expression-required"))}function Vp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.response-value-expression-required"))}function Gp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.response-topic-expression-required"))}function Ap(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",34)(1,"div",58),t.ɵɵtext(2,"gateway.from-device-request-settings"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",59),t.ɵɵtext(4," gateway.from-device-request-settings-hint "),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",60)(6,"div",61)(7,"div",62),t.ɵɵtext(8,"gateway.device-info.device-name-expression"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",63)(10,"mat-form-field",23)(11,"mat-select",64),t.ɵɵtemplate(12,Rp,3,4,"mat-option",29),t.ɵɵelementEnd()(),t.ɵɵelementStart(13,"mat-form-field",23),t.ɵɵelement(14,"input",65),t.ɵɵpipe(15,"translate"),t.ɵɵtemplate(16,Np,3,3,"mat-icon",25),t.ɵɵelement(17,"div",26),t.ɵɵelementEnd()()(),t.ɵɵelementStart(18,"div",21)(19,"div",22),t.ɵɵtext(20,"gateway.attribute-name-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"div",63)(22,"mat-form-field",23)(23,"mat-select",66),t.ɵɵtemplate(24,_p,3,4,"mat-option",29),t.ɵɵelementEnd()(),t.ɵɵelementStart(25,"mat-form-field",23),t.ɵɵelement(26,"input",67),t.ɵɵpipe(27,"translate"),t.ɵɵtemplate(28,Dp,3,3,"mat-icon",25),t.ɵɵelement(29,"div",26),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(30,"div",34)(31,"div",58),t.ɵɵtext(32,"gateway.to-device-response-settings"),t.ɵɵelementEnd(),t.ɵɵelementStart(33,"div",59),t.ɵɵtext(34," gateway.to-device-response-settings-hint "),t.ɵɵelementEnd(),t.ɵɵelementStart(35,"div",21)(36,"div",22),t.ɵɵtext(37,"gateway.response-value-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"mat-form-field",23),t.ɵɵelement(39,"input",68),t.ɵɵpipe(40,"translate"),t.ɵɵtemplate(41,Vp,3,3,"mat-icon",25),t.ɵɵelement(42,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(43,"div",21)(44,"div",22),t.ɵɵtext(45,"gateway.response-topic-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(46,"mat-form-field",23),t.ɵɵelement(47,"input",69),t.ɵɵpipe(48,"translate"),t.ɵɵtemplate(49,Gp,3,3,"mat-icon",25),t.ɵɵelement(50,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(51,"div",70)(52,"mat-slide-toggle",71)(53,"mat-label",72),t.ɵɵpipe(54,"translate"),t.ɵɵtext(55),t.ɵɵpipe(56,"translate"),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(12),t.ɵɵproperty("ngForOf",e.sourceTypes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(15,20,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeRequests.deviceInfo.deviceNameExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeRequests.deviceInfo.deviceNameExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(32,yp)),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",e.sourceTypes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(27,22,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeRequests.attributeNameExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeRequests.attributeNameExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(33,yp)),t.ɵɵadvance(10),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(40,24,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeRequests.valueExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeRequests.valueExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(34,yp)),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(48,26,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeRequests.topicExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeRequests.topicExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(35,yp)),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(54,28,"gateway.retain-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(56,30,"gateway.retain")," ")}}function jp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-filter-required"))}function Lp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.attribute-filter-required"))}function Up(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.response-value-expression-required"))}function $p(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.response-topic-expression-required"))}function zp(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21)(1,"div",49),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",23),t.ɵɵelement(6,"input",73),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,jp,3,3,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",21)(10,"div",49),t.ɵɵpipe(11,"translate"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-form-field",23),t.ɵɵelement(15,"input",74),t.ɵɵpipe(16,"translate"),t.ɵɵtemplate(17,Lp,3,3,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",21)(19,"div",22),t.ɵɵtext(20,"gateway.response-value-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",23),t.ɵɵelement(22,"input",68),t.ɵɵpipe(23,"translate"),t.ɵɵtemplate(24,Up,3,3,"mat-icon",25),t.ɵɵelement(25,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(26,"div",21)(27,"div",22),t.ɵɵtext(28,"gateway.response-topic-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-form-field",23),t.ɵɵelement(30,"input",69),t.ɵɵpipe(31,"translate"),t.ɵɵtemplate(32,$p,3,3,"mat-icon",25),t.ɵɵelement(33,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(34,"div",70)(35,"mat-slide-toggle",71)(36,"mat-label",72),t.ɵɵpipe(37,"translate"),t.ɵɵtext(38),t.ɵɵpipe(39,"translate"),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,18,"gateway.device-name-filter-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,20,"gateway.device-name-filter")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,22,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeUpdates.deviceNameFilter").hasError("required")&&e.mappingForm.get("requestValue.attributeUpdates.deviceNameFilter").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(11,24,"gateway.attribute-filter-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(13,26,"gateway.attribute-filter")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,28,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeUpdates.attributeFilter").hasError("required")&&e.mappingForm.get("requestValue.attributeUpdates.attributeFilter").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(23,30,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeUpdates.valueExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeUpdates.valueExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(38,yp)),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(31,32,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.attributeUpdates.topicExpression").hasError("required")&&e.mappingForm.get("requestValue.attributeUpdates.topicExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(39,yp)),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(37,34,"gateway.retain-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(39,36,"gateway.retain")," ")}}function Kp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-filter-required"))}function Hp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.method-filter-required"))}function Wp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.request-topic-expression-required"))}function Qp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-expression-required"))}function Jp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.response-topic-expression-required"))}function Yp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(4);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.QualityTranslationsMap.get(e))," ")}}function Xp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵtext(1," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(4);t.ɵɵproperty("matTooltip",e.responseTimeoutErrorTooltip)}}function Zp(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",21)(2,"div",22),t.ɵɵtext(3,"gateway.response-topic-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",23),t.ɵɵelement(5,"input",79),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Jp,3,3,"mat-icon",25),t.ɵɵelement(8,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",21)(10,"div",27),t.ɵɵpipe(11,"translate"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-form-field",23)(15,"mat-select",80),t.ɵɵtemplate(16,Yp,3,4,"mat-option",29),t.ɵɵelementEnd()()(),t.ɵɵelementStart(17,"div",21)(18,"div",22),t.ɵɵtext(19,"gateway.response-timeout"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"mat-form-field",23),t.ɵɵelement(21,"input",81),t.ɵɵpipe(22,"translate"),t.ɵɵtemplate(23,Xp,2,1,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(3);t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,9,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.responseTopicExpression").hasError("required")&&e.mappingForm.get("requestValue.serverSideRpc.responseTopicExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(17,yp)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(11,11,"gateway.response-topic-Qos-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(13,13,"gateway.response-topic-Qos")," "),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.qualityTypes),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(22,15,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(e.mappingForm.get("requestValue.serverSideRpc.responseTimeout").hasError("required")||e.mappingForm.get("requestValue.serverSideRpc.responseTimeout").hasError("min"))&&e.mappingForm.get("requestValue.serverSideRpc.responseTimeout").touched)}}function el(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",75)(1,"tb-toggle-select",33)(2,"tb-toggle-option",39),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"tb-toggle-option",39),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(8,"div",21)(9,"div",49),t.ɵɵpipe(10,"translate"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",23),t.ɵɵelement(14,"input",73),t.ɵɵpipe(15,"translate"),t.ɵɵtemplate(16,Kp,3,3,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"div",21)(18,"div",49),t.ɵɵpipe(19,"translate"),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"mat-form-field",23),t.ɵɵelement(23,"input",76),t.ɵɵpipe(24,"translate"),t.ɵɵtemplate(25,Hp,3,3,"mat-icon",25),t.ɵɵelementEnd()(),t.ɵɵelementStart(26,"div",21)(27,"div",22),t.ɵɵtext(28,"gateway.request-topic-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-form-field",23),t.ɵɵelement(30,"input",77),t.ɵɵpipe(31,"translate"),t.ɵɵtemplate(32,Wp,3,3,"mat-icon",25),t.ɵɵelement(33,"div",26),t.ɵɵelementEnd()(),t.ɵɵelementStart(34,"div",21)(35,"div",22),t.ɵɵtext(36,"gateway.value-expression"),t.ɵɵelementEnd(),t.ɵɵelementStart(37,"mat-form-field",23),t.ɵɵelement(38,"input",68),t.ɵɵpipe(39,"translate"),t.ɵɵtemplate(40,Qp,3,3,"mat-icon",25),t.ɵɵelement(41,"div",26),t.ɵɵelementEnd()(),t.ɵɵtemplate(42,Zp,24,18,"ng-container",78)),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵproperty("value",e.ServerSideRPCType.TWO_WAY),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,21,"gateway.with-response")," "),t.ɵɵadvance(2),t.ɵɵproperty("value",e.ServerSideRPCType.ONE_WAY),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,23,"gateway.without-response")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(10,25,"gateway.device-name-filter-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,27,"gateway.device-name-filter")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(15,29,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.deviceNameFilter").hasError("required")&&e.mappingForm.get("requestValue.serverSideRpc.deviceNameFilter").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(19,31,"gateway.method-filter-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(21,33,"gateway.method-filter")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(24,35,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.methodFilter").hasError("required")&&e.mappingForm.get("requestValue.serverSideRpc.methodFilter").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(31,37,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.requestTopicExpression").hasError("required")&&e.mappingForm.get("requestValue.serverSideRpc.requestTopicExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(41,yp)),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(39,39,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.valueExpression").hasError("required")&&e.mappingForm.get("requestValue.serverSideRpc.valueExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/expressions_fn")("tb-help-popup-style",t.ɵɵpureFunction0(42,yp)),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.mappingForm.get("requestValue.serverSideRpc.type").value===e.ServerSideRPCType.TWO_WAY)}}function tl(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21)(1,"div",32),t.ɵɵtext(2,"gateway.request-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",23)(4,"mat-select",52),t.ɵɵtemplate(5,Pp,3,4,"mat-option",29),t.ɵɵelementEnd()()(),t.ɵɵelementContainerStart(6,53)(7,54),t.ɵɵtemplate(8,Op,8,8,"div",55)(9,qp,1,1,"ng-template",17)(10,Bp,1,1,"ng-template",17)(11,Ap,57,36,"ng-template",17)(12,zp,40,40,"ng-template",17)(13,el,43,43,"ng-template",17),t.ɵɵelementContainerEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.requestTypes),t.ɵɵadvance(2),t.ɵɵproperty("formGroup",e.mappingForm.get("requestValue").get(e.requestMappingType))("ngSwitch",e.requestMappingType),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.requestMappingType===e.RequestTypeEnum.ATTRIBUTE_REQUEST||e.requestMappingType===e.RequestTypeEnum.CONNECT_REQUEST||e.requestMappingType===e.RequestTypeEnum.DISCONNECT_REQUEST),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.RequestTypeEnum.CONNECT_REQUEST),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.RequestTypeEnum.DISCONNECT_REQUEST),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.RequestTypeEnum.ATTRIBUTE_REQUEST),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.RequestTypeEnum.ATTRIBUTE_UPDATE),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.RequestTypeEnum.SERVER_SIDE_RPC)}}function nl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SourceTypeTranslationsMap.get(e))," ")}}function al(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",38),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-node-required"))}function rl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function il(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function ol(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function sl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function pl(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",21)(1,"div",82)(2,"div",83),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"div",84)(7,"mat-form-field",23)(8,"mat-select",85),t.ɵɵtemplate(9,nl,3,4,"mat-option",29),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",86),t.ɵɵelement(11,"input",87),t.ɵɵpipe(12,"translate"),t.ɵɵtemplate(13,al,3,3,"mat-icon",25),t.ɵɵelement(14,"div",26),t.ɵɵpipe(15,"getConnectorMappingHelpLink"),t.ɵɵelementEnd()()(),t.ɵɵelement(16,"tb-device-info-table",88),t.ɵɵelementStart(17,"div",31)(18,"div",32),t.ɵɵtext(19,"gateway.attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"div",42)(21,"mat-chip-listbox",43),t.ɵɵtemplate(22,rl,2,1,"mat-chip",44),t.ɵɵelementStart(23,"mat-chip",45),t.ɵɵelement(24,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(25,"button",47,3),t.ɵɵpipe(27,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(26),r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.ATTRIBUTES))})),t.ɵɵelementStart(28,"tb-icon",48),t.ɵɵtext(29,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(30,"div",31)(31,"div",32),t.ɵɵtext(32,"gateway.timeseries"),t.ɵɵelementEnd(),t.ɵɵelementStart(33,"div",42)(34,"mat-chip-listbox",43),t.ɵɵtemplate(35,il,2,1,"mat-chip",44),t.ɵɵelementStart(36,"mat-chip",45),t.ɵɵelement(37,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(38,"button",47,4),t.ɵɵpipe(40,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(39),r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.TIMESERIES))})),t.ɵɵelementStart(41,"tb-icon",48),t.ɵɵtext(42,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(43,"div",31)(44,"div",32),t.ɵɵtext(45,"gateway.attribute-updates"),t.ɵɵelementEnd(),t.ɵɵelementStart(46,"div",42)(47,"mat-chip-listbox",43),t.ɵɵtemplate(48,ol,2,1,"mat-chip",44),t.ɵɵelementStart(49,"mat-chip",45),t.ɵɵelement(50,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(51,"button",47,5),t.ɵɵpipe(53,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(52),r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.ATTRIBUTES_UPDATES))})),t.ɵɵelementStart(54,"tb-icon",48),t.ɵɵtext(55,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(56,"div",31)(57,"div",32),t.ɵɵtext(58,"gateway.rpc-methods"),t.ɵɵelementEnd(),t.ɵɵelementStart(59,"div",42)(60,"mat-chip-listbox",43),t.ɵɵtemplate(61,sl,2,1,"mat-chip",44),t.ɵɵelementStart(62,"mat-chip",45),t.ɵɵelement(63,"label",46),t.ɵɵelementEnd()(),t.ɵɵelementStart(64,"button",47,6),t.ɵɵpipe(66,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵreference(65),r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageKeys(n,a,r.MappingKeysType.RPC_METHODS))})),t.ɵɵelementStart(67,"tb-icon",48),t.ɵɵtext(68,"edit"),t.ɵɵelementEnd()()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,22,"gateway.device-node-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,24,"gateway.device-node")," "),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",t.ɵɵpureFunction2(40,hp,e.OPCUaSourceTypesEnum.PATH,e.OPCUaSourceTypesEnum.IDENTIFIER)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(12,26,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.mappingForm.get("deviceNodePattern").hasError("required")&&e.mappingForm.get("deviceNodePattern").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup",t.ɵɵpipeBind3(15,28,e.ConnectorType.OPCUA,"device-node",e.mappingForm.get("deviceNodeSource").value))("tb-help-popup-style",t.ɵɵpureFunction0(43,yp)),t.ɵɵadvance(2),t.ɵɵproperty("connectorType",e.ConnectorType.OPCUA)("sourceTypes",e.OPCUaSourceTypes)("deviceInfoType",e.DeviceInfoType.FULL),t.ɵɵadvance(5),t.ɵɵproperty("tbEllipsisChipList",e.opcAttributes),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.opcAttributes),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(27,32,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",e.opcTelemetry),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.opcTelemetry),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(40,34,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",e.opcAttributesUpdates),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.opcAttributesUpdates),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(53,36,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",e.opcRpcMethods),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.opcRpcMethods),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(66,38,"action.edit"))}}class ll extends I{constructor(e,t,n,a,r,i,o,s,p){super(e,t,a),this.store=e,this.router=t,this.data=n,this.dialogRef=a,this.fb=r,this.popoverService=i,this.renderer=o,this.viewContainerRef=s,this.translate=p,this.MappingType=Na,this.qualityTypes=Ka,this.QualityTranslationsMap=fa,this.convertorTypes=Object.values(ga),this.ConvertorTypeEnum=ga,this.ConvertorTypeTranslationsMap=va,this.sourceTypes=Object.values(ya),this.OPCUaSourceTypes=Object.values(qa),this.OPCUaSourceTypesEnum=qa,this.sourceTypesEnum=ya,this.SourceTypeTranslationsMap=Aa,this.requestTypes=Object.values(ba),this.RequestTypeEnum=ba,this.RequestTypesTranslationsMap=xa,this.DeviceInfoType=vr,this.ServerSideRPCType=Ja,this.MappingKeysType=ja,this.MappingHintTranslationsMap=Qa,this.MappingTypeTranslationsMap=_a,this.DataConversionTranslationsMap=wa,this.HelpLinkByMappingTypeMap=Wa,this.ConnectorType=Je,this.keysPopupClosed=!0,this.destroy$=new me,this.createMappingForm()}get converterAttributes(){if(this.converterType)return this.mappingForm.get("converter").get(this.converterType).value.attributes.map((e=>e.key))}get converterTelemetry(){if(this.converterType)return this.mappingForm.get("converter").get(this.converterType).value.timeseries.map((e=>e.key))}get opcAttributes(){return this.mappingForm.get("attributes").value?.map((e=>e.key))||[]}get opcTelemetry(){return this.mappingForm.get("timeseries").value?.map((e=>e.key))||[]}get opcRpcMethods(){return this.mappingForm.get("rpc_methods").value?.map((e=>e.method))||[]}get opcAttributesUpdates(){return this.mappingForm.get("attributes_updates")?.value?.map((e=>e.key))||[]}get converterType(){return this.mappingForm.get("converter")?.get("type").value}get customKeys(){return Object.keys(this.mappingForm.get("converter").get("custom").value.extensionConfig)}get requestMappingType(){return this.mappingForm.get("requestType").value}get responseTimeoutErrorTooltip(){const e=this.mappingForm.get("requestValue.serverSideRpc.responseTimeout");return e.hasError("required")?this.translate.instant("gateway.response-timeout-required"):e.hasError("min")?this.translate.instant("gateway.response-timeout-limits-error",{min:1}):""}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),super.ngOnDestroy()}createMappingForm(){switch(this.data.mappingType){case Na.DATA:this.mappingForm=this.fb.group({}),this.createDataMappingForm();break;case Na.REQUESTS:this.mappingForm=this.fb.group({}),this.createRequestMappingForm();break;case Na.OPCUA:this.createOPCUAMappingForm()}}cancel(){this.keysPopupClosed&&this.dialogRef.close(null)}add(){this.mappingForm.valid&&this.dialogRef.close(this.prepareMappingData())}manageKeys(e,t,n){e&&e.stopPropagation();const a=t._elementRef.nativeElement;if(this.popoverService.hasPopover(a))this.popoverService.hidePopover(a);else{const e=(this.data.mappingType!==Na.OPCUA?this.mappingForm.get("converter").get(this.converterType):this.mappingForm).get(n),t={keys:e.value,keysType:n,rawData:this.mappingForm.get("converter.type")?.value===ga.BYTES,panelTitle:La.get(n),addKeyTitle:Ua.get(n),deleteKeyTitle:$a.get(n),noKeysText:za.get(n),withReportStrategy:this.data.withReportStrategy,connectorType:this.data.mappingType===Na.OPCUA?Je.OPCUA:Je.MQTT,convertorType:this.converterType};this.data.mappingType===Na.OPCUA&&(t.valueTypeKeys=Object.values(qa),t.valueTypeEnum=qa,t.valueTypes=Aa,t.sourceType=this.mappingForm.get("deviceNodeSource").value),this.keysPopupClosed=!1;const r=this.popoverService.displayPopover(a,this.renderer,this.viewContainerRef,gp,"leftBottom",!1,null,t,{},{},{},!0);r.tbComponentRef.instance.popover=r,r.tbComponentRef.instance.keysDataApplied.pipe(be(this.destroy$)).subscribe((t=>{r.hide(),e.patchValue(t),e.markAsDirty()})),r.tbHideStart.pipe(be(this.destroy$)).subscribe((()=>{this.keysPopupClosed=!0}))}}prepareMappingData(){const e=this.mappingForm.value;switch(this.data.mappingType){case Na.DATA:const{converter:t,topicFilter:n,subscriptionQos:a}=e;return{topicFilter:n,subscriptionQos:a,converter:{type:t.type,...t[t.type]}};case Na.REQUESTS:return{requestType:e.requestType,requestValue:e.requestValue[e.requestType]};default:return e}}getFormValueData(){if(this.data.value&&Object.keys(this.data.value).length)switch(this.data.mappingType){case Na.DATA:const{converter:e,topicFilter:t,subscriptionQos:n}=this.data.value;return{topicFilter:t,subscriptionQos:n,converter:{type:e.type,[e.type]:{...e}}};case Na.REQUESTS:return{requestType:this.data.value.requestType,requestValue:{[this.data.value.requestType]:this.data.value.requestValue}};default:return this.data.value}}createDataMappingForm(){this.mappingForm.addControl("topicFilter",this.fb.control("",[ne.required,ne.pattern($e)])),this.mappingForm.addControl("subscriptionQos",this.fb.control(0)),this.mappingForm.addControl("converter",this.fb.group({type:[ga.JSON,[]],json:this.fb.group({deviceInfo:[{},[]],attributes:[[],[]],timeseries:[[],[]]}),bytes:this.fb.group({deviceInfo:[{},[]],attributes:[[],[]],timeseries:[[],[]]}),custom:this.fb.group({extension:["",[ne.required,ne.pattern($e)]],extensionConfig:[{},[]]})})),this.mappingForm.patchValue(this.getFormValueData()),this.mappingForm.get("converter.type").valueChanges.pipe(Pe(this.mappingForm.get("converter.type").value),be(this.destroy$)).subscribe((e=>{const t=this.mappingForm.get("converter");t.get("json").disable({emitEvent:!1}),t.get("bytes").disable({emitEvent:!1}),t.get("custom").disable({emitEvent:!1}),t.get(e).enable({emitEvent:!1})}))}createRequestMappingForm(){this.mappingForm.addControl("requestType",this.fb.control(ba.CONNECT_REQUEST,[])),this.mappingForm.addControl("requestValue",this.fb.group({connectRequests:this.fb.group({topicFilter:["",[ne.required,ne.pattern($e)]],deviceInfo:[{},[]]}),disconnectRequests:this.fb.group({topicFilter:["",[ne.required,ne.pattern($e)]],deviceInfo:[{},[]]}),attributeRequests:this.fb.group({topicFilter:["",[ne.required,ne.pattern($e)]],deviceInfo:this.fb.group({deviceNameExpressionSource:[ya.MSG,[]],deviceNameExpression:["",[ne.required]]}),attributeNameExpressionSource:[ya.MSG,[]],attributeNameExpression:["",[ne.required,ne.pattern($e)]],topicExpression:["",[ne.required,ne.pattern($e)]],valueExpression:["",[ne.required,ne.pattern($e)]],retain:[!1,[]]}),attributeUpdates:this.fb.group({deviceNameFilter:["",[ne.required,ne.pattern($e)]],attributeFilter:["",[ne.required,ne.pattern($e)]],topicExpression:["",[ne.required,ne.pattern($e)]],valueExpression:["",[ne.required,ne.pattern($e)]],retain:[!0,[]]}),serverSideRpc:this.fb.group({type:[Ja.TWO_WAY,[]],deviceNameFilter:["",[ne.required,ne.pattern($e)]],methodFilter:["",[ne.required,ne.pattern($e)]],requestTopicExpression:["",[ne.required,ne.pattern($e)]],responseTopicExpression:["",[ne.required,ne.pattern($e)]],valueExpression:["",[ne.required,ne.pattern($e)]],responseTopicQoS:[0,[]],responseTimeout:[1e4,[ne.required,ne.min(1)]]})})),this.mappingForm.get("requestType").valueChanges.pipe(Pe(this.mappingForm.get("requestType").value),be(this.destroy$)).subscribe((e=>{const t=this.mappingForm.get("requestValue");t.get("connectRequests").disable({emitEvent:!1}),t.get("disconnectRequests").disable({emitEvent:!1}),t.get("attributeRequests").disable({emitEvent:!1}),t.get("attributeUpdates").disable({emitEvent:!1}),t.get("serverSideRpc").disable({emitEvent:!1}),t.get(e).enable()})),this.mappingForm.get("requestValue.serverSideRpc.type").valueChanges.pipe(be(this.destroy$)).subscribe((e=>{const t=this.mappingForm.get("requestValue.serverSideRpc");e===Ja.ONE_WAY?(t.get("responseTopicExpression").disable({emitEvent:!1}),t.get("responseTopicQoS").disable({emitEvent:!1}),t.get("responseTimeout").disable({emitEvent:!1})):(t.get("responseTopicExpression").enable({emitEvent:!1}),t.get("responseTopicQoS").enable({emitEvent:!1}),t.get("responseTimeout").enable({emitEvent:!1}))})),this.mappingForm.patchValue(this.getFormValueData())}createOPCUAMappingForm(){this.mappingForm=this.fb.group({deviceNodeSource:[qa.PATH,[]],deviceNodePattern:["",[ne.required]],deviceInfo:[{},[]],attributes:[[],[]],timeseries:[[],[]],rpc_methods:[[],[]],attributes_updates:[[],[]]}),this.mappingForm.patchValue(this.getFormValueData())}static{this.ɵfac=function(e){return new(e||ll)(t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(de.Router),t.ɵɵdirectiveInject(se),t.ɵɵdirectiveInject(pe.MatDialogRef),t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(je.TbPopoverService),t.ɵɵdirectiveInject(t.Renderer2),t.ɵɵdirectiveInject(t.ViewContainerRef),t.ɵɵdirectiveInject(Ne.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ll,selectors:[["tb-mapping-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:26,vars:19,consts:[["attributesButton",""],["telemetryButton",""],["keysButton",""],["opcAttributesButton",""],["opcTelemetryButton",""],["attributesUpdatesButton",""],["rpcMethodsButton",""],[1,"key-mapping",3,"formGroup"],["color","primary"],[1,"flex-1"],[3,"tb-help"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content",""],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-hint","tb-primary-fill"],[3,"ngSwitch"],[3,"ngSwitchCase"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","primary","type","button","cdkFocusInitial","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex"],["matInput","","name","value","formControlName","topicFilter",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],[1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["formControlName","subscriptionQos"],[3,"value",4,"ngFor","ngForOf"],["formGroupName","converter"],[1,"tb-form-row","space-between","tb-flex"],["translate","",1,"fixed-title-width"],["formControlName","type","appearance","fill"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[3,"formGroupName","ngSwitch"],["class","tb-form-panel no-border no-padding",4,"ngIf"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[3,"value"],["formControlName","deviceInfo","required","true",3,"convertorType","deviceInfoType"],["formControlName","deviceInfo","required","true",3,"deviceInfoType","convertorType","sourceTypes"],[1,"tb-flex","ellipsis-chips-container"],[1,"tb-flex",3,"tbEllipsisChipList"],[4,"ngFor","ngForOf"],[1,"mat-mdc-chip","ellipsis-chip"],[1,"ellipsis-text"],["type","button","mat-icon-button","","color","primary","matTooltipPosition","above",3,"click","matTooltip"],["matButtonIcon",""],[1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","name","value","formControlName","extension",3,"placeholder"],[1,"tb-form-row","space-between","same-padding","tb-flex","column"],["formControlName","requestType"],["formGroupName","requestValue"],[3,"formGroup","ngSwitch"],["class","tb-form-row column-xs",4,"ngIf"],["matInput","","name","value",3,"formControl","placeholder"],["formControlName","deviceInfo","required","true",3,"deviceInfoType"],["translate","",1,"tb-form-panel-title","tb-required"],["translate","",1,"tb-form-hint","tb-primary-fill"],["formGroupName","deviceInfo",1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-flex","no-flex","align-center"],["translate","",1,"tb-required"],[1,"flex","flex-1"],["formControlName","deviceNameExpressionSource"],["matInput","","name","value","formControlName","deviceNameExpression",3,"placeholder"],["formControlName","attributeNameExpressionSource"],["matInput","","name","value","formControlName","attributeNameExpression",3,"placeholder"],["matInput","","name","value","formControlName","valueExpression",3,"placeholder"],["matInput","","name","value","formControlName","topicExpression",3,"placeholder"],[1,"tb-form-row"],["formControlName","retain",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["matInput","","name","value","formControlName","deviceNameFilter",3,"placeholder"],["matInput","","name","value","formControlName","attributeFilter",3,"placeholder"],[1,"tb-flex","row","center","align-center","no-gap","fill-width"],["matInput","","name","value","formControlName","methodFilter",3,"placeholder"],["matInput","","name","value","formControlName","requestTopicExpression",3,"placeholder"],[4,"ngIf"],["matInput","","name","value","formControlName","responseTopicExpression",3,"placeholder"],["formControlName","responseTopicQoS"],["matInput","","name","value","type","number","min","1","formControlName","responseTimeout",3,"placeholder"],["translate","",1,"tb-flex","no-flex","align-center"],[1,"tb-required",3,"tb-hint-tooltip-icon"],[1,"tb-flex","device-config"],["formControlName","deviceNodeSource"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","device-node-pattern-field"],["matInput","","name","value","formControlName","deviceNodePattern",3,"placeholder"],["formControlName","deviceInfo","required","true",3,"connectorType","sourceTypes","deviceInfoType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",7)(1,"mat-toolbar",8)(2,"h2"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",9)(6,"div",10),t.ɵɵelementStart(7,"button",11),t.ɵɵlistener("click",(function(){return n.cancel()})),t.ɵɵelementStart(8,"mat-icon",12),t.ɵɵtext(9,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",13)(11,"div",14)(12,"div",15),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(15,16),t.ɵɵtemplate(16,Mp,33,24,"ng-template",17)(17,tl,14,9,"ng-template",17)(18,pl,69,44,"ng-template",17),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()(),t.ɵɵelementStart(19,"div",18)(20,"button",19),t.ɵɵlistener("click",(function(){return n.cancel()})),t.ɵɵtext(21),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"button",20),t.ɵɵlistener("click",(function(){return n.add()})),t.ɵɵtext(24),t.ɵɵpipe(25,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.mappingForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,11,n.MappingTypeTranslationsMap.get(null==n.data?null:n.data.mappingType))),t.ɵɵadvance(3),t.ɵɵproperty("tb-help",n.HelpLinkByMappingTypeMap.get(n.data.mappingType)),t.ɵɵadvance(7),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(14,13,n.MappingHintTranslationsMap.get(null==n.data?null:n.data.mappingType))," "),t.ɵɵadvance(2),t.ɵɵproperty("ngSwitch",n.data.mappingType),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingType.DATA),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingType.REQUESTS),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.MappingType.OPCUA),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(22,15,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.mappingForm.invalid||!n.mappingForm.dirty||!n.keysPopupClosed),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(25,17,n.data.buttonTitle)," "))},dependencies:t.ɵɵgetComponentDepsFactory(ll,[V,b,as,aa,Ss]),styles:['@charset "UTF-8";[_nghost-%COMP%]{display:grid;height:100%}[_nghost-%COMP%] .key-mapping[_ngcontent-%COMP%]{max-width:900px;display:flex;flex-direction:column}[_nghost-%COMP%] .key-mapping[_ngcontent-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{min-height:64px}[_nghost-%COMP%] .key-mapping[_ngcontent-%COMP%] tb-toggle-select[_ngcontent-%COMP%]{padding:4px 0}[_nghost-%COMP%] .mat-mdc-dialog-content[_ngcontent-%COMP%]{height:670px}[_nghost-%COMP%] .ellipsis-chips-container[_ngcontent-%COMP%]{max-width:70%}[_nghost-%COMP%] .key-mapping .mat-mdc-chip-listbox .mdc-evolution-chip-set__chips{justify-content:flex-end;align-items:center;flex-wrap:nowrap}[_nghost-%COMP%] .tb-form-row .fixed-title-width{min-width:40px;width:35%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .tb-form-row .mat-mdc-form-field{width:0}[_nghost-%COMP%] .see-example{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}[_nghost-%COMP%] .device-config{gap:12px;padding-left:10px;padding-right:10px}[_nghost-%COMP%] .device-node-pattern-field{flex-basis:3%}']})}}e("MappingDialogComponent",ll);const cl=["searchInput"],dl=()=>({minWidth:"96px",textAlign:"center"});function ml(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",7)(1,"div",24)(2,"span",25),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()(),t.ɵɵelement(5,"span",9),t.ɵɵelementStart(6,"button",11),t.ɵɵpipe(7,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.manageMapping(n))})),t.ɵɵelementStart(8,"mat-icon"),t.ɵɵtext(9,"add"),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"button",11),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.enterFilterMode())})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"search"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,e.mappingTypeTranslationsMap.get(e.mappingType))),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,5,"action.add")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(11,7,"action.search"))}}function ul(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-header-cell",29),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext();t.ɵɵclassProp("request-column",n.mappingType===n.mappingTypeEnum.REQUESTS),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,3,e.title)," ")}}function gl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",30),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext().$implicit,r=t.ɵɵnextContext();t.ɵɵclassProp("request-column",r.mappingType===r.mappingTypeEnum.REQUESTS),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e[a.def]," ")}}function yl(e,n){if(1&e&&(t.ɵɵelementContainerStart(0,26),t.ɵɵtemplate(1,ul,3,5,"mat-header-cell",27)(2,gl,2,3,"mat-cell",28),t.ɵɵelementContainerEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("matColumnDef",e.def)}}function hl(e,n){1&e&&t.ɵɵelement(0,"mat-header-cell",31)}function fl(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",11),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageMapping(n,a))})),t.ɵɵelementStart(2,"tb-icon"),t.ɵɵtext(3,"edit"),t.ɵɵelementEnd()(),t.ɵɵelementStart(4,"button",11),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteMapping(n,a))})),t.ɵɵelementStart(6,"tb-icon"),t.ɵɵtext(7,"delete"),t.ɵɵelementEnd()()}2&e&&(t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,2,"action.edit")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(5,4,"action.delete")))}function vl(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtemplate(1,fl,8,6,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(3,"div",32),t.ɵɵelementContainer(4,33),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",34)(6,"button",35),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(7,"mat-icon",36),t.ɵɵtext(8,"more_vert"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"mat-menu",37,2),t.ɵɵelementContainer(11,33),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(2),n=t.ɵɵreference(10);t.ɵɵadvance(3),t.ɵɵstyleMap(t.ɵɵpureFunction0(5,dl)),t.ɵɵadvance(),t.ɵɵproperty("ngTemplateOutlet",e),t.ɵɵadvance(2),t.ɵɵproperty("matMenuTriggerFor",n),t.ɵɵadvance(5),t.ɵɵproperty("ngTemplateOutlet",e)}}function bl(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",38)}function xl(e,n){1&e&&t.ɵɵelement(0,"mat-row")}class wl{set mappingType(e){this.mappingTypeValue!==e&&(this.mappingTypeValue=e)}get mappingType(){return this.mappingTypeValue}constructor(e,t,n,a){this.translate=e,this.dialog=t,this.dialogService=n,this.fb=a,this.required=!1,this.withReportStrategy=!0,this.mappingTypeTranslationsMap=_a,this.mappingTypeEnum=Na,this.displayedColumns=[],this.mappingColumns=[],this.textSearchMode=!1,this.hidePageSize=!1,this.activeValue=!1,this.dirtyValue=!1,this.textSearch=this.fb.control("",{nonNullable:!0}),this.onChange=()=>{},this.onTouched=()=>{},this.destroy$=new me,this.mappingFormGroup=this.fb.array([]),this.dirtyValue=!this.activeValue,this.dataSource=new Cl}ngOnInit(){this.setMappingColumns(),this.displayedColumns.push(...this.mappingColumns.map((e=>e.def)),"actions"),this.mappingFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.updateTableData(e),this.onChange(e),this.onTouched()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}ngAfterViewInit(){this.textSearch.valueChanges.pipe(ke(150),Me(((e,t)=>(e??"")===t.trim())),be(this.destroy$)).subscribe((e=>{const t=e.trim();this.updateTableData(this.mappingFormGroup.value,t.trim())}))}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){this.mappingFormGroup.clear(),this.pushDataAsFormArrays(e)}validate(){return!this.required||this.mappingFormGroup.controls.length?null:{mappingFormGroup:{valid:!1}}}enterFilterMode(){this.textSearchMode=!0,setTimeout((()=>{this.searchInputField.nativeElement.focus(),this.searchInputField.nativeElement.setSelectionRange(0,0)}),10)}exitFilterMode(){this.updateTableData(this.mappingFormGroup.value),this.textSearchMode=!1,this.textSearch.reset()}manageMapping(e,t){e&&e.stopPropagation();const n=j(t)?this.mappingFormGroup.at(t).value:{};this.dialog.open(ll,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{mappingType:this.mappingType,value:n,buttonTitle:J(t)?"action.add":"action.apply",withReportStrategy:this.withReportStrategy}}).afterClosed().pipe(Ie(1),be(this.destroy$)).subscribe((e=>{e&&(j(t)?this.mappingFormGroup.at(t).patchValue(e):this.pushDataAsFormArrays([e]),this.mappingFormGroup.markAsDirty())}))}updateTableData(e,t){let n=e.map((e=>this.getMappingValue(e)));t&&(n=n.filter((e=>Object.values(e).some((e=>e.toString().toLowerCase().includes(t.toLowerCase())))))),this.dataSource.loadData(n)}deleteMapping(e,t){e&&e.stopPropagation(),this.dialogService.confirm(this.translate.instant("gateway.delete-mapping-title"),"",this.translate.instant("action.no"),this.translate.instant("action.yes"),!0).subscribe((e=>{e&&(this.mappingFormGroup.removeAt(t),this.mappingFormGroup.markAsDirty())}))}pushDataAsFormArrays(e){e?.length&&e.forEach((e=>this.mappingFormGroup.push(this.fb.control(e))))}getMappingValue(e){switch(this.mappingType){case Na.DATA:const t=va.get(e.converter?.type);return{topicFilter:e.topicFilter,QoS:e.subscriptionQos,converter:t?this.translate.instant(t):""};case Na.REQUESTS:let n;const a=e;return n=a.requestType===ba.ATTRIBUTE_UPDATE?a.requestValue.attributeFilter:a.requestType===ba.SERVER_SIDE_RPC?a.requestValue.methodFilter:a.requestValue.topicFilter,{requestType:e.requestType,type:this.translate.instant(xa.get(e.requestType)),details:n};case Na.OPCUA:const r=e.deviceInfo?.deviceNameExpression,i=e.deviceInfo?.deviceProfileExpression,{deviceNodePattern:o}=e;return{deviceNodePattern:o,deviceNamePattern:r,deviceProfileExpression:i};default:return{}}}setMappingColumns(){switch(this.mappingType){case Na.DATA:this.mappingColumns.push({def:"topicFilter",title:"gateway.topic-filter"},{def:"QoS",title:"gateway.mqtt-qos"},{def:"converter",title:"gateway.payload-type"});break;case Na.REQUESTS:this.mappingColumns.push({def:"type",title:"gateway.type"},{def:"details",title:"gateway.details"});break;case Na.OPCUA:this.mappingColumns.push({def:"deviceNodePattern",title:"gateway.device-node"},{def:"deviceNamePattern",title:"gateway.device-name"},{def:"deviceProfileExpression",title:"gateway.device-profile"})}}static{this.ɵfac=function(e){return new(e||wl)(t.ɵɵdirectiveInject(Ne.TranslateService),t.ɵɵdirectiveInject(pe.MatDialog),t.ɵɵdirectiveInject(A.DialogService),t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:wl,selectors:[["tb-mapping-table"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(cl,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.searchInputField=e.first)}},inputs:{required:"required",withReportStrategy:"withReportStrategy",mappingType:"mappingType"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>wl)),multi:!0},{provide:re,useExisting:i((()=>wl)),multi:!0}]),t.ɵɵStandaloneFeature],decls:40,vars:33,consts:[["searchInput",""],["rowActions",""],["cellActionsMenu","matMenu"],[1,"tb-mapping-table","tb-absolute-fill"],[1,"tb-mapping-table-content","flex","flex-col"],[1,"mat-mdc-table-toolbar"],["class","mat-toolbar-tools",4,"ngIf"],[1,"mat-toolbar-tools"],["mat-icon-button","","matTooltipPosition","above",3,"matTooltip"],[1,"flex-1"],["matInput","",3,"formControl","placeholder"],["mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],[1,"table-container"],["mat-table","",3,"dataSource"],[3,"matColumnDef",4,"ngFor","ngForOf"],["matColumnDef","actions","stickyEnd",""],["class","w-12",4,"matHeaderCellDef"],[4,"matCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],[4,"matRowDef","matRowDefColumns"],[1,"mat-headline-5","tb-absolute-fill","tb-add-new","items-center","justify-center"],["mat-button","",1,"connector",3,"click"],[1,"tb-mat-96"],["translate","",1,"no-data-found","items-center","justify-center"],[1,"title-container"],[1,"tb-mapping-table-title"],[3,"matColumnDef"],["class","table-value-column",3,"request-column",4,"matHeaderCellDef"],["tbTruncateWithTooltip","","class","table-value-column",3,"request-column",4,"matCellDef"],[1,"table-value-column"],["tbTruncateWithTooltip","",1,"table-value-column"],[1,"w-12"],[1,"lt-lg:!hidden","flex","flex-1","flex-row","items-stretch","justify-end"],[3,"ngTemplateOutlet"],[1,"gt-md:!hidden"],["mat-icon-button","",3,"click","matMenuTriggerFor"],[1,"material-icons"],["xPosition","before"],[1,"mat-row-select"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",3)(1,"div",4)(2,"mat-toolbar",5),t.ɵɵtemplate(3,ml,14,9,"div",6),t.ɵɵpipe(4,"async"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-toolbar",5)(6,"div",7)(7,"button",8),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"mat-icon"),t.ɵɵtext(10,"search"),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",9)(12,"mat-label"),t.ɵɵtext(13," "),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",10,0),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"button",11),t.ɵɵpipe(18,"translate"),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.exitFilterMode())})),t.ɵɵelementStart(19,"mat-icon"),t.ɵɵtext(20,"close"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(21,"div",12)(22,"table",13),t.ɵɵtemplate(23,yl,3,1,"ng-container",14),t.ɵɵelementContainerStart(24,15),t.ɵɵtemplate(25,hl,1,0,"mat-header-cell",16)(26,vl,12,6,"mat-cell",17),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(27,bl,1,0,"mat-header-row",18)(28,xl,1,0,"mat-row",19),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"section",20),t.ɵɵpipe(30,"async"),t.ɵɵelementStart(31,"button",21),t.ɵɵlistener("click",(function(a){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.manageMapping(a))})),t.ɵɵelementStart(32,"mat-icon",22),t.ɵɵtext(33,"add"),t.ɵɵelementEnd(),t.ɵɵelementStart(34,"span"),t.ɵɵtext(35),t.ɵɵpipe(36,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(37,"span",23),t.ɵɵpipe(38,"async"),t.ɵɵtext(39," widget.no-data-found "),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.textSearchMode),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!1===t.ɵɵpipeBind1(4,19,n.dataSource.isEmpty())),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,21,"action.search")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,23,"common.enter-search")),t.ɵɵproperty("formControl",n.textSearch),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,25,"action.close")),t.ɵɵadvance(5),t.ɵɵproperty("dataSource",n.dataSource),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.mappingColumns),t.ɵɵadvance(4),t.ɵɵproperty("matHeaderRowDef",n.displayedColumns)("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",n.displayedColumns),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",n.textSearchMode||!1===t.ɵɵpipeBind1(30,27,n.dataSource.isEmpty())),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(36,29,"gateway.add-mapping")),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode||!1===t.ɵɵpipeBind1(38,31,n.dataSource.isEmpty())))},dependencies:t.ɵɵgetComponentDepsFactory(wl,[V,b,na,ll]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%]{width:100%;height:100%;background:#fff;overflow:hidden}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content.tb-outlined-border[_ngcontent-%COMP%]{box-shadow:0 0 #0003,0 0 #00000024,0 0 #0000001f;border:solid 1px #e0e0e0;border-radius:4px}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .mat-toolbar-tools[_ngcontent-%COMP%]{min-height:auto}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{overflow:hidden}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .tb-mapping-table-title[_ngcontent-%COMP%]{padding-right:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%]{overflow:auto}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%]{table-layout:fixed;min-width:450px}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%] .table-value-column[_ngcontent-%COMP%]{padding:0 12px;width:21%}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%] .table-value-column.request-column[_ngcontent-%COMP%]{width:35%}[_nghost-%COMP%] .tb-mapping-table[_ngcontent-%COMP%] .tb-mapping-table-content[_ngcontent-%COMP%] .ellipsis[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .no-data-found[_ngcontent-%COMP%]{height:calc(100% - 120px)}@media screen and (max-width: 599px){[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{height:auto;min-height:100px}[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%] .tb-mapping-table-title[_ngcontent-%COMP%]{padding-bottom:5px;width:100%}}[_nghost-%COMP%] mat-cell.tb-value-cell{cursor:pointer}[_nghost-%COMP%] mat-cell.tb-value-cell .mat-icon{height:24px;width:24px;font-size:24px;color:#757575}'],changeDetection:o.OnPush})}}e("MappingTableComponent",wl),qe([k()],wl.prototype,"required",void 0),qe([k()],wl.prototype,"withReportStrategy",void 0);class Cl extends N{constructor(){super()}}function Sl(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",7),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SecurityTypeTranslationsMap.get(e))," ")}}function El(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",17),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.username-required"))}function Tl(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",8)(1,"div",9),t.ɵɵtext(2,"gateway.username"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",10)(4,"mat-form-field",11),t.ɵɵelement(5,"input",12),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,El,3,3,"mat-icon",13),t.ɵɵelementEnd()()(),t.ɵɵelementStart(8,"div",8)(9,"div",9),t.ɵɵtext(10,"gateway.password"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"div",10)(12,"mat-form-field",11),t.ɵɵelement(13,"input",14),t.ɵɵpipe(14,"translate"),t.ɵɵelementStart(15,"div",15),t.ɵɵelement(16,"tb-toggle-password",16),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,3,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.securityFormGroup.get("username").hasError("required")&&e.securityFormGroup.get("username").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(14,5,"gateway.set"))}}function Il(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",7),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function kl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",17),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.username-required"))}function Ml(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",8)(2,"div",9),t.ɵɵtext(3,"gateway.mode"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",10)(5,"mat-form-field",11)(6,"mat-select",24),t.ɵɵtemplate(7,Il,2,2,"mat-option",4),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(8,"div",8)(9,"div",9),t.ɵɵtext(10,"gateway.username"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"div",10)(12,"mat-form-field",11),t.ɵɵelement(13,"input",12),t.ɵɵpipe(14,"translate"),t.ɵɵtemplate(15,kl,3,3,"mat-icon",13),t.ɵɵelementEnd()()(),t.ɵɵelementStart(16,"div",8)(17,"div",9),t.ɵɵtext(18,"gateway.password"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"div",10)(20,"mat-form-field",11),t.ɵɵelement(21,"input",14),t.ɵɵpipe(22,"translate"),t.ɵɵelementStart(23,"div",15),t.ɵɵelement(24,"tb-toggle-password",16),t.ɵɵelementEnd()()()(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",e.modeTypes),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(14,4,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.securityFormGroup.get("username").hasError("required")&&e.securityFormGroup.get("username").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(22,6,"gateway.set"))}}function Pl(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",18),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",8)(4,"div",19),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"div",10)(8,"mat-form-field",11),t.ɵɵelement(9,"input",20),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(11,"div",8)(12,"div",19),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"div",10)(16,"mat-form-field",11),t.ɵɵelement(17,"input",21),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(19,"div",8)(20,"div",19),t.ɵɵtext(21),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"div",10)(24,"mat-form-field",11),t.ɵɵelement(25,"input",22),t.ɵɵpipe(26,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(27,Ml,25,8,"ng-container",23)),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,8,"gateway.path-hint")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(6,10,"gateway.CA-certificate-path")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(10,12,"gateway.set")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,14,"gateway.private-key-path")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(18,16,"gateway.set")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(22,18,"gateway.client-cert-path")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(26,20,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.extendCertificatesModel)}}e("MappingDatasource",Cl);class Fl{constructor(e,t){this.fb=e,this.cdr=t,this.title="gateway.security",this.extendCertificatesModel=!1,this.BrokerSecurityType=Ba,this.securityTypes=Object.values(Ba),this.modeTypes=Object.values(Ra),this.SecurityTypeTranslationsMap=Ga,this.destroy$=new me}ngOnInit(){this.securityFormGroup=this.fb.group({type:[Ba.ANONYMOUS,[]],username:["",[ne.required,ne.pattern($e)]],password:["",[ne.pattern($e)]],pathToCACert:["",[ne.pattern($e)]],pathToPrivateKey:["",[ne.pattern($e)]],pathToClientCert:["",[ne.pattern($e)]]}),this.extendCertificatesModel&&this.securityFormGroup.addControl("mode",this.fb.control(Ra.NONE,[])),this.securityFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{K(e),this.onChange(e),this.onTouched()})),this.securityFormGroup.get("type").valueChanges.pipe(be(this.destroy$)).subscribe((e=>this.updateValidators(e)))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}writeValue(e){if(e)e.type||(e.type=Ba.ANONYMOUS),this.updateValidators(e.type),this.securityFormGroup.reset(e,{emitEvent:!1});else{const e={type:Ba.ANONYMOUS};this.securityFormGroup.reset(e,{emitEvent:!1})}this.cdr.markForCheck()}validate(){return this.securityFormGroup.get("type").value!==Ba.BASIC||this.securityFormGroup.valid?null:{securityForm:{valid:!1}}}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}updateValidators(e){if(e)if(this.securityFormGroup.get("username").disable({emitEvent:!1}),this.securityFormGroup.get("password").disable({emitEvent:!1}),this.securityFormGroup.get("pathToCACert").disable({emitEvent:!1}),this.securityFormGroup.get("pathToPrivateKey").disable({emitEvent:!1}),this.securityFormGroup.get("pathToClientCert").disable({emitEvent:!1}),this.securityFormGroup.get("mode")?.disable({emitEvent:!1}),e===Ba.BASIC)this.securityFormGroup.get("username").enable({emitEvent:!1}),this.securityFormGroup.get("password").enable({emitEvent:!1});else if(e===Ba.CERTIFICATES&&(this.securityFormGroup.get("pathToCACert").enable({emitEvent:!1}),this.securityFormGroup.get("pathToPrivateKey").enable({emitEvent:!1}),this.securityFormGroup.get("pathToClientCert").enable({emitEvent:!1}),this.extendCertificatesModel)){const e=this.securityFormGroup.get("mode");e&&!e.value&&e.setValue(Ra.NONE,{emitEvent:!1}),e?.enable({emitEvent:!1}),this.securityFormGroup.get("username").enable({emitEvent:!1}),this.securityFormGroup.get("password").enable({emitEvent:!1})}}static{this.ɵfac=function(e){return new(e||Fl)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Fl,selectors:[["tb-security-config"]],inputs:{title:"title",extendCertificatesModel:"extendCertificatesModel"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Fl)),multi:!0},{provide:re,useExisting:i((()=>Fl)),multi:!0}]),t.ɵɵStandaloneFeature],decls:10,vars:8,consts:[[1,"tb-form-row","space-between","same-padding","tb-flex","column",3,"formGroup"],[1,"tb-flex","row","space-between","align-center","no-gap","fill-width"],[1,"fixed-title-width","tb-required"],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],[3,"ngSwitch"],[3,"ngSwitchCase"],[3,"value"],[1,"tb-form-row","space-between","tb-flex","fill-width"],["translate","",1,"fixed-title-width"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","username",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","type","password","name","value","formControlName","password",3,"placeholder"],["matSuffix","",1,"tb-flex","no-gap","align-center","fill-height"],[1,"tb-flex","align-center","fill-height"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[1,"tb-form-hint","tb-primary-fill"],["tbTruncateWithTooltip","",1,"fixed-title-width"],["matInput","","name","value","formControlName","pathToCACert",3,"placeholder"],["matInput","","name","value","formControlName","pathToPrivateKey",3,"placeholder"],["matInput","","name","value","formControlName","pathToClientCert",3,"placeholder"],[4,"ngIf"],["formControlName","mode"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"tb-toggle-select",3),t.ɵɵtemplate(6,Sl,3,4,"tb-toggle-option",4),t.ɵɵelementEnd()(),t.ɵɵelementContainerStart(7,5),t.ɵɵtemplate(8,Tl,17,7,"ng-template",6)(9,Pl,28,22,"ng-template",6),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.securityFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,6,n.title)),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.securityTypes),t.ɵɵadvance(),t.ɵɵproperty("ngSwitch",n.securityFormGroup.get("type").value),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.BrokerSecurityType.BASIC),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.BrokerSecurityType.CERTIFICATES))},dependencies:t.ɵɵgetComponentDepsFactory(Fl,[V,b,na]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}'],changeDetection:o.OnPush})}}e("SecurityConfigComponent",Fl),qe([k()],Fl.prototype,"extendCertificatesModel",void 0);const Ol=()=>({min:1e3}),ql=()=>({min:50}),Bl=()=>({min:100});function Rl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",19),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.server-url-required"))}function Nl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",19),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind2(1,1,"gateway.timeout-error",t.ɵɵpureFunction0(4,Ol)))}function _l(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",20),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate(e.name)}}function Dl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",19),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind2(1,1,"gateway.scan-period-error",t.ɵɵpureFunction0(4,Ol)))}function Vl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",19),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind2(1,1,"gateway.poll-period-error",t.ɵɵpureFunction0(4,ql)))}function Gl(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",1)(1,"div",6),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"div",7),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"mat-form-field",3),t.ɵɵelement(7,"input",21),t.ɵɵpipe(8,"translate"),t.ɵɵtemplate(9,Vl,3,5,"mat-icon",5),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,4,"gateway.hints.poll-period")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,6,"gateway.poll-period")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,8,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(e.serverConfigFormGroup.get("pollPeriodInMillis").hasError("required")||e.serverConfigFormGroup.get("pollPeriodInMillis").hasError("min"))&&e.serverConfigFormGroup.get("pollPeriodInMillis").touched)}}function Al(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",19),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind2(1,1,"gateway.sub-check-period-error",t.ɵɵpureFunction0(4,Bl)))}class jl{constructor(e){this.fb=e,this.hideNewFields=!1,this.securityPolicyTypes=Va,this.destroy$=new me,this.serverConfigFormGroup=this.fb.group({url:["",[ne.required,ne.pattern($e)]],timeoutInMillis:[1e3,[ne.required,ne.min(1e3)]],scanPeriodInMillis:[_,[ne.required,ne.min(1e3)]],pollPeriodInMillis:[5e3,[ne.required,ne.min(50)]],enableSubscriptions:[!0,[]],subCheckPeriodInMillis:[100,[ne.required,ne.min(100)]],showMap:[!1,[]],security:[Da.BASIC128,[]],identity:[]}),this.serverConfigFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}ngAfterViewInit(){this.hideNewFields&&this.serverConfigFormGroup.get("pollPeriodInMillis").disable({emitEvent:!1})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}validate(){return this.serverConfigFormGroup.valid?null:{serverConfigFormGroup:{valid:!1}}}writeValue(e){const{timeoutInMillis:t=1e3,scanPeriodInMillis:n=_,pollPeriodInMillis:a=5e3,enableSubscriptions:r=!0,subCheckPeriodInMillis:i=100,showMap:o=!1,security:s=Da.BASIC128,identity:p={}}=e;this.serverConfigFormGroup.reset({...e,timeoutInMillis:t,scanPeriodInMillis:n,pollPeriodInMillis:a,enableSubscriptions:r,subCheckPeriodInMillis:i,showMap:o,security:s,identity:p},{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||jl)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:jl,selectors:[["tb-opc-server-config"]],inputs:{hideNewFields:"hideNewFields"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>jl)),multi:!0},{provide:re,useExisting:i((()=>jl)),multi:!0}]),t.ɵɵStandaloneFeature],decls:62,vars:56,consts:[[1,"tb-form-panel","no-border","no-padding","padding-top",3,"formGroup"],[1,"tb-form-row","column-xs"],["tbTruncateWithTooltip","","translate","",1,"fixed-title-width"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","url",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],[1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip",""],["matInput","","type","number","min","1000","name","value","formControlName","timeoutInMillis",3,"placeholder"],["formControlName","security"],[3,"value",4,"ngFor","ngForOf"],["matInput","","type","number","min","1000","name","value","formControlName","scanPeriodInMillis",3,"placeholder"],["class","tb-form-row column-xs",4,"ngIf"],["matInput","","type","number","min","100","name","value","formControlName","subCheckPeriodInMillis",3,"placeholder"],[1,"tb-form-row"],["formControlName","enableSubscriptions",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["formControlName","showMap",1,"mat-slide"],["formControlName","identity",3,"extendCertificatesModel"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[3,"value"],["matInput","","type","number","min","50","name","value","formControlName","pollPeriodInMillis",3,"placeholder"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"gateway.server-url"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",3),t.ɵɵelement(5,"input",4),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Rl,3,3,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",1)(9,"div",6),t.ɵɵpipe(10,"translate"),t.ɵɵelementStart(11,"div",7),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"mat-form-field",3),t.ɵɵelement(15,"input",8),t.ɵɵpipe(16,"translate"),t.ɵɵtemplate(17,Nl,3,5,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",1)(19,"div",6),t.ɵɵpipe(20,"translate"),t.ɵɵelementStart(21,"div",7),t.ɵɵtext(22),t.ɵɵpipe(23,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(24,"mat-form-field",3)(25,"mat-select",9),t.ɵɵtemplate(26,_l,2,2,"mat-option",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(27,"div",1)(28,"div",6),t.ɵɵpipe(29,"translate"),t.ɵɵelementStart(30,"div",7),t.ɵɵtext(31),t.ɵɵpipe(32,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(33,"mat-form-field",3),t.ɵɵelement(34,"input",11),t.ɵɵpipe(35,"translate"),t.ɵɵtemplate(36,Dl,3,5,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵtemplate(37,Gl,10,10,"div",12),t.ɵɵelementStart(38,"div",1)(39,"div",6),t.ɵɵpipe(40,"translate"),t.ɵɵelementStart(41,"div",7),t.ɵɵtext(42),t.ɵɵpipe(43,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(44,"mat-form-field",3),t.ɵɵelement(45,"input",13),t.ɵɵpipe(46,"translate"),t.ɵɵtemplate(47,Al,3,5,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(48,"div",14)(49,"mat-slide-toggle",15)(50,"mat-label",16),t.ɵɵpipe(51,"translate"),t.ɵɵelementStart(52,"div",7),t.ɵɵtext(53),t.ɵɵpipe(54,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(55,"div",14)(56,"mat-slide-toggle",17)(57,"mat-label",16),t.ɵɵpipe(58,"translate"),t.ɵɵtext(59),t.ɵɵpipe(60,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelement(61,"tb-security-config",18),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.serverConfigFormGroup),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,24,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.serverConfigFormGroup.get("url").hasError("required")&&n.serverConfigFormGroup.get("url").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(10,26,"gateway.hints.opc-timeout")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,28,"gateway.timeout")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,30,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(n.serverConfigFormGroup.get("timeoutInMillis").hasError("required")||n.serverConfigFormGroup.get("timeoutInMillis").hasError("min"))&&n.serverConfigFormGroup.get("timeoutInMillis").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(20,32,"gateway.hints.security-policy")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(23,34,"gateway.security-policy")),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",n.securityPolicyTypes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(29,36,"gateway.hints.scan-period")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(32,38,"gateway.scan-period")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(35,40,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(n.serverConfigFormGroup.get("scanPeriodInMillis").hasError("required")||n.serverConfigFormGroup.get("scanPeriodInMillis").hasError("min"))&&n.serverConfigFormGroup.get("scanPeriodInMillis").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.hideNewFields),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(40,42,"gateway.hints.sub-check-period")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(43,44,"gateway.sub-check-period")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(46,46,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(n.serverConfigFormGroup.get("subCheckPeriodInMillis").hasError("required")||n.serverConfigFormGroup.get("subCheckPeriodInMillis").hasError("min"))&&n.serverConfigFormGroup.get("subCheckPeriodInMillis").touched),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(51,48,"gateway.hints.enable-subscription")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(54,50,"gateway.enable-subscription")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(58,52,"gateway.hints.show-map")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(60,54,"gateway.show-map")," "),t.ɵɵadvance(2),t.ɵɵproperty("extendCertificatesModel",!0))},dependencies:t.ɵɵgetComponentDepsFactory(jl,[V,b,Fl,na]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}'],changeDetection:o.OnPush})}}e("OpcServerConfigComponent",jl),qe([k()],jl.prototype,"hideNewFields",void 0);class Ll extends Ar{constructor(){super(...arguments),this.withReportStrategy=!0,this.mappingTypes=Na,this.isLegacy=!0}initBasicFormGroup(){return this.fb.group({mapping:[],server:[]})}mapConfigToFormValue(e){return{server:e.server?Hr.mapServerToUpgradedVersion(e.server):{},mapping:e.server?.mapping?Hr.mapMappingToUpgradedVersion(e.server.mapping):[]}}getMappedValue(e){return{server:Hr.mapServerToDowngradedVersion(e)}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Ll)))(n||Ll)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ll,selectors:[["tb-opc-ua-legacy-basic-config"]],inputs:{withReportStrategy:"withReportStrategy"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Ll)),multi:!0},{provide:re,useExisting:i((()=>Ll)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:11,vars:17,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","server",3,"hideNewFields"],[1,"tb-form-panel","no-border","no-padding","padding-top","tb-flex","fill-height"],["formControlName","mapping",3,"required","withReportStrategy","mappingType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-opc-server-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4),t.ɵɵelement(10,"tb-mapping-table",5),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,11,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,13,"gateway.server"),"*"),t.ɵɵadvance(2),t.ɵɵproperty("hideNewFields",n.isLegacy),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,15,"gateway.data-mapping"),"*"),t.ɵɵadvance(3),t.ɵɵproperty("required",!0)("withReportStrategy",n.withReportStrategy)("mappingType",n.mappingTypes.OPCUA))},dependencies:t.ɵɵgetComponentDepsFactory(Ll,[V,b,Fl,wl,jl]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}e("OpcUaLegacyBasicConfigComponent",Ll),qe([k()],Ll.prototype,"withReportStrategy",void 0);class Ul extends Ar{constructor(){super(...arguments),this.withReportStrategy=!0,this.mappingTypes=Na,this.isLegacy=!1}initBasicFormGroup(){return this.fb.group({mapping:[],server:[]})}mapConfigToFormValue(e){return{server:e.server??{},mapping:e.mapping??[]}}getMappedValue(e){return{server:e.server,mapping:e.mapping}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Ul)))(n||Ul)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ul,selectors:[["tb-opc-ua-basic-config"]],inputs:{withReportStrategy:"withReportStrategy"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Ul)),multi:!0},{provide:re,useExisting:i((()=>Ul)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:11,vars:17,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","server",3,"hideNewFields"],[1,"tb-form-panel","no-border","no-padding","padding-top","tb-flex","fill-height"],["formControlName","mapping",3,"required","withReportStrategy","mappingType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-opc-server-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4),t.ɵɵelement(10,"tb-mapping-table",5),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,11,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,13,"gateway.server"),"*"),t.ɵɵadvance(2),t.ɵɵproperty("hideNewFields",n.isLegacy),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,15,"gateway.data-mapping"),"*"),t.ɵɵadvance(3),t.ɵɵproperty("required",!0)("withReportStrategy",n.withReportStrategy)("mappingType",n.mappingTypes.OPCUA))},dependencies:t.ɵɵgetComponentDepsFactory(Ul,[V,b,Fl,wl,jl]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}e("OpcUaBasicConfigComponent",Ul),qe([k()],Ul.prototype,"withReportStrategy",void 0);class $l extends Ar{constructor(){super(...arguments),this.withReportStrategy=!0,this.MappingType=Na}initBasicFormGroup(){return this.fb.group({mapping:[],requestsMapping:[],broker:[],workers:[]})}getRequestDataArray(e){const t=[];return Y(e)&&Object.keys(e).forEach((n=>{for(const a of e[n])t.push({requestType:n,requestValue:a})})),t}getRequestDataObject(e){return e.reduce(((e,{requestType:t,requestValue:n})=>(e[t].push(n),e)),{connectRequests:[],disconnectRequests:[],attributeRequests:[],attributeUpdates:[],serverSideRpc:[]})}getBrokerMappedValue(e,t){return{...e,maxNumberOfWorkers:t.maxNumberOfWorkers??100,maxMessageNumberPerWorker:t.maxMessageNumberPerWorker??10}}writeValue(e){this.basicFormGroup.setValue(this.mapConfigToFormValue(e),{emitEvent:!1})}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory($l)))(n||$l)}})()}static{this.ɵdir=t.ɵɵdefineDirective({type:$l,inputs:{withReportStrategy:"withReportStrategy"},features:[t.ɵɵInheritDefinitionFeature]})}}function zl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",8),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.max-number-of-workers-required"))}function Kl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",8),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.max-messages-queue-for-worker-required"))}e("MqttBasicConfigDirective",$l),qe([k()],$l.prototype,"withReportStrategy",void 0);class Hl{constructor(e){this.fb=e,this.destroy$=new me,this.workersConfigFormGroup=this.fb.group({maxNumberOfWorkers:[100,[ne.required,ne.min(1)]],maxMessageNumberPerWorker:[10,[ne.required,ne.min(1)]]}),this.workersConfigFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){const{maxNumberOfWorkers:t,maxMessageNumberPerWorker:n}=e;this.workersConfigFormGroup.reset({maxNumberOfWorkers:t||100,maxMessageNumberPerWorker:n||10},{emitEvent:!1})}validate(){return this.workersConfigFormGroup.valid?null:{workersConfigFormGroup:{valid:!1}}}static{this.ɵfac=function(e){return new(e||Hl)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Hl,selectors:[["tb-workers-config-control"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Hl)),multi:!0},{provide:re,useExisting:i((()=>Hl)),multi:!0}]),t.ɵɵStandaloneFeature],decls:21,vars:21,consts:[[1,"tb-form-panel","no-border","no-padding","padding-top",3,"formGroup"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width","tb-required",2,"width","50%",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip",""],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","type","number","min","1","formControlName","maxNumberOfWorkers",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","name","value","type","number","min","1","formControlName","maxMessageNumberPerWorker",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵpipe(3,"translate"),t.ɵɵelementStart(4,"div",3),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",4),t.ɵɵelement(8,"input",5),t.ɵɵpipe(9,"translate"),t.ɵɵtemplate(10,zl,3,3,"mat-icon",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"div",1)(12,"div",2),t.ɵɵpipe(13,"translate"),t.ɵɵelementStart(14,"div",3),t.ɵɵtext(15),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"mat-form-field",4),t.ɵɵelement(18,"input",7),t.ɵɵpipe(19,"translate"),t.ɵɵtemplate(20,Kl,3,3,"mat-icon",6),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.workersConfigFormGroup),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,9,"gateway.max-number-of-workers-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(6,11,"gateway.max-number-of-workers")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(9,13,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.workersConfigFormGroup.get("maxNumberOfWorkers").hasError("min")||n.workersConfigFormGroup.get("maxNumberOfWorkers").hasError("required")&&n.workersConfigFormGroup.get("maxNumberOfWorkers").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(13,15,"gateway.max-messages-queue-for-worker-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(16,17,"gateway.max-messages-queue-for-worker")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(19,19,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.workersConfigFormGroup.get("maxMessageNumberPerWorker").hasError("min")||n.workersConfigFormGroup.get("maxMessageNumberPerWorker").hasError("required")&&n.workersConfigFormGroup.get("maxMessageNumberPerWorker").touched))},dependencies:t.ɵɵgetComponentDepsFactory(Hl,[V,b,na]),encapsulation:2,changeDetection:o.OnPush})}}function Wl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",13),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.host-required"))}function Ql(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",13),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.brokerConfigFormGroup.get("port")))}}function Jl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",14),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate(e.name)}}function Yl(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",15),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.generate("clientId"))})),t.ɵɵelementStart(2,"mat-icon"),t.ɵɵtext(3,"autorenew"),t.ɵɵelementEnd()()}2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.generate-client-id"))}e("WorkersConfigControlComponent",Hl);class Xl{constructor(e,t){this.fb=e,this.cdr=t,this.mqttVersions=ha,this.portLimits=Fa,this.destroy$=new me,this.brokerConfigFormGroup=this.fb.group({host:["",[ne.required,ne.pattern($e)]],port:[null,[ne.required,ne.min(Fa.MIN),ne.max(Fa.MAX)]],version:[5,[]],clientId:["tb_gw_"+X(5),[ne.pattern($e)]],security:[]}),this.brokerConfigFormGroup.valueChanges.subscribe((e=>{this.onChange(e),this.onTouched()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}generate(e){this.brokerConfigFormGroup.get(e)?.patchValue("tb_gw_"+X(5))}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){const{version:t=5,clientId:n=`tb_gw_${X(5)}`,security:a={}}=e;this.brokerConfigFormGroup.reset({...e,version:t,clientId:n,security:a},{emitEvent:!1}),this.cdr.markForCheck()}validate(){return this.brokerConfigFormGroup.valid?null:{brokerConfigFormGroup:{valid:!1}}}static{this.ɵfac=function(e){return new(e||Xl)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Xl,selectors:[["tb-broker-config-control"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Xl)),multi:!0},{provide:re,useExisting:i((()=>Xl)),multi:!0}]),t.ɵɵStandaloneFeature],decls:29,vars:16,consts:[[1,"tb-form-panel","no-border","no-padding","padding-top",3,"formGroup"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","host",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],["translate","",1,"fixed-title-width"],["formControlName","version"],[3,"value",4,"ngFor","ngForOf"],["matInput","","name","value","formControlName","clientId",3,"placeholder"],["type","button","matSuffix","","mat-icon-button","","aria-label","Generate","matTooltipPosition","above",3,"matTooltip","click",4,"ngIf"],["formControlName","security"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[3,"value"],["type","button","matSuffix","","mat-icon-button","","aria-label","Generate","matTooltipPosition","above",3,"click","matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"gateway.host"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",3),t.ɵɵelement(5,"input",4),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Wl,3,3,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",1)(9,"div",2),t.ɵɵtext(10,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field",3),t.ɵɵelement(12,"input",6),t.ɵɵpipe(13,"translate"),t.ɵɵtemplate(14,Ql,3,3,"mat-icon",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"div",1)(16,"div",7),t.ɵɵtext(17,"gateway.mqtt-version"),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"mat-form-field",3)(19,"mat-select",8),t.ɵɵtemplate(20,Jl,2,2,"mat-option",9),t.ɵɵelementEnd()()(),t.ɵɵelementStart(21,"div",1)(22,"div",7),t.ɵɵtext(23,"gateway.client-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(24,"mat-form-field",3),t.ɵɵelement(25,"input",10),t.ɵɵpipe(26,"translate"),t.ɵɵtemplate(27,Yl,4,3,"button",11),t.ɵɵelementEnd()(),t.ɵɵelement(28,"tb-security-config",12),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.brokerConfigFormGroup),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,10,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.brokerConfigFormGroup.get("host").hasError("required")&&n.brokerConfigFormGroup.get("host").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("min",n.portLimits.MIN),t.ɵɵpropertyInterpolate("max",n.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(13,12,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(n.brokerConfigFormGroup.get("port").hasError("required")||n.brokerConfigFormGroup.get("port").hasError("min")||n.brokerConfigFormGroup.get("port").hasError("max"))&&n.brokerConfigFormGroup.get("port").touched),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.mqttVersions),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(26,14,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!n.brokerConfigFormGroup.get("clientId").value))},dependencies:t.ɵɵgetComponentDepsFactory(Xl,[V,b,Fl,ns]),encapsulation:2,changeDetection:o.OnPush})}}e("BrokerConfigControlComponent",Xl);class Zl extends $l{mapConfigToFormValue(e){const{broker:t,mapping:n=[],requestsMapping:a}=e;return{workers:t&&(t.maxNumberOfWorkers||t.maxMessageNumberPerWorker)?{maxNumberOfWorkers:t.maxNumberOfWorkers,maxMessageNumberPerWorker:t.maxMessageNumberPerWorker}:{},mapping:n??[],broker:t??{},requestsMapping:this.getRequestDataArray(a)}}getMappedValue(e){const{broker:t,workers:n,mapping:a,requestsMapping:r}=e||{};return{broker:this.getBrokerMappedValue(t,n),mapping:a,requestsMapping:r?.length?this.getRequestDataObject(r):{}}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Zl)))(n||Zl)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:Zl,selectors:[["tb-mqtt-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Zl)),multi:!0},{provide:re,useExisting:i((()=>Zl)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:24,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","broker"],[1,"tb-form-panel","no-border","no-padding","padding-top","tb-flex","fill-height"],["formControlName","mapping",3,"withReportStrategy","required","mappingType"],["formControlName","requestsMapping",3,"withReportStrategy","mappingType"],[1,"tb-form-panel","no-border","no-padding"],["formControlName","workers"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-broker-config-control",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4),t.ɵɵelement(10,"tb-mapping-table",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-tab",1),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"div",4),t.ɵɵelement(14,"tb-mapping-table",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"mat-tab",1),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"div",7),t.ɵɵelement(18,"tb-workers-config-control",8),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,14,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,16,"gateway.broker.connection"),"*"),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,18,"gateway.data-mapping"),"*"),t.ɵɵadvance(3),t.ɵɵproperty("withReportStrategy",n.withReportStrategy)("required",!0)("mappingType",n.MappingType.DATA),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(12,20,"gateway.requests-mapping")),t.ɵɵadvance(3),t.ɵɵproperty("withReportStrategy",n.withReportStrategy)("mappingType",n.MappingType.REQUESTS),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(16,22,"gateway.workers-settings")))},dependencies:t.ɵɵgetComponentDepsFactory(Zl,[V,b,Fl,Hl,Xl,wl]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}e("MqttBasicConfigComponent",Zl);class ec extends $l{mapConfigToFormValue(e){const{broker:t,mapping:n=[],connectRequests:a=[],disconnectRequests:r=[],attributeRequests:i=[],attributeUpdates:o=[],serverSideRpc:s=[]}=e,p=Br.mapRequestsToUpgradedVersion({connectRequests:a,disconnectRequests:r,attributeRequests:i,attributeUpdates:o,serverSideRpc:s});return{workers:t&&(t.maxNumberOfWorkers||t.maxMessageNumberPerWorker)?{maxNumberOfWorkers:t.maxNumberOfWorkers,maxMessageNumberPerWorker:t.maxMessageNumberPerWorker}:{},mapping:Br.mapMappingToUpgradedVersion(n)||[],broker:t||{},requestsMapping:this.getRequestDataArray(p)}}getMappedValue(e){const{broker:t,workers:n,mapping:a,requestsMapping:r}=e||{},i=r?.length?this.getRequestDataObject(r):{};return{broker:this.getBrokerMappedValue(t,n),mapping:Br.mapMappingToDowngradedVersion(a),...Br.mapRequestsToDowngradedVersion(i)}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(ec)))(n||ec)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:ec,selectors:[["tb-mqtt-legacy-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>ec)),multi:!0},{provide:re,useExisting:i((()=>ec)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:24,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","broker"],[1,"tb-form-panel","no-border","no-padding","padding-top","tb-flex","fill-height"],["formControlName","mapping",3,"withReportStrategy","required","mappingType"],["formControlName","requestsMapping",3,"withReportStrategy","mappingType"],[1,"tb-form-panel","no-border","no-padding"],["formControlName","workers"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-broker-config-control",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4),t.ɵɵelement(10,"tb-mapping-table",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-tab",1),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"div",4),t.ɵɵelement(14,"tb-mapping-table",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"mat-tab",1),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"div",7),t.ɵɵelement(18,"tb-workers-config-control",8),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,14,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,16,"gateway.broker.connection"),"*"),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,18,"gateway.data-mapping"),"*"),t.ɵɵadvance(3),t.ɵɵproperty("withReportStrategy",n.withReportStrategy)("required",!0)("mappingType",n.MappingType.DATA),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(12,20,"gateway.requests-mapping")),t.ɵɵadvance(3),t.ɵɵproperty("withReportStrategy",n.withReportStrategy)("mappingType",n.MappingType.REQUESTS),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(16,22,"gateway.workers-settings")))},dependencies:t.ɵɵgetComponentDepsFactory(ec,[V,b,Fl,Hl,Xl,wl]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}e("MqttLegacyBasicConfigComponent",ec);class tc extends I{constructor(e,t,n,a,r){super(t,n,r),this.fb=e,this.store=t,this.router=n,this.data=a,this.dialogRef=r,this.portLimits=Fa,this.modbusProtocolTypes=Object.values(Ya),this.modbusMethodTypes=Object.values(Xa),this.modbusSerialMethodTypes=Object.values(Za),this.modbusParities=Object.values(er),this.modbusByteSizes=ir,this.modbusBaudrates=rr,this.modbusOrderType=Object.values(tr),this.ModbusProtocolType=Ya,this.ModbusParityLabelsMap=dr,this.ModbusProtocolLabelsMap=cr,this.ModbusMethodLabelsMap=lr,this.ReportStrategyDefaultValue=Vt,this.modbusHelpLink=q+"/docs/iot-gateway/config/modbus/#section-master-description-and-configuration-parameters",this.serialSpecificControlKeys=["serialPort","baudrate","stopbits","bytesize","parity","strict"],this.tcpUdpSpecificControlKeys=["port","security","host"],this.destroy$=new me,this.showSecurityControl=this.fb.control(!1),this.initializeSlaveFormGroup(),this.updateSlaveFormGroup(),this.updateControlsEnabling(this.data.value.type),this.observeTypeChange(),this.observeShowSecurity(),this.showSecurityControl.patchValue(!!this.data.value.security&&!U(this.data.value.security,{}))}get protocolType(){return this.slaveConfigFormGroup.get("type").value}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}cancel(){this.dialogRef.close(null)}add(){this.slaveConfigFormGroup.valid&&this.dialogRef.close(this.getSlaveResultData())}initializeSlaveFormGroup(){this.slaveConfigFormGroup=this.fb.group({type:[Ya.TCP],host:["",[ne.required,ne.pattern($e)]],port:[null,[ne.required,ne.min(Fa.MIN),ne.max(Fa.MAX)]],serialPort:["",[ne.required,ne.pattern($e)]],method:[Xa.SOCKET,[ne.required]],baudrate:[this.modbusBaudrates[0]],stopbits:[1],bytesize:[ir[0]],parity:[er.None],strict:[!0],unitId:[null,[ne.required]],deviceName:["",[ne.required,ne.pattern($e)]],deviceType:["",[ne.required,ne.pattern($e)]],timeout:[35],byteOrder:[tr.BIG],wordOrder:[tr.BIG],retries:[!0],retryOnEmpty:[!0],retryOnInvalid:[!0],pollPeriod:[5e3,[ne.required]],connectAttemptTimeMs:[5e3,[ne.required]],connectAttemptCount:[5,[ne.required]],waitAfterFailedAttemptsMs:[3e5,[ne.required]],values:[{}],security:[{}]}),this.addFieldsToFormGroup()}updateSlaveFormGroup(){this.slaveConfigFormGroup.patchValue({...this.data.value,port:this.data.value.type===Ya.Serial?null:this.data.value.port,serialPort:this.data.value.type===Ya.Serial?this.data.value.port:"",values:{attributes:this.data.value.attributes??[],timeseries:this.data.value.timeseries??[],attributeUpdates:this.data.value.attributeUpdates??[],rpc:this.data.value.rpc??[]}})}observeTypeChange(){this.slaveConfigFormGroup.get("type").valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.updateControlsEnabling(e),this.updateMethodType(e)}))}updateMethodType(e){this.slaveConfigFormGroup.get("method").value!==Xa.RTU&&this.slaveConfigFormGroup.get("method").patchValue(e===Ya.Serial?Za.ASCII:Xa.SOCKET,{emitEvent:!1})}updateControlsEnabling(e){const[t,n]=e===Ya.Serial?[this.serialSpecificControlKeys,this.tcpUdpSpecificControlKeys]:[this.tcpUdpSpecificControlKeys,this.serialSpecificControlKeys];t.forEach((e=>this.slaveConfigFormGroup.get(e)?.enable({emitEvent:!1}))),n.forEach((e=>this.slaveConfigFormGroup.get(e)?.disable({emitEvent:!1}))),this.updateSecurityEnabling(this.showSecurityControl.value)}observeShowSecurity(){this.showSecurityControl.valueChanges.pipe(be(this.destroy$)).subscribe((e=>this.updateSecurityEnabling(e)))}updateSecurityEnabling(e){e&&this.protocolType!==Ya.Serial?this.slaveConfigFormGroup.get("security").enable({emitEvent:!1}):this.slaveConfigFormGroup.get("security").disable({emitEvent:!1})}static{this.ɵfac=function(e){return new(e||tc)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(de.Router),t.ɵɵdirectiveInject(se),t.ɵɵdirectiveInject(pe.MatDialogRef))}}static{this.ɵdir=t.ɵɵdefineDirective({type:tc,features:[t.ɵɵInheritDefinitionFeature]})}}e("ModbusSlaveDialogAbstract",tc);const nc=()=>({maxWidth:"970px"});function ac(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",20),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate3(" ",e.get("tag").value,"",": ","",e.get("value").value," ")}}function rc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21)(1,"div",22),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementStart(4,"span",23),t.ɵɵtext(5),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"div",24),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"span",25),t.ɵɵtext(10),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"div",24),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementStart(14,"span",25),t.ɵɵtext(15),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(3,6,"gateway.key"),": "),t.ɵɵadvance(3),t.ɵɵtextInterpolate(e.get("tag").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(8,8,"gateway.address"),": "),t.ɵɵadvance(3),t.ɵɵtextInterpolate(e.get("address").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(13,10,"gateway.type"),": "),t.ɵɵadvance(3),t.ɵɵtextInterpolate(e.get("type").value)}}function ic(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.key-required"))}function oc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",45),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function sc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",45),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(5);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.ModbusFunctionCodeTranslationsMap.get(e))," ")}}function pc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",30)(1,"div",35),t.ɵɵtext(2,"gateway.function-code"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",32)(4,"mat-select",46),t.ɵɵtemplate(5,sc,3,4,"mat-option",37),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.functionCodesMap.get(e.get("id").value)||n.defaultFunctionCodes)}}function lc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.objects-count-required"))}function cc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.hints.modbus.max-bit"))}function dc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",30)(1,"div",47),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.bit"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",48),t.ɵɵelement(5,"input",49),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,cc,3,3,"mat-icon",34),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(3).$implicit;t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.bit")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("bit").hasError("max")&&e.get("bit").touched)}}function mc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",45),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(6);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,2,a.BitTargetTypeTranslationMap.get(e)))}}function uc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",30)(1,"div",47),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.bit-target-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",50)(5,"mat-form-field",51)(6,"mat-select",52),t.ɵɵtemplate(7,mc,3,4,"mat-option",37),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext(5);t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,2,"gateway.hints.modbus.bit-target-type")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",e.bitTargetTypes)}}function gc(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,dc,8,7,"div",38)(2,uc,8,4,"div",38),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("objectsCount").value>1),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.hideNewFields)}}function yc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.address-required"))}function hc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",45),t.ɵɵelement(1,"mat-icon",61),t.ɵɵelementStart(2,"span"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(5);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("svgIcon",a.ModifierTypesMap.get(e).icon),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,a.ModifierTypesMap.get(e).name))}}function fc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.modifier-invalid"))}function vc(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",53)(1,"mat-expansion-panel",15)(2,"mat-expansion-panel-header",16)(3,"mat-panel-title")(4,"mat-slide-toggle",54),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(5,"mat-label",55),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(9,"div",50)(10,"div",56)(11,"div",35),t.ɵɵtext(12,"gateway.type"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",51)(14,"mat-select",57)(15,"mat-select-trigger")(16,"div",58),t.ɵɵelement(17,"mat-icon",59),t.ɵɵelementStart(18,"span"),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(21,hc,5,5,"mat-option",37),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(22,"div",30)(23,"div",35),t.ɵɵtext(24,"gateway.value"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-form-field",48),t.ɵɵelement(26,"input",60),t.ɵɵpipe(27,"translate"),t.ɵɵtemplate(28,fc,3,3,"mat-icon",34),t.ɵɵelementEnd()()()()}if(2&e){let e,n;const a=t.ɵɵnextContext(2).$implicit,r=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵproperty("expanded",r.enableModifiersControlMap.get(a.get("id").value).value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",r.enableModifiersControlMap.get(a.get("id").value)),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(6,9,"gateway.hints.modbus.modifier")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(8,11,"gateway.modifier")," "),t.ɵɵadvance(10),t.ɵɵproperty("svgIcon",null==(e=r.ModifierTypesMap.get(a.get("modifierType").value))?null:e.icon),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(20,13,null==(n=r.ModifierTypesMap.get(a.get("modifierType").value))?null:n.name)),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",r.modifierTypes),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(27,15,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",a.get("modifierValue").hasError("pattern")&&a.get("modifierValue").touched)}}function bc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",44),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function xc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",30)(1,"div",62),t.ɵɵtext(2,"gateway.value"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",32),t.ɵɵelement(4,"input",63),t.ɵɵpipe(5,"translate"),t.ɵɵtemplate(6,bc,3,3,"mat-icon",34),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(5,2,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("value").hasError("required")&&e.get("value").touched)}}function wc(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",64),2&e){const e=t.ɵɵnextContext(4);t.ɵɵproperty("defaultValue",e.ReportStrategyDefaultValue.Key)("isExpansionMode",!0)}}function Cc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",26),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelement(3,"div",27),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",28)(5,"div",29),t.ɵɵtext(6,"gateway.platform-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"div",30)(8,"div",31),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10," gateway.key "),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field",32),t.ɵɵelement(12,"input",33),t.ɵɵpipe(13,"translate"),t.ɵɵtemplate(14,ic,3,3,"mat-icon",34),t.ɵɵelementEnd()()(),t.ɵɵelementStart(15,"div",28)(16,"div",29),t.ɵɵtext(17,"gateway.connector-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"div",30)(19,"div",35),t.ɵɵtext(20," gateway.type "),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",32)(22,"mat-select",36),t.ɵɵtemplate(23,oc,2,2,"mat-option",37),t.ɵɵelementEnd()()(),t.ɵɵtemplate(24,pc,6,1,"div",38),t.ɵɵelementStart(25,"div",30)(26,"div",31),t.ɵɵpipe(27,"translate"),t.ɵɵtext(28,"gateway.objects-count"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-form-field",32),t.ɵɵelement(30,"input",39),t.ɵɵpipe(31,"translate"),t.ɵɵtemplate(32,lc,3,3,"mat-icon",34),t.ɵɵelementEnd()(),t.ɵɵtemplate(33,gc,3,2,"ng-container",40),t.ɵɵelementStart(34,"div",30)(35,"div",31),t.ɵɵpipe(36,"translate"),t.ɵɵtext(37,"gateway.address"),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"mat-form-field",32),t.ɵɵelement(39,"input",41),t.ɵɵpipe(40,"translate"),t.ɵɵtemplate(41,yc,3,3,"mat-icon",34),t.ɵɵelementEnd()(),t.ɵɵtemplate(42,vc,29,17,"div",42)(43,xc,7,4,"div",38)(44,wc,1,2,"tb-report-strategy",43),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,19,"gateway.hints.modbus.data-keys")," "),t.ɵɵadvance(2),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/modbus-functions-data-types_fn")("tb-help-popup-style",t.ɵɵpureFunction0(33,nc)),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(9,21,"gateway.hints.modbus.key")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(13,23,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("tag").hasError("required")&&e.get("tag").touched),t.ɵɵadvance(9),t.ɵɵproperty("ngForOf",n.modbusDataTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.withFunctionCode),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(27,25,"gateway.hints.modbus.objects-count")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(31,27,"gateway.set")),t.ɵɵproperty("readonly",!n.ModbusEditableDataTypes.includes(e.get("type").value)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("objectsCount").hasError("required")&&e.get("objectsCount").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("type").value===n.ModbusDataType.BITS&&!n.isMaster),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(36,29,"gateway.hints.modbus.address")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(40,31,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("address").hasError("required")&&e.get("address").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.showModifiersMap.get(e.get("id").value)),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.isMaster),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.withReportStrategy)}}function Sc(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",12)(1,"div",13),t.ɵɵelementContainerStart(2,14),t.ɵɵelementStart(3,"mat-expansion-panel",15)(4,"mat-expansion-panel-header",16)(5,"mat-panel-title"),t.ɵɵtemplate(6,ac,2,3,"div",17)(7,rc,16,12,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()(),t.ɵɵtemplate(9,Cc,45,34,"ng-template",18),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"button",19),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.deleteKey(n,a))})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"delete"),t.ɵɵelementEnd()()()}if(2&e){const e=n.$implicit,a=n.last,r=t.ɵɵreference(8),i=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵproperty("formGroup",e),t.ɵɵadvance(),t.ɵɵproperty("expanded",a),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",i.isMaster)("ngIfElse",r),t.ɵɵadvance(4),t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(11,5,i.deleteKeyTitle))}}function Ec(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10),t.ɵɵtemplate(1,Sc,14,7,"div",11),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.keysListFormArray.controls)("ngForTrackBy",e.trackByControlId)}}function Tc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",65)(1,"span",66),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.noKeysText)}}class Ic{constructor(e){this.fb=e,this.isMaster=!1,this.hideNewFields=!1,this.keysDataApplied=new r,this.withFunctionCode=!0,this.withReportStrategy=!0,this.enableModifiersControlMap=new Map,this.showModifiersMap=new Map,this.functionCodesMap=new Map,this.defaultFunctionCodes=[],this.modbusDataTypes=Object.values(Ft),this.modifierTypes=Object.values(hr),this.bitTargetTypes=Object.values(sr),this.BitTargetTypeTranslationMap=pr,this.ModbusEditableDataTypes=Ot,this.ModbusFunctionCodeTranslationsMap=Nt,this.ModifierTypesMap=fr,this.ReportStrategyDefaultValue=Vt,this.ModbusDataType=Ft,this.destroy$=new me,this.defaultReadFunctionCodes=[3,4],this.bitsReadFunctionCodes=[1,2],this.defaultWriteFunctionCodes=[6,16],this.bitsWriteFunctionCodes=[5,15]}ngOnInit(){this.withFunctionCode=!this.isMaster||this.keysType!==ar.ATTRIBUTES&&this.keysType!==ar.TIMESERIES,this.withReportStrategy=!(this.isMaster||this.keysType!==ar.ATTRIBUTES&&this.keysType!==ar.TIMESERIES||this.hideNewFields),this.keysListFormArray=this.prepareKeysFormArray(this.values),this.defaultFunctionCodes=this.getDefaultFunctionCodes()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}trackByControlId(e,t){return t.value.id}addKey(){const e=X(5),t=this.fb.group({tag:["",[ne.required,ne.pattern($e)]],value:[{value:"",disabled:!this.isMaster},[ne.required,ne.pattern($e)]],type:[Ft.BYTES,[ne.required]],address:[null,[ne.required]],objectsCount:[1,[ne.required]],functionCode:[{value:this.getDefaultFunctionCodes()[0],disabled:!this.withFunctionCode},[ne.required]],reportStrategy:[{value:null,disabled:!this.withReportStrategy}],modifierType:[{value:hr.MULTIPLIER,disabled:!0}],modifierValue:[{value:1,disabled:!0},[ne.pattern(Ke)]],bit:[{value:null,disabled:!0}],bitTargetType:[{value:sr.IntegerType,disabled:!0}],id:[{value:e,disabled:!0}]});this.showModifiersMap.set(e,!1),this.enableModifiersControlMap.set(e,this.fb.control(!1)),this.observeKeyDataType(t),this.observeObjectsCount(t),this.observeEnableModifier(t),this.keysListFormArray.push(t)}deleteKey(e,t){e&&e.stopPropagation(),this.keysListFormArray.removeAt(t),this.keysListFormArray.markAsDirty()}cancel(){this.popover.hide()}applyKeysData(){this.keysDataApplied.emit(this.getFormValue())}getFormValue(){return this.mapKeysWithModifier(this.withReportStrategy?this.cleanUpEmptyStrategies(this.keysListFormArray.value):this.keysListFormArray.value)}cleanUpEmptyStrategies(e){return e.map((e=>{const{reportStrategy:t,...n}=e;return t?e:n}))}mapKeysWithModifier(e){return e.map(((e,t)=>{if(this.showModifiersMap.get(this.keysListFormArray.controls[t].get("id").value)){const{modifierType:t,modifierValue:n,...a}=e;return t?{...a,[t]:n}:a}return e}))}prepareKeysFormArray(e){const t=[];return e&&e.forEach((e=>{const n=this.createDataKeyFormGroup(e);this.observeKeyDataType(n),this.observeObjectsCount(n),this.observeEnableModifier(n),this.functionCodesMap.set(n.get("id").value,this.getFunctionCodes(e.type)),t.push(n)})),this.fb.array(t)}createDataKeyFormGroup(e){const{tag:t,value:n,type:a,address:r,objectsCount:i,functionCode:o,multiplier:s,divider:p,reportStrategy:l,bit:c,bitTargetType:d}=e,m=X(5),u=this.shouldShowModifier(a);return this.showModifiersMap.set(m,u),this.enableModifiersControlMap.set(m,this.fb.control((s||p)&&u)),this.fb.group({tag:[t,[ne.required,ne.pattern($e)]],value:[{value:n,disabled:!this.isMaster},[ne.required,ne.pattern($e)]],type:[a,[ne.required]],address:[r,[ne.required]],objectsCount:[i,[ne.required]],functionCode:[{value:o,disabled:!this.withFunctionCode},[ne.required]],modifierType:[{value:p?hr.DIVIDER:hr.MULTIPLIER,disabled:!this.enableModifiersControlMap.get(m).value}],bit:[{value:c,disabled:a!==Ft.BITS||i<2},[ne.max(i-1)]],bitTargetType:[{value:d??sr.IntegerType,disabled:a!==Ft.BITS||this.hideNewFields}],modifierValue:[{value:s??p??1,disabled:!this.enableModifiersControlMap.get(m).value},[ne.pattern(Ke)]],id:[{value:m,disabled:!0}],reportStrategy:[{value:l,disabled:!this.withReportStrategy}]})}shouldShowModifier(e){return!(this.isMaster||this.keysType!==ar.ATTRIBUTES&&this.keysType!==ar.TIMESERIES||this.ModbusEditableDataTypes.includes(e))}observeKeyDataType(e){e.get("type").valueChanges.pipe(be(this.destroy$)).subscribe((t=>{this.ModbusEditableDataTypes.includes(t)||e.get("objectsCount").patchValue(qt[t],{emitEvent:!1}),this.toggleBitsFields(e);const n=this.shouldShowModifier(t);this.showModifiersMap.set(e.get("id").value,n),this.updateFunctionCodes(e,t)}))}observeObjectsCount(e){e.get("objectsCount").valueChanges.pipe(xe((()=>e.get("type").value===Ft.BITS)),be(this.destroy$)).subscribe((()=>this.toggleBitsFields(e)))}toggleBitsFields(e){const{objectsCount:t,type:n,bit:a,bitTargetType:r}=e.controls,i=n.value===Ft.BITS,o=t.value>1;i&&o?(a.enable({emitEvent:!1}),a.setValidators(ne.max(t.value-1))):a.disable({emitEvent:!1}),a.updateValueAndValidity({emitEvent:!1}),r[i?"enable":"disable"]({emitEvent:!1})}observeEnableModifier(e){this.enableModifiersControlMap.get(e.get("id").value).valueChanges.pipe(be(this.destroy$)).subscribe((t=>this.toggleModifierControls(e,t)))}toggleModifierControls(e,t){const n=e.get("modifierType"),a=e.get("modifierValue");t?(n.enable(),a.enable()):(n.disable(),a.disable())}updateFunctionCodes(e,t){const n=this.getFunctionCodes(t);this.functionCodesMap.set(e.get("id").value,n),n.includes(e.get("functionCode").value)||e.get("functionCode").patchValue(n[0],{emitEvent:!1})}getFunctionCodes(e){const t=[...e===Ft.BITS?this.bitsWriteFunctionCodes:[],...this.defaultWriteFunctionCodes];if(this.keysType===ar.ATTRIBUTES_UPDATES)return t.sort(((e,t)=>e-t));const n=[...this.defaultReadFunctionCodes];return e===Ft.BITS&&n.push(...this.bitsReadFunctionCodes),this.keysType===ar.RPC_REQUESTS&&n.push(...t),n.sort(((e,t)=>e-t))}getDefaultFunctionCodes(){return this.keysType===ar.ATTRIBUTES_UPDATES?this.defaultWriteFunctionCodes:this.keysType===ar.RPC_REQUESTS?[...this.defaultReadFunctionCodes,...this.defaultWriteFunctionCodes]:this.defaultReadFunctionCodes}static{this.ɵfac=function(e){return new(e||Ic)(t.ɵɵdirectiveInject(te.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ic,selectors:[["tb-modbus-data-keys-panel"]],inputs:{isMaster:"isMaster",hideNewFields:"hideNewFields",panelTitle:"panelTitle",addKeyTitle:"addKeyTitle",deleteKeyTitle:"deleteKeyTitle",noKeysText:"noKeysText",keysType:"keysType",values:"values",popover:"popover"},outputs:{keysDataApplied:"keysDataApplied"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:19,vars:16,consts:[["noKeys",""],["tagName",""],[1,"tb-modbus-keys-panel"],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-panel-title"],["class","tb-form-panel no-border no-padding key-panel",4,"ngIf","ngIfElse"],["type","button","mat-stroked-button","","color","primary",3,"click"],[1,"tb-flex","flex-end"],["mat-button","","color","primary","type","button",3,"click"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[1,"tb-form-panel","no-border","no-padding","key-panel"],["class","tb-form-panel no-border no-padding tb-flex no-flex row center fill-width",4,"ngFor","ngForOf","ngForTrackBy"],[1,"tb-form-panel","no-border","no-padding","tb-flex","no-flex","row","center","fill-width"],[1,"tb-form-panel","stroked","tb-flex"],[3,"formGroup"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],["class","title-container","tbTruncateWithTooltip","",4,"ngIf","ngIfElse"],["matExpansionPanelContent",""],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],["tbTruncateWithTooltip","",1,"title-container"],[1,"tb-flex"],[1,"title-container","tb-flex"],["tbTruncateWithTooltip","",1,"key-label"],[1,"title-container"],[1,"key-label"],[1,"tb-form-hint","tb-primary-fill","tb-flex","align-center"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","tag",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["translate","",1,"fixed-title-width"],["formControlName","type"],[3,"value",4,"ngFor","ngForOf"],["class","tb-form-row column-xs",4,"ngIf"],["matInput","","type","number","min","1","max","50000","name","value","formControlName","objectsCount",3,"placeholder","readonly"],[4,"ngIf"],["matInput","","type","number","min","0","max","50000","name","value","formControlName","address",3,"placeholder"],["class","tb-form-panel stroked tb-slide-toggle",4,"ngIf"],["class","stroked tb-form-panel","formControlName","reportStrategy",3,"defaultValue","isExpansionMode",4,"ngIf"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[3,"value"],["formControlName","functionCode"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","tb-suffix-absolute","flex"],["matInput","","formControlName","bit","step","1","type","number","min","0",3,"placeholder"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap","fill-width"],["formControlName","bitTargetType"],[1,"tb-form-panel","stroked","tb-slide-toggle"],[1,"mat-slide",3,"click","formControl"],[3,"tb-hint-tooltip-icon"],[1,"tb-form-row","column-xs","w-full"],["formControlName","modifierType"],[1,"tb-flex","align-center"],[1,"tb-mat-18",3,"svgIcon"],["matInput","","required","","formControlName","modifierValue","step","0.1","type","number",3,"placeholder"],[1,"tb-mat-20",3,"svgIcon"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","value",3,"placeholder"],["formControlName","reportStrategy",1,"stroked","tb-form-panel",3,"defaultValue","isExpansionMode"],[1,"tb-flex","no-flex","center","align-center","key-panel"],["translate","",1,"tb-prompt"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",2)(1,"div",3)(2,"div",4),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(5,Ec,2,2,"div",5),t.ɵɵelementStart(6,"div")(7,"button",6),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addKey())})),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(10,Tc,3,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(12,"div",7)(13,"button",8),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"button",9),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.applyKeysData())})),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(11);t.ɵɵadvance(3),t.ɵɵtextInterpolate2("",t.ɵɵpipeBind1(4,8,n.panelTitle),""," ("+n.keysListFormArray.controls.length+")",""),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.keysListFormArray.controls.length)("ngIfElse",e),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(9,10,n.addKeyTitle)," "),t.ɵɵadvance(6),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,12,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.keysListFormArray.invalid||!n.keysListFormArray.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,14,"action.apply")," ")}},dependencies:t.ɵɵgetComponentDepsFactory(Ic,[V,b,as,ma,na]),styles:['@charset "UTF-8";[_nghost-%COMP%] .tb-modbus-keys-panel[_ngcontent-%COMP%]{width:77vw;max-width:700px}[_nghost-%COMP%] .tb-modbus-keys-panel[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{width:180px}[_nghost-%COMP%] .tb-modbus-keys-panel[_ngcontent-%COMP%] .key-label[_ngcontent-%COMP%]{font-weight:400}[_nghost-%COMP%] .tb-modbus-keys-panel[_ngcontent-%COMP%] .key-panel[_ngcontent-%COMP%]{height:500px;overflow:auto}[_nghost-%COMP%] .tb-modbus-keys-panel[_ngcontent-%COMP%] .tb-form-panel[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%]{width:56px;height:56px;padding:16px;color:#0000008a}']})}}e("ModbusDataKeysPanelComponent",Ic),qe([k()],Ic.prototype,"isMaster",void 0),qe([k()],Ic.prototype,"hideNewFields",void 0);const kc=()=>({$implicit:null}),Mc=e=>({$implicit:e});function Pc(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",7),t.ɵɵelementContainer(2,8),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(),n=t.ɵɵreference(4);t.ɵɵadvance(),t.ɵɵproperty("formGroup",e.valuesFormGroup),t.ɵɵadvance(),t.ɵɵproperty("ngTemplateOutlet",n)("ngTemplateOutletContext",t.ɵɵpureFunction0(3,kc))}}function Fc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-tab",11),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"div",7),t.ɵɵelementContainer(3,8),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2),r=t.ɵɵreference(4);t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(1,4,a.ModbusValuesTranslationsMap.get(e))),t.ɵɵadvance(2),t.ɵɵproperty("formGroup",a.valuesFormGroup.get(e)),t.ɵɵadvance(),t.ɵɵproperty("ngTemplateOutlet",r)("ngTemplateOutletContext",t.ɵɵpureFunction1(6,Mc,e))}}function Oc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-tab-group",9),t.ɵɵtemplate(1,Fc,4,8,"mat-tab",10),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("formGroup",e.valuesFormGroup),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.modbusRegisterTypes)}}function qc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.tag," ")}}function Bc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.tag," ")}}function Rc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.tag," ")}}function Nc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.tag," ")}}function _c(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",12)(1,"div",13),t.ɵɵtext(2,"gateway.attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",14)(4,"mat-chip-listbox",15),t.ɵɵtemplate(5,qc,2,1,"mat-chip",16),t.ɵɵelementStart(6,"mat-chip",17),t.ɵɵelement(7,"label",18),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"button",19,2),t.ɵɵpipe(10,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵreference(9),i=t.ɵɵnextContext();return t.ɵɵresetView(i.manageKeys(n,r,i.ModbusValueKey.ATTRIBUTES,a))})),t.ɵɵelementStart(11,"tb-icon",20),t.ɵɵtext(12,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(13,"div",12)(14,"div",13),t.ɵɵtext(15,"gateway.timeseries"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"div",14)(17,"mat-chip-listbox",15),t.ɵɵtemplate(18,Bc,2,1,"mat-chip",16),t.ɵɵelementStart(19,"mat-chip",17),t.ɵɵelement(20,"label",18),t.ɵɵelementEnd()(),t.ɵɵelementStart(21,"button",19,3),t.ɵɵpipe(23,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵreference(22),i=t.ɵɵnextContext();return t.ɵɵresetView(i.manageKeys(n,r,i.ModbusValueKey.TIMESERIES,a))})),t.ɵɵelementStart(24,"tb-icon",20),t.ɵɵtext(25,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(26,"div",12)(27,"div",13),t.ɵɵtext(28,"gateway.attribute-updates"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"div",14)(30,"mat-chip-listbox",15),t.ɵɵtemplate(31,Rc,2,1,"mat-chip",16),t.ɵɵelementStart(32,"mat-chip",17),t.ɵɵelement(33,"label",18),t.ɵɵelementEnd()(),t.ɵɵelementStart(34,"button",19,4),t.ɵɵpipe(36,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵreference(35),i=t.ɵɵnextContext();return t.ɵɵresetView(i.manageKeys(n,r,i.ModbusValueKey.ATTRIBUTES_UPDATES,a))})),t.ɵɵelementStart(37,"tb-icon",20),t.ɵɵtext(38,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(39,"div",12)(40,"div",13),t.ɵɵtext(41,"gateway.rpc-requests"),t.ɵɵelementEnd(),t.ɵɵelementStart(42,"div",14)(43,"mat-chip-listbox",15),t.ɵɵtemplate(44,Nc,2,1,"mat-chip",16),t.ɵɵelementStart(45,"mat-chip",17),t.ɵɵelement(46,"label",18),t.ɵɵelementEnd()(),t.ɵɵelementStart(47,"button",19,5),t.ɵɵpipe(49,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵreference(48),i=t.ɵɵnextContext();return t.ɵɵresetView(i.manageKeys(n,r,i.ModbusValueKey.RPC_REQUESTS,a))})),t.ɵɵelementStart(50,"tb-icon",20),t.ɵɵtext(51,"edit"),t.ɵɵelementEnd()()()()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("tbEllipsisChipList",a.getValueGroup(a.ModbusValueKey.ATTRIBUTES,e).value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",a.getValueGroup(a.ModbusValueKey.ATTRIBUTES,e).value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(10,16,"action.edit")),t.ɵɵproperty("disabled",a.disabled),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",a.getValueGroup(a.ModbusValueKey.TIMESERIES,e).value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",a.getValueGroup(a.ModbusValueKey.TIMESERIES,e).value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(23,18,"action.edit")),t.ɵɵproperty("disabled",a.disabled),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",a.getValueGroup(a.ModbusValueKey.ATTRIBUTES_UPDATES,e).value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",a.getValueGroup(a.ModbusValueKey.ATTRIBUTES_UPDATES,e).value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(36,20,"action.edit")),t.ɵɵproperty("disabled",a.disabled),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",a.getValueGroup(a.ModbusValueKey.RPC_REQUESTS,e).value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",a.getValueGroup(a.ModbusValueKey.RPC_REQUESTS,e).value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(49,22,"action.edit")),t.ɵɵproperty("disabled",a.disabled)}}class Dc{constructor(e,t,n,a,r){this.fb=e,this.popoverService=t,this.renderer=n,this.viewContainerRef=a,this.cdr=r,this.singleMode=!1,this.hideNewFields=!1,this.disabled=!1,this.modbusRegisterTypes=Object.values(nr),this.modbusValueKeys=Object.values(ar),this.ModbusValuesTranslationsMap=or,this.ModbusValueKey=ar,this.destroy$=new me}ngOnInit(){this.initializeValuesFormGroup(),this.observeValuesChanges()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){if(this.singleMode)this.valuesFormGroup.setValue(this.getSingleRegisterState(e),{emitEvent:!1});else{const{holding_registers:t,coils_initializer:n,input_registers:a,discrete_inputs:r}=e;this.valuesFormGroup.setValue({holding_registers:this.getSingleRegisterState(t),coils_initializer:this.getSingleRegisterState(n),input_registers:this.getSingleRegisterState(a),discrete_inputs:this.getSingleRegisterState(r)},{emitEvent:!1})}this.cdr.markForCheck()}validate(){return this.valuesFormGroup.valid?null:{valuesFormGroup:{valid:!1}}}setDisabledState(e){this.disabled=e,this.cdr.markForCheck()}getValueGroup(e,t){return t?this.valuesFormGroup.get(t).get(e):this.valuesFormGroup.get(e)}manageKeys(e,t,n,a){e.stopPropagation();const r=t._elementRef.nativeElement;if(this.popoverService.hasPopover(r))return void this.popoverService.hidePopover(r);const i=this.getValueGroup(n,a),o={values:i.value,isMaster:!this.singleMode,keysType:n,panelTitle:mr.get(n),addKeyTitle:ur.get(n),deleteKeyTitle:gr.get(n),noKeysText:yr.get(n),hideNewFields:this.hideNewFields},s=this.popoverService.displayPopover(r,this.renderer,this.viewContainerRef,Ic,"leftBottom",!1,null,o,{},{},{},!0);s.tbComponentRef.instance.popover=s,s.tbComponentRef.instance.keysDataApplied.pipe(be(this.destroy$)).subscribe((e=>{s.hide(),i.patchValue(e),i.markAsDirty(),this.cdr.markForCheck()}))}initializeValuesFormGroup(){const e=()=>this.fb.group(this.modbusValueKeys.reduce(((e,t)=>(e[t]=this.fb.control([[],[]]),e)),{}));this.singleMode?this.valuesFormGroup=e():this.valuesFormGroup=this.fb.group(this.modbusRegisterTypes.reduce(((t,n)=>(t[n]=e(),t)),{}))}observeValuesChanges(){this.valuesFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}getSingleRegisterState(e){return{attributes:e?.attributes??[],timeseries:e?.timeseries??[],attributeUpdates:e?.attributeUpdates??[],rpc:e?.rpc??[]}}static{this.ɵfac=function(e){return new(e||Dc)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(je.TbPopoverService),t.ɵɵdirectiveInject(t.Renderer2),t.ɵɵdirectiveInject(t.ViewContainerRef),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Dc,selectors:[["tb-modbus-values"]],inputs:{singleMode:"singleMode",hideNewFields:"hideNewFields"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Dc)),multi:!0},{provide:re,useExisting:i((()=>Dc)),multi:!0}]),t.ɵɵStandaloneFeature],decls:5,vars:2,consts:[["multipleView",""],["singleView",""],["attributesButton",""],["telemetryButton",""],["attributesUpdatesButton",""],["rpcRequestsButton",""],[4,"ngIf","ngIfElse"],[1,"tb-form-panel","no-border","no-padding","padding-top",3,"formGroup"],[3,"ngTemplateOutlet","ngTemplateOutletContext"],[3,"formGroup"],[3,"label",4,"ngFor","ngForOf"],[3,"label"],[1,"tb-form-row","space-between","tb-flex"],["translate","",1,"fixed-title-width"],[1,"tb-flex","ellipsis-chips-container"],[1,"tb-flex",3,"tbEllipsisChipList"],[4,"ngFor","ngForOf"],[1,"mat-mdc-chip","ellipsis-chip"],[1,"ellipsis-text"],["type","button","mat-icon-button","","color","primary","matTooltipPosition","above",3,"click","disabled","matTooltip"],["matButtonIcon",""]],template:function(e,n){if(1&e&&t.ɵɵtemplate(0,Pc,3,4,"ng-container",6)(1,Oc,2,2,"ng-template",null,0,t.ɵɵtemplateRefExtractor)(3,_c,52,24,"ng-template",null,1,t.ɵɵtemplateRefExtractor),2&e){const e=t.ɵɵreference(2);t.ɵɵproperty("ngIf",n.singleMode)("ngIfElse",e)}},dependencies:t.ɵɵgetComponentDepsFactory(Dc,[V,b,aa]),styles:['@charset "UTF-8";[_nghost-%COMP%] .mat-mdc-tab-body-wrapper{min-height:320px} .mdc-evolution-chip-set__chips{align-items:center}'],changeDetection:o.OnPush})}}function Vc(e,n){1&e&&(t.ɵɵelementStart(0,"div",2)(1,"div",10),t.ɵɵtext(2,"gateway.server-hostname"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",5)(4,"mat-form-field",6),t.ɵɵelement(5,"input",16),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,1,"gateway.set")))}function Gc(e,n){1&e&&(t.ɵɵelementStart(0,"div",17)(1,"mat-slide-toggle",18)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,1,"gateway.request-client-certificate")," "))}e("ModbusValuesComponent",Dc),qe([k()],Dc.prototype,"singleMode",void 0),qe([k()],Dc.prototype,"hideNewFields",void 0);class Ac{constructor(e,t){this.fb=e,this.cdr=t,this.isMaster=!1,this.disabled=!1,this.destroy$=new me,this.securityConfigFormGroup=this.fb.group({certfile:["",[ne.pattern($e)]],keyfile:["",[ne.pattern($e)]],password:["",[ne.pattern($e)]],server_hostname:["",[ne.pattern($e)]],reqclicert:[{value:!1,disabled:!0}]}),this.observeValueChanges()}ngOnChanges(){this.updateMasterEnabling()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}setDisabledState(e){this.disabled=e,this.disabled?this.securityConfigFormGroup.disable({emitEvent:!1}):this.securityConfigFormGroup.enable({emitEvent:!1}),this.updateMasterEnabling(),this.cdr.markForCheck()}validate(){return this.securityConfigFormGroup.valid?null:{securityConfigFormGroup:{valid:!1}}}writeValue(e){const{certfile:t,password:n,keyfile:a,server_hostname:r}=e,i={certfile:t??"",password:n??"",keyfile:a??"",server_hostname:r??"",reqclicert:!!e.reqclicert};this.securityConfigFormGroup.reset(i,{emitEvent:!1})}updateMasterEnabling(){this.isMaster?(this.disabled||this.securityConfigFormGroup.get("reqclicert").enable({emitEvent:!1}),this.securityConfigFormGroup.get("server_hostname").disable({emitEvent:!1})):(this.disabled||this.securityConfigFormGroup.get("server_hostname").enable({emitEvent:!1}),this.securityConfigFormGroup.get("reqclicert").disable({emitEvent:!1}))}observeValueChanges(){this.securityConfigFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}static{this.ɵfac=function(e){return new(e||Ac)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ac,selectors:[["tb-modbus-security-config"]],inputs:{isMaster:"isMaster"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Ac)),multi:!0},{provide:re,useExisting:i((()=>Ac)),multi:!0}]),t.ɵɵNgOnChangesFeature,t.ɵɵStandaloneFeature],decls:33,vars:21,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-hint","tb-primary-fill"],[1,"tb-form-row","space-between","tb-flex","fill-width"],["tbTruncateWithTooltip","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip","","translate",""],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","certfile",3,"placeholder"],[1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["matInput","","name","value","formControlName","keyfile",3,"placeholder"],["translate","",1,"fixed-title-width"],["matInput","","type","password","name","value","formControlName","password",3,"placeholder"],["matSuffix","",1,"tb-flex","no-gap","align-center","fill-height"],[1,"tb-flex","align-center","fill-height"],["class","tb-form-row space-between tb-flex fill-width",4,"ngIf"],["class","tb-form-row",4,"ngIf"],["matInput","","name","value","formControlName","server_hostname",3,"placeholder"],[1,"tb-form-row"],["formControlName","reqclicert",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",2)(5,"div",3),t.ɵɵpipe(6,"translate"),t.ɵɵelementStart(7,"span",4),t.ɵɵtext(8,"gateway.client-cert-path"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",5)(10,"mat-form-field",6),t.ɵɵelement(11,"input",7),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(13,"div",2)(14,"div",8),t.ɵɵpipe(15,"translate"),t.ɵɵelementStart(16,"span",4),t.ɵɵtext(17,"gateway.private-key-path"),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",5)(19,"mat-form-field",6),t.ɵɵelement(20,"input",9),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(22,"div",2)(23,"div",10),t.ɵɵtext(24,"gateway.password"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"div",5)(26,"mat-form-field",6),t.ɵɵelement(27,"input",11),t.ɵɵpipe(28,"translate"),t.ɵɵelementStart(29,"div",12),t.ɵɵelement(30,"tb-toggle-password",13),t.ɵɵelementEnd()()()(),t.ɵɵtemplate(31,Vc,7,3,"div",14)(32,Gc,5,3,"div",15),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.securityConfigFormGroup),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,9,"gateway.hints.path-in-os")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(6,11,"gateway.hints.ca-cert")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(12,13,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(15,15,"gateway.private-key-path")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(21,17,"gateway.set")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(28,19,"gateway.set")),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",!n.isMaster),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.isMaster))},dependencies:t.ɵɵgetComponentDepsFactory(Ac,[V,b,na]),encapsulation:2,changeDetection:o.OnPush})}}function jc(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusProtocolLabelsMap.get(e))}}function Lc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.host-required"))}function Uc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.host"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",53),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Lc,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.host")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("host").hasError("required")&&e.slaveConfigFormGroup.get("host").touched)}}function $c(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.slaveConfigFormGroup.get("port")))}}function zc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",55),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,$c,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,5,"gateway.hints.modbus.port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("min",e.portLimits.MIN),t.ɵɵpropertyInterpolate("max",e.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,7,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(e.slaveConfigFormGroup.get("port").hasError("required")||e.slaveConfigFormGroup.get("port").hasError("min")||e.slaveConfigFormGroup.get("port").hasError("max"))&&e.slaveConfigFormGroup.get("port").touched)}}function Kc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.port-required"))}function Hc(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",56),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Kc,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.serial-port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("serialPort").hasError("required")&&e.slaveConfigFormGroup.get("serialPort").touched)}}function Wc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusMethodLabelsMap.get(e))}}function Qc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Jc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Yc(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusParityLabelsMap.get(e))}}function Xc(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",17)(2,"div",18),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4,"gateway.baudrate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",19)(6,"mat-select",57),t.ɵɵtemplate(7,Qc,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(8,"div",17)(9,"div",18),t.ɵɵpipe(10,"translate"),t.ɵɵtext(11,"gateway.bytesize"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",19)(13,"mat-select",58),t.ɵɵtemplate(14,Jc,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(15,"div",17)(16,"div",18),t.ɵɵpipe(17,"translate"),t.ɵɵtext(18,"gateway.stopbits"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"mat-form-field",19),t.ɵɵelement(20,"input",59),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(22,"div",17)(23,"div",18),t.ɵɵpipe(24,"translate"),t.ɵɵtext(25,"gateway.parity"),t.ɵɵelementEnd(),t.ɵɵelementStart(26,"mat-form-field",19)(27,"mat-select",60),t.ɵɵtemplate(28,Yc,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(29,"div",36)(30,"mat-slide-toggle",61)(31,"mat-label",38),t.ɵɵpipe(32,"translate"),t.ɵɵtext(33),t.ɵɵpipe(34,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,10,"gateway.hints.modbus.baudrate")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusBaudrates),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(10,12,"gateway.hints.modbus.bytesize")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusByteSizes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(17,14,"gateway.hints.modbus.stopbits")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(21,16,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(24,18,"gateway.hints.modbus.parity")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusParities),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(32,20,"gateway.hints.modbus.strict")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(34,22,"gateway.strict")," ")}}function Zc(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.unit-id-required"))}function ed(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-required"))}function td(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-profile-required"))}function nd(e,n){1&e&&(t.ɵɵelementStart(0,"div",36)(1,"mat-slide-toggle",62)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,1,"gateway.send-data-on-change")," "))}function ad(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",63),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("defaultValue",e.ReportStrategyDefaultValue.Device)("isExpansionMode",!0)}}function rd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function id(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function od(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",64)(1,"mat-expansion-panel",65)(2,"mat-expansion-panel-header",66)(3,"mat-panel-title")(4,"mat-slide-toggle",67),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelement(8,"tb-modbus-security-config",68),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("expanded",e.showSecurityControl.value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.showSecurityControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,3,"gateway.tls-connection")," ")}}e("ModbusSecurityConfigComponent",Ac),qe([k()],Ac.prototype,"isMaster",void 0);class sd extends tc{constructor(e,t,n,a,r){super(e,t,n,a,r),this.fb=e,this.store=t,this.router=n,this.data=a,this.dialogRef=r}getSlaveResultData(){const{values:e,type:t,serialPort:n,...a}=this.slaveConfigFormGroup.value,r={...a,type:t,...e};return t===Ya.Serial&&(r.port=n),r.reportStrategy||delete r.reportStrategy,K(r),r}addFieldsToFormGroup(){this.slaveConfigFormGroup.addControl("reportStrategy",this.fb.control(null))}static{this.ɵfac=function(e){return new(e||sd)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(de.Router),t.ɵɵdirectiveInject(se),t.ɵɵdirectiveInject(pe.MatDialogRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:sd,selectors:[["tb-modbus-slave-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:141,vars:97,consts:[["serialPort",""],["reportStrategy",""],[1,"slaves-config-container"],["color","primary"],[1,"flex-1"],[3,"tb-help"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content","",1,"tb-form-panel",3,"formGroup"],[1,"stroked","tb-form-panel"],[1,"tb-form-panel","no-border","no-padding","padding-top"],[1,"tb-flex","row","space-between","align-center","no-gap","fill-width"],["translate","",1,"fixed-title-width"],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],["class","tb-form-row column-xs",4,"ngIf"],["class","tb-form-row column-xs",4,"ngIf","ngIfElse"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["formControlName","method"],[4,"ngIf"],["translate","",1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","min","0","name","value","formControlName","unitId",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","deviceName",3,"placeholder"],["matInput","","name","value","formControlName","deviceType",3,"placeholder"],["class","tb-form-row",4,"ngIf","ngIfElse"],[1,"tb-form-panel","stroked"],[1,"tb-settings"],["translate","",1,"tb-form-panel-title"],["matInput","","type","number","min","0","name","value","formControlName","timeout",3,"placeholder"],["formControlName","byteOrder"],["formControlName","wordOrder"],["class","tb-form-panel stroked tb-slide-toggle",4,"ngIf"],[1,"tb-form-row"],["formControlName","retries",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["formControlName","retryOnEmpty",1,"mat-slide"],["formControlName","retryOnInvalid",1,"mat-slide"],[1,"fixed-title-width-260","tb-required",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip","","translate",""],["matInput","","type","number","min","0","name","value","formControlName","pollPeriod",3,"placeholder"],["translate","",1,"fixed-title-width-260","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","min","0","name","value","formControlName","connectAttemptTimeMs",3,"placeholder"],["matInput","","type","number","min","0","name","value","formControlName","connectAttemptCount",3,"placeholder"],["matInput","","type","number","min","0","name","value","formControlName","waitAfterFailedAttemptsMs",3,"placeholder"],["formControlName","values",3,"singleMode","hideNewFields"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","primary","type","button","cdkFocusInitial","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[3,"value"],["matInput","","name","value","formControlName","host",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],["matInput","","name","value","formControlName","serialPort",3,"placeholder"],["formControlName","baudrate"],["formControlName","bytesize"],["matInput","","type","number","min","0","name","value","formControlName","stopbits",3,"placeholder"],["formControlName","parity"],["formControlName","strict",1,"mat-slide"],["formControlName","sendDataOnlyOnChange",1,"mat-slide"],["formControlName","reportStrategy",1,"stroked","tb-form-panel",3,"defaultValue","isExpansionMode"],[1,"tb-form-panel","stroked","tb-slide-toggle"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],[1,"mat-slide","justify-start",3,"click","formControl"],["formControlName","security",1,"security-config"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",2)(1,"mat-toolbar",3)(2,"h2"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",4)(6,"div",5),t.ɵɵelementStart(7,"button",6),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵelementStart(8,"mat-icon",7),t.ɵɵtext(9,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",8)(11,"div",9)(12,"div",10)(13,"div",11)(14,"div",12),t.ɵɵtext(15,"gateway.server-connection"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"tb-toggle-select",13),t.ɵɵtemplate(17,jc,2,2,"tb-toggle-option",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",10),t.ɵɵtemplate(19,Uc,8,7,"div",15)(20,zc,8,9,"div",16)(21,Hc,8,7,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(23,"div",17)(24,"div",18),t.ɵɵpipe(25,"translate"),t.ɵɵtext(26," gateway.method "),t.ɵɵelementEnd(),t.ɵɵelementStart(27,"mat-form-field",19)(28,"mat-select",20),t.ɵɵtemplate(29,Wc,2,2,"mat-option",14),t.ɵɵelementEnd()()()(),t.ɵɵtemplate(30,Xc,35,24,"ng-container",21),t.ɵɵelementStart(31,"div",17)(32,"div",22),t.ɵɵpipe(33,"translate"),t.ɵɵtext(34,"gateway.unit-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(35,"mat-form-field",19),t.ɵɵelement(36,"input",23),t.ɵɵpipe(37,"translate"),t.ɵɵtemplate(38,Zc,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵelementStart(39,"div",17)(40,"div",25),t.ɵɵtext(41,"gateway.device-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(42,"mat-form-field",19),t.ɵɵelement(43,"input",26),t.ɵɵpipe(44,"translate"),t.ɵɵtemplate(45,ed,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"div",17)(47,"div",25),t.ɵɵtext(48,"gateway.device-profile"),t.ɵɵelementEnd(),t.ɵɵelementStart(49,"mat-form-field",19),t.ɵɵelement(50,"input",27),t.ɵɵpipe(51,"translate"),t.ɵɵtemplate(52,td,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵtemplate(53,nd,5,3,"div",28)(54,ad,1,2,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(56,"div",29)(57,"mat-expansion-panel",30)(58,"mat-expansion-panel-header")(59,"mat-panel-title")(60,"div",31),t.ɵɵtext(61,"gateway.advanced-connection-settings"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(62,"div",10)(63,"div",17)(64,"div",18),t.ɵɵpipe(65,"translate"),t.ɵɵtext(66,"gateway.connection-timeout"),t.ɵɵelementEnd(),t.ɵɵelementStart(67,"mat-form-field",19),t.ɵɵelement(68,"input",32),t.ɵɵpipe(69,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(70,"div",17)(71,"div",18),t.ɵɵpipe(72,"translate"),t.ɵɵtext(73,"gateway.byte-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(74,"mat-form-field",19)(75,"mat-select",33),t.ɵɵtemplate(76,rd,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(77,"div",17)(78,"div",18),t.ɵɵpipe(79,"translate"),t.ɵɵtext(80,"gateway.word-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(81,"mat-form-field",19)(82,"mat-select",34),t.ɵɵtemplate(83,id,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵtemplate(84,od,9,5,"div",35),t.ɵɵelementStart(85,"div",36)(86,"mat-slide-toggle",37)(87,"mat-label",38),t.ɵɵpipe(88,"translate"),t.ɵɵtext(89),t.ɵɵpipe(90,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(91,"div",36)(92,"mat-slide-toggle",39)(93,"mat-label",38),t.ɵɵpipe(94,"translate"),t.ɵɵtext(95),t.ɵɵpipe(96,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(97,"div",36)(98,"mat-slide-toggle",40)(99,"mat-label",38),t.ɵɵpipe(100,"translate"),t.ɵɵtext(101),t.ɵɵpipe(102,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(103,"div",17)(104,"div",41),t.ɵɵpipe(105,"translate"),t.ɵɵelementStart(106,"span",42),t.ɵɵtext(107," gateway.poll-period "),t.ɵɵelementEnd()(),t.ɵɵelementStart(108,"mat-form-field",19),t.ɵɵelement(109,"input",43),t.ɵɵpipe(110,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(111,"div",17)(112,"div",44),t.ɵɵpipe(113,"translate"),t.ɵɵtext(114,"gateway.connect-attempt-time"),t.ɵɵelementEnd(),t.ɵɵelementStart(115,"mat-form-field",19),t.ɵɵelement(116,"input",45),t.ɵɵpipe(117,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(118,"div",17)(119,"div",44),t.ɵɵpipe(120,"translate"),t.ɵɵtext(121,"gateway.connect-attempt-count"),t.ɵɵelementEnd(),t.ɵɵelementStart(122,"mat-form-field",19),t.ɵɵelement(123,"input",46),t.ɵɵpipe(124,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(125,"div",17)(126,"div",44),t.ɵɵpipe(127,"translate"),t.ɵɵtext(128,"gateway.wait-after-failed-attempts"),t.ɵɵelementEnd(),t.ɵɵelementStart(129,"mat-form-field",19),t.ɵɵelement(130,"input",47),t.ɵɵpipe(131,"translate"),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(132,"div",29),t.ɵɵelement(133,"tb-modbus-values",48),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(134,"div",49)(135,"button",50),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(136),t.ɵɵpipe(137,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(138,"button",51),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.add())})),t.ɵɵtext(139),t.ɵɵpipe(140,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(22),a=t.ɵɵreference(55);t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,45,"gateway.server-slave")),t.ɵɵadvance(3),t.ɵɵproperty("tb-help",n.modbusHelpLink),t.ɵɵadvance(4),t.ɵɵproperty("formGroup",n.slaveConfigFormGroup),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",n.modbusProtocolTypes),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial)("ngIfElse",e),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(25,47,"gateway.hints.modbus.framer-type")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.protocolType===n.ModbusProtocolType.Serial?n.modbusSerialMethodTypes:n.modbusMethodTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType===n.ModbusProtocolType.Serial),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(33,49,"gateway.hints.modbus.unit-id")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(37,51,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("unitId").hasError("required")&&n.slaveConfigFormGroup.get("unitId").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(44,53,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceName").hasError("required")&&n.slaveConfigFormGroup.get("deviceName").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(51,55,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceType").hasError("required")&&n.slaveConfigFormGroup.get("deviceType").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.data.hideNewFields)("ngIfElse",a),t.ɵɵadvance(11),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(65,57,"gateway.hints.modbus.connection-timeout")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(69,59,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(72,61,"gateway.hints.modbus.byte-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(79,63,"gateway.hints.modbus.word-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(88,65,"gateway.hints.modbus.retries")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(90,67,"gateway.retries")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(94,69,"gateway.hints.modbus.retries-on-empty")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(96,71,"gateway.retries-on-empty")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(100,73,"gateway.hints.modbus.retries-on-invalid")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(102,75,"gateway.retries-on-invalid")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(105,77,"gateway.hints.modbus.poll-period")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(110,79,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(113,81,"gateway.hints.modbus.connect-attempt-time")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(117,83,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(120,85,"gateway.hints.modbus.connect-attempt-count")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(124,87,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(127,89,"gateway.hints.modbus.wait-after-failed-attempts")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(131,91,"gateway.set")),t.ɵɵadvance(3),t.ɵɵproperty("singleMode",!0)("hideNewFields",n.data.hideNewFields),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(137,93,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.slaveConfigFormGroup.invalid||!n.slaveConfigFormGroup.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(140,95,n.data.buttonTitle)," ")}},dependencies:t.ɵɵgetComponentDepsFactory(sd,[V,b,Dc,Ac,ns,ma,na]),styles:['@charset "UTF-8";[_nghost-%COMP%] .slaves-config-container[_ngcontent-%COMP%]{width:80vw;max-width:900px}[_nghost-%COMP%] .slave-name-label[_ngcontent-%COMP%]{margin-right:16px;color:#000000de}[_nghost-%COMP%] .fixed-title-width-260[_ngcontent-%COMP%]{min-width:260px}[_nghost-%COMP%] .security-config .fixed-title-width{min-width:230px}'],changeDetection:o.OnPush})}}function pd(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusProtocolLabelsMap.get(e))}}function ld(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.host-required"))}function cd(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.host"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",53),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,ld,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.host")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("host").hasError("required")&&e.slaveConfigFormGroup.get("host").touched)}}function dd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.slaveConfigFormGroup.get("port")))}}function md(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",55),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,dd,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,5,"gateway.hints.modbus.port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("min",e.portLimits.MIN),t.ɵɵpropertyInterpolate("max",e.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,7,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(e.slaveConfigFormGroup.get("port").hasError("required")||e.slaveConfigFormGroup.get("port").hasError("min")||e.slaveConfigFormGroup.get("port").hasError("max"))&&e.slaveConfigFormGroup.get("port").touched)}}function ud(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.port-required"))}function gd(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",22),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",19),t.ɵɵelement(5,"input",56),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,ud,3,3,"mat-icon",24),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.serial-port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("serialPort").hasError("required")&&e.slaveConfigFormGroup.get("serialPort").touched)}}function yd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusMethodLabelsMap.get(e))}}function hd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function fd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function vd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusParityLabelsMap.get(e))}}function bd(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵelementStart(1,"div",17)(2,"div",18),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4,"gateway.baudrate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",19)(6,"mat-select",57),t.ɵɵtemplate(7,hd,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(8,"div",17)(9,"div",18),t.ɵɵpipe(10,"translate"),t.ɵɵtext(11,"gateway.bytesize"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",19)(13,"mat-select",58),t.ɵɵtemplate(14,fd,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(15,"div",17)(16,"div",18),t.ɵɵpipe(17,"translate"),t.ɵɵtext(18,"gateway.stopbits"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"mat-form-field",19),t.ɵɵelement(20,"input",59),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(22,"div",17)(23,"div",18),t.ɵɵpipe(24,"translate"),t.ɵɵtext(25,"gateway.parity"),t.ɵɵelementEnd(),t.ɵɵelementStart(26,"mat-form-field",19)(27,"mat-select",60),t.ɵɵtemplate(28,vd,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(29,"div",36)(30,"mat-slide-toggle",61)(31,"mat-label",38),t.ɵɵpipe(32,"translate"),t.ɵɵtext(33),t.ɵɵpipe(34,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,10,"gateway.hints.modbus.baudrate")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusBaudrates),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(10,12,"gateway.hints.modbus.bytesize")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusByteSizes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(17,14,"gateway.hints.modbus.stopbits")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(21,16,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(24,18,"gateway.hints.modbus.parity")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusParities),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(32,20,"gateway.hints.modbus.strict")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(34,22,"gateway.strict")," ")}}function xd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.unit-id-required"))}function wd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-required"))}function Cd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",54),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-profile-required"))}function Sd(e,n){1&e&&(t.ɵɵelementStart(0,"div",36)(1,"mat-slide-toggle",62)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,1,"gateway.send-data-on-change")," "))}function Ed(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",63),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("defaultValue",e.ReportStrategyDefaultValue.Device)("isExpansionMode",!0)}}function Td(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Id(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",52),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function kd(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",64)(1,"mat-expansion-panel",65)(2,"mat-expansion-panel-header",66)(3,"mat-panel-title")(4,"mat-slide-toggle",67),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelement(8,"tb-modbus-security-config",68),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("expanded",e.showSecurityControl.value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.showSecurityControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,3,"gateway.tls-connection")," ")}}e("ModbusSlaveDialogComponent",sd);class Md extends tc{constructor(e,t,n,a,r){super(e,t,n,a,r),this.fb=e,this.store=t,this.router=n,this.data=a,this.dialogRef=r}getSlaveResultData(){const{values:e,type:t,serialPort:n,...a}=this.slaveConfigFormGroup.value,r={...a,type:t,...e};return t===Ya.Serial&&(r.port=n),K(r),r}addFieldsToFormGroup(){this.slaveConfigFormGroup.addControl("sendDataOnlyOnChange",this.fb.control(!1))}static{this.ɵfac=function(e){return new(e||Md)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(de.Router),t.ɵɵdirectiveInject(se),t.ɵɵdirectiveInject(pe.MatDialogRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Md,selectors:[["tb-modbus-legacy-slave-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:141,vars:97,consts:[["serialPort",""],["reportStrategy",""],[1,"slaves-config-container"],["color","primary"],[1,"flex-1"],[3,"tb-help"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content","",1,"tb-form-panel",3,"formGroup"],[1,"stroked","tb-form-panel"],[1,"tb-form-panel","no-border","no-padding","padding-top"],[1,"tb-flex","row","space-between","align-center","no-gap","fill-width"],["translate","",1,"fixed-title-width"],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],["class","tb-form-row column-xs",4,"ngIf"],["class","tb-form-row column-xs",4,"ngIf","ngIfElse"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["formControlName","method"],[4,"ngIf"],["translate","",1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","min","0","name","value","formControlName","unitId",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","deviceName",3,"placeholder"],["matInput","","name","value","formControlName","deviceType",3,"placeholder"],["class","tb-form-row",4,"ngIf","ngIfElse"],[1,"tb-form-panel","stroked"],[1,"tb-settings"],["translate","",1,"tb-form-panel-title"],["matInput","","type","number","min","0","name","value","formControlName","timeout",3,"placeholder"],["formControlName","byteOrder"],["formControlName","wordOrder"],["class","tb-form-panel stroked tb-slide-toggle",4,"ngIf"],[1,"tb-form-row"],["formControlName","retries",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["formControlName","retryOnEmpty",1,"mat-slide"],["formControlName","retryOnInvalid",1,"mat-slide"],[1,"fixed-title-width-260","tb-required",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip","","translate",""],["matInput","","type","number","min","0","name","value","formControlName","pollPeriod",3,"placeholder"],["translate","",1,"fixed-title-width-260","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","min","0","name","value","formControlName","connectAttemptTimeMs",3,"placeholder"],["matInput","","type","number","min","0","name","value","formControlName","connectAttemptCount",3,"placeholder"],["matInput","","type","number","min","0","name","value","formControlName","waitAfterFailedAttemptsMs",3,"placeholder"],["formControlName","values",3,"singleMode","hideNewFields"],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","primary","type","button","cdkFocusInitial","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[3,"value"],["matInput","","name","value","formControlName","host",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],["matInput","","name","value","formControlName","serialPort",3,"placeholder"],["formControlName","baudrate"],["formControlName","bytesize"],["matInput","","type","number","min","0","name","value","formControlName","stopbits",3,"placeholder"],["formControlName","parity"],["formControlName","strict",1,"mat-slide"],["formControlName","sendDataOnlyOnChange",1,"mat-slide"],["formControlName","reportStrategy",1,"stroked","tb-form-panel",3,"defaultValue","isExpansionMode"],[1,"tb-form-panel","stroked","tb-slide-toggle"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],[1,"mat-slide","justify-start",3,"click","formControl"],["formControlName","security",1,"security-config"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",2)(1,"mat-toolbar",3)(2,"h2"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",4)(6,"div",5),t.ɵɵelementStart(7,"button",6),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵelementStart(8,"mat-icon",7),t.ɵɵtext(9,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",8)(11,"div",9)(12,"div",10)(13,"div",11)(14,"div",12),t.ɵɵtext(15,"gateway.server-connection"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"tb-toggle-select",13),t.ɵɵtemplate(17,pd,2,2,"tb-toggle-option",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",10),t.ɵɵtemplate(19,cd,8,7,"div",15)(20,md,8,9,"div",16)(21,gd,8,7,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(23,"div",17)(24,"div",18),t.ɵɵpipe(25,"translate"),t.ɵɵtext(26," gateway.method "),t.ɵɵelementEnd(),t.ɵɵelementStart(27,"mat-form-field",19)(28,"mat-select",20),t.ɵɵtemplate(29,yd,2,2,"mat-option",14),t.ɵɵelementEnd()()()(),t.ɵɵtemplate(30,bd,35,24,"ng-container",21),t.ɵɵelementStart(31,"div",17)(32,"div",22),t.ɵɵpipe(33,"translate"),t.ɵɵtext(34,"gateway.unit-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(35,"mat-form-field",19),t.ɵɵelement(36,"input",23),t.ɵɵpipe(37,"translate"),t.ɵɵtemplate(38,xd,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵelementStart(39,"div",17)(40,"div",25),t.ɵɵtext(41,"gateway.device-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(42,"mat-form-field",19),t.ɵɵelement(43,"input",26),t.ɵɵpipe(44,"translate"),t.ɵɵtemplate(45,wd,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"div",17)(47,"div",25),t.ɵɵtext(48,"gateway.device-profile"),t.ɵɵelementEnd(),t.ɵɵelementStart(49,"mat-form-field",19),t.ɵɵelement(50,"input",27),t.ɵɵpipe(51,"translate"),t.ɵɵtemplate(52,Cd,3,3,"mat-icon",24),t.ɵɵelementEnd()(),t.ɵɵtemplate(53,Sd,5,3,"div",28)(54,Ed,1,2,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(56,"div",29)(57,"mat-expansion-panel",30)(58,"mat-expansion-panel-header")(59,"mat-panel-title")(60,"div",31),t.ɵɵtext(61,"gateway.advanced-connection-settings"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(62,"div",10)(63,"div",17)(64,"div",18),t.ɵɵpipe(65,"translate"),t.ɵɵtext(66,"gateway.connection-timeout"),t.ɵɵelementEnd(),t.ɵɵelementStart(67,"mat-form-field",19),t.ɵɵelement(68,"input",32),t.ɵɵpipe(69,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(70,"div",17)(71,"div",18),t.ɵɵpipe(72,"translate"),t.ɵɵtext(73,"gateway.byte-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(74,"mat-form-field",19)(75,"mat-select",33),t.ɵɵtemplate(76,Td,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(77,"div",17)(78,"div",18),t.ɵɵpipe(79,"translate"),t.ɵɵtext(80,"gateway.word-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(81,"mat-form-field",19)(82,"mat-select",34),t.ɵɵtemplate(83,Id,2,2,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵtemplate(84,kd,9,5,"div",35),t.ɵɵelementStart(85,"div",36)(86,"mat-slide-toggle",37)(87,"mat-label",38),t.ɵɵpipe(88,"translate"),t.ɵɵtext(89),t.ɵɵpipe(90,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(91,"div",36)(92,"mat-slide-toggle",39)(93,"mat-label",38),t.ɵɵpipe(94,"translate"),t.ɵɵtext(95),t.ɵɵpipe(96,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(97,"div",36)(98,"mat-slide-toggle",40)(99,"mat-label",38),t.ɵɵpipe(100,"translate"),t.ɵɵtext(101),t.ɵɵpipe(102,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(103,"div",17)(104,"div",41),t.ɵɵpipe(105,"translate"),t.ɵɵelementStart(106,"span",42),t.ɵɵtext(107," gateway.poll-period "),t.ɵɵelementEnd()(),t.ɵɵelementStart(108,"mat-form-field",19),t.ɵɵelement(109,"input",43),t.ɵɵpipe(110,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(111,"div",17)(112,"div",44),t.ɵɵpipe(113,"translate"),t.ɵɵtext(114,"gateway.connect-attempt-time"),t.ɵɵelementEnd(),t.ɵɵelementStart(115,"mat-form-field",19),t.ɵɵelement(116,"input",45),t.ɵɵpipe(117,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(118,"div",17)(119,"div",44),t.ɵɵpipe(120,"translate"),t.ɵɵtext(121,"gateway.connect-attempt-count"),t.ɵɵelementEnd(),t.ɵɵelementStart(122,"mat-form-field",19),t.ɵɵelement(123,"input",46),t.ɵɵpipe(124,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(125,"div",17)(126,"div",44),t.ɵɵpipe(127,"translate"),t.ɵɵtext(128,"gateway.wait-after-failed-attempts"),t.ɵɵelementEnd(),t.ɵɵelementStart(129,"mat-form-field",19),t.ɵɵelement(130,"input",47),t.ɵɵpipe(131,"translate"),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(132,"div",29),t.ɵɵelement(133,"tb-modbus-values",48),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(134,"div",49)(135,"button",50),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(136),t.ɵɵpipe(137,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(138,"button",51),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.add())})),t.ɵɵtext(139),t.ɵɵpipe(140,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(22),a=t.ɵɵreference(55);t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,45,"gateway.server-slave")),t.ɵɵadvance(3),t.ɵɵproperty("tb-help",n.modbusHelpLink),t.ɵɵadvance(4),t.ɵɵproperty("formGroup",n.slaveConfigFormGroup),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",n.modbusProtocolTypes),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial)("ngIfElse",e),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(25,47,"gateway.hints.modbus.framer-type")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.protocolType===n.ModbusProtocolType.Serial?n.modbusSerialMethodTypes:n.modbusMethodTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType===n.ModbusProtocolType.Serial),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(33,49,"gateway.hints.modbus.unit-id")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(37,51,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("unitId").hasError("required")&&n.slaveConfigFormGroup.get("unitId").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(44,53,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceName").hasError("required")&&n.slaveConfigFormGroup.get("deviceName").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(51,55,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceType").hasError("required")&&n.slaveConfigFormGroup.get("deviceType").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.data.hideNewFields)("ngIfElse",a),t.ɵɵadvance(11),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(65,57,"gateway.hints.modbus.connection-timeout")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(69,59,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(72,61,"gateway.hints.modbus.byte-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(79,63,"gateway.hints.modbus.word-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(88,65,"gateway.hints.modbus.retries")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(90,67,"gateway.retries")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(94,69,"gateway.hints.modbus.retries-on-empty")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(96,71,"gateway.retries-on-empty")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(100,73,"gateway.hints.modbus.retries-on-invalid")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(102,75,"gateway.retries-on-invalid")," "),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(105,77,"gateway.hints.modbus.poll-period")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(110,79,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(113,81,"gateway.hints.modbus.connect-attempt-time")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(117,83,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(120,85,"gateway.hints.modbus.connect-attempt-count")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(124,87,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(127,89,"gateway.hints.modbus.wait-after-failed-attempts")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(131,91,"gateway.set")),t.ɵɵadvance(3),t.ɵɵproperty("singleMode",!0)("hideNewFields",n.data.hideNewFields),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(137,93,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.slaveConfigFormGroup.invalid||!n.slaveConfigFormGroup.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(140,95,n.data.buttonTitle)," ")}},dependencies:t.ɵɵgetComponentDepsFactory(Md,[V,b,Dc,Ac,ns,ma]),styles:['@charset "UTF-8";[_nghost-%COMP%] .slaves-config-container[_ngcontent-%COMP%]{width:80vw;max-width:900px}[_nghost-%COMP%] .slave-name-label[_ngcontent-%COMP%]{margin-right:16px;color:#000000de}[_nghost-%COMP%] .fixed-title-width-260[_ngcontent-%COMP%]{min-width:260px}[_nghost-%COMP%] .security-config .fixed-title-width{min-width:230px}'],changeDetection:o.OnPush})}}function Pd(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",38),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusProtocolLabelsMap.get(e))}}function Fd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.host-required"))}function Od(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10)(1,"div",14),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.host"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",12),t.ɵɵelement(5,"input",39),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Fd,3,3,"mat-icon",16),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.host")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("host").hasError("required")&&e.slaveConfigFormGroup.get("host").touched)}}function qd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.slaveConfigFormGroup.get("port")))}}function Bd(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10)(1,"div",14),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",12),t.ɵɵelement(5,"input",41),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,qd,3,3,"mat-icon",16),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,5,"gateway.hints.modbus.port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("min",e.portLimits.MIN),t.ɵɵpropertyInterpolate("max",e.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,7,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(e.slaveConfigFormGroup.get("port").hasError("required")||e.slaveConfigFormGroup.get("port").hasError("min")||e.slaveConfigFormGroup.get("port").hasError("max"))&&e.slaveConfigFormGroup.get("port").touched)}}function Rd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.port-required"))}function Nd(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10)(1,"div",14),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",12),t.ɵɵelement(5,"input",42),t.ɵɵpipe(6,"translate"),t.ɵɵtemplate(7,Rd,3,3,"mat-icon",16),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,3,"gateway.hints.modbus.serial-port")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,5,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.slaveConfigFormGroup.get("port").hasError("required")&&e.slaveConfigFormGroup.get("port").touched)}}function _d(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",38),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.ModbusMethodLabelsMap.get(e))}}function Dd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.unit-id-required"))}function Vd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-required"))}function Gd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",40),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-profile-required"))}function Ad(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",38),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function jd(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10)(1,"div",11),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.baudrate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",12)(5,"mat-select",43),t.ɵɵtemplate(6,Ad,2,2,"mat-option",6),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,2,"gateway.hints.modbus.baudrate")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.modbusBaudrates)}}function Ld(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",38),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Ud(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",38),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function $d(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",44)(1,"mat-expansion-panel",45)(2,"mat-expansion-panel-header",46)(3,"mat-panel-title")(4,"mat-slide-toggle",47),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelement(8,"tb-modbus-security-config",48),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("expanded",e.showSecurityControl.value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.showSecurityControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,3,"gateway.tls-connection")," ")}}e("ModbusLegacySlaveDialogComponent",Md);class zd{constructor(e){this.fb=e,this.ModbusProtocolLabelsMap=cr,this.ModbusMethodLabelsMap=lr,this.portLimits=Fa,this.modbusProtocolTypes=Object.values(Ya),this.modbusMethodTypes=Object.values(Xa),this.modbusSerialMethodTypes=Object.values(Za),this.modbusOrderType=Object.values(tr),this.ModbusProtocolType=Ya,this.modbusBaudrates=rr,this.isSlaveEnabled=!1,this.serialSpecificControlKeys=["serialPort","baudrate"],this.tcpUdpSpecificControlKeys=["port","security","host"],this.destroy$=new me,this.showSecurityControl=this.fb.control(!1),this.slaveConfigFormGroup=this.fb.group({type:[Ya.TCP],host:["",[ne.required,ne.pattern($e)]],port:[null,[ne.required,ne.min(Fa.MIN),ne.max(Fa.MAX)]],serialPort:["",[ne.required,ne.pattern($e)]],method:[Xa.SOCKET],unitId:[null,[ne.required]],baudrate:[this.modbusBaudrates[0]],deviceName:["",[ne.required,ne.pattern($e)]],deviceType:["",[ne.required,ne.pattern($e)]],pollPeriod:[5e3,[ne.required]],sendDataToThingsBoard:[!1],byteOrder:[tr.BIG],wordOrder:[tr.BIG],security:[],identity:this.fb.group({vendorName:["",[ne.pattern($e)]],productCode:["",[ne.pattern($e)]],vendorUrl:["",[ne.pattern($e)]],productName:["",[ne.pattern($e)]],modelName:["",[ne.pattern($e)]]}),values:[]}),this.observeValueChanges(),this.observeTypeChange(),this.observeShowSecurity()}get protocolType(){return this.slaveConfigFormGroup.get("type").value}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}validate(){return this.slaveConfigFormGroup.valid?null:{slaveConfigFormGroup:{valid:!1}}}writeValue(e){this.showSecurityControl.patchValue(!!e.security&&!U(e.security,{})),this.updateSlaveConfig(e)}setDisabledState(e){this.isSlaveEnabled=!e,this.updateFormEnableState()}observeValueChanges(){this.slaveConfigFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{e.type===Ya.Serial&&(e.port=e.serialPort,delete e.serialPort),this.onChange(e),this.onTouched()}))}observeTypeChange(){this.slaveConfigFormGroup.get("type").valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.updateFormEnableState(),this.updateMethodType(e)}))}updateMethodType(e){this.slaveConfigFormGroup.get("method").value!==Xa.RTU&&this.slaveConfigFormGroup.get("method").patchValue(e===Ya.Serial?Za.ASCII:Xa.SOCKET,{emitEvent:!1})}updateFormEnableState(){this.isSlaveEnabled?(this.slaveConfigFormGroup.enable({emitEvent:!1}),this.showSecurityControl.enable({emitEvent:!1})):(this.slaveConfigFormGroup.disable({emitEvent:!1}),this.showSecurityControl.disable({emitEvent:!1})),this.updateEnablingByProtocol(),this.updateSecurityEnable(this.showSecurityControl.value)}observeShowSecurity(){this.showSecurityControl.valueChanges.pipe(be(this.destroy$)).subscribe((e=>this.updateSecurityEnable(e)))}updateSecurityEnable(e){e&&this.isSlaveEnabled&&this.protocolType!==Ya.Serial?this.slaveConfigFormGroup.get("security").enable({emitEvent:!1}):this.slaveConfigFormGroup.get("security").disable({emitEvent:!1})}updateEnablingByProtocol(){const e=this.protocolType===Ya.Serial,t=e?this.serialSpecificControlKeys:this.tcpUdpSpecificControlKeys,n=e?this.tcpUdpSpecificControlKeys:this.serialSpecificControlKeys;this.isSlaveEnabled&&t.forEach((e=>this.slaveConfigFormGroup.get(e)?.enable({emitEvent:!1}))),n.forEach((e=>this.slaveConfigFormGroup.get(e)?.disable({emitEvent:!1})))}updateSlaveConfig(e){const{vendorName:t="",productCode:n="",vendorUrl:a="",productName:r="",modelName:i=""}=e.identity??{},o={vendorName:t,productCode:n,vendorUrl:a,productName:r,modelName:i},{type:s=Ya.TCP,method:p=Xa.RTU,unitId:l=0,deviceName:c="",deviceType:d="",pollPeriod:m=5e3,sendDataToThingsBoard:u=!1,byteOrder:g=tr.BIG,wordOrder:y=tr.BIG,security:h={},values:f={},baudrate:v=this.modbusBaudrates[0],host:b="",port:x=null}=e,w={type:s,method:p,unitId:l,deviceName:c,deviceType:d,pollPeriod:m,sendDataToThingsBoard:!!u,byteOrder:g,wordOrder:y,security:h,identity:o,values:f,baudrate:v,host:s===Ya.Serial?"":b,port:s===Ya.Serial?null:x,serialPort:s===Ya.Serial?x:""};this.slaveConfigFormGroup.setValue(w,{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||zd)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:zd,selectors:[["tb-modbus-slave-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>zd)),multi:!0},{provide:re,useExisting:i((()=>zd)),multi:!0}]),t.ɵɵStandaloneFeature],decls:112,vars:59,consts:[["serialPort",""],[1,"slave-container",3,"formGroup"],[1,"slave-content","tb-form-panel","no-border","no-padding","padding-top"],[1,"tb-flex","row","space-between","align-center","no-gap","fill-width"],["translate","",1,"fixed-title-width"],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-panel","no-border","no-padding","padding-top"],["class","tb-form-row column-xs",4,"ngIf"],["class","tb-form-row column-xs",4,"ngIf","ngIfElse"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["formControlName","method"],["translate","",1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","min","0","name","value","formControlName","unitId",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","deviceName",3,"placeholder"],["matInput","","name","value","formControlName","deviceType",3,"placeholder"],[1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["tbTruncateWithTooltip","","translate",""],["matInput","","type","number","min","0","name","value","formControlName","pollPeriod",3,"placeholder"],[1,"tb-form-row"],["formControlName","sendDataToThingsBoard",1,"mat-slide"],[1,"tb-form-panel","stroked"],[1,"tb-settings"],["translate","",1,"tb-form-panel-title"],["formControlName","byteOrder"],["formControlName","wordOrder"],["class","tb-form-panel stroked tb-slide-toggle",4,"ngIf"],[3,"formGroup"],["matInput","","name","value","formControlName","vendorName",3,"placeholder"],["matInput","","name","value","formControlName","productCode",3,"placeholder"],["matInput","","name","value","formControlName","vendorUrl",3,"placeholder"],["matInput","","name","value","formControlName","productName",3,"placeholder"],["matInput","","name","value","formControlName","modelName",3,"placeholder"],["formControlName","values"],[3,"value"],["matInput","","name","value","formControlName","host",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],["matInput","","name","value","formControlName","serialPort",3,"placeholder"],["formControlName","baudrate"],[1,"tb-form-panel","stroked","tb-slide-toggle"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],[1,"mat-slide",3,"click","formControl"],["formControlName","security"]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",1)(1,"div",2)(2,"div",3)(3,"div",4),t.ɵɵtext(4,"gateway.server-slave-config"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"tb-toggle-select",5),t.ɵɵtemplate(6,Pd,2,2,"tb-toggle-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"div",7),t.ɵɵtemplate(8,Od,8,7,"div",8)(9,Bd,8,9,"div",9)(10,Nd,8,7,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(12,"div",10)(13,"div",11),t.ɵɵpipe(14,"translate"),t.ɵɵtext(15," gateway.method "),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"mat-form-field",12)(17,"mat-select",13),t.ɵɵtemplate(18,_d,2,2,"mat-option",6),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(19,"div",10)(20,"div",14),t.ɵɵpipe(21,"translate"),t.ɵɵtext(22,"gateway.unit-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-form-field",12),t.ɵɵelement(24,"input",15),t.ɵɵpipe(25,"translate"),t.ɵɵtemplate(26,Dd,3,3,"mat-icon",16),t.ɵɵelementEnd()(),t.ɵɵelementStart(27,"div",10)(28,"div",17),t.ɵɵtext(29,"gateway.device-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(30,"mat-form-field",12),t.ɵɵelement(31,"input",18),t.ɵɵpipe(32,"translate"),t.ɵɵtemplate(33,Vd,3,3,"mat-icon",16),t.ɵɵelementEnd()(),t.ɵɵelementStart(34,"div",10)(35,"div",17),t.ɵɵtext(36,"gateway.device-profile"),t.ɵɵelementEnd(),t.ɵɵelementStart(37,"mat-form-field",12),t.ɵɵelement(38,"input",19),t.ɵɵpipe(39,"translate"),t.ɵɵtemplate(40,Gd,3,3,"mat-icon",16),t.ɵɵelementEnd()(),t.ɵɵelementStart(41,"div",10)(42,"div",20),t.ɵɵpipe(43,"translate"),t.ɵɵelementStart(44,"span",21),t.ɵɵtext(45," gateway.poll-period "),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"mat-form-field",12),t.ɵɵelement(47,"input",22),t.ɵɵpipe(48,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(49,jd,7,4,"div",8),t.ɵɵelementStart(50,"div",23)(51,"mat-slide-toggle",24)(52,"mat-label"),t.ɵɵtext(53),t.ɵɵpipe(54,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(55,"div",25)(56,"mat-expansion-panel",26)(57,"mat-expansion-panel-header")(58,"mat-panel-title")(59,"div",27),t.ɵɵtext(60,"gateway.advanced-connection-settings"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(61,"div",7)(62,"div",10)(63,"div",11),t.ɵɵpipe(64,"translate"),t.ɵɵtext(65,"gateway.byte-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(66,"mat-form-field",12)(67,"mat-select",28),t.ɵɵtemplate(68,Ld,2,2,"mat-option",6),t.ɵɵelementEnd()()(),t.ɵɵelementStart(69,"div",10)(70,"div",11),t.ɵɵpipe(71,"translate"),t.ɵɵtext(72,"gateway.word-order"),t.ɵɵelementEnd(),t.ɵɵelementStart(73,"mat-form-field",12)(74,"mat-select",29),t.ɵɵtemplate(75,Ud,2,2,"mat-option",6),t.ɵɵelementEnd()()(),t.ɵɵtemplate(76,$d,9,5,"div",30),t.ɵɵelementContainerStart(77,31),t.ɵɵelementStart(78,"div",10)(79,"div",4),t.ɵɵtext(80,"gateway.vendor-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(81,"mat-form-field",12),t.ɵɵelement(82,"input",32),t.ɵɵpipe(83,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(84,"div",10)(85,"div",4),t.ɵɵtext(86,"gateway.product-code"),t.ɵɵelementEnd(),t.ɵɵelementStart(87,"mat-form-field",12),t.ɵɵelement(88,"input",33),t.ɵɵpipe(89,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(90,"div",10)(91,"div",4),t.ɵɵtext(92,"gateway.vendor-url"),t.ɵɵelementEnd(),t.ɵɵelementStart(93,"mat-form-field",12),t.ɵɵelement(94,"input",34),t.ɵɵpipe(95,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(96,"div",10)(97,"div",4),t.ɵɵtext(98,"gateway.product-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(99,"mat-form-field",12),t.ɵɵelement(100,"input",35),t.ɵɵpipe(101,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(102,"div",10)(103,"div",4),t.ɵɵtext(104,"gateway.model-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(105,"mat-form-field",12),t.ɵɵelement(106,"input",36),t.ɵɵpipe(107,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()()(),t.ɵɵelementStart(108,"div",25)(109,"div",27),t.ɵɵtext(110,"gateway.values"),t.ɵɵelementEnd(),t.ɵɵelement(111,"tb-modbus-values",37),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵreference(11);t.ɵɵproperty("formGroup",n.slaveConfigFormGroup),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.modbusProtocolTypes),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial)("ngIfElse",e),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(14,29,"gateway.hints.modbus.framer-type")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.protocolType===n.ModbusProtocolType.Serial?n.modbusSerialMethodTypes:n.modbusMethodTypes),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(21,31,"gateway.hints.modbus.unit-id")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(25,33,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("unitId").hasError("required")&&n.slaveConfigFormGroup.get("unitId").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(32,35,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceName").hasError("required")&&n.slaveConfigFormGroup.get("deviceName").touched),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(39,37,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.slaveConfigFormGroup.get("deviceType").hasError("required")&&n.slaveConfigFormGroup.get("deviceType").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(43,39,"gateway.hints.modbus.poll-period")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(48,41,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.protocolType===n.ModbusProtocolType.Serial),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(54,43,"gateway.send-data-to-platform")," "),t.ɵɵadvance(10),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(64,45,"gateway.hints.modbus.byte-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(71,47,"gateway.hints.modbus.word-order")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.modbusOrderType),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.protocolType!==n.ModbusProtocolType.Serial),t.ɵɵadvance(),t.ɵɵproperty("formGroup",n.slaveConfigFormGroup.get("identity")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(83,49,"gateway.set")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(89,51,"gateway.set")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(95,53,"gateway.set")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(101,55,"gateway.set")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(107,57,"gateway.set"))}},dependencies:t.ɵɵgetComponentDepsFactory(zd,[V,b,Dc,Ac,ns,na]),encapsulation:2,changeDetection:o.OnPush})}}e("ModbusSlaveConfigComponent",zd);const Kd=["searchInput"],Hd=()=>["deviceName","info","unitId","type","actions"],Wd=()=>({minWidth:"96px",textAlign:"center"});function Qd(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",9)(1,"div",28)(2,"span",29),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()(),t.ɵɵelement(5,"span",11),t.ɵɵelementStart(6,"button",13),t.ɵɵpipe(7,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.manageSlave(n))})),t.ɵɵelementStart(8,"mat-icon"),t.ɵɵtext(9,"add"),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"button",13),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.enterFilterMode())})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"search"),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.servers-slaves")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,5,"action.add")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(11,7,"action.search")))}function Jd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",30)(1,"div",31),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.device-name")))}function Yd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",30)(1,"div",31),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.deviceName)}}function Xd(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",30),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.info")," "))}function Zd(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",30)(1,"div",31),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){let e;const a=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(null!==(e=a.host)&&void 0!==e?e:a.port)}}function em(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",30),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.unit-id")," "))}function tm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",30)(1,"div",31),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.unitId)}}function nm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",30)(1,"div"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.type")))}function am(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",30),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",a.ModbusProtocolLabelsMap.get(e.type)," ")}}function rm(e,n){1&e&&t.ɵɵelement(0,"mat-header-cell",32)}function im(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",13),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageSlave(n,a))})),t.ɵɵelementStart(2,"tb-icon"),t.ɵɵtext(3,"edit"),t.ɵɵelementEnd()(),t.ɵɵelementStart(4,"button",13),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteSlave(n,a))})),t.ɵɵelementStart(6,"tb-icon"),t.ɵɵtext(7,"delete"),t.ɵɵelementEnd()()}2&e&&(t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,2,"action.edit")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(5,4,"action.delete")))}function om(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtemplate(1,im,8,6,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(3,"div",33),t.ɵɵelementContainer(4,34),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",35)(6,"button",36),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(7,"mat-icon",37),t.ɵɵtext(8,"more_vert"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"mat-menu",38,2),t.ɵɵelementContainer(11,34),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(2),n=t.ɵɵreference(10);t.ɵɵadvance(3),t.ɵɵstyleMap(t.ɵɵpureFunction0(5,Wd)),t.ɵɵadvance(),t.ɵɵproperty("ngTemplateOutlet",e),t.ɵɵadvance(2),t.ɵɵproperty("matMenuTriggerFor",n),t.ɵɵadvance(5),t.ɵɵproperty("ngTemplateOutlet",e)}}function sm(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",39)}function pm(e,n){1&e&&t.ɵɵelement(0,"mat-row")}class lm{constructor(e,t,n,a,r){this.translate=e,this.dialog=t,this.dialogService=n,this.fb=a,this.cdr=r,this.isLegacy=!1,this.textSearchMode=!1,this.textSearch=this.fb.control("",{nonNullable:!0}),this.ModbusProtocolLabelsMap=cr,this.onChange=()=>{},this.onTouched=()=>{},this.destroy$=new me,this.masterFormGroup=this.fb.group({slaves:this.fb.array([])}),this.dataSource=new cm}get slaves(){return this.masterFormGroup.get("slaves")}ngOnInit(){this.masterFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.updateTableData(e.slaves),this.onChange(e),this.onTouched()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}ngAfterViewInit(){this.textSearch.valueChanges.pipe(ke(150),Me(((e,t)=>(e??"")===t.trim())),be(this.destroy$)).subscribe((e=>this.updateTableData(this.slaves.value,e.trim())))}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){this.slaves.clear(),this.pushDataAsFormArrays(e.slaves)}enterFilterMode(){this.textSearchMode=!0,this.cdr.detectChanges();const e=this.searchInputField.nativeElement;e.focus(),e.setSelectionRange(0,0)}exitFilterMode(){this.updateTableData(this.slaves.value),this.textSearchMode=!1,this.textSearch.reset()}manageSlave(e,t){e&&e.stopPropagation();const n=j(t),a=n?this.slaves.at(t).value:{};this.getSlaveDialog(a,n?"action.apply":"action.add").afterClosed().pipe(Ie(1),be(this.destroy$)).subscribe((e=>{e&&(n?this.slaves.at(t).patchValue(e):this.slaves.push(this.fb.control(e)),this.masterFormGroup.markAsDirty())}))}getSlaveDialog(e,t){return this.isLegacy?this.dialog.open(Md,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{value:e,hideNewFields:!0,buttonTitle:t}}):this.dialog.open(sd,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{value:e,buttonTitle:t,hideNewFields:!1}})}deleteSlave(e,t){e&&e.stopPropagation(),this.dialogService.confirm(this.translate.instant("gateway.delete-slave-title"),"",this.translate.instant("action.no"),this.translate.instant("action.yes"),!0).pipe(Ie(1),be(this.destroy$)).subscribe((e=>{e&&(this.slaves.removeAt(t),this.masterFormGroup.markAsDirty())}))}updateTableData(e,t){t&&(e=e.filter((e=>Object.values(e).some((e=>e.toString().toLowerCase().includes(t.toLowerCase())))))),this.dataSource.loadData(e)}pushDataAsFormArrays(e){e?.length&&e.forEach((e=>this.slaves.push(this.fb.control(e))))}static{this.ɵfac=function(e){return new(e||lm)(t.ɵɵdirectiveInject(Ne.TranslateService),t.ɵɵdirectiveInject(pe.MatDialog),t.ɵɵdirectiveInject(A.DialogService),t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:lm,selectors:[["tb-modbus-master-table"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(Kd,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.searchInputField=e.first)}},inputs:{isLegacy:"isLegacy"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>lm)),multi:!0}]),t.ɵɵStandaloneFeature],decls:55,vars:41,consts:[["searchInput",""],["rowActions",""],["cellActionsMenu","matMenu"],[1,"tb-master-table","tb-absolute-fill"],[1,"tb-form-panel","no-border","no-padding","padding-top","hint-container"],["tbTruncateWithTooltip","",1,"tb-form-hint","tb-primary-fill","tb-flex"],[1,"tb-master-table-content","flex","flex-col"],[1,"mat-mdc-table-toolbar"],["class","mat-toolbar-tools",4,"ngIf"],[1,"mat-toolbar-tools"],["mat-icon-button","","matTooltipPosition","above",3,"matTooltip"],[1,"flex-1"],["matInput","",3,"formControl","placeholder"],["mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],[1,"table-container"],["mat-table","",3,"dataSource"],[3,"matColumnDef"],["class","table-value-column",4,"matHeaderCellDef"],["class","table-value-column",4,"matCellDef"],["matColumnDef","actions","stickyEnd",""],["class","w-12",4,"matHeaderCellDef"],[4,"matCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],[4,"matRowDef","matRowDefColumns"],[1,"mat-headline-5","tb-absolute-fill","tb-add-new","items-center","justify-center"],["mat-button","",1,"connector",3,"click"],[1,"tb-mat-96"],["translate","",1,"no-data-found","items-center","justify-center"],[1,"title-container"],[1,"tb-master-table-title"],[1,"table-value-column"],["tbTruncateWithTooltip",""],[1,"w-12"],[1,"lt-lg:!hidden","flex","flex-1","flex-row","items-stretch","justify-end"],[3,"ngTemplateOutlet"],[1,"gt-md:!hidden"],["mat-icon-button","",3,"click","matMenuTriggerFor"],[1,"material-icons"],["xPosition","before"],[1,"mat-row-select"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",3)(1,"div",4)(2,"div",5),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(5,"div",6)(6,"mat-toolbar",7),t.ɵɵtemplate(7,Qd,14,9,"div",8),t.ɵɵpipe(8,"async"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-toolbar",7)(10,"div",9)(11,"button",10),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"mat-icon"),t.ɵɵtext(14,"search"),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"mat-form-field",11)(16,"mat-label"),t.ɵɵtext(17," "),t.ɵɵelementEnd(),t.ɵɵelement(18,"input",12,0),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"button",13),t.ɵɵpipe(22,"translate"),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.exitFilterMode())})),t.ɵɵelementStart(23,"mat-icon"),t.ɵɵtext(24,"close"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(25,"div",14)(26,"table",15),t.ɵɵelementContainerStart(27,16),t.ɵɵtemplate(28,Jd,4,3,"mat-header-cell",17)(29,Yd,3,1,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(30,16),t.ɵɵtemplate(31,Xd,3,3,"mat-header-cell",17)(32,Zd,3,1,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(33,16),t.ɵɵtemplate(34,em,3,3,"mat-header-cell",17)(35,tm,3,1,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(36,16),t.ɵɵtemplate(37,nm,4,3,"mat-header-cell",17)(38,am,2,1,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(39,19),t.ɵɵtemplate(40,rm,1,0,"mat-header-cell",20)(41,om,12,6,"mat-cell",21),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(42,sm,1,0,"mat-header-row",22)(43,pm,1,0,"mat-row",23),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"section",24),t.ɵɵpipe(45,"async"),t.ɵɵelementStart(46,"button",25),t.ɵɵlistener("click",(function(a){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.manageSlave(a))})),t.ɵɵelementStart(47,"mat-icon",26),t.ɵɵtext(48,"add"),t.ɵɵelementEnd(),t.ɵɵelementStart(49,"span"),t.ɵɵtext(50),t.ɵɵpipe(51,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(52,"span",27),t.ɵɵpipe(53,"async"),t.ɵɵtext(54," widget.no-data-found "),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,23,"gateway.hints.modbus-master")),t.ɵɵadvance(3),t.ɵɵclassProp("!hidden",n.textSearchMode),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!1===t.ɵɵpipeBind1(8,25,n.dataSource.isEmpty())),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(12,27,"action.search")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(20,29,"common.enter-search")),t.ɵɵproperty("formControl",n.textSearch),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(22,31,"action.close")),t.ɵɵadvance(5),t.ɵɵproperty("dataSource",n.dataSource),t.ɵɵadvance(),t.ɵɵproperty("matColumnDef","deviceName"),t.ɵɵadvance(3),t.ɵɵproperty("matColumnDef","info"),t.ɵɵadvance(3),t.ɵɵproperty("matColumnDef","unitId"),t.ɵɵadvance(3),t.ɵɵproperty("matColumnDef","type"),t.ɵɵadvance(6),t.ɵɵproperty("matHeaderRowDef",t.ɵɵpureFunction0(39,Hd))("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",t.ɵɵpureFunction0(40,Hd)),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",n.textSearchMode||!1===t.ɵɵpipeBind1(45,33,n.dataSource.isEmpty())),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(51,35,"gateway.add-slave")),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode||!1===t.ɵɵpipeBind1(53,37,n.dataSource.isEmpty())))},dependencies:t.ɵɵgetComponentDepsFactory(lm,[V,b,na]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%]{width:100%;height:calc(100% - 60px);background:#fff;overflow:hidden}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .mat-toolbar-tools[_ngcontent-%COMP%]{min-height:auto}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{overflow:hidden}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .tb-master-table-title[_ngcontent-%COMP%]{padding-right:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%]{overflow:auto}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%]{table-layout:fixed;min-width:450px}[_nghost-%COMP%] .tb-master-table[_ngcontent-%COMP%] .tb-master-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%] .table-value-column[_ngcontent-%COMP%]{padding:0 12px;width:15%}[_nghost-%COMP%] .no-data-found[_ngcontent-%COMP%]{height:calc(100% - 120px)}@media screen and (max-width: 599px){[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{height:auto;min-height:100px}[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%] .tb-master-table-title[_ngcontent-%COMP%]{padding-bottom:5px;width:100%}}[_nghost-%COMP%] .hint-container[_ngcontent-%COMP%]{z-index:1000}[_nghost-%COMP%] mat-cell.tb-value-cell{cursor:pointer}[_nghost-%COMP%] mat-cell.tb-value-cell .mat-icon{height:24px;width:24px;font-size:24px;color:#757575}'],changeDetection:o.OnPush})}}e("ModbusMasterTableComponent",lm),qe([Le()],lm.prototype,"isLegacy",void 0);class cm extends N{constructor(){super()}}e("SlavesDatasource",cm);class dm extends Ar{constructor(){super(),this.enableSlaveControl=new oe(!1),this.enableSlaveControl.valueChanges.pipe(Vr()).subscribe((e=>{this.updateSlaveEnabling(e),this.basicFormGroup.get("slave").updateValueAndValidity({emitEvent:!!this.onChange})}))}writeValue(e){super.writeValue(e),this.onEnableSlaveControl(e)}validate(){const{master:e,slave:t}=this.basicFormGroup.value,n=!e?.slaves?.length&&(U(t,{})||!t);return!this.basicFormGroup.valid||n?{basicFormGroup:{valid:!1}}:null}initBasicFormGroup(){return this.fb.group({master:[],slave:[]})}updateSlaveEnabling(e){e?this.basicFormGroup.get("slave").enable({emitEvent:!1}):this.basicFormGroup.get("slave").disable({emitEvent:!1})}onEnableSlaveControl(e){this.enableSlaveControl.setValue(!!e.slave&&!U(e.slave,{}))}static{this.ɵfac=function(e){return new(e||dm)}}static{this.ɵdir=t.ɵɵdefineDirective({type:dm,features:[t.ɵɵInheritDefinitionFeature]})}}e("ModbusBasicConfigDirective",dm);class mm extends dm{constructor(){super(...arguments),this.isLegacy=!1}mapConfigToFormValue({master:e,slave:t}){return{master:e?.slaves?e:{slaves:[]},slave:t??{}}}getMappedValue(e){return{master:e.master,slave:e.slave}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(mm)))(n||mm)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:mm,selectors:[["tb-modbus-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>mm)),multi:!0},{provide:re,useExisting:i((()=>mm)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:19,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","master",3,"isLegacy"],[1,"tb-form-panel","no-border","no-padding","padding-top"],[1,"tb-form-hint","tb-primary-fill","tb-flex","center"],[1,"tb-form-row"],[1,"mat-slide",3,"formControl"],["formControlName","slave"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-modbus-master-table",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4)(10,"div",5),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",6)(14,"mat-slide-toggle",7)(15,"mat-label"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelement(18,"tb-modbus-slave-config",8),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,9,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(5,11,"gateway.master-connections")),t.ɵɵadvance(2),t.ɵɵproperty("isLegacy",n.isLegacy),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(8,13,"gateway.server-config")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(12,15,"gateway.hints.modbus-server")),t.ɵɵadvance(3),t.ɵɵproperty("formControl",n.enableSlaveControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(17,17,"gateway.enable")," "))},dependencies:t.ɵɵgetComponentDepsFactory(mm,[V,b,zd,lm,aa]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}'],changeDetection:o.OnPush})}}e("ModbusBasicConfigComponent",mm);class um extends dm{constructor(){super(...arguments),this.isLegacy=!0}mapConfigToFormValue(e){return{master:e.master?.slaves?e.master:{slaves:[]},slave:e.slave?Kr.mapSlaveToUpgradedVersion(e.slave):{}}}getMappedValue(e){return{master:e.master,slave:e.slave?Kr.mapSlaveToDowngradedVersion(e.slave):{}}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(um)))(n||um)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:um,selectors:[["tb-modbus-legacy-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>um)),multi:!0},{provide:re,useExisting:i((()=>um)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:19,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","master",3,"isLegacy"],[1,"tb-form-panel","no-border","no-padding","padding-top"],[1,"tb-form-hint","tb-primary-fill","tb-flex","center"],[1,"tb-form-row"],[1,"mat-slide",3,"formControl"],["formControlName","slave"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-modbus-master-table",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4)(10,"div",5),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",6)(14,"mat-slide-toggle",7)(15,"mat-label"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelement(18,"tb-modbus-slave-config",8),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,9,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(5,11,"gateway.master-connections")),t.ɵɵadvance(2),t.ɵɵproperty("isLegacy",n.isLegacy),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(8,13,"gateway.server-config")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(12,15,"gateway.hints.modbus-server")),t.ɵɵadvance(3),t.ɵɵproperty("formControl",n.enableSlaveControl),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(17,17,"gateway.enable")," "))},dependencies:t.ɵɵgetComponentDepsFactory(um,[V,b,zd,lm,aa]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}'],changeDetection:o.OnPush})}}e("ModbusLegacyBasicConfigComponent",um);const gm=()=>({maxWidth:"970px"});function ym(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",20),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.get("key").value," ")}}function hm(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtext(1),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate(e.get("methodRPC").value)}}function fm(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtext(1),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate(e.get("attributeOnThingsBoard").value)}}function vm(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtext(1),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2).$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate2(" ",e.get("requestExpression").value+" - ","",e.get("attributeNameExpression").value," ")}}function bm(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",21),t.ɵɵtemplate(1,hm,2,1,"ng-container",22)(2,fm,2,1,"ng-container",22)(3,vm,2,2,"ng-container",22),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(3);t.ɵɵproperty("ngSwitch",e.keysType),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.SocketValueKey.RPC_METHODS),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.SocketValueKey.ATTRIBUTES_UPDATES),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.SocketValueKey.ATTRIBUTES_REQUESTS)}}function xm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",41),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.key-required"))}function wm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",41),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function Cm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",41),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.value-required"))}function Sm(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",42),2&e){const e=t.ɵɵnextContext(5);t.ɵɵproperty("isExpansionMode",!0)("defaultValue",e.ReportStrategyDefaultValue.Key)}}function Em(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",3)(1,"div",24)(2,"div",25),t.ɵɵtext(3,"gateway.platform-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",26)(5,"div",27),t.ɵɵpipe(6,"translate"),t.ɵɵpipe(7,"translate"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"div",28)(11,"mat-form-field",29),t.ɵɵelement(12,"input",30),t.ɵɵpipe(13,"translate"),t.ɵɵtemplate(14,xm,3,3,"mat-icon",31),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(15,"div",24)(16,"div",25),t.ɵɵtext(17,"gateway.connector-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"div",26)(19,"div",32)(20,"span",33),t.ɵɵtext(21),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(23,"div",34),t.ɵɵelementEnd(),t.ɵɵelementStart(24,"label",35),t.ɵɵtext(25,"from"),t.ɵɵelementEnd(),t.ɵɵelementStart(26,"mat-form-field",36),t.ɵɵelement(27,"input",37),t.ɵɵpipe(28,"translate"),t.ɵɵtemplate(29,wm,3,3,"mat-icon",31),t.ɵɵelementEnd(),t.ɵɵelementStart(30,"label",38),t.ɵɵtext(31,"to"),t.ɵɵelementEnd(),t.ɵɵelementStart(32,"mat-form-field",36),t.ɵɵelement(33,"input",39),t.ɵɵpipe(34,"translate"),t.ɵɵtemplate(35,Cm,3,3,"mat-icon",31),t.ɵɵelementEnd()(),t.ɵɵtemplate(36,Sm,1,2,"tb-report-strategy",40),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",n.keysType===n.SocketValueKey.ATTRIBUTES?t.ɵɵpipeBind1(6,12,"gateway.hints.socket.key-attribute"):t.ɵɵpipeBind1(7,14,"gateway.hints.socket.key-telemetry")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(9,16,"gateway.key")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(13,18,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("key").hasError("required")&&e.get("key").touched),t.ɵɵadvance(7),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(22,20,"gateway.byte")),t.ɵɵadvance(2),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/byte_fn")("tb-help-popup-style",t.ɵɵpureFunction0(26,gm)),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(28,22,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("byteFrom").hasError("required")&&e.get("byteFrom").touched),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(34,24,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("byteTo").hasError("required")&&e.get("byteTo").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.withReportStrategy&&(n.keysType===n.SocketValueKey.ATTRIBUTES||n.keysType===n.SocketValueKey.TIMESERIES))}}function Tm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",41),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.method-required"))}function Im(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",51),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",e.toUpperCase()," ")}}function km(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",3)(1,"div",26)(2,"div",43),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",28)(6,"mat-form-field",29),t.ɵɵelement(7,"input",44),t.ɵɵpipe(8,"translate"),t.ɵɵtemplate(9,Tm,3,3,"mat-icon",31),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",26)(11,"div",45),t.ɵɵpipe(12,"translate"),t.ɵɵtext(13," gateway.encoding "),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"div",28)(15,"mat-form-field",29)(16,"mat-select",46),t.ɵɵtemplate(17,Im,2,2,"mat-option",47),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(18,"div",48)(19,"mat-slide-toggle",49),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(20,"mat-label",50),t.ɵɵpipe(21,"translate"),t.ɵɵtext(22),t.ɵɵpipe(23,"translate"),t.ɵɵelementEnd()()()()}if(2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,7,"gateway.method-name")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,9,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("methodRPC").hasError("required")&&e.get("methodRPC").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(12,11,"gateway.hints.encoding")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.socketEncoding),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(21,13,"gateway.hints.socket.with-response")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(23,15,"gateway.rpc.withResponse")," ")}}function Mm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",51),t.ɵɵtext(1),t.ɵɵpipe(2,"titlecase"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,2,e)," ")}}function Pm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",51),t.ɵɵtext(1),t.ɵɵpipe(2,"titlecase"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,2,e)," ")}}function Fm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",41),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.request-expression-required"))}function Om(e,n){1&e&&t.ɵɵelement(0,"div",34),2&e&&t.ɵɵproperty("tb-help-popup","widget/lib/gateway/request-expression_fn")("tb-help-popup-style",t.ɵɵpureFunction0(2,gm))}function qm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",51),t.ɵɵtext(1),t.ɵɵpipe(2,"titlecase"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,2,e)," ")}}function Bm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",41),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.attribute-name-expression-required"))}function Rm(e,n){1&e&&t.ɵɵelement(0,"div",34),2&e&&t.ɵɵproperty("tb-help-popup","widget/lib/gateway/attribute-name-expression_fn")("tb-help-popup-style",t.ɵɵpureFunction0(2,gm))}function Nm(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",3)(1,"div",26)(2,"div",45),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4," gateway.type "),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",28)(6,"mat-form-field",29)(7,"mat-select",52),t.ɵɵtemplate(8,Mm,3,4,"mat-option",47),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(9,"div",26)(10,"div",43),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",53)(14,"mat-form-field",29)(15,"mat-select",54),t.ɵɵtemplate(16,Pm,3,4,"mat-option",47),t.ɵɵelementEnd()(),t.ɵɵelementStart(17,"mat-form-field",29),t.ɵɵelement(18,"input",55),t.ɵɵpipe(19,"translate"),t.ɵɵtemplate(20,Fm,3,3,"mat-icon",31)(21,Om,1,3,"div",56),t.ɵɵelementEnd()()(),t.ɵɵelementStart(22,"div",26)(23,"div",43),t.ɵɵtext(24),t.ɵɵpipe(25,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(26,"div",53)(27,"mat-form-field",29)(28,"mat-select",57),t.ɵɵtemplate(29,qm,3,4,"mat-option",47),t.ɵɵelementEnd()(),t.ɵɵelementStart(30,"mat-form-field",29),t.ɵɵelement(31,"input",58),t.ɵɵpipe(32,"translate"),t.ɵɵtemplate(33,Bm,3,3,"mat-icon",31)(34,Rm,1,3,"div",56),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,12,"gateway.hints.socket.attribute-requests-type")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.requestsType),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,14,"gateway.request-expression")," "),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.expressionType),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(19,16,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("requestExpression").hasError("required")&&e.get("requestExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("requestExpressionSource").value===n.ExpressionType.Expression),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(25,18,"gateway.attribute-name-expression")," "),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.expressionType),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(32,20,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("attributeNameExpression").hasError("required")&&e.get("attributeNameExpression").touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("attributeNameExpressionSource").value===n.ExpressionType.Expression)}}function _m(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",51),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",e.toUpperCase()," ")}}function Dm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",41),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.hints.socket.attribute-on-platform-required"))}function Vm(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",3)(1,"div",26)(2,"div",45),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4," gateway.encoding "),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",28)(6,"mat-form-field",29)(7,"mat-select",46),t.ɵɵtemplate(8,_m,2,2,"mat-option",47),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(9,"div",26)(10,"div",43),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"div",28)(14,"mat-form-field",29),t.ɵɵelement(15,"input",59),t.ɵɵpipe(16,"translate"),t.ɵɵtemplate(17,Dm,3,3,"mat-icon",31),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext(2).$implicit,n=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,5,"gateway.hints.encoding")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.socketEncoding),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,7,"gateway.attribute-on-platform")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,9,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("attributeOnThingsBoard").hasError("required")&&e.get("attributeOnThingsBoard").touched)}}function Gm(e,n){if(1&e&&t.ɵɵtemplate(0,Em,37,27,"div",23)(1,km,24,17,"div",23)(2,Nm,35,22,"div",23)(3,Vm,18,11,"div",23),2&e){const e=t.ɵɵnextContext(3);t.ɵɵproperty("ngIf",e.keysType===e.SocketValueKey.TIMESERIES||e.keysType===e.SocketValueKey.ATTRIBUTES),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.keysType===e.SocketValueKey.RPC_METHODS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.keysType===e.SocketValueKey.ATTRIBUTES_REQUESTS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.keysType===e.SocketValueKey.ATTRIBUTES_UPDATES)}}function Am(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",12)(1,"div",13),t.ɵɵelementContainerStart(2,14),t.ɵɵelementStart(3,"mat-expansion-panel",15)(4,"mat-expansion-panel-header",16)(5,"mat-panel-title"),t.ɵɵtemplate(6,ym,2,1,"div",17)(7,bm,4,4,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()(),t.ɵɵtemplate(9,Gm,4,4,"ng-template",18),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"button",19),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.deleteKey(n,a))})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"delete"),t.ɵɵelementEnd()()()}if(2&e){const e=n.$implicit,a=n.last,r=t.ɵɵreference(8),i=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵproperty("formGroup",e),t.ɵɵadvance(),t.ɵɵproperty("expanded",a),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",i.keysType===i.SocketValueKey.TIMESERIES||i.keysType===i.SocketValueKey.ATTRIBUTES)("ngIfElse",r),t.ɵɵadvance(4),t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(11,5,i.deleteKeyTitle))}}function jm(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10),t.ɵɵtemplate(1,Am,14,7,"div",11),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngForOf",e.keysListFormArray.controls)("ngForTrackBy",e.trackByKey)}}function Lm(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",60)(1,"span",61),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.noKeysText)}}class Um extends R{constructor(e,t){super(t),this.fb=e,this.store=t,this.withReportStrategy=!0,this.keysDataApplied=new r,this.SocketValueKey=Sa,this.socketEncoding=Object.values(Xe),this.requestsType=Object.values(Ta),this.expressionType=Object.values(Ia),this.ExpressionType=Ia,this.ReportStrategyDefaultValue=Vt}ngOnInit(){this.keysListFormArray=this.prepareKeysFormArray(this.keys)}trackByKey(e,t){return t}addKey(){let e;e=this.keysType===Sa.RPC_METHODS?this.fb.group({methodRPC:["",[ne.required]],encoding:[Xe.UTF16,[ne.required]],withResponse:[!0]}):this.keysType===Sa.ATTRIBUTES_UPDATES?this.fb.group({encoding:[Xe.UTF16,[ne.required]],attributeOnThingsBoard:["",[ne.required]]}):this.keysType===Sa.ATTRIBUTES_REQUESTS?this.fb.group({type:[Ta.Shared],requestExpressionSource:[Ia.Constant],attributeNameExpressionSource:[Ia.Constant],requestExpression:["",[ne.required]],attributeNameExpression:["",[ne.required]]}):this.fb.group({key:["",[ne.required,ne.pattern($e)]],byteFrom:[0,[ne.required]],byteTo:[0,[ne.required]],reportStrategy:[{value:null,disabled:this.isReportStrategyDisabled()}]}),this.keysListFormArray.push(e)}deleteKey(e,t){e&&e.stopPropagation(),this.keysListFormArray.removeAt(t),this.keysListFormArray.markAsDirty()}cancel(){this.popover?.hide()}applyKeysData(){this.keysDataApplied.emit(this.keysListFormArray.value)}prepareKeysFormArray(e){const t=[];return e?.forEach((e=>{let n;if(this.keysType===Sa.RPC_METHODS){const t=e;n=this.fb.group({methodRPC:[t.methodRPC,[ne.required]],encoding:[t.encoding,[ne.required]],withResponse:[t.withResponse]})}else if(this.keysType===Sa.ATTRIBUTES_REQUESTS){const t=e;n=this.fb.group({type:[t.type??Ta.Shared],requestExpressionSource:[t.requestExpressionSource??Ia.Constant],attributeNameExpressionSource:[t.attributeNameExpressionSource??Ia.Constant],requestExpression:[t.requestExpression,[ne.required]],attributeNameExpression:[t.attributeNameExpression,[ne.required]]})}else if(this.keysType===Sa.ATTRIBUTES_UPDATES)n=this.fb.group({encoding:[e.encoding??Xe.UTF16],attributeOnThingsBoard:[e.attributeOnThingsBoard,[ne.required]]});else{const{key:t,byteFrom:a,byteTo:r,reportStrategy:i}=e;n=this.fb.group({key:[t,[ne.required,ne.pattern($e)]],byteFrom:[a??0,[ne.required]],byteTo:[r??0,[ne.required]],reportStrategy:[{value:i,disabled:this.isReportStrategyDisabled()}]})}t.push(n)})),this.fb.array(t)}isReportStrategyDisabled(){return!(this.withReportStrategy&&(this.keysType===Sa.ATTRIBUTES||this.keysType===Sa.TIMESERIES))}static{this.ɵfac=function(e){return new(e||Um)(t.ɵɵdirectiveInject(te.UntypedFormBuilder),t.ɵɵdirectiveInject(ce.Store))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Um,selectors:[["tb-device-data-keys-panel"]],inputs:{panelTitle:"panelTitle",addKeyTitle:"addKeyTitle",deleteKeyTitle:"deleteKeyTitle",noKeysText:"noKeysText",keys:"keys",keysType:"keysType",popover:"popover",withReportStrategy:"withReportStrategy"},outputs:{keysDataApplied:"keysDataApplied"},standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:19,vars:16,consts:[["noKeys",""],["valueTitle",""],[1,"tb-device-keys-panel"],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-panel-title"],["class","tb-form-panel no-border no-padding key-panel",4,"ngIf","ngIfElse"],["type","button","mat-stroked-button","","color","primary",3,"click"],[1,"tb-flex","flex-end"],["mat-button","","color","primary","type","button",3,"click"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[1,"tb-form-panel","no-border","no-padding","key-panel"],["class","tb-form-panel no-border no-padding tb-flex no-flex row center fill-width",4,"ngFor","ngForOf","ngForTrackBy"],[1,"tb-form-panel","no-border","no-padding","tb-flex","no-flex","row","center","fill-width"],[1,"tb-form-panel","stroked","tb-flex"],[3,"formGroup"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],["class","title-container",4,"ngIf","ngIfElse"],["matExpansionPanelContent",""],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],[1,"title-container"],[1,"title-container",3,"ngSwitch"],[4,"ngSwitchCase"],["class","tb-form-panel no-border no-padding",4,"ngIf"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","key",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],[1,"fixed-title-width","tb-flex","align-center"],[1,"tb-required"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],["for","byteFrom",1,"tb-small-label"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap","flex-1"],["matInput","","required","","formControlName","byteFrom","type","number","id","byteFrom",3,"placeholder"],["for","byteTo",1,"tb-small-label"],["matInput","","required","","formControlName","byteTo","type","number","id","byteTo",3,"placeholder"],["formControlName","reportStrategy",3,"isExpansionMode","defaultValue",4,"ngIf"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["formControlName","reportStrategy",3,"isExpansionMode","defaultValue"],[1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","methodRPC",3,"placeholder"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["formControlName","encoding"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-row"],["formControlName","withResponse",1,"mat-slide",3,"click"],[3,"tb-hint-tooltip-icon"],[3,"value"],["formControlName","type"],[1,"tb-flex"],["formControlName","requestExpressionSource"],["matInput","","name","value","formControlName","requestExpression",3,"placeholder"],["matSuffix","","class","see-example","tb-help-popup-placement","left",3,"tb-help-popup","tb-help-popup-style",4,"ngIf"],["formControlName","attributeNameExpressionSource"],["matInput","","name","value","formControlName","attributeNameExpression",3,"placeholder"],["matInput","","name","value","formControlName","attributeOnThingsBoard",3,"placeholder"],[1,"tb-flex","no-flex","center","align-center","key-panel"],["translate","",1,"tb-prompt"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",2)(1,"div",3)(2,"div",4),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(5,jm,2,2,"div",5),t.ɵɵelementStart(6,"div")(7,"button",6),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addKey())})),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd()()(),t.ɵɵtemplate(10,Lm,3,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(12,"div",7)(13,"button",8),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"button",9),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.applyKeysData())})),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(11);t.ɵɵadvance(3),t.ɵɵtextInterpolate2("",t.ɵɵpipeBind1(4,8,n.panelTitle),""," ("+n.keysListFormArray.controls.length+")"," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.keysListFormArray.controls.length)("ngIfElse",e),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(9,10,n.addKeyTitle)," "),t.ɵɵadvance(6),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,12,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.keysListFormArray.invalid||!n.keysListFormArray.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,14,"action.apply")," ")}},dependencies:t.ɵɵgetComponentDepsFactory(Um,[V,b,ma]),styles:['@charset "UTF-8";[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%]{width:77vw;max-width:700px}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{max-width:11vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .key-panel[_ngcontent-%COMP%]{height:500px;overflow:auto}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .tb-form-panel[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%]{width:56px;height:56px;padding:16px;color:#0000008a}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .tb-small-label[_ngcontent-%COMP%]{font-size:16px;padding-right:0}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .see-example[_ngcontent-%COMP%]{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}'],changeDetection:o.OnPush})}}e("DeviceDataKeysPanelComponent",Um),qe([k()],Um.prototype,"withReportStrategy",void 0);const $m=()=>({maxWidth:"970px"});function zm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",39),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.address-filter-required"))}function Km(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",39),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-name-required"))}function Hm(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",39),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.device-profile-required"))}function Wm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",40),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",e.toUpperCase()," ")}}function Qm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.key," ")}}function Jm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.key," ")}}function Ym(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.type," ")}}function Xm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.encoding," ")}}function Zm(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.methodRPC," ")}}class eu extends I{constructor(e,t,n,a,r,i,o,s,p){super(e,t,a),this.store=e,this.router=t,this.data=n,this.dialogRef=a,this.fb=r,this.popoverService=i,this.renderer=o,this.viewContainerRef=s,this.cdr=p,this.SocketValueKey=Sa,this.keysPopupClosed=!0,this.socketDeviceHelpLink=q+"/docs/iot-gateway/config/socket/#device-subsection",this.socketEncoding=Object.values(Xe),this.destroy$=new me,this.deviceFormGroup=this.fb.group({address:["",[ne.required,ne.pattern($e)]],deviceName:["",[ne.required,ne.pattern($e)]],deviceType:["",[ne.required,ne.pattern($e)]],encoding:[Xe.UTF8],telemetry:[[]],attributes:[[]],attributeRequests:[[]],attributeUpdates:[[]],serverSideRpc:[[]]}),this.deviceFormGroup.patchValue(this.data.value,{emitEvent:!1})}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),super.ngOnDestroy()}cancel(){this.keysPopupClosed&&this.dialogRef.close(null)}add(){this.deviceFormGroup.valid&&this.dialogRef.close(this.deviceFormGroup.value)}manageKeys(e,t,n){e.stopPropagation();const a=t._elementRef.nativeElement;if(this.popoverService.hasPopover(a))return void this.popoverService.hidePopover(a);this.popoverService.hasPopover(a)&&this.popoverService.hidePopover(a);const r=this.deviceFormGroup.get(n),i={keys:r.value,keysType:n,panelTitle:Ea.get(n),addKeyTitle:ka.get(n),deleteKeyTitle:Ma.get(n),noKeysText:Pa.get(n),withReportStrategy:this.data.withReportStrategy};this.keysPopupClosed=!1;const o=this.popoverService.displayPopover(a,this.renderer,this.viewContainerRef,Um,"leftBottom",!1,null,i,{},{},{},!0);o.tbComponentRef.instance.popover=o,o.tbComponentRef.instance.keysDataApplied.pipe(be(this.destroy$)).subscribe((e=>{o.hide(),r.patchValue(e),r.markAsDirty(),this.cdr.markForCheck()})),o.tbHideStart.pipe(be(this.destroy$)).subscribe((()=>{this.keysPopupClosed=!0}))}static{this.ɵfac=function(e){return new(e||eu)(t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(de.Router),t.ɵɵdirectiveInject(se),t.ɵɵdirectiveInject(pe.MatDialogRef),t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(je.TbPopoverService),t.ɵɵdirectiveInject(t.Renderer2),t.ɵɵdirectiveInject(t.ViewContainerRef),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:eu,selectors:[["tb-device-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:118,vars:56,consts:[["socketTelemetryButton",""],["attributesButton",""],["attributeRequestsButton",""],["attributesUpdatesButton",""],["rpcMethodsButton",""],[1,"dialog-mapping",3,"formGroup"],["color","primary"],[1,"flex-1"],[3,"tb-help"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content",""],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width"],["translate","",1,"tb-required"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","address",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matSuffix","","tb-help-popup-placement","left",1,"see-example",3,"tb-help-popup","tb-help-popup-style"],["translate","",1,"fixed-title-width","tb-required"],["matInput","","name","value","formControlName","deviceName",3,"placeholder"],["matInput","","name","value","formControlName","deviceType",3,"placeholder"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["formControlName","encoding"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-row","space-between","tb-flex"],["translate","",1,"fixed-title-width"],[1,"tb-flex","ellipsis-chips-container"],[1,"tb-flex",3,"tbEllipsisChipList"],[4,"ngFor","ngForOf"],[1,"mat-mdc-chip","ellipsis-chip"],[1,"ellipsis-text"],["type","button","mat-icon-button","","color","primary","matTooltipPosition","above",3,"click","matTooltip"],["matButtonIcon",""],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","primary","type","button","cdkFocusInitial","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],[3,"value"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",5)(1,"mat-toolbar",6)(2,"h2"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",7)(6,"div",8),t.ɵɵelementStart(7,"button",9),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵelementStart(8,"mat-icon",10),t.ɵɵtext(9,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",11)(11,"div",12)(12,"div",13)(13,"div",14)(14,"div",15),t.ɵɵtext(15," gateway.address-filter "),t.ɵɵelementEnd()(),t.ɵɵelementStart(16,"div",16)(17,"mat-form-field",17),t.ɵɵelement(18,"input",18),t.ɵɵpipe(19,"translate"),t.ɵɵtemplate(20,zm,3,3,"mat-icon",19),t.ɵɵelement(21,"div",20),t.ɵɵelementEnd()()(),t.ɵɵelementStart(22,"div",13)(23,"div",21),t.ɵɵtext(24,"gateway.device-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"div",16)(26,"mat-form-field",17),t.ɵɵelement(27,"input",22),t.ɵɵpipe(28,"translate"),t.ɵɵtemplate(29,Km,3,3,"mat-icon",19),t.ɵɵelementEnd()()(),t.ɵɵelementStart(30,"div",13)(31,"div",21),t.ɵɵtext(32,"gateway.device-profile"),t.ɵɵelementEnd(),t.ɵɵelementStart(33,"div",16)(34,"mat-form-field",17),t.ɵɵelement(35,"input",23),t.ɵɵpipe(36,"translate"),t.ɵɵtemplate(37,Hm,3,3,"mat-icon",19),t.ɵɵelementEnd()()(),t.ɵɵelementStart(38,"div",13)(39,"div",24),t.ɵɵpipe(40,"translate"),t.ɵɵtext(41," gateway.encoding "),t.ɵɵelementEnd(),t.ɵɵelementStart(42,"div",16)(43,"mat-form-field",17)(44,"mat-select",25),t.ɵɵtemplate(45,Wm,2,2,"mat-option",26),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(46,"div",27)(47,"div",28),t.ɵɵtext(48,"gateway.timeseries"),t.ɵɵelementEnd(),t.ɵɵelementStart(49,"div",29)(50,"mat-chip-listbox",30),t.ɵɵtemplate(51,Qm,2,1,"mat-chip",31),t.ɵɵelementStart(52,"mat-chip",32),t.ɵɵelement(53,"label",33),t.ɵɵelementEnd()(),t.ɵɵelementStart(54,"button",34,0),t.ɵɵpipe(56,"translate"),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(55);return t.ɵɵresetView(n.manageKeys(a,r,n.SocketValueKey.TIMESERIES))})),t.ɵɵelementStart(57,"tb-icon",35),t.ɵɵtext(58,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(59,"div",27)(60,"div",28),t.ɵɵtext(61,"gateway.attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(62,"div",29)(63,"mat-chip-listbox",30),t.ɵɵtemplate(64,Jm,2,1,"mat-chip",31),t.ɵɵelementStart(65,"mat-chip",32),t.ɵɵelement(66,"label",33),t.ɵɵelementEnd()(),t.ɵɵelementStart(67,"button",34,1),t.ɵɵpipe(69,"translate"),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(68);return t.ɵɵresetView(n.manageKeys(a,r,n.SocketValueKey.ATTRIBUTES))})),t.ɵɵelementStart(70,"tb-icon",35),t.ɵɵtext(71,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(72,"div",27)(73,"div",28),t.ɵɵtext(74,"gateway.attribute-requests"),t.ɵɵelementEnd(),t.ɵɵelementStart(75,"div",29)(76,"mat-chip-listbox",30),t.ɵɵtemplate(77,Ym,2,1,"mat-chip",31),t.ɵɵelementStart(78,"mat-chip",32),t.ɵɵelement(79,"label",33),t.ɵɵelementEnd()(),t.ɵɵelementStart(80,"button",34,2),t.ɵɵpipe(82,"translate"),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(81);return t.ɵɵresetView(n.manageKeys(a,r,n.SocketValueKey.ATTRIBUTES_REQUESTS))})),t.ɵɵelementStart(83,"tb-icon",35),t.ɵɵtext(84,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(85,"div",27)(86,"div",28),t.ɵɵtext(87,"gateway.attribute-updates"),t.ɵɵelementEnd(),t.ɵɵelementStart(88,"div",29)(89,"mat-chip-listbox",30),t.ɵɵtemplate(90,Xm,2,1,"mat-chip",31),t.ɵɵelementStart(91,"mat-chip",32),t.ɵɵelement(92,"label",33),t.ɵɵelementEnd()(),t.ɵɵelementStart(93,"button",34,3),t.ɵɵpipe(95,"translate"),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(94);return t.ɵɵresetView(n.manageKeys(a,r,n.SocketValueKey.ATTRIBUTES_UPDATES))})),t.ɵɵelementStart(96,"tb-icon",35),t.ɵɵtext(97,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(98,"div",27)(99,"div",28),t.ɵɵtext(100,"gateway.rpc-methods"),t.ɵɵelementEnd(),t.ɵɵelementStart(101,"div",29)(102,"mat-chip-listbox",30),t.ɵɵtemplate(103,Zm,2,1,"mat-chip",31),t.ɵɵelementStart(104,"mat-chip",32),t.ɵɵelement(105,"label",33),t.ɵɵelementEnd()(),t.ɵɵelementStart(106,"button",34,4),t.ɵɵpipe(108,"translate"),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(107);return t.ɵɵresetView(n.manageKeys(a,r,n.SocketValueKey.RPC_METHODS))})),t.ɵɵelementStart(109,"tb-icon",35),t.ɵɵtext(110,"edit"),t.ɵɵelementEnd()()()()()(),t.ɵɵelementStart(111,"div",36)(112,"button",37),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(113),t.ɵɵpipe(114,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(115,"button",38),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.add())})),t.ɵɵtext(116),t.ɵɵpipe(117,"translate"),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵproperty("formGroup",n.deviceFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,31,"gateway.device")),t.ɵɵadvance(3),t.ɵɵproperty("tb-help",n.socketDeviceHelpLink),t.ɵɵadvance(12),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(19,33,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deviceFormGroup.get("address").hasError("required")&&n.deviceFormGroup.get("address").touched),t.ɵɵadvance(),t.ɵɵproperty("tb-help-popup","widget/lib/gateway/address-filter_fn")("tb-help-popup-style",t.ɵɵpureFunction0(55,$m)),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(28,35,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deviceFormGroup.get("deviceName").hasError("required")&&n.deviceFormGroup.get("deviceName").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(36,37,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deviceFormGroup.get("deviceType").hasError("required")&&n.deviceFormGroup.get("deviceType").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(40,39,"gateway.hints.encoding")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.socketEncoding),t.ɵɵadvance(5),t.ɵɵproperty("tbEllipsisChipList",n.deviceFormGroup.get("telemetry").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.deviceFormGroup.get("telemetry").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(56,41,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",n.deviceFormGroup.get("attributes").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.deviceFormGroup.get("attributes").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(69,43,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",n.deviceFormGroup.get("attributeRequests").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.deviceFormGroup.get("attributeRequests").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(82,45,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",n.deviceFormGroup.get("attributeUpdates").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.deviceFormGroup.get("attributeUpdates").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(95,47,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",n.deviceFormGroup.get("serverSideRpc").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.deviceFormGroup.get("serverSideRpc").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(108,49,"action.edit")),t.ɵɵadvance(7),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(114,51,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.deviceFormGroup.invalid||!n.deviceFormGroup.dirty||!n.keysPopupClosed),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(117,53,n.data.buttonTitle)," "))},dependencies:t.ɵɵgetComponentDepsFactory(eu,[V,b,aa]),styles:['@charset "UTF-8";[_nghost-%COMP%]{display:grid;height:100%}[_nghost-%COMP%] .tb-form-panel[_ngcontent-%COMP%]{width:77vw;max-width:800px}[_nghost-%COMP%] .dialog-mapping[_ngcontent-%COMP%]{max-width:900px;display:flex;flex-direction:column}[_nghost-%COMP%] .dialog-mapping[_ngcontent-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{min-height:64px}[_nghost-%COMP%] .dialog-mapping[_ngcontent-%COMP%] tb-toggle-select[_ngcontent-%COMP%]{padding:4px 0}[_nghost-%COMP%] .mat-mdc-dialog-content[_ngcontent-%COMP%]{height:670px}[_nghost-%COMP%] .ellipsis-chips-container[_ngcontent-%COMP%]{max-width:70%}[_nghost-%COMP%] .dialog-mapping .mat-mdc-chip-listbox .mdc-evolution-chip-set__chips{justify-content:flex-end;align-items:center}[_nghost-%COMP%] .tb-form-row .fixed-title-width{min-width:40px;width:35%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center}[_nghost-%COMP%] .tb-form-row .mat-mdc-form-field{width:0}[_nghost-%COMP%] .see-example{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}[_nghost-%COMP%] .device-config{gap:12px;padding-left:10px;padding-right:10px}[_nghost-%COMP%] .device-node-pattern-field{flex-basis:3%}'],changeDetection:o.OnPush})}}e("DeviceDialogComponent",eu);const tu=["searchInput"],nu=()=>["address","deviceName","actions"],au=()=>({minWidth:"96px",textAlign:"center"});function ru(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",7)(1,"div",26)(2,"span",27),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()(),t.ɵɵelement(5,"span",9),t.ɵɵelementStart(6,"button",11),t.ɵɵpipe(7,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.manageDevices(n))})),t.ɵɵelementStart(8,"mat-icon"),t.ɵɵtext(9,"add"),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"button",11),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.enterFilterMode())})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"search"),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.devices")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,5,"action.add")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(11,7,"action.search")))}function iu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",28),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.address-filter")," "))}function ou(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",28)(1,"div",29),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.address)}}function su(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",28)(1,"div",29),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.device-name")))}function pu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",28)(1,"div",29),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.deviceName)}}function lu(e,n){1&e&&t.ɵɵelement(0,"mat-header-cell",30)}function cu(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",11),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageDevices(n,a))})),t.ɵɵelementStart(2,"tb-icon"),t.ɵɵtext(3,"edit"),t.ɵɵelementEnd()(),t.ɵɵelementStart(4,"button",11),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteDevice(n,a))})),t.ɵɵelementStart(6,"tb-icon"),t.ɵɵtext(7,"delete"),t.ɵɵelementEnd()()}2&e&&(t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,2,"action.edit")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(5,4,"action.delete")))}function du(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtemplate(1,cu,8,6,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(3,"div",31),t.ɵɵelementContainer(4,32),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",33)(6,"button",34),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(7,"mat-icon",35),t.ɵɵtext(8,"more_vert"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"mat-menu",36,2),t.ɵɵelementContainer(11,32),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(2),n=t.ɵɵreference(10);t.ɵɵadvance(3),t.ɵɵstyleMap(t.ɵɵpureFunction0(5,au)),t.ɵɵadvance(),t.ɵɵproperty("ngTemplateOutlet",e),t.ɵɵadvance(2),t.ɵɵproperty("matMenuTriggerFor",n),t.ɵɵadvance(5),t.ɵɵproperty("ngTemplateOutlet",e)}}function mu(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",37)}function uu(e,n){1&e&&t.ɵɵelement(0,"mat-row")}class gu{constructor(e,t,n,a,r){this.translate=e,this.dialog=t,this.dialogService=n,this.fb=a,this.cdr=r,this.withReportStrategy=!0,this.textSearchMode=!1,this.textSearch=this.fb.control("",{nonNullable:!0}),this.onChange=()=>{},this.destroy$=new me,this.devicesFormGroup=this.fb.array([]),this.dataSource=new yu}ngOnInit(){this.devicesFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.updateTableData(e),this.onChange(e)}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}ngAfterViewInit(){this.textSearch.valueChanges.pipe(ke(150),Me(((e,t)=>(e??"")===t.trim())),be(this.destroy$)).subscribe((e=>this.updateTableData(this.devicesFormGroup.value,e.trim())))}registerOnChange(e){this.onChange=e}registerOnTouched(e){}writeValue(e){this.devicesFormGroup.clear(),this.pushDataAsFormArrays(e)}enterFilterMode(){this.textSearchMode=!0,this.cdr.detectChanges();const e=this.searchInputField.nativeElement;e.focus(),e.setSelectionRange(0,0)}exitFilterMode(){this.updateTableData(this.devicesFormGroup.value),this.textSearchMode=!1,this.textSearch.reset()}manageDevices(e,t){e&&e.stopPropagation();const n=j(t),a=n?this.devicesFormGroup.at(t).value:{};this.getDeviceDialog(a,n?"action.apply":"action.add").afterClosed().pipe(Ie(1),be(this.destroy$)).subscribe((e=>{e&&(n?this.devicesFormGroup.at(t).patchValue(e):this.devicesFormGroup.push(this.fb.control(e)),this.devicesFormGroup.markAsDirty())}))}validate(){return this.devicesFormGroup.controls.length?null:{devicesFormGroup:{valid:!1}}}getDeviceDialog(e,t){return this.dialog.open(eu,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{value:e,buttonTitle:t,withReportStrategy:this.withReportStrategy}})}deleteDevice(e,t){e&&e.stopPropagation(),this.dialogService.confirm(this.translate.instant("gateway.delete-device-title"),"",this.translate.instant("action.no"),this.translate.instant("action.yes"),!0).pipe(Ie(1),be(this.destroy$)).subscribe((e=>{e&&(this.devicesFormGroup.removeAt(t),this.devicesFormGroup.markAsDirty())}))}updateTableData(e,t){t&&(e=e.filter((e=>Object.values(e).some((e=>e.toString().toLowerCase().includes(t.toLowerCase())))))),this.dataSource.loadData(e)}pushDataAsFormArrays(e){e?.length&&e.forEach((e=>this.devicesFormGroup.push(this.fb.control(e))))}static{this.ɵfac=function(e){return new(e||gu)(t.ɵɵdirectiveInject(Ne.TranslateService),t.ɵɵdirectiveInject(pe.MatDialog),t.ɵɵdirectiveInject(A.DialogService),t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:gu,selectors:[["tb-devices-config-table"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(tu,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.searchInputField=e.first)}},inputs:{withReportStrategy:"withReportStrategy"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>gu)),multi:!0},{provide:re,useExisting:i((()=>gu)),multi:!0}]),t.ɵɵStandaloneFeature],decls:45,vars:36,consts:[["searchInput",""],["rowActions",""],["cellActionsMenu","matMenu"],[1,"tb-device-table","tb-absolute-fill"],[1,"tb-device-table-content","flex","flex-col"],[1,"mat-mdc-table-toolbar"],["class","mat-toolbar-tools",4,"ngIf"],[1,"mat-toolbar-tools"],["mat-icon-button","","matTooltipPosition","above",3,"matTooltip"],[1,"flex-1"],["matInput","",3,"formControl","placeholder"],["mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],[1,"table-container"],["mat-table","",3,"dataSource"],[3,"matColumnDef"],["class","table-value-column",4,"matHeaderCellDef"],["class","table-value-column",4,"matCellDef"],["matColumnDef","actions","stickyEnd",""],["class","w-12",4,"matHeaderCellDef"],[4,"matCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],[4,"matRowDef","matRowDefColumns"],[1,"mat-headline-5","tb-absolute-fill","tb-add-new","items-center","justify-center"],["mat-button","",1,"connector",3,"click"],[1,"tb-mat-96"],["translate","",1,"no-data-found","items-center","justify-center"],[1,"title-container"],[1,"tb-device-table-title"],[1,"table-value-column"],["tbTruncateWithTooltip",""],[1,"w-12"],[1,"lt-lg:!hidden","flex","flex-1","flex-row","items-stretch","justify-end"],[3,"ngTemplateOutlet"],[1,"gt-md:!hidden"],["mat-icon-button","",3,"click","matMenuTriggerFor"],[1,"material-icons"],["xPosition","before"],[1,"mat-row-select"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",3)(1,"div",4)(2,"mat-toolbar",5),t.ɵɵtemplate(3,ru,14,9,"div",6),t.ɵɵpipe(4,"async"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-toolbar",5)(6,"div",7)(7,"button",8),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"mat-icon"),t.ɵɵtext(10,"search"),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",9)(12,"mat-label"),t.ɵɵtext(13," "),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",10,0),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"button",11),t.ɵɵpipe(18,"translate"),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.exitFilterMode())})),t.ɵɵelementStart(19,"mat-icon"),t.ɵɵtext(20,"close"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(21,"div",12)(22,"table",13),t.ɵɵelementContainerStart(23,14),t.ɵɵtemplate(24,iu,3,3,"mat-header-cell",15)(25,ou,3,1,"mat-cell",16),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(26,14),t.ɵɵtemplate(27,su,4,3,"mat-header-cell",15)(28,pu,3,1,"mat-cell",16),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(29,17),t.ɵɵtemplate(30,lu,1,0,"mat-header-cell",18)(31,du,12,6,"mat-cell",19),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(32,mu,1,0,"mat-header-row",20)(33,uu,1,0,"mat-row",21),t.ɵɵelementEnd(),t.ɵɵelementStart(34,"section",22),t.ɵɵpipe(35,"async"),t.ɵɵelementStart(36,"button",23),t.ɵɵlistener("click",(function(a){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.manageDevices(a))})),t.ɵɵelementStart(37,"mat-icon",24),t.ɵɵtext(38,"add"),t.ɵɵelementEnd(),t.ɵɵelementStart(39,"span"),t.ɵɵtext(40),t.ɵɵpipe(41,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(42,"span",25),t.ɵɵpipe(43,"async"),t.ɵɵtext(44," widget.no-data-found "),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.textSearchMode),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!1===t.ɵɵpipeBind1(4,20,n.dataSource.isEmpty())),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,22,"action.search")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,24,"common.enter-search")),t.ɵɵproperty("formControl",n.textSearch),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,26,"action.close")),t.ɵɵadvance(5),t.ɵɵproperty("dataSource",n.dataSource),t.ɵɵadvance(),t.ɵɵproperty("matColumnDef","address"),t.ɵɵadvance(3),t.ɵɵproperty("matColumnDef","deviceName"),t.ɵɵadvance(6),t.ɵɵproperty("matHeaderRowDef",t.ɵɵpureFunction0(34,nu))("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",t.ɵɵpureFunction0(35,nu)),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",n.textSearchMode||!1===t.ɵɵpipeBind1(35,28,n.dataSource.isEmpty())),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(41,30,"gateway.add-device")),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode||!1===t.ɵɵpipeBind1(43,32,n.dataSource.isEmpty())))},dependencies:t.ɵɵgetComponentDepsFactory(gu,[V,b,na]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%]{width:100%;height:100%;background:#fff;overflow:hidden}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .mat-toolbar-tools[_ngcontent-%COMP%]{min-height:auto}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{overflow:hidden}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .tb-device-table-title[_ngcontent-%COMP%]{padding-right:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%]{overflow:auto}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%]{table-layout:fixed;min-width:450px}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%] .table-value-column[_ngcontent-%COMP%]{padding:0 12px;width:35%}[_nghost-%COMP%] .no-data-found[_ngcontent-%COMP%]{height:calc(100% - 120px)}@media screen and (max-width: 599px){[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{height:auto;min-height:100px}[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%] .tb-device-table-title[_ngcontent-%COMP%]{padding-bottom:5px;width:100%}}[_nghost-%COMP%] mat-cell.tb-value-cell{cursor:pointer}[_nghost-%COMP%] mat-cell.tb-value-cell .mat-icon{height:24px;width:24px;font-size:24px;color:#757575}'],changeDetection:o.OnPush})}}e("DevicesConfigTableComponent",gu),qe([k()],gu.prototype,"withReportStrategy",void 0);let yu=class extends N{constructor(){super()}};function hu(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",14),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function fu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",15),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.address-required"))}function vu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",15),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.socketConfigFormGroup.get("port")))}}function bu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",15),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.socketConfigFormGroup.get("bufferSize").hasError("min")?"gateway.buffer-size-range":"gateway.buffer-size-required"))}}e("DevicesDatasource",yu);class xu{constructor(e){this.fb=e,this.portLimits=Fa,this.socketTypes=Object.values(Ca),this.destroy$=new me,this.socketConfigFormGroup=this.fb.group({address:["",[ne.required,ne.pattern($e)]],type:[Ca.TCP],port:[5e4,[ne.required,ne.min(Fa.MIN),ne.max(Fa.MAX)]],bufferSize:[1024,[ne.required,ne.min(1),ne.pattern($e)]]}),this.socketConfigFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.onChange(e)}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){}writeValue(e){const{address:t="",type:n=Ca.TCP,port:a=5e4,bufferSize:r=1024}=e??{};this.socketConfigFormGroup.reset({address:t,type:n,port:a,bufferSize:r},{emitEvent:!1})}validate(){return this.socketConfigFormGroup.valid?null:{socketConfigFormGroup:{valid:!1}}}static{this.ɵfac=function(e){return new(e||xu)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:xu,selectors:[["tb-socket-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>xu)),multi:!0},{provide:re,useExisting:i((()=>xu)),multi:!0}]),t.ɵɵStandaloneFeature],decls:34,vars:25,consts:[[1,"tb-form-panel","no-border","no-padding","padding-top",3,"formGroup"],[1,"tb-form-row","column-xs"],[1,"fixed-title-width"],["tbTruncateWithTooltip",""],["formControlName","type","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],["translate","",1,"fixed-title-width","tb-required"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","address",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],[1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","name","value","min","1","formControlName","bufferSize",3,"placeholder"],[3,"value"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"tb-toggle-select",4),t.ɵɵtemplate(7,hu,2,2,"tb-toggle-option",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",1)(9,"div",6),t.ɵɵtext(10,"gateway.address"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"div",7)(12,"mat-form-field",8),t.ɵɵelement(13,"input",9),t.ɵɵpipe(14,"translate"),t.ɵɵtemplate(15,fu,3,3,"mat-icon",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(16,"div",1)(17,"div",6),t.ɵɵtext(18,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"div",7)(20,"mat-form-field",8),t.ɵɵelement(21,"input",11),t.ɵɵpipe(22,"translate"),t.ɵɵtemplate(23,vu,3,3,"mat-icon",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(24,"div",1)(25,"div",12),t.ɵɵpipe(26,"translate"),t.ɵɵtext(27),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"div",7)(30,"mat-form-field",8),t.ɵɵelement(31,"input",13),t.ɵɵpipe(32,"translate"),t.ɵɵtemplate(33,bu,3,3,"mat-icon",10),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.socketConfigFormGroup),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,13,"gateway.connection-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.socketTypes),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(14,15,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.socketConfigFormGroup.get("address").hasError("required")&&n.socketConfigFormGroup.get("address").touched),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("min",n.portLimits.MIN),t.ɵɵpropertyInterpolate("max",n.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(22,17,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",(n.socketConfigFormGroup.get("port").hasError("required")||n.socketConfigFormGroup.get("port").hasError("min")||n.socketConfigFormGroup.get("port").hasError("max"))&&n.socketConfigFormGroup.get("port").touched),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(26,19,"gateway.hints.buffer-size")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(28,21,"gateway.buffer-size")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(32,23,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.socketConfigFormGroup.get("bufferSize").hasError("required")||n.socketConfigFormGroup.get("bufferSize").hasError("min")&&n.socketConfigFormGroup.get("bufferSize").touched))},dependencies:t.ɵɵgetComponentDepsFactory(xu,[V,b,ns,na]),encapsulation:2,changeDetection:o.OnPush})}}e("SocketConfigComponent",xu);class wu extends Ar{constructor(){super(...arguments),this.isLegacy=!1}getMappedValue(e){return e}initBasicFormGroup(){return this.fb.group({socket:[],devices:[]})}mapConfigToFormValue(e){return{socket:e.socket??{},devices:e.devices??[]}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(wu)))(n||wu)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:wu,selectors:[["tb-socket-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>wu)),multi:!0},{provide:re,useExisting:i((()=>wu)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:10,vars:14,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","socket"],["formControlName","devices",3,"withReportStrategy"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-socket-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelement(9,"tb-devices-config-table",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,8,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,10,"gateway.socket"),"*"),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,12,"gateway.devices"),"*"),t.ɵɵadvance(2),t.ɵɵproperty("withReportStrategy",!n.isLegacy))},dependencies:t.ɵɵgetComponentDepsFactory(wu,[V,b,xu,gu]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}e("SocketBasicConfigComponent",wu);class Cu extends Ar{constructor(){super(...arguments),this.isLegacy=!0}getMappedValue(e){return Wr.mapSocketToDowngradedVersion(e)}initBasicFormGroup(){return this.fb.group({socket:[],devices:[]})}mapConfigToFormValue(e){return{socket:Wr.mapSocketToUpgradedVersion(e),devices:e?.devices?Wr.mapDevicesToUpgradedVersion(e.devices):[]}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Cu)))(n||Cu)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:Cu,selectors:[["tb-socket-legacy-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Cu)),multi:!0},{provide:re,useExisting:i((()=>Cu)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:10,vars:14,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","socket"],["formControlName","devices",3,"withReportStrategy"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-socket-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelement(9,"tb-devices-config-table",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,8,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,10,"gateway.socket"),"*"),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,12,"gateway.devices"),"*"),t.ɵɵadvance(2),t.ɵɵproperty("withReportStrategy",!n.isLegacy))},dependencies:t.ɵɵgetComponentDepsFactory(Cu,[V,b,xu,gu]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}function Su(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",6),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.name-required"))}function Eu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",6),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.host-required"))}function Tu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",6),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.applicationConfigFormGroup.get("port")))}}function Iu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",6),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.hints.object-id-required"))}function ku(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",6),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.hints.vendor-id-required"))}function Mu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.SegmentationTypeTranslationsMap.get(e))," ")}}e("SocketLegacyBasicConfigComponent",Cu);class Pu extends Gr{constructor(){super(...arguments),this.segmentationTypes=Object.values(br),this.SegmentationTypeTranslationsMap=xr,this.portLimits=Fa}get applicationConfigFormGroup(){return this.formGroup}initFormGroup(){return this.fb.group({objectName:["",[ne.required,ne.pattern($e)]],host:["",[ne.required,ne.pattern($e)]],port:[null,[ne.required,ne.min(Fa.MIN),ne.max(Fa.MAX)]],mask:[""],objectIdentifier:[null,[ne.required]],vendorIdentifier:[null,[ne.required]],maxApduLengthAccepted:[],segmentationSupported:[br.BOTH]})}mapOnChangeValue(e){return K(e),e}onWriteValue(e){const{maxApduLengthAccepted:t=1476,segmentationSupported:n=br.BOTH,...a}=e;this.formGroup.reset({...a,maxApduLengthAccepted:t,segmentationSupported:n},{emitEvent:!1})}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(Pu)))(n||Pu)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:Pu,selectors:[["tb-bacnet-application-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Pu)),multi:!0},{provide:re,useExisting:i((()=>Pu)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:67,vars:41,consts:[[1,"tb-form-panel","no-border","no-padding","padding-top",3,"formGroup"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","autocomplete","off","name","value","formControlName","objectName",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","name","value","formControlName","host",3,"placeholder"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],["translate","",1,"fixed-title-width"],["matInput","","name","value","formControlName","mask",3,"placeholder"],["translate","",1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],["matInput","","type","number","min","0","name","value","formControlName","objectIdentifier",3,"placeholder"],["matInput","","type","number","min","0","name","value","formControlName","vendorIdentifier",3,"placeholder"],[1,"tb-form-panel","stroked"],[1,"tb-settings"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-panel","no-border","no-padding","padding-top"],["matInput","","type","number","min","0","name","value","formControlName","maxApduLengthAccepted",3,"placeholder"],["translate","",1,"fixed-title-width",3,"tb-hint-tooltip-icon"],["formControlName","segmentationSupported"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"gateway.bacnet.object-name"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3)(5,"mat-form-field",4),t.ɵɵelement(6,"input",5),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,Su,3,3,"mat-icon",6),t.ɵɵelementEnd()()(),t.ɵɵelementStart(9,"div",1)(10,"div",2),t.ɵɵtext(11,"gateway.host"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",4),t.ɵɵelement(13,"input",7),t.ɵɵpipe(14,"translate"),t.ɵɵtemplate(15,Eu,3,3,"mat-icon",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(16,"div",1)(17,"div",2),t.ɵɵtext(18,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(19,"mat-form-field",4),t.ɵɵelement(20,"input",8),t.ɵɵpipe(21,"translate"),t.ɵɵtemplate(22,Tu,3,3,"mat-icon",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(23,"div",1)(24,"div",9),t.ɵɵtext(25,"gateway.network-mask"),t.ɵɵelementEnd(),t.ɵɵelementStart(26,"mat-form-field",4),t.ɵɵelement(27,"input",10),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(29,"div",1)(30,"div",11),t.ɵɵpipe(31,"translate"),t.ɵɵtext(32,"gateway.object-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(33,"mat-form-field",4),t.ɵɵelement(34,"input",12),t.ɵɵpipe(35,"translate"),t.ɵɵtemplate(36,Iu,3,3,"mat-icon",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(37,"div",1)(38,"div",11),t.ɵɵpipe(39,"translate"),t.ɵɵtext(40,"gateway.vendor-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(41,"mat-form-field",4),t.ɵɵelement(42,"input",13),t.ɵɵpipe(43,"translate"),t.ɵɵtemplate(44,ku,3,3,"mat-icon",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(45,"div",14)(46,"mat-expansion-panel",15)(47,"mat-expansion-panel-header")(48,"mat-panel-title")(49,"div",16),t.ɵɵtext(50,"gateway.advanced-settings"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(51,"div",17)(52,"div",1)(53,"div",11),t.ɵɵpipe(54,"translate"),t.ɵɵtext(55,"gateway.bacnet.apdu-length"),t.ɵɵelementEnd(),t.ɵɵelementStart(56,"mat-form-field",4),t.ɵɵelement(57,"input",18),t.ɵɵpipe(58,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(59,"div",1)(60,"div",19),t.ɵɵpipe(61,"translate"),t.ɵɵtext(62,"gateway.bacnet.segmentation.label"),t.ɵɵelementEnd(),t.ɵɵelementStart(63,"mat-form-field",4)(64,"mat-select",20),t.ɵɵrepeaterCreate(65,Mu,3,4,"mat-option",21,t.ɵɵrepeaterTrackByIdentity),t.ɵɵelementEnd()()()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.applicationConfigFormGroup),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,19,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional(n.applicationConfigFormGroup.get("objectName").hasError("required")&&n.applicationConfigFormGroup.get("objectName").touched?8:-1),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(14,21,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional(n.applicationConfigFormGroup.get("host").hasError("required")&&n.applicationConfigFormGroup.get("host").touched?15:-1),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("min",n.portLimits.MIN),t.ɵɵpropertyInterpolate("max",n.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(21,23,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional((n.applicationConfigFormGroup.get("port").hasError("required")||n.applicationConfigFormGroup.get("port").hasError("min")||n.applicationConfigFormGroup.get("port").hasError("max"))&&n.applicationConfigFormGroup.get("port").touched?22:-1),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(28,25,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(31,27,"gateway.hints.bacnet.object-id")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(35,29,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional(n.applicationConfigFormGroup.get("objectIdentifier").hasError("required")&&n.applicationConfigFormGroup.get("objectIdentifier").touched?36:-1),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(39,31,"gateway.hints.bacnet.vendor-id")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(43,33,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional(n.applicationConfigFormGroup.get("vendorIdentifier").hasError("required")&&n.applicationConfigFormGroup.get("vendorIdentifier").touched?44:-1),t.ɵɵadvance(9),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(54,35,"gateway.hints.bacnet.apdu-length")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(58,37,"gateway.set")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(61,39,"gateway.hints.bacnet.segmentation")),t.ɵɵadvance(5),t.ɵɵrepeater(n.segmentationTypes))},dependencies:t.ɵɵgetComponentDepsFactory(Pu,[V,b,ns]),encapsulation:2,changeDetection:o.OnPush})}}function Fu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",11),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.key-required"))}function Ou(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",14),t.ɵɵpipe(1,"translate"),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",15)(6,"mat-form-field",6),t.ɵɵelement(7,"input",16),t.ɵɵpipe(8,"translate"),t.ɵɵtemplate(9,Fu,3,3,"mat-icon",11),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",e.keyType===e.BacnetDeviceKeysType.TIMESERIES?t.ɵɵpipeBind1(1,4,"gateway.hints.socket.key-telemetry"):t.ɵɵpipeBind1(2,6,"gateway.hints.socket.key-attribute")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,8,"gateway.key")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,10,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional(e.formGroup.get("key").hasError("required")&&e.formGroup.get("key").touched?9:-1)}}function qu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",11),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.method-required"))}function Bu(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",14),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",15)(5,"mat-form-field",6),t.ɵɵelement(6,"input",17),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,qu,3,3,"mat-icon",11),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,4,"gateway.hints.method")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,6,"gateway.method")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,8,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional(e.formGroup.get("method").hasError("required")&&e.formGroup.get("method").touched?8:-1)}}function Ru(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",8),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.BacnetRequestTypeTranslationsMap.get(e))," ")}}function Nu(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",3)(1,"div",18)(2,"div",14),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"tb-toggle-select",19),t.ɵɵrepeaterCreate(7,Ru,3,4,"tb-toggle-option",8,t.ɵɵrepeaterTrackByIndex),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,2,"gateway.hints.bacnet.request-type")),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,4,"gateway.bacnet.request-type.label")),t.ɵɵadvance(3),t.ɵɵrepeater(e.requestTypes)}}function _u(e,n){1&e&&(t.ɵɵelementStart(0,"div",3)(1,"div",4),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"gateway.request-timeout"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",6),t.ɵɵelement(5,"input",20),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(2,2,"gateway.hints.bacnet.request-timeout")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,4,"gateway.set")))}function Du(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",8),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.BacnetKeyObjectTypeTranslationsMap.get(e))," ")}}function Vu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",11),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.object-id-required"))}function Gu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",8),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.BacnetPropertyIdTranslationsMap.get(e))," ")}}function Au(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",13),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("isExpansionMode",!0)("defaultValue",e.ReportStrategyDefaultValue.Key)}}class ju extends Gr{constructor(){super(...arguments),this.withReportStrategy=!0,this.propertyIds=Pr.get(Ir.analogOutput),this.objectTypes=Object.values(Ir),this.requestTypes=Object.values(Or),this.ReportStrategyDefaultValue=Vt,this.BacnetDeviceKeysType=wr,this.BacnetKeyObjectTypeTranslationsMap=kr,this.BacnetPropertyIdTranslationsMap=Fr,this.BacnetRequestTypeTranslationsMap=qr}ngOnInit(){this.formGroup=this.initKeyFormGroup(),this.observeValueChanges(),this.observeObjectType()}isReportStrategyDisabled(){return!(this.withReportStrategy&&(this.keyType===wr.ATTRIBUTES||this.keyType===wr.TIMESERIES))}initKeyFormGroup(){return this.fb.group({key:[{value:"",disabled:this.keyType===wr.RPC_METHODS},[ne.required,ne.pattern($e)]],method:[{value:"",disabled:this.keyType!==wr.RPC_METHODS},[ne.required,ne.pattern($e)]],objectType:[Ir.analogOutput],objectId:[0,[ne.required]],propertyId:[Mr.presentValue],requestTimeout:[{value:0,disabled:this.keyType!==wr.RPC_METHODS}],requestType:[{value:Or.Write,disabled:this.keyType!==wr.RPC_METHODS}],reportStrategy:[{value:null,disabled:this.isReportStrategyDisabled()}]})}observeObjectType(){this.formGroup.get("objectType").valueChanges.pipe(Vr(this.destroyRef)).subscribe((e=>{this.propertyIds=Pr.get(e),this.propertyIds.includes(this.formGroup.get("propertyId").value)||this.formGroup.get("propertyId").patchValue(this.propertyIds[0],{emitEvent:!1})}))}initFormGroup(){return this.fb.group({})}mapOnChangeValue({reportStrategy:e,...t}){return e?{...t,reportStrategy:e}:t}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(ju)))(n||ju)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:ju,selectors:[["tb-bacnet-device-data-key"]],inputs:{keyType:"keyType",withReportStrategy:[2,"withReportStrategy","withReportStrategy",l]},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>ju)),multi:!0},{provide:re,useExisting:i((()=>ju)),multi:!0}]),t.ɵɵInputTransformsFeature,t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:35,vars:15,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],[1,"tb-flex","no-gap","raw-value-option"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["formControlName","objectType"],[3,"value"],[1,"tb-form-table-row-cell","tb-flex","no-gap"],["matInput","","type","number","min","0","name","value","formControlName","objectId",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["formControlName","propertyId"],["formControlName","reportStrategy",3,"isExpansionMode","defaultValue"],[1,"fixed-title-width","tb-required",3,"tb-hint-tooltip-icon"],[1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","key",3,"placeholder"],["matInput","","name","value","formControlName","method",3,"placeholder"],[1,"tb-flex","row","space-between","align-center","no-gap","fill-width"],["formControlName","requestType","appearance","fill"],["matInput","","type","number","min","0","name","value","formControlName","requestTimeout",3,"placeholder"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"gateway.platform-side"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3),t.ɵɵtemplate(5,Ou,10,12)(6,Bu,9,10),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"div",1)(8,"div",2),t.ɵɵtext(9,"gateway.connector-side"),t.ɵɵelementEnd(),t.ɵɵtemplate(10,Nu,9,6,"div",3)(11,_u,7,6,"div",3),t.ɵɵelementStart(12,"div",3)(13,"div",4),t.ɵɵpipe(14,"translate"),t.ɵɵtext(15,"gateway.object-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"div",5)(17,"mat-form-field",6)(18,"mat-select",7),t.ɵɵrepeaterCreate(19,Du,3,4,"mat-option",8,t.ɵɵrepeaterTrackByIndex),t.ɵɵelementEnd()()(),t.ɵɵelementStart(21,"div",9)(22,"mat-form-field",6),t.ɵɵelement(23,"input",10),t.ɵɵpipe(24,"translate"),t.ɵɵtemplate(25,Vu,3,3,"mat-icon",11),t.ɵɵelementEnd()()(),t.ɵɵelementStart(26,"div",3)(27,"div",4),t.ɵɵpipe(28,"translate"),t.ɵɵtext(29,"gateway.property-id"),t.ɵɵelementEnd(),t.ɵɵelementStart(30,"mat-form-field",6)(31,"mat-select",12),t.ɵɵrepeaterCreate(32,Gu,3,4,"mat-option",8,t.ɵɵrepeaterTrackByIndex),t.ɵɵelementEnd()()(),t.ɵɵtemplate(34,Au,1,2,"tb-report-strategy",13),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.formGroup),t.ɵɵadvance(5),t.ɵɵconditional(n.keyType!==n.BacnetDeviceKeysType.RPC_METHODS?5:6),t.ɵɵadvance(5),t.ɵɵconditional(n.keyType===n.BacnetDeviceKeysType.RPC_METHODS?10:-1),t.ɵɵadvance(),t.ɵɵconditional(n.keyType===n.BacnetDeviceKeysType.RPC_METHODS?11:-1),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(14,9,"gateway.hints.bacnet.key-object-id")),t.ɵɵadvance(6),t.ɵɵrepeater(n.objectTypes),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(24,11,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional(n.formGroup.get("objectId").hasError("required")&&n.formGroup.get("objectId").touched?25:-1),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(28,13,"gateway.hints.bacnet.property-id")),t.ɵɵadvance(5),t.ɵɵrepeater(n.propertyIds),t.ɵɵadvance(2),t.ɵɵconditional(n.isReportStrategyDisabled()?-1:34))},dependencies:t.ɵɵgetComponentDepsFactory(ju,[V,b,ma]),encapsulation:2,changeDetection:o.OnPush})}}function Lu(e,n){if(1&e&&t.ɵɵelement(0,"tb-bacnet-device-data-key",17),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext(2);t.ɵɵproperty("formControl",e)("keyType",n.keysType)("withReportStrategy",n.withReportStrategy)}}function Uu(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",9)(1,"div",10),t.ɵɵelementContainerStart(2,11),t.ɵɵelementStart(3,"mat-expansion-panel",12)(4,"mat-expansion-panel-header",13)(5,"mat-panel-title")(6,"div",14),t.ɵɵtext(7),t.ɵɵelementEnd()()(),t.ɵɵtemplate(8,Lu,1,3,"ng-template",15),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"button",16),t.ɵɵpipe(10,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$index,r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.deleteKey(n,a))})),t.ɵɵelementStart(11,"mat-icon"),t.ɵɵtext(12,"delete"),t.ɵɵelementEnd()()()}if(2&e){let e;const a=n.$implicit,r=n.$index,i=n.$count,o=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵproperty("formGroup",a),t.ɵɵadvance(),t.ɵɵproperty("expanded",r===i-1),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",null!==(e=null==a.value?null:a.value.key)&&void 0!==e?e:null==a.value?null:a.value.method," "),t.ɵɵadvance(2),t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(10,4,o.deleteKeyTitle))}}function $u(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",3),t.ɵɵrepeaterCreate(1,Uu,13,6,"div",9,t.ɵɵrepeaterTrackByIndex),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵrepeater(e.keysListFormArray.controls)}}function zu(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",4)(1,"span",18),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.noKeysText)}}class Ku extends R{constructor(e,t){super(t),this.fb=e,this.store=t,this.withReportStrategy=!0,this.keysDataApplied=d(),this.ReportStrategyDefaultValue=Vt}ngOnInit(){this.keysListFormArray=this.prepareKeysFormArray(this.keys)}addKey(){this.keysListFormArray.push(this.fb.control({}))}deleteKey(e,t){e&&e.stopPropagation(),this.keysListFormArray.removeAt(t),this.keysListFormArray.markAsDirty()}cancel(){this.popover?.hide()}applyKeysData(){this.keysDataApplied.emit(this.keysListFormArray.value)}prepareKeysFormArray(e){const t=[];return e?.forEach((e=>{t.push(this.fb.control(e))})),this.fb.array(t)}static{this.ɵfac=function(e){return new(e||Ku)(t.ɵɵdirectiveInject(te.UntypedFormBuilder),t.ɵɵdirectiveInject(ce.Store))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ku,selectors:[["tb-bacnet-device-data-keys-panel"]],inputs:{panelTitle:"panelTitle",addKeyTitle:"addKeyTitle",deleteKeyTitle:"deleteKeyTitle",noKeysText:"noKeysText",keys:"keys",keysType:"keysType",popover:"popover",withReportStrategy:[2,"withReportStrategy","withReportStrategy",l]},outputs:{keysDataApplied:"keysDataApplied"},standalone:!0,features:[t.ɵɵInputTransformsFeature,t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:18,vars:15,consts:[[1,"tb-device-keys-panel"],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-panel-title"],[1,"tb-form-panel","no-border","no-padding","key-panel"],[1,"tb-flex","no-flex","center","align-center","key-panel"],["type","button","mat-stroked-button","","color","primary",3,"click"],[1,"tb-flex","flex-end"],["mat-button","","color","primary","type","button",3,"click"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[1,"tb-form-panel","no-border","no-padding","tb-flex","no-flex","row","center","fill-width"],[1,"tb-form-panel","stroked","tb-flex"],[3,"formGroup"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],[1,"title-container"],["matExpansionPanelContent",""],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],[3,"formControl","keyType","withReportStrategy"],["translate","",1,"tb-prompt"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(5,$u,3,0,"div",3)(6,zu,3,1,"div",4),t.ɵɵelementStart(7,"div")(8,"button",5),t.ɵɵlistener("click",(function(){return n.addKey()})),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(11,"div",6)(12,"button",7),t.ɵɵlistener("click",(function(){return n.cancel()})),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"button",8),t.ɵɵlistener("click",(function(){return n.applyKeysData()})),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate2("",t.ɵɵpipeBind1(4,7,n.panelTitle),""," ("+n.keysListFormArray.controls.length+")"," "),t.ɵɵadvance(2),t.ɵɵconditional(n.keysListFormArray.controls.length?5:6),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(10,9,n.addKeyTitle)," "),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(14,11,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.keysListFormArray.invalid||!n.keysListFormArray.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(17,13,"action.apply")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Ku,[V,b,ju]),styles:['@charset "UTF-8";[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%]{width:77vw;max-width:700px}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{max-width:11vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .key-panel[_ngcontent-%COMP%]{height:500px;overflow:auto}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .tb-form-panel[_ngcontent-%COMP%] .mat-mdc-icon-button[_ngcontent-%COMP%]{width:56px;height:56px;padding:16px;color:#0000008a}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .tb-small-label[_ngcontent-%COMP%]{font-size:16px;padding-right:0}[_nghost-%COMP%] .tb-device-keys-panel[_ngcontent-%COMP%] .see-example[_ngcontent-%COMP%]{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}'],changeDetection:o.OnPush})}}function Hu(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",16),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.host-required"))}function Wu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",16),t.ɵɵpipe(1,"getGatewayPortTooltip"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.deviceFormGroup.get("port")))}}function Qu(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",12)(1,"mat-expansion-panel",33)(2,"mat-expansion-panel-header")(3,"mat-panel-title")(4,"div",34),t.ɵɵtext(5,"gateway.advanced-configuration-settings"),t.ɵɵelementEnd()()(),t.ɵɵelement(6,"tb-string-items-list",35),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()()),2&e){let e;const n=t.ɵɵnextContext();t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(7,2,"gateway.bacnet.alt-responses-address")),t.ɵɵpropertyInterpolate("placeholder",null!=(e=n.deviceFormGroup.get("altResponsesAddresses").value)&&e.length?"":t.ɵɵpipeBind1(8,4,"gateway.address"))}}function Ju(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",16),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e&&t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,"gateway.hints.poll-period-required"))}function Yu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.key," ")}}function Xu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.key," ")}}function Zu(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.key," ")}}function eg(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.method," ")}}class tg extends I{constructor(e,t,n,a,r,i,o,s,p,l){super(e,t,a),this.store=e,this.router=t,this.data=n,this.dialogRef=a,this.fb=r,this.popoverService=i,this.renderer=o,this.viewContainerRef=s,this.cdr=p,this.destroyRef=l,this.deviceFormGroup=this.fb.group({host:["",[ne.required,ne.pattern($e)]],port:["",[ne.required,ne.min(Fa.MIN),ne.max(Fa.MAX)]],deviceInfo:[],altResponsesAddresses:[{value:[],disabled:this.data.hideNewFields}],pollPeriod:[1e4,[ne.required,ne.min(0)]],timeseries:[[]],attributes:[[]],attributeUpdates:[[]],serverSideRpc:[[]]}),this.keysPopupClosed=!0,this.BacnetDeviceKeysType=wr,this.DeviceInfoType=vr,this.portLimits=Fa,this.deviceHelpLink=q+"/docs/iot-gateway/config/bacnet/#device-object-settings",this.sourceTypes=Object.values(Ia),this.ConnectorType=Je,this.deviceFormGroup.patchValue(this.data.value,{emitEvent:!1})}cancel(){this.keysPopupClosed&&this.dialogRef.close(null)}add(){if(this.deviceFormGroup.valid){const{altResponsesAddresses:e,...t}=this.deviceFormGroup.value;this.dialogRef.close({altResponsesAddresses:e??[],...t})}}manageKeys(e,t,n){e?.stopPropagation();const a=t._elementRef.nativeElement;if(this.popoverService.hasPopover(a))return void this.popoverService.hidePopover(a);const r=this.deviceFormGroup.get(n),i={keys:r.value,keysType:n,panelTitle:Cr.get(n),addKeyTitle:Sr.get(n),deleteKeyTitle:Er.get(n),noKeysText:Tr.get(n),withReportStrategy:this.data.withReportStrategy};this.keysPopupClosed=!1;const o=this.popoverService.displayPopover(a,this.renderer,this.viewContainerRef,Ku,"leftBottom",!1,null,i,{},{},{},!0);o.tbComponentRef.instance.popover=o,o.tbComponentRef.instance.keysDataApplied.subscribe((e=>{o.hide(),r.patchValue(e),r.markAsDirty(),this.cdr.markForCheck()})),o.tbHideStart.pipe(Vr(this.destroyRef)).subscribe((()=>{this.keysPopupClosed=!0}))}static{this.ɵfac=function(e){return new(e||tg)(t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(de.Router),t.ɵɵdirectiveInject(se),t.ɵɵdirectiveInject(pe.MatDialogRef),t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(je.TbPopoverService),t.ɵɵdirectiveInject(t.Renderer2),t.ɵɵdirectiveInject(t.ViewContainerRef),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(t.DestroyRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:tg,selectors:[["tb-bacnet-device-dialog"]],standalone:!0,features:[t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:99,vars:46,consts:[["attributesButton",""],["socketTelemetryButton",""],["attributesUpdatesButton",""],["rpcMethodsButton",""],[1,"dialog-mapping",3,"formGroup"],["color","primary"],[1,"flex-1"],[3,"tb-help"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["mat-dialog-content",""],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","name","value","formControlName","host",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","type","number","name","value","formControlName","port",3,"min","max","placeholder"],["formControlName","deviceInfo","required","true",3,"deviceInfoType","sourceTypes","connectorType"],[1,"fixed-title-width","tb-required"],["tbTruncateWithTooltip","","translate",""],["matInput","","type","number","min","0","name","value","formControlName","pollPeriod",3,"placeholder"],[1,"tb-form-row","space-between","tb-flex"],["translate","",1,"fixed-title-width"],[1,"tb-flex","ellipsis-chips-container"],[1,"tb-flex",3,"tbEllipsisChipList"],[1,"mat-mdc-chip","ellipsis-chip"],[1,"ellipsis-text"],["type","button","mat-icon-button","","color","primary","matTooltipPosition","above",3,"click","matTooltip"],["matButtonIcon",""],["mat-dialog-actions","",1,"justify-end"],["mat-button","","color","primary","type","button","cdkFocusInitial","",3,"click"],["mat-raised-button","","color","primary",3,"click","disabled"],[1,"tb-settings","chips-panel","w-full"],["translate","",1,"tb-form-panel-title"],["editable","","floatLabel","always","formControlName","altResponsesAddresses",1,"chips-list",3,"label","placeholder"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",4)(1,"mat-toolbar",5)(2,"h2"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"span",6)(6,"div",7),t.ɵɵelementStart(7,"button",8),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵelementStart(8,"mat-icon",9),t.ɵɵtext(9,"close"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(10,"div",10)(11,"div",11)(12,"div",12)(13,"div",13),t.ɵɵtext(14,"gateway.host"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"mat-form-field",14),t.ɵɵelement(16,"input",15),t.ɵɵpipe(17,"translate"),t.ɵɵtemplate(18,Hu,3,3,"mat-icon",16),t.ɵɵelementEnd()(),t.ɵɵelementStart(19,"div",12)(20,"div",13),t.ɵɵtext(21,"gateway.port"),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"mat-form-field",14),t.ɵɵelement(23,"input",17),t.ɵɵpipe(24,"translate"),t.ɵɵtemplate(25,Wu,3,3,"mat-icon",16),t.ɵɵelementEnd()(),t.ɵɵtemplate(26,Qu,9,6,"div",12),t.ɵɵelement(27,"tb-device-info-table",18),t.ɵɵelementStart(28,"div",12)(29,"div",19)(30,"span",20),t.ɵɵtext(31,"gateway.poll-period"),t.ɵɵelementEnd()(),t.ɵɵelementStart(32,"mat-form-field",14),t.ɵɵelement(33,"input",21),t.ɵɵpipe(34,"translate"),t.ɵɵtemplate(35,Ju,3,3,"mat-icon",16),t.ɵɵelementEnd()(),t.ɵɵelementStart(36,"div",22)(37,"div",23),t.ɵɵtext(38,"gateway.attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(39,"div",24)(40,"mat-chip-listbox",25),t.ɵɵrepeaterCreate(41,Yu,2,1,"mat-chip",null,t.ɵɵrepeaterTrackByIdentity),t.ɵɵelementStart(43,"mat-chip",26),t.ɵɵelement(44,"label",27),t.ɵɵelementEnd()(),t.ɵɵelementStart(45,"button",28,0),t.ɵɵpipe(47,"translate"),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(46);return t.ɵɵresetView(n.manageKeys(a,r,n.BacnetDeviceKeysType.ATTRIBUTES))})),t.ɵɵelementStart(48,"tb-icon",29),t.ɵɵtext(49,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(50,"div",22)(51,"div",23),t.ɵɵtext(52,"gateway.timeseries"),t.ɵɵelementEnd(),t.ɵɵelementStart(53,"div",24)(54,"mat-chip-listbox",25),t.ɵɵrepeaterCreate(55,Xu,2,1,"mat-chip",null,t.ɵɵrepeaterTrackByIdentity),t.ɵɵelementStart(57,"mat-chip",26),t.ɵɵelement(58,"label",27),t.ɵɵelementEnd()(),t.ɵɵelementStart(59,"button",28,1),t.ɵɵpipe(61,"translate"),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(60);return t.ɵɵresetView(n.manageKeys(a,r,n.BacnetDeviceKeysType.TIMESERIES))})),t.ɵɵelementStart(62,"tb-icon",29),t.ɵɵtext(63,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(64,"div",22)(65,"div",23),t.ɵɵtext(66,"gateway.attribute-updates"),t.ɵɵelementEnd(),t.ɵɵelementStart(67,"div",24)(68,"mat-chip-listbox",25),t.ɵɵrepeaterCreate(69,Zu,2,1,"mat-chip",null,t.ɵɵrepeaterTrackByIdentity),t.ɵɵelementStart(71,"mat-chip",26),t.ɵɵelement(72,"label",27),t.ɵɵelementEnd()(),t.ɵɵelementStart(73,"button",28,2),t.ɵɵpipe(75,"translate"),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(74);return t.ɵɵresetView(n.manageKeys(a,r,n.BacnetDeviceKeysType.ATTRIBUTES_UPDATES))})),t.ɵɵelementStart(76,"tb-icon",29),t.ɵɵtext(77,"edit"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(78,"div",22)(79,"div",23),t.ɵɵtext(80,"gateway.rpc-methods"),t.ɵɵelementEnd(),t.ɵɵelementStart(81,"div",24)(82,"mat-chip-listbox",25),t.ɵɵrepeaterCreate(83,eg,2,1,"mat-chip",null,t.ɵɵrepeaterTrackByIdentity),t.ɵɵelementStart(85,"mat-chip",26),t.ɵɵelement(86,"label",27),t.ɵɵelementEnd()(),t.ɵɵelementStart(87,"button",28,3),t.ɵɵpipe(89,"translate"),t.ɵɵlistener("click",(function(a){t.ɵɵrestoreView(e);const r=t.ɵɵreference(88);return t.ɵɵresetView(n.manageKeys(a,r,n.BacnetDeviceKeysType.RPC_METHODS))})),t.ɵɵelementStart(90,"tb-icon",29),t.ɵɵtext(91,"edit"),t.ɵɵelementEnd()()()()()(),t.ɵɵelementStart(92,"div",30)(93,"button",31),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.cancel())})),t.ɵɵtext(94),t.ɵɵpipe(95,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(96,"button",32),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.add())})),t.ɵɵtext(97),t.ɵɵpipe(98,"translate"),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵproperty("formGroup",n.deviceFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,26,"gateway.device")),t.ɵɵadvance(3),t.ɵɵproperty("tb-help",n.deviceHelpLink),t.ɵɵadvance(10),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(17,28,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional(n.deviceFormGroup.get("host").hasError("required")&&n.deviceFormGroup.get("host").touched?18:-1),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("min",n.portLimits.MIN),t.ɵɵpropertyInterpolate("max",n.portLimits.MAX),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(24,30,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional((n.deviceFormGroup.get("port").hasError("required")||n.deviceFormGroup.get("port").hasError("min")||n.deviceFormGroup.get("port").hasError("max"))&&n.deviceFormGroup.get("port").touched?25:-1),t.ɵɵadvance(),t.ɵɵconditional(n.data.hideNewFields?-1:26),t.ɵɵadvance(),t.ɵɵproperty("deviceInfoType",n.DeviceInfoType.FULL)("sourceTypes",n.sourceTypes)("connectorType",n.ConnectorType.BACNET),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(34,32,"gateway.set")),t.ɵɵadvance(2),t.ɵɵconditional(n.deviceFormGroup.get("pollPeriod").hasError("required")&&n.deviceFormGroup.get("pollPeriod").touched?35:-1),t.ɵɵadvance(5),t.ɵɵproperty("tbEllipsisChipList",n.deviceFormGroup.get("attributes").value),t.ɵɵadvance(),t.ɵɵrepeater(n.deviceFormGroup.get("attributes").value),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(47,34,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",n.deviceFormGroup.get("timeseries").value),t.ɵɵadvance(),t.ɵɵrepeater(n.deviceFormGroup.get("timeseries").value),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(61,36,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",n.deviceFormGroup.get("attributeUpdates").value),t.ɵɵadvance(),t.ɵɵrepeater(n.deviceFormGroup.get("attributeUpdates").value),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(75,38,"action.edit")),t.ɵɵadvance(9),t.ɵɵproperty("tbEllipsisChipList",n.deviceFormGroup.get("serverSideRpc").value),t.ɵɵadvance(),t.ɵɵrepeater(n.deviceFormGroup.get("serverSideRpc").value),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(89,40,"action.edit")),t.ɵɵadvance(7),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(95,42,"action.cancel")," "),t.ɵɵadvance(2),t.ɵɵproperty("disabled",n.deviceFormGroup.invalid||!n.deviceFormGroup.dirty||!n.keysPopupClosed),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(98,44,n.data.buttonTitle)," "))},dependencies:t.ɵɵgetComponentDepsFactory(tg,[V,b,aa,na,ns,Ss]),styles:['@charset "UTF-8";[_nghost-%COMP%]{display:grid;height:100%}[_nghost-%COMP%] .tb-form-panel[_ngcontent-%COMP%]{width:77vw;max-width:800px}[_nghost-%COMP%] .dialog-mapping[_ngcontent-%COMP%]{max-width:900px;display:flex;flex-direction:column}[_nghost-%COMP%] .dialog-mapping[_ngcontent-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{min-height:64px}[_nghost-%COMP%] .dialog-mapping[_ngcontent-%COMP%] tb-toggle-select[_ngcontent-%COMP%]{padding:4px 0}[_nghost-%COMP%] .mat-mdc-dialog-content[_ngcontent-%COMP%]{height:670px}[_nghost-%COMP%] .ellipsis-chips-container[_ngcontent-%COMP%]{max-width:70%}[_nghost-%COMP%] .chips-panel[_ngcontent-%COMP%]{padding:6px 6px 6px 0}[_nghost-%COMP%] .dialog-mapping .mat-mdc-chip-listbox .mdc-evolution-chip-set__chips{justify-content:flex-end;align-items:center}[_nghost-%COMP%] .tb-form-row .fixed-title-width{min-width:40px;width:35%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center}[_nghost-%COMP%] .tb-form-row .mat-mdc-form-field{width:0}[_nghost-%COMP%] .tb-form-row .chips-list .mat-mdc-form-field{width:100%}[_nghost-%COMP%] .see-example{width:32px;height:32px;margin:4px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex}[_nghost-%COMP%] .device-config{gap:12px;padding-left:10px;padding-right:10px}[_nghost-%COMP%] .device-node-pattern-field{flex-basis:3%}'],changeDetection:o.OnPush})}}const ng=()=>["deviceName","host","port","actions"],ag=()=>({minWidth:"96px",textAlign:"center"});function rg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",7)(1,"div",26)(2,"span",27),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()(),t.ɵɵelement(5,"span",9),t.ɵɵelementStart(6,"button",11),t.ɵɵpipe(7,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.manageDevices(n))})),t.ɵɵelementStart(8,"mat-icon"),t.ɵɵtext(9,"add"),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"button",11),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.enterFilterMode())})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"search"),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.devices")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,5,"action.add")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(11,7,"action.search")))}function ig(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",28)(1,"div",29),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,"gateway.device-name")))}function og(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",28)(1,"div",29),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(null==e.deviceInfo?null:e.deviceInfo.deviceNameExpression)}}function sg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",28),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.host")," "))}function pg(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",28)(1,"div",29),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.host)}}function lg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",28),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.port")," "))}function cg(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",28)(1,"div",29),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵadvance(2),t.ɵɵtextInterpolate(e.port)}}function dg(e,n){1&e&&t.ɵɵelement(0,"mat-header-cell",30)}function mg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",11),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.manageDevices(n,a))})),t.ɵɵelementStart(2,"tb-icon"),t.ɵɵtext(3,"edit"),t.ɵɵelementEnd()(),t.ɵɵelementStart(4,"button",11),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteDevice(n,a))})),t.ɵɵelementStart(6,"tb-icon"),t.ɵɵtext(7,"delete"),t.ɵɵelementEnd()()}2&e&&(t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,2,"action.edit")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(5,4,"action.delete")))}function ug(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtemplate(1,mg,8,6,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(3,"div",31),t.ɵɵelementContainer(4,32),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",33)(6,"button",34),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(7,"mat-icon",35),t.ɵɵtext(8,"more_vert"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"mat-menu",36,2),t.ɵɵelementContainer(11,32),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(2),n=t.ɵɵreference(10);t.ɵɵadvance(3),t.ɵɵstyleMap(t.ɵɵpureFunction0(5,ag)),t.ɵɵadvance(),t.ɵɵproperty("ngTemplateOutlet",e),t.ɵɵadvance(2),t.ɵɵproperty("matMenuTriggerFor",n),t.ɵɵadvance(5),t.ɵɵproperty("ngTemplateOutlet",e)}}function gg(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",37)}function yg(e,n){1&e&&t.ɵɵelement(0,"mat-row")}class hg extends $r{constructor(){super(...arguments),this.hideNewFields=!1}getDatasource(){return new fg}manageDevices(e,t){e&&e.stopPropagation();const n=j(t),a=n?this.entityFormArray.at(t).value:{};this.getDeviceDialog(a,n?"action.apply":"action.add").afterClosed().pipe(Ie(1),Vr(this.destroyRef)).subscribe((e=>{e&&(n?this.entityFormArray.at(t).patchValue(e):this.entityFormArray.push(this.fb.control(e)),this.entityFormArray.markAsDirty())}))}deleteDevice(e,t){e&&e.stopPropagation(),this.dialogService.confirm(this.translate.instant("gateway.delete-device-title"),"",this.translate.instant("action.no"),this.translate.instant("action.yes"),!0).pipe(Ie(1),Vr(this.destroyRef)).subscribe((e=>{e&&(this.entityFormArray.removeAt(t),this.entityFormArray.markAsDirty())}))}getDeviceDialog(e,t){return this.dialog.open(tg,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{value:e,buttonTitle:t,withReportStrategy:this.withReportStrategy,hideNewFields:this.hideNewFields}})}updateTableData(e,t){t&&(e=e.filter((e=>Object.values(e).some((e=>e.toString().toLowerCase().includes(t.toLowerCase())||e.deviceNameExpression?.toString().toLowerCase().includes(t.toLowerCase())))))),this.dataSource.loadData(e)}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(hg)))(n||hg)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:hg,selectors:[["tb-bacnet-devices-config-table"]],inputs:{hideNewFields:[2,"hideNewFields","hideNewFields",l]},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>hg)),multi:!0},{provide:re,useExisting:i((()=>hg)),multi:!0}]),t.ɵɵInputTransformsFeature,t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:48,vars:37,consts:[["searchInput",""],["rowActions",""],["cellActionsMenu","matMenu"],[1,"tb-device-table","tb-absolute-fill"],[1,"tb-device-table-content","flex","flex-col"],[1,"mat-mdc-table-toolbar"],["class","mat-toolbar-tools",4,"ngIf"],[1,"mat-toolbar-tools"],["mat-icon-button","","matTooltipPosition","above",3,"matTooltip"],[1,"flex-1"],["matInput","",3,"formControl","placeholder"],["mat-icon-button","","matTooltipPosition","above",3,"click","matTooltip"],[1,"table-container"],["mat-table","",3,"dataSource"],[3,"matColumnDef"],["class","table-value-column",4,"matHeaderCellDef"],["class","table-value-column",4,"matCellDef"],["matColumnDef","actions","stickyEnd",""],["class","w-12",4,"matHeaderCellDef"],[4,"matCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],[4,"matRowDef","matRowDefColumns"],[1,"mat-headline-5","tb-absolute-fill","tb-add-new","items-center","justify-center"],["mat-button","",1,"connector",3,"click"],[1,"tb-mat-96"],["translate","",1,"no-data-found","items-center","justify-center"],[1,"title-container"],[1,"tb-device-table-title"],[1,"table-value-column"],["tbTruncateWithTooltip",""],[1,"w-12"],[1,"lt-lg:!hidden","flex","flex-1","flex-row","items-stretch","justify-end"],[3,"ngTemplateOutlet"],[1,"gt-md:!hidden"],["mat-icon-button","",3,"click","matMenuTriggerFor"],[1,"material-icons"],["xPosition","before"],[1,"mat-row-select"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",3)(1,"div",4)(2,"mat-toolbar",5),t.ɵɵtemplate(3,rg,14,9,"div",6),t.ɵɵpipe(4,"async"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-toolbar",5)(6,"div",7)(7,"button",8),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"mat-icon"),t.ɵɵtext(10,"search"),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",9)(12,"mat-label"),t.ɵɵtext(13," "),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",10,0),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"button",11),t.ɵɵpipe(18,"translate"),t.ɵɵlistener("click",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.exitFilterMode())})),t.ɵɵelementStart(19,"mat-icon"),t.ɵɵtext(20,"close"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(21,"div",12)(22,"table",13),t.ɵɵelementContainerStart(23,14),t.ɵɵtemplate(24,ig,4,3,"mat-header-cell",15)(25,og,3,1,"mat-cell",16),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(26,14),t.ɵɵtemplate(27,sg,3,3,"mat-header-cell",15)(28,pg,3,1,"mat-cell",16),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(29,14),t.ɵɵtemplate(30,lg,3,3,"mat-header-cell",15)(31,cg,3,1,"mat-cell",16),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(32,17),t.ɵɵtemplate(33,dg,1,0,"mat-header-cell",18)(34,ug,12,6,"mat-cell",19),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(35,gg,1,0,"mat-header-row",20)(36,yg,1,0,"mat-row",21),t.ɵɵelementEnd(),t.ɵɵelementStart(37,"section",22),t.ɵɵpipe(38,"async"),t.ɵɵelementStart(39,"button",23),t.ɵɵlistener("click",(function(a){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.manageDevices(a))})),t.ɵɵelementStart(40,"mat-icon",24),t.ɵɵtext(41,"add"),t.ɵɵelementEnd(),t.ɵɵelementStart(42,"span"),t.ɵɵtext(43),t.ɵɵpipe(44,"translate"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(45,"span",25),t.ɵɵpipe(46,"async"),t.ɵɵtext(47," widget.no-data-found "),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.textSearchMode),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!1===t.ɵɵpipeBind1(4,21,n.dataSource.isEmpty())),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,23,"action.search")),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(16,25,"common.enter-search")),t.ɵɵproperty("formControl",n.textSearch),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,27,"action.close")),t.ɵɵadvance(5),t.ɵɵproperty("dataSource",n.dataSource),t.ɵɵadvance(),t.ɵɵproperty("matColumnDef","deviceName"),t.ɵɵadvance(3),t.ɵɵproperty("matColumnDef","host"),t.ɵɵadvance(3),t.ɵɵproperty("matColumnDef","port"),t.ɵɵadvance(6),t.ɵɵproperty("matHeaderRowDef",t.ɵɵpureFunction0(35,ng))("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",t.ɵɵpureFunction0(36,ng)),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",n.textSearchMode||!1===t.ɵɵpipeBind1(38,29,n.dataSource.isEmpty())),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(44,31,"gateway.add-device")),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",!n.textSearchMode||!1===t.ɵɵpipeBind1(46,33,n.dataSource.isEmpty())))},dependencies:t.ɵɵgetComponentDepsFactory(hg,[V,b,na]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%]{width:100%;height:100%;background:#fff;overflow:hidden}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .mat-toolbar-tools[_ngcontent-%COMP%]{min-height:auto}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .title-container[_ngcontent-%COMP%]{overflow:hidden}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .tb-device-table-title[_ngcontent-%COMP%]{padding-right:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%]{overflow:auto}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%]{table-layout:fixed;min-width:450px}[_nghost-%COMP%] .tb-device-table[_ngcontent-%COMP%] .tb-device-table-content[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%] .mat-mdc-table[_ngcontent-%COMP%] .table-value-column[_ngcontent-%COMP%]{padding:0 12px;width:21%}[_nghost-%COMP%] .no-data-found[_ngcontent-%COMP%]{height:calc(100% - 120px)}@media screen and (max-width: 599px){[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{height:auto;min-height:100px}[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%] .tb-device-table-title[_ngcontent-%COMP%]{padding-bottom:5px;width:100%}}[_nghost-%COMP%] mat-cell.tb-value-cell{cursor:pointer}[_nghost-%COMP%] mat-cell.tb-value-cell .mat-icon{height:24px;width:24px;font-size:24px;color:#757575}'],changeDetection:o.OnPush})}}class fg extends N{constructor(){super()}}class vg extends Ar{initBasicFormGroup(){return this.fb.group({application:[],devices:[]})}mapConfigToFormValue(e){return{application:e.application??{},devices:e.devices??[]}}getMappedValue(e){return{application:e.application,devices:e.devices??[]}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(vg)))(n||vg)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:vg,selectors:[["tb-bacnet-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>vg)),multi:!0},{provide:re,useExisting:i((()=>vg)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:11,vars:14,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","application"],[1,"tb-form-panel","no-border","no-padding","padding-top","tb-flex","fill-height"],["formControlName","devices",3,"hideNewFields"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-bacnet-application-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4),t.ɵɵelement(10,"tb-bacnet-devices-config-table",5),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,8,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,10,"gateway.application"),"*"),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,12,"gateway.devices"),"*"),t.ɵɵadvance(3),t.ɵɵproperty("hideNewFields",n.isLegacy))},dependencies:t.ɵɵgetComponentDepsFactory(vg,[V,b,Pu,hg]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}class bg extends Ar{constructor(){super(...arguments),this.isLegacy=!0}initBasicFormGroup(){return this.fb.group({application:[],devices:[]})}mapConfigToFormValue(e){return{application:e.general?Qr.mapApplicationToUpgradedVersion(e.general):{},devices:e.devices?.length?Qr.mapDevicesToUpgradedVersion(e.devices):[]}}getMappedValue(e){return{general:e.application?Qr.mapApplicationToDowngradedVersion(e.application):{},devices:e.devices?.length?Qr.mapDevicesToDowngradedVersion(e.devices):[]}}static{this.ɵfac=(()=>{let e;return function(n){return(e||(e=t.ɵɵgetInheritedFactory(bg)))(n||bg)}})()}static{this.ɵcmp=t.ɵɵdefineComponent({type:bg,selectors:[["tb-bacnet-legacy-basic-config"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>bg)),multi:!0},{provide:re,useExisting:i((()=>bg)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:11,vars:14,consts:[[3,"formGroup"],[3,"label"],[3,"ngTemplateOutlet"],["formControlName","application"],[1,"tb-form-panel","no-border","no-padding","padding-top","tb-flex","fill-height"],["formControlName","devices",3,"hideNewFields"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"mat-tab-group",0)(1,"mat-tab",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,2),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",1),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-bacnet-application-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-tab",1),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"div",4),t.ɵɵelement(10,"tb-bacnet-devices-config-table",5),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,8,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",n.generalTabContent),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,10,"gateway.application"),"*"),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(8,12,"gateway.devices"),"*"),t.ɵɵadvance(3),t.ɵɵproperty("hideNewFields",n.isLegacy))},dependencies:t.ɵɵgetComponentDepsFactory(bg,[V,b,Pu,hg]),styles:['@charset "UTF-8";[_nghost-%COMP%]{height:100%}[_nghost-%COMP%] .mat-mdc-tab-group, [_nghost-%COMP%] .mat-mdc-tab-body-wrapper{height:100%}'],changeDetection:o.OnPush})}}const xg=(e,t)=>({hasErrors:e,noErrors:t}),wg=()=>({minWidth:"144px",maxWidth:"144px",textAlign:"center"}),Cg=()=>({minWidth:"144px",maxWidth:"144px",width:"144px",textAlign:"center"}),Sg=e=>({"tb-current-entity":e});function Eg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",32),t.ɵɵpipe(1,"translate"),t.ɵɵpipe(2,"async"),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.onAddConnector(n))})),t.ɵɵelementStart(3,"mat-icon"),t.ɵɵtext(4,"add"),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,2,"action.add")),t.ɵɵproperty("disabled",t.ɵɵpipeBind1(2,4,e.isLoading$))}}function Tg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section",33)(1,"button",34),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.onAddConnector(n))})),t.ɵɵelementStart(2,"mat-icon",35),t.ɵɵtext(3,"add"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"span"),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()()}2&e&&(t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(6,1,"gateway.add-connector")))}function Ig(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",36),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.connectors-table-enabled")," "))}function kg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell")(1,"mat-slide-toggle",37),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return n.stopPropagation(),t.ɵɵresetView(r.onEnableConnector(a))})),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("checked",a.activeConnectors.includes(e.key))}}function Mg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",38),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.connectors-table-name"),""))}function Pg(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.key," ")}}function Fg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.connectors-table-type")," "))}function Og(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",40),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",a.returnType(e)," ")}}function qg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.configuration")," "))}function Bg(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-cell",40)(1,"div",41),t.ɵɵtext(2),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵclassMap(a.isConnectorSynced(e)?"status-sync":"status-unsync"),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",a.isConnectorSynced(e)?"sync":"out of sync"," ")}}function Rg(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell",39),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.connectors-table-status")," "))}function Ng(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell",40)(1,"span",42),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.connectorLogs(a,n))})),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵclassMap(t.ɵɵpureFunction2(3,xg,+a.getErrorsCount(e)>0,0==+a.getErrorsCount(e)||""===a.getErrorsCount(e))),t.ɵɵpropertyInterpolate("matTooltip","Errors: "+a.getErrorsCount(e))}}function _g(e,n){1&e&&(t.ɵɵelementStart(0,"mat-header-cell"),t.ɵɵelement(1,"div",43),t.ɵɵelementStart(2,"div",44),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵstyleMap(t.ɵɵpureFunction0(5,wg)),t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"gateway.connectors-table-actions")))}function Dg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-cell")(1,"div",45)(2,"button",46),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.connectorRpc(a,n))})),t.ɵɵelementStart(3,"mat-icon"),t.ɵɵtext(4,"private_connectivity"),t.ɵɵelementEnd()(),t.ɵɵelementStart(5,"button",47),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.connectorLogs(a,n))})),t.ɵɵelementStart(6,"mat-icon"),t.ɵɵtext(7,"list"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"button",48),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteConnector(a,n))})),t.ɵɵelementStart(9,"mat-icon"),t.ɵɵtext(10,"delete"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(11,"div",49)(12,"button",50),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵelementStart(13,"mat-icon",51),t.ɵɵtext(14,"more_vert"),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"mat-menu",52,1)(17,"button",46),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.connectorRpc(a,n))})),t.ɵɵelementStart(18,"mat-icon"),t.ɵɵtext(19,"private_connectivity"),t.ɵɵelementEnd()(),t.ɵɵelementStart(20,"button",47),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.connectorLogs(a,n))})),t.ɵɵelementStart(21,"mat-icon"),t.ɵɵtext(22,"list"),t.ɵɵelementEnd()(),t.ɵɵelementStart(23,"button",48),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.deleteConnector(a,n))})),t.ɵɵelementStart(24,"mat-icon"),t.ɵɵtext(25,"delete"),t.ɵɵelementEnd()()()()()}if(2&e){const e=n.$implicit,a=t.ɵɵreference(16);t.ɵɵadvance(),t.ɵɵstyleMap(t.ɵɵpureFunction0(5,Cg)),t.ɵɵadvance(),t.ɵɵproperty("disabled",!e.value.configurationJson.id),t.ɵɵadvance(10),t.ɵɵproperty("matMenuTriggerFor",a),t.ɵɵadvance(5),t.ɵɵproperty("disabled",!e.value.configurationJson.id)}}function Vg(e,n){1&e&&t.ɵɵelement(0,"mat-header-row",53)}function Gg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-row",54),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.selectConnector(n,a))})),t.ɵɵelementEnd()}if(2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵclassMap(t.ɵɵpureFunction1(2,Sg,a.isSameConnector(e)))}}function Ag(e,n){if(1&e&&(t.ɵɵelementStart(0,"span",55),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1("v",e.connectorForm.get("configVersion").value,"")}}function jg(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-select",56)(1,"tb-toggle-option",57),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"tb-toggle-option",57),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("value",e.ConnectorConfigurationModes.BASIC),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,4,"gateway.basic")," "),t.ɵɵadvance(2),t.ɵɵproperty("value",e.ConnectorConfigurationModes.ADVANCED),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,6,"gateway.advanced")," ")}}function Lg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-mqtt-basic-config",65),t.ɵɵpipe(1,"withReportStrategy"),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(4),n=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",n)("withReportStrategy",t.ɵɵpipeBind2(1,2,e.connectorForm.get("configVersion").value,e.ConnectorType.MQTT))}}function Ug(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-mqtt-legacy-basic-config",65),t.ɵɵpipe(1,"withReportStrategy"),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(4),n=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",n)("withReportStrategy",t.ɵɵpipeBind2(1,2,e.connectorForm.get("configVersion").value,e.ConnectorType.MQTT))}}function $g(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,Lg,2,5,"tb-mqtt-basic-config",64),t.ɵɵpipe(2,"isLatestVersionConfig"),t.ɵɵtemplate(3,Ug,2,5,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵreference(4),n=t.ɵɵnextContext(3);t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind2(2,2,n.connectorForm.get("configVersion").value,n.ConnectorType.MQTT))("ngIfElse",e)}}function zg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-opc-ua-basic-config",65),t.ɵɵpipe(1,"withReportStrategy"),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(4),n=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",n)("withReportStrategy",t.ɵɵpipeBind2(1,2,e.connectorForm.get("configVersion").value,e.ConnectorType.OPCUA))}}function Kg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-opc-ua-legacy-basic-config",65),t.ɵɵpipe(1,"withReportStrategy"),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(4),n=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",n)("withReportStrategy",t.ɵɵpipeBind2(1,2,e.connectorForm.get("configVersion").value,e.ConnectorType.OPCUA))}}function Hg(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,zg,2,5,"tb-opc-ua-basic-config",64),t.ɵɵpipe(2,"isLatestVersionConfig"),t.ɵɵtemplate(3,Kg,2,5,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵreference(4),n=t.ɵɵnextContext(3);t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind2(2,2,n.connectorForm.get("configVersion").value,n.ConnectorType.OPCUA))("ngIfElse",e)}}function Wg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-modbus-basic-config",67),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){t.ɵɵnextContext(4);const e=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",e)}}function Qg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-modbus-legacy-basic-config",67),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){t.ɵɵnextContext(4);const e=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",e)}}function Jg(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,Wg,1,1,"tb-modbus-basic-config",66),t.ɵɵpipe(2,"isLatestVersionConfig"),t.ɵɵtemplate(3,Qg,1,1,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵreference(4),n=t.ɵɵnextContext(3);t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind2(2,2,n.connectorForm.get("configVersion").value,n.ConnectorType.MODBUS))("ngIfElse",e)}}function Yg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-socket-basic-config",67),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){t.ɵɵnextContext(4);const e=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",e)}}function Xg(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-socket-legacy-basic-config",67),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){t.ɵɵnextContext(4);const e=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",e)}}function Zg(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,Yg,1,1,"tb-socket-basic-config",66),t.ɵɵpipe(2,"isLatestVersionConfig"),t.ɵɵtemplate(3,Xg,1,1,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵreference(4),n=t.ɵɵnextContext(3);t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind2(2,2,n.connectorForm.get("configVersion").value,n.ConnectorType.SOCKET))("ngIfElse",e)}}function ey(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-bacnet-basic-config",65),t.ɵɵpipe(1,"withReportStrategy"),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(4),n=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",n)("withReportStrategy",t.ɵɵpipeBind2(1,2,e.connectorForm.get("configVersion").value,e.ConnectorType.BACNET))}}function ty(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-bacnet-legacy-basic-config",65),t.ɵɵpipe(1,"withReportStrategy"),t.ɵɵlistener("initialized",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(4);return t.ɵɵresetView(n.basicConfigInitSubject.next())})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(4),n=t.ɵɵreference(41);t.ɵɵproperty("generalTabContent",n)("withReportStrategy",t.ɵɵpipeBind2(1,2,e.connectorForm.get("configVersion").value,e.ConnectorType.BACNET))}}function ny(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtemplate(1,ey,2,5,"tb-bacnet-basic-config",64),t.ɵɵpipe(2,"isLatestVersionConfig"),t.ɵɵtemplate(3,ty,2,5,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵreference(4),n=t.ɵɵnextContext(3);t.ɵɵadvance(),t.ɵɵproperty("ngIf",t.ɵɵpipeBind2(2,2,n.connectorForm.get("configVersion").value,n.ConnectorType.BACNET))("ngIfElse",e)}}function ay(e,n){if(1&e&&(t.ɵɵelementContainerStart(0)(1,62),t.ɵɵtemplate(2,$g,5,5,"ng-container",63)(3,Hg,5,5,"ng-container",63)(4,Jg,5,5,"ng-container",63)(5,Zg,5,5,"ng-container",63)(6,ny,5,5,"ng-container",63),t.ɵɵelementContainerEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵproperty("ngSwitch",e.initialConnector.type),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.MQTT),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.OPCUA),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.MODBUS),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.SOCKET),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",e.ConnectorType.BACNET)}}function ry(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-tab-group")(1,"mat-tab",68),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainer(3,69),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-tab",68),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"tb-json-object-edit",70),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()),2&e){t.ɵɵnextContext(2);const e=t.ɵɵreference(41);t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,6,"gateway.general")),t.ɵɵadvance(2),t.ɵɵproperty("ngTemplateOutlet",e),t.ɵɵadvance(),t.ɵɵpropertyInterpolate1("label","",t.ɵɵpipeBind1(5,8,"gateway.configuration"),"*"),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(7,10,"gateway.configuration")),t.ɵɵproperty("fillHeight",!0)}}function iy(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section",58),t.ɵɵtemplate(1,ay,7,6,"ng-container",59)(2,ry,8,12,"ng-template",null,2,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(4,"div",60)(5,"button",61),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.onSaveConnector())})),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()}if(2&e){let e;const n=t.ɵɵreference(3),a=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngIf",(null==(e=a.connectorForm.get("mode"))?null:e.value)===a.ConnectorConfigurationModes.BASIC)("ngIfElse",n),t.ɵɵadvance(4),t.ɵɵproperty("disabled",!a.connectorForm.dirty||a.connectorForm.invalid),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,4,"action.save")," ")}}function oy(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-icon",87),t.ɵɵpipe(1,"translate"),t.ɵɵtext(2," warning "),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("matTooltip",t.ɵɵpipeBind1(1,1,e.connectorForm.get("name").hasError("duplicateName")?"gateway.connector-duplicate-name":"gateway.name-required"))}}function sy(e,n){1&e&&(t.ɵɵelementStart(0,"div",72)(1,"div",83),t.ɵɵtext(2,"gateway.connectors-table-class"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",74)(4,"mat-form-field",75),t.ɵɵelement(5,"input",88),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,1,"gateway.set")))}function py(e,n){1&e&&(t.ɵɵelementStart(0,"div",72)(1,"div",83),t.ɵɵtext(2,"gateway.connectors-table-key"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",74)(4,"mat-form-field",75),t.ɵɵelement(5,"input",89),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(6,1,"gateway.set")))}function ly(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",57),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function cy(e,n){1&e&&(t.ɵɵelementStart(0,"div",72)(1,"mat-slide-toggle",90)(2,"mat-label",91),t.ɵɵpipe(3,"translate"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,2,"gateway.send-change-data-hint")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,4,"gateway.send-change-data")," "))}function dy(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",92),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("isExpansionMode",!0)("defaultValue",e.ReportStrategyDefaultValue.Connector)}}function my(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",71)(1,"div",72)(2,"div",73),t.ɵɵtext(3,"gateway.name"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",74)(5,"mat-form-field",75),t.ɵɵelement(6,"input",76),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,oy,3,3,"mat-icon",77),t.ɵɵelementEnd()()(),t.ɵɵtemplate(9,sy,7,3,"div",78)(10,py,7,3,"div",78),t.ɵɵelementStart(11,"div",79)(12,"div",80),t.ɵɵtext(13,"gateway.logs-configuration"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"div",81)(15,"mat-slide-toggle",82)(16,"mat-label"),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(19,"div",72)(20,"div",83),t.ɵɵtext(21,"gateway.remote-logging-level"),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"div",74)(23,"mat-form-field",75)(24,"mat-select",84),t.ɵɵtemplate(25,ly,2,2,"mat-option",85),t.ɵɵelementEnd()()()()(),t.ɵɵtemplate(26,cy,6,6,"div",78),t.ɵɵpipe(27,"withReportStrategy"),t.ɵɵtemplate(28,dy,1,2,"tb-report-strategy",86),t.ɵɵpipe(29,"withReportStrategy"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("formGroup",e.connectorForm),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,9,"gateway.set")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.connectorForm.get("name").hasError("required")&&e.connectorForm.get("name").touched||e.connectorForm.get("name").hasError("duplicateName")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.connectorForm.get("type").value===e.ConnectorType.CUSTOM),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.connectorForm.get("type").value===e.ConnectorType.GRPC),t.ɵɵadvance(7),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,11,"gateway.enable-remote-logging")," "),t.ɵɵadvance(8),t.ɵɵproperty("ngForOf",e.gatewayLogLevel),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.connectorForm.get("type").value===e.ConnectorType.MQTT&&!t.ɵɵpipeBind2(27,13,e.connectorForm.get("configVersion").value,e.ConnectorType.MQTT)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",t.ɵɵpipeBind2(29,16,e.connectorForm.get("configVersion").value,e.connectorForm.get("type").value))}}class uy{isErrorState(e){return e&&e.invalid}}e("ForceErrorStateMatcher",uy);class gy extends R{constructor(e,t,n,a,r,i,o,s,p,l,c){super(e),this.store=e,this.fb=t,this.translate=n,this.attributeService=a,this.dialogService=r,this.dialog=i,this.telemetryWsService=o,this.zone=s,this.utils=p,this.withReportStrategy=l,this.cd=c,this.ConnectorType=Je,this.allowBasicConfig=new Set([Je.MQTT,Je.OPCUA,Je.MODBUS,Je.SOCKET,Je.BACNET]),this.gatewayLogLevel=Object.values(We),this.displayedColumns=["enabled","key","type","syncStatus","errors","actions"],this.GatewayConnectorTypesTranslatesMap=Ye,this.ConnectorConfigurationModes=_t,this.ReportStrategyDefaultValue=Vt,this.basicConfigInitSubject=new me,this.activeData=[],this.inactiveData=[],this.sharedAttributeData=[],this.subscriptionOptions={callbacks:{onDataUpdated:()=>this.ctx.ngZone.run((()=>{this.onErrorsUpdated()})),onDataUpdateError:(e,t)=>this.ctx.ngZone.run((()=>{this.onDataUpdateError(t)}))}},this.destroy$=new me,this.attributeUpdateSubject=new me,this.initDataSources(),this.initConnectorForm(),this.observeAttributeChange()}ngAfterViewInit(){this.dataSource.sort=this.sort,this.dataSource.sortingDataAccessor=this.getSortingDataAccessor(),this.ctx.$scope.gatewayConnectors=this,this.loadConnectors(),this.loadGatewayState(),this.observeModeChange()}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),super.ngOnDestroy()}onSaveConnector(){this.saveConnector(this.getUpdatedConnectorData(this.connectorForm.value),!1)}saveConnector(e,t=!0){const n=t||this.activeConnectors.includes(this.initialConnector.name)?C.SHARED_SCOPE:C.SERVER_SCOPE;ve(this.getEntityAttributeTasks(e,n)).pipe(Ie(1)).subscribe((n=>{this.showToast(t?this.translate.instant("gateway.connector-created"):this.translate.instant("gateway.connector-updated")),this.initialConnector=e,this.updateData(!0),this.connectorForm.markAsPristine()}))}getEntityAttributeTasks(e,t){const n=[],a=[{key:e.name,value:e}],r=[],i=!this.activeConnectors.includes(e.name)&&t===C.SHARED_SCOPE||!this.inactiveConnectors.includes(e.name)&&t===C.SERVER_SCOPE,o=this.initialConnector&&this.initialConnector.name!==e.name;return o&&(r.push({key:this.initialConnector.name}),this.removeConnectorFromList(this.initialConnector.name,!0),this.removeConnectorFromList(this.initialConnector.name,!1)),i&&(t===C.SHARED_SCOPE?this.activeConnectors.push(e.name):this.inactiveConnectors.push(e.name)),(o||i)&&n.push(this.getSaveEntityAttributesTask(t)),n.push(this.attributeService.saveEntityAttributes(this.device,t,a)),r.length&&n.push(this.attributeService.deleteEntityAttributes(this.device,t,r)),n}getSaveEntityAttributesTask(e){const t=e===C.SHARED_SCOPE?"active_connectors":"inactive_connectors",n=e===C.SHARED_SCOPE?this.activeConnectors:this.inactiveConnectors;return this.attributeService.saveEntityAttributes(this.device,e,[{key:t,value:n}])}removeConnectorFromList(e,t){const n=t?this.activeConnectors:this.inactiveConnectors,a=n.indexOf(e);-1!==a&&n.splice(a,1)}getUpdatedConnectorData(e){const t={...e};return t.configuration=`${Z(t.name)}.json`,delete t.basicConfig,t.type!==Je.GRPC&&delete t.key,t.type!==Je.CUSTOM&&delete t.class,this.allowBasicConfig.has(t.type)||delete t.mode,this.withReportStrategy.transform(t.configVersion,t.type)&&J(t.reportStrategy)&&delete t.reportStrategy,this.gatewayVersion&&!t.configVersion&&(t.configVersion=this.gatewayVersion),t.ts=Date.now(),t}updateData(e=!1){this.pageLink.sortOrder.property=this.sort.active,this.pageLink.sortOrder.direction=h[this.sort.direction.toUpperCase()],this.attributeDataSource.loadAttributes(this.device,C.CLIENT_SCOPE,this.pageLink,e).subscribe((e=>{this.activeData=e.data.filter((e=>this.activeConnectors.includes(e.key))),this.combineData(),this.generateSubscription(),this.setClientData(e)})),this.inactiveConnectorsDataSource.loadAttributes(this.device,C.SHARED_SCOPE,this.pageLink,e).subscribe((e=>{this.sharedAttributeData=e.data.filter((e=>this.activeConnectors.includes(e.key))),this.combineData()})),this.serverDataSource.loadAttributes(this.device,C.SERVER_SCOPE,this.pageLink,e).subscribe((e=>{this.inactiveData=e.data.filter((e=>this.inactiveConnectors.includes(e.key))),this.combineData()}))}isConnectorSynced(e){const t=e.value;if(!t.ts||e.skipSync||!this.isGatewayActive)return!1;if(-1===this.activeData.findIndex((e=>("string"==typeof e.value?JSON.parse(e.value):e.value).name===t.name)))return!1;return-1!==this.sharedAttributeData.findIndex((e=>{const n=e.value,a=n.name===t.name,r=U(n.configurationJson,{})&&a,i=this.hasSameConfig(n.configurationJson,t.configurationJson),o=n.ts&&n.ts<=t.ts;return a&&o&&(i||r)}))}hasSameConfig(e,t){const{name:n,id:a,enableRemoteLogging:r,logLevel:i,reportStrategy:o,configVersion:s,...p}=e,{name:l,id:c,enableRemoteLogging:d,logLevel:m,reportStrategy:u,configVersion:g,...y}=t;return U(p,y)}combineData(){const e=[...this.activeData,...this.inactiveData,...this.sharedAttributeData].reduce(((e,t)=>{const n=e.findIndex((e=>e.key===t.key));return-1===n?e.push(t):t.lastUpdateTs>e[n].lastUpdateTs&&!this.isConnectorSynced(e[n])&&(e[n]={...t,skipSync:!0}),e}),[]);this.dataSource.data=e.map((e=>({...e,value:"string"==typeof e.value?JSON.parse(e.value):e.value})))}clearOutConnectorForm(){this.initialConnector=null,this.connectorForm.setValue({mode:_t.BASIC,name:"",type:Je.MQTT,sendDataOnlyOnChange:!1,enableRemoteLogging:!1,logLevel:We.INFO,key:"auto",class:"",configuration:"",configurationJson:{},basicConfig:{},configVersion:"",reportStrategy:[{value:{},disabled:!0}]},{emitEvent:!1}),this.connectorForm.markAsPristine()}selectConnector(e,t){e&&e.stopPropagation();const n=t.value;n?.name!==this.initialConnector?.name&&this.confirmConnectorChange().subscribe((e=>{e&&this.setFormValue(n)}))}isSameConnector(e){if(!this.initialConnector)return!1;const t=e.value;return this.initialConnector.name===t.name}showToast(e){this.store.dispatch({type:"[Notification] Show",notification:{message:e,type:"success",duration:1e3,verticalPosition:"top",horizontalPosition:"left",target:"dashboardRoot",forceDismiss:!0}})}returnType(e){const t=e.value;return this.GatewayConnectorTypesTranslatesMap.get(t.type)}deleteConnector(e,t){t?.stopPropagation();const n=`Delete connector "${e.key}"?`;this.dialogService.confirm(n,"All connector data will be deleted.","Cancel","Delete").pipe(Ie(1),Fe((t=>{if(!t)return;const n=[],a=this.activeConnectors.includes(e.value?.name)?C.SHARED_SCOPE:C.SERVER_SCOPE;return n.push(this.attributeService.deleteEntityAttributes(this.device,a,[e])),this.removeConnectorFromList(e.key,!0),this.removeConnectorFromList(e.key,!1),n.push(this.getSaveEntityAttributesTask(a)),ve(n)}))).subscribe((()=>{this.initialConnector&&this.initialConnector.name!==e.key||(this.clearOutConnectorForm(),this.cd.detectChanges()),this.updateData(!0)}))}connectorLogs(e,t){t&&t.stopPropagation();const n=G(this.ctx.stateController.getStateParams());n.connector_logs=e,n.targetEntityParamName="connector_logs",this.ctx.stateController.openState("connector_logs",n)}connectorRpc(e,t){t&&t.stopPropagation();const n=G(this.ctx.stateController.getStateParams());n.connector_rpc=e,n.targetEntityParamName="connector_rpc",this.ctx.stateController.openState("connector_rpc",n)}onEnableConnector(e){e.value.ts=(new Date).getTime(),this.updateActiveConnectorKeys(e.key),this.attributeUpdateSubject.next(e)}getErrorsCount(e){const t=e.key,n=this.subscription&&this.subscription.data.find((e=>e&&e.dataKey.name===`${t}_ERRORS_COUNT`));return n&&this.activeConnectors.includes(t)?n.data[0][1]||0:"Inactive"}onAddConnector(e){e?.stopPropagation(),this.confirmConnectorChange().pipe(Ie(1),xe(Boolean),Fe((()=>this.openAddConnectorDialog())),xe(Boolean)).subscribe((e=>this.addConnector(e)))}addConnector(e){e.configurationJson||(e.configurationJson={}),this.gatewayVersion&&!e.configVersion&&(e.configVersion=this.gatewayVersion),e.basicConfig=e.configurationJson,this.initialConnector=e;const t=this.connectorForm.get("type").value;this.setInitialConnectorValues(e),this.saveConnector(this.getUpdatedConnectorData(e)),t!==e.type&&this.allowBasicConfig.has(e.type)?this.basicConfigInitSubject.pipe(Ie(1)).subscribe((()=>{this.patchConnectorBasicConfig(e.basicConfig)})):this.patchConnectorBasicConfig(e.basicConfig)}setInitialConnectorValues(e){const{basicConfig:t,mode:n,enableRemoteLogging:a,...r}=e;this.toggleReportStrategy(e),this.connectorForm.get("mode").setValue(this.allowBasicConfig.has(e.type)?e.mode??_t.BASIC:null,{emitEvent:!1}),this.connectorForm.get("enableRemoteLogging").setValue(a,{emitEvent:!1}),this.connectorForm.patchValue(r,{emitEvent:!1})}openAddConnectorDialog(){return this.ctx.ngZone.run((()=>this.dialog.open(ds,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{dataSourceData:this.dataSource.data,gatewayVersion:this.gatewayVersion}}).afterClosed()))}uniqNameRequired(){return e=>{const t=e.value?.trim().toLowerCase(),n=this.dataSource.data.some((e=>e.value.name.toLowerCase()===t)),a=this.initialConnector?.name.toLowerCase()===t;return n&&!a?{duplicateName:{valid:!1}}:null}}initDataSources(){const e={property:"key",direction:h.ASC};this.pageLink=new f(1e3,0,null,e),this.attributeDataSource=new ra(this.attributeService,this.telemetryWsService,this.zone,this.translate),this.inactiveConnectorsDataSource=new ra(this.attributeService,this.telemetryWsService,this.zone,this.translate),this.serverDataSource=new ra(this.attributeService,this.telemetryWsService,this.zone,this.translate),this.dataSource=new g([])}initConnectorForm(){this.connectorForm=this.fb.group({mode:[_t.BASIC],name:["",[ne.required,this.uniqNameRequired(),ne.pattern($e)]],type:["",[ne.required]],enableRemoteLogging:[!1],logLevel:["",[ne.required]],sendDataOnlyOnChange:[!1],key:["auto"],class:[""],configuration:[""],configurationJson:[{},[ne.required]],basicConfig:[{}],configVersion:[""],reportStrategy:[{value:{},disabled:!0}]})}getSortingDataAccessor(){return(e,t)=>{switch(t){case"syncStatus":return this.isConnectorSynced(e)?1:0;case"enabled":return this.activeConnectors.includes(e.key)?1:0;case"errors":const n=this.getErrorsCount(e);return"string"==typeof n?this.sort.direction.toUpperCase()===h.DESC?-1:1/0:n;default:return e[t]||e.value[t]}}}loadConnectors(){this.device&&this.device.id!==w&&ve([this.attributeService.getEntityAttributes(this.device,C.SHARED_SCOPE,["active_connectors"]),this.attributeService.getEntityAttributes(this.device,C.SERVER_SCOPE,["inactive_connectors"]),this.attributeService.getEntityAttributes(this.device,C.CLIENT_SCOPE,["Version"])]).pipe(be(this.destroy$)).subscribe((e=>{this.activeConnectors=this.parseConnectors(e[0]),this.inactiveConnectors=this.parseConnectors(e[1]),this.gatewayVersion=e[2][0]?.value,this.updateData(!0)}))}loadGatewayState(){this.attributeService.getEntityAttributes(this.device,C.SERVER_SCOPE).pipe(be(this.destroy$)).subscribe((e=>{const t=e.find((e=>"active"===e.key)).value,n=e.find((e=>"lastDisconnectTime"===e.key))?.value,a=e.find((e=>"lastConnectTime"===e.key))?.value;this.isGatewayActive=this.getGatewayStatus(t,a,n)}))}parseConnectors(e){const t=e?.[0]?.value||[];return Q(t)?JSON.parse(t):t}observeModeChange(){this.connectorForm.get("mode").valueChanges.pipe(be(this.destroy$)).subscribe((e=>{e===_t.BASIC&&this.patchConnectorBasicConfig(this.connectorForm.get("configurationJson").value)}))}observeAttributeChange(){this.attributeUpdateSubject.pipe(ke(300),we((e=>this.executeAttributeUpdates(e))),be(this.destroy$)).subscribe()}updateActiveConnectorKeys(e){if(this.activeConnectors.includes(e)){const t=this.activeConnectors.indexOf(e);-1!==t&&this.activeConnectors.splice(t,1),this.inactiveConnectors.push(e)}else{const t=this.inactiveConnectors.indexOf(e);-1!==t&&this.inactiveConnectors.splice(t,1),this.activeConnectors.push(e)}}executeAttributeUpdates(e){ve(this.getAttributeExecutionTasks(e)).pipe(Ie(1),we((()=>this.updateData(!0))),be(this.destroy$)).subscribe()}getAttributeExecutionTasks(e){const t=this.activeConnectors.includes(e.key),n=t?C.SERVER_SCOPE:C.SHARED_SCOPE,a=t?C.SHARED_SCOPE:C.SERVER_SCOPE;return[this.attributeService.saveEntityAttributes(this.device,C.SHARED_SCOPE,[{key:"active_connectors",value:this.activeConnectors}]),this.attributeService.saveEntityAttributes(this.device,C.SERVER_SCOPE,[{key:"inactive_connectors",value:this.inactiveConnectors}]),this.attributeService.deleteEntityAttributes(this.device,n,[e]),this.attributeService.saveEntityAttributes(this.device,a,[e])]}onDataUpdateError(e){const t=this.utils.parseException(e);let n=t.name;t.message&&(n+=": "+t.message),console.error(n)}onErrorsUpdated(){this.cd.detectChanges()}onDataUpdated(){const e=this.ctx.defaultSubscription.data,t=e.find((e=>"active"===e.dataKey.name)).data[0][1],n=e.find((e=>"lastDisconnectTime"===e.dataKey.name)).data[0][1],a=e.find((e=>"lastConnectTime"===e.dataKey.name)).data[0][1];this.isGatewayActive=this.getGatewayStatus(t,a,n),this.cd.detectChanges()}getGatewayStatus(e,t,n){return!!e&&(!n||t>n)}generateSubscription(){if(this.subscription&&this.subscription.unsubscribe(),this.device){const e=[{type:S.entity,entityType:E.DEVICE,entityId:this.device.id,entityName:"Gateway",timeseries:[]}];this.dataSource.data.forEach((t=>{e[0].timeseries.push({name:`${t.key}_ERRORS_COUNT`,label:`${t.key}_ERRORS_COUNT`})})),this.ctx.subscriptionApi.createSubscriptionFromInfo(T.latest,e,this.subscriptionOptions,!1,!0).subscribe((e=>{this.subscription=e}))}}createBasicConfigWatcher(){this.basicConfigSub&&this.basicConfigSub.unsubscribe(),this.basicConfigSub=this.connectorForm.get("basicConfig").valueChanges.pipe(xe((()=>!!this.initialConnector)),be(this.destroy$)).subscribe((e=>{const t=this.connectorForm.get("configurationJson"),n=this.connectorForm.get("type").value,a=this.connectorForm.get("mode").value;if(!U(e,t?.value)&&this.allowBasicConfig.has(n)&&a===_t.BASIC){const n={...t.value,...e};this.connectorForm.get("configurationJson").patchValue(n,{emitEvent:!1})}}))}createJsonConfigWatcher(){this.jsonConfigSub&&this.jsonConfigSub.unsubscribe(),this.jsonConfigSub=this.connectorForm.get("configurationJson").valueChanges.pipe(be(this.destroy$)).subscribe((e=>{const t=this.connectorForm.get("basicConfig"),n=this.connectorForm.get("type").value,a=this.connectorForm.get("mode").value;!U(e,t?.value)&&this.allowBasicConfig.has(n)&&a===_t.ADVANCED&&this.connectorForm.get("basicConfig").patchValue(e,{emitEvent:!1})}))}confirmConnectorChange(){return this.initialConnector&&this.connectorForm.dirty?this.dialogService.confirm(this.translate.instant("gateway.change-connector-title"),this.translate.instant("gateway.change-connector-text"),this.translate.instant("action.no"),this.translate.instant("action.yes"),!0):he(!0)}setFormValue(e){this.connectorForm.disabled&&this.connectorForm.enable();const t=zr.getConfig({configuration:"",key:"auto",configurationJson:{},...e},this.gatewayVersion);this.gatewayVersion&&!t.configVersion&&(t.configVersion=this.gatewayVersion),t.basicConfig=t.configurationJson,this.initialConnector=t,this.updateConnector(t)}updateConnector(e){this.jsonConfigSub?.unsubscribe(),this.allowBasicConfig.has(e.type)?this.updateBasicConfigConnector(e):(this.setInitialConnectorValues(e),this.connectorForm.markAsPristine(),this.createJsonConfigWatcher())}updateBasicConfigConnector(e){this.basicConfigSub?.unsubscribe();const t=this.connectorForm.get("type").value;this.setInitialConnectorValues(e),t!==e.type&&this.allowBasicConfig.has(e.type)&&e.mode!==_t.ADVANCED?this.basicConfigInitSubject.asObservable().pipe(Ie(1)).subscribe((()=>{this.patchConnectorBasicConfig(e.basicConfig)})):this.patchConnectorBasicConfig(e.basicConfig)}patchConnectorBasicConfig(e){this.connectorForm.get("basicConfig").patchValue(e,{emitEvent:!1}),this.connectorForm.markAsPristine(),this.createBasicConfigWatcher(),this.createJsonConfigWatcher()}toggleReportStrategy(e){const t=this.connectorForm.get("reportStrategy"),n=this.connectorForm.get("sendDataOnlyOnChange");this.connectorForm.get("reportStrategy").reset(e.reportStrategy,{emitEvent:!1}),this.withReportStrategy.transform(e.configVersion,e.type)?(t.enable({emitEvent:!1}),n.disable({emitEvent:!1})):(t.disable({emitEvent:!1}),e.type===Je.MQTT&&n.enable({emitEvent:!1}))}setClientData(e){if(this.initialConnector){const t=e.data.find((e=>e.key===this.initialConnector.name));t&&(t.value="string"==typeof t.value?JSON.parse(t.value):t.value,this.isConnectorSynced(t)&&t.value.configurationJson&&this.setFormValue({...t.value,mode:this.connectorForm.get("mode").value??t.value.mode}))}}static{this.ɵfac=function(e){return new(e||gy)(t.ɵɵdirectiveInject(ce.Store),t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(Ne.TranslateService),t.ɵɵdirectiveInject(A.AttributeService),t.ɵɵdirectiveInject(A.DialogService),t.ɵɵdirectiveInject(pe.MatDialog),t.ɵɵdirectiveInject(A.TelemetryWebsocketService),t.ɵɵdirectiveInject(t.NgZone),t.ɵɵdirectiveInject(A.UtilsService),t.ɵɵdirectiveInject(Jr),t.ɵɵdirectiveInject(t.ChangeDetectorRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:gy,selectors:[["tb-gateway-connector"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(u,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.sort=e.first)}},inputs:{ctx:"ctx",device:"device"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:Ue,useClass:uy},Jr]),t.ɵɵInheritDefinitionFeature,t.ɵɵStandaloneFeature],decls:42,vars:21,consts:[["generalTabContent",""],["cellActionsMenu","matMenu"],["defaultConfig",""],["legacy",""],[1,"connector-container","tb-form-panel","no-border"],[1,"table-section","tb-form-panel","no-padding","section-container","flex"],[1,"mat-mdc-table-toolbar","justify-between"],["mat-icon-button","","matTooltipPosition","above",3,"disabled","matTooltip","click",4,"ngIf"],[1,"table-container"],["class","mat-headline-5 tb-absolute-fill tb-add-new items-center justify-center",4,"ngIf"],["mat-table","","matSort","","matSortDisableClear","",3,"dataSource","matSortActive","matSortDirection"],["matColumnDef","enabled","sticky",""],["style","width: 60px;min-width: 60px;",4,"matHeaderCellDef"],[4,"matCellDef"],["matColumnDef","key"],["mat-sort-header","","style","width: 40%",4,"matHeaderCellDef"],["matColumnDef","type"],["mat-sort-header","","style","width: 30%",4,"matHeaderCellDef"],["style","text-transform: uppercase",4,"matCellDef"],["matColumnDef","syncStatus"],["matColumnDef","errors"],["matColumnDef","actions","stickyEnd",""],[4,"matHeaderCellDef"],["class","mat-row-select",4,"matHeaderRowDef","matHeaderRowDefSticky"],["class","mat-row-select",3,"class","click",4,"matRowDef","matRowDefColumns"],[1,"tb-form-panel","section-container","flex",3,"formGroup"],[1,"tb-form-panel-title","tb-flex","no-flex","space-between","align-center"],[1,"tb-form-panel-title"],["class","version-placeholder",4,"ngIf"],["formControlName","mode","appearance","fill",4,"ngIf"],["translate","",1,"no-data-found","items-center","justify-center"],["class","tb-form-panel section-container no-border no-padding tb-flex space-between",4,"ngIf"],["mat-icon-button","","matTooltipPosition","above",3,"click","disabled","matTooltip"],[1,"mat-headline-5","tb-absolute-fill","tb-add-new","items-center","justify-center"],["mat-button","",1,"connector",3,"click"],[1,"tb-mat-96"],[2,"width","60px","min-width","60px"],[3,"click","checked"],["mat-sort-header","",2,"width","40%"],["mat-sort-header","",2,"width","30%"],[2,"text-transform","uppercase"],[1,"status"],["matTooltipPosition","above",1,"dot",3,"click","matTooltip"],[1,"gt-md:!hidden",2,"width","48px","min-width","48px","max-width","48px"],[1,"lt-lg:!hidden"],[1,"lt-md:!hidden","flex-row","justify-end"],["mat-icon-button","","matTooltip","RPC","matTooltipPosition","above",3,"click","disabled"],["mat-icon-button","","matTooltip","Logs","matTooltipPosition","above",3,"click"],["mat-icon-button","","matTooltip","Delete connector","matTooltipPosition","above",3,"click"],[1,"gt-sm:!hidden"],["mat-icon-button","",3,"click","matMenuTriggerFor"],[1,"material-icons"],["xPosition","before"],[1,"mat-row-select"],[1,"mat-row-select",3,"click"],[1,"version-placeholder"],["formControlName","mode","appearance","fill"],[3,"value"],[1,"tb-form-panel","section-container","no-border","no-padding","tb-flex","space-between"],[4,"ngIf","ngIfElse"],[1,"flex","justify-end"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],[3,"ngSwitch"],[4,"ngSwitchCase"],["formControlName","basicConfig",3,"generalTabContent","withReportStrategy","initialized",4,"ngIf","ngIfElse"],["formControlName","basicConfig",3,"initialized","generalTabContent","withReportStrategy"],["formControlName","basicConfig",3,"generalTabContent","initialized",4,"ngIf","ngIfElse"],["formControlName","basicConfig",3,"initialized","generalTabContent"],[3,"label"],[3,"ngTemplateOutlet"],["jsonRequired","","formControlName","configurationJson",1,"configuration-json",3,"fillHeight","label"],[1,"tb-form-panel","no-border","no-padding","padding-top","section-container","flex",3,"formGroup"],[1,"tb-form-row","column-xs"],["translate","",1,"fixed-title-width","tb-required"],[1,"tb-flex","no-gap"],["appearance","outline","subscriptSizing","dynamic",1,"tb-flex","no-gap"],["matInput","","autocomplete","off","name","value","formControlName","name",3,"placeholder"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip","class","tb-error",3,"matTooltip",4,"ngIf"],["class","tb-form-row column-xs",4,"ngIf"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row"],["formControlName","enableRemoteLogging",1,"mat-slide"],["translate","",1,"fixed-title-width"],["formControlName","logLevel"],[3,"value",4,"ngFor","ngForOf"],["class","stroked tb-form-panel","formControlName","reportStrategy",3,"isExpansionMode","defaultValue",4,"ngIf"],["matSuffix","","matTooltipPosition","above","matTooltipClass","tb-error-tooltip",1,"tb-error",3,"matTooltip"],["matInput","","name","value","formControlName","class",3,"placeholder"],["matInput","","name","value","formControlName","key",3,"placeholder"],["formControlName","sendDataOnlyOnChange",1,"mat-slide"],[3,"tb-hint-tooltip-icon"],["formControlName","reportStrategy",1,"stroked","tb-form-panel",3,"isExpansionMode","defaultValue"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",4)(1,"section",5)(2,"mat-toolbar",6)(3,"h2"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(6,Eg,5,6,"button",7),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"div",8),t.ɵɵtemplate(8,Tg,7,3,"section",9),t.ɵɵelementStart(9,"table",10),t.ɵɵelementContainerStart(10,11),t.ɵɵtemplate(11,Ig,3,3,"mat-header-cell",12)(12,kg,2,1,"mat-cell",13),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(13,14),t.ɵɵtemplate(14,Mg,3,3,"mat-header-cell",15)(15,Pg,2,1,"mat-cell",13),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(16,16),t.ɵɵtemplate(17,Fg,3,3,"mat-header-cell",17)(18,Og,2,1,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(19,19),t.ɵɵtemplate(20,qg,3,3,"mat-header-cell",17)(21,Bg,3,3,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(22,20),t.ɵɵtemplate(23,Rg,3,3,"mat-header-cell",17)(24,Ng,2,6,"mat-cell",18),t.ɵɵelementContainerEnd(),t.ɵɵelementContainerStart(25,21),t.ɵɵtemplate(26,_g,5,6,"mat-header-cell",22)(27,Dg,26,6,"mat-cell",13),t.ɵɵelementContainerEnd(),t.ɵɵtemplate(28,Vg,1,0,"mat-header-row",23)(29,Gg,1,4,"mat-row",24),t.ɵɵelementEnd()()(),t.ɵɵelementStart(30,"section",25)(31,"div",26)(32,"div",27),t.ɵɵtext(33),t.ɵɵpipe(34,"translate"),t.ɵɵtemplate(35,Ag,2,1,"span",28),t.ɵɵelementEnd(),t.ɵɵtemplate(36,jg,7,8,"tb-toggle-select",29),t.ɵɵelementEnd(),t.ɵɵelementStart(37,"span",30),t.ɵɵtext(38," gateway.select-connector "),t.ɵɵelementEnd(),t.ɵɵtemplate(39,iy,8,6,"section",31),t.ɵɵelementEnd()(),t.ɵɵtemplate(40,my,30,19,"ng-template",null,0,t.ɵɵtemplateRefExtractor)),2&e&&(t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,17,"gateway.connectors")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",null==n.dataSource||null==n.dataSource.data?null:n.dataSource.data.length),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!(null!=n.dataSource&&(null!=n.dataSource.data&&n.dataSource.data.length))),t.ɵɵadvance(),t.ɵɵproperty("dataSource",n.dataSource)("matSortActive",n.pageLink.sortOrder.property)("matSortDirection",n.pageLink.sortDirection()),t.ɵɵadvance(19),t.ɵɵproperty("matHeaderRowDef",n.displayedColumns)("matHeaderRowDefSticky",!0),t.ɵɵadvance(),t.ɵɵproperty("matRowDefColumns",n.displayedColumns),t.ɵɵadvance(),t.ɵɵproperty("formGroup",n.connectorForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate2(" ",null!=n.initialConnector&&n.initialConnector.type?n.GatewayConnectorTypesTranslatesMap.get(n.initialConnector.type):""," ",t.ɵɵpipeBind1(34,19,"gateway.configuration")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.connectorForm.get("configVersion").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.initialConnector&&n.allowBasicConfig.has(n.initialConnector.type)),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",n.initialConnector),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.initialConnector))},dependencies:t.ɵɵgetComponentDepsFactory(gy,[V,b,Jr,ts,Zl,ec,Ul,Ll,mm,um,wu,Cu,ma,vg,bg]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:block;overflow-x:auto;padding:0}[_nghost-%COMP%] .version-placeholder[_ngcontent-%COMP%]{color:gray;font-size:12px}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%]{height:100%;width:100%;flex-direction:row}@media screen and (max-width: 1279px){[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%]{flex-direction:column}}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] > section[_ngcontent-%COMP%]:not(.table-section){max-width:unset}@media screen and (min-width: 1280px){[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] > section[_ngcontent-%COMP%]:not(.table-section){max-width:50%}}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] .table-section[_ngcontent-%COMP%]{min-height:35vh;overflow:hidden}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] .table-section[_ngcontent-%COMP%] .table-container[_ngcontent-%COMP%]{overflow:auto}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] .flex[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] .input-container[_ngcontent-%COMP%]{height:auto}[_nghost-%COMP%] .connector-container[_ngcontent-%COMP%] .section-container[_ngcontent-%COMP%]{background-color:#fff}[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{background:transparent;color:#000000de!important}[_nghost-%COMP%] .mat-mdc-slide-toggle[_ngcontent-%COMP%]{margin:0 8px}[_nghost-%COMP%] .status[_ngcontent-%COMP%]{text-align:center;border-radius:16px;font-weight:500;width:fit-content;padding:5px 15px}[_nghost-%COMP%] .status-sync[_ngcontent-%COMP%]{background:#1980380f;color:#198038}[_nghost-%COMP%] .status-unsync[_ngcontent-%COMP%]{background:#cb25300f;color:#cb2530}[_nghost-%COMP%] mat-row[_ngcontent-%COMP%]{cursor:pointer}[_nghost-%COMP%] .dot[_ngcontent-%COMP%]{height:12px;width:12px;background-color:#bbb;border-radius:50%;display:inline-block}[_nghost-%COMP%] .hasErrors[_ngcontent-%COMP%]{background-color:#cb2530}[_nghost-%COMP%] .noErrors[_ngcontent-%COMP%]{background-color:#198038}[_nghost-%COMP%] .connector-container .mat-mdc-tab-group, [_nghost-%COMP%] .connector-container .mat-mdc-tab-body-wrapper{height:100%}[_nghost-%COMP%] .connector-container .mat-mdc-tab-body.mat-mdc-tab-body-active{position:absolute}[_nghost-%COMP%] .connector-container .tb-form-row .fixed-title-width{min-width:120px;width:30%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}[_nghost-%COMP%] .connector-container .tb-add-new{display:flex;z-index:999;pointer-events:none;background-color:#fff}[_nghost-%COMP%] .connector-container .tb-add-new button.connector{height:auto;padding-right:12px;font-size:20px;border-style:dashed;border-width:2px;border-radius:8px;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;color:#00000061}@media screen and (min-width: 960px){[_nghost-%COMP%] .configuration-json .ace_tooltip{transform:translate(-250px,-120px)}}']})}}e("GatewayConnectorComponent",gy);class yy{constructor(e){this.deviceService=e}download(e){e&&e.stopPropagation(),this.deviceId&&this.deviceService.downloadGatewayDockerComposeFile(this.deviceId).subscribe((()=>{}))}static{this.ɵfac=function(e){return new(e||yy)(t.ɵɵdirectiveInject(A.DeviceService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:yy,selectors:[["tb-gateway-command"]],inputs:{deviceId:"deviceId"},standalone:!0,features:[t.ɵɵStandaloneFeature],decls:32,vars:9,consts:[["mat-dialog-content","",1,"tb-form-panel","no-border",2,"padding","16px 16px 8px"],[1,"tb-no-data-text"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","no-border","no-padding","space-between"],["translate","",1,"tb-no-data-text","tb-commands-hint"],["mat-stroked-button","","color","primary","href","https://docs.docker.com/compose/install/","target","_blank"],["mat-stroked-button","","color","primary",3,"click"],["usePlainMarkdown","","containerClass","start-code","data","\n ```bash\n docker compose up\n {:copy-code}\n ```\n "]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",2)(5,"div",3),t.ɵɵtext(6,"device.connectivity.install-necessary-client-tools"),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"div",4)(8,"div",5),t.ɵɵtext(9,"gateway.install-docker-compose"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"a",6)(11,"mat-icon"),t.ɵɵtext(12,"description"),t.ɵɵelementEnd(),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(15,"div",2)(16,"div",3),t.ɵɵtext(17,"gateway.download-configuration-file"),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"div",4)(19,"div",5),t.ɵɵtext(20,"gateway.download-docker-compose"),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"button",7),t.ɵɵlistener("click",(function(e){return n.download(e)})),t.ɵɵelementStart(22,"mat-icon"),t.ɵɵtext(23,"download"),t.ɵɵelementEnd(),t.ɵɵtext(24),t.ɵɵpipe(25,"translate"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(26,"div",2)(27,"div",3),t.ɵɵtext(28,"gateway.launch-gateway"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"div",5),t.ɵɵtext(30,"gateway.launch-docker-compose"),t.ɵɵelementEnd(),t.ɵɵelement(31,"tb-markdown",8),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"gateway.docker-label")),t.ɵɵadvance(11),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(14,5,"common.documentation")," "),t.ɵɵadvance(11),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(25,7,"action.download")," "))},dependencies:t.ɵɵgetComponentDepsFactory(yy,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%] .tb-commands-hint[_ngcontent-%COMP%]{color:inherit;font-weight:400;flex:1}[_nghost-%COMP%] .tb-markdown-view .start-code .code-wrapper{padding:0}[_nghost-%COMP%] .tb-markdown-view .start-code .code-wrapper pre[class*=language-]{margin:0;background:#f3f6fa;border-color:#305680;padding-right:38px;overflow:scroll;padding-bottom:4px;min-height:42px;scrollbar-width:thin}[_nghost-%COMP%] .tb-markdown-view .start-code .code-wrapper pre[class*=language-]::-webkit-scrollbar{width:4px;height:4px}[_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn{right:-2px}[_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn p{color:#305680}[_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn p, [_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn div{background-color:#f3f6fa}[_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn div img{display:none}[_nghost-%COMP%] .tb-markdown-view .start-code button.clipboard-btn div:after{content:"";position:initial;display:block;width:18px;height:18px;background:#305680;mask-image:url(/assets/copy-code-icon.svg);-webkit-mask-image:url(/assets/copy-code-icon.svg);mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat}']})}}var hy,fy,vy;e("DeviceGatewayCommandComponent",yy),e("GatewayBasicConfigTab",hy),function(e){e[e.general=0]="general",e[e.logs=1]="logs",e[e.storage=2]="storage",e[e.grpc=3]="grpc",e[e.statistics=4]="statistics",e[e.other=5]="other"}(hy||e("GatewayBasicConfigTab",hy={})),e("StorageTypes",fy),function(e){e.MEMORY="memory",e.FILE="file",e.SQLITE="sqlite"}(fy||e("StorageTypes",fy={})),e("LocalLogsConfigs",vy),function(e){e.service="service",e.connector="connector",e.converter="converter",e.tb_connection="tb_connection",e.storage="storage",e.extension="extension"}(vy||e("LocalLogsConfigs",vy={}));const by=e("LocalLogsConfigTranslateMap",new Map([[vy.service,"Service"],[vy.connector,"Connector"],[vy.converter,"Converter"],[vy.tb_connection,"TB Connection"],[vy.storage,"Storage"],[vy.extension,"Extension"]])),xy=e("StorageTypesTranslationMap",new Map([[fy.MEMORY,"gateway.storage-types.memory-storage"],[fy.FILE,"gateway.storage-types.file-storage"],[fy.SQLITE,"gateway.storage-types.sqlite"]]));var wy;e("LogSavingPeriod",wy),function(e){e.days="D",e.hours="H",e.minutes="M",e.seconds="S"}(wy||e("LogSavingPeriod",wy={}));const Cy=e("LogSavingPeriodTranslations",new Map([[wy.days,"gateway.logs.days"],[wy.hours,"gateway.logs.hours"],[wy.minutes,"gateway.logs.minutes"],[wy.seconds,"gateway.logs.seconds"]]));var Sy;e("SecurityTypes",Sy),function(e){e.ACCESS_TOKEN="accessToken",e.USERNAME_PASSWORD="usernamePassword",e.TLS_ACCESS_TOKEN="tlsAccessToken",e.TLS_PRIVATE_KEY="tlsPrivateKey"}(Sy||e("SecurityTypes",Sy={}));const Ey=e("SecurityTypesTranslationsMap",new Map([[Sy.ACCESS_TOKEN,"gateway.security-types.access-token"],[Sy.USERNAME_PASSWORD,"gateway.security-types.username-password"],[Sy.TLS_ACCESS_TOKEN,"gateway.security-types.tls-access-token"]])),Ty=e("numberInputPattern",new RegExp(/^\d{1,15}$/)),Iy=e("logsHandlerClass","thingsboard_gateway.tb_utility.tb_rotating_file_handler.TimedRotatingFileHandler"),ky=e("logsLegacyHandlerClass","thingsboard_gateway.tb_utility.tb_handler.TimedRotatingFileHandler");function My(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",10),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,a.storageTypesTranslationMap.get(e))," ")}}function Py(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-read-record-count-required")," "))}function Fy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-read-record-count-min")," "))}function Oy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-read-record-count-pattern")," "))}function qy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-required")," "))}function By(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-min")," "))}function Ry(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-pattern")," "))}function Ny(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",11)(1,"mat-form-field",12)(2,"mat-label",13),t.ɵɵtext(3,"gateway.storage-read-record-count"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",14),t.ɵɵtemplate(5,Py,3,3,"mat-error",15)(6,Fy,3,3,"mat-error",15)(7,Oy,3,3,"mat-error",15),t.ɵɵelementStart(8,"mat-icon",16),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",12)(12,"mat-label",13),t.ɵɵtext(13,"gateway.storage-max-records"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",17),t.ɵɵtemplate(15,qy,3,3,"mat-error",15)(16,By,3,3,"mat-error",15)(17,Ry,3,3,"mat-error",15),t.ɵɵelementStart(18,"mat-icon",16),t.ɵɵpipe(19,"translate"),t.ɵɵtext(20,"info_outlined "),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.storageFormGroup.get("read_records_count").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("read_records_count").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("read_records_count").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(9,8,"gateway.hints.read-record-count")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_records_count").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_records_count").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_records_count").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(19,10,"gateway.hints.max-records-count"))}}function _y(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-data-folder-path-required")," "))}function Dy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-files-required")," "))}function Vy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-files-min")," "))}function Gy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-files-pattern")," "))}function Ay(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-read-record-count-required")," "))}function jy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-read-record-count-min")," "))}function Ly(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-read-record-count-pattern")," "))}function Uy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-required")," "))}function $y(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-min")," "))}function zy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-max-records-pattern")," "))}function Ky(e,n){if(1&e&&(t.ɵɵelementStart(0,"section")(1,"div",11)(2,"mat-form-field",12)(3,"mat-label",13),t.ɵɵtext(4,"gateway.storage-data-folder-path"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",18),t.ɵɵtemplate(6,_y,3,3,"mat-error",15),t.ɵɵelementStart(7,"mat-icon",19),t.ɵɵpipe(8,"translate"),t.ɵɵtext(9,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",12)(11,"mat-label",13),t.ɵɵtext(12,"gateway.storage-max-files"),t.ɵɵelementEnd(),t.ɵɵelement(13,"input",20),t.ɵɵtemplate(14,Dy,3,3,"mat-error",15)(15,Vy,3,3,"mat-error",15)(16,Gy,3,3,"mat-error",15),t.ɵɵelementStart(17,"mat-icon",16),t.ɵɵpipe(18,"translate"),t.ɵɵtext(19,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(20,"div",11)(21,"mat-form-field",12)(22,"mat-label",13),t.ɵɵtext(23,"gateway.storage-max-read-record-count"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",21),t.ɵɵtemplate(25,Ay,3,3,"mat-error",15)(26,jy,3,3,"mat-error",15)(27,Ly,3,3,"mat-error",15),t.ɵɵelementStart(28,"mat-icon",16),t.ɵɵpipe(29,"translate"),t.ɵɵtext(30,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(31,"mat-form-field",12)(32,"mat-label",13),t.ɵɵtext(33,"gateway.storage-max-file-records"),t.ɵɵelementEnd(),t.ɵɵelement(34,"input",22),t.ɵɵtemplate(35,Uy,3,3,"mat-error",15)(36,$y,3,3,"mat-error",15)(37,zy,3,3,"mat-error",15),t.ɵɵelementStart(38,"mat-icon",16),t.ɵɵpipe(39,"translate"),t.ɵɵtext(40,"info_outlined "),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.storageFormGroup.get("data_folder_path").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,14,"gateway.hints.data-folder")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_file_count").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_file_count").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_file_count").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,16,"gateway.hints.max-file-count")),t.ɵɵadvance(8),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_read_records_count").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_read_records_count").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_read_records_count").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(29,18,"gateway.hints.max-read-count")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_records_per_file").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_records_per_file").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("max_records_per_file").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(39,20,"gateway.hints.max-records"))}}function Hy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.storage-path-required")," "))}function Wy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-check-in-hours-required")," "))}function Qy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-check-in-hours-min")," "))}function Jy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-check-in-hours-pattern")," "))}function Yy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-in-days-required")," "))}function Xy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-in-days-min")," "))}function Zy(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.messages-ttl-in-days-pattern")," "))}function eh(e,n){if(1&e&&(t.ɵɵelementStart(0,"section")(1,"div",11)(2,"mat-form-field",12)(3,"mat-label",13),t.ɵɵtext(4,"gateway.storage-path"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",23),t.ɵɵtemplate(6,Hy,3,3,"mat-error",15),t.ɵɵelementStart(7,"mat-icon",16),t.ɵɵpipe(8,"translate"),t.ɵɵtext(9,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",12)(11,"mat-label",13),t.ɵɵtext(12,"gateway.messages-ttl-check-in-hours"),t.ɵɵelementEnd(),t.ɵɵelement(13,"input",24),t.ɵɵtemplate(14,Wy,3,3,"mat-error",15)(15,Qy,3,3,"mat-error",15)(16,Jy,3,3,"mat-error",15),t.ɵɵelementStart(17,"mat-icon",16),t.ɵɵpipe(18,"translate"),t.ɵɵtext(19,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(20,"mat-form-field",25)(21,"mat-label",13),t.ɵɵtext(22,"gateway.messages-ttl-in-days"),t.ɵɵelementEnd(),t.ɵɵelement(23,"input",26),t.ɵɵtemplate(24,Yy,3,3,"mat-error",15)(25,Xy,3,3,"mat-error",15)(26,Zy,3,3,"mat-error",15),t.ɵɵelementStart(27,"mat-icon",16),t.ɵɵpipe(28,"translate"),t.ɵɵtext(29,"info_outlined "),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.storageFormGroup.get("data_file_path").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,10,"gateway.hints.data-folder")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.storageFormGroup.get("messages_ttl_check_in_hours").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("messages_ttl_check_in_hours").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("messages_ttl_check_in_hours").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,12,"gateway.hints.ttl-check-hour")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.storageFormGroup.get("messages_ttl_in_days").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("messages_ttl_in_days").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.storageFormGroup.get("messages_ttl_in_days").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(28,14,"gateway.hints.ttl-messages-day"))}}class th{constructor(e){this.fb=e,this.initialized=new r,this.StorageTypes=fy,this.storageTypes=Object.values(fy),this.storageTypesTranslationMap=xy,this.onChange=()=>{},this.storageFormGroup=this.initStorageFormGroup(),this.observeStorageTypeChanges(),this.storageFormGroup.valueChanges.pipe(Vr()).subscribe((e=>{this.onChange(e)}))}ngAfterViewInit(){this.initialized.emit({storage:this.storageFormGroup.value})}writeValue(e){this.storageFormGroup.patchValue(e,{emitEvent:!1})}registerOnChange(e){this.onChange=e}registerOnTouched(e){}validate(){return this.storageFormGroup.valid?null:{storageFormGroup:{valid:!1}}}removeAllStorageValidators(){for(const e in this.storageFormGroup.controls)"type"!==e&&(this.storageFormGroup.controls[e].clearValidators(),this.storageFormGroup.controls[e].setErrors(null),this.storageFormGroup.controls[e].updateValueAndValidity())}initStorageFormGroup(){return this.fb.group({type:[fy.MEMORY,[ne.required]],read_records_count:[100,[ne.required,ne.min(1),ne.pattern(Ty)]],max_records_count:[1e5,[ne.required,ne.min(1),ne.pattern(Ty)]],data_folder_path:["./data/",[ne.required]],max_file_count:[10,[ne.min(1),ne.pattern(Ty)]],max_read_records_count:[10,[ne.min(1),ne.pattern(Ty)]],max_records_per_file:[1e4,[ne.min(1),ne.pattern(Ty)]],data_file_path:["./data/data.db",[ne.required]],messages_ttl_check_in_hours:[1,[ne.min(1),ne.pattern(Ty)]],messages_ttl_in_days:[7,[ne.min(1),ne.pattern(Ty)]]})}observeStorageTypeChanges(){this.storageFormGroup.get("type").valueChanges.pipe(Vr()).subscribe((e=>{switch(this.removeAllStorageValidators(),e){case fy.MEMORY:this.addMemoryStorageValidators(this.storageFormGroup);break;case fy.FILE:this.addFileStorageValidators(this.storageFormGroup);break;case fy.SQLITE:this.addSqliteStorageValidators(this.storageFormGroup)}}))}addMemoryStorageValidators(e){e.get("read_records_count").addValidators([ne.required,ne.min(1),ne.pattern(Ty)]),e.get("max_records_count").addValidators([ne.required,ne.min(1),ne.pattern(Ty)]),e.get("read_records_count").updateValueAndValidity({emitEvent:!1}),e.get("max_records_count").updateValueAndValidity({emitEvent:!1})}addFileStorageValidators(e){["max_file_count","max_read_records_count","max_records_per_file"].forEach((t=>{e.get(t).addValidators([ne.required,ne.min(1),ne.pattern(Ty)]),e.get(t).updateValueAndValidity({emitEvent:!1})}))}addSqliteStorageValidators(e){["messages_ttl_check_in_hours","messages_ttl_in_days"].forEach((t=>{e.get(t).addValidators([ne.required,ne.min(1),ne.pattern(Ty)]),e.get(t).updateValueAndValidity({emitEvent:!1})}))}static{this.ɵfac=function(e){return new(e||th)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:th,selectors:[["tb-gateway-storage-configuration"]],outputs:{initialized:"initialized"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>th)),multi:!0},{provide:re,useExisting:i((()=>th)),multi:!0}]),t.ɵɵStandaloneFeature],decls:15,vars:9,consts:[[1,"mat-content","mat-padding","configuration-block","w-full",3,"formGroup"],[1,"tb-form-panel","no-padding-bottom","w-full"],["translate","",1,"tb-form-panel-title"],["translate","",1,"tb-form-panel-hint"],["formControlName","type",1,"flex"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-panel-hint"],[3,"ngSwitch"],["class","tb-form-row no-border no-padding tb-standard-fields column-xs",4,"ngSwitchCase"],[4,"ngSwitchCase"],[3,"value"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs"],["appearance","outline",1,"flex"],["translate",""],["type","number","matInput","","formControlName","read_records_count"],[4,"ngIf"],["matIconSuffix","",2,"cursor","pointer",3,"matTooltip"],["type","number","matInput","","formControlName","max_records_count"],["matInput","","formControlName","data_folder_path"],["aria-hidden","false","aria-label","help-icon","matSuffix","",1,"mat-form-field-infix","pointer-event","suffix-icon",2,"cursor","pointer",3,"matTooltip"],["matInput","","type","number","formControlName","max_file_count"],["matInput","","type","number","formControlName","max_read_records_count"],["matInput","","type","number","formControlName","max_records_per_file"],["matInput","","formControlName","data_file_path"],["matInput","","type","number","formControlName","messages_ttl_check_in_hours"],["appearance","outline",1,"mat-block"],["matInput","","type","number","formControlName","messages_ttl_in_days"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"gateway.storage"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3),t.ɵɵtext(5,"gateway.hints.storage"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"tb-toggle-select",4),t.ɵɵtemplate(7,My,3,4,"tb-toggle-option",5),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"div",6),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(11,7),t.ɵɵtemplate(12,Ny,21,12,"section",8)(13,Ky,41,22,"section",9)(14,eh,30,16,"section",9),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.storageFormGroup),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",n.storageTypes),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,7,"gateway.hints."+n.storageFormGroup.get("type").value)),t.ɵɵadvance(2),t.ɵɵproperty("ngSwitch",n.storageFormGroup.get("type").value),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.StorageTypes.MEMORY),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.StorageTypes.FILE),t.ɵɵadvance(),t.ɵɵproperty("ngSwitchCase",n.StorageTypes.SQLITE))},dependencies:t.ɵɵgetComponentDepsFactory(th,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%] .configuration-block[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;max-height:70vh}[_nghost-%COMP%] .dialog-mode[_ngcontent-%COMP%] .configuration-block[_ngcontent-%COMP%]{max-height:60vh}']})}}function nh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-required")," "))}function ah(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-min")," "))}function rh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-max")," "))}function ih(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-pattern")," "))}function oh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-timeout-required")," "))}function sh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-timeout-min")," "))}function ph(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-timeout-pattern")," "))}function lh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-required")," "))}function ch(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-min")," "))}function dh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-keep-alive-pattern")," "))}function mh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-time-between-pings-required")," "))}function uh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-time-between-pings-min")," "))}function gh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-time-between-pings-pattern")," "))}function yh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-max-pings-without-data-required")," "))}function hh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-max-pings-without-data-min")," "))}function fh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-max-pings-without-data-pattern")," "))}function vh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-ping-interval-without-data-required")," "))}function bh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-ping-interval-without-data-min")," "))}function xh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.grpc-min-ping-interval-without-data-pattern")," "))}class wh{constructor(e){this.fb=e,this.initialized=new r,this.onChange=()=>{},this.grpcFormGroup=this.initGrpcFormGroup(),this.grpcFormGroup.valueChanges.pipe(Vr()).subscribe((e=>{this.onChange(e)})),this.grpcFormGroup.get("enabled").valueChanges.pipe(Vr()).subscribe((e=>{this.toggleRpcFields(e)}))}ngAfterViewInit(){this.initialized.emit({grpc:this.grpcFormGroup.value})}writeValue(e){e&&this.toggleRpcFields(e.enabled),this.grpcFormGroup.patchValue(e,{emitEvent:!1})}registerOnChange(e){this.onChange=e}registerOnTouched(e){}validate(){return this.grpcFormGroup.valid?null:{grpcFormGroup:{valid:!1}}}toggleRpcFields(e){const t=this.grpcFormGroup;e?(t.get("serverPort").enable({emitEvent:!1}),t.get("keepAliveTimeMs").enable({emitEvent:!1}),t.get("keepAliveTimeoutMs").enable({emitEvent:!1}),t.get("keepalivePermitWithoutCalls").enable({emitEvent:!1}),t.get("maxPingsWithoutData").enable({emitEvent:!1}),t.get("minTimeBetweenPingsMs").enable({emitEvent:!1}),t.get("minPingIntervalWithoutDataMs").enable({emitEvent:!1})):(t.get("serverPort").disable({emitEvent:!1}),t.get("keepAliveTimeMs").disable({emitEvent:!1}),t.get("keepAliveTimeoutMs").disable({emitEvent:!1}),t.get("keepalivePermitWithoutCalls").disable({emitEvent:!1}),t.get("maxPingsWithoutData").disable({emitEvent:!1}),t.get("minTimeBetweenPingsMs").disable({emitEvent:!1}),t.get("minPingIntervalWithoutDataMs").disable({emitEvent:!1}))}initGrpcFormGroup(){return this.fb.group({enabled:[!1],serverPort:[9595,[ne.required,ne.min(1),ne.max(65535),ne.pattern(Ty)]],keepAliveTimeMs:[1e4,[ne.required,ne.min(1),ne.pattern(Ty)]],keepAliveTimeoutMs:[5e3,[ne.required,ne.min(1),ne.pattern(Ty)]],keepalivePermitWithoutCalls:[!0],maxPingsWithoutData:[0,[ne.required,ne.min(0),ne.pattern(Ty)]],minTimeBetweenPingsMs:[1e4,[ne.required,ne.min(1),ne.pattern(Ty)]],minPingIntervalWithoutDataMs:[5e3,[ne.required,ne.min(1),ne.pattern(Ty)]]})}static{this.ɵfac=function(e){return new(e||wh)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:wh,selectors:[["tb-gateway-grpc-configuration"]],outputs:{initialized:"initialized"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>wh)),multi:!0},{provide:re,useExisting:i((()=>wh)),multi:!0}]),t.ɵɵStandaloneFeature],decls:75,vars:47,consts:[[1,"mat-content","mat-padding","configuration-block",3,"formGroup"],[1,"tb-form-panel","no-padding-bottom","w-full"],["color","primary","formControlName","enabled",1,"mat-slide"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["color","primary","formControlName","keepalivePermitWithoutCalls",1,"mat-slide"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs"],["appearance","outline",1,"flex"],["translate",""],["matInput","","formControlName","serverPort","type","number","min","0"],["matIconSuffix","",2,"cursor","pointer",3,"matTooltip"],[4,"ngIf"],["matInput","","formControlName","keepAliveTimeoutMs","type","number","min","0"],["matInput","","formControlName","keepAliveTimeMs","type","number","min","0"],["matInput","","formControlName","minTimeBetweenPingsMs","type","number","min","0"],["matInput","","formControlName","maxPingsWithoutData","type","number","min","0"],["matInput","","formControlName","minPingIntervalWithoutDataMs","type","number","min","0"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"mat-slide-toggle",2),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",3),t.ɵɵpipe(6,"translate"),t.ɵɵelementStart(7,"mat-slide-toggle",4),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"section")(11,"section",5)(12,"mat-form-field",6)(13,"mat-label",7),t.ɵɵtext(14,"gateway.server-port"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",8),t.ɵɵelementStart(16,"mat-icon",9),t.ɵɵpipe(17,"translate"),t.ɵɵtext(18,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(19,nh,3,3,"mat-error",10)(20,ah,3,3,"mat-error",10)(21,rh,3,3,"mat-error",10)(22,ih,3,3,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-form-field",6)(24,"mat-label",7),t.ɵɵtext(25,"gateway.grpc-keep-alive-timeout"),t.ɵɵelementEnd(),t.ɵɵelement(26,"input",11),t.ɵɵelementStart(27,"mat-icon",9),t.ɵɵpipe(28,"translate"),t.ɵɵtext(29,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(30,oh,3,3,"mat-error",10)(31,sh,3,3,"mat-error",10)(32,ph,3,3,"mat-error",10),t.ɵɵelementEnd()(),t.ɵɵelementStart(33,"section",5)(34,"mat-form-field",6)(35,"mat-label",7),t.ɵɵtext(36,"gateway.grpc-keep-alive"),t.ɵɵelementEnd(),t.ɵɵelement(37,"input",12),t.ɵɵelementStart(38,"mat-icon",9),t.ɵɵpipe(39,"translate"),t.ɵɵtext(40,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(41,lh,3,3,"mat-error",10)(42,ch,3,3,"mat-error",10)(43,dh,3,3,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"mat-form-field",6)(45,"mat-label",7),t.ɵɵtext(46,"gateway.grpc-min-time-between-pings"),t.ɵɵelementEnd(),t.ɵɵelement(47,"input",13),t.ɵɵelementStart(48,"mat-icon",9),t.ɵɵpipe(49,"translate"),t.ɵɵtext(50,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(51,mh,3,3,"mat-error",10)(52,uh,3,3,"mat-error",10)(53,gh,3,3,"mat-error",10),t.ɵɵelementEnd()(),t.ɵɵelementStart(54,"section",5)(55,"mat-form-field",6)(56,"mat-label",7),t.ɵɵtext(57,"gateway.grpc-max-pings-without-data"),t.ɵɵelementEnd(),t.ɵɵelement(58,"input",14),t.ɵɵelementStart(59,"mat-icon",9),t.ɵɵpipe(60,"translate"),t.ɵɵtext(61,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(62,yh,3,3,"mat-error",10)(63,hh,3,3,"mat-error",10)(64,fh,3,3,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(65,"mat-form-field",6)(66,"mat-label",7),t.ɵɵtext(67,"gateway.grpc-min-ping-interval-without-data"),t.ɵɵelementEnd(),t.ɵɵelement(68,"input",15),t.ɵɵelementStart(69,"mat-icon",9),t.ɵɵpipe(70,"translate"),t.ɵɵtext(71,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(72,vh,3,3,"mat-error",10)(73,bh,3,3,"mat-error",10)(74,xh,3,3,"mat-error",10),t.ɵɵelementEnd()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.grpcFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,29,"gateway.grpc")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(6,31,"gateway.hints.permit-without-calls")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(9,33,"gateway.permit-without-calls")," "),t.ɵɵadvance(8),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(17,35,"gateway.hints.server-port")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("serverPort").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("serverPort").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("serverPort").hasError("max")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("serverPort").hasError("pattern")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(28,37,"gateway.hints.grpc-keep-alive-timeout")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("keepAliveTimeoutMs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("keepAliveTimeoutMs").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("keepAliveTimeoutMs").hasError("pattern")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(39,39,"gateway.hints.grpc-keep-alive")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("keepAliveTimeMs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("keepAliveTimeMs").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("keepAliveTimeMs").hasError("pattern")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(49,41,"gateway.hints.grpc-min-time-between-pings")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("minTimeBetweenPingsMs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("minTimeBetweenPingsMs").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("minTimeBetweenPingsMs").hasError("pattern")),t.ɵɵadvance(6),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(60,43,"gateway.hints.grpc-max-pings-without-data")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("maxPingsWithoutData").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("maxPingsWithoutData").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("maxPingsWithoutData").hasError("pattern")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(70,45,"gateway.hints.grpc-min-ping-interval-without-data")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("minPingIntervalWithoutDataMs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("minPingIntervalWithoutDataMs").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.grpcFormGroup.get("minPingIntervalWithoutDataMs").hasError("pattern")))},dependencies:t.ɵɵgetComponentDepsFactory(wh,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%] .configuration-block[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;max-height:70vh}[_nghost-%COMP%] .dialog-mode[_ngcontent-%COMP%] .configuration-block[_ngcontent-%COMP%]{max-height:60vh}']})}}function Ch(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.date-format-required")," "))}function Sh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.log-format-required")," "))}function Eh(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",29),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function Th(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",30),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(a.localLogsConfigTranslateMap.get(e))}}function Ih(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",29),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate(e)}}function kh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.file-path-required")," "))}function Mh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.saving-period-required")," "))}function Ph(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.saving-period-min")," "))}function Fh(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",29),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.key),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,e.value)," ")}}function Oh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.backup-count-required")," "))}function qh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.logs.backup-count-min")," "))}class Bh{constructor(e){this.fb=e,this.initialized=new r,this.logSavingPeriods=Cy,this.localLogsConfigs=Object.keys(vy),this.localLogsConfigTranslateMap=by,this.gatewayLogLevel=Object.values(We),this.remoteLogLevel=Object.values(We).filter((e=>e!==We.NONE)),this.onChange=()=>{},this.logsFormGroup=this.initLogsFormGroup(),this.showRemoteLogsControl=this.fb.control(!1),this.logsFormGroup.valueChanges.pipe(Vr()).subscribe((e=>{this.onChange(e)})),this.logSelector=this.fb.control(vy.service);for(const e of Object.keys(vy))this.addLocalLogConfig(e,{});this.showRemoteLogsControl.valueChanges.pipe(Vr()).subscribe((e=>this.logsFormGroup.get("logLevel")[e?"enable":"disable"]()))}ngAfterViewInit(){this.initialized.emit({logs:this.logsFormGroup.value})}writeValue(e){this.logsFormGroup.patchValue(e,{emitEvent:!1}),this.updateRemoteLogs(e?.logLevel??We.NONE)}registerOnChange(e){this.onChange=e}registerOnTouched(e){}getLogFormGroup(e){return this.logsFormGroup.get(`local.${e}`)}validate(){return this.logsFormGroup.valid?null:{logsFormGroup:{valid:!1}}}initLogsFormGroup(){return this.fb.group({dateFormat:["%Y-%m-%d %H:%M:%S",[ne.required,ne.pattern(/^[^\s].*[^\s]$/)]],logFormat:["%(asctime)s.%(msecs)03d - |%(levelname)s| - [%(filename)s] - %(module)s - %(funcName)s - %(lineno)d - %(message)s",[ne.required,ne.pattern(/^[^\s].*[^\s]$/)]],type:["remote",[ne.required]],logLevel:[{value:We.INFO,disabled:!0}],local:this.fb.group({})})}addLocalLogConfig(e,t){const n=this.logsFormGroup.get("local"),a=this.fb.group({logLevel:[t.logLevel||We.INFO,[ne.required]],filePath:[t.filePath||"./logs",[ne.required]],backupCount:[t.backupCount||7,[ne.required,ne.min(0)]],savingTime:[t.savingTime||3,[ne.required,ne.min(0)]],savingPeriod:[t.savingPeriod||wy.days,[ne.required]]});n.addControl(e,a,{emitEvent:!1})}updateRemoteLogs(e){const t=e&&e!==We.NONE;this.showRemoteLogsControl.patchValue(t,{emitEvent:!1}),this.logsFormGroup.get("logLevel")[t?"enable":"disable"]({emitEvent:!1}),this.logsFormGroup.get("logLevel").patchValue(e===We.NONE?We.INFO:e,{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||Bh)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Bh,selectors:[["tb-gateway-logs-configuration"]],outputs:{initialized:"initialized"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Bh)),multi:!0},{provide:re,useExisting:i((()=>Bh)),multi:!0}]),t.ɵɵStandaloneFeature],decls:72,vars:33,consts:[[1,"mat-content","mat-padding","configuration-block",3,"formGroup"],[1,"tb-form-panel","no-padding-bottom"],[1,"flex","flex-col"],["appearance","outline"],["translate",""],["matInput","","formControlName","dateFormat"],[4,"ngIf"],["matIconSuffix","",2,"cursor","pointer",3,"matTooltip"],["matInput","","formControlName","logFormat","rows","2"],[1,"tb-form-panel"],[1,"tb-settings",3,"expanded"],[1,"flex-wrap"],[1,"mat-slide",3,"click","formControl"],[3,"tb-hint-tooltip-icon"],["formControlName","logLevel"],[3,"value",4,"ngFor","ngForOf"],["formGroupName","local",1,"tb-form-panel","no-padding-bottom"],["translate","",1,"tb-form-panel-title"],[1,"toggle-group",3,"formControl"],["class","first-capital",3,"value",4,"ngFor","ngForOf"],[3,"formGroup"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs"],["appearance","outline",1,"flex"],["matInput","","formControlName","filePath"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","saving-period"],["matInput","","formControlName","savingTime","type","number","min","0"],["appearance","outline","hideRequiredMarker","",2,"min-width","110px","width","30%"],["formControlName","savingPeriod"],["matInput","","formControlName","backupCount","type","number","min","0"],[3,"value"],[1,"first-capital",3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"div",2)(3,"mat-form-field",3)(4,"mat-label",4),t.ɵɵtext(5,"gateway.logs.date-format"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",5),t.ɵɵtemplate(7,Ch,3,3,"mat-error",6),t.ɵɵelementStart(8,"mat-icon",7),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",3)(12,"mat-label",4),t.ɵɵtext(13,"gateway.logs.log-format"),t.ɵɵelementEnd(),t.ɵɵelement(14,"textarea",8),t.ɵɵtemplate(15,Sh,3,3,"mat-error",6),t.ɵɵelementStart(16,"mat-icon",7),t.ɵɵpipe(17,"translate"),t.ɵɵtext(18,"info_outlined "),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(19,"div",9)(20,"mat-expansion-panel",10)(21,"mat-expansion-panel-header",11)(22,"mat-panel-title")(23,"mat-slide-toggle",12),t.ɵɵlistener("click",(function(e){return e.stopPropagation()})),t.ɵɵelementStart(24,"mat-label")(25,"div",13),t.ɵɵpipe(26,"translate"),t.ɵɵtext(27),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(29,"mat-form-field",3)(30,"mat-label",4),t.ɵɵtext(31,"gateway.logs.level"),t.ɵɵelementEnd(),t.ɵɵelementStart(32,"mat-select",14),t.ɵɵtemplate(33,Eh,2,2,"mat-option",15),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(34,"div",16)(35,"div",17),t.ɵɵtext(36,"gateway.logs.local"),t.ɵɵelementEnd(),t.ɵɵelementStart(37,"tb-toggle-select",18),t.ɵɵtemplate(38,Th,2,2,"tb-toggle-option",19),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(39,20),t.ɵɵelementStart(40,"div",21)(41,"mat-form-field",22)(42,"mat-label",4),t.ɵɵtext(43,"gateway.logs.level"),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"mat-select",14),t.ɵɵtemplate(45,Ih,2,2,"mat-option",15),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"mat-form-field",22)(47,"mat-label",4),t.ɵɵtext(48,"gateway.logs.file-path"),t.ɵɵelementEnd(),t.ɵɵelement(49,"input",23),t.ɵɵtemplate(50,kh,3,3,"mat-error",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(51,"div",21)(52,"div",24)(53,"mat-form-field",22)(54,"mat-label",4),t.ɵɵtext(55,"gateway.logs.saving-period"),t.ɵɵelementEnd(),t.ɵɵelement(56,"input",25),t.ɵɵtemplate(57,Mh,3,3,"mat-error",6)(58,Ph,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(59,"mat-form-field",26)(60,"mat-select",27),t.ɵɵtemplate(61,Fh,3,4,"mat-option",15),t.ɵɵpipe(62,"keyvalue"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(63,"mat-form-field",22)(64,"mat-label",4),t.ɵɵtext(65,"gateway.logs.backup-count"),t.ɵɵelementEnd(),t.ɵɵelement(66,"input",28),t.ɵɵtemplate(67,Oh,3,3,"mat-error",6)(68,qh,3,3,"mat-error",6),t.ɵɵelementStart(69,"mat-icon",7),t.ɵɵpipe(70,"translate"),t.ɵɵtext(71,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.logsFormGroup),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.logsFormGroup.get("dateFormat").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(9,21,"gateway.hints.date-form")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.logsFormGroup.get("logFormat").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(17,23,"gateway.hints.log-format")),t.ɵɵadvance(4),t.ɵɵproperty("expanded",n.showRemoteLogsControl.value),t.ɵɵadvance(3),t.ɵɵproperty("formControl",n.showRemoteLogsControl),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(26,25,"gateway.hints.remote-log")),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(28,27,"gateway.logs.remote")),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.remoteLogLevel),t.ɵɵadvance(4),t.ɵɵproperty("formControl",n.logSelector),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.localLogsConfigs),t.ɵɵadvance(),t.ɵɵproperty("formGroup",n.getLogFormGroup(n.logSelector.value)),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.gatewayLogLevel),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.logsFormGroup.get("local."+n.logSelector.value+".filePath").hasError("required")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.logsFormGroup.get("local."+n.logSelector.value+".savingTime").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.logsFormGroup.get("local."+n.logSelector.value+".savingTime").hasError("min")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(62,29,n.logSavingPeriods)),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.logsFormGroup.get("local."+n.logSelector.value+".backupCount").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.logsFormGroup.get("local."+n.logSelector.value+".backupCount").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(70,31,"gateway.hints.backup-count")))},dependencies:t.ɵɵgetComponentDepsFactory(Bh,[V,b]),styles:['@charset "UTF-8";.configuration-block[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;max-height:70vh}.dialog-mode[_ngcontent-%COMP%] .configuration-block[_ngcontent-%COMP%]{max-height:60vh}']})}}function Rh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"security.clientId-required")," "))}function Nh(e,n){if(1&e&&(t.ɵɵelement(0,"tb-copy-button",6),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("tooltipText",t.ɵɵpipeBind1(1,2,"gateway.copy-client-id")),t.ɵɵproperty("copyText",e.usernameFormGroup.get("clientId").value)}}function _h(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",13),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.generate("clientId"))})),t.ɵɵelementStart(2,"mat-icon"),t.ɵɵtext(3,"autorenew"),t.ɵɵelementEnd()()}2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,1,"device.generate-client-id"))}function Dh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"security.username-required")," "))}function Vh(e,n){if(1&e&&(t.ɵɵelement(0,"tb-copy-button",6),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("tooltipText",t.ɵɵpipeBind1(1,2,"gateway.copy-username")),t.ɵɵproperty("copyText",e.usernameFormGroup.get("username").value)}}function Gh(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",13),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.generate("username"))})),t.ɵɵelementStart(2,"mat-icon"),t.ɵɵtext(3,"autorenew"),t.ɵɵelementEnd()()}2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,1,"device.generate-user-name"))}function Ah(e,n){if(1&e&&(t.ɵɵelement(0,"tb-copy-button",6),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("tooltipText",t.ɵɵpipeBind1(1,2,"gateway.copy-password")),t.ɵɵproperty("copyText",e.usernameFormGroup.get("password").value)}}function jh(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",13),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.generate("password"))})),t.ɵɵelementStart(2,"mat-icon"),t.ɵɵtext(3,"autorenew"),t.ɵɵelementEnd()()}2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,1,"device.generate-password"))}function Lh(e,n){1&e&&(t.ɵɵelement(0,"tb-error",14),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵproperty("error",t.ɵɵpipeBind1(1,1,"device.client-id-or-user-name-necessary"))}function Uh(e,n){1&e&&(t.ɵɵelement(0,"tb-error",14),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵproperty("error",t.ɵɵpipeBind1(1,1,"gateway.hints.username-required-with-password"))}class $h{constructor(e){this.fb=e,this.onChange=()=>{},this.initForm(),this.usernameFormGroup.valueChanges.pipe(Vr()).subscribe((e=>this.onChange(e)))}writeValue(e){this.usernameFormGroup.patchValue(e,{emitEvent:!1})}registerOnChange(e){this.onChange=e}registerOnTouched(e){}setDisabledState(e){e?this.usernameFormGroup.disable({emitEvent:!1}):this.usernameFormGroup.enable({emitEvent:!1})}validate(){return this.usernameFormGroup.valid?null:{usernameFormGroup:{valid:!1}}}initForm(){this.usernameFormGroup=this.createSecurityFormGroup()}createSecurityFormGroup(){return this.fb.group({clientId:[null,[ne.pattern(/^[^.\s]+$/)]],username:[null,[ne.pattern(/^[^.\s]+$/)]],password:[null,[ne.pattern(/^[^.\s]+$/)]]},{validators:[this.atLeastOneRequired,this.usernameRequired]})}atLeastOneRequired(e){const t=e.get("clientId").value,n=e.get("username").value;return t||n?null:{atLeastOneRequired:!0}}usernameRequired(e){const t=e.get("username").value,n=e.get("password").value;return!t&&n?{usernameRequired:!0}:null}generate(e){this.usernameFormGroup.get(e).patchValue(X(20))}static{this.ɵfac=function(e){return new(e||$h)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:$h,selectors:[["tb-gateway-username-configuration"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>$h)),multi:!0},{provide:re,useExisting:i((()=>$h)),multi:!0}]),t.ɵɵStandaloneFeature],decls:33,vars:17,consts:[[3,"formGroup"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],["appearance","outline",1,"flex"],["translate",""],["matInput","","formControlName","clientId"],[4,"ngIf"],["matSuffix","","miniButton","false","tooltipPosition","above","icon","content_copy",3,"copyText","tooltipText"],["type","button","matSuffix","","mat-icon-button","","aria-label","Generate","matTooltipPosition","above",3,"matTooltip"],["matIconSuffix","",2,"cursor","pointer",3,"matTooltip"],["matInput","","formControlName","username"],["appearance","outline","subscriptSizing","dynamic",2,"width","100%"],["matInput","","formControlName","password"],["class","block",3,"error",4,"ngIf"],["type","button","matSuffix","","mat-icon-button","","aria-label","Generate","matTooltipPosition","above",3,"click","matTooltip"],[1,"block",3,"error"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"mat-form-field",2)(3,"mat-label",3),t.ɵɵtext(4,"security.clientId"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",4),t.ɵɵtemplate(6,Rh,3,3,"mat-error",5)(7,Nh,2,4,"tb-copy-button",6)(8,_h,4,3,"button",7),t.ɵɵelementStart(9,"mat-icon",8),t.ɵɵpipe(10,"translate"),t.ɵɵtext(11,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"mat-form-field",2)(13,"mat-label",3),t.ɵɵtext(14,"security.username"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",9),t.ɵɵtemplate(16,Dh,3,3,"mat-error",5)(17,Vh,2,4,"tb-copy-button",6)(18,Gh,4,3,"button",7),t.ɵɵelementStart(19,"mat-icon",8),t.ɵɵpipe(20,"translate"),t.ɵɵtext(21,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(22,"mat-form-field",10)(23,"mat-label",3),t.ɵɵtext(24,"gateway.password"),t.ɵɵelementEnd(),t.ɵɵelement(25,"input",11),t.ɵɵtemplate(26,Ah,2,4,"tb-copy-button",6)(27,jh,4,3,"button",7),t.ɵɵelementStart(28,"mat-icon",8),t.ɵɵpipe(29,"translate"),t.ɵɵtext(30,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵtemplate(31,Lh,2,3,"tb-error",12)(32,Uh,2,3,"tb-error",12)),2&e&&(t.ɵɵproperty("formGroup",n.usernameFormGroup),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.usernameFormGroup.get("clientId").hasError("required")),t.ɵɵadvance(),t.ɵɵconditional(n.usernameFormGroup.get("clientId").value?7:8),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(10,11,"gateway.hints.client-id")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.usernameFormGroup.get("username").hasError("required")),t.ɵɵadvance(),t.ɵɵconditional(n.usernameFormGroup.get("username").value?17:18),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(20,13,"gateway.hints.username")),t.ɵɵadvance(7),t.ɵɵconditional(n.usernameFormGroup.get("password").value?26:27),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(29,15,"gateway.hints.password")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.usernameFormGroup.hasError("atLeastOneRequired")&&n.usernameFormGroup.touched),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.usernameFormGroup.hasError("usernameRequired")&&n.usernameFormGroup.touched))},dependencies:t.ɵɵgetComponentDepsFactory($h,[V,b]),encapsulation:2})}}class zh{constructor(e,t){this.deviceService=e,this.destroyRef=t,this.initialCredentialsSubject=new ge(null)}get initialCredentials(){return this.initialCredentialsSubject.value}get initialCredentials$(){return this.initialCredentialsSubject.asObservable()}updateCredentials(e){let t={};switch(e.type){case Sy.USERNAME_PASSWORD:this.shouldUpdateCredentials(e)&&(t=this.generateMqttCredentials(e));break;case Sy.ACCESS_TOKEN:case Sy.TLS_ACCESS_TOKEN:this.shouldUpdateAccessToken(e)&&(t={credentialsType:D.ACCESS_TOKEN,credentialsId:e.accessToken,credentialsValue:null})}return this.initialCredentialsSubject.next({...this.initialCredentials,...t}),Object.keys(t).length?this.deviceService.saveDeviceCredentials(this.initialCredentials):he(null)}setInitialCredentials(e){this.deviceService.getDeviceCredentials(e.id).pipe(Vr(this.destroyRef)).subscribe((e=>{this.initialCredentialsSubject.next({...e,version:null})}))}shouldUpdateSecurityConfig(e){switch(e.type){case Sy.USERNAME_PASSWORD:return this.shouldUpdateCredentials(e);case Sy.ACCESS_TOKEN:case Sy.TLS_ACCESS_TOKEN:return this.shouldUpdateAccessToken(e)}}credentialsToSecurityConfig(e){const t=e.credentialsType===D.MQTT_BASIC?Sy.USERNAME_PASSWORD:Sy.ACCESS_TOKEN;if(e.credentialsType!==D.MQTT_BASIC)return{type:t,accessToken:e.credentialsId};if(e.credentialsValue){const{clientId:n,userName:a,password:r}=JSON.parse(e.credentialsValue);return{type:t,clientId:n,username:a,password:r}}}shouldUpdateCredentials(e){if(this.initialCredentials.credentialsType!==D.MQTT_BASIC)return!0;const t=JSON.parse(this.initialCredentials.credentialsValue);return!(t.clientId===e.clientId&&t.userName===e.username&&t.password===e.password)}shouldUpdateAccessToken(e){return this.initialCredentials.credentialsType!==D.ACCESS_TOKEN||this.initialCredentials.credentialsId!==e.accessToken}generateMqttCredentials(e){const{clientId:t,username:n,password:a}=e,r={...t&&{clientId:t},...n&&{userName:n},...a&&{password:a}};return{credentialsType:D.MQTT_BASIC,credentialsValue:JSON.stringify(r)}}static{this.ɵfac=function(e){return new(e||zh)(t.ɵɵinject(A.DeviceService),t.ɵɵinject(t.DestroyRef))}}static{this.ɵprov=t.ɵɵdefineInjectable({token:zh,factory:zh.ɵfac})}}function Kh(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",8),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.key),t.ɵɵadvance(),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(2,2,e.value)," ")}}function Hh(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"security.access-token-required")," "))}function Wh(e,n){if(1&e&&(t.ɵɵelement(0,"tb-copy-button",13),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext(2);t.ɵɵpropertyInterpolate("tooltipText",t.ɵɵpipeBind1(1,2,"device.copy-access-token")),t.ɵɵproperty("copyText",e.securityFormGroup.get("accessToken").value)}}function Qh(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",16),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.generateAccessToken())})),t.ɵɵelementStart(2,"mat-icon"),t.ɵɵtext(3,"autorenew"),t.ɵɵelementEnd()()}2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,1,"device.generate-access-token"))}function Jh(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",9)(1,"mat-label",10),t.ɵɵtext(2,"security.access-token"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",11),t.ɵɵtemplate(4,Hh,3,3,"mat-error",12)(5,Wh,2,4,"tb-copy-button",13)(6,Qh,4,3,"button",14),t.ɵɵelementStart(7,"mat-icon",15),t.ɵɵpipe(8,"translate"),t.ɵɵtext(9,"info_outlined "),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.securityFormGroup.get("accessToken").hasError("required")),t.ɵɵadvance(),t.ɵɵconditional(e.securityFormGroup.get("accessToken").value?5:6),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,3,"gateway.hints.token"))}}function Yh(e,n){1&e&&(t.ɵɵelement(0,"tb-file-input",17),t.ɵɵpipe(1,"translate"),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"translate")),2&e&&(t.ɵɵpropertyInterpolate("hint",t.ɵɵpipeBind1(1,5,"gateway.hints.ca-cert")),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(2,7,"security.ca-cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(3,9,"gateway.drop-file")),t.ɵɵproperty("allowedExtensions","pem,cert,key")("accept",".pem, application/pem,.cert, application/cert, .key,application/key"))}class Xh{constructor(e,t,n){this.fb=e,this.cd=t,this.gatewayCredentialsService=n,this.initialized=new r,this.securityTypes=Ey,this.onChange=()=>{},this.securityFormGroup=this.createSecurityFormGroup(),this.setupFormListeners()}ngAfterViewInit(){const{usernamePassword:e,...t}=this.securityFormGroup.value;this.initialized.emit({thingsboard:{security:e?{...t,...e}:t}})}writeValue(e){e?this.updateFormBySecurityConfig(e):this.updateFormBySecurityConfig(this.gatewayCredentialsService.credentialsToSecurityConfig(this.gatewayCredentialsService.initialCredentials))}registerOnChange(e){this.onChange=e}registerOnTouched(e){}validate(){return this.securityFormGroup.valid?null:{securityFormGroup:{valid:!1}}}updateFormBySecurityConfig(e){const{clientId:t,username:n,password:a,...r}=e??{};r?.type===Sy.USERNAME_PASSWORD?this.securityFormGroup.patchValue({...r,usernamePassword:{clientId:t,username:n,password:a}},{emitEvent:!1}):this.securityFormGroup.patchValue(r,{emitEvent:!1}),this.toggleBySecurityType(this.securityFormGroup.get("type").value)}createSecurityFormGroup(){return this.fb.group({type:[Sy.ACCESS_TOKEN,[ne.required]],accessToken:[null,[ne.required,ne.pattern(/^[^.\s]+$/)]],caCert:[null,[ne.required]],usernamePassword:[]})}setupFormListeners(){this.securityFormGroup.valueChanges.pipe(Vr()).subscribe((({usernamePassword:e,...t})=>{this.onChange(e?{...t,...e}:t)})),this.securityFormGroup.get("type").valueChanges.pipe(Vr()).subscribe((e=>{this.toggleBySecurityType(e)})),this.securityFormGroup.get("caCert").valueChanges.pipe(Vr()).subscribe((()=>this.cd.detectChanges()))}toggleBySecurityType(e){switch(this.securityFormGroup.disable({emitEvent:!1}),this.securityFormGroup.get("type").enable({emitEvent:!1}),e){case Sy.ACCESS_TOKEN:this.securityFormGroup.get("accessToken").enable({emitEvent:!1});break;case Sy.TLS_PRIVATE_KEY:this.securityFormGroup.get("caCert").enable({emitEvent:!1});break;case Sy.TLS_ACCESS_TOKEN:this.securityFormGroup.get("accessToken").enable({emitEvent:!1}),this.securityFormGroup.get("caCert").enable({emitEvent:!1});break;case Sy.USERNAME_PASSWORD:this.securityFormGroup.get("usernamePassword").enable({emitEvent:!1})}}generateAccessToken(){this.securityFormGroup.get("accessToken").patchValue(X(20))}static{this.ɵfac=function(e){return new(e||Xh)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(zh))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Xh,selectors:[["tb-gateway-security-configuration"]],outputs:{initialized:"initialized"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Xh)),multi:!0},{provide:re,useExisting:i((()=>Xh)),multi:!0}]),t.ɵɵStandaloneFeature],decls:10,vars:8,consts:[[1,"tb-form-panel"],["translate","",1,"tb-form-panel-title"],[3,"formGroup"],["formControlName","type",1,"toggle-group","flex"],[3,"value",4,"ngFor","ngForOf"],["appearance","outline",4,"ngIf"],["formControlName","usernamePassword"],["formControlName","caCert",3,"hint","label","allowedExtensions","accept","dropLabel",4,"ngIf"],[3,"value"],["appearance","outline"],["translate",""],["matInput","","formControlName","accessToken"],[4,"ngIf"],["matSuffix","","miniButton","false","tooltipPosition","above","icon","content_copy",3,"copyText","tooltipText"],["type","button","matSuffix","","mat-icon-button","","aria-label","Generate","matTooltipPosition","above",3,"matTooltip"],["matIconSuffix","",2,"cursor","pointer",3,"matTooltip"],["type","button","matSuffix","","mat-icon-button","","aria-label","Generate","matTooltipPosition","above",3,"click","matTooltip"],["formControlName","caCert",3,"hint","label","allowedExtensions","accept","dropLabel"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1),t.ɵɵtext(2,"security.security"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(3,2),t.ɵɵelementStart(4,"tb-toggle-select",3),t.ɵɵtemplate(5,Kh,3,4,"tb-toggle-option",4),t.ɵɵpipe(6,"keyvalue"),t.ɵɵelementEnd(),t.ɵɵtemplate(7,Jh,10,5,"mat-form-field",5),t.ɵɵelement(8,"tb-gateway-username-configuration",6),t.ɵɵtemplate(9,Yh,4,11,"tb-file-input",7),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(3),t.ɵɵproperty("formGroup",n.securityFormGroup),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(6,6,n.securityTypes)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.securityFormGroup.get("type").value.toLowerCase().includes("accesstoken")),t.ɵɵadvance(),t.ɵɵclassProp("hidden","usernamePassword"!==n.securityFormGroup.get("type").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.securityFormGroup.get("type").value.toLowerCase().includes("tls")))},dependencies:t.ɵɵgetComponentDepsFactory(Xh,[V,b,$h]),encapsulation:2})}}const Zh=["configGroup"];function ef(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-host-required")," "))}function tf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-required")," "))}function nf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-min")," "))}function af(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-max")," "))}function rf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.thingsboard-port-pattern")," "))}function of(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-gateway-security-configuration",21),t.ɵɵlistener("initialized",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext(2);return t.ɵɵresetView(a.onInitialized(n))})),t.ɵɵelementEnd()}}function sf(e,n){if(1&e&&t.ɵɵelement(0,"tb-report-strategy",22),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("defaultValue",e.ReportStrategyDefaultValue.Gateway)}}function pf(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",7)(1,"div",8)(2,"div",9),t.ɵɵpipe(3,"translate"),t.ɵɵelementStart(4,"mat-slide-toggle",10),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"div",9),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"mat-slide-toggle",11),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"div",12)(13,"mat-form-field",13)(14,"mat-label",14),t.ɵɵtext(15,"gateway.thingsboard-host"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",15),t.ɵɵelementStart(17,"mat-icon",16),t.ɵɵpipe(18,"translate"),t.ɵɵtext(19,"info_outlined "),t.ɵɵelementEnd(),t.ɵɵtemplate(20,ef,3,3,"mat-error",17),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",13)(22,"mat-label",14),t.ɵɵtext(23,"gateway.thingsboard-port"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",18),t.ɵɵtemplate(25,tf,3,3,"mat-error",17)(26,nf,3,3,"mat-error",17)(27,af,3,3,"mat-error",17)(28,rf,3,3,"mat-error",17),t.ɵɵelementStart(29,"mat-icon",16),t.ɵɵpipe(30,"translate"),t.ɵɵtext(31,"info_outlined "),t.ɵɵelementEnd()()()(),t.ɵɵtemplate(32,of,1,0,"tb-gateway-security-configuration",19),t.ɵɵpipe(33,"async"),t.ɵɵtemplate(34,sf,1,1,"tb-report-strategy",20),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,13,"gateway.hints.remote-configuration")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,15,"gateway.remote-configuration")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(8,17,"gateway.hints.remote-shell")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(11,19,"gateway.remote-shell")," "),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(18,21,"gateway.hints.host")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.host").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.port").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.port").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.port").hasError("max")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.port").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(30,23,"gateway.hints.port")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",t.ɵɵpipeBind1(33,25,e.initialCredentials$)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.withReportStrategy)}}function lf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.send-period-required")," "))}function cf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.send-period-min")," "))}function df(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.send-period-pattern")," "))}function mf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.attribute-name-required")," "))}function uf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.timeout-required")," "))}function gf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.timeout-min")," "))}function yf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.timeout-pattern")," "))}function hf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.command-required")," "))}function ff(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.command-pattern")," "))}function vf(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",33)(1,"section",34)(2,"section",35)(3,"mat-form-field",13)(4,"mat-label",14),t.ɵɵtext(5,"gateway.statistics.attribute-name"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",36),t.ɵɵtemplate(7,mf,3,3,"mat-error",17),t.ɵɵelementStart(8,"mat-icon",16),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",13)(12,"mat-label",14),t.ɵɵtext(13,"gateway.statistics.timeout"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",37),t.ɵɵtemplate(15,uf,3,3,"mat-error",17)(16,gf,3,3,"mat-error",17)(17,yf,3,3,"mat-error",17),t.ɵɵelementStart(18,"mat-icon",16),t.ɵɵpipe(19,"translate"),t.ɵɵtext(20,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(21,"mat-form-field",38)(22,"mat-label",14),t.ɵɵtext(23,"gateway.statistics.command"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",39),t.ɵɵtemplate(25,hf,3,3,"mat-error",17)(26,ff,3,3,"mat-error",17),t.ɵɵelementStart(27,"mat-icon",16),t.ɵɵpipe(28,"translate"),t.ɵɵtext(29,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(30,"button",40),t.ɵɵpipe(31,"translate"),t.ɵɵlistener("click",(function(n){const a=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.removeCommandControl(a,n))})),t.ɵɵelementStart(32,"mat-icon"),t.ɵɵtext(33,"delete"),t.ɵɵelementEnd()()()}if(2&e){const e=n.$implicit,a=n.index,r=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵproperty("formGroupName",a),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.get("attributeOnGateway").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(9,12,"gateway.hints.attribute")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.get("timeout").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("timeout").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("timeout").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(19,14,"gateway.hints.timeout")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.get("command").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("command").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(28,16,"gateway.hints.command")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(31,18,"gateway.statistics.remove")),t.ɵɵproperty("disabled",!r.basicFormGroup.get("thingsboard.remoteConfiguration").value)}}function bf(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",7)(1,"div",23)(2,"mat-slide-toggle",24),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",25)(6,"mat-label",14),t.ɵɵtext(7,"gateway.statistics.send-period"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",26),t.ɵɵtemplate(9,lf,3,3,"mat-error",17)(10,cf,3,3,"mat-error",17)(11,df,3,3,"mat-error",17),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"div",27)(13,"div",28),t.ɵɵtext(14,"gateway.statistics.commands"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"div",29),t.ɵɵtext(16,"gateway.hints.commands"),t.ɵɵelementEnd(),t.ɵɵelementContainerStart(17,30),t.ɵɵtemplate(18,vf,34,20,"div",31),t.ɵɵelementStart(19,"button",32),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.addCommand())})),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd(),t.ɵɵelementContainerEnd(),t.ɵɵelementEnd()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,7,"gateway.statistics.statistics")," "),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.statistics.statsSendPeriodInSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.statistics.statsSendPeriodInSeconds").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.statistics.statsSendPeriodInSeconds").hasError("pattern")),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",e.commandFormArray().controls),t.ɵɵadvance(),t.ɵɵproperty("disabled",!e.basicFormGroup.get("thingsboard.remoteConfiguration").value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(21,9,"gateway.statistics.add")," ")}}function xf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-timeout-seconds-required")," "))}function wf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-timeout-seconds-min")," "))}function Cf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-timeout-seconds-pattern")," "))}function Sf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-check-period-seconds-required")," "))}function Ef(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-check-period-seconds-min")," "))}function Tf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.inactivity-check-period-seconds-pattern")," "))}function If(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",35)(1,"mat-form-field",13)(2,"mat-label",14),t.ɵɵtext(3,"gateway.inactivity-timeout-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",50),t.ɵɵtemplate(5,xf,3,3,"mat-error",17)(6,wf,3,3,"mat-error",17)(7,Cf,3,3,"mat-error",17),t.ɵɵelementStart(8,"mat-icon",16),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-form-field",13)(12,"mat-label",14),t.ɵɵtext(13,"gateway.inactivity-check-period-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",51),t.ɵɵtemplate(15,Sf,3,3,"mat-error",17)(16,Ef,3,3,"mat-error",17)(17,Tf,3,3,"mat-error",17),t.ɵɵelementStart(18,"mat-icon",16),t.ɵɵpipe(19,"translate"),t.ɵɵtext(20,"info_outlined "),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityTimeoutSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityTimeoutSeconds").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityTimeoutSeconds").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(9,8,"gateway.hints.inactivity-timeout")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityCheckPeriodSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityCheckPeriodSeconds").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.inactivityCheckPeriodSeconds").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(19,10,"gateway.hints.inactivity-period"))}}function kf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.min-pack-send-delay-required")," "))}function Mf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.min-pack-send-delay-min")," "))}function Pf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.min-pack-send-delay-pattern")," "))}function Ff(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.mqtt-qos-required")," "))}function Of(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.mqtt-qos-range")," "))}function qf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.mqtt-qos-range")," "))}function Bf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.check-connectors-configuration-required")," "))}function Rf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.check-connectors-configuration-min")," "))}function Nf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.check-connectors-configuration-pattern")," "))}function _f(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.max-payload-size-bytes-required")," "))}function Df(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.max-payload-size-bytes-min")," "))}function Vf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.max-payload-size-bytes-pattern")," "))}function Gf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.min-pack-size-to-send-required")," "))}function Af(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.min-pack-size-to-send-min")," "))}function jf(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"gateway.statistics.min-pack-size-to-send-pattern")," "))}function Lf(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",7)(1,"div",41)(2,"div",9),t.ɵɵpipe(3,"translate"),t.ɵɵelementStart(4,"mat-slide-toggle",42),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(7,If,21,12,"section",43),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"div",8)(9,"div",28),t.ɵɵtext(10,"gateway.advanced"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"section",35)(12,"mat-form-field",13)(13,"mat-label",14),t.ɵɵtext(14,"gateway.min-pack-send-delay"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",44),t.ɵɵtemplate(16,kf,3,3,"mat-error",17)(17,Mf,3,3,"mat-error",17)(18,Pf,3,3,"mat-error",17),t.ɵɵelementStart(19,"mat-icon",16),t.ɵɵpipe(20,"translate"),t.ɵɵtext(21,"info_outlined "),t.ɵɵelementEnd()(),t.ɵɵelementStart(22,"mat-form-field",13)(23,"mat-label",14),t.ɵɵtext(24,"gateway.mqtt-qos"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-select",45)(26,"mat-option",46),t.ɵɵtext(27,"0"),t.ɵɵelementEnd(),t.ɵɵelementStart(28,"mat-option",46),t.ɵɵtext(29,"1"),t.ɵɵelementEnd()(),t.ɵɵtemplate(30,Ff,3,3,"mat-error",17)(31,Of,3,3,"mat-error",17)(32,qf,3,3,"mat-error",17),t.ɵɵelementStart(33,"mat-icon",16),t.ɵɵpipe(34,"translate"),t.ɵɵtext(35,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(36,"section",35)(37,"mat-form-field",13)(38,"mat-label",14),t.ɵɵtext(39,"gateway.statistics.check-connectors-configuration"),t.ɵɵelementEnd(),t.ɵɵelement(40,"input",47),t.ɵɵtemplate(41,Bf,3,3,"mat-error",17)(42,Rf,3,3,"mat-error",17)(43,Nf,3,3,"mat-error",17),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"mat-form-field",13)(45,"mat-label",14),t.ɵɵtext(46,"gateway.statistics.max-payload-size-bytes"),t.ɵɵelementEnd(),t.ɵɵelement(47,"input",48),t.ɵɵtemplate(48,_f,3,3,"mat-error",17)(49,Df,3,3,"mat-error",17)(50,Vf,3,3,"mat-error",17),t.ɵɵelementStart(51,"mat-icon",16),t.ɵɵpipe(52,"translate"),t.ɵɵtext(53,"info_outlined "),t.ɵɵelementEnd()()(),t.ɵɵelementStart(54,"section",35)(55,"mat-form-field",13)(56,"mat-label",14),t.ɵɵtext(57,"gateway.statistics.min-pack-size-to-send"),t.ɵɵelementEnd(),t.ɵɵelement(58,"input",49),t.ɵɵtemplate(59,Gf,3,3,"mat-error",17)(60,Af,3,3,"mat-error",17)(61,jf,3,3,"mat-error",17),t.ɵɵelementStart(62,"mat-icon",16),t.ɵɵpipe(63,"translate"),t.ɵɵtext(64,"info_outlined "),t.ɵɵelementEnd()()()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵclassProp("no-padding-bottom",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.checkDeviceInactivity").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,26,"gateway.hints.check-device-activity")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,28,"gateway.checking-device-activity")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkingDeviceActivity.checkDeviceInactivity").value),t.ɵɵadvance(9),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSendDelayMS").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSendDelayMS").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSendDelayMS").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(20,30,"gateway.hints.minimal-pack-delay")),t.ɵɵadvance(7),t.ɵɵproperty("value",0),t.ɵɵadvance(2),t.ɵɵproperty("value",1),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.qos").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.qos").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.qos").hasError("max")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(34,32,"gateway.hints.qos")),t.ɵɵadvance(8),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkConnectorsConfigurationInSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkConnectorsConfigurationInSeconds").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.checkConnectorsConfigurationInSeconds").hasError("pattern")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.maxPayloadSizeBytes").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.maxPayloadSizeBytes").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.maxPayloadSizeBytes").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(52,34,"gateway.hints.max-payload-size-bytes")),t.ɵɵadvance(8),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSizeToSend").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSizeToSend").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.basicFormGroup.get("thingsboard.minPackSizeToSend").hasError("pattern")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(63,36,"gateway.hints.min-pack-size-to-send"))}}class Uf{constructor(e,t,n,a){this.fb=e,this.deviceService=t,this.gatewayCredentialsService=n,this.dialog=a,this.dialogMode=!1,this.withReportStrategy=!1,this.initialized=new r,this.ReportStrategyDefaultValue=Vt,this.initialCredentials$=this.gatewayCredentialsService.initialCredentials$,this.onChange=()=>{},this.destroy$=new me,this.initBasicFormGroup(),this.observeFormChanges(),this.basicFormGroup.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.onChange(e)}))}ngOnChanges(e){e.withReportStrategy&&!e.withReportStrategy.firstChange&&this.withReportStrategy&&this.basicFormGroup.get("thingsboard.reportStrategy").enable({emitEvent:!1})}ngAfterViewInit(){this.defaultTab&&(this.configGroup.selectedIndex=hy[this.defaultTab])}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){}writeValue(e){this.basicFormGroup.patchValue(e,{emitEvent:!1});(e?.thingsboard?.statistics?.commands??[]).forEach((e=>this.addCommand(e,!1)))}validate(){return this.basicFormGroup.valid?null:{basicFormGroup:{valid:!1}}}commandFormArray(){return this.basicFormGroup.get("thingsboard.statistics.commands")}removeCommandControl(e,t){""!==t.pointerType&&(this.commandFormArray().removeAt(e),this.basicFormGroup.markAsDirty())}openConfigurationConfirmDialog(){this.deviceService.getDevice(this.device.id).pipe(be(this.destroy$)).subscribe((e=>{this.dialog.open(io,{disableClose:!0,panelClass:["tb-dialog","tb-fullscreen-dialog"],data:{gatewayName:e.name}}).afterClosed().pipe(Ie(1)).subscribe((e=>{e||this.basicFormGroup.get("thingsboard.remoteConfiguration").setValue(!0,{emitEvent:!1})}))}))}addCommand(e,t=!0){const{attributeOnGateway:n=null,command:a=null,timeout:r=null}=e||{},i=this.fb.group({attributeOnGateway:[n,[ne.required,ne.pattern(/^[^.\s]+$/)]],command:[a,[ne.required,ne.pattern(/^(?=\S).*\S$/)]],timeout:[r,[ne.required,ne.min(1),ne.pattern(Ty),ne.pattern(/^[^.\s]+$/)]]});this.commandFormArray().push(i,{emitEvent:t})}onInitialized(e){this.basicFormGroup.patchValue(e,{emitEvent:!1}),this.initialized.emit(this.basicFormGroup.value)}initBasicFormGroup(){this.basicFormGroup=this.fb.group({thingsboard:this.initThingsboardFormGroup(),storage:[],grpc:[],connectors:this.fb.array([]),logs:[]})}initThingsboardFormGroup(){return this.fb.group({host:[window.location.hostname,[ne.required,ne.pattern(/^[^\s]+$/)]],port:[1883,[ne.required,ne.min(1),ne.max(65535),ne.pattern(Ty)]],remoteShell:[!1],remoteConfiguration:[!0],checkConnectorsConfigurationInSeconds:[60,[ne.required,ne.min(1),ne.pattern(Ty)]],statistics:this.fb.group({enable:[!0],statsSendPeriodInSeconds:[3600,[ne.required,ne.min(60),ne.pattern(Ty)]],commands:this.fb.array([])}),maxPayloadSizeBytes:[8196,[ne.required,ne.min(100),ne.pattern(Ty)]],minPackSendDelayMS:[50,[ne.required,ne.min(10),ne.pattern(Ty)]],minPackSizeToSend:[500,[ne.required,ne.min(100),ne.pattern(Ty)]],handleDeviceRenaming:[!0],checkingDeviceActivity:this.initCheckingDeviceActivityFormGroup(),security:[],qos:[1],reportStrategy:[{value:{type:Dt.OnReportPeriod,reportPeriod:Vt.Gateway},disabled:!0}]})}initCheckingDeviceActivityFormGroup(){return this.fb.group({checkDeviceInactivity:[!1],inactivityTimeoutSeconds:[300,[ne.min(1),ne.pattern(Ty)]],inactivityCheckPeriodSeconds:[10,[ne.min(1),ne.pattern(Ty)]]})}observeFormChanges(){this.observeRemoteConfigurationChanges(),this.observeDeviceActivityChanges()}observeRemoteConfigurationChanges(){this.basicFormGroup.get("thingsboard.remoteConfiguration").valueChanges.pipe(be(this.destroy$)).subscribe((e=>{e||this.openConfigurationConfirmDialog()}))}observeDeviceActivityChanges(){const e=this.basicFormGroup.get("thingsboard.checkingDeviceActivity");e.get("checkDeviceInactivity").valueChanges.pipe(be(this.destroy$)).subscribe((t=>{e.updateValueAndValidity();const n=[ne.min(1),ne.required,ne.pattern(Ty)];t?(e.get("inactivityTimeoutSeconds").setValidators(n),e.get("inactivityCheckPeriodSeconds").setValidators(n)):(e.get("inactivityTimeoutSeconds").clearValidators(),e.get("inactivityCheckPeriodSeconds").clearValidators()),e.get("inactivityTimeoutSeconds").updateValueAndValidity({emitEvent:!1}),e.get("inactivityCheckPeriodSeconds").updateValueAndValidity({emitEvent:!1})}))}static{this.ɵfac=function(e){return new(e||Uf)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(A.DeviceService),t.ɵɵdirectiveInject(zh),t.ɵɵdirectiveInject(pe.MatDialog))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Uf,selectors:[["tb-gateway-basic-configuration"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(Zh,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.configGroup=e.first)}},inputs:{device:"device",defaultTab:"defaultTab",dialogMode:"dialogMode",withReportStrategy:"withReportStrategy"},outputs:{initialized:"initialized"},standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>Uf)),multi:!0},{provide:re,useExisting:i((()=>Uf)),multi:!0}]),t.ɵɵNgOnChangesFeature,t.ɵɵStandaloneFeature],decls:20,vars:21,consts:[["configGroup",""],[1,"tab-group-block",3,"formGroup"],[3,"label"],["matTabContent",""],["formControlName","logs",1,"configuration-block",3,"initialized"],["formControlName","storage",3,"initialized"],["formControlName","grpc",3,"initialized"],["formGroupName","thingsboard",1,"mat-content","mat-padding","configuration-block"],[1,"tb-form-panel","no-padding-bottom"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["color","primary","formControlName","remoteConfiguration",1,"mat-slide"],["color","primary","formControlName","remoteShell",1,"mat-slide"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],["appearance","outline",1,"flex"],["translate",""],["matInput","","formControlName","host"],["matIconSuffix","",2,"cursor","pointer",3,"matTooltip"],[4,"ngIf"],["matInput","","formControlName","port","type","number","min","0"],["formControlName","security",3,"initialized",4,"ngIf"],["class","tb-form-panel","formControlName","reportStrategy",3,"defaultValue",4,"ngIf"],["formControlName","security",3,"initialized"],["formControlName","reportStrategy",1,"tb-form-panel",3,"defaultValue"],["formGroupName","statistics",1,"tb-form-panel","no-padding-bottom"],["color","primary","formControlName","enable",1,"mat-slide"],["appearance","outline"],["matInput","","formControlName","statsSendPeriodInSeconds","type","number","min","60"],[1,"tb-form-panel"],["translate","",1,"tb-form-panel-title"],["translate","",1,"tb-form-panel-hint"],["formGroupName","statistics"],["formArrayName","commands","class","statistics-container flex flex-row",4,"ngFor","ngForOf"],["mat-stroked-button","","color","primary","type","button",2,"width","fit-content",3,"click","disabled"],["formArrayName","commands",1,"statistics-container","flex","flex-row"],[1,"tb-form-panel","stroked","no-padding-bottom","no-gap","command-container",3,"formGroupName"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs"],["matInput","","formControlName","attributeOnGateway"],["matInput","","formControlName","timeout","type","number","min","0"],["appearance","outline",1,"mat-block"],["matInput","","formControlName","command"],["mat-icon-button","","matTooltipPosition","above",1,"tb-box-button",3,"click","disabled","matTooltip"],["formGroupName","checkingDeviceActivity",1,"tb-form-panel"],["color","primary","formControlName","checkDeviceInactivity",1,"mat-slide"],["class","tb-form-row no-border no-padding tb-standard-fields column-xs",4,"ngIf"],["matInput","","formControlName","minPackSendDelayMS","type","number","min","0"],["formControlName","qos"],[3,"value"],["matInput","","formControlName","checkConnectorsConfigurationInSeconds","type","number","min","0"],["matInput","","formControlName","maxPayloadSizeBytes","type","number","min","0"],["matInput","","formControlName","minPackSizeToSend","type","number","min","0"],["matInput","","formControlName","inactivityTimeoutSeconds","type","number","min","0"],["matInput","","type","number","min","0","formControlName","inactivityCheckPeriodSeconds"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-tab-group",1,0)(2,"mat-tab",2),t.ɵɵpipe(3,"translate"),t.ɵɵtemplate(4,pf,35,27,"ng-template",3),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-tab",2),t.ɵɵpipe(6,"translate"),t.ɵɵelementStart(7,"tb-gateway-logs-configuration",4),t.ɵɵlistener("initialized",(function(a){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onInitialized(a))})),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-tab",2),t.ɵɵpipe(9,"translate"),t.ɵɵelementStart(10,"tb-gateway-storage-configuration",5),t.ɵɵlistener("initialized",(function(a){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onInitialized(a))})),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"mat-tab",2),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"tb-gateway-grpc-configuration",6),t.ɵɵlistener("initialized",(function(a){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onInitialized(a))})),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"mat-tab",2),t.ɵɵpipe(15,"translate"),t.ɵɵtemplate(16,bf,22,11,"ng-template",3),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"mat-tab",2),t.ɵɵpipe(18,"translate"),t.ɵɵtemplate(19,Lf,65,38,"ng-template",3),t.ɵɵelementEnd()()}2&e&&(t.ɵɵclassProp("dialog-mode",n.dialogMode),t.ɵɵproperty("formGroup",n.basicFormGroup),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(3,9,"gateway.general")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(6,11,"gateway.logs.logs")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(9,13,"gateway.storage")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(12,15,"gateway.grpc")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(15,17,"gateway.statistics.statistics")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(18,19,"gateway.other")))},dependencies:t.ɵɵgetComponentDepsFactory(Uf,[V,b,ma,th,wh,Bh,Xh]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:grid;grid-template-rows:min-content minmax(auto,1fr) min-content}[_nghost-%COMP%] .configuration-block[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:16px;max-height:70vh}[_nghost-%COMP%] .dialog-mode[_ngcontent-%COMP%] .configuration-block[_ngcontent-%COMP%]{max-height:60vh}[_nghost-%COMP%] .mat-toolbar[_ngcontent-%COMP%]{grid-row:1;background:transparent;color:#000000de!important}[_nghost-%COMP%] .tab-group-block[_ngcontent-%COMP%]{min-width:0;height:100%;min-height:0;grid-row:2}[_nghost-%COMP%] .toggle-group[_ngcontent-%COMP%]{margin-right:auto}[_nghost-%COMP%] .first-capital[_ngcontent-%COMP%]{text-transform:capitalize}[_nghost-%COMP%] textarea[_ngcontent-%COMP%]{resize:none}[_nghost-%COMP%] .saving-period[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .statistics-container[_ngcontent-%COMP%] .command-container[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%]{display:none!important}[_nghost-%COMP%] mat-form-field[_ngcontent-%COMP%] mat-error[_ngcontent-%COMP%]:first-child{display:block!important}[_nghost-%COMP%] .pointer-event{pointer-events:all}[_nghost-%COMP%] .toggle-group span{padding:0 25px}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{color:#e0e0e0}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix:hover{color:#9e9e9e}[_nghost-%COMP%] .mat-mdc-form-field-icon-suffix{display:flex;align-items:center}']})}}e("GatewayBasicConfigurationComponent",Uf),qe([k()],Uf.prototype,"dialogMode",void 0),qe([k()],Uf.prototype,"withReportStrategy",void 0);class $f{constructor(e){this.fb=e,this.destroy$=new me,this.advancedFormControl=this.fb.control(""),this.advancedFormControl.valueChanges.pipe(be(this.destroy$)).subscribe((e=>{this.onChange(e),this.onTouched()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnChange(e){this.onChange=e}registerOnTouched(e){this.onTouched=e}writeValue(e){this.advancedFormControl.reset(e,{emitEvent:!1})}validate(){return this.advancedFormControl.valid?null:{advancedFormControl:{valid:!1}}}static{this.ɵfac=function(e){return new(e||$f)(t.ɵɵdirectiveInject(te.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:$f,selectors:[["tb-gateway-advanced-configuration"]],standalone:!0,features:[t.ɵɵProvidersFeature([{provide:ae,useExisting:i((()=>$f)),multi:!0},{provide:re,useExisting:i((()=>$f)),multi:!0}]),t.ɵɵStandaloneFeature],decls:2,vars:4,consts:[["fillHeight","true","jsonRequired","",1,"flex","flex-col","config-container",3,"label","formControl"]],template:function(e,n){1&e&&(t.ɵɵelement(0,"tb-json-object-edit",0),t.ɵɵpipe(1,"translate")),2&e&&(t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(1,2,"gateway.configuration")),t.ɵɵproperty("formControl",n.advancedFormControl))},dependencies:t.ɵɵgetComponentDepsFactory($f,[V,b]),styles:['@charset "UTF-8";[_nghost-%COMP%] .config-container[_ngcontent-%COMP%]{height:calc(100% - 120px);padding:8px}']})}}function zf(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",14),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.cancel())})),t.ɵɵelementStart(1,"mat-icon",15),t.ɵɵtext(2,"close"),t.ɵɵelementEnd()()}}function Kf(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-gateway-basic-configuration",16),t.ɵɵpipe(1,"withReportStrategy"),t.ɵɵlistener("initialized",(function(n){t.ɵɵrestoreView(e);const a=t.ɵɵnextContext();return t.ɵɵresetView(a.onInitialized(n))})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("device",e.device)("defaultTab",e.defaultTab)("dialogMode",!!e.dialogRef)("withReportStrategy",t.ɵɵpipeBind1(1,4,e.gatewayVersion))}}function Hf(e,n){1&e&&t.ɵɵelement(0,"tb-gateway-advanced-configuration",17)}function Wf(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",18),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.cancel())})),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()}2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"action.cancel")," "))}e("GatewayAdvancedConfigurationComponent",$f);class Qf{constructor(e,t,n,a,r){this.fb=e,this.attributeService=t,this.cd=n,this.gatewayCredentialsService=a,this.destroyRef=r,this.ConfigurationModes=_t,this.gatewayConfigAttributeKeys=["general_configuration","grpc_configuration","logs_configuration","storage_configuration","RemoteLoggingLevel","mode"],this.gatewayConfigGroup=this.fb.group({basicConfig:[],advancedConfig:[],mode:[_t.BASIC]}),this.observeAlignConfigs()}ngAfterViewInit(){this.fetchConfigAttribute(this.device)}saveConfig(){const{mode:e,advancedConfig:t}=ee(this.removeEmpty(this.gatewayConfigGroup.value)),n={mode:e,...t};n.thingsboard.statistics.commands=Object.values(n.thingsboard.statistics.commands??[]);const a=this.generateAttributes(n);this.attributeService.saveEntityAttributes(this.device,C.SHARED_SCOPE,a).pipe(Fe((e=>this.gatewayCredentialsService.updateCredentials(n.thingsboard.security))),Vr(this.destroyRef)).subscribe((()=>{this.dialogRef?this.dialogRef.close():(this.gatewayConfigGroup.markAsPristine(),this.cd.detectChanges())}))}onInitialized(e){this.gatewayConfigGroup.get("basicConfig").patchValue(e,{emitEvent:!1}),this.gatewayConfigGroup.get("advancedConfig").patchValue(e,{emitEvent:!1})}observeAlignConfigs(){this.gatewayConfigGroup.get("basicConfig").valueChanges.pipe(Vr(this.destroyRef)).subscribe((e=>{const t=this.gatewayConfigGroup.get("advancedConfig");U(t.value,e)||this.gatewayConfigGroup.get("mode").value!==_t.BASIC||t.patchValue(e,{emitEvent:!1})})),this.gatewayConfigGroup.get("advancedConfig").valueChanges.pipe(Vr(this.destroyRef)).subscribe((e=>{const t=this.gatewayConfigGroup.get("basicConfig");U(t.value,e)||this.gatewayConfigGroup.get("mode").value!==_t.ADVANCED||t.patchValue(e,{emitEvent:!1})}))}generateAttributes(e){const t=[],n=(e,n)=>{t.push({key:e,value:n})},a=(e,t)=>{t={...t,ts:(new Date).getTime()},n(e,t)};return n("RemoteLoggingLevel",e.logs?.logLevel??We.NONE),delete e.connectors,n("logs_configuration",this.generateLogsFile(e.logs)),a("grpc_configuration",e.grpc),a("storage_configuration",e.storage),a("general_configuration",e.thingsboard),n("mode",e.mode),t}cancel(){this.dialogRef&&this.dialogRef.close()}removeEmpty(e){return Object.fromEntries(Object.entries(e).filter((([e,t])=>null!=t)).map((([e,t])=>[e,t===Object(t)?this.removeEmpty(t):t])))}generateLogsFile(e){const t={version:1,disable_existing_loggers:!1,formatters:{LogFormatter:{class:"logging.Formatter",format:e.logFormat,datefmt:e.dateFormat}},handlers:{consoleHandler:{class:"logging.StreamHandler",formatter:"LogFormatter",level:0,stream:"ext://sys.stdout"},databaseHandler:{class:this.getLogsHandlerClass(this.gatewayVersion),formatter:"LogFormatter",filename:"./logs/database.log",backupCount:1,encoding:"utf-8"}},loggers:{database:{handlers:["databaseHandler","consoleHandler"],level:"DEBUG",propagate:!1}},root:{level:"ERROR",handlers:["consoleHandler"]},ts:(new Date).getTime()};return this.addLocalLoggers(t,e?.local),t}addLocalLoggers(e,t){if(t)for(const n of Object.keys(t))e.handlers[n+"Handler"]=this.createHandlerObj(t[n],n),e.loggers[n]=this.createLoggerObj(t[n],n)}createHandlerObj(e,t){return{class:this.getLogsHandlerClass(this.gatewayVersion),formatter:"LogFormatter",filename:`${e.filePath}/${t}.log`,backupCount:e.backupCount,interval:e.savingTime,when:e.savingPeriod,encoding:"utf-8"}}createLoggerObj(e,t){return{handlers:[`${t}Handler`,"consoleHandler"],level:e.logLevel,propagate:!1}}fetchConfigAttribute(e){e.id!==w&&this.attributeService.getEntityAttributes(e,C.CLIENT_SCOPE).pipe(Oe((t=>t.length?he(t):this.attributeService.getEntityAttributes(e,C.SHARED_SCOPE,this.gatewayConfigAttributeKeys))),Vr(this.destroyRef)).subscribe((e=>{this.gatewayVersion=e.find((e=>"Version"===e.key))?.value,this.updateConfigs(e),this.cd.detectChanges()}))}updateConfigs(e){let t={},n=We.NONE;this.gatewayCredentialsService.setInitialCredentials(this.device),e.forEach((e=>{switch(e.key){case"general_configuration":e.value&&(t={...t,thingsboard:e.value});break;case"grpc_configuration":e.value&&(t={...t,grpc:e.value});break;case"logs_configuration":e.value&&(t={...t,logs:this.logsToObj(e.value)});break;case"storage_configuration":e.value&&(t={...t,storage:e.value});break;case"mode":t={...t,mode:e.value??_t.BASIC};break;case"RemoteLoggingLevel":e.value&&(n=e.value)}})),t.logs&&(t={...t,logs:{...t.logs,logLevel:n}}),t.thingsboard?.security?this.gatewayCredentialsService.initialCredentials$.pipe(xe(Boolean),Ie(1),Vr(this.destroyRef)).subscribe((e=>{this.gatewayCredentialsService.shouldUpdateSecurityConfig(t.thingsboard.security)&&(t.thingsboard.security=this.gatewayCredentialsService.credentialsToSecurityConfig(e)),this.gatewayConfigGroup.get("basicConfig").patchValue(t,{emitEvent:!1}),this.gatewayConfigGroup.get("advancedConfig").patchValue(t,{emitEvent:!1})})):(this.gatewayConfigGroup.get("basicConfig").patchValue(t,{emitEvent:!1}),this.gatewayConfigGroup.get("advancedConfig").patchValue(t,{emitEvent:!1}))}logsToObj(e){const{format:t,datefmt:n}=e.formatters.LogFormatter;return{local:Object.keys(vy).reduce(((t,n)=>{const a=e.handlers[`${n}Handler`]||{},r=e.loggers[n]||{};return t[n]={logLevel:r.level||We.INFO,filePath:a.filename?.split(`/${n}`)[0]||"./logs",backupCount:a.backupCount||7,savingTime:a.interval||3,savingPeriod:a.when||wy.days},t}),{}),logFormat:t,dateFormat:n}}getLogsHandlerClass(e=Qe.Legacy){return zr.parseVersion(e)>=zr.parseVersion(Qe.v3_6_3)?Iy:ky}static{this.ɵfac=function(e){return new(e||Qf)(t.ɵɵdirectiveInject(te.FormBuilder),t.ɵɵdirectiveInject(A.AttributeService),t.ɵɵdirectiveInject(t.ChangeDetectorRef),t.ɵɵdirectiveInject(zh),t.ɵɵdirectiveInject(t.DestroyRef))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Qf,selectors:[["tb-gateway-configuration"]],inputs:{device:"device",defaultTab:"defaultTab",dialogRef:"dialogRef"},standalone:!0,features:[t.ɵɵProvidersFeature([zh]),t.ɵɵStandaloneFeature],decls:22,vars:22,consts:[[1,"gateway-config-container",3,"formGroup"],[1,"content-wrapper"],["color","primary"],[1,"tb-flex","space-between","align-center"],["translate",""],[1,"toolbar-actions"],["formControlName","mode",3,"appearance"],[3,"value"],["mat-icon-button","","type","button",3,"click",4,"ngIf"],["formControlName","basicConfig",3,"device","defaultTab","dialogMode","withReportStrategy","initialized",4,"ngIf"],["formControlName","advancedConfig",4,"ngIf"],[1,"actions"],["mat-button","","color","primary","type","button",3,"click",4,"ngIf"],["mat-raised-button","","color","primary","type","button",3,"click","disabled"],["mat-icon-button","","type","button",3,"click"],[1,"material-icons"],["formControlName","basicConfig",3,"initialized","device","defaultTab","dialogMode","withReportStrategy"],["formControlName","advancedConfig"],["mat-button","","color","primary","type","button",3,"click"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1)(2,"mat-toolbar",2)(3,"div",3)(4,"h2",4),t.ɵɵtext(5,"gateway.gateway-configuration"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"div",5)(7,"tb-toggle-select",6)(8,"tb-toggle-option",7),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"tb-toggle-option",7),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(14,zf,3,0,"button",8),t.ɵɵelementEnd()()(),t.ɵɵtemplate(15,Kf,2,6,"tb-gateway-basic-configuration",9)(16,Hf,1,0,"tb-gateway-advanced-configuration",10),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"div",11),t.ɵɵtemplate(18,Wf,3,3,"button",12),t.ɵɵelementStart(19,"button",13),t.ɵɵlistener("click",(function(){return n.saveConfig()})),t.ɵɵtext(20),t.ɵɵpipe(21,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.gatewayConfigGroup),t.ɵɵadvance(2),t.ɵɵclassProp("page-header",!n.dialogRef),t.ɵɵadvance(5),t.ɵɵclassProp("dialog-toggle",!!n.dialogRef),t.ɵɵpropertyInterpolate("appearance",n.dialogRef?"stroked":"fill"),t.ɵɵadvance(),t.ɵɵproperty("value",n.ConfigurationModes.BASIC),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(10,16,"gateway.basic")," "),t.ɵɵadvance(2),t.ɵɵproperty("value",n.ConfigurationModes.ADVANCED),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(13,18,"gateway.advanced")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.dialogRef),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigGroup.get("mode").value===n.ConfigurationModes.BASIC),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.gatewayConfigGroup.get("mode").value===n.ConfigurationModes.ADVANCED),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.dialogRef),t.ɵɵadvance(),t.ɵɵproperty("disabled",n.gatewayConfigGroup.invalid||!n.gatewayConfigGroup.dirty),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(21,20,"action.save")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Qf,[V,b,Jr,Uf,$f]),styles:['@charset "UTF-8";[_nghost-%COMP%]{width:100%;height:100%;display:flex;flex-direction:column;overflow:hidden}[_nghost-%COMP%] .page-header.mat-toolbar[_ngcontent-%COMP%]{background:transparent;color:#000000de!important}[_nghost-%COMP%] .actions[_ngcontent-%COMP%]{grid-row:3;padding:8px 16px 8px 8px;display:flex;gap:8px;justify-content:flex-end;position:absolute;bottom:0;right:0;z-index:1;background:#fff;width:100%}[_nghost-%COMP%] .gateway-config-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden}[_nghost-%COMP%] .content-wrapper[_ngcontent-%COMP%]{flex:1}[_nghost-%COMP%] .toolbar-actions[_ngcontent-%COMP%]{display:flex;align-items:center}.dialog-toggle[_ngcontent-%COMP%] .mat-button-toggle-button{color:#ffffffbf}']})}}e("GatewayConfigurationComponent",Qf);class Jf{constructor(){}static{this.ɵfac=function(e){return new(e||Jf)}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Jf,selectors:[["tb-lib-styles-entry"]],standalone:!0,features:[t.ɵɵStandaloneFeature],decls:0,vars:0,template:function(e,t){},styles:['@charset "UTF-8";.tb-default .table-column{display:table-column}.tb-default .min-h-10{min-height:2.5rem}.tb-default .w-12{width:3rem}.tb-default .max-w-4\\/12{max-width:33.333333%}.tb-default .flex-\\[1_1_30px\\]{flex:1 1 30px}.tb-default .flex-\\[1_1_33\\%\\]{flex:1 1 33%}.tb-default .flex-grow{flex-grow:1}.tb-default .gap-1\\.25{gap:.3125rem}.tb-default .whitespace-nowrap{white-space:nowrap}.tb-default .pr-2{padding-right:.5rem}@media (max-width: 599px){.tb-default .lt-sm\\:flex-col{flex-direction:column}}\n'],encapsulation:2})}}const Yf=(e,t)=>{const n=e[m];if(n.styles?.length){const e=n.styles[0];let a=document.getElementById(t);if(!a){a=document.createElement("style"),a.id=t;(document.head||document.getElementsByTagName("head")[0]).appendChild(a)}a.innerHTML=e}};class Xf{constructor(e){this.translate=e,function(e){e.setTranslation("en_US",Ze,!0),e.setTranslation("ar_AE",et,!0),e.setTranslation("ca_ES",tt,!0),e.setTranslation("cs_CZ",nt,!0),e.setTranslation("da_DK",at,!0),e.setTranslation("es_ES",rt,!0),e.setTranslation("ko_KR",it,!0),e.setTranslation("lt_LT",ot,!0),e.setTranslation("nl_BE",st,!0),e.setTranslation("pl_PL",pt,!0),e.setTranslation("pt_BR",lt,!0),e.setTranslation("sl_SI",ct,!0),e.setTranslation("tr_TR",dt,!0),e.setTranslation("zh_CN",mt,!0),e.setTranslation("zh_TW",ut,!0)}(e),Yf(Jf,"tb-gateway-css")}static{this.ɵfac=function(e){return new(e||Xf)(t.ɵɵinject(Ne.TranslateService))}}static{this.ɵmod=t.ɵɵdefineNgModule({type:Xf})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[V,b,De,gn,ao,es,Qf,Xt,yy,gy]})}}e("GatewayExtensionModule",Xf),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(Xf,{imports:[V,b,De,gn,ao,es,Qf,Xt,yy,gy]})}}}));//# sourceMappingURL=gateway-management-extension.js.map diff --git a/application/src/main/data/upgrade/basic/schema_update.sql b/application/src/main/data/upgrade/basic/schema_update.sql index ebe63a6b3a..64bbbaca05 100644 --- a/application/src/main/data/upgrade/basic/schema_update.sql +++ b/application/src/main/data/upgrade/basic/schema_update.sql @@ -23,7 +23,7 @@ UPDATE user_credentials c SET failed_login_attempts = (SELECT (additional_info:: WHERE failed_login_attempts IS NULL; UPDATE tb_user SET additional_info = (additional_info::jsonb - 'lastLoginTs' - 'failedLoginAttempts' - 'userCredentialsEnabled')::text - WHERE additional_info IS NOT NULL AND additional_info != 'null'; + WHERE additional_info IS NOT NULL AND additional_info != 'null' AND jsonb_typeof(additional_info::jsonb) = 'object'; -- UPDATE RULE NODE DEBUG MODE TO DEBUG STRATEGY START diff --git a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java index 459a899897..622c0ab2dc 100644 --- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java +++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java @@ -35,6 +35,8 @@ import org.thingsboard.server.service.install.migrate.TsLatestMigrateService; import org.thingsboard.server.service.install.update.CacheCleanupService; import org.thingsboard.server.service.install.update.DataUpdateService; +import static org.thingsboard.server.service.install.update.DefaultDataUpdateService.getEnv; + @Service @Profile("install") @Slf4j @@ -94,11 +96,11 @@ public class ThingsboardInstallService { public void performInstall() { try { if (isUpgrade) { - log.info("Starting ThingsBoard Upgrade from version {} ...", upgradeFromVersion); - if ("cassandra-latest-to-postgres".equals(upgradeFromVersion)) { log.info("Migrating ThingsBoard latest timeseries data from cassandra to SQL database ..."); latestMigrateService.migrate(); + } else if (upgradeFromVersion.equals("3.9.0-resources")) { + installScripts.updateResourcesUsage(); } else { // TODO DON'T FORGET to update SUPPORTED_VERSIONS_FROM in DefaultDatabaseSchemaSettingsService databaseSchemaVersionService.validateSchemaSettings(); @@ -118,6 +120,14 @@ public class ThingsboardInstallService { entityDatabaseSchemaService.createDatabaseIndexes(); // Runs upgrade scripts that are not possible in plain SQL. // TODO: cleanup update code after each release + if (!getEnv("SKIP_RESOURCES_USAGE_MIGRATION", false)) { + installScripts.setUpdateResourcesUsage(true); + } else { + log.info("Skipping resources usage migration. Run the upgrade with fromVersion as '3.9.0-resources' to migrate"); + } + if (installScripts.isUpdateResourcesUsage()) { + installScripts.updateResourcesUsage(); + } dataUpdateService.updateData(); log.info("Updating system data..."); dataUpdateService.upgradeRuleNodes(); diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcService.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcService.java index 9af0046f53..7c958343ca 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcService.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcService.java @@ -349,7 +349,7 @@ public class EdgeGrpcService extends EdgeRpcServiceGrpc.EdgeRpcServiceImplBase i private void startSyncProcess(TenantId tenantId, EdgeId edgeId, UUID requestId, String requestServiceId) { EdgeGrpcSession session = sessions.get(edgeId); if (session != null) { - if (!session.isSyncCompleted()) { + if (session.isSyncInProgress()) { clusterService.pushEdgeSyncResponseToCore(new FromEdgeSyncResponse(requestId, tenantId, edgeId, false, "Sync process is active at the moment"), requestServiceId); } else { boolean success = false; @@ -368,7 +368,7 @@ public class EdgeGrpcService extends EdgeRpcServiceGrpc.EdgeRpcServiceImplBase i UUID requestId = request.getId(); EdgeGrpcSession session = sessions.get(request.getEdgeId()); - if (session != null && !session.isSyncCompleted()) { + if (session != null && session.isSyncInProgress()) { responseConsumer.accept(new FromEdgeSyncResponse(requestId, request.getTenantId(), request.getEdgeId(), false, "Sync process is active at the moment")); } else { log.trace("[{}][{}] Processing sync edge request [{}], serviceId [{}]", request.getTenantId(), request.getId(), request.getEdgeId(), request.getServiceId()); @@ -411,7 +411,7 @@ public class EdgeGrpcService extends EdgeRpcServiceGrpc.EdgeRpcServiceImplBase i newEventLock.lock(); try { if (Boolean.TRUE.equals(sessionNewEvents.get(edgeId))) { - log.trace("[{}][{}] Set session new events flag to false", tenantId, edgeId.getId()); + log.trace("[{}][{}] set session new events flag to false", tenantId, edgeId.getId()); sessionNewEvents.put(edgeId, false); session.processHighPriorityEvents(); processEdgeEventMigrationIfNeeded(session, edgeId); @@ -420,6 +420,7 @@ public class EdgeGrpcService extends EdgeRpcServiceGrpc.EdgeRpcServiceImplBase i @Override public void onSuccess(Boolean newEventsAdded) { if (Boolean.TRUE.equals(newEventsAdded)) { + log.trace("[{}][{}] new events added. set session new events flag to true", tenantId, edgeId.getId()); sessionNewEvents.put(edgeId, true); } scheduleEdgeEventsCheck(session); diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcSession.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcSession.java index 64c97d735d..137c4d5bf5 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcSession.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/EdgeGrpcSession.java @@ -28,6 +28,7 @@ import org.springframework.data.util.Pair; import org.thingsboard.server.common.data.AttributeScope; import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.EdgeUtils; +import org.thingsboard.server.common.data.StringUtils; import org.thingsboard.server.common.data.edge.Edge; import org.thingsboard.server.common.data.edge.EdgeEvent; import org.thingsboard.server.common.data.id.EdgeId; @@ -130,13 +131,12 @@ public abstract class EdgeGrpcSession implements Closeable { private Long previousStartTs; private Long newStartSeqId; private Long previousStartSeqId; - private Long seqIdEnd; private StreamObserver inputStream; private StreamObserver outputStream; private volatile boolean connected; - private volatile boolean syncCompleted; + private volatile boolean syncInProgress; private EdgeVersion edgeVersion; private int maxInboundMessageSize; @@ -191,7 +191,7 @@ public abstract class EdgeGrpcSession implements Closeable { } startSyncProcess(fullSync); } else { - syncCompleted = true; + syncInProgress = false; } } if (requestMsg.getMsgType().equals(RequestMsgType.UPLINK_RPC_MESSAGE)) { @@ -246,10 +246,14 @@ public abstract class EdgeGrpcSession implements Closeable { } public void startSyncProcess(boolean fullSync) { - log.info("[{}][{}][{}] Staring edge sync process", tenantId, edge.getId(), sessionId); - syncCompleted = false; - interruptGeneralProcessingOnSync(); - doSync(new EdgeSyncCursor(ctx, edge, fullSync)); + if (!syncInProgress) { + log.info("[{}][{}][{}] Staring edge sync process", tenantId, edge.getId(), sessionId); + syncInProgress = true; + interruptGeneralProcessingOnSync(); + doSync(new EdgeSyncCursor(ctx, edge, fullSync)); + } else { + log.info("[{}][{}][{}] Sync is already started, skipping starting it now", tenantId, edge.getId(), sessionId); + } } private void doSync(EdgeSyncCursor cursor) { @@ -292,6 +296,7 @@ public abstract class EdgeGrpcSession implements Closeable { protected void processEdgeEvents(EdgeEventFetcher fetcher, PageLink pageLink, SettableFuture> result) { try { + log.trace("[{}] Start processing edge events, fetcher = {}, pageLink = {}", sessionId, fetcher.getClass().getSimpleName(), pageLink); processHighPriorityEvents(); PageData pageData = fetcher.fetchEdgeEvents(edge.getTenantId(), edge, pageLink); if (isConnected() && !pageData.getData().isEmpty()) { @@ -327,7 +332,7 @@ public abstract class EdgeGrpcSession implements Closeable { } }, ctx.getGrpcCallbackExecutorService()); } else { - log.trace("[{}] no event(s) found. Stop processing edge events", sessionId); + log.trace("[{}] no event(s) found. Stop processing edge events, fetcher = {}, pageLink = {}", sessionId, fetcher.getClass().getSimpleName(), pageLink); result.set(null); } } catch (Exception e) { @@ -406,6 +411,8 @@ public abstract class EdgeGrpcSession implements Closeable { || sessionState.getScheduledSendDownlinkTask() != null && !sessionState.getScheduledSendDownlinkTask().isCancelled()) { log.debug("[{}][{}][{}] Previous send downlink future was not properly completed, stopping it now!", tenantId, edge.getId(), sessionId); stopCurrentSendDownlinkMsgsTask(true); + } else { + log.trace("[{}][{}][{}] Previous send downlink future is not active", tenantId, edge.getId(), sessionId); } } @@ -519,12 +526,12 @@ public abstract class EdgeGrpcSession implements Closeable { try { if (msg.getSuccess()) { sessionState.getPendingMsgsMap().remove(msg.getDownlinkMsgId()); - log.debug("[{}][{}] Msg has been processed successfully! Msg Id: [{}], Msg: {}", tenantId, edge.getRoutingKey(), msg.getDownlinkMsgId(), msg); + log.debug("[{}][{}][{}] Msg has been processed successfully! Msg Id: [{}], Msg: {}", tenantId, edge.getId(), sessionId, msg.getDownlinkMsgId(), msg); } else { - log.error("[{}][{}] Msg processing failed! Msg Id: [{}], Error msg: {}", tenantId, edge.getRoutingKey(), msg.getDownlinkMsgId(), msg.getErrorMsg()); + log.error("[{}][{}][{}] Msg processing failed! Msg Id: [{}], Error msg: {}", tenantId, edge.getId(), sessionId, msg.getDownlinkMsgId(), msg.getErrorMsg()); } if (sessionState.getPendingMsgsMap().isEmpty()) { - log.debug("[{}][{}] Pending msgs map is empty. Stopping current iteration", tenantId, edge.getRoutingKey()); + log.debug("[{}][{}][{}] Pending msgs map is empty. Stopping current iteration", tenantId, edge.getId(), sessionId); stopCurrentSendDownlinkMsgsTask(false); } } catch (Exception e) { @@ -534,7 +541,7 @@ public abstract class EdgeGrpcSession implements Closeable { public void processHighPriorityEvents() { try { - if (isConnected() && isSyncCompleted()) { + if (isConnected() && !isSyncInProgress()) { if (highPriorityQueue.isEmpty()) { return; } @@ -543,6 +550,7 @@ public abstract class EdgeGrpcSession implements Closeable { while ((event = highPriorityQueue.poll()) != null) { highPriorityEvents.add(event); } + log.trace("[{}][{}] Sending high priority events {}", tenantId, sessionId, highPriorityEvents.size()); List downlinkMsgsPack = convertToDownlinkMsgsPack(highPriorityEvents); sendDownlinkMsgsPack(downlinkMsgsPack).get(); } @@ -553,18 +561,18 @@ public abstract class EdgeGrpcSession implements Closeable { public ListenableFuture processEdgeEvents() throws Exception { SettableFuture result = SettableFuture.create(); - log.trace("[{}][{}] starting processing edge events", tenantId, sessionId); - if (isConnected() && isSyncCompleted()) { + if (isConnected() && !isSyncInProgress()) { Pair startTsAndSeqId = getQueueStartTsAndSeqId().get(); previousStartTs = startTsAndSeqId.getFirst(); previousStartSeqId = startTsAndSeqId.getSecond(); GeneralEdgeEventFetcher fetcher = new GeneralEdgeEventFetcher( previousStartTs, previousStartSeqId, - seqIdEnd, false, Integer.toUnsignedLong(ctx.getEdgeEventStorageSettings().getMaxReadRecordsCount()), ctx.getEdgeEventService()); + log.trace("[{}][{}] starting processing edge events, previousStartTs = {}, previousStartSeqId = {}", + tenantId, sessionId, previousStartTs, previousStartSeqId); Futures.addCallback(startProcessingEdgeEvents(fetcher), new FutureCallback<>() { @Override public void onSuccess(@Nullable Pair newStartTsAndSeqId) { @@ -574,18 +582,16 @@ public abstract class EdgeGrpcSession implements Closeable { @Override public void onSuccess(@Nullable List list) { log.debug("[{}][{}] queue offset was updated [{}]", tenantId, sessionId, newStartTsAndSeqId); + boolean newEventsAvailable; if (fetcher.isSeqIdNewCycleStarted()) { - seqIdEnd = fetcher.getSeqIdEnd(); - boolean newEventsAvailable = isNewEdgeEventsAvailable(); - result.set(newEventsAvailable); + newEventsAvailable = isNewEdgeEventsAvailable(); } else { - seqIdEnd = null; - boolean newEventsAvailable = isSeqIdStartedNewCycle(); + newEventsAvailable = isSeqIdStartedNewCycle(); if (!newEventsAvailable) { newEventsAvailable = isNewEdgeEventsAvailable(); } - result.set(newEventsAvailable); } + result.set(newEventsAvailable); } @Override @@ -607,7 +613,7 @@ public abstract class EdgeGrpcSession implements Closeable { } }, ctx.getGrpcCallbackExecutorService()); } else { - if (!isSyncCompleted()) { + if (isSyncInProgress()) { log.trace("[{}][{}] edge sync is not completed yet. Skipping iteration", tenantId, sessionId); result.set(Boolean.TRUE); } else { @@ -672,9 +678,12 @@ public abstract class EdgeGrpcSession implements Closeable { private boolean isSeqIdStartedNewCycle() { try { + log.trace("[{}][{}][{}] Checking if seq id started new cycle", tenantId, edge.getId(), sessionId); TimePageLink pageLink = new TimePageLink(ctx.getEdgeEventStorageSettings().getMaxReadRecordsCount(), 0, null, null, newStartTs, System.currentTimeMillis()); PageData edgeEvents = ctx.getEdgeEventService().findEdgeEvents(edge.getTenantId(), edge.getId(), 0L, previousStartSeqId == 0 ? null : previousStartSeqId - 1, pageLink); - return !edgeEvents.getData().isEmpty(); + boolean result = !edgeEvents.getData().isEmpty(); + log.trace("[{}][{}][{}] Result of check if seq id started new cycle, result = {}", tenantId, edge.getId(), sessionId, result); + return result; } catch (Exception e) { log.error("[{}][{}][{}] Failed to execute isSeqIdStartedNewCycle", tenantId, edge.getId(), sessionId, e); } @@ -683,9 +692,12 @@ public abstract class EdgeGrpcSession implements Closeable { private boolean isNewEdgeEventsAvailable() { try { + log.trace("[{}][{}][{}] Checking if new edge events available", tenantId, edge.getId(), sessionId); TimePageLink pageLink = new TimePageLink(ctx.getEdgeEventStorageSettings().getMaxReadRecordsCount(), 0, null, null, newStartTs, System.currentTimeMillis()); PageData edgeEvents = ctx.getEdgeEventService().findEdgeEvents(edge.getTenantId(), edge.getId(), newStartSeqId, null, pageLink); - return !edgeEvents.getData().isEmpty() || !highPriorityQueue.isEmpty(); + boolean result = !edgeEvents.getData().isEmpty() || !highPriorityQueue.isEmpty(); + log.trace("[{}][{}][{}] Result of check if new edge events available, result = {}", tenantId, edge.getId(), sessionId, result); + return result; } catch (Exception e) { log.error("[{}][{}][{}] Failed to execute isNewEdgeEventsAvailable", tenantId, edge.getId(), sessionId, e); } @@ -724,7 +736,7 @@ public abstract class EdgeGrpcSession implements Closeable { } private void markSyncCompletedSendEdgeEventUpdate() { - syncCompleted = true; + syncInProgress = false; ctx.getClusterService().onEdgeEventUpdate(new EdgeEventUpdateMsg(edge.getTenantId(), edge.getId())); } @@ -737,29 +749,27 @@ public abstract class EdgeGrpcSession implements Closeable { } } - private void sendDownlinkMsg(ResponseMsg downlinkMsg) { - if (downlinkMsg.getDownlinkMsg().getWidgetTypeUpdateMsgCount() > 0) { - log.trace("[{}][{}] Sending downlink widgetTypeUpdateMsg, downlinkMsgId = {}", tenantId, sessionId, downlinkMsg.getDownlinkMsg().getDownlinkMsgId()); - } else { - log.trace("[{}][{}] Sending downlink msg [{}]", tenantId, sessionId, downlinkMsg); - } + private void sendDownlinkMsg(ResponseMsg responseMsg) { if (isConnected()) { + String responseMsgStr = StringUtils.truncate(responseMsg.toString(), 10000); + log.trace("[{}][{}] Sending downlink msg [{}]", tenantId, sessionId, responseMsgStr); downlinkMsgLock.lock(); + String downlinkMsgStr = responseMsg.hasDownlinkMsg() ? String.valueOf(responseMsg.getDownlinkMsg().getDownlinkMsgId()) : responseMsgStr; try { - outputStream.onNext(downlinkMsg); + outputStream.onNext(responseMsg); } catch (Exception e) { - log.error("[{}][{}] Failed to send downlink message [{}]", tenantId, sessionId, downlinkMsg, e); + log.error("[{}][{}] Failed to send downlink message [{}]", tenantId, sessionId, downlinkMsgStr, e); connected = false; sessionCloseListener.accept(edge, sessionId); } finally { downlinkMsgLock.unlock(); } - log.trace("[{}][{}] Response msg successfully sent. downlinkMsgId = {}", tenantId, sessionId, downlinkMsg.getDownlinkMsg().getDownlinkMsgId()); + log.trace("[{}][{}] downlink msg successfully sent [{}]", tenantId, sessionId, downlinkMsgStr); } } - protected DownlinkMsg convertEntityEventToDownlink(EdgeEvent edgeEvent) { - log.trace("[{}] Executing convertEntityEventToDownlink, edgeEvent [{}], action [{}]", edgeEvent.getTenantId(), edgeEvent, edgeEvent.getAction()); + private DownlinkMsg convertEntityEventToDownlink(EdgeEvent edgeEvent) { + log.trace("[{}][{}] Executing convertEntityEventToDownlink, edgeEvent [{}], action [{}]", tenantId, sessionId, edgeEvent, edgeEvent.getAction()); return switch (edgeEvent.getType()) { case EDGE -> ctx.getEdgeProcessor().convertEdgeEventToDownlink(edgeEvent); case DEVICE -> ctx.getDeviceProcessor().convertDeviceEventToDownlink(edgeEvent, edgeVersion); @@ -789,7 +799,7 @@ public abstract class EdgeGrpcSession implements Closeable { case OAUTH2_CLIENT -> ctx.getOAuth2EdgeProcessor().convertOAuth2ClientEventToDownlink(edgeEvent, edgeVersion); case DOMAIN -> ctx.getOAuth2EdgeProcessor().convertOAuth2DomainEventToDownlink(edgeEvent, edgeVersion); default -> { - log.warn("[{}] Unsupported edge event type [{}]", edgeEvent.getTenantId(), edgeEvent); + log.warn("[{}][{}] Unsupported edge event type [{}]", tenantId, sessionId, edgeEvent); yield null; } }; @@ -923,8 +933,8 @@ public abstract class EdgeGrpcSession implements Closeable { } } catch (Exception e) { String failureMsg = String.format("Can't process uplink msg [%s] from edge", uplinkMsg); - log.error("[{}][{}] Can't process uplink msg [{}]", edge.getTenantId(), sessionId, uplinkMsg, e); - ctx.getNotificationRuleProcessor().process(EdgeCommunicationFailureTrigger.builder().tenantId(edge.getTenantId()).edgeId(edge.getId()) + log.error("[{}][{}] Can't process uplink msg [{}]", tenantId, sessionId, uplinkMsg, e); + ctx.getNotificationRuleProcessor().process(EdgeCommunicationFailureTrigger.builder().tenantId(tenantId).edgeId(edge.getId()) .customerId(edge.getCustomerId()).edgeName(edge.getName()).failureMsg(failureMsg).error(e.getMessage()).build()); return Futures.immediateFailedFuture(e); } diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/KafkaEdgeGrpcSession.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/KafkaEdgeGrpcSession.java index 9cb3f2dffc..29864b4cfa 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/KafkaEdgeGrpcSession.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/KafkaEdgeGrpcSession.java @@ -73,7 +73,7 @@ public class KafkaEdgeGrpcSession extends EdgeGrpcSession { private void processMsgs(List> msgs, TbQueueConsumer> consumer) { log.trace("[{}][{}] starting processing edge events", tenantId, sessionId); - if (isConnected() && isSyncCompleted() && !isHighPriorityProcessing) { + if (isConnected() && !isSyncInProgress() && !isHighPriorityProcessing) { List edgeEvents = new ArrayList<>(); for (TbProtoQueueMsg msg : msgs) { EdgeEvent edgeEvent = ProtoUtils.fromProto(msg.getValue().getEdgeEventMsg()); diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/fetch/GeneralEdgeEventFetcher.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/fetch/GeneralEdgeEventFetcher.java index 37bf860f60..b2a1044981 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/fetch/GeneralEdgeEventFetcher.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/fetch/GeneralEdgeEventFetcher.java @@ -33,8 +33,6 @@ public class GeneralEdgeEventFetcher implements EdgeEventFetcher { private final Long queueStartTs; private Long seqIdStart; @Getter - private Long seqIdEnd; - @Getter private boolean seqIdNewCycleStarted; private Long maxReadRecordsCount; private final EdgeEventService edgeEventService; @@ -53,10 +51,11 @@ public class GeneralEdgeEventFetcher implements EdgeEventFetcher { @Override public PageData fetchEdgeEvents(TenantId tenantId, Edge edge, PageLink pageLink) { try { - PageData edgeEvents = edgeEventService.findEdgeEvents(tenantId, edge.getId(), seqIdStart, seqIdEnd, (TimePageLink) pageLink); + log.trace("[{}] Finding general edge events [{}], seqIdStart = {}, pageLink = {}", + tenantId, edge.getId(), seqIdStart, pageLink); + PageData edgeEvents = edgeEventService.findEdgeEvents(tenantId, edge.getId(), seqIdStart, null, (TimePageLink) pageLink); if (edgeEvents.getData().isEmpty()) { - this.seqIdEnd = Math.max(this.maxReadRecordsCount, seqIdStart - this.maxReadRecordsCount); - edgeEvents = edgeEventService.findEdgeEvents(tenantId, edge.getId(), 0L, seqIdEnd, (TimePageLink) pageLink); + edgeEvents = edgeEventService.findEdgeEvents(tenantId, edge.getId(), 0L, Math.max(this.maxReadRecordsCount, seqIdStart - this.maxReadRecordsCount), (TimePageLink) pageLink); if (edgeEvents.getData().stream().anyMatch(ee -> ee.getSeqId() < seqIdStart)) { log.info("[{}] seqId column of edge_event table started new cycle [{}]", tenantId, edge.getId()); this.seqIdNewCycleStarted = true; diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/relation/RelationEdgeProcessor.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/relation/RelationEdgeProcessor.java index 87b9797620..4153121b43 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/relation/RelationEdgeProcessor.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/processor/relation/RelationEdgeProcessor.java @@ -73,7 +73,7 @@ public abstract class RelationEdgeProcessor extends BaseRelationProcessor implem public ListenableFuture processRelationNotification(TenantId tenantId, TransportProtos.EdgeNotificationMsgProto edgeNotificationMsg) { EntityRelation relation = JacksonUtil.fromString(edgeNotificationMsg.getBody(), EntityRelation.class); - if (relation == null || (relation.getFrom().getEntityType().equals(EntityType.EDGE) || relation.getTo().getEntityType().equals(EntityType.EDGE))) { + if (relation == null) { return Futures.immediateFuture(null); } EdgeId originatorEdgeId = safeGetEdgeId(edgeNotificationMsg.getOriginatorEdgeIdMSB(), edgeNotificationMsg.getOriginatorEdgeIdLSB()); diff --git a/application/src/main/java/org/thingsboard/server/service/edge/rpc/sync/DefaultEdgeRequestsService.java b/application/src/main/java/org/thingsboard/server/service/edge/rpc/sync/DefaultEdgeRequestsService.java index 46f1d7ef57..fb0a45992c 100644 --- a/application/src/main/java/org/thingsboard/server/service/edge/rpc/sync/DefaultEdgeRequestsService.java +++ b/application/src/main/java/org/thingsboard/server/service/edge/rpc/sync/DefaultEdgeRequestsService.java @@ -235,6 +235,9 @@ public class DefaultEdgeRequestsService implements EdgeRequestsService { if (relationsList != null && !relationsList.isEmpty()) { List> futures = new ArrayList<>(); for (List entityRelations : relationsList) { + if (entityRelations.isEmpty()) { + continue; + } log.trace("[{}][{}][{}][{}] relation(s) are going to be pushed to edge.", tenantId, edge.getId(), entityId, entityRelations.size()); for (EntityRelation relation : entityRelations) { try { @@ -255,19 +258,23 @@ public class DefaultEdgeRequestsService implements EdgeRequestsService { } } } - Futures.addCallback(Futures.allAsList(futures), new FutureCallback<>() { - @Override - public void onSuccess(@Nullable List voids) { - futureToSet.set(null); - } + if (futures.isEmpty()) { + futureToSet.set(null); + } else { + Futures.addCallback(Futures.allAsList(futures), new FutureCallback<>() { + @Override + public void onSuccess(@Nullable List voids) { + futureToSet.set(null); + } - @Override - public void onFailure(Throwable throwable) { - String errMsg = String.format("[%s][%s] Exception during saving edge events [%s]!", tenantId, edge.getId(), relationRequestMsg); - log.error(errMsg, throwable); - futureToSet.setException(new RuntimeException(errMsg, throwable)); - } - }, dbCallbackExecutorService); + @Override + public void onFailure(Throwable throwable) { + String errMsg = String.format("[%s][%s] Exception during saving edge events [%s]!", tenantId, edge.getId(), relationRequestMsg); + log.error(errMsg, throwable); + futureToSet.setException(new RuntimeException(errMsg, throwable)); + } + }, dbCallbackExecutorService); + } } else { futureToSet.set(null); } diff --git a/application/src/main/java/org/thingsboard/server/service/entitiy/dashboard/DashboardSyncService.java b/application/src/main/java/org/thingsboard/server/service/entitiy/dashboard/DashboardSyncService.java index b56ae8d46f..21eec71388 100644 --- a/application/src/main/java/org/thingsboard/server/service/entitiy/dashboard/DashboardSyncService.java +++ b/application/src/main/java/org/thingsboard/server/service/entitiy/dashboard/DashboardSyncService.java @@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.ResourceSubType; import org.thingsboard.server.common.data.ResourceType; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.msg.queue.ServiceType; @@ -74,7 +75,7 @@ public class DashboardSyncService { List resources = listFiles("resources"); for (RepoFile resourceFile : resources) { byte[] data = getFileContent(resourceFile.path()); - resourceService.createOrUpdateSystemResource(ResourceType.JS_MODULE, resourceFile.name(), data); + resourceService.createOrUpdateSystemResource(ResourceType.JS_MODULE, ResourceSubType.EXTENSION, resourceFile.name(), data); } List images = listFiles("images"); for (RepoFile imageFile : images) { @@ -89,7 +90,7 @@ public class DashboardSyncService { widgetsBundleService.updateSystemWidgets(widgetsBundles, widgetTypes); RepoFile dashboardFile = listFiles("dashboards").get(0); - resourceService.createOrUpdateSystemResource(ResourceType.DASHBOARD, GATEWAYS_DASHBOARD_KEY, getFileContent(dashboardFile.path())); + resourceService.createOrUpdateSystemResource(ResourceType.DASHBOARD, null, GATEWAYS_DASHBOARD_KEY, getFileContent(dashboardFile.path())); log.info("Gateways dashboard sync completed"); } diff --git a/application/src/main/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsService.java b/application/src/main/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsService.java index 82a96eacdd..f1d9259e91 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/DefaultDatabaseSchemaSettingsService.java @@ -17,6 +17,8 @@ package org.thingsboard.server.service.install; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.info.BuildProperties; import org.springframework.context.annotation.Profile; import org.springframework.jdbc.core.JdbcTemplate; @@ -39,6 +41,9 @@ public class DefaultDatabaseSchemaSettingsService implements DatabaseSchemaSetti private final BuildProperties buildProperties; private final JdbcTemplate jdbcTemplate; + @Value("${install.upgrade.from_version:}") + private String upgradeFromVersion; + private String packageSchemaVersion; private String schemaVersionFromDb; @@ -102,6 +107,15 @@ public class DefaultDatabaseSchemaSettingsService implements DatabaseSchemaSetti @Override public String getDbSchemaVersion() { if (schemaVersionFromDb == null) { + if (StringUtils.isNotBlank(upgradeFromVersion)) { + /* + * TODO - Remove after the release of 3.9.0: + * This a temporary workaround due to the issue that schema version in the + * tb_schema_settings was set as 3.6.4 during the install of 3.8.1. + * */ + schemaVersionFromDb = upgradeFromVersion; + return schemaVersionFromDb; + } Long version = getSchemaVersionFromDb(); if (version == null) { onSchemaSettingsError("Upgrade failed: the database schema version is missing."); diff --git a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java index e93b4717a3..a6ccb85e11 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java +++ b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java @@ -123,6 +123,9 @@ public class InstallScripts { @Getter @Setter private boolean updateImages = false; + @Getter @Setter + private boolean updateResourcesUsage = false; + @Autowired private ImageService imageService; @@ -416,9 +419,9 @@ public class InstallScripts { } Path resourcesDir = Path.of(getDataDir(), RESOURCES_DIR); - loadSystemResources(resourcesDir.resolve("images"), ResourceType.IMAGE); - loadSystemResources(resourcesDir.resolve("js_modules"), ResourceType.JS_MODULE); - loadSystemResources(resourcesDir.resolve("dashboards"), ResourceType.DASHBOARD); + loadSystemResources(resourcesDir.resolve("images"), ResourceType.IMAGE, null); + loadSystemResources(resourcesDir.resolve("js_modules"), ResourceType.JS_MODULE, ResourceSubType.EXTENSION); + loadSystemResources(resourcesDir.resolve("dashboards"), ResourceType.DASHBOARD, null); } public void loadDashboards(TenantId tenantId, CustomerId customerId) { @@ -514,7 +517,7 @@ public class InstallScripts { resourcesUpdater.updateWidgetsResources(); } - private void loadSystemResources(Path dir, ResourceType resourceType) { + private void loadSystemResources(Path dir, ResourceType resourceType, ResourceSubType resourceSubType) { listDir(dir).forEach(resourceFile -> { String resourceKey = resourceFile.getFileName().toString(); try { @@ -522,7 +525,7 @@ public class InstallScripts { if (resourceType == ResourceType.IMAGE) { imageService.createOrUpdateSystemImage(resourceKey, data); } else { - resourceService.createOrUpdateSystemResource(resourceType, resourceKey, data); + resourceService.createOrUpdateSystemResource(resourceType, resourceSubType, resourceKey, data); } } catch (Exception e) { throw new RuntimeException("Unable to load system resource " + resourceFile, e); diff --git a/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java b/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java index dd69533779..e8622fae37 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java +++ b/application/src/main/java/org/thingsboard/server/service/install/update/DefaultDataUpdateService.java @@ -65,7 +65,6 @@ public class DefaultDataUpdateService implements DataUpdateService { public void updateData() throws Exception { log.info("Updating data ..."); //TODO: should be cleaned after each release - installScripts.updateResourcesUsage(); log.info("Data updated."); } diff --git a/application/src/main/java/org/thingsboard/server/service/install/update/ResourcesUpdater.java b/application/src/main/java/org/thingsboard/server/service/install/update/ResourcesUpdater.java index da2b7276dd..840455b04c 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/update/ResourcesUpdater.java +++ b/application/src/main/java/org/thingsboard/server/service/install/update/ResourcesUpdater.java @@ -113,7 +113,7 @@ public class ResourcesUpdater { } executor.shutdown(); - if (!executor.awaitTermination(10, TimeUnit.MINUTES)) { + if (!executor.awaitTermination(5, TimeUnit.HOURS)) { throw new RuntimeException("Dashboards resources update timeout"); // just in case, should happen } log.info("Updated {} dashboards", updatedCount); @@ -142,7 +142,7 @@ public class ResourcesUpdater { } executor.shutdown(); - if (!executor.awaitTermination(10, TimeUnit.MINUTES)) { + if (!executor.awaitTermination(5, TimeUnit.HOURS)) { throw new RuntimeException("Widgets resources update timeout"); } log.info("Updated {} widgets", updatedCount); diff --git a/application/src/main/java/org/thingsboard/server/service/notification/DefaultNotificationCenter.java b/application/src/main/java/org/thingsboard/server/service/notification/DefaultNotificationCenter.java index 9a293ada7e..685311c477 100644 --- a/application/src/main/java/org/thingsboard/server/service/notification/DefaultNotificationCenter.java +++ b/application/src/main/java/org/thingsboard/server/service/notification/DefaultNotificationCenter.java @@ -122,6 +122,7 @@ public class DefaultNotificationCenter extends AbstractSubscriptionService imple if (notificationTemplate == null) { throw new IllegalArgumentException("Template is missing"); } + NotificationType notificationType = notificationTemplate.getNotificationType(); Set deliveryMethods = new HashSet<>(); List targets = new ArrayList<>(); @@ -143,13 +144,13 @@ public class DefaultNotificationCenter extends AbstractSubscriptionService imple try { channels.get(deliveryMethod).check(tenantId); } catch (Exception e) { - if (ruleId == null) { + if (ruleId == null && !notificationType.isSystem()) { throw new IllegalArgumentException(e.getMessage()); } else { - return; // if originated by rule - just ignore delivery method + return; // if originated by rule or notification type is system - just ignore delivery method } } - if (ruleId == null && !notificationTemplate.getNotificationType().isSystem()) { + if (ruleId == null && !notificationType.isSystem()) { if (targets.stream().noneMatch(target -> target.getConfiguration().getType().getSupportedDeliveryMethods().contains(deliveryMethod))) { throw new IllegalArgumentException("Recipients for " + deliveryMethod.getName() + " delivery method not chosen"); } diff --git a/application/src/main/java/org/thingsboard/server/service/ttl/AlarmsCleanUpService.java b/application/src/main/java/org/thingsboard/server/service/ttl/AlarmsCleanUpService.java index dd80eba6bc..75a459c283 100644 --- a/application/src/main/java/org/thingsboard/server/service/ttl/AlarmsCleanUpService.java +++ b/application/src/main/java/org/thingsboard/server/service/ttl/AlarmsCleanUpService.java @@ -17,6 +17,7 @@ package org.thingsboard.server.service.ttl; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; @@ -66,7 +67,7 @@ public class AlarmsCleanUpService { try { cleanUp(tenantId); } catch (Exception e) { - log.warn("Failed to clean up alarms by ttl for tenant {}", tenantId, e); + getLogger().warn("Failed to clean up alarms by ttl for tenant {}", tenantId, e); } } } @@ -105,8 +106,13 @@ public class AlarmsCleanUpService { alarmService.delAlarmTypes(tenantId, typesToRemove); if (totalRemoved > 0) { - log.info("Removed {} outdated alarm(s) for tenant {} older than {}", totalRemoved, tenantId, new Date(expirationTime)); + getLogger().info("Removed {} outdated alarm(s) for tenant {} older than {}", totalRemoved, tenantId, new Date(expirationTime)); } } + // wrapper for tests to spy on static logger + Logger getLogger() { + return log; + } + } diff --git a/application/src/main/resources/thingsboard.yml b/application/src/main/resources/thingsboard.yml index 385e0083d0..3014e1448b 100644 --- a/application/src/main/resources/thingsboard.yml +++ b/application/src/main/resources/thingsboard.yml @@ -604,7 +604,7 @@ cache: maxSize: "${CACHE_SPECS_EDGE_SESSIONS_MAX_SIZE:10000}" # 0 means the cache is disabled relatedEdges: timeToLiveInMinutes: "${CACHE_SPECS_RELATED_EDGES_TTL:1440}" # Related Edges cache TTL - maxSize: "${CACHE_SPECS_RELATED_EDGES_MAX_SIZE:10000}" # 0 means the cache is disabled + maxSize: "${CACHE_SPECS_RELATED_EDGES_MAX_SIZE:0}" # 0 means the cache is disabled repositorySettings: timeToLiveInMinutes: "${CACHE_SPECS_REPOSITORY_SETTINGS_TTL:1440}" # Repository settings cache TTL maxSize: "${CACHE_SPECS_REPOSITORY_SETTINGS_MAX_SIZE:10000}" # 0 means the cache is disabled @@ -1497,9 +1497,7 @@ swagger: # Queue configuration parameters queue: - # in-memory or kafka (Apache Kafka). The following queue types are deprecated and will no longer be supported in ThingsBoard 4.0: - # aws-sqs (AWS SQS), pubsub (PubSub), service-bus (Azure Service Bus), rabbitmq (RabbitMQ) - type: "${TB_QUEUE_TYPE:in-memory}" + type: "${TB_QUEUE_TYPE:in-memory}" # in-memory or kafka (Apache Kafka) prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka). in_memory: stats: @@ -1628,122 +1626,6 @@ queue: print-interval-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_MIN_PRINT_INTERVAL_MS:60000}" # Time to wait for the stats-loading requests to Kafka to finish kafka-response-timeout-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_RESPONSE_TIMEOUT_MS:1000}" - aws_sqs: - # Use the default credentials provider for AWS SQS - use_default_credential_provider_chain: "${TB_QUEUE_AWS_SQS_USE_DEFAULT_CREDENTIAL_PROVIDER_CHAIN:false}" - # Access key ID from AWS IAM user - access_key_id: "${TB_QUEUE_AWS_SQS_ACCESS_KEY_ID:YOUR_KEY}" - # Secret access key from AWS IAM user - secret_access_key: "${TB_QUEUE_AWS_SQS_SECRET_ACCESS_KEY:YOUR_SECRET}" - # Region from AWS account - region: "${TB_QUEUE_AWS_SQS_REGION:YOUR_REGION}" - # Number of threads per each AWS SQS queue in consumer - threads_per_topic: "${TB_QUEUE_AWS_SQS_THREADS_PER_TOPIC:1}" - # Thread pool size for aws_sqs queue producer executor provider. Default value equals to AmazonSQSAsyncClient.DEFAULT_THREAD_POOL_SIZE - producer_thread_pool_size: "${TB_QUEUE_AWS_SQS_EXECUTOR_THREAD_POOL_SIZE:50}" - queue-properties: - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - rule-engine: "${TB_QUEUE_AWS_SQS_RE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - core: "${TB_QUEUE_AWS_SQS_CORE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - transport-api: "${TB_QUEUE_AWS_SQS_TA_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - notifications: "${TB_QUEUE_AWS_SQS_NOTIFICATIONS_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800 - js-executor: "${TB_QUEUE_AWS_SQS_JE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - ota-updates: "${TB_QUEUE_AWS_SQS_OTA_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - version-control: "${TB_QUEUE_AWS_SQS_VC_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - edge: "${TB_QUEUE_AWS_SQS_EDGE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - pubsub: - # Project ID from Google Cloud - project_id: "${TB_QUEUE_PUBSUB_PROJECT_ID:YOUR_PROJECT_ID}" - # API Credentials in JSON format - service_account: "${TB_QUEUE_PUBSUB_SERVICE_ACCOUNT:YOUR_SERVICE_ACCOUNT}" - # Message size for PubSub queue.Value in bytes - max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}" - # Number of messages per consumer - max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}" - # Thread pool size for pubsub queue executor provider. If set to 0 - default pubsub executor provider value will be used (5 * number of available processors) - executor_thread_pool_size: "${TB_QUEUE_PUBSUB_EXECUTOR_THREAD_POOL_SIZE:0}" - queue-properties: - # Pub/Sub properties for Rule Engine subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - rule-engine: "${TB_QUEUE_PUBSUB_RE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Core subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - core: "${TB_QUEUE_PUBSUB_CORE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Transport API subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - transport-api: "${TB_QUEUE_PUBSUB_TA_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Version Control subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - notifications: "${TB_QUEUE_PUBSUB_NOTIFICATIONS_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # PubSub queue properties - js-executor: "${TB_QUEUE_PUBSUB_JE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Transport Api subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - version-control: "${TB_QUEUE_PUBSUB_VC_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Edge subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - edge: "${TB_QUEUE_PUBSUB_EDGE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - service_bus: - # Azure namespace - namespace_name: "${TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME:YOUR_NAMESPACE_NAME}" - # Azure Service Bus Shared Access Signatures key name - sas_key_name: "${TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME:YOUR_SAS_KEY_NAME}" - # Azure Service Bus Shared Access Signatures key - sas_key: "${TB_QUEUE_SERVICE_BUS_SAS_KEY:YOUR_SAS_KEY}" - # Number of messages per a consumer - max_messages: "${TB_QUEUE_SERVICE_BUS_MAX_MESSAGES:1000}" - queue-properties: - # Azure Service Bus properties for Rule Engine queues - rule-engine: "${TB_QUEUE_SERVICE_BUS_RE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Core queues - core: "${TB_QUEUE_SERVICE_BUS_CORE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Transport Api queues - transport-api: "${TB_QUEUE_SERVICE_BUS_TA_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Notification queues - notifications: "${TB_QUEUE_SERVICE_BUS_NOTIFICATIONS_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus queue properties - js-executor: "${TB_QUEUE_SERVICE_BUS_JE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Version Control queues - version-control: "${TB_QUEUE_SERVICE_BUS_VC_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Edge queues - edge: "${TB_QUEUE_SERVICE_BUS_EDGE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - rabbitmq: - # By default empty - exchange_name: "${TB_QUEUE_RABBIT_MQ_EXCHANGE_NAME:}" - # RabbitMQ host used to establish connection - host: "${TB_QUEUE_RABBIT_MQ_HOST:localhost}" - # RabbitMQ host used to establish a connection - port: "${TB_QUEUE_RABBIT_MQ_PORT:5672}" - # Virtual hosts provide logical grouping and separation of resources - virtual_host: "${TB_QUEUE_RABBIT_MQ_VIRTUAL_HOST:/}" - # Username for RabbitMQ user account - username: "${TB_QUEUE_RABBIT_MQ_USERNAME:YOUR_USERNAME}" - # User password for RabbitMQ user account - password: "${TB_QUEUE_RABBIT_MQ_PASSWORD:YOUR_PASSWORD}" - # Network connection between clients and RabbitMQ nodes can fail. RabbitMQ Java client supports automatic recovery of connections and topology (queues, exchanges, bindings, and consumers) - automatic_recovery_enabled: "${TB_QUEUE_RABBIT_MQ_AUTOMATIC_RECOVERY_ENABLED:false}" - # The connection timeout for the RabbitMQ connection factory - connection_timeout: "${TB_QUEUE_RABBIT_MQ_CONNECTION_TIMEOUT:60000}" - # RabbitMQ has a timeout for connection handshake. When clients run in heavily constrained environments, it may be necessary to increase the timeout - handshake_timeout: "${TB_QUEUE_RABBIT_MQ_HANDSHAKE_TIMEOUT:10000}" - # The maximum number of messages returned in a single call of doPoll() method - max_poll_messages: "${TB_QUEUE_RABBIT_MQ_MAX_POLL_MESSAGES:1}" - queue-properties: - # RabbitMQ properties for Rule Engine queues - rule-engine: "${TB_QUEUE_RABBIT_MQ_RE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Core queues - core: "${TB_QUEUE_RABBIT_MQ_CORE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Transport API queues - transport-api: "${TB_QUEUE_RABBIT_MQ_TA_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Notification queues - notifications: "${TB_QUEUE_RABBIT_MQ_NOTIFICATIONS_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ queue properties - js-executor: "${TB_QUEUE_RABBIT_MQ_JE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Version Control queues - version-control: "${TB_QUEUE_RABBIT_MQ_VC_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Edge queues - edge: "${TB_QUEUE_RABBIT_MQ_EDGE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: @@ -1764,7 +1646,7 @@ queue: # Interval in milliseconds to poll api response from transport microservices response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" core: - # Default topic name of Kafka, RabbitMQ, etc. queue + # Default topic name topic: "${TB_QUEUE_CORE_TOPIC:tb_core}" # Interval in milliseconds to poll messages by Core microservices poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" @@ -1781,7 +1663,7 @@ queue: pack-interval-ms: "${TB_QUEUE_CORE_OTA_PACK_INTERVAL_MS:60000}" # The size of OTA updates notifications fetched from the queue. The queue stores pairs of firmware and device ids pack-size: "${TB_QUEUE_CORE_OTA_PACK_SIZE:100}" - # Stats topic name for queue Kafka, RabbitMQ, etc. + # Stats topic name usage-stats-topic: "${TB_QUEUE_US_TOPIC:tb_usage_stats}" stats: # Enable/disable statistics for Core microservices @@ -1812,7 +1694,7 @@ queue: print-interval-ms: "${TB_HOUSEKEEPER_STATS_PRINT_INTERVAL_MS:60000}" vc: - # Default topic name for Kafka, RabbitMQ, etc. + # Default topic name topic: "${TB_QUEUE_VC_TOPIC:tb_version_control}" # Number of partitions to associate with this queue. Used for scaling the number of messages that can be processed in parallel partitions: "${TB_QUEUE_VC_PARTITIONS:10}" @@ -1822,7 +1704,7 @@ queue: pack-processing-timeout: "${TB_QUEUE_VC_PACK_PROCESSING_TIMEOUT_MS:180000}" # Timeout for a request to VC-executor (for a request for the version of the entity, for a commit charge, etc.) request-timeout: "${TB_QUEUE_VC_REQUEST_TIMEOUT:180000}" - # Queue settings for Kafka, RabbitMQ, etc. Limit for single message size + # Limit for single queue message size msg-chunk-size: "${TB_QUEUE_VC_MSG_CHUNK_SIZE:250000}" js: # JS Eval request topic @@ -1863,7 +1745,7 @@ queue: # Interval in milliseconds to poll messages poll_interval: "${TB_QUEUE_TRANSPORT_NOTIFICATIONS_POLL_INTERVAL_MS:25}" edge: - # Default topic name for Kafka, RabbitMQ, etc. + # Default topic name topic: "${TB_QUEUE_EDGE_TOPIC:tb_edge}" # Amount of partitions used by Edge services partitions: "${TB_QUEUE_EDGE_PARTITIONS:10}" diff --git a/application/src/test/java/org/thingsboard/server/cache/CaffeineCacheDefaultConfigurationTest.java b/application/src/test/java/org/thingsboard/server/cache/CaffeineCacheDefaultConfigurationTest.java index a173b4889a..8d0f865b8f 100644 --- a/application/src/test/java/org/thingsboard/server/cache/CaffeineCacheDefaultConfigurationTest.java +++ b/application/src/test/java/org/thingsboard/server/cache/CaffeineCacheDefaultConfigurationTest.java @@ -24,6 +24,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties import org.springframework.boot.test.context.SpringBootContextLoader; import org.springframework.context.annotation.ComponentScan; import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; import static org.assertj.core.api.Assertions.assertThat; @@ -32,6 +33,10 @@ import static org.assertj.core.api.Assertions.assertThat; @ContextConfiguration(classes = CaffeineCacheDefaultConfigurationTest.class, loader = SpringBootContextLoader.class) @ComponentScan({"org.thingsboard.server.cache"}) @EnableConfigurationProperties +@TestPropertySource(properties = { + "cache.specs.edgeSessions.timeToLiveInMinutes=1", + "cache.specs.relatedEdges.maxSize=1" +}) @Slf4j public class CaffeineCacheDefaultConfigurationTest { @@ -46,11 +51,7 @@ public class CaffeineCacheDefaultConfigurationTest { SoftAssertions softly = new SoftAssertions(); cacheSpecsMap.getSpecs().forEach((name, cacheSpecs) -> { softly.assertThat(name).as("cache name").isNotEmpty(); - if (name.equals("edgeSessions")) { - softly.assertThat(cacheSpecs.getTimeToLiveInMinutes()).as("cache %s time to live", name).isEqualTo(0); - } else { - softly.assertThat(cacheSpecs.getTimeToLiveInMinutes()).as("cache %s time to live", name).isGreaterThan(0); - } + softly.assertThat(cacheSpecs.getTimeToLiveInMinutes()).as("cache %s time to live", name).isGreaterThan(0); softly.assertThat(cacheSpecs.getMaxSize()).as("cache %s max size", name).isGreaterThan(0); }); softly.assertAll(); diff --git a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java index aef4772053..5649caee5a 100644 --- a/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java +++ b/application/src/test/java/org/thingsboard/server/controller/AbstractWebTest.java @@ -149,10 +149,6 @@ import org.thingsboard.server.service.security.auth.rest.LoginRequest; import org.thingsboard.server.service.security.model.token.JwtTokenFactory; import java.io.IOException; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.VarHandle; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; import java.nio.charset.StandardCharsets; import java.sql.SQLException; import java.util.ArrayList; @@ -1053,33 +1049,6 @@ public abstract class AbstractWebTest extends AbstractInMemoryStorageTest { throw new AssertionError("Unexpected status " + mvcResult.getResponse().getStatus()); } - protected static T getFieldValue(Object target, String fieldName) throws Exception { - Field field = target.getClass().getDeclaredField(fieldName); - field.setAccessible(true); - return (T) field.get(target); - } - - protected static void setStaticFieldValue(Class targetCls, String fieldName, Object value) throws Exception { - Field field = targetCls.getDeclaredField(fieldName); - field.setAccessible(true); - field.set(null, value); - } - - protected static void setStaticFinalFieldValue(Class targetCls, String fieldName, Object value) throws Exception { - Field field = targetCls.getDeclaredField(fieldName); - field.setAccessible(true); - // Get the VarHandle for the 'modifiers' field in the Field class - MethodHandles.Lookup lookup = MethodHandles.privateLookupIn(Field.class, MethodHandles.lookup()); - VarHandle modifiersHandle = lookup.findVarHandle(Field.class, "modifiers", int.class); - - // Remove the final modifier from the field - int currentModifiers = field.getModifiers(); - modifiersHandle.set(field, currentModifiers & ~Modifier.FINAL); - - // Set the new value - field.set(null, value); - } - protected int getDeviceActorSubscriptionCount(DeviceId deviceId, FeatureType featureType) { DeviceActorMessageProcessor processor = getDeviceActorProcessor(deviceId); Map subscriptions = (Map) ReflectionTestUtils.getField(processor, getMapName(featureType)); diff --git a/application/src/test/java/org/thingsboard/server/edge/DeviceProfileEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/DeviceProfileEdgeTest.java index a085f3a821..1202c764d7 100644 --- a/application/src/test/java/org/thingsboard/server/edge/DeviceProfileEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/DeviceProfileEdgeTest.java @@ -359,7 +359,7 @@ public class DeviceProfileEdgeTest extends AbstractEdgeTest { transportConfiguration.setBootstrapServerUpdateEnable(true); TelemetryMappingConfiguration observeAttrConfiguration = - JacksonUtil.fromString(AbstractLwM2MIntegrationTest.OBSERVE_ATTRIBUTES_WITH_PARAMS, TelemetryMappingConfiguration.class); + JacksonUtil.fromString(AbstractLwM2MIntegrationTest.TELEMETRY_WITHOUT_OBSERVE, TelemetryMappingConfiguration.class); transportConfiguration.setObserveAttr(observeAttrConfiguration); List bootstrap = new ArrayList<>(); diff --git a/application/src/test/java/org/thingsboard/server/edge/RelationEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/RelationEdgeTest.java index 68d4df8fc8..68c5d03780 100644 --- a/application/src/test/java/org/thingsboard/server/edge/RelationEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/RelationEdgeTest.java @@ -21,8 +21,10 @@ import org.junit.Assert; import org.junit.Test; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.server.common.data.Device; +import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.asset.Asset; import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.data.id.EdgeId; import org.thingsboard.server.common.data.relation.EntityRelation; import org.thingsboard.server.common.data.relation.RelationTypeGroup; import org.thingsboard.server.dao.service.DaoSqlTest; @@ -31,6 +33,8 @@ import org.thingsboard.server.gen.edge.v1.RelationUpdateMsg; import org.thingsboard.server.gen.edge.v1.UpdateMsgType; import org.thingsboard.server.gen.edge.v1.UplinkMsg; +import java.util.UUID; + @DaoSqlTest public class RelationEdgeTest extends AbstractEdgeTest { @@ -58,13 +62,14 @@ public class RelationEdgeTest extends AbstractEdgeTest { // delete relation edgeImitator.expectMessageAmount(1); - var deletedRelation = doDelete("/api/v2/relation?" + - "fromId=" + relation.getFrom().getId().toString() + - "&fromType=" + relation.getFrom().getEntityType().name() + - "&relationType=" + relation.getType() + - "&relationTypeGroup=" + relation.getTypeGroup().name() + - "&toId=" + relation.getTo().getId().toString() + - "&toType=" + relation.getTo().getEntityType().name(), EntityRelation.class); + + String deleteUrl = String.format("/api/v2/relation?fromId=%s&fromType=%s&relationType=%s&relationTypeGroup=%s&toId=%s&toType=%s", + device.getId().toString(), EntityType.DEVICE.name(), "test", + RelationTypeGroup.COMMON.name(), asset.getId().toString(), EntityType.ASSET.name() + ); + + var deletedRelation = doDelete(deleteUrl, EntityRelation.class); + Assert.assertTrue(edgeImitator.waitForMessages()); latestMessage = edgeImitator.getLatestMessage(); Assert.assertTrue(latestMessage instanceof RelationUpdateMsg); @@ -94,13 +99,13 @@ public class RelationEdgeTest extends AbstractEdgeTest { edgeImitator.sendUplinkMsg(uplinkMsgBuilder.build()); Assert.assertTrue(edgeImitator.waitForResponses()); - EntityRelation relation = doGet("/api/relation?" + - "&fromId=" + device2.getUuidId() + - "&fromType=" + device2.getId().getEntityType().name() + - "&relationType=" + "test" + - "&relationTypeGroup=" + RelationTypeGroup.COMMON.name() + - "&toId=" + device1.getUuidId() + - "&toType=" + device1.getId().getEntityType().name(), EntityRelation.class); + String getUrl = String.format("/api/relation?fromId=%s&fromType=%s&relationType=%s&relationTypeGroup=%s&toId=%s&toType=%s", + device2.getUuidId(), EntityType.DEVICE.name(), "test", + RelationTypeGroup.COMMON.name(), device1.getUuidId(), EntityType.DEVICE.name() + ); + + var relation = doGet(getUrl, EntityRelation.class); + Assert.assertNotNull(relation); } @@ -154,6 +159,47 @@ public class RelationEdgeTest extends AbstractEdgeTest { Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, relationUpdateMsg.getMsgType()); } + @Test + public void testRelationFromEdgeToDevice() throws Exception { + // create relation + Device device = findDeviceByName("Edge Device 1"); + EdgeId edgeId = new EdgeId(new UUID(edgeImitator.getConfiguration().getEdgeIdMSB(), edgeImitator.getConfiguration().getEdgeIdLSB())); + EntityRelation relation = new EntityRelation(); + relation.setType("test"); + relation.setFrom(edgeId); + relation.setTo(device.getId()); + relation.setTypeGroup(RelationTypeGroup.COMMON); + edgeImitator.expectMessageAmount(1); + relation = doPost("/api/v2/relation", relation, EntityRelation.class); + Assert.assertTrue(edgeImitator.waitForMessages()); + AbstractMessage latestMessage = edgeImitator.getLatestMessage(); + Assert.assertTrue(latestMessage instanceof RelationUpdateMsg); + RelationUpdateMsg relationUpdateMsg = (RelationUpdateMsg) latestMessage; + EntityRelation entityRelation = JacksonUtil.fromString(relationUpdateMsg.getEntity(), EntityRelation.class, true); + Assert.assertNotNull(entityRelation); + Assert.assertEquals(relation, entityRelation); + Assert.assertEquals(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE, relationUpdateMsg.getMsgType()); + + // delete relation + edgeImitator.expectMessageAmount(1); + + String deleteUrl = String.format("/api/v2/relation?fromId=%s&fromType=%s&relationType=%s&relationTypeGroup=%s&toId=%s&toType=%s", + edgeId, EntityType.EDGE.name(), "test", + RelationTypeGroup.COMMON.name(), device.getId().toString(), EntityType.DEVICE.name() + ); + + var deletedRelation = doDelete(deleteUrl, EntityRelation.class); + + Assert.assertTrue(edgeImitator.waitForMessages()); + latestMessage = edgeImitator.getLatestMessage(); + Assert.assertTrue(latestMessage instanceof RelationUpdateMsg); + relationUpdateMsg = (RelationUpdateMsg) latestMessage; + entityRelation = JacksonUtil.fromString(relationUpdateMsg.getEntity(), EntityRelation.class, true); + Assert.assertNotNull(entityRelation); + Assert.assertEquals(deletedRelation, entityRelation); + Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, relationUpdateMsg.getMsgType()); + } + private EntityRelation buildEntityRelationForUplinkMsg(DeviceId deviceId1, DeviceId deviceId2) { EntityRelation relation = new EntityRelation(); relation.setType("test"); @@ -163,4 +209,5 @@ public class RelationEdgeTest extends AbstractEdgeTest { relation.setAdditionalInfo(TextNode.valueOf("{}")); return relation; } + } diff --git a/application/src/test/java/org/thingsboard/server/edge/RuleChainEdgeTest.java b/application/src/test/java/org/thingsboard/server/edge/RuleChainEdgeTest.java index 23a58664ed..12ce6509d7 100644 --- a/application/src/test/java/org/thingsboard/server/edge/RuleChainEdgeTest.java +++ b/application/src/test/java/org/thingsboard/server/edge/RuleChainEdgeTest.java @@ -39,7 +39,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.concurrent.TimeUnit; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -50,8 +49,8 @@ public class RuleChainEdgeTest extends AbstractEdgeTest { @Test public void testRuleChains() throws Exception { - // create rule chain - edgeImitator.expectMessageAmount(2); + // create rule chain: 2 messages from create rule chain, 2 messages from load metadata + edgeImitator.expectMessageAmount(4); RuleChain ruleChain = new RuleChain(); ruleChain.setName("Edge Test Rule Chain"); ruleChain.setType(RuleChainType.EDGE); @@ -60,15 +59,21 @@ public class RuleChainEdgeTest extends AbstractEdgeTest { + "/ruleChain/" + savedRuleChain.getUuidId(), RuleChain.class); createRuleChainMetadata(savedRuleChain); Assert.assertTrue(edgeImitator.waitForMessages()); - Optional ruleChainUpdateMsgOpt = edgeImitator.findMessageByType(RuleChainUpdateMsg.class); - Assert.assertTrue(ruleChainUpdateMsgOpt.isPresent()); - RuleChainUpdateMsg ruleChainUpdateMsg = ruleChainUpdateMsgOpt.get(); + List ruleChainUpdateMsgs = edgeImitator.findAllMessagesByType(RuleChainUpdateMsg.class); + Assert.assertEquals(2, ruleChainUpdateMsgs.size()); + List ruleChainMetadataUpdateMsgs = edgeImitator.findAllMessagesByType(RuleChainMetadataUpdateMsg.class); + Assert.assertEquals(2, ruleChainMetadataUpdateMsgs.size()); + RuleChainUpdateMsg ruleChainUpdateMsg = ruleChainUpdateMsgs.get(0); RuleChain ruleChainMsg = JacksonUtil.fromString(ruleChainUpdateMsg.getEntity(), RuleChain.class, true); Assert.assertNotNull(ruleChainMsg); Assert.assertTrue(UpdateMsgType.ENTITY_CREATED_RPC_MESSAGE.equals(ruleChainUpdateMsg.getMsgType()) || UpdateMsgType.ENTITY_UPDATED_RPC_MESSAGE.equals(ruleChainUpdateMsg.getMsgType())); Assert.assertEquals(savedRuleChain.getId(), ruleChainMsg.getId()); Assert.assertEquals(savedRuleChain.getName(), ruleChainMsg.getName()); + RuleChainMetadataUpdateMsg ruleChainMetadataUpdateMsg = ruleChainMetadataUpdateMsgs.get(0); + RuleChainMetaData ruleChainMetaData = JacksonUtil.fromString(ruleChainMetadataUpdateMsg.getEntity(), RuleChainMetaData.class, true); + Assert.assertNotNull(ruleChainMetaData); + Assert.assertEquals(ruleChainMetaData.getRuleChainId(), savedRuleChain.getId()); testRuleChainMetadataRequestMsg(savedRuleChain.getId()); @@ -77,7 +82,7 @@ public class RuleChainEdgeTest extends AbstractEdgeTest { doDelete("/api/edge/" + edge.getUuidId() + "/ruleChain/" + savedRuleChain.getUuidId(), RuleChain.class); Assert.assertTrue(edgeImitator.waitForMessages()); - ruleChainUpdateMsgOpt = edgeImitator.findMessageByType(RuleChainUpdateMsg.class); + Optional ruleChainUpdateMsgOpt = edgeImitator.findMessageByType(RuleChainUpdateMsg.class); Assert.assertTrue(ruleChainUpdateMsgOpt.isPresent()); ruleChainUpdateMsg = ruleChainUpdateMsgOpt.get(); Assert.assertEquals(UpdateMsgType.ENTITY_DELETED_RPC_MESSAGE, ruleChainUpdateMsg.getMsgType()); @@ -262,4 +267,5 @@ public class RuleChainEdgeTest extends AbstractEdgeTest { .andExpect(status().isOk()); Assert.assertTrue(edgeImitator.waitForMessages(5)); } + } diff --git a/application/src/test/java/org/thingsboard/server/service/script/AbstractTbelInvokeTest.java b/application/src/test/java/org/thingsboard/server/service/script/AbstractTbelInvokeTest.java index 11b61f64c4..dcd73bac50 100644 --- a/application/src/test/java/org/thingsboard/server/service/script/AbstractTbelInvokeTest.java +++ b/application/src/test/java/org/thingsboard/server/service/script/AbstractTbelInvokeTest.java @@ -16,8 +16,10 @@ package org.thingsboard.server.service.script; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.script.api.ScriptType; +import org.thingsboard.script.api.tbel.DefaultTbelInvokeService; import org.thingsboard.script.api.tbel.TbelInvokeService; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.controller.AbstractControllerTest; @@ -28,7 +30,8 @@ import java.util.concurrent.ExecutionException; import static org.thingsboard.server.common.data.msg.TbMsgType.POST_TELEMETRY_REQUEST; -public abstract class AbstractTbelInvokeTest extends AbstractControllerTest { +@SpringBootTest(classes = DefaultTbelInvokeService.class) +public abstract class AbstractTbelInvokeTest { @Autowired protected TbelInvokeService invokeService; diff --git a/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeDocsIoTest.java b/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeDocsIoTest.java index 188599a530..91eae788c3 100644 --- a/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeDocsIoTest.java +++ b/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeDocsIoTest.java @@ -18,7 +18,6 @@ package org.thingsboard.server.service.script; import org.junit.jupiter.api.Test; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.script.api.tbel.TbDate; -import org.thingsboard.server.dao.service.DaoSqlTest; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -34,7 +33,6 @@ import java.util.concurrent.atomic.AtomicReference; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; -@DaoSqlTest class TbelInvokeDocsIoTest extends AbstractTbelInvokeTest { private String decoderStr; @@ -1469,6 +1467,26 @@ class TbelInvokeDocsIoTest extends AbstractTbelInvokeTest { assertEquals(expected, actual); } + // hexToBytes List or Array + @Test + public void hexToBytes_Test() throws ExecutionException, InterruptedException { + msgStr = "{}"; + decoderStr = """ + var validInputList = "0x01752B0367FA000500010488FFFFFFFFFFFFFFFF33"; + var validInputArray = "AABBCCDDEE"; + return { + "hexToBytes": hexToBytes(validInputList), + "hexToBytesArray": hexToBytesArray(validInputArray), + } + """; + Object actual = invokeScript(evalScript(decoderStr), msgStr); + LinkedHashMap expected = new LinkedHashMap<>(); + expected.put("hexToBytes", bytesToList(new byte[]{1, 117, 43, 3, 103, -6, 0, 5, 0, 1, 4, -120, -1, -1, -1, -1, -1, -1, -1, -1, 51})); + // [-86, -69, -52, -35, -18] == new byte[]{(byte) 0xAA, (byte) 0xBB, (byte) 0xCC, (byte) 0xDD, (byte) 0xEE} + expected.put("hexToBytesArray", bytesToList(new byte[]{(byte) 0xAA, (byte) 0xBB, (byte) 0xCC, (byte) 0xDD, (byte) 0xEE})); + assertEquals( expected, actual); + } + // parseBinaryArray @Test public void parseBinaryArray_Test() throws ExecutionException, InterruptedException { @@ -1697,6 +1715,62 @@ class TbelInvokeDocsIoTest extends AbstractTbelInvokeTest { assertEquals(4.2d, actual); } + // Bitwise Operations + @Test + public void bitwiseOperationsBoolean_Test() throws ExecutionException, InterruptedException { + msgStr = "{}"; + decoderStr = """ + var x = true; + var y = false; + return { + "andResult": x & y, + "orResult": x | y, + "xorResult": x ^ y, + "leftShift": x << y, + "rightShift": x >> y, + "rightUnShift": x >>> y + } + """; + LinkedHashMap expected = new LinkedHashMap<>(); + expected.put("andResult", 0); + expected.put("orResult", 1); + expected.put("xorResult", 1); + expected.put("leftShift", 1); + expected.put("rightShift", 1); + expected.put("rightUnShift", 1); + Object actual = invokeScript(evalScript(decoderStr), msgStr); + assertEquals(expected, actual); + } + @Test + public void bitwiseOperationsMix_Test() throws ExecutionException, InterruptedException { + msgStr = "{}"; + decoderStr = """ + var x = true; + var y = false; + var i = 10; + var b = -14; + var l = 9223372036854775807; + return { + "andResult": x & b, + "orResult": i | y, + "xorResult": i ^ l, + "leftShift": l << i, + "rightShift": l >> b, + "rightUnShift": i >>> x + } + """; + LinkedHashMap expected = new LinkedHashMap<>(); + expected.put("andResult", 0); + expected.put("orResult", 10); + expected.put("xorResult", 9223372036854775797L); + expected.put("leftShift", -1024L); + expected.put("rightShift", 8191L); + expected.put("rightUnShift", 5); + Object actual = invokeScript(evalScript(decoderStr), msgStr); + assertEquals(expected, actual); + } + + // base64 @Test public void base64_Test() throws ExecutionException, InterruptedException { @@ -1705,13 +1779,15 @@ class TbelInvokeDocsIoTest extends AbstractTbelInvokeTest { return { "base64ToHex": base64ToHex("Kkk="), "bytesToBase64": bytesToBase64([42, 73]), - "base64ToBytes": base64ToBytes("Kkk=") + "base64ToBytes": base64ToBytes("Kkk="), + "base64ToBytesList": base64ToBytesList("AQIDBAU=") } """; LinkedHashMap expected = new LinkedHashMap<>(); expected.put("base64ToHex", "2A49"); expected.put("bytesToBase64", "Kkk="); expected.put("base64ToBytes", bytesToList(new byte[]{42, 73})); + expected.put("base64ToBytesList", bytesToList(new byte[]{1, 2, 3, 4, 5})); Object actual = invokeScript(evalScript(decoderStr), msgStr); assertEquals(expected, actual); } diff --git a/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeServiceTest.java b/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeServiceTest.java index 071fdf77fc..62170236e0 100644 --- a/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeServiceTest.java @@ -22,9 +22,9 @@ import org.junit.Ignore; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Value; import org.springframework.test.context.TestPropertySource; +import org.springframework.test.util.ReflectionTestUtils; import org.thingsboard.common.util.JacksonUtil; import org.thingsboard.script.api.tbel.TbelScript; -import org.thingsboard.server.dao.service.DaoSqlTest; import java.io.Serializable; import java.util.ArrayList; @@ -38,7 +38,6 @@ import java.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -@DaoSqlTest @TestPropertySource(properties = { "tbel.max_script_body_size=100", "tbel.max_total_args_size=50", @@ -120,9 +119,9 @@ class TbelInvokeServiceTest extends AbstractTbelInvokeTest { scriptsIds.add(scriptId); } - Map scriptIdToHash = getFieldValue(invokeService, "scriptIdToHash"); - Map scriptMap = getFieldValue(invokeService, "scriptMap"); - Cache compiledScriptsCache = getFieldValue(invokeService, "compiledScriptsCache"); + Map scriptIdToHash = (Map) ReflectionTestUtils.getField(invokeService, "scriptIdToHash"); + Map scriptMap = (Map) ReflectionTestUtils.getField(invokeService, "scriptMap"); + Cache compiledScriptsCache = (Cache) ReflectionTestUtils.getField(invokeService, "compiledScriptsCache"); String scriptHash = scriptIdToHash.get(scriptsIds.get(0)); @@ -140,9 +139,9 @@ class TbelInvokeServiceTest extends AbstractTbelInvokeTest { scriptsIds.add(scriptId); } - Map scriptIdToHash = getFieldValue(invokeService, "scriptIdToHash"); - Map scriptMap = getFieldValue(invokeService, "scriptMap"); - Cache compiledScriptsCache = getFieldValue(invokeService, "compiledScriptsCache"); + Map scriptIdToHash = (Map) ReflectionTestUtils.getField(invokeService, "scriptIdToHash"); + Map scriptMap = (Map) ReflectionTestUtils.getField(invokeService, "scriptMap"); + Cache compiledScriptsCache = (Cache) ReflectionTestUtils.getField(invokeService, "compiledScriptsCache"); String scriptHash = scriptIdToHash.get(scriptsIds.get(0)); for (int i = 0; i < 9; i++) { @@ -163,8 +162,8 @@ class TbelInvokeServiceTest extends AbstractTbelInvokeTest { @Ignore("This test is based on assumption that Caffeine cache is LRU based but in fact it is based on " + "Tiny LFU which is the cause that the tests fail sometime: https://arxiv.org/pdf/1512.00727.pdf") public void whenCompiledScriptsCacheIsTooBig_thenRemoveRarelyUsedScripts() throws Exception { - Map scriptIdToHash = getFieldValue(invokeService, "scriptIdToHash"); - Cache compiledScriptsCache = getFieldValue(invokeService, "compiledScriptsCache"); + Map scriptIdToHash = (Map) ReflectionTestUtils.getField(invokeService, "scriptIdToHash"); + Cache compiledScriptsCache = (Cache) ReflectionTestUtils.getField(invokeService, "compiledScriptsCache"); List scriptsIds = new ArrayList<>(); for (int i = 0; i < 110; i++) { // tbel.compiled_scripts_cache_size = 100 diff --git a/application/src/test/java/org/thingsboard/server/service/ttl/AlarmsCleanUpServiceTest.java b/application/src/test/java/org/thingsboard/server/service/ttl/AlarmsCleanUpServiceTest.java index 7b9cb0ed4d..6206523d4d 100644 --- a/application/src/test/java/org/thingsboard/server/service/ttl/AlarmsCleanUpServiceTest.java +++ b/application/src/test/java/org/thingsboard/server/service/ttl/AlarmsCleanUpServiceTest.java @@ -15,7 +15,7 @@ */ package org.thingsboard.server.service.ttl; -import org.junit.BeforeClass; +import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.slf4j.Logger; @@ -40,6 +40,7 @@ import java.util.concurrent.TimeUnit; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.startsWith; +import static org.mockito.BDDMockito.willReturn; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -49,19 +50,19 @@ import static org.mockito.Mockito.verify; }) public class AlarmsCleanUpServiceTest extends AbstractControllerTest { - @Autowired + @SpyBean private AlarmsCleanUpService alarmsCleanUpService; @SpyBean private AlarmService alarmService; @Autowired private AlarmDao alarmDao; - private static Logger cleanUpServiceLogger; + private Logger cleanUpServiceLoggerSpy; - @BeforeClass - public static void before() throws Exception { - cleanUpServiceLogger = Mockito.spy(LoggerFactory.getLogger(AlarmsCleanUpService.class)); - setStaticFinalFieldValue(AlarmsCleanUpService.class, "log", cleanUpServiceLogger); + @Before + public void beforeEach() throws Exception { + cleanUpServiceLoggerSpy = Mockito.spy(LoggerFactory.getLogger(AlarmsCleanUpService.class)); + willReturn(cleanUpServiceLoggerSpy).given(alarmsCleanUpService).getLogger(); } @Test @@ -110,7 +111,7 @@ public class AlarmsCleanUpServiceTest extends AbstractControllerTest { verify(alarmService, never()).delAlarm(eq(tenantId), eq(freshAlarm), eq(false)); } - verify(cleanUpServiceLogger).info(startsWith("Removed {} outdated alarm"), eq((long) count), eq(tenantId), any()); + verify(cleanUpServiceLoggerSpy).info(startsWith("Removed {} outdated alarm"), eq((long) count), eq(tenantId), any()); } } diff --git a/application/src/test/java/org/thingsboard/server/transport/coap/AbstractCoapIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/coap/AbstractCoapIntegrationTest.java index 33c83b5623..2b0d87527b 100644 --- a/application/src/test/java/org/thingsboard/server/transport/coap/AbstractCoapIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/coap/AbstractCoapIntegrationTest.java @@ -54,6 +54,14 @@ public abstract class AbstractCoapIntegrationTest extends AbstractTransportInteg protected final byte[] EMPTY_PAYLOAD = new byte[0]; protected CoapTestClient client; + protected static final String PAYLOAD_VALUES_STR = "{\"key1\":\"value1\", \"key2\":true, \"key3\": 3.0, \"key4\": 4," + + " \"key5\": {\"someNumber\": 42, \"someArray\": [1,2,3], \"someNestedObject\": {\"key\": \"value\"}}}"; + protected static final String PAYLOAD_VALUES_STR_01 = "{\"key2\":\"value2\", \"key3\":false, \"key4\": 4.0, \"key5\": 5," + + " \"key6\": {\"someNumber_02\": 52, \"someArray_02\": [1,2,3,4], \"someNestedObject_02\": {\"key_02\": \"value_02\"}}}"; + + protected void processBeforeTest() throws Exception { + loginTenantAdmin(); + } protected void processAfterTest() throws Exception { if (client != null) { diff --git a/application/src/test/java/org/thingsboard/server/transport/coap/client/CoapClientIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/coap/client/CoapClientIntegrationTest.java index 112d3e6aa5..534c83bd40 100644 --- a/application/src/test/java/org/thingsboard/server/transport/coap/client/CoapClientIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/coap/client/CoapClientIntegrationTest.java @@ -63,8 +63,6 @@ import static org.thingsboard.server.common.data.query.EntityKeyType.SHARED_ATTR @DaoSqlTest public class CoapClientIntegrationTest extends AbstractCoapIntegrationTest { - private static final String PAYLOAD_VALUES_STR = "{\"key1\":\"value1\", \"key2\":true, \"key3\": 3.0, \"key4\": 4," + - " \"key5\": {\"someNumber\": 42, \"someArray\": [1,2,3], \"someNestedObject\": {\"key\": \"value\"}}}"; private static final List EXPECTED_KEYS = Arrays.asList("key1", "key2", "key3", "key4", "key5"); private static final String DEVICE_RESPONSE = "{\"value1\":\"A\",\"value2\":\"B\"}"; diff --git a/application/src/test/java/org/thingsboard/server/transport/coap/security/AbstractCoapSecurityIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/coap/security/AbstractCoapSecurityIntegrationTest.java new file mode 100644 index 0000000000..8413c6f32b --- /dev/null +++ b/application/src/test/java/org/thingsboard/server/transport/coap/security/AbstractCoapSecurityIntegrationTest.java @@ -0,0 +1,291 @@ +/** + * Copyright © 2016-2024 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.transport.coap.security; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JsonNode; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.californium.core.CoapResponse; +import org.eclipse.californium.core.coap.CoAP; +import org.junit.Assert; +import org.springframework.test.context.TestPropertySource; +import org.thingsboard.common.util.JacksonUtil; +import org.thingsboard.server.common.data.CoapDeviceType; +import org.thingsboard.server.common.data.Device; +import org.thingsboard.server.common.data.DeviceProfile; +import org.thingsboard.server.common.data.SaveDeviceWithCredentialsRequest; +import org.thingsboard.server.common.data.TransportPayloadType; +import org.thingsboard.server.common.data.id.DeviceId; +import org.thingsboard.server.common.data.id.DeviceProfileId; +import org.thingsboard.server.common.data.security.DeviceCredentials; +import org.thingsboard.server.common.data.security.DeviceCredentialsType; +import org.thingsboard.server.common.msg.session.FeatureType; +import org.thingsboard.server.transport.coap.AbstractCoapIntegrationTest; +import org.thingsboard.server.transport.coap.x509.CertPrivateKey; +import org.thingsboard.server.transport.coap.x509.CoapClientX509Test; +import org.thingsboard.server.transport.coap.CoapTestConfigProperties; + +import java.io.IOException; +import java.io.InputStream; +import java.net.ServerSocket; +import java.security.GeneralSecurityException; +import java.security.KeyStore; +import java.security.PrivateKey; +import java.security.cert.X509Certificate; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.TimeUnit; + +import static org.awaitility.Awaitility.await; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@Slf4j +@TestPropertySource(properties = { + "coap.enabled=true", + "coap.dtls.enabled=true", + "coap.dtls.credentials.pem.cert_file=coap/credentials/server/cert.pem", + "device.connectivity.coaps.enabled=true", + "service.integrations.supported=ALL", + "transport.coap.enabled=true", +}) +public abstract class AbstractCoapSecurityIntegrationTest extends AbstractCoapIntegrationTest { + private static final String COAPS_BASE_URL = "coaps://localhost:5684/api/v1/"; + protected final String CREDENTIALS_PATH = "coap/credentials/"; + protected final String CREDENTIALS_PATH_CLIENT = CREDENTIALS_PATH + "client/"; + protected final String CREDENTIALS_PATH_CLIENT_CERT_PEM = CREDENTIALS_PATH_CLIENT + "cert.pem"; + protected final String CREDENTIALS_PATH_CLIENT_KEY_PEM = CREDENTIALS_PATH_CLIENT + "key.pem"; + protected final X509Certificate clientX509CertTrustNo; // client certificate signed by intermediate, rootCA with a good CN ("host name") + protected final PrivateKey clientPrivateKeyFromCertTrustNo; + + protected static final String CLIENT_JKS_FOR_TEST = "coapclientTest"; + protected static final String CLIENT_STORE_PWD = "client_ks_password"; + protected static final String CLIENT_ALIAS_CERT_TRUST_NO = "client_alias_trust_no"; + + protected AbstractCoapSecurityIntegrationTest() { + + try { + // Get certificates from key store + char[] clientKeyStorePwd = CLIENT_STORE_PWD.toCharArray(); + KeyStore clientKeyStore = KeyStore.getInstance(KeyStore.getDefaultType()); + try (InputStream clientKeyStoreFile = + this.getClass().getClassLoader(). + getResourceAsStream(CREDENTIALS_PATH + CLIENT_JKS_FOR_TEST + ".jks")) { + clientKeyStore.load(clientKeyStoreFile, clientKeyStorePwd); + } + // No trust + clientPrivateKeyFromCertTrustNo = (PrivateKey) clientKeyStore.getKey(CLIENT_ALIAS_CERT_TRUST_NO, clientKeyStorePwd); + clientX509CertTrustNo = (X509Certificate) clientKeyStore.getCertificate(CLIENT_ALIAS_CERT_TRUST_NO); + } catch (GeneralSecurityException | IOException e) { + throw new RuntimeException(e); + } + } + + protected Device createDeviceWithX509(String deviceName, DeviceProfileId deviceProfileId, X509Certificate clientX509Cert) throws Exception { + Device device = new Device(); + device.setName(deviceName); + device.setType(deviceName); + device.setDeviceProfileId(deviceProfileId); + + DeviceCredentials deviceCredentials = new DeviceCredentials(); + deviceCredentials.setCredentialsType(DeviceCredentialsType.X509_CERTIFICATE); + String pemFormatCert = CertPrivateKey.convertCertToPEM(clientX509Cert); + deviceCredentials.setCredentialsValue(pemFormatCert); + + SaveDeviceWithCredentialsRequest saveRequest = new SaveDeviceWithCredentialsRequest(device, deviceCredentials); + Device deviceX509 = readResponse(doPost("/api/device-with-credentials", saveRequest) + .andExpect(status().isOk()), Device.class); + DeviceCredentials savedDeviceCredentials = + doGet("/api/device/" + deviceX509.getId().getId() + "/credentials", DeviceCredentials.class); + Assert.assertNotNull(savedDeviceCredentials); + Assert.assertNotNull(savedDeviceCredentials.getId()); + Assert.assertEquals(deviceX509.getId(), savedDeviceCredentials.getDeviceId()); + Assert.assertEquals(DeviceCredentialsType.X509_CERTIFICATE, savedDeviceCredentials.getCredentialsType()); + accessToken = savedDeviceCredentials.getCredentialsId(); + assertNotNull(accessToken); + return deviceX509; + } + + protected void clientX509FromJksUpdateAttributesTest() throws Exception { + CertPrivateKey certPrivateKey = new CertPrivateKey(clientX509CertTrustNo, clientPrivateKeyFromCertTrustNo); + CoapTestConfigProperties configProperties = CoapTestConfigProperties.builder() + .coapDeviceType(CoapDeviceType.DEFAULT) + .transportPayloadType(TransportPayloadType.JSON) + .build(); + DeviceProfile deviceProfile = createCoapDeviceProfile(configProperties); + assertNotNull(deviceProfile); + CoapClientX509Test clientX509 = clientX509UpdateTest(FeatureType.ATTRIBUTES, certPrivateKey, + "CoapX509TrustNo_" + FeatureType.ATTRIBUTES.name(), deviceProfile.getId(), null); + clientX509.disconnect(); + } + + protected void clientX509FromPathUpdateFeatureTypeTest(FeatureType featureType) throws Exception { + CertPrivateKey certPrivateKey = new CertPrivateKey(CREDENTIALS_PATH_CLIENT_CERT_PEM, CREDENTIALS_PATH_CLIENT_KEY_PEM); + CoapTestConfigProperties configProperties = CoapTestConfigProperties.builder() + .coapDeviceType(CoapDeviceType.DEFAULT) + .transportPayloadType(TransportPayloadType.JSON) + .build(); + DeviceProfile deviceProfile = createCoapDeviceProfile(configProperties); + assertNotNull(deviceProfile); + CoapClientX509Test clientX509 = clientX509UpdateTest(featureType, certPrivateKey, + "CoapX509TrustNo_" + featureType.name(), deviceProfile.getId(), null); + clientX509.disconnect(); + } + protected void twoClientWithSamePortX509FromPathConnectTest() throws Exception { + CoapTestConfigProperties configProperties = CoapTestConfigProperties.builder() + .coapDeviceType(CoapDeviceType.DEFAULT) + .transportPayloadType(TransportPayloadType.JSON) + .build(); + DeviceProfile deviceProfile = createCoapDeviceProfile(configProperties); + CertPrivateKey certPrivateKey = new CertPrivateKey(CREDENTIALS_PATH_CLIENT_CERT_PEM, CREDENTIALS_PATH_CLIENT_KEY_PEM); + CertPrivateKey certPrivateKey_01 = new CertPrivateKey(CREDENTIALS_PATH_CLIENT + "cert_01.pem", + CREDENTIALS_PATH_CLIENT + "key_01.pem"); + Integer fixedPort = getFreePort(); + CoapClientX509Test clientX509 = clientX509UpdateTest(FeatureType.ATTRIBUTES, certPrivateKey, + "CoapX509TrustNo_" + FeatureType.TELEMETRY.name(), deviceProfile.getId(), fixedPort); + clientX509.disconnect(); + await("Need to make port " + fixedPort + " free") + .atMost(40, TimeUnit.SECONDS) + .until(() -> isPortAvailable(fixedPort)); + CoapClientX509Test clientX509_01 = clientX509UpdateTest(FeatureType.ATTRIBUTES, certPrivateKey_01, + "CoapX509TrustNo_" + FeatureType.TELEMETRY.name() + "_01", deviceProfile.getId(), + fixedPort, PAYLOAD_VALUES_STR_01); + clientX509_01.disconnect(); + } + + private CoapClientX509Test clientX509UpdateTest(FeatureType featureType, CertPrivateKey certPrivateKey, + String deviceName, DeviceProfileId deviceProfileId, Integer fixedPort) throws Exception { + return clientX509UpdateTest(featureType, certPrivateKey, deviceName, deviceProfileId, fixedPort, null); + } + + private CoapClientX509Test clientX509UpdateTest(FeatureType featureType, CertPrivateKey certPrivateKey, + String deviceName, DeviceProfileId deviceProfileId, Integer fixedPort, String payload) throws Exception { + String payloadValuesStr = payload == null ? PAYLOAD_VALUES_STR : payload; + Device deviceX509 = createDeviceWithX509(deviceName, deviceProfileId, certPrivateKey.getCert()); + CoapClientX509Test clientX509 = new CoapClientX509Test(certPrivateKey, featureType, COAPS_BASE_URL, fixedPort); + CoapResponse coapResponseX509 = clientX509.postMethod(payloadValuesStr); + assertNotNull(coapResponseX509); + assertEquals(CoAP.ResponseCode.CREATED, coapResponseX509.getCode()); + + if (FeatureType.ATTRIBUTES.equals(featureType)) { + DeviceId deviceId = deviceX509.getId(); + JsonNode expectedNode = JacksonUtil.toJsonNode(payloadValuesStr); + List expectedKeys = getKeysFromNode(expectedNode); + List actualKeys = getActualKeysList(deviceId, expectedKeys, "attributes/CLIENT_SCOPE"); + assertNotNull(actualKeys); + + Set actualKeySet = new HashSet<>(actualKeys); + Set expectedKeySet = new HashSet<>(expectedKeys); + assertEquals(expectedKeySet, actualKeySet); + + String getAttributesValuesUrl = getAttributesValuesUrl(deviceId, actualKeySet, "attributes/CLIENT_SCOPE"); + List> actualValues = doGetAsyncTyped(getAttributesValuesUrl, new TypeReference<>() { + }); + assertValuesList(actualValues, expectedNode); + } + return clientX509; + } + + private List getActualKeysList(DeviceId deviceId, List expectedKeys, String apiSuffix) throws Exception { + long start = System.currentTimeMillis(); + long end = System.currentTimeMillis() + 5000; + + List actualKeys = null; + while (start <= end) { + actualKeys = doGetAsyncTyped("/api/plugins/telemetry/DEVICE/" + deviceId + "/keys/" + apiSuffix, new TypeReference<>() { + }); + if (actualKeys.size() == expectedKeys.size()) { + break; + } + Thread.sleep(100); + start += 100; + } + return actualKeys; + } + + private String getAttributesValuesUrl(DeviceId deviceId, Set actualKeySet, String apiSuffix) { + return "/api/plugins/telemetry/DEVICE/" + deviceId + "/values/" + apiSuffix + "?keys=" + String.join(",", actualKeySet); + } + + private List getKeysFromNode(JsonNode jNode) { + List jKeys = new ArrayList<>(); + Iterator fieldNames = jNode.fieldNames(); + while (fieldNames.hasNext()) { + jKeys.add(fieldNames.next()); + } + return jKeys; + } + + protected void assertValuesList(List> actualValues, JsonNode expectedValues) { + assertTrue(actualValues.size() > 0); + assertEquals(expectedValues.size(), actualValues.size()); + for (Map map : actualValues) { + String key = (String) map.get("key"); + Object actualValue = map.get("value"); + assertTrue(expectedValues.has(key)); + JsonNode expectedValue = expectedValues.get(key); + assertExpectedActualValue(expectedValue, actualValue); + } + } + + protected void assertExpectedActualValue(JsonNode expectedValue, Object actualValue) { + switch (expectedValue.getNodeType()) { + case STRING: + assertEquals(expectedValue.asText(), actualValue); + break; + case NUMBER: + if (expectedValue.isInt()) { + assertEquals(expectedValue.asInt(), actualValue); + } else if (expectedValue.isLong()) { + assertEquals(expectedValue.asLong(), actualValue); + } else if (expectedValue.isFloat() || expectedValue.isDouble()) { + assertEquals(expectedValue.asDouble(), actualValue); + } + break; + case BOOLEAN: + assertEquals(expectedValue.asBoolean(), actualValue); + break; + case ARRAY: + case OBJECT: + expectedValue.toString().equals(JacksonUtil.toString(actualValue)); + break; + default: + break; + } + } + + private static int getFreePort() throws IOException { + try (ServerSocket socket = new ServerSocket(0)) { + return socket.getLocalPort(); + } + } + + private static boolean isPortAvailable(int port) { + try (ServerSocket serverSocket = new ServerSocket(port)) { + serverSocket.setReuseAddress(true); + return true; + } catch (IOException e) { + return false; + } + } +} + diff --git a/application/src/test/java/org/thingsboard/server/transport/coap/security/sql/CoapClientX509SecurityJksIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/coap/security/sql/CoapClientX509SecurityJksIntegrationTest.java new file mode 100644 index 0000000000..12f373948b --- /dev/null +++ b/application/src/test/java/org/thingsboard/server/transport/coap/security/sql/CoapClientX509SecurityJksIntegrationTest.java @@ -0,0 +1,44 @@ +/** + * Copyright © 2016-2024 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.transport.coap.security.sql; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Before; +import org.junit.Test; +import org.springframework.test.context.TestPropertySource; +import org.thingsboard.server.dao.service.DaoSqlTest; +import org.thingsboard.server.transport.coap.security.AbstractCoapSecurityIntegrationTest; + +@Slf4j +@DaoSqlTest +@TestPropertySource(properties = { + "coap.dtls.credentials.type=KEYSTORE", + "coap.dtls.credentials.keystore.store_file=coap/credentials/coapserverTest.jks", + "coap.dtls.credentials.keystore.key_password=server_ks_password", + "coap.dtls.credentials.keystore.key_alias=server", +}) +public class CoapClientX509SecurityJksIntegrationTest extends AbstractCoapSecurityIntegrationTest { + + @Before + public void beforeTest() throws Exception { + processBeforeTest(); + } + + @Test + public void testX509NoTrustFromJksConnectCoapSuccessUpdateAttributesSuccess() throws Exception { + clientX509FromJksUpdateAttributesTest(); + } +} diff --git a/application/src/test/java/org/thingsboard/server/transport/coap/security/sql/CoapClientX509SecurityPemIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/coap/security/sql/CoapClientX509SecurityPemIntegrationTest.java new file mode 100644 index 0000000000..9e65943622 --- /dev/null +++ b/application/src/test/java/org/thingsboard/server/transport/coap/security/sql/CoapClientX509SecurityPemIntegrationTest.java @@ -0,0 +1,44 @@ +/** + * Copyright © 2016-2024 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.transport.coap.security.sql; + +import lombok.extern.slf4j.Slf4j; +import org.junit.Before; +import org.junit.Test; +import org.thingsboard.server.common.msg.session.FeatureType; +import org.thingsboard.server.dao.service.DaoSqlTest; +import org.thingsboard.server.transport.coap.security.AbstractCoapSecurityIntegrationTest; + +@Slf4j +@DaoSqlTest +public class CoapClientX509SecurityPemIntegrationTest extends AbstractCoapSecurityIntegrationTest { + @Before + public void beforeTest() throws Exception { + processBeforeTest(); + } + + @Test + public void testX509NoTrustFromPathConnectCoapSuccessUpdateAttributesSuccess() throws Exception { + clientX509FromPathUpdateFeatureTypeTest(FeatureType.ATTRIBUTES); + } + @Test + public void testX509NoTrustFromPathConnectCoapSuccessUpdateTelemetrySuccess() throws Exception { + clientX509FromPathUpdateFeatureTypeTest(FeatureType.TELEMETRY); + } @Test + public void testTwoDevicesWithSamePortX509NoTrustFromPathConnectCoapSuccess() throws Exception { + twoClientWithSamePortX509FromPathConnectTest(); + } +} \ No newline at end of file diff --git a/application/src/test/java/org/thingsboard/server/transport/coap/telemetry/attributes/CoapAttributesIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/coap/telemetry/attributes/CoapAttributesIntegrationTest.java index 292fae3456..4c8b9094f0 100644 --- a/application/src/test/java/org/thingsboard/server/transport/coap/telemetry/attributes/CoapAttributesIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/coap/telemetry/attributes/CoapAttributesIntegrationTest.java @@ -44,9 +44,6 @@ import static org.junit.Assert.assertTrue; @DaoSqlTest public class CoapAttributesIntegrationTest extends AbstractCoapIntegrationTest { - private static final String PAYLOAD_VALUES_STR = "{\"key1\":\"value1\", \"key2\":true, \"key3\": 3.0, \"key4\": 4," + - " \"key5\": {\"someNumber\": 42, \"someArray\": [1,2,3], \"someNestedObject\": {\"key\": \"value\"}}}"; - @Before public void beforeTest() throws Exception { CoapTestConfigProperties configProperties = CoapTestConfigProperties.builder() diff --git a/application/src/test/java/org/thingsboard/server/transport/coap/telemetry/timeseries/AbstractCoapTimeseriesIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/coap/telemetry/timeseries/AbstractCoapTimeseriesIntegrationTest.java index b02a97bbfa..8cbff6c105 100644 --- a/application/src/test/java/org/thingsboard/server/transport/coap/telemetry/timeseries/AbstractCoapTimeseriesIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/coap/telemetry/timeseries/AbstractCoapTimeseriesIntegrationTest.java @@ -40,9 +40,6 @@ import static org.junit.Assert.assertNotNull; @Slf4j public abstract class AbstractCoapTimeseriesIntegrationTest extends AbstractCoapIntegrationTest { - private static final String PAYLOAD_VALUES_STR = "{\"key1\":\"value1\", \"key2\":true, \"key3\": 3.0, \"key4\": 4," + - " \"key5\": {\"someNumber\": 42, \"someArray\": [1,2,3], \"someNestedObject\": {\"key\": \"value\"}}}"; - @Before public void beforeTest() throws Exception { CoapTestConfigProperties configProperties = CoapTestConfigProperties.builder() diff --git a/application/src/test/java/org/thingsboard/server/transport/coap/x509/CertPrivateKey.java b/application/src/test/java/org/thingsboard/server/transport/coap/x509/CertPrivateKey.java new file mode 100644 index 0000000000..8fce5b7e79 --- /dev/null +++ b/application/src/test/java/org/thingsboard/server/transport/coap/x509/CertPrivateKey.java @@ -0,0 +1,82 @@ +/** + * Copyright © 2016-2024 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.transport.coap.x509; + +import org.apache.commons.io.FileUtils; +import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPrivateKey; +import org.thingsboard.common.util.SslUtil; +import java.io.File; +import java.io.IOException; +import java.security.KeyFactory; +import java.security.PrivateKey; +import java.security.cert.X509Certificate; +import java.security.interfaces.ECPrivateKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.util.Base64; +import java.util.List; + +public class CertPrivateKey { + private final X509Certificate cert; + private PrivateKey privateKey; + + public CertPrivateKey(String certFilePathPem, String keyFilePathPem) throws Exception { + List certs = SslUtil.readCertFile(fileRead(certFilePathPem)); + this.cert = certs.get(0); + this.privateKey = SslUtil.readPrivateKey(fileRead(keyFilePathPem), null); + if (this.privateKey instanceof BCECPrivateKey) { + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(this.privateKey.getEncoded()); + KeyFactory keyFactory = KeyFactory.getInstance("EC"); + this.privateKey = keyFactory.generatePrivate(keySpec); + } + if (!(this.privateKey instanceof ECPrivateKey)) { + throw new RuntimeException("Private key generation must be of type java.security.interfaces.ECPrivateKey, which is used in the standard Java API!"); + } + } + + public CertPrivateKey(X509Certificate cert, PrivateKey privateKey) { + this.cert = cert; + this.privateKey = privateKey; + } + + public X509Certificate getCert() { + return this.cert; + } + + public PrivateKey getPrivateKey() { + return this.privateKey; + } + + private String fileRead(String fileName) throws IOException { + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource(fileName).getFile()); + return FileUtils.readFileToString(file, "UTF-8"); + } + + public static String convertCertToPEM(X509Certificate certificate) throws Exception { + StringBuilder pemBuilder = new StringBuilder(); + pemBuilder.append("-----BEGIN CERTIFICATE-----\n"); + // Copy cert to Base64 + String base64EncodedCert = Base64.getEncoder().encodeToString(certificate.getEncoded()); + int index = 0; + while (index < base64EncodedCert.length()) { + pemBuilder.append(base64EncodedCert, index, Math.min(index + 64, base64EncodedCert.length())); + pemBuilder.append("\n"); + index += 64; + } + pemBuilder.append("-----END CERTIFICATE-----\n"); + return pemBuilder.toString(); + } +} \ No newline at end of file diff --git a/application/src/test/java/org/thingsboard/server/transport/coap/x509/CoapClientX509Test.java b/application/src/test/java/org/thingsboard/server/transport/coap/x509/CoapClientX509Test.java new file mode 100644 index 0000000000..d13380b19c --- /dev/null +++ b/application/src/test/java/org/thingsboard/server/transport/coap/x509/CoapClientX509Test.java @@ -0,0 +1,239 @@ +/** + * Copyright © 2016-2024 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.transport.coap.x509; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; +import org.eclipse.californium.core.CoapClient; +import org.eclipse.californium.core.CoapHandler; +import org.eclipse.californium.core.CoapObserveRelation; +import org.eclipse.californium.core.CoapResponse; +import org.eclipse.californium.core.coap.CoAP; +import org.eclipse.californium.core.coap.MediaTypeRegistry; +import org.eclipse.californium.core.coap.Request; +import org.eclipse.californium.core.config.CoapConfig; +import org.eclipse.californium.core.network.CoapEndpoint; +import org.eclipse.californium.elements.config.Configuration; +import org.eclipse.californium.elements.config.ValueException; +import org.eclipse.californium.elements.exception.ConnectorException; +import org.eclipse.californium.scandium.DTLSConnector; +import org.eclipse.californium.scandium.config.DtlsConfig.SignatureAndHashAlgorithmsDefinition; +import org.eclipse.californium.scandium.config.DtlsConnectorConfig; +import org.eclipse.californium.scandium.dtls.CertificateType; +import org.eclipse.californium.scandium.dtls.SignatureAndHashAlgorithm; +import org.eclipse.californium.scandium.dtls.SignatureAndHashAlgorithm.HashAlgorithm; +import org.eclipse.californium.scandium.dtls.SignatureAndHashAlgorithm.SignatureAlgorithm; +import org.eclipse.californium.scandium.dtls.cipher.CipherSuite; +import org.eclipse.californium.scandium.dtls.x509.CertificateProvider; +import org.eclipse.californium.scandium.dtls.x509.SingleCertificateProvider; +import org.thingsboard.server.common.msg.session.FeatureType; +import org.thingsboard.server.transport.coap.CoapTestCallback; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.security.cert.X509Certificate; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import static java.util.concurrent.TimeUnit.MILLISECONDS; +import static org.eclipse.californium.core.config.CoapConfig.DEFAULT_BLOCKWISE_STATUS_LIFETIME_IN_SECONDS; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_AUTO_HANDSHAKE_TIMEOUT; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_CIPHER_SUITES; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_MAX_FRAGMENTED_HANDSHAKE_MESSAGE_LENGTH; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_MAX_PENDING_HANDSHAKE_RESULT_JOBS; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_MAX_RETRANSMISSIONS; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_MAX_RETRANSMISSION_TIMEOUT; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_RECEIVE_BUFFER_SIZE; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_RECOMMENDED_CIPHER_SUITES_ONLY; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_RETRANSMISSION_TIMEOUT; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_ROLE; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_SIGNATURE_AND_HASH_ALGORITHMS; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_USE_HELLO_VERIFY_REQUEST; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_USE_MULTI_HANDSHAKE_MESSAGE_RECORDS; +import static org.eclipse.californium.scandium.config.DtlsConfig.DTLS_VERIFY_SERVER_CERTIFICATES_SUBJECT; +import static org.eclipse.californium.scandium.config.DtlsConfig.DtlsRole.CLIENT_ONLY; +import static org.eclipse.californium.scandium.config.DtlsConfig.MODULE; +import static org.eclipse.californium.scandium.dtls.SignatureAndHashAlgorithm.SHA256_WITH_ECDSA; +import static org.eclipse.californium.scandium.dtls.SignatureAndHashAlgorithm.SHA256_WITH_RSA; +import static org.eclipse.californium.scandium.dtls.SignatureAndHashAlgorithm.SHA384_WITH_ECDSA; + +@Slf4j +public class CoapClientX509Test { + + private static final long CLIENT_REQUEST_TIMEOUT = 60000L; + + private final CoapClient clientX509; + private final DTLSConnector dtlsConnector; + private final Configuration config; + private final CertPrivateKey certPrivateKey; + private final String coapsBaseUrl; + + @Getter + private CoAP.Type type = CoAP.Type.CON; + + public CoapClientX509Test(CertPrivateKey certPrivateKey, FeatureType featureType, String coapsBaseUrl, Integer fixedPort) { + this.certPrivateKey = certPrivateKey; + this.coapsBaseUrl = coapsBaseUrl; + this.config = createConfiguration(); + this.dtlsConnector = createDTLSConnector(fixedPort); + this.clientX509 = createClient(getFeatureTokenUrl(featureType)); + } + public void disconnect() { + if (clientX509 != null) { + clientX509.shutdown(); + } + } + + public CoapResponse postMethod(String requestBody) throws ConnectorException, IOException { + return this.postMethod(requestBody.getBytes()); + } + + public CoapResponse postMethod(byte[] requestBodyBytes) throws ConnectorException, IOException { + return clientX509.setTimeout(CLIENT_REQUEST_TIMEOUT).post(requestBodyBytes, MediaTypeRegistry.APPLICATION_JSON); + } + + public void postMethod(CoapHandler handler, String payload, int format) { + clientX509.setTimeout(CLIENT_REQUEST_TIMEOUT).post(handler, payload, format); + } + + public void postMethod(CoapHandler handler, byte[] payload) { + clientX509.setTimeout(CLIENT_REQUEST_TIMEOUT).post(handler, payload, MediaTypeRegistry.APPLICATION_JSON); + } + public void postMethod(CoapHandler handler, byte[] payload, int format) { + clientX509.setTimeout(CLIENT_REQUEST_TIMEOUT).post(handler, payload, format); + } + + public CoapResponse getMethod() throws ConnectorException, IOException { + return clientX509.setTimeout(CLIENT_REQUEST_TIMEOUT).get(); + } + + public CoapObserveRelation getObserveRelation(CoapTestCallback callback) { + return getObserveRelation(callback, true); + } + + public CoapObserveRelation getObserveRelation(CoapTestCallback callback, boolean confirmable) { + Request request = Request.newGet().setObserve(); + request.setType(confirmable ? CoAP.Type.CON : CoAP.Type.NON); + return clientX509.observe(request, callback); + } + + public void setURI(String featureTokenUrl) { + if (clientX509 == null) { + throw new RuntimeException("Failed to connect! CoapClient is not initialized!"); + } + clientX509.setURI(featureTokenUrl); + } + + public void setURI(String accessToken, FeatureType featureType) { + if (featureType == null) { + featureType = FeatureType.ATTRIBUTES; + } + setURI(getFeatureTokenUrl(accessToken, featureType)); + } + + public void useCONs() { + if (clientX509 == null) { + throw new RuntimeException("Failed to connect! CoapClient is not initialized!"); + } + type = CoAP.Type.CON; + clientX509.useCONs(); + } + + public void useNONs() { + if (clientX509 == null) { + throw new RuntimeException("Failed to connect! CoapClient is not initialized!"); + } + type = CoAP.Type.NON; + clientX509.useNONs(); + } + + private Configuration createConfiguration() { + Configuration clientCoapConfig = new Configuration(); + clientCoapConfig.set(CoapConfig.BLOCKWISE_STRICT_BLOCK2_OPTION, true); + clientCoapConfig.set(CoapConfig.BLOCKWISE_ENTITY_TOO_LARGE_AUTO_FAILOVER, true); + clientCoapConfig.set(CoapConfig.BLOCKWISE_STATUS_LIFETIME, DEFAULT_BLOCKWISE_STATUS_LIFETIME_IN_SECONDS, TimeUnit.SECONDS); + clientCoapConfig.set(CoapConfig.MAX_RESOURCE_BODY_SIZE, 256 * 1024 * 1024); + clientCoapConfig.set(CoapConfig.RESPONSE_MATCHING, CoapConfig.MatcherMode.RELAXED); + clientCoapConfig.set(CoapConfig.PREFERRED_BLOCK_SIZE, 1024); + clientCoapConfig.set(CoapConfig.MAX_MESSAGE_SIZE, 1024); + clientCoapConfig.set(DTLS_ROLE, CLIENT_ONLY); + clientCoapConfig.set(DTLS_MAX_RETRANSMISSIONS, 2); + clientCoapConfig.set(DTLS_RETRANSMISSION_TIMEOUT, 5000, MILLISECONDS); + clientCoapConfig.set(DTLS_MAX_RETRANSMISSION_TIMEOUT, 60000, TimeUnit.MILLISECONDS); + clientCoapConfig.set(DTLS_USE_HELLO_VERIFY_REQUEST, false); + clientCoapConfig.set(DTLS_VERIFY_SERVER_CERTIFICATES_SUBJECT, false); + clientCoapConfig.set(DTLS_MAX_FRAGMENTED_HANDSHAKE_MESSAGE_LENGTH, 22490); + clientCoapConfig.set(DTLS_AUTO_HANDSHAKE_TIMEOUT, 100000, TimeUnit.MILLISECONDS); + clientCoapConfig.set(DTLS_MAX_PENDING_HANDSHAKE_RESULT_JOBS, 64); + clientCoapConfig.set(DTLS_USE_MULTI_HANDSHAKE_MESSAGE_RECORDS, false); + clientCoapConfig.set(DTLS_RECEIVE_BUFFER_SIZE, 8192); + clientCoapConfig.setTransient(DTLS_RECOMMENDED_CIPHER_SUITES_ONLY); + SignatureAndHashAlgorithmsDefinition algorithmsDefinition = new SignatureAndHashAlgorithmsDefinition(MODULE + "SIGNATURE_AND_HASH_ALGORITHMS", "List of DTLS signature- and hash-algorithms.\nValues e.g SHA256withECDSA or ED25519."); + SignatureAndHashAlgorithm SHA384_WITH_RSA = new SignatureAndHashAlgorithm(HashAlgorithm.SHA384, + SignatureAlgorithm.RSA); + List algorithms = null; + try { + algorithms = algorithmsDefinition.checkValue(Arrays.asList(SHA256_WITH_ECDSA, SHA256_WITH_RSA, SHA384_WITH_ECDSA, SHA384_WITH_RSA)); + } catch (ValueException e) { + throw new RuntimeException(e); + } + clientCoapConfig.setTransient(DTLS_SIGNATURE_AND_HASH_ALGORITHMS); + clientCoapConfig.set(DTLS_SIGNATURE_AND_HASH_ALGORITHMS, algorithms); + clientCoapConfig.setTransient(DTLS_CIPHER_SUITES); + clientCoapConfig.set(DTLS_CIPHER_SUITES, Arrays.asList(CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)); + clientCoapConfig.setTransient(DTLS_VERIFY_SERVER_CERTIFICATES_SUBJECT); + clientCoapConfig.set(DTLS_VERIFY_SERVER_CERTIFICATES_SUBJECT, false); + return clientCoapConfig; + } + + private DTLSConnector createDTLSConnector(Integer fixedPort) { + try { + // Create DTLS config client + DtlsConnectorConfig.Builder configBuilder = new DtlsConnectorConfig.Builder(this.config); + configBuilder.setAdvancedCertificateVerifier(new TbAdvancedCertificateVerifier()); + X509Certificate[] certificateChainClient = new X509Certificate[]{this.certPrivateKey.getCert()}; + CertificateProvider certificateProvider = new SingleCertificateProvider(this.certPrivateKey.getPrivateKey(), certificateChainClient, Collections.singletonList(CertificateType.X_509)); + configBuilder.setCertificateIdentityProvider(certificateProvider); + if (fixedPort != null) { + InetSocketAddress localAddress = new InetSocketAddress("0.0.0.0", fixedPort); + configBuilder.setAddress(localAddress); + configBuilder.setReuseAddress(true); + } + return new DTLSConnector(configBuilder.build()); + } catch (Exception e) { + throw new RuntimeException("", e); + } + } + + private CoapClient createClient(String featureTokenUrl) { + CoapClient client = new CoapClient(featureTokenUrl); + CoapEndpoint.Builder builder = new CoapEndpoint.Builder(); + builder.setConnector(dtlsConnector); + client.setEndpoint(builder.build()); + return client; + } + + public String getFeatureTokenUrl(FeatureType featureType) { + return this.coapsBaseUrl + featureType.name().toLowerCase(); + } + + public String getFeatureTokenUrl(String token, FeatureType featureType) { + return this.coapsBaseUrl + token + "/" + featureType.name().toLowerCase(); + } +} + diff --git a/application/src/test/java/org/thingsboard/server/transport/coap/x509/TbAdvancedCertificateVerifier.java b/application/src/test/java/org/thingsboard/server/transport/coap/x509/TbAdvancedCertificateVerifier.java new file mode 100644 index 0000000000..a08746eefa --- /dev/null +++ b/application/src/test/java/org/thingsboard/server/transport/coap/x509/TbAdvancedCertificateVerifier.java @@ -0,0 +1,129 @@ +/** + * Copyright © 2016-2024 The Thingsboard Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.thingsboard.server.transport.coap.x509; + +import lombok.extern.slf4j.Slf4j; +import org.eclipse.californium.scandium.dtls.AlertMessage; +import org.eclipse.californium.scandium.dtls.AlertMessage.AlertDescription; +import org.eclipse.californium.scandium.dtls.AlertMessage.AlertLevel; +import org.eclipse.californium.scandium.dtls.CertificateMessage; +import org.eclipse.californium.scandium.dtls.CertificateType; +import org.eclipse.californium.scandium.dtls.CertificateVerificationResult; +import org.eclipse.californium.scandium.dtls.ConnectionId; +import org.eclipse.californium.scandium.dtls.HandshakeException; +import org.eclipse.californium.scandium.dtls.HandshakeResultHandler; +import org.eclipse.californium.scandium.dtls.x509.NewAdvancedCertificateVerifier; +import org.eclipse.californium.scandium.util.ServerNames; + +import javax.security.auth.x500.X500Principal; +import java.net.InetSocketAddress; +import java.security.PublicKey; +import java.security.cert.CertPath; +import java.util.Arrays; +import java.util.List; + +@Slf4j +public class TbAdvancedCertificateVerifier implements NewAdvancedCertificateVerifier { + + private HandshakeResultHandler resultHandler; + /** + * Get the list of supported certificate types in order of preference. + * + * @return the list of supported certificate types. + * @since 3.0 (renamed from getSupportedCertificateType) + */ + @Override + public List getSupportedCertificateTypes() { + return Arrays.asList(CertificateType.X_509, CertificateType.RAW_PUBLIC_KEY); + } + + /** + * Validates the certificate provided by the the peer as part of the + * certificate message. + *

+ * If a x509 certificate chain is provided in the certificate message, + * validate the chain and key usage. If a RawPublicKey certificate is + * provided, check, if this public key is trusted. + * + * @param cid connection ID + * @param serverName indicated server names. May be {@code null}, if not + * available or SNI is not enabled. + * @param remotePeer socket address of remote peer + * @param clientUsage indicator to check certificate usage. {@code true}, + * check key usage for client, {@code false} for server. + * @param verifySubject {@code true} to verify the certificate's subjects, + * {@code false}, if not. + * @param truncateCertificatePath {@code true} truncate certificate path at + * a trusted certificate before validation. + * @param message certificate message to be validated + * @return certificate verification result, or {@code null}, if result is + * provided asynchronous. + * @since 3.0 (removed DTLSSession session, added remotePeer and + * verifySubject) + */ + @Override + public CertificateVerificationResult verifyCertificate(ConnectionId cid, ServerNames serverName, InetSocketAddress remotePeer, + boolean clientUsage, boolean verifySubject, boolean truncateCertificatePath, + CertificateMessage message) { + CertPath certChain = message.getCertificateChain(); + CertificateVerificationResult result; + + if (certChain == null) { + PublicKey publicKey = message.getPublicKey(); + result = new CertificateVerificationResult(cid, publicKey, null); + } else { + if (message.getCertificateChain().getCertificates().isEmpty()) { + result = new CertificateVerificationResult(cid, new HandshakeException("Empty certificate chain", + new AlertMessage(AlertLevel.FATAL, AlertDescription.BAD_CERTIFICATE)), null); + } else { + result = new CertificateVerificationResult(cid, certChain, null); + } + } + + return result; + } + + /** + * Return an list of certificate authorities which are trusted + * for authenticating peers. + * + * @return a non-null (possibly empty) list of accepted CA issuers. + */ + @Override + public List getAcceptedIssuers() { + log.trace("getAcceptedIssuers: return null"); + return null; + } + + /** + * Set the handler for asynchronous handshake results. + *

+ * Called during initialization of the {link DTLSConnector}. Synchronous + * implementations may just ignore this using an empty implementation. + * + * @param resultHandler handler for asynchronous master secret results. This + * handler MUST NOT be called from the thread calling + * {@link #verifyCertificate(ConnectionId, ServerNames, InetSocketAddress, boolean, boolean, boolean, CertificateMessage)}, + * instead just return the result there. + */ + @Override + public void setResultHandler(HandshakeResultHandler resultHandler) { + if (this.resultHandler != null && resultHandler != null && this.resultHandler != resultHandler) { + throw new IllegalStateException("handshake result handler already set!"); + } + this.resultHandler = resultHandler; + } +} diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java index a1fb723681..2357ef01f5 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/AbstractLwM2MIntegrationTest.java @@ -147,8 +147,7 @@ public abstract class AbstractLwM2MIntegrationTest extends AbstractTransportInte " \"telemetry\": [],\n" + " \"attributeLwm2m\": {}\n" + " }"; - public static String OBSERVE_ATTRIBUTES_WITH_PARAMS = - + public static String TELEMETRY_WITHOUT_OBSERVE = " {\n" + " \"keyName\": {\n" + " \"/3_1.2/0/9\": \"batteryLevel\"\n" + @@ -161,6 +160,39 @@ public abstract class AbstractLwM2MIntegrationTest extends AbstractTransportInte " ],\n" + " \"attributeLwm2m\": {}\n" + " }"; + public static String TELEMETRY_WITH_ONE_OBSERVE = + " {\n" + + " \"keyName\": {\n" + + " \"/3_1.2/0/9\": \"batteryLevel\"\n" + + " },\n" + + " \"observe\": [\n" + + " \"/3_1.2/0/9\"\n" + + " ],\n" + + " \"attribute\": [\n" + + " ],\n" + + " \"telemetry\": [\n" + + " \"/3_1.2/0/9\"\n" + + " ],\n" + + " \"attributeLwm2m\": {}\n" + + " }"; + + public static String TELEMETRY_WITH_MANY_OBSERVE = + " {\n" + + " \"keyName\": {\n" + + " \"/3_1.2/0/9\": \"batteryLevel\",\n" + + " \"/3_1.2/0/20\": \"batteryStatus\"\n" + + " },\n" + + " \"observe\": [\n" + + " \"/3_1.2/0/9\",\n" + + " \"/3_1.2/0/20\"\n" + + " ],\n" + + " \"attribute\": [],\n" + + " \"telemetry\": [\n" + + " \"/3_1.2/0/9\",\n" + + " \"/3_1.2/0/20\"\n" + + " ],\n" + + " \"attributeLwm2m\": {}\n" + + " }"; public static final String CLIENT_LWM2M_SETTINGS = " {\n" + @@ -217,7 +249,7 @@ public abstract class AbstractLwM2MIntegrationTest extends AbstractTransportInte LwM2MDeviceCredentials deviceCredentials, String endpoint, boolean queueMode) throws Exception { - Lwm2mDeviceProfileTransportConfiguration transportConfiguration = getTransportConfiguration(OBSERVE_ATTRIBUTES_WITH_PARAMS, getBootstrapServerCredentialsNoSec(NONE)); + Lwm2mDeviceProfileTransportConfiguration transportConfiguration = getTransportConfiguration(TELEMETRY_WITHOUT_OBSERVE, getBootstrapServerCredentialsNoSec(NONE)); DeviceProfile deviceProfile = createLwm2mDeviceProfile("profileFor" + endpoint, transportConfiguration); Device device = createLwm2mDevice(deviceCredentials, endpoint, deviceProfile.getId()); diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/client/LwM2MTestClient.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/client/LwM2MTestClient.java index 387085c511..1c09825e92 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/client/LwM2MTestClient.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/client/LwM2MTestClient.java @@ -458,6 +458,12 @@ public class LwM2MTestClient { } } + public void stop(boolean deregister) { + if (leshanClient != null) { + leshanClient.stop(deregister); + } + } + private void awaitClientAfterStartConnectLw() { LwM2mClient lwM2MClient = this.clientContext.getClientByEndpoint(endpoint); Mockito.doAnswer(invocationOnMock -> null).when(defaultLwM2mUplinkMsgHandlerTest).initAttributes(lwM2MClient, true); diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/client/SimpleLwM2MDevice.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/client/SimpleLwM2MDevice.java index a6a850a897..e94a6b4822 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/client/SimpleLwM2MDevice.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/client/SimpleLwM2MDevice.java @@ -93,6 +93,7 @@ public class SimpleLwM2MDevice extends BaseInstanceEnabler implements Destroyabl try { executorService.scheduleWithFixedDelay(() -> { fireResourceChange(9); + fireResourceChange(20); } , 1, 1, TimeUnit.SECONDS); // 2 sec // , 1800000, 1800000, TimeUnit.MILLISECONDS); // 30 MIN diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/ota/sql/Ota5LwM2MIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/ota/sql/Ota5LwM2MIntegrationTest.java index a50f7df6a2..4ed06b99f2 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/ota/sql/Ota5LwM2MIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/ota/sql/Ota5LwM2MIntegrationTest.java @@ -51,7 +51,7 @@ public class Ota5LwM2MIntegrationTest extends AbstractOtaLwM2MIntegrationTest { @Test public void testFirmwareUpdateWithClientWithoutFirmwareOtaInfoFromProfile_IsNotSupported() throws Exception { - Lwm2mDeviceProfileTransportConfiguration transportConfiguration = getTransportConfiguration(OBSERVE_ATTRIBUTES_WITH_PARAMS, getBootstrapServerCredentialsNoSec(NONE)); + Lwm2mDeviceProfileTransportConfiguration transportConfiguration = getTransportConfiguration(TELEMETRY_WITHOUT_OBSERVE, getBootstrapServerCredentialsNoSec(NONE)); DeviceProfile deviceProfile = createLwm2mDeviceProfile("profileFor" + this.CLIENT_ENDPOINT_WITHOUT_FW_INFO, transportConfiguration); LwM2MDeviceCredentials deviceCredentials = getDeviceCredentialsNoSec(createNoSecClientCredentials(this.CLIENT_ENDPOINT_WITHOUT_FW_INFO)); final Device device = createLwm2mDevice(deviceCredentials, this.CLIENT_ENDPOINT_WITHOUT_FW_INFO, deviceProfile.getId()); diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/sql/RpcLwm2mIntegrationObserveTest.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/sql/RpcLwm2mIntegrationObserveTest.java index 4adf1ec000..57213e08cd 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/sql/RpcLwm2mIntegrationObserveTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/rpc/sql/RpcLwm2mIntegrationObserveTest.java @@ -73,13 +73,13 @@ public class RpcLwm2mIntegrationObserveTest extends AbstractRpcLwM2MIntegrationO * @throws Exception */ @Test - public void testObserveOneObjectInstance_Result_CONTENT_Value_Count_3_After_Cancel_Count_2() throws Exception { + public void testObserveOneObjectInstance_Result_CONTENT_Value_Count_Equal_Greater_3_After_Cancel_Count_2() throws Exception { sendObserveCancelAllWithAwait(lwM2MTestClient.getDeviceIdStr()); String idVer_3_0 = objectInstanceIdVer_3; sendRpcObserveWithContainsLwM2mSingleResource(idVer_3_0); int cntUpdate = 3; - verify(defaultUplinkMsgHandlerTest, timeout(10000).times(cntUpdate)) + verify(defaultUplinkMsgHandlerTest, timeout(10000).atLeast(cntUpdate)) .updateAttrTelemetry(Mockito.any(Registration.class), eq(idVer_3_0_9), eq(null)); } @@ -88,13 +88,13 @@ public class RpcLwm2mIntegrationObserveTest extends AbstractRpcLwM2MIntegrationO * @throws Exception */ @Test - public void testObserveOneObject_Result_CONTENT_Value_Count_3_After_Cancel_Count_2() throws Exception { + public void testObserveOneObject_Result_CONTENT_Value_Count_Equal_Greater_3_After_Cancel_Count_2() throws Exception { sendObserveCancelAllWithAwait(lwM2MTestClient.getDeviceIdStr()); String idVer_3_0 = objectInstanceIdVer_3; sendRpcObserveWithContainsLwM2mSingleResource(idVer_3_0); int cntUpdate = 3; - verify(defaultUplinkMsgHandlerTest, timeout(10000).times(cntUpdate)) + verify(defaultUplinkMsgHandlerTest, timeout(10000).atLeast(cntUpdate)) .updateAttrTelemetry(Mockito.any(Registration.class), eq(idVer_3_0_9), eq(null)); } diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/AbstractSecurityLwM2MIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/AbstractSecurityLwM2MIntegrationTest.java index eaade683d8..3f43c59068 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/AbstractSecurityLwM2MIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/AbstractSecurityLwM2MIntegrationTest.java @@ -196,7 +196,7 @@ public abstract class AbstractSecurityLwM2MIntegrationTest extends AbstractLwM2M false); } - protected void basicTestConnection(Security security, Security securityBs, + protected Device basicTestConnection(Security security, Security securityBs, LwM2MDeviceCredentials deviceCredentials, String endpoint, Lwm2mDeviceProfileTransportConfiguration transportConfiguration, @@ -227,6 +227,7 @@ public abstract class AbstractSecurityLwM2MIntegrationTest extends AbstractLwM2M return lwM2MTestClient.getClientStates().contains(finishState) || lwM2MTestClient.getClientStates().contains(ON_UPDATE_SUCCESS); }); Assert.assertTrue(lwM2MTestClient.getClientStates().containsAll(expectedStatuses)); + return device; } diff --git a/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/sql/PskLwm2mIntegrationTest.java b/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/sql/PskLwm2mIntegrationTest.java index ac1c0866de..42014a4a75 100644 --- a/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/sql/PskLwm2mIntegrationTest.java +++ b/application/src/test/java/org/thingsboard/server/transport/lwm2m/security/sql/PskLwm2mIntegrationTest.java @@ -16,10 +16,13 @@ package org.thingsboard.server.transport.lwm2m.security.sql; import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; import org.eclipse.leshan.client.object.Security; import org.eclipse.leshan.core.util.Hex; +import org.junit.Assert; import org.junit.Test; import org.springframework.test.web.servlet.MvcResult; +import org.thingsboard.server.common.data.Device; import org.thingsboard.server.common.data.DeviceProfile; import org.thingsboard.server.common.data.device.credentials.lwm2m.LwM2MDeviceCredentials; import org.thingsboard.server.common.data.device.credentials.lwm2m.PSKClientCredential; @@ -27,7 +30,6 @@ import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTrans import org.thingsboard.server.transport.lwm2m.security.AbstractSecurityLwM2MIntegrationTest; import java.nio.charset.StandardCharsets; - import static org.eclipse.leshan.client.object.Security.psk; import static org.eclipse.leshan.client.object.Security.pskBootstrap; import static org.junit.Assert.assertEquals; @@ -37,6 +39,7 @@ import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.LwM2MClient import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.LwM2MProfileBootstrapConfigType.BOTH; import static org.thingsboard.server.transport.lwm2m.Lwm2mTestHelper.LwM2MProfileBootstrapConfigType.NONE; +@Slf4j public class PskLwm2mIntegrationTest extends AbstractSecurityLwM2MIntegrationTest { //Lwm2m only @@ -66,6 +69,82 @@ public class PskLwm2mIntegrationTest extends AbstractSecurityLwM2MIntegrationTes ON_REGISTRATION_SUCCESS, true); } + @Test + public void testWithPskConnectLwm2mOneObserveSuccessUpdateProfileManyObserveUpdateRegistrationSuccess() throws Exception { + String clientEndpoint = CLIENT_ENDPOINT_PSK; + String identity = CLIENT_PSK_IDENTITY; + String keyPsk = CLIENT_PSK_KEY; + PSKClientCredential clientCredentials = new PSKClientCredential(); + clientCredentials.setEndpoint(clientEndpoint); + clientCredentials.setIdentity(identity); + clientCredentials.setKey(keyPsk); + Security security = psk(SECURE_URI, + shortServerId, + identity.getBytes(StandardCharsets.UTF_8), + Hex.decodeHex(keyPsk.toCharArray())); + Lwm2mDeviceProfileTransportConfiguration transportConfiguration = getTransportConfiguration(TELEMETRY_WITH_ONE_OBSERVE, getBootstrapServerCredentialsSecure(PSK, NONE)); + LwM2MDeviceCredentials deviceCredentials = getDeviceCredentialsSecure(clientCredentials, null, null, PSK, false); + String awaitAlias = "await on client state (Psk_Lwm2m)"; + Device lwm2mDevice = this.basicTestConnection(security, + null, + deviceCredentials, + clientEndpoint, + transportConfiguration, + awaitAlias, + expectedStatusesRegistrationLwm2mSuccess, + false, + ON_REGISTRATION_SUCCESS, + true); + + awaitObserveReadAll(1, lwm2mDevice.getId().getId().toString()); + DeviceProfile foundDeviceProfile = doGet("/api/deviceProfile/" + lwm2mDevice.getDeviceProfileId().getId().toString(), DeviceProfile.class); + transportConfiguration = getTransportConfiguration(TELEMETRY_WITH_MANY_OBSERVE, getBootstrapServerCredentialsSecure(PSK, NONE)); + foundDeviceProfile.getProfileData().setTransportConfiguration(transportConfiguration); + DeviceProfile lwm2mDeviceProfileManyParams = doPost("/api/deviceProfile", foundDeviceProfile, DeviceProfile.class); + Assert.assertNotNull(lwm2mDeviceProfileManyParams); + awaitObserveReadAll(2, lwm2mDevice.getId().getId().toString()); + awaitUpdateReg(3); + } + @Test + public void testWithPskConnectLwm2mSuccessObserveSuccessUnRegClientUpdateProfileObserveConnectLwm2mSuccessOWithNewObserve() throws Exception { + String clientEndpoint = CLIENT_ENDPOINT_PSK; + String identity = CLIENT_PSK_IDENTITY; + String keyPsk = CLIENT_PSK_KEY; + PSKClientCredential clientCredentials = new PSKClientCredential(); + clientCredentials.setEndpoint(clientEndpoint); + clientCredentials.setIdentity(identity); + clientCredentials.setKey(keyPsk); + Security security = psk(SECURE_URI, + shortServerId, + identity.getBytes(StandardCharsets.UTF_8), + Hex.decodeHex(keyPsk.toCharArray())); + Lwm2mDeviceProfileTransportConfiguration transportConfiguration = getTransportConfiguration(TELEMETRY_WITH_ONE_OBSERVE, getBootstrapServerCredentialsSecure(PSK, NONE)); + LwM2MDeviceCredentials deviceCredentials = getDeviceCredentialsSecure(clientCredentials, null, null, PSK, false); + String awaitAlias = "await on client state (Psk_Lwm2m)"; + Device lwm2mDevice = this.basicTestConnection(security, + null, + deviceCredentials, + clientEndpoint, + transportConfiguration, + awaitAlias, + expectedStatusesRegistrationLwm2mSuccess, + false, + ON_REGISTRATION_SUCCESS, + true); + + awaitObserveReadAll(1, lwm2mDevice.getId().getId().toString()); + lwM2MTestClient.stop(true); + + DeviceProfile foundDeviceProfile = doGet("/api/deviceProfile/" + lwm2mDevice.getDeviceProfileId().getId().toString(), DeviceProfile.class); + transportConfiguration = getTransportConfiguration(TELEMETRY_WITH_MANY_OBSERVE, getBootstrapServerCredentialsSecure(PSK, NONE)); + foundDeviceProfile.getProfileData().setTransportConfiguration(transportConfiguration); + DeviceProfile lwm2mDeviceProfileManyParams = doPost("/api/deviceProfile", foundDeviceProfile, DeviceProfile.class); + Assert.assertNotNull(lwm2mDeviceProfileManyParams); + + lwM2MTestClient.start(true); + awaitObserveReadAll(2, lwm2mDevice.getId().getId().toString()); + awaitUpdateReg(3); + } @Test public void testWithPskConnectLwm2mBadPskKeyByLength_BAD_REQUEST() throws Exception { diff --git a/application/src/test/resources/coap/credentials/client/cert.pem b/application/src/test/resources/coap/credentials/client/cert.pem new file mode 100644 index 0000000000..4d385a588f --- /dev/null +++ b/application/src/test/resources/coap/credentials/client/cert.pem @@ -0,0 +1,13 @@ +-----BEGIN CERTIFICATE----- +MIIB/TCCAaOgAwIBAgIIVNrVgKT9OE8wCgYIKoZIzj0EAwIwWjEOMAwGA1UEAxMF +Y2YtY2ExFDASBgNVBAsTC0NhbGlmb3JuaXVtMRQwEgYDVQQKEwtFY2xpcHNlIElv +VDEPMA0GA1UEBxMGT3R0YXdhMQswCQYDVQQGEwJDQTAeFw0yMzEwMjYwODA4MjJa +Fw0yNTEwMjUwODA4MjJaMF4xEjAQBgNVBAMTCWNmLWNsaWVudDEUMBIGA1UECxML +Q2FsaWZvcm5pdW0xFDASBgNVBAoTC0VjbGlwc2UgSW9UMQ8wDQYDVQQHEwZPdHRh +d2ExCzAJBgNVBAYTAkNBMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQxYO5/M5 +ie6+3QPOaAy5MD6CkFILZwIb2rOBCX/EWPaocX1H+eynUnaEEbmqxeN6rnI/pH19 +j4PtsegfHLrzzaNPME0wHQYDVR0OBBYEFKwEDLTJ+5cQoZfbjWN1vJ2ssgK+MAsG +A1UdDwQEAwIHgDAfBgNVHSMEGDAWgBSxVzoI1TL87++hsUb9vQwqODzgUTAKBggq +hkjOPQQDAgNIADBFAiA2KCOw3n2AK9Vm8u2u1bQREIEs3tKAU7eFjpNFn929NwIh +AInhBGoEwS2Xlu5bdZSfWnujoRrEQiIiQpStmLxVcIsH +-----END CERTIFICATE----- diff --git a/application/src/test/resources/coap/credentials/client/cert_01.pem b/application/src/test/resources/coap/credentials/client/cert_01.pem new file mode 100644 index 0000000000..3b97ab4aad --- /dev/null +++ b/application/src/test/resources/coap/credentials/client/cert_01.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICIzCCAcmgAwIBAgIUZZCGYm65c9vU0Xfvd/pAnLVDouUwCgYIKoZIzj0EAwIw +ZzELMAkGA1UEBhMCVUExDTALBgNVBAgMBEtpeXYxDTALBgNVBAcMBEtpeXYxFDAS +BgNVBAoMC1RoaW5nc2JvYXJkMRIwEAYDVQQLDAlkZXZlbG9wZXIxEDAOBgNVBAMM +B2NlcnRfMDEwHhcNMjQxMjE4MTU1NjE1WhcNMjUxMjE4MTU1NjE1WjBnMQswCQYD +VQQGEwJVQTENMAsGA1UECAwES2l5djENMAsGA1UEBwwES2l5djEUMBIGA1UECgwL +VGhpbmdzYm9hcmQxEjAQBgNVBAsMCWRldmVsb3BlcjEQMA4GA1UEAwwHY2VydF8w +MTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNU1tE6o/QpqJJqpy+m+UoPuQe5g +eTgS4M3x0iQS6pzNEJBhzbnOp/BysGMB4wKiAWTRuKdH/gcRXDBTjLd/d7ijUzBR +MB0GA1UdDgQWBBSiao1iNWYzlsrSbxYqbda116HG1jAfBgNVHSMEGDAWgBSiao1i +NWYzlsrSbxYqbda116HG1jAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMCA0gA +MEUCIB2aCM/nvDqic9NkoSX/71GwksLiAKiFNkt2BZQykrcHAiEAr2h5IMdkyurN +Jy/idx2y44CP0tMq/3QV0QLCQFJIi6s= +-----END CERTIFICATE----- diff --git a/application/src/test/resources/coap/credentials/client/key.pem b/application/src/test/resources/coap/credentials/client/key.pem new file mode 100644 index 0000000000..02ca740c93 --- /dev/null +++ b/application/src/test/resources/coap/credentials/client/key.pem @@ -0,0 +1,4 @@ +-----BEGIN PRIVATE KEY----- +MEECAQAwEwYHKoZIzj0CAQYIKoZIzj0DAQcEJzAlAgEBBCDn0+4CuLeX7xwBs0ts +UUEDB3+HRwRKdIPeJlIbKuvvEQ== +-----END PRIVATE KEY----- \ No newline at end of file diff --git a/application/src/test/resources/coap/credentials/client/key_01.pem b/application/src/test/resources/coap/credentials/client/key_01.pem new file mode 100644 index 0000000000..d5918e8181 --- /dev/null +++ b/application/src/test/resources/coap/credentials/client/key_01.pem @@ -0,0 +1,8 @@ +-----BEGIN EC PARAMETERS----- +BggqhkjOPQMBBw== +-----END EC PARAMETERS----- +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIJldU1MBuJUJnNHa9Ob5NGlXc/Os6put9eh1TlIbuScnoAoGCCqGSM49 +AwEHoUQDQgAE1TW0Tqj9CmokmqnL6b5Sg+5B7mB5OBLgzfHSJBLqnM0QkGHNuc6n +8HKwYwHjAqIBZNG4p0f+BxFcMFOMt393uA== +-----END EC PRIVATE KEY----- diff --git a/application/src/test/resources/coap/credentials/coapclientTest.jks b/application/src/test/resources/coap/credentials/coapclientTest.jks new file mode 100644 index 0000000000..ca8c8ed1d7 Binary files /dev/null and b/application/src/test/resources/coap/credentials/coapclientTest.jks differ diff --git a/application/src/test/resources/coap/credentials/coapserverTest.jks b/application/src/test/resources/coap/credentials/coapserverTest.jks new file mode 100644 index 0000000000..4adf1f4f89 Binary files /dev/null and b/application/src/test/resources/coap/credentials/coapserverTest.jks differ diff --git a/application/src/test/resources/coap/credentials/server/cert.pem b/application/src/test/resources/coap/credentials/server/cert.pem new file mode 100644 index 0000000000..03eb9e372e --- /dev/null +++ b/application/src/test/resources/coap/credentials/server/cert.pem @@ -0,0 +1,35 @@ +-----BEGIN CERTIFICATE----- +MIIBaDCCAQ2gAwIBAgIUCY+goBAOhowBs7BHs/qXdAX8XFgwCgYIKoZIzj0EAwIw +ETEPMA0GA1UEAwwGUm9vdENBMB4XDTI0MTIxOTEzNTY1OFoXDTM0MTIxNzEzNTY1 +OFowETEPMA0GA1UEAwwGU2VydmVyMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE +/qief3Kjnz0FpkQVaKRqJq3kHmCqqs+y1EGYLEZZAqLFvxmv7xoL6muG4Mj8tzqk +Ll94JJuz97hG1FiEZsq7O6NDMEEwCwYDVR0PBAQDAgWgMBMGA1UdJQQMMAoGCCsG +AQUFBwMBMB0GA1UdDgQWBBTK/UPsN0I2ErVPILWKMRV6TSeAmTAKBggqhkjOPQQD +AgNJADBGAiEA8EhlOwvTbwGlxo55UIOJp9LBbCp0BEIWojlu8PzOVSsCIQDlV24S +3BUJVCuMRujO5lTfJLxaSKkOEIgRANwIGi88WA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBGzCBwgIUP/PGQOKa5EyvsIXNgvv9PNietyEwCgYIKoZIzj0EAwMwEDEOMAwG +A1UEAwwFVFJVU1QwHhcNMjQxMjE5MTM1NjU4WhcNMzQxMjE3MTM1NjU4WjARMQ8w +DQYDVQQDDAZSb290Q0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAT+qJ5/cqOf +PQWmRBVopGomreQeYKqqz7LUQZgsRlkCosW/Ga/vGgvqa4bgyPy3OqQuX3gkm7P3 +uEbUWIRmyrs7MAoGCCqGSM49BAMDA0gAMEUCIQD2DY3UDXbzaIBKrsCtohKlEunH +ip9LkSeYfSKCnfm23gIgA8AEJdunpRmPkilxgy6wZSLLROqDpGDnhnyv8dsR8cc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIBLTCB1AIUcsuauXAqvIS2RQcNPYysETJUAvwwCgYIKoZIzj0EAwMwIzEhMB8G +A1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTI0MTIxOTEzNTY1OFoX +DTM0MTIxNzEzNTY1OFowEDEOMAwGA1UEAwwFVFJVU1QwWTATBgcqhkjOPQIBBggq +hkjOPQMBBwNCAAT+qJ5/cqOfPQWmRBVopGomreQeYKqqz7LUQZgsRlkCosW/Ga/v +Ggvqa4bgyPy3OqQuX3gkm7P3uEbUWIRmyrs7MAoGCCqGSM49BAMDA0gAMEUCIQCM +DV8sfoArfWiXAUF2LNS3kkHD7sgb91jr2+poEHgBBgIgXf9VeJp3K5jHX6lJwtE8 +nd+jW7T9nhTc/5njHg7xons= +-----END CERTIFICATE----- +-----BEGIN EC PARAMETERS----- +BggqhkjOPQMBBw== +-----END EC PARAMETERS----- +-----BEGIN EC PRIVATE KEY----- +MHcCAQEEIB+Z69so6HqCCWo5VOFxGsLXOlTWIYijOtzt+SeNGrgPoAoGCCqGSM49 +AwEHoUQDQgAE/qief3Kjnz0FpkQVaKRqJq3kHmCqqs+y1EGYLEZZAqLFvxmv7xoL +6muG4Mj8tzqkLl94JJuz97hG1FiEZsq7Ow== +-----END EC PRIVATE KEY----- diff --git a/common/coap-server/src/main/java/org/thingsboard/server/coapserver/CoapServerService.java b/common/coap-server/src/main/java/org/thingsboard/server/coapserver/CoapServerService.java index 0b1ba35709..5f4f1d152b 100644 --- a/common/coap-server/src/main/java/org/thingsboard/server/coapserver/CoapServerService.java +++ b/common/coap-server/src/main/java/org/thingsboard/server/coapserver/CoapServerService.java @@ -17,7 +17,6 @@ package org.thingsboard.server.coapserver; import org.eclipse.californium.core.CoapServer; -import java.net.InetSocketAddress; import java.net.UnknownHostException; import java.util.concurrent.ConcurrentMap; @@ -25,5 +24,5 @@ public interface CoapServerService { CoapServer getCoapServer() throws UnknownHostException; - ConcurrentMap getDtlsSessionsMap(); + ConcurrentMap getDtlsSessionsMap(); } diff --git a/common/coap-server/src/main/java/org/thingsboard/server/coapserver/DefaultCoapServerService.java b/common/coap-server/src/main/java/org/thingsboard/server/coapserver/DefaultCoapServerService.java index f3d30bfea4..41b10b31a3 100644 --- a/common/coap-server/src/main/java/org/thingsboard/server/coapserver/DefaultCoapServerService.java +++ b/common/coap-server/src/main/java/org/thingsboard/server/coapserver/DefaultCoapServerService.java @@ -78,7 +78,7 @@ public class DefaultCoapServerService implements CoapServerService { } @Override - public ConcurrentMap getDtlsSessionsMap() { + public ConcurrentMap getDtlsSessionsMap() { return tbDtlsCertificateVerifier != null ? tbDtlsCertificateVerifier.getTbCoapDtlsSessionsMap() : null; } diff --git a/common/coap-server/src/main/java/org/thingsboard/server/coapserver/TbCoapDtlsCertificateVerifier.java b/common/coap-server/src/main/java/org/thingsboard/server/coapserver/TbCoapDtlsCertificateVerifier.java index cc7dcad77c..d61d7f279c 100644 --- a/common/coap-server/src/main/java/org/thingsboard/server/coapserver/TbCoapDtlsCertificateVerifier.java +++ b/common/coap-server/src/main/java/org/thingsboard/server/coapserver/TbCoapDtlsCertificateVerifier.java @@ -109,7 +109,8 @@ public class TbCoapDtlsCertificateVerifier implements NewAdvancedCertificateVeri if (msg != null && strCert.equals(msg.getCredentials())) { DeviceProfile deviceProfile = msg.getDeviceProfile(); if (msg.hasDeviceInfo() && deviceProfile != null) { - tbCoapDtlsSessionInMemoryStorage.put(remotePeer, new TbCoapDtlsSessionInfo(msg, deviceProfile)); + TbCoapDtlsSessionKey tbCoapDtlsSessionKey = new TbCoapDtlsSessionKey(remotePeer, msg.getCredentials()); + tbCoapDtlsSessionInMemoryStorage.put(tbCoapDtlsSessionKey, new TbCoapDtlsSessionInfo(msg, deviceProfile)); } break; } @@ -138,7 +139,7 @@ public class TbCoapDtlsCertificateVerifier implements NewAdvancedCertificateVeri public void setResultHandler(HandshakeResultHandler resultHandler) { } - public ConcurrentMap getTbCoapDtlsSessionsMap() { + public ConcurrentMap getTbCoapDtlsSessionsMap() { return tbCoapDtlsSessionInMemoryStorage.getDtlsSessionsMap(); } diff --git a/common/coap-server/src/main/java/org/thingsboard/server/coapserver/TbCoapDtlsSessionInMemoryStorage.java b/common/coap-server/src/main/java/org/thingsboard/server/coapserver/TbCoapDtlsSessionInMemoryStorage.java index b4101f1763..5ff44561d8 100644 --- a/common/coap-server/src/main/java/org/thingsboard/server/coapserver/TbCoapDtlsSessionInMemoryStorage.java +++ b/common/coap-server/src/main/java/org/thingsboard/server/coapserver/TbCoapDtlsSessionInMemoryStorage.java @@ -18,7 +18,6 @@ package org.thingsboard.server.coapserver; import lombok.Data; import lombok.extern.slf4j.Slf4j; -import java.net.InetSocketAddress; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -26,7 +25,7 @@ import java.util.concurrent.ConcurrentMap; @Data public class TbCoapDtlsSessionInMemoryStorage { - private final ConcurrentMap dtlsSessionsMap = new ConcurrentHashMap<>(); + private final ConcurrentMap dtlsSessionsMap = new ConcurrentHashMap<>(); private long dtlsSessionInactivityTimeout; private long dtlsSessionReportTimeout; @@ -36,9 +35,9 @@ public class TbCoapDtlsSessionInMemoryStorage { this.dtlsSessionReportTimeout = dtlsSessionReportTimeout; } - public void put(InetSocketAddress remotePeer, TbCoapDtlsSessionInfo dtlsSessionInfo) { - log.trace("DTLS session added to in-memory store: [{}] timestamp: [{}]", remotePeer, dtlsSessionInfo.getLastActivityTime()); - dtlsSessionsMap.putIfAbsent(remotePeer, dtlsSessionInfo); + public void put(TbCoapDtlsSessionKey tbCoapDtlsSessionKey, TbCoapDtlsSessionInfo dtlsSessionInfo) { + log.trace("DTLS session added to in-memory store: [{}] timestamp: [{}]", tbCoapDtlsSessionKey, dtlsSessionInfo.getLastActivityTime()); + dtlsSessionsMap.putIfAbsent(tbCoapDtlsSessionKey, dtlsSessionInfo); } public void evictTimeoutSessions() { diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/AwsSqsTbQueueMsgMetadata.java b/common/coap-server/src/main/java/org/thingsboard/server/coapserver/TbCoapDtlsSessionKey.java similarity index 53% rename from common/queue/src/main/java/org/thingsboard/server/queue/sqs/AwsSqsTbQueueMsgMetadata.java rename to common/coap-server/src/main/java/org/thingsboard/server/coapserver/TbCoapDtlsSessionKey.java index 8d13a543d3..cf3e0b4fec 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/AwsSqsTbQueueMsgMetadata.java +++ b/common/coap-server/src/main/java/org/thingsboard/server/coapserver/TbCoapDtlsSessionKey.java @@ -13,16 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.thingsboard.server.queue.sqs; +package org.thingsboard.server.coapserver; -import com.amazonaws.http.SdkHttpMetadata; -import lombok.AllArgsConstructor; -import lombok.Data; -import org.thingsboard.server.queue.TbQueueMsgMetadata; +import java.net.InetSocketAddress; +import java.util.Objects; -@Data -@AllArgsConstructor -public class AwsSqsTbQueueMsgMetadata implements TbQueueMsgMetadata { +public record TbCoapDtlsSessionKey(InetSocketAddress peerAddress, String credentials) { - private final SdkHttpMetadata metadata; + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TbCoapDtlsSessionKey that = (TbCoapDtlsSessionKey) o; + return Objects.equals(peerAddress, that.peerAddress) && + Objects.equals(credentials, that.credentials); + } } + diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java index f7f4b1ce4b..94398a11d3 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.resource; import com.google.common.util.concurrent.ListenableFuture; import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.ResourceExportData; +import org.thingsboard.server.common.data.ResourceSubType; import org.thingsboard.server.common.data.ResourceType; import org.thingsboard.server.common.data.TbResource; import org.thingsboard.server.common.data.TbResourceInfo; @@ -88,6 +89,6 @@ public interface ResourceService extends EntityDaoService { Collection getUsedResources(TenantId tenantId, WidgetTypeDetails widgetTypeDetails); - TbResource createOrUpdateSystemResource(ResourceType resourceType, String resourceKey, byte[] data); + TbResource createOrUpdateSystemResource(ResourceType resourceType, ResourceSubType resourceSubType, String resourceKey, byte[] data); } diff --git a/common/data/src/main/java/org/thingsboard/server/common/data/mobile/app/StoreInfo.java b/common/data/src/main/java/org/thingsboard/server/common/data/mobile/app/StoreInfo.java index 9903302592..7ccea234f9 100644 --- a/common/data/src/main/java/org/thingsboard/server/common/data/mobile/app/StoreInfo.java +++ b/common/data/src/main/java/org/thingsboard/server/common/data/mobile/app/StoreInfo.java @@ -15,12 +15,16 @@ */ package org.thingsboard.server.common.data.mobile.app; +import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import org.thingsboard.server.common.data.validation.NoXss; @Data @Builder +@NoArgsConstructor +@AllArgsConstructor public class StoreInfo { @NoXss diff --git a/common/edge-api/src/main/java/org/thingsboard/edge/rpc/EdgeGrpcClient.java b/common/edge-api/src/main/java/org/thingsboard/edge/rpc/EdgeGrpcClient.java index fcef33b968..3936b3ee63 100644 --- a/common/edge-api/src/main/java/org/thingsboard/edge/rpc/EdgeGrpcClient.java +++ b/common/edge-api/src/main/java/org/thingsboard/edge/rpc/EdgeGrpcClient.java @@ -136,7 +136,7 @@ public class EdgeGrpcClient implements EdgeRpcClient { .setConnectRequestMsg(ConnectRequestMsg.newBuilder() .setEdgeRoutingKey(edgeKey) .setEdgeSecret(edgeSecret) - .setEdgeVersion(EdgeVersion.V_3_9_0) + .setEdgeVersion(EdgeVersion.V_4_0_0) .setMaxInboundMessageSize(maxInboundMessageSize) .build()) .build()); diff --git a/common/edge-api/src/main/proto/edge.proto b/common/edge-api/src/main/proto/edge.proto index 4dc762e14c..50ecc31c1a 100644 --- a/common/edge-api/src/main/proto/edge.proto +++ b/common/edge-api/src/main/proto/edge.proto @@ -41,6 +41,7 @@ enum EdgeVersion { V_3_7_0 = 7; V_3_8_0 = 8; V_3_9_0 = 9; + V_4_0_0 = 10; } /** diff --git a/common/queue/pom.xml b/common/queue/pom.xml index 6fad5efd5a..44e2239e05 100644 --- a/common/queue/pom.xml +++ b/common/queue/pom.xml @@ -64,18 +64,10 @@ org.apache.kafka kafka-clients - - com.amazonaws - aws-java-sdk-sqs - com.google.cloud google-cloud-pubsub - - com.microsoft.azure - azure-servicebus - com.rabbitmq amqp-client diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/RuleEngineTbQueueAdminFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/RuleEngineTbQueueAdminFactory.java index 87ad934c63..057351a449 100644 --- a/common/queue/src/main/java/org/thingsboard/server/queue/RuleEngineTbQueueAdminFactory.java +++ b/common/queue/src/main/java/org/thingsboard/server/queue/RuleEngineTbQueueAdminFactory.java @@ -19,21 +19,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusAdmin; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusQueueConfigs; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; import org.thingsboard.server.queue.kafka.TbKafkaAdmin; import org.thingsboard.server.queue.kafka.TbKafkaSettings; import org.thingsboard.server.queue.kafka.TbKafkaTopicConfigs; -import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; -import org.thingsboard.server.queue.pubsub.TbPubSubSettings; -import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqQueueArguments; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqSettings; -import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; -import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes; -import org.thingsboard.server.queue.sqs.TbAwsSqsSettings; @Configuration public class RuleEngineTbQueueAdminFactory { @@ -43,56 +31,12 @@ public class RuleEngineTbQueueAdminFactory { @Autowired(required = false) private TbKafkaSettings kafkaSettings; - @Autowired(required = false) - private TbAwsSqsQueueAttributes awsSqsQueueAttributes; - @Autowired(required = false) - private TbAwsSqsSettings awsSqsSettings; - - @Autowired(required = false) - private TbPubSubSubscriptionSettings pubSubSubscriptionSettings; - @Autowired(required = false) - private TbPubSubSettings pubSubSettings; - - @Autowired(required = false) - private TbRabbitMqQueueArguments rabbitMqQueueArguments; - @Autowired(required = false) - private TbRabbitMqSettings rabbitMqSettings; - - @Autowired(required = false) - private TbServiceBusQueueConfigs serviceBusQueueConfigs; - @Autowired(required = false) - private TbServiceBusSettings serviceBusSettings; - @ConditionalOnExpression("'${queue.type:null}'=='kafka'") @Bean public TbQueueAdmin createKafkaAdmin() { return new TbKafkaAdmin(kafkaSettings, kafkaTopicConfigs.getRuleEngineConfigs()); } - @ConditionalOnExpression("'${queue.type:null}'=='aws-sqs'") - @Bean - public TbQueueAdmin createAwsSqsAdmin() { - return new TbAwsSqsAdmin(awsSqsSettings, awsSqsQueueAttributes.getRuleEngineAttributes()); - } - - @ConditionalOnExpression("'${queue.type:null}'=='pubsub'") - @Bean - public TbQueueAdmin createPubSubAdmin() { - return new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getRuleEngineSettings()); - } - - @ConditionalOnExpression("'${queue.type:null}'=='rabbitmq'") - @Bean - public TbQueueAdmin createRabbitMqAdmin() { - return new TbRabbitMqAdmin(rabbitMqSettings, rabbitMqQueueArguments.getRuleEngineArgs()); - } - - @ConditionalOnExpression("'${queue.type:null}'=='service-bus'") - @Bean - public TbQueueAdmin createServiceBusAdmin() { - return new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getRuleEngineConfigs()); - } - @ConditionalOnExpression("'${queue.type:null}'=='in-memory'") @Bean public TbQueueAdmin createInMemoryAdmin() { diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusAdmin.java b/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusAdmin.java deleted file mode 100644 index 3f920778e6..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusAdmin.java +++ /dev/null @@ -1,137 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.azure.servicebus; - -import com.microsoft.azure.servicebus.management.ManagementClient; -import com.microsoft.azure.servicebus.management.QueueDescription; -import com.microsoft.azure.servicebus.primitives.ConnectionStringBuilder; -import com.microsoft.azure.servicebus.primitives.MessagingEntityAlreadyExistsException; -import com.microsoft.azure.servicebus.primitives.ServiceBusException; -import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.util.PropertyUtils; - -import java.io.IOException; -import java.time.Duration; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -@Slf4j -@Deprecated(forRemoval = true, since = "3.9") // for removal in 4.0 -public class TbServiceBusAdmin implements TbQueueAdmin { - private final String MAX_SIZE = "maxSizeInMb"; - private final String MESSAGE_TIME_TO_LIVE = "messageTimeToLiveInSec"; - private final String LOCK_DURATION = "lockDurationInSec"; - - private final Map queueConfigs; - private final Set queues = ConcurrentHashMap.newKeySet(); - - private final ManagementClient client; - - public TbServiceBusAdmin(TbServiceBusSettings serviceBusSettings, Map queueConfigs) { - this.queueConfigs = queueConfigs; - - ConnectionStringBuilder builder = new ConnectionStringBuilder( - serviceBusSettings.getNamespaceName(), - "queues", - serviceBusSettings.getSasKeyName(), - serviceBusSettings.getSasKey()); - - client = new ManagementClient(builder); - - try { - client.getQueues().forEach(queueDescription -> queues.add(queueDescription.getPath())); - } catch (ServiceBusException | InterruptedException e) { - log.error("Failed to get queues.", e); - throw new RuntimeException("Failed to get queues.", e); - } - } - - @Override - public void createTopicIfNotExists(String topic, String properties) { - if (queues.contains(topic)) { - return; - } - - try { - QueueDescription queueDescription = new QueueDescription(topic); - queueDescription.setRequiresDuplicateDetection(false); - setQueueConfigs(queueDescription, PropertyUtils.getProps(queueConfigs, properties)); - - client.createQueue(queueDescription); - queues.add(topic); - } catch (ServiceBusException | InterruptedException e) { - if (e instanceof MessagingEntityAlreadyExistsException) { - queues.add(topic); - log.info("[{}] queue already exists.", topic); - } else { - log.error("Failed to create queue: [{}]", topic, e); - } - } - } - - @Override - public void deleteTopic(String topic) { - if (queues.contains(topic)) { - doDelete(topic); - } else { - try { - if (client.getQueue(topic) != null) { - doDelete(topic); - } else { - log.warn("Azure Service Bus Queue [{}] is not exist.", topic); - } - } catch (ServiceBusException | InterruptedException e) { - log.error("Failed to delete Azure Service Bus queue [{}]", topic, e); - } - } - } - - private void doDelete(String topic) { - try { - client.deleteTopic(topic); - } catch (ServiceBusException | InterruptedException e) { - log.error("Failed to delete Azure Service Bus queue [{}]", topic, e); - } - } - - private void setQueueConfigs(QueueDescription queueDescription, Map queueConfigs) { - queueConfigs.forEach((confKey, confValue) -> { - switch (confKey) { - case MAX_SIZE: - queueDescription.setMaxSizeInMB(Long.parseLong(confValue)); - break; - case MESSAGE_TIME_TO_LIVE: - queueDescription.setDefaultMessageTimeToLive(Duration.ofSeconds(Long.parseLong(confValue))); - break; - case LOCK_DURATION: - queueDescription.setLockDuration(Duration.ofSeconds(Long.parseLong(confValue))); - break; - default: - log.error("Unknown config: [{}]", confKey); - } - }); - } - - public void destroy() { - try { - client.close(); - } catch (IOException e) { - log.error("Failed to close ManagementClient."); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusConsumerTemplate.java b/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusConsumerTemplate.java deleted file mode 100644 index 8e2b32aab5..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusConsumerTemplate.java +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.azure.servicebus; - -import com.google.gson.Gson; -import com.google.protobuf.InvalidProtocolBufferException; -import com.microsoft.azure.servicebus.TransactionContext; -import com.microsoft.azure.servicebus.primitives.ConnectionStringBuilder; -import com.microsoft.azure.servicebus.primitives.CoreMessageReceiver; -import com.microsoft.azure.servicebus.primitives.MessageWithDeliveryTag; -import com.microsoft.azure.servicebus.primitives.MessagingEntityType; -import com.microsoft.azure.servicebus.primitives.MessagingFactory; -import com.microsoft.azure.servicebus.primitives.SettleModePair; -import lombok.extern.slf4j.Slf4j; -import org.apache.qpid.proton.amqp.messaging.Data; -import org.apache.qpid.proton.amqp.transport.ReceiverSettleMode; -import org.apache.qpid.proton.amqp.transport.SenderSettleMode; -import org.springframework.util.CollectionUtils; -import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueMsg; -import org.thingsboard.server.queue.TbQueueMsgDecoder; -import org.thingsboard.server.queue.common.AbstractTbQueueConsumerTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueMsg; - -import java.time.Duration; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutionException; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -@Slf4j -public class TbServiceBusConsumerTemplate extends AbstractTbQueueConsumerTemplate { - private final TbQueueAdmin admin; - private final TbQueueMsgDecoder decoder; - private final TbServiceBusSettings serviceBusSettings; - - private final Gson gson = new Gson(); - - private Set receivers; - private final Map> pendingMessages = new ConcurrentHashMap<>(); - private volatile int messagesPerQueue; - - public TbServiceBusConsumerTemplate(TbQueueAdmin admin, TbServiceBusSettings serviceBusSettings, String topic, TbQueueMsgDecoder decoder) { - super(topic); - this.admin = admin; - this.decoder = decoder; - this.serviceBusSettings = serviceBusSettings; - } - - @Override - protected List doPoll(long durationInMillis) { - List>> messageFutures = - receivers.stream() - .map(receiver -> receiver - .receiveAsync(messagesPerQueue, Duration.ofMillis(durationInMillis)) - .whenComplete((messages, err) -> { - if (!CollectionUtils.isEmpty(messages)) { - pendingMessages.put(receiver, messages); - } else if (err != null) { - log.error("Failed to receive messages.", err); - } - })) - .collect(Collectors.toList()); - try { - return fromList(messageFutures) - .get() - .stream() - .flatMap(messages -> CollectionUtils.isEmpty(messages) ? Stream.empty() : messages.stream()) - .collect(Collectors.toList()); - } catch (InterruptedException | ExecutionException e) { - if (stopped) { - log.info("[{}] Service Bus consumer is stopped.", getTopic()); - } else { - log.error("Failed to receive messages", e); - } - return Collections.emptyList(); - } - } - - @Override - protected void doSubscribe(List topicNames) { - createReceivers(); - messagesPerQueue = receivers.size() / Math.max(partitions.size(), 1); - } - - @Override - protected void doCommit() { - pendingMessages.forEach((receiver, msgs) -> - msgs.forEach(msg -> receiver.completeMessageAsync(msg.getDeliveryTag(), TransactionContext.NULL_TXN))); - pendingMessages.clear(); - } - - @Override - protected void doUnsubscribe() { - receivers.forEach(CoreMessageReceiver::closeAsync); - } - - private void createReceivers() { - List> receiverFutures = partitions.stream() - .map(TopicPartitionInfo::getFullTopicName) - .map(queue -> { - MessagingFactory factory; - try { - factory = MessagingFactory.createFromConnectionStringBuilder(createConnection(queue)); - } catch (InterruptedException | ExecutionException e) { - log.error("Failed to create factory for the queue [{}]", queue); - throw new RuntimeException("Failed to create the factory", e); - } - - return CoreMessageReceiver.create(factory, queue, queue, 0, - new SettleModePair(SenderSettleMode.UNSETTLED, ReceiverSettleMode.SECOND), - MessagingEntityType.QUEUE); - }).collect(Collectors.toList()); - - try { - receivers = new HashSet<>(fromList(receiverFutures).get()); - } catch (InterruptedException | ExecutionException e) { - if (stopped) { - log.info("[{}] Service Bus consumer is stopped.", getTopic()); - } else { - log.error("Failed to create receivers", e); - } - } - } - - private ConnectionStringBuilder createConnection(String queue) { - admin.createTopicIfNotExists(queue); - return new ConnectionStringBuilder( - serviceBusSettings.getNamespaceName(), - queue, - serviceBusSettings.getSasKeyName(), - serviceBusSettings.getSasKey()); - } - - private CompletableFuture> fromList(List> futures) { - @SuppressWarnings("unchecked") - CompletableFuture>[] arrayFuture = new CompletableFuture[futures.size()]; - futures.toArray(arrayFuture); - - return CompletableFuture - .allOf(arrayFuture) - .thenApply(v -> futures - .stream() - .map(CompletableFuture::join) - .collect(Collectors.toList())); - } - - @Override - protected T decode(MessageWithDeliveryTag data) throws InvalidProtocolBufferException { - DefaultTbQueueMsg msg = gson.fromJson(new String(((Data) data.getMessage().getBody()).getValue().getArray()), DefaultTbQueueMsg.class); - return decoder.decode(msg); - } - -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusProducerTemplate.java b/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusProducerTemplate.java deleted file mode 100644 index 119f28079b..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusProducerTemplate.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.azure.servicebus; - -import com.google.gson.Gson; -import com.microsoft.azure.servicebus.IMessage; -import com.microsoft.azure.servicebus.Message; -import com.microsoft.azure.servicebus.QueueClient; -import com.microsoft.azure.servicebus.ReceiveMode; -import com.microsoft.azure.servicebus.primitives.ConnectionStringBuilder; -import com.microsoft.azure.servicebus.primitives.ServiceBusException; -import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueCallback; -import org.thingsboard.server.queue.TbQueueMsg; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.common.DefaultTbQueueMsg; - -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -@Slf4j -public class TbServiceBusProducerTemplate implements TbQueueProducer { - private final String defaultTopic; - private final Gson gson = new Gson(); - private final TbQueueAdmin admin; - private final TbServiceBusSettings serviceBusSettings; - private final Map clients = new ConcurrentHashMap<>(); - private final ExecutorService executorService; - - public TbServiceBusProducerTemplate(TbQueueAdmin admin, TbServiceBusSettings serviceBusSettings, String defaultTopic) { - this.admin = admin; - this.defaultTopic = defaultTopic; - this.serviceBusSettings = serviceBusSettings; - executorService = Executors.newCachedThreadPool(); - } - - @Override - public void init() { - - } - - @Override - public String getDefaultTopic() { - return defaultTopic; - } - - @Override - public void send(TopicPartitionInfo tpi, T msg, TbQueueCallback callback) { - IMessage message = new Message(gson.toJson(new DefaultTbQueueMsg(msg))); - CompletableFuture future = getClient(tpi.getFullTopicName()).sendAsync(message); - future.whenCompleteAsync((success, err) -> { - if (err != null) { - callback.onFailure(err); - } else { - callback.onSuccess(null); - } - }, executorService); - } - - @Override - public void stop() { - clients.forEach((t, client) -> { - try { - client.close(); - } catch (ServiceBusException e) { - log.error("Failed to close QueueClient.", e); - } - }); - - if (executorService != null) { - executorService.shutdownNow(); - } - } - - private QueueClient getClient(String topic) { - return clients.computeIfAbsent(topic, k -> { - admin.createTopicIfNotExists(topic); - ConnectionStringBuilder builder = - new ConnectionStringBuilder( - serviceBusSettings.getNamespaceName(), - topic, - serviceBusSettings.getSasKeyName(), - serviceBusSettings.getSasKey()); - try { - return new QueueClient(builder, ReceiveMode.PEEKLOCK); - } catch (InterruptedException | ServiceBusException e) { - log.error("Failed to create new client for the Queue: [{}]", topic, e); - throw new RuntimeException("Failed to create new client for the Queue", e); - } - }); - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusQueueConfigs.java b/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusQueueConfigs.java deleted file mode 100644 index 80da7846ea..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusQueueConfigs.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.azure.servicebus; - -import jakarta.annotation.PostConstruct; -import lombok.Getter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.queue.util.PropertyUtils; - -import java.util.Map; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='service-bus'") -public class TbServiceBusQueueConfigs { - - @Value("${queue.service-bus.queue-properties.core:}") - private String coreProperties; - @Value("${queue.service-bus.queue-properties.rule-engine:}") - private String ruleEngineProperties; - @Value("${queue.service-bus.queue-properties.transport-api:}") - private String transportApiProperties; - @Value("${queue.service-bus.queue-properties.notifications:}") - private String notificationsProperties; - @Value("${queue.service-bus.queue-properties.js-executor:}") - private String jsExecutorProperties; - @Value("${queue.service-bus.queue-properties.version-control:}") - private String vcProperties; - @Value("${queue.service-bus.queue-properties.edge:}") - private String edgeProperties; - - @Getter - private Map coreConfigs; - @Getter - private Map ruleEngineConfigs; - @Getter - private Map transportApiConfigs; - @Getter - private Map notificationsConfigs; - @Getter - private Map jsExecutorConfigs; - @Getter - private Map vcConfigs; - @Getter - private Map edgeConfigs; - - @PostConstruct - private void init() { - coreConfigs = PropertyUtils.getProps(coreProperties); - ruleEngineConfigs = PropertyUtils.getProps(ruleEngineProperties); - transportApiConfigs = PropertyUtils.getProps(transportApiProperties); - notificationsConfigs = PropertyUtils.getProps(notificationsProperties); - jsExecutorConfigs = PropertyUtils.getProps(jsExecutorProperties); - vcConfigs = PropertyUtils.getProps(vcProperties); - edgeConfigs = PropertyUtils.getProps(edgeProperties); - } - -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusSettings.java b/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusSettings.java deleted file mode 100644 index 98bb11a839..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/azure/servicebus/TbServiceBusSettings.java +++ /dev/null @@ -1,37 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.azure.servicebus; - -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; - -@Slf4j -@ConditionalOnExpression("'${queue.type:null}'=='service-bus'") -@Component -@Data -public class TbServiceBusSettings { - @Value("${queue.service_bus.namespace_name}") - private String namespaceName; - @Value("${queue.service_bus.sas_key_name}") - private String sasKeyName; - @Value("${queue.service_bus.sas_key}") - private String sasKey; - @Value("${queue.service_bus.max_messages}") - private int maxMessages; -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsMonolithQueueFactory.java deleted file mode 100644 index 310cc1d1c5..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsMonolithQueueFactory.java +++ /dev/null @@ -1,317 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.data.queue.Queue; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsRequest; -import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsResponse; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeEventNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; -import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; -import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; -import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; -import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate; -import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes; -import org.thingsboard.server.queue.sqs.TbAwsSqsSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && '${service.type:null}'=='monolith'") -public class AwsSqsMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory { - - private final TopicService topicService; - private final TbQueueCoreSettings coreSettings; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbQueueTransportApiSettings transportApiSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbAwsSqsSettings sqsSettings; - private final TbQueueVersionControlSettings vcSettings; - private final TbQueueEdgeSettings edgeSettings; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin otaAdmin; - private final TbQueueAdmin vcAdmin; - private final TbQueueAdmin edgeAdmin; - - public AwsSqsMonolithQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TbServiceInfoProvider serviceInfoProvider, - TbQueueTransportApiSettings transportApiSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbAwsSqsSettings sqsSettings, - TbQueueVersionControlSettings vcSettings, - TbQueueEdgeSettings edgeSettings, - TbAwsSqsQueueAttributes sqsQueueAttributes, - TbQueueRemoteJsInvokeSettings jsInvokeSettings) { - this.topicService = topicService; - this.coreSettings = coreSettings; - this.serviceInfoProvider = serviceInfoProvider; - this.ruleEngineSettings = ruleEngineSettings; - this.transportApiSettings = transportApiSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.sqsSettings = sqsSettings; - this.vcSettings = vcSettings; - this.edgeSettings = edgeSettings; - this.jsInvokeSettings = jsInvokeSettings; - - this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes()); - this.ruleEngineAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getRuleEngineAttributes()); - this.jsExecutorAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getJsExecutorAttributes()); - this.transportApiAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getTransportApiAttributes()); - this.notificationAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getNotificationsAttributes()); - this.otaAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getOtaAttributes()); - this.vcAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getVcAttributes()); - this.edgeAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getEdgeAttributes()); - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) - ); - } - - @Override - public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbAwsSqsConsumerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(configuration.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, - topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createTransportApiResponseProducer() { - return new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbAwsSqsProducerTemplate<>(jsExecutorAdmin, sqsSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbAwsSqsConsumerTemplate<>(jsExecutorAdmin, sqsSettings, - jsInvokeSettings.getResponseTopic() + "_" + serviceInfoProvider.getServiceId(), - msg -> { - RemoteJsResponse.Builder builder = RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createVersionControlMsgProducer() { - return new TbAwsSqsProducerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic())); - } - - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createHousekeeperReprocessingMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createEdgeMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(edgeAdmin, sqsSettings, topicService.buildTopicName(edgeSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbAwsSqsProducerTemplate<>(edgeAdmin, sqsSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueProducer> createEdgeEventMsgProducer() { - return null; - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (otaAdmin != null) { - otaAdmin.destroy(); - } - if (vcAdmin != null) { - vcAdmin.destroy(); - } - if (edgeAdmin != null) { - edgeAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbCoreQueueFactory.java deleted file mode 100644 index 515c1bba44..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbCoreQueueFactory.java +++ /dev/null @@ -1,291 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; -import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; -import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; -import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; -import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate; -import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes; -import org.thingsboard.server.queue.sqs.TbAwsSqsSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && '${service.type:null}'=='tb-core'") -public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { - - private final TbAwsSqsSettings sqsSettings; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbQueueCoreSettings coreSettings; - private final TbQueueTransportApiSettings transportApiSettings; - private final TopicService topicService; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbQueueVersionControlSettings vcSettings; - private final TbQueueEdgeSettings edgeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin otaAdmin; - private final TbQueueAdmin vcAdmin; - private final TbQueueAdmin edgeAdmin; - - public AwsSqsTbCoreQueueFactory(TbAwsSqsSettings sqsSettings, - TbQueueCoreSettings coreSettings, - TbQueueTransportApiSettings transportApiSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TopicService topicService, - TbQueueVersionControlSettings vcSettings, - TbQueueEdgeSettings edgeSettings, - TbServiceInfoProvider serviceInfoProvider, - TbQueueRemoteJsInvokeSettings jsInvokeSettings, - TbAwsSqsQueueAttributes sqsQueueAttributes, - TbQueueTransportNotificationSettings transportNotificationSettings) { - this.sqsSettings = sqsSettings; - this.coreSettings = coreSettings; - this.transportApiSettings = transportApiSettings; - this.ruleEngineSettings = ruleEngineSettings; - this.edgeSettings = edgeSettings; - this.topicService = topicService; - this.serviceInfoProvider = serviceInfoProvider; - this.jsInvokeSettings = jsInvokeSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.vcSettings = vcSettings; - - this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes()); - this.ruleEngineAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getRuleEngineAttributes()); - this.jsExecutorAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getJsExecutorAttributes()); - this.transportApiAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getTransportApiAttributes()); - this.notificationAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getNotificationsAttributes()); - this.otaAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getOtaAttributes()); - this.vcAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getVcAttributes()); - this.edgeAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getEdgeAttributes()); - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createTransportApiResponseProducer() { - return new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbAwsSqsProducerTemplate<>(jsExecutorAdmin, sqsSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbAwsSqsConsumerTemplate<>(jsExecutorAdmin, sqsSettings, - jsInvokeSettings.getResponseTopic() + "_" + serviceInfoProvider.getServiceId(), - msg -> { - JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createVersionControlMsgProducer() { - return new TbAwsSqsProducerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createHousekeeperReprocessingMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createEdgeMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(edgeAdmin, sqsSettings, topicService.buildTopicName(edgeSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbAwsSqsProducerTemplate<>(edgeAdmin, sqsSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (otaAdmin != null) { - otaAdmin.destroy(); - } - if (vcAdmin != null) { - vcAdmin.destroy(); - } - if (edgeAdmin != null) { - edgeAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java deleted file mode 100644 index a93aba2764..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbRuleEngineQueueFactory.java +++ /dev/null @@ -1,208 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.data.queue.Queue; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; -import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; -import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; -import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate; -import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes; -import org.thingsboard.server.queue.sqs.TbAwsSqsSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && '${service.type:null}'=='tb-rule-engine'") -public class AwsSqsTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { - - private final TopicService topicService; - private final TbQueueCoreSettings coreSettings; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbAwsSqsSettings sqsSettings; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbQueueEdgeSettings edgeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin otaAdmin; - private final TbQueueAdmin edgeAdmin; - - public AwsSqsTbRuleEngineQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TbServiceInfoProvider serviceInfoProvider, - TbAwsSqsSettings sqsSettings, - TbAwsSqsQueueAttributes sqsQueueAttributes, - TbQueueRemoteJsInvokeSettings jsInvokeSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbQueueEdgeSettings edgeSettings) { - this.topicService = topicService; - this.coreSettings = coreSettings; - this.serviceInfoProvider = serviceInfoProvider; - this.ruleEngineSettings = ruleEngineSettings; - this.sqsSettings = sqsSettings; - this.jsInvokeSettings = jsInvokeSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.edgeSettings = edgeSettings; - - this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes()); - this.ruleEngineAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getRuleEngineAttributes()); - this.jsExecutorAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getJsExecutorAttributes()); - this.notificationAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getNotificationsAttributes()); - this.otaAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getOtaAttributes()); - this.edgeAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getEdgeAttributes()); - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbAwsSqsProducerTemplate<>(edgeAdmin, sqsSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbAwsSqsConsumerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(configuration.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, - topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbAwsSqsProducerTemplate<>(jsExecutorAdmin, sqsSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbAwsSqsConsumerTemplate<>(jsExecutorAdmin, sqsSettings, - jsInvokeSettings.getResponseTopic() + "_" + serviceInfoProvider.getServiceId(), - msg -> { - JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(otaAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (otaAdmin != null) { - otaAdmin.destroy(); - } - } - -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbVersionControlQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbVersionControlQueueFactory.java deleted file mode 100644 index 67ff0393bd..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTbVersionControlQueueFactory.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.gen.transport.TransportProtos; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; -import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; -import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; -import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate; -import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes; -import org.thingsboard.server.queue.sqs.TbAwsSqsSettings; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && '${service.type:null}'=='tb-vc-executor'") -public class AwsSqsTbVersionControlQueueFactory implements TbVersionControlQueueFactory { - - private final TbAwsSqsSettings sqsSettings; - private final TbQueueCoreSettings coreSettings; - private final TbQueueVersionControlSettings vcSettings; - private final TopicService topicService; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin vcAdmin; - - public AwsSqsTbVersionControlQueueFactory(TbAwsSqsSettings sqsSettings, - TbQueueCoreSettings coreSettings, - TbQueueVersionControlSettings vcSettings, - TbAwsSqsQueueAttributes sqsQueueAttributes, - TopicService topicService - ) { - this.sqsSettings = sqsSettings; - this.coreSettings = coreSettings; - this.vcSettings = vcSettings; - this.topicService = topicService; - - this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes()); - this.notificationAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getNotificationsAttributes()); - this.vcAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getVcAttributes()); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbAwsSqsConsumerTemplate<>(vcAdmin, sqsSettings, topicService.buildTopicName(vcSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) - ); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (vcAdmin != null) { - vcAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTransportQueueFactory.java deleted file mode 100644 index 407ef86a99..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/AwsSqsTransportQueueFactory.java +++ /dev/null @@ -1,153 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import jakarta.annotation.PreDestroy; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.gen.transport.TransportProtos; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; -import org.thingsboard.server.queue.sqs.TbAwsSqsAdmin; -import org.thingsboard.server.queue.sqs.TbAwsSqsConsumerTemplate; -import org.thingsboard.server.queue.sqs.TbAwsSqsProducerTemplate; -import org.thingsboard.server.queue.sqs.TbAwsSqsQueueAttributes; -import org.thingsboard.server.queue.sqs.TbAwsSqsSettings; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs' && (('${service.type:null}'=='monolith' && '${transport.api_enabled:true}'=='true') || '${service.type:null}'=='tb-transport')") -@Slf4j -public class AwsSqsTransportQueueFactory implements TbTransportQueueFactory { - private final TbQueueTransportApiSettings transportApiSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbAwsSqsSettings sqsSettings; - private final TbQueueCoreSettings coreSettings; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TopicService topicService; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin ruleEngineAdmin; - - public AwsSqsTransportQueueFactory(TbQueueTransportApiSettings transportApiSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbAwsSqsSettings sqsSettings, - TbServiceInfoProvider serviceInfoProvider, - TbQueueCoreSettings coreSettings, - TbAwsSqsQueueAttributes sqsQueueAttributes, - TbQueueRuleEngineSettings ruleEngineSettings, - TopicService topicService) { - this.transportApiSettings = transportApiSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.sqsSettings = sqsSettings; - this.serviceInfoProvider = serviceInfoProvider; - this.coreSettings = coreSettings; - this.ruleEngineSettings = ruleEngineSettings; - this.topicService = topicService; - - this.coreAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getCoreAttributes()); - this.transportApiAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getTransportApiAttributes()); - this.notificationAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getNotificationsAttributes()); - this.ruleEngineAdmin = new TbAwsSqsAdmin(sqsSettings, sqsQueueAttributes.getRuleEngineAttributes()); - } - - @Override - public TbQueueRequestTemplate, TbProtoQueueMsg> createTransportApiRequestTemplate() { - TbQueueProducer> producerTemplate = - new TbAwsSqsProducerTemplate<>(transportApiAdmin, sqsSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic())); - - TbQueueConsumer> consumerTemplate = - new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, - topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "_" + serviceInfoProvider.getServiceId()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> templateBuilder = DefaultTbQueueRequestTemplate.builder(); - templateBuilder.queueAdmin(transportApiAdmin); - templateBuilder.requestTemplate(producerTemplate); - templateBuilder.responseTemplate(consumerTemplate); - templateBuilder.maxPendingRequests(transportApiSettings.getMaxPendingRequests()); - templateBuilder.maxRequestTimeout(transportApiSettings.getMaxRequestsTimeout()); - templateBuilder.pollInterval(transportApiSettings.getResponsePollInterval()); - return templateBuilder.build(); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbAwsSqsProducerTemplate<>(ruleEngineAdmin, sqsSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbAwsSqsProducerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createTransportNotificationsConsumer() { - return new TbAwsSqsConsumerTemplate<>(notificationAdmin, sqsSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "_" + serviceInfoProvider.getServiceId()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubMonolithQueueFactory.java deleted file mode 100644 index 05bef819b7..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubMonolithQueueFactory.java +++ /dev/null @@ -1,315 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.data.queue.Queue; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsRequest; -import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsResponse; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeEventNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; -import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; -import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate; -import org.thingsboard.server.queue.pubsub.TbPubSubSettings; -import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; -import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='pubsub' && '${service.type:null}'=='monolith'") -public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory { - - private final TbPubSubSettings pubSubSettings; - private final TbQueueCoreSettings coreSettings; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbQueueTransportApiSettings transportApiSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TopicService topicService; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - private final TbQueueVersionControlSettings vcSettings; - private final TbQueueEdgeSettings edgeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin vcAdmin; - private final TbQueueAdmin edgeAdmin; - - public PubSubMonolithQueueFactory(TbPubSubSettings pubSubSettings, - TbQueueCoreSettings coreSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TbQueueTransportApiSettings transportApiSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TopicService topicService, - TbServiceInfoProvider serviceInfoProvider, - TbPubSubSubscriptionSettings pubSubSubscriptionSettings, - TbQueueRemoteJsInvokeSettings jsInvokeSettings, - TbQueueVersionControlSettings vcSettings, - TbQueueEdgeSettings edgeSettings) { - this.pubSubSettings = pubSubSettings; - this.coreSettings = coreSettings; - this.ruleEngineSettings = ruleEngineSettings; - this.transportApiSettings = transportApiSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.topicService = topicService; - this.serviceInfoProvider = serviceInfoProvider; - this.vcSettings = vcSettings; - this.edgeSettings = edgeSettings; - - this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings()); - this.ruleEngineAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getRuleEngineSettings()); - this.jsExecutorAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getJsExecutorSettings()); - this.transportApiAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getTransportApiSettings()); - this.notificationAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getNotificationsSettings()); - this.vcAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getVcSettings()); - this.edgeAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getEdgeSettings()); - - this.jsInvokeSettings = jsInvokeSettings; - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbPubSubProducerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbPubSubConsumerTemplate<>(vcAdmin, pubSubSettings, topicService.buildTopicName(vcSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) - ); - } - - @Override - public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbPubSubConsumerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(configuration.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { - return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { - return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbPubSubConsumerTemplate<>(transportApiAdmin, pubSubSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createTransportApiResponseProducer() { - return new TbPubSubProducerTemplate<>(transportApiAdmin, pubSubSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbPubSubProducerTemplate<>(jsExecutorAdmin, pubSubSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbPubSubConsumerTemplate<>(jsExecutorAdmin, pubSubSettings, - jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(), - msg -> { - RemoteJsResponse.Builder builder = RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createVersionControlMsgProducer() { - return new TbPubSubProducerTemplate<>(vcAdmin, pubSubSettings, topicService.buildTopicName(vcSettings.getTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperMsgConsumer() { - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createHousekeeperReprocessingMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() { - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbPubSubProducerTemplate<>(edgeAdmin, pubSubSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createEdgeMsgConsumer() { - return new TbPubSubConsumerTemplate<>(edgeAdmin, pubSubSettings, topicService.buildTopicName(edgeSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() { - return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueProducer> createEdgeEventMsgProducer() { - return null; - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (vcAdmin != null) { - vcAdmin.destroy(); - } - if (edgeAdmin != null) { - edgeAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbCoreQueueFactory.java deleted file mode 100644 index 919d895a97..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbCoreQueueFactory.java +++ /dev/null @@ -1,278 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; -import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; -import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate; -import org.thingsboard.server.queue.pubsub.TbPubSubSettings; -import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='pubsub' && '${service.type:null}'=='tb-core'") -public class PubSubTbCoreQueueFactory implements TbCoreQueueFactory { - - private final TbPubSubSettings pubSubSettings; - private final TbQueueCoreSettings coreSettings; - private final TbQueueTransportApiSettings transportApiSettings; - private final TopicService topicService; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbQueueEdgeSettings edgeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin edgeAdmin; - - public PubSubTbCoreQueueFactory(TbPubSubSettings pubSubSettings, - TbQueueCoreSettings coreSettings, - TbQueueTransportApiSettings transportApiSettings, - TopicService topicService, - TbServiceInfoProvider serviceInfoProvider, - TbQueueRemoteJsInvokeSettings jsInvokeSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TbQueueEdgeSettings edgeSettings, - TbPubSubSubscriptionSettings pubSubSubscriptionSettings) { - this.pubSubSettings = pubSubSettings; - this.coreSettings = coreSettings; - this.transportApiSettings = transportApiSettings; - this.topicService = topicService; - this.serviceInfoProvider = serviceInfoProvider; - this.jsInvokeSettings = jsInvokeSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.ruleEngineSettings = ruleEngineSettings; - this.edgeSettings = edgeSettings; - - this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings()); - this.jsExecutorAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getJsExecutorSettings()); - this.transportApiAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getTransportApiSettings()); - this.notificationAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getNotificationsSettings()); - this.ruleEngineAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getRuleEngineSettings()); - this.edgeAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getEdgeSettings()); - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { - return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbPubSubConsumerTemplate<>(transportApiAdmin, pubSubSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createTransportApiResponseProducer() { - return new TbPubSubProducerTemplate<>(transportApiAdmin, pubSubSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbPubSubProducerTemplate<>(jsExecutorAdmin, pubSubSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbPubSubConsumerTemplate<>(jsExecutorAdmin, pubSubSettings, - jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(), - msg -> { - JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createVersionControlMsgProducer() { - //TODO: version-control - return null; - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperMsgConsumer() { - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createHousekeeperReprocessingMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() { - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createEdgeMsgConsumer() { - return new TbPubSubConsumerTemplate<>(edgeAdmin, pubSubSettings, topicService.buildTopicName(edgeSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbPubSubProducerTemplate<>(edgeAdmin, pubSubSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() { - return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (edgeAdmin != null) { - edgeAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbRuleEngineQueueFactory.java deleted file mode 100644 index 671da15f20..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbRuleEngineQueueFactory.java +++ /dev/null @@ -1,209 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.data.queue.Queue; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeEventNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; -import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; -import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate; -import org.thingsboard.server.queue.pubsub.TbPubSubSettings; -import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='pubsub' && '${service.type:null}'=='tb-rule-engine'") -public class PubSubTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { - - private final TbPubSubSettings pubSubSettings; - private final TbQueueCoreSettings coreSettings; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TopicService topicService; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbQueueEdgeSettings edgeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin edgeAdmin; - - public PubSubTbRuleEngineQueueFactory(TbPubSubSettings pubSubSettings, - TbQueueCoreSettings coreSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TopicService topicService, - TbServiceInfoProvider serviceInfoProvider, - TbQueueRemoteJsInvokeSettings jsInvokeSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbPubSubSubscriptionSettings pubSubSubscriptionSettings, - TbQueueEdgeSettings edgeSettings) { - this.pubSubSettings = pubSubSettings; - this.coreSettings = coreSettings; - this.ruleEngineSettings = ruleEngineSettings; - this.topicService = topicService; - this.serviceInfoProvider = serviceInfoProvider; - this.jsInvokeSettings = jsInvokeSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.edgeSettings = edgeSettings; - - this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings()); - this.ruleEngineAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getRuleEngineSettings()); - this.jsExecutorAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getJsExecutorSettings()); - this.notificationAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getNotificationsSettings()); - this.edgeAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getEdgeSettings()); - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbPubSubProducerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbPubSubProducerTemplate<>(edgeAdmin, pubSubSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueProducer> createEdgeEventMsgProducer() { - return null; - } - - @Override - public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbPubSubConsumerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(configuration.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { - return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbPubSubProducerTemplate<>(jsExecutorAdmin, pubSubSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbPubSubConsumerTemplate<>(jsExecutorAdmin, pubSubSettings, - jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(), - msg -> { - JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbVersionControlQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbVersionControlQueueFactory.java deleted file mode 100644 index b6da4e2973..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTbVersionControlQueueFactory.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.gen.transport.TransportProtos; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; -import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; -import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate; -import org.thingsboard.server.queue.pubsub.TbPubSubSettings; -import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='pubsub' && '${service.type:null}'=='tb-vc-executor'") -public class PubSubTbVersionControlQueueFactory implements TbVersionControlQueueFactory { - - private final TbPubSubSettings pubSubSettings; - private final TbQueueCoreSettings coreSettings; - private final TbQueueVersionControlSettings vcSettings; - private final TopicService topicService; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin vcAdmin; - - public PubSubTbVersionControlQueueFactory(TbPubSubSettings pubSubSettings, - TbQueueCoreSettings coreSettings, - TbQueueVersionControlSettings vcSettings, - TbPubSubSubscriptionSettings pubSubSubscriptionSettings, - TopicService topicService - ) { - this.pubSubSettings = pubSubSettings; - this.coreSettings = coreSettings; - this.vcSettings = vcSettings; - this.topicService = topicService; - - this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings()); - this.notificationAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getNotificationsSettings()); - this.vcAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getVcSettings()); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbPubSubConsumerTemplate<>(vcAdmin, pubSubSettings, topicService.buildTopicName(vcSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) - ); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (vcAdmin != null) { - vcAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTransportQueueFactory.java deleted file mode 100644 index a7500d2083..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/PubSubTransportQueueFactory.java +++ /dev/null @@ -1,153 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import jakarta.annotation.PreDestroy; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.pubsub.TbPubSubAdmin; -import org.thingsboard.server.queue.pubsub.TbPubSubConsumerTemplate; -import org.thingsboard.server.queue.pubsub.TbPubSubProducerTemplate; -import org.thingsboard.server.queue.pubsub.TbPubSubSettings; -import org.thingsboard.server.queue.pubsub.TbPubSubSubscriptionSettings; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='pubsub' && (('${service.type:null}'=='monolith' && '${transport.api_enabled:true}'=='true') || '${service.type:null}'=='tb-transport')") -@Slf4j -public class PubSubTransportQueueFactory implements TbTransportQueueFactory { - - private final TbPubSubSettings pubSubSettings; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueCoreSettings coreSettings; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbQueueTransportApiSettings transportApiSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TopicService topicService; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - - public PubSubTransportQueueFactory(TbPubSubSettings pubSubSettings, - TbServiceInfoProvider serviceInfoProvider, - TbQueueCoreSettings coreSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TbQueueTransportApiSettings transportApiSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbPubSubSubscriptionSettings pubSubSubscriptionSettings, - TopicService topicService) { - this.pubSubSettings = pubSubSettings; - this.serviceInfoProvider = serviceInfoProvider; - this.coreSettings = coreSettings; - this.ruleEngineSettings = ruleEngineSettings; - this.transportApiSettings = transportApiSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.topicService = topicService; - - this.coreAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getCoreSettings()); - this.ruleEngineAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getRuleEngineSettings()); - this.transportApiAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getTransportApiSettings()); - this.notificationAdmin = new TbPubSubAdmin(pubSubSettings, pubSubSubscriptionSettings.getNotificationsSettings()); - } - - @Override - public TbQueueRequestTemplate, TbProtoQueueMsg> createTransportApiRequestTemplate() { - TbQueueProducer> producer = new TbPubSubProducerTemplate<>(transportApiAdmin, pubSubSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic())); - TbQueueConsumer> consumer = new TbPubSubConsumerTemplate<>(transportApiAdmin, pubSubSettings, - topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> templateBuilder = DefaultTbQueueRequestTemplate.builder(); - templateBuilder.queueAdmin(transportApiAdmin); - templateBuilder.requestTemplate(producer); - templateBuilder.responseTemplate(consumer); - templateBuilder.maxPendingRequests(transportApiSettings.getMaxPendingRequests()); - templateBuilder.maxRequestTimeout(transportApiSettings.getMaxRequestsTimeout()); - templateBuilder.pollInterval(transportApiSettings.getResponsePollInterval()); - return templateBuilder.build(); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbPubSubProducerTemplate<>(ruleEngineAdmin, pubSubSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbPubSubProducerTemplate<>(notificationAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createTransportNotificationsConsumer() { - return new TbPubSubConsumerTemplate<>(notificationAdmin, pubSubSettings, - topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqMonolithQueueFactory.java deleted file mode 100644 index 3c59923def..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqMonolithQueueFactory.java +++ /dev/null @@ -1,313 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.data.queue.Queue; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsRequest; -import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsResponse; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeEventNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqProducerTemplate; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqQueueArguments; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqSettings; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; -import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='rabbitmq' && '${service.type:null}'=='monolith'") -public class RabbitMqMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory { - - private final TopicService topicService; - private final TbQueueCoreSettings coreSettings; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbQueueTransportApiSettings transportApiSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbRabbitMqSettings rabbitMqSettings; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - private final TbQueueVersionControlSettings vcSettings; - private final TbQueueEdgeSettings edgeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin vcAdmin; - private final TbQueueAdmin edgeAdmin; - - public RabbitMqMonolithQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TbServiceInfoProvider serviceInfoProvider, - TbQueueTransportApiSettings transportApiSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbRabbitMqSettings rabbitMqSettings, - TbRabbitMqQueueArguments queueArguments, - TbQueueRemoteJsInvokeSettings jsInvokeSettings, - TbQueueVersionControlSettings vcSettings, - TbQueueEdgeSettings edgeSettings) { - this.topicService = topicService; - this.coreSettings = coreSettings; - this.serviceInfoProvider = serviceInfoProvider; - this.ruleEngineSettings = ruleEngineSettings; - this.transportApiSettings = transportApiSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.rabbitMqSettings = rabbitMqSettings; - this.jsInvokeSettings = jsInvokeSettings; - this.vcSettings = vcSettings; - this.edgeSettings = edgeSettings; - - this.coreAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getCoreArgs()); - this.ruleEngineAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getRuleEngineArgs()); - this.jsExecutorAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getJsExecutorArgs()); - this.transportApiAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getTransportApiArgs()); - this.notificationAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getNotificationsArgs()); - this.vcAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getVcArgs()); - this.edgeAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getEdgeArgs()); - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbRabbitMqProducerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(vcAdmin, rabbitMqSettings, topicService.buildTopicName(vcSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) - ); - } - - @Override - public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbRabbitMqConsumerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(configuration.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, - topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbRabbitMqConsumerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createTransportApiResponseProducer() { - return new TbRabbitMqProducerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbRabbitMqProducerTemplate<>(jsExecutorAdmin, rabbitMqSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbRabbitMqConsumerTemplate<>(jsExecutorAdmin, rabbitMqSettings, - jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(), - msg -> { - RemoteJsResponse.Builder builder = RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createVersionControlMsgProducer() { - return new TbRabbitMqProducerTemplate<>(vcAdmin, rabbitMqSettings, topicService.buildTopicName(vcSettings.getTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createHousekeeperReprocessingMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createEdgeMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(edgeAdmin, rabbitMqSettings, topicService.buildTopicName(edgeSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbRabbitMqProducerTemplate<>(edgeAdmin, rabbitMqSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueProducer> createEdgeEventMsgProducer() { - return null; - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (vcAdmin != null) { - vcAdmin.destroy(); - } - if (edgeAdmin != null) { - edgeAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbCoreQueueFactory.java deleted file mode 100644 index 16f9838384..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbCoreQueueFactory.java +++ /dev/null @@ -1,278 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqProducerTemplate; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqQueueArguments; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqSettings; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='rabbitmq' && '${service.type:null}'=='tb-core'") -public class RabbitMqTbCoreQueueFactory implements TbCoreQueueFactory { - - private final TbRabbitMqSettings rabbitMqSettings; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbQueueCoreSettings coreSettings; - private final TbQueueTransportApiSettings transportApiSettings; - private final TopicService topicService; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbQueueEdgeSettings edgeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin edgeAdmin; - - public RabbitMqTbCoreQueueFactory(TbRabbitMqSettings rabbitMqSettings, - TbQueueCoreSettings coreSettings, - TbQueueTransportApiSettings transportApiSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TopicService topicService, - TbServiceInfoProvider serviceInfoProvider, - TbQueueRemoteJsInvokeSettings jsInvokeSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbQueueEdgeSettings edgeSettings, - TbRabbitMqQueueArguments queueArguments) { - this.rabbitMqSettings = rabbitMqSettings; - this.coreSettings = coreSettings; - this.transportApiSettings = transportApiSettings; - this.ruleEngineSettings = ruleEngineSettings; - this.topicService = topicService; - this.serviceInfoProvider = serviceInfoProvider; - this.jsInvokeSettings = jsInvokeSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.edgeSettings = edgeSettings; - - this.coreAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getCoreArgs()); - this.ruleEngineAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getRuleEngineArgs()); - this.jsExecutorAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getJsExecutorArgs()); - this.transportApiAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getTransportApiArgs()); - this.notificationAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getNotificationsArgs()); - this.edgeAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getEdgeArgs()); - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbRabbitMqProducerTemplate<>(edgeAdmin, rabbitMqSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createEdgeMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(edgeAdmin, rabbitMqSettings, topicService.buildTopicName(edgeSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbRabbitMqConsumerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createTransportApiResponseProducer() { - return new TbRabbitMqProducerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbRabbitMqProducerTemplate<>(jsExecutorAdmin, rabbitMqSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbRabbitMqConsumerTemplate<>(jsExecutorAdmin, rabbitMqSettings, - jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(), - msg -> { - JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueProducer> createVersionControlMsgProducer() { - //TODO: version-control - return null; - } - - @Override - public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createHousekeeperReprocessingMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (edgeAdmin != null) { - edgeAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbRuleEngineQueueFactory.java deleted file mode 100644 index a7af729e1f..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbRuleEngineQueueFactory.java +++ /dev/null @@ -1,202 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.data.queue.Queue; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqProducerTemplate; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqQueueArguments; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqSettings; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='rabbitmq' && '${service.type:null}'=='tb-rule-engine'") -public class RabbitMqTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { - - private final TopicService topicService; - private final TbQueueCoreSettings coreSettings; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbRabbitMqSettings rabbitMqSettings; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbQueueEdgeSettings edgeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin edgeAdmin; - - public RabbitMqTbRuleEngineQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TbServiceInfoProvider serviceInfoProvider, - TbRabbitMqSettings rabbitMqSettings, - TbQueueRemoteJsInvokeSettings jsInvokeSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbQueueEdgeSettings edgeSettings, - TbRabbitMqQueueArguments queueArguments) { - this.topicService = topicService; - this.coreSettings = coreSettings; - this.serviceInfoProvider = serviceInfoProvider; - this.ruleEngineSettings = ruleEngineSettings; - this.rabbitMqSettings = rabbitMqSettings; - this.jsInvokeSettings = jsInvokeSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.edgeSettings = edgeSettings; - - this.coreAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getCoreArgs()); - this.ruleEngineAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getRuleEngineArgs()); - this.jsExecutorAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getJsExecutorArgs()); - this.notificationAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getNotificationsArgs()); - this.edgeAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getEdgeArgs()); - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbRabbitMqProducerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbRabbitMqProducerTemplate<>(edgeAdmin, rabbitMqSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbRabbitMqConsumerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(configuration.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, - topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbRabbitMqProducerTemplate<>(jsExecutorAdmin, rabbitMqSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbRabbitMqConsumerTemplate<>(jsExecutorAdmin, rabbitMqSettings, - jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(), - msg -> { - JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbVersionControlQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbVersionControlQueueFactory.java deleted file mode 100644 index 604955be2c..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTbVersionControlQueueFactory.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.gen.transport.TransportProtos; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqProducerTemplate; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqQueueArguments; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqSettings; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='rabbitmq' && '${service.type:null}'=='tb-vc-executor'") -public class RabbitMqTbVersionControlQueueFactory implements TbVersionControlQueueFactory { - - private final TbRabbitMqSettings rabbitMqSettings; - private final TbQueueCoreSettings coreSettings; - private final TbQueueVersionControlSettings vcSettings; - private final TopicService topicService; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin vcAdmin; - - public RabbitMqTbVersionControlQueueFactory(TbRabbitMqSettings rabbitMqSettings, - TbQueueCoreSettings coreSettings, - TbQueueVersionControlSettings vcSettings, - TbRabbitMqQueueArguments queueArguments, - TopicService topicService - ) { - this.rabbitMqSettings = rabbitMqSettings; - this.coreSettings = coreSettings; - this.vcSettings = vcSettings; - this.topicService = topicService; - - this.coreAdmin = new TbRabbitMqAdmin(this.rabbitMqSettings, queueArguments.getCoreArgs()); - this.notificationAdmin = new TbRabbitMqAdmin(this.rabbitMqSettings, queueArguments.getNotificationsArgs()); - this.vcAdmin = new TbRabbitMqAdmin(this.rabbitMqSettings, queueArguments.getVcArgs()); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbRabbitMqConsumerTemplate<>(vcAdmin, rabbitMqSettings, topicService.buildTopicName(vcSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) - ); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (vcAdmin != null) { - vcAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTransportQueueFactory.java deleted file mode 100644 index ea922557bd..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/RabbitMqTransportQueueFactory.java +++ /dev/null @@ -1,154 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import jakarta.annotation.PreDestroy; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqAdmin; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqConsumerTemplate; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqProducerTemplate; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqQueueArguments; -import org.thingsboard.server.queue.rabbitmq.TbRabbitMqSettings; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='rabbitmq' && (('${service.type:null}'=='monolith' && '${transport.api_enabled:true}'=='true') || '${service.type:null}'=='tb-transport')") -@Slf4j -public class RabbitMqTransportQueueFactory implements TbTransportQueueFactory { - private final TbQueueTransportApiSettings transportApiSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbRabbitMqSettings rabbitMqSettings; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueCoreSettings coreSettings; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TopicService topicService; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - - public RabbitMqTransportQueueFactory(TbQueueTransportApiSettings transportApiSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbRabbitMqSettings rabbitMqSettings, - TbServiceInfoProvider serviceInfoProvider, - TbQueueCoreSettings coreSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TbRabbitMqQueueArguments queueArguments, - TopicService topicService) { - this.transportApiSettings = transportApiSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.rabbitMqSettings = rabbitMqSettings; - this.serviceInfoProvider = serviceInfoProvider; - this.coreSettings = coreSettings; - this.ruleEngineSettings = ruleEngineSettings; - this.topicService = topicService; - - this.coreAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getCoreArgs()); - this.ruleEngineAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getRuleEngineArgs()); - this.transportApiAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getTransportApiArgs()); - this.notificationAdmin = new TbRabbitMqAdmin(rabbitMqSettings, queueArguments.getNotificationsArgs()); - } - - @Override - public TbQueueRequestTemplate, TbProtoQueueMsg> createTransportApiRequestTemplate() { - TbQueueProducer> producerTemplate = - new TbRabbitMqProducerTemplate<>(transportApiAdmin, rabbitMqSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic())); - - TbQueueConsumer> consumerTemplate = - new TbRabbitMqConsumerTemplate<>(transportApiAdmin, rabbitMqSettings, - topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> templateBuilder = DefaultTbQueueRequestTemplate.builder(); - templateBuilder.queueAdmin(transportApiAdmin); - templateBuilder.requestTemplate(producerTemplate); - templateBuilder.responseTemplate(consumerTemplate); - templateBuilder.maxPendingRequests(transportApiSettings.getMaxPendingRequests()); - templateBuilder.maxRequestTimeout(transportApiSettings.getMaxRequestsTimeout()); - templateBuilder.pollInterval(transportApiSettings.getResponsePollInterval()); - return templateBuilder.build(); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbRabbitMqProducerTemplate<>(ruleEngineAdmin, rabbitMqSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbRabbitMqProducerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createTransportNotificationsConsumer() { - return new TbRabbitMqConsumerTemplate<>(notificationAdmin, rabbitMqSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusMonolithQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusMonolithQueueFactory.java deleted file mode 100644 index 932bbd21e5..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusMonolithQueueFactory.java +++ /dev/null @@ -1,312 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.data.queue.Queue; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeEventNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusAdmin; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusQueueConfigs; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; -import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='service-bus' && '${service.type:null}'=='monolith'") -public class ServiceBusMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngineQueueFactory, TbVersionControlQueueFactory { - - private final TopicService topicService; - private final TbQueueCoreSettings coreSettings; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbQueueTransportApiSettings transportApiSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbServiceBusSettings serviceBusSettings; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - private final TbQueueVersionControlSettings vcSettings; - private final TbQueueEdgeSettings edgeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin vcAdmin; - private final TbQueueAdmin edgeAdmin; - - public ServiceBusMonolithQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TbServiceInfoProvider serviceInfoProvider, - TbQueueTransportApiSettings transportApiSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbServiceBusSettings serviceBusSettings, - TbQueueRemoteJsInvokeSettings jsInvokeSettings, - TbQueueVersionControlSettings vcSettings, - TbQueueEdgeSettings edgeSettings, - TbServiceBusQueueConfigs serviceBusQueueConfigs) { - this.topicService = topicService; - this.coreSettings = coreSettings; - this.serviceInfoProvider = serviceInfoProvider; - this.ruleEngineSettings = ruleEngineSettings; - this.transportApiSettings = transportApiSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.serviceBusSettings = serviceBusSettings; - this.jsInvokeSettings = jsInvokeSettings; - this.vcSettings = vcSettings; - this.edgeSettings = edgeSettings; - - this.coreAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getCoreConfigs()); - this.ruleEngineAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getRuleEngineConfigs()); - this.jsExecutorAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getJsExecutorConfigs()); - this.transportApiAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getTransportApiConfigs()); - this.notificationAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getNotificationsConfigs()); - this.vcAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getVcConfigs()); - this.edgeAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getEdgeConfigs()); - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbServiceBusProducerTemplate<>(ruleEngineAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(vcAdmin, serviceBusSettings, topicService.buildTopicName(vcSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) - ); - } - - @Override - public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbServiceBusConsumerTemplate<>(ruleEngineAdmin, serviceBusSettings, configuration.getTopic(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbServiceBusConsumerTemplate<>(transportApiAdmin, serviceBusSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createTransportApiResponseProducer() { - return new TbServiceBusProducerTemplate<>(transportApiAdmin, serviceBusSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbServiceBusProducerTemplate<>(jsExecutorAdmin, serviceBusSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbServiceBusConsumerTemplate<>(jsExecutorAdmin, serviceBusSettings, - jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(), - msg -> { - JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createVersionControlMsgProducer() { - return new TbServiceBusProducerTemplate<>(vcAdmin, serviceBusSettings, topicService.buildTopicName(vcSettings.getTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createHousekeeperReprocessingMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createEdgeMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(edgeAdmin, serviceBusSettings, topicService.buildTopicName(edgeSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbServiceBusProducerTemplate<>(edgeAdmin, serviceBusSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueProducer> createEdgeEventMsgProducer() { - return null; - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (vcAdmin != null) { - vcAdmin.destroy(); - } - if (edgeAdmin != null) { - edgeAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbCoreQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbCoreQueueFactory.java deleted file mode 100644 index 71a7efe50b..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbCoreQueueFactory.java +++ /dev/null @@ -1,278 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToVersionControlServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusAdmin; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusQueueConfigs; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='service-bus' && '${service.type:null}'=='tb-core'") -public class ServiceBusTbCoreQueueFactory implements TbCoreQueueFactory { - - private final TbServiceBusSettings serviceBusSettings; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbQueueCoreSettings coreSettings; - private final TbQueueTransportApiSettings transportApiSettings; - private final TopicService topicService; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbQueueEdgeSettings edgeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin edgeAdmin; - - public ServiceBusTbCoreQueueFactory(TbServiceBusSettings serviceBusSettings, - TbQueueCoreSettings coreSettings, - TbQueueTransportApiSettings transportApiSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TopicService topicService, - TbServiceInfoProvider serviceInfoProvider, - TbQueueRemoteJsInvokeSettings jsInvokeSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbQueueEdgeSettings edgeSettings, - TbServiceBusQueueConfigs serviceBusQueueConfigs) { - this.serviceBusSettings = serviceBusSettings; - this.coreSettings = coreSettings; - this.transportApiSettings = transportApiSettings; - this.ruleEngineSettings = ruleEngineSettings; - this.topicService = topicService; - this.serviceInfoProvider = serviceInfoProvider; - this.jsInvokeSettings = jsInvokeSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.edgeSettings = edgeSettings; - - this.coreAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getCoreConfigs()); - this.ruleEngineAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getRuleEngineConfigs()); - this.jsExecutorAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getJsExecutorConfigs()); - this.transportApiAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getTransportApiConfigs()); - this.notificationAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getNotificationsConfigs()); - this.edgeAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getEdgeConfigs()); - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueConsumer> createToCoreMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToCoreNotificationsMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - topicService.getNotificationsTopic(ServiceType.TB_CORE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToCoreNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createTransportApiRequestConsumer() { - return new TbServiceBusConsumerTemplate<>(transportApiAdmin, serviceBusSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiRequestMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createTransportApiResponseProducer() { - return new TbServiceBusProducerTemplate<>(transportApiAdmin, serviceBusSettings, topicService.buildTopicName(transportApiSettings.getResponsesTopic())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbServiceBusProducerTemplate<>(jsExecutorAdmin, serviceBusSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbServiceBusConsumerTemplate<>(jsExecutorAdmin, serviceBusSettings, - jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(), - msg -> { - JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueConsumer> createToUsageStatsServiceMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToUsageStatsServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToOtaPackageStateServiceMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createVersionControlMsgProducer() { - //TODO: version-control - return null; - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createHousekeeperReprocessingMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic())); - } - - @Override - public TbQueueConsumer> createHousekeeperReprocessingMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getHousekeeperReprocessingTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToHousekeeperServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createEdgeMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(edgeAdmin, serviceBusSettings, topicService.buildTopicName(edgeSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbServiceBusProducerTemplate<>(edgeAdmin, serviceBusSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createToEdgeNotificationsMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToEdgeNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, - topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (edgeAdmin != null) { - edgeAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbRuleEngineQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbRuleEngineQueueFactory.java deleted file mode 100644 index 54661f695c..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbRuleEngineQueueFactory.java +++ /dev/null @@ -1,202 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import com.google.protobuf.util.JsonFormat; -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.context.annotation.Bean; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.data.queue.Queue; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.gen.js.JsInvokeProtos; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToEdgeNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusAdmin; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusQueueConfigs; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoJsQueueMsg; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueEdgeSettings; -import org.thingsboard.server.queue.settings.TbQueueRemoteJsInvokeSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; - -import java.nio.charset.StandardCharsets; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='service-bus' && '${service.type:null}'=='tb-rule-engine'") -public class ServiceBusTbRuleEngineQueueFactory implements TbRuleEngineQueueFactory { - - private final TopicService topicService; - private final TbQueueCoreSettings coreSettings; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TbServiceBusSettings serviceBusSettings; - private final TbQueueRemoteJsInvokeSettings jsInvokeSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbQueueEdgeSettings edgeSettings; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin ruleEngineAdmin; - private final TbQueueAdmin jsExecutorAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin edgeAdmin; - - public ServiceBusTbRuleEngineQueueFactory(TopicService topicService, TbQueueCoreSettings coreSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TbServiceInfoProvider serviceInfoProvider, - TbServiceBusSettings serviceBusSettings, - TbQueueRemoteJsInvokeSettings jsInvokeSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbQueueEdgeSettings edgeSettings, - TbServiceBusQueueConfigs serviceBusQueueConfigs) { - this.topicService = topicService; - this.coreSettings = coreSettings; - this.serviceInfoProvider = serviceInfoProvider; - this.ruleEngineSettings = ruleEngineSettings; - this.serviceBusSettings = serviceBusSettings; - this.jsInvokeSettings = jsInvokeSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.edgeSettings = edgeSettings; - - this.coreAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getCoreConfigs()); - this.ruleEngineAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getRuleEngineConfigs()); - this.jsExecutorAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getJsExecutorConfigs()); - this.notificationAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getNotificationsConfigs()); - this.edgeAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getEdgeConfigs()); - } - - @Override - public TbQueueProducer> createTransportNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbServiceBusProducerTemplate<>(ruleEngineAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createRuleEngineNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createEdgeMsgProducer() { - return new TbServiceBusProducerTemplate<>(edgeAdmin, serviceBusSettings, topicService.buildTopicName(edgeSettings.getTopic())); - } - - @Override - public TbQueueProducer> createEdgeNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.getEdgeNotificationsTopic(serviceInfoProvider.getServiceId()).getFullTopicName()); - } - - @Override - public TbQueueConsumer> createToRuleEngineMsgConsumer(Queue configuration) { - return new TbServiceBusConsumerTemplate<>(ruleEngineAdmin, serviceBusSettings, topicService.buildTopicName(configuration.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueConsumer> createToRuleEngineNotificationsMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - topicService.getNotificationsTopic(ServiceType.TB_RULE_ENGINE, serviceInfoProvider.getServiceId()).getFullTopicName(), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToRuleEngineNotificationMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - @Bean - public TbQueueRequestTemplate, TbProtoQueueMsg> createRemoteJsRequestTemplate() { - TbQueueProducer> producer = new TbServiceBusProducerTemplate<>(jsExecutorAdmin, serviceBusSettings, jsInvokeSettings.getRequestTopic()); - TbQueueConsumer> consumer = new TbServiceBusConsumerTemplate<>(jsExecutorAdmin, serviceBusSettings, - jsInvokeSettings.getResponseTopic() + "." + serviceInfoProvider.getServiceId(), - msg -> { - JsInvokeProtos.RemoteJsResponse.Builder builder = JsInvokeProtos.RemoteJsResponse.newBuilder(); - JsonFormat.parser().ignoringUnknownFields().merge(new String(msg.getData(), StandardCharsets.UTF_8), builder); - return new TbProtoQueueMsg<>(msg.getKey(), builder.build(), msg.getHeaders()); - }); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> builder = DefaultTbQueueRequestTemplate.builder(); - builder.queueAdmin(jsExecutorAdmin); - builder.requestTemplate(producer); - builder.responseTemplate(consumer); - builder.maxPendingRequests(jsInvokeSettings.getMaxPendingRequests()); - builder.maxRequestTimeout(jsInvokeSettings.getMaxRequestsTimeout()); - builder.pollInterval(jsInvokeSettings.getResponsePollInterval()); - return builder.build(); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createToOtaPackageStateServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getOtaPackageTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - if (jsExecutorAdmin != null) { - jsExecutorAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbVersionControlQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbVersionControlQueueFactory.java deleted file mode 100644 index 0c363488ce..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTbVersionControlQueueFactory.java +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import jakarta.annotation.PreDestroy; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.gen.transport.TransportProtos; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusAdmin; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusQueueConfigs; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueVersionControlSettings; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='service-bus' && '${service.type:null}'=='tb-vc-executor'") -public class ServiceBusTbVersionControlQueueFactory implements TbVersionControlQueueFactory { - - private final TbServiceBusSettings serviceBusSettings; - private final TbQueueCoreSettings coreSettings; - private final TbQueueVersionControlSettings vcSettings; - private final TopicService topicService; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin vcAdmin; - - public ServiceBusTbVersionControlQueueFactory(TbServiceBusSettings serviceBusSettings, - TbQueueCoreSettings coreSettings, - TbQueueVersionControlSettings vcSettings, - TbServiceBusQueueConfigs serviceBusQueueConfigs, - TopicService topicService - ) { - this.serviceBusSettings = serviceBusSettings; - this.coreSettings = coreSettings; - this.vcSettings = vcSettings; - this.topicService = topicService; - - this.coreAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getCoreConfigs()); - this.notificationAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getNotificationsConfigs()); - this.vcAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getVcConfigs()); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createToVersionControlMsgConsumer() { - return new TbServiceBusConsumerTemplate<>(vcAdmin, serviceBusSettings, topicService.buildTopicName(vcSettings.getTopic()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportProtos.ToVersionControlServiceMsg.parseFrom(msg.getData()), msg.getHeaders()) - ); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (vcAdmin != null) { - vcAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTransportQueueFactory.java b/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTransportQueueFactory.java deleted file mode 100644 index 7f3e246eec..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusTransportQueueFactory.java +++ /dev/null @@ -1,155 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.provider; - -import jakarta.annotation.PreDestroy; -import lombok.extern.slf4j.Slf4j; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToHousekeeperServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; -import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiRequestMsg; -import org.thingsboard.server.gen.transport.TransportProtos.TransportApiResponseMsg; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueConsumer; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.TbQueueRequestTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusAdmin; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusConsumerTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusProducerTemplate; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusQueueConfigs; -import org.thingsboard.server.queue.azure.servicebus.TbServiceBusSettings; -import org.thingsboard.server.queue.common.DefaultTbQueueRequestTemplate; -import org.thingsboard.server.queue.common.TbProtoQueueMsg; -import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; -import org.thingsboard.server.queue.discovery.TopicService; -import org.thingsboard.server.queue.settings.TbQueueCoreSettings; -import org.thingsboard.server.queue.settings.TbQueueRuleEngineSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportApiSettings; -import org.thingsboard.server.queue.settings.TbQueueTransportNotificationSettings; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='service-bus' && (('${service.type:null}'=='monolith' && '${transport.api_enabled:true}'=='true') || '${service.type:null}'=='tb-transport')") -@Slf4j -public class ServiceBusTransportQueueFactory implements TbTransportQueueFactory { - private final TbQueueTransportApiSettings transportApiSettings; - private final TbQueueTransportNotificationSettings transportNotificationSettings; - private final TbServiceBusSettings serviceBusSettings; - private final TbServiceInfoProvider serviceInfoProvider; - private final TbQueueCoreSettings coreSettings; - private final TbQueueRuleEngineSettings ruleEngineSettings; - private final TopicService topicService; - - private final TbQueueAdmin coreAdmin; - private final TbQueueAdmin transportApiAdmin; - private final TbQueueAdmin notificationAdmin; - private final TbQueueAdmin ruleEngineAdmin; - - public ServiceBusTransportQueueFactory(TbQueueTransportApiSettings transportApiSettings, - TbQueueTransportNotificationSettings transportNotificationSettings, - TbServiceBusSettings serviceBusSettings, - TbQueueRuleEngineSettings ruleEngineSettings, - TbServiceInfoProvider serviceInfoProvider, - TbQueueCoreSettings coreSettings, - TbServiceBusQueueConfigs serviceBusQueueConfigs, - TopicService topicService) { - this.transportApiSettings = transportApiSettings; - this.transportNotificationSettings = transportNotificationSettings; - this.serviceBusSettings = serviceBusSettings; - this.serviceInfoProvider = serviceInfoProvider; - this.coreSettings = coreSettings; - this.ruleEngineSettings = ruleEngineSettings; - this.topicService = topicService; - - this.coreAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getCoreConfigs()); - this.transportApiAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getTransportApiConfigs()); - this.notificationAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getNotificationsConfigs()); - this.ruleEngineAdmin = new TbServiceBusAdmin(serviceBusSettings, serviceBusQueueConfigs.getRuleEngineConfigs()); - } - - @Override - public TbQueueRequestTemplate, TbProtoQueueMsg> createTransportApiRequestTemplate() { - TbQueueProducer> producerTemplate = - new TbServiceBusProducerTemplate<>(transportApiAdmin, serviceBusSettings, topicService.buildTopicName(transportApiSettings.getRequestsTopic())); - - TbQueueConsumer> consumerTemplate = - new TbServiceBusConsumerTemplate<>(transportApiAdmin, serviceBusSettings, - topicService.buildTopicName(transportApiSettings.getResponsesTopic() + "." + serviceInfoProvider.getServiceId()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), TransportApiResponseMsg.parseFrom(msg.getData()), msg.getHeaders())); - - DefaultTbQueueRequestTemplate.DefaultTbQueueRequestTemplateBuilder - , TbProtoQueueMsg> templateBuilder = DefaultTbQueueRequestTemplate.builder(); - templateBuilder.queueAdmin(transportApiAdmin); - templateBuilder.requestTemplate(producerTemplate); - templateBuilder.responseTemplate(consumerTemplate); - templateBuilder.maxPendingRequests(transportApiSettings.getMaxPendingRequests()); - templateBuilder.maxRequestTimeout(transportApiSettings.getMaxRequestsTimeout()); - templateBuilder.pollInterval(transportApiSettings.getResponsePollInterval()); - return templateBuilder.build(); - } - - @Override - public TbQueueProducer> createRuleEngineMsgProducer() { - return new TbServiceBusProducerTemplate<>(ruleEngineAdmin, serviceBusSettings, topicService.buildTopicName(ruleEngineSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueProducer> createTbCoreNotificationsMsgProducer() { - return new TbServiceBusProducerTemplate<>(notificationAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getTopic())); - } - - @Override - public TbQueueConsumer> createTransportNotificationsConsumer() { - return new TbServiceBusConsumerTemplate<>(notificationAdmin, serviceBusSettings, - topicService.buildTopicName(transportNotificationSettings.getNotificationsTopic() + "." + serviceInfoProvider.getServiceId()), - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToTransportMsg.parseFrom(msg.getData()), msg.getHeaders())); - } - - @Override - public TbQueueProducer> createToUsageStatsServiceMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getUsageStatsTopic())); - } - - @Override - public TbQueueProducer> createHousekeeperMsgProducer() { - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, topicService.buildTopicName(coreSettings.getHousekeeperTopic())); - } - - @PreDestroy - private void destroy() { - if (coreAdmin != null) { - coreAdmin.destroy(); - } - if (transportApiAdmin != null) { - transportApiAdmin.destroy(); - } - if (notificationAdmin != null) { - notificationAdmin.destroy(); - } - if (ruleEngineAdmin != null) { - ruleEngineAdmin.destroy(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubAdmin.java b/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubAdmin.java deleted file mode 100644 index bbae199c4a..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubAdmin.java +++ /dev/null @@ -1,232 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.pubsub; - -import com.google.api.gax.rpc.AlreadyExistsException; -import com.google.cloud.pubsub.v1.SubscriptionAdminClient; -import com.google.cloud.pubsub.v1.SubscriptionAdminSettings; -import com.google.cloud.pubsub.v1.TopicAdminClient; -import com.google.cloud.pubsub.v1.TopicAdminSettings; -import com.google.protobuf.Duration; -import com.google.pubsub.v1.ListSubscriptionsRequest; -import com.google.pubsub.v1.ListTopicsRequest; -import com.google.pubsub.v1.ProjectName; -import com.google.pubsub.v1.ProjectSubscriptionName; -import com.google.pubsub.v1.Subscription; -import com.google.pubsub.v1.Topic; -import com.google.pubsub.v1.TopicName; -import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.queue.TbQueueAdmin; - -import java.io.IOException; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - -@Slf4j -@Deprecated(forRemoval = true, since = "3.9") // for removal in 4.0 -public class TbPubSubAdmin implements TbQueueAdmin { - private static final String ACK_DEADLINE = "ackDeadlineInSec"; - private static final String MESSAGE_RETENTION = "messageRetentionInSec"; - - private final TopicAdminClient topicAdminClient; - private final SubscriptionAdminClient subscriptionAdminClient; - - private final TbPubSubSettings pubSubSettings; - private final Set topicSet = ConcurrentHashMap.newKeySet(); - private final Set subscriptionSet = ConcurrentHashMap.newKeySet(); - private final Map subscriptionProperties; - - public TbPubSubAdmin(TbPubSubSettings pubSubSettings, Map subscriptionSettings) { - this.pubSubSettings = pubSubSettings; - this.subscriptionProperties = subscriptionSettings; - - TopicAdminSettings topicAdminSettings; - try { - topicAdminSettings = TopicAdminSettings.newBuilder().setCredentialsProvider(pubSubSettings.getCredentialsProvider()).build(); - } catch (IOException e) { - log.error("Failed to create TopicAdminSettings"); - throw new RuntimeException("Failed to create TopicAdminSettings."); - } - - SubscriptionAdminSettings subscriptionAdminSettings; - try { - subscriptionAdminSettings = SubscriptionAdminSettings.newBuilder().setCredentialsProvider(pubSubSettings.getCredentialsProvider()).build(); - } catch (IOException e) { - log.error("Failed to create SubscriptionAdminSettings"); - throw new RuntimeException("Failed to create SubscriptionAdminSettings."); - } - - try { - topicAdminClient = TopicAdminClient.create(topicAdminSettings); - - ListTopicsRequest listTopicsRequest = - ListTopicsRequest.newBuilder().setProject(ProjectName.format(pubSubSettings.getProjectId())).build(); - TopicAdminClient.ListTopicsPagedResponse response = topicAdminClient.listTopics(listTopicsRequest); - for (Topic topic : response.iterateAll()) { - topicSet.add(topic.getName()); - } - } catch (IOException e) { - log.error("Failed to get topics.", e); - throw new RuntimeException("Failed to get topics.", e); - } - - try { - subscriptionAdminClient = SubscriptionAdminClient.create(subscriptionAdminSettings); - - ListSubscriptionsRequest listSubscriptionsRequest = - ListSubscriptionsRequest.newBuilder() - .setProject(ProjectName.of(pubSubSettings.getProjectId()).toString()) - .build(); - SubscriptionAdminClient.ListSubscriptionsPagedResponse response = - subscriptionAdminClient.listSubscriptions(listSubscriptionsRequest); - - for (Subscription subscription : response.iterateAll()) { - subscriptionSet.add(subscription.getName()); - } - } catch (IOException e) { - log.error("Failed to get subscriptions.", e); - throw new RuntimeException("Failed to get subscriptions.", e); - } - } - - @Override - public void createTopicIfNotExists(String partition, String properties) { - TopicName topicName = TopicName.newBuilder() - .setTopic(partition) - .setProject(pubSubSettings.getProjectId()) - .build(); - - if (topicSet.contains(topicName.toString())) { - createSubscriptionIfNotExists(partition, topicName); - return; - } - - ListTopicsRequest listTopicsRequest = - ListTopicsRequest.newBuilder().setProject(ProjectName.format(pubSubSettings.getProjectId())).build(); - TopicAdminClient.ListTopicsPagedResponse response = topicAdminClient.listTopics(listTopicsRequest); - for (Topic topic : response.iterateAll()) { - if (topic.getName().contains(topicName.toString())) { - topicSet.add(topic.getName()); - createSubscriptionIfNotExists(partition, topicName); - return; - } - } - - try { - topicAdminClient.createTopic(topicName); - log.info("Created new topic: [{}]", topicName.toString()); - } catch (AlreadyExistsException e) { - log.info("[{}] Topic already exist.", topicName.toString()); - } finally { - topicSet.add(topicName.toString()); - } - createSubscriptionIfNotExists(partition, topicName); - } - - @Override - public void deleteTopic(String topic) { - TopicName topicName = TopicName.newBuilder() - .setTopic(topic) - .setProject(pubSubSettings.getProjectId()) - .build(); - - ProjectSubscriptionName subscriptionName = - ProjectSubscriptionName.of(pubSubSettings.getProjectId(), topic); - - if (topicSet.contains(topicName.toString())) { - topicAdminClient.deleteTopic(topicName); - } else { - if (topicAdminClient.getTopic(topicName) != null) { - topicAdminClient.deleteTopic(topicName); - } else { - log.warn("PubSub topic [{}] does not exist.", topic); - } - } - - if (subscriptionSet.contains(subscriptionName.toString())) { - subscriptionAdminClient.deleteSubscription(subscriptionName); - } else { - if (subscriptionAdminClient.getSubscription(subscriptionName) != null) { - subscriptionAdminClient.deleteSubscription(subscriptionName); - } else { - log.warn("PubSub subscription [{}] does not exist.", topic); - } - } - } - - private void createSubscriptionIfNotExists(String partition, TopicName topicName) { - ProjectSubscriptionName subscriptionName = - ProjectSubscriptionName.of(pubSubSettings.getProjectId(), partition); - - if (subscriptionSet.contains(subscriptionName.toString())) { - return; - } - - ListSubscriptionsRequest listSubscriptionsRequest = - ListSubscriptionsRequest.newBuilder().setProject(ProjectName.of(pubSubSettings.getProjectId()).toString()).build(); - SubscriptionAdminClient.ListSubscriptionsPagedResponse response = subscriptionAdminClient.listSubscriptions(listSubscriptionsRequest); - for (Subscription subscription : response.iterateAll()) { - if (subscription.getName().equals(subscriptionName.toString())) { - subscriptionSet.add(subscription.getName()); - return; - } - } - - Subscription.Builder subscriptionBuilder = Subscription - .newBuilder() - .setName(subscriptionName.toString()) - .setTopic(topicName.toString()); - - setAckDeadline(subscriptionBuilder); - setMessageRetention(subscriptionBuilder); - - try { - subscriptionAdminClient.createSubscription(subscriptionBuilder.build()); - log.info("Created new subscription: [{}]", subscriptionName.toString()); - } catch (AlreadyExistsException e) { - log.info("[{}] Subscription already exist.", subscriptionName.toString()); - } finally { - subscriptionSet.add(subscriptionName.toString()); - } - } - - private void setAckDeadline(Subscription.Builder builder) { - if (subscriptionProperties.containsKey(ACK_DEADLINE)) { - builder.setAckDeadlineSeconds(Integer.parseInt(subscriptionProperties.get(ACK_DEADLINE))); - } - } - - private void setMessageRetention(Subscription.Builder builder) { - if (subscriptionProperties.containsKey(MESSAGE_RETENTION)) { - Duration duration = Duration - .newBuilder() - .setSeconds(Long.parseLong(subscriptionProperties.get(MESSAGE_RETENTION))) - .build(); - builder.setMessageRetentionDuration(duration); - } - } - - @Override - public void destroy() { - if (topicAdminClient != null) { - topicAdminClient.close(); - } - if (subscriptionAdminClient != null) { - subscriptionAdminClient.close(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubConsumerTemplate.java b/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubConsumerTemplate.java deleted file mode 100644 index 8a2ba90096..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubConsumerTemplate.java +++ /dev/null @@ -1,175 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.pubsub; - -import com.google.api.core.ApiFuture; -import com.google.api.core.ApiFutures; -import com.google.cloud.pubsub.v1.stub.GrpcSubscriberStub; -import com.google.cloud.pubsub.v1.stub.SubscriberStub; -import com.google.cloud.pubsub.v1.stub.SubscriberStubSettings; -import com.google.gson.Gson; -import com.google.protobuf.InvalidProtocolBufferException; -import com.google.pubsub.v1.AcknowledgeRequest; -import com.google.pubsub.v1.ProjectSubscriptionName; -import com.google.pubsub.v1.PubsubMessage; -import com.google.pubsub.v1.PullRequest; -import com.google.pubsub.v1.PullResponse; -import com.google.pubsub.v1.ReceivedMessage; -import lombok.extern.slf4j.Slf4j; -import org.springframework.util.CollectionUtils; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueMsg; -import org.thingsboard.server.queue.TbQueueMsgDecoder; -import org.thingsboard.server.queue.common.AbstractParallelTbQueueConsumerTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueMsg; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.ExecutionException; -import java.util.stream.Collectors; - -@Slf4j -public class TbPubSubConsumerTemplate extends AbstractParallelTbQueueConsumerTemplate { - - private final Gson gson = new Gson(); - private final TbQueueAdmin admin; - private final String topic; - private final TbQueueMsgDecoder decoder; - private final TbPubSubSettings pubSubSettings; - - private volatile Set subscriptionNames; - private final List acknowledgeRequests = new CopyOnWriteArrayList<>(); - - private final SubscriberStub subscriber; - private volatile int messagesPerTopic; - - public TbPubSubConsumerTemplate(TbQueueAdmin admin, TbPubSubSettings pubSubSettings, String topic, TbQueueMsgDecoder decoder) { - super(topic); - this.admin = admin; - this.pubSubSettings = pubSubSettings; - this.topic = topic; - this.decoder = decoder; - try { - SubscriberStubSettings subscriberStubSettings = - SubscriberStubSettings.newBuilder() - .setCredentialsProvider(pubSubSettings.getCredentialsProvider()) - .setTransportChannelProvider( - SubscriberStubSettings.defaultGrpcTransportProviderBuilder() - .setMaxInboundMessageSize(pubSubSettings.getMaxMsgSize()) - .build()) - .setExecutorProvider(pubSubSettings.getExecutorProvider()) - .build(); - this.subscriber = GrpcSubscriberStub.create(subscriberStubSettings); - } catch (IOException e) { - log.error("Failed to create subscriber.", e); - throw new RuntimeException("Failed to create subscriber.", e); - } - } - - @Override - protected List doPoll(long durationInMillis) { - try { - List messages = receiveMessages(); - if (!messages.isEmpty()) { - return messages.stream().map(ReceivedMessage::getMessage).collect(Collectors.toList()); - } - } catch (ExecutionException | InterruptedException e) { - if (stopped) { - log.info("[{}] Pub/Sub consumer is stopped.", topic); - } else { - log.error("Failed to receive messages", e); - } - } - return Collections.emptyList(); - } - - @Override - protected void doSubscribe(List topicNames) { - subscriptionNames = new LinkedHashSet<>(topicNames); - subscriptionNames.forEach(admin::createTopicIfNotExists); - initNewExecutor(subscriptionNames.size() + 1); - messagesPerTopic = pubSubSettings.getMaxMessages() / Math.max(subscriptionNames.size(), 1); - } - - @Override - protected void doCommit() { - acknowledgeRequests.forEach(subscriber.acknowledgeCallable()::futureCall); - acknowledgeRequests.clear(); - } - - @Override - protected void doUnsubscribe() { - if (subscriber != null) { - subscriber.close(); - } - shutdownExecutor(); - } - - private List receiveMessages() throws ExecutionException, InterruptedException { - List>> result = subscriptionNames.stream().map(subscriptionId -> { - String subscriptionName = ProjectSubscriptionName.format(pubSubSettings.getProjectId(), subscriptionId); - PullRequest pullRequest = - PullRequest.newBuilder() - .setMaxMessages(messagesPerTopic) -// .setReturnImmediately(false) // return immediately if messages are not available - .setSubscription(subscriptionName) - .build(); - - ApiFuture pullResponseApiFuture = subscriber.pullCallable().futureCall(pullRequest); - - return ApiFutures.transform(pullResponseApiFuture, pullResponse -> { - if (pullResponse != null && !pullResponse.getReceivedMessagesList().isEmpty()) { - List ackIds = new ArrayList<>(); - for (ReceivedMessage message : pullResponse.getReceivedMessagesList()) { - ackIds.add(message.getAckId()); - } - AcknowledgeRequest acknowledgeRequest = - AcknowledgeRequest.newBuilder() - .setSubscription(subscriptionName) - .addAllAckIds(ackIds) - .build(); - - acknowledgeRequests.add(acknowledgeRequest); - return pullResponse.getReceivedMessagesList(); - } - return null; - }, consumerExecutor); - - }).collect(Collectors.toList()); - - ApiFuture> transform = ApiFutures.transform(ApiFutures.allAsList(result), listMessages -> { - if (!CollectionUtils.isEmpty(listMessages)) { - return listMessages.stream().filter(Objects::nonNull).flatMap(List::stream).collect(Collectors.toList()); - } - return Collections.emptyList(); - }, consumerExecutor); - - return transform.get(); - } - - @Override - public T decode(PubsubMessage message) throws InvalidProtocolBufferException { - DefaultTbQueueMsg msg = gson.fromJson(message.getData().toStringUtf8(), DefaultTbQueueMsg.class); - return decoder.decode(msg); - } - -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubProducerTemplate.java b/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubProducerTemplate.java deleted file mode 100644 index bb1d4e8976..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubProducerTemplate.java +++ /dev/null @@ -1,137 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.pubsub; - -import com.google.api.core.ApiFuture; -import com.google.api.core.ApiFutureCallback; -import com.google.api.core.ApiFutures; -import com.google.cloud.pubsub.v1.Publisher; -import com.google.gson.Gson; -import com.google.protobuf.ByteString; -import com.google.pubsub.v1.ProjectTopicName; -import com.google.pubsub.v1.PubsubMessage; -import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueCallback; -import org.thingsboard.server.queue.TbQueueMsg; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.common.DefaultTbQueueMsg; - -import java.io.IOException; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; - -@Slf4j -public class TbPubSubProducerTemplate implements TbQueueProducer { - - private final Gson gson = new Gson(); - - private final String defaultTopic; - private final TbQueueAdmin admin; - private final TbPubSubSettings pubSubSettings; - - private final Map publisherMap = new ConcurrentHashMap<>(); - - private final ExecutorService pubExecutor = Executors.newCachedThreadPool(); - - public TbPubSubProducerTemplate(TbQueueAdmin admin, TbPubSubSettings pubSubSettings, String defaultTopic) { - this.defaultTopic = defaultTopic; - this.admin = admin; - this.pubSubSettings = pubSubSettings; - } - - @Override - public void init() { - - } - - @Override - public String getDefaultTopic() { - return defaultTopic; - } - - @Override - public void send(TopicPartitionInfo tpi, T msg, TbQueueCallback callback) { - PubsubMessage.Builder pubsubMessageBuilder = PubsubMessage.newBuilder(); - pubsubMessageBuilder.setData(getMsg(msg)); - - Publisher publisher = getOrCreatePublisher(tpi.getFullTopicName()); - ApiFuture future = publisher.publish(pubsubMessageBuilder.build()); - - ApiFutures.addCallback(future, new ApiFutureCallback() { - public void onSuccess(String messageId) { - if (callback != null) { - callback.onSuccess(null); - } - } - - public void onFailure(Throwable t) { - if (callback != null) { - callback.onFailure(t); - } - } - }, pubExecutor); - } - - @Override - public void stop() { - publisherMap.forEach((k, v) -> { - if (v != null) { - try { - v.shutdown(); - v.awaitTermination(1, TimeUnit.SECONDS); - } catch (Exception e) { - log.error("Failed to shutdown PubSub client during destroy()", e); - } - } - }); - - if (pubExecutor != null) { - pubExecutor.shutdownNow(); - } - } - - private ByteString getMsg(T msg) { - String json = gson.toJson(new DefaultTbQueueMsg(msg)); - return ByteString.copyFrom(json.getBytes()); - } - - private Publisher getOrCreatePublisher(String topic) { - if (publisherMap.containsKey(topic)) { - return publisherMap.get(topic); - } else { - try { - admin.createTopicIfNotExists(topic); - ProjectTopicName topicName = ProjectTopicName.of(pubSubSettings.getProjectId(), topic); - Publisher publisher = Publisher.newBuilder(topicName) - .setCredentialsProvider(pubSubSettings.getCredentialsProvider()) - .setExecutorProvider(pubSubSettings.getExecutorProvider()) - .build(); - publisherMap.put(topic, publisher); - return publisher; - } catch (IOException e) { - log.error("Failed to create Publisher for the topic [{}].", topic, e); - throw new RuntimeException("Failed to create Publisher for the topic.", e); - } - } - - } - -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubSettings.java b/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubSettings.java deleted file mode 100644 index 4794739925..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubSettings.java +++ /dev/null @@ -1,82 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.pubsub; - -import com.google.api.gax.core.CredentialsProvider; -import com.google.api.gax.core.FixedCredentialsProvider; -import com.google.api.gax.core.FixedExecutorProvider; -import com.google.auth.oauth2.ServiceAccountCredentials; -import jakarta.annotation.PostConstruct; -import jakarta.annotation.PreDestroy; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.common.util.ThingsBoardExecutors; - -import java.io.ByteArrayInputStream; -import java.io.IOException; - -@Slf4j -@ConditionalOnExpression("'${queue.type:null}'=='pubsub'") -@Component -@Data -public class TbPubSubSettings { - - @Value("${queue.pubsub.project_id}") - private String projectId; - - @Value("${queue.pubsub.service_account}") - private String serviceAccount; - - @Value("${queue.pubsub.max_msg_size}") - private int maxMsgSize; - - @Value("${queue.pubsub.max_messages}") - private int maxMessages; - - @Value("${queue.pubsub.executor_thread_pool_size:0}") - private int threadPoolSize; - - /** - * Refers to com.google.cloud.pubsub.v1.Publisher default executor configuration - */ - private static final int THREADS_PER_CPU = 5; - - private FixedExecutorProvider executorProvider; - - private CredentialsProvider credentialsProvider; - - @PostConstruct - private void init() throws IOException { - ServiceAccountCredentials credentials = ServiceAccountCredentials.fromStream( - new ByteArrayInputStream(serviceAccount.getBytes())); - credentialsProvider = FixedCredentialsProvider.create(credentials); - if (threadPoolSize == 0) { - threadPoolSize = THREADS_PER_CPU * Runtime.getRuntime().availableProcessors(); - } - executorProvider = FixedExecutorProvider - .create(ThingsBoardExecutors.newScheduledThreadPool(threadPoolSize, "pubsub-queue-executor")); - } - - @PreDestroy - private void destroy() { - if (executorProvider != null) { - executorProvider.getExecutor().shutdownNow(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubSubscriptionSettings.java b/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubSubscriptionSettings.java deleted file mode 100644 index 14aa67a4f0..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/pubsub/TbPubSubSubscriptionSettings.java +++ /dev/null @@ -1,72 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.pubsub; - -import jakarta.annotation.PostConstruct; -import lombok.Getter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.queue.util.PropertyUtils; - -import java.util.Map; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='pubsub'") -public class TbPubSubSubscriptionSettings { - - @Value("${queue.pubsub.queue-properties.core:}") - private String coreProperties; - @Value("${queue.pubsub.queue-properties.rule-engine:}") - private String ruleEngineProperties; - @Value("${queue.pubsub.queue-properties.transport-api:}") - private String transportApiProperties; - @Value("${queue.pubsub.queue-properties.notifications:}") - private String notificationsProperties; - @Value("${queue.pubsub.queue-properties.js-executor:}") - private String jsExecutorProperties; - @Value("${queue.pubsub.queue-properties.version-control:}") - private String vcProperties; - @Value("${queue.pubsub.queue-properties.edge:}") - private String edgeProperties; - - @Getter - private Map coreSettings; - @Getter - private Map ruleEngineSettings; - @Getter - private Map transportApiSettings; - @Getter - private Map notificationsSettings; - @Getter - private Map jsExecutorSettings; - @Getter - private Map vcSettings; - @Getter - private Map edgeSettings; - - @PostConstruct - private void init() { - coreSettings = PropertyUtils.getProps(coreProperties); - ruleEngineSettings = PropertyUtils.getProps(ruleEngineProperties); - transportApiSettings = PropertyUtils.getProps(transportApiProperties); - notificationsSettings = PropertyUtils.getProps(notificationsProperties); - jsExecutorSettings = PropertyUtils.getProps(jsExecutorProperties); - vcSettings = PropertyUtils.getProps(vcProperties); - edgeSettings = PropertyUtils.getProps(edgeProperties); - } - -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqAdmin.java b/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqAdmin.java deleted file mode 100644 index aad3c1c8cc..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqAdmin.java +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.rabbitmq; - -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.thingsboard.server.queue.TbQueueAdmin; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeoutException; - -@Slf4j -@Deprecated(forRemoval = true, since = "3.9") // for removal in 4.0 -public class TbRabbitMqAdmin implements TbQueueAdmin { - - private final Channel channel; - private final Connection connection; - private final Map arguments; - - public TbRabbitMqAdmin(TbRabbitMqSettings rabbitMqSettings, Map arguments) { - this.arguments = arguments; - - try { - connection = rabbitMqSettings.getConnectionFactory().newConnection(); - } catch (IOException | TimeoutException e) { - log.error("Failed to create connection.", e); - throw new RuntimeException("Failed to create connection.", e); - } - - try { - channel = connection.createChannel(); - } catch (IOException e) { - log.error("Failed to create chanel.", e); - throw new RuntimeException("Failed to create chanel.", e); - } - } - - @Override - public void createTopicIfNotExists(String topic, String properties) { - Map arguments = this.arguments; - if (StringUtils.isNotBlank(properties)) { - arguments = new HashMap<>(arguments); - arguments.putAll(TbRabbitMqQueueArguments.getArgs(properties)); - } - try { - channel.queueDeclare(topic, false, false, false, arguments); - } catch (IOException e) { - log.error("Failed to bind queue: [{}]", topic, e); - } - } - - @Override - public void deleteTopic(String topic) { - try { - channel.queueDelete(topic); - } catch (IOException e) { - log.error("Failed to delete RabbitMq queue [{}].", topic); - } - } - - @Override - public void destroy() { - if (channel != null) { - try { - channel.close(); - } catch (IOException | TimeoutException e) { - log.error("Failed to close Chanel.", e); - } - } - if (connection != null) { - try { - connection.close(); - } catch (IOException e) { - log.error("Failed to close Connection.", e); - } - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqConsumerTemplate.java b/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqConsumerTemplate.java deleted file mode 100644 index e50afabb5d..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqConsumerTemplate.java +++ /dev/null @@ -1,144 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.rabbitmq; - -import com.google.gson.Gson; -import com.google.protobuf.InvalidProtocolBufferException; -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.GetResponse; -import java.util.ArrayList; -import java.util.Collection; -import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueMsg; -import org.thingsboard.server.queue.TbQueueMsgDecoder; -import org.thingsboard.server.queue.common.AbstractTbQueueConsumerTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueMsg; - -import java.io.IOException; -import java.util.Collections; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeoutException; -import java.util.stream.Collectors; - -@Slf4j -public class TbRabbitMqConsumerTemplate extends AbstractTbQueueConsumerTemplate { - - private final Gson gson = new Gson(); - private final TbQueueAdmin admin; - private final TbQueueMsgDecoder decoder; - private final Channel channel; - private final Connection connection; - private final int maxPollMessages; - - private volatile Set queues; - - public TbRabbitMqConsumerTemplate(TbQueueAdmin admin, TbRabbitMqSettings rabbitMqSettings, String topic, TbQueueMsgDecoder decoder) { - super(topic); - this.admin = admin; - this.decoder = decoder; - this.maxPollMessages = rabbitMqSettings.getMaxPollMessages(); - try { - connection = rabbitMqSettings.getConnectionFactory().newConnection(); - } catch (IOException | TimeoutException e) { - log.error("Failed to create connection.", e); - throw new RuntimeException("Failed to create connection.", e); - } - try { - channel = connection.createChannel(); - } catch (IOException e) { - log.error("Failed to create chanel.", e); - throw new RuntimeException("Failed to create chanel.", e); - } - stopped = false; - } - - @Override - protected List doPoll(long durationInMillis) { - List result = queues.stream() - .map(queue -> { - List messages = new ArrayList<>(); - for (int i = 0; i < maxPollMessages; i++) { - GetResponse response = doQueuePoll(queue); - if (response == null) { - break; - } - messages.add(response); - } - return messages; - }) - .filter(r -> !r.isEmpty()) - .flatMap(Collection::stream) - .collect(Collectors.toList()); - if (result.size() > 0) { - return result; - } else { - return Collections.emptyList(); - } - } - - protected GetResponse doQueuePoll(String queue) { - try { - return channel.basicGet(queue, false); - } catch (IOException e) { - log.error("Failed to get messages from queue: [{}]", queue); - throw new RuntimeException("Failed to get messages from queue.", e); - } - } - - @Override - protected void doSubscribe(List topicNames) { - queues = partitions.stream() - .map(TopicPartitionInfo::getFullTopicName) - .collect(Collectors.toSet()); - queues.forEach(admin::createTopicIfNotExists); - } - - @Override - protected void doCommit() { - try { - channel.basicAck(0, true); - } catch (IOException e) { - log.error("Failed to ack messages.", e); - } - } - - @Override - protected void doUnsubscribe() { - if (channel != null) { - try { - channel.close(); - } catch (IOException | TimeoutException e) { - log.error("Failed to close the channel."); - } - } - if (connection != null) { - try { - connection.close(); - } catch (IOException e) { - log.error("Failed to close the connection."); - } - } - } - - public T decode(GetResponse message) throws InvalidProtocolBufferException { - DefaultTbQueueMsg msg = gson.fromJson(new String(message.getBody()), DefaultTbQueueMsg.class); - return decoder.decode(msg); - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqProducerTemplate.java b/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqProducerTemplate.java deleted file mode 100644 index 696fcccce2..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqProducerTemplate.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.rabbitmq; - -import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.MoreExecutors; -import com.google.gson.Gson; -import com.rabbitmq.client.AMQP; -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueCallback; -import org.thingsboard.server.queue.TbQueueMsg; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.common.DefaultTbQueueMsg; - -import java.io.IOException; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeoutException; - -@Slf4j -public class TbRabbitMqProducerTemplate implements TbQueueProducer { - private final String defaultTopic; - private final Gson gson = new Gson(); - private final TbQueueAdmin admin; - private final TbRabbitMqSettings rabbitMqSettings; - private final ListeningExecutorService producerExecutor; - private final Channel channel; - private final Connection connection; - - private final Set topics = ConcurrentHashMap.newKeySet(); - - public TbRabbitMqProducerTemplate(TbQueueAdmin admin, TbRabbitMqSettings rabbitMqSettings, String defaultTopic) { - this.admin = admin; - this.defaultTopic = defaultTopic; - this.rabbitMqSettings = rabbitMqSettings; - producerExecutor = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool()); - try { - connection = rabbitMqSettings.getConnectionFactory().newConnection(); - } catch (IOException | TimeoutException e) { - log.error("Failed to create connection.", e); - throw new RuntimeException("Failed to create connection.", e); - } - - try { - channel = connection.createChannel(); - } catch (IOException e) { - log.error("Failed to create chanel.", e); - throw new RuntimeException("Failed to create chanel.", e); - } - } - - @Override - public void init() { - - } - - @Override - public String getDefaultTopic() { - return defaultTopic; - } - - @Override - public void send(TopicPartitionInfo tpi, T msg, TbQueueCallback callback) { - createTopicIfNotExist(tpi); - AMQP.BasicProperties properties = new AMQP.BasicProperties(); - try { - channel.basicPublish(rabbitMqSettings.getExchangeName(), tpi.getFullTopicName(), properties, gson.toJson(new DefaultTbQueueMsg(msg)).getBytes()); - if (callback != null) { - callback.onSuccess(null); - } - } catch (IOException e) { - log.error("Failed publish message: [{}].", msg, e); - if (callback != null) { - callback.onFailure(e); - } - } - } - - @Override - public void stop() { - if (producerExecutor != null) { - producerExecutor.shutdownNow(); - } - if (channel != null) { - try { - channel.close(); - } catch (IOException | TimeoutException e) { - log.error("Failed to close the channel."); - } - } - if (connection != null) { - try { - connection.close(); - } catch (IOException e) { - log.error("Failed to close the connection."); - } - } - } - - private void createTopicIfNotExist(TopicPartitionInfo tpi) { - if (topics.contains(tpi)) { - return; - } - admin.createTopicIfNotExists(tpi.getFullTopicName()); - topics.add(tpi); - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqQueueArguments.java b/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqQueueArguments.java deleted file mode 100644 index 06613d5617..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqQueueArguments.java +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.rabbitmq; - -import jakarta.annotation.PostConstruct; -import lombok.Getter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.data.StringUtils; - -import java.util.HashMap; -import java.util.Map; -import java.util.regex.Pattern; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='rabbitmq'") -public class TbRabbitMqQueueArguments { - @Value("${queue.rabbitmq.queue-properties.core:}") - private String coreProperties; - @Value("${queue.rabbitmq.queue-properties.rule-engine:}") - private String ruleEngineProperties; - @Value("${queue.rabbitmq.queue-properties.transport-api:}") - private String transportApiProperties; - @Value("${queue.rabbitmq.queue-properties.notifications:}") - private String notificationsProperties; - @Value("${queue.rabbitmq.queue-properties.js-executor:}") - private String jsExecutorProperties; - @Value("${queue.rabbitmq.queue-properties.version-control:}") - private String vcProperties; - @Value("${queue.rabbitmq.queue-properties.edge:}") - private String edgeProperties; - - @Getter - private Map coreArgs; - @Getter - private Map ruleEngineArgs; - @Getter - private Map transportApiArgs; - @Getter - private Map notificationsArgs; - @Getter - private Map jsExecutorArgs; - @Getter - private Map vcArgs; - @Getter - private Map edgeArgs; - - @PostConstruct - private void init() { - coreArgs = getArgs(coreProperties); - ruleEngineArgs = getArgs(ruleEngineProperties); - transportApiArgs = getArgs(transportApiProperties); - notificationsArgs = getArgs(notificationsProperties); - jsExecutorArgs = getArgs(jsExecutorProperties); - vcArgs = getArgs(vcProperties); - edgeArgs = getArgs(edgeProperties); - } - - public static Map getArgs(String properties) { - Map configs = new HashMap<>(); - if (StringUtils.isNotEmpty(properties)) { - for (String property : properties.split(";")) { - int delimiterPosition = property.indexOf(":"); - String key = property.substring(0, delimiterPosition); - String strValue = property.substring(delimiterPosition + 1); - configs.put(key, getObjectValue(strValue)); - } - } - return configs; - } - - private static Object getObjectValue(String str) { - if (str.equalsIgnoreCase("true") || str.equalsIgnoreCase("false")) { - return Boolean.valueOf(str); - } else if (isNumeric(str)) { - return getNumericValue(str); - } - return str; - } - - private static Object getNumericValue(String str) { - if (str.contains(".")) { - return Double.valueOf(str); - } else { - return Long.valueOf(str); - } - } - - private static final Pattern PATTERN = Pattern.compile("-?\\d+(\\.\\d+)?"); - - private static boolean isNumeric(String strNum) { - if (strNum == null) { - return false; - } - return PATTERN.matcher(strNum).matches(); - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqSettings.java b/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqSettings.java deleted file mode 100644 index c0a2912f23..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqSettings.java +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.rabbitmq; - -import com.rabbitmq.client.ConnectionFactory; -import jakarta.annotation.PostConstruct; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; - -@Slf4j -@ConditionalOnExpression("'${queue.type:null}'=='rabbitmq'") -@Component -@Data -public class TbRabbitMqSettings { - @Value("${queue.rabbitmq.exchange_name:}") - private String exchangeName; - @Value("${queue.rabbitmq.host:}") - private String host; - @Value("${queue.rabbitmq.port:}") - private int port; - @Value("${queue.rabbitmq.virtual_host:}") - private String virtualHost; - @Value("${queue.rabbitmq.username:}") - private String username; - @Value("${queue.rabbitmq.password:}") - private String password; - @Value("${queue.rabbitmq.automatic_recovery_enabled:}") - private boolean automaticRecoveryEnabled; - @Value("${queue.rabbitmq.connection_timeout:}") - private int connectionTimeout; - @Value("${queue.rabbitmq.handshake_timeout:}") - private int handshakeTimeout; - @Value("${queue.rabbitmq.max_poll_messages:1}") - private int maxPollMessages; - - private ConnectionFactory connectionFactory; - - @PostConstruct - private void init() { - connectionFactory = new ConnectionFactory(); - connectionFactory.setHost(host); - connectionFactory.setPort(port); - connectionFactory.setVirtualHost(virtualHost); - connectionFactory.setUsername(username); - connectionFactory.setPassword(password); - connectionFactory.setAutomaticRecoveryEnabled(automaticRecoveryEnabled); - connectionFactory.setConnectionTimeout(connectionTimeout); - connectionFactory.setHandshakeTimeout(handshakeTimeout); - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsAdmin.java b/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsAdmin.java deleted file mode 100644 index 6aa1ec4dad..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsAdmin.java +++ /dev/null @@ -1,118 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.sqs; - -import com.amazonaws.auth.AWSCredentials; -import com.amazonaws.auth.AWSCredentialsProvider; -import com.amazonaws.auth.AWSStaticCredentialsProvider; -import com.amazonaws.auth.BasicAWSCredentials; -import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; -import com.amazonaws.services.sqs.AmazonSQS; -import com.amazonaws.services.sqs.AmazonSQSClientBuilder; -import com.amazonaws.services.sqs.model.CreateQueueRequest; -import com.amazonaws.services.sqs.model.GetQueueUrlResult; -import lombok.Getter; -import lombok.extern.slf4j.Slf4j; -import org.thingsboard.common.util.ThingsBoardExecutors; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.util.PropertyUtils; - -import java.util.Map; -import java.util.concurrent.ExecutorService; -import java.util.function.Function; -import java.util.stream.Collectors; - -@Slf4j -@Deprecated(forRemoval = true, since = "3.9") // for removal in 4.0 -public class TbAwsSqsAdmin implements TbQueueAdmin { - - private final Map attributes; - private final AmazonSQS sqsClient; - private final Map queues; - @Getter - private final ExecutorService producerExecutor; - - public TbAwsSqsAdmin(TbAwsSqsSettings sqsSettings, Map attributes) { - this.attributes = attributes; - - AWSCredentialsProvider credentialsProvider; - if (sqsSettings.getUseDefaultCredentialProviderChain()) { - credentialsProvider = new DefaultAWSCredentialsProviderChain(); - } else { - AWSCredentials awsCredentials = new BasicAWSCredentials(sqsSettings.getAccessKeyId(), sqsSettings.getSecretAccessKey()); - credentialsProvider = new AWSStaticCredentialsProvider(awsCredentials); - } - producerExecutor = ThingsBoardExecutors.newWorkStealingPool(sqsSettings.getThreadPoolSize(), "aws-sqs-queue-executor"); - - sqsClient = AmazonSQSClientBuilder.standard() - .withCredentials(credentialsProvider) - .withRegion(sqsSettings.getRegion()) - .build(); - - queues = sqsClient - .listQueues() - .getQueueUrls() - .stream() - .map(this::getQueueNameFromUrl) - .collect(Collectors.toMap(this::convertTopicToQueueName, Function.identity())); - } - - @Override - public void createTopicIfNotExists(String topic, String properties) { - String queueName = convertTopicToQueueName(topic); - if (queues.containsKey(queueName)) { - return; - } - Map attributes = PropertyUtils.getProps(this.attributes, properties, TbAwsSqsQueueAttributes::toConfigs); - final CreateQueueRequest createQueueRequest = new CreateQueueRequest(queueName).withAttributes(attributes); - String queueUrl = sqsClient.createQueue(createQueueRequest).getQueueUrl(); - queues.put(getQueueNameFromUrl(queueUrl), queueUrl); - } - - private String convertTopicToQueueName(String topic) { - return topic.replaceAll("\\.", "_") + ".fifo"; - } - - @Override - public void deleteTopic(String topic) { - String queueName = convertTopicToQueueName(topic); - if (queues.containsKey(queueName)) { - sqsClient.deleteQueue(queues.get(queueName)); - } else { - GetQueueUrlResult queueUrl = sqsClient.getQueueUrl(queueName); - if (queueUrl != null) { - sqsClient.deleteQueue(queueUrl.getQueueUrl()); - } else { - log.warn("Aws SQS queue [{}] does not exist!", queueName); - } - } - } - - private String getQueueNameFromUrl(String queueUrl) { - int delimiterIndex = queueUrl.lastIndexOf("/"); - return queueUrl.substring(delimiterIndex + 1); - } - - @Override - public void destroy() { - if (sqsClient != null) { - sqsClient.shutdown(); - } - if (producerExecutor != null) { - producerExecutor.shutdownNow(); - } - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsConsumerTemplate.java b/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsConsumerTemplate.java deleted file mode 100644 index a3087e9d11..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsConsumerTemplate.java +++ /dev/null @@ -1,188 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.sqs; - -import com.amazonaws.auth.AWSCredentials; -import com.amazonaws.auth.AWSCredentialsProvider; -import com.amazonaws.auth.AWSStaticCredentialsProvider; -import com.amazonaws.auth.BasicAWSCredentials; -import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; -import com.amazonaws.services.sqs.AmazonSQS; -import com.amazonaws.services.sqs.AmazonSQSClientBuilder; -import com.amazonaws.services.sqs.model.DeleteMessageBatchRequestEntry; -import com.amazonaws.services.sqs.model.Message; -import com.amazonaws.services.sqs.model.ReceiveMessageRequest; -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.gson.Gson; -import com.google.protobuf.InvalidProtocolBufferException; -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.util.CollectionUtils; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueMsg; -import org.thingsboard.server.queue.TbQueueMsgDecoder; -import org.thingsboard.server.queue.common.AbstractParallelTbQueueConsumerTemplate; -import org.thingsboard.server.queue.common.DefaultTbQueueMsg; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -@Slf4j -public class TbAwsSqsConsumerTemplate extends AbstractParallelTbQueueConsumerTemplate { - - private static final int MAX_NUM_MSGS = 10; - - private final Gson gson = new Gson(); - private final TbQueueAdmin admin; - private final AmazonSQS sqsClient; - private final TbQueueMsgDecoder decoder; - private final TbAwsSqsSettings sqsSettings; - - private final List pendingMessages = new CopyOnWriteArrayList<>(); - private volatile Set queueUrls; - - public TbAwsSqsConsumerTemplate(TbQueueAdmin admin, TbAwsSqsSettings sqsSettings, String topic, TbQueueMsgDecoder decoder) { - super(topic); - this.admin = admin; - this.decoder = decoder; - this.sqsSettings = sqsSettings; - - AWSCredentialsProvider credentialsProvider; - if (sqsSettings.getUseDefaultCredentialProviderChain()) { - credentialsProvider = new DefaultAWSCredentialsProviderChain(); - } else { - AWSCredentials awsCredentials = new BasicAWSCredentials(sqsSettings.getAccessKeyId(), sqsSettings.getSecretAccessKey()); - credentialsProvider = new AWSStaticCredentialsProvider(awsCredentials); - } - - sqsClient = AmazonSQSClientBuilder.standard() - .withCredentials(credentialsProvider) - .withRegion(sqsSettings.getRegion()) - .build(); - - } - - @Override - protected void doSubscribe(List topicNames) { - queueUrls = topicNames.stream().map(this::getQueueUrl).collect(Collectors.toSet()); - initNewExecutor(queueUrls.size() * sqsSettings.getThreadsPerTopic() + 1); - } - - @Override - protected List doPoll(long durationInMillis) { - int duration = (int) TimeUnit.MILLISECONDS.toSeconds(durationInMillis); - List>> futureList = queueUrls - .stream() - .map(url -> poll(url, duration)) - .collect(Collectors.toList()); - ListenableFuture>> futureResult = Futures.allAsList(futureList); - try { - return futureResult.get().stream() - .flatMap(List::stream) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - } catch (InterruptedException | ExecutionException e) { - if (stopped) { - log.info("[{}] Aws SQS consumer is stopped.", getTopic()); - } else { - log.error("Failed to pool messages.", e); - } - return Collections.emptyList(); - } - } - - @Override - public T decode(Message message) throws InvalidProtocolBufferException { - DefaultTbQueueMsg msg = gson.fromJson(message.getBody(), DefaultTbQueueMsg.class); - return decoder.decode(msg); - } - - @Override - protected void doCommit() { - pendingMessages.forEach(msg -> - consumerExecutor.submit(() -> { - List entries = msg.getMessages() - .stream() - .map(message -> new DeleteMessageBatchRequestEntry(message.getMessageId(), message.getReceiptHandle())) - .collect(Collectors.toList()); - sqsClient.deleteMessageBatch(msg.getUrl(), entries); - })); - pendingMessages.clear(); - } - - @Override - protected void doUnsubscribe() { - stopped = true; - if (sqsClient != null) { - sqsClient.shutdown(); - } - shutdownExecutor(); - } - - private ListenableFuture> poll(String url, int waitTimeSeconds) { - List>> result = new ArrayList<>(); - - for (int i = 0; i < sqsSettings.getThreadsPerTopic(); i++) { - result.add(consumerExecutor.submit(() -> { - ReceiveMessageRequest request = new ReceiveMessageRequest(); - request - .withWaitTimeSeconds(waitTimeSeconds) - .withQueueUrl(url) - .withMaxNumberOfMessages(MAX_NUM_MSGS); - return sqsClient.receiveMessage(request).getMessages(); - })); - } - return Futures.transform(Futures.allAsList(result), list -> { - if (!CollectionUtils.isEmpty(list)) { - return list.stream() - .flatMap(messageList -> { - if (!messageList.isEmpty()) { - this.pendingMessages.add(new AwsSqsMsgWrapper(url, messageList)); - return messageList.stream(); - } - return Stream.empty(); - }) - .collect(Collectors.toList()); - } - return Collections.emptyList(); - }, consumerExecutor); - } - - @Data - private static class AwsSqsMsgWrapper { - private final String url; - private final List messages; - - public AwsSqsMsgWrapper(String url, List messages) { - this.url = url; - this.messages = messages; - } - } - - private String getQueueUrl(String topic) { - admin.createTopicIfNotExists(topic); - return sqsClient.getQueueUrl(topic.replaceAll("\\.", "_") + ".fifo").getQueueUrl(); - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsProducerTemplate.java b/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsProducerTemplate.java deleted file mode 100644 index d8d4a5d2e8..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsProducerTemplate.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.sqs; - -import com.amazonaws.auth.AWSCredentials; -import com.amazonaws.auth.AWSCredentialsProvider; -import com.amazonaws.auth.AWSStaticCredentialsProvider; -import com.amazonaws.auth.BasicAWSCredentials; -import com.amazonaws.auth.DefaultAWSCredentialsProviderChain; -import com.amazonaws.handlers.AsyncHandler; -import com.amazonaws.services.sqs.AmazonSQSAsync; -import com.amazonaws.services.sqs.AmazonSQSAsyncClientBuilder; -import com.amazonaws.services.sqs.model.SendMessageRequest; -import com.amazonaws.services.sqs.model.SendMessageResult; -import com.google.gson.Gson; -import lombok.extern.slf4j.Slf4j; -import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueCallback; -import org.thingsboard.server.queue.TbQueueMsg; -import org.thingsboard.server.queue.TbQueueProducer; -import org.thingsboard.server.queue.common.DefaultTbQueueMsg; - -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -@Slf4j -public class TbAwsSqsProducerTemplate implements TbQueueProducer { - private final String defaultTopic; - private final AmazonSQSAsync sqsClient; - private final Gson gson = new Gson(); - private final Map queueUrlMap = new ConcurrentHashMap<>(); - private final TbAwsSqsAdmin admin; - - public TbAwsSqsProducerTemplate(TbQueueAdmin admin, TbAwsSqsSettings sqsSettings, String defaultTopic) { - this.admin = (TbAwsSqsAdmin) admin; - this.defaultTopic = defaultTopic; - - AWSCredentialsProvider credentialsProvider; - if (sqsSettings.getUseDefaultCredentialProviderChain()) { - credentialsProvider = new DefaultAWSCredentialsProviderChain(); - } else { - AWSCredentials awsCredentials = new BasicAWSCredentials(sqsSettings.getAccessKeyId(), sqsSettings.getSecretAccessKey()); - credentialsProvider = new AWSStaticCredentialsProvider(awsCredentials); - } - - sqsClient = AmazonSQSAsyncClientBuilder.standard() - .withCredentials(credentialsProvider) - .withRegion(sqsSettings.getRegion()) - .withExecutorFactory(this.admin::getProducerExecutor) - .build(); - } - - @Override - public void init() { - - } - - @Override - public String getDefaultTopic() { - return defaultTopic; - } - - @Override - public void send(TopicPartitionInfo tpi, T msg, TbQueueCallback callback) { - SendMessageRequest sendMsgRequest = new SendMessageRequest(); - sendMsgRequest.withQueueUrl(getQueueUrl(tpi.getFullTopicName())); - sendMsgRequest.withMessageBody(gson.toJson(new DefaultTbQueueMsg(msg))); - - String sqsMsgId = UUID.randomUUID().toString(); - sendMsgRequest.withMessageGroupId(sqsMsgId); - sendMsgRequest.withMessageDeduplicationId(sqsMsgId); - - sqsClient.sendMessageAsync(sendMsgRequest, new AsyncHandler() { - @Override public void onError(Exception e) { - if (callback != null) { - callback.onFailure(e); - } - } - - @Override public void onSuccess(SendMessageRequest request, - SendMessageResult sendMessageResult) { - if (callback != null) { - callback.onSuccess(new AwsSqsTbQueueMsgMetadata(sendMessageResult.getSdkHttpMetadata())); - } - } - }); - } - - @Override - public void stop() { - if (sqsClient != null) { - sqsClient.shutdown(); - } - } - - private String getQueueUrl(String topic) { - return queueUrlMap.computeIfAbsent(topic, k -> { - admin.createTopicIfNotExists(topic); - return sqsClient.getQueueUrl(topic.replaceAll("\\.", "_") + ".fifo").getQueueUrl(); - }); - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsQueueAttributes.java b/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsQueueAttributes.java deleted file mode 100644 index 2c1b8793eb..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsQueueAttributes.java +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.sqs; - -import com.amazonaws.services.sqs.model.QueueAttributeName; -import jakarta.annotation.PostConstruct; -import lombok.Getter; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; -import org.thingsboard.server.common.data.StringUtils; - -import java.util.HashMap; -import java.util.Map; - -@Component -@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs'") -public class TbAwsSqsQueueAttributes { - @Value("${queue.aws-sqs.queue-properties.core:}") - private String coreProperties; - @Value("${queue.aws-sqs.queue-properties.rule-engine:}") - private String ruleEngineProperties; - @Value("${queue.aws-sqs.queue-properties.transport-api:}") - private String transportApiProperties; - @Value("${queue.aws-sqs.queue-properties.notifications:}") - private String notificationsProperties; - @Value("${queue.aws-sqs.queue-properties.js-executor:}") - private String jsExecutorProperties; - @Value("${queue.aws-sqs.queue-properties.ota-updates:}") - private String otaProperties; - @Value("${queue.aws-sqs.queue-properties.version-control:}") - private String vcProperties; - @Value("${queue.aws-sqs.queue-properties.edge:}") - private String edgeProperties; - - @Getter - private Map coreAttributes; - @Getter - private Map ruleEngineAttributes; - @Getter - private Map transportApiAttributes; - @Getter - private Map notificationsAttributes; - @Getter - private Map jsExecutorAttributes; - @Getter - private Map otaAttributes; - @Getter - private Map vcAttributes; - @Getter - private Map edgeAttributes; - - private final Map defaultAttributes = new HashMap<>(); - - @PostConstruct - private void init() { - defaultAttributes.put(QueueAttributeName.FifoQueue.toString(), "true"); - - coreAttributes = getConfigs(coreProperties); - ruleEngineAttributes = getConfigs(ruleEngineProperties); - transportApiAttributes = getConfigs(transportApiProperties); - notificationsAttributes = getConfigs(notificationsProperties); - jsExecutorAttributes = getConfigs(jsExecutorProperties); - otaAttributes = getConfigs(otaProperties); - vcAttributes = getConfigs(vcProperties); - edgeAttributes = getConfigs(edgeProperties); - } - - private Map getConfigs(String properties) { - Map configs = new HashMap<>(defaultAttributes); - configs.putAll(toConfigs(properties)); - return configs; - } - - public static Map toConfigs(String properties) { - Map configs = new HashMap<>(); - if (StringUtils.isNotEmpty(properties)) { - for (String property : properties.split(";")) { - int delimiterPosition = property.indexOf(":"); - String key = property.substring(0, delimiterPosition); - String value = property.substring(delimiterPosition + 1); - validateAttributeName(key); - configs.put(key, value); - } - } - return configs; - } - - private static void validateAttributeName(String key) { - QueueAttributeName.fromValue(key); - } -} diff --git a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsSettings.java b/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsSettings.java deleted file mode 100644 index 122d5f0780..0000000000 --- a/common/queue/src/main/java/org/thingsboard/server/queue/sqs/TbAwsSqsSettings.java +++ /dev/null @@ -1,48 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.sqs; - -import lombok.Data; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; -import org.springframework.stereotype.Component; - -@Slf4j -@ConditionalOnExpression("'${queue.type:null}'=='aws-sqs'") -@Component -@Data -public class TbAwsSqsSettings { - - @Value("${queue.aws_sqs.use_default_credential_provider_chain}") - private Boolean useDefaultCredentialProviderChain; - - @Value("${queue.aws_sqs.access_key_id}") - private String accessKeyId; - - @Value("${queue.aws_sqs.secret_access_key}") - private String secretAccessKey; - - @Value("${queue.aws_sqs.region}") - private String region; - - @Value("${queue.aws_sqs.threads_per_topic}") - private int threadsPerTopic; - - @Value("${queue.aws_sqs.producer_thread_pool_size:50}") - private int threadPoolSize; - -} diff --git a/common/queue/src/test/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqConsumerTemplateTest.java b/common/queue/src/test/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqConsumerTemplateTest.java deleted file mode 100644 index 2d6a50cea4..0000000000 --- a/common/queue/src/test/java/org/thingsboard/server/queue/rabbitmq/TbRabbitMqConsumerTemplateTest.java +++ /dev/null @@ -1,128 +0,0 @@ -/** - * Copyright © 2016-2024 The Thingsboard Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.thingsboard.server.queue.rabbitmq; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.ArgumentMatchers.anyBoolean; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import com.rabbitmq.client.Channel; -import com.rabbitmq.client.Connection; -import com.rabbitmq.client.ConnectionFactory; -import com.rabbitmq.client.GetResponse; -import java.nio.charset.StandardCharsets; -import java.util.Set; -import java.util.UUID; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; -import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; -import org.thingsboard.server.queue.TbQueueAdmin; -import org.thingsboard.server.queue.TbQueueMsgDecoder; -import org.thingsboard.server.queue.common.DefaultTbQueueMsg; - -@ExtendWith(MockitoExtension.class) -class TbRabbitMqConsumerTemplateTest { - - private static final String TOPIC = "some-topic"; - - @Mock - private TbQueueAdmin admin; - - @Mock - private ConnectionFactory connectionFactory; - - @Mock - private TbQueueMsgDecoder decoder; - - @Mock - private Connection connection; - - @Mock - private Channel channel; - - @Mock - private TopicPartitionInfo partition; - - @Mock - private GetResponse getResponse; - - private TbRabbitMqConsumerTemplate consumer; - - private void setUpConsumerWithMaxPollMessages(int maxPollMessages) throws Exception { - when(connectionFactory.newConnection()).thenReturn(connection); - when(connection.createChannel()).thenReturn(channel); - TbRabbitMqSettings settings = new TbRabbitMqSettings(); - settings.setMaxPollMessages(maxPollMessages); - settings.setConnectionFactory(connectionFactory); - - consumer = new TbRabbitMqConsumerTemplate<>(admin, settings, TOPIC, decoder); - when(partition.getFullTopicName()).thenReturn(TOPIC); - consumer.subscribe(Set.of(partition)); - } - - @Test - void pollWithMax5PollMessagesReturnsEmptyListIfNoMessages() throws Exception { - setUpConsumerWithMaxPollMessages(5); - when(channel.basicGet(anyString(), anyBoolean())).thenReturn(null); - - assertThat(consumer.poll(0L)).isEmpty(); - - verify(channel).basicGet(anyString(), anyBoolean()); - } - - @Test - void pollWithMax5PollMessagesReturns5MessagesIfQueueContains5() throws Exception { - setUpConsumerWithMaxPollMessages(5); - when(getResponse.getBody()).thenReturn(newMessageBody()); - when(channel.basicGet(anyString(), anyBoolean())).thenReturn(getResponse); - - assertThat(consumer.poll(0L)).hasSize(5); - - verify(channel, times(5)).basicGet(anyString(), anyBoolean()); - } - - @Test - void pollWithMax1PollMessageReturns1MessageIfQueueContainsMore() throws Exception { - setUpConsumerWithMaxPollMessages(1); - when(getResponse.getBody()).thenReturn(newMessageBody()); - when(channel.basicGet(anyString(), anyBoolean())).thenReturn(getResponse); - - assertThat(consumer.poll(0L)).hasSize(1); - - verify(channel).basicGet(anyString(), anyBoolean()); - } - - @Test - void pollWithMax3PollMessagesReturns2MessagesIfQueueContains2() throws Exception { - setUpConsumerWithMaxPollMessages(3); - when(getResponse.getBody()).thenReturn(newMessageBody()); - when(channel.basicGet(anyString(), anyBoolean())).thenReturn(getResponse, getResponse, null); - - assertThat(consumer.poll(0L)).hasSize(2); - - verify(channel, times(3)).basicGet(anyString(), anyBoolean()); - } - - private byte[] newMessageBody() { - return ("{\"key\": \"" + UUID.randomUUID() + "\"}").getBytes(StandardCharsets.UTF_8); - } - -} \ No newline at end of file diff --git a/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java b/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java index 6b321a3570..fae91d14ca 100644 --- a/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java +++ b/common/script/script-api/src/main/java/org/thingsboard/script/api/tbel/TbUtils.java @@ -257,6 +257,8 @@ public class TbUtils { float.class, int.class))); parserConfig.addImport("hexToBytes", new MethodStub(TbUtils.class.getMethod("hexToBytes", ExecutionContext.class, String.class))); + parserConfig.addImport("hexToBytesArray", new MethodStub(TbUtils.class.getMethod("hexToBytesArray", + String.class))); parserConfig.addImport("intToHex", new MethodStub(TbUtils.class.getMethod("intToHex", Integer.class))); parserConfig.addImport("intToHex", new MethodStub(TbUtils.class.getMethod("intToHex", @@ -297,6 +299,8 @@ public class TbUtils { String.class))); parserConfig.addImport("base64ToBytes", new MethodStub(TbUtils.class.getMethod("base64ToBytes", String.class))); + parserConfig.addImport("base64ToBytesList", new MethodStub(TbUtils.class.getMethod("base64ToBytesList", + ExecutionContext.class, String.class))); parserConfig.addImport("bytesToBase64", new MethodStub(TbUtils.class.getMethod("bytesToBase64", byte[].class))); parserConfig.addImport("bytesToHex", new MethodStub(TbUtils.class.getMethod("bytesToHex", @@ -335,7 +339,7 @@ public class TbUtils { byte.class))); parserConfig.addImport("parseByteToBinaryArray", new MethodStub(TbUtils.class.getMethod("parseByteToBinaryArray", byte.class, int.class))); - parserConfig.addImport("parseByteToBinaryArray", new MethodStub(TbUtils.class.getMethod("parseByteToBinaryArray", + parserConfig.addImport("parseByteToBinaryArray", new MethodStub(TbUtils.class.getMethod("parseByteToBinaryArray", byte.class, int.class, boolean.class))); parserConfig.addImport("parseBytesToBinaryArray", new MethodStub(TbUtils.class.getMethod("parseBytesToBinaryArray", List.class))); @@ -664,23 +668,16 @@ public class TbUtils { } public static ExecutionArrayList hexToBytes(ExecutionContext ctx, String value) { - String hex = prepareNumberString(value, true); - if (hex == null) { - throw new IllegalArgumentException("Hex string must be not empty!"); - } - int len = hex.length(); - if (len % 2 > 0) { - throw new IllegalArgumentException("Hex string must be even-length."); - } - int radix = isHexadecimal(value); - if (radix != HEX_RADIX) { - throw new NumberFormatException("Value: \"" + value + "\" is not numeric or hexDecimal format!"); - } - - byte [] data = hexToBytes(hex); + String hex = validateAndPrepareHex(value); + byte[] data = hexToBytes(hex); return bytesToExecutionArrayList(ctx, data); } + public static byte[] hexToBytesArray(String value) { + String hex = validateAndPrepareHex(value); + return hexToBytes(hex); + } + public static List printUnsignedBytes(ExecutionContext ctx, List byteArray) { ExecutionArrayList data = new ExecutionArrayList<>(ctx); for (Byte b : byteArray) { @@ -839,6 +836,11 @@ public class TbUtils { return Base64.getDecoder().decode(input); } + public static ExecutionArrayList base64ToBytesList(ExecutionContext ctx, String input) { + byte[] bytes = Base64.getDecoder().decode(input); + return bytesToExecutionArrayList(ctx, bytes); + } + public static int parseBytesToInt(List data) { return parseBytesToInt(data, 0); } @@ -879,6 +881,48 @@ public class TbUtils { return bb.getInt(); } + public static long parseBytesToUnsignedInt(byte[] data) { + return parseBytesToUnsignedInt(data, 0); + } + + public static long parseBytesToUnsignedInt(byte[] data, int offset) { + return parseBytesToUnsignedInt(data, offset, validateLength(data.length, offset, BYTES_LEN_INT_MAX)); + } + + public static long parseBytesToUnsignedInt(byte[] data, int offset, int length) { + return parseBytesToUnsignedInt(data, offset, length, true); + } + + public static long parseBytesToUnsignedInt(byte[] data, int offset, int length, boolean bigEndian) { + validationNumberByLength(data, offset, length, BYTES_LEN_INT_MAX); + + ByteBuffer bb = ByteBuffer.allocate(8); + if (!bigEndian) { + bb.order(ByteOrder.LITTLE_ENDIAN); + } + bb.position(bigEndian ? 8 - length : 0); + bb.put(data, offset, length); + bb.position(0); + + return bb.getLong(); + } + + public static long parseBytesToUnsignedInt(List data) { + return parseBytesToUnsignedInt(data, 0); + } + + public static long parseBytesToUnsignedInt(List data, int offset) { + return parseBytesToUnsignedInt(data, offset, validateLength(data.size(), offset, BYTES_LEN_INT_MAX)); + } + + public static long parseBytesToUnsignedInt(List data, int offset, int length) { + return parseBytesToUnsignedInt(data, offset, length, true); + } + + public static long parseBytesToUnsignedInt(List data, int offset, int length, boolean bigEndian) { + return parseBytesToUnsignedInt(Bytes.toArray(data), offset, length, bigEndian); + } + public static long parseBytesToLong(List data) { return parseBytesToLong(data, 0); } @@ -1304,7 +1348,7 @@ public class TbUtils { public static byte[] parseByteToBinaryArray(byte byteValue, int binLength, boolean bigEndian) { byte[] bins = new byte[binLength]; for (int i = 0; i < binLength; i++) { - if(bigEndian) { + if (bigEndian) { bins[binLength - 1 - i] = (byte) ((byteValue >> i) & 1); } else { bins[i] = (byte) ((byteValue >> i) & 1); @@ -1435,16 +1479,32 @@ public class TbUtils { } private static byte[] hexToBytes(String hex) { - byte [] data = new byte[hex.length()/2]; + byte[] data = new byte[hex.length() / 2]; for (int i = 0; i < hex.length(); i += 2) { // Extract two characters from the hex string String byteString = hex.substring(i, i + 2); // Parse the hex string to a byte byte byteValue = (byte) Integer.parseInt(byteString, HEX_RADIX); // Add the byte to the ArrayList - data[i/2] = byteValue; + data[i / 2] = byteValue; } return data; } + + private static String validateAndPrepareHex(String value) { + String hex = prepareNumberString(value, true); + if (hex == null) { + throw new IllegalArgumentException("Hex string must be not empty!"); + } + int len = hex.length(); + if (len % 2 > 0) { + throw new IllegalArgumentException("Hex string must be even-length."); + } + int radix = isHexadecimal(value); + if (radix != HEX_RADIX) { + throw new NumberFormatException("Value: \"" + value + "\" is not numeric or hexDecimal format!"); + } + return hex; + } } diff --git a/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java b/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java index 1c5a1a2e1a..21ee8538a0 100644 --- a/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java +++ b/common/script/script-api/src/test/java/org/thingsboard/script/api/tbel/TbUtilsTest.java @@ -19,7 +19,6 @@ import com.google.common.collect.Lists; import com.google.common.primitives.Bytes; import com.google.common.primitives.Ints; import lombok.extern.slf4j.Slf4j; -import org.checkerframework.checker.units.qual.A; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -36,6 +35,7 @@ import java.math.BigInteger; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Arrays; +import java.util.Base64; import java.util.Calendar; import java.util.Collections; import java.util.List; @@ -787,8 +787,12 @@ public class TbUtilsTest { public void hexToBytes_Test() { String input = "0x01752B0367FA000500010488FFFFFFFFFFFFFFFF33"; byte[] expected = {1, 117, 43, 3, 103, -6, 0, 5, 0, 1, 4, -120, -1, -1, -1, -1, -1, -1, -1, -1, 51}; - List actual = TbUtils.hexToBytes(ctx, input); - Assertions.assertEquals(toList(expected), actual); + List actualList = TbUtils.hexToBytes(ctx, input); + Assertions.assertEquals(toList(expected), actualList); + String validInput = "AABBCCDDEE"; + expected = new byte[]{(byte) 0xAA, (byte) 0xBB, (byte) 0xCC, (byte) 0xDD, (byte) 0xEE}; + byte[] actualBytes = TbUtils.hexToBytesArray(validInput); + Assertions.assertArrayEquals(expected, actualBytes); try { input = "0x01752B0367FA000500010488FFFFFFFFFFFFFFFF3"; TbUtils.hexToBytes(ctx, input); @@ -807,6 +811,12 @@ public class TbUtilsTest { } catch (IllegalArgumentException e) { Assertions.assertTrue(e.getMessage().contains("Hex string must be not empty")); } + try { + input = null; + TbUtils.hexToBytes(ctx, input); + } catch (IllegalArgumentException e) { + Assertions.assertTrue(e.getMessage().contains("Hex string must be not empty")); + } } @Test @@ -1086,6 +1096,26 @@ public class TbUtilsTest { String actual = TbUtils.hexToBase64(hex); Assertions.assertEquals(expected, actual); } + + @Test + void base64ToBytesList_Test() { + String validInput = Base64.getEncoder().encodeToString(new byte[]{1, 2, 3, 4, 5}); + ExecutionArrayList actual = TbUtils.base64ToBytesList(ctx, validInput); + ExecutionArrayList expected = new ExecutionArrayList<>(ctx); + expected.addAll(List.of((byte) 1, (byte)2, (byte)3, (byte)4, (byte)5)); + Assertions.assertEquals(expected, actual); + + String emptyInput = Base64.getEncoder().encodeToString(new byte[]{}); + actual = TbUtils.base64ToBytesList(ctx, emptyInput); + Assertions.assertTrue(actual.isEmpty()); + String invalidInput = "NotAValidBase64String"; + Assertions.assertThrows(IllegalArgumentException.class, () -> { + TbUtils.base64ToBytesList(ctx, invalidInput); + }); + Assertions.assertThrows(NullPointerException.class, () -> { + TbUtils.base64ToBytesList(ctx, null); + }); + } @Test public void bytesToHex_Test() { byte[] bb = {(byte) 0xBB, (byte) 0xAA}; diff --git a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportResource.java b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportResource.java index 67ae1b9ae7..f151283d37 100644 --- a/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportResource.java +++ b/common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportResource.java @@ -24,7 +24,10 @@ import org.eclipse.californium.core.observe.ObserveRelation; import org.eclipse.californium.core.server.resources.CoapExchange; import org.eclipse.californium.core.server.resources.Resource; import org.eclipse.californium.core.server.resources.ResourceObserver; +import org.eclipse.californium.elements.EndpointContext; +import org.eclipse.californium.elements.auth.X509CertPath; import org.thingsboard.server.coapserver.CoapServerService; +import org.thingsboard.server.coapserver.TbCoapDtlsSessionKey; import org.thingsboard.server.coapserver.TbCoapDtlsSessionInfo; import org.thingsboard.server.common.adaptor.AdaptorException; import org.thingsboard.server.common.adaptor.JsonConverter; @@ -47,12 +50,14 @@ import org.thingsboard.server.transport.coap.client.CoapClientContext; import org.thingsboard.server.transport.coap.client.TbCoapClientState; import java.net.InetSocketAddress; +import java.util.Base64; import java.util.List; import java.util.Optional; import java.util.Random; import java.util.UUID; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; +import java.security.cert.X509Certificate; import static org.eclipse.californium.elements.DtlsEndpointContext.KEY_SESSION_ID; @@ -65,7 +70,7 @@ public class CoapTransportResource extends AbstractCoapTransportResource { private static final int FEATURE_TYPE_POSITION_CERTIFICATE_REQUEST = 3; private static final int REQUEST_ID_POSITION_CERTIFICATE_REQUEST = 4; - private final ConcurrentMap dtlsSessionsMap; + private final ConcurrentMap dtlsSessionsMap; private final long timeout; private final long piggybackTimeout; private final CoapClientContext clients; @@ -177,11 +182,7 @@ public class CoapTransportResource extends AbstractCoapTransportResource { var dtlsSessionId = request.getSourceContext().get(KEY_SESSION_ID); if (dtlsSessionsMap != null && dtlsSessionId != null && !dtlsSessionId.isEmpty()) { - TbCoapDtlsSessionInfo tbCoapDtlsSessionInfo = dtlsSessionsMap - .computeIfPresent(request.getSourceContext().getPeerAddress(), (dtlsSessionIdStr, dtlsSessionInfo) -> { - dtlsSessionInfo.setLastActivityTime(System.currentTimeMillis()); - return dtlsSessionInfo; - }); + TbCoapDtlsSessionInfo tbCoapDtlsSessionInfo = this.getCoapDtlsSessionInfo(request.getSourceContext()); if (tbCoapDtlsSessionInfo != null) { processRequest(exchange, type, request, tbCoapDtlsSessionInfo.getMsg(), tbCoapDtlsSessionInfo.getDeviceProfile()); } else { @@ -251,7 +252,7 @@ public class CoapTransportResource extends AbstractCoapTransportResource { TransportProtos.SessionInfoProto sessionInfo = clients.getNewSyncSession(clientState); UUID sessionId = toSessionId(sessionInfo); transportService.process(sessionInfo, clientState.getAdaptor().convertToPostAttributes(sessionId, request, - clientState.getConfiguration().getAttributesMsgDescriptor()), + clientState.getConfiguration().getAttributesMsgDescriptor()), new CoapResponseCodeCallback(exchange, CoAP.ResponseCode.CREATED, CoAP.ResponseCode.INTERNAL_SERVER_ERROR)); } @@ -259,7 +260,7 @@ public class CoapTransportResource extends AbstractCoapTransportResource { TransportProtos.SessionInfoProto sessionInfo = clients.getNewSyncSession(clientState); UUID sessionId = toSessionId(sessionInfo); transportService.process(sessionInfo, clientState.getAdaptor().convertToPostTelemetry(sessionId, request, - clientState.getConfiguration().getTelemetryMsgDescriptor()), + clientState.getConfiguration().getTelemetryMsgDescriptor()), new CoapResponseCodeCallback(exchange, CoAP.ResponseCode.CREATED, CoAP.ResponseCode.INTERNAL_SERVER_ERROR)); } @@ -458,5 +459,32 @@ public class CoapTransportResource extends AbstractCoapTransportResource { } } + private TbCoapDtlsSessionInfo getCoapDtlsSessionInfo(EndpointContext endpointContext) { + InetSocketAddress peerAddress = endpointContext.getPeerAddress(); + String certPemStr = getCertPem(endpointContext); + TbCoapDtlsSessionKey tbCoapDtlsSessionKey = StringUtils.isNotBlank(certPemStr) ? new TbCoapDtlsSessionKey(peerAddress, certPemStr) : null; + TbCoapDtlsSessionInfo tbCoapDtlsSessionInfo; + if (tbCoapDtlsSessionKey != null) { + tbCoapDtlsSessionInfo = dtlsSessionsMap + .computeIfPresent(tbCoapDtlsSessionKey, (dtlsSessionIdStr, dtlsSessionInfo) -> { + dtlsSessionInfo.setLastActivityTime(System.currentTimeMillis()); + return dtlsSessionInfo; + }); + } else { + tbCoapDtlsSessionInfo = null; + } + return tbCoapDtlsSessionInfo; + } + private String getCertPem(EndpointContext endpointContext) { + try { + X509CertPath certPath = (X509CertPath) endpointContext.getPeerIdentity(); + X509Certificate x509Certificate = (X509Certificate) certPath.getPath().getCertificates().get(0); + return Base64.getEncoder().encodeToString(x509Certificate.getEncoded()); + } catch (Exception e) { + log.error("Failed to get cert PEM: [{}]", endpointContext.getPeerAddress(), e); + return null; + } + } } + diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/util/LwM2MClientSerDes.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/util/LwM2MClientSerDes.java index 6eb54e5447..6b2bff2467 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/util/LwM2MClientSerDes.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/store/util/LwM2MClientSerDes.java @@ -17,7 +17,6 @@ package org.thingsboard.server.transport.lwm2m.server.store.util; import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; @@ -57,7 +56,7 @@ public class LwM2MClientSerDes { @SneakyThrows public static byte[] serialize(LwM2mClient client) { - JsonObject o = new JsonObject(); + JsonObject o = new JsonObject(); o.addProperty("nodeId", client.getNodeId()); o.addProperty("endpoint", client.getEndpoint()); @@ -111,14 +110,7 @@ public class LwM2MClientSerDes { o.addProperty("defaultObjectIDVer", client.getDefaultObjectIDVer().toString()); if (client.getRegistration() != null) { - String registrationAddress = client.getRegistration().getAddress().toString(); JsonNode registrationNode = registrationSerDes.jSerialize(client.getRegistration()); - if (!registrationAddress.equals(registrationNode.get("transportdata").get("address").asText())){ - ObjectNode actualRegAddress = (ObjectNode)registrationNode.get("transportdata"); - actualRegAddress.put("address", registrationAddress); - ObjectNode actualIdentity = (ObjectNode) actualRegAddress.get("identity"); - actualIdentity.put("address", registrationAddress); - } o.addProperty("registration", registrationNode.toString()); } o.addProperty("asleep", client.isAsleep()); @@ -188,7 +180,7 @@ public class LwM2MClientSerDes { case STRING: return value.getAsString(); case TIME: - return Instant.ofEpochMilli(value.getAsLong()); + return new Date(value.getAsLong()); case OBJLNK: return ObjectLink.decodeFromString(value.getAsString()); case UNSIGNED_INTEGER: @@ -249,7 +241,7 @@ public class LwM2MClientSerDes { o.addProperty(VALUE, ((ObjectLink) value).encodeToString()); break; case UNSIGNED_INTEGER: - o.addProperty(VALUE, Integer.toUnsignedString((int)value)); + o.addProperty(VALUE, Integer.toUnsignedString((int) value)); break; default: throw new LwM2mNodeException(String.format("Type %s is not supported", type.name())); diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2mUplinkMsgHandler.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2mUplinkMsgHandler.java index a79ed43784..d415b8c22a 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2mUplinkMsgHandler.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/uplink/DefaultLwM2mUplinkMsgHandler.java @@ -279,6 +279,7 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl clientContext.unregister(client, registration); SessionInfoProto sessionInfo = client.getSession(); if (sessionInfo != null) { + securityStore.remove(client.getEndpoint(), client.getRegistration().getId()); sessionManager.deregister(sessionInfo); sessionStore.remove(registration.getEndpoint()); log.info("Client close session: [{}] unReg [{}] name [{}] profile ", registration.getId(), registration.getEndpoint(), sessionInfo.getDeviceType()); @@ -401,7 +402,6 @@ public class DefaultLwM2mUplinkMsgHandler extends LwM2MExecutorAwareService impl .stream().filter(e -> e.getProfileId() != null) .filter(e -> e.getProfileId().equals(deviceProfile.getUuidId())).collect(Collectors.toList()); clients.forEach(client -> { - this.securityStore.remove(client.getEndpoint(), client.getRegistration().getId()); client.onDeviceProfileUpdate(deviceProfile); }); if (clients.size() > 0) { diff --git a/common/transport/lwm2m/src/test/java/org/thingsboard/server/transport/lwm2m/server/store/util/LwM2MClientSerDesTest.java b/common/transport/lwm2m/src/test/java/org/thingsboard/server/transport/lwm2m/server/store/util/LwM2MClientSerDesTest.java index 6b17225538..710b06a864 100644 --- a/common/transport/lwm2m/src/test/java/org/thingsboard/server/transport/lwm2m/server/store/util/LwM2MClientSerDesTest.java +++ b/common/transport/lwm2m/src/test/java/org/thingsboard/server/transport/lwm2m/server/store/util/LwM2MClientSerDesTest.java @@ -18,13 +18,17 @@ package org.thingsboard.server.transport.lwm2m.server.store.util; import org.eclipse.leshan.core.LwM2m.LwM2mVersion; import org.eclipse.leshan.core.endpoint.EndpointUriUtil; import org.eclipse.leshan.core.link.Link; +import org.eclipse.leshan.core.link.attributes.AttributeSet; +import org.eclipse.leshan.core.link.attributes.ResourceTypeAttribute; import org.eclipse.leshan.core.node.LwM2mMultipleResource; import org.eclipse.leshan.core.node.LwM2mPath; import org.eclipse.leshan.core.node.LwM2mResource; import org.eclipse.leshan.core.node.LwM2mSingleResource; import org.eclipse.leshan.core.peer.IpPeer; import org.eclipse.leshan.core.request.WriteRequest; +import org.eclipse.leshan.server.registration.DefaultRegistrationDataExtractor; import org.eclipse.leshan.server.registration.Registration; +import org.eclipse.leshan.server.registration.RegistrationDataExtractor; import org.junit.jupiter.api.Test; import org.thingsboard.server.common.data.TbResource; import org.thingsboard.server.common.data.device.data.PowerMode; @@ -83,12 +87,22 @@ public class LwM2MClientSerDesTest { client.init(credentialsResponse, UUID.randomUUID()); + AttributeSet attrs = new AttributeSet( // + new ResourceTypeAttribute("oma.lwm2m")); + + Link[] objs = new Link[]{new Link("/15", attrs), new Link("/17")}; + + RegistrationDataExtractor.RegistrationData dataFromObjectLinks = new DefaultRegistrationDataExtractor().extractDataFromObjectLinks(objs, + LwM2mVersion.V1_0); + Registration registration = new Registration .Builder("test", "endpoint", new IpPeer(new InetSocketAddress(Inet4Address.getLoopbackAddress(), 1000)), - EndpointUriUtil.createUri("coap://localhost:5685")) - .supportedContentFormats() - .supportedObjects(Map.of(15, LwM2mVersion.V1_0, 17, LwM2mVersion.V1_0)) - .objectLinks(new Link[] { new Link("/15"), new Link("/17") }) + EndpointUriUtil.createUri("coap://localhost:5685")) + .objectLinks(objs) + .rootPath(dataFromObjectLinks.getAlternatePath()) + .supportedContentFormats(dataFromObjectLinks.getSupportedContentFormats()) + .supportedObjects(dataFromObjectLinks.getSupportedObjects()) + .availableInstances(dataFromObjectLinks.getAvailableInstances()) .build(); client.setRegistration(registration); @@ -135,12 +149,7 @@ public class LwM2MClientSerDesTest { assertEquals(client.getPsmActivityTimer(), desClient.getPsmActivityTimer()); assertEquals(client.getPagingTransmissionWindow(), desClient.getPagingTransmissionWindow()); assertEquals(client.getEdrxCycle(), desClient.getEdrxCycle()); - if (((IpPeer)desClient.getRegistration().getClientTransportData()).getSocketAddress().isUnresolved()) { - String actualReg = desClient.getRegistration().toString().replaceAll("/", ""); - assertEquals(client.getRegistration().toString(), actualReg); - } else { - assertEquals(client.getRegistration(), desClient.getRegistration()); - } + assertEquals(client.getRegistration(), desClient.getRegistration()); assertEquals(client.isAsleep(), desClient.isAsleep()); assertEquals(client.getLastUplinkTime(), desClient.getLastUplinkTime()); assertEquals(client.getSleepTask(), desClient.getSleepTask()); diff --git a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java index 2b7e2a51dc..e669016514 100644 --- a/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java +++ b/common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/MqttTransportHandler.java @@ -94,6 +94,7 @@ import org.thingsboard.server.transport.mqtt.util.sparkplug.SparkplugTopic; import javax.net.ssl.SSLPeerUnverifiedException; import java.io.IOException; import java.net.InetSocketAddress; +import java.nio.charset.StandardCharsets; import java.security.cert.Certificate; import java.security.cert.X509Certificate; import java.util.ArrayList; @@ -109,7 +110,6 @@ import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; -import static com.amazonaws.util.StringUtils.UTF8; import static io.netty.handler.codec.mqtt.MqttMessageType.CONNECT; import static io.netty.handler.codec.mqtt.MqttMessageType.PINGRESP; import static io.netty.handler.codec.mqtt.MqttMessageType.SUBACK; @@ -606,7 +606,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement } private void getOtaPackageCallback(ChannelHandlerContext ctx, MqttPublishMessage mqttMsg, int msgId, Matcher fwMatcher, OtaPackageType type) { - String payload = mqttMsg.content().toString(UTF8); + String payload = mqttMsg.content().toString(StandardCharsets.UTF_8); int chunkSize = StringUtils.isNotEmpty(payload) ? Integer.parseInt(payload) : 0; String requestId = fwMatcher.group("requestId"); int chunk = Integer.parseInt(fwMatcher.group("chunk")); diff --git a/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/GitRepository.java b/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/GitRepository.java index 8498b4a7e4..4841f05471 100644 --- a/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/GitRepository.java +++ b/common/version-control/src/main/java/org/thingsboard/server/service/sync/vc/GitRepository.java @@ -94,6 +94,10 @@ import java.util.function.Function; import java.util.stream.Collectors; import static org.eclipse.jgit.api.ListBranchCommand.ListMode; +import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.REJECTED_NODELETE; +import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.REJECTED_NONFASTFORWARD; +import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.REJECTED_OTHER_REASON; +import static org.eclipse.jgit.transport.RemoteRefUpdate.Status.REJECTED_REMOTE_CHANGED; @Slf4j public class GitRepository { @@ -358,8 +362,10 @@ public class GitRepository { result.forEach(pushResult -> { for (RemoteRefUpdate update : pushResult.getRemoteUpdates()) { RemoteRefUpdate.Status status = update.getStatus(); - if (status != RemoteRefUpdate.Status.OK && status != RemoteRefUpdate.Status.UP_TO_DATE) { - throw new RuntimeException("Failed to push changes: " + Optional.ofNullable(update.getMessage()).orElseGet(status::name)); + if (status == REJECTED_NONFASTFORWARD || status == REJECTED_NODELETE || + status == REJECTED_REMOTE_CHANGED || status == REJECTED_OTHER_REASON) { + throw new RuntimeException("Remote repository answered with error: " + + Optional.ofNullable(update.getMessage()).orElseGet(status::name)); } } }); diff --git a/dao/src/main/java/org/thingsboard/server/dao/mobile/QrCodeSettingServiceImpl.java b/dao/src/main/java/org/thingsboard/server/dao/mobile/QrCodeSettingServiceImpl.java index ee3e59c60b..27cc3eebbf 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/mobile/QrCodeSettingServiceImpl.java +++ b/dao/src/main/java/org/thingsboard/server/dao/mobile/QrCodeSettingServiceImpl.java @@ -115,7 +115,7 @@ public class QrCodeSettingServiceImpl extends AbstractCachedEntityService { mobile.setAppSecret(appSecret); mobile.setPlatformType(platformType); mobile.setStatus(status); - mobile.setVersionInfo(fromJson(versionInfo, MobileAppVersionInfo.class)); - mobile.setStoreInfo(fromJson(storeInfo, StoreInfo.class)); + mobile.setVersionInfo(versionInfo != null ? fromJson(versionInfo, MobileAppVersionInfo.class) : MOBILE_APP_VERSION_INFO_EMPTY_OBJECT); + mobile.setStoreInfo(storeInfo != null ? fromJson(storeInfo, StoreInfo.class) : MOBILE_APP_STORE_INFO_EMPTY_OBJECT); return mobile; } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java index 9395aae6c7..79c7dc7a84 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java @@ -597,7 +597,7 @@ public class BaseResourceService extends AbstractCachedEntityService { @Override protected void validateDataImpl(TenantId tenantId, MobileApp mobileApp) { - if (mobileApp.getPlatformType() == PlatformType.ANDROID) { - if (mobileApp.getStoreInfo() != null && + if (mobileApp.getStatus() == MobileAppStatus.PUBLISHED) { + if (mobileApp.getStoreInfo() == null) { + throw new DataValidationException("Store info is required for published apps"); + } + if (mobileApp.getPlatformType() == PlatformType.ANDROID && (mobileApp.getStoreInfo().getSha256CertFingerprints() == null || mobileApp.getStoreInfo().getStoreLink() == null)) { throw new DataValidationException("Sha256CertFingerprints and store link are required"); - } - } else if (mobileApp.getPlatformType() == PlatformType.IOS) { - if (mobileApp.getStoreInfo() != null && + } else if (mobileApp.getPlatformType() == PlatformType.IOS && (mobileApp.getStoreInfo().getAppId() == null || mobileApp.getStoreInfo().getStoreLink() == null)) { throw new DataValidationException("AppId and store link are required"); } - } else { - throw new DataValidationException("Wrong application platform type"); - } - if (mobileApp.getStatus() == MobileAppStatus.PUBLISHED && mobileApp.getStoreInfo() == null) { - throw new DataValidationException("Store info is required for published apps"); } } } diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java index 065a057160..c580661e67 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaBaseEdgeEventDao.java @@ -134,7 +134,7 @@ public class JpaBaseEdgeEventDao extends JpaPartitionedAbstractDao saveAsync(EdgeEvent edgeEvent) { - log.debug("Save edge event [{}] ", edgeEvent); + log.debug("Saving EdgeEvent [{}] ", edgeEvent); if (edgeEvent.getId() == null) { UUID timeBased = Uuids.timeBased(); edgeEvent.setId(new EdgeEventId(timeBased)); @@ -156,7 +156,7 @@ public class JpaBaseEdgeEventDao extends JpaPartitionedAbstractDao save(EdgeEventEntity entity) { - log.debug("Save edge event [{}] ", entity); + log.debug("Saving EdgeEventEntity [{}] ", entity); if (entity.getTenantId() == null) { log.trace("Save system edge event with predefined id {}", systemTenantId); entity.setTenantId(systemTenantId); diff --git a/msa/js-executor/api/jsExecutor.models.ts b/msa/js-executor/api/jsExecutor.models.ts index 3f14079139..182ec5cf23 100644 --- a/msa/js-executor/api/jsExecutor.models.ts +++ b/msa/js-executor/api/jsExecutor.models.ts @@ -16,8 +16,6 @@ export interface TbMessage { - scriptIdMSB: string; // deprecated - scriptIdLSB: string; // deprecated scriptHash: string; } diff --git a/msa/js-executor/api/jsInvokeMessageProcessor.ts b/msa/js-executor/api/jsInvokeMessageProcessor.ts index fe18c320bc..f55a1ba468 100644 --- a/msa/js-executor/api/jsInvokeMessageProcessor.ts +++ b/msa/js-executor/api/jsInvokeMessageProcessor.ts @@ -18,7 +18,7 @@ import config from 'config'; import { _logger } from '../config/logger'; import { JsExecutor, TbScript } from './jsExecutor'; import { performance } from 'perf_hooks'; -import { isString, parseJsErrorDetails, toUUIDString, UUIDFromBuffer, UUIDToBits, isNotUUID } from './utils'; +import { isString, parseJsErrorDetails, UUIDFromBuffer, UUIDToBits } from './utils'; import { IQueue } from '../queue/queue.models'; import { JsCompileRequest, @@ -306,26 +306,12 @@ export class JsInvokeMessageProcessor { } private static createCompileResponse(scriptId: string, success: boolean, errorCode?: number, err?: any): JsCompileResponse { - if (isNotUUID(scriptId)) { - return { - errorCode: errorCode, - success: success, - errorDetails: parseJsErrorDetails(err), - scriptIdMSB: "0", - scriptIdLSB: "0", - scriptHash: scriptId - }; - } else { // this is for backward compatibility (to be able to work with tb-node of previous version) - todo: remove in the next release - let scriptIdBits = UUIDToBits(scriptId); - return { - errorCode: errorCode, - success: success, - errorDetails: parseJsErrorDetails(err), - scriptIdMSB: scriptIdBits[0], - scriptIdLSB: scriptIdBits[1], - scriptHash: "" - }; - } + return { + errorCode: errorCode, + success: success, + errorDetails: parseJsErrorDetails(err), + scriptHash: scriptId + }; } private static createInvokeResponse(result: string | undefined, success: boolean, errorCode?: number, err?: any): JsInvokeResponse { @@ -338,26 +324,14 @@ export class JsInvokeMessageProcessor { } private static createReleaseResponse(scriptId: string, success: boolean): JsReleaseResponse { - if (isNotUUID(scriptId)) { - return { - success: success, - scriptIdMSB: "0", - scriptIdLSB: "0", - scriptHash: scriptId, - }; - } else { // todo: remove in the next release - let scriptIdBits = UUIDToBits(scriptId); - return { - success: success, - scriptIdMSB: scriptIdBits[0], - scriptIdLSB: scriptIdBits[1], - scriptHash: "" - } - } + return { + success: success, + scriptHash: scriptId, + }; } private static getScriptId(request: TbMessage): string { - return request.scriptHash ? request.scriptHash : toUUIDString(request.scriptIdMSB, request.scriptIdLSB); + return request.scriptHash; } private incrementUseScriptId(scriptId: string) { diff --git a/msa/js-executor/api/utils.ts b/msa/js-executor/api/utils.ts index c228d98315..f044d40f58 100644 --- a/msa/js-executor/api/utils.ts +++ b/msa/js-executor/api/utils.ts @@ -17,13 +17,6 @@ import Long from 'long'; import uuidParse from 'uuid-parse'; -export function toUUIDString(mostSigBits: string, leastSigBits: string): string { - const msbBytes = Long.fromValue(mostSigBits, false).toBytes(false); - const lsbBytes = Long.fromValue(leastSigBits, false).toBytes(false); - const uuidBytes = msbBytes.concat(lsbBytes); - return uuidParse.unparse(uuidBytes as any); -} - export function UUIDFromBuffer(buf: Buffer): string { return uuidParse.unparse(buf); } @@ -59,10 +52,6 @@ export function parseJsErrorDetails(err: any): string | undefined { return details; } -export function isNotUUID(candidate: string) { - return candidate.length != 36 || !candidate.includes('-'); -} - export function isNotEmptyStr(value: any): boolean { return typeof value === 'string' && value.trim().length > 0; } diff --git a/msa/js-executor/config/custom-environment-variables.yml b/msa/js-executor/config/custom-environment-variables.yml index 7c79eda0d1..f28df78d1d 100644 --- a/msa/js-executor/config/custom-environment-variables.yml +++ b/msa/js-executor/config/custom-environment-variables.yml @@ -14,7 +14,7 @@ # limitations under the License. # -queue_type: "TB_QUEUE_TYPE" #kafka (Apache Kafka) or aws-sqs (AWS SQS) or pubsub (PubSub) or service-bus (Azure Service Bus) or rabbitmq (RabbitMQ) +queue_type: "TB_QUEUE_TYPE" #kafka (Apache Kafka) queue_prefix: "TB_QUEUE_PREFIX" request_topic: "REMOTE_JS_EVAL_REQUEST_TOPIC" http_port: "HTTP_PORT" # /livenessProbe @@ -55,32 +55,6 @@ kafka: username: "TB_QUEUE_KAFKA_CONFLUENT_USERNAME" password: "TB_QUEUE_KAFKA_CONFLUENT_PASSWORD" -pubsub: - project_id: "TB_QUEUE_PUBSUB_PROJECT_ID" - service_account: "TB_QUEUE_PUBSUB_SERVICE_ACCOUNT" - queue_properties: "TB_QUEUE_PUBSUB_JE_QUEUE_PROPERTIES" - -aws_sqs: - access_key_id: "TB_QUEUE_AWS_SQS_ACCESS_KEY_ID" - secret_access_key: "TB_QUEUE_AWS_SQS_SECRET_ACCESS_KEY" - region: "TB_QUEUE_AWS_SQS_REGION" - queue_properties: "TB_QUEUE_AWS_SQS_JE_QUEUE_PROPERTIES" - -rabbitmq: - host: "TB_QUEUE_RABBIT_MQ_HOST" - port: "TB_QUEUE_RABBIT_MQ_PORT" - virtual_host: "TB_QUEUE_RABBIT_MQ_VIRTUAL_HOST" - username: "TB_QUEUE_RABBIT_MQ_USERNAME" - password: "TB_QUEUE_RABBIT_MQ_PASSWORD" - queue_properties: "TB_QUEUE_RABBIT_MQ_JE_QUEUE_PROPERTIES" - -service_bus: - namespace_name: "TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME" - sas_key_name: "TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME" - sas_key: "TB_QUEUE_SERVICE_BUS_SAS_KEY" - max_messages: "TB_QUEUE_SERVICE_BUS_MAX_MESSAGES" - queue_properties: "TB_QUEUE_SERVICE_BUS_JE_QUEUE_PROPERTIES" - logger: level: "LOGGER_LEVEL" path: "LOG_FOLDER" diff --git a/msa/js-executor/config/default.yml b/msa/js-executor/config/default.yml index f5bde183e4..dda3ef02c7 100644 --- a/msa/js-executor/config/default.yml +++ b/msa/js-executor/config/default.yml @@ -44,23 +44,6 @@ kafka: sasl: mechanism: "PLAIN" -pubsub: - queue_properties: "ackDeadlineInSec:30;messageRetentionInSec:604800" - -aws_sqs: - queue_properties: "VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800" - -rabbitmq: - host: "localhost" - port: "5672" - virtual_host: "/" - username: "admin" - password: "password" - queue_properties: "x-max-length-bytes:1048576000;x-message-ttl:604800000" - -service_bus: - queue_properties: "lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800" - logger: level: "info" path: "logs" diff --git a/msa/js-executor/package.json b/msa/js-executor/package.json index a29dc1ef54..350d6029f0 100644 --- a/msa/js-executor/package.json +++ b/msa/js-executor/package.json @@ -13,17 +13,12 @@ "build": "tsc" }, "dependencies": { - "@aws-sdk/client-sqs": "^3.682.0", - "@azure/service-bus": "^7.9.5", - "@google-cloud/pubsub": "^4.8.0", - "amqplib": "^0.10.4", "config": "^3.3.12", "express": "^4.21.1", "js-yaml": "^4.1.0", "kafkajs": "^2.2.4", "long": "^5.2.3", "uuid-parse": "^1.1.0", - "uuid-random": "^1.3.2", "winston": "^3.16.0", "winston-daily-rotate-file": "^5.0.0" }, @@ -36,7 +31,6 @@ ] }, "devDependencies": { - "@types/amqplib": "^0.10.5", "@types/config": "^3.3.5", "@types/express": "~4.17.21", "@types/node": "~20.17.6", diff --git a/msa/js-executor/queue/awsSqsTemplate.ts b/msa/js-executor/queue/awsSqsTemplate.ts deleted file mode 100644 index 3edb0db1f4..0000000000 --- a/msa/js-executor/queue/awsSqsTemplate.ts +++ /dev/null @@ -1,198 +0,0 @@ -/// -/// Copyright © 2016-2024 The Thingsboard Authors -/// -/// Licensed under the Apache License, Version 2.0 (the "License"); -/// you may not use this file except in compliance with the License. -/// You may obtain a copy of the License at -/// -/// http://www.apache.org/licenses/LICENSE-2.0 -/// -/// Unless required by applicable law or agreed to in writing, software -/// distributed under the License is distributed on an "AS IS" BASIS, -/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -/// See the License for the specific language governing permissions and -/// limitations under the License. -/// - -import config from 'config'; -import { _logger } from '../config/logger'; -import { JsInvokeMessageProcessor } from '../api/jsInvokeMessageProcessor' -import { IQueue } from './queue.models'; -import { - CreateQueueCommand, - CreateQueueRequest, - DeleteMessageBatchCommand, - DeleteMessageBatchRequest, - DeleteMessageBatchRequestEntry, - ListQueuesCommand, - ListQueuesResult, - ReceiveMessageCommand, - ReceiveMessageRequest, - ReceiveMessageResult, - SendMessageCommand, - SendMessageRequest, - SQSClient -} from '@aws-sdk/client-sqs'; -import uuid from 'uuid-random'; - -export class AwsSqsTemplate implements IQueue { - - private logger = _logger(`awsSqsTemplate`); - private queuePrefix: string = config.get('queue_prefix'); - private requestTopic: string = this.queuePrefix ? this.queuePrefix + "." + config.get('request_topic') : config.get('request_topic'); - private accessKeyId: string = config.get('aws_sqs.access_key_id'); - private secretAccessKey: string = config.get('aws_sqs.secret_access_key'); - private region: string = config.get('aws_sqs.region'); - private queueProperties: string = config.get('aws_sqs.queue_properties'); - private pollInterval = Number(config.get('js.response_poll_interval')); - - private sqsClient: SQSClient; - private requestQueueURL: string - private queueUrls = new Map(); - private queueAttributes: { [n: string]: string } = { - FifoQueue: 'true' - }; - private timer: NodeJS.Timeout; - - name = 'AWS SQS'; - - constructor() { - } - - async init() { - this.sqsClient = new SQSClient({ - apiVersion: '2012-11-05', - credentials: { - accessKeyId: this.accessKeyId, - secretAccessKey: this.secretAccessKey - }, - region: this.region - }); - - const queues = await this.getQueues(); - - if (queues.QueueUrls) { - queues.QueueUrls.forEach(queueUrl => { - const delimiterPosition = queueUrl.lastIndexOf('/'); - const queueName = queueUrl.substring(delimiterPosition + 1); - this.queueUrls.set(queueName, queueUrl); - }); - } - - this.parseQueueProperties(); - - this.requestQueueURL = this.queueUrls.get(AwsSqsTemplate.topicToSqsQueueName(this.requestTopic)) || ''; - if (!this.requestQueueURL) { - this.requestQueueURL = await this.createQueue(this.requestTopic); - } - - const messageProcessor = new JsInvokeMessageProcessor(this); - - const params: ReceiveMessageRequest = { - MaxNumberOfMessages: 10, - QueueUrl: this.requestQueueURL, - WaitTimeSeconds: Math.ceil(this.pollInterval / 10) - }; - this.timer = setTimeout(() => {this.getAndProcessMessage(messageProcessor, params)}, this.pollInterval); - } - - private async getAndProcessMessage(messageProcessor: JsInvokeMessageProcessor, params: ReceiveMessageRequest) { - const messagesResponse: ReceiveMessageResult = await this.sqsClient.send(new ReceiveMessageCommand(params)); - const messages = messagesResponse.Messages; - - if (messages && messages.length > 0) { - const entries: DeleteMessageBatchRequestEntry[] = []; - - messages.forEach(message => { - entries.push({ - Id: message.MessageId, - ReceiptHandle: message.ReceiptHandle - }); - messageProcessor.onJsInvokeMessage(JSON.parse(message.Body || '')); - }); - - const deleteBatch: DeleteMessageBatchRequest = { - QueueUrl: this.requestQueueURL, - Entries: entries - }; - try { - await this.sqsClient.send(new DeleteMessageBatchCommand(deleteBatch)) - } catch (err: any) { - this.logger.error("Failed to delete messages from queue.", err.message); - } - } - this.timer = setTimeout(() => {this.getAndProcessMessage(messageProcessor, params)}, this.pollInterval); - } - - async send(responseTopic: string, msgKey: string, rawResponse: Buffer, headers: any): Promise { - let msgBody = JSON.stringify( - { - key: msgKey, - data: [...rawResponse], - headers: headers - }); - - let responseQueueUrl = this.queueUrls.get(AwsSqsTemplate.topicToSqsQueueName(responseTopic)); - - if (!responseQueueUrl) { - responseQueueUrl = await this.createQueue(responseTopic); - this.queueUrls.set(responseTopic, responseQueueUrl); - } - - let msgId = uuid(); - - let params: SendMessageRequest = { - MessageBody: msgBody, - QueueUrl: responseQueueUrl, - MessageGroupId: msgId, - MessageDeduplicationId: msgId - }; - - return this.sqsClient.send(new SendMessageCommand(params)) - } - - private async getQueues(): Promise { - return this.sqsClient.send(new ListQueuesCommand({})); - } - - private parseQueueProperties() { - const props = this.queueProperties.split(';'); - props.forEach(p => { - const delimiterPosition = p.indexOf(':'); - this.queueAttributes[p.substring(0, delimiterPosition)] = p.substring(delimiterPosition + 1); - }); - } - - private static topicToSqsQueueName(topic: string): string { - return topic.replace(/\./g, '_') + '.fifo'; - } - - private async createQueue(topic: string): Promise { - let queueName = AwsSqsTemplate.topicToSqsQueueName(topic); - let queueParams: CreateQueueRequest = { - QueueName: queueName, - Attributes: this.queueAttributes - }; - - const result = await this.sqsClient.send(new CreateQueueCommand(queueParams)); - return result.QueueUrl || ''; - } - - async destroy(): Promise { - this.logger.info('Stopping AWS SQS resources...'); - clearTimeout(this.timer); - if (this.sqsClient) { - this.logger.info('Stopping AWS SQS client...'); - try { - const _sqsClient = this.sqsClient; - // @ts-ignore - delete this.sqsClient; - _sqsClient.destroy(); - this.logger.info('AWS SQS client stopped.'); - } catch (e: any) { - this.logger.info('AWS SQS client stop error.'); - } - } - this.logger.info('AWS SQS resources stopped.') - } -} diff --git a/msa/js-executor/queue/pubSubTemplate.ts b/msa/js-executor/queue/pubSubTemplate.ts deleted file mode 100644 index 537d2e71b1..0000000000 --- a/msa/js-executor/queue/pubSubTemplate.ts +++ /dev/null @@ -1,162 +0,0 @@ -/// -/// Copyright © 2016-2024 The Thingsboard Authors -/// -/// Licensed under the Apache License, Version 2.0 (the "License"); -/// you may not use this file except in compliance with the License. -/// You may obtain a copy of the License at -/// -/// http://www.apache.org/licenses/LICENSE-2.0 -/// -/// Unless required by applicable law or agreed to in writing, software -/// distributed under the License is distributed on an "AS IS" BASIS, -/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -/// See the License for the specific language governing permissions and -/// limitations under the License. -/// - -import config from 'config'; -import { _logger } from '../config/logger'; -import { JsInvokeMessageProcessor } from '../api/jsInvokeMessageProcessor' -import { PubSub } from '@google-cloud/pubsub'; -import { IQueue } from './queue.models'; -import { Message } from '@google-cloud/pubsub/build/src/subscriber'; - -export class PubSubTemplate implements IQueue { - - private logger = _logger(`pubSubTemplate`); - private projectId: string = config.get('pubsub.project_id'); - private credentials = JSON.parse(config.get('pubsub.service_account')); - private queuePrefix: string = config.get('queue_prefix'); - private requestTopic: string = this.queuePrefix ? this.queuePrefix + "." + config.get('request_topic') : config.get('request_topic'); - private queueProperties: string = config.get('pubsub.queue_properties'); - - private pubSubClient: PubSub; - private queueProps: { [n: string]: string } = {}; - private topics: string[] = []; - private subscriptions: string[] = []; - - name = 'Pub/Sub'; - - constructor() { - } - - async init() { - this.pubSubClient = new PubSub({ - projectId: this.projectId, - credentials: this.credentials - }); - - this.parseQueueProperties(); - - const topicList = await this.pubSubClient.getTopics(); - - if (topicList) { - topicList[0].forEach(topic => { - this.topics.push(PubSubTemplate.getName(topic.name)); - }); - } - - const subscriptionList = await this.pubSubClient.getSubscriptions(); - - if (subscriptionList) { - topicList[0].forEach(sub => { - this.subscriptions.push(PubSubTemplate.getName(sub.name)); - }); - } - - if (!(this.subscriptions.includes(this.requestTopic) && this.topics.includes(this.requestTopic))) { - await this.createTopic(this.requestTopic); - await this.createSubscription(this.requestTopic); - } - - const subscription = this.pubSubClient.subscription(this.requestTopic); - - const messageProcessor = new JsInvokeMessageProcessor(this); - - const messageHandler = (message: Message) => { - messageProcessor.onJsInvokeMessage(JSON.parse(message.data.toString('utf8'))); - message.ack(); - }; - - subscription.on('message', messageHandler); - } - - async send(responseTopic: string, msgKey: string, rawResponse: Buffer, headers: any): Promise { - if (!(this.subscriptions.includes(responseTopic) && this.topics.includes(this.requestTopic))) { - await this.createTopic(this.requestTopic); - await this.createSubscription(this.requestTopic); - } - - let data = JSON.stringify( - { - key: msgKey, - data: [...rawResponse], - headers: headers - }); - let dataBuffer = Buffer.from(data); - return this.pubSubClient.topic(responseTopic).publishMessage({data: dataBuffer}); - } - - private parseQueueProperties() { - const props = this.queueProperties.split(';'); - props.forEach(p => { - const delimiterPosition = p.indexOf(':'); - this.queueProps[p.substring(0, delimiterPosition)] = p.substring(delimiterPosition + 1); - }); - } - - private static getName(fullName: string): string { - const delimiterPosition = fullName.lastIndexOf('/'); - return fullName.substring(delimiterPosition + 1); - } - - private async createTopic(topic: string) { - if (!this.topics.includes(topic)) { - try { - await this.pubSubClient.createTopic(topic); - this.logger.info('Created new Pub/Sub topic: %s', topic); - } catch (e) { - this.logger.info('Pub/Sub topic already exists'); - } - this.topics.push(topic); - } - } - - private async createSubscription(topic: string) { - if (!this.subscriptions.includes(topic)) { - try { - await this.pubSubClient.createSubscription(topic, topic, { - topic: topic, - name: topic, - ackDeadlineSeconds: Number(this.queueProps['ackDeadlineInSec']), - messageRetentionDuration: { - seconds: this.queueProps['messageRetentionInSec'] - } - }); - this.logger.info('Created new Pub/Sub subscription: %s', topic); - } catch (e) { - this.logger.info('Pub/Sub subscription already exists.'); - } - - this.subscriptions.push(topic); - } - } - - async destroy(): Promise { - this.logger.info('Stopping Pub/Sub resources...'); - if (this.pubSubClient) { - this.logger.info('Stopping Pub/Sub client...'); - try { - const _pubSubClient = this.pubSubClient; - // @ts-ignore - delete this.pubSubClient; - await _pubSubClient.close(); - this.logger.info('Pub/Sub client stopped.'); - } catch (e) { - this.logger.info('Pub/Sub client stop error.'); - } - } - this.logger.info('Pub/Sub resources stopped.'); - } -} - diff --git a/msa/js-executor/queue/rabbitmqTemplate.ts b/msa/js-executor/queue/rabbitmqTemplate.ts deleted file mode 100644 index 9219afedc9..0000000000 --- a/msa/js-executor/queue/rabbitmqTemplate.ts +++ /dev/null @@ -1,128 +0,0 @@ -/// -/// Copyright © 2016-2024 The Thingsboard Authors -/// -/// Licensed under the Apache License, Version 2.0 (the "License"); -/// you may not use this file except in compliance with the License. -/// You may obtain a copy of the License at -/// -/// http://www.apache.org/licenses/LICENSE-2.0 -/// -/// Unless required by applicable law or agreed to in writing, software -/// distributed under the License is distributed on an "AS IS" BASIS, -/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -/// See the License for the specific language governing permissions and -/// limitations under the License. -/// - -import config from 'config'; -import { _logger } from '../config/logger'; -import { JsInvokeMessageProcessor } from '../api/jsInvokeMessageProcessor' -import { IQueue } from './queue.models'; -import amqp, { ConfirmChannel, Connection } from 'amqplib'; -import { Options, Replies } from 'amqplib/properties'; - -export class RabbitMqTemplate implements IQueue { - - private logger = _logger(`rabbitmqTemplate`); - private queuePrefix: string = config.get('queue_prefix'); - private requestTopic: string = this.queuePrefix ? this.queuePrefix + "." + config.get('request_topic') : config.get('request_topic'); - private host = config.get('rabbitmq.host'); - private port = config.get('rabbitmq.port'); - private vhost = config.get('rabbitmq.virtual_host'); - private username = config.get('rabbitmq.username'); - private password = config.get('rabbitmq.password'); - private queueProperties: string = config.get('rabbitmq.queue_properties'); - - private queueOptions: Options.AssertQueue = { - durable: false, - exclusive: false, - autoDelete: false - }; - private connection: Connection; - private channel: ConfirmChannel; - private topics: string[] = []; - - name = 'RabbitMQ'; - - constructor() { - } - - async init(): Promise { - const url = `amqp://${this.username}:${this.password}@${this.host}:${this.port}${this.vhost}`; - this.connection = await amqp.connect(url); - this.channel = await this.connection.createConfirmChannel(); - - this.parseQueueProperties(); - - await this.createQueue(this.requestTopic); - - const messageProcessor = new JsInvokeMessageProcessor(this); - - await this.channel.consume(this.requestTopic, (message) => { - if (message) { - messageProcessor.onJsInvokeMessage(JSON.parse(message.content.toString('utf8'))); - this.channel.ack(message); - } - }) - } - - async send(responseTopic: string, msgKey: string, rawResponse: Buffer, headers: any): Promise { - - if (!this.topics.includes(responseTopic)) { - await this.createQueue(responseTopic); - this.topics.push(responseTopic); - } - - let data = JSON.stringify( - { - key: msgKey, - data: [...rawResponse], - headers: headers - }); - let dataBuffer = Buffer.from(data); - this.channel.sendToQueue(responseTopic, dataBuffer); - return this.channel.waitForConfirms() - } - - private parseQueueProperties() { - let args: { [n: string]: number } = {}; - const props = this.queueProperties.split(';'); - props.forEach(p => { - const delimiterPosition = p.indexOf(':'); - args[p.substring(0, delimiterPosition)] = Number(p.substring(delimiterPosition + 1)); - }); - this.queueOptions['arguments'] = args; - } - - private async createQueue(topic: string): Promise { - return this.channel.assertQueue(topic, this.queueOptions); - } - - async destroy() { - this.logger.info('Stopping RabbitMQ resources...'); - - if (this.channel) { - this.logger.info('Stopping RabbitMQ chanel...'); - const _channel = this.channel; - // @ts-ignore - delete this.channel; - await _channel.close(); - this.logger.info('RabbitMQ chanel stopped'); - } - - if (this.connection) { - this.logger.info('Stopping RabbitMQ connection...') - try { - const _connection = this.connection; - // @ts-ignore - delete this.connection; - await _connection.close(); - this.logger.info('RabbitMQ client connection.'); - } catch (e) { - this.logger.info('RabbitMQ connection stop error.'); - } - } - this.logger.info('RabbitMQ resources stopped.') - } - -} diff --git a/msa/js-executor/queue/serviceBusTemplate.ts b/msa/js-executor/queue/serviceBusTemplate.ts deleted file mode 100644 index 2a9c1d843e..0000000000 --- a/msa/js-executor/queue/serviceBusTemplate.ts +++ /dev/null @@ -1,175 +0,0 @@ -/// -/// Copyright © 2016-2024 The Thingsboard Authors -/// -/// Licensed under the Apache License, Version 2.0 (the "License"); -/// you may not use this file except in compliance with the License. -/// You may obtain a copy of the License at -/// -/// http://www.apache.org/licenses/LICENSE-2.0 -/// -/// Unless required by applicable law or agreed to in writing, software -/// distributed under the License is distributed on an "AS IS" BASIS, -/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -/// See the License for the specific language governing permissions and -/// limitations under the License. -/// - -import config from 'config'; -import { _logger } from '../config/logger'; -import { JsInvokeMessageProcessor } from '../api/jsInvokeMessageProcessor' -import { IQueue } from './queue.models'; -import { - CreateQueueOptions, - ProcessErrorArgs, - ServiceBusAdministrationClient, - ServiceBusClient, - ServiceBusReceivedMessage, - ServiceBusReceiver, - ServiceBusSender -} from '@azure/service-bus'; - -export class ServiceBusTemplate implements IQueue { - - private logger = _logger(`serviceBusTemplate`); - private queuePrefix: string = config.get('queue_prefix'); - private requestTopic: string = this.queuePrefix ? this.queuePrefix + "." + config.get('request_topic') : config.get('request_topic'); - private namespaceName = config.get('service_bus.namespace_name'); - private sasKeyName = config.get('service_bus.sas_key_name'); - private sasKey = config.get('service_bus.sas_key'); - private queueProperties: string = config.get('service_bus.queue_properties'); - - private sbClient: ServiceBusClient; - private serviceBusService: ServiceBusAdministrationClient; - private queueOptions: CreateQueueOptions = {}; - private queues: string[] = []; - private receiver: ServiceBusReceiver; - private senderMap = new Map(); - - name = 'Azure Service Bus'; - - constructor() { - } - - async init() { - const connectionString = `Endpoint=sb://${this.namespaceName}.servicebus.windows.net/;SharedAccessKeyName=${this.sasKeyName};SharedAccessKey=${this.sasKey}`; - this.sbClient = new ServiceBusClient(connectionString) - this.serviceBusService = new ServiceBusAdministrationClient(connectionString); - - this.parseQueueProperties(); - - const listQueues = this.serviceBusService.listQueues(); - for await (const queue of listQueues) { - this.queues.push(queue.name); - } - - if (!this.queues.includes(this.requestTopic)) { - await this.createQueueIfNotExist(this.requestTopic); - this.queues.push(this.requestTopic); - } - - this.receiver = this.sbClient.createReceiver(this.requestTopic, {receiveMode: 'peekLock'}); - - const messageProcessor = new JsInvokeMessageProcessor(this); - - const messageHandler = async (message: ServiceBusReceivedMessage) => { - if (message) { - messageProcessor.onJsInvokeMessage(message.body); - await this.receiver.completeMessage(message); - } - }; - const errorHandler = async (error: ProcessErrorArgs) => { - this.logger.error('Failed to receive message from queue.', error); - }; - this.receiver.subscribe({processMessage: messageHandler, processError: errorHandler}) - } - - async send(responseTopic: string, msgKey: string, rawResponse: Buffer, headers: any): Promise { - if (!this.queues.includes(this.requestTopic)) { - await this.createQueueIfNotExist(this.requestTopic); - this.queues.push(this.requestTopic); - } - - let customSender = this.senderMap.get(responseTopic); - - if (!customSender) { - customSender = this.sbClient.createSender(responseTopic); - this.senderMap.set(responseTopic, customSender); - } - - let data = { - key: msgKey, - data: [...rawResponse], - headers: headers - }; - - return customSender.sendMessages({body: data}); - } - - private parseQueueProperties() { - let properties: { [n: string]: string } = {}; - const props = this.queueProperties.split(';'); - props.forEach(p => { - const delimiterPosition = p.indexOf(':'); - properties[p.substring(0, delimiterPosition)] = p.substring(delimiterPosition + 1); - }); - this.queueOptions = { - requiresDuplicateDetection: false, - maxSizeInMegabytes: Number(properties['maxSizeInMb']), - defaultMessageTimeToLive: `PT${properties['messageTimeToLiveInSec']}S`, - lockDuration: `PT${properties['lockDurationInSec']}S` - }; - } - - private async createQueueIfNotExist(topic: string) { - try { - await this.serviceBusService.createQueue(topic, this.queueOptions) - } catch (err: any) { - if (err && err.code !== "MessageEntityAlreadyExistsError") { - throw new Error(err); - } - } - } - - async destroy() { - this.logger.info('Stopping Azure Service Bus resources...') - if (this.receiver) { - this.logger.info('Stopping Service Bus Receiver...'); - try { - const _receiver = this.receiver; - // @ts-ignore - delete this.receiver; - await _receiver.close(); - this.logger.info('Service Bus Receiver stopped.'); - } catch (e) { - this.logger.info('Service Bus Receiver stop error.'); - } - } - - this.logger.info('Stopping Service Bus Senders...'); - const senders: Promise[] = []; - this.senderMap.forEach((sender) => { - senders.push(sender.close()); - }); - this.senderMap.clear(); - try { - await Promise.all(senders); - this.logger.info('Service Bus Senders stopped.'); - } catch (e) { - this.logger.info('Service Bus Senders stop error.'); - } - - if (this.sbClient) { - this.logger.info('Stopping Service Bus Client...'); - try { - const _sbClient = this.sbClient; - // @ts-ignore - delete this.sbClient; - await _sbClient.close(); - this.logger.info('Service Bus Client stopped.'); - } catch (e) { - this.logger.info('Service Bus Client stop error.'); - } - } - this.logger.info('Azure Service Bus resources stopped.') - } -} diff --git a/msa/js-executor/server.ts b/msa/js-executor/server.ts index 5bd1f59692..50d326d1e8 100644 --- a/msa/js-executor/server.ts +++ b/msa/js-executor/server.ts @@ -19,10 +19,6 @@ import { _logger } from './config/logger'; import { HttpServer } from './api/httpServer'; import { IQueue } from './queue/queue.models'; import { KafkaTemplate } from './queue/kafkaTemplate'; -import { PubSubTemplate } from './queue/pubSubTemplate'; -import { AwsSqsTemplate } from './queue/awsSqsTemplate'; -import { RabbitMqTemplate } from './queue/rabbitmqTemplate'; -import { ServiceBusTemplate } from './queue/serviceBusTemplate'; const logger = _logger('main'); @@ -55,14 +51,6 @@ async function createQueue(serviceType: string): Promise { switch (serviceType) { case 'kafka': return new KafkaTemplate(); - case 'pubsub': - return new PubSubTemplate(); - case 'aws-sqs': - return new AwsSqsTemplate(); - case 'rabbitmq': - return new RabbitMqTemplate(); - case 'service-bus': - return new ServiceBusTemplate(); default: throw new Error('Unknown service type: ' + serviceType); } diff --git a/msa/js-executor/yarn.lock b/msa/js-executor/yarn.lock index 662703f9be..7008959b89 100644 --- a/msa/js-executor/yarn.lock +++ b/msa/js-executor/yarn.lock @@ -2,604 +2,6 @@ # yarn lockfile v1 -"@acuminous/bitsyntax@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@acuminous/bitsyntax/-/bitsyntax-0.1.2.tgz#e0b31b9ee7ad1e4dd840c34864327c33d9f1f653" - integrity sha512-29lUK80d1muEQqiUsSo+3A0yP6CdspgC95EnKBMi22Xlwt79i/En4Vr67+cXhU+cZjbti3TgGGC5wy1stIywVQ== - dependencies: - buffer-more-ints "~1.0.0" - debug "^4.3.4" - safe-buffer "~5.1.2" - -"@aws-crypto/sha256-browser@5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e" - integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== - dependencies: - "@aws-crypto/sha256-js" "^5.2.0" - "@aws-crypto/supports-web-crypto" "^5.2.0" - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042" - integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== - dependencies: - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - tslib "^2.6.2" - -"@aws-crypto/supports-web-crypto@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb" - integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== - dependencies: - tslib "^2.6.2" - -"@aws-crypto/util@^5.2.0": - version "5.2.0" - resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da" - integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sqs@^3.682.0": - version "3.682.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sqs/-/client-sqs-3.682.0.tgz#5b714033a36f9934b627ff1891c3aba78624848a" - integrity sha512-93r0i2VwiHiZkcXfWVoxMpyw91Ou0C6gyS7AzPHoZ9ZoXV1VaBFqQ/FmcLzzNa9pwjE6k/Pn7VJMNKBezE8EmQ== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.682.0" - "@aws-sdk/client-sts" "3.682.0" - "@aws-sdk/core" "3.679.0" - "@aws-sdk/credential-provider-node" "3.682.0" - "@aws-sdk/middleware-host-header" "3.679.0" - "@aws-sdk/middleware-logger" "3.679.0" - "@aws-sdk/middleware-recursion-detection" "3.679.0" - "@aws-sdk/middleware-sdk-sqs" "3.679.0" - "@aws-sdk/middleware-user-agent" "3.682.0" - "@aws-sdk/region-config-resolver" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@aws-sdk/util-endpoints" "3.679.0" - "@aws-sdk/util-user-agent-browser" "3.679.0" - "@aws-sdk/util-user-agent-node" "3.682.0" - "@smithy/config-resolver" "^3.0.9" - "@smithy/core" "^2.4.8" - "@smithy/fetch-http-handler" "^3.2.9" - "@smithy/hash-node" "^3.0.7" - "@smithy/invalid-dependency" "^3.0.7" - "@smithy/md5-js" "^3.0.7" - "@smithy/middleware-content-length" "^3.0.9" - "@smithy/middleware-endpoint" "^3.1.4" - "@smithy/middleware-retry" "^3.0.23" - "@smithy/middleware-serde" "^3.0.7" - "@smithy/middleware-stack" "^3.0.7" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/node-http-handler" "^3.2.4" - "@smithy/protocol-http" "^4.1.4" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/url-parser" "^3.0.7" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.23" - "@smithy/util-defaults-mode-node" "^3.0.23" - "@smithy/util-endpoints" "^2.1.3" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-retry" "^3.0.7" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso-oidc@3.682.0": - version "3.682.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.682.0.tgz#423d6b3179fe560a515e3b286689414590f3263b" - integrity sha512-ZPZ7Y/r/w3nx/xpPzGSqSQsB090Xk5aZZOH+WBhTDn/pBEuim09BYXCLzvvxb7R7NnuoQdrTJiwimdJAhHl7ZQ== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.679.0" - "@aws-sdk/credential-provider-node" "3.682.0" - "@aws-sdk/middleware-host-header" "3.679.0" - "@aws-sdk/middleware-logger" "3.679.0" - "@aws-sdk/middleware-recursion-detection" "3.679.0" - "@aws-sdk/middleware-user-agent" "3.682.0" - "@aws-sdk/region-config-resolver" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@aws-sdk/util-endpoints" "3.679.0" - "@aws-sdk/util-user-agent-browser" "3.679.0" - "@aws-sdk/util-user-agent-node" "3.682.0" - "@smithy/config-resolver" "^3.0.9" - "@smithy/core" "^2.4.8" - "@smithy/fetch-http-handler" "^3.2.9" - "@smithy/hash-node" "^3.0.7" - "@smithy/invalid-dependency" "^3.0.7" - "@smithy/middleware-content-length" "^3.0.9" - "@smithy/middleware-endpoint" "^3.1.4" - "@smithy/middleware-retry" "^3.0.23" - "@smithy/middleware-serde" "^3.0.7" - "@smithy/middleware-stack" "^3.0.7" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/node-http-handler" "^3.2.4" - "@smithy/protocol-http" "^4.1.4" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/url-parser" "^3.0.7" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.23" - "@smithy/util-defaults-mode-node" "^3.0.23" - "@smithy/util-endpoints" "^2.1.3" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-retry" "^3.0.7" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sso@3.682.0": - version "3.682.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.682.0.tgz#7533f677456d5f79cfcceed44a3481bcd86b560e" - integrity sha512-PYH9RFUMYLFl66HSBq4tIx6fHViMLkhJHTYJoJONpBs+Td+NwVJ895AdLtDsBIhMS0YseCbPpuyjUCJgsUrwUw== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.679.0" - "@aws-sdk/middleware-host-header" "3.679.0" - "@aws-sdk/middleware-logger" "3.679.0" - "@aws-sdk/middleware-recursion-detection" "3.679.0" - "@aws-sdk/middleware-user-agent" "3.682.0" - "@aws-sdk/region-config-resolver" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@aws-sdk/util-endpoints" "3.679.0" - "@aws-sdk/util-user-agent-browser" "3.679.0" - "@aws-sdk/util-user-agent-node" "3.682.0" - "@smithy/config-resolver" "^3.0.9" - "@smithy/core" "^2.4.8" - "@smithy/fetch-http-handler" "^3.2.9" - "@smithy/hash-node" "^3.0.7" - "@smithy/invalid-dependency" "^3.0.7" - "@smithy/middleware-content-length" "^3.0.9" - "@smithy/middleware-endpoint" "^3.1.4" - "@smithy/middleware-retry" "^3.0.23" - "@smithy/middleware-serde" "^3.0.7" - "@smithy/middleware-stack" "^3.0.7" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/node-http-handler" "^3.2.4" - "@smithy/protocol-http" "^4.1.4" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/url-parser" "^3.0.7" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.23" - "@smithy/util-defaults-mode-node" "^3.0.23" - "@smithy/util-endpoints" "^2.1.3" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-retry" "^3.0.7" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-sts@3.682.0": - version "3.682.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/client-sts/-/client-sts-3.682.0.tgz#97ff70ca141aa6ef48a22f14ef9727bd6ae17b03" - integrity sha512-xKuo4HksZ+F8m9DOfx/ZuWNhaPuqZFPwwy0xqcBT6sWH7OAuBjv/fnpOTzyQhpVTWddlf+ECtMAMrxjxuOExGQ== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/client-sso-oidc" "3.682.0" - "@aws-sdk/core" "3.679.0" - "@aws-sdk/credential-provider-node" "3.682.0" - "@aws-sdk/middleware-host-header" "3.679.0" - "@aws-sdk/middleware-logger" "3.679.0" - "@aws-sdk/middleware-recursion-detection" "3.679.0" - "@aws-sdk/middleware-user-agent" "3.682.0" - "@aws-sdk/region-config-resolver" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@aws-sdk/util-endpoints" "3.679.0" - "@aws-sdk/util-user-agent-browser" "3.679.0" - "@aws-sdk/util-user-agent-node" "3.682.0" - "@smithy/config-resolver" "^3.0.9" - "@smithy/core" "^2.4.8" - "@smithy/fetch-http-handler" "^3.2.9" - "@smithy/hash-node" "^3.0.7" - "@smithy/invalid-dependency" "^3.0.7" - "@smithy/middleware-content-length" "^3.0.9" - "@smithy/middleware-endpoint" "^3.1.4" - "@smithy/middleware-retry" "^3.0.23" - "@smithy/middleware-serde" "^3.0.7" - "@smithy/middleware-stack" "^3.0.7" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/node-http-handler" "^3.2.4" - "@smithy/protocol-http" "^4.1.4" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/url-parser" "^3.0.7" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-body-length-node" "^3.0.0" - "@smithy/util-defaults-mode-browser" "^3.0.23" - "@smithy/util-defaults-mode-node" "^3.0.23" - "@smithy/util-endpoints" "^2.1.3" - "@smithy/util-middleware" "^3.0.7" - "@smithy/util-retry" "^3.0.7" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.679.0.tgz#102aa1d19db5bdcabefc2dcd044f2fb5d0771568" - integrity sha512-CS6PWGX8l4v/xyvX8RtXnBisdCa5+URzKd0L6GvHChype9qKUVxO/Gg6N/y43Hvg7MNWJt9FBPNWIxUB+byJwg== - dependencies: - "@aws-sdk/types" "3.679.0" - "@smithy/core" "^2.4.8" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/property-provider" "^3.1.7" - "@smithy/protocol-http" "^4.1.4" - "@smithy/signature-v4" "^4.2.0" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/util-middleware" "^3.0.7" - fast-xml-parser "4.4.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.679.0.tgz#abf297714b77197a9da0d3d95a0f5687ae28e5b3" - integrity sha512-EdlTYbzMm3G7VUNAMxr9S1nC1qUNqhKlAxFU8E7cKsAe8Bp29CD5HAs3POc56AVo9GC4yRIS+/mtlZSmrckzUA== - dependencies: - "@aws-sdk/core" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@smithy/property-provider" "^3.1.7" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.679.0.tgz#9fc29f4ec7ab52ecf394288c05295823e818d812" - integrity sha512-ZoKLubW5DqqV1/2a3TSn+9sSKg0T8SsYMt1JeirnuLJF0mCoYFUaWMyvxxKuxPoqvUsaycxKru4GkpJ10ltNBw== - dependencies: - "@aws-sdk/core" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@smithy/fetch-http-handler" "^3.2.9" - "@smithy/node-http-handler" "^3.2.4" - "@smithy/property-provider" "^3.1.7" - "@smithy/protocol-http" "^4.1.4" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/util-stream" "^3.1.9" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.682.0": - version "3.682.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.682.0.tgz#36a68cd8d0ec3b14acf413166dce72a201fcc2bd" - integrity sha512-6eqWeHdK6EegAxqDdiCi215nT3QZPwukgWAYuVxNfJ/5m0/P7fAzF+D5kKVgByUvGJEbq/FEL8Fw7OBe64AA+g== - dependencies: - "@aws-sdk/core" "3.679.0" - "@aws-sdk/credential-provider-env" "3.679.0" - "@aws-sdk/credential-provider-http" "3.679.0" - "@aws-sdk/credential-provider-process" "3.679.0" - "@aws-sdk/credential-provider-sso" "3.682.0" - "@aws-sdk/credential-provider-web-identity" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@smithy/credential-provider-imds" "^3.2.4" - "@smithy/property-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.682.0": - version "3.682.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.682.0.tgz#4ec1ebd00dcacb46ae76747b23ebf7bda04808bd" - integrity sha512-HSmDqZcBVZrTctHCT9m++vdlDfJ1ARI218qmZa+TZzzOFNpKWy6QyHMEra45GB9GnkkMmV6unoDSPMuN0AqcMg== - dependencies: - "@aws-sdk/credential-provider-env" "3.679.0" - "@aws-sdk/credential-provider-http" "3.679.0" - "@aws-sdk/credential-provider-ini" "3.682.0" - "@aws-sdk/credential-provider-process" "3.679.0" - "@aws-sdk/credential-provider-sso" "3.682.0" - "@aws-sdk/credential-provider-web-identity" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@smithy/credential-provider-imds" "^3.2.4" - "@smithy/property-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.679.0.tgz#a06b5193cdad2c14382708bcd44d487af52b11dc" - integrity sha512-u/p4TV8kQ0zJWDdZD4+vdQFTMhkDEJFws040Gm113VHa/Xo1SYOjbpvqeuFoz6VmM0bLvoOWjxB9MxnSQbwKpQ== - dependencies: - "@aws-sdk/core" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@smithy/property-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.682.0": - version "3.682.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.682.0.tgz#aa7e3ffdac82bfc14fc0cf136cec3152f863a63a" - integrity sha512-h7IH1VsWgV6YAJSWWV6y8uaRjGqLY3iBpGZlXuTH/c236NMLaNv+WqCBLeBxkFGUb2WeQ+FUPEJDCD69rgLIkg== - dependencies: - "@aws-sdk/client-sso" "3.682.0" - "@aws-sdk/core" "3.679.0" - "@aws-sdk/token-providers" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@smithy/property-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.679.0.tgz#5871c44e5846e7c93810fd033224c00493db65a3" - integrity sha512-a74tLccVznXCaBefWPSysUcLXYJiSkeUmQGtalNgJ1vGkE36W5l/8czFiiowdWdKWz7+x6xf0w+Kjkjlj42Ung== - dependencies: - "@aws-sdk/core" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@smithy/property-provider" "^3.1.7" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.679.0.tgz#1eabe42250c57a9e28742dd04786781573faad1a" - integrity sha512-y176HuQ8JRY3hGX8rQzHDSbCl9P5Ny9l16z4xmaiLo+Qfte7ee4Yr3yaAKd7GFoJ3/Mhud2XZ37fR015MfYl2w== - dependencies: - "@aws-sdk/types" "3.679.0" - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.679.0.tgz#cb0f205ddb5341d8327fc9ca1897bf06526c1896" - integrity sha512-0vet8InEj7nvIvGKk+ch7bEF5SyZ7Us9U7YTEgXPrBNStKeRUsgwRm0ijPWWd0a3oz2okaEwXsFl7G/vI0XiEA== - dependencies: - "@aws-sdk/types" "3.679.0" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.679.0.tgz#3542de5baa466abffbfe5ee485fd87f60d5f917e" - integrity sha512-sQoAZFsQiW/LL3DfKMYwBoGjYDEnMbA9WslWN8xneCmBAwKo6IcSksvYs23PP8XMIoBGe2I2J9BSr654XWygTQ== - dependencies: - "@aws-sdk/types" "3.679.0" - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-sqs@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-sqs/-/middleware-sdk-sqs-3.679.0.tgz#d2ccda366b3808081d331b1f2410797cd621431a" - integrity sha512-GjOpT9GRMH6n3Rm9ZsRsrIbLxBPE3/L1KMkIn2uZj14uqz1pdE4ALCN9b9ZkPN+L//rsUrYqtd9gq9Hn9c2FJw== - dependencies: - "@aws-sdk/types" "3.679.0" - "@smithy/smithy-client" "^3.4.0" - "@smithy/types" "^3.5.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.682.0": - version "3.682.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.682.0.tgz#07d75723bce31e65a29ad0934347537e50e3536e" - integrity sha512-7TyvYR9HdGH1/Nq0eeApUTM4izB6rExiw87khVYuJwZHr6FmvIL1FsOVFro/4WlXa0lg4LiYOm/8H8dHv+fXTg== - dependencies: - "@aws-sdk/core" "3.679.0" - "@aws-sdk/types" "3.679.0" - "@aws-sdk/util-endpoints" "3.679.0" - "@smithy/core" "^2.4.8" - "@smithy/protocol-http" "^4.1.4" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.679.0.tgz#d205dbaea8385aaf05e637fb7cb095c60bc708be" - integrity sha512-Ybx54P8Tg6KKq5ck7uwdjiKif7n/8g1x+V0V9uTjBjRWqaIgiqzXwKWoPj6NCNkE7tJNtqI4JrNxp/3S3HvmRw== - dependencies: - "@aws-sdk/types" "3.679.0" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/types" "^3.5.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.7" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.679.0.tgz#7ec462d93941dd3cfdc245104ad32971f6ebc4f6" - integrity sha512-1/+Zso/x2jqgutKixYFQEGli0FELTgah6bm7aB+m2FAWH4Hz7+iMUsazg6nSWm714sG9G3h5u42Dmpvi9X6/hA== - dependencies: - "@aws-sdk/types" "3.679.0" - "@smithy/property-provider" "^3.1.7" - "@smithy/shared-ini-file-loader" "^3.1.8" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/types@3.679.0", "@aws-sdk/types@^3.222.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.679.0.tgz#3737bb0f190add9e788b838a24cd5d8106dbed4f" - integrity sha512-NwVq8YvInxQdJ47+zz4fH3BRRLC6lL+WLkvr242PVBbUOLRyK/lkwHlfiKUoeVIMyK5NF+up6TRg71t/8Bny6Q== - dependencies: - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@aws-sdk/util-endpoints@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.679.0.tgz#b249ad8b4289e634cb5dfb3873a70b7aecbf323f" - integrity sha512-YL6s4Y/1zC45OvddvgE139fjeWSKKPgLlnfrvhVL7alNyY9n7beR4uhoDpNrt5mI6sn9qiBF17790o+xLAXjjg== - dependencies: - "@aws-sdk/types" "3.679.0" - "@smithy/types" "^3.5.0" - "@smithy/util-endpoints" "^2.1.3" - tslib "^2.6.2" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.679.0.tgz#8d5898624691e12ccbad839e103562002bbec85e" - integrity sha512-zKTd48/ZWrCplkXpYDABI74rQlbR0DNHs8nH95htfSLj9/mWRSwaGptoxwcihaq/77vi/fl2X3y0a1Bo8bt7RA== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-browser@3.679.0": - version "3.679.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.679.0.tgz#bbaa5a8771c8a16388cd3cd934bb84a641ce907d" - integrity sha512-CusSm2bTBG1kFypcsqU8COhnYc6zltobsqs3nRrvYqYaOqtMnuE46K4XTWpnzKgwDejgZGOE+WYyprtAxrPvmQ== - dependencies: - "@aws-sdk/types" "3.679.0" - "@smithy/types" "^3.5.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.682.0": - version "3.682.0" - resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.682.0.tgz#a493d2afb160c5cd4ab0520f929e9b7a2b36f74e" - integrity sha512-so5s+j0gPoTS0HM4HPL+G0ajk0T6cQAg8JXzRgvyiQAxqie+zGCZAV3VuVeMNWMVbzsgZl0pYZaatPFTLG/AxA== - dependencies: - "@aws-sdk/middleware-user-agent" "3.682.0" - "@aws-sdk/types" "3.679.0" - "@smithy/node-config-provider" "^3.1.8" - "@smithy/types" "^3.5.0" - tslib "^2.6.2" - -"@azure/abort-controller@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.1.0.tgz#788ee78457a55af8a1ad342acb182383d2119249" - integrity sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw== - dependencies: - tslib "^2.2.0" - -"@azure/abort-controller@^2.0.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d" - integrity sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA== - dependencies: - tslib "^2.6.2" - -"@azure/core-amqp@^4.1.1": - version "4.3.2" - resolved "https://registry.yarnpkg.com/@azure/core-amqp/-/core-amqp-4.3.2.tgz#689ea6c363c09a4298a10226b3794f456e3460a1" - integrity sha512-I8sI81E0o38zYjdXcM8cnnvveM6X3f90zqi51zSuD+ZX96P6ZsW8jEXpd/1E7aEUG+MuFGnsEx0iPPS53Lpfnw== - dependencies: - "@azure/abort-controller" "^2.0.0" - "@azure/core-auth" "^1.7.2" - "@azure/core-util" "^1.9.0" - "@azure/logger" "^1.1.2" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - rhea "^3.0.0" - rhea-promise "^3.0.0" - tslib "^2.6.2" - -"@azure/core-auth@^1.3.0", "@azure/core-auth@^1.4.0", "@azure/core-auth@^1.7.2", "@azure/core-auth@^1.8.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.9.0.tgz#ac725b03fabe3c892371065ee9e2041bee0fd1ac" - integrity sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw== - dependencies: - "@azure/abort-controller" "^2.0.0" - "@azure/core-util" "^1.11.0" - tslib "^2.6.2" - -"@azure/core-client@^1.0.0": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.9.2.tgz#6fc69cee2816883ab6c5cdd653ee4f2ff9774f74" - integrity sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w== - dependencies: - "@azure/abort-controller" "^2.0.0" - "@azure/core-auth" "^1.4.0" - "@azure/core-rest-pipeline" "^1.9.1" - "@azure/core-tracing" "^1.0.0" - "@azure/core-util" "^1.6.1" - "@azure/logger" "^1.0.0" - tslib "^2.6.2" - -"@azure/core-paging@^1.4.0": - version "1.6.2" - resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.6.2.tgz#40d3860dc2df7f291d66350b2cfd9171526433e7" - integrity sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA== - dependencies: - tslib "^2.6.2" - -"@azure/core-rest-pipeline@^1.1.0", "@azure/core-rest-pipeline@^1.9.1": - version "1.17.0" - resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.17.0.tgz#55dafa1093553c549ed6d8dbca69aa505c7b3aa3" - integrity sha512-62Vv8nC+uPId3j86XJ0WI+sBf0jlqTqPUFCBNrGtlaUeQUIXWV/D8GE5A1d+Qx8H7OQojn2WguC8kChD6v0shA== - dependencies: - "@azure/abort-controller" "^2.0.0" - "@azure/core-auth" "^1.8.0" - "@azure/core-tracing" "^1.0.1" - "@azure/core-util" "^1.9.0" - "@azure/logger" "^1.0.0" - http-proxy-agent "^7.0.0" - https-proxy-agent "^7.0.0" - tslib "^2.6.2" - -"@azure/core-tracing@^1.0.0", "@azure/core-tracing@^1.0.1": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.2.0.tgz#7be5d53c3522d639cf19042cbcdb19f71bc35ab2" - integrity sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg== - dependencies: - tslib "^2.6.2" - -"@azure/core-util@^1.1.1", "@azure/core-util@^1.11.0", "@azure/core-util@^1.6.1", "@azure/core-util@^1.9.0": - version "1.11.0" - resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.11.0.tgz#f530fc67e738aea872fbdd1cc8416e70219fada7" - integrity sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g== - dependencies: - "@azure/abort-controller" "^2.0.0" - tslib "^2.6.2" - -"@azure/core-xml@^1.0.0": - version "1.4.4" - resolved "https://registry.yarnpkg.com/@azure/core-xml/-/core-xml-1.4.4.tgz#a8656751943bf492762f758d147d33dfcd933d9e" - integrity sha512-J4FYAqakGXcbfeZjwjMzjNcpcH4E+JtEBv+xcV1yL0Ydn/6wbQfeFKTCHh9wttAi0lmajHw7yBbHPRG+YHckZQ== - dependencies: - fast-xml-parser "^4.4.1" - tslib "^2.6.2" - -"@azure/logger@^1.0.0", "@azure/logger@^1.1.2": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.4.tgz#223cbf2b424dfa66478ce9a4f575f59c6f379768" - integrity sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ== - dependencies: - tslib "^2.6.2" - -"@azure/service-bus@^7.9.5": - version "7.9.5" - resolved "https://registry.yarnpkg.com/@azure/service-bus/-/service-bus-7.9.5.tgz#ad5a6f3caf9e3269c5e838d7b15ecd030e2d8d33" - integrity sha512-R5Af+4jtZZII2snLomaddMyElFtTCBRZp2qERPlP8PuISLU87eFYFM7xWzxjNd0yeiyQUBkamx/ZhOC8eWhCHA== - dependencies: - "@azure/abort-controller" "^1.0.0" - "@azure/core-amqp" "^4.1.1" - "@azure/core-auth" "^1.3.0" - "@azure/core-client" "^1.0.0" - "@azure/core-paging" "^1.4.0" - "@azure/core-rest-pipeline" "^1.1.0" - "@azure/core-tracing" "^1.0.0" - "@azure/core-util" "^1.1.1" - "@azure/core-xml" "^1.0.0" - "@azure/logger" "^1.0.0" - "@types/is-buffer" "^2.0.0" - buffer "^6.0.0" - is-buffer "^2.0.3" - jssha "^3.1.0" - long "^5.2.0" - process "^0.11.10" - rhea-promise "^3.0.0" - tslib "^2.2.0" - "@babel/generator@7.18.2": version "7.18.2" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" @@ -662,67 +64,6 @@ enabled "2.0.x" kuler "^2.0.0" -"@google-cloud/paginator@^5.0.0": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@google-cloud/paginator/-/paginator-5.0.2.tgz#86ad773266ce9f3b82955a8f75e22cd012ccc889" - integrity sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg== - dependencies: - arrify "^2.0.0" - extend "^3.0.2" - -"@google-cloud/precise-date@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@google-cloud/precise-date/-/precise-date-4.0.0.tgz#e179893a3ad628b17a6fabdfcc9d468753aac11a" - integrity sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA== - -"@google-cloud/projectify@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@google-cloud/projectify/-/projectify-4.0.0.tgz#d600e0433daf51b88c1fa95ac7f02e38e80a07be" - integrity sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA== - -"@google-cloud/promisify@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@google-cloud/promisify/-/promisify-4.0.0.tgz#a906e533ebdd0f754dca2509933334ce58b8c8b1" - integrity sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g== - -"@google-cloud/pubsub@^4.8.0": - version "4.8.0" - resolved "https://registry.yarnpkg.com/@google-cloud/pubsub/-/pubsub-4.8.0.tgz#b51acb0c75c6975deeaa7a68d0b56a5d736bb048" - integrity sha512-H9S4i5mAeQg5A4MZox8XfWnoxlMehlIn8QHWZ3iOj7Kz/yaHufsI5JtSGaezjZv+wF4elur5Yycygnl6pWHSyg== - dependencies: - "@google-cloud/paginator" "^5.0.0" - "@google-cloud/precise-date" "^4.0.0" - "@google-cloud/projectify" "^4.0.0" - "@google-cloud/promisify" "^4.0.0" - "@opentelemetry/api" "~1.9.0" - "@opentelemetry/semantic-conventions" "~1.26.0" - arrify "^2.0.0" - extend "^3.0.2" - google-auth-library "^9.3.0" - google-gax "^4.3.3" - heap-js "^2.2.0" - is-stream-ended "^0.1.4" - lodash.snakecase "^4.1.1" - p-defer "^3.0.0" - -"@grpc/grpc-js@^1.10.9": - version "1.12.2" - resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-1.12.2.tgz#97eda82dd49bb9c24eaf6434ea8d7de446e95aac" - integrity sha512-bgxdZmgTrJZX50OjyVwz3+mNEnCTNkh3cIqGPWVNeW9jX6bn1ZkU80uPd+67/ZpIJIjRQ9qaHCjhavyoWYxumg== - dependencies: - "@grpc/proto-loader" "^0.7.13" - "@js-sdsl/ordered-map" "^4.4.2" - -"@grpc/proto-loader@^0.7.13": - version "0.7.13" - resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.7.13.tgz#f6a44b2b7c9f7b609f5748c6eac2d420e37670cf" - integrity sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw== - dependencies: - lodash.camelcase "^4.3.0" - long "^5.0.0" - protobufjs "^7.2.5" - yargs "^17.7.2" - "@jridgewell/gen-mapping@^0.3.0": version "0.3.5" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" @@ -763,11 +104,6 @@ "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" -"@js-sdsl/ordered-map@^4.4.2": - version "4.4.2" - resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c" - integrity sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -789,487 +125,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@opentelemetry/api@~1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" - integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== - -"@opentelemetry/semantic-conventions@~1.26.0": - version "1.26.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/semantic-conventions/-/semantic-conventions-1.26.0.tgz#42da14476529ca86d0af4c11f58910f242a0a232" - integrity sha512-U9PJlOswJPSgQVPI+XEuNLElyFWkb0hAiMg+DExD9V0St03X2lPHGMdxMY/LrVmoukuIpXJ12oyrOtEZ4uXFkw== - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@smithy/abort-controller@^3.1.6": - version "3.1.6" - resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-3.1.6.tgz#d9de97b85ca277df6ffb9ee7cd83d5da793ee6de" - integrity sha512-0XuhuHQlEqbNQZp7QxxrFTdVWdwxch4vjxYgfInF91hZFkPxf9QDrdQka0KfxFMPqLNzSw0b95uGTrLliQUavQ== - dependencies: - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/config-resolver@^3.0.10", "@smithy/config-resolver@^3.0.9": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-3.0.10.tgz#d9529d9893e5fae1f14cb1ffd55517feb6d7e50f" - integrity sha512-Uh0Sz9gdUuz538nvkPiyv1DZRX9+D15EKDtnQP5rYVAzM/dnYk3P8cg73jcxyOitPgT3mE3OVj7ky7sibzHWkw== - dependencies: - "@smithy/node-config-provider" "^3.1.9" - "@smithy/types" "^3.6.0" - "@smithy/util-config-provider" "^3.0.0" - "@smithy/util-middleware" "^3.0.8" - tslib "^2.6.2" - -"@smithy/core@^2.4.8", "@smithy/core@^2.5.1": - version "2.5.1" - resolved "https://registry.yarnpkg.com/@smithy/core/-/core-2.5.1.tgz#7f635b76778afca845bcb401d36f22fa37712f15" - integrity sha512-DujtuDA7BGEKExJ05W5OdxCoyekcKT3Rhg1ZGeiUWaz2BJIWXjZmsG/DIP4W48GHno7AQwRsaCb8NcBgH3QZpg== - dependencies: - "@smithy/middleware-serde" "^3.0.8" - "@smithy/protocol-http" "^4.1.5" - "@smithy/types" "^3.6.0" - "@smithy/util-body-length-browser" "^3.0.0" - "@smithy/util-middleware" "^3.0.8" - "@smithy/util-stream" "^3.2.1" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^3.2.4", "@smithy/credential-provider-imds@^3.2.5": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.5.tgz#dbfd849a4a7ebd68519cd9fc35f78d091e126d0a" - integrity sha512-4FTQGAsuwqTzVMmiRVTn0RR9GrbRfkP0wfu/tXWVHd2LgNpTY0uglQpIScXK4NaEyXbB3JmZt8gfVqO50lP8wg== - dependencies: - "@smithy/node-config-provider" "^3.1.9" - "@smithy/property-provider" "^3.1.8" - "@smithy/types" "^3.6.0" - "@smithy/url-parser" "^3.0.8" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^3.2.9": - version "3.2.9" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz#8d5199c162a37caa37a8b6848eefa9ca58221a0b" - integrity sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A== - dependencies: - "@smithy/protocol-http" "^4.1.4" - "@smithy/querystring-builder" "^3.0.7" - "@smithy/types" "^3.5.0" - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-4.0.0.tgz#3763cb5178745ed630ed5bc3beb6328abdc31f36" - integrity sha512-MLb1f5tbBO2X6K4lMEKJvxeLooyg7guq48C2zKr4qM7F2Gpkz4dc+hdSgu77pCJ76jVqFBjZczHYAs6dp15N+g== - dependencies: - "@smithy/protocol-http" "^4.1.5" - "@smithy/querystring-builder" "^3.0.8" - "@smithy/types" "^3.6.0" - "@smithy/util-base64" "^3.0.0" - tslib "^2.6.2" - -"@smithy/hash-node@^3.0.7": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-3.0.8.tgz#f451cc342f74830466b0b39bf985dc3022634065" - integrity sha512-tlNQYbfpWXHimHqrvgo14DrMAgUBua/cNoz9fMYcDmYej7MAmUcjav/QKQbFc3NrcPxeJ7QClER4tWZmfwoPng== - dependencies: - "@smithy/types" "^3.6.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^3.0.7": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-3.0.8.tgz#4d381a4c24832371ade79e904a72c173c9851e5f" - integrity sha512-7Qynk6NWtTQhnGTTZwks++nJhQ1O54Mzi7fz4PqZOiYXb4Z1Flpb2yRvdALoggTS8xjtohWUM+RygOtB30YL3Q== - dependencies: - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/is-array-buffer@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111" - integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA== - dependencies: - tslib "^2.6.2" - -"@smithy/is-array-buffer@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz#9a95c2d46b8768946a9eec7f935feaddcffa5e7a" - integrity sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ== - dependencies: - tslib "^2.6.2" - -"@smithy/md5-js@^3.0.7": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/md5-js/-/md5-js-3.0.8.tgz#837e54094007e87bf5196e11eca453d1c1e83a26" - integrity sha512-LwApfTK0OJ/tCyNUXqnWCKoE2b4rDSr4BJlDAVCkiWYeHESr+y+d5zlAanuLW6fnitVJRD/7d9/kN/ZM9Su4mA== - dependencies: - "@smithy/types" "^3.6.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^3.0.9": - version "3.0.10" - resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-3.0.10.tgz#738266f6d81436d7e3a86bea931bc64e04ae7dbf" - integrity sha512-T4dIdCs1d/+/qMpwhJ1DzOhxCZjZHbHazEPJWdB4GDi2HjIZllVzeBEcdJUN0fomV8DURsgOyrbEUzg3vzTaOg== - dependencies: - "@smithy/protocol-http" "^4.1.5" - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^3.1.4", "@smithy/middleware-endpoint@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-3.2.1.tgz#b9ee42d29d8f3a266883d293c4d6a586f7b60979" - integrity sha512-wWO3xYmFm6WRW8VsEJ5oU6h7aosFXfszlz3Dj176pTij6o21oZnzkCLzShfmRaaCHDkBXWBdO0c4sQAvLFP6zA== - dependencies: - "@smithy/core" "^2.5.1" - "@smithy/middleware-serde" "^3.0.8" - "@smithy/node-config-provider" "^3.1.9" - "@smithy/shared-ini-file-loader" "^3.1.9" - "@smithy/types" "^3.6.0" - "@smithy/url-parser" "^3.0.8" - "@smithy/util-middleware" "^3.0.8" - tslib "^2.6.2" - -"@smithy/middleware-retry@^3.0.23": - version "3.0.25" - resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-3.0.25.tgz#a6b1081fc1a0991ffe1d15e567e76198af01f37c" - integrity sha512-m1F70cPaMBML4HiTgCw5I+jFNtjgz5z5UdGnUbG37vw6kh4UvizFYjqJGHvicfgKMkDL6mXwyPp5mhZg02g5sg== - dependencies: - "@smithy/node-config-provider" "^3.1.9" - "@smithy/protocol-http" "^4.1.5" - "@smithy/service-error-classification" "^3.0.8" - "@smithy/smithy-client" "^3.4.2" - "@smithy/types" "^3.6.0" - "@smithy/util-middleware" "^3.0.8" - "@smithy/util-retry" "^3.0.8" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^3.0.7", "@smithy/middleware-serde@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-3.0.8.tgz#a46d10dba3c395be0d28610d55c89ff8c07c0cd3" - integrity sha512-Xg2jK9Wc/1g/MBMP/EUn2DLspN8LNt+GMe7cgF+Ty3vl+Zvu+VeZU5nmhveU+H8pxyTsjrAkci8NqY6OuvZnjA== - dependencies: - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/middleware-stack@^3.0.7", "@smithy/middleware-stack@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-3.0.8.tgz#f1c7d9c7fe8280c6081141c88f4a76875da1fc43" - integrity sha512-d7ZuwvYgp1+3682Nx0MD3D/HtkmZd49N3JUndYWQXfRZrYEnCWYc8BHcNmVsPAp9gKvlurdg/mubE6b/rPS9MA== - dependencies: - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/node-config-provider@^3.1.8", "@smithy/node-config-provider@^3.1.9": - version "3.1.9" - resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-3.1.9.tgz#d27ba8e4753f1941c24ed0af824dbc6c492f510a" - integrity sha512-qRHoah49QJ71eemjuS/WhUXB+mpNtwHRWQr77J/m40ewBVVwvo52kYAmb7iuaECgGTTcYxHS4Wmewfwy++ueew== - dependencies: - "@smithy/property-provider" "^3.1.8" - "@smithy/shared-ini-file-loader" "^3.1.9" - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/node-http-handler@^3.2.4", "@smithy/node-http-handler@^3.2.5": - version "3.2.5" - resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-3.2.5.tgz#ad9d9ba1528bf0d4a655135e978ecc14b3df26a2" - integrity sha512-PkOwPNeKdvX/jCpn0A8n9/TyoxjGZB8WVoJmm9YzsnAgggTj4CrjpRHlTQw7dlLZ320n1mY1y+nTRUDViKi/3w== - dependencies: - "@smithy/abort-controller" "^3.1.6" - "@smithy/protocol-http" "^4.1.5" - "@smithy/querystring-builder" "^3.0.8" - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/property-provider@^3.1.7", "@smithy/property-provider@^3.1.8": - version "3.1.8" - resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-3.1.8.tgz#b1c5a3949effbb9772785ad7ddc5b4b235b10fbe" - integrity sha512-ukNUyo6rHmusG64lmkjFeXemwYuKge1BJ8CtpVKmrxQxc6rhUX0vebcptFA9MmrGsnLhwnnqeH83VTU9hwOpjA== - dependencies: - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/protocol-http@^4.1.4", "@smithy/protocol-http@^4.1.5": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-4.1.5.tgz#a1f397440f299b6a5abeed6866957fecb1bf5013" - integrity sha512-hsjtwpIemmCkm3ZV5fd/T0bPIugW1gJXwZ/hpuVubt2hEUApIoUTrf6qIdh9MAWlw0vjMrA1ztJLAwtNaZogvg== - dependencies: - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/querystring-builder@^3.0.7", "@smithy/querystring-builder@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-3.0.8.tgz#0d845be53aa624771c518d1412881236ce12ed4f" - integrity sha512-btYxGVqFUARbUrN6VhL9c3dnSviIwBYD9Rz1jHuN1hgh28Fpv2xjU1HeCeDJX68xctz7r4l1PBnFhGg1WBBPuA== - dependencies: - "@smithy/types" "^3.6.0" - "@smithy/util-uri-escape" "^3.0.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-3.0.8.tgz#057a8e2d301eea8eac7071923100ba38a824d7df" - integrity sha512-BtEk3FG7Ks64GAbt+JnKqwuobJNX8VmFLBsKIwWr1D60T426fGrV2L3YS5siOcUhhp6/Y6yhBw1PSPxA5p7qGg== - dependencies: - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/service-error-classification@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-3.0.8.tgz#265ad2573b972f6c7bdd1ad6c5155a88aeeea1c4" - integrity sha512-uEC/kCCFto83bz5ZzapcrgGqHOh/0r69sZ2ZuHlgoD5kYgXJEThCoTuw/y1Ub3cE7aaKdznb+jD9xRPIfIwD7g== - dependencies: - "@smithy/types" "^3.6.0" - -"@smithy/shared-ini-file-loader@^3.1.8", "@smithy/shared-ini-file-loader@^3.1.9": - version "3.1.9" - resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.9.tgz#1b77852b5bb176445e1d80333fa3f739313a4928" - integrity sha512-/+OsJRNtoRbtsX0UpSgWVxFZLsJHo/4sTr+kBg/J78sr7iC+tHeOvOJrS5hCpVQ6sWBbhWLp1UNiuMyZhE6pmA== - dependencies: - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/signature-v4@^4.2.0": - version "4.2.1" - resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-4.2.1.tgz#a918fd7d99af9f60aa07617506fa54be408126ee" - integrity sha512-NsV1jF4EvmO5wqmaSzlnTVetemBS3FZHdyc5CExbDljcyJCEEkJr8ANu2JvtNbVg/9MvKAWV44kTrGS+Pi4INg== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - "@smithy/protocol-http" "^4.1.5" - "@smithy/types" "^3.6.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-middleware" "^3.0.8" - "@smithy/util-uri-escape" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^3.4.0", "@smithy/smithy-client@^3.4.2": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-3.4.2.tgz#a6e3ed98330ce170cf482e765bd0c21e0fde8ae4" - integrity sha512-dxw1BDxJiY9/zI3cBqfVrInij6ShjpV4fmGHesGZZUiP9OSE/EVfdwdRz0PgvkEvrZHpsj2htRaHJfftE8giBA== - dependencies: - "@smithy/core" "^2.5.1" - "@smithy/middleware-endpoint" "^3.2.1" - "@smithy/middleware-stack" "^3.0.8" - "@smithy/protocol-http" "^4.1.5" - "@smithy/types" "^3.6.0" - "@smithy/util-stream" "^3.2.1" - tslib "^2.6.2" - -"@smithy/types@^3.5.0", "@smithy/types@^3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@smithy/types/-/types-3.6.0.tgz#03a52bfd62ee4b7b2a1842c8ae3ada7a0a5ff3a4" - integrity sha512-8VXK/KzOHefoC65yRgCn5vG1cysPJjHnOVt9d0ybFQSmJgQj152vMn4EkYhGuaOmnnZvCPav/KnYyE6/KsNZ2w== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^3.0.7", "@smithy/url-parser@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-3.0.8.tgz#8057d91d55ba8df97d74576e000f927b42da9e18" - integrity sha512-4FdOhwpTW7jtSFWm7SpfLGKIBC9ZaTKG5nBF0wK24aoQKQyDIKUw3+KFWCQ9maMzrgTJIuOvOnsV2lLGW5XjTg== - dependencies: - "@smithy/querystring-parser" "^3.0.8" - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/util-base64@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-3.0.0.tgz#f7a9a82adf34e27a72d0719395713edf0e493017" - integrity sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ== - dependencies: - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz#86ec2f6256310b4845a2f064e2f571c1ca164ded" - integrity sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz#99a291bae40d8932166907fe981d6a1f54298a6d" - integrity sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-buffer-from@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b" - integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA== - dependencies: - "@smithy/is-array-buffer" "^2.2.0" - tslib "^2.6.2" - -"@smithy/util-buffer-from@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz#559fc1c86138a89b2edaefc1e6677780c24594e3" - integrity sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA== - dependencies: - "@smithy/is-array-buffer" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-config-provider@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz#62c6b73b22a430e84888a8f8da4b6029dd5b8efe" - integrity sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^3.0.23": - version "3.0.25" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.25.tgz#ef9b84272d1db23503ff155f9075a4543ab6dab7" - integrity sha512-fRw7zymjIDt6XxIsLwfJfYUfbGoO9CmCJk6rjJ/X5cd20+d2Is7xjU5Kt/AiDt6hX8DAf5dztmfP5O82gR9emA== - dependencies: - "@smithy/property-provider" "^3.1.8" - "@smithy/smithy-client" "^3.4.2" - "@smithy/types" "^3.6.0" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^3.0.23": - version "3.0.25" - resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.25.tgz#c16fe3995c8e90ae318e336178392173aebe1e37" - integrity sha512-H3BSZdBDiVZGzt8TG51Pd2FvFO0PAx/A0mJ0EH8a13KJ6iUCdYnw/Dk/MdC1kTd0eUuUGisDFaxXVXo4HHFL1g== - dependencies: - "@smithy/config-resolver" "^3.0.10" - "@smithy/credential-provider-imds" "^3.2.5" - "@smithy/node-config-provider" "^3.1.9" - "@smithy/property-provider" "^3.1.8" - "@smithy/smithy-client" "^3.4.2" - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/util-endpoints@^2.1.3": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-2.1.4.tgz#a29134c2b1982442c5fc3be18d9b22796e8eb964" - integrity sha512-kPt8j4emm7rdMWQyL0F89o92q10gvCUa6sBkBtDJ7nV2+P7wpXczzOfoDJ49CKXe5CCqb8dc1W+ZdLlrKzSAnQ== - dependencies: - "@smithy/node-config-provider" "^3.1.9" - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz#32938b33d5bf2a15796cd3f178a55b4155c535e6" - integrity sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^3.0.7", "@smithy/util-middleware@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-3.0.8.tgz#372bc7a2845408ad69da039d277fc23c2734d0c6" - integrity sha512-p7iYAPaQjoeM+AKABpYWeDdtwQNxasr4aXQEA/OmbOaug9V0odRVDy3Wx4ci8soljE/JXQo+abV0qZpW8NX0yA== - dependencies: - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/util-retry@^3.0.7", "@smithy/util-retry@^3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-3.0.8.tgz#9c607c175a4d8a87b5d8ebaf308f6b849e4dc4d0" - integrity sha512-TCEhLnY581YJ+g1x0hapPz13JFqzmh/pMWL2KEFASC51qCfw3+Y47MrTmea4bUE5vsdxQ4F6/KFbUeSz22Q1ow== - dependencies: - "@smithy/service-error-classification" "^3.0.8" - "@smithy/types" "^3.6.0" - tslib "^2.6.2" - -"@smithy/util-stream@^3.1.9", "@smithy/util-stream@^3.2.1": - version "3.2.1" - resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-3.2.1.tgz#f3055dc4c8caba8af4e47191ea7e773d0e5a429d" - integrity sha512-R3ufuzJRxSJbE58K9AEnL/uSZyVdHzud9wLS8tIbXclxKzoe09CRohj2xV8wpx5tj7ZbiJaKYcutMm1eYgz/0A== - dependencies: - "@smithy/fetch-http-handler" "^4.0.0" - "@smithy/node-http-handler" "^3.2.5" - "@smithy/types" "^3.6.0" - "@smithy/util-base64" "^3.0.0" - "@smithy/util-buffer-from" "^3.0.0" - "@smithy/util-hex-encoding" "^3.0.0" - "@smithy/util-utf8" "^3.0.0" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz#e43358a78bf45d50bb736770077f0f09195b6f54" - integrity sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.0.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5" - integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A== - dependencies: - "@smithy/util-buffer-from" "^2.2.0" - tslib "^2.6.2" - -"@smithy/util-utf8@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-3.0.0.tgz#1a6a823d47cbec1fd6933e5fc87df975286d9d6a" - integrity sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA== - dependencies: - "@smithy/util-buffer-from" "^3.0.0" - tslib "^2.6.2" - -"@tootallnate/once@2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" - integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== - "@tsconfig/node10@^1.0.7": version "1.0.11" resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" @@ -1290,13 +145,6 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/amqplib@^0.10.5": - version "0.10.5" - resolved "https://registry.yarnpkg.com/@types/amqplib/-/amqplib-0.10.5.tgz#fd883eddfbd669702a727fa10007b27c4c1e6ec7" - integrity sha512-/cSykxROY7BWwDoi4Y4/jLAuZTshZxd8Ey1QYa/VaXriMotBDoou7V/twJiOSHzU6t1Kp1AHAUXGCgqq+6DNeg== - dependencies: - "@types/node" "*" - "@types/body-parser@*": version "1.19.5" resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" @@ -1305,11 +153,6 @@ "@types/connect" "*" "@types/node" "*" -"@types/caseless@*": - version "0.12.5" - resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.5.tgz#db9468cb1b1b5a925b8f34822f1669df0c5472f5" - integrity sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg== - "@types/config@^3.3.5": version "3.3.5" resolved "https://registry.yarnpkg.com/@types/config/-/config-3.3.5.tgz#91f0a52b10212b9c4254fb0bbc4bedd77cd389b8" @@ -1347,24 +190,12 @@ resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== -"@types/is-buffer@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@types/is-buffer/-/is-buffer-2.0.2.tgz#3dcd8e21e7d6c2d312d0b9f6cf23bb6ca1ef9f76" - integrity sha512-G6OXy83Va+xEo8XgqAJYOuvOMxeey9xM5XKkvwJNmN8rVdcB+r15HvHsG86hl86JvU0y1aa7Z2ERkNFYWw9ySg== - dependencies: - "@types/node" "*" - -"@types/long@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" - integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== - "@types/mime@^1": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== -"@types/node@*", "@types/node@>=13.7.0": +"@types/node@*": version "22.8.7" resolved "https://registry.yarnpkg.com/@types/node/-/node-22.8.7.tgz#04ab7a073d95b4a6ee899f235d43f3c320a976f4" integrity sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q== @@ -1388,16 +219,6 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== -"@types/request@^2.48.8": - version "2.48.12" - resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.12.tgz#0f590f615a10f87da18e9790ac94c29ec4c5ef30" - integrity sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw== - dependencies: - "@types/caseless" "*" - "@types/node" "*" - "@types/tough-cookie" "*" - form-data "^2.5.0" - "@types/send@*": version "0.17.4" resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" @@ -1415,11 +236,6 @@ "@types/node" "*" "@types/send" "*" -"@types/tough-cookie@*": - version "4.0.5" - resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" - integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== - "@types/triple-beam@^1.3.2": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" @@ -1466,23 +282,6 @@ agent-base@6: dependencies: debug "4" -agent-base@^7.0.2, agent-base@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" - integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== - dependencies: - debug "^4.3.4" - -amqplib@^0.10.4: - version "0.10.4" - resolved "https://registry.yarnpkg.com/amqplib/-/amqplib-0.10.4.tgz#4058c775830c908267dc198969015e0e8d280e70" - integrity sha512-DMZ4eCEjAVdX1II2TfIUpJhfKAuoCeDIo/YyETbfAqehHTXxxs7WOOd+N1Xxr4cKhx12y23zk8/os98FxlZHrw== - dependencies: - "@acuminous/bitsyntax" "^0.1.2" - buffer-more-ints "~1.0.0" - readable-stream "1.x >=1.1.9" - url-parse "~1.5.10" - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -1523,21 +322,11 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -arrify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" - integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== - async@^3.2.3: version "3.2.6" resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" @@ -1548,16 +337,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.3.0, base64-js@^1.3.1: +base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -bignumber.js@^9.0.0: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" @@ -1590,11 +374,6 @@ body-parser@1.20.3: type-is "~1.6.18" unpipe "1.0.0" -bowser@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.11.0.tgz#5ca3c35757a7aa5771500c70a73a9f91ef420a8f" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1610,16 +389,6 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - -buffer-more-ints@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz#ef4f8e2dddbad429ed3828a9c55d44f05c611422" - integrity sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg== - buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -1628,7 +397,7 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.0, buffer@^6.0.3: +buffer@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== @@ -1689,15 +458,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - color-convert@^1.9.3: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1746,13 +506,6 @@ colorspace@1.1.x: color "^3.1.3" text-hex "1.0.x" -combined-stream@^1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -1804,7 +557,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4, debug@^4.0.0, debug@^4.3.3, debug@^4.3.4: +debug@4, debug@^4: version "4.3.7" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== @@ -1832,11 +585,6 @@ define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" @@ -1864,23 +612,6 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -duplexify@^4.0.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" - integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.2" - -ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" @@ -1992,11 +723,6 @@ express@^4.21.1: utils-merge "1.0.1" vary "~1.1.2" -extend@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - fast-glob@^3.2.9: version "3.3.2" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" @@ -2008,20 +734,6 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-xml-parser@4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz#86dbf3f18edf8739326447bcaac31b4ae7f6514f" - integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== - dependencies: - strnum "^1.0.5" - -fast-xml-parser@^4.4.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz#2882b7d01a6825dfdf909638f2de0256351def37" - integrity sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg== - dependencies: - strnum "^1.0.5" - fastq@^1.6.0: version "1.17.1" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" @@ -2066,16 +778,6 @@ fn.name@1.x.x: resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -form-data@^2.5.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.2.tgz#dc653743d1de2fcc340ceea38079daf6e9069fd2" - integrity sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - safe-buffer "^5.2.1" - forwarded@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" @@ -2128,25 +830,6 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -gaxios@^6.0.0, gaxios@^6.1.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-6.7.1.tgz#ebd9f7093ede3ba502685e73390248bb5b7f71fb" - integrity sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ== - dependencies: - extend "^3.0.2" - https-proxy-agent "^7.0.1" - is-stream "^2.0.0" - node-fetch "^2.6.9" - uuid "^9.0.1" - -gcp-metadata@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-6.1.0.tgz#9b0dd2b2445258e7597f2024332d20611cbd6b8c" - integrity sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg== - dependencies: - gaxios "^6.0.0" - json-bigint "^1.0.0" - get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -2187,36 +870,6 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -google-auth-library@^9.3.0: - version "9.14.2" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-9.14.2.tgz#92a53ba32b3a9ff9ced8ed34129edb5a7fa7fb52" - integrity sha512-R+FRIfk1GBo3RdlRYWPdwk8nmtVUOn6+BkDomAC46KoU8kzXzE1HLmOasSCbWUByMMAGkknVF0G5kQ69Vj7dlA== - dependencies: - base64-js "^1.3.0" - ecdsa-sig-formatter "^1.0.11" - gaxios "^6.1.1" - gcp-metadata "^6.1.0" - gtoken "^7.0.0" - jws "^4.0.0" - -google-gax@^4.3.3: - version "4.4.1" - resolved "https://registry.yarnpkg.com/google-gax/-/google-gax-4.4.1.tgz#95a9cf7ee7777ac22d1926a45b5f886dd8beecae" - integrity sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg== - dependencies: - "@grpc/grpc-js" "^1.10.9" - "@grpc/proto-loader" "^0.7.13" - "@types/long" "^4.0.0" - abort-controller "^3.0.0" - duplexify "^4.0.0" - google-auth-library "^9.3.0" - node-fetch "^2.7.0" - object-hash "^3.0.0" - proto3-json-serializer "^2.0.2" - protobufjs "^7.3.2" - retry-request "^7.0.0" - uuid "^9.0.1" - gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -2229,14 +882,6 @@ graceful-fs@^4.1.6, graceful-fs@^4.2.0: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -gtoken@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-7.1.0.tgz#d61b4ebd10132222817f7222b1e6064bd463fc26" - integrity sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw== - dependencies: - gaxios "^6.0.0" - jws "^4.0.0" - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -2276,11 +921,6 @@ hasown@^2.0.0, hasown@^2.0.2: dependencies: function-bind "^1.1.2" -heap-js@^2.2.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/heap-js/-/heap-js-2.5.0.tgz#487e268b1733b187ca04eccf52f8387be92b46cb" - integrity sha512-kUGoI3p7u6B41z/dp33G6OaL7J4DRqRYwVmeIlwLClx7yaaAy7hoDExnuejTKtuDwfcatGmddHDEOjf6EyIxtQ== - http-errors@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" @@ -2292,23 +932,6 @@ http-errors@2.0.0: statuses "2.0.1" toidentifier "1.0.1" -http-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" - integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== - dependencies: - "@tootallnate/once" "2" - agent-base "6" - debug "4" - -http-proxy-agent@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" - integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== - dependencies: - agent-base "^7.1.0" - debug "^4.3.4" - https-proxy-agent@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" @@ -2317,14 +940,6 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.1: - version "7.0.5" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" - integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== - dependencies: - agent-base "^7.0.2" - debug "4" - iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -2347,7 +962,7 @@ ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: +inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2382,11 +997,6 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-buffer@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - is-core-module@2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" @@ -2423,21 +1033,11 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-stream-ended@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-stream-ended/-/is-stream-ended-0.1.4.tgz#f50224e95e06bce0e356d440a4827cd35b267eda" - integrity sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw== - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -2455,13 +1055,6 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-bigint@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" - integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== - dependencies: - bignumber.js "^9.0.0" - json5@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" @@ -2476,28 +1069,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jssha@^3.1.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/jssha/-/jssha-3.3.1.tgz#c5b7fc7fb9aa745461923b87df0e247dd59c7ea8" - integrity sha512-VCMZj12FCFMQYcFLPRm/0lOBbLi8uM2BhXPTqw3U4YAfs4AZfiApOoBLoN8cQE60Z50m1MYMTQVCfgF/KaCVhQ== - -jwa@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" - integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" - integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== - dependencies: - jwa "^2.0.0" - safe-buffer "^5.0.1" - kafkajs@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/kafkajs/-/kafkajs-2.2.4.tgz#59e6e16459d87fdf8b64be73970ed5aa42370a5b" @@ -2508,16 +1079,6 @@ kuler@^2.0.0: resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== -lodash.camelcase@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" - integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== - -lodash.snakecase@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== - logform@^2.6.0, logform@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.1.tgz#71403a7d8cae04b2b734147963236205db9b3df0" @@ -2530,7 +1091,7 @@ logform@^2.6.0, logform@^2.6.1: safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" -long@^5.0.0, long@^5.2.0, long@^5.2.3: +long@^5.2.3: version "5.2.3" resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== @@ -2573,7 +1134,7 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: +mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== @@ -2647,7 +1208,7 @@ node-abi@^3.3.0: dependencies: semver "^7.3.5" -node-fetch@^2.6.6, node-fetch@^2.6.9, node-fetch@^2.7.0: +node-fetch@^2.6.6: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== @@ -2706,11 +1267,6 @@ one-time@^1.0.0: dependencies: fn.name "1.x.x" -p-defer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-3.0.0.tgz#d1dceb4ee9b2b604b1d94ffec83760175d4e6f83" - integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== - p-is-promise@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" @@ -2808,31 +1364,6 @@ progress@^2.0.3: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -proto3-json-serializer@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/proto3-json-serializer/-/proto3-json-serializer-2.0.2.tgz#5b705203b4d58f3880596c95fad64902617529dd" - integrity sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ== - dependencies: - protobufjs "^7.2.5" - -protobufjs@^7.2.5, protobufjs@^7.3.2: - version "7.4.0" - resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a" - integrity sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/node" ">=13.7.0" - long "^5.0.0" - proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" @@ -2861,11 +1392,6 @@ qs@6.13.0: dependencies: side-channel "^1.0.6" -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -2896,16 +1422,6 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -"readable-stream@1.x >=1.1.9": - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readable-stream@^2.0.0, readable-stream@^2.1.4: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -2951,11 +1467,6 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - resolve@^1.22.0: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" @@ -2965,36 +1476,11 @@ resolve@^1.22.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -retry-request@^7.0.0: - version "7.0.2" - resolved "https://registry.yarnpkg.com/retry-request/-/retry-request-7.0.2.tgz#60bf48cfb424ec01b03fca6665dee91d06dd95f3" - integrity sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w== - dependencies: - "@types/request" "^2.48.8" - extend "^3.0.2" - teeny-request "^9.0.0" - reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rhea-promise@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/rhea-promise/-/rhea-promise-3.0.3.tgz#fc68e39019442c5338a3999b5e3e28806f3f10d2" - integrity sha512-a875P5YcMkePSTEWMsnmCQS7Y4v/XvIw7ZoMtJxqtQRZsqSA6PsZxuz4vktyRykPuUgdNsA6F84dS3iEXZoYnQ== - dependencies: - debug "^4.0.0" - rhea "^3.0.0" - tslib "^2.6.0" - -rhea@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/rhea/-/rhea-3.0.3.tgz#38ff144b7f8ca982a67718aa1f5e67bd93075679" - integrity sha512-Y7se0USZQu6dErWSZ7eCmSVTMscyVfz/0+jjhBF7f9PqYfEXdIoQpPkC9Strks6wF9WytuBhn8w8Nz/tmBWpgA== - dependencies: - debug "^4.3.3" - run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -3002,12 +1488,12 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.2.1, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-buffer@~5.1.0, safe-buffer@~5.1.1, safe-buffer@~5.1.2: +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -3126,13 +1612,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -stream-events@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/stream-events/-/stream-events-1.0.5.tgz#bbc898ec4df33a4902d892333d47da9bf1c406d5" - integrity sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg== - dependencies: - stubs "^3.0.0" - stream-meter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/stream-meter/-/stream-meter-1.0.4.tgz#52af95aa5ea760a2491716704dbff90f73afdd1d" @@ -3140,12 +1619,7 @@ stream-meter@^1.0.4: dependencies: readable-stream "^2.1.4" -stream-shift@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" - integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.1.0, string-width@^4.2.0: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3161,11 +1635,6 @@ string_decoder@^1.1.1, string_decoder@^1.3.0: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -3185,16 +1654,6 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== - -stubs@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/stubs/-/stubs-3.0.0.tgz#e8d2ba1fa9c90570303c030b6900f7d5f89abe5b" - integrity sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw== - supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -3235,17 +1694,6 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -teeny-request@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-9.0.0.tgz#18140de2eb6595771b1b02203312dfad79a4716d" - integrity sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g== - dependencies: - http-proxy-agent "^5.0.0" - https-proxy-agent "^5.0.0" - node-fetch "^2.6.9" - stream-events "^1.0.5" - uuid "^9.0.0" - text-hex@1.0.x: version "1.0.0" resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" @@ -3302,11 +1750,6 @@ ts-node@^10.9.2: v8-compile-cache-lib "^3.0.1" yn "3.1.1" -tslib@^2.2.0, tslib@^2.6.0, tslib@^2.6.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -3347,14 +1790,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -url-parse@~1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -3370,16 +1805,6 @@ uuid-parse@^1.1.0: resolved "https://registry.yarnpkg.com/uuid-parse/-/uuid-parse-1.1.0.tgz#7061c5a1384ae0e1f943c538094597e1b5f3a65b" integrity sha512-OdmXxA8rDsQ7YpNVbKSJkNzTw2I+S5WsbMDnCtIWSQaosNAcWtFuI/YK1TjzUI6nbkgiqEyh8gWngfcv8Asd9A== -uuid-random@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/uuid-random/-/uuid-random-1.3.2.tgz#96715edbaef4e84b1dcf5024b00d16f30220e2d0" - integrity sha512-UOzej0Le/UgkbWEO8flm+0y+G+ljUon1QWTEZOq1rnMAsxo2+SckbiZdKzAHHlVh6gJqI1TjC/xwgR50MuCrBQ== - -uuid@^9.0.0, uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - v8-compile-cache-lib@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" @@ -3463,11 +1888,6 @@ yargs-parser@^20.2.2: resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" @@ -3481,19 +1901,6 @@ yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" -yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" diff --git a/msa/tb/docker/upgrade-tb.sh b/msa/tb/docker/upgrade-tb.sh index 3e8f7d804a..3c8e4f194d 100644 --- a/msa/tb/docker/upgrade-tb.sh +++ b/msa/tb/docker/upgrade-tb.sh @@ -20,23 +20,15 @@ start-db.sh CONF_FOLDER="${pkg.installFolder}/conf" jarfile=${pkg.installFolder}/bin/${pkg.name}.jar configfile=${pkg.name}.conf -upgradeversion=${DATA_FOLDER}/.upgradeversion source "${CONF_FOLDER}/${configfile}" -FROM_VERSION=`cat ${upgradeversion}` - echo "Starting ThingsBoard upgrade ..." -fromVersion="${FROM_VERSION// }" - java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication \ -Dspring.jpa.hibernate.ddl-auto=none \ -Dinstall.upgrade=true \ - -Dinstall.upgrade.from_version=${fromVersion} \ -Dlogging.config=/usr/share/thingsboard/bin/install/logback.xml \ org.springframework.boot.loader.launch.PropertiesLauncher -echo "${pkg.upgradeVersion}" > ${upgradeversion} - stop-db.sh \ No newline at end of file diff --git a/msa/vc-executor/src/main/resources/tb-vc-executor.yml b/msa/vc-executor/src/main/resources/tb-vc-executor.yml index 6b79f2d101..cba83e5ff7 100644 --- a/msa/vc-executor/src/main/resources/tb-vc-executor.yml +++ b/msa/vc-executor/src/main/resources/tb-vc-executor.yml @@ -47,9 +47,7 @@ zk: # Queue configuration parameters queue: - # kafka (Apache Kafka). The following queue types are deprecated and will no longer be supported in ThingsBoard 4.0: - # aws-sqs (AWS SQS), pubsub (PubSub), service-bus (Azure Service Bus), rabbitmq (RabbitMQ) - type: "${TB_QUEUE_TYPE:kafka}" + type: "${TB_QUEUE_TYPE:kafka}" # kafka (Apache Kafka) prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka). in_memory: stats: @@ -148,91 +146,10 @@ queue: print-interval-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_MIN_PRINT_INTERVAL_MS:60000}" # Time to wait for the stats-loading requests to Kafka to finis kafka-response-timeout-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_RESPONSE_TIMEOUT_MS:1000}" - aws_sqs: - # Use the default credentials provider for AWS SQS - use_default_credential_provider_chain: "${TB_QUEUE_AWS_SQS_USE_DEFAULT_CREDENTIAL_PROVIDER_CHAIN:false}" - # Access key ID from AWS IAM user - access_key_id: "${TB_QUEUE_AWS_SQS_ACCESS_KEY_ID:YOUR_KEY}" - # Secret access key from AWS IAM user - secret_access_key: "${TB_QUEUE_AWS_SQS_SECRET_ACCESS_KEY:YOUR_SECRET}" - # Region from AWS account - region: "${TB_QUEUE_AWS_SQS_REGION:YOUR_REGION}" - # Number of threads per each AWS SQS queue in consumer - threads_per_topic: "${TB_QUEUE_AWS_SQS_THREADS_PER_TOPIC:1}" - # Thread pool size for aws_sqs queue producer executor provider. Default value equals to AmazonSQSAsyncClient.DEFAULT_THREAD_POOL_SIZE - producer_thread_pool_size: "${TB_QUEUE_AWS_SQS_EXECUTOR_THREAD_POOL_SIZE:50}" - queue-properties: - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - core: "${TB_QUEUE_AWS_SQS_CORE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - notifications: "${TB_QUEUE_AWS_SQS_NOTIFICATIONS_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - version-control: "${TB_QUEUE_AWS_SQS_VC_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - pubsub: - # Project ID from Google Cloud - project_id: "${TB_QUEUE_PUBSUB_PROJECT_ID:YOUR_PROJECT_ID}" - # API Credentials in JSON format - service_account: "${TB_QUEUE_PUBSUB_SERVICE_ACCOUNT:YOUR_SERVICE_ACCOUNT}" - # Message size for PubSub queue.Value in bytes - max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}" #in bytes - # Number of messages per consumer - max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}" - # Thread pool size for pubsub queue executor provider. If not set - default pubsub executor provider value will be used (5 * number of available processors) - executor_thread_pool_size: "${TB_QUEUE_PUBSUB_EXECUTOR_THREAD_POOL_SIZE:0}" - queue-properties: - # Pub/Sub properties for Core subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - core: "${TB_QUEUE_PUBSUB_CORE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Version Control subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - notifications: "${TB_QUEUE_PUBSUB_NOTIFICATIONS_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Transport Api subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - version-control: "${TB_QUEUE_PUBSUB_VC_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - service_bus: - # Azure namespace - namespace_name: "${TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME:YOUR_NAMESPACE_NAME}" - # Azure Service Bus Shared Access Signatures key name - sas_key_name: "${TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME:YOUR_SAS_KEY_NAME}" - # Azure Service Bus Shared Access Signatures key - sas_key: "${TB_QUEUE_SERVICE_BUS_SAS_KEY:YOUR_SAS_KEY}" - # Number of messages per a consumer - max_messages: "${TB_QUEUE_SERVICE_BUS_MAX_MESSAGES:1000}" - queue-properties: - # Azure Service Bus properties for Core queues - core: "${TB_QUEUE_SERVICE_BUS_CORE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Notification queues - notifications: "${TB_QUEUE_SERVICE_BUS_NOTIFICATIONS_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Version Control queues - version-control: "${TB_QUEUE_SERVICE_BUS_VC_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - rabbitmq: - # By default empty - exchange_name: "${TB_QUEUE_RABBIT_MQ_EXCHANGE_NAME:}" - # RabbitMQ host used to establish connection - host: "${TB_QUEUE_RABBIT_MQ_HOST:localhost}" - # RabbitMQ host used to establish a connection - port: "${TB_QUEUE_RABBIT_MQ_PORT:5672}" - # Virtual hosts provide logical grouping and separation of resources - virtual_host: "${TB_QUEUE_RABBIT_MQ_VIRTUAL_HOST:/}" - # Username for RabbitMQ user account - username: "${TB_QUEUE_RABBIT_MQ_USERNAME:YOUR_USERNAME}" - # User password for RabbitMQ user account - password: "${TB_QUEUE_RABBIT_MQ_PASSWORD:YOUR_PASSWORD}" - # Network connection between clients and RabbitMQ nodes can fail. RabbitMQ Java client supports automatic recovery of connections and topology (queues, exchanges, bindings, and consumers) - automatic_recovery_enabled: "${TB_QUEUE_RABBIT_MQ_AUTOMATIC_RECOVERY_ENABLED:false}" - # The connection timeout for the RabbitMQ connection factory - connection_timeout: "${TB_QUEUE_RABBIT_MQ_CONNECTION_TIMEOUT:60000}" - # RabbitMQ has a timeout for connection handshake. When clients run in heavily constrained environments, it may be necessary to increase the timeout - handshake_timeout: "${TB_QUEUE_RABBIT_MQ_HANDSHAKE_TIMEOUT:10000}" - queue-properties: - # RabbitMQ properties for Core queues - core: "${TB_QUEUE_RABBIT_MQ_CORE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Transport API queues - transport-api: "${TB_QUEUE_RABBIT_MQ_TA_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Version Control queues - version-control: "${TB_QUEUE_RABBIT_MQ_VC_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 core: - # Default topic name of Kafka, RabbitMQ, etc. queue + # Default topic name topic: "${TB_QUEUE_CORE_TOPIC:tb_core}" # Interval in milliseconds to poll messages by Core microservices poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" @@ -247,7 +164,7 @@ queue: pack-interval-ms: "${TB_QUEUE_CORE_OTA_PACK_INTERVAL_MS:60000}" # The size of OTA updates notifications fetched from the queue. The queue stores pairs of firmware and device ids pack-size: "${TB_QUEUE_CORE_OTA_PACK_SIZE:100}" - # Stats topic name for queue Kafka, RabbitMQ, etc. + # Stats topic name usage-stats-topic: "${TB_QUEUE_US_TOPIC:tb_usage_stats}" stats: # Enable/disable statistics for Core microservices @@ -258,7 +175,7 @@ queue: # Topic name for Housekeeper tasks topic: "${TB_HOUSEKEEPER_TOPIC:tb_housekeeper}" vc: - # Default topic name for Kafka, RabbitMQ, etc. + # Default topic name topic: "${TB_QUEUE_VC_TOPIC:tb_version_control}" # Number of partitions to associate with this queue. Used for scaling the number of messages that can be processed in parallel partitions: "${TB_QUEUE_VC_PARTITIONS:10}" @@ -266,7 +183,7 @@ queue: poll-interval: "${TB_QUEUE_VC_INTERVAL_MS:25}" # Timeout before retrying all failed and timed-out messages from the processing pack pack-processing-timeout: "${TB_QUEUE_VC_PACK_PROCESSING_TIMEOUT_MS:180000}" - # Queue settings for Kafka, RabbitMQ, etc. Limit for single message size + # Limit for single queue message size msg-chunk-size: "${TB_QUEUE_VC_MSG_CHUNK_SIZE:250000}" # Version control parameters diff --git a/packaging/java/scripts/control/template.service b/packaging/java/scripts/control/template.service index 235c3a1700..f4fa806c32 100644 --- a/packaging/java/scripts/control/template.service +++ b/packaging/java/scripts/control/template.service @@ -8,7 +8,8 @@ ExecStart=${pkg.installFolder}/bin/${pkg.name}.jar SuccessExitStatus=143 # Service shall be restarted in 30 seconds when the service process exits, is killed, or a timeout is reached. -Restart=always # default 'no' +# Restart parameter default value 'no' +Restart=always RestartSec=30 [Install] diff --git a/pom.xml b/pom.xml index 5d810d6ce2..d8480be34d 100755 --- a/pom.xml +++ b/pom.xml @@ -117,7 +117,6 @@ 1.12.701 1.128.1 2.37.1 - 3.6.7 1.6.4 1.6.1 1.9.4 @@ -2040,21 +2039,6 @@ proto-google-common-protos ${google.common.protos.version} - - com.microsoft.azure - azure-servicebus - ${azure-servicebus.version} - - - com.nimbusds - content-type - - - org.ow2.asm - asm - - - org.passay passay diff --git a/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js b/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js index 5c310aabb5..2ad9ac666b 100644 --- a/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js +++ b/rule-engine/rule-engine-components/src/main/resources/public/static/rulenode/rulenode-core-config.js @@ -1 +1 @@ -System.register(["@angular/core","@shared/public-api","@ngrx/store","@angular/forms","@core/public-api","@ngx-translate/core","@angular/cdk/keycodes","@angular/common","@home/components/public-api","tslib","rxjs","@angular/cdk/coercion","rxjs/operators"],(function(e){"use strict";var t,n,r,a,i,o,l,s,p,m,d,u,c,f,g,h,y,b,v,x,C,S,T,I,E,F,q,A,k,N,w,M,B,V,O,D,L,P,R,_,j,G,K,U,H,z,$,Q,J,Y,W,X,Z,ee,te,ne,re,ae,ie;return{setters:[function(e){t=e,n=e.EventEmitter,r=e.forwardRef,a=e.ɵNG_COMP_DEF},function(e){i=e.RuleNodeConfigurationComponent,o=e.AttributeScope,l=e.telemetryTypeTranslations,s=e.ScriptLanguage,p=e.AlarmSeverity,m=e.alarmSeverityTranslations,d=e.EntitySearchDirection,u=e.EntityType,c=e.entityFields,f=e.messageTypeNames,g=e.MessageType,h=e.coerceBoolean,y=e.PageComponent,b=e.entitySearchDirectionTranslations,v=e,x=e.AlarmStatus,C=e.alarmStatusTranslations,S=e.SharedModule,T=e.AggregationType,I=e.aggregationTranslations,E=e.NotificationType,F=e.SlackChanelType,q=e.SlackChanelTypesTranslateMap},function(e){A=e},function(e){k=e,N=e.Validators,w=e.FormArray,M=e.FormGroup,B=e.NgControl,V=e.NG_VALUE_ACCESSOR,O=e.NG_VALIDATORS},function(e){D=e.getCurrentAuthState,L=e,P=e.isDefinedAndNotNull,R=e.isEqual,_=e.deepTrim,j=e.isObject,G=e.isNotEmptyStr},function(e){K=e},function(e){U=e.ENTER,H=e.COMMA,z=e.SEMICOLON},function(e){$=e.CommonModule},function(e){Q=e.HomeComponentsModule},function(e){J=e.__decorate},function(e){Y=e.Subject,W=e.takeUntil,X=e.of},function(e){Z=e.coerceBooleanProperty},function(e){ee=e.startWith,te=e.map,ne=e.mergeMap,re=e.share,ae=e.tap,ie=e.takeUntil}],execute:function(){class oe extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.emptyConfigForm}onConfigurationSet(e){this.emptyConfigForm=this.fb.group({})}static{this.ɵfac=function(e){return new(e||oe)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:oe,selectors:[["tb-node-empty-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:1,vars:0,template:function(e,n){1&e&&t.ɵɵelement(0,"div")},dependencies:t.ɵɵgetComponentDepsFactory(oe),encapsulation:2})}}function le(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.customer-name-pattern-required")," "))}e("EmptyConfigComponent",oe);class se extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.assignCustomerConfigForm}onConfigurationSet(e){this.assignCustomerConfigForm=this.fb.group({customerNamePattern:[e?e.customerNamePattern:null,[N.required,N.pattern(/.*\S.*/)]],createCustomerIfNotExists:[!!e&&e.createCustomerIfNotExists,[]]})}prepareOutputConfig(e){return e.customerNamePattern=e.customerNamePattern.trim(),e}static{this.ɵfac=function(e){return new(e||se)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:se,selectors:[["tb-action-node-assign-to-customer-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:13,vars:5,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"tb-form-panel","no-padding","no-border"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","customerNamePattern"],[4,"ngIf"],[1,"tb-form-row"],["formControlName","createCustomerIfNotExists",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"mat-form-field",2)(3,"mat-label",3),t.ɵɵtext(4,"tb.rulenode.customer-name-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",4),t.ɵɵtemplate(6,le,3,3,"mat-error",5),t.ɵɵelementStart(7,"mat-hint",3),t.ɵɵtext(8,"tb.rulenode.customer-name-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",6)(10,"mat-slide-toggle",7),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.assignCustomerConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.assignCustomerConfigForm.get("customerNamePattern").hasError("required")||n.assignCustomerConfigForm.get("customerNamePattern").hasError("pattern")),t.ɵɵadvance(5),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,3,"tb.rulenode.create-customer-if-not-exists")," "))},dependencies:t.ɵɵgetComponentDepsFactory(se),encapsulation:2})}}e("AssignCustomerConfigComponent",se);const pe=()=>({standalone:!0});function me(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",15),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.telemetryTypeTranslationsMap.get(e))," ")}}function de(e,n){1&e&&(t.ɵɵelementStart(0,"div",12),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",16),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.send-attributes-updated-notification-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"tb.rulenode.send-attributes-updated-notification")," "))}function ue(e,n){1&e&&(t.ɵɵelementStart(0,"div",12),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",17),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.notify-device-on-update-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"tb.rulenode.notify-device")," "))}class ce extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopeMap=o,this.attributeScopes=Object.keys(o),this.telemetryTypeTranslationsMap=l}configForm(){return this.attributesConfigForm}onConfigurationSet(e){this.attributesConfigForm=this.fb.group({scope:[e?e.scope:null,[N.required]],notifyDevice:[!e||e.notifyDevice,[]],sendAttributesUpdatedNotification:[!!e&&e.sendAttributesUpdatedNotification,[]],updateAttributesOnlyOnValueChange:[!!e&&e.updateAttributesOnlyOnValueChange,[]]}),this.attributesConfigForm.get("scope").valueChanges.subscribe((e=>{e!==o.SHARED_SCOPE&&this.attributesConfigForm.get("notifyDevice").patchValue(!1,{emitEvent:!1}),e===o.CLIENT_SCOPE&&this.attributesConfigForm.get("sendAttributesUpdatedNotification").patchValue(!1,{emitEvent:!1}),this.attributesConfigForm.get("updateAttributesOnlyOnValueChange").patchValue(!1,{emitEvent:!1})}))}static{this.ɵfac=function(e){return new(e||ce)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ce,selectors:[["tb-action-node-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:31,vars:24,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],[1,"flex"],["required","","matInput","","formControlName","scope",1,"tb-entity-type-select"],[3,"value",4,"ngFor","ngForOf"],["type","text","matInput","","readonly","","disabled","",3,"ngModel","ngModelOptions"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip"],["aria-hidden","false","aria-label","help-icon"],[1,"tb-settings"],["translate",""],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","updateAttributesOnlyOnValueChange",1,"mat-slide"],["class","tb-form-row no-border no-padding",3,"tb-hint-tooltip-icon",4,"ngIf"],[3,"value"],["formControlName","sendAttributesUpdatedNotification",1,"mat-slide"],["formControlName","notifyDevice",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵelement(2,"tb-example-hint",2),t.ɵɵelementStart(3,"div",3)(4,"mat-form-field",4)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",5),t.ɵɵtemplate(9,me,3,4,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",4)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",7),t.ɵɵelementStart(15,"button",8),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"mat-icon",9),t.ɵɵtext(18,"content_copy "),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(19,"section",1)(20,"mat-expansion-panel",10)(21,"mat-expansion-panel-header")(22,"mat-panel-title",11),t.ɵɵtext(23,"tb.rulenode.advanced-settings"),t.ɵɵelementEnd()(),t.ɵɵelementStart(24,"div",12),t.ɵɵpipe(25,"translate"),t.ɵɵelementStart(26,"mat-slide-toggle",13),t.ɵɵtext(27),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(29,de,5,6,"div",14)(30,ue,5,6,"div",14),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.attributesConfigForm),t.ɵɵadvance(2),t.ɵɵproperty("hintText","tb.rulenode.attributes-scope-hint"),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,13,"tb.rulenode.attributes-scope")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.attributeScopes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,15,"tb.rulenode.attributes-scope-value")),t.ɵɵadvance(2),t.ɵɵproperty("ngModel",n.attributesConfigForm.get("scope").value)("ngModelOptions",t.ɵɵpureFunction0(23,pe)),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(16,17,"tb.rulenode.attributes-scope-value-copy")),t.ɵɵproperty("cbContent",n.attributesConfigForm.get("scope").value),t.ɵɵadvance(9),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(25,19,n.attributesConfigForm.get("updateAttributesOnlyOnValueChange").value?"tb.rulenode.update-attributes-only-on-value-change-hint-enabled":"tb.rulenode.update-attributes-only-on-value-change-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(28,21,"tb.rulenode.update-attributes-only-on-value-change")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.attributesConfigForm.get("scope").value!==n.attributeScopeMap.CLIENT_SCOPE),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.attributesConfigForm.get("scope").value===n.attributeScopeMap.SHARED_SCOPE))},dependencies:t.ɵɵgetComponentDepsFactory(ce),encapsulation:2})}}e("AttributesConfigComponent",ce);const fe=["jsFuncComponent"],ge=["tbelFuncComponent"],he=()=>["msg","metadata","msgType"];function ye(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",12)}function be(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",13,0)(2,"button",14),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",15),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,he)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function ve(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",16,1)(2,"button",14),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",15),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,he))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}function xe(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.alarm-type-required")," "))}class Ce extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-details-function"}configForm(){return this.clearAlarmConfigForm}onConfigurationSet(e){this.clearAlarmConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:s.JS,[N.required]],alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[]],alarmDetailsBuildTbel:[e?e.alarmDetailsBuildTbel:null,[]],alarmType:[e?e.alarmType:null,[N.required]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.clearAlarmConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.clearAlarmConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.clearAlarmConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.clearAlarmConfigForm.get("alarmDetailsBuildJs").setValidators(t===s.JS?[N.required]:[]),this.clearAlarmConfigForm.get("alarmDetailsBuildJs").updateValueAndValidity({emitEvent:e}),this.clearAlarmConfigForm.get("alarmDetailsBuildTbel").setValidators(t===s.TBEL?[N.required]:[]),this.clearAlarmConfigForm.get("alarmDetailsBuildTbel").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),e}testScript(e){const t=this.clearAlarmConfigForm.get("scriptLang").value,n=t===s.JS?"alarmDetailsBuildJs":"alarmDetailsBuildTbel",r=t===s.JS?"rulenode/clear_alarm_node_script_fn":"rulenode/tbel/clear_alarm_node_script_fn",a=this.clearAlarmConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.clearAlarmConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.clearAlarmConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||Ce)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ce,selectors:[["tb-action-node-clear-alarm-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(fe,5),t.ɵɵviewQuery(ge,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:15,vars:8,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[1,"flex","flex-col",3,"formGroup"],["formControlName","scriptLang",4,"ngIf"],["formControlName","alarmDetailsBuildJs","functionName","Details","helpId","rulenode/clear_alarm_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","alarmDetailsBuildTbel","functionName","Details","helpId","rulenode/tbel/clear_alarm_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],[1,"flex","flex-row",2,"padding-bottom","16px"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","alarmType"],[4,"ngIf"],["formControlName","scriptLang"],["formControlName","alarmDetailsBuildJs","functionName","Details","helpId","rulenode/clear_alarm_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","alarmDetailsBuildTbel","functionName","Details","helpId","rulenode/tbel/clear_alarm_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2),t.ɵɵtemplate(1,ye,1,0,"tb-script-lang",3)(2,be,6,5,"tb-js-func",4)(3,ve,6,7,"tb-js-func",5),t.ɵɵelementStart(4,"div",6)(5,"button",7),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-form-field",8)(9,"mat-label",9),t.ɵɵtext(10,"tb.rulenode.alarm-type"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",10),t.ɵɵtemplate(12,xe,3,3,"mat-error",11),t.ɵɵelementStart(13,"mat-hint",9),t.ɵɵtext(14,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.clearAlarmConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.clearAlarmConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.clearAlarmConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,6,n.testScriptLabel)," "),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.clearAlarmConfigForm.get("alarmType").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(Ce),encapsulation:2})}}e("ClearAlarmConfigComponent",Ce);const Se=["jsFuncComponent"],Te=["tbelFuncComponent"],Ie=()=>["msg","metadata","msgType"];function Ee(e,n){1&e&&(t.ɵɵelementStart(0,"mat-checkbox",7),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.overwrite-alarm-details")," "))}function Fe(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",14)}function qe(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",15,0)(2,"button",16),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",17),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,Ie)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function Ae(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",18,1)(2,"button",16),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",17),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,Ie))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}function ke(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section",8),t.ɵɵtemplate(1,Fe,1,0,"tb-script-lang",9)(2,qe,6,5,"tb-js-func",10)(3,Ae,6,7,"tb-js-func",11),t.ɵɵelementStart(4,"div",12)(5,"button",13),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("scriptLang").value===e.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("scriptLang").value===e.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,4,e.testScriptLabel)," ")}}function Ne(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.alarm-type-required")," "))}function we(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",32),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.alarmSeverityTranslationMap.get(e))," ")}}function Me(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.alarm-severity-required")," "))}function Be(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",29)(1,"mat-label",20),t.ɵɵtext(2,"tb.rulenode.alarm-severity"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",30),t.ɵɵtemplate(4,we,3,4,"mat-option",31),t.ɵɵelementEnd(),t.ɵɵtemplate(5,Me,3,3,"mat-error",22),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.alarmSeverities),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("severity").hasError("required"))}}function Ve(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.alarm-severity-required")," "))}function Oe(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",19)(1,"mat-label",20),t.ɵɵtext(2,"tb.rulenode.alarm-severity-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",33),t.ɵɵtemplate(4,Ve,3,3,"mat-error",22),t.ɵɵelement(5,"mat-hint",34),t.ɵɵpipe(6,"translate"),t.ɵɵpipe(7,"safe"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("severity").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(7,4,t.ɵɵpipeBind1(6,2,"tb.rulenode.alarm-severity-pattern-hint"),"html"),t.ɵɵsanitizeHtml)}}function De(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-chip-row",38),t.ɵɵlistener("removed",(function(){const n=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext(3);return t.ɵɵresetView(r.removeKey(n,"relationTypes"))})),t.ɵɵtext(1),t.ɵɵelementStart(2,"mat-icon",39),t.ɵɵtext(3,"close"),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Le(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section")(1,"mat-form-field",35)(2,"mat-label",20),t.ɵɵtext(3,"tb.rulenode.relation-types-list"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-chip-grid",null,2),t.ɵɵtemplate(6,De,4,1,"mat-chip-row",36),t.ɵɵelementStart(7,"input",37),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("matChipInputTokenEnd",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.addKey(n,"relationTypes"))})),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"mat-hint",20),t.ɵɵtext(10,"tb.rulenode.relation-types-list-hint"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(5),n=t.ɵɵnextContext(2);t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.createAlarmConfigForm.get("relationTypes").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,5,"tb.rulenode.relation-types-list")),t.ɵɵproperty("matChipInputFor",e)("matChipInputSeparatorKeyCodes",n.separatorKeysCodes)("matChipInputAddOnBlur",!0)}}function Pe(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",8)(1,"mat-form-field",19)(2,"mat-label",20),t.ɵɵtext(3,"tb.rulenode.alarm-type"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",21),t.ɵɵtemplate(5,Ne,3,3,"mat-error",22),t.ɵɵelementStart(6,"mat-hint",20),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-checkbox",23),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(11,Be,6,2,"mat-form-field",24)(12,Oe,8,7,"mat-form-field",25),t.ɵɵelementStart(13,"mat-checkbox",26),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(16,Le,11,7,"section",22),t.ɵɵelementStart(17,"mat-checkbox",27),t.ɵɵtext(18),t.ɵɵpipe(19,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"mat-checkbox",28),t.ɵɵtext(21),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("alarmType").hasError("required")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(10,8,"tb.rulenode.use-alarm-severity-pattern")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!e.createAlarmConfigForm.get("dynamicSeverity").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("dynamicSeverity").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,10,"tb.rulenode.propagate")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!0===e.createAlarmConfigForm.get("propagate").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(19,12,"tb.rulenode.propagate-to-owner")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(22,14,"tb.rulenode.propagate-to-tenant")," ")}}class Re extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.alarmSeverities=Object.keys(p),this.alarmSeverityTranslationMap=m,this.separatorKeysCodes=[U,H,z],this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-details-function"}configForm(){return this.createAlarmConfigForm}onConfigurationSet(e){this.createAlarmConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:s.JS,[N.required]],alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[]],alarmDetailsBuildTbel:[e?e.alarmDetailsBuildTbel:null,[]],useMessageAlarmData:[!!e&&e.useMessageAlarmData,[]],overwriteAlarmDetails:[!!e&&e.overwriteAlarmDetails,[]],alarmType:[e?e.alarmType:null,[]],severity:[e?e.severity:null,[]],propagate:[!!e&&e.propagate,[]],relationTypes:[e?e.relationTypes:null,[]],propagateToOwner:[!!e&&e.propagateToOwner,[]],propagateToTenant:[!!e&&e.propagateToTenant,[]],dynamicSeverity:!1}),this.createAlarmConfigForm.get("dynamicSeverity").valueChanges.subscribe((e=>{e?this.createAlarmConfigForm.get("severity").patchValue("",{emitEvent:!1}):this.createAlarmConfigForm.get("severity").patchValue(this.alarmSeverities[0],{emitEvent:!1})}))}validatorTriggers(){return["useMessageAlarmData","overwriteAlarmDetails","scriptLang"]}updateValidators(e){const t=this.createAlarmConfigForm.get("useMessageAlarmData").value,n=this.createAlarmConfigForm.get("overwriteAlarmDetails").value;t?(this.createAlarmConfigForm.get("alarmType").setValidators([]),this.createAlarmConfigForm.get("severity").setValidators([])):(this.createAlarmConfigForm.get("alarmType").setValidators([N.required]),this.createAlarmConfigForm.get("severity").setValidators([N.required])),this.createAlarmConfigForm.get("alarmType").updateValueAndValidity({emitEvent:e}),this.createAlarmConfigForm.get("severity").updateValueAndValidity({emitEvent:e});let r=this.createAlarmConfigForm.get("scriptLang").value;r!==s.TBEL||this.tbelEnabled||(r=s.JS,this.createAlarmConfigForm.get("scriptLang").patchValue(r,{emitEvent:!1}),setTimeout((()=>{this.createAlarmConfigForm.updateValueAndValidity({emitEvent:!0})})));const a=!1===t||!0===n;this.createAlarmConfigForm.get("alarmDetailsBuildJs").setValidators(a&&r===s.JS?[N.required]:[]),this.createAlarmConfigForm.get("alarmDetailsBuildTbel").setValidators(a&&r===s.TBEL?[N.required]:[]),this.createAlarmConfigForm.get("alarmDetailsBuildJs").updateValueAndValidity({emitEvent:e}),this.createAlarmConfigForm.get("alarmDetailsBuildTbel").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),e}testScript(e){const t=this.createAlarmConfigForm.get("scriptLang").value,n=t===s.JS?"alarmDetailsBuildJs":"alarmDetailsBuildTbel",r=t===s.JS?"rulenode/create_alarm_node_script_fn":"rulenode/tbel/create_alarm_node_script_fn",a=this.createAlarmConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.createAlarmConfigForm.get(n).setValue(e),this.changeScript.emit())}))}removeKey(e,t){const n=this.createAlarmConfigForm.get(t).value,r=n.indexOf(e);r>=0&&(n.splice(r,1),this.createAlarmConfigForm.get(t).setValue(n,{emitEvent:!0}))}addKey(e,t){const n=e.input;let r=e.value;if((r||"").trim()){r=r.trim();let e=this.createAlarmConfigForm.get(t).value;e&&-1!==e.indexOf(r)||(e||(e=[]),e.push(r),this.createAlarmConfigForm.get(t).setValue(e,{emitEvent:!0}))}n&&(n.value="")}onValidate(){const e=this.createAlarmConfigForm.get("useMessageAlarmData").value,t=this.createAlarmConfigForm.get("overwriteAlarmDetails").value;if(!e||t){this.createAlarmConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}}static{this.ɵfac=function(e){return new(e||Re)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Re,selectors:[["tb-action-node-create-alarm-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(Se,5),t.ɵɵviewQuery(Te,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:7,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],["relationTypesChipList",""],[1,"flex","flex-col",3,"formGroup"],["formControlName","useMessageAlarmData"],["formControlName","overwriteAlarmDetails",4,"ngIf"],["class","flex flex-col",4,"ngIf"],["formControlName","overwriteAlarmDetails"],[1,"flex","flex-col"],["formControlName","scriptLang",4,"ngIf"],["formControlName","alarmDetailsBuildJs","functionName","Details","helpId","rulenode/create_alarm_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","alarmDetailsBuildTbel","functionName","Details","helpId","rulenode/tbel/create_alarm_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],[1,"flex","flex-row",2,"padding-bottom","16px"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","scriptLang"],["formControlName","alarmDetailsBuildJs","functionName","Details","helpId","rulenode/create_alarm_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","alarmDetailsBuildTbel","functionName","Details","helpId","rulenode/tbel/create_alarm_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"],["subscriptSizing","dynamic",1,"flex-1"],["translate",""],["required","","matInput","","formControlName","alarmType"],[4,"ngIf"],["formControlName","dynamicSeverity"],["class","flex-1",4,"ngIf"],["class","flex-1","subscriptSizing","dynamic",4,"ngIf"],["formControlName","propagate"],["formControlName","propagateToOwner"],["formControlName","propagateToTenant"],[1,"flex-1"],["formControlName","severity","required",""],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["matInput","","formControlName","severity","required",""],[3,"innerHTML"],["floatLabel","always","subscriptSizing","dynamic",1,"mat-block"],[3,"removed",4,"ngFor","ngForOf"],["matInput","","type","text",3,"matChipInputTokenEnd","placeholder","matChipInputFor","matChipInputSeparatorKeyCodes","matChipInputAddOnBlur"],[3,"removed"],["matChipRemove",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",3)(1,"mat-checkbox",4),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Ee,3,3,"mat-checkbox",5)(5,ke,8,6,"section",6)(6,Pe,23,16,"section",6),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.createAlarmConfigForm),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,5,"tb.rulenode.use-message-alarm-data")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!0===n.createAlarmConfigForm.get("useMessageAlarmData").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!1===n.createAlarmConfigForm.get("useMessageAlarmData").value||!0===n.createAlarmConfigForm.get("overwriteAlarmDetails").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!1===n.createAlarmConfigForm.get("useMessageAlarmData").value))},dependencies:t.ɵɵgetComponentDepsFactory(Re),encapsulation:2})}}function _e(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.directionTypeTranslations.get(e))," ")}}function je(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",22)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",23),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,e.entityTypeNamePatternTranslation.get(e.createRelationConfigForm.get("entityType").value)))}}function Ge(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field",22)(1,"mat-label",5),t.ɵɵtext(2,"tb.rulenode.profile-name"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",24),t.ɵɵelementEnd())}function Ke(e,n){1&e&&t.ɵɵelement(0,"tb-example-hint",25),2&e&&t.ɵɵproperty("hintText","tb.rulenode.kv-map-pattern-hint")}function Ue(e,n){1&e&&(t.ɵɵelementStart(0,"div",26),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",27),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.create-entity-if-not-exists-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"tb.rulenode.create-entity-if-not-exists")," "))}e("CreateAlarmConfigComponent",Re);class He extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(d),this.directionTypeTranslations=new Map([[d.FROM,"tb.rulenode.search-direction-from"],[d.TO,"tb.rulenode.search-direction-to"]]),this.entityType=u,this.entityTypeNamePatternTranslation=new Map([[u.DEVICE,"tb.rulenode.device-name-pattern"],[u.ASSET,"tb.rulenode.asset-name-pattern"],[u.ENTITY_VIEW,"tb.rulenode.entity-view-name-pattern"],[u.CUSTOMER,"tb.rulenode.customer-title-pattern"],[u.USER,"tb.rulenode.user-name-pattern"],[u.DASHBOARD,"tb.rulenode.dashboard-name-pattern"],[u.EDGE,"tb.rulenode.edge-name-pattern"]]),this.allowedEntityTypes=[u.DEVICE,u.ASSET,u.ENTITY_VIEW,u.TENANT,u.CUSTOMER,u.USER,u.DASHBOARD,u.EDGE]}configForm(){return this.createRelationConfigForm}onConfigurationSet(e){this.createRelationConfigForm=this.fb.group({direction:[e?e.direction:null,[N.required]],entityType:[e?e.entityType:null,[N.required]],entityNamePattern:[e?e.entityNamePattern:null,[]],entityTypePattern:[e?e.entityTypePattern:null,[]],relationType:[e?e.relationType:null,[N.required]],createEntityIfNotExists:[!!e&&e.createEntityIfNotExists,[]],removeCurrentRelations:[!!e&&e.removeCurrentRelations,[]],changeOriginatorToRelatedEntity:[!!e&&e.changeOriginatorToRelatedEntity,[]]})}validatorTriggers(){return["entityType","createEntityIfNotExists"]}updateValidators(e){const t=this.createRelationConfigForm.get("entityType").value;if(t?this.createRelationConfigForm.get("entityNamePattern").setValidators([N.required,N.pattern(/.*\S.*/)]):this.createRelationConfigForm.get("entityNamePattern").setValidators([]),!t||t!==u.DEVICE&&t!==u.ASSET)this.createRelationConfigForm.get("entityTypePattern").setValidators([]);else{const e=[N.pattern(/.*\S.*/)];this.createRelationConfigForm.get("createEntityIfNotExists").value&&e.push(N.required),this.createRelationConfigForm.get("entityTypePattern").setValidators(e)}this.createRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e}),this.createRelationConfigForm.get("entityTypePattern").updateValueAndValidity({emitEvent:e})}prepareOutputConfig(e){return e.entityNamePattern=e.entityNamePattern?e.entityNamePattern.trim():null,e.entityTypePattern=e.entityTypePattern?e.entityTypePattern.trim():null,e}static{this.ɵfac=function(e){return new(e||He)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:He,selectors:[["tb-action-node-create-relation-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:36,vars:19,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[1,"tb-form-panel","stroked","no-padding-bottom"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-col"],["hideRequiredMarker","",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","direction"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","relationType"],[1,"flex","flex-row","gap-4"],["showLabel","","required","","formControlName","entityType",1,"flex-1",3,"allowedEntityTypes"],["class","mat-block flex-1",4,"ngIf"],[3,"hintText",4,"ngIf"],["style","margin-bottom: 18px","class","tb-form-row no-border no-padding",3,"tb-hint-tooltip-icon",4,"ngIf"],[1,"tb-form-panel","stroked","no-padding"],[1,"tb-settings"],[2,"padding","16px"],[1,"tb-form-panel","no-border","no-padding-top"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","removeCurrentRelations",1,"mat-slide"],["formControlName","changeOriginatorToRelatedEntity",1,"mat-slide"],[3,"value"],[1,"mat-block","flex-1"],["required","","matInput","","formControlName","entityNamePattern"],["matInput","","formControlName","entityTypePattern"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding",2,"margin-bottom","18px",3,"tb-hint-tooltip-icon"],["formControlName","createEntityIfNotExists",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.relation-parameters"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3)(5,"mat-form-field",4)(6,"mat-label",5),t.ɵɵtext(7,"relation.direction"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",6),t.ɵɵtemplate(9,_e,3,4,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelement(10,"tb-relation-type-autocomplete",8),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"div",1)(12,"div",2),t.ɵɵtext(13,"tb.rulenode.target-entity"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"div",9),t.ɵɵelement(15,"tb-entity-type-select",10),t.ɵɵtemplate(16,je,5,3,"mat-form-field",11)(17,Ge,4,0,"mat-form-field",11),t.ɵɵelementEnd(),t.ɵɵtemplate(18,Ke,1,1,"tb-example-hint",12)(19,Ue,5,6,"div",13),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"section",14)(21,"mat-expansion-panel",15)(22,"mat-expansion-panel-header",16)(23,"mat-panel-title",5),t.ɵɵtext(24,"tb.rulenode.advanced-settings"),t.ɵɵelementEnd()(),t.ɵɵelementStart(25,"div",17)(26,"div",18),t.ɵɵpipe(27,"translate"),t.ɵɵelementStart(28,"mat-slide-toggle",19),t.ɵɵtext(29),t.ɵɵpipe(30,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(31,"div",18),t.ɵɵpipe(32,"translate"),t.ɵɵelementStart(33,"mat-slide-toggle",20),t.ɵɵtext(34),t.ɵɵpipe(35,"translate"),t.ɵɵelementEnd()()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.createRelationConfigForm),t.ɵɵadvance(9),t.ɵɵproperty("ngForOf",n.directionTypes),t.ɵɵadvance(6),t.ɵɵproperty("allowedEntityTypes",n.allowedEntityTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.createRelationConfigForm.get("entityType").value&&n.createRelationConfigForm.get("entityType").value!==n.entityType.TENANT),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.createRelationConfigForm.get("entityType").value===n.entityType.DEVICE||n.createRelationConfigForm.get("entityType").value===n.entityType.ASSET),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.createRelationConfigForm.get("entityType").value===n.entityType.CUSTOMER||n.createRelationConfigForm.get("entityType").value===n.entityType.DEVICE||n.createRelationConfigForm.get("entityType").value===n.entityType.ASSET),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.createRelationConfigForm.get("entityType").value===n.entityType.CUSTOMER||n.createRelationConfigForm.get("entityType").value===n.entityType.DEVICE||n.createRelationConfigForm.get("entityType").value===n.entityType.ASSET),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(27,11,"tb.rulenode.remove-current-relations-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(30,13,"tb.rulenode.remove-current-relations")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(32,15,"tb.rulenode.change-originator-to-related-entity-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(35,17,"tb.rulenode.change-originator-to-related-entity")," "))},dependencies:t.ɵɵgetComponentDepsFactory(He),encapsulation:2})}}function ze(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",13),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.directionTypeTranslations.get(e))," ")}}function $e(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",18)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",19),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,e.entityTypeNamePatternTranslation.get(e.deleteRelationConfigForm.get("entityType").value)))}}function Qe(e,n){1&e&&t.ɵɵelement(0,"tb-example-hint",20),2&e&&t.ɵɵproperty("hintText","tb.rulenode.kv-map-single-pattern-hint")}function Je(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"div",14),t.ɵɵelement(2,"tb-entity-type-select",15),t.ɵɵtemplate(3,$e,5,3,"mat-form-field",16),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Qe,1,1,"tb-example-hint",17),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵproperty("allowedEntityTypes",e.allowedEntityTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.deleteRelationConfigForm.get("entityType").value&&e.deleteRelationConfigForm.get("entityType").value!==e.entityType.TENANT),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.deleteRelationConfigForm.get("entityType").value&&e.deleteRelationConfigForm.get("entityType").value!==e.entityType.TENANT)}}e("CreateRelationConfigComponent",He);class Ye extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(d),this.directionTypeTranslations=new Map([[d.FROM,"tb.rulenode.del-relation-direction-from"],[d.TO,"tb.rulenode.del-relation-direction-to"]]),this.entityTypeNamePatternTranslation=new Map([[u.DEVICE,"tb.rulenode.device-name-pattern"],[u.ASSET,"tb.rulenode.asset-name-pattern"],[u.ENTITY_VIEW,"tb.rulenode.entity-view-name-pattern"],[u.CUSTOMER,"tb.rulenode.customer-title-pattern"],[u.USER,"tb.rulenode.user-name-pattern"],[u.DASHBOARD,"tb.rulenode.dashboard-name-pattern"],[u.EDGE,"tb.rulenode.edge-name-pattern"]]),this.entityType=u,this.allowedEntityTypes=[u.DEVICE,u.ASSET,u.ENTITY_VIEW,u.TENANT,u.CUSTOMER,u.USER,u.DASHBOARD,u.EDGE]}configForm(){return this.deleteRelationConfigForm}onConfigurationSet(e){this.deleteRelationConfigForm=this.fb.group({deleteForSingleEntity:[!!e&&e.deleteForSingleEntity,[]],direction:[e?e.direction:null,[N.required]],entityType:[e?e.entityType:null,[]],entityNamePattern:[e?e.entityNamePattern:null,[]],relationType:[e?e.relationType:null,[N.required]]})}validatorTriggers(){return["deleteForSingleEntity","entityType"]}updateValidators(e){const t=this.deleteRelationConfigForm.get("deleteForSingleEntity").value,n=this.deleteRelationConfigForm.get("entityType").value;t?this.deleteRelationConfigForm.get("entityType").setValidators([N.required]):this.deleteRelationConfigForm.get("entityType").setValidators([]),t&&n&&n!==u.TENANT?this.deleteRelationConfigForm.get("entityNamePattern").setValidators([N.required,N.pattern(/.*\S.*/)]):this.deleteRelationConfigForm.get("entityNamePattern").setValidators([]),this.deleteRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:!1}),this.deleteRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e})}prepareOutputConfig(e){return e.entityNamePattern=e.entityNamePattern?e.entityNamePattern.trim():null,e}static{this.ɵfac=function(e){return new(e||Ye)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ye,selectors:[["tb-action-node-delete-relation-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:18,vars:9,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[1,"tb-form-panel","stroked","no-padding-bottom"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-col"],["hideRequiredMarker","",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","direction"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","relationType"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","deleteForSingleEntity",1,"mat-slide"],[4,"ngIf"],[3,"value"],[1,"flex","flex-row","gap-2.5"],["showLabel","","required","","formControlName","entityType",1,"flex-1",3,"allowedEntityTypes"],["class","mat-block flex-1",4,"ngIf"],[3,"hintText",4,"ngIf"],[1,"mat-block","flex-1"],["required","","matInput","","formControlName","entityNamePattern"],[3,"hintText"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.relation-parameters"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3)(5,"mat-form-field",4)(6,"mat-label",5),t.ɵɵtext(7,"relation.direction"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",6),t.ɵɵtemplate(9,ze,3,4,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelement(10,"tb-relation-type-autocomplete",8),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"div",9)(12,"div",10),t.ɵɵpipe(13,"translate"),t.ɵɵelementStart(14,"mat-slide-toggle",11),t.ɵɵtext(15),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(17,Je,5,3,"div",12),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.deleteRelationConfigForm),t.ɵɵadvance(9),t.ɵɵproperty("ngForOf",n.directionTypes),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(13,5,"tb.rulenode.delete-relation-with-specific-entity-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(16,7,"tb.rulenode.delete-relation-with-specific-entity")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deleteRelationConfigForm.get("deleteForSingleEntity").value))},dependencies:t.ɵɵgetComponentDepsFactory(Ye),encapsulation:2})}}e("DeleteRelationConfigComponent",Ye);class We extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.deviceProfile}onConfigurationSet(e){this.deviceProfile=this.fb.group({persistAlarmRulesState:[!!e&&e.persistAlarmRulesState],fetchAlarmRulesStateOnStart:[!!e&&e.fetchAlarmRulesStateOnStart]})}validatorTriggers(){return["persistAlarmRulesState"]}updateValidators(e){this.deviceProfile.get("persistAlarmRulesState").value?this.deviceProfile.get("fetchAlarmRulesStateOnStart").enable({emitEvent:!1}):(this.deviceProfile.get("fetchAlarmRulesStateOnStart").setValue(!1,{emitEvent:!1}),this.deviceProfile.get("fetchAlarmRulesStateOnStart").disable({emitEvent:!1})),this.deviceProfile.get("fetchAlarmRulesStateOnStart").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||We)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:We,selectors:[["tb-device-profile-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:13,vars:13,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-hint","tb-primary-fill"],[1,"tb-form-row","no-border","no-padding","slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","persistAlarmRulesState",1,"mat-slide"],["formControlName","fetchAlarmRulesStateOnStart",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.device-profile-node-hint"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2),t.ɵɵpipe(4,"translate"),t.ɵɵelementStart(5,"mat-slide-toggle",3),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",2),t.ɵɵpipe(9,"translate"),t.ɵɵelementStart(10,"mat-slide-toggle",4),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.deviceProfile),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(4,5,"tb.rulenode.persist-alarm-rules-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,7,"tb.rulenode.persist-alarm-rules")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(9,9,"tb.rulenode.fetch-alarm-rules-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,11,"tb.rulenode.fetch-alarm-rules")," "))},dependencies:t.ɵɵgetComponentDepsFactory(We),encapsulation:2})}}e("DeviceProfileConfigComponent",We);const Xe=["jsFuncComponent"],Ze=["tbelFuncComponent"],et=()=>["prevMsg","prevMetadata","prevMsgType"];function tt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.message-count-required")," "))}function nt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-message-count-message")," "))}function rt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.period-seconds-required")," "))}function at(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-period-seconds-message")," "))}function it(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-select",22)(1,"tb-toggle-option",23),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"tb-toggle-option",23),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵproperty("value",e.scriptLanguage.TBEL),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,4,"tb.rulenode.script-lang-tbel")," "),t.ɵɵadvance(2),t.ɵɵproperty("value",e.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,6,"tb.rulenode.script-lang-js")," ")}}function ot(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",18,0),t.ɵɵtemplate(2,it,7,8,"tb-toggle-select",19),t.ɵɵelementStart(3,"button",20),t.ɵɵpipe(4,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(5,"mat-icon",21),t.ɵɵtext(6,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(5,et)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.tbelEnabled),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(4,3,e.testScriptLabel))}}function lt(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",24,1)(2,"tb-toggle-select",22)(3,"tb-toggle-option",23),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"tb-toggle-option",23),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"button",20),t.ɵɵpipe(10,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(11,"mat-icon",21),t.ɵɵtext(12,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(14,et))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵproperty("value",e.scriptLanguage.TBEL),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,8,"tb.rulenode.script-lang-tbel")," "),t.ɵɵadvance(2),t.ɵɵproperty("value",e.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(8,10,"tb.rulenode.script-lang-js")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(10,12,e.testScriptLabel))}}class st extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.allowedEntityTypes=[u.DEVICE,u.ASSET,u.ENTITY_VIEW,u.CUSTOMER,u.USER,u.DASHBOARD],this.additionEntityTypes={TENANT:this.translate.instant("tb.rulenode.current-tenant"),RULE_NODE:this.translate.instant("tb.rulenode.current-rule-node")},this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-generator-function"}configForm(){return this.generatorConfigForm}onConfigurationSet(e){this.generatorConfigForm=this.fb.group({msgCount:[e?e.msgCount:null,[N.required,N.min(0)]],periodInSeconds:[e?e.periodInSeconds:null,[N.required,N.min(1)]],originator:[e?e.originator:{id:null,entityType:u.RULE_NODE},[]],scriptLang:[e?e.scriptLang:s.JS,[N.required]],jsScript:[e?e.jsScript:null,[]],tbelScript:[e?e.tbelScript:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.generatorConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.generatorConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.generatorConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.generatorConfigForm.get("jsScript").setValidators(t===s.JS?[N.required]:[]),this.generatorConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.generatorConfigForm.get("tbelScript").setValidators(t===s.TBEL?[N.required]:[]),this.generatorConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return{msgCount:P(e?.msgCount)?e?.msgCount:0,periodInSeconds:P(e?.periodInSeconds)?e?.periodInSeconds:1,originator:{id:P(e?.originatorId)?e?.originatorId:null,entityType:P(e?.originatorType)?e?.originatorType:u.RULE_NODE},scriptLang:P(e?.scriptLang)?e?.scriptLang:s.JS,tbelScript:P(e?.tbelScript)?e?.tbelScript:null,jsScript:P(e?.jsScript)?e?.jsScript:null}}prepareOutputConfig(e){return e.originator?(e.originatorId=e.originator.id,e.originatorType=e.originator.entityType):(e.originatorId=null,e.originatorType=null),delete e.originator,e}testScript(e){const t=this.generatorConfigForm.get("scriptLang").value,n=t===s.JS?"jsScript":"tbelScript",r=t===s.JS?"rulenode/generator_node_script_fn":"rulenode/tbel/generator_node_script_fn",a=this.generatorConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"generate",this.translate.instant("tb.rulenode.generator"),"Generate",["prevMsg","prevMetadata","prevMsgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.generatorConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.generatorConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||st)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:st,selectors:[["tb-action-node-generator-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(Xe,5),t.ɵɵviewQuery(Ze,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:32,vars:12,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","no-padding-bottom","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs"],[1,"flex"],["translate",""],["required","","type","number","min","0","step","1","matInput","","formControlName","msgCount"],[4,"ngIf"],["required","","type","number","min","1","step","1","matInput","","formControlName","periodInSeconds"],["required","true","useAliasEntityTypes","true","formControlName","originator",1,"flex-1",3,"allowedEntityTypes","additionEntityTypes"],[1,"tb-form-panel","stroked"],["expanded","",1,"tb-settings"],["formControlName","jsScript","functionName","Generate","helpId","rulenode/generator_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","tbelScript","functionName","Generate","helpId","rulenode/tbel/generator_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],[1,"flex","flex-row",2,"padding-bottom","16px"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","jsScript","functionName","Generate","helpId","rulenode/generator_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarPrefixButton","","formControlName","scriptLang","appearance","fill",4,"ngIf"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["toolbarPrefixButton","","formControlName","scriptLang","appearance","fill"],[3,"value"],["formControlName","tbelScript","functionName","Generate","helpId","rulenode/tbel/generator_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2)(1,"div",3)(2,"div",4),t.ɵɵtext(3,"tb.rulenode.generation-parameters"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",5)(5,"mat-form-field",6)(6,"mat-label",7),t.ɵɵtext(7,"tb.rulenode.message-count"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",8),t.ɵɵtemplate(9,tt,3,3,"mat-error",9)(10,nt,3,3,"mat-error",9),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field",6)(12,"mat-label",7),t.ɵɵtext(13,"tb.rulenode.period-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",10),t.ɵɵtemplate(15,rt,3,3,"mat-error",9)(16,at,3,3,"mat-error",9),t.ɵɵelementEnd()()(),t.ɵɵelementStart(17,"div",3)(18,"div",4),t.ɵɵtext(19,"tb.rulenode.originator"),t.ɵɵelementEnd(),t.ɵɵelement(20,"tb-entity-select",11),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"div",12)(22,"mat-expansion-panel",13)(23,"mat-expansion-panel-header")(24,"mat-panel-title",7),t.ɵɵtext(25,"tb.rulenode.generator-function"),t.ɵɵelementEnd()(),t.ɵɵtemplate(26,ot,7,6,"tb-js-func",14)(27,lt,13,15,"tb-js-func",15),t.ɵɵelementStart(28,"div",16)(29,"button",17),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.generatorConfigForm),t.ɵɵadvance(9),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("msgCount").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("msgCount").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("periodInSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("periodInSeconds").hasError("min")),t.ɵɵadvance(4),t.ɵɵproperty("allowedEntityTypes",n.allowedEntityTypes)("additionEntityTypes",n.additionEntityTypes),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(31,10,n.testScriptLabel)," "))},dependencies:t.ɵɵgetComponentDepsFactory(st),styles:["[_nghost-%COMP%] .mat-button-toggle-group{min-width:120px;height:24px!important}[_nghost-%COMP%] .mat-button-toggle-group .mat-button-toggle{font-size:0}[_nghost-%COMP%] .mat-button-toggle-group .mat-button-toggle .mat-button-toggle-button{height:20px!important;line-height:20px!important;border:none!important}[_nghost-%COMP%] .mat-button-toggle-group .mat-button-toggle .mat-button-toggle-button .mat-button-toggle-label-content{font-size:14px!important;line-height:20px!important}@media screen and (min-width: 599px){[_nghost-%COMP%] .tb-entity-select{display:flex;flex-direction:row;gap:16px}}[_nghost-%COMP%] .tb-entity-select tb-entity-type-select{flex:1}[_nghost-%COMP%] .tb-entity-select tb-entity-autocomplete{flex:1}[_nghost-%COMP%] .tb-entity-select tb-entity-autocomplete mat-form-field{width:100%!important}"]})}}var pt;e("GeneratorConfigComponent",st),function(e){e.CUSTOMER="CUSTOMER",e.TENANT="TENANT",e.RELATED="RELATED",e.ALARM_ORIGINATOR="ALARM_ORIGINATOR",e.ENTITY="ENTITY"}(pt||(pt={}));const mt=new Map([[pt.CUSTOMER,"tb.rulenode.originator-customer"],[pt.TENANT,"tb.rulenode.originator-tenant"],[pt.RELATED,"tb.rulenode.originator-related"],[pt.ALARM_ORIGINATOR,"tb.rulenode.originator-alarm-originator"],[pt.ENTITY,"tb.rulenode.originator-entity"]]),dt=new Map([[pt.CUSTOMER,"tb.rulenode.originator-customer-desc"],[pt.TENANT,"tb.rulenode.originator-tenant-desc"],[pt.RELATED,"tb.rulenode.originator-related-entity-desc"],[pt.ALARM_ORIGINATOR,"tb.rulenode.originator-alarm-originator-desc"],[pt.ENTITY,"tb.rulenode.originator-entity-by-name-pattern-desc"]]),ut=[c.createdTime,c.name,{value:"type",name:"tb.rulenode.profile-name",keyName:"originatorProfileName"},c.firstName,c.lastName,c.email,c.title,c.country,c.state,c.city,c.address,c.address2,c.zip,c.phone,c.label,{value:"id",name:"tb.rulenode.id",keyName:"id"},{value:"additionalInfo",name:"tb.rulenode.additional-info",keyName:"additionalInfo"}],ct=new Map([["type","profileName"],["createdTime","createdTime"],["name","name"],["firstName","firstName"],["lastName","lastName"],["email","email"],["title","title"],["country","country"],["state","state"],["city","city"],["address","address"],["address2","address2"],["zip","zip"],["phone","phone"],["label","label"],["id","id"],["additionalInfo","additionalInfo"]]);var ft;!function(e){e.CIRCLE="CIRCLE",e.POLYGON="POLYGON"}(ft||(ft={}));const gt=new Map([[ft.CIRCLE,"tb.rulenode.perimeter-circle"],[ft.POLYGON,"tb.rulenode.perimeter-polygon"]]);var ht;!function(e){e.MILLISECONDS="MILLISECONDS",e.SECONDS="SECONDS",e.MINUTES="MINUTES",e.HOURS="HOURS",e.DAYS="DAYS"}(ht||(ht={}));const yt=new Map([[ht.MILLISECONDS,"tb.rulenode.time-unit-milliseconds"],[ht.SECONDS,"tb.rulenode.time-unit-seconds"],[ht.MINUTES,"tb.rulenode.time-unit-minutes"],[ht.HOURS,"tb.rulenode.time-unit-hours"],[ht.DAYS,"tb.rulenode.time-unit-days"]]);var bt;!function(e){e.METER="METER",e.KILOMETER="KILOMETER",e.FOOT="FOOT",e.MILE="MILE",e.NAUTICAL_MILE="NAUTICAL_MILE"}(bt||(bt={}));const vt=new Map([[bt.METER,"tb.rulenode.range-unit-meter"],[bt.KILOMETER,"tb.rulenode.range-unit-kilometer"],[bt.FOOT,"tb.rulenode.range-unit-foot"],[bt.MILE,"tb.rulenode.range-unit-mile"],[bt.NAUTICAL_MILE,"tb.rulenode.range-unit-nautical-mile"]]);var xt;!function(e){e.ID="ID",e.TITLE="TITLE",e.COUNTRY="COUNTRY",e.STATE="STATE",e.CITY="CITY",e.ZIP="ZIP",e.ADDRESS="ADDRESS",e.ADDRESS2="ADDRESS2",e.PHONE="PHONE",e.EMAIL="EMAIL",e.ADDITIONAL_INFO="ADDITIONAL_INFO"}(xt||(xt={}));const Ct=new Map([[xt.ID,"tb.rulenode.entity-details-id"],[xt.TITLE,"tb.rulenode.entity-details-title"],[xt.COUNTRY,"tb.rulenode.entity-details-country"],[xt.STATE,"tb.rulenode.entity-details-state"],[xt.CITY,"tb.rulenode.entity-details-city"],[xt.ZIP,"tb.rulenode.entity-details-zip"],[xt.ADDRESS,"tb.rulenode.entity-details-address"],[xt.ADDRESS2,"tb.rulenode.entity-details-address2"],[xt.PHONE,"tb.rulenode.entity-details-phone"],[xt.EMAIL,"tb.rulenode.entity-details-email"],[xt.ADDITIONAL_INFO,"tb.rulenode.entity-details-additional_info"]]);var St;!function(e){e.FIRST="FIRST",e.LAST="LAST",e.ALL="ALL"}(St||(St={}));const Tt=new Map([[St.FIRST,"tb.rulenode.first"],[St.LAST,"tb.rulenode.last"],[St.ALL,"tb.rulenode.all"]]),It=new Map([[St.FIRST,"tb.rulenode.first-mode-hint"],[St.LAST,"tb.rulenode.last-mode-hint"],[St.ALL,"tb.rulenode.all-mode-hint"]]);var Et,Ft;!function(e){e.ASC="ASC",e.DESC="DESC"}(Et||(Et={})),function(e){e.ATTRIBUTES="ATTRIBUTES",e.LATEST_TELEMETRY="LATEST_TELEMETRY",e.FIELDS="FIELDS"}(Ft||(Ft={}));const qt=new Map([[Ft.ATTRIBUTES,"tb.rulenode.attributes"],[Ft.LATEST_TELEMETRY,"tb.rulenode.latest-telemetry"],[Ft.FIELDS,"tb.rulenode.fields"]]),At=new Map([[Ft.ATTRIBUTES,"tb.rulenode.add-mapped-attribute-to"],[Ft.LATEST_TELEMETRY,"tb.rulenode.add-mapped-latest-telemetry-to"],[Ft.FIELDS,"tb.rulenode.add-mapped-fields-to"]]),kt=new Map([[Et.ASC,"tb.rulenode.ascending"],[Et.DESC,"tb.rulenode.descending"]]);var Nt;!function(e){e.STANDARD="STANDARD",e.FIFO="FIFO"}(Nt||(Nt={}));const wt=new Map([[Nt.STANDARD,"tb.rulenode.sqs-queue-standard"],[Nt.FIFO,"tb.rulenode.sqs-queue-fifo"]]),Mt=["anonymous","basic","cert.PEM"],Bt=new Map([["anonymous","tb.rulenode.credentials-anonymous"],["basic","tb.rulenode.credentials-basic"],["cert.PEM","tb.rulenode.credentials-pem"]]),Vt=["sas","cert.PEM"],Ot=new Map([["sas","tb.rulenode.credentials-sas"],["cert.PEM","tb.rulenode.credentials-pem"]]);var Dt;!function(e){e.GET="GET",e.POST="POST",e.PUT="PUT",e.DELETE="DELETE"}(Dt||(Dt={}));const Lt=["US-ASCII","ISO-8859-1","UTF-8","UTF-16BE","UTF-16LE","UTF-16"],Pt=new Map([["US-ASCII","tb.rulenode.charset-us-ascii"],["ISO-8859-1","tb.rulenode.charset-iso-8859-1"],["UTF-8","tb.rulenode.charset-utf-8"],["UTF-16BE","tb.rulenode.charset-utf-16be"],["UTF-16LE","tb.rulenode.charset-utf-16le"],["UTF-16","tb.rulenode.charset-utf-16"]]);var Rt;!function(e){e.CUSTOM="CUSTOM",e.ADD="ADD",e.SUB="SUB",e.MULT="MULT",e.DIV="DIV",e.SIN="SIN",e.SINH="SINH",e.COS="COS",e.COSH="COSH",e.TAN="TAN",e.TANH="TANH",e.ACOS="ACOS",e.ASIN="ASIN",e.ATAN="ATAN",e.ATAN2="ATAN2",e.EXP="EXP",e.EXPM1="EXPM1",e.SQRT="SQRT",e.CBRT="CBRT",e.GET_EXP="GET_EXP",e.HYPOT="HYPOT",e.LOG="LOG",e.LOG10="LOG10",e.LOG1P="LOG1P",e.CEIL="CEIL",e.FLOOR="FLOOR",e.FLOOR_DIV="FLOOR_DIV",e.FLOOR_MOD="FLOOR_MOD",e.ABS="ABS",e.MIN="MIN",e.MAX="MAX",e.POW="POW",e.SIGNUM="SIGNUM",e.RAD="RAD",e.DEG="DEG"}(Rt||(Rt={}));const _t=new Map([[Rt.CUSTOM,{value:Rt.CUSTOM,name:"Custom Function",description:"Use this function to specify complex mathematical expression.",minArgs:1,maxArgs:16}],[Rt.ADD,{value:Rt.ADD,name:"Addition",description:"x + y",minArgs:2,maxArgs:2}],[Rt.SUB,{value:Rt.SUB,name:"Subtraction",description:"x - y",minArgs:2,maxArgs:2}],[Rt.MULT,{value:Rt.MULT,name:"Multiplication",description:"x * y",minArgs:2,maxArgs:2}],[Rt.DIV,{value:Rt.DIV,name:"Division",description:"x / y",minArgs:2,maxArgs:2}],[Rt.SIN,{value:Rt.SIN,name:"Sine",description:"Returns the trigonometric sine of an angle in radians.",minArgs:1,maxArgs:1}],[Rt.SINH,{value:Rt.SINH,name:"Hyperbolic sine",description:"Returns the hyperbolic sine of an argument.",minArgs:1,maxArgs:1}],[Rt.COS,{value:Rt.COS,name:"Cosine",description:"Returns the trigonometric cosine of an angle in radians.",minArgs:1,maxArgs:1}],[Rt.COSH,{value:Rt.COSH,name:"Hyperbolic cosine",description:"Returns the hyperbolic cosine of an argument.",minArgs:1,maxArgs:1}],[Rt.TAN,{value:Rt.TAN,name:"Tangent",description:"Returns the trigonometric tangent of an angle in radians",minArgs:1,maxArgs:1}],[Rt.TANH,{value:Rt.TANH,name:"Hyperbolic tangent",description:"Returns the hyperbolic tangent of an argument",minArgs:1,maxArgs:1}],[Rt.ACOS,{value:Rt.ACOS,name:"Arc cosine",description:"Returns the arc cosine of an argument",minArgs:1,maxArgs:1}],[Rt.ASIN,{value:Rt.ASIN,name:"Arc sine",description:"Returns the arc sine of an argument",minArgs:1,maxArgs:1}],[Rt.ATAN,{value:Rt.ATAN,name:"Arc tangent",description:"Returns the arc tangent of an argument",minArgs:1,maxArgs:1}],[Rt.ATAN2,{value:Rt.ATAN2,name:"2-argument arc tangent",description:"Returns the angle theta from the conversion of rectangular coordinates (x, y) to polar coordinates (r, theta)",minArgs:2,maxArgs:2}],[Rt.EXP,{value:Rt.EXP,name:"Exponential",description:"Returns Euler's number e raised to the power of an argument",minArgs:1,maxArgs:1}],[Rt.EXPM1,{value:Rt.EXPM1,name:"Exponential minus one",description:"Returns Euler's number e raised to the power of an argument minus one",minArgs:1,maxArgs:1}],[Rt.SQRT,{value:Rt.SQRT,name:"Square",description:"Returns the correctly rounded positive square root of an argument",minArgs:1,maxArgs:1}],[Rt.CBRT,{value:Rt.CBRT,name:"Cube root",description:"Returns the cube root of an argument",minArgs:1,maxArgs:1}],[Rt.GET_EXP,{value:Rt.GET_EXP,name:"Get exponent",description:"Returns the unbiased exponent used in the representation of an argument",minArgs:1,maxArgs:1}],[Rt.HYPOT,{value:Rt.HYPOT,name:"Square root",description:"Returns the square root of the squares of the arguments",minArgs:2,maxArgs:2}],[Rt.LOG,{value:Rt.LOG,name:"Logarithm",description:"Returns the natural logarithm of an argument",minArgs:1,maxArgs:1}],[Rt.LOG10,{value:Rt.LOG10,name:"Base 10 logarithm",description:"Returns the base 10 logarithm of an argument",minArgs:1,maxArgs:1}],[Rt.LOG1P,{value:Rt.LOG1P,name:"Logarithm of the sum",description:"Returns the natural logarithm of the sum of an argument",minArgs:1,maxArgs:1}],[Rt.CEIL,{value:Rt.CEIL,name:"Ceiling",description:"Returns the smallest (closest to negative infinity) of an argument",minArgs:1,maxArgs:1}],[Rt.FLOOR,{value:Rt.FLOOR,name:"Floor",description:"Returns the largest (closest to positive infinity) of an argument",minArgs:1,maxArgs:1}],[Rt.FLOOR_DIV,{value:Rt.FLOOR_DIV,name:"Floor division",description:"Returns the largest (closest to positive infinity) of the arguments",minArgs:2,maxArgs:2}],[Rt.FLOOR_MOD,{value:Rt.FLOOR_MOD,name:"Floor modulus",description:"Returns the floor modulus of the arguments",minArgs:2,maxArgs:2}],[Rt.ABS,{value:Rt.ABS,name:"Absolute",description:"Returns the absolute value of an argument",minArgs:1,maxArgs:1}],[Rt.MIN,{value:Rt.MIN,name:"Min",description:"Returns the smaller of the arguments",minArgs:2,maxArgs:2}],[Rt.MAX,{value:Rt.MAX,name:"Max",description:"Returns the greater of the arguments",minArgs:2,maxArgs:2}],[Rt.POW,{value:Rt.POW,name:"Raise to a power",description:"Returns the value of the first argument raised to the power of the second argument",minArgs:2,maxArgs:2}],[Rt.SIGNUM,{value:Rt.SIGNUM,name:"Sign of a real number",description:"Returns the signum function of the argument",minArgs:1,maxArgs:1}],[Rt.RAD,{value:Rt.RAD,name:"Radian",description:"Converts an angle measured in degrees to an approximately equivalent angle measured in radians",minArgs:1,maxArgs:1}],[Rt.DEG,{value:Rt.DEG,name:"Degrees",description:"Converts an angle measured in radians to an approximately equivalent angle measured in degrees.",minArgs:1,maxArgs:1}]]);var jt,Gt,Kt;!function(e){e.MESSAGE_BODY="MESSAGE_BODY",e.MESSAGE_METADATA="MESSAGE_METADATA",e.ATTRIBUTE="ATTRIBUTE",e.TIME_SERIES="TIME_SERIES",e.CONSTANT="CONSTANT"}(jt||(jt={})),function(e){e.MESSAGE_BODY="MESSAGE_BODY",e.MESSAGE_METADATA="MESSAGE_METADATA",e.ATTRIBUTE="ATTRIBUTE",e.TIME_SERIES="TIME_SERIES"}(Gt||(Gt={})),function(e){e.DATA="DATA",e.METADATA="METADATA"}(Kt||(Kt={}));const Ut=new Map([[Kt.DATA,"tb.rulenode.message-to-metadata"],[Kt.METADATA,"tb.rulenode.metadata-to-message"]]),Ht=(new Map([[Kt.DATA,"tb.rulenode.from-message"],[Kt.METADATA,"tb.rulenode.from-metadata"]]),new Map([[Kt.DATA,"tb.rulenode.message"],[Kt.METADATA,"tb.rulenode.metadata"]])),zt=new Map([[Kt.DATA,"tb.rulenode.message"],[Kt.METADATA,"tb.rulenode.message-metadata"]]),$t=new Map([[jt.MESSAGE_BODY,{name:"tb.rulenode.message-body-type",description:"Fetch argument value from incoming message"}],[jt.MESSAGE_METADATA,{name:"tb.rulenode.message-metadata-type",description:"Fetch argument value from incoming message metadata"}],[jt.ATTRIBUTE,{name:"tb.rulenode.attribute-type",description:"Fetch attribute value from database"}],[jt.TIME_SERIES,{name:"tb.rulenode.time-series-type",description:"Fetch latest time-series value from database"}],[jt.CONSTANT,{name:"tb.rulenode.constant-type",description:"Define constant value"}]]),Qt=new Map([[Gt.MESSAGE_BODY,{name:"tb.rulenode.message-body-type",description:"Add result to the outgoing message"}],[Gt.MESSAGE_METADATA,{name:"tb.rulenode.message-metadata-type",description:"Add result to the outgoing message metadata"}],[Gt.ATTRIBUTE,{name:"tb.rulenode.attribute-type",description:"Store result as an entity attribute in the database"}],[Gt.TIME_SERIES,{name:"tb.rulenode.time-series-type",description:"Store result as an entity time-series in the database"}]]),Jt=["x","y","z","a","b","c","d","k","l","m","n","o","p","r","s","t"];var Yt,Wt;!function(e){e.SHARED_SCOPE="SHARED_SCOPE",e.SERVER_SCOPE="SERVER_SCOPE",e.CLIENT_SCOPE="CLIENT_SCOPE"}(Yt||(Yt={})),function(e){e.SHARED_SCOPE="SHARED_SCOPE",e.SERVER_SCOPE="SERVER_SCOPE"}(Wt||(Wt={}));const Xt=new Map([[Yt.SHARED_SCOPE,"tb.rulenode.shared-scope"],[Yt.SERVER_SCOPE,"tb.rulenode.server-scope"],[Yt.CLIENT_SCOPE,"tb.rulenode.client-scope"]]);var Zt;!function(e){e.ON_FIRST_MESSAGE="ON_FIRST_MESSAGE",e.ON_EACH_MESSAGE="ON_EACH_MESSAGE"}(Zt||(Zt={}));const en=new Map([[Zt.ON_EACH_MESSAGE,{value:!0,name:"tb.rulenode.presence-monitoring-strategy-on-each-message"}],[Zt.ON_FIRST_MESSAGE,{value:!1,name:"tb.rulenode.presence-monitoring-strategy-on-first-message"}]]),tn=2147483648,nn=e=>({perimeterKeyName:e});function rn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.latitude-field-name-required")," "))}function an(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.longitude-field-name-required")," "))}function on(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.perimeterTypeTranslationMap.get(e))," ")}}function ln(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.perimeter-key-name-required")," "))}function sn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",23)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",24),t.ɵɵtemplate(5,ln,3,3,"mat-error",6),t.ɵɵelementStart(6,"mat-hint"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"tb.rulenode.perimeter-key-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("perimeterKeyName").hasError("required")),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,5,"tb.rulenode.perimeter-key-name-hint"))}}function pn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.circle-center-latitude-required")," "))}function mn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.circle-center-longitude-required")," "))}function dn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.range-required")," "))}function un(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.rangeUnitTranslationMap.get(e))," ")}}function cn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.range-units-required")," "))}function fn(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",9)(1,"div",3)(2,"mat-form-field",25)(3,"mat-label"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",26),t.ɵɵtemplate(7,pn,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-form-field",25)(9,"mat-label"),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",27),t.ɵɵtemplate(13,mn,3,3,"mat-error",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"div",3)(15,"mat-form-field",25)(16,"mat-label"),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(19,"input",28),t.ɵɵtemplate(20,dn,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",25)(22,"mat-label"),t.ɵɵtext(23),t.ɵɵpipe(24,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-select",29),t.ɵɵtemplate(26,un,3,4,"mat-option",12),t.ɵɵelementEnd(),t.ɵɵtemplate(27,cn,3,3,"mat-error",6),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,9,"tb.rulenode.circle-center-latitude")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("centerLatitude").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(11,11,"tb.rulenode.circle-center-longitude")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("centerLongitude").hasError("required")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(18,13,"tb.rulenode.range")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("range").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(24,15,"tb.rulenode.range-units")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.rangeUnits),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("rangeUnit").hasError("required"))}}function gn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.polygon-definition-required")," "))}function hn(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",9)(1,"mat-form-field",30)(2,"mat-label",31),t.ɵɵtext(3,"tb.rulenode.polygon-definition"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",32),t.ɵɵelementStart(5,"mat-icon",33),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7," help "),t.ɵɵelementEnd(),t.ɵɵtemplate(8,gn,3,3,"mat-error",6),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(6,2,"tb.rulenode.polygon-definition-hint")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("polygonsDefinition").hasError("required"))}}function yn(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",22),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",r.presenceMonitoringStrategies.get(e).value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.presenceMonitoringStrategies.get(e).name)," ")}}function bn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-inside-duration-value-required")," "))}function vn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function xn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function Cn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.timeUnitsTranslationMap.get(e))," ")}}function Sn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-outside-duration-value-required")," "))}function Tn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function In(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function En(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.timeUnitsTranslationMap.get(e))," ")}}function Fn(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"div",34)(2,"mat-form-field",35)(3,"mat-label",31),t.ɵɵtext(4,"tb.rulenode.min-inside-duration"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",36),t.ɵɵtemplate(6,bn,3,3,"mat-error",6)(7,vn,3,3,"mat-error",6)(8,xn,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",35)(10,"mat-label",31),t.ɵɵtext(11,"tb.rulenode.min-inside-duration-time-unit"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-select",37),t.ɵɵtemplate(13,Cn,3,4,"mat-option",12),t.ɵɵelementEnd()()(),t.ɵɵelementStart(14,"div",34)(15,"mat-form-field",35)(16,"mat-label",31),t.ɵɵtext(17,"tb.rulenode.min-outside-duration"),t.ɵɵelementEnd(),t.ɵɵelement(18,"input",38),t.ɵɵtemplate(19,Sn,3,3,"mat-error",6)(20,Tn,3,3,"mat-error",6)(21,In,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"mat-form-field",35)(23,"mat-label",31),t.ɵɵtext(24,"tb.rulenode.min-outside-duration-time-unit"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-select",39),t.ɵɵtemplate(26,En,3,4,"mat-option",12),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minInsideDuration").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minInsideDuration").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minInsideDuration").hasError("max")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.timeUnits),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minOutsideDuration").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minOutsideDuration").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minOutsideDuration").hasError("max")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.timeUnits)}}class qn extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.perimeterType=ft,this.perimeterTypes=Object.keys(ft),this.perimeterTypeTranslationMap=gt,this.rangeUnits=Object.keys(bt),this.rangeUnitTranslationMap=vt,this.presenceMonitoringStrategies=en,this.presenceMonitoringStrategyKeys=Array.from(this.presenceMonitoringStrategies.keys()),this.timeUnits=Object.keys(ht),this.timeUnitsTranslationMap=yt,this.defaultPaddingEnable=!0}configForm(){return this.geoActionConfigForm}onConfigurationSet(e){this.geoActionConfigForm=this.fb.group({reportPresenceStatusOnEachMessage:[!e||e.reportPresenceStatusOnEachMessage,[N.required]],latitudeKeyName:[e?e.latitudeKeyName:null,[N.required]],longitudeKeyName:[e?e.longitudeKeyName:null,[N.required]],perimeterType:[e?e.perimeterType:null,[N.required]],fetchPerimeterInfoFromMessageMetadata:[!!e&&e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterKeyName:[e?e.perimeterKeyName:null,[]],centerLatitude:[e?e.centerLatitude:null,[]],centerLongitude:[e?e.centerLatitude:null,[]],range:[e?e.range:null,[]],rangeUnit:[e?e.rangeUnit:null,[]],polygonsDefinition:[e?e.polygonsDefinition:null,[]],minInsideDuration:[e?e.minInsideDuration:null,[N.required,N.min(1),N.max(2147483647)]],minInsideDurationTimeUnit:[e?e.minInsideDurationTimeUnit:null,[N.required]],minOutsideDuration:[e?e.minOutsideDuration:null,[N.required,N.min(1),N.max(2147483647)]],minOutsideDurationTimeUnit:[e?e.minOutsideDurationTimeUnit:null,[N.required]]})}validatorTriggers(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]}updateValidators(e){const t=this.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,n=this.geoActionConfigForm.get("perimeterType").value;t?this.geoActionConfigForm.get("perimeterKeyName").setValidators([N.required]):this.geoActionConfigForm.get("perimeterKeyName").setValidators([]),t||n!==ft.CIRCLE?(this.geoActionConfigForm.get("centerLatitude").setValidators([]),this.geoActionConfigForm.get("centerLongitude").setValidators([]),this.geoActionConfigForm.get("range").setValidators([]),this.geoActionConfigForm.get("rangeUnit").setValidators([]),this.defaultPaddingEnable=!0):(this.geoActionConfigForm.get("centerLatitude").setValidators([N.required,N.min(-90),N.max(90)]),this.geoActionConfigForm.get("centerLongitude").setValidators([N.required,N.min(-180),N.max(180)]),this.geoActionConfigForm.get("range").setValidators([N.required,N.min(0)]),this.geoActionConfigForm.get("rangeUnit").setValidators([N.required]),this.defaultPaddingEnable=!1),t||n!==ft.POLYGON?this.geoActionConfigForm.get("polygonsDefinition").setValidators([]):this.geoActionConfigForm.get("polygonsDefinition").setValidators([N.required]),this.geoActionConfigForm.get("perimeterKeyName").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||qn)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:qn,selectors:[["tb-action-node-gps-geofencing-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:52,vars:42,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-row","gap-4"],[1,"mat-block","max-w-50%","flex-full"],["matInput","","formControlName","latitudeKeyName","required",""],[4,"ngIf"],["matInput","","formControlName","longitudeKeyName","required",""],["translate","",1,"tb-form-hint","tb-primary-fill"],[1,"flex","flex-col"],["hideRequiredMarker","",1,"mat-block","flex-1"],["formControlName","perimeterType"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-row","no-border","no-padding","slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","fetchPerimeterInfoFromMessageMetadata",1,"mat-slide"],["class","mat-block",4,"ngIf"],["class","flex flex-col",4,"ngIf"],[1,"tb-form-panel","stroked","no-padding-bottom"],[1,"flex","flex-col","items-stretch","justify-between","gt-sm:flex-row","lt-md:gap-4"],[1,"tb-form-panel-title"],["formControlName","reportPresenceStatusOnEachMessage","appearance","fill",1,"fetch-to-data-toggle"],[1,"tb-form-hint","tb-primary-fill"],[3,"value"],[1,"mat-block"],["matInput","","formControlName","perimeterKeyName","required",""],[1,"flex-1"],["type","number","min","-90","max","90","step","0.1","matInput","","formControlName","centerLatitude","required",""],["type","number","min","-180","max","180","step","0.1","matInput","","formControlName","centerLongitude","required",""],["type","number","min","0","step","0.1","matInput","","formControlName","range","required",""],["formControlName","rangeUnit","required",""],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["matInput","","formControlName","polygonsDefinition","required",""],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"margin-8","cursor-pointer",3,"matTooltip"],[1,"flex","flex-col","gt-sm:flex-row","gt-sm:gap-2"],[1,"mat-block","flex-1"],["type","number","step","1","min","1","max","2147483647","matInput","","formControlName","minInsideDuration","required",""],["formControlName","minInsideDurationTimeUnit","required",""],["type","number","step","1","min","1","max","2147483647","matInput","","formControlName","minOutsideDuration","required",""],["formControlName","minOutsideDurationTimeUnit","required",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"section",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.coordinate-field-names"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"section")(5,"div",3)(6,"mat-form-field",4)(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",5),t.ɵɵtemplate(11,rn,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",4)(13,"mat-label"),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",7),t.ɵɵtemplate(17,an,3,3,"mat-error",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",8),t.ɵɵtext(19,"tb.rulenode.coordinate-field-hint"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(20,"section",1)(21,"div",2),t.ɵɵtext(22,"tb.rulenode.geofence-configuration"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"section",9)(24,"mat-form-field",10)(25,"mat-label"),t.ɵɵtext(26),t.ɵɵpipe(27,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(28,"mat-select",11),t.ɵɵtemplate(29,on,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(30,"div",13),t.ɵɵpipe(31,"translate"),t.ɵɵpipe(32,"translate"),t.ɵɵelementStart(33,"mat-slide-toggle",14),t.ɵɵtext(34),t.ɵɵpipe(35,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(36,sn,9,7,"mat-form-field",15)(37,fn,28,17,"div",16)(38,hn,9,4,"div",16),t.ɵɵelementEnd()(),t.ɵɵelementStart(39,"section",17)(40,"div",18)(41,"div",19),t.ɵɵtext(42),t.ɵɵpipe(43,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"tb-toggle-select",20),t.ɵɵtemplate(45,yn,3,4,"tb-toggle-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"div",21),t.ɵɵtext(47),t.ɵɵpipe(48,"translate"),t.ɵɵpipe(49,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(50,"section",9),t.ɵɵtemplate(51,Fn,27,8,"div",6),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.geoActionConfigForm),t.ɵɵadvance(8),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,18,"tb.rulenode.latitude-field-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.geoActionConfigForm.get("latitudeKeyName").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,20,"tb.rulenode.longitude-field-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.geoActionConfigForm.get("longitudeKeyName").hasError("required")),t.ɵɵadvance(3),t.ɵɵclassProp("no-padding-bottom",!n.defaultPaddingEnable),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(27,22,"tb.rulenode.perimeter-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.perimeterTypes),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",n.geoActionConfigForm.get("perimeterType").value===n.perimeterType.CIRCLE?t.ɵɵpipeBind2(31,24,"tb.rulenode.fetch-circle-parameter-info-from-metadata-hint",t.ɵɵpureFunction1(38,nn,n.geoActionConfigForm.get("perimeterKeyName").valid?n.geoActionConfigForm.get("perimeterKeyName").value:"ss_perimeter")):t.ɵɵpipeBind2(32,27,"tb.rulenode.fetch-poligon-parameter-info-from-metadata-hint",t.ɵɵpureFunction1(40,nn,n.geoActionConfigForm.get("perimeterKeyName").valid?n.geoActionConfigForm.get("perimeterKeyName").value:"ss_perimeter"))),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(35,30,"tb.rulenode.fetch-perimeter-info-from-metadata")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.geoActionConfigForm.get("perimeterType").value===n.perimeterType.CIRCLE&&!n.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.geoActionConfigForm.get("perimeterType").value===n.perimeterType.POLYGON&&!n.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(43,32,"tb.rulenode.presence-monitoring-strategy")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.presenceMonitoringStrategyKeys),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",!1===n.geoActionConfigForm.get("reportPresenceStatusOnEachMessage").value?t.ɵɵpipeBind1(48,34,"tb.rulenode.presence-monitoring-strategy-on-first-message-hint"):t.ɵɵpipeBind1(49,36,"tb.rulenode.presence-monitoring-strategy-on-each-message-hint")," "),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",!1===n.geoActionConfigForm.get("reportPresenceStatusOnEachMessage").value))},dependencies:t.ɵɵgetComponentDepsFactory(qn),styles:["[_nghost-%COMP%] .slide-toggle[_ngcontent-%COMP%]{margin-bottom:18px}"]})}}e("GpsGeoActionConfigComponent",qn);const An=["jsFuncComponent"],kn=["tbelFuncComponent"],Nn=()=>["msg","metadata","msgType"];function wn(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",8)}function Mn(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",9,0)(2,"button",10),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",11),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,Nn)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function Bn(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",12,1)(2,"button",10),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",11),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,Nn))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}class Vn extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-to-string-function"}configForm(){return this.logConfigForm}onConfigurationSet(e){this.logConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:s.JS,[N.required]],jsScript:[e?e.jsScript:null,[]],tbelScript:[e?e.tbelScript:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.logConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.logConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.logConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.logConfigForm.get("jsScript").setValidators(t===s.JS?[N.required]:[]),this.logConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.logConfigForm.get("tbelScript").setValidators(t===s.TBEL?[N.required]:[]),this.logConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),e}testScript(e){const t=this.logConfigForm.get("scriptLang").value,n=t===s.JS?"jsScript":"tbelScript",r=t===s.JS?"rulenode/log_node_script_fn":"rulenode/tbel/log_node_script_fn",a=this.logConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"string",this.translate.instant("tb.rulenode.to-string"),"ToString",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.logConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.logConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||Vn)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Vn,selectors:[["tb-action-node-log-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(An,5),t.ɵɵviewQuery(kn,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:8,vars:7,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[1,"flex","flex-col",3,"formGroup"],["formControlName","scriptLang",4,"ngIf"],["formControlName","jsScript","functionName","ToString","helpId","rulenode/log_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","tbelScript","functionName","ToString","helpId","rulenode/tbel/log_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],[1,"flex","flex-row"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","scriptLang"],["formControlName","jsScript","functionName","ToString","helpId","rulenode/log_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","tbelScript","functionName","ToString","helpId","rulenode/tbel/log_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2),t.ɵɵtemplate(1,wn,1,0,"tb-script-lang",3)(2,Mn,6,5,"tb-js-func",4)(3,Bn,6,7,"tb-js-func",5),t.ɵɵelementStart(4,"div",6)(5,"button",7),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.logConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.logConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.logConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,5,n.testScriptLabel)," "))},dependencies:t.ɵɵgetComponentDepsFactory(Vn),encapsulation:2})}}function On(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.interval-seconds-required")," "))}function Dn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-interval-seconds-message")," "))}function Ln(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.output-timeseries-key-prefix-required")," "))}e("LogConfigComponent",Vn);class Pn extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.msgCountConfigForm}onConfigurationSet(e){this.msgCountConfigForm=this.fb.group({interval:[e?e.interval:null,[N.required,N.min(1)]],telemetryPrefix:[e?e.telemetryPrefix:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||Pn)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Pn,selectors:[["tb-action-node-msg-count-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:12,vars:4,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block"],["translate",""],["required","","type","number","min","1","step","1","matInput","","formControlName","interval"],[4,"ngIf"],["required","","matInput","","formControlName","telemetryPrefix"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.interval-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,On,3,3,"mat-error",4)(6,Dn,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-form-field",1)(8,"mat-label",2),t.ɵɵtext(9,"tb.rulenode.output-timeseries-key-prefix"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",5),t.ɵɵtemplate(11,Ln,3,3,"mat-error",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.msgCountConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.msgCountConfigForm.get("interval").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.msgCountConfigForm.get("interval").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.msgCountConfigForm.get("telemetryPrefix").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(Pn),encapsulation:2})}}function Rn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.period-seconds-required")," "))}function _n(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-period-0-seconds-message")," "))}function jn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",5)(1,"mat-label",6),t.ɵɵtext(2,"tb.rulenode.period-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",9),t.ɵɵtemplate(4,Rn,3,3,"mat-error",8)(5,_n,3,3,"mat-error",8),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.msgDelayConfigForm.get("periodInSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.msgDelayConfigForm.get("periodInSeconds").hasError("min"))}}function Gn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.period-in-seconds-pattern-required")," "))}function Kn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",10)(1,"mat-label",6),t.ɵɵtext(2,"tb.rulenode.period-in-seconds-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",11),t.ɵɵtemplate(4,Gn,3,3,"mat-error",8),t.ɵɵelementStart(5,"mat-hint",6),t.ɵɵtext(6,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.msgDelayConfigForm.get("periodInSecondsPattern").hasError("required"))}}function Un(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-messages-required")," "))}function Hn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-messages-range")," "))}function zn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-messages-range")," "))}e("MsgCountConfigComponent",Pn);class $n extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.msgDelayConfigForm}onConfigurationSet(e){this.msgDelayConfigForm=this.fb.group({useMetadataPeriodInSecondsPatterns:[!!e&&e.useMetadataPeriodInSecondsPatterns,[]],periodInSeconds:[e?e.periodInSeconds:null,[]],periodInSecondsPattern:[e?e.periodInSecondsPattern:null,[]],maxPendingMsgs:[e?e.maxPendingMsgs:null,[N.required,N.min(1),N.max(1e5)]]})}validatorTriggers(){return["useMetadataPeriodInSecondsPatterns"]}updateValidators(e){this.msgDelayConfigForm.get("useMetadataPeriodInSecondsPatterns").value?(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([N.required]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([])):(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([N.required,N.min(0)])),this.msgDelayConfigForm.get("periodInSecondsPattern").updateValueAndValidity({emitEvent:e}),this.msgDelayConfigForm.get("periodInSeconds").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||$n)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:$n,selectors:[["tb-action-node-msg-delay-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:16,vars:9,consts:[["periodInSecondsPattern",""],[1,"flex","flex-col",3,"formGroup"],["formControlName","useMetadataPeriodInSecondsPatterns"],["translate","",1,"tb-hint"],["class","mat-block",4,"ngIf","ngIfElse"],[1,"mat-block"],["translate",""],["required","","type","number","min","1","max","100000","step","1","matInput","","formControlName","maxPendingMsgs"],[4,"ngIf"],["required","","type","number","min","0","step","1","matInput","","formControlName","periodInSeconds"],["subscriptSizing","dynamic",1,"mat-block"],["required","","matInput","","formControlName","periodInSecondsPattern"]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",1)(1,"mat-checkbox",2),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3),t.ɵɵtext(5,"tb.rulenode.use-metadata-period-in-seconds-patterns-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(6,jn,6,2,"mat-form-field",4)(7,Kn,7,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(9,"mat-form-field",5)(10,"mat-label",6),t.ɵɵtext(11,"tb.rulenode.max-pending-messages"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",7),t.ɵɵtemplate(13,Un,3,3,"mat-error",8)(14,Hn,3,3,"mat-error",8)(15,zn,3,3,"mat-error",8),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵreference(8);t.ɵɵproperty("formGroup",n.msgDelayConfigForm),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,7,"tb.rulenode.use-metadata-period-in-seconds-patterns")," "),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",!0!==n.msgDelayConfigForm.get("useMetadataPeriodInSecondsPatterns").value)("ngIfElse",e),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.msgDelayConfigForm.get("maxPendingMsgs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.msgDelayConfigForm.get("maxPendingMsgs").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.msgDelayConfigForm.get("maxPendingMsgs").hasError("max"))}},dependencies:t.ɵɵgetComponentDepsFactory($n),encapsulation:2})}}e("MsgDelayConfigComponent",$n);const Qn=()=>({standalone:!0});function Jn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",10),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.telemetryTypeTranslationsMap.get(e))," ")}}class Yn extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopes=Object.keys(o),this.telemetryTypeTranslationsMap=l}configForm(){return this.pushToCloudConfigForm}onConfigurationSet(e){this.pushToCloudConfigForm=this.fb.group({scope:[e?e.scope:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||Yn)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Yn,selectors:[["tb-action-node-push-to-cloud-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:19,vars:16,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],[1,"flex"],["required","","matInput","","formControlName","scope",1,"tb-entity-type-select"],[3,"value",4,"ngFor","ngForOf"],["type","text","matInput","","readonly","","disabled","",3,"ngModel","ngModelOptions"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip"],["aria-hidden","false","aria-label","help-icon"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵelement(2,"tb-example-hint",2),t.ɵɵelementStart(3,"div",3)(4,"mat-form-field",4)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",5),t.ɵɵtemplate(9,Jn,3,4,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",4)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",7),t.ɵɵelementStart(15,"button",8),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"mat-icon",9),t.ɵɵtext(18,"content_copy "),t.ɵɵelementEnd()()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.pushToCloudConfigForm),t.ɵɵadvance(2),t.ɵɵproperty("hintText","tb.rulenode.attributes-scope-hint"),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,9,"tb.rulenode.attributes-scope")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.attributeScopes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,11,"tb.rulenode.attributes-scope-value")),t.ɵɵadvance(2),t.ɵɵproperty("ngModel",n.pushToCloudConfigForm.get("scope").value)("ngModelOptions",t.ɵɵpureFunction0(15,Qn)),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(16,13,"tb.rulenode.attributes-scope-value-copy")),t.ɵɵproperty("cbContent",n.pushToCloudConfigForm.get("scope").value))},dependencies:t.ɵɵgetComponentDepsFactory(Yn),encapsulation:2})}}e("PushToCloudConfigComponent",Yn);const Wn=()=>({standalone:!0});function Xn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",10),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.telemetryTypeTranslationsMap.get(e))," ")}}class Zn extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopes=Object.keys(o),this.telemetryTypeTranslationsMap=l}configForm(){return this.pushToEdgeConfigForm}onConfigurationSet(e){this.pushToEdgeConfigForm=this.fb.group({scope:[e?e.scope:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||Zn)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Zn,selectors:[["tb-action-node-push-to-edge-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:19,vars:16,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],[1,"flex"],["required","","matInput","","formControlName","scope",1,"tb-entity-type-select"],[3,"value",4,"ngFor","ngForOf"],["type","text","matInput","","readonly","","disabled","",3,"ngModel","ngModelOptions"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip"],["aria-hidden","false","aria-label","help-icon"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵelement(2,"tb-example-hint",2),t.ɵɵelementStart(3,"div",3)(4,"mat-form-field",4)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",5),t.ɵɵtemplate(9,Xn,3,4,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",4)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",7),t.ɵɵelementStart(15,"button",8),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"mat-icon",9),t.ɵɵtext(18,"content_copy "),t.ɵɵelementEnd()()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.pushToEdgeConfigForm),t.ɵɵadvance(2),t.ɵɵproperty("hintText","tb.rulenode.attributes-scope-hint"),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,9,"tb.rulenode.attributes-scope")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.attributeScopes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,11,"tb.rulenode.attributes-scope-value")),t.ɵɵadvance(2),t.ɵɵproperty("ngModel",n.pushToEdgeConfigForm.get("scope").value)("ngModelOptions",t.ɵɵpureFunction0(15,Wn)),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(16,13,"tb.rulenode.attributes-scope-value-copy")),t.ɵɵproperty("cbContent",n.pushToEdgeConfigForm.get("scope").value))},dependencies:t.ɵɵgetComponentDepsFactory(Zn),encapsulation:2})}}e("PushToEdgeConfigComponent",Zn);class er extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.rpcReplyConfigForm}onConfigurationSet(e){this.rpcReplyConfigForm=this.fb.group({serviceIdMetaDataAttribute:[e?e.serviceIdMetaDataAttribute:null,[]],sessionIdMetaDataAttribute:[e?e.sessionIdMetaDataAttribute:null,[]],requestIdMetaDataAttribute:[e?e.requestIdMetaDataAttribute:null,[]]})}static{this.ɵfac=function(e){return new(e||er)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:er,selectors:[["tb-action-node-rpc-reply-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:17,vars:2,consts:[[1,"tb-form-panel","stroked","no-padding-bottom",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs"],[1,"flex"],["translate",""],["matInput","","formControlName","serviceIdMetaDataAttribute"],["matInput","","formControlName","sessionIdMetaDataAttribute"],["matInput","","formControlName","requestIdMetaDataAttribute"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.reply-routing-configuration"),t.ɵɵelementEnd(),t.ɵɵelement(3,"tb-example-hint",2),t.ɵɵelementStart(4,"div",3)(5,"mat-form-field",4)(6,"mat-label",5),t.ɵɵtext(7,"tb.rulenode.service-id-metadata-attribute"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",6),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",4)(10,"mat-label",5),t.ɵɵtext(11,"tb.rulenode.session-id-metadata-attribute"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",7),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",4)(14,"mat-label",5),t.ɵɵtext(15,"tb.rulenode.request-id-metadata-attribute"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",8),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.rpcReplyConfigForm),t.ɵɵadvance(3),t.ɵɵproperty("hintText","tb.rulenode.rpc-reply-routing-configuration-hint"))},dependencies:t.ɵɵgetComponentDepsFactory(er),encapsulation:2})}}function tr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.timeout-required")," "))}function nr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-timeout-message")," "))}e("RpcReplyConfigComponent",er);class rr extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.rpcRequestConfigForm}onConfigurationSet(e){this.rpcRequestConfigForm=this.fb.group({timeoutInSeconds:[e?e.timeoutInSeconds:null,[N.required,N.min(0)]]})}static{this.ɵfac=function(e){return new(e||rr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:rr,selectors:[["tb-action-node-rpc-request-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:3,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block","flex-1"],["translate",""],["type","number","min","0","step","1","matInput","","formControlName","timeoutInSeconds","required",""],[4,"ngIf"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.timeout-sec"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,tr,3,3,"mat-error",4)(6,nr,3,3,"mat-error",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.rpcRequestConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.rpcRequestConfigForm.get("timeoutInSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.rpcRequestConfigForm.get("timeoutInSeconds").hasError("min")))},dependencies:t.ɵɵgetComponentDepsFactory(rr),encapsulation:2})}}function ar(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.custom-table-name-required")," "))}function ir(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-default-ttl-message")," "))}function or(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.default-ttl-required")," "))}e("RpcRequestConfigComponent",rr);class lr extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.saveToCustomTableConfigForm}onConfigurationSet(e){this.saveToCustomTableConfigForm=this.fb.group({tableName:[e?e.tableName:null,[N.required,N.pattern(/.*\S.*/)]],fieldsMapping:[e?e.fieldsMapping:null,[N.required]],defaultTtl:[e?e.defaultTtl:0,[N.required,N.min(0)]]})}prepareOutputConfig(e){return e.tableName=e.tableName.trim(),e}static{this.ɵfac=function(e){return new(e||lr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:lr,selectors:[["tb-action-node-custom-table-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:24,vars:26,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","tableName"],["aria-hidden","false","aria-label","help-icon","matSuffix","",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[4,"ngIf"],["required","","formControlName","fieldsMapping",3,"labelText","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText"],[1,"mat-block","flex-1"],["type","number","min","0","step","1","matInput","","formControlName","defaultTtl","required",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.custom-table-name"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵelementStart(5,"mat-icon",4),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7," help "),t.ɵɵelementEnd(),t.ɵɵtemplate(8,ar,3,3,"mat-error",5),t.ɵɵelementEnd(),t.ɵɵelement(9,"tb-kv-map-config",6),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵpipe(14,"translate"),t.ɵɵpipe(15,"translate"),t.ɵɵelementStart(16,"mat-form-field",7)(17,"mat-label",2),t.ɵɵtext(18,"tb.rulenode.default-ttl"),t.ɵɵelementEnd(),t.ɵɵelement(19,"input",8),t.ɵɵelementStart(20,"mat-hint",2),t.ɵɵtext(21,"tb.rulenode.default-ttl-zero-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(22,ir,3,3,"mat-error",5)(23,or,3,3,"mat-error",5),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.saveToCustomTableConfigForm),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(6,12,"tb.rulenode.custom-table-hint")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.saveToCustomTableConfigForm.get("tableName").hasError("required")||n.saveToCustomTableConfigForm.get("tableName").hasError("pattern")),t.ɵɵadvance(),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(10,14,"tb.rulenode.fields-mapping"))("requiredText",t.ɵɵpipeBind1(11,16,"tb.rulenode.fields-mapping-required"))("keyText",t.ɵɵpipeBind1(12,18,"tb.rulenode.message-field"))("keyRequiredText",t.ɵɵpipeBind1(13,20,"tb.rulenode.message-field-required"))("valText",t.ɵɵpipeBind1(14,22,"tb.rulenode.table-col"))("valRequiredText",t.ɵɵpipeBind1(15,24,"tb.rulenode.table-col-required"))("hintText","tb.rulenode.fields-mapping-hint"),t.ɵɵadvance(13),t.ɵɵproperty("ngIf",n.saveToCustomTableConfigForm.get("defaultTtl").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.saveToCustomTableConfigForm.get("defaultTtl").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(lr),encapsulation:2})}}function sr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.default-ttl-required")," "))}function pr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-default-ttl-message")," "))}e("SaveToCustomTableConfigComponent",lr);class mr extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.timeseriesConfigForm}onConfigurationSet(e){this.timeseriesConfigForm=this.fb.group({defaultTTL:[e?e.defaultTTL:null,[N.required,N.min(0)]],skipLatestPersistence:[!!e&&e.skipLatestPersistence,[]],useServerTs:[!!e&&e.useServerTs,[]]})}static{this.ɵfac=function(e){return new(e||mr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:mr,selectors:[["tb-action-node-timeseries-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:21,vars:18,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"mat-block","flex-1"],["translate",""],["type","number","min","0","step","1","matInput","","formControlName","defaultTTL","required",""],["aria-hidden","false","aria-label","help-icon","matSuffix","",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[4,"ngIf"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","useServerTs",1,"mat-slide"],["formControlName","skipLatestPersistence",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.default-ttl"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵelementStart(5,"mat-icon",4),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7," help "),t.ɵɵelementEnd(),t.ɵɵtemplate(8,sr,3,3,"mat-error",5)(9,pr,3,3,"mat-error",5),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"div",6)(11,"div",7),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"mat-slide-toggle",8),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(16,"div",7),t.ɵɵpipe(17,"translate"),t.ɵɵelementStart(18,"mat-slide-toggle",9),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.timeseriesConfigForm),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(6,8,"tb.rulenode.default-ttl-hint")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.timeseriesConfigForm.get("defaultTTL").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.timeseriesConfigForm.get("defaultTTL").hasError("min")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(12,10,"tb.rulenode.use-server-ts-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,12,"tb.rulenode.use-server-ts")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(17,14,"tb.rulenode.skip-latest-persistence-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(20,16,"tb.rulenode.skip-latest-persistence")," "))},dependencies:t.ɵɵgetComponentDepsFactory(mr),encapsulation:2})}}function dr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.customer-name-pattern-required")," "))}function ur(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",6)(1,"mat-label",7),t.ɵɵtext(2,"tb.rulenode.customer-name-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",8),t.ɵɵtemplate(4,dr,3,3,"mat-error",9),t.ɵɵelementStart(5,"mat-hint",7),t.ɵɵtext(6,"tb.rulenode.customer-name-pattern-hint"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.unassignCustomerConfigForm.get("customerNamePattern").hasError("required")||e.unassignCustomerConfigForm.get("customerNamePattern").hasError("pattern"))}}e("TimeseriesConfigComponent",mr);class cr extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.unassignCustomerConfigForm}prepareInputConfig(e){return{customerNamePattern:P(e?.customerNamePattern)?e.customerNamePattern:null,unassignFromCustomer:P(e?.customerNamePattern)}}onConfigurationSet(e){this.unassignCustomerConfigForm=this.fb.group({customerNamePattern:[e.customerNamePattern,[]],unassignFromCustomer:[e.unassignFromCustomer,[]]})}validatorTriggers(){return["unassignFromCustomer"]}updateValidators(e){this.unassignCustomerConfigForm.get("unassignFromCustomer").value?this.unassignCustomerConfigForm.get("customerNamePattern").setValidators([N.required,N.pattern(/.*\S.*/)]):this.unassignCustomerConfigForm.get("customerNamePattern").setValidators([]),this.unassignCustomerConfigForm.get("customerNamePattern").updateValueAndValidity({emitEvent:e})}prepareOutputConfig(e){return{customerNamePattern:e.unassignFromCustomer?e.customerNamePattern.trim():null}}static{this.ɵfac=function(e){return new(e||cr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:cr,selectors:[["tb-action-node-un-assign-to-customer-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:9,vars:10,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"tb-form-panel","no-padding","no-border"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","unassignFromCustomer",1,"mat-slide"],["class","mat-block","subscriptSizing","dynamic",4,"ngIf"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","customerNamePattern"],[4,"ngIf"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2)(3,"div",3),t.ɵɵpipe(4,"translate"),t.ɵɵelementStart(5,"mat-slide-toggle",4),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(8,ur,7,1,"mat-form-field",5),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.unassignCustomerConfigForm),t.ɵɵadvance(2),t.ɵɵclassProp("no-padding-bottom",n.unassignCustomerConfigForm.get("unassignFromCustomer").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(4,6,"tb.rulenode.unassign-from-customer-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,8,"tb.rulenode.unassign-from-customer")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.unassignCustomerConfigForm.get("unassignFromCustomer").value))},dependencies:t.ɵɵgetComponentDepsFactory(cr),encapsulation:2})}}e("UnassignCustomerConfigComponent",cr);class fr extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.sendRestApiCallReplyConfigForm}onConfigurationSet(e){this.sendRestApiCallReplyConfigForm=this.fb.group({requestIdMetaDataAttribute:[e?e.requestIdMetaDataAttribute:null,[]],serviceIdMetaDataAttribute:[e?e.serviceIdMetaDataAttribute:null,[]]})}static{this.ɵfac=function(e){return new(e||fr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:fr,selectors:[["tb-action-node-send-rest-api-call-reply-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:13,vars:2,consts:[[1,"tb-form-panel","stroked","no-padding-bottom",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs"],[1,"flex"],["translate",""],["matInput","","formControlName","serviceIdMetaDataAttribute"],["matInput","","formControlName","requestIdMetaDataAttribute"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.reply-routing-configuration"),t.ɵɵelementEnd(),t.ɵɵelement(3,"tb-example-hint",2),t.ɵɵelementStart(4,"div",3)(5,"mat-form-field",4)(6,"mat-label",5),t.ɵɵtext(7,"tb.rulenode.service-id-metadata-attribute"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",6),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",4)(10,"mat-label",5),t.ɵɵtext(11,"tb.rulenode.request-id-metadata-attribute"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",7),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.sendRestApiCallReplyConfigForm),t.ɵɵadvance(3),t.ɵɵproperty("hintText","tb.rulenode.reply-routing-configuration-hint"))},dependencies:t.ɵɵgetComponentDepsFactory(fr),encapsulation:2})}}e("SendRestApiCallReplyConfigComponent",fr);const gr=["attributeChipList"],hr=()=>({standalone:!0});function yr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.telemetryTypeTranslationsMap.get(e))," ")}}function br(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-chip-row",22),t.ɵɵlistener("removed",(function(){const n=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.removeKey(n))})),t.ɵɵtext(1),t.ɵɵelementStart(2,"mat-icon",23),t.ɵɵtext(3,"close"),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function vr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,1,"tb.rulenode.attributes-keys-required")))}function xr(e,n){1&e&&(t.ɵɵelementStart(0,"div",18),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",24),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.notify-device-on-delete-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"tb.rulenode.notify-device")," "))}class Cr extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopeMap=o,this.attributeScopes=Object.keys(o),this.telemetryTypeTranslationsMap=l,this.separatorKeysCodes=[U,H,z]}configForm(){return this.deleteAttributesConfigForm}onConfigurationSet(e){this.deleteAttributesConfigForm=this.fb.group({scope:[e?e.scope:null,[N.required]],keys:[e?e.keys:null,[N.required]],sendAttributesDeletedNotification:[!!e&&e.sendAttributesDeletedNotification,[]],notifyDevice:[!!e&&e.notifyDevice,[]]}),this.deleteAttributesConfigForm.get("scope").valueChanges.subscribe((e=>{e!==o.SHARED_SCOPE&&this.deleteAttributesConfigForm.get("notifyDevice").patchValue(!1,{emitEvent:!1})}))}removeKey(e){const t=this.deleteAttributesConfigForm.get("keys").value,n=t.indexOf(e);n>=0&&(t.splice(n,1),this.deleteAttributesConfigForm.get("keys").patchValue(t,{emitEvent:!0}))}addKey(e){const t=e.input;let n=e.value;if((n||"").trim()){n=n.trim();let e=this.deleteAttributesConfigForm.get("keys").value;e&&-1!==e.indexOf(n)||(e||(e=[]),e.push(n),this.deleteAttributesConfigForm.get("keys").patchValue(e,{emitEvent:!0}))}t&&(t.value="")}static{this.ɵfac=function(e){return new(e||Cr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Cr,selectors:[["tb-action-node-delete-attributes-config"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(gr,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.attributeChipList=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:41,vars:31,consts:[["attributeChipList",""],[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],[1,"flex"],["required","","matInput","","formControlName","scope",1,"tb-entity-type-select"],[3,"value",4,"ngFor","ngForOf"],["type","text","matInput","","readonly","","disabled","",3,"ngModel","ngModelOptions"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip"],["aria-hidden","false","aria-label","help-icon"],["subscriptSizing","dynamic",1,"mat-block"],["formControlName","keys"],[3,"removed",4,"ngFor","ngForOf"],["matInput","","type","text",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes","matChipInputAddOnBlur"],[4,"ngIf"],["translate",""],[1,"tb-settings"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","sendAttributesDeletedNotification",1,"mat-slide"],["class","tb-form-row no-border no-padding",3,"tb-hint-tooltip-icon",4,"ngIf"],[3,"value"],[3,"removed"],["matChipRemove",""],["formControlName","notifyDevice",1,"mat-slide"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section",1)(1,"div",2),t.ɵɵelement(2,"tb-example-hint",3),t.ɵɵelementStart(3,"div",4)(4,"mat-form-field",5)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",6),t.ɵɵtemplate(9,yr,3,4,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",5)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",8),t.ɵɵelementStart(15,"button",9),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"mat-icon",10),t.ɵɵtext(18,"content_copy "),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(19,"mat-form-field",11)(20,"mat-label"),t.ɵɵtext(21),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-chip-grid",12,0),t.ɵɵtemplate(25,br,4,1,"mat-chip-row",13),t.ɵɵelementStart(26,"input",14),t.ɵɵlistener("matChipInputTokenEnd",(function(r){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addKey(r))})),t.ɵɵelementEnd()(),t.ɵɵtemplate(27,vr,3,3,"mat-error",15),t.ɵɵelementStart(28,"mat-hint",16),t.ɵɵtext(29,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(30,"section",2)(31,"mat-expansion-panel",17)(32,"mat-expansion-panel-header")(33,"mat-panel-title",16),t.ɵɵtext(34,"tb.rulenode.advanced-settings"),t.ɵɵelementEnd()(),t.ɵɵelementStart(35,"div",18),t.ɵɵpipe(36,"translate"),t.ɵɵelementStart(37,"mat-slide-toggle",19),t.ɵɵtext(38),t.ɵɵpipe(39,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(40,xr,5,6,"div",20),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(24);t.ɵɵproperty("formGroup",n.deleteAttributesConfigForm),t.ɵɵadvance(2),t.ɵɵproperty("hintText","tb.rulenode.attributes-scope-hint"),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,18,"tb.rulenode.attributes-scope")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.attributeScopes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,20,"tb.rulenode.attributes-scope-value")),t.ɵɵadvance(2),t.ɵɵproperty("ngModel",n.deleteAttributesConfigForm.get("scope").value)("ngModelOptions",t.ɵɵpureFunction0(30,hr)),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(16,22,"tb.rulenode.attributes-scope-value-copy")),t.ɵɵproperty("cbContent",n.deleteAttributesConfigForm.get("scope").value),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(22,24,"tb.rulenode.attributes-keys")),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",n.deleteAttributesConfigForm.get("keys").value),t.ɵɵadvance(),t.ɵɵproperty("matChipInputFor",e)("matChipInputSeparatorKeyCodes",n.separatorKeysCodes)("matChipInputAddOnBlur",!0),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deleteAttributesConfigForm.get("keys").hasError("required")),t.ɵɵadvance(8),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(36,26,"tb.rulenode.send-attributes-deleted-notification-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(39,28,"tb.rulenode.send-attributes-deleted-notification")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deleteAttributesConfigForm.get("scope").value===n.attributeScopeMap.SHARED_SCOPE)}},dependencies:t.ɵɵgetComponentDepsFactory(Cr),encapsulation:2})}}e("DeleteAttributesConfigComponent",Cr);const Sr=(e,t)=>[e,t];function Tr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",8),t.ɵɵtext(1," tb.rulenode.custom-expression-field-input-required "),t.ɵɵelementEnd())}function Ir(e,n){if(1&e&&(t.ɵɵelementStart(0,"fieldset",2)(1,"legend",21),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",22),t.ɵɵelement(5,"input",23),t.ɵɵtemplate(6,Tr,2,0,"mat-error",11),t.ɵɵelementStart(7,"mat-hint",8),t.ɵɵtext(8,"tb.rulenode.custom-expression-field-input-hint"),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(3,2,"tb.rulenode.custom-expression-field-input")," *"),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.mathFunctionConfigForm.get("customFunction").hasError("required"))}}function Er(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",24),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"small",25),t.ɵɵtext(4),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,3,r.argumentTypeResultMap.get(e).name)," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",r.argumentTypeResultMap.get(e).description," ")}}function Fr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",8),t.ɵɵtext(1," tb.rulenode.type-field-input-required "),t.ɵɵelementEnd())}function qr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",28),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.attributeScopeMap.get(e))," ")}}function Ar(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",7)(1,"mat-label",8),t.ɵɵtext(2,"tb.rulenode.attribute-scope-field-input"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",26),t.ɵɵtemplate(4,qr,3,4,"mat-option",27),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.attributeScopeResult)}}function kr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",8),t.ɵɵtext(1," tb.rulenode.key-field-input-required "),t.ɵɵelementEnd())}function Nr(e,n){1&e&&(t.ɵɵelementStart(0,"div",29)(1,"mat-checkbox",30),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-checkbox",31),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,2,"tb.rulenode.add-to-message-field-input")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,4,"tb.rulenode.add-to-metadata-field-input")," "))}class wr extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.MathFunction=Rt,this.ArgumentTypeResult=Gt,this.argumentTypeResultMap=Qt,this.attributeScopeMap=Xt,this.argumentsResult=Object.values(Gt),this.attributeScopeResult=Object.values(Wt)}configForm(){return this.mathFunctionConfigForm}onConfigurationSet(e){this.mathFunctionConfigForm=this.fb.group({operation:[e?e.operation:null,[N.required]],arguments:[e?e.arguments:null,[N.required]],customFunction:[e?e.customFunction:"",[N.required]],result:this.fb.group({type:[e?e.result.type:null,[N.required]],attributeScope:[e?e.result.attributeScope:null,[N.required]],key:[e?e.result.key:"",[N.required]],resultValuePrecision:[e?e.result.resultValuePrecision:0],addToBody:[!!e&&e.result.addToBody],addToMetadata:[!!e&&e.result.addToMetadata]})})}updateValidators(e){const t=this.mathFunctionConfigForm.get("operation").value,n=this.mathFunctionConfigForm.get("result.type").value;t===Rt.CUSTOM?(this.mathFunctionConfigForm.get("customFunction").enable({emitEvent:!1}),null===this.mathFunctionConfigForm.get("customFunction").value&&this.mathFunctionConfigForm.get("customFunction").patchValue("(x - 32) / 1.8",{emitEvent:!1})):this.mathFunctionConfigForm.get("customFunction").disable({emitEvent:!1}),n===Gt.ATTRIBUTE?this.mathFunctionConfigForm.get("result.attributeScope").enable({emitEvent:!1}):this.mathFunctionConfigForm.get("result.attributeScope").disable({emitEvent:!1}),this.mathFunctionConfigForm.get("customFunction").updateValueAndValidity({emitEvent:e}),this.mathFunctionConfigForm.get("result.attributeScope").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["operation","result.type"]}static{this.ɵfac=function(e){return new(e||wr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:wr,selectors:[["tb-action-node-math-function-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:39,vars:23,consts:[[1,"flex","flex-col",3,"formGroup"],["required","","formControlName","operation",1,"flex-full","max-h-30%","xs:max-h-full","md:max-h-full"],[1,"fields-group","flex","flex-col","gap-2"],["translate","",1,"group-title"],["formControlName","arguments",3,"function"],["class","fields-group flex flex-col gap-2",4,"ngIf"],["formGroupName","result"],[1,"mat-block","flex-1"],["translate",""],["formControlName","type","required",""],["style","border-bottom: 1px solid #eee;",3,"value",4,"ngFor","ngForOf"],["translate","",4,"ngIf"],[1,"xs:flex-col","gt-xs:gap-4","flex","flex-1","flex-row"],["class","mat-block flex-1",4,"ngIf"],["floatLabel","always",1,"mat-block","flex-1"],["matInput","","formControlName","key","required",""],["aria-hidden","false","aria-label","help-icon","matSuffix","","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],["floatLabel","always","subscriptSizing","dynamic",1,"mat-block","flex-1"],["formControlName","resultValuePrecision","matInput","","step","1","min","0","type","number"],[3,"innerHTML"],["class","xs:flex-col gt-xs:gap-4 flex flex-1 flex-row items-stretch justify-start","style","padding-top: 16px;",4,"ngIf"],[1,"group-title"],["subscriptSizing","dynamic",1,"mat-block","no-margin-top","flex-1"],["matInput","","formControlName","customFunction","required",""],[2,"border-bottom","1px solid #eee",3,"value"],[2,"display","block","overflow","hidden","text-overflow","ellipsis","white-space","nowrap"],["required","","formControlName","attributeScope"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],[1,"xs:flex-col","gt-xs:gap-4","flex","flex-1","flex-row","items-stretch","justify-start",2,"padding-top","16px"],["formControlName","addToBody"],["formControlName","addToMetadata"]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-math-function-autocomplete",1),t.ɵɵelementStart(2,"fieldset",2)(3,"legend",3),t.ɵɵtext(4,"tb.rulenode.argument-tile"),t.ɵɵelementEnd(),t.ɵɵelement(5,"tb-arguments-map-config",4),t.ɵɵelementEnd(),t.ɵɵtemplate(6,Ir,9,4,"fieldset",5),t.ɵɵelementStart(7,"fieldset",2)(8,"legend",3),t.ɵɵtext(9,"tb.rulenode.result-title"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"div",6)(11,"mat-form-field",7)(12,"mat-label",8),t.ɵɵtext(13,"tb.rulenode.type-field-input"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-select",9)(15,"mat-select-trigger"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(18,Er,5,5,"mat-option",10),t.ɵɵelementEnd(),t.ɵɵtemplate(19,Fr,2,0,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"div",12),t.ɵɵtemplate(21,Ar,5,1,"mat-form-field",13),t.ɵɵelementStart(22,"mat-form-field",14)(23,"mat-label",8),t.ɵɵtext(24,"tb.rulenode.key-field-input"),t.ɵɵelementEnd(),t.ɵɵelement(25,"input",15),t.ɵɵelementStart(26,"mat-icon",16),t.ɵɵpipe(27,"translate"),t.ɵɵtext(28,"help"),t.ɵɵelementEnd(),t.ɵɵtemplate(29,kr,2,0,"mat-error",11),t.ɵɵelementEnd()(),t.ɵɵelementStart(30,"div",12)(31,"mat-form-field",17)(32,"mat-label",8),t.ɵɵtext(33,"tb.rulenode.number-floating-point-field-input"),t.ɵɵelementEnd(),t.ɵɵelement(34,"input",18)(35,"mat-hint",19),t.ɵɵpipe(36,"translate"),t.ɵɵpipe(37,"safe"),t.ɵɵelementEnd()(),t.ɵɵtemplate(38,Nr,7,6,"div",20),t.ɵɵelementEnd()()()),2&e){let e;t.ɵɵproperty("formGroup",n.mathFunctionConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("function",n.mathFunctionConfigForm.get("operation").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mathFunctionConfigForm.get("operation").value===n.MathFunction.CUSTOM),t.ɵɵadvance(10),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(17,11,null==(e=n.argumentTypeResultMap.get(n.mathFunctionConfigForm.get("result.type").value))?null:e.name)," "),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.argumentsResult),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mathFunctionConfigForm.get("result.type").hasError("required")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.mathFunctionConfigForm.get("result").get("type").value===n.ArgumentTypeResult.ATTRIBUTE),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(27,13,"tb.rulenode.math-templatization-tooltip")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.mathFunctionConfigForm.get("result.key").hasError("required")),t.ɵɵadvance(6),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(37,17,t.ɵɵpipeBind1(36,15,"tb.rulenode.number-floating-point-field-input-hint"),"html"),t.ɵɵsanitizeHtml),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",t.ɵɵpureFunction2(20,Sr,n.ArgumentTypeResult.ATTRIBUTE,n.ArgumentTypeResult.TIME_SERIES).includes(n.mathFunctionConfigForm.get("result").get("type").value))}},dependencies:t.ɵɵgetComponentDepsFactory(wr),styles:["[_nghost-%COMP%] .fields-group{padding:0 16px 8px;margin:10px 0;border:1px groove rgba(0,0,0,.25);border-radius:4px}[_nghost-%COMP%] .fields-group .mat-mdc-form-field .mat-mdc-form-field-infix{width:100%}[_nghost-%COMP%] .fields-group legend{color:#000000b3;width:fit-content}[_nghost-%COMP%] .fields-group legend+*{display:block}[_nghost-%COMP%] .fields-group legend+*.no-margin-top{margin-top:0}"]})}}function Mr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",4),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",r.messageTypeNames.get(e)," ")}}e("MathFunctionConfigComponent",wr);class Br extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.messageTypeNames=f,this.eventOptions=[g.CONNECT_EVENT,g.ACTIVITY_EVENT,g.DISCONNECT_EVENT,g.INACTIVITY_EVENT]}configForm(){return this.deviceState}prepareInputConfig(e){return{event:P(e?.event)?e.event:g.ACTIVITY_EVENT}}onConfigurationSet(e){this.deviceState=this.fb.group({event:[e.event,[N.required]]})}static{this.ɵfac=function(e){return new(e||Br)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Br,selectors:[["tb-action-node-device-state-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:5,consts:[[3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["formControlName","event"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",2),t.ɵɵtemplate(6,Mr,2,2,"mat-option",3),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.deviceState),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"tb.rulenode.select-device-connectivity-event")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.eventOptions))},dependencies:t.ɵɵgetComponentDepsFactory(Br),encapsulation:2})}}e("DeviceStateConfigComponent",Br);const Vr=(e,t)=>({valText:e,keyText:t});function Or(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",13),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.requiredText," ")}}function Dr(e,n){1&e&&(t.ɵɵelementStart(0,"div",13),t.ɵɵtext(1," tb.rulenode.map-fields-required "),t.ɵɵelementEnd())}function Lr(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",13),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,"tb.key-val.unique-key-value-pair-error",t.ɵɵpureFunction2(4,Vr,e.valText,e.keyText))," ")}}function Pr(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",14)(1,"mat-form-field",15),t.ɵɵelement(2,"input",16),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",15),t.ɵɵelement(4,"input",16),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",17)(6,"button",18),t.ɵɵpipe(7,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.removeKeyVal(n))})),t.ɵɵelementStart(8,"mat-icon"),t.ɵɵtext(9,"delete"),t.ɵɵelementEnd()()()()}if(2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵproperty("placeholder",r.keyText+"*")("formControl",e.get("key")),t.ɵɵadvance(2),t.ɵɵproperty("placeholder",r.valText+"*")("formControl",e.get("value")),t.ɵɵadvance(2),t.ɵɵclassProp("tb-hidden",1===r.keyValsFormArray().controls.length),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,8,"tb.key-val.remove-mapping-entry")),t.ɵɵproperty("disabled",r.disabled)}}function Rr(e,n){if(1&e&&t.ɵɵelement(0,"tb-example-hint",19),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("hintText",e.hintText)("popupHelpLink",e.popupHelpLink)}}class _r{constructor(e,t){this.injector=e,this.fb=t,this.propagateChange=()=>{},this.destroy$=new Y,this.disabled=!1,this.uniqueKeyValuePairValidator=!1,this.required=!1,this.duplicateValuesValidator=e=>e.controls.key.value===e.controls.value.value&&e.controls.key.value&&e.controls.value.value?{uniqueKeyValuePair:!0}:null,this.oneMapRequiredValidator=e=>e.get("keyVals").value.length,this.propagateNestedErrors=e=>{if(this.kvListFormGroup&&this.kvListFormGroup.get("keyVals")&&"VALID"===this.kvListFormGroup.get("keyVals")?.status)return null;const t={};if(this.kvListFormGroup&&this.kvListFormGroup.setErrors(null),e instanceof w||e instanceof M){if(e.errors)for(const n of Object.keys(e.errors))t[n]=!0;for(const n of Object.keys(e.controls)){const r=this.propagateNestedErrors(e.controls[n]);if(r&&Object.keys(r).length)for(const e of Object.keys(r))t[e]=!0}return t}if(e.errors)for(const n of Object.keys(e.errors))t[n]=!0;return R(t,{})?null:t}}ngOnInit(){this.ngControl=this.injector.get(B),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.kvListFormGroup=this.fb.group({keyVals:this.fb.array([])},{validators:[this.propagateNestedErrors,this.oneMapRequiredValidator]}),this.kvListFormGroup.valueChanges.pipe(W(this.destroy$)).subscribe((()=>{this.updateModel()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}keyValsFormArray(){return this.kvListFormGroup.get("keyVals")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.kvListFormGroup.disable({emitEvent:!1}):this.kvListFormGroup.enable({emitEvent:!1})}writeValue(e){const t=Object.keys(e).map((t=>({key:t,value:e[t]})));if(this.keyValsFormArray().length===t.length)this.keyValsFormArray().patchValue(t,{emitEvent:!1});else{const e=[];t.forEach((t=>{e.push(this.fb.group({key:[t.key,[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],value:[t.value,[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]},{validators:this.uniqueKeyValuePairValidator?[this.duplicateValuesValidator]:[]}))})),this.kvListFormGroup.setControl("keyVals",this.fb.array(e,this.propagateNestedErrors),{emitEvent:!1})}}removeKeyVal(e){this.keyValsFormArray().removeAt(e)}addKeyVal(){this.keyValsFormArray().push(this.fb.group({key:["",[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],value:["",[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]},{validators:this.uniqueKeyValuePairValidator?[this.duplicateValuesValidator]:[]}))}validate(){const e=this.kvListFormGroup.get("keyVals").value;if(!e.length&&this.required)return{kvMapRequired:!0};if(!this.kvListFormGroup.valid)return{kvFieldsRequired:!0};if(this.uniqueKeyValuePairValidator)for(const t of e)if(t.key===t.value)return{uniqueKeyValuePair:!0};return null}updateModel(){const e=this.kvListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.kvListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}static{this.ɵfac=function(e){return new(e||_r)(t.ɵɵdirectiveInject(t.Injector),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:_r,selectors:[["tb-kv-map-config"]],inputs:{disabled:"disabled",uniqueKeyValuePairValidator:"uniqueKeyValuePairValidator",labelText:"labelText",requiredText:"requiredText",keyText:"keyText",keyRequiredText:"keyRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",popupHelpLink:"popupHelpLink",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>_r)),multi:!0},{provide:O,useExisting:r((()=>_r)),multi:!0}])],decls:22,vars:12,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],[1,"tb-form-row","no-padding","no-border","space-between"],[1,"tb-form-panel-title"],["class","tb-form-panel-hint tb-error","translate","",4,"ngIf"],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-table"],[1,"tb-form-table-header"],[1,"tb-form-table-header-cell","field-space"],[1,"tb-form-table-header-cell","actions-header"],[1,"tb-form-table-body"],["class","tb-form-table-row",4,"ngFor","ngForOf"],["type","button","mat-stroked-button","","color","primary",3,"click"],[3,"hintText","popupHelpLink",4,"ngIf"],["translate","",1,"tb-form-panel-hint","tb-error"],[1,"tb-form-table-row"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","field-space"],["matInput","",3,"placeholder","formControl"],[1,"tb-form-table-row-cell-buttons"],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","disabled","matTooltip"],[3,"hintText","popupHelpLink"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Or,2,1,"div",3)(5,Dr,2,0,"div",3)(6,Lr,3,7,"div",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"div",4)(8,"div",5)(9,"div",6)(10,"div",7),t.ɵɵtext(11),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"div",7),t.ɵɵtext(13),t.ɵɵelementEnd(),t.ɵɵelement(14,"div",8),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"div",9),t.ɵɵtemplate(16,Pr,10,10,"div",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(17,"div")(18,"button",11),t.ɵɵlistener("click",(function(){return n.addKeyVal()})),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(21,Rr,1,2,"tb-example-hint",12),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.kvListFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(n.labelText),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.kvListFormGroup.hasError("kvMapRequired")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.kvListFormGroup.hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.kvListFormGroup.hasError("uniqueKeyValuePair")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(n.keyText),t.ɵɵadvance(2),t.ɵɵtextInterpolate(n.valText),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.keyValsFormArray().controls),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(20,10,"tb.key-val.add-mapping-entry")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.popupHelpLink||n.hintText))},dependencies:t.ɵɵgetComponentDepsFactory(_r),styles:["[_nghost-%COMP%] .field-space[_ngcontent-%COMP%]{flex:1 1 50%}[_nghost-%COMP%] .actions-header[_ngcontent-%COMP%]{width:40px}"]})}}e("KvMapConfigComponent",_r),J([h()],_r.prototype,"disabled",void 0),J([h()],_r.prototype,"uniqueKeyValuePairValidator",void 0),J([h()],_r.prototype,"required",void 0);const jr=e=>({inputName:e});function Gr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",13),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"span",3),t.ɵɵtext(4,"tb.rulenode.relations-query-config-direction-suffix"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.directionTypeTranslations.get(e))," ")}}function Kr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-relation-level-error")," "))}function Ur(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-relation-level-invalid")," "))}function Hr(e,n){1&e&&(t.ɵɵelementStart(0,"div",14),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",15),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.last-level-device-relation-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"alias.last-level-relation")," "))}class zr extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.values(d),this.directionTypeTranslations=b,this.entityType=u,this.propagateChange=null}ngOnInit(){this.deviceRelationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[N.required]],maxLevel:[null,[N.min(1)]],relationType:[null],deviceTypes:[null,[N.required]]}),this.deviceRelationsQueryFormGroup.valueChanges.subscribe((e=>{this.deviceRelationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.deviceRelationsQueryFormGroup.disable({emitEvent:!1}):this.deviceRelationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.deviceRelationsQueryFormGroup.reset(e,{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||zr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:zr,selectors:[["tb-device-relations-query-config"]],inputs:{disabled:"disabled",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>zr)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:24,vars:26,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"flex","flex-row","gap-5.5"],["subscriptSizing","dynamic","hideRequiredMarker","",1,"mat-block","max-w-50%","flex-full",2,"min-width","100px"],["translate",""],["required","","formControlName","direction"],[3,"value",4,"ngFor","ngForOf"],["floatLabel","always",1,"mat-block","max-w-50%","flex-full"],["matInput","","type","text","pattern","[0-9]*","inputmode","numeric","min","1","formControlName","maxLevel",3,"placeholder"],[4,"ngIf"],["class","tb-form-row no-border no-padding last-level-slide-toggle",3,"tb-hint-tooltip-icon",4,"ngIf"],["formControlName","relationType",1,"flex-1"],["required","","formControlName","deviceTypes",3,"label","entityType","emptyInputPlaceholder","filledInputPlaceholder"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[3,"value"],[1,"tb-form-row","no-border","no-padding","last-level-slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","fetchLastLevelOnly",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"mat-form-field",2)(3,"mat-label",3),t.ɵɵtext(4,"relation.direction"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",4),t.ɵɵtemplate(6,Gr,5,4,"mat-option",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",6)(8,"mat-label",3),t.ɵɵtext(9,"tb.rulenode.max-relation-level"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",7),t.ɵɵpipe(11,"translate"),t.ɵɵtemplate(12,Kr,3,3,"mat-error",8)(13,Ur,3,3,"mat-error",8),t.ɵɵelementEnd()(),t.ɵɵtemplate(14,Hr,5,6,"div",9),t.ɵɵelement(15,"tb-relation-type-autocomplete",10),t.ɵɵelementStart(16,"tb-entity-subtype-list",11),t.ɵɵpipe(17,"translate"),t.ɵɵpipe(18,"translate"),t.ɵɵpipe(19,"translate"),t.ɵɵelementStart(20,"mat-icon",12),t.ɵɵpipe(21,"translate"),t.ɵɵpipe(22,"translate"),t.ɵɵtext(23,"help"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.deviceRelationsQueryFormGroup),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.directionTypes),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(11,11,"tb.rulenode.unlimited-level")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deviceRelationsQueryFormGroup.get("maxLevel").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deviceRelationsQueryFormGroup.get("maxLevel").invalid),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deviceRelationsQueryFormGroup.get("maxLevel").value>1),t.ɵɵadvance(2),t.ɵɵproperty("label",t.ɵɵpipeBind1(17,13,"tb.rulenode.device-profiles"))("entityType",n.entityType.DEVICE)("emptyInputPlaceholder",t.ɵɵpipeBind1(18,15,"tb.rulenode.add-device-profile"))("filledInputPlaceholder",t.ɵɵpipeBind1(19,17,"tb.rulenode.add-device-profile")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(22,21,"tb.rulenode.chip-help",t.ɵɵpureFunction1(24,jr,t.ɵɵpipeBind1(21,19,"tb.rulenode.device-profile")))))},dependencies:t.ɵɵgetComponentDepsFactory(zr),styles:["[_nghost-%COMP%] .last-level-slide-toggle[_ngcontent-%COMP%]{margin:8px 0 24px}"]})}}function $r(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",13),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"span",4),t.ɵɵtext(4,"tb.rulenode.relations-query-config-direction-suffix"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.directionTypeTranslations.get(e))," ")}}function Qr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-relation-level-error")," "))}function Jr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-relation-level-invalid")," "))}function Yr(e,n){1&e&&(t.ɵɵelementStart(0,"div",14),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",15),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.last-level-relation-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"alias.last-level-relation")," "))}e("DeviceRelationsQueryConfigComponent",zr);class Wr extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.values(d),this.directionTypeTranslations=b,this.propagateChange=null}ngOnInit(){this.relationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[N.required]],maxLevel:[null,[N.min(1)]],filters:[null]}),this.relationsQueryFormGroup.valueChanges.subscribe((e=>{this.relationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.relationsQueryFormGroup.disable({emitEvent:!1}):this.relationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.relationsQueryFormGroup.reset(e||{},{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||Wr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Wr,selectors:[["tb-relations-query-config"]],inputs:{disabled:"disabled",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>Wr)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:22,vars:9,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-panel-title","tb-required"],[1,"flex","flex-row","gap-4"],["hideRequiredMarker","",1,"mat-block","max-w-50%","flex-full",2,"min-width","100px"],["translate",""],["required","","formControlName","direction"],[3,"value",4,"ngFor","ngForOf"],["floatLabel","always",1,"mat-block","max-w-50%","flex-full"],["matInput","","type","text","pattern","[0-9]*","min","1","inputmode","numeric","formControlName","maxLevel",3,"placeholder"],[4,"ngIf"],["class","tb-form-row no-border no-padding last-level-slide-toggle",3,"tb-hint-tooltip-icon",4,"ngIf"],["translate","",1,"tb-form-panel-title"],["formControlName","filters"],[3,"value"],[1,"tb-form-row","no-border","no-padding","last-level-slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","fetchLastLevelOnly",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.relations-query"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"section")(4,"div",2)(5,"mat-form-field",3)(6,"mat-label",4),t.ɵɵtext(7,"relation.direction"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",5),t.ɵɵtemplate(9,$r,5,4,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",7)(11,"mat-label",4),t.ɵɵtext(12,"tb.rulenode.max-relation-level"),t.ɵɵelementEnd(),t.ɵɵelement(13,"input",8),t.ɵɵpipe(14,"translate"),t.ɵɵtemplate(15,Qr,3,3,"mat-error",9)(16,Jr,3,3,"mat-error",9),t.ɵɵelementEnd()(),t.ɵɵtemplate(17,Yr,5,6,"div",10),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"section",0)(19,"div",11),t.ɵɵtext(20,"relation.relation-filters"),t.ɵɵelementEnd(),t.ɵɵelement(21,"tb-relation-filters",12),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.relationsQueryFormGroup),t.ɵɵadvance(9),t.ɵɵproperty("ngForOf",n.directionTypes),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(14,7,"tb.rulenode.unlimited-level")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.relationsQueryFormGroup.get("maxLevel").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.relationsQueryFormGroup.get("maxLevel").invalid),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.relationsQueryFormGroup.get("maxLevel").value>1),t.ɵɵadvance(),t.ɵɵproperty("formGroup",n.relationsQueryFormGroup))},dependencies:t.ɵɵgetComponentDepsFactory(Wr),encapsulation:2})}}e("RelationsQueryConfigComponent",Wr);const Xr=["chipList"],Zr=["messageTypeAutocomplete"],ea=["messageTypeInput"],ta=e=>({inputName:e}),na=e=>({messageType:e});function ra(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-label"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate(e.label)}}function aa(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-chip-row",13),t.ɵɵlistener("removed",(function(){const n=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.remove(n))})),t.ɵɵtext(1),t.ɵɵelementStart(2,"mat-icon",14),t.ɵɵtext(3,"close"),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit;t.ɵɵproperty("removable",!0),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}function ia(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",15),t.ɵɵelement(1,"span",16),t.ɵɵpipe(2,"highlight"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(2,2,e.name,r.searchText),t.ɵɵsanitizeHtml)}}function oa(e,n){1&e&&(t.ɵɵelementStart(0,"div")(1,"span",21),t.ɵɵtext(2,"tb.rulenode.no-message-types-found"),t.ɵɵelementEnd()())}function la(e,n){if(1&e&&(t.ɵɵelementStart(0,"span"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,"tb.rulenode.no-message-type-matching",t.ɵɵpureFunction1(4,na,e.truncate.transform(e.searchText,!0,6,"...")))," ")}}function sa(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-option",17)(1,"div",18),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵtemplate(2,oa,3,0,"div",19)(3,la,3,6,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(5,"span")(6,"a",20),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext();return t.ɵɵresetView(r.createMessageType(n,r.searchText))})),t.ɵɵtext(7,"tb.rulenode.create-new-message-type"),t.ɵɵelementEnd()()()()}if(2&e){const e=t.ɵɵreference(4),n=t.ɵɵnextContext();t.ɵɵproperty("value",null),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!n.textIsNotEmpty(n.searchText))("ngIfElse",e)}}function pa(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.select-message-types-required")," "))}class ma extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.truncate=n,this.fb=r,this.placeholder="tb.rulenode.add-message-type",this.separatorKeysCodes=[U,H,z],this.messageTypes=[],this.messageTypesList=[],this.searchText="",this.propagateChange=e=>{},this.messageTypeConfigForm=this.fb.group({messageType:[null]});for(const e of Object.keys(g))this.messageTypesList.push({name:f.get(g[e]),value:e})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}ngOnInit(){this.filteredMessageTypes=this.messageTypeConfigForm.get("messageType").valueChanges.pipe(ee(""),te((e=>e||"")),ne((e=>this.fetchMessageTypes(e))),re())}setDisabledState(e){this.disabled=e,this.disabled?this.messageTypeConfigForm.disable({emitEvent:!1}):this.messageTypeConfigForm.enable({emitEvent:!1})}writeValue(e){this.searchText="",this.messageTypes.length=0,e&&e.forEach((e=>{const t=this.messageTypesList.find((t=>t.value===e));t?this.messageTypes.push({name:t.name,value:t.value}):this.messageTypes.push({name:e,value:e})}))}displayMessageTypeFn(e){return e?e.name:void 0}textIsNotEmpty(e){return e&&e.length>0}createMessageType(e,t){e.preventDefault(),this.transformMessageType(t)}add(e){this.transformMessageType(e.value)}fetchMessageTypes(e){if(this.searchText=e,this.searchText&&this.searchText.length){const e=this.searchText.toUpperCase();return X(this.messageTypesList.filter((t=>t.name.toUpperCase().includes(e))))}return X(this.messageTypesList)}transformMessageType(e){if((e||"").trim()){let t;const n=e.trim(),r=this.messageTypesList.find((e=>e.name===n));t=r?{name:r.name,value:r.value}:{name:n,value:n},t&&this.addMessageType(t)}this.clear("")}remove(e){const t=this.messageTypes.indexOf(e);t>=0&&(this.messageTypes.splice(t,1),this.updateModel())}selected(e){this.addMessageType(e.option.value),this.clear("")}addMessageType(e){-1===this.messageTypes.findIndex((t=>t.value===e.value))&&(this.messageTypes.push(e),this.updateModel())}onFocus(){this.messageTypeConfigForm.get("messageType").updateValueAndValidity({onlySelf:!0,emitEvent:!0})}clear(e=""){this.messageTypeInput.nativeElement.value=e,this.messageTypeConfigForm.get("messageType").patchValue(null,{emitEvent:!0}),setTimeout((()=>{this.messageTypeInput.nativeElement.blur(),this.messageTypeInput.nativeElement.focus()}),0)}updateModel(){const e=this.messageTypes.map((e=>e.value));this.required?(this.chipList.errorState=!e.length,this.propagateChange(e.length>0?e:null)):(this.chipList.errorState=!1,this.propagateChange(e))}static{this.ɵfac=function(e){return new(e||ma)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(v.TruncatePipe),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ma,selectors:[["tb-message-types-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(Xr,5),t.ɵɵviewQuery(Zr,5),t.ɵɵviewQuery(ea,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.chipList=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.matAutocomplete=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.messageTypeInput=e.first)}},inputs:{required:"required",label:"label",placeholder:"placeholder",disabled:"disabled"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>ma)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:20,vars:27,consts:[["chipList",""],["messageTypeInput","","origin","matAutocompleteOrigin"],["messageTypeAutocomplete","matAutocomplete"],["searchNotEmpty",""],[2,"width","100%",3,"formGroup"],[4,"ngIf"],[3,"required"],[3,"removable","removed",4,"ngFor","ngForOf"],["matInput","","type","text","formControlName","messageType","matAutocompleteOrigin","",3,"focusin","matChipInputTokenEnd","placeholder","matAutocompleteConnectedTo","matAutocomplete","matChipInputFor","matChipInputSeparatorKeyCodes"],[1,"tb-autocomplete",3,"optionSelected","displayWith"],[3,"value",4,"ngFor","ngForOf"],["class","tb-not-found",3,"value",4,"ngIf"],["aria-hidden","false","aria-label","help-icon","matSuffix","","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[3,"removed","removable"],["matChipRemove",""],[3,"value"],[3,"innerHTML"],[1,"tb-not-found",3,"value"],[1,"tb-not-found-content",3,"click"],[4,"ngIf","ngIfElse"],["translate","",3,"click"],["translate",""]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field",4),t.ɵɵtemplate(1,ra,2,1,"mat-label",5),t.ɵɵelementStart(2,"mat-chip-grid",6,0),t.ɵɵtemplate(4,aa,4,2,"mat-chip-row",7),t.ɵɵelementStart(5,"input",8,1),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("focusin",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onFocus())}))("matChipInputTokenEnd",(function(r){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.add(r))})),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"mat-autocomplete",9,2),t.ɵɵlistener("optionSelected",(function(r){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.selected(r))})),t.ɵɵtemplate(11,ia,3,5,"mat-option",10),t.ɵɵpipe(12,"async"),t.ɵɵtemplate(13,sa,8,3,"mat-option",11),t.ɵɵpipe(14,"async"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"mat-icon",12),t.ɵɵpipe(16,"translate"),t.ɵɵpipe(17,"translate"),t.ɵɵtext(18,"help"),t.ɵɵelementEnd(),t.ɵɵtemplate(19,pa,3,3,"mat-error",5),t.ɵɵelementEnd()}if(2&e){let e;const r=t.ɵɵreference(3),a=t.ɵɵreference(7),i=t.ɵɵreference(10);t.ɵɵproperty("formGroup",n.messageTypeConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.label),t.ɵɵadvance(),t.ɵɵproperty("required",n.required),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.messageTypes),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,14,n.placeholder)),t.ɵɵproperty("matAutocompleteConnectedTo",a)("matAutocomplete",i)("matChipInputFor",r)("matChipInputSeparatorKeyCodes",n.separatorKeysCodes),t.ɵɵadvance(4),t.ɵɵproperty("displayWith",n.displayMessageTypeFn),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(12,16,n.filteredMessageTypes)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",0===(null==(e=t.ɵɵpipeBind1(14,18,n.filteredMessageTypes))?null:e.length)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(17,22,"tb.rulenode.chip-help",t.ɵɵpureFunction1(25,ta,t.ɵɵpipeBind1(16,20,"tb.rulenode.message-type")))),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",r.errorState)}},dependencies:t.ɵɵgetComponentDepsFactory(ma),encapsulation:2})}}function da(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",12),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e)("disabled","cert.PEM"===e&&r.disableCertPemCredentials),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,3,r.credentialsTypeTranslationsMap.get(e))," ")}}function ua(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.credentials-type-required")," "))}function ca(e,t){}function fa(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.username-required")," "))}function ga(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.password-required")," "))}function ha(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",4)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.username"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",13),t.ɵɵtemplate(4,fa,3,3,"mat-error",7),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",4)(6,"mat-label",2),t.ɵɵtext(7,"tb.rulenode.password"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",14)(9,"tb-toggle-password",15),t.ɵɵtemplate(10,ga,3,3,"mat-error",7),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.credentialsConfigFormGroup.get("username").hasError("required")),t.ɵɵadvance(4),t.ɵɵproperty("required",e.passwordFieldRequired),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.credentialsConfigFormGroup.get("password").hasError("required"))}}function ya(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",16),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"tb-file-input",17),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.credentialsConfigFormGroup.get("caCertFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"tb-file-input",18),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.credentialsConfigFormGroup.get("certFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"tb-file-input",19),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.credentialsConfigFormGroup.get("privateKeyFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",4)(13,"mat-label",2),t.ɵɵtext(14,"tb.rulenode.private-key-password"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",20)(16,"tb-toggle-password",15),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,10,"tb.rulenode.credentials-pem-hint")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(4,12,"tb.rulenode.ca-cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(5,14,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.credentialsConfigFormGroup.get("caCertFileName").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(7,16,"tb.rulenode.cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(8,18,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.credentialsConfigFormGroup.get("certFileName").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(10,20,"tb.rulenode.private-key")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(11,22,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.credentialsConfigFormGroup.get("privateKeyFileName").value)}}function ba(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",4)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.credentials-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",5),t.ɵɵtemplate(4,da,3,5,"mat-option",6),t.ɵɵelementEnd(),t.ɵɵtemplate(5,ua,3,3,"mat-error",7),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"section",8),t.ɵɵtemplate(7,ca,0,0,"ng-template",9)(8,ha,11,3,"ng-template",10)(9,ya,17,24,"ng-template",11),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.allCredentialsTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.credentialsConfigFormGroup.get("type").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngSwitch",e.credentialsConfigFormGroup.get("type").value)}}e("MessageTypesConfigComponent",ma);class va extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.subscriptions=[],this.disableCertPemCredentials=!1,this.passwordFieldRequired=!0,this.allCredentialsTypes=Mt,this.credentialsTypeTranslationsMap=Bt,this.propagateChange=e=>{}}ngOnInit(){this.credentialsConfigFormGroup=this.fb.group({type:[null,[N.required]],username:[null,[]],password:[null,[]],caCert:[null,[]],caCertFileName:[null,[]],privateKey:[null,[]],privateKeyFileName:[null,[]],cert:[null,[]],certFileName:[null,[]]}),this.subscriptions.push(this.credentialsConfigFormGroup.valueChanges.subscribe((()=>{this.updateView()}))),this.subscriptions.push(this.credentialsConfigFormGroup.get("type").valueChanges.subscribe((()=>{this.credentialsTypeChanged()})))}ngOnChanges(e){for(const t of Object.keys(e)){const n=e[t];if(!n.firstChange&&n.currentValue!==n.previousValue&&n.currentValue&&"disableCertPemCredentials"===t){"cert.PEM"===this.credentialsConfigFormGroup.get("type").value&&setTimeout((()=>{this.credentialsConfigFormGroup.get("type").patchValue("anonymous",{emitEvent:!0})}))}}}ngOnDestroy(){this.subscriptions.forEach((e=>e.unsubscribe()))}writeValue(e){P(e)&&(this.credentialsConfigFormGroup.reset(e,{emitEvent:!1}),this.updateValidators())}setDisabledState(e){e?this.credentialsConfigFormGroup.disable({emitEvent:!1}):(this.credentialsConfigFormGroup.enable({emitEvent:!1}),this.updateValidators())}updateView(){let e=this.credentialsConfigFormGroup.value;const t=e.type;switch(t){case"anonymous":e={type:t};break;case"basic":e={type:t,username:e.username,password:e.password};break;case"cert.PEM":delete e.username}this.propagateChange(e)}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}validate(e){return this.credentialsConfigFormGroup.valid?null:{credentialsConfig:{valid:!1}}}credentialsTypeChanged(){this.credentialsConfigFormGroup.patchValue({username:null,password:null,caCert:null,caCertFileName:null,privateKey:null,privateKeyFileName:null,cert:null,certFileName:null}),this.updateValidators()}updateValidators(e=!1){const t=this.credentialsConfigFormGroup.get("type").value;switch(e&&this.credentialsConfigFormGroup.reset({type:t},{emitEvent:!1}),this.credentialsConfigFormGroup.setValidators([]),this.credentialsConfigFormGroup.get("username").setValidators([]),this.credentialsConfigFormGroup.get("password").setValidators([]),t){case"anonymous":break;case"basic":this.credentialsConfigFormGroup.get("username").setValidators([N.required]),this.credentialsConfigFormGroup.get("password").setValidators(this.passwordFieldRequired?[N.required]:[]);break;case"cert.PEM":this.credentialsConfigFormGroup.setValidators([this.requiredFilesSelected(N.required,[["caCert","caCertFileName"],["privateKey","privateKeyFileName","cert","certFileName"]])])}this.credentialsConfigFormGroup.get("username").updateValueAndValidity({emitEvent:e}),this.credentialsConfigFormGroup.get("password").updateValueAndValidity({emitEvent:e}),this.credentialsConfigFormGroup.updateValueAndValidity({emitEvent:e})}requiredFilesSelected(e,t=null){return n=>{t||(t=[Object.keys(n.controls)]);return n?.controls&&t.some((t=>t.every((t=>!e(n.controls[t])))))?null:{notAllRequiredFilesSelected:!0}}}static{this.ɵfac=function(e){return new(e||va)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:va,selectors:[["tb-credentials-config"]],inputs:{required:"required",disableCertPemCredentials:"disableCertPemCredentials",passwordFieldRequired:"passwordFieldRequired"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>va)),multi:!0},{provide:O,useExisting:r((()=>va)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵNgOnChangesFeature],decls:9,vars:4,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"tb-credentials-config-panel-group"],["translate",""],["matExpansionPanelContent",""],[1,"mat-block"],["formControlName","type","required",""],[3,"value","disabled",4,"ngFor","ngForOf"],[4,"ngIf"],[1,"flex","flex-col",3,"ngSwitch"],["ngSwitchCase","anonymous"],["ngSwitchCase","basic"],["ngSwitchCase","cert.PEM"],[3,"value","disabled"],["required","","matInput","","formControlName","username"],["type","password","matInput","","formControlName","password",3,"required"],["matSuffix",""],[1,"tb-hint"],["formControlName","caCert","inputId","caCertSelect","noFileText","tb.rulenode.no-file",3,"fileNameChanged","existingFileName","label","dropLabel"],["formControlName","cert","inputId","CertSelect","noFileText","tb.rulenode.no-file",3,"fileNameChanged","existingFileName","label","dropLabel"],["formControlName","privateKey","inputId","privateKeySelect","noFileText","tb.rulenode.no-file",2,"padding-bottom","8px",3,"fileNameChanged","existingFileName","label","dropLabel"],["type","password","matInput","","formControlName","password"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-expansion-panel",1)(2,"mat-expansion-panel-header")(3,"mat-panel-title",2),t.ɵɵtext(4,"tb.rulenode.credentials"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-panel-description"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(8,ba,10,3,"ng-template",3),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.credentialsConfigFormGroup),t.ɵɵadvance(6),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,2,n.credentialsTypeTranslationsMap.get(n.credentialsConfigFormGroup.get("type").value))," "))},dependencies:t.ɵɵgetComponentDepsFactory(va),encapsulation:2})}}function xa(e,n){1&e&&(t.ɵɵelementStart(0,"button",22),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-icon"),t.ɵɵtext(3,"drag_handle"),t.ɵɵelementEnd()()),2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,1,"action.drag"))}function Ca(e,n){if(1&e&&(t.ɵɵelementStart(0,"span",23),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1("",e.get("name").value,".")}}function Sa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",24),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"small",25),t.ɵɵtext(4),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,3,r.argumentTypeMap.get(e).name)," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",r.argumentTypeMap.get(e).description," ")}}function Ta(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",13),t.ɵɵtext(1," tb.rulenode.argument-source-field-input-required "),t.ɵɵelementEnd())}function Ia(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",13),t.ɵɵtext(1," tb.rulenode.argument-key-field-input-required "),t.ɵɵelementEnd())}function Ea(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",26)(1,"mat-label",13),t.ɵɵtext(2,"tb.rulenode.argument-key-field-input"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",27),t.ɵɵelementStart(4,"mat-icon",28),t.ɵɵpipe(5,"translate"),t.ɵɵtext(6," help "),t.ɵɵelementEnd(),t.ɵɵtemplate(7,Ia,2,0,"mat-error",16),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.get("key")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(5,3,"tb.rulenode.math-templatization-tooltip")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.get("key").hasError("required"))}}function Fa(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",13),t.ɵɵtext(1," tb.rulenode.constant-value-field-input-required "),t.ɵɵelementEnd())}function qa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",29)(1,"mat-label",13),t.ɵɵtext(2,"tb.rulenode.constant-value-field-input"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",30),t.ɵɵtemplate(4,Fa,2,0,"mat-error",16),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.get("key")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("key").hasError("required"))}}function Aa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",26)(1,"mat-label",13),t.ɵɵtext(2,"tb.rulenode.default-value-field-input"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",31),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.get("defaultValue"))}}function ka(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",33),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.attributeScopeMap.get(e))," ")}}function Na(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",13),t.ɵɵtext(1," tb.rulenode.attribute-scope-field-input-required "),t.ɵɵelementEnd())}function wa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",12)(1,"mat-label",13),t.ɵɵtext(2,"tb.rulenode.attribute-scope-field-input"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",14),t.ɵɵtemplate(4,ka,3,4,"mat-option",32),t.ɵɵelementEnd(),t.ɵɵtemplate(5,Na,2,0,"mat-error",16),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.get("attributeScope")),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.attributeScope),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("attributeScope").hasError("required"))}}function Ma(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",34),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.removeArgument(n))})),t.ɵɵelementStart(2,"mat-icon"),t.ɵɵtext(3,"close"),t.ɵɵelementEnd()()}2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,1,"action.remove"))}function Ba(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-list-item",6)(1,"div",7),t.ɵɵtemplate(2,xa,4,3,"button",8),t.ɵɵelementStart(3,"div",9),t.ɵɵtemplate(4,Ca,2,1,"span",10),t.ɵɵelementStart(5,"div",11)(6,"mat-form-field",12)(7,"mat-label",13),t.ɵɵtext(8,"tb.rulenode.argument-source-field-input"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-select",14)(10,"mat-select-trigger"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(13,Sa,5,5,"mat-option",15),t.ɵɵelementEnd(),t.ɵɵtemplate(14,Ta,2,0,"mat-error",16),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"div",17),t.ɵɵtemplate(16,Ea,8,5,"mat-form-field",18)(17,qa,5,2,"mat-form-field",19)(18,Aa,4,1,"mat-form-field",18),t.ɵɵelementEnd(),t.ɵɵtemplate(19,wa,6,3,"mat-form-field",20),t.ɵɵelementEnd(),t.ɵɵtemplate(20,Ma,4,3,"button",21),t.ɵɵelementEnd()()()),2&e){let e;const r=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("cdkDragDisabled",a.disabled),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!a.disabled),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",a.displayArgumentName),t.ɵɵadvance(5),t.ɵɵproperty("formControl",r.get("type")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,12,null==(e=a.argumentTypeMap.get(r.get("type").value))?null:e.name)," "),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",a.arguments),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.get("type").hasError("required")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",r.get("type").value&&r.get("type").value!==a.ArgumentType.CONSTANT),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.get("type").value===a.ArgumentType.CONSTANT),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.get("type").value&&r.get("type").value!==a.ArgumentType.CONSTANT),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.get("type").value===a.ArgumentType.ATTRIBUTE),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!a.disabled)}}function Va(e,n){1&e&&(t.ɵɵelementStart(0,"div")(1,"span",35),t.ɵɵtext(2,"tb.rulenode.no-arguments-prompt"),t.ɵɵelementEnd()())}e("CredentialsConfigComponent",va);class Oa extends y{get function(){return this.functionValue}set function(e){e&&this.functionValue!==e&&(this.functionValue=e,this.setupArgumentsFormGroup(!0))}constructor(e,t){super(e),this.store=e,this.fb=t,this.maxArgs=16,this.minArgs=1,this.displayArgumentName=!1,this.mathFunctionMap=_t,this.ArgumentType=jt,this.attributeScopeMap=Xt,this.argumentTypeMap=$t,this.arguments=Object.values(jt),this.attributeScope=Object.values(Yt),this.propagateChange=null,this.valueChangeSubscription=[]}ngOnInit(){this.argumentsFormGroup=this.fb.group({arguments:this.fb.array([])}),this.valueChangeSubscription.push(this.argumentsFormGroup.valueChanges.subscribe((()=>{this.updateModel()}))),this.setupArgumentsFormGroup()}onDrop(e){const t=this.argumentsFormArray,n=t.at(e.previousIndex);t.removeAt(e.previousIndex),t.insert(e.currentIndex,n),this.updateArgumentNames()}get argumentsFormArray(){return this.argumentsFormGroup.get("arguments")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.argumentsFormGroup.disable({emitEvent:!1}):(this.argumentsFormGroup.enable({emitEvent:!1}),this.argumentsFormArray.controls.forEach((e=>this.updateArgumentControlValidators(e))))}ngOnDestroy(){this.valueChangeSubscription.length&&this.valueChangeSubscription.forEach((e=>e.unsubscribe()))}writeValue(e){const t=[];e&&e.forEach(((e,n)=>{t.push(this.createArgumentControl(e,n))})),this.argumentsFormGroup.setControl("arguments",this.fb.array(t),{emitEvent:!1}),this.setupArgumentsFormGroup()}removeArgument(e){this.argumentsFormArray.removeAt(e),this.updateArgumentNames()}addArgument(e=!0){const t=this.argumentsFormArray,n=this.createArgumentControl(null,t.length);t.push(n,{emitEvent:e})}validate(e){return this.argumentsFormGroup.valid?null:{argumentsRequired:!0}}setupArgumentsFormGroup(e=!1){if(this.function&&(this.maxArgs=this.mathFunctionMap.get(this.function).maxArgs,this.minArgs=this.mathFunctionMap.get(this.function).minArgs,this.displayArgumentName=this.function===Rt.CUSTOM),this.argumentsFormGroup){for(this.argumentsFormGroup.get("arguments").setValidators([N.minLength(this.minArgs),N.maxLength(this.maxArgs)]);this.argumentsFormArray.length>this.maxArgs;)this.removeArgument(this.maxArgs-1);for(;this.argumentsFormArray.length{this.updateArgumentControlValidators(n),n.get("attributeScope").updateValueAndValidity({emitEvent:!1}),n.get("defaultValue").updateValueAndValidity({emitEvent:!1})}))),n}updateArgumentControlValidators(e){const t=e.get("type").value;t===jt.ATTRIBUTE?e.get("attributeScope").enable({emitEvent:!1}):e.get("attributeScope").disable({emitEvent:!1}),t&&t!==jt.CONSTANT?e.get("defaultValue").enable({emitEvent:!1}):e.get("defaultValue").disable({emitEvent:!1})}updateArgumentNames(){this.argumentsFormArray.controls.forEach(((e,t)=>{e.get("name").setValue(Jt[t])}))}updateModel(){const e=this.argumentsFormArray.value;e.length&&this.argumentsFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}static{this.ɵfac=function(e){return new(e||Oa)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Oa,selectors:[["tb-arguments-map-config"]],inputs:{disabled:"disabled",function:"function"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>Oa)),multi:!0},{provide:O,useExisting:r((()=>Oa)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:10,vars:10,consts:[[1,"flex","flex-col"],[2,"max-height","500px","overflow","auto"],["cdkDropList","","cdkDropListOrientation","vertical",1,"tb-drop-list","arguments-list",3,"cdkDropListDropped","formGroup","cdkDropListDisabled"],["formArrayName","arguments","cdkDrag","","class","tb-argument tb-draggable","style","height: 100%",3,"cdkDragDisabled",4,"ngFor","ngForOf"],[4,"ngIf"],["mat-button","","mat-raised-button","","color","primary","type","button","matTooltipPosition","above",3,"click","disabled"],["formArrayName","arguments","cdkDrag","",1,"tb-argument","tb-draggable",2,"height","100%",3,"cdkDragDisabled"],[1,"flex","flex-1","flex-row","items-center","justify-start"],["mat-icon-button","","color","primary","cdkDragHandle","","class","tb-drag-handle handle","style","min-width: 40px; margin: 0","matTooltipPosition","above",3,"matTooltip",4,"ngIf"],[1,"flex","flex-1","flex-row","items-center","justify-start","gap-4"],["style","padding: 0 10px; min-width: 20px;",4,"ngIf"],[1,"flex","flex-1","flex-col"],[1,"mat-block"],["translate",""],["required","",3,"formControl"],["style","border-bottom: 1px solid #eee;",3,"value",4,"ngFor","ngForOf"],["translate","",4,"ngIf"],[1,"flex","flex-1","flex-row","xs:flex-col","gt-xs:gap-4"],["floatLabel","always","class","mat-block gt-xs:max-w-50% gt-xs:flex-full",4,"ngIf"],["floatLabel","always","class","mat-block flex-1",4,"ngIf"],["class","mat-block",4,"ngIf"],["mat-icon-button","","color","primary","style","min-width: 40px;","matTooltipPosition","above",3,"matTooltip","click",4,"ngIf"],["mat-icon-button","","color","primary","cdkDragHandle","","matTooltipPosition","above",1,"tb-drag-handle","handle",2,"min-width","40px","margin","0",3,"matTooltip"],[2,"padding","0 10px","min-width","20px"],[2,"border-bottom","1px solid #eee",3,"value"],[2,"display","block","overflow","hidden","text-overflow","ellipsis","white-space","nowrap"],["floatLabel","always",1,"mat-block","gt-xs:max-w-50%","gt-xs:flex-full"],["matInput","","required","",3,"formControl"],["aria-hidden","false","aria-label","help-icon","matSuffix","","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],["floatLabel","always",1,"mat-block","flex-1"],["matInput","","required","","step","1","min","0","type","number",3,"formControl"],["matInput","","step","1","type","number",3,"formControl"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["mat-icon-button","","color","primary","matTooltipPosition","above",2,"min-width","40px",3,"click","matTooltip"],["translate","",1,"tb-prompt","flex","items-center","justify-center"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"mat-list",2),t.ɵɵlistener("cdkDropListDropped",(function(e){return n.onDrop(e)})),t.ɵɵtemplate(3,Ba,21,14,"mat-list-item",3),t.ɵɵelementEnd()(),t.ɵɵtemplate(4,Va,3,0,"div",4),t.ɵɵelementStart(5,"button",5),t.ɵɵlistener("click",(function(){return n.addArgument()})),t.ɵɵelementStart(6,"mat-icon"),t.ɵɵtext(7,"add"),t.ɵɵelementEnd(),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(),t.ɵɵclassProp("readonly",n.disabled),t.ɵɵadvance(),t.ɵɵproperty("formGroup",n.argumentsFormGroup)("cdkDropListDisabled",n.disabled),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.argumentsFormArray.controls),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.argumentsFormArray.length),t.ɵɵadvance(),t.ɵɵproperty("disabled",n.argumentsFormArray.length>=n.maxArgs),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(9,8,"action.add")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Oa),styles:["[_nghost-%COMP%] .mat-mdc-list-item.tb-argument[_ngcontent-%COMP%]{border:solid rgba(0,0,0,.25) 1px;border-radius:4px;padding:10px 0;margin-bottom:16px}[_nghost-%COMP%] .arguments-list[_ngcontent-%COMP%]{padding:0}"]})}}e("ArgumentsMapConfigComponent",Oa);const Da=["operationInput"];function La(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",9),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.clear())})),t.ɵɵelementStart(1,"mat-icon",10),t.ɵɵtext(2,"close"),t.ɵɵelementEnd()()}}function Pa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",11),t.ɵɵelement(1,"span",12),t.ɵɵpipe(2,"highlight"),t.ɵɵelementStart(3,"small",13),t.ɵɵtext(4),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(2,3,e.value+" | "+e.name,r.searchText),t.ɵɵsanitizeHtml),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",e.description," ")}}function Ra(e,n){1&e&&(t.ɵɵelementStart(0,"mat-option",11)(1,"span",3),t.ɵɵtext(2,"tb.rulenode.no-option-found"),t.ɵɵelementEnd()()),2&e&&t.ɵɵproperty("value",null)}class _a extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.searchText="",this.dirty=!1,this.mathOperation=[..._t.values()],this.propagateChange=null}ngOnInit(){this.mathFunctionForm=this.fb.group({operation:[""]}),this.filteredOptions=this.mathFunctionForm.get("operation").valueChanges.pipe(ae((e=>{let t;t="string"==typeof e&&Rt[e]?Rt[e]:null,this.updateView(t)})),te((e=>(this.searchText=e||"",e?this._filter(e):this.mathOperation.slice()))))}_filter(e){const t=e.toLowerCase();return this.mathOperation.filter((e=>e.name.toLowerCase().includes(t)||e.value.toLowerCase().includes(t)))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.mathFunctionForm.disable({emitEvent:!1}):this.mathFunctionForm.enable({emitEvent:!1})}mathFunctionDisplayFn(e){if(e){const t=_t.get(e);return t.value+" | "+t.name}return""}writeValue(e){this.modelValue=e,this.mathFunctionForm.get("operation").setValue(e,{emitEvent:!1}),this.dirty=!0}updateView(e){this.modelValue!==e&&(this.modelValue=e,this.propagateChange(this.modelValue))}onFocus(){this.dirty&&(this.mathFunctionForm.get("operation").updateValueAndValidity({onlySelf:!0}),this.dirty=!1)}clear(){this.mathFunctionForm.get("operation").patchValue(""),setTimeout((()=>{this.operationInput.nativeElement.blur(),this.operationInput.nativeElement.focus()}),0)}static{this.ɵfac=function(e){return new(e||_a)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(t.Injector),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:_a,selectors:[["tb-math-function-autocomplete"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(Da,7),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.operationInput=e.first)}},inputs:{required:"required",disabled:"disabled"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>_a)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:12,vars:11,consts:[["operationInput",""],["auto","matAutocomplete"],[1,"mat-block",3,"formGroup"],["translate",""],["type","text","matInput","","formControlName","operation",3,"focusin","required","matAutocomplete"],["type","button","matSuffix","","mat-icon-button","","aria-label","Clear",3,"click",4,"ngIf"],[1,"tb-autocomplete",3,"displayWith"],[3,"value",4,"ngFor","ngForOf"],[3,"value",4,"ngIf"],["type","button","matSuffix","","mat-icon-button","","aria-label","Clear",3,"click"],[1,"material-icons"],[3,"value"],[3,"innerHTML"],[2,"display","block","overflow","hidden","text-overflow","ellipsis","white-space","nowrap"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field",2)(1,"mat-label",3),t.ɵɵtext(2,"tb.rulenode.functions-field-input"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"input",4,0),t.ɵɵlistener("focusin",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onFocus())})),t.ɵɵelementEnd(),t.ɵɵtemplate(5,La,3,0,"button",5),t.ɵɵelementStart(6,"mat-autocomplete",6,1),t.ɵɵtemplate(8,Pa,5,6,"mat-option",7),t.ɵɵpipe(9,"async"),t.ɵɵtemplate(10,Ra,3,1,"mat-option",8),t.ɵɵpipe(11,"async"),t.ɵɵelementEnd()()}if(2&e){let e;const r=t.ɵɵreference(7);t.ɵɵproperty("formGroup",n.mathFunctionForm),t.ɵɵadvance(3),t.ɵɵproperty("required",n.required)("matAutocomplete",r),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.mathFunctionForm.get("operation").value),t.ɵɵadvance(),t.ɵɵproperty("displayWith",n.mathFunctionDisplayFn),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(9,7,n.filteredOptions)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!(null!=(e=t.ɵɵpipeBind1(11,9,n.filteredOptions))&&e.length))}},dependencies:t.ɵɵgetComponentDepsFactory(_a),encapsulation:2})}}function ja(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",8),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}function Ga(e,n){if(1&e&&(t.ɵɵelementStart(0,"button",9),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-icon",10),t.ɵɵtext(3,"content_copy "),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,2,"tb.rulenode.copy-message-type")),t.ɵɵproperty("cbContent",e.messageTypeFormGroup.get("messageType").value)}}function Ka(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.message-type-value-required")," "))}function Ua(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.message-type-value-max-length")," "))}e("MathFunctionAutocompleteComponent",_a);class Ha{set required(e){this.requiredValue!==e&&(this.requiredValue=e,this.updateValidators())}get required(){return this.requiredValue}constructor(e){this.fb=e,this.subscriptSizing="fixed",this.messageTypes=[{name:"Post attributes",value:"POST_ATTRIBUTES_REQUEST"},{name:"Post telemetry",value:"POST_TELEMETRY_REQUEST"},{name:"Custom",value:""}],this.propagateChange=()=>{},this.destroy$=new Y,this.messageTypeFormGroup=this.fb.group({messageTypeAlias:[null,[N.required]],messageType:[{value:null,disabled:!0},[N.maxLength(255)]]}),this.messageTypeFormGroup.get("messageTypeAlias").valueChanges.pipe(W(this.destroy$)).subscribe((e=>this.updateMessageTypeValue(e))),this.messageTypeFormGroup.valueChanges.pipe(W(this.destroy$)).subscribe((()=>this.updateView()))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnTouched(e){}registerOnChange(e){this.propagateChange=e}writeValue(e){this.modelValue=e;let t=this.messageTypes.find((t=>t.value===e));t||(t=this.messageTypes.find((e=>""===e.value))),this.messageTypeFormGroup.get("messageTypeAlias").patchValue(t,{emitEvent:!1}),this.messageTypeFormGroup.get("messageType").patchValue(e,{emitEvent:!1})}validate(){return this.messageTypeFormGroup.valid?null:{messageTypeInvalid:!0}}setDisabledState(e){this.disabled=e,e?this.messageTypeFormGroup.disable({emitEvent:!1}):(this.messageTypeFormGroup.enable({emitEvent:!1}),"Custom"!==this.messageTypeFormGroup.get("messageTypeAlias").value?.name&&this.messageTypeFormGroup.get("messageType").disable({emitEvent:!1}))}updateView(){const e=this.messageTypeFormGroup.getRawValue().messageType;this.modelValue!==e&&(this.modelValue=e,this.propagateChange(this.modelValue))}updateValidators(){this.messageTypeFormGroup.get("messageType").setValidators(this.required?[N.required,N.maxLength(255)]:[N.maxLength(255)]),this.messageTypeFormGroup.get("messageType").updateValueAndValidity({emitEvent:!1})}updateMessageTypeValue(e){"Custom"!==e?.name?this.messageTypeFormGroup.get("messageType").disable({emitEvent:!1}):this.messageTypeFormGroup.get("messageType").enable({emitEvent:!1}),this.messageTypeFormGroup.get("messageType").patchValue(e.value??null)}static{this.ɵfac=function(e){return new(e||Ha)(t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ha,selectors:[["tb-output-message-type-autocomplete"]],inputs:{subscriptSizing:"subscriptSizing",disabled:"disabled",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>Ha)),multi:!0},{provide:O,useExisting:r((()=>Ha)),multi:!0}])],decls:15,vars:14,consts:[[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs",3,"formGroup"],["hideRequiredMarker","",1,"flex",3,"subscriptSizing"],["formControlName","messageTypeAlias"],[3,"value",4,"ngFor","ngForOf"],[1,"flex",3,"subscriptSizing","hideRequiredMarker"],["matInput","","type","text","formControlName","messageType"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip",4,"ngIf"],[4,"ngIf"],[3,"value"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip"],["aria-hidden","false","aria-label","help-icon"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",2),t.ɵɵtemplate(6,ja,2,2,"mat-option",3),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",4)(8,"mat-label"),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",5),t.ɵɵtemplate(12,Ga,4,4,"button",6)(13,Ka,3,3,"mat-error",7)(14,Ua,3,3,"mat-error",7),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.messageTypeFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("subscriptSizing",n.subscriptSizing),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,10,"tb.rulenode.output-message-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.messageTypes),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("subscriptSizing",n.subscriptSizing),t.ɵɵproperty("hideRequiredMarker",n.messageTypeFormGroup.get("messageType").disabled),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,12,"tb.rulenode.message-type-value")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.messageTypeFormGroup.get("messageType").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.messageTypeFormGroup.get("messageType").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.messageTypeFormGroup.get("messageType").hasError("maxlength")))},dependencies:t.ɵɵgetComponentDepsFactory(Ha),encapsulation:2})}}e("OutputMessageTypeAutocompleteComponent",Ha),J([h()],Ha.prototype,"disabled",void 0),J([h()],Ha.prototype,"required",null);const za=(e,t)=>({keyText:e,valText:t});function $a(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,e.keyRequiredText)," ")}}function Qa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,e.valRequiredText)," ")}}function Ja(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",10)(1,"mat-form-field",11),t.ɵɵelement(2,"input",12),t.ɵɵpipe(3,"translate"),t.ɵɵtemplate(4,$a,3,3,"mat-error",13),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",11),t.ɵɵelement(6,"input",12),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,Qa,3,3,"mat-error",13),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"button",14),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"async"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.removeKeyVal(n))})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"close"),t.ɵɵelementEnd()()()}if(2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(3,10,r.keyText)),t.ɵɵproperty("formControl",e.get("key")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("key").hasError("required")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,12,r.valText)),t.ɵɵproperty("formControl",e.get("value")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("value").hasError("required")),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",r.disabled),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(10,14,"tb.key-val.remove-entry")),t.ɵɵproperty("disabled",t.ɵɵpipeBind1(11,16,r.isLoading$))}}function Ya(e,n){if(1&e&&(t.ɵɵelement(0,"div",15),t.ɵɵpipe(1,"translate"),t.ɵɵpipe(2,"safe")),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(2,3,t.ɵɵpipeBind1(1,1,e.hintText),"html"),t.ɵɵsanitizeHtml)}}class Wa extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.propagateChange=null,this.valueChangeSubscription=null}ngOnInit(){this.ngControl=this.injector.get(B),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.kvListFormGroup=this.fb.group({}),this.kvListFormGroup.addControl("keyVals",this.fb.array([]))}keyValsFormArray(){return this.kvListFormGroup.get("keyVals")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.kvListFormGroup.disable({emitEvent:!1}):this.kvListFormGroup.enable({emitEvent:!1})}writeValue(e){this.valueChangeSubscription&&this.valueChangeSubscription.unsubscribe();const t=[];if(e)for(const n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&t.push(this.fb.group({key:[n,[N.required]],value:[e[n],[N.required]]}));this.kvListFormGroup.setControl("keyVals",this.fb.array(t)),this.valueChangeSubscription=this.kvListFormGroup.valueChanges.subscribe((()=>{this.updateModel()}))}removeKeyVal(e){this.kvListFormGroup.get("keyVals").removeAt(e)}addKeyVal(){this.kvListFormGroup.get("keyVals").push(this.fb.group({key:["",[N.required]],value:["",[N.required]]}))}validate(e){const t=this.kvListFormGroup.get("keyVals").value;if(!t.length&&this.required)return{kvMapRequired:!0};if(!this.kvListFormGroup.valid)return{kvFieldsRequired:!0};if(this.uniqueKeyValuePairValidator)for(const e of t)if(e.key===e.value)return{uniqueKeyValuePair:!0};return null}updateModel(){const e=this.kvListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.kvListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}static{this.ɵfac=function(e){return new(e||Wa)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(t.Injector),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Wa,selectors:[["tb-kv-map-config-old"]],inputs:{disabled:"disabled",uniqueKeyValuePairValidator:"uniqueKeyValuePairValidator",requiredText:"requiredText",keyText:"keyText",keyRequiredText:"keyRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>Wa)),multi:!0},{provide:O,useExisting:r((()=>Wa)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:21,vars:26,consts:[[1,"tb-kv-map-config","flex","flex-col",3,"formGroup"],[1,"header","flex","flex-1","flex-row","gap-2"],[1,"cell","tb-required","flex-1"],["innerHTML",t.ɵɵtrustConstantHtml` `,2,"width","52px"],[1,"body"],["class","row flex flex-row items-center justify-start gap-2","formArrayName","keyVals",4,"ngFor","ngForOf"],["class","tb-hint",3,"innerHTML",4,"ngIf"],[3,"error"],[2,"margin-top","16px"],["mat-button","","mat-raised-button","","color","primary","type","button","matTooltipPosition","above",3,"click","disabled","matTooltip"],["formArrayName","keyVals",1,"row","flex","flex-row","items-center","justify-start","gap-2"],[1,"cell","mat-block","flex-1"],["matInput","","required","",3,"formControl","placeholder"],[4,"ngIf"],["mat-icon-button","","color","primary","type","button","matTooltipPosition","above",3,"click","disabled","matTooltip"],[1,"tb-hint",3,"innerHTML"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"span",2),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"span",2),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(8,"span",3),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"div",4),t.ɵɵtemplate(10,Ja,14,18,"div",5)(11,Ya,3,6,"div",6),t.ɵɵelementEnd(),t.ɵɵelement(12,"tb-error",7),t.ɵɵelementStart(13,"div",8)(14,"button",9),t.ɵɵpipe(15,"translate"),t.ɵɵpipe(16,"async"),t.ɵɵlistener("click",(function(){return n.addKeyVal()})),t.ɵɵelementStart(17,"mat-icon"),t.ɵɵtext(18,"add"),t.ɵɵelementEnd(),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.kvListFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,13,n.keyText)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,15,n.valText)),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.disabled),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.keyValsFormArray().controls),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.hintText),t.ɵɵadvance(),t.ɵɵproperty("error",n.ngControl.hasError("kvMapRequired")||n.ngControl.hasError("uniqueKeyValuePair")?n.ngControl.hasError("kvMapRequired")?n.translate.instant(n.requiredText):n.translate.instant("tb.key-val.unique-key-value-pair-error",t.ɵɵpureFunction2(23,za,n.translate.instant(n.keyText),n.translate.instant(n.valText))):""),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.disabled),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(15,17,"tb.key-val.add-entry")),t.ɵɵproperty("disabled",t.ɵɵpipeBind1(16,19,n.isLoading$)),t.ɵɵadvance(5),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(20,21,"action.add")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Wa),styles:["[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%]{margin-bottom:16px}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] .header[_ngcontent-%COMP%]{padding-left:5px;padding-right:5px;padding-bottom:5px}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .cell[_ngcontent-%COMP%]{padding-left:5px;padding-right:5px;color:#757575;font-size:12px;font-weight:700;white-space:nowrap}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .tb-required[_ngcontent-%COMP%]:after{color:#757575;font-size:12px;font-weight:700}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] .body[_ngcontent-%COMP%]{padding-left:5px;padding-right:5px;padding-bottom:0;max-height:300px;overflow:auto}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] .body[_ngcontent-%COMP%] .cell[_ngcontent-%COMP%]{padding-left:5px;padding-right:5px}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] tb-error[_ngcontent-%COMP%]{display:block;margin-top:-12px}"]})}}function Xa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip-option",4),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("selectable",r.chipControlGroup.get("chipControl").value!==e.value),t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate(e.name)}}e("KvMapConfigOldComponent",Wa);class Za{constructor(e,t){this.fb=e,this.translate=t,this.translation=Ht,this.propagateChange=()=>{},this.destroy$=new Y,this.selectOptions=[]}ngOnInit(){this.initOptions(),this.chipControlGroup=this.fb.group({chipControl:[null,[]]}),this.chipControlGroup.get("chipControl").valueChanges.pipe(ie(this.destroy$)).subscribe((e=>{e&&this.propagateChange(e)}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}initOptions(){for(const e of this.translation.keys())this.selectOptions.push({value:e,name:this.translate.instant(this.translation.get(e))})}writeValue(e){this.chipControlGroup.get("chipControl").patchValue(e,{emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){e?this.chipControlGroup.disable({emitEvent:!1}):this.chipControlGroup.enable({emitEvent:!1})}static{this.ɵfac=function(e){return new(e||Za)(t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Za,selectors:[["tb-msg-metadata-chip"]],inputs:{labelText:"labelText",translation:"translation"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>Za)),multi:!0}])],decls:5,vars:3,consts:[[1,"tb-form-row","space-between",3,"formGroup"],[1,"fixed-title-width"],["formControlName","chipControl"],["color","primary",3,"selectable","value",4,"ngFor","ngForOf"],["color","primary",3,"selectable","value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1),t.ɵɵtext(2),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-chip-listbox",2),t.ɵɵtemplate(4,Xa,2,3,"mat-chip-option",3),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.chipControlGroup),t.ɵɵadvance(2),t.ɵɵtextInterpolate(n.labelText),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.selectOptions))},dependencies:t.ɵɵgetComponentDepsFactory(Za),encapsulation:2})}}function ei(e,n){1&e&&(t.ɵɵelementStart(0,"div",13),t.ɵɵtext(1," tb.rulenode.map-fields-required "),t.ɵɵelementEnd())}function ti(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",13),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.requiredText," ")}}function ni(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}function ri(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",14)(1,"mat-form-field",15)(2,"mat-select",16),t.ɵɵtemplate(3,ni,2,2,"mat-option",17),t.ɵɵelementEnd()(),t.ɵɵelementStart(4,"mat-form-field",15),t.ɵɵelement(5,"input",18),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"div",19)(7,"button",20),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"async"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.removeKeyVal(n))})),t.ɵɵelementStart(10,"mat-icon"),t.ɵɵtext(11,"delete"),t.ɵɵelementEnd()()()()}if(2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵproperty("placeholder",r.selectText)("formControl",e.get("key")),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",r.filterSelectOptions(e)),t.ɵɵadvance(2),t.ɵɵproperty("placeholder",r.valText)("formControl",e.get("value")),t.ɵɵadvance(2),t.ɵɵclassProp("tb-hidden",1===r.keyValsFormArray().controls.length),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,9,"tb.key-val.remove-mapping-entry")),t.ɵɵproperty("disabled",t.ɵɵpipeBind1(9,11,r.isLoading$))}}e("MsgMetadataChipComponent",Za);class ai extends y{constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.destroy$=new Y,this.sourceFieldSubcritption=[],this.propagateChange=null,this.disabled=!1,this.required=!1,this.oneMapRequiredValidator=e=>e.get("keyVals").value.length,this.propagateNestedErrors=e=>{if(this.svListFormGroup&&this.svListFormGroup.get("keyVals")&&"VALID"===this.svListFormGroup.get("keyVals")?.status)return null;const t={};if(this.svListFormGroup&&this.svListFormGroup.setErrors(null),e instanceof w||e instanceof M){if(e.errors)for(const n of Object.keys(e.errors))t[n]=!0;for(const n of Object.keys(e.controls)){const r=this.propagateNestedErrors(e.controls[n]);if(r&&Object.keys(r).length)for(const e of Object.keys(r))t[e]=!0}return t}if(e.errors)for(const n of Object.keys(e.errors))t[n]=!0;return R(t,{})?null:t}}ngOnInit(){this.ngControl=this.injector.get(B),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.svListFormGroup=this.fb.group({keyVals:this.fb.array([])},{validators:[this.propagateNestedErrors,this.oneMapRequiredValidator]}),this.svListFormGroup.valueChanges.pipe(ie(this.destroy$)).subscribe((()=>{this.updateModel()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}keyValsFormArray(){return this.svListFormGroup.get("keyVals")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.svListFormGroup.disable({emitEvent:!1}):this.svListFormGroup.enable({emitEvent:!1})}writeValue(e){const t=Object.keys(e).map((t=>({key:t,value:e[t]})));if(this.keyValsFormArray().length===t.length)this.keyValsFormArray().patchValue(t,{emitEvent:!1});else{const e=[];t.forEach((t=>{e.push(this.fb.group({key:[t.key,[N.required]],value:[t.value,[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]}))})),this.svListFormGroup.setControl("keyVals",this.fb.array(e,this.propagateNestedErrors),{emitEvent:!1});for(const e of this.keyValsFormArray().controls)this.keyChangeSubscribe(e)}}filterSelectOptions(e){const t=[];for(const e of this.svListFormGroup.get("keyVals").value){const n=this.selectOptions.find((t=>t.value===e.key));n&&t.push(n)}const n=[];for(const r of this.selectOptions)P(t.find((e=>e.value===r.value)))&&r.value!==e?.get("key").value||n.push(r);return n}removeKeyVal(e){this.keyValsFormArray().removeAt(e),this.sourceFieldSubcritption[e].unsubscribe(),this.sourceFieldSubcritption.splice(e,1)}addKeyVal(){this.keyValsFormArray().push(this.fb.group({key:["",[N.required]],value:["",[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]})),this.keyChangeSubscribe(this.keyValsFormArray().at(this.keyValsFormArray().length-1))}keyChangeSubscribe(e){this.sourceFieldSubcritption.push(e.get("key").valueChanges.pipe(ie(this.destroy$)).subscribe((t=>{const n=ct.get(t);e.get("value").patchValue(this.targetKeyPrefix+n[0].toUpperCase()+n.slice(1))})))}validate(e){return!this.svListFormGroup.get("keyVals").value.length&&this.required?{svMapRequired:!0}:this.svListFormGroup.valid?null:{svFieldsRequired:!0}}updateModel(){const e=this.svListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.svListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}static{this.ɵfac=function(e){return new(e||ai)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(t.Injector),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ai,selectors:[["tb-sv-map-config"]],inputs:{selectOptions:"selectOptions",disabled:"disabled",labelText:"labelText",requiredText:"requiredText",targetKeyPrefix:"targetKeyPrefix",selectText:"selectText",selectRequiredText:"selectRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",popupHelpLink:"popupHelpLink",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>ai)),multi:!0},{provide:O,useExisting:r((()=>ai)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:22,vars:15,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],[1,"tb-form-row","no-padding","no-border","space-between"],[1,"tb-form-panel-title"],["class","tb-form-panel-hint tb-error","translate","",4,"ngIf"],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-table"],[1,"tb-form-table-header"],[1,"tb-form-table-header-cell","field-space"],[1,"tb-form-table-header-cell","actions-header"],[1,"tb-form-table-body"],["class","tb-form-table-row",4,"ngFor","ngForOf"],["type","button","mat-stroked-button","","color","primary",3,"click","disabled"],[3,"hintText","popupHelpLink"],["translate","",1,"tb-form-panel-hint","tb-error"],[1,"tb-form-table-row"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","field-space"],["required","",3,"placeholder","formControl"],[3,"value",4,"ngFor","ngForOf"],["matInput","",3,"placeholder","formControl"],[1,"tb-form-table-row-cell-buttons"],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","disabled","matTooltip"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵtemplate(4,ei,2,0,"div",3)(5,ti,2,1,"div",3),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"div",4)(7,"div",5)(8,"div",6)(9,"div",7),t.ɵɵtext(10),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"div",7),t.ɵɵtext(12),t.ɵɵelementEnd(),t.ɵɵelement(13,"div",8),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"div",9),t.ɵɵtemplate(15,ri,12,13,"div",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(16,"div")(17,"button",11),t.ɵɵpipe(18,"async"),t.ɵɵlistener("click",(function(){return n.addKeyVal()})),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd()(),t.ɵɵelement(21,"tb-example-hint",12),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.svListFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(n.labelText),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.svListFormGroup.hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.svListFormGroup.hasError("svMapRequired")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(n.selectText),t.ɵɵadvance(2),t.ɵɵtextInterpolate(n.valText),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.keyValsFormArray().controls),t.ɵɵadvance(2),t.ɵɵproperty("disabled",t.ɵɵpipeBind1(18,11,n.isLoading$)||n.keyValsFormArray().length>=n.selectOptions.length),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(20,13,"tb.key-val.add-mapping-entry")," "),t.ɵɵadvance(2),t.ɵɵproperty("hintText",n.hintText)("popupHelpLink",n.popupHelpLink))},dependencies:t.ɵɵgetComponentDepsFactory(ai),styles:["[_nghost-%COMP%] .field-space[_ngcontent-%COMP%]{flex:1 1 50%}[_nghost-%COMP%] .actions-header[_ngcontent-%COMP%]{width:40px}"]})}}function ii(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",11),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.directionTypeTranslations.get(e))," ")}}e("SvMapConfigComponent",ai),J([h()],ai.prototype,"disabled",void 0),J([h()],ai.prototype,"required",void 0);class oi extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(d),this.directionTypeTranslations=b,this.propagateChange=null}ngOnInit(){this.relationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[N.required]],maxLevel:[null,[]],filters:[null]}),this.relationsQueryFormGroup.valueChanges.subscribe((e=>{this.relationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.relationsQueryFormGroup.disable({emitEvent:!1}):this.relationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.relationsQueryFormGroup.reset(e||{},{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||oi)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:oi,selectors:[["tb-relations-query-config-old"]],inputs:{disabled:"disabled",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>oi)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:18,vars:8,consts:[[1,"flex","flex-col",3,"formGroup"],["formControlName","fetchLastLevelOnly"],[1,"flex","flex-row","gap-2"],[1,"mat-block",2,"min-width","100px"],["translate",""],["required","","matInput","","formControlName","direction"],[3,"value",4,"ngFor","ngForOf"],["floatLabel","always",1,"mat-block","flex-1"],["matInput","","type","number","min","1","step","1","formControlName","maxLevel",3,"placeholder"],["translate","",1,"mat-caption",2,"color","#6e6e6e"],["formControlName","filters"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-checkbox",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",2)(5,"mat-form-field",3)(6,"mat-label",4),t.ɵɵtext(7,"relation.direction"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",5),t.ɵɵtemplate(9,ii,3,4,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",7)(11,"mat-label",4),t.ɵɵtext(12,"tb.rulenode.max-relation-level"),t.ɵɵelementEnd(),t.ɵɵelement(13,"input",8),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"div",9),t.ɵɵtext(16,"relation.relation-filters"),t.ɵɵelementEnd(),t.ɵɵelement(17,"tb-relation-filters",10),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.relationsQueryFormGroup),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,4,"alias.last-level-relation")," "),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",n.directionTypes),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(14,6,"tb.rulenode.unlimited-level")))},dependencies:t.ɵɵgetComponentDepsFactory(oi),encapsulation:2})}}e("RelationsQueryConfigOldComponent",oi);const li=e=>({latestTsKeyName:e}),si=e=>({inputName:e});function pi(e,n){1&e&&t.ɵɵelementContainer(0,9)}function mi(e,n){1&e&&t.ɵɵelementContainer(0,9)}function di(e,n){1&e&&t.ɵɵelementContainer(0,9)}function ui(e,n){1&e&&t.ɵɵelementContainer(0,9)}function ci(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",11),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind2(1,2,"tb.rulenode.fetch-latest-telemetry-with-timestamp-tooltip",t.ɵɵpureFunction1(7,li,e.attributeControlGroup.get("latestTsKeyNames").value[0]))),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,5,"tb.rulenode.fetch-latest-telemetry-with-timestamp")," ")}}function fi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",12),t.ɵɵpipe(1,"translate"),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"help"),t.ɵɵelementEnd()),2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(2,3,"tb.rulenode.chip-help",t.ɵɵpureFunction1(6,si,t.ɵɵpipeBind1(1,1,"tb.rulenode.field-name"))))}class gi{constructor(e,t){this.translate=e,this.fb=t,this.propagateChange=e=>{},this.destroy$=new Y,this.separatorKeysCodes=[U,H,z],this.onTouched=()=>{}}ngOnInit(){this.attributeControlGroup=this.fb.group({clientAttributeNames:[[],[]],sharedAttributeNames:[[],[]],serverAttributeNames:[[],[]],latestTsKeyNames:[[],[]],getLatestValueWithTs:[!1,[]]},{validators:this.atLeastOne(N.required,["clientAttributeNames","sharedAttributeNames","serverAttributeNames","latestTsKeyNames"])}),this.attributeControlGroup.valueChanges.pipe(ie(this.destroy$)).subscribe((e=>{this.propagateChange(this.preparePropagateValue(e))}))}preparePropagateValue(e){const t={};for(const n in e)t[n]="getLatestValueWithTs"===n||P(e[n])?e[n]:[];return t}validate(){return this.attributeControlGroup.valid?null:{atLeastOneRequired:!0}}atLeastOne(e,t=null){return n=>{t||(t=Object.keys(n.controls));return n?.controls&&t.some((t=>!e(n.controls[t])))?null:{atLeastOne:!0}}}writeValue(e){this.attributeControlGroup.setValue(e,{emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){this.onTouched=e}setDisabledState(e){e?this.attributeControlGroup.disable({emitEvent:!1}):this.attributeControlGroup.enable({emitEvent:!1})}ngOnDestroy(){this.destroy$.next(null),this.destroy$.complete()}static{this.ɵfac=function(e){return new(e||gi)(t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:gi,selectors:[["tb-select-attributes"]],inputs:{popupHelpLink:"popupHelpLink"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>gi)),multi:!0},{provide:O,useExisting:gi,multi:!0}])],decls:22,vars:34,consts:[["helpIcon",""],[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[3,"hintText","popupHelpLink"],["subscriptSizing","dynamic","editable","","formControlName","clientAttributeNames",1,"mat-block",3,"focusout","placeholder","label"],["matSuffix","",4,"ngTemplateOutlet"],["subscriptSizing","dynamic","editable","","formControlName","sharedAttributeNames",1,"mat-block",3,"focusout","placeholder","label"],["subscriptSizing","dynamic","editable","","formControlName","serverAttributeNames",1,"mat-block",3,"focusout","placeholder","label"],["subscriptSizing","dynamic","editable","","formControlName","latestTsKeyNames",1,"mat-block",3,"focusout","placeholder","label"],["class","tb-form-row no-border no-padding",3,"tb-hint-tooltip-icon",4,"ngIf"],["matSuffix",""],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","getLatestValueWithTs",1,"mat-slide"],["aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",1),t.ɵɵelement(1,"tb-example-hint",2),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"tb-string-items-list",3),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("focusout",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onTouched())})),t.ɵɵtemplate(6,pi,1,0,"ng-container",4),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"tb-string-items-list",5),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"translate"),t.ɵɵlistener("focusout",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onTouched())})),t.ɵɵtemplate(10,mi,1,0,"ng-container",4),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"tb-string-items-list",6),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵlistener("focusout",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onTouched())})),t.ɵɵtemplate(14,di,1,0,"ng-container",4),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"tb-string-items-list",7),t.ɵɵpipe(16,"translate"),t.ɵɵpipe(17,"translate"),t.ɵɵlistener("focusout",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onTouched())})),t.ɵɵtemplate(18,ui,1,0,"ng-container",4),t.ɵɵelementEnd(),t.ɵɵtemplate(19,ci,5,9,"div",8),t.ɵɵelementEnd(),t.ɵɵtemplate(20,fi,4,8,"ng-template",null,0,t.ɵɵtemplateRefExtractor)}if(2&e){let e;const r=t.ɵɵreference(21);t.ɵɵproperty("formGroup",n.attributeControlGroup),t.ɵɵadvance(),t.ɵɵproperty("hintText",t.ɵɵpipeBind1(2,16,"tb.rulenode.kv-map-pattern-hint"))("popupHelpLink",n.popupHelpLink),t.ɵɵadvance(2),t.ɵɵproperty("placeholder",t.ɵɵpipeBind1(4,18,"tb.rulenode.add-attribute-key"))("label",t.ɵɵpipeBind1(5,20,"tb.rulenode.client-attributes")),t.ɵɵadvance(3),t.ɵɵproperty("ngTemplateOutlet",r),t.ɵɵadvance(),t.ɵɵproperty("placeholder",t.ɵɵpipeBind1(8,22,"tb.rulenode.add-attribute-key"))("label",t.ɵɵpipeBind1(9,24,"tb.rulenode.shared-attributes")),t.ɵɵadvance(3),t.ɵɵproperty("ngTemplateOutlet",r),t.ɵɵadvance(),t.ɵɵproperty("placeholder",t.ɵɵpipeBind1(12,26,"tb.rulenode.add-attribute-key"))("label",t.ɵɵpipeBind1(13,28,"tb.rulenode.server-attributes")),t.ɵɵadvance(3),t.ɵɵproperty("ngTemplateOutlet",r),t.ɵɵadvance(),t.ɵɵproperty("placeholder",t.ɵɵpipeBind1(16,30,"tb.rulenode.add-telemetry-key"))("label",t.ɵɵpipeBind1(17,32,"tb.rulenode.latest-telemetry")),t.ɵɵadvance(3),t.ɵɵproperty("ngTemplateOutlet",r),t.ɵɵadvance(),t.ɵɵproperty("ngIf",(null==(e=n.attributeControlGroup.get("latestTsKeyNames").value)?null:e.length)>0)}},dependencies:t.ɵɵgetComponentDepsFactory(gi),encapsulation:2})}}e("SelectAttributesComponent",gi);class hi extends y{constructor(e,t){super(e),this.store=e,this.fb=t,this.propagateChange=null,this.destroy$=new Y,this.alarmStatus=x,this.alarmStatusTranslations=C}ngOnInit(){this.alarmStatusGroup=this.fb.group({alarmStatus:[null,[]]}),this.alarmStatusGroup.get("alarmStatus").valueChanges.pipe(ie(this.destroy$)).subscribe((e=>{this.propagateChange(e)}))}setDisabledState(e){e?this.alarmStatusGroup.disable({emitEvent:!1}):this.alarmStatusGroup.enable({emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}writeValue(e){this.alarmStatusGroup.get("alarmStatus").patchValue(e,{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||hi)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:hi,selectors:[["tb-alarm-status-select"]],features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>hi)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:16,vars:17,consts:[[1,"flex","flex-col","items-center","justify-center",3,"formGroup"],["multiple","","formControlName","alarmStatus",1,"chip-listbox","flex","flex-col"],[1,"toggle-column"],[1,"option","flex-1",3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-chip-listbox",1)(2,"div",2)(3,"mat-chip-option",3),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-chip-option",3),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",2)(10,"mat-chip-option",3),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-chip-option",3),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.alarmStatusGroup),t.ɵɵadvance(3),t.ɵɵproperty("value",n.alarmStatus.ACTIVE_UNACK),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,9,n.alarmStatusTranslations.get(n.alarmStatus.ACTIVE_UNACK))," "),t.ɵɵadvance(2),t.ɵɵproperty("value",n.alarmStatus.ACTIVE_ACK),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(8,11,n.alarmStatusTranslations.get(n.alarmStatus.ACTIVE_ACK))," "),t.ɵɵadvance(3),t.ɵɵproperty("value",n.alarmStatus.CLEARED_UNACK),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,13,n.alarmStatusTranslations.get(n.alarmStatus.CLEARED_UNACK))," "),t.ɵɵadvance(2),t.ɵɵproperty("value",n.alarmStatus.CLEARED_ACK),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,15,n.alarmStatusTranslations.get(n.alarmStatus.CLEARED_ACK))," "))},dependencies:t.ɵɵgetComponentDepsFactory(hi),styles:["[_nghost-%COMP%] .chip-listbox[_ngcontent-%COMP%]{max-width:460px;width:100%}[_nghost-%COMP%] .chip-listbox[_ngcontent-%COMP%] .toggle-column[_ngcontent-%COMP%]{display:flex;flex:1 1 100%;gap:8px}[_nghost-%COMP%] .chip-listbox[_ngcontent-%COMP%] .option[_ngcontent-%COMP%]{margin:0}@media screen and (max-width: 959px){[_nghost-%COMP%] .chip-listbox[_ngcontent-%COMP%]{max-width:360px}[_nghost-%COMP%] .chip-listbox[_ngcontent-%COMP%] .toggle-column[_ngcontent-%COMP%]{flex-direction:column}}[_nghost-%COMP%] .chip-listbox .mdc-evolution-chip-set__chips{gap:8px}[_nghost-%COMP%] .chip-listbox .option button{flex-basis:100%;justify-content:start}[_nghost-%COMP%] .chip-listbox .option .mdc-evolution-chip__graphic{flex-grow:0}"]})}}e("AlarmStatusSelectComponent",hi);const yi=()=>({maxWidth:"820px"});function bi(e,n){if(1&e&&(t.ɵɵelement(0,"div",3),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("tb-help-popup",e.popupHelpLink),t.ɵɵpropertyInterpolate("trigger-text",t.ɵɵpipeBind1(1,3,"tb.key-val.see-examples")),t.ɵɵproperty("tb-help-popup-style",t.ɵɵpureFunction0(5,yi))}}class vi{constructor(){this.textAlign="left"}static{this.ɵfac=function(e){return new(e||vi)}}static{this.ɵcmp=t.ɵɵdefineComponent({type:vi,selectors:[["tb-example-hint"]],inputs:{hintText:"hintText",popupHelpLink:"popupHelpLink",textAlign:"textAlign"},decls:5,vars:10,consts:[[1,"tb-form-hint","tb-primary-fill","space-between",3,"hidden"],[1,"hint-text",3,"innerHTML"],["class","see-example","hintMode","","tb-help-popup-placement","right","trigger-style","letter-spacing:0.25px; font-size:12px",3,"tb-help-popup","tb-help-popup-style","trigger-text",4,"ngIf"],["hintMode","","tb-help-popup-placement","right","trigger-style","letter-spacing:0.25px; font-size:12px",1,"see-example",3,"tb-help-popup","tb-help-popup-style","trigger-text"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0),t.ɵɵelement(1,"div",1),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"safe"),t.ɵɵtemplate(4,bi,2,6,"div",2),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("hidden",!n.hintText),t.ɵɵadvance(),t.ɵɵstyleProp("text-align",n.textAlign),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(3,7,t.ɵɵpipeBind1(2,5,n.hintText),"html"),t.ɵɵsanitizeHtml),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.popupHelpLink))},dependencies:t.ɵɵgetComponentDepsFactory(vi),styles:["[_nghost-%COMP%] .space-between[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:20px}[_nghost-%COMP%] .space-between[_ngcontent-%COMP%] .see-example[_ngcontent-%COMP%]{display:flex;flex-shrink:0}[_nghost-%COMP%] .hint-text[_ngcontent-%COMP%]{width:100%}"]})}}e("ExampleHintComponent",vi);class xi{static{this.ɵfac=function(e){return new(e||xi)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:xi})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,Q,_r,zr,Wr,ma,va,Oa,_a,Ha,Wa,Za,ai,oi,gi,hi,vi]})}}e("RulenodeCoreConfigCommonModule",xi),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(xi,{declarations:[_r,zr,Wr,ma,va,Oa,_a,Ha,Wa,Za,ai,oi,gi,hi,vi],imports:[$,S,Q],exports:[_r,zr,Wr,ma,va,Oa,_a,Ha,Wa,Za,ai,oi,gi,hi,vi]});class Ci{static{this.ɵfac=function(e){return new(e||Ci)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:Ci})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,Q,xi,Cr,ce,mr,rr,Vn,se,Ce,Re,He,$n,Ye,st,qn,Pn,er,lr,cr,fr,We,Zn,Yn,wr,Br]})}}e("RuleNodeCoreConfigActionModule",Ci),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(Ci,{declarations:[Cr,ce,mr,rr,Vn,se,Ce,Re,He,$n,Ye,st,qn,Pn,er,lr,cr,fr,We,Zn,Yn,wr,Br],imports:[$,S,Q,xi],exports:[Cr,ce,mr,rr,Vn,se,Ce,Re,He,$n,Ye,st,qn,Pn,er,lr,cr,fr,We,Zn,Yn,wr,Br]});const Si=e=>({inputValueKey:e}),Ti=e=>({periodValueKey:e}),Ii=(e,t)=>({outputValueKey:e,periodValueKey:t}),Ei=e=>({outputValueKey:e});function Fi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.input-value-key-required")," "))}function qi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.output-value-key-required")," "))}function Ai(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.number-of-digits-after-floating-point-range")," "))}function ki(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.number-of-digits-after-floating-point-range")," "))}function Ni(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.period-value-key-required")," "))}function wi(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",16)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",17),t.ɵɵtemplate(5,Ni,3,3,"mat-error",4),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,2,"tb.rulenode.period-value-key")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.calculateDeltaConfigForm.get("periodValueKey").hasError("required"))}}class Mi extends i{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.separatorKeysCodes=[U,H,z]}configForm(){return this.calculateDeltaConfigForm}onConfigurationSet(e){this.calculateDeltaConfigForm=this.fb.group({inputValueKey:[e.inputValueKey,[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],outputValueKey:[e.outputValueKey,[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],useCache:[e.useCache,[]],addPeriodBetweenMsgs:[e.addPeriodBetweenMsgs,[]],periodValueKey:[e.periodValueKey,[]],round:[e.round,[N.min(0),N.max(15)]],tellFailureIfDeltaIsNegative:[e.tellFailureIfDeltaIsNegative,[]],excludeZeroDeltas:[e.excludeZeroDeltas,[]]})}prepareInputConfig(e){return{inputValueKey:P(e?.inputValueKey)?e.inputValueKey:null,outputValueKey:P(e?.outputValueKey)?e.outputValueKey:null,useCache:!P(e?.useCache)||e.useCache,addPeriodBetweenMsgs:!!P(e?.addPeriodBetweenMsgs)&&e.addPeriodBetweenMsgs,periodValueKey:P(e?.periodValueKey)?e.periodValueKey:null,round:P(e?.round)?e.round:null,tellFailureIfDeltaIsNegative:!P(e?.tellFailureIfDeltaIsNegative)||e.tellFailureIfDeltaIsNegative,excludeZeroDeltas:!!P(e?.excludeZeroDeltas)&&e.excludeZeroDeltas}}prepareOutputConfig(e){return _(e)}updateValidators(e){this.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value?this.calculateDeltaConfigForm.get("periodValueKey").setValidators([N.required]):this.calculateDeltaConfigForm.get("periodValueKey").setValidators([]),this.calculateDeltaConfigForm.get("periodValueKey").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["addPeriodBetweenMsgs"]}static{this.ɵfac=function(e){return new(e||Mi)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Mi,selectors:[["tb-enrichment-node-calculate-delta-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:50,vars:69,consts:[[3,"formGroup"],[1,"gt-sm:flex","gt-sm:flex-row","gt-sm:gap-5.5"],[1,"mat-block","flex-1"],["matInput","","formControlName","inputValueKey"],[4,"ngIf"],["matInput","","formControlName","outputValueKey"],["type","number","min","0","max","15","step","1","matInput","","formControlName","round"],[1,"tb-form-panel","no-padding","no-border"],[1,"tb-form-row","same-padding",3,"tb-hint-tooltip-icon"],["formControlName","tellFailureIfDeltaIsNegative",1,"mat-slide","margin"],["formControlName","useCache",1,"mat-slide","margin"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","addPeriodBetweenMsgs",1,"mat-slide"],["class","mat-block",4,"ngIf"],["formControlName","excludeZeroDeltas",1,"mat-slide","margin"],[1,"mat-block"],["required","","matInput","","formControlName","periodValueKey"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"mat-form-field",2)(3,"mat-label"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",3),t.ɵɵtemplate(7,Fi,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-form-field",2)(9,"mat-label"),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",5),t.ɵɵtemplate(13,qi,3,3,"mat-error",4),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"mat-form-field",2)(15,"mat-label"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(18,"input",6),t.ɵɵtemplate(19,Ai,3,3,"mat-error",4)(20,ki,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"div",7)(22,"div",8),t.ɵɵpipe(23,"translate"),t.ɵɵelementStart(24,"mat-slide-toggle",9),t.ɵɵtext(25),t.ɵɵpipe(26,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(27,"div",8),t.ɵɵpipe(28,"translate"),t.ɵɵpipe(29,"translate"),t.ɵɵelementStart(30,"mat-slide-toggle",10),t.ɵɵtext(31),t.ɵɵpipe(32,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(33,"div",11)(34,"div",12),t.ɵɵpipe(35,"translate"),t.ɵɵelementStart(36,"mat-slide-toggle",13),t.ɵɵtext(37),t.ɵɵpipe(38,"translate"),t.ɵɵpipe(39,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(40,wi,6,4,"mat-form-field",14),t.ɵɵelementEnd(),t.ɵɵelementStart(41,"div",8),t.ɵɵpipe(42,"translate"),t.ɵɵpipe(43,"translate"),t.ɵɵpipe(44,"translate"),t.ɵɵpipe(45,"translate"),t.ɵɵpipe(46,"translate"),t.ɵɵelementStart(47,"mat-slide-toggle",15),t.ɵɵtext(48),t.ɵɵpipe(49,"translate"),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.calculateDeltaConfigForm),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,19,"tb.rulenode.input-value-key")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.calculateDeltaConfigForm.get("inputValueKey").hasError("required")||n.calculateDeltaConfigForm.get("inputValueKey").hasError("pattern")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(11,21,"tb.rulenode.output-value-key")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.calculateDeltaConfigForm.get("outputValueKey").hasError("required")||n.calculateDeltaConfigForm.get("outputValueKey").hasError("pattern")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(17,23,"tb.rulenode.number-of-digits-after-floating-point")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.calculateDeltaConfigForm.get("round").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.calculateDeltaConfigForm.get("round").hasError("max")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(23,25,"tb.rulenode.failure-if-delta-negative-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(26,27,"tb.rulenode.failure-if-delta-negative")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind2(29,31,"tb.rulenode.use-caching-tooltip",t.ɵɵpureFunction1(58,Si,n.calculateDeltaConfigForm.get("inputValueKey").valid?n.calculateDeltaConfigForm.get("inputValueKey").value:t.ɵɵpipeBind1(28,29,"tb.rulenode.input-value-key")))),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(32,34,"tb.rulenode.use-caching")," "),t.ɵɵadvance(2),t.ɵɵclassProp("no-padding-bottom",n.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind2(35,36,"tb.rulenode.add-time-difference-between-readings-tooltip",t.ɵɵpureFunction1(60,Ti,n.calculateDeltaConfigForm.get("periodValueKey").valid&&n.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value?n.calculateDeltaConfigForm.get("periodValueKey").value:"periodInMs"))),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(39,41,"tb.rulenode.add-time-difference-between-readings",t.ɵɵpureFunction1(62,Si,n.calculateDeltaConfigForm.get("inputValueKey").valid?n.calculateDeltaConfigForm.get("inputValueKey").value:t.ɵɵpipeBind1(38,39,"tb.rulenode.input-value-key")))," "),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",n.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value?t.ɵɵpipeBind2(44,48,"tb.rulenode.exclude-zero-deltas-time-difference-hint",t.ɵɵpureFunction2(64,Ii,n.calculateDeltaConfigForm.get("outputValueKey").valid?n.calculateDeltaConfigForm.get("outputValueKey").value:t.ɵɵpipeBind1(42,44,"tb.rulenode.output-value-key"),n.calculateDeltaConfigForm.get("periodValueKey").valid?n.calculateDeltaConfigForm.get("periodValueKey").value:t.ɵɵpipeBind1(43,46,"tb.rulenode.period-value-key"))):t.ɵɵpipeBind2(46,53,"tb.rulenode.exclude-zero-deltas-hint",t.ɵɵpureFunction1(67,Ei,n.calculateDeltaConfigForm.get("outputValueKey").valid?n.calculateDeltaConfigForm.get("outputValueKey").value:t.ɵɵpipeBind1(45,51,"tb.rulenode.output-value-key")))),t.ɵɵadvance(7),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(49,56,"tb.rulenode.exclude-zero-deltas")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Mi),encapsulation:2})}}function Bi(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",8),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}e("CalculateDeltaConfigComponent",Mi);class Vi extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.fetchToData=[],this.DataToFetch=Ft;for(const e of qt.keys())e!==Ft.FIELDS&&this.fetchToData.push({value:e,name:this.translate.instant(qt.get(e))})}configForm(){return this.customerAttributesConfigForm}prepareOutputConfig(e){const t={};for(const n of Object.keys(e.dataMapping))t[n.trim()]=e.dataMapping[n];return e.dataMapping=t,_(e)}prepareInputConfig(e){let t,n;return t=P(e?.telemetry)?e.telemetry?Ft.LATEST_TELEMETRY:Ft.ATTRIBUTES:P(e?.dataToFetch)?e.dataToFetch:Ft.ATTRIBUTES,n=P(e?.attrMapping)?e.attrMapping:P(e?.dataMapping)?e.dataMapping:null,{dataToFetch:t,dataMapping:n,fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA}}selectTranslation(e,t){return this.customerAttributesConfigForm.get("dataToFetch").value===Ft.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.customerAttributesConfigForm=this.fb.group({dataToFetch:[e.dataToFetch,[]],dataMapping:[e.dataMapping,[N.required]],fetchTo:[e.fetchTo]})}static{this.ɵfac=function(e){return new(e||Vi)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Vi,selectors:[["tb-enrichment-node-customer-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:17,vars:26,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-1","items-center","justify-center"],[1,"fetch-to-data-toggle"],["formControlName","dataToFetch","appearance","fill",1,"fetch-to-data-toggle"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","dataMapping","popupHelpLink","rulenode/customer_attributes_node_fields_templatization",3,"requiredText","labelText","keyText","keyRequiredText","valText","valRequiredText","hintText"],["formControlName","fetchTo",3,"labelText"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.mapping-of-customers"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2)(4,"div",3)(5,"tb-toggle-select",4),t.ɵɵtemplate(6,Bi,2,2,"tb-toggle-option",5),t.ɵɵelementEnd()()(),t.ɵɵelement(7,"tb-kv-map-config",6),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"translate"),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵelement(14,"tb-msg-metadata-chip",7),t.ɵɵpipe(15,"translate"),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.customerAttributesConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.fetchToData),t.ɵɵadvance(),t.ɵɵproperty("requiredText",t.ɵɵpipeBind1(8,10,"tb.rulenode.attr-mapping-required"))("labelText",t.ɵɵpipeBind1(9,12,n.selectTranslation("tb.rulenode.latest-telemetry-mapping","tb.rulenode.attributes-mapping")))("keyText",t.ɵɵpipeBind1(10,14,n.selectTranslation("tb.rulenode.source-telemetry","tb.rulenode.source-attribute")))("keyRequiredText",t.ɵɵpipeBind1(11,16,n.selectTranslation("tb.rulenode.source-telemetry-required","tb.rulenode.source-attribute-required")))("valText",t.ɵɵpipeBind1(12,18,"tb.rulenode.target-key"))("valRequiredText",t.ɵɵpipeBind1(13,20,"tb.rulenode.target-key-required"))("hintText","tb.rulenode.kv-map-pattern-hint"),t.ɵɵadvance(7),t.ɵɵproperty("labelText",n.customerAttributesConfigForm.get("dataToFetch").value===n.DataToFetch.LATEST_TELEMETRY?t.ɵɵpipeBind1(15,22,"tb.rulenode.add-mapped-latest-telemetry-to"):t.ɵɵpipeBind1(16,24,"tb.rulenode.add-mapped-attribute-to")))},dependencies:t.ɵɵgetComponentDepsFactory(Vi),styles:["[_nghost-%COMP%] .fetch-to-data-toggle[_ngcontent-%COMP%]{max-width:420px;width:100%}"]})}}e("CustomerAttributesConfigComponent",Vi);class Oi extends i{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n}configForm(){return this.deviceAttributesConfigForm}onConfigurationSet(e){this.deviceAttributesConfigForm=this.fb.group({deviceRelationsQuery:[e.deviceRelationsQuery,[N.required]],tellFailureIfAbsent:[e.tellFailureIfAbsent,[]],fetchTo:[e.fetchTo,[]],attributesControl:[e.attributesControl,[]]})}prepareInputConfig(e){return j(e)&&(e.attributesControl={clientAttributeNames:P(e?.clientAttributeNames)?e.clientAttributeNames:[],latestTsKeyNames:P(e?.latestTsKeyNames)?e.latestTsKeyNames:[],serverAttributeNames:P(e?.serverAttributeNames)?e.serverAttributeNames:[],sharedAttributeNames:P(e?.sharedAttributeNames)?e.sharedAttributeNames:[],getLatestValueWithTs:!!P(e?.getLatestValueWithTs)&&e.getLatestValueWithTs}),{deviceRelationsQuery:P(e?.deviceRelationsQuery)?e.deviceRelationsQuery:null,tellFailureIfAbsent:!P(e?.tellFailureIfAbsent)||e.tellFailureIfAbsent,fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA,attributesControl:e?e.attributesControl:null}}prepareOutputConfig(e){for(const t of Object.keys(e.attributesControl))e[t]=e.attributesControl[t];return delete e.attributesControl,e}static{this.ɵfac=function(e){return new(e||Oi)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Oi,selectors:[["tb-enrichment-node-device-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:19,vars:11,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[1,"tb-form-panel","stroked","no-padding-bottom"],["translate","",1,"tb-form-panel-title"],["required","","formControlName","deviceRelationsQuery"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-padding","no-border","space-between"],["translate","",1,"tb-form-panel-title","tb-required"],["translate","",1,"tb-form-panel-hint","tb-error",3,"hidden"],["formControlName","attributesControl","popupHelpLink","rulenode/related_device_attributes_node_fields_templatization"],["formControlName","fetchTo",3,"labelText"],[1,"tb-form-row","same-padding",3,"tb-hint-tooltip-icon"],["formControlName","tellFailureIfAbsent",1,"mat-slide","margin"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.device-relations-query"),t.ɵɵelementEnd(),t.ɵɵelement(4,"tb-device-relations-query-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",4)(6,"div",5)(7,"div",6),t.ɵɵtext(8,"tb.rulenode.related-device-attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"div",7),t.ɵɵtext(10," tb.rulenode.at-least-one-field-required "),t.ɵɵelementEnd()(),t.ɵɵelement(11,"tb-select-attributes",8)(12,"tb-msg-metadata-chip",9),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"div",10),t.ɵɵpipe(15,"translate"),t.ɵɵelementStart(16,"mat-slide-toggle",11),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.deviceAttributesConfigForm),t.ɵɵadvance(9),t.ɵɵproperty("hidden",!(n.deviceAttributesConfigForm.get("attributesControl").touched&&n.deviceAttributesConfigForm.get("attributesControl").hasError("atLeastOneRequired"))),t.ɵɵadvance(3),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(13,5,"tb.rulenode.add-selected-attributes-to")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(15,7,"tb.rulenode.tell-failure-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,9,"tb.rulenode.tell-failure")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Oi),encapsulation:2})}}e("DeviceAttributesConfigComponent",Oi);const Di=e=>({inputName:e});class Li extends i{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.predefinedValues=[];for(const e of Object.keys(xt))this.predefinedValues.push({value:xt[e],name:this.translate.instant(Ct.get(xt[e]))})}ngOnInit(){super.ngOnInit()}configForm(){return this.entityDetailsConfigForm}prepareInputConfig(e){let t;return t=P(e?.addToMetadata)?e.addToMetadata?Kt.METADATA:Kt.DATA:e?.fetchTo?e.fetchTo:Kt.DATA,{detailsList:P(e?.detailsList)?e.detailsList:null,fetchTo:t}}onConfigurationSet(e){this.entityDetailsConfigForm=this.fb.group({detailsList:[e.detailsList,[N.required]],fetchTo:[e.fetchTo,[]]})}static{this.ɵfac=function(e){return new(e||Li)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Li,selectors:[["tb-enrichment-node-entity-details-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:11,vars:22,consts:[[3,"formGroup"],["required","","formControlName","detailsList",1,"mat-block",3,"predefinedValues","label","placeholder","requiredText"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],["formControlName","fetchTo",3,"labelText"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"tb-string-items-list",1),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"translate"),t.ɵɵpipe(4,"translate"),t.ɵɵelementStart(5,"mat-icon",2),t.ɵɵpipe(6,"translate"),t.ɵɵpipe(7,"translate"),t.ɵɵtext(8," help "),t.ɵɵelementEnd()(),t.ɵɵelement(9,"tb-msg-metadata-chip",3),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.entityDetailsConfigForm),t.ɵɵadvance(),t.ɵɵproperty("predefinedValues",n.predefinedValues)("label",t.ɵɵpipeBind1(2,7,"tb.rulenode.select-details"))("placeholder",t.ɵɵpipeBind1(3,9,"tb.rulenode.add-detail"))("requiredText",t.ɵɵpipeBind1(4,11,"tb.rulenode.entity-details-list-empty")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(7,15,"tb.rulenode.chip-help",t.ɵɵpureFunction1(20,Di,t.ɵɵpipeBind1(6,13,"tb.rulenode.detail")))),t.ɵɵadvance(4),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(10,18,"tb.rulenode.add-selected-details-to")))},dependencies:t.ɵɵgetComponentDepsFactory(Li),encapsulation:2})}}e("EntityDetailsConfigComponent",Li);const Pi=()=>({maxWidth:"820px"}),Ri=e=>({inputName:e}),_i=(e,t,n,r)=>({startInterval:e,endInterval:t,startIntervalTimeUnit:n,endIntervalTimeUnit:r});function ji(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.start-interval-value-required")," "))}function Gi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function Ki(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function Ui(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",29),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.timeUnitsTranslationMap.get(e))," ")}}function Hi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.end-interval-value-required")," "))}function zi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function $i(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function Qi(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",29),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.timeUnitsTranslationMap.get(e))," ")}}function Ji(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,"tb.rulenode.fetch-timeseries-from-to",t.ɵɵpureFunction4(4,_i,e.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").value,e.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").value,e.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").value.toLowerCase(),e.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").value.toLowerCase()))," ")}}function Yi(e,n){1&e&&(t.ɵɵtext(0),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(1,1,"tb.rulenode.fetch-timeseries-from-to-invalid")," ")}function Wi(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",18)(2,"mat-form-field",19)(3,"mat-label"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",20),t.ɵɵtemplate(7,ji,3,3,"mat-error",16)(8,Gi,3,3,"mat-error",16)(9,Ki,3,3,"mat-error",16),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-form-field",21)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-select",22),t.ɵɵtemplate(15,Ui,3,4,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(16,"div",18)(17,"mat-form-field",19)(18,"mat-label"),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(21,"input",23),t.ɵɵtemplate(22,Hi,3,3,"mat-error",16)(23,zi,3,3,"mat-error",16)(24,$i,3,3,"mat-error",16),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-form-field",21)(26,"mat-label"),t.ɵɵtext(27),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-select",24),t.ɵɵtemplate(30,Qi,3,4,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(31,"div",25)(32,"mat-icon",26),t.ɵɵtext(33,"error_outline"),t.ɵɵelementEnd(),t.ɵɵelementStart(34,"div",27),t.ɵɵtemplate(35,Ji,3,9,"ng-container",28)(36,Yi,2,3,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵreference(37),n=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,16,"tb.rulenode.interval-start")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").hasError("max")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,18,"tb.rulenode.time-unit")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.timeUnits),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(20,20,"tb.rulenode.interval-end")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").hasError("max")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(28,22,"tb.rulenode.time-unit")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.timeUnits),t.ɵɵadvance(),t.ɵɵclassProp("error",n.getTelemetryFromDatabaseConfigForm.get("interval").invalid),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval").valid)("ngIfElse",e)}}function Xi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.start-interval-required")," "))}function Zi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.end-interval-required")," "))}function eo(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",30)(1,"mat-form-field",31)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",32),t.ɵɵtemplate(6,Xi,3,3,"mat-error",16),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-form-field",31)(8,"mat-label"),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",33),t.ɵɵtemplate(12,Zi,3,3,"mat-error",16),t.ɵɵelementEnd(),t.ɵɵelement(13,"tb-example-hint",34),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,5,"tb.rulenode.start-interval")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").hasError("required")||e.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").hasError("pattern")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,7,"tb.rulenode.end-interval")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").hasError("required")||e.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").hasError("pattern")),t.ɵɵadvance(),t.ɵɵproperty("hintText",t.ɵɵpipeBind1(14,9,"tb.rulenode.metadata-dynamic-interval-hint"))}}function to(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",29),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}function no(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",29),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.aggregationTypesTranslations.get(r.aggregationTypes[e]))," ")}}function ro(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",29),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.samplingOrdersTranslate.get(e))," ")}}function ao(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.limit-required")," "))}function io(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.limit-range")," "))}function oo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.limit-range")," "))}function lo(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"mat-form-field",37)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",38),t.ɵɵtemplate(6,ro,3,4,"mat-option",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",39)(8,"mat-label"),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",40),t.ɵɵelementStart(12,"mat-hint"),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(15,ao,3,3,"mat-error",16)(16,io,3,3,"mat-error",16)(17,oo,3,3,"mat-error",16),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,7,"tb.rulenode.order-by-timestamp")," "),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.samplingOrders),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,9,"tb.rulenode.limit")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,11,"tb.rulenode.limit-hint")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("limit").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("limit").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("limit").hasError("max"))}}function so(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"mat-form-field",35)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",36),t.ɵɵtemplate(6,no,3,4,"mat-option",14),t.ɵɵelementEnd()(),t.ɵɵtemplate(7,lo,18,13,"div",16),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("subscriptSizing",e.defaultPaddingEnable()?"fixed":"dynamic"),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,4,"aggregation.function")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.aggregations),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("aggregation").value===e.aggregationTypes.NONE)}}class po extends i{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.separatorKeysCodes=[U,H,z],this.aggregationTypes=T,this.aggregations=Object.values(T),this.aggregationTypesTranslations=I,this.fetchMode=St,this.samplingOrders=Object.values(Et),this.samplingOrdersTranslate=kt,this.timeUnits=Object.values(ht),this.timeUnitsTranslationMap=yt,this.deduplicationStrategiesHintTranslations=It,this.headerOptions=[],this.timeUnitMap={[ht.MILLISECONDS]:1,[ht.SECONDS]:1e3,[ht.MINUTES]:6e4,[ht.HOURS]:36e5,[ht.DAYS]:864e5},this.intervalValidator=()=>e=>e.get("startInterval").value*this.timeUnitMap[e.get("startIntervalTimeUnit").value]<=e.get("endInterval").value*this.timeUnitMap[e.get("endIntervalTimeUnit").value]?{intervalError:!0}:null;for(const e of Tt.keys())this.headerOptions.push({value:e,name:this.translate.instant(Tt.get(e))})}configForm(){return this.getTelemetryFromDatabaseConfigForm}onConfigurationSet(e){this.getTelemetryFromDatabaseConfigForm=this.fb.group({latestTsKeyNames:[e.latestTsKeyNames,[N.required]],aggregation:[e.aggregation,[N.required]],fetchMode:[e.fetchMode,[N.required]],orderBy:[e.orderBy,[]],limit:[e.limit,[]],useMetadataIntervalPatterns:[e.useMetadataIntervalPatterns,[]],interval:this.fb.group({startInterval:[e.interval.startInterval,[]],startIntervalTimeUnit:[e.interval.startIntervalTimeUnit,[]],endInterval:[e.interval.endInterval,[]],endIntervalTimeUnit:[e.interval.endIntervalTimeUnit,[]]}),startIntervalPattern:[e.startIntervalPattern,[]],endIntervalPattern:[e.endIntervalPattern,[]]})}validatorTriggers(){return["fetchMode","useMetadataIntervalPatterns"]}toggleChange(e){this.getTelemetryFromDatabaseConfigForm.get("fetchMode").patchValue(e,{emitEvent:!0})}prepareOutputConfig(e){return e.startInterval=e.interval.startInterval,e.startIntervalTimeUnit=e.interval.startIntervalTimeUnit,e.endInterval=e.interval.endInterval,e.endIntervalTimeUnit=e.interval.endIntervalTimeUnit,delete e.interval,_(e)}prepareInputConfig(e){return j(e)&&(e.interval={startInterval:e.startInterval,startIntervalTimeUnit:e.startIntervalTimeUnit,endInterval:e.endInterval,endIntervalTimeUnit:e.endIntervalTimeUnit}),{latestTsKeyNames:P(e?.latestTsKeyNames)?e.latestTsKeyNames:null,aggregation:P(e?.aggregation)?e.aggregation:T.NONE,fetchMode:P(e?.fetchMode)?e.fetchMode:St.FIRST,orderBy:P(e?.orderBy)?e.orderBy:Et.ASC,limit:P(e?.limit)?e.limit:1e3,useMetadataIntervalPatterns:!!P(e?.useMetadataIntervalPatterns)&&e.useMetadataIntervalPatterns,interval:{startInterval:P(e?.interval?.startInterval)?e.interval.startInterval:2,startIntervalTimeUnit:P(e?.interval?.startIntervalTimeUnit)?e.interval.startIntervalTimeUnit:ht.MINUTES,endInterval:P(e?.interval?.endInterval)?e.interval.endInterval:1,endIntervalTimeUnit:P(e?.interval?.endIntervalTimeUnit)?e.interval.endIntervalTimeUnit:ht.MINUTES},startIntervalPattern:P(e?.startIntervalPattern)?e.startIntervalPattern:null,endIntervalPattern:P(e?.endIntervalPattern)?e.endIntervalPattern:null}}updateValidators(e){const t=this.getTelemetryFromDatabaseConfigForm.get("fetchMode").value,n=this.getTelemetryFromDatabaseConfigForm.get("useMetadataIntervalPatterns").value;t&&t===St.ALL?(this.getTelemetryFromDatabaseConfigForm.get("aggregation").setValidators([N.required]),this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([N.required]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([N.required,N.min(2),N.max(1e3)])):(this.getTelemetryFromDatabaseConfigForm.get("aggregation").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([])),n?(this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)])):(this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").setValidators([N.required,N.min(1),N.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").setValidators([N.required]),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").setValidators([N.required,N.min(1),N.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").setValidators([N.required]),this.getTelemetryFromDatabaseConfigForm.get("interval").setValidators([this.intervalValidator()]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([])),this.getTelemetryFromDatabaseConfigForm.get("aggregation").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("orderBy").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("limit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").updateValueAndValidity({emitEvent:e})}removeKey(e,t){const n=this.getTelemetryFromDatabaseConfigForm.get(t).value,r=n.indexOf(e);r>=0&&(n.splice(r,1),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(n,{emitEvent:!0}))}clearChipGrid(){this.getTelemetryFromDatabaseConfigForm.get("latestTsKeyNames").patchValue([],{emitEvent:!0})}addKey(e,t){const n=e.input;let r=e.value;if((r||"").trim()){r=r.trim();let e=this.getTelemetryFromDatabaseConfigForm.get(t).value;e&&-1!==e.indexOf(r)||(e||(e=[]),e.push(r),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(e,{emitEvent:!0}))}n&&(n.value="")}defaultPaddingEnable(){return this.getTelemetryFromDatabaseConfigForm.get("fetchMode").value===St.ALL&&this.getTelemetryFromDatabaseConfigForm.get("aggregation").value===T.NONE}static{this.ɵfac=function(e){return new(e||po)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:po,selectors:[["tb-enrichment-node-get-telemetry-from-database"]],features:[t.ɵɵInheritDefinitionFeature],decls:34,vars:40,consts:[["intervalPattern",""],["invalidText",""],[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],["editable","","subscriptSizing","dynamic","required","","formControlName","latestTsKeyNames",1,"mat-block",3,"placeholder","requiredText","label","hint"],["matHintEnd","","hintMode","","tb-help-popup-placement","right","trigger-style","letter-spacing:0.25px; font-size:12px",1,"see-example",3,"tb-help-popup","tb-help-popup-style","trigger-text"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","useMetadataIntervalPatterns",1,"mat-slide"],["formGroupName","interval","class","flex flex-col",4,"ngIf","ngIfElse"],[1,"tb-form-panel","no-border","no-padding","item-center"],[1,"fetch-mod-toggle"],["formControlName","fetchMode","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-hint","tb-primary-fill","hint-container"],[4,"ngIf"],["formGroupName","interval",1,"flex","flex-col"],[1,"flex","flex-col","gap-0","gt-sm:flex-row","gt-sm:gap-4"],[1,"mat-block","gt-sm:max-w-50%","gt-sm:flex-full"],["type","number","step","1","min","1","max","2147483647","matInput","","formControlName","startInterval","required",""],["hideRequiredMarker","",1,"mat-block","gt-sm:max-w-50%","gt-sm:flex-full"],["formControlName","startIntervalTimeUnit","required",""],["type","number","step","1","min","1","max","2147483647","matInput","","formControlName","endInterval","required",""],["formControlName","endIntervalTimeUnit","required",""],[1,"description-block","tb-primary-fill"],[1,"description-icon"],[1,"description-text"],[4,"ngIf","ngIfElse"],[3,"value"],[1,"input-block","flex","flex-col"],[1,"mat-block","flex-1"],["matInput","","formControlName","startIntervalPattern","required",""],["matInput","","formControlName","endIntervalPattern","required",""],["popupHelpLink","rulenode/originator_telemetry_node_fields_templatization",3,"hintText"],["hideRequiredMarker","",1,"mat-block",3,"subscriptSizing"],["formControlName","aggregation","required",""],["hideRequiredMarker","",1,"mat-block"],["formControlName","orderBy","required",""],[1,"mat-block"],["type","number","min","2","max","1000","step","1","matInput","","formControlName","limit","required",""]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",2)(1,"tb-string-items-list",3),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"translate"),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"div",4),t.ɵɵpipe(7,"translate"),t.ɵɵelementStart(8,"mat-icon",5),t.ɵɵpipe(9,"translate"),t.ɵɵpipe(10,"translate"),t.ɵɵtext(11,"help "),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"div",6)(13,"div",7),t.ɵɵtext(14,"tb.rulenode.fetch-interval"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"div",8),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"mat-slide-toggle",9),t.ɵɵtext(18),t.ɵɵpipe(19,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(20,Wi,38,24,"div",10)(21,eo,15,11,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"div",6)(24,"div",7),t.ɵɵtext(25,"tb.rulenode.fetch-strategy"),t.ɵɵelementEnd(),t.ɵɵelementStart(26,"div",11)(27,"div",12)(28,"tb-toggle-select",13),t.ɵɵtemplate(29,to,2,2,"tb-toggle-option",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(30,"div",15),t.ɵɵtext(31),t.ɵɵpipe(32,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(33,so,8,6,"div",16),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵreference(22);t.ɵɵproperty("formGroup",n.getTelemetryFromDatabaseConfigForm),t.ɵɵadvance(),t.ɵɵproperty("placeholder",t.ɵɵpipeBind1(2,16,"tb.rulenode.add-timeseries-key"))("requiredText",t.ɵɵpipeBind1(3,18,"tb.rulenode.timeseries-keys-required"))("label",t.ɵɵpipeBind1(4,20,"tb.rulenode.timeseries-keys"))("hint",t.ɵɵpipeBind1(5,22,"tb.rulenode.general-pattern-hint")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("tb-help-popup","rulenode/originator_telemetry_node_fields_templatization"),t.ɵɵpropertyInterpolate("trigger-text",t.ɵɵpipeBind1(7,24,"tb.key-val.see-examples")),t.ɵɵproperty("tb-help-popup-style",t.ɵɵpureFunction0(37,Pi)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(10,28,"tb.rulenode.chip-help",t.ɵɵpureFunction1(38,Ri,t.ɵɵpipeBind1(9,26,"tb.rulenode.timeseries-key")))),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(16,31,"tb.rulenode.use-metadata-dynamic-interval-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(19,33,"tb.rulenode.use-metadata-dynamic-interval")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!1===n.getTelemetryFromDatabaseConfigForm.get("useMetadataIntervalPatterns").value)("ngIfElse",e),t.ɵɵadvance(9),t.ɵɵproperty("ngForOf",n.headerOptions),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(32,35,n.deduplicationStrategiesHintTranslations.get(n.getTelemetryFromDatabaseConfigForm.get("fetchMode").value))," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("fetchMode").value===n.fetchMode.ALL)}},dependencies:t.ɵɵgetComponentDepsFactory(po),styles:["[_nghost-%COMP%] .see-example[_ngcontent-%COMP%]{display:inline-block}[_nghost-%COMP%] .description-block[_ngcontent-%COMP%]{display:flex;align-items:center;border-radius:6px;border:1px solid #EAEAEA}[_nghost-%COMP%] .description-block[_ngcontent-%COMP%] .description-icon[_ngcontent-%COMP%]{font-size:24px;height:24px;min-height:24px;width:24px;min-width:24px;line-height:24px;color:#d9d9d9;margin:4px}[_nghost-%COMP%] .description-block[_ngcontent-%COMP%] .description-text[_ngcontent-%COMP%]{font-size:12px;line-height:16px;letter-spacing:.25px;margin:6px}[_nghost-%COMP%] .description-block.error[_ngcontent-%COMP%]{color:var(--mdc-theme-error, #f44336)}[_nghost-%COMP%] .description-block.error[_ngcontent-%COMP%] .description-icon[_ngcontent-%COMP%]{color:var(--mdc-theme-error, #f44336)}[_nghost-%COMP%] .item-center[_ngcontent-%COMP%]{align-items:center}[_nghost-%COMP%] .item-center[_ngcontent-%COMP%] .fetch-mod-toggle[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .hint-container[_ngcontent-%COMP%]{width:100%}"]})}}e("GetTelemetryFromDatabaseConfigComponent",po);class mo extends i{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n}configForm(){return this.originatorAttributesConfigForm}onConfigurationSet(e){this.originatorAttributesConfigForm=this.fb.group({tellFailureIfAbsent:[e.tellFailureIfAbsent,[]],fetchTo:[e.fetchTo,[]],attributesControl:[e.attributesControl,[]]})}prepareInputConfig(e){return j(e)&&(e.attributesControl={clientAttributeNames:P(e?.clientAttributeNames)?e.clientAttributeNames:[],latestTsKeyNames:P(e?.latestTsKeyNames)?e.latestTsKeyNames:[],serverAttributeNames:P(e?.serverAttributeNames)?e.serverAttributeNames:[],sharedAttributeNames:P(e?.sharedAttributeNames)?e.sharedAttributeNames:[],getLatestValueWithTs:!!P(e?.getLatestValueWithTs)&&e.getLatestValueWithTs}),{fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA,tellFailureIfAbsent:!!P(e?.tellFailureIfAbsent)&&e.tellFailureIfAbsent,attributesControl:P(e?.attributesControl)?e.attributesControl:null}}prepareOutputConfig(e){for(const t of Object.keys(e.attributesControl))e[t]=e.attributesControl[t];return delete e.attributesControl,e}static{this.ɵfac=function(e){return new(e||mo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:mo,selectors:[["tb-enrichment-node-originator-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:15,vars:11,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-padding","no-border","space-between"],["translate","",1,"tb-form-panel-title","tb-required"],["translate","",1,"tb-form-panel-hint","tb-error",3,"hidden"],["formControlName","attributesControl","popupHelpLink","rulenode/originator_attributes_node_fields_templatization"],["formControlName","fetchTo",3,"labelText"],[1,"tb-form-row","same-padding",3,"tb-hint-tooltip-icon"],["formControlName","tellFailureIfAbsent",1,"mat-slide","margin"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2)(3,"div",3),t.ɵɵtext(4,"tb.rulenode.originator-attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",4),t.ɵɵtext(6," tb.rulenode.at-least-one-field-required "),t.ɵɵelementEnd()(),t.ɵɵelement(7,"tb-select-attributes",5)(8,"tb-msg-metadata-chip",6),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"div",7),t.ɵɵpipe(11,"translate"),t.ɵɵelementStart(12,"mat-slide-toggle",8),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.originatorAttributesConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("hidden",!(n.originatorAttributesConfigForm.get("attributesControl").touched&&n.originatorAttributesConfigForm.get("attributesControl").hasError("atLeastOneRequired"))),t.ɵɵadvance(3),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(9,5,"tb.rulenode.add-originator-attributes-to")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(11,7,"tb.rulenode.tell-failure-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(14,9,"tb.rulenode.tell-failure")," "))},dependencies:t.ɵɵgetComponentDepsFactory(mo),encapsulation:2})}}e("OriginatorAttributesConfigComponent",mo);class uo extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.originatorFields=[];for(const e of ut)this.originatorFields.push({value:e.value,name:this.translate.instant(e.name)})}configForm(){return this.originatorFieldsConfigForm}prepareOutputConfig(e){return _(e)}prepareInputConfig(e){return{dataMapping:P(e?.dataMapping)?e.dataMapping:null,ignoreNullStrings:P(e?.ignoreNullStrings)?e.ignoreNullStrings:null,fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA}}onConfigurationSet(e){this.originatorFieldsConfigForm=this.fb.group({dataMapping:[e.dataMapping,[N.required]],ignoreNullStrings:[e.ignoreNullStrings,[]],fetchTo:[e.fetchTo,[]]})}static{this.ɵfac=function(e){return new(e||uo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:uo,selectors:[["tb-enrichment-node-originator-fields-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:16,vars:32,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],["required","","targetKeyPrefix","originator","formControlName","dataMapping","popupHelpLink","rulenode/originator_fields_node_fields_templatization",3,"selectOptions","requiredText","labelText","selectText","selectRequiredText","valText","valRequiredText","hintText"],["formControlName","fetchTo",3,"labelText"],[1,"tb-form-row","same-padding",3,"tb-hint-tooltip-icon"],["formControlName","ignoreNullStrings",1,"mat-slide","margin"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-sv-map-config",1),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"translate"),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵpipe(6,"translate"),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"translate"),t.ɵɵelement(9,"tb-msg-metadata-chip",2),t.ɵɵpipe(10,"translate"),t.ɵɵelementStart(11,"div",3),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"mat-slide-toggle",4),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.originatorFieldsConfigForm),t.ɵɵadvance(),t.ɵɵproperty("selectOptions",n.originatorFields)("requiredText",t.ɵɵpipeBind1(2,12,"tb.rulenode.attr-mapping-required"))("labelText",t.ɵɵpipeBind1(3,14,"tb.rulenode.originator-fields-mapping"))("selectText",t.ɵɵpipeBind1(4,16,"tb.rulenode.source-field"))("selectRequiredText",t.ɵɵpipeBind1(5,18,"tb.rulenode.source-field-required"))("valText",t.ɵɵpipeBind1(6,20,"tb.rulenode.target-key"))("valRequiredText",t.ɵɵpipeBind1(7,22,"tb.rulenode.target-key-required"))("hintText",t.ɵɵpipeBind1(8,24,"tb.rulenode.originator-fields-sv-map-hint")),t.ɵɵadvance(8),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(10,26,"tb.rulenode.add-mapped-originator-fields-to")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(12,28,"tb.rulenode.skip-empty-fields-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,30,"tb.rulenode.skip-empty-fields")," "))},dependencies:t.ɵɵgetComponentDepsFactory(uo),encapsulation:2})}}function co(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",9),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}e("OriginatorFieldsConfigComponent",uo);class fo extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.DataToFetch=Ft,this.msgMetadataLabelTranslations=At,this.originatorFields=[],this.fetchToData=[];for(const e of Object.keys(ut))this.originatorFields.push({value:ut[e].value,name:this.translate.instant(ut[e].name)});for(const e of qt.keys())this.fetchToData.push({value:e,name:this.translate.instant(qt.get(e))})}configForm(){return this.relatedAttributesConfigForm}prepareOutputConfig(e){e.dataToFetch===Ft.FIELDS?(e.dataMapping=e.svMap,delete e.svMap):(e.dataMapping=e.kvMap,delete e.kvMap);const t={};if(e&&e.dataMapping)for(const n of Object.keys(e.dataMapping))t[n.trim()]=e.dataMapping[n];return e.dataMapping=t,delete e.svMap,delete e.kvMap,_(e)}prepareInputConfig(e){let t,n,r={[c.name.value]:`relatedEntity${this.translate.instant(c.name.name)}`},a={serialNumber:"sn"};return t=P(e?.telemetry)?e.telemetry?Ft.LATEST_TELEMETRY:Ft.ATTRIBUTES:P(e?.dataToFetch)?e.dataToFetch:Ft.ATTRIBUTES,n=P(e?.attrMapping)?e.attrMapping:P(e?.dataMapping)?e.dataMapping:null,t===Ft.FIELDS?r=n:a=n,{relationsQuery:P(e?.relationsQuery)?e.relationsQuery:null,dataToFetch:t,svMap:r,kvMap:a,fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA}}selectTranslation(e,t){return this.relatedAttributesConfigForm.get("dataToFetch").value===Ft.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.relatedAttributesConfigForm=this.fb.group({relationsQuery:[e.relationsQuery,[N.required]],dataToFetch:[e.dataToFetch,[]],kvMap:[e.kvMap,[N.required]],svMap:[e.svMap,[N.required]],fetchTo:[e.fetchTo,[]]})}validatorTriggers(){return["dataToFetch"]}updateValidators(e){this.relatedAttributesConfigForm.get("dataToFetch").value===Ft.FIELDS?(this.relatedAttributesConfigForm.get("svMap").enable({emitEvent:!1}),this.relatedAttributesConfigForm.get("kvMap").disable({emitEvent:!1}),this.relatedAttributesConfigForm.get("svMap").updateValueAndValidity()):(this.relatedAttributesConfigForm.get("svMap").disable({emitEvent:!1}),this.relatedAttributesConfigForm.get("kvMap").enable({emitEvent:!1}),this.relatedAttributesConfigForm.get("kvMap").updateValueAndValidity())}static{this.ɵfac=function(e){return new(e||fo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:fo,selectors:[["tb-enrichment-node-related-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:24,vars:48,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],["required","","formControlName","relationsQuery"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],["formControlName","dataToFetch","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","kvMap","popupHelpLink","rulenode/related_entity_data_node_fields_templatization",3,"hidden","requiredText","labelText","keyText","keyRequiredText","valText","valRequiredText","hintText"],["required","","targetKeyPrefix","relatedEntity","formControlName","svMap","popupHelpLink","rulenode/related_entity_data_node_fields_templatization",3,"hidden","labelText","selectOptions","requiredText","selectText","selectRequiredText","valText","valRequiredText","hintText"],["formControlName","fetchTo",3,"labelText"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-relations-query-config",1),t.ɵɵelementStart(2,"div",2)(3,"div",3),t.ɵɵtext(4,"tb.rulenode.data-to-fetch"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"tb-toggle-select",4),t.ɵɵtemplate(6,co,2,2,"tb-toggle-option",5),t.ɵɵelementEnd(),t.ɵɵelement(7,"tb-kv-map-config",6),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"translate"),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵelement(14,"tb-sv-map-config",7),t.ɵɵpipe(15,"translate"),t.ɵɵpipe(16,"translate"),t.ɵɵpipe(17,"translate"),t.ɵɵpipe(18,"translate"),t.ɵɵpipe(19,"translate"),t.ɵɵpipe(20,"translate"),t.ɵɵpipe(21,"translate"),t.ɵɵelement(22,"tb-msg-metadata-chip",8),t.ɵɵpipe(23,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.relatedAttributesConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.fetchToData),t.ɵɵadvance(),t.ɵɵproperty("hidden",n.relatedAttributesConfigForm.get("dataToFetch").value===n.DataToFetch.FIELDS)("requiredText",t.ɵɵpipeBind1(8,20,"tb.rulenode.attr-mapping-required"))("labelText",t.ɵɵpipeBind1(9,22,n.selectTranslation("tb.rulenode.latest-telemetry-mapping","tb.rulenode.attributes-mapping")))("keyText",t.ɵɵpipeBind1(10,24,n.selectTranslation("tb.rulenode.source-telemetry","tb.rulenode.source-attribute")))("keyRequiredText",t.ɵɵpipeBind1(11,26,n.selectTranslation("tb.rulenode.source-telemetry-required","tb.rulenode.source-attribute-required")))("valText",t.ɵɵpipeBind1(12,28,"tb.rulenode.target-key"))("valRequiredText",t.ɵɵpipeBind1(13,30,"tb.rulenode.target-key-required"))("hintText","tb.rulenode.kv-map-pattern-hint"),t.ɵɵadvance(7),t.ɵɵproperty("hidden",n.relatedAttributesConfigForm.get("dataToFetch").value!==n.DataToFetch.FIELDS)("labelText",t.ɵɵpipeBind1(15,32,"tb.rulenode.fields-mapping"))("selectOptions",n.originatorFields)("requiredText",t.ɵɵpipeBind1(16,34,"tb.rulenode.attr-mapping-required"))("selectText",t.ɵɵpipeBind1(17,36,"tb.rulenode.source-field"))("selectRequiredText",t.ɵɵpipeBind1(18,38,"tb.rulenode.source-field-required"))("valText",t.ɵɵpipeBind1(19,40,"tb.rulenode.target-key"))("valRequiredText",t.ɵɵpipeBind1(20,42,"tb.rulenode.target-key-required"))("hintText",t.ɵɵpipeBind1(21,44,"tb.rulenode.sv-map-hint")),t.ɵɵadvance(8),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(23,46,n.msgMetadataLabelTranslations.get(n.relatedAttributesConfigForm.get("dataToFetch").value))))},dependencies:t.ɵɵgetComponentDepsFactory(fo),encapsulation:2})}}function go(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",8),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}e("RelatedAttributesConfigComponent",fo);class ho extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.fetchToData=[],this.DataToFetch=Ft;for(const e of qt.keys())e!==Ft.FIELDS&&this.fetchToData.push({value:e,name:this.translate.instant(qt.get(e))})}configForm(){return this.tenantAttributesConfigForm}prepareInputConfig(e){let t,n;return t=P(e?.telemetry)?e.telemetry?Ft.LATEST_TELEMETRY:Ft.ATTRIBUTES:P(e?.dataToFetch)?e.dataToFetch:Ft.ATTRIBUTES,n=P(e?.attrMapping)?e.attrMapping:P(e?.dataMapping)?e.dataMapping:null,{dataToFetch:t,dataMapping:n,fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA}}selectTranslation(e,t){return this.tenantAttributesConfigForm.get("dataToFetch").value===Ft.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.tenantAttributesConfigForm=this.fb.group({dataToFetch:[e.dataToFetch,[]],dataMapping:[e.dataMapping,[N.required]],fetchTo:[e.fetchTo,[]]})}static{this.ɵfac=function(e){return new(e||ho)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ho,selectors:[["tb-enrichment-node-tenant-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:17,vars:26,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-1","items-center","justify-center"],[1,"fetch-to-data-toggle"],["formControlName","dataToFetch","appearance","fill",1,"fetch-to-data-toggle"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","dataMapping","popupHelpLink","rulenode/tenant_attributes_node_fields_templatization",3,"requiredText","labelText","keyText","keyRequiredText","valText","valRequiredText","hintText"],["formControlName","fetchTo",3,"labelText"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.mapping-of-tenant"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2)(4,"div",3)(5,"tb-toggle-select",4),t.ɵɵtemplate(6,go,2,2,"tb-toggle-option",5),t.ɵɵelementEnd()()(),t.ɵɵelement(7,"tb-kv-map-config",6),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"translate"),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵelement(14,"tb-msg-metadata-chip",7),t.ɵɵpipe(15,"translate"),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.tenantAttributesConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.fetchToData),t.ɵɵadvance(),t.ɵɵproperty("requiredText",t.ɵɵpipeBind1(8,10,"tb.rulenode.attr-mapping-required"))("labelText",t.ɵɵpipeBind1(9,12,n.selectTranslation("tb.rulenode.latest-telemetry-mapping","tb.rulenode.attributes-mapping")))("keyText",t.ɵɵpipeBind1(10,14,n.selectTranslation("tb.rulenode.source-telemetry","tb.rulenode.source-attribute")))("keyRequiredText",t.ɵɵpipeBind1(11,16,n.selectTranslation("tb.rulenode.source-telemetry-required","tb.rulenode.source-attribute-required")))("valText",t.ɵɵpipeBind1(12,18,"tb.rulenode.target-key"))("valRequiredText",t.ɵɵpipeBind1(13,20,"tb.rulenode.target-key-required"))("hintText","tb.rulenode.kv-map-pattern-hint"),t.ɵɵadvance(7),t.ɵɵproperty("labelText",n.tenantAttributesConfigForm.get("dataToFetch").value===n.DataToFetch.LATEST_TELEMETRY?t.ɵɵpipeBind1(15,22,"tb.rulenode.add-mapped-latest-telemetry-to"):t.ɵɵpipeBind1(16,24,"tb.rulenode.add-mapped-attribute-to")))},dependencies:t.ɵɵgetComponentDepsFactory(ho),styles:["[_nghost-%COMP%] .fetch-to-data-toggle[_ngcontent-%COMP%]{max-width:420px;width:100%}"]})}}e("TenantAttributesConfigComponent",ho);class yo extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.fetchDeviceCredentialsConfigForm}prepareInputConfig(e){return{fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA}}onConfigurationSet(e){this.fetchDeviceCredentialsConfigForm=this.fb.group({fetchTo:[e.fetchTo,[]]})}static{this.ɵfac=function(e){return new(e||yo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:yo,selectors:[["tb-enrichment-node-fetch-device-credentials-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:3,vars:4,consts:[[3,"formGroup"],["formControlName","fetchTo",3,"labelText"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-msg-metadata-chip",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.fetchDeviceCredentialsConfigForm),t.ɵɵadvance(),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(2,2,"tb.rulenode.fetch-credentials-to")))},dependencies:t.ɵɵgetComponentDepsFactory(yo),encapsulation:2})}}e("FetchDeviceCredentialsConfigComponent",yo);class bo{static{this.ɵfac=function(e){return new(e||bo)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:bo})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,xi,Vi,Li,Oi,mo,uo,po,fo,ho,Mi,yo]})}}function vo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.topic-required")," "))}function xo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.hostname-required")," "))}function Co(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.device-id-required")," "))}function So(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",17),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.azureIotHubCredentialsTypeTranslationsMap.get(e))," ")}}function To(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.credentials-type-required")," "))}function Io(e,t){}function Eo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.sas-key-required")," "))}function Fo(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field",5)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.sas-key"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",18)(4,"tb-toggle-password",19),t.ɵɵtemplate(5,Eo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"tb-file-input",20),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext();return t.ɵɵresetView(r.azureIotHubConfigForm.get("credentials.caCertFileName").setValue(n))})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.azureIotHubConfigForm.get("credentials.sasKey").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(7,4,"tb.rulenode.azure-ca-cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(8,6,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.azureIotHubConfigForm.get("credentials.caCertFileName").value)}}function qo(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-file-input",20),t.ɵɵpipe(1,"translate"),t.ɵɵpipe(2,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext();return t.ɵɵresetView(r.azureIotHubConfigForm.get("credentials.caCertFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"tb-file-input",21),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext();return t.ɵɵresetView(r.azureIotHubConfigForm.get("credentials.certFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"tb-file-input",22),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext();return t.ɵɵresetView(r.azureIotHubConfigForm.get("credentials.privateKeyFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",5)(10,"mat-label",2),t.ɵɵtext(11,"tb.rulenode.private-key-password"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",23)(13,"tb-toggle-password",19),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(1,9,"tb.rulenode.azure-ca-cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(2,11,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.azureIotHubConfigForm.get("credentials.caCertFileName").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(4,13,"tb.rulenode.cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(5,15,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.azureIotHubConfigForm.get("credentials.certFileName").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(7,17,"tb.rulenode.private-key")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(8,19,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.azureIotHubConfigForm.get("credentials.privateKeyFileName").value)}}e("RulenodeCoreConfigEnrichmentModule",bo),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(bo,{declarations:[Vi,Li,Oi,mo,uo,po,fo,ho,Mi,yo],imports:[$,S,xi],exports:[Vi,Li,Oi,mo,uo,po,fo,ho,Mi,yo]});class Ao extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.allAzureIotHubCredentialsTypes=Vt,this.azureIotHubCredentialsTypeTranslationsMap=Ot}configForm(){return this.azureIotHubConfigForm}onConfigurationSet(e){this.azureIotHubConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[N.required]],host:[e?e.host:null,[N.required]],port:[e?e.port:null,[N.required,N.min(1),N.max(65535)]],connectTimeoutSec:[e?e.connectTimeoutSec:null,[N.required,N.min(1),N.max(200)]],clientId:[e?e.clientId:null,[N.required]],cleanSession:[!!e&&e.cleanSession,[]],ssl:[!!e&&e.ssl,[]],credentials:this.fb.group({type:[e&&e.credentials?e.credentials.type:null,[N.required]],sasKey:[e&&e.credentials?e.credentials.sasKey:null,[]],caCert:[e&&e.credentials?e.credentials.caCert:null,[]],caCertFileName:[e&&e.credentials?e.credentials.caCertFileName:null,[]],privateKey:[e&&e.credentials?e.credentials.privateKey:null,[]],privateKeyFileName:[e&&e.credentials?e.credentials.privateKeyFileName:null,[]],cert:[e&&e.credentials?e.credentials.cert:null,[]],certFileName:[e&&e.credentials?e.credentials.certFileName:null,[]],password:[e&&e.credentials?e.credentials.password:null,[]]})})}prepareOutputConfig(e){const t=e.credentials.type;return"sas"===t&&(e.credentials={type:t,sasKey:e.credentials.sasKey,caCert:e.credentials.caCert,caCertFileName:e.credentials.caCertFileName}),e}validatorTriggers(){return["credentials.type"]}updateValidators(e){const t=this.azureIotHubConfigForm.get("credentials"),n=t.get("type").value;switch(e&&t.reset({type:n},{emitEvent:!1}),t.get("sasKey").setValidators([]),t.get("privateKey").setValidators([]),t.get("privateKeyFileName").setValidators([]),t.get("cert").setValidators([]),t.get("certFileName").setValidators([]),n){case"sas":t.get("sasKey").setValidators([N.required]);break;case"cert.PEM":t.get("privateKey").setValidators([N.required]),t.get("privateKeyFileName").setValidators([N.required]),t.get("cert").setValidators([N.required]),t.get("certFileName").setValidators([N.required])}t.get("sasKey").updateValueAndValidity({emitEvent:e}),t.get("privateKey").updateValueAndValidity({emitEvent:e}),t.get("privateKeyFileName").updateValueAndValidity({emitEvent:e}),t.get("cert").updateValueAndValidity({emitEvent:e}),t.get("certFileName").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||Ao)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ao,selectors:[["tb-external-node-azure-iot-hub-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:37,vars:10,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","topicPattern"],[4,"ngIf"],[1,"mat-block"],["required","","matInput","","formControlName","host"],["required","","matInput","","formControlName","clientId","autocomplete","new-clientId"],[1,"tb-mqtt-credentials-panel-group"],["translate","",1,"tb-required"],["formGroupName","credentials",1,"flex","flex-col"],["formControlName","type","required",""],[3,"value",4,"ngFor","ngForOf"],[1,"flex","flex-col",3,"ngSwitch"],["ngSwitchCase","anonymous"],["ngSwitchCase","sas"],["ngSwitchCase","cert.PEM"],[3,"value"],["type","password","required","","matInput","","formControlName","sasKey","autocomplete","new-password"],["matSuffix",""],["formControlName","caCert","inputId","caCertSelect","noFileText","tb.rulenode.no-file",3,"fileNameChanged","existingFileName","label","dropLabel"],["formControlName","cert","inputId","CertSelect","required","","requiredAsError","","noFileText","tb.rulenode.no-file",3,"fileNameChanged","existingFileName","label","dropLabel"],["formControlName","privateKey","inputId","privateKeySelect","required","","requiredAsError","","noFileText","tb.rulenode.no-file",2,"padding-bottom","8px",3,"fileNameChanged","existingFileName","label","dropLabel"],["type","password","matInput","","formControlName","password","autocomplete","new-password"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.topic"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,vo,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-form-field",5)(9,"mat-label",2),t.ɵɵtext(10,"tb.rulenode.hostname"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",6),t.ɵɵtemplate(12,xo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",5)(14,"mat-label",2),t.ɵɵtext(15,"tb.rulenode.device-id"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",7),t.ɵɵtemplate(17,Co,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"mat-accordion")(19,"mat-expansion-panel",8)(20,"mat-expansion-panel-header")(21,"mat-panel-title",9),t.ɵɵtext(22,"tb.rulenode.credentials"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-panel-description"),t.ɵɵtext(24),t.ɵɵpipe(25,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(26,"section",10)(27,"mat-form-field",5)(28,"mat-label",2),t.ɵɵtext(29,"tb.rulenode.credentials-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(30,"mat-select",11),t.ɵɵtemplate(31,So,3,4,"mat-option",12),t.ɵɵelementEnd(),t.ɵɵtemplate(32,To,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(33,"section",13),t.ɵɵtemplate(34,Io,0,0,"ng-template",14)(35,Fo,9,8,"ng-template",15)(36,qo,14,21,"ng-template",16),t.ɵɵelementEnd()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.azureIotHubConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.azureIotHubConfigForm.get("topicPattern").hasError("required")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.azureIotHubConfigForm.get("host").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.azureIotHubConfigForm.get("clientId").hasError("required")),t.ɵɵadvance(7),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(25,8,n.azureIotHubCredentialsTypeTranslationsMap.get(n.azureIotHubConfigForm.get("credentials.type").value))," "),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",n.allAzureIotHubCredentialsTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.azureIotHubConfigForm.get("credentials.type").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngSwitch",n.azureIotHubConfigForm.get("credentials.type").value))},dependencies:t.ɵɵgetComponentDepsFactory(Ao),styles:["[_nghost-%COMP%] .tb-mqtt-credentials-panel-group[_ngcontent-%COMP%]{margin:0 6px}"]})}}function ko(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.topic-pattern-required")," "))}function No(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.bootstrap-servers-required")," "))}function wo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-retries-message")," "))}function Mo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-batch-size-bytes-message")," "))}function Bo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-linger-ms-message")," "))}function Vo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-buffer-memory-bytes-message")," "))}function Oo(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Do(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.key-serializer-required")," "))}function Lo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.value-serializer-required")," "))}function Po(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.ToByteStandartCharsetTypeTranslationMap.get(e))," ")}}function Ro(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",22)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.charset-encoding"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",23),t.ɵɵtemplate(4,Po,3,4,"mat-option",14),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.ToByteStandartCharsetTypesValues)}}e("AzureIotHubConfigComponent",Ao);class _o extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.ackValues=["all","-1","0","1"],this.ToByteStandartCharsetTypesValues=Lt,this.ToByteStandartCharsetTypeTranslationMap=Pt}configForm(){return this.kafkaConfigForm}onConfigurationSet(e){this.kafkaConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[N.required]],keyPattern:[e?e.keyPattern:null],bootstrapServers:[e?e.bootstrapServers:null,[N.required]],retries:[e?e.retries:null,[N.min(0)]],batchSize:[e?e.batchSize:null,[N.min(0)]],linger:[e?e.linger:null,[N.min(0)]],bufferMemory:[e?e.bufferMemory:null,[N.min(0)]],acks:[e?e.acks:null,[N.required]],keySerializer:[e?e.keySerializer:null,[N.required]],valueSerializer:[e?e.valueSerializer:null,[N.required]],otherProperties:[e?e.otherProperties:null,[]],addMetadataKeyValuesAsKafkaHeaders:[!!e&&e.addMetadataKeyValuesAsKafkaHeaders,[]],kafkaHeadersCharset:[e?e.kafkaHeadersCharset:null,[]]})}validatorTriggers(){return["addMetadataKeyValuesAsKafkaHeaders"]}updateValidators(e){this.kafkaConfigForm.get("addMetadataKeyValuesAsKafkaHeaders").value?this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([N.required]):this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([]),this.kafkaConfigForm.get("kafkaHeadersCharset").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||_o)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:_o,selectors:[["tb-external-node-kafka-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:65,vars:14,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","topicPattern"],[4,"ngIf"],["matInput","","formControlName","keyPattern"],["translate","",1,"tb-hint"],[1,"mat-block"],["required","","matInput","","formControlName","bootstrapServers"],["type","number","step","1","min","0","matInput","","formControlName","retries"],["type","number","step","1","min","0","matInput","","formControlName","batchSize"],["type","number","step","1","min","0","matInput","","formControlName","linger"],["type","number","step","1","min","0","matInput","","formControlName","bufferMemory"],["formControlName","acks","required",""],[3,"value",4,"ngFor","ngForOf"],["required","","matInput","","formControlName","keySerializer"],["required","","matInput","","formControlName","valueSerializer"],["translate","",1,"tb-title"],["required","false","formControlName","otherProperties","keyText","tb.rulenode.key","keyRequiredText","tb.rulenode.key-required","valText","tb.rulenode.value","valRequiredText","tb.rulenode.value-required"],["formControlName","addMetadataKeyValuesAsKafkaHeaders",1,"flex-1"],["class","mat-block flex-1",4,"ngIf"],[3,"value"],[1,"mat-block","flex-1"],["formControlName","kafkaHeadersCharset","required",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.topic-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,ko,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-form-field",1)(9,"mat-label",2),t.ɵɵtext(10,"tb.rulenode.key-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",5),t.ɵɵelementStart(12,"mat-hint",2),t.ɵɵtext(13,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"div",6),t.ɵɵtext(15,"tb.rulenode.key-pattern-hint"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"mat-form-field",7)(17,"mat-label",2),t.ɵɵtext(18,"tb.rulenode.bootstrap-servers"),t.ɵɵelementEnd(),t.ɵɵelement(19,"input",8),t.ɵɵtemplate(20,No,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",7)(22,"mat-label",2),t.ɵɵtext(23,"tb.rulenode.retries"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",9),t.ɵɵtemplate(25,wo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(26,"mat-form-field",7)(27,"mat-label",2),t.ɵɵtext(28,"tb.rulenode.batch-size-bytes"),t.ɵɵelementEnd(),t.ɵɵelement(29,"input",10),t.ɵɵtemplate(30,Mo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(31,"mat-form-field",7)(32,"mat-label",2),t.ɵɵtext(33,"tb.rulenode.linger-ms"),t.ɵɵelementEnd(),t.ɵɵelement(34,"input",11),t.ɵɵtemplate(35,Bo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(36,"mat-form-field",7)(37,"mat-label",2),t.ɵɵtext(38,"tb.rulenode.buffer-memory-bytes"),t.ɵɵelementEnd(),t.ɵɵelement(39,"input",12),t.ɵɵtemplate(40,Vo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(41,"mat-form-field",7)(42,"mat-label",2),t.ɵɵtext(43,"tb.rulenode.acks"),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"mat-select",13),t.ɵɵtemplate(45,Oo,2,2,"mat-option",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"mat-form-field",7)(47,"mat-label",2),t.ɵɵtext(48,"tb.rulenode.key-serializer"),t.ɵɵelementEnd(),t.ɵɵelement(49,"input",15),t.ɵɵtemplate(50,Do,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(51,"mat-form-field",7)(52,"mat-label",2),t.ɵɵtext(53,"tb.rulenode.value-serializer"),t.ɵɵelementEnd(),t.ɵɵelement(54,"input",16),t.ɵɵtemplate(55,Lo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(56,"label",17),t.ɵɵtext(57,"tb.rulenode.other-properties"),t.ɵɵelementEnd(),t.ɵɵelement(58,"tb-kv-map-config-old",18),t.ɵɵelementStart(59,"mat-checkbox",19),t.ɵɵtext(60),t.ɵɵpipe(61,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(62,"div",6),t.ɵɵtext(63,"tb.rulenode.add-metadata-key-values-as-kafka-headers-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(64,Ro,5,1,"mat-form-field",20),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.kafkaConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("topicPattern").hasError("required")),t.ɵɵadvance(15),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("bootstrapServers").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("retries").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("batchSize").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("linger").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("bufferMemory").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.ackValues),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("keySerializer").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("valueSerializer").hasError("required")),t.ɵɵadvance(5),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(61,12,"tb.rulenode.add-metadata-key-values-as-kafka-headers")," "),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("addMetadataKeyValuesAsKafkaHeaders").value))},dependencies:t.ɵɵgetComponentDepsFactory(_o),encapsulation:2})}}function jo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.topic-pattern-required")," "))}function Go(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.host-required")," "))}function Ko(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-required")," "))}function Uo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-range")," "))}function Ho(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-range")," "))}function zo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.connect-timeout-required")," "))}function $o(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.connect-timeout-range")," "))}function Qo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.connect-timeout-range")," "))}e("KafkaConfigComponent",_o);class Jo extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.mqttConfigForm}onConfigurationSet(e){this.mqttConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[N.required]],host:[e?e.host:null,[N.required]],port:[e?e.port:null,[N.required,N.min(1),N.max(65535)]],connectTimeoutSec:[e?e.connectTimeoutSec:null,[N.required,N.min(1),N.max(200)]],clientId:[e?e.clientId:null,[]],appendClientIdSuffix:[{value:!!e&&e.appendClientIdSuffix,disabled:!(e&&G(e.clientId))},[]],parseToPlainText:[!!e&&e.parseToPlainText,[]],cleanSession:[!!e&&e.cleanSession,[]],retainedMessage:[!!e&&e.retainedMessage,[]],ssl:[!!e&&e.ssl,[]],credentials:[e?e.credentials:null,[]]})}updateValidators(e){G(this.mqttConfigForm.get("clientId").value)?this.mqttConfigForm.get("appendClientIdSuffix").enable({emitEvent:!1}):this.mqttConfigForm.get("appendClientIdSuffix").disable({emitEvent:!1}),this.mqttConfigForm.get("appendClientIdSuffix").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["clientId"]}static{this.ɵfac=function(e){return new(e||Jo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Jo,selectors:[["tb-external-node-mqtt-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:57,vars:34,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","topicPattern"],[4,"ngIf"],[1,"flex","flex-1","flex-col","gt-sm:flex-row","gt-sm:gap-2"],[1,"mat-block","gt-sm:max-w-60%","gt-sm:flex-full"],["required","","matInput","","formControlName","host"],[1,"mat-block","gt-sm:max-w-40%","gt-sm:flex-full"],["required","","type","number","step","1","min","1","max","65535","matInput","","formControlName","port"],["required","","type","number","step","1","min","1","max","200","matInput","","formControlName","connectTimeoutSec"],["matInput","","formControlName","clientId"],["formControlName","appendClientIdSuffix"],[1,"tb-hint"],["formControlName","parseToPlainText"],["formControlName","cleanSession"],["formControlName","retainedMessage"],["formControlName","ssl"],["formControlName","credentials",3,"passwordFieldRequired"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.topic-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,jo,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",5)(9,"mat-form-field",6)(10,"mat-label",2),t.ɵɵtext(11,"tb.rulenode.host"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",7),t.ɵɵtemplate(13,Go,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-form-field",8)(15,"mat-label",2),t.ɵɵtext(16,"tb.rulenode.port"),t.ɵɵelementEnd(),t.ɵɵelement(17,"input",9),t.ɵɵtemplate(18,Ko,3,3,"mat-error",4)(19,Uo,3,3,"mat-error",4)(20,Ho,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",8)(22,"mat-label",2),t.ɵɵtext(23,"tb.rulenode.connect-timeout"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",10),t.ɵɵtemplate(25,zo,3,3,"mat-error",4)(26,$o,3,3,"mat-error",4)(27,Qo,3,3,"mat-error",4),t.ɵɵelementEnd()(),t.ɵɵelementStart(28,"mat-form-field",1)(29,"mat-label",2),t.ɵɵtext(30,"tb.rulenode.client-id"),t.ɵɵelementEnd(),t.ɵɵelement(31,"input",11),t.ɵɵelementStart(32,"mat-hint"),t.ɵɵtext(33),t.ɵɵpipe(34,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(35,"mat-checkbox",12),t.ɵɵtext(36),t.ɵɵpipe(37,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"div",13),t.ɵɵtext(39),t.ɵɵpipe(40,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(41,"mat-checkbox",14),t.ɵɵtext(42),t.ɵɵpipe(43,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"div",13),t.ɵɵtext(45),t.ɵɵpipe(46,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(47,"mat-checkbox",15),t.ɵɵtext(48),t.ɵɵpipe(49,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(50,"mat-checkbox",16),t.ɵɵtext(51),t.ɵɵpipe(52,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(53,"mat-checkbox",17),t.ɵɵtext(54),t.ɵɵpipe(55,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(56,"tb-credentials-config",18),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.mqttConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("topicPattern").hasError("required")),t.ɵɵadvance(8),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("host").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("port").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("port").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("port").hasError("max")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("connectTimeoutSec").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("connectTimeoutSec").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("connectTimeoutSec").hasError("max")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(34,18,"tb.rulenode.client-id-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(37,20,"tb.rulenode.append-client-id-suffix")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(40,22,"tb.rulenode.client-id-suffix-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(43,24,"tb.rulenode.parse-to-plain-text")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(46,26,"tb.rulenode.parse-to-plain-text-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(49,28,"tb.rulenode.clean-session")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(52,30,"tb.rulenode.retained-message")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(55,32,"tb.rulenode.enable-ssl")," "),t.ɵɵadvance(2),t.ɵɵproperty("passwordFieldRequired",!1))},dependencies:t.ɵɵgetComponentDepsFactory(Jo),styles:["[_nghost-%COMP%] .tb-mqtt-credentials-panel-group[_ngcontent-%COMP%]{margin:0 6px}"]})}}e("MqttConfigComponent",Jo);class Yo extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.notificationType=E,this.entityType=u}configForm(){return this.notificationConfigForm}onConfigurationSet(e){this.notificationConfigForm=this.fb.group({templateId:[e?e.templateId:null,[N.required]],targets:[e?e.targets:[],[N.required]]})}static{this.ɵfac=function(e){return new(e||Yo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Yo,selectors:[["tb-external-node-notification-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:6,vars:13,consts:[[1,"flex","flex-col",3,"formGroup"],["required","","allowCreate","","formControlName","templateId",3,"notificationTypes"],["required","","formControlName","targets",3,"labelText","placeholderText","requiredText","entityType","subType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-template-autocomplete",1)(2,"tb-entity-list",2),t.ɵɵpipe(3,"translate"),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.notificationConfigForm),t.ɵɵadvance(),t.ɵɵproperty("notificationTypes",n.notificationType.RULE_NODE),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("labelText",t.ɵɵpipeBind1(3,7,"notification.recipients")),t.ɵɵpropertyInterpolate("placeholderText",t.ɵɵpipeBind1(4,9,"notification.recipient")),t.ɵɵpropertyInterpolate("requiredText",t.ɵɵpipeBind1(5,11,"notification.recipients-required")),t.ɵɵpropertyInterpolate("entityType",n.entityType.NOTIFICATION_TARGET),t.ɵɵpropertyInterpolate("subType",n.notificationType.RULE_NODE))},dependencies:t.ɵɵgetComponentDepsFactory(Yo),encapsulation:2})}}function Wo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.gcp-project-id-required")," "))}function Xo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.pubsub-topic-name-required")," "))}e("NotificationConfigComponent",Yo);class Zo extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.pubSubConfigForm}onConfigurationSet(e){this.pubSubConfigForm=this.fb.group({projectId:[e?e.projectId:null,[N.required]],topicName:[e?e.topicName:null,[N.required]],serviceAccountKey:[e?e.serviceAccountKey:null,[N.required]],serviceAccountKeyFileName:[e?e.serviceAccountKeyFileName:null,[N.required]],messageAttributes:[e?e.messageAttributes:null,[]]})}static{this.ɵfac=function(e){return new(e||Zo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Zo,selectors:[["tb-external-node-pub-sub-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:20,vars:16,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block"],["translate",""],["required","","matInput","","formControlName","projectId"],[4,"ngIf"],["required","","matInput","","formControlName","topicName"],["formControlName","serviceAccountKey","required","","requiredAsError","","noFileText","tb.rulenode.no-file",2,"padding-bottom","24px",3,"fileNameChanged","existingFileName","label","dropLabel"],["translate","",1,"tb-title"],[1,"tb-hint",3,"innerHTML"],["required","false","formControlName","messageAttributes","keyText","tb.rulenode.name","keyRequiredText","tb.rulenode.name-required","valText","tb.rulenode.value","valRequiredText","tb.rulenode.value-required"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.gcp-project-id"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,Wo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-form-field",1)(7,"mat-label",2),t.ɵɵtext(8,"tb.rulenode.pubsub-topic-name"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",5),t.ɵɵtemplate(10,Xo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"tb-file-input",6),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵlistener("fileNameChanged",(function(e){return n.pubSubConfigForm.get("serviceAccountKeyFileName").setValue(e)})),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"label",7),t.ɵɵtext(15,"tb.rulenode.message-attributes"),t.ɵɵelementEnd(),t.ɵɵelement(16,"div",8),t.ɵɵpipe(17,"translate"),t.ɵɵpipe(18,"safe"),t.ɵɵelement(19,"tb-kv-map-config-old",9),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.pubSubConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.pubSubConfigForm.get("projectId").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.pubSubConfigForm.get("topicName").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(12,7,"tb.rulenode.gcp-service-account-key")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(13,9,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",n.pubSubConfigForm.get("serviceAccountKeyFileName").value),t.ɵɵadvance(5),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(18,13,t.ɵɵpipeBind1(17,11,"tb.rulenode.message-attributes-hint"),"html"),t.ɵɵsanitizeHtml))},dependencies:t.ɵɵgetComponentDepsFactory(Zo),encapsulation:2})}}function el(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function tl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.host-required")," "))}function nl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-required")," "))}function rl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-range")," "))}function al(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-range")," "))}function il(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-connection-timeout-ms-message")," "))}function ol(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-handshake-timeout-ms-message")," "))}e("PubSubConfigComponent",Zo);class ll extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.messageProperties=[null,"BASIC","TEXT_PLAIN","MINIMAL_BASIC","MINIMAL_PERSISTENT_BASIC","PERSISTENT_BASIC","PERSISTENT_TEXT_PLAIN"]}configForm(){return this.rabbitMqConfigForm}onConfigurationSet(e){this.rabbitMqConfigForm=this.fb.group({exchangeNamePattern:[e?e.exchangeNamePattern:null,[]],routingKeyPattern:[e?e.routingKeyPattern:null,[]],messageProperties:[e?e.messageProperties:null,[]],host:[e?e.host:null,[N.required]],port:[e?e.port:null,[N.required,N.min(1),N.max(65535)]],virtualHost:[e?e.virtualHost:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]],automaticRecoveryEnabled:[!!e&&e.automaticRecoveryEnabled,[]],connectionTimeout:[e?e.connectionTimeout:null,[N.min(0)]],handshakeTimeout:[e?e.handshakeTimeout:null,[N.min(0)]],clientProperties:[e?e.clientProperties:null,[]]})}static{this.ɵfac=function(e){return new(e||ll)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ll,selectors:[["tb-external-node-rabbit-mq-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:56,vars:11,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block"],["translate",""],["matInput","","formControlName","exchangeNamePattern"],["matInput","","formControlName","routingKeyPattern"],["formControlName","messageProperties"],[3,"value",4,"ngFor","ngForOf"],[1,"gt-sm:flex","gt-sm:flex-row","gt-sm:gap-2"],[1,"mat-block","gt-sm:max-w-60%","gt-sm:flex-full"],["required","","matInput","","formControlName","host"],[4,"ngIf"],[1,"mat-block","gt-sm:max-w-40%","gt-sm:flex-full"],["required","","type","number","step","1","min","1","max","65535","matInput","","formControlName","port"],["matInput","","formControlName","virtualHost"],["matInput","","formControlName","username"],["type","password","matInput","","formControlName","password"],["matSuffix",""],["formControlName","automaticRecoveryEnabled"],["type","number","step","1","min","0","matInput","","formControlName","connectionTimeout"],["type","number","step","1","min","0","matInput","","formControlName","handshakeTimeout"],["translate","",1,"tb-title"],["required","false","formControlName","clientProperties","keyText","tb.rulenode.key","keyRequiredText","tb.rulenode.key-required","valText","tb.rulenode.value","valRequiredText","tb.rulenode.value-required"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.exchange-name-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",1)(6,"mat-label",2),t.ɵɵtext(7,"tb.rulenode.routing-key-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",4),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",1)(10,"mat-label",2),t.ɵɵtext(11,"tb.rulenode.message-properties"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-select",5),t.ɵɵtemplate(13,el,2,2,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"div",7)(15,"mat-form-field",8)(16,"mat-label",2),t.ɵɵtext(17,"tb.rulenode.host"),t.ɵɵelementEnd(),t.ɵɵelement(18,"input",9),t.ɵɵtemplate(19,tl,3,3,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"mat-form-field",11)(21,"mat-label",2),t.ɵɵtext(22,"tb.rulenode.port"),t.ɵɵelementEnd(),t.ɵɵelement(23,"input",12),t.ɵɵtemplate(24,nl,3,3,"mat-error",10)(25,rl,3,3,"mat-error",10)(26,al,3,3,"mat-error",10),t.ɵɵelementEnd()(),t.ɵɵelementStart(27,"mat-form-field",1)(28,"mat-label",2),t.ɵɵtext(29,"tb.rulenode.virtual-host"),t.ɵɵelementEnd(),t.ɵɵelement(30,"input",13),t.ɵɵelementEnd(),t.ɵɵelementStart(31,"mat-form-field",1)(32,"mat-label",2),t.ɵɵtext(33,"tb.rulenode.username"),t.ɵɵelementEnd(),t.ɵɵelement(34,"input",14),t.ɵɵelementEnd(),t.ɵɵelementStart(35,"mat-form-field",1)(36,"mat-label",2),t.ɵɵtext(37,"tb.rulenode.password"),t.ɵɵelementEnd(),t.ɵɵelement(38,"input",15)(39,"tb-toggle-password",16),t.ɵɵelementEnd(),t.ɵɵelementStart(40,"mat-checkbox",17),t.ɵɵtext(41),t.ɵɵpipe(42,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(43,"mat-form-field",1)(44,"mat-label",2),t.ɵɵtext(45,"tb.rulenode.connection-timeout-ms"),t.ɵɵelementEnd(),t.ɵɵelement(46,"input",18),t.ɵɵtemplate(47,il,3,3,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(48,"mat-form-field",1)(49,"mat-label",2),t.ɵɵtext(50,"tb.rulenode.handshake-timeout-ms"),t.ɵɵelementEnd(),t.ɵɵelement(51,"input",19),t.ɵɵtemplate(52,ol,3,3,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(53,"label",20),t.ɵɵtext(54,"tb.rulenode.client-properties"),t.ɵɵelementEnd(),t.ɵɵelement(55,"tb-kv-map-config-old",21),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.rabbitMqConfigForm),t.ɵɵadvance(13),t.ɵɵproperty("ngForOf",n.messageProperties),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("host").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("port").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("port").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("port").hasError("max")),t.ɵɵadvance(15),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(42,9,"tb.rulenode.automatic-recovery")," "),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("connectionTimeout").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("handshakeTimeout").hasError("min")))},dependencies:t.ɵɵgetComponentDepsFactory(ll),encapsulation:2})}}e("RabbitMqConfigComponent",ll);const sl=e=>({max:e});function pl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.endpoint-url-pattern-required")," "))}function ml(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",20),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function dl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-checkbox",21),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.use-simple-client-http-factory")," "))}function ul(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",20),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function cl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-host-required")," "))}function fl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-port-required")," "))}function gl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-port-range")," "))}function hl(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"div",23)(2,"mat-form-field",24)(3,"mat-label",2),t.ɵɵtext(4,"tb.rulenode.proxy-scheme"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",25),t.ɵɵtemplate(6,ul,2,2,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",26)(8,"mat-label",2),t.ɵɵtext(9,"tb.rulenode.proxy-host"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",27),t.ɵɵtemplate(11,cl,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",28)(13,"mat-label",2),t.ɵɵtext(14,"tb.rulenode.proxy-port"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",29),t.ɵɵtemplate(16,fl,3,3,"mat-error",4)(17,gl,3,3,"mat-error",4),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"mat-form-field",5)(19,"mat-label",2),t.ɵɵtext(20,"tb.rulenode.proxy-user"),t.ɵɵelementEnd(),t.ɵɵelement(21,"input",30),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"mat-form-field",5)(23,"mat-label",2),t.ɵɵtext(24,"tb.rulenode.proxy-password"),t.ɵɵelementEnd(),t.ɵɵelement(25,"input",31),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",e.proxySchemes),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.restApiCallConfigForm.get("proxyHost").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.restApiCallConfigForm.get("proxyPort").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.restApiCallConfigForm.get("proxyPort").hasError("min")||e.restApiCallConfigForm.get("proxyPort").hasError("max"))}}function yl(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"mat-checkbox",22),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(4,hl,26,4,"div",4),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,2,"tb.rulenode.use-system-proxy-properties")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!e.restApiCallConfigForm.get("useSystemProxyProperties").value)}}function bl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.int-range")," "))}function vl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",1)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.read-timeout"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",32),t.ɵɵelementStart(4,"mat-hint",2),t.ɵɵtext(5,"tb.rulenode.read-timeout-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(6,bl,3,3,"mat-error",4),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵproperty("max",e.IntLimit),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.restApiCallConfigForm.get("readTimeoutMs").hasError("max"))}}function xl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.int-range")," "))}function Cl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,"tb.rulenode.memory-buffer-size-range",t.ɵɵpureFunction1(4,sl,e.MemoryBufferSizeInKbLimit))," ")}}class Sl extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.proxySchemes=["http","https"],this.httpRequestTypes=Object.keys(Dt),this.MemoryBufferSizeInKbLimit=25e3,this.IntLimit=tn}configForm(){return this.restApiCallConfigForm}onConfigurationSet(e){this.restApiCallConfigForm=this.fb.group({restEndpointUrlPattern:[e?e.restEndpointUrlPattern:null,[N.required]],requestMethod:[e?e.requestMethod:null,[N.required]],useSimpleClientHttpFactory:[!!e&&e.useSimpleClientHttpFactory,[]],parseToPlainText:[!!e&&e.parseToPlainText,[]],ignoreRequestBody:[!!e&&e.ignoreRequestBody,[]],enableProxy:[!!e&&e.enableProxy,[]],useSystemProxyProperties:[!!e&&e.enableProxy,[]],proxyScheme:[e?e.proxyHost:null,[]],proxyHost:[e?e.proxyHost:null,[]],proxyPort:[e?e.proxyPort:null,[]],proxyUser:[e?e.proxyUser:null,[]],proxyPassword:[e?e.proxyPassword:null,[]],readTimeoutMs:[e?e.readTimeoutMs:null,[N.min(0),N.max(tn)]],maxParallelRequestsCount:[e?e.maxParallelRequestsCount:null,[N.min(0),N.max(tn)]],headers:[e?e.headers:null,[]],credentials:[e?e.credentials:null,[]],maxInMemoryBufferSizeInKb:[e?e.maxInMemoryBufferSizeInKb:null,[N.min(1),N.max(this.MemoryBufferSizeInKbLimit)]]})}validatorTriggers(){return["useSimpleClientHttpFactory","enableProxy","useSystemProxyProperties"]}updateValidators(e){const t=this.restApiCallConfigForm.get("useSimpleClientHttpFactory").value,n=this.restApiCallConfigForm.get("enableProxy").value,r=this.restApiCallConfigForm.get("useSystemProxyProperties").value;n&&!r?(this.restApiCallConfigForm.get("proxyHost").setValidators(n?[N.required]:[]),this.restApiCallConfigForm.get("proxyPort").setValidators(n?[N.required,N.min(1),N.max(65535)]:[])):(this.restApiCallConfigForm.get("proxyHost").setValidators([]),this.restApiCallConfigForm.get("proxyPort").setValidators([]),t?this.restApiCallConfigForm.get("readTimeoutMs").setValidators([]):this.restApiCallConfigForm.get("readTimeoutMs").setValidators([N.min(0),N.max(tn)])),this.restApiCallConfigForm.get("readTimeoutMs").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("proxyHost").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("proxyPort").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("credentials").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||Sl)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Sl,selectors:[["tb-external-node-rest-api-call-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:48,vars:26,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","restEndpointUrlPattern"],[4,"ngIf"],[1,"mat-block"],["formControlName","requestMethod"],[3,"value",4,"ngFor","ngForOf"],["formControlName","enableProxy"],["formControlName","useSimpleClientHttpFactory",4,"ngIf"],["formControlName","parseToPlainText"],["translate","",1,"tb-hint",2,"padding-bottom","5px"],["formControlName","ignoreRequestBody"],["class","mat-block","subscriptSizing","dynamic",4,"ngIf"],["type","text","min","0","inputmode","numeric","pattern","[0-9]*","matInput","","formControlName","maxParallelRequestsCount",3,"max"],["type","text","min","1","inputmode","numeric","pattern","[0-9]*","matInput","","formControlName","maxInMemoryBufferSizeInKb",3,"max"],["translate","",1,"tb-title"],[1,"tb-hint",3,"innerHTML"],["required","false","formControlName","headers","keyText","tb.rulenode.header","keyRequiredText","tb.rulenode.header-required","valText","tb.rulenode.value","valRequiredText","tb.rulenode.value-required"],["formControlName","credentials",3,"disableCertPemCredentials"],[3,"value"],["formControlName","useSimpleClientHttpFactory"],["formControlName","useSystemProxyProperties"],[1,"gt-sm:flex","gt-sm:flex-row","gt-sm:gap-2"],[1,"mat-block","gt-sm:max-w-10%","gt-sm:flex-full"],["formControlName","proxyScheme"],[1,"md-block","gt-sm:max-w-50%","gt-sm:flex-full"],["matInput","","required","","formControlName","proxyHost"],[1,"mat-block","gt-sm:max-w-40%","gt-sm:flex-full"],["matInput","","required","","formControlName","proxyPort","type","number","step","1"],["matInput","","formControlName","proxyUser"],["matInput","","formControlName","proxyPassword"],["type","text","min","0","inputmode","numeric","pattern","[0-9]*","matInput","","formControlName","readTimeoutMs",3,"max"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.endpoint-url-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,pl,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-form-field",5)(9,"mat-label",2),t.ɵɵtext(10,"tb.rulenode.request-method"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-select",6),t.ɵɵtemplate(12,ml,2,2,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelementStart(13,"mat-checkbox",8),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(16,dl,3,3,"mat-checkbox",9),t.ɵɵelementStart(17,"mat-checkbox",10),t.ɵɵtext(18),t.ɵɵpipe(19,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"div",11),t.ɵɵtext(21,"tb.rulenode.parse-to-plain-text-hint"),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"mat-checkbox",12),t.ɵɵtext(23),t.ɵɵpipe(24,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(25,yl,5,4,"div",4)(26,vl,7,2,"mat-form-field",13),t.ɵɵelementStart(27,"mat-form-field",1)(28,"mat-label",2),t.ɵɵtext(29,"tb.rulenode.max-parallel-requests-count"),t.ɵɵelementEnd(),t.ɵɵelement(30,"input",14),t.ɵɵelementStart(31,"mat-hint",2),t.ɵɵtext(32,"tb.rulenode.max-parallel-requests-count-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(33,xl,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(34,"mat-form-field",1)(35,"mat-label",2),t.ɵɵtext(36,"tb.rulenode.max-response-size"),t.ɵɵelementEnd(),t.ɵɵelement(37,"input",15),t.ɵɵelementStart(38,"mat-hint",2),t.ɵɵtext(39,"tb.rulenode.max-response-size-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(40,Cl,3,6,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(41,"label",16),t.ɵɵtext(42,"tb.rulenode.headers"),t.ɵɵelementEnd(),t.ɵɵelement(43,"div",17),t.ɵɵpipe(44,"translate"),t.ɵɵpipe(45,"safe"),t.ɵɵelement(46,"tb-kv-map-config-old",18)(47,"tb-credentials-config",19),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.restApiCallConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.restApiCallConfigForm.get("restEndpointUrlPattern").hasError("required")),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",n.httpRequestTypes),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,15,"tb.rulenode.enable-proxy")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!n.restApiCallConfigForm.get("enableProxy").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(19,17,"tb.rulenode.parse-to-plain-text")," "),t.ɵɵadvance(5),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(24,19,"tb.rulenode.ignore-request-body")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.restApiCallConfigForm.get("enableProxy").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.restApiCallConfigForm.get("useSimpleClientHttpFactory").value||n.restApiCallConfigForm.get("enableProxy").value),t.ɵɵadvance(4),t.ɵɵproperty("max",n.IntLimit),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.restApiCallConfigForm.get("maxParallelRequestsCount").hasError("max")),t.ɵɵadvance(4),t.ɵɵproperty("max",n.MemoryBufferSizeInKbLimit),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.restApiCallConfigForm.get("maxInMemoryBufferSizeInKb").hasError("min")||n.restApiCallConfigForm.get("maxInMemoryBufferSizeInKb").hasError("max")),t.ɵɵadvance(3),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(45,23,t.ɵɵpipeBind1(44,21,"tb.rulenode.headers-hint"),"html"),t.ɵɵsanitizeHtml),t.ɵɵadvance(4),t.ɵɵproperty("disableCertPemCredentials",n.restApiCallConfigForm.get("useSimpleClientHttpFactory").value))},dependencies:t.ɵɵgetComponentDepsFactory(Sl),encapsulation:2})}}function Tl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.toUpperCase()," ")}}function Il(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.smtp-host-required")," "))}function El(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.smtp-port-required")," "))}function Fl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.smtp-port-range")," "))}function ql(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.smtp-port-range")," "))}function Al(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.timeout-required")," "))}function kl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-timeout-msec-message")," "))}function Nl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function wl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",4)(1,"mat-label",5),t.ɵɵtext(2,"tb.rulenode.tls-version"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",23),t.ɵɵtemplate(4,Nl,2,2,"mat-option",7),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.tlsVersions)}}function Ml(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-host-required")," "))}function Bl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-port-required")," "))}function Vl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-port-range")," "))}function Ol(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"div",8)(2,"mat-form-field",9)(3,"mat-label",5),t.ɵɵtext(4,"tb.rulenode.proxy-host"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",24),t.ɵɵtemplate(6,Ml,3,3,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-form-field",12)(8,"mat-label",5),t.ɵɵtext(9,"tb.rulenode.proxy-port"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",25),t.ɵɵtemplate(11,Bl,3,3,"mat-error",11)(12,Vl,3,3,"mat-error",11),t.ɵɵelementEnd()(),t.ɵɵelementStart(13,"mat-form-field",4)(14,"mat-label",5),t.ɵɵtext(15,"tb.rulenode.proxy-user"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",26),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"mat-form-field",4)(18,"mat-label",5),t.ɵɵtext(19,"tb.rulenode.proxy-password"),t.ɵɵelementEnd(),t.ɵɵelement(20,"input",27),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("proxyHost").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("proxyPort").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("proxyPort").hasError("min")||e.sendEmailConfigForm.get("proxyPort").hasError("max"))}}function Dl(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",3)(1,"mat-form-field",4)(2,"mat-label",5),t.ɵɵtext(3,"tb.rulenode.smtp-protocol"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-select",6),t.ɵɵtemplate(5,Tl,2,2,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"div",8)(7,"mat-form-field",9)(8,"mat-label",5),t.ɵɵtext(9,"tb.rulenode.smtp-host"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",10),t.ɵɵtemplate(11,Il,3,3,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",12)(13,"mat-label",5),t.ɵɵtext(14,"tb.rulenode.smtp-port"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",13),t.ɵɵtemplate(16,El,3,3,"mat-error",11)(17,Fl,3,3,"mat-error",11)(18,ql,3,3,"mat-error",11),t.ɵɵelementEnd()(),t.ɵɵelementStart(19,"mat-form-field",4)(20,"mat-label",5),t.ɵɵtext(21,"tb.rulenode.timeout-msec"),t.ɵɵelementEnd(),t.ɵɵelement(22,"input",14),t.ɵɵtemplate(23,Al,3,3,"mat-error",11)(24,kl,3,3,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-checkbox",15),t.ɵɵtext(26),t.ɵɵpipe(27,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(28,wl,5,1,"mat-form-field",16),t.ɵɵelementStart(29,"tb-checkbox",17),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(32,Ol,21,3,"div",11),t.ɵɵelementStart(33,"mat-form-field",18)(34,"mat-label",5),t.ɵɵtext(35,"tb.rulenode.username"),t.ɵɵelementEnd(),t.ɵɵelement(36,"input",19),t.ɵɵpipe(37,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"mat-form-field",18)(39,"mat-label",5),t.ɵɵtext(40,"tb.rulenode.password"),t.ɵɵelementEnd(),t.ɵɵelement(41,"input",20),t.ɵɵpipe(42,"translate"),t.ɵɵelement(43,"tb-toggle-password",21),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.smtpProtocols),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("smtpHost").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("smtpPort").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("smtpPort").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("smtpPort").hasError("max")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("timeout").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("timeout").hasError("min")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(27,13,"tb.rulenode.enable-tls")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!0===e.sendEmailConfigForm.get("enableTls").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(31,15,"tb.rulenode.enable-proxy")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("enableProxy").value),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(37,17,"tb.rulenode.enter-username")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(42,19,"tb.rulenode.enter-password"))}}e("RestApiCallConfigComponent",Sl);class Ll extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.smtpProtocols=["smtp","smtps"],this.tlsVersions=["TLSv1","TLSv1.1","TLSv1.2","TLSv1.3"]}configForm(){return this.sendEmailConfigForm}onConfigurationSet(e){this.sendEmailConfigForm=this.fb.group({useSystemSmtpSettings:[!!e&&e.useSystemSmtpSettings,[]],smtpProtocol:[e?e.smtpProtocol:null,[]],smtpHost:[e?e.smtpHost:null,[]],smtpPort:[e?e.smtpPort:null,[]],timeout:[e?e.timeout:null,[]],enableTls:[!!e&&e.enableTls,[]],tlsVersion:[e?e.tlsVersion:null,[]],enableProxy:[!!e&&e.enableProxy,[]],proxyHost:[e?e.proxyHost:null,[]],proxyPort:[e?e.proxyPort:null,[]],proxyUser:[e?e.proxyUser:null,[]],proxyPassword:[e?e.proxyPassword:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]]})}validatorTriggers(){return["useSystemSmtpSettings","enableProxy"]}updateValidators(e){const t=this.sendEmailConfigForm.get("useSystemSmtpSettings").value,n=this.sendEmailConfigForm.get("enableProxy").value;t?(this.sendEmailConfigForm.get("smtpProtocol").setValidators([]),this.sendEmailConfigForm.get("smtpHost").setValidators([]),this.sendEmailConfigForm.get("smtpPort").setValidators([]),this.sendEmailConfigForm.get("timeout").setValidators([]),this.sendEmailConfigForm.get("proxyHost").setValidators([]),this.sendEmailConfigForm.get("proxyPort").setValidators([])):(this.sendEmailConfigForm.get("smtpProtocol").setValidators([N.required]),this.sendEmailConfigForm.get("smtpHost").setValidators([N.required]),this.sendEmailConfigForm.get("smtpPort").setValidators([N.required,N.min(1),N.max(65535)]),this.sendEmailConfigForm.get("timeout").setValidators([N.required,N.min(0)]),this.sendEmailConfigForm.get("proxyHost").setValidators(n?[N.required]:[]),this.sendEmailConfigForm.get("proxyPort").setValidators(n?[N.required,N.min(1),N.max(65535)]:[])),this.sendEmailConfigForm.get("smtpProtocol").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpHost").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpPort").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("timeout").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("proxyHost").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("proxyPort").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||Ll)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ll,selectors:[["tb-external-node-send-email-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:5,vars:5,consts:[[1,"flex","flex-col",3,"formGroup"],["formControlName","useSystemSmtpSettings"],["class","flex flex-col",4,"ngIf"],[1,"flex","flex-col"],[1,"mat-block"],["translate",""],["formControlName","smtpProtocol"],[3,"value",4,"ngFor","ngForOf"],[1,"gt-sm:flex","gt-sm:flex-row","gt-sm:gap-2"],[1,"mat-block","gt-sm:max-w-60%","gt-sm:flex-full"],["required","","matInput","","formControlName","smtpHost"],[4,"ngIf"],[1,"mat-block","gt-sm:max-w-40%","gt-sm:flex-full"],["required","","type","number","step","1","min","1","max","65535","matInput","","formControlName","smtpPort"],["required","","type","number","step","1","min","0","matInput","","formControlName","timeout"],["formControlName","enableTls"],["class","mat-block",4,"ngIf"],["formControlName","enableProxy"],["floatLabel","always",1,"mat-block"],["matInput","","formControlName","username",3,"placeholder"],["matInput","","type","password","formControlName","password",3,"placeholder"],["matSuffix",""],[3,"value"],["formControlName","tlsVersion"],["matInput","","required","","formControlName","proxyHost"],["matInput","","required","","formControlName","proxyPort","type","number","step","1","min","1","max","65535"],["matInput","","formControlName","proxyUser"],["matInput","","formControlName","proxyPassword"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-checkbox",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Dl,44,21,"section",2),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.sendEmailConfigForm),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,3,"tb.rulenode.use-system-smtp-settings")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!1===n.sendEmailConfigForm.get("useSystemSmtpSettings").value))},dependencies:t.ɵɵgetComponentDepsFactory(Ll),encapsulation:2})}}function Pl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.numbers-to-template-required")," "))}function Rl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.sms-message-template-required")," "))}function _l(e,n){1&e&&t.ɵɵelement(0,"tb-sms-provider-configuration",9)}e("SendEmailConfigComponent",Ll);class jl extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.sendSmsConfigForm}onConfigurationSet(e){this.sendSmsConfigForm=this.fb.group({numbersToTemplate:[e?e.numbersToTemplate:null,[N.required]],smsMessageTemplate:[e?e.smsMessageTemplate:null,[N.required]],useSystemSmsSettings:[!!e&&e.useSystemSmsSettings,[]],smsProviderConfiguration:[e?e.smsProviderConfiguration:null,[]]})}validatorTriggers(){return["useSystemSmsSettings"]}updateValidators(e){this.sendSmsConfigForm.get("useSystemSmsSettings").value?this.sendSmsConfigForm.get("smsProviderConfiguration").setValidators([]):this.sendSmsConfigForm.get("smsProviderConfiguration").setValidators([N.required]),this.sendSmsConfigForm.get("smsProviderConfiguration").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||jl)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:jl,selectors:[["tb-external-node-send-sms-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:20,vars:13,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","numbersToTemplate"],[4,"ngIf"],[3,"innerHTML"],["required","","matInput","","formControlName","smsMessageTemplate","rows","6"],["formControlName","useSystemSmsSettings"],["formControlName","smsProviderConfiguration","required","",4,"ngIf"],["formControlName","smsProviderConfiguration","required",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.numbers-to-template"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,Pl,3,3,"mat-error",4),t.ɵɵelement(6,"mat-hint",5),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"safe"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",1)(10,"mat-label",2),t.ɵɵtext(11,"tb.rulenode.sms-message-template"),t.ɵɵelementEnd(),t.ɵɵelement(12,"textarea",6),t.ɵɵtemplate(13,Rl,3,3,"mat-error",4),t.ɵɵelementStart(14,"mat-hint",2),t.ɵɵtext(15,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(16,"mat-checkbox",7),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(19,_l,1,0,"tb-sms-provider-configuration",8),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.sendSmsConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.sendSmsConfigForm.get("numbersToTemplate").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(8,8,t.ɵɵpipeBind1(7,6,"tb.rulenode.numbers-to-template-hint"),"html"),t.ɵɵsanitizeHtml),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.sendSmsConfigForm.get("smsMessageTemplate").hasError("required")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,11,"tb.rulenode.use-system-sms-settings")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!1===n.sendSmsConfigForm.get("useSystemSmsSettings").value))},dependencies:t.ɵɵgetComponentDepsFactory(jl),encapsulation:2})}}function Gl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.message-template-required")," "))}function Kl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.slack-api-token-required")," "))}function Ul(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",11)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.slack-api-token"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",12),t.ɵɵtemplate(4,Kl,3,3,"mat-error",4),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.slackConfigForm.get("botToken").hasError("required"))}}function Hl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-radio-button",13),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.slackChanelTypesTranslateMap.get(e))," ")}}e("SendSmsConfigComponent",jl);class zl extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.slackChanelTypes=Object.keys(F),this.slackChanelTypesTranslateMap=q}configForm(){return this.slackConfigForm}onConfigurationSet(e){this.slackConfigForm=this.fb.group({botToken:[e?e.botToken:null],useSystemSettings:[!!e&&e.useSystemSettings],messageTemplate:[e?e.messageTemplate:null,[N.required]],conversationType:[e?e.conversationType:null,[N.required]],conversation:[e?e.conversation:null,[N.required]]})}validatorTriggers(){return["useSystemSettings"]}updateValidators(e){this.slackConfigForm.get("useSystemSettings").value?this.slackConfigForm.get("botToken").clearValidators():this.slackConfigForm.get("botToken").setValidators([N.required]),this.slackConfigForm.get("botToken").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||zl)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:zl,selectors:[["tb-external-node-slack-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:18,vars:12,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block","flex-1"],["translate",""],["required","","matInput","","formControlName","messageTemplate"],[4,"ngIf"],["formControlName","useSystemSettings"],["class","mat-block",4,"ngIf"],[1,"tb-title"],["formControlName","conversationType"],[3,"value",4,"ngFor","ngForOf"],["formControlName","conversation","required","",3,"token","slackChanelType"],[1,"mat-block"],["required","","matInput","","formControlName","botToken"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.message-template"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,Gl,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-checkbox",5),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(11,Ul,5,1,"mat-form-field",6),t.ɵɵelementStart(12,"label",7),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"mat-radio-group",8),t.ɵɵtemplate(16,Hl,3,4,"mat-radio-button",9),t.ɵɵelementEnd(),t.ɵɵelement(17,"tb-slack-conversation-autocomplete",10),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.slackConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.slackConfigForm.get("messageTemplate").hasError("required")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(10,8,"tb.rulenode.use-system-slack-settings")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!n.slackConfigForm.get("useSystemSettings").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,10,"notification.slack-chanel-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.slackChanelTypes),t.ɵɵadvance(),t.ɵɵproperty("token",n.slackConfigForm.get("useSystemSettings").value?"":n.slackConfigForm.get("botToken").value)("slackChanelType",n.slackConfigForm.get("conversationType").value))},dependencies:t.ɵɵgetComponentDepsFactory(zl),styles:["[_nghost-%COMP%] .tb-title[_ngcontent-%COMP%]{display:block;padding-bottom:6px}[_nghost-%COMP%] .mat-mdc-radio-group{display:flex;flex-direction:row;margin-bottom:22px;gap:12px}[_nghost-%COMP%] .mat-mdc-radio-group .mat-mdc-radio-button{flex:1 1 100%;padding:4px;border:1px solid rgba(0,0,0,.12);border-radius:6px}@media screen and (max-width: 599px){[_nghost-%COMP%] .mat-mdc-radio-group{flex-direction:column}}"]})}}function $l(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.topic-arn-pattern-required")," "))}function Ql(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-access-key-id-required")," "))}function Jl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-secret-access-key-required")," "))}function Yl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-region-required")," "))}e("SlackConfigComponent",zl);class Wl extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.snsConfigForm}onConfigurationSet(e){this.snsConfigForm=this.fb.group({topicArnPattern:[e?e.topicArnPattern:null,[N.required]],accessKeyId:[e?e.accessKeyId:null,[N.required]],secretAccessKey:[e?e.secretAccessKey:null,[N.required]],region:[e?e.region:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||Wl)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Wl,selectors:[["tb-external-node-sns-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:23,vars:5,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","topicArnPattern"],[4,"ngIf"],[1,"mat-block"],["required","","matInput","","formControlName","accessKeyId"],["required","","matInput","","formControlName","secretAccessKey"],["required","","matInput","","formControlName","region"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.topic-arn-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,$l,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-form-field",5)(9,"mat-label",2),t.ɵɵtext(10,"tb.rulenode.aws-access-key-id"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",6),t.ɵɵtemplate(12,Ql,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",5)(14,"mat-label",2),t.ɵɵtext(15,"tb.rulenode.aws-secret-access-key"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",7),t.ɵɵtemplate(17,Jl,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"mat-form-field",5)(19,"mat-label",2),t.ɵɵtext(20,"tb.rulenode.aws-region"),t.ɵɵelementEnd(),t.ɵɵelement(21,"input",8),t.ɵɵtemplate(22,Yl,3,3,"mat-error",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.snsConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.snsConfigForm.get("topicArnPattern").hasError("required")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.snsConfigForm.get("accessKeyId").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.snsConfigForm.get("secretAccessKey").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.snsConfigForm.get("region").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(Wl),encapsulation:2})}}function Xl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",15),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.sqsQueueTypeTranslationsMap.get(e))," ")}}function Zl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.queue-url-pattern-required")," "))}function es(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-delay-seconds-message")," "))}function ts(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-delay-seconds-message")," "))}function ns(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",1)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.delay-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",16),t.ɵɵtemplate(4,es,3,3,"mat-error",7)(5,ts,3,3,"mat-error",7),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.sqsConfigForm.get("delaySeconds").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.sqsConfigForm.get("delaySeconds").hasError("max"))}}function rs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-access-key-id-required")," "))}function as(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-secret-access-key-required")," "))}function is(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-region-required")," "))}e("SnsConfigComponent",Wl);class os extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.sqsQueueType=Nt,this.sqsQueueTypes=Object.keys(Nt),this.sqsQueueTypeTranslationsMap=wt}configForm(){return this.sqsConfigForm}onConfigurationSet(e){this.sqsConfigForm=this.fb.group({queueType:[e?e.queueType:null,[N.required]],queueUrlPattern:[e?e.queueUrlPattern:null,[N.required]],delaySeconds:[e?e.delaySeconds:null,[N.min(0),N.max(900)]],messageAttributes:[e?e.messageAttributes:null,[]],accessKeyId:[e?e.accessKeyId:null,[N.required]],secretAccessKey:[e?e.secretAccessKey:null,[N.required]],region:[e?e.region:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||os)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:os,selectors:[["tb-external-node-sqs-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:35,vars:13,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block"],["translate",""],["formControlName","queueType","required",""],[3,"value",4,"ngFor","ngForOf"],["subscriptSizing","dynamic",1,"mat-block"],["required","","matInput","","formControlName","queueUrlPattern"],[4,"ngIf"],["class","mat-block",4,"ngIf"],["translate","",1,"tb-title"],[1,"tb-hint",3,"innerHTML"],["required","false","formControlName","messageAttributes","keyText","tb.rulenode.name","keyRequiredText","tb.rulenode.name-required","valText","tb.rulenode.value","valRequiredText","tb.rulenode.value-required"],["required","","matInput","","formControlName","accessKeyId"],["required","","matInput","","formControlName","secretAccessKey"],["required","","matInput","","formControlName","region"],[3,"value"],["required","","type","number","min","0","max","900","step","1","matInput","","formControlName","delaySeconds"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.queue-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-select",3),t.ɵɵtemplate(5,Xl,3,4,"mat-option",4),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"mat-form-field",5)(7,"mat-label",2),t.ɵɵtext(8,"tb.rulenode.queue-url-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",6),t.ɵɵtemplate(10,Zl,3,3,"mat-error",7),t.ɵɵelementStart(11,"mat-hint",2),t.ɵɵtext(12,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵtemplate(13,ns,6,2,"mat-form-field",8),t.ɵɵelementStart(14,"label",9),t.ɵɵtext(15,"tb.rulenode.message-attributes"),t.ɵɵelementEnd(),t.ɵɵelement(16,"div",10),t.ɵɵpipe(17,"translate"),t.ɵɵpipe(18,"safe"),t.ɵɵelement(19,"tb-kv-map-config-old",11),t.ɵɵelementStart(20,"mat-form-field",1)(21,"mat-label",2),t.ɵɵtext(22,"tb.rulenode.aws-access-key-id"),t.ɵɵelementEnd(),t.ɵɵelement(23,"input",12),t.ɵɵtemplate(24,rs,3,3,"mat-error",7),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-form-field",1)(26,"mat-label",2),t.ɵɵtext(27,"tb.rulenode.aws-secret-access-key"),t.ɵɵelementEnd(),t.ɵɵelement(28,"input",13),t.ɵɵtemplate(29,as,3,3,"mat-error",7),t.ɵɵelementEnd(),t.ɵɵelementStart(30,"mat-form-field",1)(31,"mat-label",2),t.ɵɵtext(32,"tb.rulenode.aws-region"),t.ɵɵelementEnd(),t.ɵɵelement(33,"input",14),t.ɵɵtemplate(34,is,3,3,"mat-error",7),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.sqsConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.sqsQueueTypes),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.sqsConfigForm.get("queueUrlPattern").hasError("required")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.sqsConfigForm.get("queueType").value===n.sqsQueueType.STANDARD),t.ɵɵadvance(3),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(18,10,t.ɵɵpipeBind1(17,8,"tb.rulenode.message-attributes-hint"),"html"),t.ɵɵsanitizeHtml),t.ɵɵadvance(8),t.ɵɵproperty("ngIf",n.sqsConfigForm.get("accessKeyId").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.sqsConfigForm.get("secretAccessKey").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.sqsConfigForm.get("region").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(os),encapsulation:2})}}function ls(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.function-name-required")," "))}function ss(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-access-key-id-required")," "))}function ps(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-secret-access-key-required")," "))}function ms(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-region-required")," "))}function ds(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.connection-timeout-required")," "))}function us(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.connection-timeout-min")," "))}function cs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.request-timeout-required")," "))}function fs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.request-timeout-min")," "))}e("SqsConfigComponent",os);class gs extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.lambdaConfigForm}onConfigurationSet(e){this.lambdaConfigForm=this.fb.group({functionName:[e?e.functionName:null,[N.required]],qualifier:[e?e.qualifier:null,[]],accessKey:[e?e.accessKey:null,[N.required]],secretKey:[e?e.secretKey:null,[N.required]],region:[e?e.region:null,[N.required]],connectionTimeout:[e?e.connectionTimeout:null,[N.required,N.min(0)]],requestTimeout:[e?e.requestTimeout:null,[N.required,N.min(0)]],tellFailureIfFuncThrowsExc:[!!e&&e.tellFailureIfFuncThrowsExc,[]]})}static{this.ɵfac=function(e){return new(e||gs)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:gs,selectors:[["tb-external-node-lambda-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:71,vars:28,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-padding","no-border"],["translate","",1,"tb-form-panel-title","tb-required"],["popupHelpLink","rulenode/node-templatization-doc",3,"hintText"],[1,"tb-standard-fields"],[1,"mat-block"],["required","","matInput","","formControlName","functionName"],[4,"ngIf"],["matInput","","formControlName","qualifier"],["translate",""],["expanded","",1,"tb-settings"],["required","","matInput","","formControlName","accessKey"],["required","","matInput","","formControlName","secretKey"],["required","","matInput","","formControlName","region"],[1,"tb-form-panel","stroked","no-padding"],[1,"tb-settings"],[2,"padding","16px"],[1,"tb-form-panel","no-border","no-padding","no-gap",2,"margin-top","0"],[1,"tb-form-row","no-border","same-padding","tb-standard-fields"],[1,"flex"],["type","number","required","","min","0","matInput","","formControlName","connectionTimeout"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],["type","number","required","","min","0","matInput","","formControlName","requestTimeout"],[1,"tb-form-row","no-border",2,"margin-bottom","16px",3,"tb-hint-tooltip-icon"],["formControlName","tellFailureIfFuncThrowsExc",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2)(3,"div",3),t.ɵɵtext(4,"tb.rulenode.function-configuration"),t.ɵɵelementEnd()(),t.ɵɵelement(5,"tb-example-hint",4),t.ɵɵelementStart(6,"div",5)(7,"mat-form-field",6)(8,"mat-label"),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",7),t.ɵɵtemplate(12,ls,3,3,"mat-error",8),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",6)(14,"mat-label"),t.ɵɵtext(15),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(17,"input",9),t.ɵɵelementStart(18,"mat-hint",10),t.ɵɵtext(19,"tb.rulenode.qualifier-hint"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(20,"div",1)(21,"mat-expansion-panel",11)(22,"mat-expansion-panel-header")(23,"mat-panel-title",3),t.ɵɵtext(24,"tb.rulenode.aws-credentials"),t.ɵɵelementEnd()(),t.ɵɵelementStart(25,"div",5)(26,"mat-form-field",6)(27,"mat-label",10),t.ɵɵtext(28,"tb.rulenode.aws-access-key-id"),t.ɵɵelementEnd(),t.ɵɵelement(29,"input",12),t.ɵɵtemplate(30,ss,3,3,"mat-error",8),t.ɵɵelementEnd(),t.ɵɵelementStart(31,"mat-form-field",6)(32,"mat-label",10),t.ɵɵtext(33,"tb.rulenode.aws-secret-access-key"),t.ɵɵelementEnd(),t.ɵɵelement(34,"input",13),t.ɵɵtemplate(35,ps,3,3,"mat-error",8),t.ɵɵelementEnd(),t.ɵɵelementStart(36,"mat-form-field",6)(37,"mat-label",10),t.ɵɵtext(38,"tb.rulenode.aws-region"),t.ɵɵelementEnd(),t.ɵɵelement(39,"input",14),t.ɵɵtemplate(40,ms,3,3,"mat-error",8),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(41,"div",15)(42,"mat-expansion-panel",16)(43,"mat-expansion-panel-header",17)(44,"mat-panel-title",10),t.ɵɵtext(45,"tb.rulenode.advanced-settings"),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"div",18)(47,"div",19)(48,"mat-form-field",20)(49,"mat-label",10),t.ɵɵtext(50,"tb.rulenode.connection-timeout"),t.ɵɵelementEnd(),t.ɵɵelement(51,"input",21),t.ɵɵtemplate(52,ds,3,3,"mat-error",8)(53,us,3,3,"mat-error",8),t.ɵɵelementStart(54,"mat-icon",22),t.ɵɵpipe(55,"translate"),t.ɵɵtext(56,"help"),t.ɵɵelementEnd()(),t.ɵɵelementStart(57,"mat-form-field",20)(58,"mat-label",10),t.ɵɵtext(59,"tb.rulenode.request-timeout"),t.ɵɵelementEnd(),t.ɵɵelement(60,"input",23),t.ɵɵtemplate(61,cs,3,3,"mat-error",8)(62,fs,3,3,"mat-error",8),t.ɵɵelementStart(63,"mat-icon",22),t.ɵɵpipe(64,"translate"),t.ɵɵtext(65,"help"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(66,"div",24),t.ɵɵpipe(67,"translate"),t.ɵɵelementStart(68,"mat-slide-toggle",25),t.ɵɵtext(69),t.ɵɵpipe(70,"translate"),t.ɵɵelementEnd()()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.lambdaConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("hintText","tb.rulenode.template-rules-hint"),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,16,"tb.rulenode.function-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("functionName").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(16,18,"tb.rulenode.qualifier")),t.ɵɵadvance(15),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("accessKey").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("secretKey").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("region").hasError("required")),t.ɵɵadvance(12),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("connectionTimeout").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("connectionTimeout").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(55,20,"tb.rulenode.connection-timeout-hint")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("requestTimeout").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("requestTimeout").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(64,22,"tb.rulenode.request-timeout-hint")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(67,24,"tb.rulenode.tell-failure-aws-lambda-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(70,26,"tb.rulenode.tell-failure-aws-lambda")," "))},dependencies:t.ɵɵgetComponentDepsFactory(gs),encapsulation:2})}}e("LambdaConfigComponent",gs);class hs{static{this.ɵfac=function(e){return new(e||hs)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:hs})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,Q,xi,Wl,os,gs,Zo,_o,Jo,Yo,ll,Sl,Ll,Ao,jl,zl]})}}e("RulenodeCoreConfigExternalModule",hs),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(hs,{declarations:[Wl,os,gs,Zo,_o,Jo,Yo,ll,Sl,Ll,Ao,jl,zl],imports:[$,S,Q,xi],exports:[Wl,os,gs,Zo,_o,Jo,Yo,ll,Sl,Ll,Ao,jl,zl]});class ys extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.searchText=""}configForm(){return this.alarmStatusConfigForm}prepareInputConfig(e){return{alarmStatusList:P(e?.alarmStatusList)?e.alarmStatusList:null}}onConfigurationSet(e){this.alarmStatusConfigForm=this.fb.group({alarmStatusList:[e.alarmStatusList,[N.required]]})}static{this.ɵfac=function(e){return new(e||ys)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ys,selectors:[["tb-filter-node-check-alarm-status-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:2,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],[1,"tb-form-row","no-padding","no-border","space-between"],["translate","",1,"tb-form-panel-title","tb-required"],["translate","",1,"tb-form-panel-hint","tb-error",3,"hidden"],["formControlName","alarmStatusList"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.alarm-status"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3),t.ɵɵtext(5," tb.rulenode.alarm-required "),t.ɵɵelementEnd()(),t.ɵɵelement(6,"tb-alarm-status-select",4),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.alarmStatusConfigForm),t.ɵɵadvance(4),t.ɵɵproperty("hidden",n.alarmStatusConfigForm.get("alarmStatusList").valid))},dependencies:t.ɵɵgetComponentDepsFactory(ys),encapsulation:2})}}e("CheckAlarmStatusComponent",ys);const bs=e=>({inputName:e});class vs extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.checkMessageConfigForm}prepareInputConfig(e){return{messageNames:P(e?.messageNames)?e.messageNames:[],metadataNames:P(e?.metadataNames)?e.metadataNames:[],checkAllKeys:!!P(e?.checkAllKeys)&&e.checkAllKeys}}prepareOutputConfig(e){return{messageNames:P(e?.messageNames)?e.messageNames:[],metadataNames:P(e?.metadataNames)?e.metadataNames:[],checkAllKeys:e.checkAllKeys}}atLeastOne(e,t=null){return n=>{t||(t=Object.keys(n.controls));return n?.controls&&t.some((t=>!e(n.controls[t])))?null:{atLeastOne:!0}}}onConfigurationSet(e){this.checkMessageConfigForm=this.fb.group({messageNames:[e.messageNames,[]],metadataNames:[e.metadataNames,[]],checkAllKeys:[e.checkAllKeys,[]]},{validators:this.atLeastOne(N.required,["messageNames","metadataNames"])})}get touchedValidationControl(){return["messageNames","metadataNames"].some((e=>this.checkMessageConfigForm.get(e).touched))}static{this.ɵfac=function(e){return new(e||vs)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:vs,selectors:[["tb-filter-node-check-message-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:25,vars:36,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],[1,"tb-form-row","no-padding","no-border","space-between"],["translate","",1,"tb-form-panel-title","tb-required"],["translate","",1,"tb-form-panel-hint","tb-error",3,"hidden"],["editable","","subscriptSizing","dynamic","formControlName","messageNames",3,"label","placeholder"],["matSuffix","","color","primary","aria-hidden","false","aria-label","help-icon",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],["editable","","subscriptSizing","dynamic","formControlName","metadataNames",3,"label","placeholder"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","checkAllKeys",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.fields-to-check"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3),t.ɵɵtext(5," tb.rulenode.at-least-one-field-required "),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"tb-string-items-list",4),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"mat-icon",5),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵtext(12,"help"),t.ɵɵelementEnd()(),t.ɵɵelementStart(13,"tb-string-items-list",6),t.ɵɵpipe(14,"translate"),t.ɵɵpipe(15,"translate"),t.ɵɵelementStart(16,"mat-icon",5),t.ɵɵpipe(17,"translate"),t.ɵɵpipe(18,"translate"),t.ɵɵtext(19,"help"),t.ɵɵelementEnd()(),t.ɵɵelementStart(20,"div",7),t.ɵɵpipe(21,"translate"),t.ɵɵelementStart(22,"mat-slide-toggle",8),t.ɵɵtext(23),t.ɵɵpipe(24,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.checkMessageConfigForm),t.ɵɵadvance(4),t.ɵɵproperty("hidden",!(n.touchedValidationControl&&n.checkMessageConfigForm.hasError("atLeastOne"))),t.ɵɵadvance(2),t.ɵɵproperty("label",t.ɵɵpipeBind1(7,10,"tb.rulenode.data-keys"))("placeholder",t.ɵɵpipeBind1(8,12,"tb.rulenode.add-message-field")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(11,16,"tb.rulenode.chip-help",t.ɵɵpureFunction1(32,bs,t.ɵɵpipeBind1(10,14,"tb.rulenode.field-name")))),t.ɵɵadvance(4),t.ɵɵproperty("label",t.ɵɵpipeBind1(14,19,"tb.rulenode.metadata-keys"))("placeholder",t.ɵɵpipeBind1(15,21,"tb.rulenode.add-metadata-field")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(18,25,"tb.rulenode.chip-help",t.ɵɵpureFunction1(34,bs,t.ɵɵpipeBind1(17,23,"tb.rulenode.field-name")))),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(21,28,"tb.rulenode.check-all-keys-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(24,30,"tb.rulenode.check-all-keys")," "))},dependencies:t.ɵɵgetComponentDepsFactory(vs),encapsulation:2})}}function xs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",10),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"span",11),t.ɵɵtext(4,"tb.rulenode.relations-query-config-direction-suffix"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.entitySearchDirectionTranslationsMap.get(e))," ")}}function Cs(e,n){if(1&e&&t.ɵɵelement(0,"tb-entity-autocomplete",15),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("entityType",e.checkRelationConfigForm.get("entityType").value)}}function Ss(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",12),t.ɵɵelement(1,"tb-entity-type-select",13),t.ɵɵtemplate(2,Cs,1,1,"tb-entity-autocomplete",14),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.checkRelationConfigForm.get("entityType").value)}}e("CheckMessageConfigComponent",vs);class Ts extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.entitySearchDirection=Object.values(d),this.entitySearchDirectionTranslationsMap=b}configForm(){return this.checkRelationConfigForm}prepareInputConfig(e){return{checkForSingleEntity:!!P(e?.checkForSingleEntity)&&e.checkForSingleEntity,direction:P(e?.direction)?e.direction:null,entityType:P(e?.entityType)?e.entityType:null,entityId:P(e?.entityId)?e.entityId:null,relationType:P(e?.relationType)?e.relationType:null}}onConfigurationSet(e){this.checkRelationConfigForm=this.fb.group({checkForSingleEntity:[e.checkForSingleEntity,[]],direction:[e.direction,[]],entityType:[e.entityType,e&&e.checkForSingleEntity?[N.required]:[]],entityId:[e.entityId,e&&e.checkForSingleEntity?[N.required]:[]],relationType:[e.relationType,[N.required]]})}validatorTriggers(){return["checkForSingleEntity"]}updateValidators(e){const t=this.checkRelationConfigForm.get("checkForSingleEntity").value;this.checkRelationConfigForm.get("entityType").setValidators(t?[N.required]:[]),this.checkRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:e}),this.checkRelationConfigForm.get("entityId").setValidators(t?[N.required]:[]),this.checkRelationConfigForm.get("entityId").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||Ts)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ts,selectors:[["tb-filter-node-check-relation-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:17,vars:12,consts:[[1,"tb-form-panel","stroked","no-padding-bottom",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-col"],["hideRequiredMarker","",1,"mat-block"],["formControlName","direction","required",""],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","relationType"],[1,"tb-form-row","no-border","no-padding","slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","checkForSingleEntity",1,"mat-slide"],["class","same-width-component-row",4,"ngIf"],[3,"value"],["translate",""],[1,"same-width-component-row"],["showLabel","","required","","formControlName","entityType",2,"min-width","100px","flex","1"],["class","flex-1","required","","formControlName","entityId",3,"entityType",4,"ngIf"],["required","","formControlName","entityId",1,"flex-1",3,"entityType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.relation-search-parameters"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2)(4,"mat-form-field",3)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",4),t.ɵɵtemplate(9,xs,5,4,"mat-option",5),t.ɵɵelementEnd()(),t.ɵɵelement(10,"tb-relation-type-autocomplete",6),t.ɵɵelementStart(11,"div",7),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"mat-slide-toggle",8),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(16,Ss,3,1,"div",9),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.checkRelationConfigForm),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,6,"relation.direction")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.entitySearchDirection),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(12,8,"tb.rulenode.check-relation-to-specific-entity-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,10,"tb.rulenode.check-relation-to-specific-entity")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.checkRelationConfigForm.get("checkForSingleEntity").value))},dependencies:t.ɵɵgetComponentDepsFactory(Ts),styles:["[_nghost-%COMP%] .slide-toggle[_ngcontent-%COMP%]{margin-bottom:18px}"]})}}e("CheckRelationConfigComponent",Ts);const Is=e=>({perimeterKeyName:e});function Es(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.latitude-field-name-required")," "))}function Fs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.longitude-field-name-required")," "))}function qs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",18),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.perimeterTypeTranslationMap.get(e))," ")}}function As(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.perimeter-key-name-required")," "))}function ks(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",19)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",20),t.ɵɵtemplate(5,As,3,3,"mat-error",6),t.ɵɵelementStart(6,"mat-hint"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"tb.rulenode.perimeter-key-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("perimeterKeyName").hasError("required")),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,5,"tb.rulenode.perimeter-key-name-hint"))}}function Ns(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.circle-center-latitude-required")," "))}function ws(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.circle-center-longitude-required")," "))}function Ms(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.range-required")," "))}function Bs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",18),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.rangeUnitTranslationMap.get(e))," ")}}function Vs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.range-units-required")," "))}function Os(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",9)(1,"div",3)(2,"mat-form-field",21)(3,"mat-label"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",22),t.ɵɵtemplate(7,Ns,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-form-field",21)(9,"mat-label"),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",23),t.ɵɵtemplate(13,ws,3,3,"mat-error",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"div",3)(15,"mat-form-field",21)(16,"mat-label"),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(19,"input",24),t.ɵɵtemplate(20,Ms,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",21)(22,"mat-label"),t.ɵɵtext(23),t.ɵɵpipe(24,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-select",25),t.ɵɵtemplate(26,Bs,3,4,"mat-option",12),t.ɵɵelementEnd(),t.ɵɵtemplate(27,Vs,3,3,"mat-error",6),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,9,"tb.rulenode.circle-center-latitude")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("centerLatitude").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(11,11,"tb.rulenode.circle-center-longitude")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("centerLongitude").hasError("required")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(18,13,"tb.rulenode.range")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("range").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(24,15,"tb.rulenode.range-units")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.rangeUnits),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("rangeUnit").hasError("required"))}}function Ds(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.polygon-definition-required")," "))}function Ls(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",26)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",27),t.ɵɵelementStart(5,"mat-hint"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(8,Ds,3,3,"mat-error",6),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"tb.rulenode.polygon-definition")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,5,"tb.rulenode.polygon-definition-hint")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("polygonsDefinition").hasError("required"))}}class Ps extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.perimeterType=ft,this.perimeterTypes=Object.values(ft),this.perimeterTypeTranslationMap=gt,this.rangeUnits=Object.values(bt),this.rangeUnitTranslationMap=vt,this.defaultPaddingEnable=!0}configForm(){return this.geoFilterConfigForm}prepareInputConfig(e){return{latitudeKeyName:P(e?.latitudeKeyName)?e.latitudeKeyName:null,longitudeKeyName:P(e?.longitudeKeyName)?e.longitudeKeyName:null,perimeterType:P(e?.perimeterType)?e.perimeterType:null,fetchPerimeterInfoFromMessageMetadata:!!P(e?.fetchPerimeterInfoFromMessageMetadata)&&e.fetchPerimeterInfoFromMessageMetadata,perimeterKeyName:P(e?.perimeterKeyName)?e.perimeterKeyName:null,centerLatitude:P(e?.centerLatitude)?e.centerLatitude:null,centerLongitude:P(e?.centerLongitude)?e.centerLongitude:null,range:P(e?.range)?e.range:null,rangeUnit:P(e?.rangeUnit)?e.rangeUnit:null,polygonsDefinition:P(e?.polygonsDefinition)?e.polygonsDefinition:null}}onConfigurationSet(e){this.geoFilterConfigForm=this.fb.group({latitudeKeyName:[e.latitudeKeyName,[N.required]],longitudeKeyName:[e.longitudeKeyName,[N.required]],perimeterType:[e.perimeterType,[N.required]],fetchPerimeterInfoFromMessageMetadata:[e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterKeyName:[e.perimeterKeyName,[]],centerLatitude:[e.centerLatitude,[]],centerLongitude:[e.centerLongitude,[]],range:[e.range,[]],rangeUnit:[e.rangeUnit,[]],polygonsDefinition:[e.polygonsDefinition,[]]})}validatorTriggers(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]}updateValidators(e){const t=this.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,n=this.geoFilterConfigForm.get("perimeterType").value;t?this.geoFilterConfigForm.get("perimeterKeyName").setValidators([N.required]):this.geoFilterConfigForm.get("perimeterKeyName").setValidators([]),t||n!==ft.CIRCLE?(this.geoFilterConfigForm.get("centerLatitude").setValidators([]),this.geoFilterConfigForm.get("centerLongitude").setValidators([]),this.geoFilterConfigForm.get("range").setValidators([]),this.geoFilterConfigForm.get("rangeUnit").setValidators([]),this.defaultPaddingEnable=!0):(this.geoFilterConfigForm.get("centerLatitude").setValidators([N.required,N.min(-90),N.max(90)]),this.geoFilterConfigForm.get("centerLongitude").setValidators([N.required,N.min(-180),N.max(180)]),this.geoFilterConfigForm.get("range").setValidators([N.required,N.min(0)]),this.geoFilterConfigForm.get("rangeUnit").setValidators([N.required]),this.defaultPaddingEnable=!1),t||n!==ft.POLYGON?this.geoFilterConfigForm.get("polygonsDefinition").setValidators([]):this.geoFilterConfigForm.get("polygonsDefinition").setValidators([N.required]),this.geoFilterConfigForm.get("perimeterKeyName").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||Ps)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ps,selectors:[["tb-filter-node-gps-geofencing-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:39,vars:32,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-row","gap-4"],[1,"mat-block","max-w-50%","flex-full"],["matInput","","formControlName","latitudeKeyName","required",""],[4,"ngIf"],["matInput","","formControlName","longitudeKeyName","required",""],["translate","",1,"tb-form-hint","tb-primary-fill"],[1,"flex","flex-col"],["hideRequiredMarker","",1,"mat-block","flex-1"],["formControlName","perimeterType"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-row","no-border","no-padding","slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","fetchPerimeterInfoFromMessageMetadata",1,"mat-slide"],["class","mat-block",4,"ngIf"],["class","flex flex-col",4,"ngIf"],["class","mat-block","subscriptSizing","dynamic",4,"ngIf"],[3,"value"],[1,"mat-block"],["matInput","","formControlName","perimeterKeyName","required",""],[1,"flex-1"],["type","number","min","-90","max","90","step","0.1","matInput","","formControlName","centerLatitude","required",""],["type","number","min","-180","max","180","step","0.1","matInput","","formControlName","centerLongitude","required",""],["type","number","min","0","step","0.1","matInput","","formControlName","range","required",""],["formControlName","rangeUnit","required",""],["subscriptSizing","dynamic",1,"mat-block"],["matInput","","formControlName","polygonsDefinition","required",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"section",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.coordinate-field-names"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"section")(5,"div",3)(6,"mat-form-field",4)(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",5),t.ɵɵtemplate(11,Es,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",4)(13,"mat-label"),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",7),t.ɵɵtemplate(17,Fs,3,3,"mat-error",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",8),t.ɵɵtext(19,"tb.rulenode.coordinate-field-hint"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(20,"section",1)(21,"div",2),t.ɵɵtext(22,"tb.rulenode.geofence-configuration"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"section",9)(24,"mat-form-field",10)(25,"mat-label"),t.ɵɵtext(26),t.ɵɵpipe(27,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(28,"mat-select",11),t.ɵɵtemplate(29,qs,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(30,"div",13),t.ɵɵpipe(31,"translate"),t.ɵɵpipe(32,"translate"),t.ɵɵelementStart(33,"mat-slide-toggle",14),t.ɵɵtext(34),t.ɵɵpipe(35,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(36,ks,9,7,"mat-form-field",15)(37,Os,28,17,"div",16)(38,Ls,9,7,"mat-form-field",17),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.geoFilterConfigForm),t.ɵɵadvance(8),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,14,"tb.rulenode.latitude-field-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.geoFilterConfigForm.get("latitudeKeyName").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,16,"tb.rulenode.longitude-field-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.geoFilterConfigForm.get("longitudeKeyName").hasError("required")),t.ɵɵadvance(3),t.ɵɵclassProp("no-padding-bottom",!n.defaultPaddingEnable),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(27,18,"tb.rulenode.perimeter-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.perimeterTypes),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",n.geoFilterConfigForm.get("perimeterType").value===n.perimeterType.CIRCLE?t.ɵɵpipeBind2(31,20,"tb.rulenode.fetch-circle-parameter-info-from-metadata-hint",t.ɵɵpureFunction1(28,Is,n.geoFilterConfigForm.get("perimeterKeyName").valid?n.geoFilterConfigForm.get("perimeterKeyName").value:"ss_perimeter")):t.ɵɵpipeBind2(32,23,"tb.rulenode.fetch-poligon-parameter-info-from-metadata-hint",t.ɵɵpureFunction1(30,Is,n.geoFilterConfigForm.get("perimeterKeyName").valid?n.geoFilterConfigForm.get("perimeterKeyName").value:"ss_perimeter"))),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(35,26,"tb.rulenode.fetch-perimeter-info-from-metadata")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.geoFilterConfigForm.get("perimeterType").value===n.perimeterType.CIRCLE&&!n.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.geoFilterConfigForm.get("perimeterType").value===n.perimeterType.POLYGON&&!n.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value))},dependencies:t.ɵɵgetComponentDepsFactory(Ps),styles:["[_nghost-%COMP%] .slide-toggle[_ngcontent-%COMP%]{margin-bottom:18px}"]})}}e("GpsGeoFilterConfigComponent",Ps);class Rs extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.messageTypeConfigForm}prepareInputConfig(e){return{messageTypes:P(e?.messageTypes)?e.messageTypes:null}}onConfigurationSet(e){this.messageTypeConfigForm=this.fb.group({messageTypes:[e.messageTypes,[N.required]]})}static{this.ɵfac=function(e){return new(e||Rs)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Rs,selectors:[["tb-filter-node-message-type-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:3,vars:4,consts:[[3,"formGroup"],["required","","formControlName","messageTypes",3,"label"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-message-types-config",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.messageTypeConfigForm),t.ɵɵadvance(),t.ɵɵproperty("label",t.ɵɵpipeBind1(2,2,"tb.rulenode.select-message-types")))},dependencies:t.ɵɵgetComponentDepsFactory(Rs),encapsulation:2})}}e("MessageTypeConfigComponent",Rs);const _s=e=>({inputName:e});class js extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.allowedEntityTypes=[u.DEVICE,u.ASSET,u.ENTITY_VIEW,u.TENANT,u.CUSTOMER,u.USER,u.DASHBOARD,u.RULE_CHAIN,u.RULE_NODE,u.EDGE]}configForm(){return this.originatorTypeConfigForm}prepareInputConfig(e){return{originatorTypes:P(e?.originatorTypes)?e.originatorTypes:null}}onConfigurationSet(e){this.originatorTypeConfigForm=this.fb.group({originatorTypes:[e.originatorTypes,[N.required]]})}static{this.ɵfac=function(e){return new(e||js)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:js,selectors:[["tb-filter-node-originator-type-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:9,vars:20,consts:[[3,"formGroup"],["formControlName","originatorTypes","required","",1,"flex-1",3,"allowedEntityTypes","ignoreAuthorityFilter","emptyInputPlaceholder","filledInputPlaceholder","label"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"tb-entity-type-list",1),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"translate"),t.ɵɵpipe(4,"translate"),t.ɵɵelementStart(5,"mat-icon",2),t.ɵɵpipe(6,"translate"),t.ɵɵpipe(7,"translate"),t.ɵɵtext(8,"help"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.originatorTypeConfigForm),t.ɵɵadvance(),t.ɵɵproperty("allowedEntityTypes",n.allowedEntityTypes)("ignoreAuthorityFilter",!0)("emptyInputPlaceholder",t.ɵɵpipeBind1(2,7,"tb.rulenode.add-entity-type"))("filledInputPlaceholder",t.ɵɵpipeBind1(3,9,"tb.rulenode.add-entity-type"))("label",t.ɵɵpipeBind1(4,11,"tb.rulenode.select-entity-types")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(7,15,"tb.rulenode.chip-help",t.ɵɵpureFunction1(18,_s,t.ɵɵpipeBind1(6,13,"tb.rulenode.entity-type")))))},dependencies:t.ɵɵgetComponentDepsFactory(js),encapsulation:2})}}e("OriginatorTypeConfigComponent",js);const Gs=["jsFuncComponent"],Ks=["tbelFuncComponent"],Us=()=>["msg","metadata","msgType"];function Hs(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",7)}function zs(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",8,0)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,Us)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function $s(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",11,1)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,Us))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}class Qs extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-filter-function"}configForm(){return this.scriptConfigForm}onConfigurationSet(e){this.scriptConfigForm=this.fb.group({scriptLang:[e.scriptLang,[N.required]],jsScript:[e.jsScript,[]],tbelScript:[e.tbelScript,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.scriptConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.scriptConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.scriptConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.scriptConfigForm.get("jsScript").setValidators(t===s.JS?[N.required]:[]),this.scriptConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.scriptConfigForm.get("tbelScript").setValidators(t===s.TBEL?[N.required]:[]),this.scriptConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),{scriptLang:P(e?.scriptLang)?e.scriptLang:s.JS,jsScript:P(e?.jsScript)?e.jsScript:null,tbelScript:P(e?.tbelScript)?e.tbelScript:null}}testScript(e){const t=this.scriptConfigForm.get("scriptLang").value,n=t===s.JS?"jsScript":"tbelScript",r=t===s.JS?"rulenode/filter_node_script_fn":"rulenode/tbel/filter_node_script_fn",a=this.scriptConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"filter",this.translate.instant("tb.rulenode.filter"),"Filter",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.scriptConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.scriptConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||Qs)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Qs,selectors:[["tb-filter-node-script-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(Gs,5),t.ɵɵviewQuery(Ks,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:7,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[3,"formGroup"],["formControlName","scriptLang",4,"ngIf"],["formControlName","jsScript","functionName","Filter","helpId","rulenode/filter_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","tbelScript","functionName","Filter","helpId","rulenode/tbel/filter_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","scriptLang"],["formControlName","jsScript","functionName","Filter","helpId","rulenode/filter_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","tbelScript","functionName","Filter","helpId","rulenode/tbel/filter_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2),t.ɵɵtemplate(1,Hs,1,0,"tb-script-lang",3)(2,zs,6,5,"tb-js-func",4)(3,$s,6,7,"tb-js-func",5),t.ɵɵelementStart(4,"button",6),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.scriptConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.scriptConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.scriptConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,5,n.testScriptLabel)," "))},dependencies:t.ɵɵgetComponentDepsFactory(Qs),encapsulation:2})}}e("ScriptConfigComponent",Qs);const Js=["jsFuncComponent"],Ys=["tbelFuncComponent"],Ws=()=>["msg","metadata","msgType"];function Xs(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",7)}function Zs(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",8,0)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,Ws)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function ep(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",11,1)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,Ws))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}class tp extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-switch-function"}configForm(){return this.switchConfigForm}onConfigurationSet(e){this.switchConfigForm=this.fb.group({scriptLang:[e.scriptLang,[N.required]],jsScript:[e.jsScript,[]],tbelScript:[e.tbelScript,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.switchConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.switchConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.switchConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.switchConfigForm.get("jsScript").setValidators(t===s.JS?[N.required]:[]),this.switchConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.switchConfigForm.get("tbelScript").setValidators(t===s.TBEL?[N.required]:[]),this.switchConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),{scriptLang:P(e?.scriptLang)?e.scriptLang:s.JS,jsScript:P(e?.jsScript)?e.jsScript:null,tbelScript:P(e?.tbelScript)?e.tbelScript:null}}testScript(e){const t=this.switchConfigForm.get("scriptLang").value,n=t===s.JS?"jsScript":"tbelScript",r=t===s.JS?"rulenode/switch_node_script_fn":"rulenode/tbel/switch_node_script_fn",a=this.switchConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"switch",this.translate.instant("tb.rulenode.switch"),"Switch",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.switchConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.switchConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||tp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:tp,selectors:[["tb-filter-node-switch-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(Js,5),t.ɵɵviewQuery(Ys,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:7,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[3,"formGroup"],["formControlName","scriptLang",4,"ngIf"],["formControlName","jsScript","functionName","Switch","helpId","rulenode/switch_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","tbelScript","functionName","Switch","helpId","rulenode/tbel/switch_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","scriptLang"],["formControlName","jsScript","functionName","Switch","helpId","rulenode/switch_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","tbelScript","functionName","Switch","helpId","rulenode/tbel/switch_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2),t.ɵɵtemplate(1,Xs,1,0,"tb-script-lang",3)(2,Zs,6,5,"tb-js-func",4)(3,ep,6,7,"tb-js-func",5),t.ɵɵelementStart(4,"button",6),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.switchConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.switchConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.switchConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,5,n.testScriptLabel)," "))},dependencies:t.ɵɵgetComponentDepsFactory(tp),encapsulation:2})}}e("SwitchConfigComponent",tp);class np{static{this.ɵfac=function(e){return new(e||np)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:np})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,xi,vs,Ts,Ps,Rs,js,Qs,tp,ys]})}}function rp(e,n){if(1&e&&(t.ɵɵelementStart(0,"span"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,e.originatorSourceTranslationMap.get(e.changeOriginatorConfigForm.get("originatorSource").value))," ")}}function ap(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",8)(1,"span",9),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"br"),t.ɵɵelementStart(5,"small",10),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,3,r.originatorSourceTranslationMap.get(e))," "),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,5,r.originatorSourceDescTranslationMap.get(e))," ")}}function ip(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.entity-name-pattern-required")," "))}function op(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",11),t.ɵɵelement(1,"tb-example-hint",12),t.ɵɵelementStart(2,"div",13),t.ɵɵelement(3,"tb-entity-type-select",14),t.ɵɵelementStart(4,"mat-form-field",15)(5,"mat-label",2),t.ɵɵtext(6,"tb.rulenode.entity-name-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(7,"input",16),t.ɵɵtemplate(8,ip,3,3,"mat-error",4),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("hintText","tb.rulenode.entity-name-pattern-hint"),t.ɵɵadvance(2),t.ɵɵproperty("allowedEntityTypes",e.allowedEntityTypes),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.changeOriginatorConfigForm.get("entityNamePattern").hasError("required")||e.changeOriginatorConfigForm.get("entityNamePattern").hasError("pattern"))}}function lp(e,n){1&e&&t.ɵɵelement(0,"tb-relations-query-config",17)}e("RuleNodeCoreConfigFilterModule",np),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(np,{declarations:[vs,Ts,Ps,Rs,js,Qs,tp,ys],imports:[$,S,xi],exports:[vs,Ts,Ps,Rs,js,Qs,tp,ys]});class sp extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.originatorSource=pt,this.originatorSources=Object.keys(pt),this.originatorSourceTranslationMap=mt,this.originatorSourceDescTranslationMap=dt,this.allowedEntityTypes=[u.DEVICE,u.ASSET,u.ENTITY_VIEW,u.USER,u.EDGE]}configForm(){return this.changeOriginatorConfigForm}onConfigurationSet(e){this.changeOriginatorConfigForm=this.fb.group({originatorSource:[e?e.originatorSource:null,[N.required]],entityType:[e?e.entityType:null,[]],entityNamePattern:[e?e.entityNamePattern:null,[]],relationsQuery:[e?e.relationsQuery:null,[]]})}validatorTriggers(){return["originatorSource"]}updateValidators(e){const t=this.changeOriginatorConfigForm.get("originatorSource").value;t===pt.RELATED?this.changeOriginatorConfigForm.get("relationsQuery").setValidators([N.required]):this.changeOriginatorConfigForm.get("relationsQuery").setValidators([]),t===pt.ENTITY?(this.changeOriginatorConfigForm.get("entityType").setValidators([N.required]),this.changeOriginatorConfigForm.get("entityNamePattern").setValidators([N.required,N.pattern(/.*\S.*/)])):(this.changeOriginatorConfigForm.get("entityType").patchValue(null,{emitEvent:e}),this.changeOriginatorConfigForm.get("entityNamePattern").patchValue(null,{emitEvent:e}),this.changeOriginatorConfigForm.get("entityType").setValidators([]),this.changeOriginatorConfigForm.get("entityNamePattern").setValidators([])),this.changeOriginatorConfigForm.get("relationsQuery").updateValueAndValidity({emitEvent:e}),this.changeOriginatorConfigForm.get("entityType").updateValueAndValidity({emitEvent:e}),this.changeOriginatorConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||sp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:sp,selectors:[["tb-transformation-node-change-originator-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:10,vars:5,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],["subscriptSizing","dynamic","hideRequiredMarker","",1,"mat-block"],["translate",""],["formControlName","originatorSource","required",""],[4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],["class","tb-form-panel stroked no-padding-bottom",4,"ngIf"],["required","","formControlName","relationsQuery",4,"ngIf"],[3,"value"],["matListItemTitle",""],["matListItemMeta","",2,"color","inherit"],[1,"tb-form-panel","stroked","no-padding-bottom"],["popupHelpLink","rulenode/change_originator_node_fields_templatization",3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],["showLabel","","required","","formControlName","entityType",1,"mat-mdc-form-field","flex",3,"allowedEntityTypes"],[1,"flex"],["required","","matInput","","formControlName","entityNamePattern"],["required","","formControlName","relationsQuery"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.new-originator"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-select",3)(5,"mat-select-trigger"),t.ɵɵtemplate(6,rp,3,3,"span",4),t.ɵɵelementEnd(),t.ɵɵtemplate(7,ap,8,7,"mat-option",5),t.ɵɵelementEnd()(),t.ɵɵtemplate(8,op,9,3,"div",6)(9,lp,1,0,"tb-relations-query-config",7),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.changeOriginatorConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.originatorSourceTranslationMap.get(n.changeOriginatorConfigForm.get("originatorSource").value)),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.originatorSources),t.ɵɵadvance(),t.ɵɵproperty("ngIf","ENTITY"===n.changeOriginatorConfigForm.get("originatorSource").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.changeOriginatorConfigForm.get("originatorSource").value===n.originatorSource.RELATED))},dependencies:t.ɵɵgetComponentDepsFactory(sp),encapsulation:2})}}e("ChangeOriginatorConfigComponent",sp);const pp=["jsFuncComponent"],mp=["tbelFuncComponent"],dp=()=>["msg","metadata","msgType"];function up(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",7)}function cp(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",8,0)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,dp)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function fp(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",11,1)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,dp))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}class gp extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-transformer-function"}configForm(){return this.scriptConfigForm}onConfigurationSet(e){this.scriptConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:s.JS,[N.required]],jsScript:[e?e.jsScript:null,[N.required]],tbelScript:[e?e.tbelScript:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.scriptConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.scriptConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.scriptConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.scriptConfigForm.get("jsScript").setValidators(t===s.JS?[N.required]:[]),this.scriptConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.scriptConfigForm.get("tbelScript").setValidators(t===s.TBEL?[N.required]:[]),this.scriptConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),e}testScript(e){const t=this.scriptConfigForm.get("scriptLang").value,n=t===s.JS?"jsScript":"tbelScript",r=t===s.JS?"rulenode/transformation_node_script_fn":"rulenode/tbel/transformation_node_script_fn",a=this.scriptConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"update",this.translate.instant("tb.rulenode.transformer"),"Transform",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.scriptConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.scriptConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||gp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:gp,selectors:[["tb-transformation-node-script-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(pp,5),t.ɵɵviewQuery(mp,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:8,vars:7,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[3,"formGroup"],["formControlName","scriptLang",4,"ngIf"],["formControlName","jsScript","functionName","Transform","helpId","rulenode/transformation_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","tbelScript","functionName","Transform","helpId","rulenode/tbel/transformation_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","scriptLang"],["formControlName","jsScript","functionName","Transform","helpId","rulenode/transformation_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","tbelScript","functionName","Transform","helpId","rulenode/tbel/transformation_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2),t.ɵɵtemplate(1,up,1,0,"tb-script-lang",3)(2,cp,6,5,"tb-js-func",4)(3,fp,6,7,"tb-js-func",5),t.ɵɵelementStart(4,"div")(5,"button",6),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.scriptConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.scriptConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.scriptConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,5,n.testScriptLabel)," "))},dependencies:t.ɵɵgetComponentDepsFactory(gp),encapsulation:2})}}e("TransformScriptConfigComponent",gp);const hp=()=>({maxWidth:"820px"});function yp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.from-template-required")," "))}function bp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.to-template-required")," "))}function vp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.subject-template-required")," "))}function xp(e,n){if(1&e&&(t.ɵɵelementStart(0,"span"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,e.getBodyTypeName())," ")}}function Cp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",24)(1,"span",25),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"br"),t.ɵɵelementStart(5,"small",26),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,3,e.name)," "),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,5,e.description)," ")}}function Sp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field",18)(1,"mat-label",5),t.ɵɵtext(2,"tb.rulenode.body-type-template"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",27),t.ɵɵelementStart(4,"mat-hint",5),t.ɵɵtext(5,"tb.mail-body-type.after-template-evaluation-hint"),t.ɵɵelementEnd()())}function Tp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.body-template-required")," "))}class Ip extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.mailBodyTypes=[{name:"tb.mail-body-type.plain-text",description:"tb.mail-body-type.plain-text-description",value:"false"},{name:"tb.mail-body-type.html",description:"tb.mail-body-type.html-text-description",value:"true"},{name:"tb.mail-body-type.use-body-type-template",description:"tb.mail-body-type.dynamic-text-description",value:"dynamic"}]}configForm(){return this.toEmailConfigForm}onConfigurationSet(e){this.toEmailConfigForm=this.fb.group({fromTemplate:[e?e.fromTemplate:null,[N.required]],toTemplate:[e?e.toTemplate:null,[N.required]],ccTemplate:[e?e.ccTemplate:null,[]],bccTemplate:[e?e.bccTemplate:null,[]],subjectTemplate:[e?e.subjectTemplate:null,[N.required]],mailBodyType:[e?e.mailBodyType:null],isHtmlTemplate:[e?e.isHtmlTemplate:null,[N.required]],bodyTemplate:[e?e.bodyTemplate:null,[N.required]]})}prepareInputConfig(e){return{fromTemplate:P(e?.fromTemplate)?e.fromTemplate:null,toTemplate:P(e?.toTemplate)?e.toTemplate:null,ccTemplate:P(e?.ccTemplate)?e.ccTemplate:null,bccTemplate:P(e?.bccTemplate)?e.bccTemplate:null,subjectTemplate:P(e?.subjectTemplate)?e.subjectTemplate:null,mailBodyType:P(e?.mailBodyType)?e.mailBodyType:null,isHtmlTemplate:P(e?.isHtmlTemplate)?e.isHtmlTemplate:null,bodyTemplate:P(e?.bodyTemplate)?e.bodyTemplate:null}}updateValidators(e){"dynamic"===this.toEmailConfigForm.get("mailBodyType").value?this.toEmailConfigForm.get("isHtmlTemplate").enable({emitEvent:!1}):this.toEmailConfigForm.get("isHtmlTemplate").disable({emitEvent:!1}),this.toEmailConfigForm.get("isHtmlTemplate").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["mailBodyType"]}getBodyTypeName(){return this.mailBodyTypes.find((e=>e.value===this.toEmailConfigForm.get("mailBodyType").value)).name}static{this.ɵfac=function(e){return new(e||Ip)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ip,selectors:[["tb-transformation-node-to-email-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:61,vars:23,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],["subscriptSizing","dynamic",1,"flex"],["translate",""],["required","","matInput","","formControlName","fromTemplate"],["align","start"],["align","end"],[1,"input-bottom-double-hint"],["hintMode","","tb-help-popup-placement","right","trigger-style","letter-spacing:0.25px; font-size:12px;",1,"see-example",3,"tb-help-popup","tb-help-popup-style","trigger-text"],[4,"ngIf"],[1,"tb-form-panel","no-padding","no-border"],["popupHelpLink","rulenode/to_email_node_fields_templatization",3,"hintText"],[1,"flex"],["required","","matInput","","formControlName","toTemplate","cdkTextareaAutosize","","cdkAutosizeMinRows","1",1,"tb-enable-vertical-resize"],["matInput","","formControlName","ccTemplate","cdkTextareaAutosize","","cdkAutosizeMinRows","1",1,"tb-enable-vertical-resize"],["matInput","","formControlName","bccTemplate","cdkTextareaAutosize","","cdkAutosizeMinRows","1",1,"tb-enable-vertical-resize"],[1,"mat-block"],["required","","matInput","","formControlName","subjectTemplate","cdkTextareaAutosize","","cdkAutosizeMinRows","1",1,"tb-enable-vertical-resize"],["formControlName","mailBodyType"],[3,"value",4,"ngFor","ngForOf"],["class","mat-block",4,"ngIf"],["required","","matInput","","formControlName","bodyTemplate","cdkTextareaAutosize","","cdkAutosizeMinRows","2",1,"tb-enable-vertical-resize"],[3,"value"],["matListItemTitle",""],["matListItemMeta","",2,"color","inherit"],["required","","matInput","","formControlName","isHtmlTemplate"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.email-sender"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3)(5,"mat-form-field",4)(6,"mat-label",5),t.ɵɵtext(7,"tb.rulenode.from-template"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",6),t.ɵɵelementStart(9,"mat-hint",7),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-hint",8)(13,"div",9),t.ɵɵelement(14,"div",10),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(16,yp,3,3,"mat-error",11),t.ɵɵelementEnd()()(),t.ɵɵelementStart(17,"div",1)(18,"div",12)(19,"div",2),t.ɵɵtext(20,"tb.rulenode.recipients"),t.ɵɵelementEnd(),t.ɵɵelement(21,"tb-example-hint",13),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"div",3)(24,"mat-form-field",14)(25,"mat-label",5),t.ɵɵtext(26,"tb.rulenode.to-template"),t.ɵɵelementEnd(),t.ɵɵelement(27,"textarea",15),t.ɵɵtemplate(28,bp,3,3,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-form-field",14)(30,"mat-label",5),t.ɵɵtext(31,"tb.rulenode.cc-template"),t.ɵɵelementEnd(),t.ɵɵelement(32,"textarea",16),t.ɵɵelementEnd(),t.ɵɵelementStart(33,"mat-form-field",14)(34,"mat-label",5),t.ɵɵtext(35,"tb.rulenode.bcc-template"),t.ɵɵelementEnd(),t.ɵɵelement(36,"textarea",17),t.ɵɵelementEnd()()(),t.ɵɵelementStart(37,"div",1)(38,"div",2),t.ɵɵtext(39,"tb.rulenode.message-subject-and-content"),t.ɵɵelementEnd(),t.ɵɵelement(40,"tb-example-hint",13),t.ɵɵpipe(41,"translate"),t.ɵɵelementStart(42,"section")(43,"mat-form-field",18)(44,"mat-label",5),t.ɵɵtext(45,"tb.rulenode.subject-template"),t.ɵɵelementEnd(),t.ɵɵelement(46,"textarea",19),t.ɵɵtemplate(47,vp,3,3,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(48,"mat-form-field",18)(49,"mat-label",5),t.ɵɵtext(50,"tb.rulenode.mail-body-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(51,"mat-select",20)(52,"mat-select-trigger"),t.ɵɵtemplate(53,xp,3,3,"span",11),t.ɵɵelementEnd(),t.ɵɵtemplate(54,Cp,8,7,"mat-option",21),t.ɵɵelementEnd()(),t.ɵɵtemplate(55,Sp,6,0,"mat-form-field",22),t.ɵɵelementStart(56,"mat-form-field",18)(57,"mat-label",5),t.ɵɵtext(58,"tb.rulenode.body-template"),t.ɵɵelementEnd(),t.ɵɵelement(59,"textarea",23),t.ɵɵtemplate(60,Tp,3,3,"mat-error",11),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.toEmailConfigForm),t.ɵɵadvance(10),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(11,14,"tb.rulenode.email-from-template-hint")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-help-popup","rulenode/to_email_node_fields_templatization"),t.ɵɵpropertyInterpolate("trigger-text",t.ɵɵpipeBind1(15,16,"tb.key-val.see-examples")),t.ɵɵproperty("tb-help-popup-style",t.ɵɵpureFunction0(22,hp)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.toEmailConfigForm.get("fromTemplate").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("hintText",t.ɵɵpipeBind1(22,18,"tb.rulenode.recipients-block-main-hint")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.toEmailConfigForm.get("toTemplate").hasError("required")),t.ɵɵadvance(12),t.ɵɵproperty("hintText",t.ɵɵpipeBind1(41,20,"tb.rulenode.kv-map-pattern-hint")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.toEmailConfigForm.get("subjectTemplate").hasError("required")),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.toEmailConfigForm.get("mailBodyType").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.mailBodyTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf","dynamic"===n.toEmailConfigForm.get("mailBodyType").value),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.toEmailConfigForm.get("bodyTemplate").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(Ip),styles:["[_nghost-%COMP%] .input-bottom-double-hint[_ngcontent-%COMP%]{display:inline-flex}[_nghost-%COMP%] .input-bottom-double-hint[_ngcontent-%COMP%] .see-example[_ngcontent-%COMP%]{flex-shrink:0;padding-right:16px}[_nghost-%COMP%] textarea.tb-enable-vertical-resize[_ngcontent-%COMP%]{resize:vertical}"]})}}e("ToEmailConfigComponent",Ip);class Ep extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.copyFrom=[],this.translation=Ut;for(const e of this.translation.keys())this.copyFrom.push({value:e,name:this.translate.instant(this.translation.get(e))})}onConfigurationSet(e){this.copyKeysConfigForm=this.fb.group({copyFrom:[e.copyFrom,[N.required]],keys:[e?e.keys:null,[N.required]]})}configForm(){return this.copyKeysConfigForm}prepareInputConfig(e){let t;return t=P(e?.fromMetadata)?e.copyFrom?Kt.METADATA:Kt.DATA:P(e?.copyFrom)?e.copyFrom:Kt.DATA,{keys:P(e?.keys)?e.keys:null,copyFrom:t}}static{this.ɵfac=function(e){return new(e||Ep)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ep,selectors:[["tb-transformation-node-copy-keys-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:10,vars:17,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],["formControlName","copyFrom",3,"labelText","translation"],["required","","formControlName","keys",1,"mat-block",3,"label","placeholder","requiredText"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-msg-metadata-chip",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"tb-string-items-list",2),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵpipe(6,"translate"),t.ɵɵelementStart(7,"mat-icon",3),t.ɵɵpipe(8,"translate"),t.ɵɵtext(9," help "),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.copyKeysConfigForm),t.ɵɵadvance(),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(2,7,"tb.key-val.copy-key-values-from"))("translation",n.translation),t.ɵɵadvance(2),t.ɵɵproperty("label",t.ɵɵpipeBind1(4,9,"tb.rulenode.keys"))("placeholder",t.ɵɵpipeBind1(5,11,"tb.rulenode.add-key"))("requiredText",t.ɵɵpipeBind1(6,13,"tb.key-val.at-least-one-key-error")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,15,"tb.rulenode.use-regular-expression-hint")))},dependencies:t.ɵɵgetComponentDepsFactory(Ep),encapsulation:2})}}function Fp(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",7),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}e("CopyKeysConfigComponent",Ep);class qp extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.renameIn=[],this.translation=zt;for(const e of this.translation.keys())this.renameIn.push({value:e,name:this.translate.instant(this.translation.get(e))})}configForm(){return this.renameKeysConfigForm}onConfigurationSet(e){this.renameKeysConfigForm=this.fb.group({renameIn:[e?e.renameIn:null,[N.required]],renameKeysMapping:[e?e.renameKeysMapping:null,[N.required]]})}prepareInputConfig(e){let t;return t=P(e?.fromMetadata)?e.fromMetadata?Kt.METADATA:Kt.DATA:P(e?.renameIn)?e?.renameIn:Kt.DATA,{renameKeysMapping:P(e?.renameKeysMapping)?e.renameKeysMapping:null,renameIn:t}}static{this.ɵfac=function(e){return new(e||qp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:qp,selectors:[["tb-transformation-node-rename-keys-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:15,vars:24,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[1,"fx-centered"],[1,"fetch-to-data-toggle"],["formControlName","renameIn","appearance","fill",1,"fetch-to-data-toggle"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","renameKeysMapping","uniqueKeyValuePairValidator","",3,"labelText","requiredText","keyText","keyRequiredText","valText","valRequiredText"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.rename-keys-in"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2)(4,"div",3)(5,"tb-toggle-select",4),t.ɵɵtemplate(6,Fp,2,2,"tb-toggle-option",5),t.ɵɵelementEnd()()(),t.ɵɵelement(7,"tb-kv-map-config",6),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"translate"),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.renameKeysConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.renameIn),t.ɵɵadvance(),t.ɵɵpropertyInterpolate2("labelText","",t.ɵɵpipeBind1(8,10,n.translation.get(n.renameKeysConfigForm.get("renameIn").value))," ",t.ɵɵpipeBind1(9,12,"tb.rulenode.keys-mapping"),""),t.ɵɵpropertyInterpolate("requiredText",t.ɵɵpipeBind1(10,14,"tb.rulenode.attr-mapping-required")),t.ɵɵpropertyInterpolate("keyText",t.ɵɵpipeBind1(11,16,"tb.rulenode.current-key-name")),t.ɵɵpropertyInterpolate("keyRequiredText",t.ɵɵpipeBind1(12,18,"tb.rulenode.key-name-required")),t.ɵɵpropertyInterpolate("valText",t.ɵɵpipeBind1(13,20,"tb.rulenode.new-key-name")),t.ɵɵpropertyInterpolate("valRequiredText",t.ɵɵpipeBind1(14,22,"tb.rulenode.new-key-name-required")))},dependencies:t.ɵɵgetComponentDepsFactory(qp),styles:["[_nghost-%COMP%] .fetch-to-data-toggle[_ngcontent-%COMP%]{max-width:420px;width:100%}[_nghost-%COMP%] .fx-centered[_ngcontent-%COMP%]{display:flex;width:100%;justify-content:space-around}"]})}}function Ap(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,1,"tb.rulenode.json-path-expression-required")))}e("RenameKeysConfigComponent",qp);class kp extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.jsonPathConfigForm}onConfigurationSet(e){this.jsonPathConfigForm=this.fb.group({jsonPath:[e?e.jsonPath:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||kp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:kp,selectors:[["tb-transformation-node-json-path-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:10,vars:8,consts:[[3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["matInput","","formControlName","jsonPath","required",""],[4,"ngIf"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",2),t.ɵɵelementStart(6,"mat-hint"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(9,Ap,3,3,"mat-error",3),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.jsonPathConfigForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,4,"tb.rulenode.json-path-expression")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,6,"tb.rulenode.json-path-expression-hint")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.jsonPathConfigForm.get("jsonPath").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(kp),encapsulation:2})}}e("NodeJsonPathConfigComponent",kp);class Np extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.deleteFrom=[],this.translation=Ht;for(const e of this.translation.keys())this.deleteFrom.push({value:e,name:this.translate.instant(this.translation.get(e))})}onConfigurationSet(e){this.deleteKeysConfigForm=this.fb.group({deleteFrom:[e.deleteFrom,[N.required]],keys:[e?e.keys:null,[N.required]]})}prepareInputConfig(e){let t;return t=P(e?.fromMetadata)?e.fromMetadata?Kt.METADATA:Kt.DATA:P(e?.deleteFrom)?e?.deleteFrom:Kt.DATA,{keys:P(e?.keys)?e.keys:null,deleteFrom:t}}configForm(){return this.deleteKeysConfigForm}static{this.ɵfac=function(e){return new(e||Np)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Np,selectors:[["tb-transformation-node-delete-keys-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:10,vars:16,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],["formControlName","deleteFrom",3,"labelText"],["required","","formControlName","keys",1,"mat-block",3,"label","placeholder","requiredText"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-msg-metadata-chip",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"tb-string-items-list",2),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵpipe(6,"translate"),t.ɵɵelementStart(7,"mat-icon",3),t.ɵɵpipe(8,"translate"),t.ɵɵtext(9," help "),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.deleteKeysConfigForm),t.ɵɵadvance(),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(2,6,"tb.key-val.delete-key-values-from")),t.ɵɵadvance(2),t.ɵɵproperty("label",t.ɵɵpipeBind1(4,8,"tb.rulenode.keys"))("placeholder",t.ɵɵpipeBind1(5,10,"tb.rulenode.add-key"))("requiredText",t.ɵɵpipeBind1(6,12,"tb.key-val.at-least-one-key-error")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,14,"tb.rulenode.use-regular-expression-delete-hint")))},dependencies:t.ɵɵgetComponentDepsFactory(Np),encapsulation:2})}}function wp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.interval-required")," "))}function Mp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.interval-min-error")," "))}function Bp(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",18),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.deduplicationStrategiesTranslations.get(e))," ")}}function Vp(e,n){1&e&&(t.ɵɵelement(0,"tb-example-hint",19),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵproperty("hintText",t.ɵɵpipeBind1(1,1,"tb.rulenode.strategy-all-hint"))}function Op(e,n){1&e&&(t.ɵɵelement(0,"tb-example-hint",20),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵproperty("hintText",t.ɵɵpipeBind1(1,1,"tb.rulenode.strategy-first-hint"))}function Dp(e,n){1&e&&(t.ɵɵelement(0,"tb-example-hint",20),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵproperty("hintText",t.ɵɵpipeBind1(1,1,"tb.rulenode.strategy-last-hint"))}function Lp(e,n){1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵelement(1,"tb-output-message-type-autocomplete",21),t.ɵɵelementEnd())}function Pp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-msgs-required")," "))}function Rp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-msgs-max-error")," "))}function _p(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-msgs-min-error")," "))}function jp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-retries-required")," "))}function Gp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-retries-max-error")," "))}function Kp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-retries-min-error")," "))}e("DeleteKeysConfigComponent",Np);class Up extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.deduplicationStrategie=St,this.deduplicationStrategies=Object.keys(this.deduplicationStrategie),this.deduplicationStrategiesTranslations=Tt}configForm(){return this.deduplicationConfigForm}onConfigurationSet(e){this.deduplicationConfigForm=this.fb.group({interval:[P(e?.interval)?e.interval:null,[N.required,N.min(1)]],strategy:[P(e?.strategy)?e.strategy:null,[N.required]],outMsgType:[P(e?.outMsgType)?e.outMsgType:null,[N.required]],maxPendingMsgs:[P(e?.maxPendingMsgs)?e.maxPendingMsgs:null,[N.required,N.min(1),N.max(1e3)]],maxRetries:[P(e?.maxRetries)?e.maxRetries:null,[N.required,N.min(0),N.max(100)]]})}prepareInputConfig(e){return e||(e={}),e.outMsgType||(e.outMsgType="POST_TELEMETRY_REQUEST"),super.prepareInputConfig(e)}updateValidators(e){this.deduplicationConfigForm.get("strategy").value===this.deduplicationStrategie.ALL?this.deduplicationConfigForm.get("outMsgType").enable({emitEvent:!1}):this.deduplicationConfigForm.get("outMsgType").disable({emitEvent:!1}),this.deduplicationConfigForm.get("outMsgType").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["strategy"]}static{this.ɵfac=function(e){return new(e||Up)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Up,selectors:[["tb-action-node-msg-deduplication-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:49,vars:32,consts:[[3,"formGroup"],[1,"mat-block"],["type","number","required","","matInput","","formControlName","interval"],[4,"ngIf"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[1,"tb-form-panel","no-padding","no-border"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title","tb-required"],["formControlName","strategy","appearance","fill",1,"fetch-to-data-toggle"],[3,"value",4,"ngFor","ngForOf"],[3,"hintText",4,"ngIf"],["textAlign","'center'",3,"hintText",4,"ngIf"],[1,"tb-settings"],["translate",""],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],[1,"flex"],["type","number","required","","matInput","","formControlName","maxPendingMsgs"],["type","number","required","","matInput","","formControlName","maxRetries"],[3,"value"],[3,"hintText"],["textAlign","'center'",3,"hintText"],["required","","formControlName","outMsgType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",2),t.ɵɵtemplate(6,wp,3,3,"mat-error",3)(7,Mp,3,3,"mat-error",3),t.ɵɵelementStart(8,"mat-icon",4),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10,"help"),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"div",5)(12,"div",6)(13,"div",7),t.ɵɵtext(14,"tb.rulenode.strategy"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"tb-toggle-select",8),t.ɵɵtemplate(16,Bp,3,4,"tb-toggle-option",9),t.ɵɵelementEnd(),t.ɵɵtemplate(17,Vp,2,3,"tb-example-hint",10)(18,Op,2,3,"tb-example-hint",11)(19,Dp,2,3,"tb-example-hint",11)(20,Lp,2,0,"div",3),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"section",6)(22,"mat-expansion-panel",12)(23,"mat-expansion-panel-header")(24,"mat-panel-title",13),t.ɵɵtext(25,"tb.rulenode.advanced-settings"),t.ɵɵelementEnd()(),t.ɵɵelementStart(26,"div",14)(27,"mat-form-field",15)(28,"mat-label"),t.ɵɵtext(29),t.ɵɵpipe(30,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(31,"input",16),t.ɵɵtemplate(32,Pp,3,3,"mat-error",3)(33,Rp,3,3,"mat-error",3)(34,_p,3,3,"mat-error",3),t.ɵɵelementStart(35,"mat-icon",4),t.ɵɵpipe(36,"translate"),t.ɵɵtext(37,"help"),t.ɵɵelementEnd()(),t.ɵɵelementStart(38,"mat-form-field",15)(39,"mat-label"),t.ɵɵtext(40),t.ɵɵpipe(41,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(42,"input",17),t.ɵɵtemplate(43,jp,3,3,"mat-error",3)(44,Gp,3,3,"mat-error",3)(45,Kp,3,3,"mat-error",3),t.ɵɵelementStart(46,"mat-icon",4),t.ɵɵpipe(47,"translate"),t.ɵɵtext(48,"help"),t.ɵɵelementEnd()()()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.deduplicationConfigForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,20,"tb.rulenode.interval")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("interval").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("interval").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(9,22,"tb.rulenode.interval-hint")),t.ɵɵadvance(8),t.ɵɵproperty("ngForOf",n.deduplicationStrategies),t.ɵɵadvance(),t.ɵɵproperty("ngIf","ALL"===n.deduplicationConfigForm.get("strategy").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf","FIRST"===n.deduplicationConfigForm.get("strategy").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf","LAST"===n.deduplicationConfigForm.get("strategy").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("strategy").value===n.deduplicationStrategie.ALL),t.ɵɵadvance(9),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(30,24,"tb.rulenode.max-pending-msgs")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxPendingMsgs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxPendingMsgs").hasError("max")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxPendingMsgs").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(36,26,"tb.rulenode.max-pending-msgs-hint")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(41,28,"tb.rulenode.max-retries")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxRetries").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxRetries").hasError("max")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxRetries").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(47,30,"tb.rulenode.max-retries-hint")))},dependencies:t.ɵɵgetComponentDepsFactory(Up),encapsulation:2})}}e("DeduplicationConfigComponent",Up);class Hp{static{this.ɵfac=function(e){return new(e||Hp)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:Hp})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,xi,sp,gp,Ip,Ep,qp,kp,Np,Up]})}}e("RulenodeCoreConfigTransformModule",Hp),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(Hp,{declarations:[sp,gp,Ip,Ep,qp,kp,Np,Up],imports:[$,S,xi],exports:[sp,gp,Ip,Ep,qp,kp,Np,Up]});const zp=e=>[e];class $p extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.entityType=u}configForm(){return this.ruleChainInputConfigForm}onConfigurationSet(e){this.ruleChainInputConfigForm=this.fb.group({forwardMsgToDefaultRuleChain:[!!e&&e?.forwardMsgToDefaultRuleChain,[]],ruleChainId:[e?e.ruleChainId:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||$p)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:$p,selectors:[["tb-flow-node-rule-chain-input-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:8,vars:12,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"tb-form-panel","no-padding","no-border"],[1,"tb-form-row","no-border",3,"tb-hint-tooltip-icon"],["formControlName","forwardMsgToDefaultRuleChain",1,"mat-slide"],["required","","formControlName","ruleChainId",3,"excludeEntityIds","entityType","entitySubtype"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵpipe(3,"translate"),t.ɵɵelementStart(4,"mat-slide-toggle",3),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()(),t.ɵɵelement(7,"tb-entity-autocomplete",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.ruleChainInputConfigForm),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,6,"tb.rulenode.forward-msg-default-rule-chain-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,8,"tb.rulenode.forward-msg-default-rule-chain")," "),t.ɵɵadvance(2),t.ɵɵproperty("excludeEntityIds",t.ɵɵpureFunction1(10,zp,n.ruleChainId))("entityType",n.entityType.RULE_CHAIN)("entitySubtype",n.ruleChainType))},dependencies:t.ɵɵgetComponentDepsFactory($p),encapsulation:2})}}e("RuleChainInputComponent",$p);class Qp extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.ruleChainOutputConfigForm}onConfigurationSet(e){this.ruleChainOutputConfigForm=this.fb.group({})}static{this.ɵfac=function(e){return new(e||Qp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Qp,selectors:[["tb-flow-node-rule-chain-output-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:3,vars:4,consts:[[1,"flex","flex-col",3,"formGroup"],[3,"innerHTML"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"div",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.ruleChainOutputConfigForm),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("innerHTML",t.ɵɵpipeBind1(2,2,"tb.rulenode.output-node-name-hint"),t.ɵɵsanitizeHtml))},dependencies:t.ɵɵgetComponentDepsFactory(Qp),encapsulation:2})}}e("RuleChainOutputComponent",Qp);class Jp{static{this.ɵfac=function(e){return new(e||Jp)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:Jp})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,xi,$p,Qp]})}}e("RuleNodeCoreConfigFlowModule",Jp),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(Jp,{declarations:[$p,Qp],imports:[$,S,xi],exports:[$p,Qp]});class Yp{constructor(){}static{this.ɵfac=function(e){return new(e||Yp)}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Yp,selectors:[["tb-lib-styles-entry"]],standalone:!0,features:[t.ɵɵStandaloneFeature],decls:0,vars:0,template:function(e,t){},styles:['.tb-default tb-rule-node-config .margin-8{margin:8px}.tb-default tb-rule-node-config .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}.tb-default tb-rule-node-config .tb-required:after{content:"*";font-size:16px;color:#000000de}.tb-default tb-rule-node-config .help-icon{color:#000;opacity:.38;padding:unset}.tb-default tb-rule-node-config .help-icon:hover{color:#305680;opacity:unset}.tb-default tb-rule-node-config .same-width-component-row{display:flex;flex-wrap:nowrap;gap:16px}@media screen and (max-width: 599px){.tb-default tb-rule-node-config .same-width-component-row{gap:8px}}.tb-default tb-rule-node-config .same-width-component-row>*{flex:1}.tb-default .gap-0{gap:0px}.tb-default .gap-5\\.5{gap:1.375rem}@media (max-width: 599px){.tb-default .xs\\:max-h-full{max-height:100%}}@media (min-width: 960px) and (max-width: 1279px){.tb-default .md\\:max-h-full{max-height:100%}}@media (max-width: 959px){.tb-default .lt-md\\:gap-4{gap:1rem}}@media (min-width: 960px){.tb-default .gt-sm\\:max-w-10{max-width:2.5rem}.tb-default .gt-sm\\:max-w-10\\%{max-width:10%}.tb-default .gt-sm\\:gap-4{gap:1rem}.tb-default .gt-sm\\:gap-5\\.5{gap:1.375rem}}\n'],encapsulation:2})}}const Wp=(e,t)=>{const n=e[a];if(n.styles?.length){const e=n.styles[0];let r=document.getElementById(t);if(!r){r=document.createElement("style"),r.id=t;(document.head||document.getElementsByTagName("head")[0]).appendChild(r)}r.innerHTML=e}};class Xp{constructor(e){!function(e){e.setTranslation("en_US",{tb:{rulenode:{id:"Id","additional-info":"Additional Info","advanced-settings":"Advanced settings","create-entity-if-not-exists":"Create new entity if it doesn't exist","create-entity-if-not-exists-hint":"If enabled, a new entity with specified parameters will be created unless it already exists. Existing entities will be used as is for relation.","select-device-connectivity-event":"Select device connectivity event","entity-name-pattern":"Name pattern","device-name-pattern":"Device name","asset-name-pattern":"Asset name","entity-view-name-pattern":"Entity view name","customer-title-pattern":"Customer title","dashboard-name-pattern":"Dashboard title","user-name-pattern":"User email","edge-name-pattern":"Edge name","entity-name-pattern-required":"Name pattern is required","entity-name-pattern-hint":"Name pattern field support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","copy-message-type":"Copy message type","entity-type-pattern":"Type pattern","entity-type-pattern-required":"Type pattern is required","message-type-value":"Message type value","message-type-value-required":"Message type value is required","message-type-value-max-length":"Message type value should be less than 256","output-message-type":"Output message type","entity-cache-expiration":"Entities cache expiration time (sec)","entity-cache-expiration-hint":"Specifies maximum time interval allowed to store found entity records. 0 value means that records will never expire.","entity-cache-expiration-required":"Entities cache expiration time is required.","entity-cache-expiration-range":"Entities cache expiration time should be greater than or equal to 0.","customer-name-pattern":"Customer title","customer-name-pattern-required":"Customer title is required","customer-name-pattern-hint":"Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","create-customer-if-not-exists":"Create new customer if it doesn't exist","unassign-from-customer":"Unassign from specific customer if originator is dashboard","unassign-from-customer-tooltip":"Only dashboards can be assigned to multiple customers at once. \nIf the message originator is a dashboard, you need to explicitly specify the customer's title to unassign from.","customer-cache-expiration":"Customers cache expiration time (sec)","customer-cache-expiration-hint":"Specifies maximum time interval allowed to store found customer records. 0 value means that records will never expire.","customer-cache-expiration-required":"Customers cache expiration time is required.","customer-cache-expiration-range":"Customers cache expiration time should be greater than or equal to 0.","interval-start":"Interval start","interval-end":"Interval end","time-unit":"Time unit","fetch-mode":"Fetch mode","order-by-timestamp":"Order by timestamp",limit:"Limit","limit-hint":"Min limit value is 2, max - 1000. If you want to fetch a single entry, select fetch mode 'First' or 'Last'.","limit-required":"Limit is required.","limit-range":"Limit should be in a range from 2 to 1000.","time-unit-milliseconds":"Milliseconds","time-unit-seconds":"Seconds","time-unit-minutes":"Minutes","time-unit-hours":"Hours","time-unit-days":"Days","time-value-range":"Allowing range from 1 to 2147483647.","start-interval-value-required":"Interval start is required.","end-interval-value-required":"Interval end is required.",filter:"Filter",switch:"Switch","math-templatization-tooltip":"This field support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","add-message-type":"Add message type","select-message-types-required":"At least one message type should be selected.","select-message-types":"Select message types","no-message-types-found":"No message types found","no-message-type-matching":"'{{messageType}}' not found.","create-new-message-type":"Create a new one.","message-types-required":"Message types are required.","client-attributes":"Client attributes","shared-attributes":"Shared attributes","server-attributes":"Server attributes","attributes-keys":"Attributes keys","attributes-keys-required":"Attributes keys are required","attributes-scope":"Attributes scope","attributes-scope-value":"Attributes scope value","attributes-scope-value-copy":"Copy attributes scope value","attributes-scope-hint":"Use the 'scope' metadata key to dynamically set the attribute scope per message. If provided, this overrides the scope set in the configuration.","notify-device":"Force notification to the device","send-attributes-updated-notification":"Send attributes updated notification","send-attributes-updated-notification-hint":"Send notification about updated attributes as a separate message to the rule engine queue.","send-attributes-deleted-notification":"Send attributes deleted notification","send-attributes-deleted-notification-hint":"Send notification about deleted attributes as a separate message to the rule engine queue.","update-attributes-only-on-value-change":"Save attributes only if the value changes","update-attributes-only-on-value-change-hint":"Updates the attributes on every incoming message disregarding if their value has changed. Increases API usage and reduces performance.","update-attributes-only-on-value-change-hint-enabled":"Updates the attributes only if their value has changed. If the value is not changed, no update to the attribute timestamp nor attribute change notification will be sent.","fetch-credentials-to-metadata":"Fetch credentials to metadata","notify-device-on-update-hint":"If enabled, force notification to the device about shared attributes update. If disabled, the notification behavior is controlled by the 'notifyDevice' parameter from the incoming message metadata. To turn off the notification, the message metadata must contain the 'notifyDevice' parameter set to 'false'. Any other case will trigger the notification to the device.","notify-device-on-delete-hint":"If enabled, force notification to the device about shared attributes removal. If disabled, the notification behavior is controlled by the 'notifyDevice' parameter from the incoming message metadata. To turn on the notification, the message metadata must contain the 'notifyDevice' parameter set to 'true'. In any other case, the notification will not be triggered to the device.","latest-timeseries":"Latest time series data keys","timeseries-keys":"Time series keys","timeseries-keys-required":"At least one time series key should be selected.","add-timeseries-key":"Add time series key","add-message-field":"Add message field","relation-search-parameters":"Relation search parameters","relation-parameters":"Relation parameters","add-metadata-field":"Add metadata field","data-keys":"Message field names","copy-from":"Copy from","data-to-metadata":"Data to metadata","metadata-to-data":"Metadata to data","use-regular-expression-hint":"Use regular expression to copy keys by pattern.\n\nTips & tricks:\nPress 'Enter' to complete field name input.\nPress 'Backspace' to delete field name. Multiple field names supported.",interval:"Interval","interval-required":"Interval is required","interval-hint":"Deduplication interval in seconds.","interval-min-error":"Min allowed value is 1","max-pending-msgs":"Max pending messages","max-pending-msgs-hint":"Maximum number of messages that are stored in memory for each unique deduplication id.","max-pending-msgs-required":"Max pending messages is required","max-pending-msgs-max-error":"Max allowed value is 1000","max-pending-msgs-min-error":"Min allowed value is 1","max-retries":"Max retries","max-retries-required":"Max retries is required","max-retries-hint":"Maximum number of retries to push the deduplicated messages into the queue. 10 seconds delay is used between retries","max-retries-max-error":"Max allowed value is 100","max-retries-min-error":"Min allowed value is 0",strategy:"Strategy","strategy-required":"Strategy is required","strategy-all-hint":"Return all messages that arrived during deduplication period as a single JSON array message. Where each element represents object with msg and metadata inner properties.","strategy-first-hint":"Return first message that arrived during deduplication period.","strategy-last-hint":"Return last message that arrived during deduplication period.",first:"First",last:"Last",all:"All","output-msg-type-hint":"The message type of the deduplication result.","queue-name-hint":"The queue name where the deduplication result will be published.",keys:"Keys","keys-required":"Keys are required","rename-keys-in":"Rename keys in",data:"Data",message:"Message",metadata:"Metadata","current-key-name":"Current key name","key-name-required":"Key name is required","new-key-name":"New key name","new-key-name-required":"New key name is required","metadata-keys":"Metadata field names","json-path-expression":"JSON path expression","json-path-expression-required":"JSON path expression is required","json-path-expression-hint":"JSONPath specifies a path to an element or a set of elements in a JSON structure. '$' represents the root object or array.","relations-query":"Relations query","device-relations-query":"Device relations query","max-relation-level":"Max relation level","max-relation-level-error":"Value should be greater than 0 or unspecified.","max-relation-level-invalid":"Value should be an integer.","relation-type":"Relation type","relation-type-pattern":"Relation type pattern","relation-type-pattern-required":"Relation type pattern is required","relation-types-list":"Relation types to propagate","relation-types-list-hint":"If Propagate relation types are not selected, alarms will be propagated without filtering by relation type.","unlimited-level":"Unlimited level","latest-telemetry":"Latest telemetry","add-telemetry-key":"Add telemetry key","delete-from":"Delete from","use-regular-expression-delete-hint":"Use regular expression to delete keys by pattern.\n\nTips & tricks:\nPress 'Enter' to complete field name input.\nPress 'Backspace' to delete field name.\nMultiple field names supported.","fetch-into":"Fetch into","attr-mapping":"Attributes mapping:","source-attribute":"Source attribute key","source-attribute-required":"Source attribute key is required.","source-telemetry":"Source telemetry key","source-telemetry-required":"Source telemetry key is required.","target-key":"Target key","target-key-required":"Target key is required.","attr-mapping-required":"At least one mapping entry should be specified.","fields-mapping":"Fields mapping","fields-mapping-hint":"If the message field is set to $entityId, the message originator's id will be saved to the specified table column.","relations-query-config-direction-suffix":"originator","profile-name":"Profile name","fetch-circle-parameter-info-from-metadata-hint":'Metadata field \'{{perimeterKeyName}}\' should be defined in next format: {"latitude":48.196, "longitude":24.6532, "radius":100.0, "radiusUnit":"METER"}',"fetch-poligon-parameter-info-from-metadata-hint":"Metadata field '{{perimeterKeyName}}' should be defined in next format: [[48.19736,24.65235],[48.19800,24.65060],...,[48.19849,24.65420]]","short-templatization-tooltip":"Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","fields-mapping-required":"At least one field mapping should be specified.","at-least-one-field-required":"At least one input field must have a value(s) provided.","originator-fields-sv-map-hint":"Target key fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","sv-map-hint":"Only target key fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","source-field":"Source field","source-field-required":"Source field is required.","originator-source":"Originator source","new-originator":"New originator","originator-customer":"Customer","originator-tenant":"Tenant","originator-related":"Related entity","originator-alarm-originator":"Alarm Originator","originator-entity":"Entity by name pattern","clone-message":"Clone message",transform:"Transform","default-ttl":"Default TTL in seconds","default-ttl-required":"Default TTL is required.","default-ttl-hint":"Rule node will fetch Time-to-Live (TTL) value from the message metadata. If no value is present, it defaults to the TTL specified in the configuration. If the value is set to 0, the TTL from the tenant profile configuration will be applied.","default-ttl-zero-hint":"TTL will not be applied if its value is set to 0.","min-default-ttl-message":"Only 0 minimum TTL is allowed.","generation-parameters":"Generation parameters","message-count":"Generated messages limit (0 - unlimited)","message-count-required":"Generated messages limit is required.","min-message-count-message":"Only 0 minimum message count is allowed.","period-seconds":"Generation frequency in seconds","period-seconds-required":"Generation frequency is required.","script-lang-tbel":"TBEL","script-lang-js":"JS","use-metadata-period-in-seconds-patterns":"Use period in seconds pattern","use-metadata-period-in-seconds-patterns-hint":"If selected, rule node use period in seconds interval pattern from message metadata or data assuming that intervals are in the seconds.","period-in-seconds-pattern":"Period in seconds pattern","period-in-seconds-pattern-required":"Period in seconds pattern is required","min-period-seconds-message":"Only 1 second minimum period is allowed.",originator:"Originator","message-body":"Message body","message-metadata":"Message metadata",generate:"Generate","current-rule-node":"Current Rule Node","current-tenant":"Current Tenant","generator-function":"Generator function","test-generator-function":"Test generator function",generator:"Generator","test-filter-function":"Test filter function","test-switch-function":"Test switch function","test-transformer-function":"Test transformer function",transformer:"Transformer","alarm-create-condition":"Alarm create condition","test-condition-function":"Test condition function","alarm-clear-condition":"Alarm clear condition","alarm-details-builder":"Alarm details builder","test-details-function":"Test details function","alarm-type":"Alarm type","select-entity-types":"Select entity types","alarm-type-required":"Alarm type is required.","alarm-severity":"Alarm severity","alarm-severity-required":"Alarm severity is required","alarm-severity-pattern":"Alarm severity pattern","alarm-status-filter":"Alarm status filter","alarm-status-list-empty":"Alarm status list is empty","no-alarm-status-matching":"No alarm status matching were found.",propagate:"Propagate alarm to related entities","propagate-to-owner":"Propagate alarm to entity owner (Customer or Tenant)","propagate-to-tenant":"Propagate alarm to Tenant",condition:"Condition",details:"Details","to-string":"To string","test-to-string-function":"Test to string function","from-template":"From","from-template-required":"From is required","message-to-metadata":"Message to metadata","metadata-to-message":"Metadata to message","from-message":"From message","from-metadata":"From metadata","to-template":"To","to-template-required":"To Template is required","mail-address-list-template-hint":'Comma separated address list, use ${metadataKey} for value from metadata, $[messageKey] for value from message body',"cc-template":"Cc","bcc-template":"Bcc","subject-template":"Subject","subject-template-required":"Subject Template is required","body-template":"Body","body-template-required":"Body Template is required","dynamic-mail-body-type":"Dynamic mail body type","mail-body-type":"Mail body type","body-type-template":"Body type template","reply-routing-configuration":"Reply Routing Configuration","rpc-reply-routing-configuration-hint":"These configuration parameters specify the metadata key names used to identify the service, session, and request for sending a reply back.","reply-routing-configuration-hint":"These configuration parameters specify the metadata key names used to identify the service and request for sending a reply back.","request-id-metadata-attribute":"Request Id","service-id-metadata-attribute":"Service Id","session-id-metadata-attribute":"Session Id","timeout-sec":"Timeout in seconds","timeout-required":"Timeout is required","min-timeout-message":"Only 0 minimum timeout value is allowed.","endpoint-url-pattern":"Endpoint URL pattern","endpoint-url-pattern-required":"Endpoint URL pattern is required","request-method":"Request method","use-simple-client-http-factory":"Use simple client HTTP factory","ignore-request-body":"Without request body","parse-to-plain-text":"Parse to plain text","parse-to-plain-text-hint":'If selected, request body message payload will be transformed from JSON string to plain text, e.g. msg = "Hello,\\t\\"world\\"" will be parsed to Hello, "world"',"read-timeout":"Read timeout in millis","read-timeout-hint":"The value of 0 means an infinite timeout","max-parallel-requests-count":"Max number of parallel requests","max-parallel-requests-count-hint":"The value of 0 specifies no limit in parallel processing","max-response-size":"Max response size (in KB)","max-response-size-hint":"The maximum amount of memory allocated for buffering data when decoding or encoding HTTP messages, such as JSON or XML payloads",headers:"Headers","headers-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body in header/value fields',header:"Header","header-required":"Header is required",value:"Value","value-required":"Value is required","topic-pattern":"Topic pattern","key-pattern":"Key pattern","key-pattern-hint":"Optional. If a valid partition number is specified, it will be used when sending the record. If no partition is specified, the key will be used instead. If neither is specified, a partition will be assigned in a round-robin fashion.","topic-pattern-required":"Topic pattern is required",topic:"Topic","topic-required":"Topic is required","bootstrap-servers":"Bootstrap servers","bootstrap-servers-required":"Bootstrap servers value is required","other-properties":"Other properties",key:"Key","key-required":"Key is required",retries:"Automatically retry times if fails","min-retries-message":"Only 0 minimum retries is allowed.","batch-size-bytes":"Produces batch size in bytes","min-batch-size-bytes-message":"Only 0 minimum batch size is allowed.","linger-ms":"Time to buffer locally (ms)","min-linger-ms-message":"Only 0 ms minimum value is allowed.","buffer-memory-bytes":"Client buffer max size in bytes","min-buffer-memory-message":"Only 0 minimum buffer size is allowed.","memory-buffer-size-range":"Memory buffer size must be between 0 and {{max}} KB",acks:"Number of acknowledgments","key-serializer":"Key serializer","key-serializer-required":"Key serializer is required","value-serializer":"Value serializer","value-serializer-required":"Value serializer is required","topic-arn-pattern":"Topic ARN pattern","topic-arn-pattern-required":"Topic ARN pattern is required","aws-access-key-id":"AWS Access Key ID","aws-access-key-id-required":"AWS Access Key ID is required","aws-secret-access-key":"AWS Secret Access Key","aws-secret-access-key-required":"AWS Secret Access Key is required","aws-region":"AWS Region","aws-region-required":"AWS Region is required","exchange-name-pattern":"Exchange name pattern","routing-key-pattern":"Routing key pattern","message-properties":"Message properties",host:"Host","host-required":"Host is required",port:"Port","port-required":"Port is required","port-range":"Port should be in a range from 1 to 65535.","virtual-host":"Virtual host",username:"Username",password:"Password","automatic-recovery":"Automatic recovery","connection-timeout-ms":"Connection timeout (ms)","min-connection-timeout-ms-message":"Only 0 ms minimum value is allowed.","handshake-timeout-ms":"Handshake timeout (ms)","min-handshake-timeout-ms-message":"Only 0 ms minimum value is allowed.","client-properties":"Client properties","queue-url-pattern":"Queue URL pattern","queue-url-pattern-required":"Queue URL pattern is required","delay-seconds":"Delay (seconds)","min-delay-seconds-message":"Only 0 seconds minimum value is allowed.","max-delay-seconds-message":"Only 900 seconds maximum value is allowed.",name:"Name","name-required":"Name is required","queue-type":"Queue type","sqs-queue-standard":"Standard","sqs-queue-fifo":"FIFO","gcp-project-id":"GCP project ID","gcp-project-id-required":"GCP project ID is required","gcp-service-account-key":"GCP service account key file","gcp-service-account-key-required":"GCP service account key file is required","pubsub-topic-name":"Topic name","pubsub-topic-name-required":"Topic name is required","message-attributes":"Message attributes","message-attributes-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body in name/value fields',"connect-timeout":"Connection timeout (sec)","connect-timeout-required":"Connection timeout is required.","connect-timeout-range":"Connection timeout should be in a range from 1 to 200.","client-id":"Client ID","client-id-hint":'Optional. Leave empty for auto-generated Client ID. Be careful when specifying the Client ID. Majority of the MQTT brokers will not allow multiple connections with the same Client ID. To connect to such brokers, your mqtt Client ID must be unique. When platform is running in a micro-services mode, the copy of rule node is launched in each micro-service. This will automatically lead to multiple mqtt clients with the same ID and may cause failures of the rule node. To avoid such failures enable "Add Service ID as suffix to Client ID" option below.',"append-client-id-suffix":"Add Service ID as suffix to Client ID","client-id-suffix-hint":'Optional. Applied when "Client ID" specified explicitly. If selected then Service ID will be added to Client ID as a suffix. Helps to avoid failures when platform is running in a micro-services mode.',"device-id":"Device ID","device-id-required":"Device ID is required.","clean-session":"Clean session","enable-ssl":"Enable SSL",credentials:"Credentials","credentials-type":"Credentials type","credentials-type-required":"Credentials type is required.","credentials-anonymous":"Anonymous","credentials-basic":"Basic","credentials-pem":"PEM","credentials-pem-hint":"At least Server CA certificate file or a pair of Client certificate and Client private key files are required","credentials-sas":"Shared Access Signature","sas-key":"SAS Key","sas-key-required":"SAS Key is required.",hostname:"Hostname","hostname-required":"Hostname is required.","azure-ca-cert":"CA certificate file","username-required":"Username is required.","password-required":"Password is required.","ca-cert":"Server CA certificate file","private-key":"Client private key file",cert:"Client certificate file","no-file":"No file selected.","drop-file":"Drop a file or click to select a file to upload.","private-key-password":"Private key password","use-system-smtp-settings":"Use system SMTP settings","use-metadata-dynamic-interval":"Use dynamic interval","metadata-dynamic-interval-hint":"Interval start and end input fields support templatization. Note that the substituted template value should be set in milliseconds. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","use-metadata-interval-patterns-hint":"If selected, rule node use start and end interval patterns from message metadata or data assuming that intervals are in the milliseconds.","use-message-alarm-data":"Use message alarm data","overwrite-alarm-details":"Overwrite alarm details","use-alarm-severity-pattern":"Use alarm severity pattern","check-all-keys":"Check that all specified fields are present","check-all-keys-hint":"If selected, checks that all specified keys are present in the message data and metadata.","check-relation-to-specific-entity":"Check relation to specific entity","check-relation-to-specific-entity-tooltip":"If enabled, checks the presence of relation with a specific entity otherwise, checks the presence of relation with any entity. In both cases, relation lookup is based on configured direction and type.","check-relation-hint":"Checks existence of relation to specific entity or to any entity based on direction and relation type.","delete-relation-with-specific-entity":"Delete relation with specific entity","delete-relation-with-specific-entity-hint":"If enabled, will delete the relation with just one specific entity. Otherwise, the relation will be removed with all matching entities.","delete-relation-hint":"Deletes relation from the originator of the incoming message to the specified entity or list of entities based on direction and type.","remove-current-relations":"Remove current relations","remove-current-relations-hint":"Removes current relations from the originator of the incoming message based on direction and type.","change-originator-to-related-entity":"Change originator to related entity","change-originator-to-related-entity-hint":"Used to process submitted message as a message from another entity.","start-interval":"Interval start","end-interval":"Interval end","start-interval-required":"Interval start is required.","end-interval-required":"Interval end is required.","smtp-protocol":"Protocol","smtp-host":"SMTP host","smtp-host-required":"SMTP host is required.","smtp-port":"SMTP port","smtp-port-required":"You must supply a smtp port.","smtp-port-range":"SMTP port should be in a range from 1 to 65535.","timeout-msec":"Timeout ms","min-timeout-msec-message":"Only 0 ms minimum value is allowed.","enter-username":"Enter username","enter-password":"Enter password","enable-tls":"Enable TLS","tls-version":"TLS version","enable-proxy":"Enable proxy","use-system-proxy-properties":"Use system proxy properties","proxy-host":"Proxy host","proxy-host-required":"Proxy host is required.","proxy-port":"Proxy port","proxy-port-required":"Proxy port is required.","proxy-port-range":"Proxy port should be in a range from 1 to 65535.","proxy-user":"Proxy user","proxy-password":"Proxy password","proxy-scheme":"Proxy scheme","numbers-to-template":"Phone Numbers To Template","numbers-to-template-required":"Phone Numbers To Template is required","numbers-to-template-hint":'Comma separated Phone Numbers, use ${metadataKey} for value from metadata, $[messageKey] for value from message body',"sms-message-template":"SMS message Template","sms-message-template-required":"SMS message Template is required","use-system-sms-settings":"Use system SMS provider settings","min-period-0-seconds-message":"Only 0 second minimum period is allowed.","max-pending-messages":"Maximum pending messages","max-pending-messages-required":"Maximum pending messages is required.","max-pending-messages-range":"Maximum pending messages should be in a range from 1 to 100000.","originator-types-filter":"Originator types filter","interval-seconds":"Interval in seconds","interval-seconds-required":"Interval is required.","int-range":"Value must not exceed the maximum integer limit (2147483648)","min-interval-seconds-message":"Only 1 second minimum interval is allowed.","output-timeseries-key-prefix":"Output time series key prefix","output-timeseries-key-prefix-required":"Output time series key prefix required.","separator-hint":'Press "Enter" to complete field input.',"select-details":"Select details","entity-details-id":"Id","entity-details-title":"Title","entity-details-country":"Country","entity-details-state":"State","entity-details-city":"City","entity-details-zip":"Zip","entity-details-address":"Address","entity-details-address2":"Address2","entity-details-additional_info":"Additional Info","entity-details-phone":"Phone","entity-details-email":"Email","email-sender":"Email sender","fields-to-check":"Fields to check","add-detail":"Add detail","check-all-keys-tooltip":"If enabled, checks the presence of all fields listed in the message and metadata field names within the incoming message and its metadata.","fields-to-check-hint":'Press "Enter" to complete field name input. Multiple field names supported.',"entity-details-list-empty":"At least one detail should be selected.","alarm-status":"Alarm status","alarm-required":"At least one alarm status should be selected.","no-entity-details-matching":"No entity details matching were found.","custom-table-name":"Custom table name","custom-table-name-required":"Table Name is required","custom-table-hint":"The table must be created in your Cassandra cluster and its name must start with the prefix 'cs_tb_' to avoid the data insertion to the common TB tables. Enter the table name here without the 'cs_tb_' prefix.","message-field":"Message field","message-field-required":"Message field is required.","table-col":"Table column","table-col-required":"Table column is required.","latitude-field-name":"Latitude field name","longitude-field-name":"Longitude field name","latitude-field-name-required":"Latitude field name is required.","longitude-field-name-required":"Longitude field name is required.","fetch-perimeter-info-from-metadata":"Fetch perimeter information from metadata","fetch-perimeter-info-from-metadata-tooltip":"If perimeter type is set to 'Polygon' the value of metadata field '{{perimeterKeyName}}' will be set as perimeter definition without additional parsing of the value. Otherwise, if perimeter type is set to 'Circle' the value of '{{perimeterKeyName}}' metadata field will be parsed to extract 'latitude', 'longitude', 'radius', 'radiusUnit' fields that uses for circle perimeter definition.","perimeter-key-name":"Perimeter key name","perimeter-key-name-hint":"Metadata field name that includes perimeter information.","perimeter-key-name-required":"Perimeter key name is required.","perimeter-circle":"Circle","perimeter-polygon":"Polygon","perimeter-type":"Perimeter type","circle-center-latitude":"Center latitude","circle-center-latitude-required":"Center latitude is required.","circle-center-longitude":"Center longitude","circle-center-longitude-required":"Center longitude is required.","range-unit-meter":"Meter","range-unit-kilometer":"Kilometer","range-unit-foot":"Foot","range-unit-mile":"Mile","range-unit-nautical-mile":"Nautical mile","range-units":"Range units","range-units-required":"Range units is required.",range:"Range","range-required":"Range is required.","polygon-definition":"Polygon definition","polygon-definition-required":"Polygon definition is required.","polygon-definition-hint":"Use the following format for manual definition of polygon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].","min-inside-duration":"Minimal inside duration","min-inside-duration-value-required":"Minimal inside duration is required","min-inside-duration-time-unit":"Minimal inside duration time unit","min-outside-duration":"Minimal outside duration","min-outside-duration-value-required":"Minimal outside duration is required","min-outside-duration-time-unit":"Minimal outside duration time unit","tell-failure-if-absent":"Tell Failure","tell-failure-if-absent-hint":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"get-latest-value-with-ts":"Fetch timestamp for the latest telemetry values","get-latest-value-with-ts-hint":'If selected, the latest telemetry values will also include timestamp, e.g: "temp": "{"ts":1574329385897, "value":42}"',"ignore-null-strings":"Ignore null strings","ignore-null-strings-hint":"If selected rule node will ignore entity fields with empty value.","add-metadata-key-values-as-kafka-headers":"Add Message metadata key-value pairs to Kafka record headers","add-metadata-key-values-as-kafka-headers-hint":"If selected, key-value pairs from message metadata will be added to the outgoing records headers as byte arrays with predefined charset encoding.","charset-encoding":"Charset encoding","charset-encoding-required":"Charset encoding is required.","charset-us-ascii":"US-ASCII","charset-iso-8859-1":"ISO-8859-1","charset-utf-8":"UTF-8","charset-utf-16be":"UTF-16BE","charset-utf-16le":"UTF-16LE","charset-utf-16":"UTF-16","select-queue-hint":"The queue name can be selected from a drop-down list or add a custom name.","device-profile-node-hint":"Useful if you have duration or repeating conditions to ensure continuity of alarm state evaluation.","persist-alarm-rules":"Persist state of alarm rules","persist-alarm-rules-hint":"If enabled, the rule node will store the state of processing to the database.","fetch-alarm-rules":"Fetch state of alarm rules","fetch-alarm-rules-hint":"If enabled, the rule node will restore the state of processing on initialization and ensure that alarms are raised even after server restarts. Otherwise, the state will be restored when the first message from the device arrives.","input-value-key":"Input value key","input-value-key-required":"Input value key is required.","output-value-key":"Output value key","output-value-key-required":"Output value key is required.","number-of-digits-after-floating-point":"Number of digits after floating point","number-of-digits-after-floating-point-range":"Number of digits after floating point should be in a range from 0 to 15.","failure-if-delta-negative":"Tell Failure if delta is negative","failure-if-delta-negative-tooltip":"Rule node forces failure of message processing if delta value is negative.","use-caching":"Use caching","use-caching-tooltip":'Rule node will cache the value of "{{inputValueKey}}" that arrives from the incoming message to improve performance. Note that the cache will not be updated if you modify the "{{inputValueKey}}" value elsewhere.',"add-time-difference-between-readings":'Add the time difference between "{{inputValueKey}}" readings',"add-time-difference-between-readings-tooltip":'If enabled, the rule node will add the "{{periodValueKey}}" to the outbound message.',"period-value-key":"Period value key","period-value-key-required":"Period value key is required.","general-pattern-hint":"Use ${metadataKey} for value from metadata, $[messageKey] for value from message body.","alarm-severity-pattern-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body. Alarm severity should be system (CRITICAL, MAJOR etc.)',"output-node-name-hint":"The rule node name corresponds to the relation type of the output message, and it is used to forward messages to other rule nodes in the caller rule chain.","skip-latest-persistence":"Skip latest persistence","skip-latest-persistence-hint":"Rule node will not update values for incoming keys for the latest time series data. Useful for highly loaded use-cases to decrease the pressure on the DB.","use-server-ts":"Use server ts","use-server-ts-hint":"Rule node will use the timestamp of message processing instead of the timestamp from the message. Useful for all sorts of sequential processing if you merge messages from multiple sources (devices, assets, etc).","kv-map-pattern-hint":"All input fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","kv-map-single-pattern-hint":"Input field support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","shared-scope":"Shared scope","server-scope":"Server scope","client-scope":"Client scope","attribute-type":"Attribute","constant-type":"Constant","time-series-type":"Time series","message-body-type":"Message","message-metadata-type":"Metadata","argument-tile":"Arguments","no-arguments-prompt":"No arguments configured","result-title":"Result","functions-field-input":"Functions","no-option-found":"No option found","argument-source-field-input":"Source","argument-source-field-input-required":"Argument source is required.","argument-key-field-input":"Key","argument-key-field-input-required":"Argument key is required.","constant-value-field-input":"Constant value","constant-value-field-input-required":"Constant value is required.","attribute-scope-field-input":"Attribute scope","attribute-scope-field-input-required":"Attribute scope os required.","default-value-field-input":"Default value","type-field-input":"Type","type-field-input-required":"Type is required.","key-field-input":"Key","add-entity-type":"Add entity type","add-device-profile":"Add device profile","key-field-input-required":"Key is required.","number-floating-point-field-input":"Number of digits after floating point","number-floating-point-field-input-hint":"Use 0 to convert result to integer","add-to-message-field-input":"Add to message","add-to-metadata-field-input":"Add to metadata","custom-expression-field-input":"Mathematical Expression","custom-expression-field-input-required":"Mathematical expression is required","custom-expression-field-input-hint":"Specify a mathematical expression to evaluate. Default expression demonstrates how to transform Fahrenheit to Celsius","retained-message":"Retained","attributes-mapping":"Attributes mapping","latest-telemetry-mapping":"Latest telemetry mapping","add-mapped-attribute-to":"Add mapped attributes to","add-mapped-latest-telemetry-to":"Add mapped latest telemetry to","add-mapped-fields-to":"Add mapped fields to","add-selected-details-to":"Add selected details to","clear-selected-types":"Clear selected types","clear-selected-details":"Clear selected details","clear-selected-fields":"Clear selected fields","clear-selected-keys":"Clear selected keys","geofence-configuration":"Geofence configuration","coordinate-field-names":"Coordinate field names","coordinate-field-hint":"Rule node tries to retrieve the specified fields from the message. If they are not present, it will look them up in the metadata.","presence-monitoring-strategy":"Presence monitoring strategy","presence-monitoring-strategy-on-first-message":"On first message","presence-monitoring-strategy-on-each-message":"On each message","presence-monitoring-strategy-on-first-message-hint":"Reports presence status 'Inside' or 'Outside' on the first message after the configured minimal duration has passed since previous presence status 'Entered' or 'Left' update.","presence-monitoring-strategy-on-each-message-hint":"Reports presence status 'Inside' or 'Outside' on each message after presence status 'Entered' or 'Left' update.","fetch-credentials-to":"Fetch credentials to","add-originator-attributes-to":"Add originator attributes to","originator-attributes":"Originator attributes","fetch-latest-telemetry-with-timestamp":"Fetch latest telemetry with timestamp","fetch-latest-telemetry-with-timestamp-tooltip":'If selected, latest telemetry values will be added to the outbound metadata with timestamp, e.g: "{{latestTsKeyName}}": "{"ts":1574329385897, "value":42}"',"tell-failure":"Tell failure if any of the attributes are missing","tell-failure-tooltip":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"created-time":"Created time","chip-help":"Press 'Enter' to complete {{inputName}} input. \nPress 'Backspace' to delete {{inputName}}. \nMultiple values supported.",detail:"detail","field-name":"field name","device-profile":"device profile","entity-type":"entity type","message-type":"message type","timeseries-key":"time series key",type:"Type","first-name":"First name","last-name":"Last name",label:"Label","originator-fields-mapping":"Originator fields mapping","add-mapped-originator-fields-to":"Add mapped originator fields to",fields:"Fields","skip-empty-fields":"Skip empty fields","skip-empty-fields-tooltip":"Fields with empty values will not be added to the output message/output metadata.","fetch-interval":"Fetch interval","fetch-strategy":"Fetch strategy","fetch-timeseries-from-to":"Fetch time series from {{startInterval}} {{startIntervalTimeUnit}} ago to {{endInterval}} {{endIntervalTimeUnit}} ago.","fetch-timeseries-from-to-invalid":'Fetch time series invalid ("Interval start" should be less than "Interval end").',"use-metadata-dynamic-interval-tooltip":"If selected, the rule node will use dynamic interval start and end based on the message and metadata patterns.","all-mode-hint":'If selected fetch mode "All" rule node will retrieve telemetry from the fetch interval with configurable query parameters.',"first-mode-hint":'If selected fetch mode "First" rule node will retrieve the closest telemetry to the fetch interval\'s start.',"last-mode-hint":'If selected fetch mode "Last" rule node will retrieve the closest telemetry to the fetch interval\'s end.',ascending:"Ascending",descending:"Descending",min:"Min",max:"Max",average:"Average",sum:"Sum",count:"Count",none:"None","last-level-relation-tooltip":"If selected, the rule node will search related entities only on the level set in the max relation level.","last-level-device-relation-tooltip":"If selected, the rule node will search related devices only on the level set in the max relation level.","data-to-fetch":"Data to fetch","mapping-of-customers":"Mapping of customer's","map-fields-required":"All mapping fields are required.",attributes:"Attributes","related-device-attributes":"Related device attributes","add-selected-attributes-to":"Add selected attributes to","device-profiles":"Device profiles","mapping-of-tenant":"Mapping of tenant's","add-attribute-key":"Add attribute key","message-template":"Message template","message-template-required":"Message template is required","use-system-slack-settings":"Use system slack settings","slack-api-token":"Slack API token","slack-api-token-required":"Slack API token is required","keys-mapping":"keys mapping","add-key":"Add key",recipients:"Recipients","message-subject-and-content":"Message subject and content","template-rules-hint":"Both input fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the message metadata.","originator-customer-desc":"Use customer of incoming message originator as new originator.","originator-tenant-desc":"Use current tenant as new originator.","originator-related-entity-desc":"Use related entity as new originator. Lookup based on configured relation type and direction.","originator-alarm-originator-desc":"Use alarm originator as new originator. Only if incoming message originator is alarm entity.","originator-entity-by-name-pattern-desc":"Use entity fetched from DB as new originator. Lookup based on entity type and specified name pattern.","email-from-template-hint":"Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","recipients-block-main-hint":"Comma-separated address list. All input fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","forward-msg-default-rule-chain":"Forward message to the originator's default rule chain","forward-msg-default-rule-chain-tooltip":"If enabled, message will be forwarded to the originator's default rule chain, or rule chain from configuration, if originator has no default rule chain defined in the entity profile.","exclude-zero-deltas":"Exclude zero deltas from outbound message","exclude-zero-deltas-hint":'If enabled, the "{{outputValueKey}}" output key will be added to the outbound message if its value is not zero.',"exclude-zero-deltas-time-difference-hint":'If enabled, the "{{outputValueKey}}" and "{{periodValueKey}}" output keys will be added to the outbound message only if the "{{outputValueKey}}" value is not zero.',"search-direction-from":"From originator to target entity","search-direction-to":"From target entity to originator","del-relation-direction-from":"From originator","del-relation-direction-to":"To originator","target-entity":"Target entity","function-configuration":"Function configuration","function-name":"Function name","function-name-required":"Function name is required.",qualifier:"Qualifier","qualifier-hint":'If the qualifier is not specified, the default qualifier "$LATEST" will be used.',"aws-credentials":"AWS Credentials","connection-timeout":"Connection timeout","connection-timeout-required":"Connection timeout is required.","connection-timeout-min":"Min connection timeout is 0.","connection-timeout-hint":"The amount of time to wait in seconds when initially establishing a connection before giving up and timing out. A value of 0 means infinity, and is not recommended.","request-timeout":"Request timeout","request-timeout-required":"Request timeout is required","request-timeout-min":"Min request timeout is 0","request-timeout-hint":"The amount of time to wait in seconds for the request to complete before giving up and timing out. A value of 0 means infinity, and is not recommended.","tell-failure-aws-lambda":"Tell Failure if AWS Lambda function execution raises exception","tell-failure-aws-lambda-hint":"Rule node forces failure of message processing if AWS Lambda function execution raises exception."},"key-val":{key:"Key",value:"Value","see-examples":"See examples.","remove-entry":"Remove entry","remove-mapping-entry":"Remove mapping entry","add-mapping-entry":"Add mapping","add-entry":"Add entry","copy-key-values-from":"Copy key-values from","delete-key-values":"Delete key-values","delete-key-values-from":"Delete key-values from","at-least-one-key-error":"At least one key should be selected.","unique-key-value-pair-error":"'{{keyText}}' must be different from the '{{valText}}'!"},"mail-body-type":{"plain-text":"Plain text",html:"HTML",dynamic:"Dynamic","use-body-type-template":"Use body type template","plain-text-description":"Simple, unformatted text with no special styling or formating.","html-text-description":"Allows you to use HTML tags for formatting, links and images in your mai body.","dynamic-text-description":"Allows to use Plain Text or HTML body type dynamically based on templatization feature.","after-template-evaluation-hint":"After template evaluation value should be true for HTML, and false for Plain text."}}},!0)}(e),Wp(Yp,"tb-rule-node-core-config-css")}static{this.ɵfac=function(e){return new(e||Xp)(t.ɵɵinject(K.TranslateService))}}static{this.ɵmod=t.ɵɵdefineNgModule({type:Xp})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,Ci,np,bo,hs,Hp,Jp,oe]})}}e("RuleNodeCoreConfigModule",Xp),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(Xp,{declarations:[oe],imports:[$,S],exports:[Ci,np,bo,hs,Hp,Jp,oe]})}}}));//# sourceMappingURL=rulenode-core-config.js.map +System.register(["@angular/core","@shared/public-api","@ngrx/store","@angular/forms","@core/public-api","@ngx-translate/core","@angular/cdk/keycodes","@angular/common","@home/components/public-api","tslib","rxjs","@angular/cdk/coercion","rxjs/operators"],(function(e){"use strict";var t,n,r,a,i,o,l,s,p,m,d,u,c,f,g,h,y,b,v,x,C,S,T,I,E,F,q,A,k,N,w,M,B,V,O,D,L,P,R,_,j,G,K,U,H,z,$,Q,J,Y,W,X,Z,ee,te,ne,re,ae,ie;return{setters:[function(e){t=e,n=e.EventEmitter,r=e.forwardRef,a=e.ɵNG_COMP_DEF},function(e){i=e.RuleNodeConfigurationComponent,o=e.AttributeScope,l=e.telemetryTypeTranslations,s=e.ScriptLanguage,p=e.AlarmSeverity,m=e.alarmSeverityTranslations,d=e.EntitySearchDirection,u=e.EntityType,c=e.entityFields,f=e.messageTypeNames,g=e.MessageType,h=e.coerceBoolean,y=e.PageComponent,b=e.entitySearchDirectionTranslations,v=e,x=e.AlarmStatus,C=e.alarmStatusTranslations,S=e.SharedModule,T=e.AggregationType,I=e.aggregationTranslations,E=e.NotificationType,F=e.SlackChanelType,q=e.SlackChanelTypesTranslateMap},function(e){A=e},function(e){k=e,N=e.Validators,w=e.FormArray,M=e.FormGroup,B=e.NgControl,V=e.NG_VALUE_ACCESSOR,O=e.NG_VALIDATORS},function(e){D=e.getCurrentAuthState,L=e,P=e.isDefinedAndNotNull,R=e.isEqual,_=e.deepTrim,j=e.isObject,G=e.isNotEmptyStr},function(e){K=e},function(e){U=e.ENTER,H=e.COMMA,z=e.SEMICOLON},function(e){$=e.CommonModule},function(e){Q=e.HomeComponentsModule},function(e){J=e.__decorate},function(e){Y=e.Subject,W=e.takeUntil,X=e.of},function(e){Z=e.coerceBooleanProperty},function(e){ee=e.startWith,te=e.map,ne=e.mergeMap,re=e.share,ae=e.tap,ie=e.takeUntil}],execute:function(){class oe extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.emptyConfigForm}onConfigurationSet(e){this.emptyConfigForm=this.fb.group({})}static{this.ɵfac=function(e){return new(e||oe)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:oe,selectors:[["tb-node-empty-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:1,vars:0,template:function(e,n){1&e&&t.ɵɵelement(0,"div")},dependencies:t.ɵɵgetComponentDepsFactory(oe),encapsulation:2})}}function le(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.customer-name-pattern-required")," "))}e("EmptyConfigComponent",oe);class se extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.assignCustomerConfigForm}onConfigurationSet(e){this.assignCustomerConfigForm=this.fb.group({customerNamePattern:[e?e.customerNamePattern:null,[N.required,N.pattern(/.*\S.*/)]],createCustomerIfNotExists:[!!e&&e.createCustomerIfNotExists,[]]})}prepareOutputConfig(e){return e.customerNamePattern=e.customerNamePattern.trim(),e}static{this.ɵfac=function(e){return new(e||se)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:se,selectors:[["tb-action-node-assign-to-customer-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:13,vars:5,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"tb-form-panel","no-padding","no-border"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","customerNamePattern"],[4,"ngIf"],[1,"tb-form-row"],["formControlName","createCustomerIfNotExists",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"mat-form-field",2)(3,"mat-label",3),t.ɵɵtext(4,"tb.rulenode.customer-name-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",4),t.ɵɵtemplate(6,le,3,3,"mat-error",5),t.ɵɵelementStart(7,"mat-hint",3),t.ɵɵtext(8,"tb.rulenode.customer-name-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",6)(10,"mat-slide-toggle",7),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.assignCustomerConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.assignCustomerConfigForm.get("customerNamePattern").hasError("required")||n.assignCustomerConfigForm.get("customerNamePattern").hasError("pattern")),t.ɵɵadvance(5),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,3,"tb.rulenode.create-customer-if-not-exists")," "))},dependencies:t.ɵɵgetComponentDepsFactory(se),encapsulation:2})}}e("AssignCustomerConfigComponent",se);const pe=()=>({standalone:!0});function me(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",15),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.telemetryTypeTranslationsMap.get(e))," ")}}function de(e,n){1&e&&(t.ɵɵelementStart(0,"div",12),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",16),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.send-attributes-updated-notification-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"tb.rulenode.send-attributes-updated-notification")," "))}function ue(e,n){1&e&&(t.ɵɵelementStart(0,"div",12),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",17),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.notify-device-on-update-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"tb.rulenode.notify-device")," "))}class ce extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopeMap=o,this.attributeScopes=Object.keys(o),this.telemetryTypeTranslationsMap=l}configForm(){return this.attributesConfigForm}onConfigurationSet(e){this.attributesConfigForm=this.fb.group({scope:[e?e.scope:null,[N.required]],notifyDevice:[!e||e.notifyDevice,[]],sendAttributesUpdatedNotification:[!!e&&e.sendAttributesUpdatedNotification,[]],updateAttributesOnlyOnValueChange:[!!e&&e.updateAttributesOnlyOnValueChange,[]]}),this.attributesConfigForm.get("scope").valueChanges.subscribe((e=>{e!==o.SHARED_SCOPE&&this.attributesConfigForm.get("notifyDevice").patchValue(!1,{emitEvent:!1}),e===o.CLIENT_SCOPE&&this.attributesConfigForm.get("sendAttributesUpdatedNotification").patchValue(!1,{emitEvent:!1}),this.attributesConfigForm.get("updateAttributesOnlyOnValueChange").patchValue(!1,{emitEvent:!1})}))}static{this.ɵfac=function(e){return new(e||ce)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ce,selectors:[["tb-action-node-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:31,vars:24,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],[1,"flex"],["required","","matInput","","formControlName","scope",1,"tb-entity-type-select"],[3,"value",4,"ngFor","ngForOf"],["type","text","matInput","","readonly","","disabled","",3,"ngModel","ngModelOptions"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip"],["aria-hidden","false","aria-label","help-icon"],[1,"tb-settings"],["translate",""],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","updateAttributesOnlyOnValueChange",1,"mat-slide"],["class","tb-form-row no-border no-padding",3,"tb-hint-tooltip-icon",4,"ngIf"],[3,"value"],["formControlName","sendAttributesUpdatedNotification",1,"mat-slide"],["formControlName","notifyDevice",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵelement(2,"tb-example-hint",2),t.ɵɵelementStart(3,"div",3)(4,"mat-form-field",4)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",5),t.ɵɵtemplate(9,me,3,4,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",4)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",7),t.ɵɵelementStart(15,"button",8),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"mat-icon",9),t.ɵɵtext(18,"content_copy "),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(19,"section",1)(20,"mat-expansion-panel",10)(21,"mat-expansion-panel-header")(22,"mat-panel-title",11),t.ɵɵtext(23,"tb.rulenode.advanced-settings"),t.ɵɵelementEnd()(),t.ɵɵelementStart(24,"div",12),t.ɵɵpipe(25,"translate"),t.ɵɵelementStart(26,"mat-slide-toggle",13),t.ɵɵtext(27),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(29,de,5,6,"div",14)(30,ue,5,6,"div",14),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.attributesConfigForm),t.ɵɵadvance(2),t.ɵɵproperty("hintText","tb.rulenode.attributes-scope-hint"),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,13,"tb.rulenode.attributes-scope")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.attributeScopes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,15,"tb.rulenode.attributes-scope-value")),t.ɵɵadvance(2),t.ɵɵproperty("ngModel",n.attributesConfigForm.get("scope").value)("ngModelOptions",t.ɵɵpureFunction0(23,pe)),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(16,17,"tb.rulenode.attributes-scope-value-copy")),t.ɵɵproperty("cbContent",n.attributesConfigForm.get("scope").value),t.ɵɵadvance(9),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(25,19,n.attributesConfigForm.get("updateAttributesOnlyOnValueChange").value?"tb.rulenode.update-attributes-only-on-value-change-hint-enabled":"tb.rulenode.update-attributes-only-on-value-change-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(28,21,"tb.rulenode.update-attributes-only-on-value-change")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.attributesConfigForm.get("scope").value!==n.attributeScopeMap.CLIENT_SCOPE),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.attributesConfigForm.get("scope").value===n.attributeScopeMap.SHARED_SCOPE))},dependencies:t.ɵɵgetComponentDepsFactory(ce),encapsulation:2})}}e("AttributesConfigComponent",ce);const fe=["jsFuncComponent"],ge=["tbelFuncComponent"],he=()=>["msg","metadata","msgType"];function ye(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",12)}function be(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",13,0)(2,"button",14),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",15),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,he)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function ve(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",16,1)(2,"button",14),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",15),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,he))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}function xe(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.alarm-type-required")," "))}class Ce extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-details-function"}configForm(){return this.clearAlarmConfigForm}onConfigurationSet(e){this.clearAlarmConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:s.JS,[N.required]],alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[]],alarmDetailsBuildTbel:[e?e.alarmDetailsBuildTbel:null,[]],alarmType:[e?e.alarmType:null,[N.required]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.clearAlarmConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.clearAlarmConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.clearAlarmConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.clearAlarmConfigForm.get("alarmDetailsBuildJs").setValidators(t===s.JS?[N.required]:[]),this.clearAlarmConfigForm.get("alarmDetailsBuildJs").updateValueAndValidity({emitEvent:e}),this.clearAlarmConfigForm.get("alarmDetailsBuildTbel").setValidators(t===s.TBEL?[N.required]:[]),this.clearAlarmConfigForm.get("alarmDetailsBuildTbel").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),e}testScript(e){const t=this.clearAlarmConfigForm.get("scriptLang").value,n=t===s.JS?"alarmDetailsBuildJs":"alarmDetailsBuildTbel",r=t===s.JS?"rulenode/clear_alarm_node_script_fn":"rulenode/tbel/clear_alarm_node_script_fn",a=this.clearAlarmConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.clearAlarmConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.clearAlarmConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||Ce)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ce,selectors:[["tb-action-node-clear-alarm-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(fe,5),t.ɵɵviewQuery(ge,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:15,vars:8,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[1,"flex","flex-col",3,"formGroup"],["formControlName","scriptLang",4,"ngIf"],["formControlName","alarmDetailsBuildJs","functionName","Details","helpId","rulenode/clear_alarm_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","alarmDetailsBuildTbel","functionName","Details","helpId","rulenode/tbel/clear_alarm_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],[1,"flex","flex-row",2,"padding-bottom","16px"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","alarmType"],[4,"ngIf"],["formControlName","scriptLang"],["formControlName","alarmDetailsBuildJs","functionName","Details","helpId","rulenode/clear_alarm_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","alarmDetailsBuildTbel","functionName","Details","helpId","rulenode/tbel/clear_alarm_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2),t.ɵɵtemplate(1,ye,1,0,"tb-script-lang",3)(2,be,6,5,"tb-js-func",4)(3,ve,6,7,"tb-js-func",5),t.ɵɵelementStart(4,"div",6)(5,"button",7),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-form-field",8)(9,"mat-label",9),t.ɵɵtext(10,"tb.rulenode.alarm-type"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",10),t.ɵɵtemplate(12,xe,3,3,"mat-error",11),t.ɵɵelementStart(13,"mat-hint",9),t.ɵɵtext(14,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.clearAlarmConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.clearAlarmConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.clearAlarmConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,6,n.testScriptLabel)," "),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.clearAlarmConfigForm.get("alarmType").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(Ce),encapsulation:2})}}e("ClearAlarmConfigComponent",Ce);const Se=["jsFuncComponent"],Te=["tbelFuncComponent"],Ie=()=>["msg","metadata","msgType"];function Ee(e,n){1&e&&(t.ɵɵelementStart(0,"mat-checkbox",7),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.overwrite-alarm-details")," "))}function Fe(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",14)}function qe(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",15,0)(2,"button",16),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",17),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,Ie)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function Ae(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",18,1)(2,"button",16),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext(2);return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",17),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,Ie))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}function ke(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section",8),t.ɵɵtemplate(1,Fe,1,0,"tb-script-lang",9)(2,qe,6,5,"tb-js-func",10)(3,Ae,6,7,"tb-js-func",11),t.ɵɵelementStart(4,"div",12)(5,"button",13),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("scriptLang").value===e.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("scriptLang").value===e.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,4,e.testScriptLabel)," ")}}function Ne(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.alarm-type-required")," "))}function we(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",32),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.alarmSeverityTranslationMap.get(e))," ")}}function Me(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.alarm-severity-required")," "))}function Be(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",29)(1,"mat-label",20),t.ɵɵtext(2,"tb.rulenode.alarm-severity"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",30),t.ɵɵtemplate(4,we,3,4,"mat-option",31),t.ɵɵelementEnd(),t.ɵɵtemplate(5,Me,3,3,"mat-error",22),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.alarmSeverities),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("severity").hasError("required"))}}function Ve(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.alarm-severity-required")," "))}function Oe(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",19)(1,"mat-label",20),t.ɵɵtext(2,"tb.rulenode.alarm-severity-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",33),t.ɵɵtemplate(4,Ve,3,3,"mat-error",22),t.ɵɵelement(5,"mat-hint",34),t.ɵɵpipe(6,"translate"),t.ɵɵpipe(7,"safe"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("severity").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(7,4,t.ɵɵpipeBind1(6,2,"tb.rulenode.alarm-severity-pattern-hint"),"html"),t.ɵɵsanitizeHtml)}}function De(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-chip-row",38),t.ɵɵlistener("removed",(function(){const n=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext(3);return t.ɵɵresetView(r.removeKey(n,"relationTypes"))})),t.ɵɵtext(1),t.ɵɵelementStart(2,"mat-icon",39),t.ɵɵtext(3,"close"),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Le(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section")(1,"mat-form-field",35)(2,"mat-label",20),t.ɵɵtext(3,"tb.rulenode.relation-types-list"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-chip-grid",null,2),t.ɵɵtemplate(6,De,4,1,"mat-chip-row",36),t.ɵɵelementStart(7,"input",37),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("matChipInputTokenEnd",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.addKey(n,"relationTypes"))})),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"mat-hint",20),t.ɵɵtext(10,"tb.rulenode.relation-types-list-hint"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(5),n=t.ɵɵnextContext(2);t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.createAlarmConfigForm.get("relationTypes").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,5,"tb.rulenode.relation-types-list")),t.ɵɵproperty("matChipInputFor",e)("matChipInputSeparatorKeyCodes",n.separatorKeysCodes)("matChipInputAddOnBlur",!0)}}function Pe(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",8)(1,"mat-form-field",19)(2,"mat-label",20),t.ɵɵtext(3,"tb.rulenode.alarm-type"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",21),t.ɵɵtemplate(5,Ne,3,3,"mat-error",22),t.ɵɵelementStart(6,"mat-hint",20),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-checkbox",23),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(11,Be,6,2,"mat-form-field",24)(12,Oe,8,7,"mat-form-field",25),t.ɵɵelementStart(13,"mat-checkbox",26),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(16,Le,11,7,"section",22),t.ɵɵelementStart(17,"mat-checkbox",27),t.ɵɵtext(18),t.ɵɵpipe(19,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"mat-checkbox",28),t.ɵɵtext(21),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("alarmType").hasError("required")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(10,8,"tb.rulenode.use-alarm-severity-pattern")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!e.createAlarmConfigForm.get("dynamicSeverity").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.createAlarmConfigForm.get("dynamicSeverity").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,10,"tb.rulenode.propagate")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!0===e.createAlarmConfigForm.get("propagate").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(19,12,"tb.rulenode.propagate-to-owner")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(22,14,"tb.rulenode.propagate-to-tenant")," ")}}class Re extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.alarmSeverities=Object.keys(p),this.alarmSeverityTranslationMap=m,this.separatorKeysCodes=[U,H,z],this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-details-function"}configForm(){return this.createAlarmConfigForm}onConfigurationSet(e){this.createAlarmConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:s.JS,[N.required]],alarmDetailsBuildJs:[e?e.alarmDetailsBuildJs:null,[]],alarmDetailsBuildTbel:[e?e.alarmDetailsBuildTbel:null,[]],useMessageAlarmData:[!!e&&e.useMessageAlarmData,[]],overwriteAlarmDetails:[!!e&&e.overwriteAlarmDetails,[]],alarmType:[e?e.alarmType:null,[]],severity:[e?e.severity:null,[]],propagate:[!!e&&e.propagate,[]],relationTypes:[e?e.relationTypes:null,[]],propagateToOwner:[!!e&&e.propagateToOwner,[]],propagateToTenant:[!!e&&e.propagateToTenant,[]],dynamicSeverity:!1}),this.createAlarmConfigForm.get("dynamicSeverity").valueChanges.subscribe((e=>{e?this.createAlarmConfigForm.get("severity").patchValue("",{emitEvent:!1}):this.createAlarmConfigForm.get("severity").patchValue(this.alarmSeverities[0],{emitEvent:!1})}))}validatorTriggers(){return["useMessageAlarmData","overwriteAlarmDetails","scriptLang"]}updateValidators(e){const t=this.createAlarmConfigForm.get("useMessageAlarmData").value,n=this.createAlarmConfigForm.get("overwriteAlarmDetails").value;t?(this.createAlarmConfigForm.get("alarmType").setValidators([]),this.createAlarmConfigForm.get("severity").setValidators([])):(this.createAlarmConfigForm.get("alarmType").setValidators([N.required]),this.createAlarmConfigForm.get("severity").setValidators([N.required])),this.createAlarmConfigForm.get("alarmType").updateValueAndValidity({emitEvent:e}),this.createAlarmConfigForm.get("severity").updateValueAndValidity({emitEvent:e});let r=this.createAlarmConfigForm.get("scriptLang").value;r!==s.TBEL||this.tbelEnabled||(r=s.JS,this.createAlarmConfigForm.get("scriptLang").patchValue(r,{emitEvent:!1}),setTimeout((()=>{this.createAlarmConfigForm.updateValueAndValidity({emitEvent:!0})})));const a=!1===t||!0===n;this.createAlarmConfigForm.get("alarmDetailsBuildJs").setValidators(a&&r===s.JS?[N.required]:[]),this.createAlarmConfigForm.get("alarmDetailsBuildTbel").setValidators(a&&r===s.TBEL?[N.required]:[]),this.createAlarmConfigForm.get("alarmDetailsBuildJs").updateValueAndValidity({emitEvent:e}),this.createAlarmConfigForm.get("alarmDetailsBuildTbel").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),e}testScript(e){const t=this.createAlarmConfigForm.get("scriptLang").value,n=t===s.JS?"alarmDetailsBuildJs":"alarmDetailsBuildTbel",r=t===s.JS?"rulenode/create_alarm_node_script_fn":"rulenode/tbel/create_alarm_node_script_fn",a=this.createAlarmConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"json",this.translate.instant("tb.rulenode.details"),"Details",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.createAlarmConfigForm.get(n).setValue(e),this.changeScript.emit())}))}removeKey(e,t){const n=this.createAlarmConfigForm.get(t).value,r=n.indexOf(e);r>=0&&(n.splice(r,1),this.createAlarmConfigForm.get(t).setValue(n,{emitEvent:!0}))}addKey(e,t){const n=e.input;let r=e.value;if((r||"").trim()){r=r.trim();let e=this.createAlarmConfigForm.get(t).value;e&&-1!==e.indexOf(r)||(e||(e=[]),e.push(r),this.createAlarmConfigForm.get(t).setValue(e,{emitEvent:!0}))}n&&(n.value="")}onValidate(){const e=this.createAlarmConfigForm.get("useMessageAlarmData").value,t=this.createAlarmConfigForm.get("overwriteAlarmDetails").value;if(!e||t){this.createAlarmConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}}static{this.ɵfac=function(e){return new(e||Re)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Re,selectors:[["tb-action-node-create-alarm-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(Se,5),t.ɵɵviewQuery(Te,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:7,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],["relationTypesChipList",""],[1,"flex","flex-col",3,"formGroup"],["formControlName","useMessageAlarmData"],["formControlName","overwriteAlarmDetails",4,"ngIf"],["class","flex flex-col",4,"ngIf"],["formControlName","overwriteAlarmDetails"],[1,"flex","flex-col"],["formControlName","scriptLang",4,"ngIf"],["formControlName","alarmDetailsBuildJs","functionName","Details","helpId","rulenode/create_alarm_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","alarmDetailsBuildTbel","functionName","Details","helpId","rulenode/tbel/create_alarm_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],[1,"flex","flex-row",2,"padding-bottom","16px"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","scriptLang"],["formControlName","alarmDetailsBuildJs","functionName","Details","helpId","rulenode/create_alarm_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","alarmDetailsBuildTbel","functionName","Details","helpId","rulenode/tbel/create_alarm_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"],["subscriptSizing","dynamic",1,"flex-1"],["translate",""],["required","","matInput","","formControlName","alarmType"],[4,"ngIf"],["formControlName","dynamicSeverity"],["class","flex-1",4,"ngIf"],["class","flex-1","subscriptSizing","dynamic",4,"ngIf"],["formControlName","propagate"],["formControlName","propagateToOwner"],["formControlName","propagateToTenant"],[1,"flex-1"],["formControlName","severity","required",""],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["matInput","","formControlName","severity","required",""],[3,"innerHTML"],["floatLabel","always","subscriptSizing","dynamic",1,"mat-block"],[3,"removed",4,"ngFor","ngForOf"],["matInput","","type","text",3,"matChipInputTokenEnd","placeholder","matChipInputFor","matChipInputSeparatorKeyCodes","matChipInputAddOnBlur"],[3,"removed"],["matChipRemove",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",3)(1,"mat-checkbox",4),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Ee,3,3,"mat-checkbox",5)(5,ke,8,6,"section",6)(6,Pe,23,16,"section",6),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.createAlarmConfigForm),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,5,"tb.rulenode.use-message-alarm-data")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!0===n.createAlarmConfigForm.get("useMessageAlarmData").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!1===n.createAlarmConfigForm.get("useMessageAlarmData").value||!0===n.createAlarmConfigForm.get("overwriteAlarmDetails").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!1===n.createAlarmConfigForm.get("useMessageAlarmData").value))},dependencies:t.ɵɵgetComponentDepsFactory(Re),encapsulation:2})}}function _e(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.directionTypeTranslations.get(e))," ")}}function je(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",22)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",23),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,e.entityTypeNamePatternTranslation.get(e.createRelationConfigForm.get("entityType").value)))}}function Ge(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field",22)(1,"mat-label",5),t.ɵɵtext(2,"tb.rulenode.profile-name"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",24),t.ɵɵelementEnd())}function Ke(e,n){1&e&&t.ɵɵelement(0,"tb-example-hint",25),2&e&&t.ɵɵproperty("hintText","tb.rulenode.kv-map-pattern-hint")}function Ue(e,n){1&e&&(t.ɵɵelementStart(0,"div",26),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",27),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.create-entity-if-not-exists-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"tb.rulenode.create-entity-if-not-exists")," "))}e("CreateAlarmConfigComponent",Re);class He extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(d),this.directionTypeTranslations=new Map([[d.FROM,"tb.rulenode.search-direction-from"],[d.TO,"tb.rulenode.search-direction-to"]]),this.entityType=u,this.entityTypeNamePatternTranslation=new Map([[u.DEVICE,"tb.rulenode.device-name-pattern"],[u.ASSET,"tb.rulenode.asset-name-pattern"],[u.ENTITY_VIEW,"tb.rulenode.entity-view-name-pattern"],[u.CUSTOMER,"tb.rulenode.customer-title-pattern"],[u.USER,"tb.rulenode.user-name-pattern"],[u.DASHBOARD,"tb.rulenode.dashboard-name-pattern"],[u.EDGE,"tb.rulenode.edge-name-pattern"]]),this.allowedEntityTypes=[u.DEVICE,u.ASSET,u.ENTITY_VIEW,u.TENANT,u.CUSTOMER,u.USER,u.DASHBOARD,u.EDGE]}configForm(){return this.createRelationConfigForm}onConfigurationSet(e){this.createRelationConfigForm=this.fb.group({direction:[e?e.direction:null,[N.required]],entityType:[e?e.entityType:null,[N.required]],entityNamePattern:[e?e.entityNamePattern:null,[]],entityTypePattern:[e?e.entityTypePattern:null,[]],relationType:[e?e.relationType:null,[N.required]],createEntityIfNotExists:[!!e&&e.createEntityIfNotExists,[]],removeCurrentRelations:[!!e&&e.removeCurrentRelations,[]],changeOriginatorToRelatedEntity:[!!e&&e.changeOriginatorToRelatedEntity,[]]})}validatorTriggers(){return["entityType","createEntityIfNotExists"]}updateValidators(e){const t=this.createRelationConfigForm.get("entityType").value;if(t?this.createRelationConfigForm.get("entityNamePattern").setValidators([N.required,N.pattern(/.*\S.*/)]):this.createRelationConfigForm.get("entityNamePattern").setValidators([]),!t||t!==u.DEVICE&&t!==u.ASSET)this.createRelationConfigForm.get("entityTypePattern").setValidators([]);else{const e=[N.pattern(/.*\S.*/)];this.createRelationConfigForm.get("createEntityIfNotExists").value&&e.push(N.required),this.createRelationConfigForm.get("entityTypePattern").setValidators(e)}this.createRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e}),this.createRelationConfigForm.get("entityTypePattern").updateValueAndValidity({emitEvent:e})}prepareOutputConfig(e){return e.entityNamePattern=e.entityNamePattern?e.entityNamePattern.trim():null,e.entityTypePattern=e.entityTypePattern?e.entityTypePattern.trim():null,e}static{this.ɵfac=function(e){return new(e||He)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:He,selectors:[["tb-action-node-create-relation-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:36,vars:19,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[1,"tb-form-panel","stroked","no-padding-bottom"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-col"],["hideRequiredMarker","",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","direction"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","relationType"],[1,"flex","flex-row","gap-4"],["showLabel","","required","","formControlName","entityType",1,"flex-1",3,"allowedEntityTypes"],["class","mat-block flex-1",4,"ngIf"],[3,"hintText",4,"ngIf"],["style","margin-bottom: 18px","class","tb-form-row no-border no-padding",3,"tb-hint-tooltip-icon",4,"ngIf"],[1,"tb-form-panel","stroked","no-padding"],[1,"tb-settings"],[2,"padding","16px"],[1,"tb-form-panel","no-border","no-padding-top"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","removeCurrentRelations",1,"mat-slide"],["formControlName","changeOriginatorToRelatedEntity",1,"mat-slide"],[3,"value"],[1,"mat-block","flex-1"],["required","","matInput","","formControlName","entityNamePattern"],["matInput","","formControlName","entityTypePattern"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding",2,"margin-bottom","18px",3,"tb-hint-tooltip-icon"],["formControlName","createEntityIfNotExists",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.relation-parameters"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3)(5,"mat-form-field",4)(6,"mat-label",5),t.ɵɵtext(7,"relation.direction"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",6),t.ɵɵtemplate(9,_e,3,4,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelement(10,"tb-relation-type-autocomplete",8),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"div",1)(12,"div",2),t.ɵɵtext(13,"tb.rulenode.target-entity"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"div",9),t.ɵɵelement(15,"tb-entity-type-select",10),t.ɵɵtemplate(16,je,5,3,"mat-form-field",11)(17,Ge,4,0,"mat-form-field",11),t.ɵɵelementEnd(),t.ɵɵtemplate(18,Ke,1,1,"tb-example-hint",12)(19,Ue,5,6,"div",13),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"section",14)(21,"mat-expansion-panel",15)(22,"mat-expansion-panel-header",16)(23,"mat-panel-title",5),t.ɵɵtext(24,"tb.rulenode.advanced-settings"),t.ɵɵelementEnd()(),t.ɵɵelementStart(25,"div",17)(26,"div",18),t.ɵɵpipe(27,"translate"),t.ɵɵelementStart(28,"mat-slide-toggle",19),t.ɵɵtext(29),t.ɵɵpipe(30,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(31,"div",18),t.ɵɵpipe(32,"translate"),t.ɵɵelementStart(33,"mat-slide-toggle",20),t.ɵɵtext(34),t.ɵɵpipe(35,"translate"),t.ɵɵelementEnd()()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.createRelationConfigForm),t.ɵɵadvance(9),t.ɵɵproperty("ngForOf",n.directionTypes),t.ɵɵadvance(6),t.ɵɵproperty("allowedEntityTypes",n.allowedEntityTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.createRelationConfigForm.get("entityType").value&&n.createRelationConfigForm.get("entityType").value!==n.entityType.TENANT),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.createRelationConfigForm.get("entityType").value===n.entityType.DEVICE||n.createRelationConfigForm.get("entityType").value===n.entityType.ASSET),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.createRelationConfigForm.get("entityType").value===n.entityType.CUSTOMER||n.createRelationConfigForm.get("entityType").value===n.entityType.DEVICE||n.createRelationConfigForm.get("entityType").value===n.entityType.ASSET),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.createRelationConfigForm.get("entityType").value===n.entityType.CUSTOMER||n.createRelationConfigForm.get("entityType").value===n.entityType.DEVICE||n.createRelationConfigForm.get("entityType").value===n.entityType.ASSET),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(27,11,"tb.rulenode.remove-current-relations-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(30,13,"tb.rulenode.remove-current-relations")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(32,15,"tb.rulenode.change-originator-to-related-entity-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(35,17,"tb.rulenode.change-originator-to-related-entity")," "))},dependencies:t.ɵɵgetComponentDepsFactory(He),encapsulation:2})}}function ze(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",13),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.directionTypeTranslations.get(e))," ")}}function $e(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",18)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",19),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,1,e.entityTypeNamePatternTranslation.get(e.deleteRelationConfigForm.get("entityType").value)))}}function Qe(e,n){1&e&&t.ɵɵelement(0,"tb-example-hint",20),2&e&&t.ɵɵproperty("hintText","tb.rulenode.kv-map-single-pattern-hint")}function Je(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"div",14),t.ɵɵelement(2,"tb-entity-type-select",15),t.ɵɵtemplate(3,$e,5,3,"mat-form-field",16),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Qe,1,1,"tb-example-hint",17),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵproperty("allowedEntityTypes",e.allowedEntityTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.deleteRelationConfigForm.get("entityType").value&&e.deleteRelationConfigForm.get("entityType").value!==e.entityType.TENANT),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.deleteRelationConfigForm.get("entityType").value&&e.deleteRelationConfigForm.get("entityType").value!==e.entityType.TENANT)}}e("CreateRelationConfigComponent",He);class Ye extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(d),this.directionTypeTranslations=new Map([[d.FROM,"tb.rulenode.del-relation-direction-from"],[d.TO,"tb.rulenode.del-relation-direction-to"]]),this.entityTypeNamePatternTranslation=new Map([[u.DEVICE,"tb.rulenode.device-name-pattern"],[u.ASSET,"tb.rulenode.asset-name-pattern"],[u.ENTITY_VIEW,"tb.rulenode.entity-view-name-pattern"],[u.CUSTOMER,"tb.rulenode.customer-title-pattern"],[u.USER,"tb.rulenode.user-name-pattern"],[u.DASHBOARD,"tb.rulenode.dashboard-name-pattern"],[u.EDGE,"tb.rulenode.edge-name-pattern"]]),this.entityType=u,this.allowedEntityTypes=[u.DEVICE,u.ASSET,u.ENTITY_VIEW,u.TENANT,u.CUSTOMER,u.USER,u.DASHBOARD,u.EDGE]}configForm(){return this.deleteRelationConfigForm}onConfigurationSet(e){this.deleteRelationConfigForm=this.fb.group({deleteForSingleEntity:[!!e&&e.deleteForSingleEntity,[]],direction:[e?e.direction:null,[N.required]],entityType:[e?e.entityType:null,[]],entityNamePattern:[e?e.entityNamePattern:null,[]],relationType:[e?e.relationType:null,[N.required]]})}validatorTriggers(){return["deleteForSingleEntity","entityType"]}updateValidators(e){const t=this.deleteRelationConfigForm.get("deleteForSingleEntity").value,n=this.deleteRelationConfigForm.get("entityType").value;t?this.deleteRelationConfigForm.get("entityType").setValidators([N.required]):this.deleteRelationConfigForm.get("entityType").setValidators([]),t&&n&&n!==u.TENANT?this.deleteRelationConfigForm.get("entityNamePattern").setValidators([N.required,N.pattern(/.*\S.*/)]):this.deleteRelationConfigForm.get("entityNamePattern").setValidators([]),this.deleteRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:!1}),this.deleteRelationConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e})}prepareOutputConfig(e){return e.entityNamePattern=e.entityNamePattern?e.entityNamePattern.trim():null,e}static{this.ɵfac=function(e){return new(e||Ye)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ye,selectors:[["tb-action-node-delete-relation-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:18,vars:9,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[1,"tb-form-panel","stroked","no-padding-bottom"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-col"],["hideRequiredMarker","",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","direction"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","relationType"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","deleteForSingleEntity",1,"mat-slide"],[4,"ngIf"],[3,"value"],[1,"flex","flex-row","gap-2.5"],["showLabel","","required","","formControlName","entityType",1,"flex-1",3,"allowedEntityTypes"],["class","mat-block flex-1",4,"ngIf"],[3,"hintText",4,"ngIf"],[1,"mat-block","flex-1"],["required","","matInput","","formControlName","entityNamePattern"],[3,"hintText"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.relation-parameters"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3)(5,"mat-form-field",4)(6,"mat-label",5),t.ɵɵtext(7,"relation.direction"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",6),t.ɵɵtemplate(9,ze,3,4,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelement(10,"tb-relation-type-autocomplete",8),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"div",9)(12,"div",10),t.ɵɵpipe(13,"translate"),t.ɵɵelementStart(14,"mat-slide-toggle",11),t.ɵɵtext(15),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(17,Je,5,3,"div",12),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.deleteRelationConfigForm),t.ɵɵadvance(9),t.ɵɵproperty("ngForOf",n.directionTypes),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(13,5,"tb.rulenode.delete-relation-with-specific-entity-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(16,7,"tb.rulenode.delete-relation-with-specific-entity")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deleteRelationConfigForm.get("deleteForSingleEntity").value))},dependencies:t.ɵɵgetComponentDepsFactory(Ye),encapsulation:2})}}e("DeleteRelationConfigComponent",Ye);class We extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.deviceProfile}onConfigurationSet(e){this.deviceProfile=this.fb.group({persistAlarmRulesState:[!!e&&e.persistAlarmRulesState],fetchAlarmRulesStateOnStart:[!!e&&e.fetchAlarmRulesStateOnStart]})}validatorTriggers(){return["persistAlarmRulesState"]}updateValidators(e){this.deviceProfile.get("persistAlarmRulesState").value?this.deviceProfile.get("fetchAlarmRulesStateOnStart").enable({emitEvent:!1}):(this.deviceProfile.get("fetchAlarmRulesStateOnStart").setValue(!1,{emitEvent:!1}),this.deviceProfile.get("fetchAlarmRulesStateOnStart").disable({emitEvent:!1})),this.deviceProfile.get("fetchAlarmRulesStateOnStart").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||We)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:We,selectors:[["tb-device-profile-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:13,vars:13,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-hint","tb-primary-fill"],[1,"tb-form-row","no-border","no-padding","slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","persistAlarmRulesState",1,"mat-slide"],["formControlName","fetchAlarmRulesStateOnStart",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.device-profile-node-hint"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2),t.ɵɵpipe(4,"translate"),t.ɵɵelementStart(5,"mat-slide-toggle",3),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",2),t.ɵɵpipe(9,"translate"),t.ɵɵelementStart(10,"mat-slide-toggle",4),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.deviceProfile),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(4,5,"tb.rulenode.persist-alarm-rules-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,7,"tb.rulenode.persist-alarm-rules")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(9,9,"tb.rulenode.fetch-alarm-rules-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,11,"tb.rulenode.fetch-alarm-rules")," "))},dependencies:t.ɵɵgetComponentDepsFactory(We),encapsulation:2})}}e("DeviceProfileConfigComponent",We);const Xe=["jsFuncComponent"],Ze=["tbelFuncComponent"],et=()=>["prevMsg","prevMetadata","prevMsgType"];function tt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.message-count-required")," "))}function nt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-message-count-message")," "))}function rt(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.generation-frequency-required")," "))}function at(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-generation-frequency-message")," "))}function it(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-select",22)(1,"tb-toggle-option",23),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"tb-toggle-option",23),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵproperty("value",e.scriptLanguage.TBEL),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,4,"tb.rulenode.script-lang-tbel")," "),t.ɵɵadvance(2),t.ɵɵproperty("value",e.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,6,"tb.rulenode.script-lang-js")," ")}}function ot(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",18,0),t.ɵɵtemplate(2,it,7,8,"tb-toggle-select",19),t.ɵɵelementStart(3,"button",20),t.ɵɵpipe(4,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(5,"mat-icon",21),t.ɵɵtext(6,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(5,et)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.tbelEnabled),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(4,3,e.testScriptLabel))}}function lt(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",24,1)(2,"tb-toggle-select",22)(3,"tb-toggle-option",23),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"tb-toggle-option",23),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"button",20),t.ɵɵpipe(10,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(11,"mat-icon",21),t.ɵɵtext(12,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(14,et))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵproperty("value",e.scriptLanguage.TBEL),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,8,"tb.rulenode.script-lang-tbel")," "),t.ɵɵadvance(2),t.ɵɵproperty("value",e.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(8,10,"tb.rulenode.script-lang-js")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(10,12,e.testScriptLabel))}}class st extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.allowedEntityTypes=[u.DEVICE,u.ASSET,u.ENTITY_VIEW,u.CUSTOMER,u.USER,u.DASHBOARD],this.additionEntityTypes={TENANT:this.translate.instant("tb.rulenode.current-tenant"),RULE_NODE:this.translate.instant("tb.rulenode.current-rule-node")},this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-generator-function"}configForm(){return this.generatorConfigForm}onConfigurationSet(e){this.generatorConfigForm=this.fb.group({msgCount:[e?e.msgCount:null,[N.required,N.min(0)]],periodInSeconds:[e?e.periodInSeconds:null,[N.required,N.min(1)]],originator:[e?e.originator:{id:null,entityType:u.RULE_NODE},[]],scriptLang:[e?e.scriptLang:s.JS,[N.required]],jsScript:[e?e.jsScript:null,[]],tbelScript:[e?e.tbelScript:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.generatorConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.generatorConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.generatorConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.generatorConfigForm.get("jsScript").setValidators(t===s.JS?[N.required]:[]),this.generatorConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.generatorConfigForm.get("tbelScript").setValidators(t===s.TBEL?[N.required]:[]),this.generatorConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return{msgCount:P(e?.msgCount)?e?.msgCount:0,periodInSeconds:P(e?.periodInSeconds)?e?.periodInSeconds:1,originator:{id:P(e?.originatorId)?e?.originatorId:null,entityType:P(e?.originatorType)?e?.originatorType:u.RULE_NODE},scriptLang:P(e?.scriptLang)?e?.scriptLang:s.JS,tbelScript:P(e?.tbelScript)?e?.tbelScript:null,jsScript:P(e?.jsScript)?e?.jsScript:null}}prepareOutputConfig(e){return e.originator?(e.originatorId=e.originator.id,e.originatorType=e.originator.entityType):(e.originatorId=null,e.originatorType=null),delete e.originator,e}testScript(e){const t=this.generatorConfigForm.get("scriptLang").value,n=t===s.JS?"jsScript":"tbelScript",r=t===s.JS?"rulenode/generator_node_script_fn":"rulenode/tbel/generator_node_script_fn",a=this.generatorConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"generate",this.translate.instant("tb.rulenode.generator"),"Generate",["prevMsg","prevMetadata","prevMsgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.generatorConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.generatorConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||st)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:st,selectors:[["tb-action-node-generator-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(Xe,5),t.ɵɵviewQuery(Ze,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:32,vars:12,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","no-padding-bottom","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs"],[1,"flex"],["translate",""],["required","","type","number","min","0","step","1","matInput","","formControlName","msgCount"],[4,"ngIf"],["required","","type","number","min","1","step","1","matInput","","formControlName","periodInSeconds"],["required","true","useAliasEntityTypes","true","formControlName","originator",1,"flex-1",3,"allowedEntityTypes","additionEntityTypes"],[1,"tb-form-panel","stroked"],["expanded","",1,"tb-settings"],["formControlName","jsScript","functionName","Generate","helpId","rulenode/generator_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","tbelScript","functionName","Generate","helpId","rulenode/tbel/generator_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],[1,"flex","flex-row",2,"padding-bottom","16px"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","jsScript","functionName","Generate","helpId","rulenode/generator_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarPrefixButton","","formControlName","scriptLang","appearance","fill",4,"ngIf"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["toolbarPrefixButton","","formControlName","scriptLang","appearance","fill"],[3,"value"],["formControlName","tbelScript","functionName","Generate","helpId","rulenode/tbel/generator_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2)(1,"div",3)(2,"div",4),t.ɵɵtext(3,"tb.rulenode.generation-parameters"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",5)(5,"mat-form-field",6)(6,"mat-label",7),t.ɵɵtext(7,"tb.rulenode.message-count"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",8),t.ɵɵtemplate(9,tt,3,3,"mat-error",9)(10,nt,3,3,"mat-error",9),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-form-field",6)(12,"mat-label",7),t.ɵɵtext(13,"tb.rulenode.generation-frequency-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",10),t.ɵɵtemplate(15,rt,3,3,"mat-error",9)(16,at,3,3,"mat-error",9),t.ɵɵelementEnd()()(),t.ɵɵelementStart(17,"div",3)(18,"div",4),t.ɵɵtext(19,"tb.rulenode.originator"),t.ɵɵelementEnd(),t.ɵɵelement(20,"tb-entity-select",11),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"div",12)(22,"mat-expansion-panel",13)(23,"mat-expansion-panel-header")(24,"mat-panel-title",7),t.ɵɵtext(25,"tb.rulenode.generator-function"),t.ɵɵelementEnd()(),t.ɵɵtemplate(26,ot,7,6,"tb-js-func",14)(27,lt,13,15,"tb-js-func",15),t.ɵɵelementStart(28,"div",16)(29,"button",17),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.generatorConfigForm),t.ɵɵadvance(9),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("msgCount").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("msgCount").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("periodInSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("periodInSeconds").hasError("min")),t.ɵɵadvance(4),t.ɵɵproperty("allowedEntityTypes",n.allowedEntityTypes)("additionEntityTypes",n.additionEntityTypes),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.generatorConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(31,10,n.testScriptLabel)," "))},dependencies:t.ɵɵgetComponentDepsFactory(st),styles:["[_nghost-%COMP%] .mat-button-toggle-group{min-width:120px;height:24px!important}[_nghost-%COMP%] .mat-button-toggle-group .mat-button-toggle{font-size:0}[_nghost-%COMP%] .mat-button-toggle-group .mat-button-toggle .mat-button-toggle-button{height:20px!important;line-height:20px!important;border:none!important}[_nghost-%COMP%] .mat-button-toggle-group .mat-button-toggle .mat-button-toggle-button .mat-button-toggle-label-content{font-size:14px!important;line-height:20px!important}@media screen and (min-width: 599px){[_nghost-%COMP%] .tb-entity-select{display:flex;flex-direction:row;gap:16px}}[_nghost-%COMP%] .tb-entity-select tb-entity-type-select{flex:1}[_nghost-%COMP%] .tb-entity-select tb-entity-autocomplete{flex:1}[_nghost-%COMP%] .tb-entity-select tb-entity-autocomplete mat-form-field{width:100%!important}"]})}}var pt;e("GeneratorConfigComponent",st),function(e){e.CUSTOMER="CUSTOMER",e.TENANT="TENANT",e.RELATED="RELATED",e.ALARM_ORIGINATOR="ALARM_ORIGINATOR",e.ENTITY="ENTITY"}(pt||(pt={}));const mt=new Map([[pt.CUSTOMER,"tb.rulenode.originator-customer"],[pt.TENANT,"tb.rulenode.originator-tenant"],[pt.RELATED,"tb.rulenode.originator-related"],[pt.ALARM_ORIGINATOR,"tb.rulenode.originator-alarm-originator"],[pt.ENTITY,"tb.rulenode.originator-entity"]]),dt=new Map([[pt.CUSTOMER,"tb.rulenode.originator-customer-desc"],[pt.TENANT,"tb.rulenode.originator-tenant-desc"],[pt.RELATED,"tb.rulenode.originator-related-entity-desc"],[pt.ALARM_ORIGINATOR,"tb.rulenode.originator-alarm-originator-desc"],[pt.ENTITY,"tb.rulenode.originator-entity-by-name-pattern-desc"]]),ut=[c.createdTime,c.name,{value:"type",name:"tb.rulenode.profile-name",keyName:"originatorProfileName"},c.firstName,c.lastName,c.email,c.title,c.country,c.state,c.city,c.address,c.address2,c.zip,c.phone,c.label,{value:"id",name:"tb.rulenode.id",keyName:"id"},{value:"additionalInfo",name:"tb.rulenode.additional-info",keyName:"additionalInfo"}],ct=new Map([["type","profileName"],["createdTime","createdTime"],["name","name"],["firstName","firstName"],["lastName","lastName"],["email","email"],["title","title"],["country","country"],["state","state"],["city","city"],["address","address"],["address2","address2"],["zip","zip"],["phone","phone"],["label","label"],["id","id"],["additionalInfo","additionalInfo"]]);var ft;!function(e){e.CIRCLE="CIRCLE",e.POLYGON="POLYGON"}(ft||(ft={}));const gt=new Map([[ft.CIRCLE,"tb.rulenode.perimeter-circle"],[ft.POLYGON,"tb.rulenode.perimeter-polygon"]]);var ht;!function(e){e.MILLISECONDS="MILLISECONDS",e.SECONDS="SECONDS",e.MINUTES="MINUTES",e.HOURS="HOURS",e.DAYS="DAYS"}(ht||(ht={}));const yt=new Map([[ht.MILLISECONDS,"tb.rulenode.time-unit-milliseconds"],[ht.SECONDS,"tb.rulenode.time-unit-seconds"],[ht.MINUTES,"tb.rulenode.time-unit-minutes"],[ht.HOURS,"tb.rulenode.time-unit-hours"],[ht.DAYS,"tb.rulenode.time-unit-days"]]);var bt;!function(e){e.METER="METER",e.KILOMETER="KILOMETER",e.FOOT="FOOT",e.MILE="MILE",e.NAUTICAL_MILE="NAUTICAL_MILE"}(bt||(bt={}));const vt=new Map([[bt.METER,"tb.rulenode.range-unit-meter"],[bt.KILOMETER,"tb.rulenode.range-unit-kilometer"],[bt.FOOT,"tb.rulenode.range-unit-foot"],[bt.MILE,"tb.rulenode.range-unit-mile"],[bt.NAUTICAL_MILE,"tb.rulenode.range-unit-nautical-mile"]]);var xt;!function(e){e.ID="ID",e.TITLE="TITLE",e.COUNTRY="COUNTRY",e.STATE="STATE",e.CITY="CITY",e.ZIP="ZIP",e.ADDRESS="ADDRESS",e.ADDRESS2="ADDRESS2",e.PHONE="PHONE",e.EMAIL="EMAIL",e.ADDITIONAL_INFO="ADDITIONAL_INFO"}(xt||(xt={}));const Ct=new Map([[xt.ID,"tb.rulenode.entity-details-id"],[xt.TITLE,"tb.rulenode.entity-details-title"],[xt.COUNTRY,"tb.rulenode.entity-details-country"],[xt.STATE,"tb.rulenode.entity-details-state"],[xt.CITY,"tb.rulenode.entity-details-city"],[xt.ZIP,"tb.rulenode.entity-details-zip"],[xt.ADDRESS,"tb.rulenode.entity-details-address"],[xt.ADDRESS2,"tb.rulenode.entity-details-address2"],[xt.PHONE,"tb.rulenode.entity-details-phone"],[xt.EMAIL,"tb.rulenode.entity-details-email"],[xt.ADDITIONAL_INFO,"tb.rulenode.entity-details-additional_info"]]);var St;!function(e){e.FIRST="FIRST",e.LAST="LAST",e.ALL="ALL"}(St||(St={}));const Tt=new Map([[St.FIRST,"tb.rulenode.first"],[St.LAST,"tb.rulenode.last"],[St.ALL,"tb.rulenode.all"]]),It=new Map([[St.FIRST,"tb.rulenode.first-mode-hint"],[St.LAST,"tb.rulenode.last-mode-hint"],[St.ALL,"tb.rulenode.all-mode-hint"]]);var Et,Ft;!function(e){e.ASC="ASC",e.DESC="DESC"}(Et||(Et={})),function(e){e.ATTRIBUTES="ATTRIBUTES",e.LATEST_TELEMETRY="LATEST_TELEMETRY",e.FIELDS="FIELDS"}(Ft||(Ft={}));const qt=new Map([[Ft.ATTRIBUTES,"tb.rulenode.attributes"],[Ft.LATEST_TELEMETRY,"tb.rulenode.latest-telemetry"],[Ft.FIELDS,"tb.rulenode.fields"]]),At=new Map([[Ft.ATTRIBUTES,"tb.rulenode.add-mapped-attribute-to"],[Ft.LATEST_TELEMETRY,"tb.rulenode.add-mapped-latest-telemetry-to"],[Ft.FIELDS,"tb.rulenode.add-mapped-fields-to"]]),kt=new Map([[Et.ASC,"tb.rulenode.ascending"],[Et.DESC,"tb.rulenode.descending"]]);var Nt;!function(e){e.STANDARD="STANDARD",e.FIFO="FIFO"}(Nt||(Nt={}));const wt=new Map([[Nt.STANDARD,"tb.rulenode.sqs-queue-standard"],[Nt.FIFO,"tb.rulenode.sqs-queue-fifo"]]),Mt=["anonymous","basic","cert.PEM"],Bt=new Map([["anonymous","tb.rulenode.credentials-anonymous"],["basic","tb.rulenode.credentials-basic"],["cert.PEM","tb.rulenode.credentials-pem"]]),Vt=["sas","cert.PEM"],Ot=new Map([["sas","tb.rulenode.credentials-sas"],["cert.PEM","tb.rulenode.credentials-pem"]]);var Dt;!function(e){e.GET="GET",e.POST="POST",e.PUT="PUT",e.DELETE="DELETE"}(Dt||(Dt={}));const Lt=["US-ASCII","ISO-8859-1","UTF-8","UTF-16BE","UTF-16LE","UTF-16"],Pt=new Map([["US-ASCII","tb.rulenode.charset-us-ascii"],["ISO-8859-1","tb.rulenode.charset-iso-8859-1"],["UTF-8","tb.rulenode.charset-utf-8"],["UTF-16BE","tb.rulenode.charset-utf-16be"],["UTF-16LE","tb.rulenode.charset-utf-16le"],["UTF-16","tb.rulenode.charset-utf-16"]]);var Rt;!function(e){e.CUSTOM="CUSTOM",e.ADD="ADD",e.SUB="SUB",e.MULT="MULT",e.DIV="DIV",e.SIN="SIN",e.SINH="SINH",e.COS="COS",e.COSH="COSH",e.TAN="TAN",e.TANH="TANH",e.ACOS="ACOS",e.ASIN="ASIN",e.ATAN="ATAN",e.ATAN2="ATAN2",e.EXP="EXP",e.EXPM1="EXPM1",e.SQRT="SQRT",e.CBRT="CBRT",e.GET_EXP="GET_EXP",e.HYPOT="HYPOT",e.LOG="LOG",e.LOG10="LOG10",e.LOG1P="LOG1P",e.CEIL="CEIL",e.FLOOR="FLOOR",e.FLOOR_DIV="FLOOR_DIV",e.FLOOR_MOD="FLOOR_MOD",e.ABS="ABS",e.MIN="MIN",e.MAX="MAX",e.POW="POW",e.SIGNUM="SIGNUM",e.RAD="RAD",e.DEG="DEG"}(Rt||(Rt={}));const _t=new Map([[Rt.CUSTOM,{value:Rt.CUSTOM,name:"Custom Function",description:"Use this function to specify complex mathematical expression.",minArgs:1,maxArgs:16}],[Rt.ADD,{value:Rt.ADD,name:"Addition",description:"x + y",minArgs:2,maxArgs:2}],[Rt.SUB,{value:Rt.SUB,name:"Subtraction",description:"x - y",minArgs:2,maxArgs:2}],[Rt.MULT,{value:Rt.MULT,name:"Multiplication",description:"x * y",minArgs:2,maxArgs:2}],[Rt.DIV,{value:Rt.DIV,name:"Division",description:"x / y",minArgs:2,maxArgs:2}],[Rt.SIN,{value:Rt.SIN,name:"Sine",description:"Returns the trigonometric sine of an angle in radians.",minArgs:1,maxArgs:1}],[Rt.SINH,{value:Rt.SINH,name:"Hyperbolic sine",description:"Returns the hyperbolic sine of an argument.",minArgs:1,maxArgs:1}],[Rt.COS,{value:Rt.COS,name:"Cosine",description:"Returns the trigonometric cosine of an angle in radians.",minArgs:1,maxArgs:1}],[Rt.COSH,{value:Rt.COSH,name:"Hyperbolic cosine",description:"Returns the hyperbolic cosine of an argument.",minArgs:1,maxArgs:1}],[Rt.TAN,{value:Rt.TAN,name:"Tangent",description:"Returns the trigonometric tangent of an angle in radians",minArgs:1,maxArgs:1}],[Rt.TANH,{value:Rt.TANH,name:"Hyperbolic tangent",description:"Returns the hyperbolic tangent of an argument",minArgs:1,maxArgs:1}],[Rt.ACOS,{value:Rt.ACOS,name:"Arc cosine",description:"Returns the arc cosine of an argument",minArgs:1,maxArgs:1}],[Rt.ASIN,{value:Rt.ASIN,name:"Arc sine",description:"Returns the arc sine of an argument",minArgs:1,maxArgs:1}],[Rt.ATAN,{value:Rt.ATAN,name:"Arc tangent",description:"Returns the arc tangent of an argument",minArgs:1,maxArgs:1}],[Rt.ATAN2,{value:Rt.ATAN2,name:"2-argument arc tangent",description:"Returns the angle theta from the conversion of rectangular coordinates (x, y) to polar coordinates (r, theta)",minArgs:2,maxArgs:2}],[Rt.EXP,{value:Rt.EXP,name:"Exponential",description:"Returns Euler's number e raised to the power of an argument",minArgs:1,maxArgs:1}],[Rt.EXPM1,{value:Rt.EXPM1,name:"Exponential minus one",description:"Returns Euler's number e raised to the power of an argument minus one",minArgs:1,maxArgs:1}],[Rt.SQRT,{value:Rt.SQRT,name:"Square",description:"Returns the correctly rounded positive square root of an argument",minArgs:1,maxArgs:1}],[Rt.CBRT,{value:Rt.CBRT,name:"Cube root",description:"Returns the cube root of an argument",minArgs:1,maxArgs:1}],[Rt.GET_EXP,{value:Rt.GET_EXP,name:"Get exponent",description:"Returns the unbiased exponent used in the representation of an argument",minArgs:1,maxArgs:1}],[Rt.HYPOT,{value:Rt.HYPOT,name:"Square root",description:"Returns the square root of the squares of the arguments",minArgs:2,maxArgs:2}],[Rt.LOG,{value:Rt.LOG,name:"Logarithm",description:"Returns the natural logarithm of an argument",minArgs:1,maxArgs:1}],[Rt.LOG10,{value:Rt.LOG10,name:"Base 10 logarithm",description:"Returns the base 10 logarithm of an argument",minArgs:1,maxArgs:1}],[Rt.LOG1P,{value:Rt.LOG1P,name:"Logarithm of the sum",description:"Returns the natural logarithm of the sum of an argument",minArgs:1,maxArgs:1}],[Rt.CEIL,{value:Rt.CEIL,name:"Ceiling",description:"Returns the smallest (closest to negative infinity) of an argument",minArgs:1,maxArgs:1}],[Rt.FLOOR,{value:Rt.FLOOR,name:"Floor",description:"Returns the largest (closest to positive infinity) of an argument",minArgs:1,maxArgs:1}],[Rt.FLOOR_DIV,{value:Rt.FLOOR_DIV,name:"Floor division",description:"Returns the largest (closest to positive infinity) of the arguments",minArgs:2,maxArgs:2}],[Rt.FLOOR_MOD,{value:Rt.FLOOR_MOD,name:"Floor modulus",description:"Returns the floor modulus of the arguments",minArgs:2,maxArgs:2}],[Rt.ABS,{value:Rt.ABS,name:"Absolute",description:"Returns the absolute value of an argument",minArgs:1,maxArgs:1}],[Rt.MIN,{value:Rt.MIN,name:"Min",description:"Returns the smaller of the arguments",minArgs:2,maxArgs:2}],[Rt.MAX,{value:Rt.MAX,name:"Max",description:"Returns the greater of the arguments",minArgs:2,maxArgs:2}],[Rt.POW,{value:Rt.POW,name:"Raise to a power",description:"Returns the value of the first argument raised to the power of the second argument",minArgs:2,maxArgs:2}],[Rt.SIGNUM,{value:Rt.SIGNUM,name:"Sign of a real number",description:"Returns the signum function of the argument",minArgs:1,maxArgs:1}],[Rt.RAD,{value:Rt.RAD,name:"Radian",description:"Converts an angle measured in degrees to an approximately equivalent angle measured in radians",minArgs:1,maxArgs:1}],[Rt.DEG,{value:Rt.DEG,name:"Degrees",description:"Converts an angle measured in radians to an approximately equivalent angle measured in degrees.",minArgs:1,maxArgs:1}]]);var jt,Gt,Kt;!function(e){e.MESSAGE_BODY="MESSAGE_BODY",e.MESSAGE_METADATA="MESSAGE_METADATA",e.ATTRIBUTE="ATTRIBUTE",e.TIME_SERIES="TIME_SERIES",e.CONSTANT="CONSTANT"}(jt||(jt={})),function(e){e.MESSAGE_BODY="MESSAGE_BODY",e.MESSAGE_METADATA="MESSAGE_METADATA",e.ATTRIBUTE="ATTRIBUTE",e.TIME_SERIES="TIME_SERIES"}(Gt||(Gt={})),function(e){e.DATA="DATA",e.METADATA="METADATA"}(Kt||(Kt={}));const Ut=new Map([[Kt.DATA,"tb.rulenode.message-to-metadata"],[Kt.METADATA,"tb.rulenode.metadata-to-message"]]),Ht=(new Map([[Kt.DATA,"tb.rulenode.from-message"],[Kt.METADATA,"tb.rulenode.from-metadata"]]),new Map([[Kt.DATA,"tb.rulenode.message"],[Kt.METADATA,"tb.rulenode.metadata"]])),zt=new Map([[Kt.DATA,"tb.rulenode.message"],[Kt.METADATA,"tb.rulenode.message-metadata"]]),$t=new Map([[jt.MESSAGE_BODY,{name:"tb.rulenode.message-body-type",description:"Fetch argument value from incoming message"}],[jt.MESSAGE_METADATA,{name:"tb.rulenode.message-metadata-type",description:"Fetch argument value from incoming message metadata"}],[jt.ATTRIBUTE,{name:"tb.rulenode.attribute-type",description:"Fetch attribute value from database"}],[jt.TIME_SERIES,{name:"tb.rulenode.time-series-type",description:"Fetch latest time-series value from database"}],[jt.CONSTANT,{name:"tb.rulenode.constant-type",description:"Define constant value"}]]),Qt=new Map([[Gt.MESSAGE_BODY,{name:"tb.rulenode.message-body-type",description:"Add result to the outgoing message"}],[Gt.MESSAGE_METADATA,{name:"tb.rulenode.message-metadata-type",description:"Add result to the outgoing message metadata"}],[Gt.ATTRIBUTE,{name:"tb.rulenode.attribute-type",description:"Store result as an entity attribute in the database"}],[Gt.TIME_SERIES,{name:"tb.rulenode.time-series-type",description:"Store result as an entity time-series in the database"}]]),Jt=["x","y","z","a","b","c","d","k","l","m","n","o","p","r","s","t"];var Yt,Wt;!function(e){e.SHARED_SCOPE="SHARED_SCOPE",e.SERVER_SCOPE="SERVER_SCOPE",e.CLIENT_SCOPE="CLIENT_SCOPE"}(Yt||(Yt={})),function(e){e.SHARED_SCOPE="SHARED_SCOPE",e.SERVER_SCOPE="SERVER_SCOPE"}(Wt||(Wt={}));const Xt=new Map([[Yt.SHARED_SCOPE,"tb.rulenode.shared-scope"],[Yt.SERVER_SCOPE,"tb.rulenode.server-scope"],[Yt.CLIENT_SCOPE,"tb.rulenode.client-scope"]]);var Zt;!function(e){e.ON_FIRST_MESSAGE="ON_FIRST_MESSAGE",e.ON_EACH_MESSAGE="ON_EACH_MESSAGE"}(Zt||(Zt={}));const en=new Map([[Zt.ON_EACH_MESSAGE,{value:!0,name:"tb.rulenode.presence-monitoring-strategy-on-each-message"}],[Zt.ON_FIRST_MESSAGE,{value:!1,name:"tb.rulenode.presence-monitoring-strategy-on-first-message"}]]),tn=2147483648,nn=e=>({perimeterKeyName:e});function rn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.latitude-field-name-required")," "))}function an(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.longitude-field-name-required")," "))}function on(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.perimeterTypeTranslationMap.get(e))," ")}}function ln(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.perimeter-key-name-required")," "))}function sn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",23)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",24),t.ɵɵtemplate(5,ln,3,3,"mat-error",6),t.ɵɵelementStart(6,"mat-hint"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"tb.rulenode.perimeter-key-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("perimeterKeyName").hasError("required")),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,5,"tb.rulenode.perimeter-key-name-hint"))}}function pn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.circle-center-latitude-required")," "))}function mn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.circle-center-longitude-required")," "))}function dn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.range-required")," "))}function un(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.rangeUnitTranslationMap.get(e))," ")}}function cn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.range-units-required")," "))}function fn(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",9)(1,"div",3)(2,"mat-form-field",25)(3,"mat-label"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",26),t.ɵɵtemplate(7,pn,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-form-field",25)(9,"mat-label"),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",27),t.ɵɵtemplate(13,mn,3,3,"mat-error",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"div",3)(15,"mat-form-field",25)(16,"mat-label"),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(19,"input",28),t.ɵɵtemplate(20,dn,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",25)(22,"mat-label"),t.ɵɵtext(23),t.ɵɵpipe(24,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-select",29),t.ɵɵtemplate(26,un,3,4,"mat-option",12),t.ɵɵelementEnd(),t.ɵɵtemplate(27,cn,3,3,"mat-error",6),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,9,"tb.rulenode.circle-center-latitude")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("centerLatitude").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(11,11,"tb.rulenode.circle-center-longitude")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("centerLongitude").hasError("required")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(18,13,"tb.rulenode.range")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("range").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(24,15,"tb.rulenode.range-units")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.rangeUnits),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("rangeUnit").hasError("required"))}}function gn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.polygon-definition-required")," "))}function hn(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",9)(1,"mat-form-field",30)(2,"mat-label",31),t.ɵɵtext(3,"tb.rulenode.polygon-definition"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",32),t.ɵɵelementStart(5,"mat-icon",33),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7," help "),t.ɵɵelementEnd(),t.ɵɵtemplate(8,gn,3,3,"mat-error",6),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(6,2,"tb.rulenode.polygon-definition-hint")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("polygonsDefinition").hasError("required"))}}function yn(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",22),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",r.presenceMonitoringStrategies.get(e).value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.presenceMonitoringStrategies.get(e).name)," ")}}function bn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-inside-duration-value-required")," "))}function vn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function xn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function Cn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.timeUnitsTranslationMap.get(e))," ")}}function Sn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-outside-duration-value-required")," "))}function Tn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function In(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function En(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.timeUnitsTranslationMap.get(e))," ")}}function Fn(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"div",34)(2,"mat-form-field",35)(3,"mat-label",31),t.ɵɵtext(4,"tb.rulenode.min-inside-duration"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",36),t.ɵɵtemplate(6,bn,3,3,"mat-error",6)(7,vn,3,3,"mat-error",6)(8,xn,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",35)(10,"mat-label",31),t.ɵɵtext(11,"tb.rulenode.min-inside-duration-time-unit"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-select",37),t.ɵɵtemplate(13,Cn,3,4,"mat-option",12),t.ɵɵelementEnd()()(),t.ɵɵelementStart(14,"div",34)(15,"mat-form-field",35)(16,"mat-label",31),t.ɵɵtext(17,"tb.rulenode.min-outside-duration"),t.ɵɵelementEnd(),t.ɵɵelement(18,"input",38),t.ɵɵtemplate(19,Sn,3,3,"mat-error",6)(20,Tn,3,3,"mat-error",6)(21,In,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"mat-form-field",35)(23,"mat-label",31),t.ɵɵtext(24,"tb.rulenode.min-outside-duration-time-unit"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-select",39),t.ɵɵtemplate(26,En,3,4,"mat-option",12),t.ɵɵelementEnd()()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minInsideDuration").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minInsideDuration").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minInsideDuration").hasError("max")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.timeUnits),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minOutsideDuration").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minOutsideDuration").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoActionConfigForm.get("minOutsideDuration").hasError("max")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.timeUnits)}}class qn extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.perimeterType=ft,this.perimeterTypes=Object.keys(ft),this.perimeterTypeTranslationMap=gt,this.rangeUnits=Object.keys(bt),this.rangeUnitTranslationMap=vt,this.presenceMonitoringStrategies=en,this.presenceMonitoringStrategyKeys=Array.from(this.presenceMonitoringStrategies.keys()),this.timeUnits=Object.keys(ht),this.timeUnitsTranslationMap=yt,this.defaultPaddingEnable=!0}configForm(){return this.geoActionConfigForm}onConfigurationSet(e){this.geoActionConfigForm=this.fb.group({reportPresenceStatusOnEachMessage:[!e||e.reportPresenceStatusOnEachMessage,[N.required]],latitudeKeyName:[e?e.latitudeKeyName:null,[N.required]],longitudeKeyName:[e?e.longitudeKeyName:null,[N.required]],perimeterType:[e?e.perimeterType:null,[N.required]],fetchPerimeterInfoFromMessageMetadata:[!!e&&e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterKeyName:[e?e.perimeterKeyName:null,[]],centerLatitude:[e?e.centerLatitude:null,[]],centerLongitude:[e?e.centerLatitude:null,[]],range:[e?e.range:null,[]],rangeUnit:[e?e.rangeUnit:null,[]],polygonsDefinition:[e?e.polygonsDefinition:null,[]],minInsideDuration:[e?e.minInsideDuration:null,[N.required,N.min(1),N.max(2147483647)]],minInsideDurationTimeUnit:[e?e.minInsideDurationTimeUnit:null,[N.required]],minOutsideDuration:[e?e.minOutsideDuration:null,[N.required,N.min(1),N.max(2147483647)]],minOutsideDurationTimeUnit:[e?e.minOutsideDurationTimeUnit:null,[N.required]]})}validatorTriggers(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]}updateValidators(e){const t=this.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,n=this.geoActionConfigForm.get("perimeterType").value;t?this.geoActionConfigForm.get("perimeterKeyName").setValidators([N.required]):this.geoActionConfigForm.get("perimeterKeyName").setValidators([]),t||n!==ft.CIRCLE?(this.geoActionConfigForm.get("centerLatitude").setValidators([]),this.geoActionConfigForm.get("centerLongitude").setValidators([]),this.geoActionConfigForm.get("range").setValidators([]),this.geoActionConfigForm.get("rangeUnit").setValidators([]),this.defaultPaddingEnable=!0):(this.geoActionConfigForm.get("centerLatitude").setValidators([N.required,N.min(-90),N.max(90)]),this.geoActionConfigForm.get("centerLongitude").setValidators([N.required,N.min(-180),N.max(180)]),this.geoActionConfigForm.get("range").setValidators([N.required,N.min(0)]),this.geoActionConfigForm.get("rangeUnit").setValidators([N.required]),this.defaultPaddingEnable=!1),t||n!==ft.POLYGON?this.geoActionConfigForm.get("polygonsDefinition").setValidators([]):this.geoActionConfigForm.get("polygonsDefinition").setValidators([N.required]),this.geoActionConfigForm.get("perimeterKeyName").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoActionConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||qn)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:qn,selectors:[["tb-action-node-gps-geofencing-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:52,vars:42,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-row","gap-4"],[1,"mat-block","max-w-50%","flex-full"],["matInput","","formControlName","latitudeKeyName","required",""],[4,"ngIf"],["matInput","","formControlName","longitudeKeyName","required",""],["translate","",1,"tb-form-hint","tb-primary-fill"],[1,"flex","flex-col"],["hideRequiredMarker","",1,"mat-block","flex-1"],["formControlName","perimeterType"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-row","no-border","no-padding","slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","fetchPerimeterInfoFromMessageMetadata",1,"mat-slide"],["class","mat-block",4,"ngIf"],["class","flex flex-col",4,"ngIf"],[1,"tb-form-panel","stroked","no-padding-bottom"],[1,"flex","flex-col","items-stretch","justify-between","gt-sm:flex-row","lt-md:gap-4"],[1,"tb-form-panel-title"],["formControlName","reportPresenceStatusOnEachMessage","appearance","fill",1,"fetch-to-data-toggle"],[1,"tb-form-hint","tb-primary-fill"],[3,"value"],[1,"mat-block"],["matInput","","formControlName","perimeterKeyName","required",""],[1,"flex-1"],["type","number","min","-90","max","90","step","0.1","matInput","","formControlName","centerLatitude","required",""],["type","number","min","-180","max","180","step","0.1","matInput","","formControlName","centerLongitude","required",""],["type","number","min","0","step","0.1","matInput","","formControlName","range","required",""],["formControlName","rangeUnit","required",""],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["matInput","","formControlName","polygonsDefinition","required",""],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"margin-8","cursor-pointer",3,"matTooltip"],[1,"flex","flex-col","gt-sm:flex-row","gt-sm:gap-2"],[1,"mat-block","flex-1"],["type","number","step","1","min","1","max","2147483647","matInput","","formControlName","minInsideDuration","required",""],["formControlName","minInsideDurationTimeUnit","required",""],["type","number","step","1","min","1","max","2147483647","matInput","","formControlName","minOutsideDuration","required",""],["formControlName","minOutsideDurationTimeUnit","required",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"section",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.coordinate-field-names"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"section")(5,"div",3)(6,"mat-form-field",4)(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",5),t.ɵɵtemplate(11,rn,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",4)(13,"mat-label"),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",7),t.ɵɵtemplate(17,an,3,3,"mat-error",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",8),t.ɵɵtext(19,"tb.rulenode.coordinate-field-hint"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(20,"section",1)(21,"div",2),t.ɵɵtext(22,"tb.rulenode.geofence-configuration"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"section",9)(24,"mat-form-field",10)(25,"mat-label"),t.ɵɵtext(26),t.ɵɵpipe(27,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(28,"mat-select",11),t.ɵɵtemplate(29,on,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(30,"div",13),t.ɵɵpipe(31,"translate"),t.ɵɵpipe(32,"translate"),t.ɵɵelementStart(33,"mat-slide-toggle",14),t.ɵɵtext(34),t.ɵɵpipe(35,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(36,sn,9,7,"mat-form-field",15)(37,fn,28,17,"div",16)(38,hn,9,4,"div",16),t.ɵɵelementEnd()(),t.ɵɵelementStart(39,"section",17)(40,"div",18)(41,"div",19),t.ɵɵtext(42),t.ɵɵpipe(43,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"tb-toggle-select",20),t.ɵɵtemplate(45,yn,3,4,"tb-toggle-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"div",21),t.ɵɵtext(47),t.ɵɵpipe(48,"translate"),t.ɵɵpipe(49,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(50,"section",9),t.ɵɵtemplate(51,Fn,27,8,"div",6),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.geoActionConfigForm),t.ɵɵadvance(8),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,18,"tb.rulenode.latitude-field-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.geoActionConfigForm.get("latitudeKeyName").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,20,"tb.rulenode.longitude-field-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.geoActionConfigForm.get("longitudeKeyName").hasError("required")),t.ɵɵadvance(3),t.ɵɵclassProp("no-padding-bottom",!n.defaultPaddingEnable),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(27,22,"tb.rulenode.perimeter-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.perimeterTypes),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",n.geoActionConfigForm.get("perimeterType").value===n.perimeterType.CIRCLE?t.ɵɵpipeBind2(31,24,"tb.rulenode.fetch-circle-parameter-info-from-metadata-hint",t.ɵɵpureFunction1(38,nn,n.geoActionConfigForm.get("perimeterKeyName").valid?n.geoActionConfigForm.get("perimeterKeyName").value:"ss_perimeter")):t.ɵɵpipeBind2(32,27,"tb.rulenode.fetch-poligon-parameter-info-from-metadata-hint",t.ɵɵpureFunction1(40,nn,n.geoActionConfigForm.get("perimeterKeyName").valid?n.geoActionConfigForm.get("perimeterKeyName").value:"ss_perimeter"))),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(35,30,"tb.rulenode.fetch-perimeter-info-from-metadata")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.geoActionConfigForm.get("perimeterType").value===n.perimeterType.CIRCLE&&!n.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.geoActionConfigForm.get("perimeterType").value===n.perimeterType.POLYGON&&!n.geoActionConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(43,32,"tb.rulenode.presence-monitoring-strategy")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.presenceMonitoringStrategyKeys),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",!1===n.geoActionConfigForm.get("reportPresenceStatusOnEachMessage").value?t.ɵɵpipeBind1(48,34,"tb.rulenode.presence-monitoring-strategy-on-first-message-hint"):t.ɵɵpipeBind1(49,36,"tb.rulenode.presence-monitoring-strategy-on-each-message-hint")," "),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",!1===n.geoActionConfigForm.get("reportPresenceStatusOnEachMessage").value))},dependencies:t.ɵɵgetComponentDepsFactory(qn),styles:["[_nghost-%COMP%] .slide-toggle[_ngcontent-%COMP%]{margin-bottom:18px}"]})}}e("GpsGeoActionConfigComponent",qn);const An=["jsFuncComponent"],kn=["tbelFuncComponent"],Nn=()=>["msg","metadata","msgType"];function wn(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",8)}function Mn(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",9,0)(2,"button",10),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",11),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,Nn)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function Bn(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",12,1)(2,"button",10),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",11),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,Nn))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}class Vn extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-to-string-function"}configForm(){return this.logConfigForm}onConfigurationSet(e){this.logConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:s.JS,[N.required]],jsScript:[e?e.jsScript:null,[]],tbelScript:[e?e.tbelScript:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.logConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.logConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.logConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.logConfigForm.get("jsScript").setValidators(t===s.JS?[N.required]:[]),this.logConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.logConfigForm.get("tbelScript").setValidators(t===s.TBEL?[N.required]:[]),this.logConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),e}testScript(e){const t=this.logConfigForm.get("scriptLang").value,n=t===s.JS?"jsScript":"tbelScript",r=t===s.JS?"rulenode/log_node_script_fn":"rulenode/tbel/log_node_script_fn",a=this.logConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"string",this.translate.instant("tb.rulenode.to-string"),"ToString",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.logConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.logConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||Vn)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Vn,selectors:[["tb-action-node-log-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(An,5),t.ɵɵviewQuery(kn,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:8,vars:7,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[1,"flex","flex-col",3,"formGroup"],["formControlName","scriptLang",4,"ngIf"],["formControlName","jsScript","functionName","ToString","helpId","rulenode/log_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","tbelScript","functionName","ToString","helpId","rulenode/tbel/log_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],[1,"flex","flex-row"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","scriptLang"],["formControlName","jsScript","functionName","ToString","helpId","rulenode/log_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","tbelScript","functionName","ToString","helpId","rulenode/tbel/log_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2),t.ɵɵtemplate(1,wn,1,0,"tb-script-lang",3)(2,Mn,6,5,"tb-js-func",4)(3,Bn,6,7,"tb-js-func",5),t.ɵɵelementStart(4,"div",6)(5,"button",7),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.logConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.logConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.logConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,5,n.testScriptLabel)," "))},dependencies:t.ɵɵgetComponentDepsFactory(Vn),encapsulation:2})}}function On(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.interval-seconds-required")," "))}function Dn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-interval-seconds-message")," "))}function Ln(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.output-timeseries-key-prefix-required")," "))}e("LogConfigComponent",Vn);class Pn extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.msgCountConfigForm}onConfigurationSet(e){this.msgCountConfigForm=this.fb.group({interval:[e?e.interval:null,[N.required,N.min(1)]],telemetryPrefix:[e?e.telemetryPrefix:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||Pn)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Pn,selectors:[["tb-action-node-msg-count-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:12,vars:4,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block"],["translate",""],["required","","type","number","min","1","step","1","matInput","","formControlName","interval"],[4,"ngIf"],["required","","matInput","","formControlName","telemetryPrefix"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.interval-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,On,3,3,"mat-error",4)(6,Dn,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-form-field",1)(8,"mat-label",2),t.ɵɵtext(9,"tb.rulenode.output-timeseries-key-prefix"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",5),t.ɵɵtemplate(11,Ln,3,3,"mat-error",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.msgCountConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.msgCountConfigForm.get("interval").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.msgCountConfigForm.get("interval").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.msgCountConfigForm.get("telemetryPrefix").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(Pn),encapsulation:2})}}function Rn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.period-seconds-required")," "))}function _n(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-period-0-seconds-message")," "))}function jn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",5)(1,"mat-label",6),t.ɵɵtext(2,"tb.rulenode.period-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",9),t.ɵɵtemplate(4,Rn,3,3,"mat-error",8)(5,_n,3,3,"mat-error",8),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.msgDelayConfigForm.get("periodInSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.msgDelayConfigForm.get("periodInSeconds").hasError("min"))}}function Gn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.period-in-seconds-pattern-required")," "))}function Kn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",10)(1,"mat-label",6),t.ɵɵtext(2,"tb.rulenode.period-in-seconds-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",11),t.ɵɵtemplate(4,Gn,3,3,"mat-error",8),t.ɵɵelementStart(5,"mat-hint",6),t.ɵɵtext(6,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.msgDelayConfigForm.get("periodInSecondsPattern").hasError("required"))}}function Un(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-messages-required")," "))}function Hn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-messages-range")," "))}function zn(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-messages-range")," "))}e("MsgCountConfigComponent",Pn);class $n extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.msgDelayConfigForm}onConfigurationSet(e){this.msgDelayConfigForm=this.fb.group({useMetadataPeriodInSecondsPatterns:[!!e&&e.useMetadataPeriodInSecondsPatterns,[]],periodInSeconds:[e?e.periodInSeconds:null,[]],periodInSecondsPattern:[e?e.periodInSecondsPattern:null,[]],maxPendingMsgs:[e?e.maxPendingMsgs:null,[N.required,N.min(1),N.max(1e5)]]})}validatorTriggers(){return["useMetadataPeriodInSecondsPatterns"]}updateValidators(e){this.msgDelayConfigForm.get("useMetadataPeriodInSecondsPatterns").value?(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([N.required]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([])):(this.msgDelayConfigForm.get("periodInSecondsPattern").setValidators([]),this.msgDelayConfigForm.get("periodInSeconds").setValidators([N.required,N.min(0)])),this.msgDelayConfigForm.get("periodInSecondsPattern").updateValueAndValidity({emitEvent:e}),this.msgDelayConfigForm.get("periodInSeconds").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||$n)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:$n,selectors:[["tb-action-node-msg-delay-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:16,vars:9,consts:[["periodInSecondsPattern",""],[1,"flex","flex-col",3,"formGroup"],["formControlName","useMetadataPeriodInSecondsPatterns"],["translate","",1,"tb-hint"],["class","mat-block",4,"ngIf","ngIfElse"],[1,"mat-block"],["translate",""],["required","","type","number","min","1","max","100000","step","1","matInput","","formControlName","maxPendingMsgs"],[4,"ngIf"],["required","","type","number","min","0","step","1","matInput","","formControlName","periodInSeconds"],["subscriptSizing","dynamic",1,"mat-block"],["required","","matInput","","formControlName","periodInSecondsPattern"]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",1)(1,"mat-checkbox",2),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3),t.ɵɵtext(5,"tb.rulenode.use-metadata-period-in-seconds-patterns-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(6,jn,6,2,"mat-form-field",4)(7,Kn,7,1,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(9,"mat-form-field",5)(10,"mat-label",6),t.ɵɵtext(11,"tb.rulenode.max-pending-messages"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",7),t.ɵɵtemplate(13,Un,3,3,"mat-error",8)(14,Hn,3,3,"mat-error",8)(15,zn,3,3,"mat-error",8),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵreference(8);t.ɵɵproperty("formGroup",n.msgDelayConfigForm),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,7,"tb.rulenode.use-metadata-period-in-seconds-patterns")," "),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",!0!==n.msgDelayConfigForm.get("useMetadataPeriodInSecondsPatterns").value)("ngIfElse",e),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.msgDelayConfigForm.get("maxPendingMsgs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.msgDelayConfigForm.get("maxPendingMsgs").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.msgDelayConfigForm.get("maxPendingMsgs").hasError("max"))}},dependencies:t.ɵɵgetComponentDepsFactory($n),encapsulation:2})}}e("MsgDelayConfigComponent",$n);const Qn=()=>({standalone:!0});function Jn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",10),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.telemetryTypeTranslationsMap.get(e))," ")}}class Yn extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopes=Object.keys(o),this.telemetryTypeTranslationsMap=l}configForm(){return this.pushToCloudConfigForm}onConfigurationSet(e){this.pushToCloudConfigForm=this.fb.group({scope:[e?e.scope:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||Yn)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Yn,selectors:[["tb-action-node-push-to-cloud-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:19,vars:16,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],[1,"flex"],["required","","matInput","","formControlName","scope",1,"tb-entity-type-select"],[3,"value",4,"ngFor","ngForOf"],["type","text","matInput","","readonly","","disabled","",3,"ngModel","ngModelOptions"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip"],["aria-hidden","false","aria-label","help-icon"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵelement(2,"tb-example-hint",2),t.ɵɵelementStart(3,"div",3)(4,"mat-form-field",4)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",5),t.ɵɵtemplate(9,Jn,3,4,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",4)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",7),t.ɵɵelementStart(15,"button",8),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"mat-icon",9),t.ɵɵtext(18,"content_copy "),t.ɵɵelementEnd()()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.pushToCloudConfigForm),t.ɵɵadvance(2),t.ɵɵproperty("hintText","tb.rulenode.attributes-scope-hint"),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,9,"tb.rulenode.attributes-scope")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.attributeScopes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,11,"tb.rulenode.attributes-scope-value")),t.ɵɵadvance(2),t.ɵɵproperty("ngModel",n.pushToCloudConfigForm.get("scope").value)("ngModelOptions",t.ɵɵpureFunction0(15,Qn)),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(16,13,"tb.rulenode.attributes-scope-value-copy")),t.ɵɵproperty("cbContent",n.pushToCloudConfigForm.get("scope").value))},dependencies:t.ɵɵgetComponentDepsFactory(Yn),encapsulation:2})}}e("PushToCloudConfigComponent",Yn);const Wn=()=>({standalone:!0});function Xn(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",10),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.telemetryTypeTranslationsMap.get(e))," ")}}class Zn extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopes=Object.keys(o),this.telemetryTypeTranslationsMap=l}configForm(){return this.pushToEdgeConfigForm}onConfigurationSet(e){this.pushToEdgeConfigForm=this.fb.group({scope:[e?e.scope:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||Zn)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Zn,selectors:[["tb-action-node-push-to-edge-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:19,vars:16,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],[1,"flex"],["required","","matInput","","formControlName","scope",1,"tb-entity-type-select"],[3,"value",4,"ngFor","ngForOf"],["type","text","matInput","","readonly","","disabled","",3,"ngModel","ngModelOptions"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip"],["aria-hidden","false","aria-label","help-icon"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵelement(2,"tb-example-hint",2),t.ɵɵelementStart(3,"div",3)(4,"mat-form-field",4)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",5),t.ɵɵtemplate(9,Xn,3,4,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",4)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",7),t.ɵɵelementStart(15,"button",8),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"mat-icon",9),t.ɵɵtext(18,"content_copy "),t.ɵɵelementEnd()()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.pushToEdgeConfigForm),t.ɵɵadvance(2),t.ɵɵproperty("hintText","tb.rulenode.attributes-scope-hint"),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,9,"tb.rulenode.attributes-scope")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.attributeScopes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,11,"tb.rulenode.attributes-scope-value")),t.ɵɵadvance(2),t.ɵɵproperty("ngModel",n.pushToEdgeConfigForm.get("scope").value)("ngModelOptions",t.ɵɵpureFunction0(15,Wn)),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(16,13,"tb.rulenode.attributes-scope-value-copy")),t.ɵɵproperty("cbContent",n.pushToEdgeConfigForm.get("scope").value))},dependencies:t.ɵɵgetComponentDepsFactory(Zn),encapsulation:2})}}e("PushToEdgeConfigComponent",Zn);class er extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.rpcReplyConfigForm}onConfigurationSet(e){this.rpcReplyConfigForm=this.fb.group({serviceIdMetaDataAttribute:[e?e.serviceIdMetaDataAttribute:null,[]],sessionIdMetaDataAttribute:[e?e.sessionIdMetaDataAttribute:null,[]],requestIdMetaDataAttribute:[e?e.requestIdMetaDataAttribute:null,[]]})}static{this.ɵfac=function(e){return new(e||er)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:er,selectors:[["tb-action-node-rpc-reply-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:17,vars:2,consts:[[1,"tb-form-panel","stroked","no-padding-bottom",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs"],[1,"flex"],["translate",""],["matInput","","formControlName","serviceIdMetaDataAttribute"],["matInput","","formControlName","sessionIdMetaDataAttribute"],["matInput","","formControlName","requestIdMetaDataAttribute"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.reply-routing-configuration"),t.ɵɵelementEnd(),t.ɵɵelement(3,"tb-example-hint",2),t.ɵɵelementStart(4,"div",3)(5,"mat-form-field",4)(6,"mat-label",5),t.ɵɵtext(7,"tb.rulenode.service-id-metadata-attribute"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",6),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",4)(10,"mat-label",5),t.ɵɵtext(11,"tb.rulenode.session-id-metadata-attribute"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",7),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",4)(14,"mat-label",5),t.ɵɵtext(15,"tb.rulenode.request-id-metadata-attribute"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",8),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.rpcReplyConfigForm),t.ɵɵadvance(3),t.ɵɵproperty("hintText","tb.rulenode.rpc-reply-routing-configuration-hint"))},dependencies:t.ɵɵgetComponentDepsFactory(er),encapsulation:2})}}function tr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.timeout-required")," "))}function nr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-timeout-message")," "))}e("RpcReplyConfigComponent",er);class rr extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.rpcRequestConfigForm}onConfigurationSet(e){this.rpcRequestConfigForm=this.fb.group({timeoutInSeconds:[e?e.timeoutInSeconds:null,[N.required,N.min(0)]]})}static{this.ɵfac=function(e){return new(e||rr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:rr,selectors:[["tb-action-node-rpc-request-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:3,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block","flex-1"],["translate",""],["type","number","min","0","step","1","matInput","","formControlName","timeoutInSeconds","required",""],[4,"ngIf"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.timeout-sec"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,tr,3,3,"mat-error",4)(6,nr,3,3,"mat-error",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.rpcRequestConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.rpcRequestConfigForm.get("timeoutInSeconds").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.rpcRequestConfigForm.get("timeoutInSeconds").hasError("min")))},dependencies:t.ɵɵgetComponentDepsFactory(rr),encapsulation:2})}}function ar(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.custom-table-name-required")," "))}function ir(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-default-ttl-message")," "))}function or(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.default-ttl-required")," "))}e("RpcRequestConfigComponent",rr);class lr extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.saveToCustomTableConfigForm}onConfigurationSet(e){this.saveToCustomTableConfigForm=this.fb.group({tableName:[e?e.tableName:null,[N.required,N.pattern(/.*\S.*/)]],fieldsMapping:[e?e.fieldsMapping:null,[N.required]],defaultTtl:[e?e.defaultTtl:0,[N.required,N.min(0)]]})}prepareOutputConfig(e){return e.tableName=e.tableName.trim(),e}static{this.ɵfac=function(e){return new(e||lr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:lr,selectors:[["tb-action-node-custom-table-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:24,vars:26,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","tableName"],["aria-hidden","false","aria-label","help-icon","matSuffix","",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[4,"ngIf"],["required","","formControlName","fieldsMapping",3,"labelText","requiredText","keyText","keyRequiredText","valText","valRequiredText","hintText"],[1,"mat-block","flex-1"],["type","number","min","0","step","1","matInput","","formControlName","defaultTtl","required",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.custom-table-name"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵelementStart(5,"mat-icon",4),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7," help "),t.ɵɵelementEnd(),t.ɵɵtemplate(8,ar,3,3,"mat-error",5),t.ɵɵelementEnd(),t.ɵɵelement(9,"tb-kv-map-config",6),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵpipe(14,"translate"),t.ɵɵpipe(15,"translate"),t.ɵɵelementStart(16,"mat-form-field",7)(17,"mat-label",2),t.ɵɵtext(18,"tb.rulenode.default-ttl"),t.ɵɵelementEnd(),t.ɵɵelement(19,"input",8),t.ɵɵelementStart(20,"mat-hint",2),t.ɵɵtext(21,"tb.rulenode.default-ttl-zero-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(22,ir,3,3,"mat-error",5)(23,or,3,3,"mat-error",5),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.saveToCustomTableConfigForm),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(6,12,"tb.rulenode.custom-table-hint")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.saveToCustomTableConfigForm.get("tableName").hasError("required")||n.saveToCustomTableConfigForm.get("tableName").hasError("pattern")),t.ɵɵadvance(),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(10,14,"tb.rulenode.fields-mapping"))("requiredText",t.ɵɵpipeBind1(11,16,"tb.rulenode.fields-mapping-required"))("keyText",t.ɵɵpipeBind1(12,18,"tb.rulenode.message-field"))("keyRequiredText",t.ɵɵpipeBind1(13,20,"tb.rulenode.message-field-required"))("valText",t.ɵɵpipeBind1(14,22,"tb.rulenode.table-col"))("valRequiredText",t.ɵɵpipeBind1(15,24,"tb.rulenode.table-col-required"))("hintText","tb.rulenode.fields-mapping-hint"),t.ɵɵadvance(13),t.ɵɵproperty("ngIf",n.saveToCustomTableConfigForm.get("defaultTtl").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.saveToCustomTableConfigForm.get("defaultTtl").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(lr),encapsulation:2})}}function sr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.default-ttl-required")," "))}function pr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-default-ttl-message")," "))}e("SaveToCustomTableConfigComponent",lr);class mr extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.timeseriesConfigForm}onConfigurationSet(e){this.timeseriesConfigForm=this.fb.group({defaultTTL:[e?e.defaultTTL:null,[N.required,N.min(0)]],skipLatestPersistence:[!!e&&e.skipLatestPersistence,[]],useServerTs:[!!e&&e.useServerTs,[]]})}static{this.ɵfac=function(e){return new(e||mr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:mr,selectors:[["tb-action-node-timeseries-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:21,vars:18,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"mat-block","flex-1"],["translate",""],["type","number","min","0","step","1","matInput","","formControlName","defaultTTL","required",""],["aria-hidden","false","aria-label","help-icon","matSuffix","",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[4,"ngIf"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","useServerTs",1,"mat-slide"],["formControlName","skipLatestPersistence",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.default-ttl"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵelementStart(5,"mat-icon",4),t.ɵɵpipe(6,"translate"),t.ɵɵtext(7," help "),t.ɵɵelementEnd(),t.ɵɵtemplate(8,sr,3,3,"mat-error",5)(9,pr,3,3,"mat-error",5),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"div",6)(11,"div",7),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"mat-slide-toggle",8),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(16,"div",7),t.ɵɵpipe(17,"translate"),t.ɵɵelementStart(18,"mat-slide-toggle",9),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.timeseriesConfigForm),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(6,8,"tb.rulenode.default-ttl-hint")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.timeseriesConfigForm.get("defaultTTL").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.timeseriesConfigForm.get("defaultTTL").hasError("min")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(12,10,"tb.rulenode.use-server-ts-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,12,"tb.rulenode.use-server-ts")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(17,14,"tb.rulenode.skip-latest-persistence-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(20,16,"tb.rulenode.skip-latest-persistence")," "))},dependencies:t.ɵɵgetComponentDepsFactory(mr),encapsulation:2})}}function dr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.customer-name-pattern-required")," "))}function ur(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",6)(1,"mat-label",7),t.ɵɵtext(2,"tb.rulenode.customer-name-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",8),t.ɵɵtemplate(4,dr,3,3,"mat-error",9),t.ɵɵelementStart(5,"mat-hint",7),t.ɵɵtext(6,"tb.rulenode.customer-name-pattern-hint"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.unassignCustomerConfigForm.get("customerNamePattern").hasError("required")||e.unassignCustomerConfigForm.get("customerNamePattern").hasError("pattern"))}}e("TimeseriesConfigComponent",mr);class cr extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.unassignCustomerConfigForm}prepareInputConfig(e){return{customerNamePattern:P(e?.customerNamePattern)?e.customerNamePattern:null,unassignFromCustomer:P(e?.customerNamePattern)}}onConfigurationSet(e){this.unassignCustomerConfigForm=this.fb.group({customerNamePattern:[e.customerNamePattern,[]],unassignFromCustomer:[e.unassignFromCustomer,[]]})}validatorTriggers(){return["unassignFromCustomer"]}updateValidators(e){this.unassignCustomerConfigForm.get("unassignFromCustomer").value?this.unassignCustomerConfigForm.get("customerNamePattern").setValidators([N.required,N.pattern(/.*\S.*/)]):this.unassignCustomerConfigForm.get("customerNamePattern").setValidators([]),this.unassignCustomerConfigForm.get("customerNamePattern").updateValueAndValidity({emitEvent:e})}prepareOutputConfig(e){return{customerNamePattern:e.unassignFromCustomer?e.customerNamePattern.trim():null}}static{this.ɵfac=function(e){return new(e||cr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:cr,selectors:[["tb-action-node-un-assign-to-customer-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:9,vars:10,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"tb-form-panel","no-padding","no-border"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","unassignFromCustomer",1,"mat-slide"],["class","mat-block","subscriptSizing","dynamic",4,"ngIf"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","customerNamePattern"],[4,"ngIf"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2)(3,"div",3),t.ɵɵpipe(4,"translate"),t.ɵɵelementStart(5,"mat-slide-toggle",4),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(8,ur,7,1,"mat-form-field",5),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.unassignCustomerConfigForm),t.ɵɵadvance(2),t.ɵɵclassProp("no-padding-bottom",n.unassignCustomerConfigForm.get("unassignFromCustomer").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(4,6,"tb.rulenode.unassign-from-customer-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,8,"tb.rulenode.unassign-from-customer")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.unassignCustomerConfigForm.get("unassignFromCustomer").value))},dependencies:t.ɵɵgetComponentDepsFactory(cr),encapsulation:2})}}e("UnassignCustomerConfigComponent",cr);class fr extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.sendRestApiCallReplyConfigForm}onConfigurationSet(e){this.sendRestApiCallReplyConfigForm=this.fb.group({requestIdMetaDataAttribute:[e?e.requestIdMetaDataAttribute:null,[]],serviceIdMetaDataAttribute:[e?e.serviceIdMetaDataAttribute:null,[]]})}static{this.ɵfac=function(e){return new(e||fr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:fr,selectors:[["tb-action-node-send-rest-api-call-reply-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:13,vars:2,consts:[[1,"tb-form-panel","stroked","no-padding-bottom",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs"],[1,"flex"],["translate",""],["matInput","","formControlName","serviceIdMetaDataAttribute"],["matInput","","formControlName","requestIdMetaDataAttribute"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.reply-routing-configuration"),t.ɵɵelementEnd(),t.ɵɵelement(3,"tb-example-hint",2),t.ɵɵelementStart(4,"div",3)(5,"mat-form-field",4)(6,"mat-label",5),t.ɵɵtext(7,"tb.rulenode.service-id-metadata-attribute"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",6),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",4)(10,"mat-label",5),t.ɵɵtext(11,"tb.rulenode.request-id-metadata-attribute"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",7),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.sendRestApiCallReplyConfigForm),t.ɵɵadvance(3),t.ɵɵproperty("hintText","tb.rulenode.reply-routing-configuration-hint"))},dependencies:t.ɵɵgetComponentDepsFactory(fr),encapsulation:2})}}e("SendRestApiCallReplyConfigComponent",fr);const gr=["attributeChipList"],hr=()=>({standalone:!0});function yr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.telemetryTypeTranslationsMap.get(e))," ")}}function br(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-chip-row",22),t.ɵɵlistener("removed",(function(){const n=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.removeKey(n))})),t.ɵɵtext(1),t.ɵɵelementStart(2,"mat-icon",23),t.ɵɵtext(3,"close"),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function vr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,1,"tb.rulenode.attributes-keys-required")))}function xr(e,n){1&e&&(t.ɵɵelementStart(0,"div",18),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",24),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.notify-device-on-delete-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"tb.rulenode.notify-device")," "))}class Cr extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.attributeScopeMap=o,this.attributeScopes=Object.keys(o),this.telemetryTypeTranslationsMap=l,this.separatorKeysCodes=[U,H,z]}configForm(){return this.deleteAttributesConfigForm}onConfigurationSet(e){this.deleteAttributesConfigForm=this.fb.group({scope:[e?e.scope:null,[N.required]],keys:[e?e.keys:null,[N.required]],sendAttributesDeletedNotification:[!!e&&e.sendAttributesDeletedNotification,[]],notifyDevice:[!!e&&e.notifyDevice,[]]}),this.deleteAttributesConfigForm.get("scope").valueChanges.subscribe((e=>{e!==o.SHARED_SCOPE&&this.deleteAttributesConfigForm.get("notifyDevice").patchValue(!1,{emitEvent:!1})}))}removeKey(e){const t=this.deleteAttributesConfigForm.get("keys").value,n=t.indexOf(e);n>=0&&(t.splice(n,1),this.deleteAttributesConfigForm.get("keys").patchValue(t,{emitEvent:!0}))}addKey(e){const t=e.input;let n=e.value;if((n||"").trim()){n=n.trim();let e=this.deleteAttributesConfigForm.get("keys").value;e&&-1!==e.indexOf(n)||(e||(e=[]),e.push(n),this.deleteAttributesConfigForm.get("keys").patchValue(e,{emitEvent:!0}))}t&&(t.value="")}static{this.ɵfac=function(e){return new(e||Cr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Cr,selectors:[["tb-action-node-delete-attributes-config"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(gr,5),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.attributeChipList=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:41,vars:31,consts:[["attributeChipList",""],[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],[3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],[1,"flex"],["required","","matInput","","formControlName","scope",1,"tb-entity-type-select"],[3,"value",4,"ngFor","ngForOf"],["type","text","matInput","","readonly","","disabled","",3,"ngModel","ngModelOptions"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip"],["aria-hidden","false","aria-label","help-icon"],["subscriptSizing","dynamic",1,"mat-block"],["formControlName","keys"],[3,"removed",4,"ngFor","ngForOf"],["matInput","","type","text",3,"matChipInputTokenEnd","matChipInputFor","matChipInputSeparatorKeyCodes","matChipInputAddOnBlur"],[4,"ngIf"],["translate",""],[1,"tb-settings"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","sendAttributesDeletedNotification",1,"mat-slide"],["class","tb-form-row no-border no-padding",3,"tb-hint-tooltip-icon",4,"ngIf"],[3,"value"],[3,"removed"],["matChipRemove",""],["formControlName","notifyDevice",1,"mat-slide"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"section",1)(1,"div",2),t.ɵɵelement(2,"tb-example-hint",3),t.ɵɵelementStart(3,"div",4)(4,"mat-form-field",5)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",6),t.ɵɵtemplate(9,yr,3,4,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",5)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(14,"input",8),t.ɵɵelementStart(15,"button",9),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"mat-icon",10),t.ɵɵtext(18,"content_copy "),t.ɵɵelementEnd()()()()(),t.ɵɵelementStart(19,"mat-form-field",11)(20,"mat-label"),t.ɵɵtext(21),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-chip-grid",12,0),t.ɵɵtemplate(25,br,4,1,"mat-chip-row",13),t.ɵɵelementStart(26,"input",14),t.ɵɵlistener("matChipInputTokenEnd",(function(r){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.addKey(r))})),t.ɵɵelementEnd()(),t.ɵɵtemplate(27,vr,3,3,"mat-error",15),t.ɵɵelementStart(28,"mat-hint",16),t.ɵɵtext(29,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(30,"section",2)(31,"mat-expansion-panel",17)(32,"mat-expansion-panel-header")(33,"mat-panel-title",16),t.ɵɵtext(34,"tb.rulenode.advanced-settings"),t.ɵɵelementEnd()(),t.ɵɵelementStart(35,"div",18),t.ɵɵpipe(36,"translate"),t.ɵɵelementStart(37,"mat-slide-toggle",19),t.ɵɵtext(38),t.ɵɵpipe(39,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(40,xr,5,6,"div",20),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵreference(24);t.ɵɵproperty("formGroup",n.deleteAttributesConfigForm),t.ɵɵadvance(2),t.ɵɵproperty("hintText","tb.rulenode.attributes-scope-hint"),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,18,"tb.rulenode.attributes-scope")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.attributeScopes),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,20,"tb.rulenode.attributes-scope-value")),t.ɵɵadvance(2),t.ɵɵproperty("ngModel",n.deleteAttributesConfigForm.get("scope").value)("ngModelOptions",t.ɵɵpureFunction0(30,hr)),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(16,22,"tb.rulenode.attributes-scope-value-copy")),t.ɵɵproperty("cbContent",n.deleteAttributesConfigForm.get("scope").value),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(22,24,"tb.rulenode.attributes-keys")),t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",n.deleteAttributesConfigForm.get("keys").value),t.ɵɵadvance(),t.ɵɵproperty("matChipInputFor",e)("matChipInputSeparatorKeyCodes",n.separatorKeysCodes)("matChipInputAddOnBlur",!0),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deleteAttributesConfigForm.get("keys").hasError("required")),t.ɵɵadvance(8),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(36,26,"tb.rulenode.send-attributes-deleted-notification-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(39,28,"tb.rulenode.send-attributes-deleted-notification")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deleteAttributesConfigForm.get("scope").value===n.attributeScopeMap.SHARED_SCOPE)}},dependencies:t.ɵɵgetComponentDepsFactory(Cr),encapsulation:2})}}e("DeleteAttributesConfigComponent",Cr);const Sr=(e,t)=>[e,t];function Tr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",8),t.ɵɵtext(1," tb.rulenode.custom-expression-field-input-required "),t.ɵɵelementEnd())}function Ir(e,n){if(1&e&&(t.ɵɵelementStart(0,"fieldset",2)(1,"legend",21),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-form-field",22),t.ɵɵelement(5,"input",23),t.ɵɵtemplate(6,Tr,2,0,"mat-error",11),t.ɵɵelementStart(7,"mat-hint",8),t.ɵɵtext(8,"tb.rulenode.custom-expression-field-input-hint"),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate1("",t.ɵɵpipeBind1(3,2,"tb.rulenode.custom-expression-field-input")," *"),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.mathFunctionConfigForm.get("customFunction").hasError("required"))}}function Er(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",24),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"small",25),t.ɵɵtext(4),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,3,r.argumentTypeResultMap.get(e).name)," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",r.argumentTypeResultMap.get(e).description," ")}}function Fr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",8),t.ɵɵtext(1," tb.rulenode.type-field-input-required "),t.ɵɵelementEnd())}function qr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",28),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.attributeScopeMap.get(e))," ")}}function Ar(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",7)(1,"mat-label",8),t.ɵɵtext(2,"tb.rulenode.attribute-scope-field-input"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",26),t.ɵɵtemplate(4,qr,3,4,"mat-option",27),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.attributeScopeResult)}}function kr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",8),t.ɵɵtext(1," tb.rulenode.key-field-input-required "),t.ɵɵelementEnd())}function Nr(e,n){1&e&&(t.ɵɵelementStart(0,"div",29)(1,"mat-checkbox",30),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-checkbox",31),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,2,"tb.rulenode.add-to-message-field-input")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,4,"tb.rulenode.add-to-metadata-field-input")," "))}class wr extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.MathFunction=Rt,this.ArgumentTypeResult=Gt,this.argumentTypeResultMap=Qt,this.attributeScopeMap=Xt,this.argumentsResult=Object.values(Gt),this.attributeScopeResult=Object.values(Wt)}configForm(){return this.mathFunctionConfigForm}onConfigurationSet(e){this.mathFunctionConfigForm=this.fb.group({operation:[e?e.operation:null,[N.required]],arguments:[e?e.arguments:null,[N.required]],customFunction:[e?e.customFunction:"",[N.required]],result:this.fb.group({type:[e?e.result.type:null,[N.required]],attributeScope:[e?e.result.attributeScope:null,[N.required]],key:[e?e.result.key:"",[N.required]],resultValuePrecision:[e?e.result.resultValuePrecision:0],addToBody:[!!e&&e.result.addToBody],addToMetadata:[!!e&&e.result.addToMetadata]})})}updateValidators(e){const t=this.mathFunctionConfigForm.get("operation").value,n=this.mathFunctionConfigForm.get("result.type").value;t===Rt.CUSTOM?(this.mathFunctionConfigForm.get("customFunction").enable({emitEvent:!1}),null===this.mathFunctionConfigForm.get("customFunction").value&&this.mathFunctionConfigForm.get("customFunction").patchValue("(x - 32) / 1.8",{emitEvent:!1})):this.mathFunctionConfigForm.get("customFunction").disable({emitEvent:!1}),n===Gt.ATTRIBUTE?this.mathFunctionConfigForm.get("result.attributeScope").enable({emitEvent:!1}):this.mathFunctionConfigForm.get("result.attributeScope").disable({emitEvent:!1}),this.mathFunctionConfigForm.get("customFunction").updateValueAndValidity({emitEvent:e}),this.mathFunctionConfigForm.get("result.attributeScope").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["operation","result.type"]}static{this.ɵfac=function(e){return new(e||wr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:wr,selectors:[["tb-action-node-math-function-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:39,vars:23,consts:[[1,"flex","flex-col",3,"formGroup"],["required","","formControlName","operation",1,"flex-full","max-h-30%","xs:max-h-full","md:max-h-full"],[1,"fields-group","flex","flex-col","gap-2"],["translate","",1,"group-title"],["formControlName","arguments",3,"function"],["class","fields-group flex flex-col gap-2",4,"ngIf"],["formGroupName","result"],[1,"mat-block","flex-1"],["translate",""],["formControlName","type","required",""],["style","border-bottom: 1px solid #eee;",3,"value",4,"ngFor","ngForOf"],["translate","",4,"ngIf"],[1,"xs:flex-col","gt-xs:gap-4","flex","flex-1","flex-row"],["class","mat-block flex-1",4,"ngIf"],["floatLabel","always",1,"mat-block","flex-1"],["matInput","","formControlName","key","required",""],["aria-hidden","false","aria-label","help-icon","matSuffix","","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],["floatLabel","always","subscriptSizing","dynamic",1,"mat-block","flex-1"],["formControlName","resultValuePrecision","matInput","","step","1","min","0","type","number"],[3,"innerHTML"],["class","xs:flex-col gt-xs:gap-4 flex flex-1 flex-row items-stretch justify-start","style","padding-top: 16px;",4,"ngIf"],[1,"group-title"],["subscriptSizing","dynamic",1,"mat-block","no-margin-top","flex-1"],["matInput","","formControlName","customFunction","required",""],[2,"border-bottom","1px solid #eee",3,"value"],[2,"display","block","overflow","hidden","text-overflow","ellipsis","white-space","nowrap"],["required","","formControlName","attributeScope"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],[1,"xs:flex-col","gt-xs:gap-4","flex","flex-1","flex-row","items-stretch","justify-start",2,"padding-top","16px"],["formControlName","addToBody"],["formControlName","addToMetadata"]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-math-function-autocomplete",1),t.ɵɵelementStart(2,"fieldset",2)(3,"legend",3),t.ɵɵtext(4,"tb.rulenode.argument-tile"),t.ɵɵelementEnd(),t.ɵɵelement(5,"tb-arguments-map-config",4),t.ɵɵelementEnd(),t.ɵɵtemplate(6,Ir,9,4,"fieldset",5),t.ɵɵelementStart(7,"fieldset",2)(8,"legend",3),t.ɵɵtext(9,"tb.rulenode.result-title"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"div",6)(11,"mat-form-field",7)(12,"mat-label",8),t.ɵɵtext(13,"tb.rulenode.type-field-input"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-select",9)(15,"mat-select-trigger"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(18,Er,5,5,"mat-option",10),t.ɵɵelementEnd(),t.ɵɵtemplate(19,Fr,2,0,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"div",12),t.ɵɵtemplate(21,Ar,5,1,"mat-form-field",13),t.ɵɵelementStart(22,"mat-form-field",14)(23,"mat-label",8),t.ɵɵtext(24,"tb.rulenode.key-field-input"),t.ɵɵelementEnd(),t.ɵɵelement(25,"input",15),t.ɵɵelementStart(26,"mat-icon",16),t.ɵɵpipe(27,"translate"),t.ɵɵtext(28,"help"),t.ɵɵelementEnd(),t.ɵɵtemplate(29,kr,2,0,"mat-error",11),t.ɵɵelementEnd()(),t.ɵɵelementStart(30,"div",12)(31,"mat-form-field",17)(32,"mat-label",8),t.ɵɵtext(33,"tb.rulenode.number-floating-point-field-input"),t.ɵɵelementEnd(),t.ɵɵelement(34,"input",18)(35,"mat-hint",19),t.ɵɵpipe(36,"translate"),t.ɵɵpipe(37,"safe"),t.ɵɵelementEnd()(),t.ɵɵtemplate(38,Nr,7,6,"div",20),t.ɵɵelementEnd()()()),2&e){let e;t.ɵɵproperty("formGroup",n.mathFunctionConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("function",n.mathFunctionConfigForm.get("operation").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mathFunctionConfigForm.get("operation").value===n.MathFunction.CUSTOM),t.ɵɵadvance(10),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(17,11,null==(e=n.argumentTypeResultMap.get(n.mathFunctionConfigForm.get("result.type").value))?null:e.name)," "),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.argumentsResult),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mathFunctionConfigForm.get("result.type").hasError("required")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.mathFunctionConfigForm.get("result").get("type").value===n.ArgumentTypeResult.ATTRIBUTE),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(27,13,"tb.rulenode.math-templatization-tooltip")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.mathFunctionConfigForm.get("result.key").hasError("required")),t.ɵɵadvance(6),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(37,17,t.ɵɵpipeBind1(36,15,"tb.rulenode.number-floating-point-field-input-hint"),"html"),t.ɵɵsanitizeHtml),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",t.ɵɵpureFunction2(20,Sr,n.ArgumentTypeResult.ATTRIBUTE,n.ArgumentTypeResult.TIME_SERIES).includes(n.mathFunctionConfigForm.get("result").get("type").value))}},dependencies:t.ɵɵgetComponentDepsFactory(wr),styles:["[_nghost-%COMP%] .fields-group{padding:0 16px 8px;margin:10px 0;border:1px groove rgba(0,0,0,.25);border-radius:4px}[_nghost-%COMP%] .fields-group .mat-mdc-form-field .mat-mdc-form-field-infix{width:100%}[_nghost-%COMP%] .fields-group legend{color:#000000b3;width:fit-content}[_nghost-%COMP%] .fields-group legend+*{display:block}[_nghost-%COMP%] .fields-group legend+*.no-margin-top{margin-top:0}"]})}}function Mr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",4),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",r.messageTypeNames.get(e)," ")}}e("MathFunctionConfigComponent",wr);class Br extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.messageTypeNames=f,this.eventOptions=[g.CONNECT_EVENT,g.ACTIVITY_EVENT,g.DISCONNECT_EVENT,g.INACTIVITY_EVENT]}configForm(){return this.deviceState}prepareInputConfig(e){return{event:P(e?.event)?e.event:g.ACTIVITY_EVENT}}onConfigurationSet(e){this.deviceState=this.fb.group({event:[e.event,[N.required]]})}static{this.ɵfac=function(e){return new(e||Br)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Br,selectors:[["tb-action-node-device-state-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:5,consts:[[3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["formControlName","event"],[3,"value",4,"ngFor","ngForOf"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",2),t.ɵɵtemplate(6,Mr,2,2,"mat-option",3),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.deviceState),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,3,"tb.rulenode.select-device-connectivity-event")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.eventOptions))},dependencies:t.ɵɵgetComponentDepsFactory(Br),encapsulation:2})}}e("DeviceStateConfigComponent",Br);const Vr=(e,t)=>({valText:e,keyText:t});function Or(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",13),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.requiredText," ")}}function Dr(e,n){1&e&&(t.ɵɵelementStart(0,"div",13),t.ɵɵtext(1," tb.rulenode.map-fields-required "),t.ɵɵelementEnd())}function Lr(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",13),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,"tb.key-val.unique-key-value-pair-error",t.ɵɵpureFunction2(4,Vr,e.valText,e.keyText))," ")}}function Pr(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",14)(1,"mat-form-field",15),t.ɵɵelement(2,"input",16),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-form-field",15),t.ɵɵelement(4,"input",16),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",17)(6,"button",18),t.ɵɵpipe(7,"translate"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.removeKeyVal(n))})),t.ɵɵelementStart(8,"mat-icon"),t.ɵɵtext(9,"delete"),t.ɵɵelementEnd()()()()}if(2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵproperty("placeholder",r.keyText+"*")("formControl",e.get("key")),t.ɵɵadvance(2),t.ɵɵproperty("placeholder",r.valText+"*")("formControl",e.get("value")),t.ɵɵadvance(2),t.ɵɵclassProp("tb-hidden",1===r.keyValsFormArray().controls.length),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(7,8,"tb.key-val.remove-mapping-entry")),t.ɵɵproperty("disabled",r.disabled)}}function Rr(e,n){if(1&e&&t.ɵɵelement(0,"tb-example-hint",19),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("hintText",e.hintText)("popupHelpLink",e.popupHelpLink)}}class _r{constructor(e,t){this.injector=e,this.fb=t,this.propagateChange=()=>{},this.destroy$=new Y,this.disabled=!1,this.uniqueKeyValuePairValidator=!1,this.required=!1,this.duplicateValuesValidator=e=>e.controls.key.value===e.controls.value.value&&e.controls.key.value&&e.controls.value.value?{uniqueKeyValuePair:!0}:null,this.oneMapRequiredValidator=e=>e.get("keyVals").value.length,this.propagateNestedErrors=e=>{if(this.kvListFormGroup&&this.kvListFormGroup.get("keyVals")&&"VALID"===this.kvListFormGroup.get("keyVals")?.status)return null;const t={};if(this.kvListFormGroup&&this.kvListFormGroup.setErrors(null),e instanceof w||e instanceof M){if(e.errors)for(const n of Object.keys(e.errors))t[n]=!0;for(const n of Object.keys(e.controls)){const r=this.propagateNestedErrors(e.controls[n]);if(r&&Object.keys(r).length)for(const e of Object.keys(r))t[e]=!0}return t}if(e.errors)for(const n of Object.keys(e.errors))t[n]=!0;return R(t,{})?null:t}}ngOnInit(){this.ngControl=this.injector.get(B),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.kvListFormGroup=this.fb.group({keyVals:this.fb.array([])},{validators:[this.propagateNestedErrors,this.oneMapRequiredValidator]}),this.kvListFormGroup.valueChanges.pipe(W(this.destroy$)).subscribe((()=>{this.updateModel()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}keyValsFormArray(){return this.kvListFormGroup.get("keyVals")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.kvListFormGroup.disable({emitEvent:!1}):this.kvListFormGroup.enable({emitEvent:!1})}writeValue(e){const t=Object.keys(e).map((t=>({key:t,value:e[t]})));if(this.keyValsFormArray().length===t.length)this.keyValsFormArray().patchValue(t,{emitEvent:!1});else{const e=[];t.forEach((t=>{e.push(this.fb.group({key:[t.key,[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],value:[t.value,[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]},{validators:this.uniqueKeyValuePairValidator?[this.duplicateValuesValidator]:[]}))})),this.kvListFormGroup.setControl("keyVals",this.fb.array(e,this.propagateNestedErrors),{emitEvent:!1})}}removeKeyVal(e){this.keyValsFormArray().removeAt(e)}addKeyVal(){this.keyValsFormArray().push(this.fb.group({key:["",[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],value:["",[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]},{validators:this.uniqueKeyValuePairValidator?[this.duplicateValuesValidator]:[]}))}validate(){const e=this.kvListFormGroup.get("keyVals").value;if(!e.length&&this.required)return{kvMapRequired:!0};if(!this.kvListFormGroup.valid)return{kvFieldsRequired:!0};if(this.uniqueKeyValuePairValidator)for(const t of e)if(t.key===t.value)return{uniqueKeyValuePair:!0};return null}updateModel(){const e=this.kvListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.kvListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}static{this.ɵfac=function(e){return new(e||_r)(t.ɵɵdirectiveInject(t.Injector),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:_r,selectors:[["tb-kv-map-config"]],inputs:{disabled:"disabled",uniqueKeyValuePairValidator:"uniqueKeyValuePairValidator",labelText:"labelText",requiredText:"requiredText",keyText:"keyText",keyRequiredText:"keyRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",popupHelpLink:"popupHelpLink",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>_r)),multi:!0},{provide:O,useExisting:r((()=>_r)),multi:!0}])],decls:22,vars:12,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],[1,"tb-form-row","no-padding","no-border","space-between"],[1,"tb-form-panel-title"],["class","tb-form-panel-hint tb-error","translate","",4,"ngIf"],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-table"],[1,"tb-form-table-header"],[1,"tb-form-table-header-cell","field-space"],[1,"tb-form-table-header-cell","actions-header"],[1,"tb-form-table-body"],["class","tb-form-table-row",4,"ngFor","ngForOf"],["type","button","mat-stroked-button","","color","primary",3,"click"],[3,"hintText","popupHelpLink",4,"ngIf"],["translate","",1,"tb-form-panel-hint","tb-error"],[1,"tb-form-table-row"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","field-space"],["matInput","",3,"placeholder","formControl"],[1,"tb-form-table-row-cell-buttons"],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","disabled","matTooltip"],[3,"hintText","popupHelpLink"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Or,2,1,"div",3)(5,Dr,2,0,"div",3)(6,Lr,3,7,"div",3),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"div",4)(8,"div",5)(9,"div",6)(10,"div",7),t.ɵɵtext(11),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"div",7),t.ɵɵtext(13),t.ɵɵelementEnd(),t.ɵɵelement(14,"div",8),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"div",9),t.ɵɵtemplate(16,Pr,10,10,"div",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(17,"div")(18,"button",11),t.ɵɵlistener("click",(function(){return n.addKeyVal()})),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(21,Rr,1,2,"tb-example-hint",12),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.kvListFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(n.labelText),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.kvListFormGroup.hasError("kvMapRequired")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.kvListFormGroup.hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.kvListFormGroup.hasError("uniqueKeyValuePair")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(n.keyText),t.ɵɵadvance(2),t.ɵɵtextInterpolate(n.valText),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.keyValsFormArray().controls),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(20,10,"tb.key-val.add-mapping-entry")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.popupHelpLink||n.hintText))},dependencies:t.ɵɵgetComponentDepsFactory(_r),styles:["[_nghost-%COMP%] .field-space[_ngcontent-%COMP%]{flex:1 1 50%}[_nghost-%COMP%] .actions-header[_ngcontent-%COMP%]{width:40px}"]})}}e("KvMapConfigComponent",_r),J([h()],_r.prototype,"disabled",void 0),J([h()],_r.prototype,"uniqueKeyValuePairValidator",void 0),J([h()],_r.prototype,"required",void 0);const jr=e=>({inputName:e});function Gr(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",13),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"span",3),t.ɵɵtext(4,"tb.rulenode.relations-query-config-direction-suffix"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.directionTypeTranslations.get(e))," ")}}function Kr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-relation-level-error")," "))}function Ur(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-relation-level-invalid")," "))}function Hr(e,n){1&e&&(t.ɵɵelementStart(0,"div",14),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",15),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.last-level-device-relation-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"alias.last-level-relation")," "))}class zr extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.values(d),this.directionTypeTranslations=b,this.entityType=u,this.propagateChange=null}ngOnInit(){this.deviceRelationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[N.required]],maxLevel:[null,[N.min(1)]],relationType:[null],deviceTypes:[null,[N.required]]}),this.deviceRelationsQueryFormGroup.valueChanges.subscribe((e=>{this.deviceRelationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.deviceRelationsQueryFormGroup.disable({emitEvent:!1}):this.deviceRelationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.deviceRelationsQueryFormGroup.reset(e,{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||zr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:zr,selectors:[["tb-device-relations-query-config"]],inputs:{disabled:"disabled",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>zr)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:24,vars:26,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"flex","flex-row","gap-5.5"],["subscriptSizing","dynamic","hideRequiredMarker","",1,"mat-block","max-w-50%","flex-full",2,"min-width","100px"],["translate",""],["required","","formControlName","direction"],[3,"value",4,"ngFor","ngForOf"],["floatLabel","always",1,"mat-block","max-w-50%","flex-full"],["matInput","","type","text","pattern","[0-9]*","inputmode","numeric","min","1","formControlName","maxLevel",3,"placeholder"],[4,"ngIf"],["class","tb-form-row no-border no-padding last-level-slide-toggle",3,"tb-hint-tooltip-icon",4,"ngIf"],["formControlName","relationType",1,"flex-1"],["required","","formControlName","deviceTypes",3,"label","entityType","emptyInputPlaceholder","filledInputPlaceholder"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[3,"value"],[1,"tb-form-row","no-border","no-padding","last-level-slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","fetchLastLevelOnly",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"mat-form-field",2)(3,"mat-label",3),t.ɵɵtext(4,"relation.direction"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",4),t.ɵɵtemplate(6,Gr,5,4,"mat-option",5),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",6)(8,"mat-label",3),t.ɵɵtext(9,"tb.rulenode.max-relation-level"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",7),t.ɵɵpipe(11,"translate"),t.ɵɵtemplate(12,Kr,3,3,"mat-error",8)(13,Ur,3,3,"mat-error",8),t.ɵɵelementEnd()(),t.ɵɵtemplate(14,Hr,5,6,"div",9),t.ɵɵelement(15,"tb-relation-type-autocomplete",10),t.ɵɵelementStart(16,"tb-entity-subtype-list",11),t.ɵɵpipe(17,"translate"),t.ɵɵpipe(18,"translate"),t.ɵɵpipe(19,"translate"),t.ɵɵelementStart(20,"mat-icon",12),t.ɵɵpipe(21,"translate"),t.ɵɵpipe(22,"translate"),t.ɵɵtext(23,"help"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.deviceRelationsQueryFormGroup),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.directionTypes),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(11,11,"tb.rulenode.unlimited-level")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.deviceRelationsQueryFormGroup.get("maxLevel").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deviceRelationsQueryFormGroup.get("maxLevel").invalid),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deviceRelationsQueryFormGroup.get("maxLevel").value>1),t.ɵɵadvance(2),t.ɵɵproperty("label",t.ɵɵpipeBind1(17,13,"tb.rulenode.device-profiles"))("entityType",n.entityType.DEVICE)("emptyInputPlaceholder",t.ɵɵpipeBind1(18,15,"tb.rulenode.add-device-profile"))("filledInputPlaceholder",t.ɵɵpipeBind1(19,17,"tb.rulenode.add-device-profile")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(22,21,"tb.rulenode.chip-help",t.ɵɵpureFunction1(24,jr,t.ɵɵpipeBind1(21,19,"tb.rulenode.device-profile")))))},dependencies:t.ɵɵgetComponentDepsFactory(zr),styles:["[_nghost-%COMP%] .last-level-slide-toggle[_ngcontent-%COMP%]{margin:8px 0 24px}"]})}}function $r(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",13),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"span",4),t.ɵɵtext(4,"tb.rulenode.relations-query-config-direction-suffix"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.directionTypeTranslations.get(e))," ")}}function Qr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-relation-level-error")," "))}function Jr(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-relation-level-invalid")," "))}function Yr(e,n){1&e&&(t.ɵɵelementStart(0,"div",14),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",15),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(1,2,"tb.rulenode.last-level-relation-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,4,"alias.last-level-relation")," "))}e("DeviceRelationsQueryConfigComponent",zr);class Wr extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.values(d),this.directionTypeTranslations=b,this.propagateChange=null}ngOnInit(){this.relationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[N.required]],maxLevel:[null,[N.min(1)]],filters:[null]}),this.relationsQueryFormGroup.valueChanges.subscribe((e=>{this.relationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.relationsQueryFormGroup.disable({emitEvent:!1}):this.relationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.relationsQueryFormGroup.reset(e||{},{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||Wr)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Wr,selectors:[["tb-relations-query-config"]],inputs:{disabled:"disabled",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>Wr)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:22,vars:9,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-panel-title","tb-required"],[1,"flex","flex-row","gap-4"],["hideRequiredMarker","",1,"mat-block","max-w-50%","flex-full",2,"min-width","100px"],["translate",""],["required","","formControlName","direction"],[3,"value",4,"ngFor","ngForOf"],["floatLabel","always",1,"mat-block","max-w-50%","flex-full"],["matInput","","type","text","pattern","[0-9]*","min","1","inputmode","numeric","formControlName","maxLevel",3,"placeholder"],[4,"ngIf"],["class","tb-form-row no-border no-padding last-level-slide-toggle",3,"tb-hint-tooltip-icon",4,"ngIf"],["translate","",1,"tb-form-panel-title"],["formControlName","filters"],[3,"value"],[1,"tb-form-row","no-border","no-padding","last-level-slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","fetchLastLevelOnly",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.relations-query"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"section")(4,"div",2)(5,"mat-form-field",3)(6,"mat-label",4),t.ɵɵtext(7,"relation.direction"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",5),t.ɵɵtemplate(9,$r,5,4,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",7)(11,"mat-label",4),t.ɵɵtext(12,"tb.rulenode.max-relation-level"),t.ɵɵelementEnd(),t.ɵɵelement(13,"input",8),t.ɵɵpipe(14,"translate"),t.ɵɵtemplate(15,Qr,3,3,"mat-error",9)(16,Jr,3,3,"mat-error",9),t.ɵɵelementEnd()(),t.ɵɵtemplate(17,Yr,5,6,"div",10),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"section",0)(19,"div",11),t.ɵɵtext(20,"relation.relation-filters"),t.ɵɵelementEnd(),t.ɵɵelement(21,"tb-relation-filters",12),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.relationsQueryFormGroup),t.ɵɵadvance(9),t.ɵɵproperty("ngForOf",n.directionTypes),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(14,7,"tb.rulenode.unlimited-level")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.relationsQueryFormGroup.get("maxLevel").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.relationsQueryFormGroup.get("maxLevel").invalid),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.relationsQueryFormGroup.get("maxLevel").value>1),t.ɵɵadvance(),t.ɵɵproperty("formGroup",n.relationsQueryFormGroup))},dependencies:t.ɵɵgetComponentDepsFactory(Wr),encapsulation:2})}}e("RelationsQueryConfigComponent",Wr);const Xr=["chipList"],Zr=["messageTypeAutocomplete"],ea=["messageTypeInput"],ta=e=>({inputName:e}),na=e=>({messageType:e});function ra(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-label"),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate(e.label)}}function aa(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-chip-row",13),t.ɵɵlistener("removed",(function(){const n=t.ɵɵrestoreView(e).$implicit,r=t.ɵɵnextContext();return t.ɵɵresetView(r.remove(n))})),t.ɵɵtext(1),t.ɵɵelementStart(2,"mat-icon",14),t.ɵɵtext(3,"close"),t.ɵɵelementEnd()()}if(2&e){const e=n.$implicit;t.ɵɵproperty("removable",!0),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}function ia(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",15),t.ɵɵelement(1,"span",16),t.ɵɵpipe(2,"highlight"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(2,2,e.name,r.searchText),t.ɵɵsanitizeHtml)}}function oa(e,n){1&e&&(t.ɵɵelementStart(0,"div")(1,"span",21),t.ɵɵtext(2,"tb.rulenode.no-message-types-found"),t.ɵɵelementEnd()())}function la(e,n){if(1&e&&(t.ɵɵelementStart(0,"span"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,"tb.rulenode.no-message-type-matching",t.ɵɵpureFunction1(4,na,e.truncate.transform(e.searchText,!0,6,"...")))," ")}}function sa(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-option",17)(1,"div",18),t.ɵɵlistener("click",(function(n){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.stopPropagation())})),t.ɵɵtemplate(2,oa,3,0,"div",19)(3,la,3,6,"ng-template",null,3,t.ɵɵtemplateRefExtractor),t.ɵɵelementStart(5,"span")(6,"a",20),t.ɵɵlistener("click",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext();return t.ɵɵresetView(r.createMessageType(n,r.searchText))})),t.ɵɵtext(7,"tb.rulenode.create-new-message-type"),t.ɵɵelementEnd()()()()}if(2&e){const e=t.ɵɵreference(4),n=t.ɵɵnextContext();t.ɵɵproperty("value",null),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!n.textIsNotEmpty(n.searchText))("ngIfElse",e)}}function pa(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.select-message-types-required")," "))}class ma extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.truncate=n,this.fb=r,this.placeholder="tb.rulenode.add-message-type",this.separatorKeysCodes=[U,H,z],this.messageTypes=[],this.messageTypesList=[],this.searchText="",this.propagateChange=e=>{},this.messageTypeConfigForm=this.fb.group({messageType:[null]});for(const e of Object.keys(g))this.messageTypesList.push({name:f.get(g[e]),value:e})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}ngOnInit(){this.filteredMessageTypes=this.messageTypeConfigForm.get("messageType").valueChanges.pipe(ee(""),te((e=>e||"")),ne((e=>this.fetchMessageTypes(e))),re())}setDisabledState(e){this.disabled=e,this.disabled?this.messageTypeConfigForm.disable({emitEvent:!1}):this.messageTypeConfigForm.enable({emitEvent:!1})}writeValue(e){this.searchText="",this.messageTypes.length=0,e&&e.forEach((e=>{const t=this.messageTypesList.find((t=>t.value===e));t?this.messageTypes.push({name:t.name,value:t.value}):this.messageTypes.push({name:e,value:e})}))}displayMessageTypeFn(e){return e?e.name:void 0}textIsNotEmpty(e){return e&&e.length>0}createMessageType(e,t){e.preventDefault(),this.transformMessageType(t)}add(e){this.transformMessageType(e.value)}fetchMessageTypes(e){if(this.searchText=e,this.searchText&&this.searchText.length){const e=this.searchText.toUpperCase();return X(this.messageTypesList.filter((t=>t.name.toUpperCase().includes(e))))}return X(this.messageTypesList)}transformMessageType(e){if((e||"").trim()){let t;const n=e.trim(),r=this.messageTypesList.find((e=>e.name===n));t=r?{name:r.name,value:r.value}:{name:n,value:n},t&&this.addMessageType(t)}this.clear("")}remove(e){const t=this.messageTypes.indexOf(e);t>=0&&(this.messageTypes.splice(t,1),this.updateModel())}selected(e){this.addMessageType(e.option.value),this.clear("")}addMessageType(e){-1===this.messageTypes.findIndex((t=>t.value===e.value))&&(this.messageTypes.push(e),this.updateModel())}onFocus(){this.messageTypeConfigForm.get("messageType").updateValueAndValidity({onlySelf:!0,emitEvent:!0})}clear(e=""){this.messageTypeInput.nativeElement.value=e,this.messageTypeConfigForm.get("messageType").patchValue(null,{emitEvent:!0}),setTimeout((()=>{this.messageTypeInput.nativeElement.blur(),this.messageTypeInput.nativeElement.focus()}),0)}updateModel(){const e=this.messageTypes.map((e=>e.value));this.required?(this.chipList.errorState=!e.length,this.propagateChange(e.length>0?e:null)):(this.chipList.errorState=!1,this.propagateChange(e))}static{this.ɵfac=function(e){return new(e||ma)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(v.TruncatePipe),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ma,selectors:[["tb-message-types-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(Xr,5),t.ɵɵviewQuery(Zr,5),t.ɵɵviewQuery(ea,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.chipList=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.matAutocomplete=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.messageTypeInput=e.first)}},inputs:{required:"required",label:"label",placeholder:"placeholder",disabled:"disabled"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>ma)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:20,vars:27,consts:[["chipList",""],["messageTypeInput","","origin","matAutocompleteOrigin"],["messageTypeAutocomplete","matAutocomplete"],["searchNotEmpty",""],[2,"width","100%",3,"formGroup"],[4,"ngIf"],[3,"required"],[3,"removable","removed",4,"ngFor","ngForOf"],["matInput","","type","text","formControlName","messageType","matAutocompleteOrigin","",3,"focusin","matChipInputTokenEnd","placeholder","matAutocompleteConnectedTo","matAutocomplete","matChipInputFor","matChipInputSeparatorKeyCodes"],[1,"tb-autocomplete",3,"optionSelected","displayWith"],[3,"value",4,"ngFor","ngForOf"],["class","tb-not-found",3,"value",4,"ngIf"],["aria-hidden","false","aria-label","help-icon","matSuffix","","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[3,"removed","removable"],["matChipRemove",""],[3,"value"],[3,"innerHTML"],[1,"tb-not-found",3,"value"],[1,"tb-not-found-content",3,"click"],[4,"ngIf","ngIfElse"],["translate","",3,"click"],["translate",""]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field",4),t.ɵɵtemplate(1,ra,2,1,"mat-label",5),t.ɵɵelementStart(2,"mat-chip-grid",6,0),t.ɵɵtemplate(4,aa,4,2,"mat-chip-row",7),t.ɵɵelementStart(5,"input",8,1),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("focusin",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onFocus())}))("matChipInputTokenEnd",(function(r){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.add(r))})),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"mat-autocomplete",9,2),t.ɵɵlistener("optionSelected",(function(r){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.selected(r))})),t.ɵɵtemplate(11,ia,3,5,"mat-option",10),t.ɵɵpipe(12,"async"),t.ɵɵtemplate(13,sa,8,3,"mat-option",11),t.ɵɵpipe(14,"async"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"mat-icon",12),t.ɵɵpipe(16,"translate"),t.ɵɵpipe(17,"translate"),t.ɵɵtext(18,"help"),t.ɵɵelementEnd(),t.ɵɵtemplate(19,pa,3,3,"mat-error",5),t.ɵɵelementEnd()}if(2&e){let e;const r=t.ɵɵreference(3),a=t.ɵɵreference(7),i=t.ɵɵreference(10);t.ɵɵproperty("formGroup",n.messageTypeConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.label),t.ɵɵadvance(),t.ɵɵproperty("required",n.required),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.messageTypes),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(8,14,n.placeholder)),t.ɵɵproperty("matAutocompleteConnectedTo",a)("matAutocomplete",i)("matChipInputFor",r)("matChipInputSeparatorKeyCodes",n.separatorKeysCodes),t.ɵɵadvance(4),t.ɵɵproperty("displayWith",n.displayMessageTypeFn),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(12,16,n.filteredMessageTypes)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",0===(null==(e=t.ɵɵpipeBind1(14,18,n.filteredMessageTypes))?null:e.length)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(17,22,"tb.rulenode.chip-help",t.ɵɵpureFunction1(25,ta,t.ɵɵpipeBind1(16,20,"tb.rulenode.message-type")))),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",r.errorState)}},dependencies:t.ɵɵgetComponentDepsFactory(ma),encapsulation:2})}}function da(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",12),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e)("disabled","cert.PEM"===e&&r.disableCertPemCredentials),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,3,r.credentialsTypeTranslationsMap.get(e))," ")}}function ua(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.credentials-type-required")," "))}function ca(e,t){}function fa(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.username-required")," "))}function ga(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.password-required")," "))}function ha(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",4)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.username"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",13),t.ɵɵtemplate(4,fa,3,3,"mat-error",7),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",4)(6,"mat-label",2),t.ɵɵtext(7,"tb.rulenode.password"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",14)(9,"tb-toggle-password",15),t.ɵɵtemplate(10,ga,3,3,"mat-error",7),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.credentialsConfigFormGroup.get("username").hasError("required")),t.ɵɵadvance(4),t.ɵɵproperty("required",e.passwordFieldRequired),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.credentialsConfigFormGroup.get("password").hasError("required"))}}function ya(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",16),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"tb-file-input",17),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.credentialsConfigFormGroup.get("caCertFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"tb-file-input",18),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.credentialsConfigFormGroup.get("certFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"tb-file-input",19),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext(2);return t.ɵɵresetView(r.credentialsConfigFormGroup.get("privateKeyFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",4)(13,"mat-label",2),t.ɵɵtext(14,"tb.rulenode.private-key-password"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",20)(16,"tb-toggle-password",15),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,10,"tb.rulenode.credentials-pem-hint")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(4,12,"tb.rulenode.ca-cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(5,14,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.credentialsConfigFormGroup.get("caCertFileName").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(7,16,"tb.rulenode.cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(8,18,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.credentialsConfigFormGroup.get("certFileName").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(10,20,"tb.rulenode.private-key")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(11,22,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.credentialsConfigFormGroup.get("privateKeyFileName").value)}}function ba(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",4)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.credentials-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",5),t.ɵɵtemplate(4,da,3,5,"mat-option",6),t.ɵɵelementEnd(),t.ɵɵtemplate(5,ua,3,3,"mat-error",7),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"section",8),t.ɵɵtemplate(7,ca,0,0,"ng-template",9)(8,ha,11,3,"ng-template",10)(9,ya,17,24,"ng-template",11),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.allCredentialsTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.credentialsConfigFormGroup.get("type").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngSwitch",e.credentialsConfigFormGroup.get("type").value)}}e("MessageTypesConfigComponent",ma);class va extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.subscriptions=[],this.disableCertPemCredentials=!1,this.passwordFieldRequired=!0,this.allCredentialsTypes=Mt,this.credentialsTypeTranslationsMap=Bt,this.propagateChange=e=>{}}ngOnInit(){this.credentialsConfigFormGroup=this.fb.group({type:[null,[N.required]],username:[null,[]],password:[null,[]],caCert:[null,[]],caCertFileName:[null,[]],privateKey:[null,[]],privateKeyFileName:[null,[]],cert:[null,[]],certFileName:[null,[]]}),this.subscriptions.push(this.credentialsConfigFormGroup.valueChanges.subscribe((()=>{this.updateView()}))),this.subscriptions.push(this.credentialsConfigFormGroup.get("type").valueChanges.subscribe((()=>{this.credentialsTypeChanged()})))}ngOnChanges(e){for(const t of Object.keys(e)){const n=e[t];if(!n.firstChange&&n.currentValue!==n.previousValue&&n.currentValue&&"disableCertPemCredentials"===t){"cert.PEM"===this.credentialsConfigFormGroup.get("type").value&&setTimeout((()=>{this.credentialsConfigFormGroup.get("type").patchValue("anonymous",{emitEvent:!0})}))}}}ngOnDestroy(){this.subscriptions.forEach((e=>e.unsubscribe()))}writeValue(e){P(e)&&(this.credentialsConfigFormGroup.reset(e,{emitEvent:!1}),this.updateValidators())}setDisabledState(e){e?this.credentialsConfigFormGroup.disable({emitEvent:!1}):(this.credentialsConfigFormGroup.enable({emitEvent:!1}),this.updateValidators())}updateView(){let e=this.credentialsConfigFormGroup.value;const t=e.type;switch(t){case"anonymous":e={type:t};break;case"basic":e={type:t,username:e.username,password:e.password};break;case"cert.PEM":delete e.username}this.propagateChange(e)}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}validate(e){return this.credentialsConfigFormGroup.valid?null:{credentialsConfig:{valid:!1}}}credentialsTypeChanged(){this.credentialsConfigFormGroup.patchValue({username:null,password:null,caCert:null,caCertFileName:null,privateKey:null,privateKeyFileName:null,cert:null,certFileName:null}),this.updateValidators()}updateValidators(e=!1){const t=this.credentialsConfigFormGroup.get("type").value;switch(e&&this.credentialsConfigFormGroup.reset({type:t},{emitEvent:!1}),this.credentialsConfigFormGroup.setValidators([]),this.credentialsConfigFormGroup.get("username").setValidators([]),this.credentialsConfigFormGroup.get("password").setValidators([]),t){case"anonymous":break;case"basic":this.credentialsConfigFormGroup.get("username").setValidators([N.required]),this.credentialsConfigFormGroup.get("password").setValidators(this.passwordFieldRequired?[N.required]:[]);break;case"cert.PEM":this.credentialsConfigFormGroup.setValidators([this.requiredFilesSelected(N.required,[["caCert","caCertFileName"],["privateKey","privateKeyFileName","cert","certFileName"]])])}this.credentialsConfigFormGroup.get("username").updateValueAndValidity({emitEvent:e}),this.credentialsConfigFormGroup.get("password").updateValueAndValidity({emitEvent:e}),this.credentialsConfigFormGroup.updateValueAndValidity({emitEvent:e})}requiredFilesSelected(e,t=null){return n=>{t||(t=[Object.keys(n.controls)]);return n?.controls&&t.some((t=>t.every((t=>!e(n.controls[t])))))?null:{notAllRequiredFilesSelected:!0}}}static{this.ɵfac=function(e){return new(e||va)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:va,selectors:[["tb-credentials-config"]],inputs:{required:"required",disableCertPemCredentials:"disableCertPemCredentials",passwordFieldRequired:"passwordFieldRequired"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>va)),multi:!0},{provide:O,useExisting:r((()=>va)),multi:!0}]),t.ɵɵInheritDefinitionFeature,t.ɵɵNgOnChangesFeature],decls:9,vars:4,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"tb-credentials-config-panel-group"],["translate",""],["matExpansionPanelContent",""],[1,"mat-block"],["formControlName","type","required",""],[3,"value","disabled",4,"ngFor","ngForOf"],[4,"ngIf"],[1,"flex","flex-col",3,"ngSwitch"],["ngSwitchCase","anonymous"],["ngSwitchCase","basic"],["ngSwitchCase","cert.PEM"],[3,"value","disabled"],["required","","matInput","","formControlName","username"],["type","password","matInput","","formControlName","password",3,"required"],["matSuffix",""],[1,"tb-hint"],["formControlName","caCert","inputId","caCertSelect","noFileText","tb.rulenode.no-file",3,"fileNameChanged","existingFileName","label","dropLabel"],["formControlName","cert","inputId","CertSelect","noFileText","tb.rulenode.no-file",3,"fileNameChanged","existingFileName","label","dropLabel"],["formControlName","privateKey","inputId","privateKeySelect","noFileText","tb.rulenode.no-file",2,"padding-bottom","8px",3,"fileNameChanged","existingFileName","label","dropLabel"],["type","password","matInput","","formControlName","password"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-expansion-panel",1)(2,"mat-expansion-panel-header")(3,"mat-panel-title",2),t.ɵɵtext(4,"tb.rulenode.credentials"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-panel-description"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(8,ba,10,3,"ng-template",3),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.credentialsConfigFormGroup),t.ɵɵadvance(6),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,2,n.credentialsTypeTranslationsMap.get(n.credentialsConfigFormGroup.get("type").value))," "))},dependencies:t.ɵɵgetComponentDepsFactory(va),encapsulation:2})}}function xa(e,n){1&e&&(t.ɵɵelementStart(0,"button",22),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-icon"),t.ɵɵtext(3,"drag_handle"),t.ɵɵelementEnd()()),2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,1,"action.drag"))}function Ca(e,n){if(1&e&&(t.ɵɵelementStart(0,"span",23),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(),t.ɵɵtextInterpolate1("",e.get("name").value,".")}}function Sa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",24),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"small",25),t.ɵɵtext(4),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,3,r.argumentTypeMap.get(e).name)," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",r.argumentTypeMap.get(e).description," ")}}function Ta(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",13),t.ɵɵtext(1," tb.rulenode.argument-source-field-input-required "),t.ɵɵelementEnd())}function Ia(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",13),t.ɵɵtext(1," tb.rulenode.argument-key-field-input-required "),t.ɵɵelementEnd())}function Ea(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",26)(1,"mat-label",13),t.ɵɵtext(2,"tb.rulenode.argument-key-field-input"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",27),t.ɵɵelementStart(4,"mat-icon",28),t.ɵɵpipe(5,"translate"),t.ɵɵtext(6," help "),t.ɵɵelementEnd(),t.ɵɵtemplate(7,Ia,2,0,"mat-error",16),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.get("key")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(5,3,"tb.rulenode.math-templatization-tooltip")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.get("key").hasError("required"))}}function Fa(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",13),t.ɵɵtext(1," tb.rulenode.constant-value-field-input-required "),t.ɵɵelementEnd())}function qa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",29)(1,"mat-label",13),t.ɵɵtext(2,"tb.rulenode.constant-value-field-input"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",30),t.ɵɵtemplate(4,Fa,2,0,"mat-error",16),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.get("key")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("key").hasError("required"))}}function Aa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",26)(1,"mat-label",13),t.ɵɵtext(2,"tb.rulenode.default-value-field-input"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",31),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit;t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.get("defaultValue"))}}function ka(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",33),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.attributeScopeMap.get(e))," ")}}function Na(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error",13),t.ɵɵtext(1," tb.rulenode.attribute-scope-field-input-required "),t.ɵɵelementEnd())}function wa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",12)(1,"mat-label",13),t.ɵɵtext(2,"tb.rulenode.attribute-scope-field-input"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",14),t.ɵɵtemplate(4,ka,3,4,"mat-option",32),t.ɵɵelementEnd(),t.ɵɵtemplate(5,Na,2,0,"mat-error",16),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext().$implicit,n=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵproperty("formControl",e.get("attributeScope")),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.attributeScope),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.get("attributeScope").hasError("required"))}}function Ma(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",34),t.ɵɵpipe(1,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext().index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.removeArgument(n))})),t.ɵɵelementStart(2,"mat-icon"),t.ɵɵtext(3,"close"),t.ɵɵelementEnd()()}2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,1,"action.remove"))}function Ba(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-list-item",6)(1,"div",7),t.ɵɵtemplate(2,xa,4,3,"button",8),t.ɵɵelementStart(3,"div",9),t.ɵɵtemplate(4,Ca,2,1,"span",10),t.ɵɵelementStart(5,"div",11)(6,"mat-form-field",12)(7,"mat-label",13),t.ɵɵtext(8,"tb.rulenode.argument-source-field-input"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-select",14)(10,"mat-select-trigger"),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(13,Sa,5,5,"mat-option",15),t.ɵɵelementEnd(),t.ɵɵtemplate(14,Ta,2,0,"mat-error",16),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"div",17),t.ɵɵtemplate(16,Ea,8,5,"mat-form-field",18)(17,qa,5,2,"mat-form-field",19)(18,Aa,4,1,"mat-form-field",18),t.ɵɵelementEnd(),t.ɵɵtemplate(19,wa,6,3,"mat-form-field",20),t.ɵɵelementEnd(),t.ɵɵtemplate(20,Ma,4,3,"button",21),t.ɵɵelementEnd()()()),2&e){let e;const r=n.$implicit,a=t.ɵɵnextContext();t.ɵɵproperty("cdkDragDisabled",a.disabled),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!a.disabled),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",a.displayArgumentName),t.ɵɵadvance(5),t.ɵɵproperty("formControl",r.get("type")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,12,null==(e=a.argumentTypeMap.get(r.get("type").value))?null:e.name)," "),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",a.arguments),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.get("type").hasError("required")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",r.get("type").value&&r.get("type").value!==a.ArgumentType.CONSTANT),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.get("type").value===a.ArgumentType.CONSTANT),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.get("type").value&&r.get("type").value!==a.ArgumentType.CONSTANT),t.ɵɵadvance(),t.ɵɵproperty("ngIf",r.get("type").value===a.ArgumentType.ATTRIBUTE),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!a.disabled)}}function Va(e,n){1&e&&(t.ɵɵelementStart(0,"div")(1,"span",35),t.ɵɵtext(2,"tb.rulenode.no-arguments-prompt"),t.ɵɵelementEnd()())}e("CredentialsConfigComponent",va);class Oa extends y{get function(){return this.functionValue}set function(e){e&&this.functionValue!==e&&(this.functionValue=e,this.setupArgumentsFormGroup(!0))}constructor(e,t){super(e),this.store=e,this.fb=t,this.maxArgs=16,this.minArgs=1,this.displayArgumentName=!1,this.mathFunctionMap=_t,this.ArgumentType=jt,this.attributeScopeMap=Xt,this.argumentTypeMap=$t,this.arguments=Object.values(jt),this.attributeScope=Object.values(Yt),this.propagateChange=null,this.valueChangeSubscription=[]}ngOnInit(){this.argumentsFormGroup=this.fb.group({arguments:this.fb.array([])}),this.valueChangeSubscription.push(this.argumentsFormGroup.valueChanges.subscribe((()=>{this.updateModel()}))),this.setupArgumentsFormGroup()}onDrop(e){const t=this.argumentsFormArray,n=t.at(e.previousIndex);t.removeAt(e.previousIndex),t.insert(e.currentIndex,n),this.updateArgumentNames()}get argumentsFormArray(){return this.argumentsFormGroup.get("arguments")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.argumentsFormGroup.disable({emitEvent:!1}):(this.argumentsFormGroup.enable({emitEvent:!1}),this.argumentsFormArray.controls.forEach((e=>this.updateArgumentControlValidators(e))))}ngOnDestroy(){this.valueChangeSubscription.length&&this.valueChangeSubscription.forEach((e=>e.unsubscribe()))}writeValue(e){const t=[];e&&e.forEach(((e,n)=>{t.push(this.createArgumentControl(e,n))})),this.argumentsFormGroup.setControl("arguments",this.fb.array(t),{emitEvent:!1}),this.setupArgumentsFormGroup()}removeArgument(e){this.argumentsFormArray.removeAt(e),this.updateArgumentNames()}addArgument(e=!0){const t=this.argumentsFormArray,n=this.createArgumentControl(null,t.length);t.push(n,{emitEvent:e})}validate(e){return this.argumentsFormGroup.valid?null:{argumentsRequired:!0}}setupArgumentsFormGroup(e=!1){if(this.function&&(this.maxArgs=this.mathFunctionMap.get(this.function).maxArgs,this.minArgs=this.mathFunctionMap.get(this.function).minArgs,this.displayArgumentName=this.function===Rt.CUSTOM),this.argumentsFormGroup){for(this.argumentsFormGroup.get("arguments").setValidators([N.minLength(this.minArgs),N.maxLength(this.maxArgs)]);this.argumentsFormArray.length>this.maxArgs;)this.removeArgument(this.maxArgs-1);for(;this.argumentsFormArray.length{this.updateArgumentControlValidators(n),n.get("attributeScope").updateValueAndValidity({emitEvent:!1}),n.get("defaultValue").updateValueAndValidity({emitEvent:!1})}))),n}updateArgumentControlValidators(e){const t=e.get("type").value;t===jt.ATTRIBUTE?e.get("attributeScope").enable({emitEvent:!1}):e.get("attributeScope").disable({emitEvent:!1}),t&&t!==jt.CONSTANT?e.get("defaultValue").enable({emitEvent:!1}):e.get("defaultValue").disable({emitEvent:!1})}updateArgumentNames(){this.argumentsFormArray.controls.forEach(((e,t)=>{e.get("name").setValue(Jt[t])}))}updateModel(){const e=this.argumentsFormArray.value;e.length&&this.argumentsFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}static{this.ɵfac=function(e){return new(e||Oa)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Oa,selectors:[["tb-arguments-map-config"]],inputs:{disabled:"disabled",function:"function"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>Oa)),multi:!0},{provide:O,useExisting:r((()=>Oa)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:10,vars:10,consts:[[1,"flex","flex-col"],[2,"max-height","500px","overflow","auto"],["cdkDropList","","cdkDropListOrientation","vertical",1,"tb-drop-list","arguments-list",3,"cdkDropListDropped","formGroup","cdkDropListDisabled"],["formArrayName","arguments","cdkDrag","","class","tb-argument tb-draggable","style","height: 100%",3,"cdkDragDisabled",4,"ngFor","ngForOf"],[4,"ngIf"],["mat-button","","mat-raised-button","","color","primary","type","button","matTooltipPosition","above",3,"click","disabled"],["formArrayName","arguments","cdkDrag","",1,"tb-argument","tb-draggable",2,"height","100%",3,"cdkDragDisabled"],[1,"flex","flex-1","flex-row","items-center","justify-start"],["mat-icon-button","","color","primary","cdkDragHandle","","class","tb-drag-handle handle","style","min-width: 40px; margin: 0","matTooltipPosition","above",3,"matTooltip",4,"ngIf"],[1,"flex","flex-1","flex-row","items-center","justify-start","gap-4"],["style","padding: 0 10px; min-width: 20px;",4,"ngIf"],[1,"flex","flex-1","flex-col"],[1,"mat-block"],["translate",""],["required","",3,"formControl"],["style","border-bottom: 1px solid #eee;",3,"value",4,"ngFor","ngForOf"],["translate","",4,"ngIf"],[1,"flex","flex-1","flex-row","xs:flex-col","gt-xs:gap-4"],["floatLabel","always","class","mat-block gt-xs:max-w-50% gt-xs:flex-full",4,"ngIf"],["floatLabel","always","class","mat-block flex-1",4,"ngIf"],["class","mat-block",4,"ngIf"],["mat-icon-button","","color","primary","style","min-width: 40px;","matTooltipPosition","above",3,"matTooltip","click",4,"ngIf"],["mat-icon-button","","color","primary","cdkDragHandle","","matTooltipPosition","above",1,"tb-drag-handle","handle",2,"min-width","40px","margin","0",3,"matTooltip"],[2,"padding","0 10px","min-width","20px"],[2,"border-bottom","1px solid #eee",3,"value"],[2,"display","block","overflow","hidden","text-overflow","ellipsis","white-space","nowrap"],["floatLabel","always",1,"mat-block","gt-xs:max-w-50%","gt-xs:flex-full"],["matInput","","required","",3,"formControl"],["aria-hidden","false","aria-label","help-icon","matSuffix","","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],["floatLabel","always",1,"mat-block","flex-1"],["matInput","","required","","step","1","min","0","type","number",3,"formControl"],["matInput","","step","1","type","number",3,"formControl"],[3,"value",4,"ngFor","ngForOf"],[3,"value"],["mat-icon-button","","color","primary","matTooltipPosition","above",2,"min-width","40px",3,"click","matTooltip"],["translate","",1,"tb-prompt","flex","items-center","justify-center"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"mat-list",2),t.ɵɵlistener("cdkDropListDropped",(function(e){return n.onDrop(e)})),t.ɵɵtemplate(3,Ba,21,14,"mat-list-item",3),t.ɵɵelementEnd()(),t.ɵɵtemplate(4,Va,3,0,"div",4),t.ɵɵelementStart(5,"button",5),t.ɵɵlistener("click",(function(){return n.addArgument()})),t.ɵɵelementStart(6,"mat-icon"),t.ɵɵtext(7,"add"),t.ɵɵelementEnd(),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵadvance(),t.ɵɵclassProp("readonly",n.disabled),t.ɵɵadvance(),t.ɵɵproperty("formGroup",n.argumentsFormGroup)("cdkDropListDisabled",n.disabled),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.argumentsFormArray.controls),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.argumentsFormArray.length),t.ɵɵadvance(),t.ɵɵproperty("disabled",n.argumentsFormArray.length>=n.maxArgs),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(9,8,"action.add")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Oa),styles:["[_nghost-%COMP%] .mat-mdc-list-item.tb-argument[_ngcontent-%COMP%]{border:solid rgba(0,0,0,.25) 1px;border-radius:4px;padding:10px 0;margin-bottom:16px}[_nghost-%COMP%] .arguments-list[_ngcontent-%COMP%]{padding:0}"]})}}e("ArgumentsMapConfigComponent",Oa);const Da=["operationInput"];function La(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"button",9),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.clear())})),t.ɵɵelementStart(1,"mat-icon",10),t.ɵɵtext(2,"close"),t.ɵɵelementEnd()()}}function Pa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",11),t.ɵɵelement(1,"span",12),t.ɵɵpipe(2,"highlight"),t.ɵɵelementStart(3,"small",13),t.ɵɵtext(4),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(2,3,e.value+" | "+e.name,r.searchText),t.ɵɵsanitizeHtml),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",e.description," ")}}function Ra(e,n){1&e&&(t.ɵɵelementStart(0,"mat-option",11)(1,"span",3),t.ɵɵtext(2,"tb.rulenode.no-option-found"),t.ɵɵelementEnd()()),2&e&&t.ɵɵproperty("value",null)}class _a extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.searchText="",this.dirty=!1,this.mathOperation=[..._t.values()],this.propagateChange=null}ngOnInit(){this.mathFunctionForm=this.fb.group({operation:[""]}),this.filteredOptions=this.mathFunctionForm.get("operation").valueChanges.pipe(ae((e=>{let t;t="string"==typeof e&&Rt[e]?Rt[e]:null,this.updateView(t)})),te((e=>(this.searchText=e||"",e?this._filter(e):this.mathOperation.slice()))))}_filter(e){const t=e.toLowerCase();return this.mathOperation.filter((e=>e.name.toLowerCase().includes(t)||e.value.toLowerCase().includes(t)))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.mathFunctionForm.disable({emitEvent:!1}):this.mathFunctionForm.enable({emitEvent:!1})}mathFunctionDisplayFn(e){if(e){const t=_t.get(e);return t.value+" | "+t.name}return""}writeValue(e){this.modelValue=e,this.mathFunctionForm.get("operation").setValue(e,{emitEvent:!1}),this.dirty=!0}updateView(e){this.modelValue!==e&&(this.modelValue=e,this.propagateChange(this.modelValue))}onFocus(){this.dirty&&(this.mathFunctionForm.get("operation").updateValueAndValidity({onlySelf:!0}),this.dirty=!1)}clear(){this.mathFunctionForm.get("operation").patchValue(""),setTimeout((()=>{this.operationInput.nativeElement.blur(),this.operationInput.nativeElement.focus()}),0)}static{this.ɵfac=function(e){return new(e||_a)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(t.Injector),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:_a,selectors:[["tb-math-function-autocomplete"]],viewQuery:function(e,n){if(1&e&&t.ɵɵviewQuery(Da,7),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.operationInput=e.first)}},inputs:{required:"required",disabled:"disabled"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>_a)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:12,vars:11,consts:[["operationInput",""],["auto","matAutocomplete"],[1,"mat-block",3,"formGroup"],["translate",""],["type","text","matInput","","formControlName","operation",3,"focusin","required","matAutocomplete"],["type","button","matSuffix","","mat-icon-button","","aria-label","Clear",3,"click",4,"ngIf"],[1,"tb-autocomplete",3,"displayWith"],[3,"value",4,"ngFor","ngForOf"],[3,"value",4,"ngIf"],["type","button","matSuffix","","mat-icon-button","","aria-label","Clear",3,"click"],[1,"material-icons"],[3,"value"],[3,"innerHTML"],[2,"display","block","overflow","hidden","text-overflow","ellipsis","white-space","nowrap"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field",2)(1,"mat-label",3),t.ɵɵtext(2,"tb.rulenode.functions-field-input"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"input",4,0),t.ɵɵlistener("focusin",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onFocus())})),t.ɵɵelementEnd(),t.ɵɵtemplate(5,La,3,0,"button",5),t.ɵɵelementStart(6,"mat-autocomplete",6,1),t.ɵɵtemplate(8,Pa,5,6,"mat-option",7),t.ɵɵpipe(9,"async"),t.ɵɵtemplate(10,Ra,3,1,"mat-option",8),t.ɵɵpipe(11,"async"),t.ɵɵelementEnd()()}if(2&e){let e;const r=t.ɵɵreference(7);t.ɵɵproperty("formGroup",n.mathFunctionForm),t.ɵɵadvance(3),t.ɵɵproperty("required",n.required)("matAutocomplete",r),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.mathFunctionForm.get("operation").value),t.ɵɵadvance(),t.ɵɵproperty("displayWith",n.mathFunctionDisplayFn),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",t.ɵɵpipeBind1(9,7,n.filteredOptions)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!(null!=(e=t.ɵɵpipeBind1(11,9,n.filteredOptions))&&e.length))}},dependencies:t.ɵɵgetComponentDepsFactory(_a),encapsulation:2})}}function ja(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",8),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}function Ga(e,n){if(1&e&&(t.ɵɵelementStart(0,"button",9),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-icon",10),t.ɵɵtext(3,"content_copy "),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(1,2,"tb.rulenode.copy-message-type")),t.ɵɵproperty("cbContent",e.messageTypeFormGroup.get("messageType").value)}}function Ka(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.message-type-value-required")," "))}function Ua(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.message-type-value-max-length")," "))}e("MathFunctionAutocompleteComponent",_a);class Ha{set required(e){this.requiredValue!==e&&(this.requiredValue=e,this.updateValidators())}get required(){return this.requiredValue}constructor(e){this.fb=e,this.subscriptSizing="fixed",this.messageTypes=[{name:"Post attributes",value:"POST_ATTRIBUTES_REQUEST"},{name:"Post telemetry",value:"POST_TELEMETRY_REQUEST"},{name:"Custom",value:""}],this.propagateChange=()=>{},this.destroy$=new Y,this.messageTypeFormGroup=this.fb.group({messageTypeAlias:[null,[N.required]],messageType:[{value:null,disabled:!0},[N.maxLength(255)]]}),this.messageTypeFormGroup.get("messageTypeAlias").valueChanges.pipe(W(this.destroy$)).subscribe((e=>this.updateMessageTypeValue(e))),this.messageTypeFormGroup.valueChanges.pipe(W(this.destroy$)).subscribe((()=>this.updateView()))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}registerOnTouched(e){}registerOnChange(e){this.propagateChange=e}writeValue(e){this.modelValue=e;let t=this.messageTypes.find((t=>t.value===e));t||(t=this.messageTypes.find((e=>""===e.value))),this.messageTypeFormGroup.get("messageTypeAlias").patchValue(t,{emitEvent:!1}),this.messageTypeFormGroup.get("messageType").patchValue(e,{emitEvent:!1})}validate(){return this.messageTypeFormGroup.valid?null:{messageTypeInvalid:!0}}setDisabledState(e){this.disabled=e,e?this.messageTypeFormGroup.disable({emitEvent:!1}):(this.messageTypeFormGroup.enable({emitEvent:!1}),"Custom"!==this.messageTypeFormGroup.get("messageTypeAlias").value?.name&&this.messageTypeFormGroup.get("messageType").disable({emitEvent:!1}))}updateView(){const e=this.messageTypeFormGroup.getRawValue().messageType;this.modelValue!==e&&(this.modelValue=e,this.propagateChange(this.modelValue))}updateValidators(){this.messageTypeFormGroup.get("messageType").setValidators(this.required?[N.required,N.maxLength(255)]:[N.maxLength(255)]),this.messageTypeFormGroup.get("messageType").updateValueAndValidity({emitEvent:!1})}updateMessageTypeValue(e){"Custom"!==e?.name?this.messageTypeFormGroup.get("messageType").disable({emitEvent:!1}):this.messageTypeFormGroup.get("messageType").enable({emitEvent:!1}),this.messageTypeFormGroup.get("messageType").patchValue(e.value??null)}static{this.ɵfac=function(e){return new(e||Ha)(t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ha,selectors:[["tb-output-message-type-autocomplete"]],inputs:{subscriptSizing:"subscriptSizing",disabled:"disabled",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>Ha)),multi:!0},{provide:O,useExisting:r((()=>Ha)),multi:!0}])],decls:15,vars:14,consts:[[1,"tb-form-row","no-border","no-padding","tb-standard-fields","column-xs",3,"formGroup"],["hideRequiredMarker","",1,"flex",3,"subscriptSizing"],["formControlName","messageTypeAlias"],[3,"value",4,"ngFor","ngForOf"],[1,"flex",3,"subscriptSizing","hideRequiredMarker"],["matInput","","type","text","formControlName","messageType"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip",4,"ngIf"],[4,"ngIf"],[3,"value"],["type","button","matSuffix","","mat-icon-button","","aria-label","Copy","ngxClipboard","",3,"cbContent","matTooltip"],["aria-hidden","false","aria-label","help-icon"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",2),t.ɵɵtemplate(6,ja,2,2,"mat-option",3),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",4)(8,"mat-label"),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",5),t.ɵɵtemplate(12,Ga,4,4,"button",6)(13,Ka,3,3,"mat-error",7)(14,Ua,3,3,"mat-error",7),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.messageTypeFormGroup),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("subscriptSizing",n.subscriptSizing),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,10,"tb.rulenode.output-message-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.messageTypes),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("subscriptSizing",n.subscriptSizing),t.ɵɵproperty("hideRequiredMarker",n.messageTypeFormGroup.get("messageType").disabled),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,12,"tb.rulenode.message-type-value")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.messageTypeFormGroup.get("messageType").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.messageTypeFormGroup.get("messageType").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.messageTypeFormGroup.get("messageType").hasError("maxlength")))},dependencies:t.ɵɵgetComponentDepsFactory(Ha),encapsulation:2})}}e("OutputMessageTypeAutocompleteComponent",Ha),J([h()],Ha.prototype,"disabled",void 0),J([h()],Ha.prototype,"required",null);const za=(e,t)=>({keyText:e,valText:t});function $a(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,e.keyRequiredText)," ")}}function Qa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,e.valRequiredText)," ")}}function Ja(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",10)(1,"mat-form-field",11),t.ɵɵelement(2,"input",12),t.ɵɵpipe(3,"translate"),t.ɵɵtemplate(4,$a,3,3,"mat-error",13),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",11),t.ɵɵelement(6,"input",12),t.ɵɵpipe(7,"translate"),t.ɵɵtemplate(8,Qa,3,3,"mat-error",13),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"button",14),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"async"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.removeKeyVal(n))})),t.ɵɵelementStart(12,"mat-icon"),t.ɵɵtext(13,"close"),t.ɵɵelementEnd()()()}if(2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(3,10,r.keyText)),t.ɵɵproperty("formControl",e.get("key")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("key").hasError("required")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(7,12,r.valText)),t.ɵɵproperty("formControl",e.get("value")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.get("value").hasError("required")),t.ɵɵadvance(),t.ɵɵclassProp("!hidden",r.disabled),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(10,14,"tb.key-val.remove-entry")),t.ɵɵproperty("disabled",t.ɵɵpipeBind1(11,16,r.isLoading$))}}function Ya(e,n){if(1&e&&(t.ɵɵelement(0,"div",15),t.ɵɵpipe(1,"translate"),t.ɵɵpipe(2,"safe")),2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(2,3,t.ɵɵpipeBind1(1,1,e.hintText),"html"),t.ɵɵsanitizeHtml)}}class Wa extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.propagateChange=null,this.valueChangeSubscription=null}ngOnInit(){this.ngControl=this.injector.get(B),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.kvListFormGroup=this.fb.group({}),this.kvListFormGroup.addControl("keyVals",this.fb.array([]))}keyValsFormArray(){return this.kvListFormGroup.get("keyVals")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.kvListFormGroup.disable({emitEvent:!1}):this.kvListFormGroup.enable({emitEvent:!1})}writeValue(e){this.valueChangeSubscription&&this.valueChangeSubscription.unsubscribe();const t=[];if(e)for(const n of Object.keys(e))Object.prototype.hasOwnProperty.call(e,n)&&t.push(this.fb.group({key:[n,[N.required]],value:[e[n],[N.required]]}));this.kvListFormGroup.setControl("keyVals",this.fb.array(t)),this.valueChangeSubscription=this.kvListFormGroup.valueChanges.subscribe((()=>{this.updateModel()}))}removeKeyVal(e){this.kvListFormGroup.get("keyVals").removeAt(e)}addKeyVal(){this.kvListFormGroup.get("keyVals").push(this.fb.group({key:["",[N.required]],value:["",[N.required]]}))}validate(e){const t=this.kvListFormGroup.get("keyVals").value;if(!t.length&&this.required)return{kvMapRequired:!0};if(!this.kvListFormGroup.valid)return{kvFieldsRequired:!0};if(this.uniqueKeyValuePairValidator)for(const e of t)if(e.key===e.value)return{uniqueKeyValuePair:!0};return null}updateModel(){const e=this.kvListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.kvListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}static{this.ɵfac=function(e){return new(e||Wa)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(t.Injector),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Wa,selectors:[["tb-kv-map-config-old"]],inputs:{disabled:"disabled",uniqueKeyValuePairValidator:"uniqueKeyValuePairValidator",requiredText:"requiredText",keyText:"keyText",keyRequiredText:"keyRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>Wa)),multi:!0},{provide:O,useExisting:r((()=>Wa)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:21,vars:26,consts:[[1,"tb-kv-map-config","flex","flex-col",3,"formGroup"],[1,"header","flex","flex-1","flex-row","gap-2"],[1,"cell","tb-required","flex-1"],["innerHTML",t.ɵɵtrustConstantHtml` `,2,"width","52px"],[1,"body"],["class","row flex flex-row items-center justify-start gap-2","formArrayName","keyVals",4,"ngFor","ngForOf"],["class","tb-hint",3,"innerHTML",4,"ngIf"],[3,"error"],[2,"margin-top","16px"],["mat-button","","mat-raised-button","","color","primary","type","button","matTooltipPosition","above",3,"click","disabled","matTooltip"],["formArrayName","keyVals",1,"row","flex","flex-row","items-center","justify-start","gap-2"],[1,"cell","mat-block","flex-1"],["matInput","","required","",3,"formControl","placeholder"],[4,"ngIf"],["mat-icon-button","","color","primary","type","button","matTooltipPosition","above",3,"click","disabled","matTooltip"],[1,"tb-hint",3,"innerHTML"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"span",2),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"span",2),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(8,"span",3),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"div",4),t.ɵɵtemplate(10,Ja,14,18,"div",5)(11,Ya,3,6,"div",6),t.ɵɵelementEnd(),t.ɵɵelement(12,"tb-error",7),t.ɵɵelementStart(13,"div",8)(14,"button",9),t.ɵɵpipe(15,"translate"),t.ɵɵpipe(16,"async"),t.ɵɵlistener("click",(function(){return n.addKeyVal()})),t.ɵɵelementStart(17,"mat-icon"),t.ɵɵtext(18,"add"),t.ɵɵelementEnd(),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.kvListFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,13,n.keyText)),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,15,n.valText)),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.disabled),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.keyValsFormArray().controls),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.hintText),t.ɵɵadvance(),t.ɵɵproperty("error",n.ngControl.hasError("kvMapRequired")||n.ngControl.hasError("uniqueKeyValuePair")?n.ngControl.hasError("kvMapRequired")?n.translate.instant(n.requiredText):n.translate.instant("tb.key-val.unique-key-value-pair-error",t.ɵɵpureFunction2(23,za,n.translate.instant(n.keyText),n.translate.instant(n.valText))):""),t.ɵɵadvance(2),t.ɵɵclassProp("!hidden",n.disabled),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(15,17,"tb.key-val.add-entry")),t.ɵɵproperty("disabled",t.ɵɵpipeBind1(16,19,n.isLoading$)),t.ɵɵadvance(5),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(20,21,"action.add")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Wa),styles:["[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%]{margin-bottom:16px}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] .header[_ngcontent-%COMP%]{padding-left:5px;padding-right:5px;padding-bottom:5px}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .cell[_ngcontent-%COMP%]{padding-left:5px;padding-right:5px;color:#757575;font-size:12px;font-weight:700;white-space:nowrap}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] .header[_ngcontent-%COMP%] .tb-required[_ngcontent-%COMP%]:after{color:#757575;font-size:12px;font-weight:700}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] .body[_ngcontent-%COMP%]{padding-left:5px;padding-right:5px;padding-bottom:0;max-height:300px;overflow:auto}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] .body[_ngcontent-%COMP%] .cell[_ngcontent-%COMP%]{padding-left:5px;padding-right:5px}[_nghost-%COMP%] .tb-kv-map-config[_ngcontent-%COMP%] tb-error[_ngcontent-%COMP%]{display:block;margin-top:-12px}"]})}}function Xa(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-chip-option",4),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("selectable",r.chipControlGroup.get("chipControl").value!==e.value),t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate(e.name)}}e("KvMapConfigOldComponent",Wa);class Za{constructor(e,t){this.fb=e,this.translate=t,this.translation=Ht,this.propagateChange=()=>{},this.destroy$=new Y,this.selectOptions=[]}ngOnInit(){this.initOptions(),this.chipControlGroup=this.fb.group({chipControl:[null,[]]}),this.chipControlGroup.get("chipControl").valueChanges.pipe(ie(this.destroy$)).subscribe((e=>{e&&this.propagateChange(e)}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}initOptions(){for(const e of this.translation.keys())this.selectOptions.push({value:e,name:this.translate.instant(this.translation.get(e))})}writeValue(e){this.chipControlGroup.get("chipControl").patchValue(e,{emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){e?this.chipControlGroup.disable({emitEvent:!1}):this.chipControlGroup.enable({emitEvent:!1})}static{this.ɵfac=function(e){return new(e||Za)(t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Za,selectors:[["tb-msg-metadata-chip"]],inputs:{labelText:"labelText",translation:"translation"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>Za)),multi:!0}])],decls:5,vars:3,consts:[[1,"tb-form-row","space-between",3,"formGroup"],[1,"fixed-title-width"],["formControlName","chipControl"],["color","primary",3,"selectable","value",4,"ngFor","ngForOf"],["color","primary",3,"selectable","value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0)(1,"div",1),t.ɵɵtext(2),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-chip-listbox",2),t.ɵɵtemplate(4,Xa,2,3,"mat-chip-option",3),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.chipControlGroup),t.ɵɵadvance(2),t.ɵɵtextInterpolate(n.labelText),t.ɵɵadvance(2),t.ɵɵproperty("ngForOf",n.selectOptions))},dependencies:t.ɵɵgetComponentDepsFactory(Za),encapsulation:2})}}function ei(e,n){1&e&&(t.ɵɵelementStart(0,"div",13),t.ɵɵtext(1," tb.rulenode.map-fields-required "),t.ɵɵelementEnd())}function ti(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",13),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.requiredText," ")}}function ni(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}function ri(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",14)(1,"mat-form-field",15)(2,"mat-select",16),t.ɵɵtemplate(3,ni,2,2,"mat-option",17),t.ɵɵelementEnd()(),t.ɵɵelementStart(4,"mat-form-field",15),t.ɵɵelement(5,"input",18),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"div",19)(7,"button",20),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"async"),t.ɵɵlistener("click",(function(){const n=t.ɵɵrestoreView(e).index,r=t.ɵɵnextContext();return t.ɵɵresetView(r.removeKeyVal(n))})),t.ɵɵelementStart(10,"mat-icon"),t.ɵɵtext(11,"delete"),t.ɵɵelementEnd()()()()}if(2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵproperty("placeholder",r.selectText)("formControl",e.get("key")),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",r.filterSelectOptions(e)),t.ɵɵadvance(2),t.ɵɵproperty("placeholder",r.valText)("formControl",e.get("value")),t.ɵɵadvance(2),t.ɵɵclassProp("tb-hidden",1===r.keyValsFormArray().controls.length),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,9,"tb.key-val.remove-mapping-entry")),t.ɵɵproperty("disabled",t.ɵɵpipeBind1(9,11,r.isLoading$))}}e("MsgMetadataChipComponent",Za);class ai extends y{constructor(e,t,n,r){super(e),this.store=e,this.translate=t,this.injector=n,this.fb=r,this.destroy$=new Y,this.sourceFieldSubcritption=[],this.propagateChange=null,this.disabled=!1,this.required=!1,this.oneMapRequiredValidator=e=>e.get("keyVals").value.length,this.propagateNestedErrors=e=>{if(this.svListFormGroup&&this.svListFormGroup.get("keyVals")&&"VALID"===this.svListFormGroup.get("keyVals")?.status)return null;const t={};if(this.svListFormGroup&&this.svListFormGroup.setErrors(null),e instanceof w||e instanceof M){if(e.errors)for(const n of Object.keys(e.errors))t[n]=!0;for(const n of Object.keys(e.controls)){const r=this.propagateNestedErrors(e.controls[n]);if(r&&Object.keys(r).length)for(const e of Object.keys(r))t[e]=!0}return t}if(e.errors)for(const n of Object.keys(e.errors))t[n]=!0;return R(t,{})?null:t}}ngOnInit(){this.ngControl=this.injector.get(B),null!=this.ngControl&&(this.ngControl.valueAccessor=this),this.svListFormGroup=this.fb.group({keyVals:this.fb.array([])},{validators:[this.propagateNestedErrors,this.oneMapRequiredValidator]}),this.svListFormGroup.valueChanges.pipe(ie(this.destroy$)).subscribe((()=>{this.updateModel()}))}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}keyValsFormArray(){return this.svListFormGroup.get("keyVals")}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.svListFormGroup.disable({emitEvent:!1}):this.svListFormGroup.enable({emitEvent:!1})}writeValue(e){const t=Object.keys(e).map((t=>({key:t,value:e[t]})));if(this.keyValsFormArray().length===t.length)this.keyValsFormArray().patchValue(t,{emitEvent:!1});else{const e=[];t.forEach((t=>{e.push(this.fb.group({key:[t.key,[N.required]],value:[t.value,[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]}))})),this.svListFormGroup.setControl("keyVals",this.fb.array(e,this.propagateNestedErrors),{emitEvent:!1});for(const e of this.keyValsFormArray().controls)this.keyChangeSubscribe(e)}}filterSelectOptions(e){const t=[];for(const e of this.svListFormGroup.get("keyVals").value){const n=this.selectOptions.find((t=>t.value===e.key));n&&t.push(n)}const n=[];for(const r of this.selectOptions)P(t.find((e=>e.value===r.value)))&&r.value!==e?.get("key").value||n.push(r);return n}removeKeyVal(e){this.keyValsFormArray().removeAt(e),this.sourceFieldSubcritption[e].unsubscribe(),this.sourceFieldSubcritption.splice(e,1)}addKeyVal(){this.keyValsFormArray().push(this.fb.group({key:["",[N.required]],value:["",[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]]})),this.keyChangeSubscribe(this.keyValsFormArray().at(this.keyValsFormArray().length-1))}keyChangeSubscribe(e){this.sourceFieldSubcritption.push(e.get("key").valueChanges.pipe(ie(this.destroy$)).subscribe((t=>{const n=ct.get(t);e.get("value").patchValue(this.targetKeyPrefix+n[0].toUpperCase()+n.slice(1))})))}validate(e){return!this.svListFormGroup.get("keyVals").value.length&&this.required?{svMapRequired:!0}:this.svListFormGroup.valid?null:{svFieldsRequired:!0}}updateModel(){const e=this.svListFormGroup.get("keyVals").value;if(this.required&&!e.length||!this.svListFormGroup.valid)this.propagateChange(null);else{const t={};e.forEach((e=>{t[e.key]=e.value})),this.propagateChange(t)}}static{this.ɵfac=function(e){return new(e||ai)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(t.Injector),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ai,selectors:[["tb-sv-map-config"]],inputs:{selectOptions:"selectOptions",disabled:"disabled",labelText:"labelText",requiredText:"requiredText",targetKeyPrefix:"targetKeyPrefix",selectText:"selectText",selectRequiredText:"selectRequiredText",valText:"valText",valRequiredText:"valRequiredText",hintText:"hintText",popupHelpLink:"popupHelpLink",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>ai)),multi:!0},{provide:O,useExisting:r((()=>ai)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:22,vars:15,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],[1,"tb-form-row","no-padding","no-border","space-between"],[1,"tb-form-panel-title"],["class","tb-form-panel-hint tb-error","translate","",4,"ngIf"],[1,"tb-form-panel","no-border","no-padding"],[1,"tb-form-table"],[1,"tb-form-table-header"],[1,"tb-form-table-header-cell","field-space"],[1,"tb-form-table-header-cell","actions-header"],[1,"tb-form-table-body"],["class","tb-form-table-row",4,"ngFor","ngForOf"],["type","button","mat-stroked-button","","color","primary",3,"click","disabled"],[3,"hintText","popupHelpLink"],["translate","",1,"tb-form-panel-hint","tb-error"],[1,"tb-form-table-row"],["appearance","outline","subscriptSizing","dynamic",1,"tb-inline-field","field-space"],["required","",3,"placeholder","formControl"],[3,"value",4,"ngFor","ngForOf"],["matInput","",3,"placeholder","formControl"],[1,"tb-form-table-row-cell-buttons"],["type","button","mat-icon-button","","matTooltipPosition","above",3,"click","disabled","matTooltip"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3),t.ɵɵelementEnd(),t.ɵɵtemplate(4,ei,2,0,"div",3)(5,ti,2,1,"div",3),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"div",4)(7,"div",5)(8,"div",6)(9,"div",7),t.ɵɵtext(10),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"div",7),t.ɵɵtext(12),t.ɵɵelementEnd(),t.ɵɵelement(13,"div",8),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"div",9),t.ɵɵtemplate(15,ri,12,13,"div",10),t.ɵɵelementEnd()()(),t.ɵɵelementStart(16,"div")(17,"button",11),t.ɵɵpipe(18,"async"),t.ɵɵlistener("click",(function(){return n.addKeyVal()})),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd()(),t.ɵɵelement(21,"tb-example-hint",12),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.svListFormGroup),t.ɵɵadvance(3),t.ɵɵtextInterpolate(n.labelText),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.svListFormGroup.hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.svListFormGroup.hasError("svMapRequired")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(n.selectText),t.ɵɵadvance(2),t.ɵɵtextInterpolate(n.valText),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.keyValsFormArray().controls),t.ɵɵadvance(2),t.ɵɵproperty("disabled",t.ɵɵpipeBind1(18,11,n.isLoading$)||n.keyValsFormArray().length>=n.selectOptions.length),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(20,13,"tb.key-val.add-mapping-entry")," "),t.ɵɵadvance(2),t.ɵɵproperty("hintText",n.hintText)("popupHelpLink",n.popupHelpLink))},dependencies:t.ɵɵgetComponentDepsFactory(ai),styles:["[_nghost-%COMP%] .field-space[_ngcontent-%COMP%]{flex:1 1 50%}[_nghost-%COMP%] .actions-header[_ngcontent-%COMP%]{width:40px}"]})}}function ii(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",11),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.directionTypeTranslations.get(e))," ")}}e("SvMapConfigComponent",ai),J([h()],ai.prototype,"disabled",void 0),J([h()],ai.prototype,"required",void 0);class oi extends y{get required(){return this.requiredValue}set required(e){this.requiredValue=Z(e)}constructor(e,t){super(e),this.store=e,this.fb=t,this.directionTypes=Object.keys(d),this.directionTypeTranslations=b,this.propagateChange=null}ngOnInit(){this.relationsQueryFormGroup=this.fb.group({fetchLastLevelOnly:[!1,[]],direction:[null,[N.required]],maxLevel:[null,[]],filters:[null]}),this.relationsQueryFormGroup.valueChanges.subscribe((e=>{this.relationsQueryFormGroup.valid?this.propagateChange(e):this.propagateChange(null)}))}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}setDisabledState(e){this.disabled=e,this.disabled?this.relationsQueryFormGroup.disable({emitEvent:!1}):this.relationsQueryFormGroup.enable({emitEvent:!1})}writeValue(e){this.relationsQueryFormGroup.reset(e||{},{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||oi)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:oi,selectors:[["tb-relations-query-config-old"]],inputs:{disabled:"disabled",required:"required"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>oi)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:18,vars:8,consts:[[1,"flex","flex-col",3,"formGroup"],["formControlName","fetchLastLevelOnly"],[1,"flex","flex-row","gap-2"],[1,"mat-block",2,"min-width","100px"],["translate",""],["required","","matInput","","formControlName","direction"],[3,"value",4,"ngFor","ngForOf"],["floatLabel","always",1,"mat-block","flex-1"],["matInput","","type","number","min","1","step","1","formControlName","maxLevel",3,"placeholder"],["translate","",1,"mat-caption",2,"color","#6e6e6e"],["formControlName","filters"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-checkbox",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",2)(5,"mat-form-field",3)(6,"mat-label",4),t.ɵɵtext(7,"relation.direction"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",5),t.ɵɵtemplate(9,ii,3,4,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(10,"mat-form-field",7)(11,"mat-label",4),t.ɵɵtext(12,"tb.rulenode.max-relation-level"),t.ɵɵelementEnd(),t.ɵɵelement(13,"input",8),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(15,"div",9),t.ɵɵtext(16,"relation.relation-filters"),t.ɵɵelementEnd(),t.ɵɵelement(17,"tb-relation-filters",10),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.relationsQueryFormGroup),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,4,"alias.last-level-relation")," "),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",n.directionTypes),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(14,6,"tb.rulenode.unlimited-level")))},dependencies:t.ɵɵgetComponentDepsFactory(oi),encapsulation:2})}}e("RelationsQueryConfigOldComponent",oi);const li=e=>({latestTsKeyName:e}),si=e=>({inputName:e});function pi(e,n){1&e&&t.ɵɵelementContainer(0,9)}function mi(e,n){1&e&&t.ɵɵelementContainer(0,9)}function di(e,n){1&e&&t.ɵɵelementContainer(0,9)}function ui(e,n){1&e&&t.ɵɵelementContainer(0,9)}function ci(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",10),t.ɵɵpipe(1,"translate"),t.ɵɵelementStart(2,"mat-slide-toggle",11),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind2(1,2,"tb.rulenode.fetch-latest-telemetry-with-timestamp-tooltip",t.ɵɵpureFunction1(7,li,e.attributeControlGroup.get("latestTsKeyNames").value[0]))),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,5,"tb.rulenode.fetch-latest-telemetry-with-timestamp")," ")}}function fi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-icon",12),t.ɵɵpipe(1,"translate"),t.ɵɵpipe(2,"translate"),t.ɵɵtext(3,"help"),t.ɵɵelementEnd()),2&e&&t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(2,3,"tb.rulenode.chip-help",t.ɵɵpureFunction1(6,si,t.ɵɵpipeBind1(1,1,"tb.rulenode.field-name"))))}class gi{constructor(e,t){this.translate=e,this.fb=t,this.propagateChange=e=>{},this.destroy$=new Y,this.separatorKeysCodes=[U,H,z],this.onTouched=()=>{}}ngOnInit(){this.attributeControlGroup=this.fb.group({clientAttributeNames:[[],[]],sharedAttributeNames:[[],[]],serverAttributeNames:[[],[]],latestTsKeyNames:[[],[]],getLatestValueWithTs:[!1,[]]},{validators:this.atLeastOne(N.required,["clientAttributeNames","sharedAttributeNames","serverAttributeNames","latestTsKeyNames"])}),this.attributeControlGroup.valueChanges.pipe(ie(this.destroy$)).subscribe((e=>{this.propagateChange(this.preparePropagateValue(e))}))}preparePropagateValue(e){const t={};for(const n in e)t[n]="getLatestValueWithTs"===n||P(e[n])?e[n]:[];return t}validate(){return this.attributeControlGroup.valid?null:{atLeastOneRequired:!0}}atLeastOne(e,t=null){return n=>{t||(t=Object.keys(n.controls));return n?.controls&&t.some((t=>!e(n.controls[t])))?null:{atLeastOne:!0}}}writeValue(e){this.attributeControlGroup.setValue(e,{emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){this.onTouched=e}setDisabledState(e){e?this.attributeControlGroup.disable({emitEvent:!1}):this.attributeControlGroup.enable({emitEvent:!1})}ngOnDestroy(){this.destroy$.next(null),this.destroy$.complete()}static{this.ɵfac=function(e){return new(e||gi)(t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:gi,selectors:[["tb-select-attributes"]],inputs:{popupHelpLink:"popupHelpLink"},features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>gi)),multi:!0},{provide:O,useExisting:gi,multi:!0}])],decls:22,vars:34,consts:[["helpIcon",""],[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[3,"hintText","popupHelpLink"],["subscriptSizing","dynamic","editable","","formControlName","clientAttributeNames",1,"mat-block",3,"focusout","placeholder","label"],["matSuffix","",4,"ngTemplateOutlet"],["subscriptSizing","dynamic","editable","","formControlName","sharedAttributeNames",1,"mat-block",3,"focusout","placeholder","label"],["subscriptSizing","dynamic","editable","","formControlName","serverAttributeNames",1,"mat-block",3,"focusout","placeholder","label"],["subscriptSizing","dynamic","editable","","formControlName","latestTsKeyNames",1,"mat-block",3,"focusout","placeholder","label"],["class","tb-form-row no-border no-padding",3,"tb-hint-tooltip-icon",4,"ngIf"],["matSuffix",""],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","getLatestValueWithTs",1,"mat-slide"],["aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"]],template:function(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"div",1),t.ɵɵelement(1,"tb-example-hint",2),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"tb-string-items-list",3),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("focusout",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onTouched())})),t.ɵɵtemplate(6,pi,1,0,"ng-container",4),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"tb-string-items-list",5),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"translate"),t.ɵɵlistener("focusout",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onTouched())})),t.ɵɵtemplate(10,mi,1,0,"ng-container",4),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"tb-string-items-list",6),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵlistener("focusout",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onTouched())})),t.ɵɵtemplate(14,di,1,0,"ng-container",4),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"tb-string-items-list",7),t.ɵɵpipe(16,"translate"),t.ɵɵpipe(17,"translate"),t.ɵɵlistener("focusout",(function(){return t.ɵɵrestoreView(e),t.ɵɵresetView(n.onTouched())})),t.ɵɵtemplate(18,ui,1,0,"ng-container",4),t.ɵɵelementEnd(),t.ɵɵtemplate(19,ci,5,9,"div",8),t.ɵɵelementEnd(),t.ɵɵtemplate(20,fi,4,8,"ng-template",null,0,t.ɵɵtemplateRefExtractor)}if(2&e){let e;const r=t.ɵɵreference(21);t.ɵɵproperty("formGroup",n.attributeControlGroup),t.ɵɵadvance(),t.ɵɵproperty("hintText",t.ɵɵpipeBind1(2,16,"tb.rulenode.kv-map-pattern-hint"))("popupHelpLink",n.popupHelpLink),t.ɵɵadvance(2),t.ɵɵproperty("placeholder",t.ɵɵpipeBind1(4,18,"tb.rulenode.add-attribute-key"))("label",t.ɵɵpipeBind1(5,20,"tb.rulenode.client-attributes")),t.ɵɵadvance(3),t.ɵɵproperty("ngTemplateOutlet",r),t.ɵɵadvance(),t.ɵɵproperty("placeholder",t.ɵɵpipeBind1(8,22,"tb.rulenode.add-attribute-key"))("label",t.ɵɵpipeBind1(9,24,"tb.rulenode.shared-attributes")),t.ɵɵadvance(3),t.ɵɵproperty("ngTemplateOutlet",r),t.ɵɵadvance(),t.ɵɵproperty("placeholder",t.ɵɵpipeBind1(12,26,"tb.rulenode.add-attribute-key"))("label",t.ɵɵpipeBind1(13,28,"tb.rulenode.server-attributes")),t.ɵɵadvance(3),t.ɵɵproperty("ngTemplateOutlet",r),t.ɵɵadvance(),t.ɵɵproperty("placeholder",t.ɵɵpipeBind1(16,30,"tb.rulenode.add-telemetry-key"))("label",t.ɵɵpipeBind1(17,32,"tb.rulenode.latest-telemetry")),t.ɵɵadvance(3),t.ɵɵproperty("ngTemplateOutlet",r),t.ɵɵadvance(),t.ɵɵproperty("ngIf",(null==(e=n.attributeControlGroup.get("latestTsKeyNames").value)?null:e.length)>0)}},dependencies:t.ɵɵgetComponentDepsFactory(gi),encapsulation:2})}}e("SelectAttributesComponent",gi);class hi extends y{constructor(e,t){super(e),this.store=e,this.fb=t,this.propagateChange=null,this.destroy$=new Y,this.alarmStatus=x,this.alarmStatusTranslations=C}ngOnInit(){this.alarmStatusGroup=this.fb.group({alarmStatus:[null,[]]}),this.alarmStatusGroup.get("alarmStatus").valueChanges.pipe(ie(this.destroy$)).subscribe((e=>{this.propagateChange(e)}))}setDisabledState(e){e?this.alarmStatusGroup.disable({emitEvent:!1}):this.alarmStatusGroup.enable({emitEvent:!1})}registerOnChange(e){this.propagateChange=e}registerOnTouched(e){}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete()}writeValue(e){this.alarmStatusGroup.get("alarmStatus").patchValue(e,{emitEvent:!1})}static{this.ɵfac=function(e){return new(e||hi)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:hi,selectors:[["tb-alarm-status-select"]],features:[t.ɵɵProvidersFeature([{provide:V,useExisting:r((()=>hi)),multi:!0}]),t.ɵɵInheritDefinitionFeature],decls:16,vars:17,consts:[[1,"flex","flex-col","items-center","justify-center",3,"formGroup"],["multiple","","formControlName","alarmStatus",1,"chip-listbox","flex","flex-col"],[1,"toggle-column"],[1,"option","flex-1",3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-chip-listbox",1)(2,"div",2)(3,"mat-chip-option",3),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-chip-option",3),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(9,"div",2)(10,"mat-chip-option",3),t.ɵɵtext(11),t.ɵɵpipe(12,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-chip-option",3),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.alarmStatusGroup),t.ɵɵadvance(3),t.ɵɵproperty("value",n.alarmStatus.ACTIVE_UNACK),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(5,9,n.alarmStatusTranslations.get(n.alarmStatus.ACTIVE_UNACK))," "),t.ɵɵadvance(2),t.ɵɵproperty("value",n.alarmStatus.ACTIVE_ACK),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(8,11,n.alarmStatusTranslations.get(n.alarmStatus.ACTIVE_ACK))," "),t.ɵɵadvance(3),t.ɵɵproperty("value",n.alarmStatus.CLEARED_UNACK),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(12,13,n.alarmStatusTranslations.get(n.alarmStatus.CLEARED_UNACK))," "),t.ɵɵadvance(2),t.ɵɵproperty("value",n.alarmStatus.CLEARED_ACK),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,15,n.alarmStatusTranslations.get(n.alarmStatus.CLEARED_ACK))," "))},dependencies:t.ɵɵgetComponentDepsFactory(hi),styles:["[_nghost-%COMP%] .chip-listbox[_ngcontent-%COMP%]{max-width:460px;width:100%}[_nghost-%COMP%] .chip-listbox[_ngcontent-%COMP%] .toggle-column[_ngcontent-%COMP%]{display:flex;flex:1 1 100%;gap:8px}[_nghost-%COMP%] .chip-listbox[_ngcontent-%COMP%] .option[_ngcontent-%COMP%]{margin:0}@media screen and (max-width: 959px){[_nghost-%COMP%] .chip-listbox[_ngcontent-%COMP%]{max-width:360px}[_nghost-%COMP%] .chip-listbox[_ngcontent-%COMP%] .toggle-column[_ngcontent-%COMP%]{flex-direction:column}}[_nghost-%COMP%] .chip-listbox .mdc-evolution-chip-set__chips{gap:8px}[_nghost-%COMP%] .chip-listbox .option button{flex-basis:100%;justify-content:start}[_nghost-%COMP%] .chip-listbox .option .mdc-evolution-chip__graphic{flex-grow:0}"]})}}e("AlarmStatusSelectComponent",hi);const yi=()=>({maxWidth:"820px"});function bi(e,n){if(1&e&&(t.ɵɵelement(0,"div",3),t.ɵɵpipe(1,"translate")),2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("tb-help-popup",e.popupHelpLink),t.ɵɵpropertyInterpolate("trigger-text",t.ɵɵpipeBind1(1,3,"tb.key-val.see-examples")),t.ɵɵproperty("tb-help-popup-style",t.ɵɵpureFunction0(5,yi))}}class vi{constructor(){this.textAlign="left"}static{this.ɵfac=function(e){return new(e||vi)}}static{this.ɵcmp=t.ɵɵdefineComponent({type:vi,selectors:[["tb-example-hint"]],inputs:{hintText:"hintText",popupHelpLink:"popupHelpLink",textAlign:"textAlign"},decls:5,vars:10,consts:[[1,"tb-form-hint","tb-primary-fill","space-between",3,"hidden"],[1,"hint-text",3,"innerHTML"],["class","see-example","hintMode","","tb-help-popup-placement","right","trigger-style","letter-spacing:0.25px; font-size:12px",3,"tb-help-popup","tb-help-popup-style","trigger-text",4,"ngIf"],["hintMode","","tb-help-popup-placement","right","trigger-style","letter-spacing:0.25px; font-size:12px",1,"see-example",3,"tb-help-popup","tb-help-popup-style","trigger-text"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"div",0),t.ɵɵelement(1,"div",1),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"safe"),t.ɵɵtemplate(4,bi,2,6,"div",2),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("hidden",!n.hintText),t.ɵɵadvance(),t.ɵɵstyleProp("text-align",n.textAlign),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(3,7,t.ɵɵpipeBind1(2,5,n.hintText),"html"),t.ɵɵsanitizeHtml),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.popupHelpLink))},dependencies:t.ɵɵgetComponentDepsFactory(vi),styles:["[_nghost-%COMP%] .space-between[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:20px}[_nghost-%COMP%] .space-between[_ngcontent-%COMP%] .see-example[_ngcontent-%COMP%]{display:flex;flex-shrink:0}[_nghost-%COMP%] .hint-text[_ngcontent-%COMP%]{width:100%}"]})}}e("ExampleHintComponent",vi);class xi{static{this.ɵfac=function(e){return new(e||xi)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:xi})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,Q,_r,zr,Wr,ma,va,Oa,_a,Ha,Wa,Za,ai,oi,gi,hi,vi]})}}e("RulenodeCoreConfigCommonModule",xi),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(xi,{declarations:[_r,zr,Wr,ma,va,Oa,_a,Ha,Wa,Za,ai,oi,gi,hi,vi],imports:[$,S,Q],exports:[_r,zr,Wr,ma,va,Oa,_a,Ha,Wa,Za,ai,oi,gi,hi,vi]});class Ci{static{this.ɵfac=function(e){return new(e||Ci)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:Ci})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,Q,xi,Cr,ce,mr,rr,Vn,se,Ce,Re,He,$n,Ye,st,qn,Pn,er,lr,cr,fr,We,Zn,Yn,wr,Br]})}}e("RuleNodeCoreConfigActionModule",Ci),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(Ci,{declarations:[Cr,ce,mr,rr,Vn,se,Ce,Re,He,$n,Ye,st,qn,Pn,er,lr,cr,fr,We,Zn,Yn,wr,Br],imports:[$,S,Q,xi],exports:[Cr,ce,mr,rr,Vn,se,Ce,Re,He,$n,Ye,st,qn,Pn,er,lr,cr,fr,We,Zn,Yn,wr,Br]});const Si=e=>({inputValueKey:e}),Ti=e=>({periodValueKey:e}),Ii=(e,t)=>({outputValueKey:e,periodValueKey:t}),Ei=e=>({outputValueKey:e});function Fi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.input-value-key-required")," "))}function qi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.output-value-key-required")," "))}function Ai(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.number-of-digits-after-floating-point-range")," "))}function ki(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.number-of-digits-after-floating-point-range")," "))}function Ni(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.period-value-key-required")," "))}function wi(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",16)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",17),t.ɵɵtemplate(5,Ni,3,3,"mat-error",4),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,2,"tb.rulenode.period-value-key")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.calculateDeltaConfigForm.get("periodValueKey").hasError("required"))}}class Mi extends i{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.separatorKeysCodes=[U,H,z]}configForm(){return this.calculateDeltaConfigForm}onConfigurationSet(e){this.calculateDeltaConfigForm=this.fb.group({inputValueKey:[e.inputValueKey,[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],outputValueKey:[e.outputValueKey,[N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]],useCache:[e.useCache,[]],addPeriodBetweenMsgs:[e.addPeriodBetweenMsgs,[]],periodValueKey:[e.periodValueKey,[]],round:[e.round,[N.min(0),N.max(15)]],tellFailureIfDeltaIsNegative:[e.tellFailureIfDeltaIsNegative,[]],excludeZeroDeltas:[e.excludeZeroDeltas,[]]})}prepareInputConfig(e){return{inputValueKey:P(e?.inputValueKey)?e.inputValueKey:null,outputValueKey:P(e?.outputValueKey)?e.outputValueKey:null,useCache:!P(e?.useCache)||e.useCache,addPeriodBetweenMsgs:!!P(e?.addPeriodBetweenMsgs)&&e.addPeriodBetweenMsgs,periodValueKey:P(e?.periodValueKey)?e.periodValueKey:null,round:P(e?.round)?e.round:null,tellFailureIfDeltaIsNegative:!P(e?.tellFailureIfDeltaIsNegative)||e.tellFailureIfDeltaIsNegative,excludeZeroDeltas:!!P(e?.excludeZeroDeltas)&&e.excludeZeroDeltas}}prepareOutputConfig(e){return _(e)}updateValidators(e){this.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value?this.calculateDeltaConfigForm.get("periodValueKey").setValidators([N.required]):this.calculateDeltaConfigForm.get("periodValueKey").setValidators([]),this.calculateDeltaConfigForm.get("periodValueKey").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["addPeriodBetweenMsgs"]}static{this.ɵfac=function(e){return new(e||Mi)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Mi,selectors:[["tb-enrichment-node-calculate-delta-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:50,vars:69,consts:[[3,"formGroup"],[1,"gt-sm:flex","gt-sm:flex-row","gt-sm:gap-5.5"],[1,"mat-block","flex-1"],["matInput","","formControlName","inputValueKey"],[4,"ngIf"],["matInput","","formControlName","outputValueKey"],["type","number","min","0","max","15","step","1","matInput","","formControlName","round"],[1,"tb-form-panel","no-padding","no-border"],[1,"tb-form-row","same-padding",3,"tb-hint-tooltip-icon"],["formControlName","tellFailureIfDeltaIsNegative",1,"mat-slide","margin"],["formControlName","useCache",1,"mat-slide","margin"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","addPeriodBetweenMsgs",1,"mat-slide"],["class","mat-block",4,"ngIf"],["formControlName","excludeZeroDeltas",1,"mat-slide","margin"],[1,"mat-block"],["required","","matInput","","formControlName","periodValueKey"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"mat-form-field",2)(3,"mat-label"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",3),t.ɵɵtemplate(7,Fi,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-form-field",2)(9,"mat-label"),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",5),t.ɵɵtemplate(13,qi,3,3,"mat-error",4),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"mat-form-field",2)(15,"mat-label"),t.ɵɵtext(16),t.ɵɵpipe(17,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(18,"input",6),t.ɵɵtemplate(19,Ai,3,3,"mat-error",4)(20,ki,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"div",7)(22,"div",8),t.ɵɵpipe(23,"translate"),t.ɵɵelementStart(24,"mat-slide-toggle",9),t.ɵɵtext(25),t.ɵɵpipe(26,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(27,"div",8),t.ɵɵpipe(28,"translate"),t.ɵɵpipe(29,"translate"),t.ɵɵelementStart(30,"mat-slide-toggle",10),t.ɵɵtext(31),t.ɵɵpipe(32,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(33,"div",11)(34,"div",12),t.ɵɵpipe(35,"translate"),t.ɵɵelementStart(36,"mat-slide-toggle",13),t.ɵɵtext(37),t.ɵɵpipe(38,"translate"),t.ɵɵpipe(39,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(40,wi,6,4,"mat-form-field",14),t.ɵɵelementEnd(),t.ɵɵelementStart(41,"div",8),t.ɵɵpipe(42,"translate"),t.ɵɵpipe(43,"translate"),t.ɵɵpipe(44,"translate"),t.ɵɵpipe(45,"translate"),t.ɵɵpipe(46,"translate"),t.ɵɵelementStart(47,"mat-slide-toggle",15),t.ɵɵtext(48),t.ɵɵpipe(49,"translate"),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.calculateDeltaConfigForm),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,19,"tb.rulenode.input-value-key")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.calculateDeltaConfigForm.get("inputValueKey").hasError("required")||n.calculateDeltaConfigForm.get("inputValueKey").hasError("pattern")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(11,21,"tb.rulenode.output-value-key")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.calculateDeltaConfigForm.get("outputValueKey").hasError("required")||n.calculateDeltaConfigForm.get("outputValueKey").hasError("pattern")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(17,23,"tb.rulenode.number-of-digits-after-floating-point")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.calculateDeltaConfigForm.get("round").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.calculateDeltaConfigForm.get("round").hasError("max")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(23,25,"tb.rulenode.failure-if-delta-negative-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(26,27,"tb.rulenode.failure-if-delta-negative")," "),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind2(29,31,"tb.rulenode.use-caching-tooltip",t.ɵɵpureFunction1(58,Si,n.calculateDeltaConfigForm.get("inputValueKey").valid?n.calculateDeltaConfigForm.get("inputValueKey").value:t.ɵɵpipeBind1(28,29,"tb.rulenode.input-value-key")))),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(32,34,"tb.rulenode.use-caching")," "),t.ɵɵadvance(2),t.ɵɵclassProp("no-padding-bottom",n.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind2(35,36,"tb.rulenode.add-time-difference-between-readings-tooltip",t.ɵɵpureFunction1(60,Ti,n.calculateDeltaConfigForm.get("periodValueKey").valid&&n.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value?n.calculateDeltaConfigForm.get("periodValueKey").value:"periodInMs"))),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(39,41,"tb.rulenode.add-time-difference-between-readings",t.ɵɵpureFunction1(62,Si,n.calculateDeltaConfigForm.get("inputValueKey").valid?n.calculateDeltaConfigForm.get("inputValueKey").value:t.ɵɵpipeBind1(38,39,"tb.rulenode.input-value-key")))," "),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",n.calculateDeltaConfigForm.get("addPeriodBetweenMsgs").value?t.ɵɵpipeBind2(44,48,"tb.rulenode.exclude-zero-deltas-time-difference-hint",t.ɵɵpureFunction2(64,Ii,n.calculateDeltaConfigForm.get("outputValueKey").valid?n.calculateDeltaConfigForm.get("outputValueKey").value:t.ɵɵpipeBind1(42,44,"tb.rulenode.output-value-key"),n.calculateDeltaConfigForm.get("periodValueKey").valid?n.calculateDeltaConfigForm.get("periodValueKey").value:t.ɵɵpipeBind1(43,46,"tb.rulenode.period-value-key"))):t.ɵɵpipeBind2(46,53,"tb.rulenode.exclude-zero-deltas-hint",t.ɵɵpureFunction1(67,Ei,n.calculateDeltaConfigForm.get("outputValueKey").valid?n.calculateDeltaConfigForm.get("outputValueKey").value:t.ɵɵpipeBind1(45,51,"tb.rulenode.output-value-key")))),t.ɵɵadvance(7),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(49,56,"tb.rulenode.exclude-zero-deltas")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Mi),encapsulation:2})}}function Bi(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",8),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}e("CalculateDeltaConfigComponent",Mi);class Vi extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.fetchToData=[],this.DataToFetch=Ft;for(const e of qt.keys())e!==Ft.FIELDS&&this.fetchToData.push({value:e,name:this.translate.instant(qt.get(e))})}configForm(){return this.customerAttributesConfigForm}prepareOutputConfig(e){const t={};for(const n of Object.keys(e.dataMapping))t[n.trim()]=e.dataMapping[n];return e.dataMapping=t,_(e)}prepareInputConfig(e){let t,n;return t=P(e?.telemetry)?e.telemetry?Ft.LATEST_TELEMETRY:Ft.ATTRIBUTES:P(e?.dataToFetch)?e.dataToFetch:Ft.ATTRIBUTES,n=P(e?.attrMapping)?e.attrMapping:P(e?.dataMapping)?e.dataMapping:null,{dataToFetch:t,dataMapping:n,fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA}}selectTranslation(e,t){return this.customerAttributesConfigForm.get("dataToFetch").value===Ft.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.customerAttributesConfigForm=this.fb.group({dataToFetch:[e.dataToFetch,[]],dataMapping:[e.dataMapping,[N.required]],fetchTo:[e.fetchTo]})}static{this.ɵfac=function(e){return new(e||Vi)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Vi,selectors:[["tb-enrichment-node-customer-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:17,vars:26,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-1","items-center","justify-center"],[1,"fetch-to-data-toggle"],["formControlName","dataToFetch","appearance","fill",1,"fetch-to-data-toggle"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","dataMapping","popupHelpLink","rulenode/customer_attributes_node_fields_templatization",3,"requiredText","labelText","keyText","keyRequiredText","valText","valRequiredText","hintText"],["formControlName","fetchTo",3,"labelText"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.mapping-of-customers"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2)(4,"div",3)(5,"tb-toggle-select",4),t.ɵɵtemplate(6,Bi,2,2,"tb-toggle-option",5),t.ɵɵelementEnd()()(),t.ɵɵelement(7,"tb-kv-map-config",6),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"translate"),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵelement(14,"tb-msg-metadata-chip",7),t.ɵɵpipe(15,"translate"),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.customerAttributesConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.fetchToData),t.ɵɵadvance(),t.ɵɵproperty("requiredText",t.ɵɵpipeBind1(8,10,"tb.rulenode.attr-mapping-required"))("labelText",t.ɵɵpipeBind1(9,12,n.selectTranslation("tb.rulenode.latest-telemetry-mapping","tb.rulenode.attributes-mapping")))("keyText",t.ɵɵpipeBind1(10,14,n.selectTranslation("tb.rulenode.source-telemetry","tb.rulenode.source-attribute")))("keyRequiredText",t.ɵɵpipeBind1(11,16,n.selectTranslation("tb.rulenode.source-telemetry-required","tb.rulenode.source-attribute-required")))("valText",t.ɵɵpipeBind1(12,18,"tb.rulenode.target-key"))("valRequiredText",t.ɵɵpipeBind1(13,20,"tb.rulenode.target-key-required"))("hintText","tb.rulenode.kv-map-pattern-hint"),t.ɵɵadvance(7),t.ɵɵproperty("labelText",n.customerAttributesConfigForm.get("dataToFetch").value===n.DataToFetch.LATEST_TELEMETRY?t.ɵɵpipeBind1(15,22,"tb.rulenode.add-mapped-latest-telemetry-to"):t.ɵɵpipeBind1(16,24,"tb.rulenode.add-mapped-attribute-to")))},dependencies:t.ɵɵgetComponentDepsFactory(Vi),styles:["[_nghost-%COMP%] .fetch-to-data-toggle[_ngcontent-%COMP%]{max-width:420px;width:100%}"]})}}e("CustomerAttributesConfigComponent",Vi);class Oi extends i{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n}configForm(){return this.deviceAttributesConfigForm}onConfigurationSet(e){this.deviceAttributesConfigForm=this.fb.group({deviceRelationsQuery:[e.deviceRelationsQuery,[N.required]],tellFailureIfAbsent:[e.tellFailureIfAbsent,[]],fetchTo:[e.fetchTo,[]],attributesControl:[e.attributesControl,[]]})}prepareInputConfig(e){return j(e)&&(e.attributesControl={clientAttributeNames:P(e?.clientAttributeNames)?e.clientAttributeNames:[],latestTsKeyNames:P(e?.latestTsKeyNames)?e.latestTsKeyNames:[],serverAttributeNames:P(e?.serverAttributeNames)?e.serverAttributeNames:[],sharedAttributeNames:P(e?.sharedAttributeNames)?e.sharedAttributeNames:[],getLatestValueWithTs:!!P(e?.getLatestValueWithTs)&&e.getLatestValueWithTs}),{deviceRelationsQuery:P(e?.deviceRelationsQuery)?e.deviceRelationsQuery:null,tellFailureIfAbsent:!P(e?.tellFailureIfAbsent)||e.tellFailureIfAbsent,fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA,attributesControl:e?e.attributesControl:null}}prepareOutputConfig(e){for(const t of Object.keys(e.attributesControl))e[t]=e.attributesControl[t];return delete e.attributesControl,e}static{this.ɵfac=function(e){return new(e||Oi)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Oi,selectors:[["tb-enrichment-node-device-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:19,vars:11,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[1,"tb-form-panel","stroked","no-padding-bottom"],["translate","",1,"tb-form-panel-title"],["required","","formControlName","deviceRelationsQuery"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-padding","no-border","space-between"],["translate","",1,"tb-form-panel-title","tb-required"],["translate","",1,"tb-form-panel-hint","tb-error",3,"hidden"],["formControlName","attributesControl","popupHelpLink","rulenode/related_device_attributes_node_fields_templatization"],["formControlName","fetchTo",3,"labelText"],[1,"tb-form-row","same-padding",3,"tb-hint-tooltip-icon"],["formControlName","tellFailureIfAbsent",1,"mat-slide","margin"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.device-relations-query"),t.ɵɵelementEnd(),t.ɵɵelement(4,"tb-device-relations-query-config",3),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",4)(6,"div",5)(7,"div",6),t.ɵɵtext(8,"tb.rulenode.related-device-attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"div",7),t.ɵɵtext(10," tb.rulenode.at-least-one-field-required "),t.ɵɵelementEnd()(),t.ɵɵelement(11,"tb-select-attributes",8)(12,"tb-msg-metadata-chip",9),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"div",10),t.ɵɵpipe(15,"translate"),t.ɵɵelementStart(16,"mat-slide-toggle",11),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.deviceAttributesConfigForm),t.ɵɵadvance(9),t.ɵɵproperty("hidden",!(n.deviceAttributesConfigForm.get("attributesControl").touched&&n.deviceAttributesConfigForm.get("attributesControl").hasError("atLeastOneRequired"))),t.ɵɵadvance(3),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(13,5,"tb.rulenode.add-selected-attributes-to")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(15,7,"tb.rulenode.tell-failure-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,9,"tb.rulenode.tell-failure")," "))},dependencies:t.ɵɵgetComponentDepsFactory(Oi),encapsulation:2})}}e("DeviceAttributesConfigComponent",Oi);const Di=e=>({inputName:e});class Li extends i{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.predefinedValues=[];for(const e of Object.keys(xt))this.predefinedValues.push({value:xt[e],name:this.translate.instant(Ct.get(xt[e]))})}ngOnInit(){super.ngOnInit()}configForm(){return this.entityDetailsConfigForm}prepareInputConfig(e){let t;return t=P(e?.addToMetadata)?e.addToMetadata?Kt.METADATA:Kt.DATA:e?.fetchTo?e.fetchTo:Kt.DATA,{detailsList:P(e?.detailsList)?e.detailsList:null,fetchTo:t}}onConfigurationSet(e){this.entityDetailsConfigForm=this.fb.group({detailsList:[e.detailsList,[N.required]],fetchTo:[e.fetchTo,[]]})}static{this.ɵfac=function(e){return new(e||Li)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Li,selectors:[["tb-enrichment-node-entity-details-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:11,vars:22,consts:[[3,"formGroup"],["required","","formControlName","detailsList",1,"mat-block",3,"predefinedValues","label","placeholder","requiredText"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],["formControlName","fetchTo",3,"labelText"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"tb-string-items-list",1),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"translate"),t.ɵɵpipe(4,"translate"),t.ɵɵelementStart(5,"mat-icon",2),t.ɵɵpipe(6,"translate"),t.ɵɵpipe(7,"translate"),t.ɵɵtext(8," help "),t.ɵɵelementEnd()(),t.ɵɵelement(9,"tb-msg-metadata-chip",3),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.entityDetailsConfigForm),t.ɵɵadvance(),t.ɵɵproperty("predefinedValues",n.predefinedValues)("label",t.ɵɵpipeBind1(2,7,"tb.rulenode.select-details"))("placeholder",t.ɵɵpipeBind1(3,9,"tb.rulenode.add-detail"))("requiredText",t.ɵɵpipeBind1(4,11,"tb.rulenode.entity-details-list-empty")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(7,15,"tb.rulenode.chip-help",t.ɵɵpureFunction1(20,Di,t.ɵɵpipeBind1(6,13,"tb.rulenode.detail")))),t.ɵɵadvance(4),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(10,18,"tb.rulenode.add-selected-details-to")))},dependencies:t.ɵɵgetComponentDepsFactory(Li),encapsulation:2})}}e("EntityDetailsConfigComponent",Li);const Pi=()=>({maxWidth:"820px"}),Ri=e=>({inputName:e}),_i=(e,t,n,r)=>({startInterval:e,endInterval:t,startIntervalTimeUnit:n,endIntervalTimeUnit:r});function ji(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.start-interval-value-required")," "))}function Gi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function Ki(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function Ui(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",29),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.timeUnitsTranslationMap.get(e))," ")}}function Hi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.end-interval-value-required")," "))}function zi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function $i(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.time-value-range")," "))}function Qi(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",29),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.timeUnitsTranslationMap.get(e))," ")}}function Ji(e,n){if(1&e&&(t.ɵɵelementContainerStart(0),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementContainerEnd()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,"tb.rulenode.fetch-timeseries-from-to",t.ɵɵpureFunction4(4,_i,e.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").value,e.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").value,e.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").value.toLowerCase(),e.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").value.toLowerCase()))," ")}}function Yi(e,n){1&e&&(t.ɵɵtext(0),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(1,1,"tb.rulenode.fetch-timeseries-from-to-invalid")," ")}function Wi(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",17)(1,"div",18)(2,"mat-form-field",19)(3,"mat-label"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",20),t.ɵɵtemplate(7,ji,3,3,"mat-error",16)(8,Gi,3,3,"mat-error",16)(9,Ki,3,3,"mat-error",16),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"mat-form-field",21)(11,"mat-label"),t.ɵɵtext(12),t.ɵɵpipe(13,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-select",22),t.ɵɵtemplate(15,Ui,3,4,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(16,"div",18)(17,"mat-form-field",19)(18,"mat-label"),t.ɵɵtext(19),t.ɵɵpipe(20,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(21,"input",23),t.ɵɵtemplate(22,Hi,3,3,"mat-error",16)(23,zi,3,3,"mat-error",16)(24,$i,3,3,"mat-error",16),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-form-field",21)(26,"mat-label"),t.ɵɵtext(27),t.ɵɵpipe(28,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-select",24),t.ɵɵtemplate(30,Qi,3,4,"mat-option",14),t.ɵɵelementEnd()()(),t.ɵɵelementStart(31,"div",25)(32,"mat-icon",26),t.ɵɵtext(33,"error_outline"),t.ɵɵelementEnd(),t.ɵɵelementStart(34,"div",27),t.ɵɵtemplate(35,Ji,3,9,"ng-container",28)(36,Yi,2,3,"ng-template",null,1,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵreference(37),n=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,16,"tb.rulenode.interval-start")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").hasError("max")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(13,18,"tb.rulenode.time-unit")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.timeUnits),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(20,20,"tb.rulenode.interval-end")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").hasError("max")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(28,22,"tb.rulenode.time-unit")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.timeUnits),t.ɵɵadvance(),t.ɵɵclassProp("error",n.getTelemetryFromDatabaseConfigForm.get("interval").invalid),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("interval").valid)("ngIfElse",e)}}function Xi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.start-interval-required")," "))}function Zi(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.end-interval-required")," "))}function eo(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",30)(1,"mat-form-field",31)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",32),t.ɵɵtemplate(6,Xi,3,3,"mat-error",16),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-form-field",31)(8,"mat-label"),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",33),t.ɵɵtemplate(12,Zi,3,3,"mat-error",16),t.ɵɵelementEnd(),t.ɵɵelement(13,"tb-example-hint",34),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,5,"tb.rulenode.start-interval")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").hasError("required")||e.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").hasError("pattern")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,7,"tb.rulenode.end-interval")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").hasError("required")||e.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").hasError("pattern")),t.ɵɵadvance(),t.ɵɵproperty("hintText",t.ɵɵpipeBind1(14,9,"tb.rulenode.metadata-dynamic-interval-hint"))}}function to(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",29),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}function no(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",29),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.aggregationTypesTranslations.get(r.aggregationTypes[e]))," ")}}function ro(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",29),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(3);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.samplingOrdersTranslate.get(e))," ")}}function ao(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.limit-required")," "))}function io(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.limit-range")," "))}function oo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.limit-range")," "))}function lo(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"mat-form-field",37)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",38),t.ɵɵtemplate(6,ro,3,4,"mat-option",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",39)(8,"mat-label"),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",40),t.ɵɵelementStart(12,"mat-hint"),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(15,ao,3,3,"mat-error",16)(16,io,3,3,"mat-error",16)(17,oo,3,3,"mat-error",16),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(4,7,"tb.rulenode.order-by-timestamp")," "),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.samplingOrders),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,9,"tb.rulenode.limit")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,11,"tb.rulenode.limit-hint")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("limit").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("limit").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("limit").hasError("max"))}}function so(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"mat-form-field",35)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",36),t.ɵɵtemplate(6,no,3,4,"mat-option",14),t.ɵɵelementEnd()(),t.ɵɵtemplate(7,lo,18,13,"div",16),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("subscriptSizing",e.defaultPaddingEnable()?"fixed":"dynamic"),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,4,"aggregation.function")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.aggregations),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.getTelemetryFromDatabaseConfigForm.get("aggregation").value===e.aggregationTypes.NONE)}}class po extends i{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n,this.separatorKeysCodes=[U,H,z],this.aggregationTypes=T,this.aggregations=Object.values(T),this.aggregationTypesTranslations=I,this.fetchMode=St,this.samplingOrders=Object.values(Et),this.samplingOrdersTranslate=kt,this.timeUnits=Object.values(ht),this.timeUnitsTranslationMap=yt,this.deduplicationStrategiesHintTranslations=It,this.headerOptions=[],this.timeUnitMap={[ht.MILLISECONDS]:1,[ht.SECONDS]:1e3,[ht.MINUTES]:6e4,[ht.HOURS]:36e5,[ht.DAYS]:864e5},this.intervalValidator=()=>e=>e.get("startInterval").value*this.timeUnitMap[e.get("startIntervalTimeUnit").value]<=e.get("endInterval").value*this.timeUnitMap[e.get("endIntervalTimeUnit").value]?{intervalError:!0}:null;for(const e of Tt.keys())this.headerOptions.push({value:e,name:this.translate.instant(Tt.get(e))})}configForm(){return this.getTelemetryFromDatabaseConfigForm}onConfigurationSet(e){this.getTelemetryFromDatabaseConfigForm=this.fb.group({latestTsKeyNames:[e.latestTsKeyNames,[N.required]],aggregation:[e.aggregation,[N.required]],fetchMode:[e.fetchMode,[N.required]],orderBy:[e.orderBy,[]],limit:[e.limit,[]],useMetadataIntervalPatterns:[e.useMetadataIntervalPatterns,[]],interval:this.fb.group({startInterval:[e.interval.startInterval,[]],startIntervalTimeUnit:[e.interval.startIntervalTimeUnit,[]],endInterval:[e.interval.endInterval,[]],endIntervalTimeUnit:[e.interval.endIntervalTimeUnit,[]]}),startIntervalPattern:[e.startIntervalPattern,[]],endIntervalPattern:[e.endIntervalPattern,[]]})}validatorTriggers(){return["fetchMode","useMetadataIntervalPatterns"]}toggleChange(e){this.getTelemetryFromDatabaseConfigForm.get("fetchMode").patchValue(e,{emitEvent:!0})}prepareOutputConfig(e){return e.startInterval=e.interval.startInterval,e.startIntervalTimeUnit=e.interval.startIntervalTimeUnit,e.endInterval=e.interval.endInterval,e.endIntervalTimeUnit=e.interval.endIntervalTimeUnit,delete e.interval,_(e)}prepareInputConfig(e){return j(e)&&(e.interval={startInterval:e.startInterval,startIntervalTimeUnit:e.startIntervalTimeUnit,endInterval:e.endInterval,endIntervalTimeUnit:e.endIntervalTimeUnit}),{latestTsKeyNames:P(e?.latestTsKeyNames)?e.latestTsKeyNames:null,aggregation:P(e?.aggregation)?e.aggregation:T.NONE,fetchMode:P(e?.fetchMode)?e.fetchMode:St.FIRST,orderBy:P(e?.orderBy)?e.orderBy:Et.ASC,limit:P(e?.limit)?e.limit:1e3,useMetadataIntervalPatterns:!!P(e?.useMetadataIntervalPatterns)&&e.useMetadataIntervalPatterns,interval:{startInterval:P(e?.interval?.startInterval)?e.interval.startInterval:2,startIntervalTimeUnit:P(e?.interval?.startIntervalTimeUnit)?e.interval.startIntervalTimeUnit:ht.MINUTES,endInterval:P(e?.interval?.endInterval)?e.interval.endInterval:1,endIntervalTimeUnit:P(e?.interval?.endIntervalTimeUnit)?e.interval.endIntervalTimeUnit:ht.MINUTES},startIntervalPattern:P(e?.startIntervalPattern)?e.startIntervalPattern:null,endIntervalPattern:P(e?.endIntervalPattern)?e.endIntervalPattern:null}}updateValidators(e){const t=this.getTelemetryFromDatabaseConfigForm.get("fetchMode").value,n=this.getTelemetryFromDatabaseConfigForm.get("useMetadataIntervalPatterns").value;t&&t===St.ALL?(this.getTelemetryFromDatabaseConfigForm.get("aggregation").setValidators([N.required]),this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([N.required]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([N.required,N.min(2),N.max(1e3)])):(this.getTelemetryFromDatabaseConfigForm.get("aggregation").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("orderBy").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("limit").setValidators([])),n?(this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("interval").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([N.required,N.pattern(/(?:.|\s)*\S(&:.|\s)*/)])):(this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").setValidators([N.required,N.min(1),N.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").setValidators([N.required]),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").setValidators([N.required,N.min(1),N.max(2147483647)]),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").setValidators([N.required]),this.getTelemetryFromDatabaseConfigForm.get("interval").setValidators([this.intervalValidator()]),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").setValidators([]),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").setValidators([])),this.getTelemetryFromDatabaseConfigForm.get("aggregation").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("orderBy").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("limit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.startInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.startIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.endInterval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval.endIntervalTimeUnit").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("interval").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("startIntervalPattern").updateValueAndValidity({emitEvent:e}),this.getTelemetryFromDatabaseConfigForm.get("endIntervalPattern").updateValueAndValidity({emitEvent:e})}removeKey(e,t){const n=this.getTelemetryFromDatabaseConfigForm.get(t).value,r=n.indexOf(e);r>=0&&(n.splice(r,1),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(n,{emitEvent:!0}))}clearChipGrid(){this.getTelemetryFromDatabaseConfigForm.get("latestTsKeyNames").patchValue([],{emitEvent:!0})}addKey(e,t){const n=e.input;let r=e.value;if((r||"").trim()){r=r.trim();let e=this.getTelemetryFromDatabaseConfigForm.get(t).value;e&&-1!==e.indexOf(r)||(e||(e=[]),e.push(r),this.getTelemetryFromDatabaseConfigForm.get(t).setValue(e,{emitEvent:!0}))}n&&(n.value="")}defaultPaddingEnable(){return this.getTelemetryFromDatabaseConfigForm.get("fetchMode").value===St.ALL&&this.getTelemetryFromDatabaseConfigForm.get("aggregation").value===T.NONE}static{this.ɵfac=function(e){return new(e||po)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:po,selectors:[["tb-enrichment-node-get-telemetry-from-database"]],features:[t.ɵɵInheritDefinitionFeature],decls:34,vars:40,consts:[["intervalPattern",""],["invalidText",""],[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],["editable","","subscriptSizing","dynamic","required","","formControlName","latestTsKeyNames",1,"mat-block",3,"placeholder","requiredText","label","hint"],["matHintEnd","","hintMode","","tb-help-popup-placement","right","trigger-style","letter-spacing:0.25px; font-size:12px",1,"see-example",3,"tb-help-popup","tb-help-popup-style","trigger-text"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","useMetadataIntervalPatterns",1,"mat-slide"],["formGroupName","interval","class","flex flex-col",4,"ngIf","ngIfElse"],[1,"tb-form-panel","no-border","no-padding","item-center"],[1,"fetch-mod-toggle"],["formControlName","fetchMode","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-hint","tb-primary-fill","hint-container"],[4,"ngIf"],["formGroupName","interval",1,"flex","flex-col"],[1,"flex","flex-col","gap-0","gt-sm:flex-row","gt-sm:gap-4"],[1,"mat-block","gt-sm:max-w-50%","gt-sm:flex-full"],["type","number","step","1","min","1","max","2147483647","matInput","","formControlName","startInterval","required",""],["hideRequiredMarker","",1,"mat-block","gt-sm:max-w-50%","gt-sm:flex-full"],["formControlName","startIntervalTimeUnit","required",""],["type","number","step","1","min","1","max","2147483647","matInput","","formControlName","endInterval","required",""],["formControlName","endIntervalTimeUnit","required",""],[1,"description-block","tb-primary-fill"],[1,"description-icon"],[1,"description-text"],[4,"ngIf","ngIfElse"],[3,"value"],[1,"input-block","flex","flex-col"],[1,"mat-block","flex-1"],["matInput","","formControlName","startIntervalPattern","required",""],["matInput","","formControlName","endIntervalPattern","required",""],["popupHelpLink","rulenode/originator_telemetry_node_fields_templatization",3,"hintText"],["hideRequiredMarker","",1,"mat-block",3,"subscriptSizing"],["formControlName","aggregation","required",""],["hideRequiredMarker","",1,"mat-block"],["formControlName","orderBy","required",""],[1,"mat-block"],["type","number","min","2","max","1000","step","1","matInput","","formControlName","limit","required",""]],template:function(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",2)(1,"tb-string-items-list",3),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"translate"),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵelement(6,"div",4),t.ɵɵpipe(7,"translate"),t.ɵɵelementStart(8,"mat-icon",5),t.ɵɵpipe(9,"translate"),t.ɵɵpipe(10,"translate"),t.ɵɵtext(11,"help "),t.ɵɵelementEnd()(),t.ɵɵelementStart(12,"div",6)(13,"div",7),t.ɵɵtext(14,"tb.rulenode.fetch-interval"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"div",8),t.ɵɵpipe(16,"translate"),t.ɵɵelementStart(17,"mat-slide-toggle",9),t.ɵɵtext(18),t.ɵɵpipe(19,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(20,Wi,38,24,"div",10)(21,eo,15,11,"ng-template",null,0,t.ɵɵtemplateRefExtractor),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"div",6)(24,"div",7),t.ɵɵtext(25,"tb.rulenode.fetch-strategy"),t.ɵɵelementEnd(),t.ɵɵelementStart(26,"div",11)(27,"div",12)(28,"tb-toggle-select",13),t.ɵɵtemplate(29,to,2,2,"tb-toggle-option",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(30,"div",15),t.ɵɵtext(31),t.ɵɵpipe(32,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(33,so,8,6,"div",16),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵreference(22);t.ɵɵproperty("formGroup",n.getTelemetryFromDatabaseConfigForm),t.ɵɵadvance(),t.ɵɵproperty("placeholder",t.ɵɵpipeBind1(2,16,"tb.rulenode.add-timeseries-key"))("requiredText",t.ɵɵpipeBind1(3,18,"tb.rulenode.timeseries-keys-required"))("label",t.ɵɵpipeBind1(4,20,"tb.rulenode.timeseries-keys"))("hint",t.ɵɵpipeBind1(5,22,"tb.rulenode.general-pattern-hint")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("tb-help-popup","rulenode/originator_telemetry_node_fields_templatization"),t.ɵɵpropertyInterpolate("trigger-text",t.ɵɵpipeBind1(7,24,"tb.key-val.see-examples")),t.ɵɵproperty("tb-help-popup-style",t.ɵɵpureFunction0(37,Pi)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(10,28,"tb.rulenode.chip-help",t.ɵɵpureFunction1(38,Ri,t.ɵɵpipeBind1(9,26,"tb.rulenode.timeseries-key")))),t.ɵɵadvance(7),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(16,31,"tb.rulenode.use-metadata-dynamic-interval-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(19,33,"tb.rulenode.use-metadata-dynamic-interval")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!1===n.getTelemetryFromDatabaseConfigForm.get("useMetadataIntervalPatterns").value)("ngIfElse",e),t.ɵɵadvance(9),t.ɵɵproperty("ngForOf",n.headerOptions),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(32,35,n.deduplicationStrategiesHintTranslations.get(n.getTelemetryFromDatabaseConfigForm.get("fetchMode").value))," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.getTelemetryFromDatabaseConfigForm.get("fetchMode").value===n.fetchMode.ALL)}},dependencies:t.ɵɵgetComponentDepsFactory(po),styles:["[_nghost-%COMP%] .see-example[_ngcontent-%COMP%]{display:inline-block}[_nghost-%COMP%] .description-block[_ngcontent-%COMP%]{display:flex;align-items:center;border-radius:6px;border:1px solid #EAEAEA}[_nghost-%COMP%] .description-block[_ngcontent-%COMP%] .description-icon[_ngcontent-%COMP%]{font-size:24px;height:24px;min-height:24px;width:24px;min-width:24px;line-height:24px;color:#d9d9d9;margin:4px}[_nghost-%COMP%] .description-block[_ngcontent-%COMP%] .description-text[_ngcontent-%COMP%]{font-size:12px;line-height:16px;letter-spacing:.25px;margin:6px}[_nghost-%COMP%] .description-block.error[_ngcontent-%COMP%]{color:var(--mdc-theme-error, #f44336)}[_nghost-%COMP%] .description-block.error[_ngcontent-%COMP%] .description-icon[_ngcontent-%COMP%]{color:var(--mdc-theme-error, #f44336)}[_nghost-%COMP%] .item-center[_ngcontent-%COMP%]{align-items:center}[_nghost-%COMP%] .item-center[_ngcontent-%COMP%] .fetch-mod-toggle[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .hint-container[_ngcontent-%COMP%]{width:100%}"]})}}e("GetTelemetryFromDatabaseConfigComponent",po);class mo extends i{constructor(e,t,n){super(e),this.store=e,this.translate=t,this.fb=n}configForm(){return this.originatorAttributesConfigForm}onConfigurationSet(e){this.originatorAttributesConfigForm=this.fb.group({tellFailureIfAbsent:[e.tellFailureIfAbsent,[]],fetchTo:[e.fetchTo,[]],attributesControl:[e.attributesControl,[]]})}prepareInputConfig(e){return j(e)&&(e.attributesControl={clientAttributeNames:P(e?.clientAttributeNames)?e.clientAttributeNames:[],latestTsKeyNames:P(e?.latestTsKeyNames)?e.latestTsKeyNames:[],serverAttributeNames:P(e?.serverAttributeNames)?e.serverAttributeNames:[],sharedAttributeNames:P(e?.sharedAttributeNames)?e.sharedAttributeNames:[],getLatestValueWithTs:!!P(e?.getLatestValueWithTs)&&e.getLatestValueWithTs}),{fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA,tellFailureIfAbsent:!!P(e?.tellFailureIfAbsent)&&e.tellFailureIfAbsent,attributesControl:P(e?.attributesControl)?e.attributesControl:null}}prepareOutputConfig(e){for(const t of Object.keys(e.attributesControl))e[t]=e.attributesControl[t];return delete e.attributesControl,e}static{this.ɵfac=function(e){return new(e||mo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(K.TranslateService),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:mo,selectors:[["tb-enrichment-node-originator-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:15,vars:11,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-padding","no-border","space-between"],["translate","",1,"tb-form-panel-title","tb-required"],["translate","",1,"tb-form-panel-hint","tb-error",3,"hidden"],["formControlName","attributesControl","popupHelpLink","rulenode/originator_attributes_node_fields_templatization"],["formControlName","fetchTo",3,"labelText"],[1,"tb-form-row","same-padding",3,"tb-hint-tooltip-icon"],["formControlName","tellFailureIfAbsent",1,"mat-slide","margin"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2)(3,"div",3),t.ɵɵtext(4,"tb.rulenode.originator-attributes"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"div",4),t.ɵɵtext(6," tb.rulenode.at-least-one-field-required "),t.ɵɵelementEnd()(),t.ɵɵelement(7,"tb-select-attributes",5)(8,"tb-msg-metadata-chip",6),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(10,"div",7),t.ɵɵpipe(11,"translate"),t.ɵɵelementStart(12,"mat-slide-toggle",8),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.originatorAttributesConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("hidden",!(n.originatorAttributesConfigForm.get("attributesControl").touched&&n.originatorAttributesConfigForm.get("attributesControl").hasError("atLeastOneRequired"))),t.ɵɵadvance(3),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(9,5,"tb.rulenode.add-originator-attributes-to")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(11,7,"tb.rulenode.tell-failure-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(14,9,"tb.rulenode.tell-failure")," "))},dependencies:t.ɵɵgetComponentDepsFactory(mo),encapsulation:2})}}e("OriginatorAttributesConfigComponent",mo);class uo extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.originatorFields=[];for(const e of ut)this.originatorFields.push({value:e.value,name:this.translate.instant(e.name)})}configForm(){return this.originatorFieldsConfigForm}prepareOutputConfig(e){return _(e)}prepareInputConfig(e){return{dataMapping:P(e?.dataMapping)?e.dataMapping:null,ignoreNullStrings:P(e?.ignoreNullStrings)?e.ignoreNullStrings:null,fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA}}onConfigurationSet(e){this.originatorFieldsConfigForm=this.fb.group({dataMapping:[e.dataMapping,[N.required]],ignoreNullStrings:[e.ignoreNullStrings,[]],fetchTo:[e.fetchTo,[]]})}static{this.ɵfac=function(e){return new(e||uo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:uo,selectors:[["tb-enrichment-node-originator-fields-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:16,vars:32,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],["required","","targetKeyPrefix","originator","formControlName","dataMapping","popupHelpLink","rulenode/originator_fields_node_fields_templatization",3,"selectOptions","requiredText","labelText","selectText","selectRequiredText","valText","valRequiredText","hintText"],["formControlName","fetchTo",3,"labelText"],[1,"tb-form-row","same-padding",3,"tb-hint-tooltip-icon"],["formControlName","ignoreNullStrings",1,"mat-slide","margin"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-sv-map-config",1),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"translate"),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵpipe(6,"translate"),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"translate"),t.ɵɵelement(9,"tb-msg-metadata-chip",2),t.ɵɵpipe(10,"translate"),t.ɵɵelementStart(11,"div",3),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"mat-slide-toggle",4),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.originatorFieldsConfigForm),t.ɵɵadvance(),t.ɵɵproperty("selectOptions",n.originatorFields)("requiredText",t.ɵɵpipeBind1(2,12,"tb.rulenode.attr-mapping-required"))("labelText",t.ɵɵpipeBind1(3,14,"tb.rulenode.originator-fields-mapping"))("selectText",t.ɵɵpipeBind1(4,16,"tb.rulenode.source-field"))("selectRequiredText",t.ɵɵpipeBind1(5,18,"tb.rulenode.source-field-required"))("valText",t.ɵɵpipeBind1(6,20,"tb.rulenode.target-key"))("valRequiredText",t.ɵɵpipeBind1(7,22,"tb.rulenode.target-key-required"))("hintText",t.ɵɵpipeBind1(8,24,"tb.rulenode.originator-fields-sv-map-hint")),t.ɵɵadvance(8),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(10,26,"tb.rulenode.add-mapped-originator-fields-to")),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(12,28,"tb.rulenode.skip-empty-fields-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,30,"tb.rulenode.skip-empty-fields")," "))},dependencies:t.ɵɵgetComponentDepsFactory(uo),encapsulation:2})}}function co(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",9),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}e("OriginatorFieldsConfigComponent",uo);class fo extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.DataToFetch=Ft,this.msgMetadataLabelTranslations=At,this.originatorFields=[],this.fetchToData=[];for(const e of Object.keys(ut))this.originatorFields.push({value:ut[e].value,name:this.translate.instant(ut[e].name)});for(const e of qt.keys())this.fetchToData.push({value:e,name:this.translate.instant(qt.get(e))})}configForm(){return this.relatedAttributesConfigForm}prepareOutputConfig(e){e.dataToFetch===Ft.FIELDS?(e.dataMapping=e.svMap,delete e.svMap):(e.dataMapping=e.kvMap,delete e.kvMap);const t={};if(e&&e.dataMapping)for(const n of Object.keys(e.dataMapping))t[n.trim()]=e.dataMapping[n];return e.dataMapping=t,delete e.svMap,delete e.kvMap,_(e)}prepareInputConfig(e){let t,n,r={[c.name.value]:`relatedEntity${this.translate.instant(c.name.name)}`},a={serialNumber:"sn"};return t=P(e?.telemetry)?e.telemetry?Ft.LATEST_TELEMETRY:Ft.ATTRIBUTES:P(e?.dataToFetch)?e.dataToFetch:Ft.ATTRIBUTES,n=P(e?.attrMapping)?e.attrMapping:P(e?.dataMapping)?e.dataMapping:null,t===Ft.FIELDS?r=n:a=n,{relationsQuery:P(e?.relationsQuery)?e.relationsQuery:null,dataToFetch:t,svMap:r,kvMap:a,fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA}}selectTranslation(e,t){return this.relatedAttributesConfigForm.get("dataToFetch").value===Ft.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.relatedAttributesConfigForm=this.fb.group({relationsQuery:[e.relationsQuery,[N.required]],dataToFetch:[e.dataToFetch,[]],kvMap:[e.kvMap,[N.required]],svMap:[e.svMap,[N.required]],fetchTo:[e.fetchTo,[]]})}validatorTriggers(){return["dataToFetch"]}updateValidators(e){this.relatedAttributesConfigForm.get("dataToFetch").value===Ft.FIELDS?(this.relatedAttributesConfigForm.get("svMap").enable({emitEvent:!1}),this.relatedAttributesConfigForm.get("kvMap").disable({emitEvent:!1}),this.relatedAttributesConfigForm.get("svMap").updateValueAndValidity()):(this.relatedAttributesConfigForm.get("svMap").disable({emitEvent:!1}),this.relatedAttributesConfigForm.get("kvMap").enable({emitEvent:!1}),this.relatedAttributesConfigForm.get("kvMap").updateValueAndValidity())}static{this.ɵfac=function(e){return new(e||fo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:fo,selectors:[["tb-enrichment-node-related-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:24,vars:48,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],["required","","formControlName","relationsQuery"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],["formControlName","dataToFetch","appearance","fill"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","kvMap","popupHelpLink","rulenode/related_entity_data_node_fields_templatization",3,"hidden","requiredText","labelText","keyText","keyRequiredText","valText","valRequiredText","hintText"],["required","","targetKeyPrefix","relatedEntity","formControlName","svMap","popupHelpLink","rulenode/related_entity_data_node_fields_templatization",3,"hidden","labelText","selectOptions","requiredText","selectText","selectRequiredText","valText","valRequiredText","hintText"],["formControlName","fetchTo",3,"labelText"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-relations-query-config",1),t.ɵɵelementStart(2,"div",2)(3,"div",3),t.ɵɵtext(4,"tb.rulenode.data-to-fetch"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"tb-toggle-select",4),t.ɵɵtemplate(6,co,2,2,"tb-toggle-option",5),t.ɵɵelementEnd(),t.ɵɵelement(7,"tb-kv-map-config",6),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"translate"),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵelement(14,"tb-sv-map-config",7),t.ɵɵpipe(15,"translate"),t.ɵɵpipe(16,"translate"),t.ɵɵpipe(17,"translate"),t.ɵɵpipe(18,"translate"),t.ɵɵpipe(19,"translate"),t.ɵɵpipe(20,"translate"),t.ɵɵpipe(21,"translate"),t.ɵɵelement(22,"tb-msg-metadata-chip",8),t.ɵɵpipe(23,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.relatedAttributesConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.fetchToData),t.ɵɵadvance(),t.ɵɵproperty("hidden",n.relatedAttributesConfigForm.get("dataToFetch").value===n.DataToFetch.FIELDS)("requiredText",t.ɵɵpipeBind1(8,20,"tb.rulenode.attr-mapping-required"))("labelText",t.ɵɵpipeBind1(9,22,n.selectTranslation("tb.rulenode.latest-telemetry-mapping","tb.rulenode.attributes-mapping")))("keyText",t.ɵɵpipeBind1(10,24,n.selectTranslation("tb.rulenode.source-telemetry","tb.rulenode.source-attribute")))("keyRequiredText",t.ɵɵpipeBind1(11,26,n.selectTranslation("tb.rulenode.source-telemetry-required","tb.rulenode.source-attribute-required")))("valText",t.ɵɵpipeBind1(12,28,"tb.rulenode.target-key"))("valRequiredText",t.ɵɵpipeBind1(13,30,"tb.rulenode.target-key-required"))("hintText","tb.rulenode.kv-map-pattern-hint"),t.ɵɵadvance(7),t.ɵɵproperty("hidden",n.relatedAttributesConfigForm.get("dataToFetch").value!==n.DataToFetch.FIELDS)("labelText",t.ɵɵpipeBind1(15,32,"tb.rulenode.fields-mapping"))("selectOptions",n.originatorFields)("requiredText",t.ɵɵpipeBind1(16,34,"tb.rulenode.attr-mapping-required"))("selectText",t.ɵɵpipeBind1(17,36,"tb.rulenode.source-field"))("selectRequiredText",t.ɵɵpipeBind1(18,38,"tb.rulenode.source-field-required"))("valText",t.ɵɵpipeBind1(19,40,"tb.rulenode.target-key"))("valRequiredText",t.ɵɵpipeBind1(20,42,"tb.rulenode.target-key-required"))("hintText",t.ɵɵpipeBind1(21,44,"tb.rulenode.sv-map-hint")),t.ɵɵadvance(8),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(23,46,n.msgMetadataLabelTranslations.get(n.relatedAttributesConfigForm.get("dataToFetch").value))))},dependencies:t.ɵɵgetComponentDepsFactory(fo),encapsulation:2})}}function go(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",8),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}e("RelatedAttributesConfigComponent",fo);class ho extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.fetchToData=[],this.DataToFetch=Ft;for(const e of qt.keys())e!==Ft.FIELDS&&this.fetchToData.push({value:e,name:this.translate.instant(qt.get(e))})}configForm(){return this.tenantAttributesConfigForm}prepareInputConfig(e){let t,n;return t=P(e?.telemetry)?e.telemetry?Ft.LATEST_TELEMETRY:Ft.ATTRIBUTES:P(e?.dataToFetch)?e.dataToFetch:Ft.ATTRIBUTES,n=P(e?.attrMapping)?e.attrMapping:P(e?.dataMapping)?e.dataMapping:null,{dataToFetch:t,dataMapping:n,fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA}}selectTranslation(e,t){return this.tenantAttributesConfigForm.get("dataToFetch").value===Ft.LATEST_TELEMETRY?e:t}onConfigurationSet(e){this.tenantAttributesConfigForm=this.fb.group({dataToFetch:[e.dataToFetch,[]],dataMapping:[e.dataMapping,[N.required]],fetchTo:[e.fetchTo,[]]})}static{this.ɵfac=function(e){return new(e||ho)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ho,selectors:[["tb-enrichment-node-tenant-attributes-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:17,vars:26,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-1","items-center","justify-center"],[1,"fetch-to-data-toggle"],["formControlName","dataToFetch","appearance","fill",1,"fetch-to-data-toggle"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","dataMapping","popupHelpLink","rulenode/tenant_attributes_node_fields_templatization",3,"requiredText","labelText","keyText","keyRequiredText","valText","valRequiredText","hintText"],["formControlName","fetchTo",3,"labelText"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.mapping-of-tenant"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2)(4,"div",3)(5,"tb-toggle-select",4),t.ɵɵtemplate(6,go,2,2,"tb-toggle-option",5),t.ɵɵelementEnd()()(),t.ɵɵelement(7,"tb-kv-map-config",6),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"translate"),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵelement(14,"tb-msg-metadata-chip",7),t.ɵɵpipe(15,"translate"),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.tenantAttributesConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.fetchToData),t.ɵɵadvance(),t.ɵɵproperty("requiredText",t.ɵɵpipeBind1(8,10,"tb.rulenode.attr-mapping-required"))("labelText",t.ɵɵpipeBind1(9,12,n.selectTranslation("tb.rulenode.latest-telemetry-mapping","tb.rulenode.attributes-mapping")))("keyText",t.ɵɵpipeBind1(10,14,n.selectTranslation("tb.rulenode.source-telemetry","tb.rulenode.source-attribute")))("keyRequiredText",t.ɵɵpipeBind1(11,16,n.selectTranslation("tb.rulenode.source-telemetry-required","tb.rulenode.source-attribute-required")))("valText",t.ɵɵpipeBind1(12,18,"tb.rulenode.target-key"))("valRequiredText",t.ɵɵpipeBind1(13,20,"tb.rulenode.target-key-required"))("hintText","tb.rulenode.kv-map-pattern-hint"),t.ɵɵadvance(7),t.ɵɵproperty("labelText",n.tenantAttributesConfigForm.get("dataToFetch").value===n.DataToFetch.LATEST_TELEMETRY?t.ɵɵpipeBind1(15,22,"tb.rulenode.add-mapped-latest-telemetry-to"):t.ɵɵpipeBind1(16,24,"tb.rulenode.add-mapped-attribute-to")))},dependencies:t.ɵɵgetComponentDepsFactory(ho),styles:["[_nghost-%COMP%] .fetch-to-data-toggle[_ngcontent-%COMP%]{max-width:420px;width:100%}"]})}}e("TenantAttributesConfigComponent",ho);class yo extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.fetchDeviceCredentialsConfigForm}prepareInputConfig(e){return{fetchTo:P(e?.fetchTo)?e.fetchTo:Kt.METADATA}}onConfigurationSet(e){this.fetchDeviceCredentialsConfigForm=this.fb.group({fetchTo:[e.fetchTo,[]]})}static{this.ɵfac=function(e){return new(e||yo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:yo,selectors:[["tb-enrichment-node-fetch-device-credentials-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:3,vars:4,consts:[[3,"formGroup"],["formControlName","fetchTo",3,"labelText"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-msg-metadata-chip",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.fetchDeviceCredentialsConfigForm),t.ɵɵadvance(),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(2,2,"tb.rulenode.fetch-credentials-to")))},dependencies:t.ɵɵgetComponentDepsFactory(yo),encapsulation:2})}}e("FetchDeviceCredentialsConfigComponent",yo);class bo{static{this.ɵfac=function(e){return new(e||bo)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:bo})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,xi,Vi,Li,Oi,mo,uo,po,fo,ho,Mi,yo]})}}function vo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.topic-required")," "))}function xo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.hostname-required")," "))}function Co(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.device-id-required")," "))}function So(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",17),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.azureIotHubCredentialsTypeTranslationsMap.get(e))," ")}}function To(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.credentials-type-required")," "))}function Io(e,t){}function Eo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.sas-key-required")," "))}function Fo(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"mat-form-field",5)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.sas-key"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",18)(4,"tb-toggle-password",19),t.ɵɵtemplate(5,Eo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"tb-file-input",20),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext();return t.ɵɵresetView(r.azureIotHubConfigForm.get("credentials.caCertFileName").setValue(n))})),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.azureIotHubConfigForm.get("credentials.sasKey").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(7,4,"tb.rulenode.azure-ca-cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(8,6,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.azureIotHubConfigForm.get("credentials.caCertFileName").value)}}function qo(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-file-input",20),t.ɵɵpipe(1,"translate"),t.ɵɵpipe(2,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext();return t.ɵɵresetView(r.azureIotHubConfigForm.get("credentials.caCertFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"tb-file-input",21),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext();return t.ɵɵresetView(r.azureIotHubConfigForm.get("credentials.certFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"tb-file-input",22),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"translate"),t.ɵɵlistener("fileNameChanged",(function(n){t.ɵɵrestoreView(e);const r=t.ɵɵnextContext();return t.ɵɵresetView(r.azureIotHubConfigForm.get("credentials.privateKeyFileName").setValue(n))})),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",5)(10,"mat-label",2),t.ɵɵtext(11,"tb.rulenode.private-key-password"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",23)(13,"tb-toggle-password",19),t.ɵɵelementEnd()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(1,9,"tb.rulenode.azure-ca-cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(2,11,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.azureIotHubConfigForm.get("credentials.caCertFileName").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(4,13,"tb.rulenode.cert")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(5,15,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.azureIotHubConfigForm.get("credentials.certFileName").value),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(7,17,"tb.rulenode.private-key")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(8,19,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",e.azureIotHubConfigForm.get("credentials.privateKeyFileName").value)}}e("RulenodeCoreConfigEnrichmentModule",bo),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(bo,{declarations:[Vi,Li,Oi,mo,uo,po,fo,ho,Mi,yo],imports:[$,S,xi],exports:[Vi,Li,Oi,mo,uo,po,fo,ho,Mi,yo]});class Ao extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.allAzureIotHubCredentialsTypes=Vt,this.azureIotHubCredentialsTypeTranslationsMap=Ot}configForm(){return this.azureIotHubConfigForm}onConfigurationSet(e){this.azureIotHubConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[N.required]],host:[e?e.host:null,[N.required]],port:[e?e.port:null,[N.required,N.min(1),N.max(65535)]],connectTimeoutSec:[e?e.connectTimeoutSec:null,[N.required,N.min(1),N.max(200)]],clientId:[e?e.clientId:null,[N.required]],cleanSession:[!!e&&e.cleanSession,[]],ssl:[!!e&&e.ssl,[]],credentials:this.fb.group({type:[e&&e.credentials?e.credentials.type:null,[N.required]],sasKey:[e&&e.credentials?e.credentials.sasKey:null,[]],caCert:[e&&e.credentials?e.credentials.caCert:null,[]],caCertFileName:[e&&e.credentials?e.credentials.caCertFileName:null,[]],privateKey:[e&&e.credentials?e.credentials.privateKey:null,[]],privateKeyFileName:[e&&e.credentials?e.credentials.privateKeyFileName:null,[]],cert:[e&&e.credentials?e.credentials.cert:null,[]],certFileName:[e&&e.credentials?e.credentials.certFileName:null,[]],password:[e&&e.credentials?e.credentials.password:null,[]]})})}prepareOutputConfig(e){const t=e.credentials.type;return"sas"===t&&(e.credentials={type:t,sasKey:e.credentials.sasKey,caCert:e.credentials.caCert,caCertFileName:e.credentials.caCertFileName}),e}validatorTriggers(){return["credentials.type"]}updateValidators(e){const t=this.azureIotHubConfigForm.get("credentials"),n=t.get("type").value;switch(e&&t.reset({type:n},{emitEvent:!1}),t.get("sasKey").setValidators([]),t.get("privateKey").setValidators([]),t.get("privateKeyFileName").setValidators([]),t.get("cert").setValidators([]),t.get("certFileName").setValidators([]),n){case"sas":t.get("sasKey").setValidators([N.required]);break;case"cert.PEM":t.get("privateKey").setValidators([N.required]),t.get("privateKeyFileName").setValidators([N.required]),t.get("cert").setValidators([N.required]),t.get("certFileName").setValidators([N.required])}t.get("sasKey").updateValueAndValidity({emitEvent:e}),t.get("privateKey").updateValueAndValidity({emitEvent:e}),t.get("privateKeyFileName").updateValueAndValidity({emitEvent:e}),t.get("cert").updateValueAndValidity({emitEvent:e}),t.get("certFileName").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||Ao)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ao,selectors:[["tb-external-node-azure-iot-hub-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:37,vars:10,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","topicPattern"],[4,"ngIf"],[1,"mat-block"],["required","","matInput","","formControlName","host"],["required","","matInput","","formControlName","clientId","autocomplete","new-clientId"],[1,"tb-mqtt-credentials-panel-group"],["translate","",1,"tb-required"],["formGroupName","credentials",1,"flex","flex-col"],["formControlName","type","required",""],[3,"value",4,"ngFor","ngForOf"],[1,"flex","flex-col",3,"ngSwitch"],["ngSwitchCase","anonymous"],["ngSwitchCase","sas"],["ngSwitchCase","cert.PEM"],[3,"value"],["type","password","required","","matInput","","formControlName","sasKey","autocomplete","new-password"],["matSuffix",""],["formControlName","caCert","inputId","caCertSelect","noFileText","tb.rulenode.no-file",3,"fileNameChanged","existingFileName","label","dropLabel"],["formControlName","cert","inputId","CertSelect","required","","requiredAsError","","noFileText","tb.rulenode.no-file",3,"fileNameChanged","existingFileName","label","dropLabel"],["formControlName","privateKey","inputId","privateKeySelect","required","","requiredAsError","","noFileText","tb.rulenode.no-file",2,"padding-bottom","8px",3,"fileNameChanged","existingFileName","label","dropLabel"],["type","password","matInput","","formControlName","password","autocomplete","new-password"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.topic"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,vo,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-form-field",5)(9,"mat-label",2),t.ɵɵtext(10,"tb.rulenode.hostname"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",6),t.ɵɵtemplate(12,xo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",5)(14,"mat-label",2),t.ɵɵtext(15,"tb.rulenode.device-id"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",7),t.ɵɵtemplate(17,Co,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"mat-accordion")(19,"mat-expansion-panel",8)(20,"mat-expansion-panel-header")(21,"mat-panel-title",9),t.ɵɵtext(22,"tb.rulenode.credentials"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"mat-panel-description"),t.ɵɵtext(24),t.ɵɵpipe(25,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(26,"section",10)(27,"mat-form-field",5)(28,"mat-label",2),t.ɵɵtext(29,"tb.rulenode.credentials-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(30,"mat-select",11),t.ɵɵtemplate(31,So,3,4,"mat-option",12),t.ɵɵelementEnd(),t.ɵɵtemplate(32,To,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(33,"section",13),t.ɵɵtemplate(34,Io,0,0,"ng-template",14)(35,Fo,9,8,"ng-template",15)(36,qo,14,21,"ng-template",16),t.ɵɵelementEnd()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.azureIotHubConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.azureIotHubConfigForm.get("topicPattern").hasError("required")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.azureIotHubConfigForm.get("host").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.azureIotHubConfigForm.get("clientId").hasError("required")),t.ɵɵadvance(7),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(25,8,n.azureIotHubCredentialsTypeTranslationsMap.get(n.azureIotHubConfigForm.get("credentials.type").value))," "),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",n.allAzureIotHubCredentialsTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.azureIotHubConfigForm.get("credentials.type").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngSwitch",n.azureIotHubConfigForm.get("credentials.type").value))},dependencies:t.ɵɵgetComponentDepsFactory(Ao),styles:["[_nghost-%COMP%] .tb-mqtt-credentials-panel-group[_ngcontent-%COMP%]{margin:0 6px}"]})}}function ko(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.topic-pattern-required")," "))}function No(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.bootstrap-servers-required")," "))}function wo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-retries-message")," "))}function Mo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-batch-size-bytes-message")," "))}function Bo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-linger-ms-message")," "))}function Vo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-buffer-memory-bytes-message")," "))}function Oo(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function Do(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.key-serializer-required")," "))}function Lo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.value-serializer-required")," "))}function Po(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",21),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.ToByteStandartCharsetTypeTranslationMap.get(e))," ")}}function Ro(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",22)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.charset-encoding"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",23),t.ɵɵtemplate(4,Po,3,4,"mat-option",14),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.ToByteStandartCharsetTypesValues)}}e("AzureIotHubConfigComponent",Ao);class _o extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.ackValues=["all","-1","0","1"],this.ToByteStandartCharsetTypesValues=Lt,this.ToByteStandartCharsetTypeTranslationMap=Pt}configForm(){return this.kafkaConfigForm}onConfigurationSet(e){this.kafkaConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[N.required]],keyPattern:[e?e.keyPattern:null],bootstrapServers:[e?e.bootstrapServers:null,[N.required]],retries:[e?e.retries:null,[N.min(0)]],batchSize:[e?e.batchSize:null,[N.min(0)]],linger:[e?e.linger:null,[N.min(0)]],bufferMemory:[e?e.bufferMemory:null,[N.min(0)]],acks:[e?e.acks:null,[N.required]],keySerializer:[e?e.keySerializer:null,[N.required]],valueSerializer:[e?e.valueSerializer:null,[N.required]],otherProperties:[e?e.otherProperties:null,[]],addMetadataKeyValuesAsKafkaHeaders:[!!e&&e.addMetadataKeyValuesAsKafkaHeaders,[]],kafkaHeadersCharset:[e?e.kafkaHeadersCharset:null,[]]})}validatorTriggers(){return["addMetadataKeyValuesAsKafkaHeaders"]}updateValidators(e){this.kafkaConfigForm.get("addMetadataKeyValuesAsKafkaHeaders").value?this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([N.required]):this.kafkaConfigForm.get("kafkaHeadersCharset").setValidators([]),this.kafkaConfigForm.get("kafkaHeadersCharset").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||_o)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:_o,selectors:[["tb-external-node-kafka-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:65,vars:14,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","topicPattern"],[4,"ngIf"],["matInput","","formControlName","keyPattern"],["translate","",1,"tb-hint"],[1,"mat-block"],["required","","matInput","","formControlName","bootstrapServers"],["type","number","step","1","min","0","matInput","","formControlName","retries"],["type","number","step","1","min","0","matInput","","formControlName","batchSize"],["type","number","step","1","min","0","matInput","","formControlName","linger"],["type","number","step","1","min","0","matInput","","formControlName","bufferMemory"],["formControlName","acks","required",""],[3,"value",4,"ngFor","ngForOf"],["required","","matInput","","formControlName","keySerializer"],["required","","matInput","","formControlName","valueSerializer"],["translate","",1,"tb-title"],["required","false","formControlName","otherProperties","keyText","tb.rulenode.key","keyRequiredText","tb.rulenode.key-required","valText","tb.rulenode.value","valRequiredText","tb.rulenode.value-required"],["formControlName","addMetadataKeyValuesAsKafkaHeaders",1,"flex-1"],["class","mat-block flex-1",4,"ngIf"],[3,"value"],[1,"mat-block","flex-1"],["formControlName","kafkaHeadersCharset","required",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.topic-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,ko,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-form-field",1)(9,"mat-label",2),t.ɵɵtext(10,"tb.rulenode.key-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",5),t.ɵɵelementStart(12,"mat-hint",2),t.ɵɵtext(13,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"div",6),t.ɵɵtext(15,"tb.rulenode.key-pattern-hint"),t.ɵɵelementEnd(),t.ɵɵelementStart(16,"mat-form-field",7)(17,"mat-label",2),t.ɵɵtext(18,"tb.rulenode.bootstrap-servers"),t.ɵɵelementEnd(),t.ɵɵelement(19,"input",8),t.ɵɵtemplate(20,No,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",7)(22,"mat-label",2),t.ɵɵtext(23,"tb.rulenode.retries"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",9),t.ɵɵtemplate(25,wo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(26,"mat-form-field",7)(27,"mat-label",2),t.ɵɵtext(28,"tb.rulenode.batch-size-bytes"),t.ɵɵelementEnd(),t.ɵɵelement(29,"input",10),t.ɵɵtemplate(30,Mo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(31,"mat-form-field",7)(32,"mat-label",2),t.ɵɵtext(33,"tb.rulenode.linger-ms"),t.ɵɵelementEnd(),t.ɵɵelement(34,"input",11),t.ɵɵtemplate(35,Bo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(36,"mat-form-field",7)(37,"mat-label",2),t.ɵɵtext(38,"tb.rulenode.buffer-memory-bytes"),t.ɵɵelementEnd(),t.ɵɵelement(39,"input",12),t.ɵɵtemplate(40,Vo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(41,"mat-form-field",7)(42,"mat-label",2),t.ɵɵtext(43,"tb.rulenode.acks"),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"mat-select",13),t.ɵɵtemplate(45,Oo,2,2,"mat-option",14),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"mat-form-field",7)(47,"mat-label",2),t.ɵɵtext(48,"tb.rulenode.key-serializer"),t.ɵɵelementEnd(),t.ɵɵelement(49,"input",15),t.ɵɵtemplate(50,Do,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(51,"mat-form-field",7)(52,"mat-label",2),t.ɵɵtext(53,"tb.rulenode.value-serializer"),t.ɵɵelementEnd(),t.ɵɵelement(54,"input",16),t.ɵɵtemplate(55,Lo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(56,"label",17),t.ɵɵtext(57,"tb.rulenode.other-properties"),t.ɵɵelementEnd(),t.ɵɵelement(58,"tb-kv-map-config-old",18),t.ɵɵelementStart(59,"mat-checkbox",19),t.ɵɵtext(60),t.ɵɵpipe(61,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(62,"div",6),t.ɵɵtext(63,"tb.rulenode.add-metadata-key-values-as-kafka-headers-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(64,Ro,5,1,"mat-form-field",20),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.kafkaConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("topicPattern").hasError("required")),t.ɵɵadvance(15),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("bootstrapServers").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("retries").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("batchSize").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("linger").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("bufferMemory").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.ackValues),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("keySerializer").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("valueSerializer").hasError("required")),t.ɵɵadvance(5),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(61,12,"tb.rulenode.add-metadata-key-values-as-kafka-headers")," "),t.ɵɵadvance(4),t.ɵɵproperty("ngIf",n.kafkaConfigForm.get("addMetadataKeyValuesAsKafkaHeaders").value))},dependencies:t.ɵɵgetComponentDepsFactory(_o),encapsulation:2})}}function jo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.topic-pattern-required")," "))}function Go(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.host-required")," "))}function Ko(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-required")," "))}function Uo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-range")," "))}function Ho(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-range")," "))}function zo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.connect-timeout-required")," "))}function $o(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.connect-timeout-range")," "))}function Qo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.connect-timeout-range")," "))}e("KafkaConfigComponent",_o);class Jo extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.mqttConfigForm}onConfigurationSet(e){this.mqttConfigForm=this.fb.group({topicPattern:[e?e.topicPattern:null,[N.required]],host:[e?e.host:null,[N.required]],port:[e?e.port:null,[N.required,N.min(1),N.max(65535)]],connectTimeoutSec:[e?e.connectTimeoutSec:null,[N.required,N.min(1),N.max(200)]],clientId:[e?e.clientId:null,[]],appendClientIdSuffix:[{value:!!e&&e.appendClientIdSuffix,disabled:!(e&&G(e.clientId))},[]],parseToPlainText:[!!e&&e.parseToPlainText,[]],cleanSession:[!!e&&e.cleanSession,[]],retainedMessage:[!!e&&e.retainedMessage,[]],ssl:[!!e&&e.ssl,[]],credentials:[e?e.credentials:null,[]]})}updateValidators(e){G(this.mqttConfigForm.get("clientId").value)?this.mqttConfigForm.get("appendClientIdSuffix").enable({emitEvent:!1}):this.mqttConfigForm.get("appendClientIdSuffix").disable({emitEvent:!1}),this.mqttConfigForm.get("appendClientIdSuffix").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["clientId"]}static{this.ɵfac=function(e){return new(e||Jo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Jo,selectors:[["tb-external-node-mqtt-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:57,vars:34,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","topicPattern"],[4,"ngIf"],[1,"flex","flex-1","flex-col","gt-sm:flex-row","gt-sm:gap-2"],[1,"mat-block","gt-sm:max-w-60%","gt-sm:flex-full"],["required","","matInput","","formControlName","host"],[1,"mat-block","gt-sm:max-w-40%","gt-sm:flex-full"],["required","","type","number","step","1","min","1","max","65535","matInput","","formControlName","port"],["required","","type","number","step","1","min","1","max","200","matInput","","formControlName","connectTimeoutSec"],["matInput","","formControlName","clientId"],["formControlName","appendClientIdSuffix"],[1,"tb-hint"],["formControlName","parseToPlainText"],["formControlName","cleanSession"],["formControlName","retainedMessage"],["formControlName","ssl"],["formControlName","credentials",3,"passwordFieldRequired"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.topic-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,jo,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"div",5)(9,"mat-form-field",6)(10,"mat-label",2),t.ɵɵtext(11,"tb.rulenode.host"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",7),t.ɵɵtemplate(13,Go,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"mat-form-field",8)(15,"mat-label",2),t.ɵɵtext(16,"tb.rulenode.port"),t.ɵɵelementEnd(),t.ɵɵelement(17,"input",9),t.ɵɵtemplate(18,Ko,3,3,"mat-error",4)(19,Uo,3,3,"mat-error",4)(20,Ho,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",8)(22,"mat-label",2),t.ɵɵtext(23,"tb.rulenode.connect-timeout"),t.ɵɵelementEnd(),t.ɵɵelement(24,"input",10),t.ɵɵtemplate(25,zo,3,3,"mat-error",4)(26,$o,3,3,"mat-error",4)(27,Qo,3,3,"mat-error",4),t.ɵɵelementEnd()(),t.ɵɵelementStart(28,"mat-form-field",1)(29,"mat-label",2),t.ɵɵtext(30,"tb.rulenode.client-id"),t.ɵɵelementEnd(),t.ɵɵelement(31,"input",11),t.ɵɵelementStart(32,"mat-hint"),t.ɵɵtext(33),t.ɵɵpipe(34,"translate"),t.ɵɵelementEnd()(),t.ɵɵelementStart(35,"mat-checkbox",12),t.ɵɵtext(36),t.ɵɵpipe(37,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"div",13),t.ɵɵtext(39),t.ɵɵpipe(40,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(41,"mat-checkbox",14),t.ɵɵtext(42),t.ɵɵpipe(43,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(44,"div",13),t.ɵɵtext(45),t.ɵɵpipe(46,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(47,"mat-checkbox",15),t.ɵɵtext(48),t.ɵɵpipe(49,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(50,"mat-checkbox",16),t.ɵɵtext(51),t.ɵɵpipe(52,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(53,"mat-checkbox",17),t.ɵɵtext(54),t.ɵɵpipe(55,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(56,"tb-credentials-config",18),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.mqttConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("topicPattern").hasError("required")),t.ɵɵadvance(8),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("host").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("port").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("port").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("port").hasError("max")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("connectTimeoutSec").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("connectTimeoutSec").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.mqttConfigForm.get("connectTimeoutSec").hasError("max")),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(34,18,"tb.rulenode.client-id-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(37,20,"tb.rulenode.append-client-id-suffix")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(40,22,"tb.rulenode.client-id-suffix-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(43,24,"tb.rulenode.parse-to-plain-text")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(46,26,"tb.rulenode.parse-to-plain-text-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(49,28,"tb.rulenode.clean-session")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(52,30,"tb.rulenode.retained-message")," "),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(55,32,"tb.rulenode.enable-ssl")," "),t.ɵɵadvance(2),t.ɵɵproperty("passwordFieldRequired",!1))},dependencies:t.ɵɵgetComponentDepsFactory(Jo),styles:["[_nghost-%COMP%] .tb-mqtt-credentials-panel-group[_ngcontent-%COMP%]{margin:0 6px}"]})}}e("MqttConfigComponent",Jo);class Yo extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.notificationType=E,this.entityType=u}configForm(){return this.notificationConfigForm}onConfigurationSet(e){this.notificationConfigForm=this.fb.group({templateId:[e?e.templateId:null,[N.required]],targets:[e?e.targets:[],[N.required]]})}static{this.ɵfac=function(e){return new(e||Yo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Yo,selectors:[["tb-external-node-notification-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:6,vars:13,consts:[[1,"flex","flex-col",3,"formGroup"],["required","","allowCreate","","formControlName","templateId",3,"notificationTypes"],["required","","formControlName","targets",3,"labelText","placeholderText","requiredText","entityType","subType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-template-autocomplete",1)(2,"tb-entity-list",2),t.ɵɵpipe(3,"translate"),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.notificationConfigForm),t.ɵɵadvance(),t.ɵɵproperty("notificationTypes",n.notificationType.RULE_NODE),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("labelText",t.ɵɵpipeBind1(3,7,"notification.recipients")),t.ɵɵpropertyInterpolate("placeholderText",t.ɵɵpipeBind1(4,9,"notification.recipient")),t.ɵɵpropertyInterpolate("requiredText",t.ɵɵpipeBind1(5,11,"notification.recipients-required")),t.ɵɵpropertyInterpolate("entityType",n.entityType.NOTIFICATION_TARGET),t.ɵɵpropertyInterpolate("subType",n.notificationType.RULE_NODE))},dependencies:t.ɵɵgetComponentDepsFactory(Yo),encapsulation:2})}}function Wo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.gcp-project-id-required")," "))}function Xo(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.pubsub-topic-name-required")," "))}e("NotificationConfigComponent",Yo);class Zo extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.pubSubConfigForm}onConfigurationSet(e){this.pubSubConfigForm=this.fb.group({projectId:[e?e.projectId:null,[N.required]],topicName:[e?e.topicName:null,[N.required]],serviceAccountKey:[e?e.serviceAccountKey:null,[N.required]],serviceAccountKeyFileName:[e?e.serviceAccountKeyFileName:null,[N.required]],messageAttributes:[e?e.messageAttributes:null,[]]})}static{this.ɵfac=function(e){return new(e||Zo)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Zo,selectors:[["tb-external-node-pub-sub-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:20,vars:16,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block"],["translate",""],["required","","matInput","","formControlName","projectId"],[4,"ngIf"],["required","","matInput","","formControlName","topicName"],["formControlName","serviceAccountKey","required","","requiredAsError","","noFileText","tb.rulenode.no-file",2,"padding-bottom","24px",3,"fileNameChanged","existingFileName","label","dropLabel"],["translate","",1,"tb-title"],[1,"tb-hint",3,"innerHTML"],["required","false","formControlName","messageAttributes","keyText","tb.rulenode.name","keyRequiredText","tb.rulenode.name-required","valText","tb.rulenode.value","valRequiredText","tb.rulenode.value-required"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.gcp-project-id"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,Wo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(6,"mat-form-field",1)(7,"mat-label",2),t.ɵɵtext(8,"tb.rulenode.pubsub-topic-name"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",5),t.ɵɵtemplate(10,Xo,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"tb-file-input",6),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵlistener("fileNameChanged",(function(e){return n.pubSubConfigForm.get("serviceAccountKeyFileName").setValue(e)})),t.ɵɵelementEnd(),t.ɵɵelementStart(14,"label",7),t.ɵɵtext(15,"tb.rulenode.message-attributes"),t.ɵɵelementEnd(),t.ɵɵelement(16,"div",8),t.ɵɵpipe(17,"translate"),t.ɵɵpipe(18,"safe"),t.ɵɵelement(19,"tb-kv-map-config-old",9),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.pubSubConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.pubSubConfigForm.get("projectId").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.pubSubConfigForm.get("topicName").hasError("required")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("label",t.ɵɵpipeBind1(12,7,"tb.rulenode.gcp-service-account-key")),t.ɵɵpropertyInterpolate("dropLabel",t.ɵɵpipeBind1(13,9,"tb.rulenode.drop-file")),t.ɵɵproperty("existingFileName",n.pubSubConfigForm.get("serviceAccountKeyFileName").value),t.ɵɵadvance(5),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(18,13,t.ɵɵpipeBind1(17,11,"tb.rulenode.message-attributes-hint"),"html"),t.ɵɵsanitizeHtml))},dependencies:t.ɵɵgetComponentDepsFactory(Zo),encapsulation:2})}}function el(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function tl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.host-required")," "))}function nl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-required")," "))}function rl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-range")," "))}function al(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.port-range")," "))}function il(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-connection-timeout-ms-message")," "))}function ol(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-handshake-timeout-ms-message")," "))}e("PubSubConfigComponent",Zo);class ll extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.messageProperties=[null,"BASIC","TEXT_PLAIN","MINIMAL_BASIC","MINIMAL_PERSISTENT_BASIC","PERSISTENT_BASIC","PERSISTENT_TEXT_PLAIN"]}configForm(){return this.rabbitMqConfigForm}onConfigurationSet(e){this.rabbitMqConfigForm=this.fb.group({exchangeNamePattern:[e?e.exchangeNamePattern:null,[]],routingKeyPattern:[e?e.routingKeyPattern:null,[]],messageProperties:[e?e.messageProperties:null,[]],host:[e?e.host:null,[N.required]],port:[e?e.port:null,[N.required,N.min(1),N.max(65535)]],virtualHost:[e?e.virtualHost:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]],automaticRecoveryEnabled:[!!e&&e.automaticRecoveryEnabled,[]],connectionTimeout:[e?e.connectionTimeout:null,[N.min(0)]],handshakeTimeout:[e?e.handshakeTimeout:null,[N.min(0)]],clientProperties:[e?e.clientProperties:null,[]]})}static{this.ɵfac=function(e){return new(e||ll)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ll,selectors:[["tb-external-node-rabbit-mq-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:56,vars:11,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block"],["translate",""],["matInput","","formControlName","exchangeNamePattern"],["matInput","","formControlName","routingKeyPattern"],["formControlName","messageProperties"],[3,"value",4,"ngFor","ngForOf"],[1,"gt-sm:flex","gt-sm:flex-row","gt-sm:gap-2"],[1,"mat-block","gt-sm:max-w-60%","gt-sm:flex-full"],["required","","matInput","","formControlName","host"],[4,"ngIf"],[1,"mat-block","gt-sm:max-w-40%","gt-sm:flex-full"],["required","","type","number","step","1","min","1","max","65535","matInput","","formControlName","port"],["matInput","","formControlName","virtualHost"],["matInput","","formControlName","username"],["type","password","matInput","","formControlName","password"],["matSuffix",""],["formControlName","automaticRecoveryEnabled"],["type","number","step","1","min","0","matInput","","formControlName","connectionTimeout"],["type","number","step","1","min","0","matInput","","formControlName","handshakeTimeout"],["translate","",1,"tb-title"],["required","false","formControlName","clientProperties","keyText","tb.rulenode.key","keyRequiredText","tb.rulenode.key-required","valText","tb.rulenode.value","valRequiredText","tb.rulenode.value-required"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.exchange-name-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-form-field",1)(6,"mat-label",2),t.ɵɵtext(7,"tb.rulenode.routing-key-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",4),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",1)(10,"mat-label",2),t.ɵɵtext(11,"tb.rulenode.message-properties"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-select",5),t.ɵɵtemplate(13,el,2,2,"mat-option",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"div",7)(15,"mat-form-field",8)(16,"mat-label",2),t.ɵɵtext(17,"tb.rulenode.host"),t.ɵɵelementEnd(),t.ɵɵelement(18,"input",9),t.ɵɵtemplate(19,tl,3,3,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"mat-form-field",11)(21,"mat-label",2),t.ɵɵtext(22,"tb.rulenode.port"),t.ɵɵelementEnd(),t.ɵɵelement(23,"input",12),t.ɵɵtemplate(24,nl,3,3,"mat-error",10)(25,rl,3,3,"mat-error",10)(26,al,3,3,"mat-error",10),t.ɵɵelementEnd()(),t.ɵɵelementStart(27,"mat-form-field",1)(28,"mat-label",2),t.ɵɵtext(29,"tb.rulenode.virtual-host"),t.ɵɵelementEnd(),t.ɵɵelement(30,"input",13),t.ɵɵelementEnd(),t.ɵɵelementStart(31,"mat-form-field",1)(32,"mat-label",2),t.ɵɵtext(33,"tb.rulenode.username"),t.ɵɵelementEnd(),t.ɵɵelement(34,"input",14),t.ɵɵelementEnd(),t.ɵɵelementStart(35,"mat-form-field",1)(36,"mat-label",2),t.ɵɵtext(37,"tb.rulenode.password"),t.ɵɵelementEnd(),t.ɵɵelement(38,"input",15)(39,"tb-toggle-password",16),t.ɵɵelementEnd(),t.ɵɵelementStart(40,"mat-checkbox",17),t.ɵɵtext(41),t.ɵɵpipe(42,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(43,"mat-form-field",1)(44,"mat-label",2),t.ɵɵtext(45,"tb.rulenode.connection-timeout-ms"),t.ɵɵelementEnd(),t.ɵɵelement(46,"input",18),t.ɵɵtemplate(47,il,3,3,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(48,"mat-form-field",1)(49,"mat-label",2),t.ɵɵtext(50,"tb.rulenode.handshake-timeout-ms"),t.ɵɵelementEnd(),t.ɵɵelement(51,"input",19),t.ɵɵtemplate(52,ol,3,3,"mat-error",10),t.ɵɵelementEnd(),t.ɵɵelementStart(53,"label",20),t.ɵɵtext(54,"tb.rulenode.client-properties"),t.ɵɵelementEnd(),t.ɵɵelement(55,"tb-kv-map-config-old",21),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.rabbitMqConfigForm),t.ɵɵadvance(13),t.ɵɵproperty("ngForOf",n.messageProperties),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("host").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("port").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("port").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("port").hasError("max")),t.ɵɵadvance(15),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(42,9,"tb.rulenode.automatic-recovery")," "),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("connectionTimeout").hasError("min")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.rabbitMqConfigForm.get("handshakeTimeout").hasError("min")))},dependencies:t.ɵɵgetComponentDepsFactory(ll),encapsulation:2})}}e("RabbitMqConfigComponent",ll);const sl=e=>({max:e});function pl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.endpoint-url-pattern-required")," "))}function ml(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",20),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function dl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-checkbox",21),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.use-simple-client-http-factory")," "))}function ul(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",20),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function cl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-host-required")," "))}function fl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-port-required")," "))}function gl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-port-range")," "))}function hl(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"div",23)(2,"mat-form-field",24)(3,"mat-label",2),t.ɵɵtext(4,"tb.rulenode.proxy-scheme"),t.ɵɵelementEnd(),t.ɵɵelementStart(5,"mat-select",25),t.ɵɵtemplate(6,ul,2,2,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelementStart(7,"mat-form-field",26)(8,"mat-label",2),t.ɵɵtext(9,"tb.rulenode.proxy-host"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",27),t.ɵɵtemplate(11,cl,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",28)(13,"mat-label",2),t.ɵɵtext(14,"tb.rulenode.proxy-port"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",29),t.ɵɵtemplate(16,fl,3,3,"mat-error",4)(17,gl,3,3,"mat-error",4),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"mat-form-field",5)(19,"mat-label",2),t.ɵɵtext(20,"tb.rulenode.proxy-user"),t.ɵɵelementEnd(),t.ɵɵelement(21,"input",30),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"mat-form-field",5)(23,"mat-label",2),t.ɵɵtext(24,"tb.rulenode.proxy-password"),t.ɵɵelementEnd(),t.ɵɵelement(25,"input",31),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",e.proxySchemes),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.restApiCallConfigForm.get("proxyHost").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.restApiCallConfigForm.get("proxyPort").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.restApiCallConfigForm.get("proxyPort").hasError("min")||e.restApiCallConfigForm.get("proxyPort").hasError("max"))}}function yl(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"mat-checkbox",22),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(4,hl,26,4,"div",4),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,2,"tb.rulenode.use-system-proxy-properties")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!e.restApiCallConfigForm.get("useSystemProxyProperties").value)}}function bl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.int-range")," "))}function vl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",1)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.read-timeout"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",32),t.ɵɵelementStart(4,"mat-hint",2),t.ɵɵtext(5,"tb.rulenode.read-timeout-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(6,bl,3,3,"mat-error",4),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(3),t.ɵɵproperty("max",e.IntLimit),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.restApiCallConfigForm.get("readTimeoutMs").hasError("max"))}}function xl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.int-range")," "))}function Cl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind2(2,1,"tb.rulenode.memory-buffer-size-range",t.ɵɵpureFunction1(4,sl,e.MemoryBufferSizeInKbLimit))," ")}}class Sl extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.proxySchemes=["http","https"],this.httpRequestTypes=Object.keys(Dt),this.MemoryBufferSizeInKbLimit=25e3,this.IntLimit=tn}configForm(){return this.restApiCallConfigForm}onConfigurationSet(e){this.restApiCallConfigForm=this.fb.group({restEndpointUrlPattern:[e?e.restEndpointUrlPattern:null,[N.required]],requestMethod:[e?e.requestMethod:null,[N.required]],useSimpleClientHttpFactory:[!!e&&e.useSimpleClientHttpFactory,[]],parseToPlainText:[!!e&&e.parseToPlainText,[]],ignoreRequestBody:[!!e&&e.ignoreRequestBody,[]],enableProxy:[!!e&&e.enableProxy,[]],useSystemProxyProperties:[!!e&&e.enableProxy,[]],proxyScheme:[e?e.proxyHost:null,[]],proxyHost:[e?e.proxyHost:null,[]],proxyPort:[e?e.proxyPort:null,[]],proxyUser:[e?e.proxyUser:null,[]],proxyPassword:[e?e.proxyPassword:null,[]],readTimeoutMs:[e?e.readTimeoutMs:null,[N.min(0),N.max(tn)]],maxParallelRequestsCount:[e?e.maxParallelRequestsCount:null,[N.min(0),N.max(tn)]],headers:[e?e.headers:null,[]],credentials:[e?e.credentials:null,[]],maxInMemoryBufferSizeInKb:[e?e.maxInMemoryBufferSizeInKb:null,[N.min(1),N.max(this.MemoryBufferSizeInKbLimit)]]})}validatorTriggers(){return["useSimpleClientHttpFactory","enableProxy","useSystemProxyProperties"]}updateValidators(e){const t=this.restApiCallConfigForm.get("useSimpleClientHttpFactory").value,n=this.restApiCallConfigForm.get("enableProxy").value,r=this.restApiCallConfigForm.get("useSystemProxyProperties").value;n&&!r?(this.restApiCallConfigForm.get("proxyHost").setValidators(n?[N.required]:[]),this.restApiCallConfigForm.get("proxyPort").setValidators(n?[N.required,N.min(1),N.max(65535)]:[])):(this.restApiCallConfigForm.get("proxyHost").setValidators([]),this.restApiCallConfigForm.get("proxyPort").setValidators([]),t?this.restApiCallConfigForm.get("readTimeoutMs").setValidators([]):this.restApiCallConfigForm.get("readTimeoutMs").setValidators([N.min(0),N.max(tn)])),this.restApiCallConfigForm.get("readTimeoutMs").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("proxyHost").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("proxyPort").updateValueAndValidity({emitEvent:e}),this.restApiCallConfigForm.get("credentials").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||Sl)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Sl,selectors:[["tb-external-node-rest-api-call-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:48,vars:26,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","restEndpointUrlPattern"],[4,"ngIf"],[1,"mat-block"],["formControlName","requestMethod"],[3,"value",4,"ngFor","ngForOf"],["formControlName","enableProxy"],["formControlName","useSimpleClientHttpFactory",4,"ngIf"],["formControlName","parseToPlainText"],["translate","",1,"tb-hint",2,"padding-bottom","5px"],["formControlName","ignoreRequestBody"],["class","mat-block","subscriptSizing","dynamic",4,"ngIf"],["type","text","min","0","inputmode","numeric","pattern","[0-9]*","matInput","","formControlName","maxParallelRequestsCount",3,"max"],["type","text","min","1","inputmode","numeric","pattern","[0-9]*","matInput","","formControlName","maxInMemoryBufferSizeInKb",3,"max"],["translate","",1,"tb-title"],[1,"tb-hint",3,"innerHTML"],["required","false","formControlName","headers","keyText","tb.rulenode.header","keyRequiredText","tb.rulenode.header-required","valText","tb.rulenode.value","valRequiredText","tb.rulenode.value-required"],["formControlName","credentials",3,"disableCertPemCredentials"],[3,"value"],["formControlName","useSimpleClientHttpFactory"],["formControlName","useSystemProxyProperties"],[1,"gt-sm:flex","gt-sm:flex-row","gt-sm:gap-2"],[1,"mat-block","gt-sm:max-w-10%","gt-sm:flex-full"],["formControlName","proxyScheme"],[1,"md-block","gt-sm:max-w-50%","gt-sm:flex-full"],["matInput","","required","","formControlName","proxyHost"],[1,"mat-block","gt-sm:max-w-40%","gt-sm:flex-full"],["matInput","","required","","formControlName","proxyPort","type","number","step","1"],["matInput","","formControlName","proxyUser"],["matInput","","formControlName","proxyPassword"],["type","text","min","0","inputmode","numeric","pattern","[0-9]*","matInput","","formControlName","readTimeoutMs",3,"max"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.endpoint-url-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,pl,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-form-field",5)(9,"mat-label",2),t.ɵɵtext(10,"tb.rulenode.request-method"),t.ɵɵelementEnd(),t.ɵɵelementStart(11,"mat-select",6),t.ɵɵtemplate(12,ml,2,2,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelementStart(13,"mat-checkbox",8),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(16,dl,3,3,"mat-checkbox",9),t.ɵɵelementStart(17,"mat-checkbox",10),t.ɵɵtext(18),t.ɵɵpipe(19,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(20,"div",11),t.ɵɵtext(21,"tb.rulenode.parse-to-plain-text-hint"),t.ɵɵelementEnd(),t.ɵɵelementStart(22,"mat-checkbox",12),t.ɵɵtext(23),t.ɵɵpipe(24,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(25,yl,5,4,"div",4)(26,vl,7,2,"mat-form-field",13),t.ɵɵelementStart(27,"mat-form-field",1)(28,"mat-label",2),t.ɵɵtext(29,"tb.rulenode.max-parallel-requests-count"),t.ɵɵelementEnd(),t.ɵɵelement(30,"input",14),t.ɵɵelementStart(31,"mat-hint",2),t.ɵɵtext(32,"tb.rulenode.max-parallel-requests-count-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(33,xl,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(34,"mat-form-field",1)(35,"mat-label",2),t.ɵɵtext(36,"tb.rulenode.max-response-size"),t.ɵɵelementEnd(),t.ɵɵelement(37,"input",15),t.ɵɵelementStart(38,"mat-hint",2),t.ɵɵtext(39,"tb.rulenode.max-response-size-hint"),t.ɵɵelementEnd(),t.ɵɵtemplate(40,Cl,3,6,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(41,"label",16),t.ɵɵtext(42,"tb.rulenode.headers"),t.ɵɵelementEnd(),t.ɵɵelement(43,"div",17),t.ɵɵpipe(44,"translate"),t.ɵɵpipe(45,"safe"),t.ɵɵelement(46,"tb-kv-map-config-old",18)(47,"tb-credentials-config",19),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.restApiCallConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.restApiCallConfigForm.get("restEndpointUrlPattern").hasError("required")),t.ɵɵadvance(7),t.ɵɵproperty("ngForOf",n.httpRequestTypes),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,15,"tb.rulenode.enable-proxy")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!n.restApiCallConfigForm.get("enableProxy").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(19,17,"tb.rulenode.parse-to-plain-text")," "),t.ɵɵadvance(5),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(24,19,"tb.rulenode.ignore-request-body")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.restApiCallConfigForm.get("enableProxy").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",!n.restApiCallConfigForm.get("useSimpleClientHttpFactory").value||n.restApiCallConfigForm.get("enableProxy").value),t.ɵɵadvance(4),t.ɵɵproperty("max",n.IntLimit),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.restApiCallConfigForm.get("maxParallelRequestsCount").hasError("max")),t.ɵɵadvance(4),t.ɵɵproperty("max",n.MemoryBufferSizeInKbLimit),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.restApiCallConfigForm.get("maxInMemoryBufferSizeInKb").hasError("min")||n.restApiCallConfigForm.get("maxInMemoryBufferSizeInKb").hasError("max")),t.ɵɵadvance(3),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(45,23,t.ɵɵpipeBind1(44,21,"tb.rulenode.headers-hint"),"html"),t.ɵɵsanitizeHtml),t.ɵɵadvance(4),t.ɵɵproperty("disableCertPemCredentials",n.restApiCallConfigForm.get("useSimpleClientHttpFactory").value))},dependencies:t.ɵɵgetComponentDepsFactory(Sl),encapsulation:2})}}function Tl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.toUpperCase()," ")}}function Il(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.smtp-host-required")," "))}function El(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.smtp-port-required")," "))}function Fl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.smtp-port-range")," "))}function ql(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.smtp-port-range")," "))}function Al(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.timeout-required")," "))}function kl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-timeout-msec-message")," "))}function Nl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",22),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e," ")}}function wl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",4)(1,"mat-label",5),t.ɵɵtext(2,"tb.rulenode.tls-version"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"mat-select",23),t.ɵɵtemplate(4,Nl,2,2,"mat-option",7),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(4),t.ɵɵproperty("ngForOf",e.tlsVersions)}}function Ml(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-host-required")," "))}function Bl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-port-required")," "))}function Vl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.proxy-port-range")," "))}function Ol(e,n){if(1&e&&(t.ɵɵelementStart(0,"div")(1,"div",8)(2,"mat-form-field",9)(3,"mat-label",5),t.ɵɵtext(4,"tb.rulenode.proxy-host"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",24),t.ɵɵtemplate(6,Ml,3,3,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(7,"mat-form-field",12)(8,"mat-label",5),t.ɵɵtext(9,"tb.rulenode.proxy-port"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",25),t.ɵɵtemplate(11,Bl,3,3,"mat-error",11)(12,Vl,3,3,"mat-error",11),t.ɵɵelementEnd()(),t.ɵɵelementStart(13,"mat-form-field",4)(14,"mat-label",5),t.ɵɵtext(15,"tb.rulenode.proxy-user"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",26),t.ɵɵelementEnd(),t.ɵɵelementStart(17,"mat-form-field",4)(18,"mat-label",5),t.ɵɵtext(19,"tb.rulenode.proxy-password"),t.ɵɵelementEnd(),t.ɵɵelement(20,"input",27),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext(2);t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("proxyHost").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("proxyPort").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("proxyPort").hasError("min")||e.sendEmailConfigForm.get("proxyPort").hasError("max"))}}function Dl(e,n){if(1&e&&(t.ɵɵelementStart(0,"section",3)(1,"mat-form-field",4)(2,"mat-label",5),t.ɵɵtext(3,"tb.rulenode.smtp-protocol"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-select",6),t.ɵɵtemplate(5,Tl,2,2,"mat-option",7),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"div",8)(7,"mat-form-field",9)(8,"mat-label",5),t.ɵɵtext(9,"tb.rulenode.smtp-host"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",10),t.ɵɵtemplate(11,Il,3,3,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",12)(13,"mat-label",5),t.ɵɵtext(14,"tb.rulenode.smtp-port"),t.ɵɵelementEnd(),t.ɵɵelement(15,"input",13),t.ɵɵtemplate(16,El,3,3,"mat-error",11)(17,Fl,3,3,"mat-error",11)(18,ql,3,3,"mat-error",11),t.ɵɵelementEnd()(),t.ɵɵelementStart(19,"mat-form-field",4)(20,"mat-label",5),t.ɵɵtext(21,"tb.rulenode.timeout-msec"),t.ɵɵelementEnd(),t.ɵɵelement(22,"input",14),t.ɵɵtemplate(23,Al,3,3,"mat-error",11)(24,kl,3,3,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-checkbox",15),t.ɵɵtext(26),t.ɵɵpipe(27,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(28,wl,5,1,"mat-form-field",16),t.ɵɵelementStart(29,"tb-checkbox",17),t.ɵɵtext(30),t.ɵɵpipe(31,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(32,Ol,21,3,"div",11),t.ɵɵelementStart(33,"mat-form-field",18)(34,"mat-label",5),t.ɵɵtext(35,"tb.rulenode.username"),t.ɵɵelementEnd(),t.ɵɵelement(36,"input",19),t.ɵɵpipe(37,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(38,"mat-form-field",18)(39,"mat-label",5),t.ɵɵtext(40,"tb.rulenode.password"),t.ɵɵelementEnd(),t.ɵɵelement(41,"input",20),t.ɵɵpipe(42,"translate"),t.ɵɵelement(43,"tb-toggle-password",21),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",e.smtpProtocols),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("smtpHost").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("smtpPort").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("smtpPort").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("smtpPort").hasError("max")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("timeout").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("timeout").hasError("min")),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(27,13,"tb.rulenode.enable-tls")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!0===e.sendEmailConfigForm.get("enableTls").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(31,15,"tb.rulenode.enable-proxy")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.sendEmailConfigForm.get("enableProxy").value),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(37,17,"tb.rulenode.enter-username")),t.ɵɵadvance(5),t.ɵɵpropertyInterpolate("placeholder",t.ɵɵpipeBind1(42,19,"tb.rulenode.enter-password"))}}e("RestApiCallConfigComponent",Sl);class Ll extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.smtpProtocols=["smtp","smtps"],this.tlsVersions=["TLSv1","TLSv1.1","TLSv1.2","TLSv1.3"]}configForm(){return this.sendEmailConfigForm}onConfigurationSet(e){this.sendEmailConfigForm=this.fb.group({useSystemSmtpSettings:[!!e&&e.useSystemSmtpSettings,[]],smtpProtocol:[e?e.smtpProtocol:null,[]],smtpHost:[e?e.smtpHost:null,[]],smtpPort:[e?e.smtpPort:null,[]],timeout:[e?e.timeout:null,[]],enableTls:[!!e&&e.enableTls,[]],tlsVersion:[e?e.tlsVersion:null,[]],enableProxy:[!!e&&e.enableProxy,[]],proxyHost:[e?e.proxyHost:null,[]],proxyPort:[e?e.proxyPort:null,[]],proxyUser:[e?e.proxyUser:null,[]],proxyPassword:[e?e.proxyPassword:null,[]],username:[e?e.username:null,[]],password:[e?e.password:null,[]]})}validatorTriggers(){return["useSystemSmtpSettings","enableProxy"]}updateValidators(e){const t=this.sendEmailConfigForm.get("useSystemSmtpSettings").value,n=this.sendEmailConfigForm.get("enableProxy").value;t?(this.sendEmailConfigForm.get("smtpProtocol").setValidators([]),this.sendEmailConfigForm.get("smtpHost").setValidators([]),this.sendEmailConfigForm.get("smtpPort").setValidators([]),this.sendEmailConfigForm.get("timeout").setValidators([]),this.sendEmailConfigForm.get("proxyHost").setValidators([]),this.sendEmailConfigForm.get("proxyPort").setValidators([])):(this.sendEmailConfigForm.get("smtpProtocol").setValidators([N.required]),this.sendEmailConfigForm.get("smtpHost").setValidators([N.required]),this.sendEmailConfigForm.get("smtpPort").setValidators([N.required,N.min(1),N.max(65535)]),this.sendEmailConfigForm.get("timeout").setValidators([N.required,N.min(0)]),this.sendEmailConfigForm.get("proxyHost").setValidators(n?[N.required]:[]),this.sendEmailConfigForm.get("proxyPort").setValidators(n?[N.required,N.min(1),N.max(65535)]:[])),this.sendEmailConfigForm.get("smtpProtocol").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpHost").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("smtpPort").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("timeout").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("proxyHost").updateValueAndValidity({emitEvent:e}),this.sendEmailConfigForm.get("proxyPort").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||Ll)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ll,selectors:[["tb-external-node-send-email-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:5,vars:5,consts:[[1,"flex","flex-col",3,"formGroup"],["formControlName","useSystemSmtpSettings"],["class","flex flex-col",4,"ngIf"],[1,"flex","flex-col"],[1,"mat-block"],["translate",""],["formControlName","smtpProtocol"],[3,"value",4,"ngFor","ngForOf"],[1,"gt-sm:flex","gt-sm:flex-row","gt-sm:gap-2"],[1,"mat-block","gt-sm:max-w-60%","gt-sm:flex-full"],["required","","matInput","","formControlName","smtpHost"],[4,"ngIf"],[1,"mat-block","gt-sm:max-w-40%","gt-sm:flex-full"],["required","","type","number","step","1","min","1","max","65535","matInput","","formControlName","smtpPort"],["required","","type","number","step","1","min","0","matInput","","formControlName","timeout"],["formControlName","enableTls"],["class","mat-block",4,"ngIf"],["formControlName","enableProxy"],["floatLabel","always",1,"mat-block"],["matInput","","formControlName","username",3,"placeholder"],["matInput","","type","password","formControlName","password",3,"placeholder"],["matSuffix",""],[3,"value"],["formControlName","tlsVersion"],["matInput","","required","","formControlName","proxyHost"],["matInput","","required","","formControlName","proxyPort","type","number","step","1","min","1","max","65535"],["matInput","","formControlName","proxyUser"],["matInput","","formControlName","proxyPassword"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-checkbox",1),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(4,Dl,44,21,"section",2),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.sendEmailConfigForm),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,3,"tb.rulenode.use-system-smtp-settings")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!1===n.sendEmailConfigForm.get("useSystemSmtpSettings").value))},dependencies:t.ɵɵgetComponentDepsFactory(Ll),encapsulation:2})}}function Pl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.numbers-to-template-required")," "))}function Rl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.sms-message-template-required")," "))}function _l(e,n){1&e&&t.ɵɵelement(0,"tb-sms-provider-configuration",9)}e("SendEmailConfigComponent",Ll);class jl extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.sendSmsConfigForm}onConfigurationSet(e){this.sendSmsConfigForm=this.fb.group({numbersToTemplate:[e?e.numbersToTemplate:null,[N.required]],smsMessageTemplate:[e?e.smsMessageTemplate:null,[N.required]],useSystemSmsSettings:[!!e&&e.useSystemSmsSettings,[]],smsProviderConfiguration:[e?e.smsProviderConfiguration:null,[]]})}validatorTriggers(){return["useSystemSmsSettings"]}updateValidators(e){this.sendSmsConfigForm.get("useSystemSmsSettings").value?this.sendSmsConfigForm.get("smsProviderConfiguration").setValidators([]):this.sendSmsConfigForm.get("smsProviderConfiguration").setValidators([N.required]),this.sendSmsConfigForm.get("smsProviderConfiguration").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||jl)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:jl,selectors:[["tb-external-node-send-sms-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:20,vars:13,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","numbersToTemplate"],[4,"ngIf"],[3,"innerHTML"],["required","","matInput","","formControlName","smsMessageTemplate","rows","6"],["formControlName","useSystemSmsSettings"],["formControlName","smsProviderConfiguration","required","",4,"ngIf"],["formControlName","smsProviderConfiguration","required",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.numbers-to-template"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,Pl,3,3,"mat-error",4),t.ɵɵelement(6,"mat-hint",5),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"safe"),t.ɵɵelementEnd(),t.ɵɵelementStart(9,"mat-form-field",1)(10,"mat-label",2),t.ɵɵtext(11,"tb.rulenode.sms-message-template"),t.ɵɵelementEnd(),t.ɵɵelement(12,"textarea",6),t.ɵɵtemplate(13,Rl,3,3,"mat-error",4),t.ɵɵelementStart(14,"mat-hint",2),t.ɵɵtext(15,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(16,"mat-checkbox",7),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(19,_l,1,0,"tb-sms-provider-configuration",8),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.sendSmsConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.sendSmsConfigForm.get("numbersToTemplate").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(8,8,t.ɵɵpipeBind1(7,6,"tb.rulenode.numbers-to-template-hint"),"html"),t.ɵɵsanitizeHtml),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.sendSmsConfigForm.get("smsMessageTemplate").hasError("required")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(18,11,"tb.rulenode.use-system-sms-settings")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!1===n.sendSmsConfigForm.get("useSystemSmsSettings").value))},dependencies:t.ɵɵgetComponentDepsFactory(jl),encapsulation:2})}}function Gl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.message-template-required")," "))}function Kl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.slack-api-token-required")," "))}function Ul(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",11)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.slack-api-token"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",12),t.ɵɵtemplate(4,Kl,3,3,"mat-error",4),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.slackConfigForm.get("botToken").hasError("required"))}}function Hl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-radio-button",13),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.slackChanelTypesTranslateMap.get(e))," ")}}e("SendSmsConfigComponent",jl);class zl extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.slackChanelTypes=Object.keys(F),this.slackChanelTypesTranslateMap=q}configForm(){return this.slackConfigForm}onConfigurationSet(e){this.slackConfigForm=this.fb.group({botToken:[e?e.botToken:null],useSystemSettings:[!!e&&e.useSystemSettings],messageTemplate:[e?e.messageTemplate:null,[N.required]],conversationType:[e?e.conversationType:null,[N.required]],conversation:[e?e.conversation:null,[N.required]]})}validatorTriggers(){return["useSystemSettings"]}updateValidators(e){this.slackConfigForm.get("useSystemSettings").value?this.slackConfigForm.get("botToken").clearValidators():this.slackConfigForm.get("botToken").setValidators([N.required]),this.slackConfigForm.get("botToken").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||zl)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:zl,selectors:[["tb-external-node-slack-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:18,vars:12,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block","flex-1"],["translate",""],["required","","matInput","","formControlName","messageTemplate"],[4,"ngIf"],["formControlName","useSystemSettings"],["class","mat-block",4,"ngIf"],[1,"tb-title"],["formControlName","conversationType"],[3,"value",4,"ngFor","ngForOf"],["formControlName","conversation","required","",3,"token","slackChanelType"],[1,"mat-block"],["required","","matInput","","formControlName","botToken"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.message-template"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,Gl,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-checkbox",5),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(11,Ul,5,1,"mat-form-field",6),t.ɵɵelementStart(12,"label",7),t.ɵɵtext(13),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"mat-radio-group",8),t.ɵɵtemplate(16,Hl,3,4,"mat-radio-button",9),t.ɵɵelementEnd(),t.ɵɵelement(17,"tb-slack-conversation-autocomplete",10),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.slackConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.slackConfigForm.get("messageTemplate").hasError("required")),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(10,8,"tb.rulenode.use-system-slack-settings")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",!n.slackConfigForm.get("useSystemSettings").value),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(14,10,"notification.slack-chanel-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.slackChanelTypes),t.ɵɵadvance(),t.ɵɵproperty("token",n.slackConfigForm.get("useSystemSettings").value?"":n.slackConfigForm.get("botToken").value)("slackChanelType",n.slackConfigForm.get("conversationType").value))},dependencies:t.ɵɵgetComponentDepsFactory(zl),styles:["[_nghost-%COMP%] .tb-title[_ngcontent-%COMP%]{display:block;padding-bottom:6px}[_nghost-%COMP%] .mat-mdc-radio-group{display:flex;flex-direction:row;margin-bottom:22px;gap:12px}[_nghost-%COMP%] .mat-mdc-radio-group .mat-mdc-radio-button{flex:1 1 100%;padding:4px;border:1px solid rgba(0,0,0,.12);border-radius:6px}@media screen and (max-width: 599px){[_nghost-%COMP%] .mat-mdc-radio-group{flex-direction:column}}"]})}}function $l(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.topic-arn-pattern-required")," "))}function Ql(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-access-key-id-required")," "))}function Jl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-secret-access-key-required")," "))}function Yl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-region-required")," "))}e("SlackConfigComponent",zl);class Wl extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.snsConfigForm}onConfigurationSet(e){this.snsConfigForm=this.fb.group({topicArnPattern:[e?e.topicArnPattern:null,[N.required]],accessKeyId:[e?e.accessKeyId:null,[N.required]],secretAccessKey:[e?e.secretAccessKey:null,[N.required]],region:[e?e.region:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||Wl)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Wl,selectors:[["tb-external-node-sns-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:23,vars:5,consts:[[1,"flex","flex-col",3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["translate",""],["required","","matInput","","formControlName","topicArnPattern"],[4,"ngIf"],[1,"mat-block"],["required","","matInput","","formControlName","accessKeyId"],["required","","matInput","","formControlName","secretAccessKey"],["required","","matInput","","formControlName","region"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.topic-arn-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",3),t.ɵɵtemplate(5,$l,3,3,"mat-error",4),t.ɵɵelementStart(6,"mat-hint",2),t.ɵɵtext(7,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵelementStart(8,"mat-form-field",5)(9,"mat-label",2),t.ɵɵtext(10,"tb.rulenode.aws-access-key-id"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",6),t.ɵɵtemplate(12,Ql,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",5)(14,"mat-label",2),t.ɵɵtext(15,"tb.rulenode.aws-secret-access-key"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",7),t.ɵɵtemplate(17,Jl,3,3,"mat-error",4),t.ɵɵelementEnd(),t.ɵɵelementStart(18,"mat-form-field",5)(19,"mat-label",2),t.ɵɵtext(20,"tb.rulenode.aws-region"),t.ɵɵelementEnd(),t.ɵɵelement(21,"input",8),t.ɵɵtemplate(22,Yl,3,3,"mat-error",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.snsConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.snsConfigForm.get("topicArnPattern").hasError("required")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.snsConfigForm.get("accessKeyId").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.snsConfigForm.get("secretAccessKey").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.snsConfigForm.get("region").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(Wl),encapsulation:2})}}function Xl(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",15),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.sqsQueueTypeTranslationsMap.get(e))," ")}}function Zl(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.queue-url-pattern-required")," "))}function es(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.min-delay-seconds-message")," "))}function ts(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-delay-seconds-message")," "))}function ns(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",1)(1,"mat-label",2),t.ɵɵtext(2,"tb.rulenode.delay-seconds"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",16),t.ɵɵtemplate(4,es,3,3,"mat-error",7)(5,ts,3,3,"mat-error",7),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵproperty("ngIf",e.sqsConfigForm.get("delaySeconds").hasError("min")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.sqsConfigForm.get("delaySeconds").hasError("max"))}}function rs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-access-key-id-required")," "))}function as(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-secret-access-key-required")," "))}function is(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-region-required")," "))}e("SnsConfigComponent",Wl);class os extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.sqsQueueType=Nt,this.sqsQueueTypes=Object.keys(Nt),this.sqsQueueTypeTranslationsMap=wt}configForm(){return this.sqsConfigForm}onConfigurationSet(e){this.sqsConfigForm=this.fb.group({queueType:[e?e.queueType:null,[N.required]],queueUrlPattern:[e?e.queueUrlPattern:null,[N.required]],delaySeconds:[e?e.delaySeconds:null,[N.min(0),N.max(900)]],messageAttributes:[e?e.messageAttributes:null,[]],accessKeyId:[e?e.accessKeyId:null,[N.required]],secretAccessKey:[e?e.secretAccessKey:null,[N.required]],region:[e?e.region:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||os)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:os,selectors:[["tb-external-node-sqs-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:35,vars:13,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"mat-block"],["translate",""],["formControlName","queueType","required",""],[3,"value",4,"ngFor","ngForOf"],["subscriptSizing","dynamic",1,"mat-block"],["required","","matInput","","formControlName","queueUrlPattern"],[4,"ngIf"],["class","mat-block",4,"ngIf"],["translate","",1,"tb-title"],[1,"tb-hint",3,"innerHTML"],["required","false","formControlName","messageAttributes","keyText","tb.rulenode.name","keyRequiredText","tb.rulenode.name-required","valText","tb.rulenode.value","valRequiredText","tb.rulenode.value-required"],["required","","matInput","","formControlName","accessKeyId"],["required","","matInput","","formControlName","secretAccessKey"],["required","","matInput","","formControlName","region"],[3,"value"],["required","","type","number","min","0","max","900","step","1","matInput","","formControlName","delaySeconds"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.queue-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-select",3),t.ɵɵtemplate(5,Xl,3,4,"mat-option",4),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"mat-form-field",5)(7,"mat-label",2),t.ɵɵtext(8,"tb.rulenode.queue-url-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(9,"input",6),t.ɵɵtemplate(10,Zl,3,3,"mat-error",7),t.ɵɵelementStart(11,"mat-hint",2),t.ɵɵtext(12,"tb.rulenode.general-pattern-hint"),t.ɵɵelementEnd()(),t.ɵɵtemplate(13,ns,6,2,"mat-form-field",8),t.ɵɵelementStart(14,"label",9),t.ɵɵtext(15,"tb.rulenode.message-attributes"),t.ɵɵelementEnd(),t.ɵɵelement(16,"div",10),t.ɵɵpipe(17,"translate"),t.ɵɵpipe(18,"safe"),t.ɵɵelement(19,"tb-kv-map-config-old",11),t.ɵɵelementStart(20,"mat-form-field",1)(21,"mat-label",2),t.ɵɵtext(22,"tb.rulenode.aws-access-key-id"),t.ɵɵelementEnd(),t.ɵɵelement(23,"input",12),t.ɵɵtemplate(24,rs,3,3,"mat-error",7),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-form-field",1)(26,"mat-label",2),t.ɵɵtext(27,"tb.rulenode.aws-secret-access-key"),t.ɵɵelementEnd(),t.ɵɵelement(28,"input",13),t.ɵɵtemplate(29,as,3,3,"mat-error",7),t.ɵɵelementEnd(),t.ɵɵelementStart(30,"mat-form-field",1)(31,"mat-label",2),t.ɵɵtext(32,"tb.rulenode.aws-region"),t.ɵɵelementEnd(),t.ɵɵelement(33,"input",14),t.ɵɵtemplate(34,is,3,3,"mat-error",7),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.sqsConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("ngForOf",n.sqsQueueTypes),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.sqsConfigForm.get("queueUrlPattern").hasError("required")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.sqsConfigForm.get("queueType").value===n.sqsQueueType.STANDARD),t.ɵɵadvance(3),t.ɵɵproperty("innerHTML",t.ɵɵpipeBind2(18,10,t.ɵɵpipeBind1(17,8,"tb.rulenode.message-attributes-hint"),"html"),t.ɵɵsanitizeHtml),t.ɵɵadvance(8),t.ɵɵproperty("ngIf",n.sqsConfigForm.get("accessKeyId").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.sqsConfigForm.get("secretAccessKey").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.sqsConfigForm.get("region").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(os),encapsulation:2})}}function ls(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.function-name-required")," "))}function ss(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-access-key-id-required")," "))}function ps(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-secret-access-key-required")," "))}function ms(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.aws-region-required")," "))}function ds(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.connection-timeout-required")," "))}function us(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.connection-timeout-min")," "))}function cs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.request-timeout-required")," "))}function fs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.request-timeout-min")," "))}e("SqsConfigComponent",os);class gs extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.lambdaConfigForm}onConfigurationSet(e){this.lambdaConfigForm=this.fb.group({functionName:[e?e.functionName:null,[N.required]],qualifier:[e?e.qualifier:null,[]],accessKey:[e?e.accessKey:null,[N.required]],secretKey:[e?e.secretKey:null,[N.required]],region:[e?e.region:null,[N.required]],connectionTimeout:[e?e.connectionTimeout:null,[N.required,N.min(0)]],requestTimeout:[e?e.requestTimeout:null,[N.required,N.min(0)]],tellFailureIfFuncThrowsExc:[!!e&&e.tellFailureIfFuncThrowsExc,[]]})}static{this.ɵfac=function(e){return new(e||gs)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:gs,selectors:[["tb-external-node-lambda-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:71,vars:28,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],[1,"tb-form-panel","stroked"],[1,"tb-form-row","no-padding","no-border"],["translate","",1,"tb-form-panel-title","tb-required"],["popupHelpLink","rulenode/node-templatization-doc",3,"hintText"],[1,"tb-standard-fields"],[1,"mat-block"],["required","","matInput","","formControlName","functionName"],[4,"ngIf"],["matInput","","formControlName","qualifier"],["translate",""],["expanded","",1,"tb-settings"],["required","","matInput","","formControlName","accessKey"],["required","","matInput","","formControlName","secretKey"],["required","","matInput","","formControlName","region"],[1,"tb-form-panel","stroked","no-padding"],[1,"tb-settings"],[2,"padding","16px"],[1,"tb-form-panel","no-border","no-padding","no-gap",2,"margin-top","0"],[1,"tb-form-row","no-border","same-padding","tb-standard-fields"],[1,"flex"],["type","number","required","","min","0","matInput","","formControlName","connectionTimeout"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],["type","number","required","","min","0","matInput","","formControlName","requestTimeout"],[1,"tb-form-row","no-border",2,"margin-bottom","16px",3,"tb-hint-tooltip-icon"],["formControlName","tellFailureIfFuncThrowsExc",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2)(3,"div",3),t.ɵɵtext(4,"tb.rulenode.function-configuration"),t.ɵɵelementEnd()(),t.ɵɵelement(5,"tb-example-hint",4),t.ɵɵelementStart(6,"div",5)(7,"mat-form-field",6)(8,"mat-label"),t.ɵɵtext(9),t.ɵɵpipe(10,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(11,"input",7),t.ɵɵtemplate(12,ls,3,3,"mat-error",8),t.ɵɵelementEnd(),t.ɵɵelementStart(13,"mat-form-field",6)(14,"mat-label"),t.ɵɵtext(15),t.ɵɵpipe(16,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(17,"input",9),t.ɵɵelementStart(18,"mat-hint",10),t.ɵɵtext(19,"tb.rulenode.qualifier-hint"),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(20,"div",1)(21,"mat-expansion-panel",11)(22,"mat-expansion-panel-header")(23,"mat-panel-title",3),t.ɵɵtext(24,"tb.rulenode.aws-credentials"),t.ɵɵelementEnd()(),t.ɵɵelementStart(25,"div",5)(26,"mat-form-field",6)(27,"mat-label",10),t.ɵɵtext(28,"tb.rulenode.aws-access-key-id"),t.ɵɵelementEnd(),t.ɵɵelement(29,"input",12),t.ɵɵtemplate(30,ss,3,3,"mat-error",8),t.ɵɵelementEnd(),t.ɵɵelementStart(31,"mat-form-field",6)(32,"mat-label",10),t.ɵɵtext(33,"tb.rulenode.aws-secret-access-key"),t.ɵɵelementEnd(),t.ɵɵelement(34,"input",13),t.ɵɵtemplate(35,ps,3,3,"mat-error",8),t.ɵɵelementEnd(),t.ɵɵelementStart(36,"mat-form-field",6)(37,"mat-label",10),t.ɵɵtext(38,"tb.rulenode.aws-region"),t.ɵɵelementEnd(),t.ɵɵelement(39,"input",14),t.ɵɵtemplate(40,ms,3,3,"mat-error",8),t.ɵɵelementEnd()()()(),t.ɵɵelementStart(41,"div",15)(42,"mat-expansion-panel",16)(43,"mat-expansion-panel-header",17)(44,"mat-panel-title",10),t.ɵɵtext(45,"tb.rulenode.advanced-settings"),t.ɵɵelementEnd()(),t.ɵɵelementStart(46,"div",18)(47,"div",19)(48,"mat-form-field",20)(49,"mat-label",10),t.ɵɵtext(50,"tb.rulenode.connection-timeout"),t.ɵɵelementEnd(),t.ɵɵelement(51,"input",21),t.ɵɵtemplate(52,ds,3,3,"mat-error",8)(53,us,3,3,"mat-error",8),t.ɵɵelementStart(54,"mat-icon",22),t.ɵɵpipe(55,"translate"),t.ɵɵtext(56,"help"),t.ɵɵelementEnd()(),t.ɵɵelementStart(57,"mat-form-field",20)(58,"mat-label",10),t.ɵɵtext(59,"tb.rulenode.request-timeout"),t.ɵɵelementEnd(),t.ɵɵelement(60,"input",23),t.ɵɵtemplate(61,cs,3,3,"mat-error",8)(62,fs,3,3,"mat-error",8),t.ɵɵelementStart(63,"mat-icon",22),t.ɵɵpipe(64,"translate"),t.ɵɵtext(65,"help"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(66,"div",24),t.ɵɵpipe(67,"translate"),t.ɵɵelementStart(68,"mat-slide-toggle",25),t.ɵɵtext(69),t.ɵɵpipe(70,"translate"),t.ɵɵelementEnd()()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.lambdaConfigForm),t.ɵɵadvance(5),t.ɵɵproperty("hintText","tb.rulenode.template-rules-hint"),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(10,16,"tb.rulenode.function-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("functionName").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(16,18,"tb.rulenode.qualifier")),t.ɵɵadvance(15),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("accessKey").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("secretKey").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("region").hasError("required")),t.ɵɵadvance(12),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("connectionTimeout").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("connectionTimeout").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(55,20,"tb.rulenode.connection-timeout-hint")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("requestTimeout").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.lambdaConfigForm.get("requestTimeout").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(64,22,"tb.rulenode.request-timeout-hint")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(67,24,"tb.rulenode.tell-failure-aws-lambda-hint")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(70,26,"tb.rulenode.tell-failure-aws-lambda")," "))},dependencies:t.ɵɵgetComponentDepsFactory(gs),encapsulation:2})}}e("LambdaConfigComponent",gs);class hs{static{this.ɵfac=function(e){return new(e||hs)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:hs})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,Q,xi,Wl,os,gs,Zo,_o,Jo,Yo,ll,Sl,Ll,Ao,jl,zl]})}}e("RulenodeCoreConfigExternalModule",hs),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(hs,{declarations:[Wl,os,gs,Zo,_o,Jo,Yo,ll,Sl,Ll,Ao,jl,zl],imports:[$,S,Q,xi],exports:[Wl,os,gs,Zo,_o,Jo,Yo,ll,Sl,Ll,Ao,jl,zl]});class ys extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.searchText=""}configForm(){return this.alarmStatusConfigForm}prepareInputConfig(e){return{alarmStatusList:P(e?.alarmStatusList)?e.alarmStatusList:null}}onConfigurationSet(e){this.alarmStatusConfigForm=this.fb.group({alarmStatusList:[e.alarmStatusList,[N.required]]})}static{this.ɵfac=function(e){return new(e||ys)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:ys,selectors:[["tb-filter-node-check-alarm-status-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:2,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],[1,"tb-form-row","no-padding","no-border","space-between"],["translate","",1,"tb-form-panel-title","tb-required"],["translate","",1,"tb-form-panel-hint","tb-error",3,"hidden"],["formControlName","alarmStatusList"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.alarm-status"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3),t.ɵɵtext(5," tb.rulenode.alarm-required "),t.ɵɵelementEnd()(),t.ɵɵelement(6,"tb-alarm-status-select",4),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.alarmStatusConfigForm),t.ɵɵadvance(4),t.ɵɵproperty("hidden",n.alarmStatusConfigForm.get("alarmStatusList").valid))},dependencies:t.ɵɵgetComponentDepsFactory(ys),encapsulation:2})}}e("CheckAlarmStatusComponent",ys);const bs=e=>({inputName:e});class vs extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.checkMessageConfigForm}prepareInputConfig(e){return{messageNames:P(e?.messageNames)?e.messageNames:[],metadataNames:P(e?.metadataNames)?e.metadataNames:[],checkAllKeys:!!P(e?.checkAllKeys)&&e.checkAllKeys}}prepareOutputConfig(e){return{messageNames:P(e?.messageNames)?e.messageNames:[],metadataNames:P(e?.metadataNames)?e.metadataNames:[],checkAllKeys:e.checkAllKeys}}atLeastOne(e,t=null){return n=>{t||(t=Object.keys(n.controls));return n?.controls&&t.some((t=>!e(n.controls[t])))?null:{atLeastOne:!0}}}onConfigurationSet(e){this.checkMessageConfigForm=this.fb.group({messageNames:[e.messageNames,[]],metadataNames:[e.metadataNames,[]],checkAllKeys:[e.checkAllKeys,[]]},{validators:this.atLeastOne(N.required,["messageNames","metadataNames"])})}get touchedValidationControl(){return["messageNames","metadataNames"].some((e=>this.checkMessageConfigForm.get(e).touched))}static{this.ɵfac=function(e){return new(e||vs)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:vs,selectors:[["tb-filter-node-check-message-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:25,vars:36,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],[1,"tb-form-row","no-padding","no-border","space-between"],["translate","",1,"tb-form-panel-title","tb-required"],["translate","",1,"tb-form-panel-hint","tb-error",3,"hidden"],["editable","","subscriptSizing","dynamic","formControlName","messageNames",3,"label","placeholder"],["matSuffix","","color","primary","aria-hidden","false","aria-label","help-icon",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],["editable","","subscriptSizing","dynamic","formControlName","metadataNames",3,"label","placeholder"],[1,"tb-form-row","no-border","no-padding",3,"tb-hint-tooltip-icon"],["formControlName","checkAllKeys",1,"mat-slide"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.fields-to-check"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3),t.ɵɵtext(5," tb.rulenode.at-least-one-field-required "),t.ɵɵelementEnd()(),t.ɵɵelementStart(6,"tb-string-items-list",4),t.ɵɵpipe(7,"translate"),t.ɵɵpipe(8,"translate"),t.ɵɵelementStart(9,"mat-icon",5),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵtext(12,"help"),t.ɵɵelementEnd()(),t.ɵɵelementStart(13,"tb-string-items-list",6),t.ɵɵpipe(14,"translate"),t.ɵɵpipe(15,"translate"),t.ɵɵelementStart(16,"mat-icon",5),t.ɵɵpipe(17,"translate"),t.ɵɵpipe(18,"translate"),t.ɵɵtext(19,"help"),t.ɵɵelementEnd()(),t.ɵɵelementStart(20,"div",7),t.ɵɵpipe(21,"translate"),t.ɵɵelementStart(22,"mat-slide-toggle",8),t.ɵɵtext(23),t.ɵɵpipe(24,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.checkMessageConfigForm),t.ɵɵadvance(4),t.ɵɵproperty("hidden",!(n.touchedValidationControl&&n.checkMessageConfigForm.hasError("atLeastOne"))),t.ɵɵadvance(2),t.ɵɵproperty("label",t.ɵɵpipeBind1(7,10,"tb.rulenode.data-keys"))("placeholder",t.ɵɵpipeBind1(8,12,"tb.rulenode.add-message-field")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(11,16,"tb.rulenode.chip-help",t.ɵɵpureFunction1(32,bs,t.ɵɵpipeBind1(10,14,"tb.rulenode.field-name")))),t.ɵɵadvance(4),t.ɵɵproperty("label",t.ɵɵpipeBind1(14,19,"tb.rulenode.metadata-keys"))("placeholder",t.ɵɵpipeBind1(15,21,"tb.rulenode.add-metadata-field")),t.ɵɵadvance(3),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(18,25,"tb.rulenode.chip-help",t.ɵɵpureFunction1(34,bs,t.ɵɵpipeBind1(17,23,"tb.rulenode.field-name")))),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(21,28,"tb.rulenode.check-all-keys-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(24,30,"tb.rulenode.check-all-keys")," "))},dependencies:t.ɵɵgetComponentDepsFactory(vs),encapsulation:2})}}function xs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",10),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"span",11),t.ɵɵtext(4,"tb.rulenode.relations-query-config-direction-suffix"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.entitySearchDirectionTranslationsMap.get(e))," ")}}function Cs(e,n){if(1&e&&t.ɵɵelement(0,"tb-entity-autocomplete",15),2&e){const e=t.ɵɵnextContext(2);t.ɵɵproperty("entityType",e.checkRelationConfigForm.get("entityType").value)}}function Ss(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",12),t.ɵɵelement(1,"tb-entity-type-select",13),t.ɵɵtemplate(2,Cs,1,1,"tb-entity-autocomplete",14),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.checkRelationConfigForm.get("entityType").value)}}e("CheckMessageConfigComponent",vs);class Ts extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.entitySearchDirection=Object.values(d),this.entitySearchDirectionTranslationsMap=b}configForm(){return this.checkRelationConfigForm}prepareInputConfig(e){return{checkForSingleEntity:!!P(e?.checkForSingleEntity)&&e.checkForSingleEntity,direction:P(e?.direction)?e.direction:null,entityType:P(e?.entityType)?e.entityType:null,entityId:P(e?.entityId)?e.entityId:null,relationType:P(e?.relationType)?e.relationType:null}}onConfigurationSet(e){this.checkRelationConfigForm=this.fb.group({checkForSingleEntity:[e.checkForSingleEntity,[]],direction:[e.direction,[]],entityType:[e.entityType,e&&e.checkForSingleEntity?[N.required]:[]],entityId:[e.entityId,e&&e.checkForSingleEntity?[N.required]:[]],relationType:[e.relationType,[N.required]]})}validatorTriggers(){return["checkForSingleEntity"]}updateValidators(e){const t=this.checkRelationConfigForm.get("checkForSingleEntity").value;this.checkRelationConfigForm.get("entityType").setValidators(t?[N.required]:[]),this.checkRelationConfigForm.get("entityType").updateValueAndValidity({emitEvent:e}),this.checkRelationConfigForm.get("entityId").setValidators(t?[N.required]:[]),this.checkRelationConfigForm.get("entityId").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||Ts)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ts,selectors:[["tb-filter-node-check-relation-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:17,vars:12,consts:[[1,"tb-form-panel","stroked","no-padding-bottom",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-col"],["hideRequiredMarker","",1,"mat-block"],["formControlName","direction","required",""],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","relationType"],[1,"tb-form-row","no-border","no-padding","slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","checkForSingleEntity",1,"mat-slide"],["class","same-width-component-row",4,"ngIf"],[3,"value"],["translate",""],[1,"same-width-component-row"],["showLabel","","required","","formControlName","entityType",2,"min-width","100px","flex","1"],["class","flex-1","required","","formControlName","entityId",3,"entityType",4,"ngIf"],["required","","formControlName","entityId",1,"flex-1",3,"entityType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.relation-search-parameters"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2)(4,"mat-form-field",3)(5,"mat-label"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-select",4),t.ɵɵtemplate(9,xs,5,4,"mat-option",5),t.ɵɵelementEnd()(),t.ɵɵelement(10,"tb-relation-type-autocomplete",6),t.ɵɵelementStart(11,"div",7),t.ɵɵpipe(12,"translate"),t.ɵɵelementStart(13,"mat-slide-toggle",8),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(16,Ss,3,1,"div",9),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.checkRelationConfigForm),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,6,"relation.direction")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.entitySearchDirection),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(12,8,"tb.rulenode.check-relation-to-specific-entity-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(15,10,"tb.rulenode.check-relation-to-specific-entity")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.checkRelationConfigForm.get("checkForSingleEntity").value))},dependencies:t.ɵɵgetComponentDepsFactory(Ts),styles:["[_nghost-%COMP%] .slide-toggle[_ngcontent-%COMP%]{margin-bottom:18px}"]})}}e("CheckRelationConfigComponent",Ts);const Is=e=>({perimeterKeyName:e});function Es(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.latitude-field-name-required")," "))}function Fs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.longitude-field-name-required")," "))}function qs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",18),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.perimeterTypeTranslationMap.get(e))," ")}}function As(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.perimeter-key-name-required")," "))}function ks(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",19)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",20),t.ɵɵtemplate(5,As,3,3,"mat-error",6),t.ɵɵelementStart(6,"mat-hint"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"tb.rulenode.perimeter-key-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("perimeterKeyName").hasError("required")),t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,5,"tb.rulenode.perimeter-key-name-hint"))}}function Ns(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.circle-center-latitude-required")," "))}function ws(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.circle-center-longitude-required")," "))}function Ms(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.range-required")," "))}function Bs(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",18),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext(2);t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.rangeUnitTranslationMap.get(e))," ")}}function Vs(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.range-units-required")," "))}function Os(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",9)(1,"div",3)(2,"mat-form-field",21)(3,"mat-label"),t.ɵɵtext(4),t.ɵɵpipe(5,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(6,"input",22),t.ɵɵtemplate(7,Ns,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(8,"mat-form-field",21)(9,"mat-label"),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(12,"input",23),t.ɵɵtemplate(13,ws,3,3,"mat-error",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(14,"div",3)(15,"mat-form-field",21)(16,"mat-label"),t.ɵɵtext(17),t.ɵɵpipe(18,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(19,"input",24),t.ɵɵtemplate(20,Ms,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"mat-form-field",21)(22,"mat-label"),t.ɵɵtext(23),t.ɵɵpipe(24,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(25,"mat-select",25),t.ɵɵtemplate(26,Bs,3,4,"mat-option",12),t.ɵɵelementEnd(),t.ɵɵtemplate(27,Vs,3,3,"mat-error",6),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(5,9,"tb.rulenode.circle-center-latitude")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("centerLatitude").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(11,11,"tb.rulenode.circle-center-longitude")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("centerLongitude").hasError("required")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(18,13,"tb.rulenode.range")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("range").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(24,15,"tb.rulenode.range-units")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",e.rangeUnits),t.ɵɵadvance(),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("rangeUnit").hasError("required"))}}function Ds(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.polygon-definition-required")," "))}function Ls(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-form-field",26)(1,"mat-label"),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"input",27),t.ɵɵelementStart(5,"mat-hint"),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(8,Ds,3,3,"mat-error",6),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(2),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(3,3,"tb.rulenode.polygon-definition")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(7,5,"tb.rulenode.polygon-definition-hint")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",e.geoFilterConfigForm.get("polygonsDefinition").hasError("required"))}}class Ps extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.perimeterType=ft,this.perimeterTypes=Object.values(ft),this.perimeterTypeTranslationMap=gt,this.rangeUnits=Object.values(bt),this.rangeUnitTranslationMap=vt,this.defaultPaddingEnable=!0}configForm(){return this.geoFilterConfigForm}prepareInputConfig(e){return{latitudeKeyName:P(e?.latitudeKeyName)?e.latitudeKeyName:null,longitudeKeyName:P(e?.longitudeKeyName)?e.longitudeKeyName:null,perimeterType:P(e?.perimeterType)?e.perimeterType:null,fetchPerimeterInfoFromMessageMetadata:!!P(e?.fetchPerimeterInfoFromMessageMetadata)&&e.fetchPerimeterInfoFromMessageMetadata,perimeterKeyName:P(e?.perimeterKeyName)?e.perimeterKeyName:null,centerLatitude:P(e?.centerLatitude)?e.centerLatitude:null,centerLongitude:P(e?.centerLongitude)?e.centerLongitude:null,range:P(e?.range)?e.range:null,rangeUnit:P(e?.rangeUnit)?e.rangeUnit:null,polygonsDefinition:P(e?.polygonsDefinition)?e.polygonsDefinition:null}}onConfigurationSet(e){this.geoFilterConfigForm=this.fb.group({latitudeKeyName:[e.latitudeKeyName,[N.required]],longitudeKeyName:[e.longitudeKeyName,[N.required]],perimeterType:[e.perimeterType,[N.required]],fetchPerimeterInfoFromMessageMetadata:[e.fetchPerimeterInfoFromMessageMetadata,[]],perimeterKeyName:[e.perimeterKeyName,[]],centerLatitude:[e.centerLatitude,[]],centerLongitude:[e.centerLongitude,[]],range:[e.range,[]],rangeUnit:[e.rangeUnit,[]],polygonsDefinition:[e.polygonsDefinition,[]]})}validatorTriggers(){return["fetchPerimeterInfoFromMessageMetadata","perimeterType"]}updateValidators(e){const t=this.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value,n=this.geoFilterConfigForm.get("perimeterType").value;t?this.geoFilterConfigForm.get("perimeterKeyName").setValidators([N.required]):this.geoFilterConfigForm.get("perimeterKeyName").setValidators([]),t||n!==ft.CIRCLE?(this.geoFilterConfigForm.get("centerLatitude").setValidators([]),this.geoFilterConfigForm.get("centerLongitude").setValidators([]),this.geoFilterConfigForm.get("range").setValidators([]),this.geoFilterConfigForm.get("rangeUnit").setValidators([]),this.defaultPaddingEnable=!0):(this.geoFilterConfigForm.get("centerLatitude").setValidators([N.required,N.min(-90),N.max(90)]),this.geoFilterConfigForm.get("centerLongitude").setValidators([N.required,N.min(-180),N.max(180)]),this.geoFilterConfigForm.get("range").setValidators([N.required,N.min(0)]),this.geoFilterConfigForm.get("rangeUnit").setValidators([N.required]),this.defaultPaddingEnable=!1),t||n!==ft.POLYGON?this.geoFilterConfigForm.get("polygonsDefinition").setValidators([]):this.geoFilterConfigForm.get("polygonsDefinition").setValidators([N.required]),this.geoFilterConfigForm.get("perimeterKeyName").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("centerLatitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("centerLongitude").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("range").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("rangeUnit").updateValueAndValidity({emitEvent:e}),this.geoFilterConfigForm.get("polygonsDefinition").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||Ps)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ps,selectors:[["tb-filter-node-gps-geofencing-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:39,vars:32,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"flex","flex-row","gap-4"],[1,"mat-block","max-w-50%","flex-full"],["matInput","","formControlName","latitudeKeyName","required",""],[4,"ngIf"],["matInput","","formControlName","longitudeKeyName","required",""],["translate","",1,"tb-form-hint","tb-primary-fill"],[1,"flex","flex-col"],["hideRequiredMarker","",1,"mat-block","flex-1"],["formControlName","perimeterType"],[3,"value",4,"ngFor","ngForOf"],[1,"tb-form-row","no-border","no-padding","slide-toggle",3,"tb-hint-tooltip-icon"],["formControlName","fetchPerimeterInfoFromMessageMetadata",1,"mat-slide"],["class","mat-block",4,"ngIf"],["class","flex flex-col",4,"ngIf"],["class","mat-block","subscriptSizing","dynamic",4,"ngIf"],[3,"value"],[1,"mat-block"],["matInput","","formControlName","perimeterKeyName","required",""],[1,"flex-1"],["type","number","min","-90","max","90","step","0.1","matInput","","formControlName","centerLatitude","required",""],["type","number","min","-180","max","180","step","0.1","matInput","","formControlName","centerLongitude","required",""],["type","number","min","0","step","0.1","matInput","","formControlName","range","required",""],["formControlName","rangeUnit","required",""],["subscriptSizing","dynamic",1,"mat-block"],["matInput","","formControlName","polygonsDefinition","required",""]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"section",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.coordinate-field-names"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"section")(5,"div",3)(6,"mat-form-field",4)(7,"mat-label"),t.ɵɵtext(8),t.ɵɵpipe(9,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(10,"input",5),t.ɵɵtemplate(11,Es,3,3,"mat-error",6),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-form-field",4)(13,"mat-label"),t.ɵɵtext(14),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(16,"input",7),t.ɵɵtemplate(17,Fs,3,3,"mat-error",6),t.ɵɵelementEnd()(),t.ɵɵelementStart(18,"div",8),t.ɵɵtext(19,"tb.rulenode.coordinate-field-hint"),t.ɵɵelementEnd()()(),t.ɵɵelementStart(20,"section",1)(21,"div",2),t.ɵɵtext(22,"tb.rulenode.geofence-configuration"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"section",9)(24,"mat-form-field",10)(25,"mat-label"),t.ɵɵtext(26),t.ɵɵpipe(27,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(28,"mat-select",11),t.ɵɵtemplate(29,qs,3,4,"mat-option",12),t.ɵɵelementEnd()(),t.ɵɵelementStart(30,"div",13),t.ɵɵpipe(31,"translate"),t.ɵɵpipe(32,"translate"),t.ɵɵelementStart(33,"mat-slide-toggle",14),t.ɵɵtext(34),t.ɵɵpipe(35,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(36,ks,9,7,"mat-form-field",15)(37,Os,28,17,"div",16)(38,Ls,9,7,"mat-form-field",17),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.geoFilterConfigForm),t.ɵɵadvance(8),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(9,14,"tb.rulenode.latitude-field-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.geoFilterConfigForm.get("latitudeKeyName").hasError("required")),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(15,16,"tb.rulenode.longitude-field-name")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.geoFilterConfigForm.get("longitudeKeyName").hasError("required")),t.ɵɵadvance(3),t.ɵɵclassProp("no-padding-bottom",!n.defaultPaddingEnable),t.ɵɵadvance(6),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(27,18,"tb.rulenode.perimeter-type")),t.ɵɵadvance(3),t.ɵɵproperty("ngForOf",n.perimeterTypes),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",n.geoFilterConfigForm.get("perimeterType").value===n.perimeterType.CIRCLE?t.ɵɵpipeBind2(31,20,"tb.rulenode.fetch-circle-parameter-info-from-metadata-hint",t.ɵɵpureFunction1(28,Is,n.geoFilterConfigForm.get("perimeterKeyName").valid?n.geoFilterConfigForm.get("perimeterKeyName").value:"ss_perimeter")):t.ɵɵpipeBind2(32,23,"tb.rulenode.fetch-poligon-parameter-info-from-metadata-hint",t.ɵɵpureFunction1(30,Is,n.geoFilterConfigForm.get("perimeterKeyName").valid?n.geoFilterConfigForm.get("perimeterKeyName").value:"ss_perimeter"))),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(35,26,"tb.rulenode.fetch-perimeter-info-from-metadata")," "),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.geoFilterConfigForm.get("perimeterType").value===n.perimeterType.CIRCLE&&!n.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.geoFilterConfigForm.get("perimeterType").value===n.perimeterType.POLYGON&&!n.geoFilterConfigForm.get("fetchPerimeterInfoFromMessageMetadata").value))},dependencies:t.ɵɵgetComponentDepsFactory(Ps),styles:["[_nghost-%COMP%] .slide-toggle[_ngcontent-%COMP%]{margin-bottom:18px}"]})}}e("GpsGeoFilterConfigComponent",Ps);class Rs extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.messageTypeConfigForm}prepareInputConfig(e){return{messageTypes:P(e?.messageTypes)?e.messageTypes:null}}onConfigurationSet(e){this.messageTypeConfigForm=this.fb.group({messageTypes:[e.messageTypes,[N.required]]})}static{this.ɵfac=function(e){return new(e||Rs)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Rs,selectors:[["tb-filter-node-message-type-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:3,vars:4,consts:[[3,"formGroup"],["required","","formControlName","messageTypes",3,"label"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-message-types-config",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.messageTypeConfigForm),t.ɵɵadvance(),t.ɵɵproperty("label",t.ɵɵpipeBind1(2,2,"tb.rulenode.select-message-types")))},dependencies:t.ɵɵgetComponentDepsFactory(Rs),encapsulation:2})}}e("MessageTypeConfigComponent",Rs);const _s=e=>({inputName:e});class js extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.allowedEntityTypes=[u.DEVICE,u.ASSET,u.ENTITY_VIEW,u.TENANT,u.CUSTOMER,u.USER,u.DASHBOARD,u.RULE_CHAIN,u.RULE_NODE,u.EDGE]}configForm(){return this.originatorTypeConfigForm}prepareInputConfig(e){return{originatorTypes:P(e?.originatorTypes)?e.originatorTypes:null}}onConfigurationSet(e){this.originatorTypeConfigForm=this.fb.group({originatorTypes:[e.originatorTypes,[N.required]]})}static{this.ɵfac=function(e){return new(e||js)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:js,selectors:[["tb-filter-node-originator-type-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:9,vars:20,consts:[[3,"formGroup"],["formControlName","originatorTypes","required","",1,"flex-1",3,"allowedEntityTypes","ignoreAuthorityFilter","emptyInputPlaceholder","filledInputPlaceholder","label"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"tb-entity-type-list",1),t.ɵɵpipe(2,"translate"),t.ɵɵpipe(3,"translate"),t.ɵɵpipe(4,"translate"),t.ɵɵelementStart(5,"mat-icon",2),t.ɵɵpipe(6,"translate"),t.ɵɵpipe(7,"translate"),t.ɵɵtext(8,"help"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.originatorTypeConfigForm),t.ɵɵadvance(),t.ɵɵproperty("allowedEntityTypes",n.allowedEntityTypes)("ignoreAuthorityFilter",!0)("emptyInputPlaceholder",t.ɵɵpipeBind1(2,7,"tb.rulenode.add-entity-type"))("filledInputPlaceholder",t.ɵɵpipeBind1(3,9,"tb.rulenode.add-entity-type"))("label",t.ɵɵpipeBind1(4,11,"tb.rulenode.select-entity-types")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind2(7,15,"tb.rulenode.chip-help",t.ɵɵpureFunction1(18,_s,t.ɵɵpipeBind1(6,13,"tb.rulenode.entity-type")))))},dependencies:t.ɵɵgetComponentDepsFactory(js),encapsulation:2})}}e("OriginatorTypeConfigComponent",js);const Gs=["jsFuncComponent"],Ks=["tbelFuncComponent"],Us=()=>["msg","metadata","msgType"];function Hs(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",7)}function zs(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",8,0)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,Us)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function $s(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",11,1)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,Us))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}class Qs extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-filter-function"}configForm(){return this.scriptConfigForm}onConfigurationSet(e){this.scriptConfigForm=this.fb.group({scriptLang:[e.scriptLang,[N.required]],jsScript:[e.jsScript,[]],tbelScript:[e.tbelScript,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.scriptConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.scriptConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.scriptConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.scriptConfigForm.get("jsScript").setValidators(t===s.JS?[N.required]:[]),this.scriptConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.scriptConfigForm.get("tbelScript").setValidators(t===s.TBEL?[N.required]:[]),this.scriptConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),{scriptLang:P(e?.scriptLang)?e.scriptLang:s.JS,jsScript:P(e?.jsScript)?e.jsScript:null,tbelScript:P(e?.tbelScript)?e.tbelScript:null}}testScript(e){const t=this.scriptConfigForm.get("scriptLang").value,n=t===s.JS?"jsScript":"tbelScript",r=t===s.JS?"rulenode/filter_node_script_fn":"rulenode/tbel/filter_node_script_fn",a=this.scriptConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"filter",this.translate.instant("tb.rulenode.filter"),"Filter",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.scriptConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.scriptConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||Qs)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Qs,selectors:[["tb-filter-node-script-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(Gs,5),t.ɵɵviewQuery(Ks,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:7,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[3,"formGroup"],["formControlName","scriptLang",4,"ngIf"],["formControlName","jsScript","functionName","Filter","helpId","rulenode/filter_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","tbelScript","functionName","Filter","helpId","rulenode/tbel/filter_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","scriptLang"],["formControlName","jsScript","functionName","Filter","helpId","rulenode/filter_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","tbelScript","functionName","Filter","helpId","rulenode/tbel/filter_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2),t.ɵɵtemplate(1,Hs,1,0,"tb-script-lang",3)(2,zs,6,5,"tb-js-func",4)(3,$s,6,7,"tb-js-func",5),t.ɵɵelementStart(4,"button",6),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.scriptConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.scriptConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.scriptConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,5,n.testScriptLabel)," "))},dependencies:t.ɵɵgetComponentDepsFactory(Qs),encapsulation:2})}}e("ScriptConfigComponent",Qs);const Js=["jsFuncComponent"],Ys=["tbelFuncComponent"],Ws=()=>["msg","metadata","msgType"];function Xs(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",7)}function Zs(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",8,0)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,Ws)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function ep(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",11,1)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,Ws))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}class tp extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-switch-function"}configForm(){return this.switchConfigForm}onConfigurationSet(e){this.switchConfigForm=this.fb.group({scriptLang:[e.scriptLang,[N.required]],jsScript:[e.jsScript,[]],tbelScript:[e.tbelScript,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.switchConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.switchConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.switchConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.switchConfigForm.get("jsScript").setValidators(t===s.JS?[N.required]:[]),this.switchConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.switchConfigForm.get("tbelScript").setValidators(t===s.TBEL?[N.required]:[]),this.switchConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),{scriptLang:P(e?.scriptLang)?e.scriptLang:s.JS,jsScript:P(e?.jsScript)?e.jsScript:null,tbelScript:P(e?.tbelScript)?e.tbelScript:null}}testScript(e){const t=this.switchConfigForm.get("scriptLang").value,n=t===s.JS?"jsScript":"tbelScript",r=t===s.JS?"rulenode/switch_node_script_fn":"rulenode/tbel/switch_node_script_fn",a=this.switchConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"switch",this.translate.instant("tb.rulenode.switch"),"Switch",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.switchConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.switchConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||tp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:tp,selectors:[["tb-filter-node-switch-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(Js,5),t.ɵɵviewQuery(Ys,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:7,vars:7,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[3,"formGroup"],["formControlName","scriptLang",4,"ngIf"],["formControlName","jsScript","functionName","Switch","helpId","rulenode/switch_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","tbelScript","functionName","Switch","helpId","rulenode/tbel/switch_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","scriptLang"],["formControlName","jsScript","functionName","Switch","helpId","rulenode/switch_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","tbelScript","functionName","Switch","helpId","rulenode/tbel/switch_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2),t.ɵɵtemplate(1,Xs,1,0,"tb-script-lang",3)(2,Zs,6,5,"tb-js-func",4)(3,ep,6,7,"tb-js-func",5),t.ɵɵelementStart(4,"button",6),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.switchConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.switchConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.switchConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,5,n.testScriptLabel)," "))},dependencies:t.ɵɵgetComponentDepsFactory(tp),encapsulation:2})}}e("SwitchConfigComponent",tp);class np{static{this.ɵfac=function(e){return new(e||np)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:np})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,xi,vs,Ts,Ps,Rs,js,Qs,tp,ys]})}}function rp(e,n){if(1&e&&(t.ɵɵelementStart(0,"span"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,e.originatorSourceTranslationMap.get(e.changeOriginatorConfigForm.get("originatorSource").value))," ")}}function ap(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",8)(1,"span",9),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"br"),t.ɵɵelementStart(5,"small",10),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,3,r.originatorSourceTranslationMap.get(e))," "),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,5,r.originatorSourceDescTranslationMap.get(e))," ")}}function ip(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.entity-name-pattern-required")," "))}function op(e,n){if(1&e&&(t.ɵɵelementStart(0,"div",11),t.ɵɵelement(1,"tb-example-hint",12),t.ɵɵelementStart(2,"div",13),t.ɵɵelement(3,"tb-entity-type-select",14),t.ɵɵelementStart(4,"mat-form-field",15)(5,"mat-label",2),t.ɵɵtext(6,"tb.rulenode.entity-name-pattern"),t.ɵɵelementEnd(),t.ɵɵelement(7,"input",16),t.ɵɵtemplate(8,ip,3,3,"mat-error",4),t.ɵɵelementEnd()()()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵproperty("hintText","tb.rulenode.entity-name-pattern-hint"),t.ɵɵadvance(2),t.ɵɵproperty("allowedEntityTypes",e.allowedEntityTypes),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",e.changeOriginatorConfigForm.get("entityNamePattern").hasError("required")||e.changeOriginatorConfigForm.get("entityNamePattern").hasError("pattern"))}}function lp(e,n){1&e&&t.ɵɵelement(0,"tb-relations-query-config",17)}e("RuleNodeCoreConfigFilterModule",np),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(np,{declarations:[vs,Ts,Ps,Rs,js,Qs,tp,ys],imports:[$,S,xi],exports:[vs,Ts,Ps,Rs,js,Qs,tp,ys]});class sp extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.originatorSource=pt,this.originatorSources=Object.keys(pt),this.originatorSourceTranslationMap=mt,this.originatorSourceDescTranslationMap=dt,this.allowedEntityTypes=[u.DEVICE,u.ASSET,u.ENTITY_VIEW,u.USER,u.EDGE]}configForm(){return this.changeOriginatorConfigForm}onConfigurationSet(e){this.changeOriginatorConfigForm=this.fb.group({originatorSource:[e?e.originatorSource:null,[N.required]],entityType:[e?e.entityType:null,[]],entityNamePattern:[e?e.entityNamePattern:null,[]],relationsQuery:[e?e.relationsQuery:null,[]]})}validatorTriggers(){return["originatorSource"]}updateValidators(e){const t=this.changeOriginatorConfigForm.get("originatorSource").value;t===pt.RELATED?this.changeOriginatorConfigForm.get("relationsQuery").setValidators([N.required]):this.changeOriginatorConfigForm.get("relationsQuery").setValidators([]),t===pt.ENTITY?(this.changeOriginatorConfigForm.get("entityType").setValidators([N.required]),this.changeOriginatorConfigForm.get("entityNamePattern").setValidators([N.required,N.pattern(/.*\S.*/)])):(this.changeOriginatorConfigForm.get("entityType").patchValue(null,{emitEvent:e}),this.changeOriginatorConfigForm.get("entityNamePattern").patchValue(null,{emitEvent:e}),this.changeOriginatorConfigForm.get("entityType").setValidators([]),this.changeOriginatorConfigForm.get("entityNamePattern").setValidators([])),this.changeOriginatorConfigForm.get("relationsQuery").updateValueAndValidity({emitEvent:e}),this.changeOriginatorConfigForm.get("entityType").updateValueAndValidity({emitEvent:e}),this.changeOriginatorConfigForm.get("entityNamePattern").updateValueAndValidity({emitEvent:e})}static{this.ɵfac=function(e){return new(e||sp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:sp,selectors:[["tb-transformation-node-change-originator-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:10,vars:5,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],["subscriptSizing","dynamic","hideRequiredMarker","",1,"mat-block"],["translate",""],["formControlName","originatorSource","required",""],[4,"ngIf"],[3,"value",4,"ngFor","ngForOf"],["class","tb-form-panel stroked no-padding-bottom",4,"ngIf"],["required","","formControlName","relationsQuery",4,"ngIf"],[3,"value"],["matListItemTitle",""],["matListItemMeta","",2,"color","inherit"],[1,"tb-form-panel","stroked","no-padding-bottom"],["popupHelpLink","rulenode/change_originator_node_fields_templatization",3,"hintText"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],["showLabel","","required","","formControlName","entityType",1,"mat-mdc-form-field","flex",3,"allowedEntityTypes"],[1,"flex"],["required","","matInput","","formControlName","entityNamePattern"],["required","","formControlName","relationsQuery"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label",2),t.ɵɵtext(3,"tb.rulenode.new-originator"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"mat-select",3)(5,"mat-select-trigger"),t.ɵɵtemplate(6,rp,3,3,"span",4),t.ɵɵelementEnd(),t.ɵɵtemplate(7,ap,8,7,"mat-option",5),t.ɵɵelementEnd()(),t.ɵɵtemplate(8,op,9,3,"div",6)(9,lp,1,0,"tb-relations-query-config",7),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.changeOriginatorConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.originatorSourceTranslationMap.get(n.changeOriginatorConfigForm.get("originatorSource").value)),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.originatorSources),t.ɵɵadvance(),t.ɵɵproperty("ngIf","ENTITY"===n.changeOriginatorConfigForm.get("originatorSource").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.changeOriginatorConfigForm.get("originatorSource").value===n.originatorSource.RELATED))},dependencies:t.ɵɵgetComponentDepsFactory(sp),encapsulation:2})}}e("ChangeOriginatorConfigComponent",sp);const pp=["jsFuncComponent"],mp=["tbelFuncComponent"],dp=()=>["msg","metadata","msgType"];function up(e,n){1&e&&t.ɵɵelement(0,"tb-script-lang",7)}function cp(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",8,0)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(4,dp)),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,2,e.testScriptLabel))}}function fp(e,n){if(1&e){const e=t.ɵɵgetCurrentView();t.ɵɵelementStart(0,"tb-js-func",11,1)(2,"button",9),t.ɵɵpipe(3,"translate"),t.ɵɵlistener("click",(function(){t.ɵɵrestoreView(e);const n=t.ɵɵnextContext();return t.ɵɵresetView(n.testScript())})),t.ɵɵelementStart(4,"mat-icon",10),t.ɵɵtext(5,"bug_report"),t.ɵɵelementEnd()()()}if(2&e){const e=t.ɵɵnextContext();t.ɵɵproperty("functionArgs",t.ɵɵpureFunction0(6,dp))("disableUndefinedCheck",!0)("scriptLanguage",e.scriptLanguage.TBEL),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(3,4,e.testScriptLabel))}}class gp extends i{constructor(e,t,r,a){super(e),this.store=e,this.fb=t,this.nodeScriptTestService=r,this.translate=a,this.tbelEnabled=D(this.store).tbelEnabled,this.scriptLanguage=s,this.changeScript=new n,this.hasScript=!0,this.testScriptLabel="tb.rulenode.test-transformer-function"}configForm(){return this.scriptConfigForm}onConfigurationSet(e){this.scriptConfigForm=this.fb.group({scriptLang:[e?e.scriptLang:s.JS,[N.required]],jsScript:[e?e.jsScript:null,[N.required]],tbelScript:[e?e.tbelScript:null,[]]})}validatorTriggers(){return["scriptLang"]}updateValidators(e){let t=this.scriptConfigForm.get("scriptLang").value;t!==s.TBEL||this.tbelEnabled||(t=s.JS,this.scriptConfigForm.get("scriptLang").patchValue(t,{emitEvent:!1}),setTimeout((()=>{this.scriptConfigForm.updateValueAndValidity({emitEvent:!0})}))),this.scriptConfigForm.get("jsScript").setValidators(t===s.JS?[N.required]:[]),this.scriptConfigForm.get("jsScript").updateValueAndValidity({emitEvent:e}),this.scriptConfigForm.get("tbelScript").setValidators(t===s.TBEL?[N.required]:[]),this.scriptConfigForm.get("tbelScript").updateValueAndValidity({emitEvent:e})}prepareInputConfig(e){return e&&(e.scriptLang||(e.scriptLang=s.JS)),e}testScript(e){const t=this.scriptConfigForm.get("scriptLang").value,n=t===s.JS?"jsScript":"tbelScript",r=t===s.JS?"rulenode/transformation_node_script_fn":"rulenode/tbel/transformation_node_script_fn",a=this.scriptConfigForm.get(n).value;this.nodeScriptTestService.testNodeScript(a,"update",this.translate.instant("tb.rulenode.transformer"),"Transform",["msg","metadata","msgType"],this.ruleNodeId,r,t,e).subscribe((e=>{e&&(this.scriptConfigForm.get(n).setValue(e),this.changeScript.emit())}))}onValidate(){this.scriptConfigForm.get("scriptLang").value===s.JS&&this.jsFuncComponent.validateOnSubmit()}static{this.ɵfac=function(e){return new(e||gp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(L.NodeScriptTestService),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:gp,selectors:[["tb-transformation-node-script-config"]],viewQuery:function(e,n){if(1&e&&(t.ɵɵviewQuery(pp,5),t.ɵɵviewQuery(mp,5)),2&e){let e;t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.jsFuncComponent=e.first),t.ɵɵqueryRefresh(e=t.ɵɵloadQuery())&&(n.tbelFuncComponent=e.first)}},features:[t.ɵɵInheritDefinitionFeature],decls:8,vars:7,consts:[["jsFuncComponent",""],["tbelFuncComponent",""],[3,"formGroup"],["formControlName","scriptLang",4,"ngIf"],["formControlName","jsScript","functionName","Transform","helpId","rulenode/transformation_node_script_fn","noValidate","true",3,"functionArgs",4,"ngIf"],["formControlName","tbelScript","functionName","Transform","helpId","rulenode/tbel/transformation_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage",4,"ngIf"],["mat-button","","mat-raised-button","","color","primary",3,"click"],["formControlName","scriptLang"],["formControlName","jsScript","functionName","Transform","helpId","rulenode/transformation_node_script_fn","noValidate","true",3,"functionArgs"],["toolbarSuffixButton","","mat-icon-button","","matTooltipPosition","above",1,"tb-mat-32",3,"click","matTooltip"],["color","primary",1,"material-icons"],["formControlName","tbelScript","functionName","Transform","helpId","rulenode/tbel/transformation_node_script_fn","noValidate","true",3,"functionArgs","disableUndefinedCheck","scriptLanguage"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",2),t.ɵɵtemplate(1,up,1,0,"tb-script-lang",3)(2,cp,6,5,"tb-js-func",4)(3,fp,6,7,"tb-js-func",5),t.ɵɵelementStart(4,"div")(5,"button",6),t.ɵɵlistener("click",(function(){return n.testScript()})),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.scriptConfigForm),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.tbelEnabled),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.scriptConfigForm.get("scriptLang").value===n.scriptLanguage.JS),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.scriptConfigForm.get("scriptLang").value===n.scriptLanguage.TBEL),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,5,n.testScriptLabel)," "))},dependencies:t.ɵɵgetComponentDepsFactory(gp),encapsulation:2})}}e("TransformScriptConfigComponent",gp);const hp=()=>({maxWidth:"820px"});function yp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.from-template-required")," "))}function bp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.to-template-required")," "))}function vp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.subject-template-required")," "))}function xp(e,n){if(1&e&&(t.ɵɵelementStart(0,"span"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=t.ɵɵnextContext();t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,e.getBodyTypeName())," ")}}function Cp(e,n){if(1&e&&(t.ɵɵelementStart(0,"mat-option",24)(1,"span",25),t.ɵɵtext(2),t.ɵɵpipe(3,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(4,"br"),t.ɵɵelementStart(5,"small",26),t.ɵɵtext(6),t.ɵɵpipe(7,"translate"),t.ɵɵelementEnd()()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(2),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(3,3,e.name)," "),t.ɵɵadvance(4),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(7,5,e.description)," ")}}function Sp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-form-field",18)(1,"mat-label",5),t.ɵɵtext(2,"tb.rulenode.body-type-template"),t.ɵɵelementEnd(),t.ɵɵelement(3,"input",27),t.ɵɵelementStart(4,"mat-hint",5),t.ɵɵtext(5,"tb.mail-body-type.after-template-evaluation-hint"),t.ɵɵelementEnd()())}function Tp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.body-template-required")," "))}class Ip extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.mailBodyTypes=[{name:"tb.mail-body-type.plain-text",description:"tb.mail-body-type.plain-text-description",value:"false"},{name:"tb.mail-body-type.html",description:"tb.mail-body-type.html-text-description",value:"true"},{name:"tb.mail-body-type.use-body-type-template",description:"tb.mail-body-type.dynamic-text-description",value:"dynamic"}]}configForm(){return this.toEmailConfigForm}onConfigurationSet(e){this.toEmailConfigForm=this.fb.group({fromTemplate:[e?e.fromTemplate:null,[N.required]],toTemplate:[e?e.toTemplate:null,[N.required]],ccTemplate:[e?e.ccTemplate:null,[]],bccTemplate:[e?e.bccTemplate:null,[]],subjectTemplate:[e?e.subjectTemplate:null,[N.required]],mailBodyType:[e?e.mailBodyType:null],isHtmlTemplate:[e?e.isHtmlTemplate:null,[N.required]],bodyTemplate:[e?e.bodyTemplate:null,[N.required]]})}prepareInputConfig(e){return{fromTemplate:P(e?.fromTemplate)?e.fromTemplate:null,toTemplate:P(e?.toTemplate)?e.toTemplate:null,ccTemplate:P(e?.ccTemplate)?e.ccTemplate:null,bccTemplate:P(e?.bccTemplate)?e.bccTemplate:null,subjectTemplate:P(e?.subjectTemplate)?e.subjectTemplate:null,mailBodyType:P(e?.mailBodyType)?e.mailBodyType:null,isHtmlTemplate:P(e?.isHtmlTemplate)?e.isHtmlTemplate:null,bodyTemplate:P(e?.bodyTemplate)?e.bodyTemplate:null}}updateValidators(e){"dynamic"===this.toEmailConfigForm.get("mailBodyType").value?this.toEmailConfigForm.get("isHtmlTemplate").enable({emitEvent:!1}):this.toEmailConfigForm.get("isHtmlTemplate").disable({emitEvent:!1}),this.toEmailConfigForm.get("isHtmlTemplate").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["mailBodyType"]}getBodyTypeName(){return this.mailBodyTypes.find((e=>e.value===this.toEmailConfigForm.get("mailBodyType").value)).name}static{this.ɵfac=function(e){return new(e||Ip)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ip,selectors:[["tb-transformation-node-to-email-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:61,vars:23,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title"],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],["subscriptSizing","dynamic",1,"flex"],["translate",""],["required","","matInput","","formControlName","fromTemplate"],["align","start"],["align","end"],[1,"input-bottom-double-hint"],["hintMode","","tb-help-popup-placement","right","trigger-style","letter-spacing:0.25px; font-size:12px;",1,"see-example",3,"tb-help-popup","tb-help-popup-style","trigger-text"],[4,"ngIf"],[1,"tb-form-panel","no-padding","no-border"],["popupHelpLink","rulenode/to_email_node_fields_templatization",3,"hintText"],[1,"flex"],["required","","matInput","","formControlName","toTemplate","cdkTextareaAutosize","","cdkAutosizeMinRows","1",1,"tb-enable-vertical-resize"],["matInput","","formControlName","ccTemplate","cdkTextareaAutosize","","cdkAutosizeMinRows","1",1,"tb-enable-vertical-resize"],["matInput","","formControlName","bccTemplate","cdkTextareaAutosize","","cdkAutosizeMinRows","1",1,"tb-enable-vertical-resize"],[1,"mat-block"],["required","","matInput","","formControlName","subjectTemplate","cdkTextareaAutosize","","cdkAutosizeMinRows","1",1,"tb-enable-vertical-resize"],["formControlName","mailBodyType"],[3,"value",4,"ngFor","ngForOf"],["class","mat-block",4,"ngIf"],["required","","matInput","","formControlName","bodyTemplate","cdkTextareaAutosize","","cdkAutosizeMinRows","2",1,"tb-enable-vertical-resize"],[3,"value"],["matListItemTitle",""],["matListItemMeta","",2,"color","inherit"],["required","","matInput","","formControlName","isHtmlTemplate"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵtext(3,"tb.rulenode.email-sender"),t.ɵɵelementEnd(),t.ɵɵelementStart(4,"div",3)(5,"mat-form-field",4)(6,"mat-label",5),t.ɵɵtext(7,"tb.rulenode.from-template"),t.ɵɵelementEnd(),t.ɵɵelement(8,"input",6),t.ɵɵelementStart(9,"mat-hint",7),t.ɵɵtext(10),t.ɵɵpipe(11,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(12,"mat-hint",8)(13,"div",9),t.ɵɵelement(14,"div",10),t.ɵɵpipe(15,"translate"),t.ɵɵelementEnd()(),t.ɵɵtemplate(16,yp,3,3,"mat-error",11),t.ɵɵelementEnd()()(),t.ɵɵelementStart(17,"div",1)(18,"div",12)(19,"div",2),t.ɵɵtext(20,"tb.rulenode.recipients"),t.ɵɵelementEnd(),t.ɵɵelement(21,"tb-example-hint",13),t.ɵɵpipe(22,"translate"),t.ɵɵelementEnd(),t.ɵɵelementStart(23,"div",3)(24,"mat-form-field",14)(25,"mat-label",5),t.ɵɵtext(26,"tb.rulenode.to-template"),t.ɵɵelementEnd(),t.ɵɵelement(27,"textarea",15),t.ɵɵtemplate(28,bp,3,3,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(29,"mat-form-field",14)(30,"mat-label",5),t.ɵɵtext(31,"tb.rulenode.cc-template"),t.ɵɵelementEnd(),t.ɵɵelement(32,"textarea",16),t.ɵɵelementEnd(),t.ɵɵelementStart(33,"mat-form-field",14)(34,"mat-label",5),t.ɵɵtext(35,"tb.rulenode.bcc-template"),t.ɵɵelementEnd(),t.ɵɵelement(36,"textarea",17),t.ɵɵelementEnd()()(),t.ɵɵelementStart(37,"div",1)(38,"div",2),t.ɵɵtext(39,"tb.rulenode.message-subject-and-content"),t.ɵɵelementEnd(),t.ɵɵelement(40,"tb-example-hint",13),t.ɵɵpipe(41,"translate"),t.ɵɵelementStart(42,"section")(43,"mat-form-field",18)(44,"mat-label",5),t.ɵɵtext(45,"tb.rulenode.subject-template"),t.ɵɵelementEnd(),t.ɵɵelement(46,"textarea",19),t.ɵɵtemplate(47,vp,3,3,"mat-error",11),t.ɵɵelementEnd(),t.ɵɵelementStart(48,"mat-form-field",18)(49,"mat-label",5),t.ɵɵtext(50,"tb.rulenode.mail-body-type"),t.ɵɵelementEnd(),t.ɵɵelementStart(51,"mat-select",20)(52,"mat-select-trigger"),t.ɵɵtemplate(53,xp,3,3,"span",11),t.ɵɵelementEnd(),t.ɵɵtemplate(54,Cp,8,7,"mat-option",21),t.ɵɵelementEnd()(),t.ɵɵtemplate(55,Sp,6,0,"mat-form-field",22),t.ɵɵelementStart(56,"mat-form-field",18)(57,"mat-label",5),t.ɵɵtext(58,"tb.rulenode.body-template"),t.ɵɵelementEnd(),t.ɵɵelement(59,"textarea",23),t.ɵɵtemplate(60,Tp,3,3,"mat-error",11),t.ɵɵelementEnd()()()()),2&e&&(t.ɵɵproperty("formGroup",n.toEmailConfigForm),t.ɵɵadvance(10),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(11,14,"tb.rulenode.email-from-template-hint")," "),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("tb-help-popup","rulenode/to_email_node_fields_templatization"),t.ɵɵpropertyInterpolate("trigger-text",t.ɵɵpipeBind1(15,16,"tb.key-val.see-examples")),t.ɵɵproperty("tb-help-popup-style",t.ɵɵpureFunction0(22,hp)),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.toEmailConfigForm.get("fromTemplate").hasError("required")),t.ɵɵadvance(5),t.ɵɵproperty("hintText",t.ɵɵpipeBind1(22,18,"tb.rulenode.recipients-block-main-hint")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.toEmailConfigForm.get("toTemplate").hasError("required")),t.ɵɵadvance(12),t.ɵɵproperty("hintText",t.ɵɵpipeBind1(41,20,"tb.rulenode.kv-map-pattern-hint")),t.ɵɵadvance(7),t.ɵɵproperty("ngIf",n.toEmailConfigForm.get("subjectTemplate").hasError("required")),t.ɵɵadvance(6),t.ɵɵproperty("ngIf",n.toEmailConfigForm.get("mailBodyType").value),t.ɵɵadvance(),t.ɵɵproperty("ngForOf",n.mailBodyTypes),t.ɵɵadvance(),t.ɵɵproperty("ngIf","dynamic"===n.toEmailConfigForm.get("mailBodyType").value),t.ɵɵadvance(5),t.ɵɵproperty("ngIf",n.toEmailConfigForm.get("bodyTemplate").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(Ip),styles:["[_nghost-%COMP%] .input-bottom-double-hint[_ngcontent-%COMP%]{display:inline-flex}[_nghost-%COMP%] .input-bottom-double-hint[_ngcontent-%COMP%] .see-example[_ngcontent-%COMP%]{flex-shrink:0;padding-right:16px}[_nghost-%COMP%] textarea.tb-enable-vertical-resize[_ngcontent-%COMP%]{resize:vertical}"]})}}e("ToEmailConfigComponent",Ip);class Ep extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.copyFrom=[],this.translation=Ut;for(const e of this.translation.keys())this.copyFrom.push({value:e,name:this.translate.instant(this.translation.get(e))})}onConfigurationSet(e){this.copyKeysConfigForm=this.fb.group({copyFrom:[e.copyFrom,[N.required]],keys:[e?e.keys:null,[N.required]]})}configForm(){return this.copyKeysConfigForm}prepareInputConfig(e){let t;return t=P(e?.fromMetadata)?e.copyFrom?Kt.METADATA:Kt.DATA:P(e?.copyFrom)?e.copyFrom:Kt.DATA,{keys:P(e?.keys)?e.keys:null,copyFrom:t}}static{this.ɵfac=function(e){return new(e||Ep)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Ep,selectors:[["tb-transformation-node-copy-keys-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:10,vars:17,consts:[[1,"tb-form-panel","no-padding","no-border",3,"formGroup"],["formControlName","copyFrom",3,"labelText","translation"],["required","","formControlName","keys",1,"mat-block",3,"label","placeholder","requiredText"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-msg-metadata-chip",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"tb-string-items-list",2),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵpipe(6,"translate"),t.ɵɵelementStart(7,"mat-icon",3),t.ɵɵpipe(8,"translate"),t.ɵɵtext(9," help "),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.copyKeysConfigForm),t.ɵɵadvance(),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(2,7,"tb.key-val.copy-key-values-from"))("translation",n.translation),t.ɵɵadvance(2),t.ɵɵproperty("label",t.ɵɵpipeBind1(4,9,"tb.rulenode.keys"))("placeholder",t.ɵɵpipeBind1(5,11,"tb.rulenode.add-key"))("requiredText",t.ɵɵpipeBind1(6,13,"tb.key-val.at-least-one-key-error")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,15,"tb.rulenode.use-regular-expression-hint")))},dependencies:t.ɵɵgetComponentDepsFactory(Ep),encapsulation:2})}}function Fp(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",7),t.ɵɵtext(1),t.ɵɵelementEnd()),2&e){const e=n.$implicit;t.ɵɵproperty("value",e.value),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",e.name," ")}}e("CopyKeysConfigComponent",Ep);class qp extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.renameIn=[],this.translation=zt;for(const e of this.translation.keys())this.renameIn.push({value:e,name:this.translate.instant(this.translation.get(e))})}configForm(){return this.renameKeysConfigForm}onConfigurationSet(e){this.renameKeysConfigForm=this.fb.group({renameIn:[e?e.renameIn:null,[N.required]],renameKeysMapping:[e?e.renameKeysMapping:null,[N.required]]})}prepareInputConfig(e){let t;return t=P(e?.fromMetadata)?e.fromMetadata?Kt.METADATA:Kt.DATA:P(e?.renameIn)?e?.renameIn:Kt.DATA,{renameKeysMapping:P(e?.renameKeysMapping)?e.renameKeysMapping:null,renameIn:t}}static{this.ɵfac=function(e){return new(e||qp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:qp,selectors:[["tb-transformation-node-rename-keys-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:15,vars:24,consts:[[1,"tb-form-panel","stroked",3,"formGroup"],["translate","",1,"tb-form-panel-title"],[1,"fx-centered"],[1,"fetch-to-data-toggle"],["formControlName","renameIn","appearance","fill",1,"fetch-to-data-toggle"],[3,"value",4,"ngFor","ngForOf"],["required","","formControlName","renameKeysMapping","uniqueKeyValuePairValidator","",3,"labelText","requiredText","keyText","keyRequiredText","valText","valRequiredText"],[3,"value"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1),t.ɵɵtext(2,"tb.rulenode.rename-keys-in"),t.ɵɵelementEnd(),t.ɵɵelementStart(3,"div",2)(4,"div",3)(5,"tb-toggle-select",4),t.ɵɵtemplate(6,Fp,2,2,"tb-toggle-option",5),t.ɵɵelementEnd()()(),t.ɵɵelement(7,"tb-kv-map-config",6),t.ɵɵpipe(8,"translate"),t.ɵɵpipe(9,"translate"),t.ɵɵpipe(10,"translate"),t.ɵɵpipe(11,"translate"),t.ɵɵpipe(12,"translate"),t.ɵɵpipe(13,"translate"),t.ɵɵpipe(14,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.renameKeysConfigForm),t.ɵɵadvance(6),t.ɵɵproperty("ngForOf",n.renameIn),t.ɵɵadvance(),t.ɵɵpropertyInterpolate2("labelText","",t.ɵɵpipeBind1(8,10,n.translation.get(n.renameKeysConfigForm.get("renameIn").value))," ",t.ɵɵpipeBind1(9,12,"tb.rulenode.keys-mapping"),""),t.ɵɵpropertyInterpolate("requiredText",t.ɵɵpipeBind1(10,14,"tb.rulenode.attr-mapping-required")),t.ɵɵpropertyInterpolate("keyText",t.ɵɵpipeBind1(11,16,"tb.rulenode.current-key-name")),t.ɵɵpropertyInterpolate("keyRequiredText",t.ɵɵpipeBind1(12,18,"tb.rulenode.key-name-required")),t.ɵɵpropertyInterpolate("valText",t.ɵɵpipeBind1(13,20,"tb.rulenode.new-key-name")),t.ɵɵpropertyInterpolate("valRequiredText",t.ɵɵpipeBind1(14,22,"tb.rulenode.new-key-name-required")))},dependencies:t.ɵɵgetComponentDepsFactory(qp),styles:["[_nghost-%COMP%] .fetch-to-data-toggle[_ngcontent-%COMP%]{max-width:420px;width:100%}[_nghost-%COMP%] .fx-centered[_ngcontent-%COMP%]{display:flex;width:100%;justify-content:space-around}"]})}}function Ap(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(2,1,"tb.rulenode.json-path-expression-required")))}e("RenameKeysConfigComponent",qp);class kp extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.jsonPathConfigForm}onConfigurationSet(e){this.jsonPathConfigForm=this.fb.group({jsonPath:[e?e.jsonPath:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||kp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:kp,selectors:[["tb-transformation-node-json-path-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:10,vars:8,consts:[[3,"formGroup"],["subscriptSizing","dynamic",1,"mat-block"],["matInput","","formControlName","jsonPath","required",""],[4,"ngIf"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",2),t.ɵɵelementStart(6,"mat-hint"),t.ɵɵtext(7),t.ɵɵpipe(8,"translate"),t.ɵɵelementEnd(),t.ɵɵtemplate(9,Ap,3,3,"mat-error",3),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.jsonPathConfigForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,4,"tb.rulenode.json-path-expression")),t.ɵɵadvance(4),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(8,6,"tb.rulenode.json-path-expression-hint")),t.ɵɵadvance(2),t.ɵɵproperty("ngIf",n.jsonPathConfigForm.get("jsonPath").hasError("required")))},dependencies:t.ɵɵgetComponentDepsFactory(kp),encapsulation:2})}}e("NodeJsonPathConfigComponent",kp);class Np extends i{constructor(e,t,n){super(e),this.store=e,this.fb=t,this.translate=n,this.deleteFrom=[],this.translation=Ht;for(const e of this.translation.keys())this.deleteFrom.push({value:e,name:this.translate.instant(this.translation.get(e))})}onConfigurationSet(e){this.deleteKeysConfigForm=this.fb.group({deleteFrom:[e.deleteFrom,[N.required]],keys:[e?e.keys:null,[N.required]]})}prepareInputConfig(e){let t;return t=P(e?.fromMetadata)?e.fromMetadata?Kt.METADATA:Kt.DATA:P(e?.deleteFrom)?e?.deleteFrom:Kt.DATA,{keys:P(e?.keys)?e.keys:null,deleteFrom:t}}configForm(){return this.deleteKeysConfigForm}static{this.ɵfac=function(e){return new(e||Np)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder),t.ɵɵdirectiveInject(K.TranslateService))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Np,selectors:[["tb-transformation-node-delete-keys-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:10,vars:16,consts:[[1,"tb-form-panel","no-border","no-padding",3,"formGroup"],["formControlName","deleteFrom",3,"labelText"],["required","","formControlName","keys",1,"mat-block",3,"label","placeholder","requiredText"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"tb-msg-metadata-chip",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementStart(3,"tb-string-items-list",2),t.ɵɵpipe(4,"translate"),t.ɵɵpipe(5,"translate"),t.ɵɵpipe(6,"translate"),t.ɵɵelementStart(7,"mat-icon",3),t.ɵɵpipe(8,"translate"),t.ɵɵtext(9," help "),t.ɵɵelementEnd()()()),2&e&&(t.ɵɵproperty("formGroup",n.deleteKeysConfigForm),t.ɵɵadvance(),t.ɵɵproperty("labelText",t.ɵɵpipeBind1(2,6,"tb.key-val.delete-key-values-from")),t.ɵɵadvance(2),t.ɵɵproperty("label",t.ɵɵpipeBind1(4,8,"tb.rulenode.keys"))("placeholder",t.ɵɵpipeBind1(5,10,"tb.rulenode.add-key"))("requiredText",t.ɵɵpipeBind1(6,12,"tb.key-val.at-least-one-key-error")),t.ɵɵadvance(4),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(8,14,"tb.rulenode.use-regular-expression-delete-hint")))},dependencies:t.ɵɵgetComponentDepsFactory(Np),encapsulation:2})}}function wp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.interval-required")," "))}function Mp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.interval-min-error")," "))}function Bp(e,n){if(1&e&&(t.ɵɵelementStart(0,"tb-toggle-option",18),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e){const e=n.$implicit,r=t.ɵɵnextContext();t.ɵɵproperty("value",e),t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,2,r.deduplicationStrategiesTranslations.get(e))," ")}}function Vp(e,n){1&e&&(t.ɵɵelement(0,"tb-example-hint",19),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵproperty("hintText",t.ɵɵpipeBind1(1,1,"tb.rulenode.strategy-all-hint"))}function Op(e,n){1&e&&(t.ɵɵelement(0,"tb-example-hint",20),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵproperty("hintText",t.ɵɵpipeBind1(1,1,"tb.rulenode.strategy-first-hint"))}function Dp(e,n){1&e&&(t.ɵɵelement(0,"tb-example-hint",20),t.ɵɵpipe(1,"translate")),2&e&&t.ɵɵproperty("hintText",t.ɵɵpipeBind1(1,1,"tb.rulenode.strategy-last-hint"))}function Lp(e,n){1&e&&(t.ɵɵelementStart(0,"div"),t.ɵɵelement(1,"tb-output-message-type-autocomplete",21),t.ɵɵelementEnd())}function Pp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-msgs-required")," "))}function Rp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-msgs-max-error")," "))}function _p(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-pending-msgs-min-error")," "))}function jp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-retries-required")," "))}function Gp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-retries-max-error")," "))}function Kp(e,n){1&e&&(t.ɵɵelementStart(0,"mat-error"),t.ɵɵtext(1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵadvance(),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(2,1,"tb.rulenode.max-retries-min-error")," "))}e("DeleteKeysConfigComponent",Np);class Up extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.deduplicationStrategie=St,this.deduplicationStrategies=Object.keys(this.deduplicationStrategie),this.deduplicationStrategiesTranslations=Tt}configForm(){return this.deduplicationConfigForm}onConfigurationSet(e){this.deduplicationConfigForm=this.fb.group({interval:[P(e?.interval)?e.interval:null,[N.required,N.min(1)]],strategy:[P(e?.strategy)?e.strategy:null,[N.required]],outMsgType:[P(e?.outMsgType)?e.outMsgType:null,[N.required]],maxPendingMsgs:[P(e?.maxPendingMsgs)?e.maxPendingMsgs:null,[N.required,N.min(1),N.max(1e3)]],maxRetries:[P(e?.maxRetries)?e.maxRetries:null,[N.required,N.min(0),N.max(100)]]})}prepareInputConfig(e){return e||(e={}),e.outMsgType||(e.outMsgType="POST_TELEMETRY_REQUEST"),super.prepareInputConfig(e)}updateValidators(e){this.deduplicationConfigForm.get("strategy").value===this.deduplicationStrategie.ALL?this.deduplicationConfigForm.get("outMsgType").enable({emitEvent:!1}):this.deduplicationConfigForm.get("outMsgType").disable({emitEvent:!1}),this.deduplicationConfigForm.get("outMsgType").updateValueAndValidity({emitEvent:e})}validatorTriggers(){return["strategy"]}static{this.ɵfac=function(e){return new(e||Up)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.FormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Up,selectors:[["tb-action-node-msg-deduplication-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:49,vars:32,consts:[[3,"formGroup"],[1,"mat-block"],["type","number","required","","matInput","","formControlName","interval"],[4,"ngIf"],["matSuffix","","aria-hidden","false","aria-label","help-icon","color","primary",1,"help-icon","margin-8","cursor-pointer",3,"matTooltip"],[1,"tb-form-panel","no-padding","no-border"],[1,"tb-form-panel","stroked"],["translate","",1,"tb-form-panel-title","tb-required"],["formControlName","strategy","appearance","fill",1,"fetch-to-data-toggle"],[3,"value",4,"ngFor","ngForOf"],[3,"hintText",4,"ngIf"],["textAlign","'center'",3,"hintText",4,"ngIf"],[1,"tb-settings"],["translate",""],[1,"tb-form-row","no-border","no-padding","tb-standard-fields"],[1,"flex"],["type","number","required","","matInput","","formControlName","maxPendingMsgs"],["type","number","required","","matInput","","formControlName","maxRetries"],[3,"value"],[3,"hintText"],["textAlign","'center'",3,"hintText"],["required","","formControlName","outMsgType"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"mat-form-field",1)(2,"mat-label"),t.ɵɵtext(3),t.ɵɵpipe(4,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(5,"input",2),t.ɵɵtemplate(6,wp,3,3,"mat-error",3)(7,Mp,3,3,"mat-error",3),t.ɵɵelementStart(8,"mat-icon",4),t.ɵɵpipe(9,"translate"),t.ɵɵtext(10,"help"),t.ɵɵelementEnd()(),t.ɵɵelementStart(11,"div",5)(12,"div",6)(13,"div",7),t.ɵɵtext(14,"tb.rulenode.strategy"),t.ɵɵelementEnd(),t.ɵɵelementStart(15,"tb-toggle-select",8),t.ɵɵtemplate(16,Bp,3,4,"tb-toggle-option",9),t.ɵɵelementEnd(),t.ɵɵtemplate(17,Vp,2,3,"tb-example-hint",10)(18,Op,2,3,"tb-example-hint",11)(19,Dp,2,3,"tb-example-hint",11)(20,Lp,2,0,"div",3),t.ɵɵelementEnd(),t.ɵɵelementStart(21,"section",6)(22,"mat-expansion-panel",12)(23,"mat-expansion-panel-header")(24,"mat-panel-title",13),t.ɵɵtext(25,"tb.rulenode.advanced-settings"),t.ɵɵelementEnd()(),t.ɵɵelementStart(26,"div",14)(27,"mat-form-field",15)(28,"mat-label"),t.ɵɵtext(29),t.ɵɵpipe(30,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(31,"input",16),t.ɵɵtemplate(32,Pp,3,3,"mat-error",3)(33,Rp,3,3,"mat-error",3)(34,_p,3,3,"mat-error",3),t.ɵɵelementStart(35,"mat-icon",4),t.ɵɵpipe(36,"translate"),t.ɵɵtext(37,"help"),t.ɵɵelementEnd()(),t.ɵɵelementStart(38,"mat-form-field",15)(39,"mat-label"),t.ɵɵtext(40),t.ɵɵpipe(41,"translate"),t.ɵɵelementEnd(),t.ɵɵelement(42,"input",17),t.ɵɵtemplate(43,jp,3,3,"mat-error",3)(44,Gp,3,3,"mat-error",3)(45,Kp,3,3,"mat-error",3),t.ɵɵelementStart(46,"mat-icon",4),t.ɵɵpipe(47,"translate"),t.ɵɵtext(48,"help"),t.ɵɵelementEnd()()()()()()()),2&e&&(t.ɵɵproperty("formGroup",n.deduplicationConfigForm),t.ɵɵadvance(3),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(4,20,"tb.rulenode.interval")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("interval").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("interval").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(9,22,"tb.rulenode.interval-hint")),t.ɵɵadvance(8),t.ɵɵproperty("ngForOf",n.deduplicationStrategies),t.ɵɵadvance(),t.ɵɵproperty("ngIf","ALL"===n.deduplicationConfigForm.get("strategy").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf","FIRST"===n.deduplicationConfigForm.get("strategy").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf","LAST"===n.deduplicationConfigForm.get("strategy").value),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("strategy").value===n.deduplicationStrategie.ALL),t.ɵɵadvance(9),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(30,24,"tb.rulenode.max-pending-msgs")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxPendingMsgs").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxPendingMsgs").hasError("max")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxPendingMsgs").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(36,26,"tb.rulenode.max-pending-msgs-hint")),t.ɵɵadvance(5),t.ɵɵtextInterpolate(t.ɵɵpipeBind1(41,28,"tb.rulenode.max-retries")),t.ɵɵadvance(3),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxRetries").hasError("required")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxRetries").hasError("max")),t.ɵɵadvance(),t.ɵɵproperty("ngIf",n.deduplicationConfigForm.get("maxRetries").hasError("min")),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("matTooltip",t.ɵɵpipeBind1(47,30,"tb.rulenode.max-retries-hint")))},dependencies:t.ɵɵgetComponentDepsFactory(Up),encapsulation:2})}}e("DeduplicationConfigComponent",Up);class Hp{static{this.ɵfac=function(e){return new(e||Hp)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:Hp})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,xi,sp,gp,Ip,Ep,qp,kp,Np,Up]})}}e("RulenodeCoreConfigTransformModule",Hp),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(Hp,{declarations:[sp,gp,Ip,Ep,qp,kp,Np,Up],imports:[$,S,xi],exports:[sp,gp,Ip,Ep,qp,kp,Np,Up]});const zp=e=>[e];class $p extends i{constructor(e,t){super(e),this.store=e,this.fb=t,this.entityType=u}configForm(){return this.ruleChainInputConfigForm}onConfigurationSet(e){this.ruleChainInputConfigForm=this.fb.group({forwardMsgToDefaultRuleChain:[!!e&&e?.forwardMsgToDefaultRuleChain,[]],ruleChainId:[e?e.ruleChainId:null,[N.required]]})}static{this.ɵfac=function(e){return new(e||$p)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:$p,selectors:[["tb-flow-node-rule-chain-input-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:8,vars:12,consts:[[1,"flex","flex-col",3,"formGroup"],[1,"tb-form-panel","no-padding","no-border"],[1,"tb-form-row","no-border",3,"tb-hint-tooltip-icon"],["formControlName","forwardMsgToDefaultRuleChain",1,"mat-slide"],["required","","formControlName","ruleChainId",3,"excludeEntityIds","entityType","entitySubtype"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0)(1,"div",1)(2,"div",2),t.ɵɵpipe(3,"translate"),t.ɵɵelementStart(4,"mat-slide-toggle",3),t.ɵɵtext(5),t.ɵɵpipe(6,"translate"),t.ɵɵelementEnd()(),t.ɵɵelement(7,"tb-entity-autocomplete",4),t.ɵɵelementEnd()()),2&e&&(t.ɵɵproperty("formGroup",n.ruleChainInputConfigForm),t.ɵɵadvance(2),t.ɵɵpropertyInterpolate("tb-hint-tooltip-icon",t.ɵɵpipeBind1(3,6,"tb.rulenode.forward-msg-default-rule-chain-tooltip")),t.ɵɵadvance(3),t.ɵɵtextInterpolate1(" ",t.ɵɵpipeBind1(6,8,"tb.rulenode.forward-msg-default-rule-chain")," "),t.ɵɵadvance(2),t.ɵɵproperty("excludeEntityIds",t.ɵɵpureFunction1(10,zp,n.ruleChainId))("entityType",n.entityType.RULE_CHAIN)("entitySubtype",n.ruleChainType))},dependencies:t.ɵɵgetComponentDepsFactory($p),encapsulation:2})}}e("RuleChainInputComponent",$p);class Qp extends i{constructor(e,t){super(e),this.store=e,this.fb=t}configForm(){return this.ruleChainOutputConfigForm}onConfigurationSet(e){this.ruleChainOutputConfigForm=this.fb.group({})}static{this.ɵfac=function(e){return new(e||Qp)(t.ɵɵdirectiveInject(A.Store),t.ɵɵdirectiveInject(k.UntypedFormBuilder))}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Qp,selectors:[["tb-flow-node-rule-chain-output-config"]],features:[t.ɵɵInheritDefinitionFeature],decls:3,vars:4,consts:[[1,"flex","flex-col",3,"formGroup"],[3,"innerHTML"]],template:function(e,n){1&e&&(t.ɵɵelementStart(0,"section",0),t.ɵɵelement(1,"div",1),t.ɵɵpipe(2,"translate"),t.ɵɵelementEnd()),2&e&&(t.ɵɵproperty("formGroup",n.ruleChainOutputConfigForm),t.ɵɵadvance(),t.ɵɵpropertyInterpolate("innerHTML",t.ɵɵpipeBind1(2,2,"tb.rulenode.output-node-name-hint"),t.ɵɵsanitizeHtml))},dependencies:t.ɵɵgetComponentDepsFactory(Qp),encapsulation:2})}}e("RuleChainOutputComponent",Qp);class Jp{static{this.ɵfac=function(e){return new(e||Jp)}}static{this.ɵmod=t.ɵɵdefineNgModule({type:Jp})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,xi,$p,Qp]})}}e("RuleNodeCoreConfigFlowModule",Jp),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(Jp,{declarations:[$p,Qp],imports:[$,S,xi],exports:[$p,Qp]});class Yp{constructor(){}static{this.ɵfac=function(e){return new(e||Yp)}}static{this.ɵcmp=t.ɵɵdefineComponent({type:Yp,selectors:[["tb-lib-styles-entry"]],standalone:!0,features:[t.ɵɵStandaloneFeature],decls:0,vars:0,template:function(e,t){},styles:['.tb-default tb-rule-node-config .margin-8{margin:8px}.tb-default tb-rule-node-config .tb-error{letter-spacing:.25px;color:var(--mdc-theme-error, #f44336)}.tb-default tb-rule-node-config .tb-required:after{content:"*";font-size:16px;color:#000000de}.tb-default tb-rule-node-config .help-icon{color:#000;opacity:.38;padding:unset}.tb-default tb-rule-node-config .help-icon:hover{color:#305680;opacity:unset}.tb-default tb-rule-node-config .same-width-component-row{display:flex;flex-wrap:nowrap;gap:16px}@media screen and (max-width: 599px){.tb-default tb-rule-node-config .same-width-component-row{gap:8px}}.tb-default tb-rule-node-config .same-width-component-row>*{flex:1}.tb-default .gap-0{gap:0px}.tb-default .gap-5\\.5{gap:1.375rem}@media (max-width: 599px){.tb-default .xs\\:max-h-full{max-height:100%}}@media (min-width: 960px) and (max-width: 1279px){.tb-default .md\\:max-h-full{max-height:100%}}@media (max-width: 959px){.tb-default .lt-md\\:gap-4{gap:1rem}}@media (min-width: 960px){.tb-default .gt-sm\\:max-w-10{max-width:2.5rem}.tb-default .gt-sm\\:max-w-10\\%{max-width:10%}.tb-default .gt-sm\\:gap-4{gap:1rem}.tb-default .gt-sm\\:gap-5\\.5{gap:1.375rem}}\n'],encapsulation:2})}}const Wp=(e,t)=>{const n=e[a];if(n.styles?.length){const e=n.styles[0];let r=document.getElementById(t);if(!r){r=document.createElement("style"),r.id=t;(document.head||document.getElementsByTagName("head")[0]).appendChild(r)}r.innerHTML=e}};class Xp{constructor(e){!function(e){e.setTranslation("en_US",{tb:{rulenode:{id:"Id","additional-info":"Additional Info","advanced-settings":"Advanced settings","create-entity-if-not-exists":"Create new entity if it doesn't exist","create-entity-if-not-exists-hint":"If enabled, a new entity with specified parameters will be created unless it already exists. Existing entities will be used as is for relation.","select-device-connectivity-event":"Select device connectivity event","entity-name-pattern":"Name pattern","device-name-pattern":"Device name","asset-name-pattern":"Asset name","entity-view-name-pattern":"Entity view name","customer-title-pattern":"Customer title","dashboard-name-pattern":"Dashboard title","user-name-pattern":"User email","edge-name-pattern":"Edge name","entity-name-pattern-required":"Name pattern is required","entity-name-pattern-hint":"Name pattern field support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","copy-message-type":"Copy message type","entity-type-pattern":"Type pattern","entity-type-pattern-required":"Type pattern is required","message-type-value":"Message type value","message-type-value-required":"Message type value is required","message-type-value-max-length":"Message type value should be less than 256","output-message-type":"Output message type","entity-cache-expiration":"Entities cache expiration time (sec)","entity-cache-expiration-hint":"Specifies maximum time interval allowed to store found entity records. 0 value means that records will never expire.","entity-cache-expiration-required":"Entities cache expiration time is required.","entity-cache-expiration-range":"Entities cache expiration time should be greater than or equal to 0.","customer-name-pattern":"Customer title","customer-name-pattern-required":"Customer title is required","customer-name-pattern-hint":"Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","create-customer-if-not-exists":"Create new customer if it doesn't exist","unassign-from-customer":"Unassign from specific customer if originator is dashboard","unassign-from-customer-tooltip":"Only dashboards can be assigned to multiple customers at once. \nIf the message originator is a dashboard, you need to explicitly specify the customer's title to unassign from.","customer-cache-expiration":"Customers cache expiration time (sec)","customer-cache-expiration-hint":"Specifies maximum time interval allowed to store found customer records. 0 value means that records will never expire.","customer-cache-expiration-required":"Customers cache expiration time is required.","customer-cache-expiration-range":"Customers cache expiration time should be greater than or equal to 0.","interval-start":"Interval start","interval-end":"Interval end","time-unit":"Time unit","fetch-mode":"Fetch mode","order-by-timestamp":"Order by timestamp",limit:"Limit","limit-hint":"Min limit value is 2, max - 1000. If you want to fetch a single entry, select fetch mode 'First' or 'Last'.","limit-required":"Limit is required.","limit-range":"Limit should be in a range from 2 to 1000.","time-unit-milliseconds":"Milliseconds","time-unit-seconds":"Seconds","time-unit-minutes":"Minutes","time-unit-hours":"Hours","time-unit-days":"Days","time-value-range":"Allowing range from 1 to 2147483647.","start-interval-value-required":"Interval start is required.","end-interval-value-required":"Interval end is required.",filter:"Filter",switch:"Switch","math-templatization-tooltip":"This field support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","add-message-type":"Add message type","select-message-types-required":"At least one message type should be selected.","select-message-types":"Select message types","no-message-types-found":"No message types found","no-message-type-matching":"'{{messageType}}' not found.","create-new-message-type":"Create a new one.","message-types-required":"Message types are required.","client-attributes":"Client attributes","shared-attributes":"Shared attributes","server-attributes":"Server attributes","attributes-keys":"Attributes keys","attributes-keys-required":"Attributes keys are required","attributes-scope":"Attributes scope","attributes-scope-value":"Attributes scope value","attributes-scope-value-copy":"Copy attributes scope value","attributes-scope-hint":"Use the 'scope' metadata key to dynamically set the attribute scope per message. If provided, this overrides the scope set in the configuration.","notify-device":"Force notification to the device","send-attributes-updated-notification":"Send attributes updated notification","send-attributes-updated-notification-hint":"Send notification about updated attributes as a separate message to the rule engine queue.","send-attributes-deleted-notification":"Send attributes deleted notification","send-attributes-deleted-notification-hint":"Send notification about deleted attributes as a separate message to the rule engine queue.","update-attributes-only-on-value-change":"Save attributes only if the value changes","update-attributes-only-on-value-change-hint":"Updates the attributes on every incoming message disregarding if their value has changed. Increases API usage and reduces performance.","update-attributes-only-on-value-change-hint-enabled":"Updates the attributes only if their value has changed. If the value is not changed, no update to the attribute timestamp nor attribute change notification will be sent.","fetch-credentials-to-metadata":"Fetch credentials to metadata","notify-device-on-update-hint":"If enabled, force notification to the device about shared attributes update. If disabled, the notification behavior is controlled by the 'notifyDevice' parameter from the incoming message metadata. To turn off the notification, the message metadata must contain the 'notifyDevice' parameter set to 'false'. Any other case will trigger the notification to the device.","notify-device-on-delete-hint":"If enabled, force notification to the device about shared attributes removal. If disabled, the notification behavior is controlled by the 'notifyDevice' parameter from the incoming message metadata. To turn on the notification, the message metadata must contain the 'notifyDevice' parameter set to 'true'. In any other case, the notification will not be triggered to the device.","latest-timeseries":"Latest time series data keys","timeseries-keys":"Time series keys","timeseries-keys-required":"At least one time series key should be selected.","add-timeseries-key":"Add time series key","add-message-field":"Add message field","relation-search-parameters":"Relation search parameters","relation-parameters":"Relation parameters","add-metadata-field":"Add metadata field","data-keys":"Message field names","copy-from":"Copy from","data-to-metadata":"Data to metadata","metadata-to-data":"Metadata to data","use-regular-expression-hint":"Use regular expression to copy keys by pattern.\n\nTips & tricks:\nPress 'Enter' to complete field name input.\nPress 'Backspace' to delete field name. Multiple field names supported.",interval:"Interval","interval-required":"Interval is required","interval-hint":"Deduplication interval in seconds.","interval-min-error":"Min allowed value is 1","max-pending-msgs":"Max pending messages","max-pending-msgs-hint":"Maximum number of messages that are stored in memory for each unique deduplication id.","max-pending-msgs-required":"Max pending messages is required","max-pending-msgs-max-error":"Max allowed value is 1000","max-pending-msgs-min-error":"Min allowed value is 1","max-retries":"Max retries","max-retries-required":"Max retries is required","max-retries-hint":"Maximum number of retries to push the deduplicated messages into the queue. 10 seconds delay is used between retries","max-retries-max-error":"Max allowed value is 100","max-retries-min-error":"Min allowed value is 0",strategy:"Strategy","strategy-required":"Strategy is required","strategy-all-hint":"Return all messages that arrived during deduplication period as a single JSON array message. Where each element represents object with msg and metadata inner properties.","strategy-first-hint":"Return first message that arrived during deduplication period.","strategy-last-hint":"Return last message that arrived during deduplication period.",first:"First",last:"Last",all:"All","output-msg-type-hint":"The message type of the deduplication result.","queue-name-hint":"The queue name where the deduplication result will be published.",keys:"Keys","keys-required":"Keys are required","rename-keys-in":"Rename keys in",data:"Data",message:"Message",metadata:"Metadata","current-key-name":"Current key name","key-name-required":"Key name is required","new-key-name":"New key name","new-key-name-required":"New key name is required","metadata-keys":"Metadata field names","json-path-expression":"JSON path expression","json-path-expression-required":"JSON path expression is required","json-path-expression-hint":"JSONPath specifies a path to an element or a set of elements in a JSON structure. '$' represents the root object or array.","relations-query":"Relations query","device-relations-query":"Device relations query","max-relation-level":"Max relation level","max-relation-level-error":"Value should be greater than 0 or unspecified.","max-relation-level-invalid":"Value should be an integer.","relation-type":"Relation type","relation-type-pattern":"Relation type pattern","relation-type-pattern-required":"Relation type pattern is required","relation-types-list":"Relation types to propagate","relation-types-list-hint":"If Propagate relation types are not selected, alarms will be propagated without filtering by relation type.","unlimited-level":"Unlimited level","latest-telemetry":"Latest telemetry","add-telemetry-key":"Add telemetry key","delete-from":"Delete from","use-regular-expression-delete-hint":"Use regular expression to delete keys by pattern.\n\nTips & tricks:\nPress 'Enter' to complete field name input.\nPress 'Backspace' to delete field name.\nMultiple field names supported.","fetch-into":"Fetch into","attr-mapping":"Attributes mapping:","source-attribute":"Source attribute key","source-attribute-required":"Source attribute key is required.","source-telemetry":"Source telemetry key","source-telemetry-required":"Source telemetry key is required.","target-key":"Target key","target-key-required":"Target key is required.","attr-mapping-required":"At least one mapping entry should be specified.","fields-mapping":"Fields mapping","fields-mapping-hint":"If the message field is set to $entityId, the message originator's id will be saved to the specified table column.","relations-query-config-direction-suffix":"originator","profile-name":"Profile name","fetch-circle-parameter-info-from-metadata-hint":'Metadata field \'{{perimeterKeyName}}\' should be defined in next format: {"latitude":48.196, "longitude":24.6532, "radius":100.0, "radiusUnit":"METER"}',"fetch-poligon-parameter-info-from-metadata-hint":"Metadata field '{{perimeterKeyName}}' should be defined in next format: [[48.19736,24.65235],[48.19800,24.65060],...,[48.19849,24.65420]]","short-templatization-tooltip":"Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","fields-mapping-required":"At least one field mapping should be specified.","at-least-one-field-required":"At least one input field must have a value(s) provided.","originator-fields-sv-map-hint":"Target key fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","sv-map-hint":"Only target key fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","source-field":"Source field","source-field-required":"Source field is required.","originator-source":"Originator source","new-originator":"New originator","originator-customer":"Customer","originator-tenant":"Tenant","originator-related":"Related entity","originator-alarm-originator":"Alarm Originator","originator-entity":"Entity by name pattern","clone-message":"Clone message",transform:"Transform","default-ttl":"Default TTL in seconds","default-ttl-required":"Default TTL is required.","default-ttl-hint":"Rule node will fetch Time-to-Live (TTL) value from the message metadata. If no value is present, it defaults to the TTL specified in the configuration. If the value is set to 0, the TTL from the tenant profile configuration will be applied.","default-ttl-zero-hint":"TTL will not be applied if its value is set to 0.","min-default-ttl-message":"Only 0 minimum TTL is allowed.","generation-parameters":"Generation parameters","message-count":"Generated messages limit (0 - unlimited)","message-count-required":"Generated messages limit is required.","min-message-count-message":"Only 0 minimum message count is allowed.","period-seconds":"Period in seconds","period-seconds-required":"Period is required.","generation-frequency-seconds":"Generation frequency in seconds","generation-frequency-required":"Generation frequency is required.","min-generation-frequency-message":"Only 1 second minimum is allowed.","script-lang-tbel":"TBEL","script-lang-js":"JS","use-metadata-period-in-seconds-patterns":"Use period in seconds pattern","use-metadata-period-in-seconds-patterns-hint":"If selected, rule node use period in seconds interval pattern from message metadata or data assuming that intervals are in the seconds.","period-in-seconds-pattern":"Period in seconds pattern","period-in-seconds-pattern-required":"Period in seconds pattern is required","min-period-seconds-message":"Only 1 second minimum period is allowed.",originator:"Originator","message-body":"Message body","message-metadata":"Message metadata",generate:"Generate","current-rule-node":"Current Rule Node","current-tenant":"Current Tenant","generator-function":"Generator function","test-generator-function":"Test generator function",generator:"Generator","test-filter-function":"Test filter function","test-switch-function":"Test switch function","test-transformer-function":"Test transformer function",transformer:"Transformer","alarm-create-condition":"Alarm create condition","test-condition-function":"Test condition function","alarm-clear-condition":"Alarm clear condition","alarm-details-builder":"Alarm details builder","test-details-function":"Test details function","alarm-type":"Alarm type","select-entity-types":"Select entity types","alarm-type-required":"Alarm type is required.","alarm-severity":"Alarm severity","alarm-severity-required":"Alarm severity is required","alarm-severity-pattern":"Alarm severity pattern","alarm-status-filter":"Alarm status filter","alarm-status-list-empty":"Alarm status list is empty","no-alarm-status-matching":"No alarm status matching were found.",propagate:"Propagate alarm to related entities","propagate-to-owner":"Propagate alarm to entity owner (Customer or Tenant)","propagate-to-tenant":"Propagate alarm to Tenant",condition:"Condition",details:"Details","to-string":"To string","test-to-string-function":"Test to string function","from-template":"From","from-template-required":"From is required","message-to-metadata":"Message to metadata","metadata-to-message":"Metadata to message","from-message":"From message","from-metadata":"From metadata","to-template":"To","to-template-required":"To Template is required","mail-address-list-template-hint":'Comma separated address list, use ${metadataKey} for value from metadata, $[messageKey] for value from message body',"cc-template":"Cc","bcc-template":"Bcc","subject-template":"Subject","subject-template-required":"Subject Template is required","body-template":"Body","body-template-required":"Body Template is required","dynamic-mail-body-type":"Dynamic mail body type","mail-body-type":"Mail body type","body-type-template":"Body type template","reply-routing-configuration":"Reply Routing Configuration","rpc-reply-routing-configuration-hint":"These configuration parameters specify the metadata key names used to identify the service, session, and request for sending a reply back.","reply-routing-configuration-hint":"These configuration parameters specify the metadata key names used to identify the service and request for sending a reply back.","request-id-metadata-attribute":"Request Id","service-id-metadata-attribute":"Service Id","session-id-metadata-attribute":"Session Id","timeout-sec":"Timeout in seconds","timeout-required":"Timeout is required","min-timeout-message":"Only 0 minimum timeout value is allowed.","endpoint-url-pattern":"Endpoint URL pattern","endpoint-url-pattern-required":"Endpoint URL pattern is required","request-method":"Request method","use-simple-client-http-factory":"Use simple client HTTP factory","ignore-request-body":"Without request body","parse-to-plain-text":"Parse to plain text","parse-to-plain-text-hint":'If selected, request body message payload will be transformed from JSON string to plain text, e.g. msg = "Hello,\\t\\"world\\"" will be parsed to Hello, "world"',"read-timeout":"Read timeout in millis","read-timeout-hint":"The value of 0 means an infinite timeout","max-parallel-requests-count":"Max number of parallel requests","max-parallel-requests-count-hint":"The value of 0 specifies no limit in parallel processing","max-response-size":"Max response size (in KB)","max-response-size-hint":"The maximum amount of memory allocated for buffering data when decoding or encoding HTTP messages, such as JSON or XML payloads",headers:"Headers","headers-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body in header/value fields',header:"Header","header-required":"Header is required",value:"Value","value-required":"Value is required","topic-pattern":"Topic pattern","key-pattern":"Key pattern","key-pattern-hint":"Optional. If a valid partition number is specified, it will be used when sending the record. If no partition is specified, the key will be used instead. If neither is specified, a partition will be assigned in a round-robin fashion.","topic-pattern-required":"Topic pattern is required",topic:"Topic","topic-required":"Topic is required","bootstrap-servers":"Bootstrap servers","bootstrap-servers-required":"Bootstrap servers value is required","other-properties":"Other properties",key:"Key","key-required":"Key is required",retries:"Automatically retry times if fails","min-retries-message":"Only 0 minimum retries is allowed.","batch-size-bytes":"Produces batch size in bytes","min-batch-size-bytes-message":"Only 0 minimum batch size is allowed.","linger-ms":"Time to buffer locally (ms)","min-linger-ms-message":"Only 0 ms minimum value is allowed.","buffer-memory-bytes":"Client buffer max size in bytes","min-buffer-memory-message":"Only 0 minimum buffer size is allowed.","memory-buffer-size-range":"Memory buffer size must be between 0 and {{max}} KB",acks:"Number of acknowledgments","key-serializer":"Key serializer","key-serializer-required":"Key serializer is required","value-serializer":"Value serializer","value-serializer-required":"Value serializer is required","topic-arn-pattern":"Topic ARN pattern","topic-arn-pattern-required":"Topic ARN pattern is required","aws-access-key-id":"AWS Access Key ID","aws-access-key-id-required":"AWS Access Key ID is required","aws-secret-access-key":"AWS Secret Access Key","aws-secret-access-key-required":"AWS Secret Access Key is required","aws-region":"AWS Region","aws-region-required":"AWS Region is required","exchange-name-pattern":"Exchange name pattern","routing-key-pattern":"Routing key pattern","message-properties":"Message properties",host:"Host","host-required":"Host is required",port:"Port","port-required":"Port is required","port-range":"Port should be in a range from 1 to 65535.","virtual-host":"Virtual host",username:"Username",password:"Password","automatic-recovery":"Automatic recovery","connection-timeout-ms":"Connection timeout (ms)","min-connection-timeout-ms-message":"Only 0 ms minimum value is allowed.","handshake-timeout-ms":"Handshake timeout (ms)","min-handshake-timeout-ms-message":"Only 0 ms minimum value is allowed.","client-properties":"Client properties","queue-url-pattern":"Queue URL pattern","queue-url-pattern-required":"Queue URL pattern is required","delay-seconds":"Delay (seconds)","min-delay-seconds-message":"Only 0 seconds minimum value is allowed.","max-delay-seconds-message":"Only 900 seconds maximum value is allowed.",name:"Name","name-required":"Name is required","queue-type":"Queue type","sqs-queue-standard":"Standard","sqs-queue-fifo":"FIFO","gcp-project-id":"GCP project ID","gcp-project-id-required":"GCP project ID is required","gcp-service-account-key":"GCP service account key file","gcp-service-account-key-required":"GCP service account key file is required","pubsub-topic-name":"Topic name","pubsub-topic-name-required":"Topic name is required","message-attributes":"Message attributes","message-attributes-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body in name/value fields',"connect-timeout":"Connection timeout (sec)","connect-timeout-required":"Connection timeout is required.","connect-timeout-range":"Connection timeout should be in a range from 1 to 200.","client-id":"Client ID","client-id-hint":'Optional. Leave empty for auto-generated Client ID. Be careful when specifying the Client ID. Majority of the MQTT brokers will not allow multiple connections with the same Client ID. To connect to such brokers, your mqtt Client ID must be unique. When platform is running in a micro-services mode, the copy of rule node is launched in each micro-service. This will automatically lead to multiple mqtt clients with the same ID and may cause failures of the rule node. To avoid such failures enable "Add Service ID as suffix to Client ID" option below.',"append-client-id-suffix":"Add Service ID as suffix to Client ID","client-id-suffix-hint":'Optional. Applied when "Client ID" specified explicitly. If selected then Service ID will be added to Client ID as a suffix. Helps to avoid failures when platform is running in a micro-services mode.',"device-id":"Device ID","device-id-required":"Device ID is required.","clean-session":"Clean session","enable-ssl":"Enable SSL",credentials:"Credentials","credentials-type":"Credentials type","credentials-type-required":"Credentials type is required.","credentials-anonymous":"Anonymous","credentials-basic":"Basic","credentials-pem":"PEM","credentials-pem-hint":"At least Server CA certificate file or a pair of Client certificate and Client private key files are required","credentials-sas":"Shared Access Signature","sas-key":"SAS Key","sas-key-required":"SAS Key is required.",hostname:"Hostname","hostname-required":"Hostname is required.","azure-ca-cert":"CA certificate file","username-required":"Username is required.","password-required":"Password is required.","ca-cert":"Server CA certificate file","private-key":"Client private key file",cert:"Client certificate file","no-file":"No file selected.","drop-file":"Drop a file or click to select a file to upload.","private-key-password":"Private key password","use-system-smtp-settings":"Use system SMTP settings","use-metadata-dynamic-interval":"Use dynamic interval","metadata-dynamic-interval-hint":"Interval start and end input fields support templatization. Note that the substituted template value should be set in milliseconds. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","use-metadata-interval-patterns-hint":"If selected, rule node use start and end interval patterns from message metadata or data assuming that intervals are in the milliseconds.","use-message-alarm-data":"Use message alarm data","overwrite-alarm-details":"Overwrite alarm details","use-alarm-severity-pattern":"Use alarm severity pattern","check-all-keys":"Check that all specified fields are present","check-all-keys-hint":"If selected, checks that all specified keys are present in the message data and metadata.","check-relation-to-specific-entity":"Check relation to specific entity","check-relation-to-specific-entity-tooltip":"If enabled, checks the presence of relation with a specific entity otherwise, checks the presence of relation with any entity. In both cases, relation lookup is based on configured direction and type.","check-relation-hint":"Checks existence of relation to specific entity or to any entity based on direction and relation type.","delete-relation-with-specific-entity":"Delete relation with specific entity","delete-relation-with-specific-entity-hint":"If enabled, will delete the relation with just one specific entity. Otherwise, the relation will be removed with all matching entities.","delete-relation-hint":"Deletes relation from the originator of the incoming message to the specified entity or list of entities based on direction and type.","remove-current-relations":"Remove current relations","remove-current-relations-hint":"Removes current relations from the originator of the incoming message based on direction and type.","change-originator-to-related-entity":"Change originator to related entity","change-originator-to-related-entity-hint":"Used to process submitted message as a message from another entity.","start-interval":"Interval start","end-interval":"Interval end","start-interval-required":"Interval start is required.","end-interval-required":"Interval end is required.","smtp-protocol":"Protocol","smtp-host":"SMTP host","smtp-host-required":"SMTP host is required.","smtp-port":"SMTP port","smtp-port-required":"You must supply a smtp port.","smtp-port-range":"SMTP port should be in a range from 1 to 65535.","timeout-msec":"Timeout ms","min-timeout-msec-message":"Only 0 ms minimum value is allowed.","enter-username":"Enter username","enter-password":"Enter password","enable-tls":"Enable TLS","tls-version":"TLS version","enable-proxy":"Enable proxy","use-system-proxy-properties":"Use system proxy properties","proxy-host":"Proxy host","proxy-host-required":"Proxy host is required.","proxy-port":"Proxy port","proxy-port-required":"Proxy port is required.","proxy-port-range":"Proxy port should be in a range from 1 to 65535.","proxy-user":"Proxy user","proxy-password":"Proxy password","proxy-scheme":"Proxy scheme","numbers-to-template":"Phone Numbers To Template","numbers-to-template-required":"Phone Numbers To Template is required","numbers-to-template-hint":'Comma separated Phone Numbers, use ${metadataKey} for value from metadata, $[messageKey] for value from message body',"sms-message-template":"SMS message Template","sms-message-template-required":"SMS message Template is required","use-system-sms-settings":"Use system SMS provider settings","min-period-0-seconds-message":"Only 0 second minimum period is allowed.","max-pending-messages":"Maximum pending messages","max-pending-messages-required":"Maximum pending messages is required.","max-pending-messages-range":"Maximum pending messages should be in a range from 1 to 100000.","originator-types-filter":"Originator types filter","interval-seconds":"Interval in seconds","interval-seconds-required":"Interval is required.","int-range":"Value must not exceed the maximum integer limit (2147483648)","min-interval-seconds-message":"Only 1 second minimum interval is allowed.","output-timeseries-key-prefix":"Output time series key prefix","output-timeseries-key-prefix-required":"Output time series key prefix required.","separator-hint":'Press "Enter" to complete field input.',"select-details":"Select details","entity-details-id":"Id","entity-details-title":"Title","entity-details-country":"Country","entity-details-state":"State","entity-details-city":"City","entity-details-zip":"Zip","entity-details-address":"Address","entity-details-address2":"Address2","entity-details-additional_info":"Additional Info","entity-details-phone":"Phone","entity-details-email":"Email","email-sender":"Email sender","fields-to-check":"Fields to check","add-detail":"Add detail","check-all-keys-tooltip":"If enabled, checks the presence of all fields listed in the message and metadata field names within the incoming message and its metadata.","fields-to-check-hint":'Press "Enter" to complete field name input. Multiple field names supported.',"entity-details-list-empty":"At least one detail should be selected.","alarm-status":"Alarm status","alarm-required":"At least one alarm status should be selected.","no-entity-details-matching":"No entity details matching were found.","custom-table-name":"Custom table name","custom-table-name-required":"Table Name is required","custom-table-hint":"The table must be created in your Cassandra cluster and its name must start with the prefix 'cs_tb_' to avoid the data insertion to the common TB tables. Enter the table name here without the 'cs_tb_' prefix.","message-field":"Message field","message-field-required":"Message field is required.","table-col":"Table column","table-col-required":"Table column is required.","latitude-field-name":"Latitude field name","longitude-field-name":"Longitude field name","latitude-field-name-required":"Latitude field name is required.","longitude-field-name-required":"Longitude field name is required.","fetch-perimeter-info-from-metadata":"Fetch perimeter information from metadata","fetch-perimeter-info-from-metadata-tooltip":"If perimeter type is set to 'Polygon' the value of metadata field '{{perimeterKeyName}}' will be set as perimeter definition without additional parsing of the value. Otherwise, if perimeter type is set to 'Circle' the value of '{{perimeterKeyName}}' metadata field will be parsed to extract 'latitude', 'longitude', 'radius', 'radiusUnit' fields that uses for circle perimeter definition.","perimeter-key-name":"Perimeter key name","perimeter-key-name-hint":"Metadata field name that includes perimeter information.","perimeter-key-name-required":"Perimeter key name is required.","perimeter-circle":"Circle","perimeter-polygon":"Polygon","perimeter-type":"Perimeter type","circle-center-latitude":"Center latitude","circle-center-latitude-required":"Center latitude is required.","circle-center-longitude":"Center longitude","circle-center-longitude-required":"Center longitude is required.","range-unit-meter":"Meter","range-unit-kilometer":"Kilometer","range-unit-foot":"Foot","range-unit-mile":"Mile","range-unit-nautical-mile":"Nautical mile","range-units":"Range units","range-units-required":"Range units is required.",range:"Range","range-required":"Range is required.","polygon-definition":"Polygon definition","polygon-definition-required":"Polygon definition is required.","polygon-definition-hint":"Use the following format for manual definition of polygon: [[lat1,lon1],[lat2,lon2], ... ,[latN,lonN]].","min-inside-duration":"Minimal inside duration","min-inside-duration-value-required":"Minimal inside duration is required","min-inside-duration-time-unit":"Minimal inside duration time unit","min-outside-duration":"Minimal outside duration","min-outside-duration-value-required":"Minimal outside duration is required","min-outside-duration-time-unit":"Minimal outside duration time unit","tell-failure-if-absent":"Tell Failure","tell-failure-if-absent-hint":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"get-latest-value-with-ts":"Fetch timestamp for the latest telemetry values","get-latest-value-with-ts-hint":'If selected, the latest telemetry values will also include timestamp, e.g: "temp": "{"ts":1574329385897, "value":42}"',"ignore-null-strings":"Ignore null strings","ignore-null-strings-hint":"If selected rule node will ignore entity fields with empty value.","add-metadata-key-values-as-kafka-headers":"Add Message metadata key-value pairs to Kafka record headers","add-metadata-key-values-as-kafka-headers-hint":"If selected, key-value pairs from message metadata will be added to the outgoing records headers as byte arrays with predefined charset encoding.","charset-encoding":"Charset encoding","charset-encoding-required":"Charset encoding is required.","charset-us-ascii":"US-ASCII","charset-iso-8859-1":"ISO-8859-1","charset-utf-8":"UTF-8","charset-utf-16be":"UTF-16BE","charset-utf-16le":"UTF-16LE","charset-utf-16":"UTF-16","select-queue-hint":"The queue name can be selected from a drop-down list or add a custom name.","device-profile-node-hint":"Useful if you have duration or repeating conditions to ensure continuity of alarm state evaluation.","persist-alarm-rules":"Persist state of alarm rules","persist-alarm-rules-hint":"If enabled, the rule node will store the state of processing to the database.","fetch-alarm-rules":"Fetch state of alarm rules","fetch-alarm-rules-hint":"If enabled, the rule node will restore the state of processing on initialization and ensure that alarms are raised even after server restarts. Otherwise, the state will be restored when the first message from the device arrives.","input-value-key":"Input value key","input-value-key-required":"Input value key is required.","output-value-key":"Output value key","output-value-key-required":"Output value key is required.","number-of-digits-after-floating-point":"Number of digits after floating point","number-of-digits-after-floating-point-range":"Number of digits after floating point should be in a range from 0 to 15.","failure-if-delta-negative":"Tell Failure if delta is negative","failure-if-delta-negative-tooltip":"Rule node forces failure of message processing if delta value is negative.","use-caching":"Use caching","use-caching-tooltip":'Rule node will cache the value of "{{inputValueKey}}" that arrives from the incoming message to improve performance. Note that the cache will not be updated if you modify the "{{inputValueKey}}" value elsewhere.',"add-time-difference-between-readings":'Add the time difference between "{{inputValueKey}}" readings',"add-time-difference-between-readings-tooltip":'If enabled, the rule node will add the "{{periodValueKey}}" to the outbound message.',"period-value-key":"Period value key","period-value-key-required":"Period value key is required.","general-pattern-hint":"Use ${metadataKey} for value from metadata, $[messageKey] for value from message body.","alarm-severity-pattern-hint":'Use ${metadataKey} for value from metadata, $[messageKey] for value from message body. Alarm severity should be system (CRITICAL, MAJOR etc.)',"output-node-name-hint":"The rule node name corresponds to the relation type of the output message, and it is used to forward messages to other rule nodes in the caller rule chain.","skip-latest-persistence":"Skip latest persistence","skip-latest-persistence-hint":"Rule node will not update values for incoming keys for the latest time series data. Useful for highly loaded use-cases to decrease the pressure on the DB.","use-server-ts":"Use server ts","use-server-ts-hint":"Rule node will use the timestamp of message processing instead of the timestamp from the message. Useful for all sorts of sequential processing if you merge messages from multiple sources (devices, assets, etc).","kv-map-pattern-hint":"All input fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","kv-map-single-pattern-hint":"Input field support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","shared-scope":"Shared scope","server-scope":"Server scope","client-scope":"Client scope","attribute-type":"Attribute","constant-type":"Constant","time-series-type":"Time series","message-body-type":"Message","message-metadata-type":"Metadata","argument-tile":"Arguments","no-arguments-prompt":"No arguments configured","result-title":"Result","functions-field-input":"Functions","no-option-found":"No option found","argument-source-field-input":"Source","argument-source-field-input-required":"Argument source is required.","argument-key-field-input":"Key","argument-key-field-input-required":"Argument key is required.","constant-value-field-input":"Constant value","constant-value-field-input-required":"Constant value is required.","attribute-scope-field-input":"Attribute scope","attribute-scope-field-input-required":"Attribute scope os required.","default-value-field-input":"Default value","type-field-input":"Type","type-field-input-required":"Type is required.","key-field-input":"Key","add-entity-type":"Add entity type","add-device-profile":"Add device profile","key-field-input-required":"Key is required.","number-floating-point-field-input":"Number of digits after floating point","number-floating-point-field-input-hint":"Use 0 to convert result to integer","add-to-message-field-input":"Add to message","add-to-metadata-field-input":"Add to metadata","custom-expression-field-input":"Mathematical Expression","custom-expression-field-input-required":"Mathematical expression is required","custom-expression-field-input-hint":"Specify a mathematical expression to evaluate. Default expression demonstrates how to transform Fahrenheit to Celsius","retained-message":"Retained","attributes-mapping":"Attributes mapping","latest-telemetry-mapping":"Latest telemetry mapping","add-mapped-attribute-to":"Add mapped attributes to","add-mapped-latest-telemetry-to":"Add mapped latest telemetry to","add-mapped-fields-to":"Add mapped fields to","add-selected-details-to":"Add selected details to","clear-selected-types":"Clear selected types","clear-selected-details":"Clear selected details","clear-selected-fields":"Clear selected fields","clear-selected-keys":"Clear selected keys","geofence-configuration":"Geofence configuration","coordinate-field-names":"Coordinate field names","coordinate-field-hint":"Rule node tries to retrieve the specified fields from the message. If they are not present, it will look them up in the metadata.","presence-monitoring-strategy":"Presence monitoring strategy","presence-monitoring-strategy-on-first-message":"On first message","presence-monitoring-strategy-on-each-message":"On each message","presence-monitoring-strategy-on-first-message-hint":"Reports presence status 'Inside' or 'Outside' on the first message after the configured minimal duration has passed since previous presence status 'Entered' or 'Left' update.","presence-monitoring-strategy-on-each-message-hint":"Reports presence status 'Inside' or 'Outside' on each message after presence status 'Entered' or 'Left' update.","fetch-credentials-to":"Fetch credentials to","add-originator-attributes-to":"Add originator attributes to","originator-attributes":"Originator attributes","fetch-latest-telemetry-with-timestamp":"Fetch latest telemetry with timestamp","fetch-latest-telemetry-with-timestamp-tooltip":'If selected, latest telemetry values will be added to the outbound metadata with timestamp, e.g: "{{latestTsKeyName}}": "{"ts":1574329385897, "value":42}"',"tell-failure":"Tell failure if any of the attributes are missing","tell-failure-tooltip":'If at least one selected key doesn\'t exist the outbound message will report "Failure".',"created-time":"Created time","chip-help":"Press 'Enter' to complete {{inputName}} input. \nPress 'Backspace' to delete {{inputName}}. \nMultiple values supported.",detail:"detail","field-name":"field name","device-profile":"device profile","entity-type":"entity type","message-type":"message type","timeseries-key":"time series key",type:"Type","first-name":"First name","last-name":"Last name",label:"Label","originator-fields-mapping":"Originator fields mapping","add-mapped-originator-fields-to":"Add mapped originator fields to",fields:"Fields","skip-empty-fields":"Skip empty fields","skip-empty-fields-tooltip":"Fields with empty values will not be added to the output message/output metadata.","fetch-interval":"Fetch interval","fetch-strategy":"Fetch strategy","fetch-timeseries-from-to":"Fetch time series from {{startInterval}} {{startIntervalTimeUnit}} ago to {{endInterval}} {{endIntervalTimeUnit}} ago.","fetch-timeseries-from-to-invalid":'Fetch time series invalid ("Interval start" should be less than "Interval end").',"use-metadata-dynamic-interval-tooltip":"If selected, the rule node will use dynamic interval start and end based on the message and metadata patterns.","all-mode-hint":'If selected fetch mode "All" rule node will retrieve telemetry from the fetch interval with configurable query parameters.',"first-mode-hint":'If selected fetch mode "First" rule node will retrieve the closest telemetry to the fetch interval\'s start.',"last-mode-hint":'If selected fetch mode "Last" rule node will retrieve the closest telemetry to the fetch interval\'s end.',ascending:"Ascending",descending:"Descending",min:"Min",max:"Max",average:"Average",sum:"Sum",count:"Count",none:"None","last-level-relation-tooltip":"If selected, the rule node will search related entities only on the level set in the max relation level.","last-level-device-relation-tooltip":"If selected, the rule node will search related devices only on the level set in the max relation level.","data-to-fetch":"Data to fetch","mapping-of-customers":"Mapping of customer's","map-fields-required":"All mapping fields are required.",attributes:"Attributes","related-device-attributes":"Related device attributes","add-selected-attributes-to":"Add selected attributes to","device-profiles":"Device profiles","mapping-of-tenant":"Mapping of tenant's","add-attribute-key":"Add attribute key","message-template":"Message template","message-template-required":"Message template is required","use-system-slack-settings":"Use system slack settings","slack-api-token":"Slack API token","slack-api-token-required":"Slack API token is required","keys-mapping":"keys mapping","add-key":"Add key",recipients:"Recipients","message-subject-and-content":"Message subject and content","template-rules-hint":"Both input fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the message metadata.","originator-customer-desc":"Use customer of incoming message originator as new originator.","originator-tenant-desc":"Use current tenant as new originator.","originator-related-entity-desc":"Use related entity as new originator. Lookup based on configured relation type and direction.","originator-alarm-originator-desc":"Use alarm originator as new originator. Only if incoming message originator is alarm entity.","originator-entity-by-name-pattern-desc":"Use entity fetched from DB as new originator. Lookup based on entity type and specified name pattern.","email-from-template-hint":"Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","recipients-block-main-hint":"Comma-separated address list. All input fields support templatization. Use $[messageKey] to extract value from the message and ${metadataKey} to extract value from the metadata.","forward-msg-default-rule-chain":"Forward message to the originator's default rule chain","forward-msg-default-rule-chain-tooltip":"If enabled, message will be forwarded to the originator's default rule chain, or rule chain from configuration, if originator has no default rule chain defined in the entity profile.","exclude-zero-deltas":"Exclude zero deltas from outbound message","exclude-zero-deltas-hint":'If enabled, the "{{outputValueKey}}" output key will be added to the outbound message if its value is not zero.',"exclude-zero-deltas-time-difference-hint":'If enabled, the "{{outputValueKey}}" and "{{periodValueKey}}" output keys will be added to the outbound message only if the "{{outputValueKey}}" value is not zero.',"search-direction-from":"From originator to target entity","search-direction-to":"From target entity to originator","del-relation-direction-from":"From originator","del-relation-direction-to":"To originator","target-entity":"Target entity","function-configuration":"Function configuration","function-name":"Function name","function-name-required":"Function name is required.",qualifier:"Qualifier","qualifier-hint":'If the qualifier is not specified, the default qualifier "$LATEST" will be used.',"aws-credentials":"AWS Credentials","connection-timeout":"Connection timeout","connection-timeout-required":"Connection timeout is required.","connection-timeout-min":"Min connection timeout is 0.","connection-timeout-hint":"The amount of time to wait in seconds when initially establishing a connection before giving up and timing out. A value of 0 means infinity, and is not recommended.","request-timeout":"Request timeout","request-timeout-required":"Request timeout is required","request-timeout-min":"Min request timeout is 0","request-timeout-hint":"The amount of time to wait in seconds for the request to complete before giving up and timing out. A value of 0 means infinity, and is not recommended.","tell-failure-aws-lambda":"Tell Failure if AWS Lambda function execution raises exception","tell-failure-aws-lambda-hint":"Rule node forces failure of message processing if AWS Lambda function execution raises exception."},"key-val":{key:"Key",value:"Value","see-examples":"See examples.","remove-entry":"Remove entry","remove-mapping-entry":"Remove mapping entry","add-mapping-entry":"Add mapping","add-entry":"Add entry","copy-key-values-from":"Copy key-values from","delete-key-values":"Delete key-values","delete-key-values-from":"Delete key-values from","at-least-one-key-error":"At least one key should be selected.","unique-key-value-pair-error":"'{{keyText}}' must be different from the '{{valText}}'!"},"mail-body-type":{"plain-text":"Plain text",html:"HTML",dynamic:"Dynamic","use-body-type-template":"Use body type template","plain-text-description":"Simple, unformatted text with no special styling or formating.","html-text-description":"Allows you to use HTML tags for formatting, links and images in your mai body.","dynamic-text-description":"Allows to use Plain Text or HTML body type dynamically based on templatization feature.","after-template-evaluation-hint":"After template evaluation value should be true for HTML, and false for Plain text."}}},!0)}(e),Wp(Yp,"tb-rule-node-core-config-css")}static{this.ɵfac=function(e){return new(e||Xp)(t.ɵɵinject(K.TranslateService))}}static{this.ɵmod=t.ɵɵdefineNgModule({type:Xp})}static{this.ɵinj=t.ɵɵdefineInjector({imports:[$,S,Ci,np,bo,hs,Hp,Jp,oe]})}}e("RuleNodeCoreConfigModule",Xp),("undefined"==typeof ngJitMode||ngJitMode)&&t.ɵɵsetNgModuleScope(Xp,{declarations:[oe],imports:[$,S],exports:[Ci,np,bo,hs,Hp,Jp,oe]})}}}));//# sourceMappingURL=rulenode-core-config.js.map diff --git a/transport/coap/src/main/resources/tb-coap-transport.yml b/transport/coap/src/main/resources/tb-coap-transport.yml index 0c7ff4e43e..66ab703a54 100644 --- a/transport/coap/src/main/resources/tb-coap-transport.yml +++ b/transport/coap/src/main/resources/tb-coap-transport.yml @@ -256,9 +256,7 @@ coap: # Queue configuration parameters queue: - # kafka (Apache Kafka). The following queue types are deprecated and will no longer be supported in ThingsBoard 4.0: - # aws-sqs (AWS SQS), pubsub (PubSub), service-bus (Azure Service Bus), rabbitmq (RabbitMQ) - type: "${TB_QUEUE_TYPE:kafka}" + type: "${TB_QUEUE_TYPE:kafka}" # kafka (Apache Kafka) prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka). kafka: # Kafka Bootstrap Servers @@ -333,94 +331,6 @@ queue: notifications: "${TB_QUEUE_KAFKA_NOTIFICATIONS_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:1;min.insync.replicas:1}" # Kafka properties for Housekeeper tasks topic housekeeper: "${TB_QUEUE_KAFKA_HOUSEKEEPER_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:10;min.insync.replicas:1}" - aws_sqs: - # Use the default credentials provider for AWS SQS - use_default_credential_provider_chain: "${TB_QUEUE_AWS_SQS_USE_DEFAULT_CREDENTIAL_PROVIDER_CHAIN:false}" - # Access key ID from AWS IAM user - access_key_id: "${TB_QUEUE_AWS_SQS_ACCESS_KEY_ID:YOUR_KEY}" - # Secret access key from AWS IAM user - secret_access_key: "${TB_QUEUE_AWS_SQS_SECRET_ACCESS_KEY:YOUR_SECRET}" - # Region from AWS account - region: "${TB_QUEUE_AWS_SQS_REGION:YOUR_REGION}" - # Number of threads per each AWS SQS queue in consumer - threads_per_topic: "${TB_QUEUE_AWS_SQS_THREADS_PER_TOPIC:1}" - # Thread pool size for aws_sqs queue producer executor provider. Default value equals to AmazonSQSAsyncClient.DEFAULT_THREAD_POOL_SIZE - producer_thread_pool_size: "${TB_QUEUE_AWS_SQS_EXECUTOR_THREAD_POOL_SIZE:50}" - queue-properties: - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - rule-engine: "${TB_QUEUE_AWS_SQS_RE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - core: "${TB_QUEUE_AWS_SQS_CORE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - transport-api: "${TB_QUEUE_AWS_SQS_TA_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - notifications: "${TB_QUEUE_AWS_SQS_NOTIFICATIONS_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - pubsub: - # Project ID from Google Cloud - project_id: "${TB_QUEUE_PUBSUB_PROJECT_ID:YOUR_PROJECT_ID}" - # API Credentials in JSON format - service_account: "${TB_QUEUE_PUBSUB_SERVICE_ACCOUNT:YOUR_SERVICE_ACCOUNT}" - # Message size for PubSub queue. Value in bytes - max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}" - # Number of messages per consumer - max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}" - # Thread pool size for pubsub queue executor provider. If not set - default pubsub executor provider value will be used (5 * number of available processors) - executor_thread_pool_size: "${TB_QUEUE_PUBSUB_EXECUTOR_THREAD_POOL_SIZE:0}" - queue-properties: - # Pub/Sub properties for Rule Engine subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - rule-engine: "${TB_QUEUE_PUBSUB_RE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Core subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - core: "${TB_QUEUE_PUBSUB_CORE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Transport API subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - transport-api: "${TB_QUEUE_PUBSUB_TA_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Version Control subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - notifications: "${TB_QUEUE_PUBSUB_NOTIFICATIONS_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - service_bus: - # Azure namespace - namespace_name: "${TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME:YOUR_NAMESPACE_NAME}" - # Azure Service Bus Shared Access Signatures key name - sas_key_name: "${TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME:YOUR_SAS_KEY_NAME}" - # Azure Service Bus Shared Access Signatures key - sas_key: "${TB_QUEUE_SERVICE_BUS_SAS_KEY:YOUR_SAS_KEY}" - # Number of messages per a consumer - max_messages: "${TB_QUEUE_SERVICE_BUS_MAX_MESSAGES:1000}" - queue-properties: - # Azure Service Bus properties for Rule Engine queues - rule-engine: "${TB_QUEUE_SERVICE_BUS_RE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Core queues - core: "${TB_QUEUE_SERVICE_BUS_CORE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Transport Api queues - transport-api: "${TB_QUEUE_SERVICE_BUS_TA_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Notification queues - notifications: "${TB_QUEUE_SERVICE_BUS_NOTIFICATIONS_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - rabbitmq: - # By default empty - exchange_name: "${TB_QUEUE_RABBIT_MQ_EXCHANGE_NAME:}" - # RabbitMQ host used to establish connection - host: "${TB_QUEUE_RABBIT_MQ_HOST:localhost}" - # RabbitMQ host used to establish a connection - port: "${TB_QUEUE_RABBIT_MQ_PORT:5672}" - # Virtual hosts provide logical grouping and separation of resources - virtual_host: "${TB_QUEUE_RABBIT_MQ_VIRTUAL_HOST:/}" - # Username for RabbitMQ user account - username: "${TB_QUEUE_RABBIT_MQ_USERNAME:YOUR_USERNAME}" - # User password for RabbitMQ user account - password: "${TB_QUEUE_RABBIT_MQ_PASSWORD:YOUR_PASSWORD}" - # Network connection between clients and RabbitMQ nodes can fail. RabbitMQ Java client supports automatic recovery of connections and topology (queues, exchanges, bindings, and consumers) - automatic_recovery_enabled: "${TB_QUEUE_RABBIT_MQ_AUTOMATIC_RECOVERY_ENABLED:false}" - # The connection timeout for the RabbitMQ connection factory - connection_timeout: "${TB_QUEUE_RABBIT_MQ_CONNECTION_TIMEOUT:60000}" - # RabbitMQ has a timeout for connection handshake. When clients run in heavily constrained environments, it may be necessary to increase the timeout - handshake_timeout: "${TB_QUEUE_RABBIT_MQ_HANDSHAKE_TIMEOUT:10000}" - queue-properties: - # RabbitMQ properties for Rule Engine queues - rule-engine: "${TB_QUEUE_RABBIT_MQ_RE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Core queues - core: "${TB_QUEUE_RABBIT_MQ_CORE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Transport API queues - transport-api: "${TB_QUEUE_RABBIT_MQ_TA_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Notification queues - notifications: "${TB_QUEUE_RABBIT_MQ_NOTIFICATIONS_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: @@ -439,7 +349,7 @@ queue: # Interval in milliseconds to poll api response from transport microservices response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" core: - # Default topic name of Kafka, RabbitMQ, etc. queue + # Default topic name topic: "${TB_QUEUE_CORE_TOPIC:tb_core}" # Interval in milliseconds to poll messages by Core microservices poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" @@ -447,7 +357,7 @@ queue: partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" # Timeout for processing a message pack by Core microservices pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" - # Default topic name for queue Kafka, RabbitMQ, etc. + # Default topic name usage-stats-topic: "${TB_QUEUE_US_TOPIC:tb_usage_stats}" stats: # Enable/disable statistics for Core microservices diff --git a/transport/http/src/main/resources/tb-http-transport.yml b/transport/http/src/main/resources/tb-http-transport.yml index 3c28c6ddf6..be91e4fe67 100644 --- a/transport/http/src/main/resources/tb-http-transport.yml +++ b/transport/http/src/main/resources/tb-http-transport.yml @@ -202,9 +202,7 @@ transport: # Queue configuration parameters queue: - # kafka (Apache Kafka). The following queue types are deprecated and will no longer be supported in ThingsBoard 4.0: - # aws-sqs (AWS SQS), pubsub (PubSub), service-bus (Azure Service Bus), rabbitmq (RabbitMQ) - type: "${TB_QUEUE_TYPE:kafka}" + type: "${TB_QUEUE_TYPE:kafka}" # kafka (Apache Kafka) prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka) . kafka: # Kafka Bootstrap Servers @@ -278,95 +276,6 @@ queue: notifications: "${TB_QUEUE_KAFKA_NOTIFICATIONS_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:1;min.insync.replicas:1}" # Kafka properties for Housekeeper tasks topic housekeeper: "${TB_QUEUE_KAFKA_HOUSEKEEPER_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:10;min.insync.replicas:1}" - aws_sqs: - # Use default credentials provider for AWS SQS - use_default_credential_provider_chain: "${TB_QUEUE_AWS_SQS_USE_DEFAULT_CREDENTIAL_PROVIDER_CHAIN:false}" - # Access key ID from AWS IAM user - access_key_id: "${TB_QUEUE_AWS_SQS_ACCESS_KEY_ID:YOUR_KEY}" - # Secret access key from AWS IAM user - secret_access_key: "${TB_QUEUE_AWS_SQS_SECRET_ACCESS_KEY:YOUR_SECRET}" - # Region from AWS account - region: "${TB_QUEUE_AWS_SQS_REGION:YOUR_REGION}" - # Number of threads per each AWS SQS queue in consumer - threads_per_topic: "${TB_QUEUE_AWS_SQS_THREADS_PER_TOPIC:1}" - # Thread pool size for aws_sqs queue producer executor provider. Default value equals to AmazonSQSAsyncClient.DEFAULT_THREAD_POOL_SIZE - producer_thread_pool_size: "${TB_QUEUE_AWS_SQS_EXECUTOR_THREAD_POOL_SIZE:50}" - queue-properties: - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - rule-engine: "${TB_QUEUE_AWS_SQS_RE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - core: "${TB_QUEUE_AWS_SQS_CORE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - transport-api: "${TB_QUEUE_AWS_SQS_TA_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - notifications: "${TB_QUEUE_AWS_SQS_NOTIFICATIONS_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - pubsub: - # Project ID from Google Cloud - project_id: "${TB_QUEUE_PUBSUB_PROJECT_ID:YOUR_PROJECT_ID}" - # API Credentials in JSON format - service_account: "${TB_QUEUE_PUBSUB_SERVICE_ACCOUNT:YOUR_SERVICE_ACCOUNT}" - # Message size for PubSub queue.Value in bytes - max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}" - # Number of messages per a consumer - max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}" - # Thread pool size for pubsub queue executor provider. If not set - default pubsub executor provider value will be used (5 * number of available processors) - executor_thread_pool_size: "${TB_QUEUE_PUBSUB_EXECUTOR_THREAD_POOL_SIZE:0}" - queue-properties: - # Pub/Sub properties for Rule Engine subscribers, messages which will commit after ackDeadlineInSec period can be consume again - rule-engine: "${TB_QUEUE_PUBSUB_RE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Core subscribers, messages which will commit after ackDeadlineInSec period can be consume again - core: "${TB_QUEUE_PUBSUB_CORE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Transport API subscribers, messages which will commit after ackDeadlineInSec period can be consume again - transport-api: "${TB_QUEUE_PUBSUB_TA_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Version Control subscribers, messages which will commit after ackDeadlineInSec period can be consume again - notifications: "${TB_QUEUE_PUBSUB_NOTIFICATIONS_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - service_bus: - # Azure namespace - namespace_name: "${TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME:YOUR_NAMESPACE_NAME}" - # Azure Service Bus Shared Access Signatures key name - sas_key_name: "${TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME:YOUR_SAS_KEY_NAME}" - # Azure Service Bus Shared Access Signatures key - sas_key: "${TB_QUEUE_SERVICE_BUS_SAS_KEY:YOUR_SAS_KEY}" - # Number of messages per a consumer - max_messages: "${TB_QUEUE_SERVICE_BUS_MAX_MESSAGES:1000}" - queue-properties: - # Azure Service Bus properties for Rule Engine queues - rule-engine: "${TB_QUEUE_SERVICE_BUS_RE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Core queues - core: "${TB_QUEUE_SERVICE_BUS_CORE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Transport Api queues - transport-api: "${TB_QUEUE_SERVICE_BUS_TA_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Notification queues - notifications: "${TB_QUEUE_SERVICE_BUS_NOTIFICATIONS_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - rabbitmq: - # By default empty - exchange_name: "${TB_QUEUE_RABBIT_MQ_EXCHANGE_NAME:}" - # RabbitMQ host used to establish connection - host: "${TB_QUEUE_RABBIT_MQ_HOST:localhost}" - # RabbitMQ host used to establish a connection - port: "${TB_QUEUE_RABBIT_MQ_PORT:5672}" - # Virtual hosts provide logical grouping and separation of resources - virtual_host: "${TB_QUEUE_RABBIT_MQ_VIRTUAL_HOST:/}" - # Username for RabbitMQ user account - username: "${TB_QUEUE_RABBIT_MQ_USERNAME:YOUR_USERNAME}" - # User password for RabbitMQ user account - password: "${TB_QUEUE_RABBIT_MQ_PASSWORD:YOUR_PASSWORD}" - # Network connection between clients and RabbitMQ nodes can fail. RabbitMQ Java client supports automatic recovery of connections and topology (queues, exchanges, bindings, and consumers) - automatic_recovery_enabled: "${TB_QUEUE_RABBIT_MQ_AUTOMATIC_RECOVERY_ENABLED:false}" - # The connection timeout for the RabbitMQ connection factory - connection_timeout: "${TB_QUEUE_RABBIT_MQ_CONNECTION_TIMEOUT:60000}" - # RabbitMQ has a timeout for connection handshake. When clients run in heavily constrained environments, it may be necessary to increase the timeout - handshake_timeout: "${TB_QUEUE_RABBIT_MQ_HANDSHAKE_TIMEOUT:10000}" - queue-properties: - # RabbitMQ properties for Rule Engine queues - rule-engine: "${TB_QUEUE_RABBIT_MQ_RE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Core queues - core: "${TB_QUEUE_RABBIT_MQ_CORE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Transport API queues - transport-api: "${TB_QUEUE_RABBIT_MQ_TA_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Notification queues - notifications: "${TB_QUEUE_RABBIT_MQ_NOTIFICATIONS_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: @@ -385,7 +294,7 @@ queue: # Interval in milliseconds to poll api response from transport microservices response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" core: - # Default topic name of Kafka, RabbitMQ, etc. queue + # Default topic name topic: "${TB_QUEUE_CORE_TOPIC:tb_core}" # Interval in milliseconds to poll messages by Core microservices poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" @@ -393,7 +302,7 @@ queue: partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" # Timeout for processing a message pack by Core microservices pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" - # Default topic name for queue Kafka, RabbitMQ, etc. + # Default topic name usage-stats-topic: "${TB_QUEUE_US_TOPIC:tb_usage_stats}" stats: # Enable/disable statistics for Core microservices diff --git a/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml b/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml index bafe77ee92..7bdd68baf1 100644 --- a/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml +++ b/transport/lwm2m/src/main/resources/tb-lwm2m-transport.yml @@ -302,9 +302,7 @@ transport: # Queue configuration properties queue: - # kafka (Apache Kafka). The following queue types are deprecated and will no longer be supported in ThingsBoard 4.0: - # aws-sqs (AWS SQS), pubsub (PubSub), service-bus (Azure Service Bus), rabbitmq (RabbitMQ) - type: "${TB_QUEUE_TYPE:kafka}" + type: "${TB_QUEUE_TYPE:kafka}" # kafka (Apache Kafka) prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka). kafka: # Kafka Bootstrap Servers @@ -379,94 +377,6 @@ queue: notifications: "${TB_QUEUE_KAFKA_NOTIFICATIONS_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:1;min.insync.replicas:1}" # Kafka properties for Housekeeper tasks topic housekeeper: "${TB_QUEUE_KAFKA_HOUSEKEEPER_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:10;min.insync.replicas:1}" - aws_sqs: - # Use the default credentials provider for AWS SQS - use_default_credential_provider_chain: "${TB_QUEUE_AWS_SQS_USE_DEFAULT_CREDENTIAL_PROVIDER_CHAIN:false}" - # Access key ID from AWS IAM user - access_key_id: "${TB_QUEUE_AWS_SQS_ACCESS_KEY_ID:YOUR_KEY}" - # Secret access key from AWS IAM user - secret_access_key: "${TB_QUEUE_AWS_SQS_SECRET_ACCESS_KEY:YOUR_SECRET}" - # Region from AWS account - region: "${TB_QUEUE_AWS_SQS_REGION:YOUR_REGION}" - # Number of threads per each AWS SQS queue in consumer - threads_per_topic: "${TB_QUEUE_AWS_SQS_THREADS_PER_TOPIC:1}" - # Thread pool size for aws_sqs queue producer executor provider. Default value equals to AmazonSQSAsyncClient.DEFAULT_THREAD_POOL_SIZE - producer_thread_pool_size: "${TB_QUEUE_AWS_SQS_EXECUTOR_THREAD_POOL_SIZE:50}" - queue-properties: - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - rule-engine: "${TB_QUEUE_AWS_SQS_RE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - core: "${TB_QUEUE_AWS_SQS_CORE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - transport-api: "${TB_QUEUE_AWS_SQS_TA_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - notifications: "${TB_QUEUE_AWS_SQS_NOTIFICATIONS_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - pubsub: - # Project ID from Google Cloud - project_id: "${TB_QUEUE_PUBSUB_PROJECT_ID:YOUR_PROJECT_ID}" - # API Credentials in JSON format - service_account: "${TB_QUEUE_PUBSUB_SERVICE_ACCOUNT:YOUR_SERVICE_ACCOUNT}" - # Message size for PubSub queue. Value in bytes - max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}" - # Number of messages per consumer - max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}" - # Thread pool size for pubsub queue executor provider. If not set - default pubsub executor provider value will be used (5 * number of available processors) - executor_thread_pool_size: "${TB_QUEUE_PUBSUB_EXECUTOR_THREAD_POOL_SIZE:0}" - queue-properties: - # Pub/Sub properties for Rule Engine subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - rule-engine: "${TB_QUEUE_PUBSUB_RE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Core subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - core: "${TB_QUEUE_PUBSUB_CORE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Transport API subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - transport-api: "${TB_QUEUE_PUBSUB_TA_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Version Control subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - notifications: "${TB_QUEUE_PUBSUB_NOTIFICATIONS_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - service_bus: - # Azure namespace - namespace_name: "${TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME:YOUR_NAMESPACE_NAME}" - # Azure Service Bus Shared Access Signatures key name - sas_key_name: "${TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME:YOUR_SAS_KEY_NAME}" - # Azure Service Bus Shared Access Signatures key - sas_key: "${TB_QUEUE_SERVICE_BUS_SAS_KEY:YOUR_SAS_KEY}" - # Number of messages per a consumer - max_messages: "${TB_QUEUE_SERVICE_BUS_MAX_MESSAGES:1000}" - queue-properties: - # Azure Service Bus properties for Rule Engine queues - rule-engine: "${TB_QUEUE_SERVICE_BUS_RE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Core queues - core: "${TB_QUEUE_SERVICE_BUS_CORE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Transport Api queues - transport-api: "${TB_QUEUE_SERVICE_BUS_TA_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Notification queues - notifications: "${TB_QUEUE_SERVICE_BUS_NOTIFICATIONS_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - rabbitmq: - # By default empty - exchange_name: "${TB_QUEUE_RABBIT_MQ_EXCHANGE_NAME:}" - # RabbitMQ host used to establish connection - host: "${TB_QUEUE_RABBIT_MQ_HOST:localhost}" - # RabbitMQ host used to establish a connection - port: "${TB_QUEUE_RABBIT_MQ_PORT:5672}" - # Virtual hosts provide logical grouping and separation of resources - virtual_host: "${TB_QUEUE_RABBIT_MQ_VIRTUAL_HOST:/}" - # Username for RabbitMQ user account - username: "${TB_QUEUE_RABBIT_MQ_USERNAME:YOUR_USERNAME}" - # User password for RabbitMQ user account - password: "${TB_QUEUE_RABBIT_MQ_PASSWORD:YOUR_PASSWORD}" - # Network connection between clients and RabbitMQ nodes can fail. RabbitMQ Java client supports automatic recovery of connections and topology (queues, exchanges, bindings, and consumers) - automatic_recovery_enabled: "${TB_QUEUE_RABBIT_MQ_AUTOMATIC_RECOVERY_ENABLED:false}" - # The connection timeout for the RabbitMQ connection factory - connection_timeout: "${TB_QUEUE_RABBIT_MQ_CONNECTION_TIMEOUT:60000}" - # RabbitMQ has a timeout for connection handshake. When clients run in heavily constrained environments, it may be necessary to increase the timeout - handshake_timeout: "${TB_QUEUE_RABBIT_MQ_HANDSHAKE_TIMEOUT:10000}" - queue-properties: - # RabbitMQ properties for Rule Engine queues - rule-engine: "${TB_QUEUE_RABBIT_MQ_RE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Core queues - core: "${TB_QUEUE_RABBIT_MQ_CORE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Transport API queues - transport-api: "${TB_QUEUE_RABBIT_MQ_TA_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Notification queues - notifications: "${TB_QUEUE_RABBIT_MQ_NOTIFICATIONS_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: @@ -485,7 +395,7 @@ queue: # Interval in milliseconds to poll api response from transport microservices response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" core: - # Default topic name of Kafka, RabbitMQ, etc. queue + # Default topic name topic: "${TB_QUEUE_CORE_TOPIC:tb_core}" # Interval in milliseconds to poll messages by Core microservices poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" diff --git a/transport/mqtt/src/main/resources/tb-mqtt-transport.yml b/transport/mqtt/src/main/resources/tb-mqtt-transport.yml index 51a2c173a7..8d9a60a319 100644 --- a/transport/mqtt/src/main/resources/tb-mqtt-transport.yml +++ b/transport/mqtt/src/main/resources/tb-mqtt-transport.yml @@ -235,9 +235,7 @@ transport: # Queue configuration parameters queue: - # kafka (Apache Kafka). The following queue types are deprecated and will no longer be supported in ThingsBoard 4.0: - # aws-sqs (AWS SQS), pubsub (PubSub), service-bus (Azure Service Bus), rabbitmq (RabbitMQ) - type: "${TB_QUEUE_TYPE:kafka}" + type: "${TB_QUEUE_TYPE:kafka}" # kafka (Apache Kafka) prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka). kafka: # Kafka Bootstrap Servers @@ -312,94 +310,6 @@ queue: notifications: "${TB_QUEUE_KAFKA_NOTIFICATIONS_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:1;min.insync.replicas:1}" # Kafka properties for Housekeeper tasks topic housekeeper: "${TB_QUEUE_KAFKA_HOUSEKEEPER_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:52428800;retention.bytes:1048576000;partitions:10;min.insync.replicas:1}" - aws_sqs: - # Use the default credentials provider for AWS SQS - use_default_credential_provider_chain: "${TB_QUEUE_AWS_SQS_USE_DEFAULT_CREDENTIAL_PROVIDER_CHAIN:false}" - # Access key ID from AWS IAM user - access_key_id: "${TB_QUEUE_AWS_SQS_ACCESS_KEY_ID:YOUR_KEY}" - # Secret access key from AWS IAM user - secret_access_key: "${TB_QUEUE_AWS_SQS_SECRET_ACCESS_KEY:YOUR_SECRET}" - # Region from AWS account - region: "${TB_QUEUE_AWS_SQS_REGION:YOUR_REGION}" - # Number of threads per each AWS SQS queue in consumer - threads_per_topic: "${TB_QUEUE_AWS_SQS_THREADS_PER_TOPIC:1}" - # Thread pool size for aws_sqs queue producer executor provider. Default value equals to AmazonSQSAsyncClient.DEFAULT_THREAD_POOL_SIZE - producer_thread_pool_size: "${TB_QUEUE_AWS_SQS_EXECUTOR_THREAD_POOL_SIZE:50}" - queue-properties: - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - rule-engine: "${TB_QUEUE_AWS_SQS_RE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - core: "${TB_QUEUE_AWS_SQS_CORE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - transport-api: "${TB_QUEUE_AWS_SQS_TA_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - notifications: "${TB_QUEUE_AWS_SQS_NOTIFICATIONS_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - pubsub: - # Project ID from Google Cloud - project_id: "${TB_QUEUE_PUBSUB_PROJECT_ID:YOUR_PROJECT_ID}" - # API Credentials in JSON format - service_account: "${TB_QUEUE_PUBSUB_SERVICE_ACCOUNT:YOUR_SERVICE_ACCOUNT}" - # Message size for PubSub queue.Value in bytes - max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}" - # Number of messages per consumer - max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}" - # Thread pool size for pubsub queue executor provider. If not set - default pubsub executor provider value will be used (5 * number of available processors) - executor_thread_pool_size: "${TB_QUEUE_PUBSUB_EXECUTOR_THREAD_POOL_SIZE:0}" - queue-properties: - # Pub/Sub properties for Rule Engine subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - rule-engine: "${TB_QUEUE_PUBSUB_RE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Core subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - core: "${TB_QUEUE_PUBSUB_CORE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Transport API subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - transport-api: "${TB_QUEUE_PUBSUB_TA_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Version Control subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - notifications: "${TB_QUEUE_PUBSUB_NOTIFICATIONS_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - service_bus: - # Azure namespace - namespace_name: "${TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME:YOUR_NAMESPACE_NAME}" - # Azure Service Bus Shared Access Signatures key name - sas_key_name: "${TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME:YOUR_SAS_KEY_NAME}" - # Azure Service Bus Shared Access Signatures key - sas_key: "${TB_QUEUE_SERVICE_BUS_SAS_KEY:YOUR_SAS_KEY}" - # Number of messages per a consumer - max_messages: "${TB_QUEUE_SERVICE_BUS_MAX_MESSAGES:1000}" - queue-properties: - # Azure Service Bus properties for Rule Engine queues - rule-engine: "${TB_QUEUE_SERVICE_BUS_RE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Core queues - core: "${TB_QUEUE_SERVICE_BUS_CORE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Transport Api queues - transport-api: "${TB_QUEUE_SERVICE_BUS_TA_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Notification queues - notifications: "${TB_QUEUE_SERVICE_BUS_NOTIFICATIONS_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - rabbitmq: - # By default empty - exchange_name: "${TB_QUEUE_RABBIT_MQ_EXCHANGE_NAME:}" - # RabbitMQ host used to establish connection - host: "${TB_QUEUE_RABBIT_MQ_HOST:localhost}" - # RabbitMQ host used to establish a connection - port: "${TB_QUEUE_RABBIT_MQ_PORT:5672}" - # Virtual hosts provide logical grouping and separation of resources - virtual_host: "${TB_QUEUE_RABBIT_MQ_VIRTUAL_HOST:/}" - # Username for RabbitMQ user account - username: "${TB_QUEUE_RABBIT_MQ_USERNAME:YOUR_USERNAME}" - # User password for RabbitMQ user account - password: "${TB_QUEUE_RABBIT_MQ_PASSWORD:YOUR_PASSWORD}" - # Network connection between clients and RabbitMQ nodes can fail. RabbitMQ Java client supports automatic recovery of connections and topology (queues, exchanges, bindings, and consumers) - automatic_recovery_enabled: "${TB_QUEUE_RABBIT_MQ_AUTOMATIC_RECOVERY_ENABLED:false}" - # The connection timeout for the RabbitMQ connection factory - connection_timeout: "${TB_QUEUE_RABBIT_MQ_CONNECTION_TIMEOUT:60000}" - # RabbitMQ has a timeout for connection handshake. When clients run in heavily constrained environments, it may be necessary to increase the timeout - handshake_timeout: "${TB_QUEUE_RABBIT_MQ_HANDSHAKE_TIMEOUT:10000}" - queue-properties: - # RabbitMQ properties for Rule Engine queues - rule-engine: "${TB_QUEUE_RABBIT_MQ_RE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Core queues - core: "${TB_QUEUE_RABBIT_MQ_CORE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Transport API queues - transport-api: "${TB_QUEUE_RABBIT_MQ_TA_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Notification queues - notifications: "${TB_QUEUE_RABBIT_MQ_NOTIFICATIONS_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: @@ -418,7 +328,7 @@ queue: # Interval in milliseconds to poll api response from transport microservices response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" core: - # Default topic name of Kafka, RabbitMQ, etc. queue + # Default topic name topic: "${TB_QUEUE_CORE_TOPIC:tb_core}" # Interval in milliseconds to poll messages by Core microservices poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" @@ -426,7 +336,7 @@ queue: partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" # Timeout for processing a message pack by Core microservices pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" - # Default topic name for queue Kafka, RabbitMQ, etc. + # Default topic name usage-stats-topic: "${TB_QUEUE_US_TOPIC:tb_usage_stats}" stats: # Enable/disable statistics for Core microservices diff --git a/transport/snmp/src/main/resources/tb-snmp-transport.yml b/transport/snmp/src/main/resources/tb-snmp-transport.yml index df222fe09f..4c11bd0018 100644 --- a/transport/snmp/src/main/resources/tb-snmp-transport.yml +++ b/transport/snmp/src/main/resources/tb-snmp-transport.yml @@ -181,9 +181,7 @@ transport: # Queue configuration parameters queue: - # kafka (Apache Kafka). The following queue types are deprecated and will no longer be supported in ThingsBoard 4.0: - # aws-sqs (AWS SQS), pubsub (PubSub), service-bus (Azure Service Bus), rabbitmq (RabbitMQ) - type: "${TB_QUEUE_TYPE:kafka}" + type: "${TB_QUEUE_TYPE:kafka}" # kafka (Apache Kafka) prefix: "${TB_QUEUE_PREFIX:}" # Global queue prefix. If specified, prefix is added before default topic name: 'prefix.default_topic_name'. Prefix is applied to all topics (and consumer groups for kafka). kafka: # Kafka Bootstrap Servers @@ -265,94 +263,6 @@ queue: print-interval-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_MIN_PRINT_INTERVAL_MS:60000}" # Time to wait for the stats-loading requests to Kafka to finis kafka-response-timeout-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_RESPONSE_TIMEOUT_MS:1000}" - aws_sqs: - # Use the default credentials provider for AWS SQS - use_default_credential_provider_chain: "${TB_QUEUE_AWS_SQS_USE_DEFAULT_CREDENTIAL_PROVIDER_CHAIN:false}" - # Access key ID from AWS IAM user - access_key_id: "${TB_QUEUE_AWS_SQS_ACCESS_KEY_ID:YOUR_KEY}" - # Secret access key from AWS IAM user - secret_access_key: "${TB_QUEUE_AWS_SQS_SECRET_ACCESS_KEY:YOUR_SECRET}" - # Region from AWS account - region: "${TB_QUEUE_AWS_SQS_REGION:YOUR_REGION}" - # Number of threads per each AWS SQS queue in consumer - threads_per_topic: "${TB_QUEUE_AWS_SQS_THREADS_PER_TOPIC:1}" - # Thread pool size for aws_sqs queue producer executor provider. Default value equals to AmazonSQSAsyncClient.DEFAULT_THREAD_POOL_SIZE - producer_thread_pool_size: "${TB_QUEUE_AWS_SQS_EXECUTOR_THREAD_POOL_SIZE:50}" - queue-properties: - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - rule-engine: "${TB_QUEUE_AWS_SQS_RE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - core: "${TB_QUEUE_AWS_SQS_CORE_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - transport-api: "${TB_QUEUE_AWS_SQS_TA_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - # AWS SQS queue properties. VisibilityTimeout in seconds;MaximumMessageSize in bytes;MessageRetentionPeriod in seconds - notifications: "${TB_QUEUE_AWS_SQS_NOTIFICATIONS_QUEUE_PROPERTIES:VisibilityTimeout:30;MaximumMessageSize:262144;MessageRetentionPeriod:604800}" - pubsub: - # Project ID from Google Cloud - project_id: "${TB_QUEUE_PUBSUB_PROJECT_ID:YOUR_PROJECT_ID}" - # API Credentials in JSON format - service_account: "${TB_QUEUE_PUBSUB_SERVICE_ACCOUNT:YOUR_SERVICE_ACCOUNT}" - # Message size for PubSub queue. Value in bytes - max_msg_size: "${TB_QUEUE_PUBSUB_MAX_MSG_SIZE:1048576}" - # Number of messages per consumer - max_messages: "${TB_QUEUE_PUBSUB_MAX_MESSAGES:1000}" - # Thread pool size for pubsub queue executor provider. If not set - default pubsub executor provider value will be used (5 * number of available processors) - executor_thread_pool_size: "${TB_QUEUE_PUBSUB_EXECUTOR_THREAD_POOL_SIZE:0}" - queue-properties: - # Pub/Sub properties for Rule Engine subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - rule-engine: "${TB_QUEUE_PUBSUB_RE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Core subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - core: "${TB_QUEUE_PUBSUB_CORE_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Transport API subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - transport-api: "${TB_QUEUE_PUBSUB_TA_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - # Pub/Sub properties for Version Control subscribers, messages which will commit after ackDeadlineInSec period can be consumed again - notifications: "${TB_QUEUE_PUBSUB_NOTIFICATIONS_QUEUE_PROPERTIES:ackDeadlineInSec:30;messageRetentionInSec:604800}" - service_bus: - # Azure namespace - namespace_name: "${TB_QUEUE_SERVICE_BUS_NAMESPACE_NAME:YOUR_NAMESPACE_NAME}" - # Azure Service Bus Shared Access Signatures key name - sas_key_name: "${TB_QUEUE_SERVICE_BUS_SAS_KEY_NAME:YOUR_SAS_KEY_NAME}" - # Azure Service Bus Shared Access Signatures key - sas_key: "${TB_QUEUE_SERVICE_BUS_SAS_KEY:YOUR_SAS_KEY}" - # Number of messages per a consumer - max_messages: "${TB_QUEUE_SERVICE_BUS_MAX_MESSAGES:1000}" - queue-properties: - # Azure Service Bus properties for Rule Engine queues - rule-engine: "${TB_QUEUE_SERVICE_BUS_RE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Core queues - core: "${TB_QUEUE_SERVICE_BUS_CORE_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Transport Api queues - transport-api: "${TB_QUEUE_SERVICE_BUS_TA_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - # Azure Service Bus properties for Notification queues - notifications: "${TB_QUEUE_SERVICE_BUS_NOTIFICATIONS_QUEUE_PROPERTIES:lockDurationInSec:30;maxSizeInMb:1024;messageTimeToLiveInSec:604800}" - rabbitmq: - # By default empty - exchange_name: "${TB_QUEUE_RABBIT_MQ_EXCHANGE_NAME:}" - # RabbitMQ host used to establish connection - host: "${TB_QUEUE_RABBIT_MQ_HOST:localhost}" - # RabbitMQ host used to establish a connection - port: "${TB_QUEUE_RABBIT_MQ_PORT:5672}" - # Virtual hosts provide logical grouping and separation of resources - virtual_host: "${TB_QUEUE_RABBIT_MQ_VIRTUAL_HOST:/}" - # Username for RabbitMQ user account - username: "${TB_QUEUE_RABBIT_MQ_USERNAME:YOUR_USERNAME}" - # User password for RabbitMQ user account - password: "${TB_QUEUE_RABBIT_MQ_PASSWORD:YOUR_PASSWORD}" - # Network connection between clients and RabbitMQ nodes can fail. RabbitMQ Java client supports automatic recovery of connections and topology (queues, exchanges, bindings, and consumers) - automatic_recovery_enabled: "${TB_QUEUE_RABBIT_MQ_AUTOMATIC_RECOVERY_ENABLED:false}" - # The connection timeout for the RabbitMQ connection factory - connection_timeout: "${TB_QUEUE_RABBIT_MQ_CONNECTION_TIMEOUT:60000}" - # RabbitMQ has a timeout for connection handshake. When clients run in heavily constrained environments, it may be necessary to increase the timeout - handshake_timeout: "${TB_QUEUE_RABBIT_MQ_HANDSHAKE_TIMEOUT:10000}" - queue-properties: - # RabbitMQ properties for Rule Engine queues - rule-engine: "${TB_QUEUE_RABBIT_MQ_RE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Core queues - core: "${TB_QUEUE_RABBIT_MQ_CORE_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Transport API queues - transport-api: "${TB_QUEUE_RABBIT_MQ_TA_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" - # RabbitMQ properties for Notification queues - notifications: "${TB_QUEUE_RABBIT_MQ_NOTIFICATIONS_QUEUE_PROPERTIES:x-max-length-bytes:1048576000;x-message-ttl:604800000}" partitions: hash_function_name: "${TB_QUEUE_PARTITIONS_HASH_FUNCTION_NAME:murmur3_128}" # murmur3_32, murmur3_128 or sha256 transport_api: @@ -371,7 +281,7 @@ queue: # Interval in milliseconds to poll api response from transport microservices response_poll_interval: "${TB_QUEUE_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" core: - # Default topic name of Kafka, RabbitMQ, etc. queue + # Default topic name topic: "${TB_QUEUE_CORE_TOPIC:tb_core}" # Interval in milliseconds to poll messages by Core microservices poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" @@ -379,7 +289,7 @@ queue: partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" # Timeout for processing a message pack by Core microservices pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:60000}" - # Stats topic name for queue Kafka, RabbitMQ, etc. + # Stats topic name usage-stats-topic: "${TB_QUEUE_US_TOPIC:tb_usage_stats}" stats: # Enable/disable statistics for Core microservices diff --git a/ui-ngx/.browserslistrc b/ui-ngx/.browserslistrc new file mode 100644 index 0000000000..e368a649b3 --- /dev/null +++ b/ui-ngx/.browserslistrc @@ -0,0 +1,19 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.dev/reference/versions#browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +>0.5% +not dead +last 2 Chrome versions +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +last 2 Android major versions +Firefox ESR diff --git a/ui-ngx/angular.json b/ui-ngx/angular.json index f605bfee8a..8f98a6cf07 100644 --- a/ui-ngx/angular.json +++ b/ui-ngx/angular.json @@ -179,7 +179,8 @@ "builder": "@angular-builders/custom-esbuild:dev-server", "options": { "buildTarget": "thingsboard:build", - "proxyConfig": "proxy.conf.js" + "proxyConfig": "proxy.conf.js", + "middlewares": ["./esbuild/tb-html-fallback-middleware.ts"] }, "configurations": { "production": { diff --git a/ui-ngx/esbuild/tb-html-fallback-middleware.ts b/ui-ngx/esbuild/tb-html-fallback-middleware.ts new file mode 100644 index 0000000000..22acf6b2b7 --- /dev/null +++ b/ui-ngx/esbuild/tb-html-fallback-middleware.ts @@ -0,0 +1,32 @@ +/// +/// Copyright © 2016-2024 The Thingsboard Authors +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +import type { ServerResponse } from 'node:http'; +import type { Connect } from 'vite'; +import type { NextHandleFunction } from 'connect'; + +const tbHtmlFallbackMiddleware: NextHandleFunction = ( + req: Connect.IncomingMessage, + _res: ServerResponse, + next: Connect.NextFunction +) => { + if (/^\/resources\/scada-symbols\/(?:system|tenant)\/[^/]+$/.test(req.url)) { + req.url = '/'; + } + next(); +} + +export default tbHtmlFallbackMiddleware; diff --git a/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html b/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html index 0e40d8e6a5..edbff9ce7e 100644 --- a/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html +++ b/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.html @@ -18,13 +18,13 @@

notification.notification
- +
diff --git a/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts b/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts index 32fcf2dc4a..ad601bd33a 100644 --- a/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts +++ b/ui-ngx/src/app/modules/home/components/notification/show-notification-popover.component.ts @@ -14,24 +14,25 @@ /// limitations under the License. /// -import { ChangeDetectorRef, Component, Input, NgZone, OnDestroy, OnInit } from '@angular/core'; +import { ChangeDetectorRef, Component, Input, NgZone, OnDestroy } from '@angular/core'; import { PageComponent } from '@shared/components/page.component'; import { TbPopoverComponent } from '@shared/components/popover.component'; import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { Notification, NotificationRequest } from '@shared/models/notification.models'; import { NotificationWebsocketService } from '@core/ws/notification-websocket.service'; -import { BehaviorSubject, Observable, ReplaySubject, Subscription } from 'rxjs'; -import { map, share, skip, tap } from 'rxjs/operators'; +import { BehaviorSubject, Observable, shareReplay } from 'rxjs'; +import { filter, skip, tap } from 'rxjs/operators'; import { Router } from '@angular/router'; import { NotificationSubscriber } from '@shared/models/telemetry/telemetry.models'; +import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; @Component({ selector: 'tb-show-notification-popover', templateUrl: './show-notification-popover.component.html', styleUrls: ['show-notification-popover.component.scss'] }) -export class ShowNotificationPopoverComponent extends PageComponent implements OnDestroy, OnInit { +export class ShowNotificationPopoverComponent extends PageComponent implements OnDestroy { @Input() onClose: () => void; @@ -42,11 +43,13 @@ export class ShowNotificationPopoverComponent extends PageComponent implements O @Input() popoverComponent: TbPopoverComponent; - private notificationSubscriber: NotificationSubscriber; - private notificationCountSubscriber: Subscription; + private notificationSubscriber = NotificationSubscriber.createNotificationsSubscription(this.notificationWsService, this.zone, 6); - notifications$: Observable; - loadNotification = false; + notifications$: Observable = this.notificationSubscriber.notifications$.pipe( + filter(value => Array.isArray(value)), + shareReplay(1), + tap(() => setTimeout(() => this.cd.markForCheck())) + ); constructor(protected store: Store, private notificationWsService: NotificationWebsocketService, @@ -54,32 +57,15 @@ export class ShowNotificationPopoverComponent extends PageComponent implements O private cd: ChangeDetectorRef, private router: Router) { super(store); - } - - ngOnInit() { - this.notificationSubscriber = NotificationSubscriber.createNotificationsSubscription(this.notificationWsService, this.zone, 6); - this.notifications$ = this.notificationSubscriber.notifications$.pipe( - map(value => { - if (Array.isArray(value)) { - this.loadNotification = true; - return value; - } - return []; - }), - share({ - connector: () => new ReplaySubject(1) - }), - tap(() => setTimeout(() => this.cd.markForCheck())) - ); - this.notificationCountSubscriber = this.notificationSubscriber.notificationCount$.pipe( + this.notificationSubscriber.notificationCount$.pipe( skip(1), + takeUntilDestroyed() ).subscribe(value => this.counter.next(value)); this.notificationSubscriber.subscribe(); } ngOnDestroy() { super.ngOnDestroy(); - this.notificationCountSubscriber.unsubscribe(); this.notificationSubscriber.unsubscribe(); this.onClose(); } diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/scada/scada-symbol.models.ts b/ui-ngx/src/app/modules/home/components/widget/lib/scada/scada-symbol.models.ts index 16ac07e6fd..81bb27ab3c 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/scada/scada-symbol.models.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/scada/scada-symbol.models.ts @@ -52,6 +52,7 @@ import { isUndefined, isUndefinedOrNull, mergeDeep, + mergeDeepIgnoreArray, parseFunction } from '@core/utils'; import { BehaviorSubject, forkJoin, Observable, Observer, of, Subject } from 'rxjs'; @@ -516,7 +517,7 @@ export class ScadaSymbolObject { const doc: XMLDocument = new DOMParser().parseFromString(this.svgContent, 'image/svg+xml'); this.metadata = parseScadaSymbolMetadataFromDom(doc); const defaults = defaultScadaSymbolObjectSettings(this.metadata); - this.settings = mergeDeep({} as ScadaSymbolObjectSettings, + this.settings = mergeDeepIgnoreArray({} as ScadaSymbolObjectSettings, defaults, this.inputSettings || {} as ScadaSymbolObjectSettings); this.prepareMetadata(); this.prepareSvgShape(doc); diff --git a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/scada/scada-symbol-object-settings.component.ts b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/scada/scada-symbol-object-settings.component.ts index 9bdff37444..9268bfc25e 100644 --- a/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/scada/scada-symbol-object-settings.component.ts +++ b/ui-ngx/src/app/modules/home/components/widget/lib/settings/common/scada/scada-symbol-object-settings.component.ts @@ -44,7 +44,7 @@ import { } from '@home/components/widget/lib/scada/scada-symbol.models'; import { IAliasController } from '@core/api/widget-api.models'; import { TargetDevice, widgetType } from '@shared/models/widget.models'; -import { mergeDeep } from '@core/utils'; +import { isDefinedAndNotNull, mergeDeepIgnoreArray } from '@core/utils'; import { ScadaSymbolBehaviorGroup, toBehaviorGroups @@ -207,7 +207,7 @@ export class ScadaSymbolObjectSettingsComponent implements OnInit, OnChanges, Co private setupValue() { if (this.metadata) { const defaults = defaultScadaSymbolObjectSettings(this.metadata); - this.modelValue = mergeDeep(defaults, this.modelValue); + this.modelValue = mergeDeepIgnoreArray(defaults, this.modelValue); this.scadaSymbolObjectSettingsFormGroup.patchValue( this.modelValue, {emitEvent: false} ); diff --git a/ui-ngx/src/app/modules/home/pages/admin/oauth2/clients/clients-table-config.resolver.ts b/ui-ngx/src/app/modules/home/pages/admin/oauth2/clients/clients-table-config.resolver.ts index d4f0af00c3..0787da268e 100644 --- a/ui-ngx/src/app/modules/home/pages/admin/oauth2/clients/clients-table-config.resolver.ts +++ b/ui-ngx/src/app/modules/home/pages/admin/oauth2/clients/clients-table-config.resolver.ts @@ -20,15 +20,10 @@ import { EntityTableColumn, EntityTableConfig } from '@home/models/entity/entities-table-config.models'; -import { - getProviderHelpLink, - OAuth2Client, - OAuth2ClientInfo, - platformTypeTranslations -} from '@shared/models/oauth2.models'; +import { OAuth2Client, OAuth2ClientInfo, platformTypeTranslations } from '@shared/models/oauth2.models'; import { TranslateService } from '@ngx-translate/core'; import { DatePipe } from '@angular/common'; -import { EntityType, entityTypeTranslations } from '@shared/models/entity-type.models'; +import { EntityType, entityTypeResources, entityTypeTranslations } from '@shared/models/entity-type.models'; import { OAuth2Service } from '@core/http/oauth2.service'; import { ClientComponent } from '@home/pages/admin/oauth2/clients/client.component'; import { ClientTableHeaderComponent } from '@home/pages/admin/oauth2/clients/client-table-header.component'; @@ -48,10 +43,7 @@ export class ClientsTableConfigResolver { this.config.entityType = EntityType.OAUTH2_CLIENT; this.config.rowPointer = true; this.config.entityTranslations = entityTypeTranslations.get(EntityType.OAUTH2_CLIENT); - this.config.entityResources = { - helpLinkId: null, - helpLinkIdForEntity: (entity: OAuth2Client) => getProviderHelpLink(entity.additionalInfo.providerName) - }; + this.config.entityResources = entityTypeResources.get(EntityType.OAUTH2_CLIENT); this.config.entityComponent = ClientComponent; this.config.headerComponent = ClientTableHeaderComponent; this.config.addDialogStyle = {width: '850px', maxHeight: '100vh'}; diff --git a/ui-ngx/src/app/modules/home/pages/mobile/applications/mobile-app-dialog.component.ts b/ui-ngx/src/app/modules/home/pages/mobile/applications/mobile-app-dialog.component.ts index 193fc4bbb5..6a12ec05aa 100644 --- a/ui-ngx/src/app/modules/home/pages/mobile/applications/mobile-app-dialog.component.ts +++ b/ui-ngx/src/app/modules/home/pages/mobile/applications/mobile-app-dialog.component.ts @@ -23,7 +23,7 @@ import { Router } from '@angular/router'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { FormGroupDirective, NgForm, UntypedFormControl } from '@angular/forms'; import { MobileApp } from '@shared/models/mobile-app.models'; -import { MobileAppComponent } from '@home/pages/mobile/applications/mobile-app.component'; +import type { MobileAppComponent } from '@home/pages/mobile/applications/mobile-app.component'; import { PlatformType } from '@shared/models/oauth2.models'; import { MobileAppService } from '@core/http/mobile-app.service'; @@ -57,6 +57,7 @@ export class MobileAppDialogComponent extends DialogComponent url }; constructor(private fb: FormBuilder) { diff --git a/ui-ngx/src/app/modules/home/pages/notification/recipient/recipient-table-config.resolver.ts b/ui-ngx/src/app/modules/home/pages/notification/recipient/recipient-table-config.resolver.ts index 2ffd51ec15..5cb91db712 100644 --- a/ui-ngx/src/app/modules/home/pages/notification/recipient/recipient-table-config.resolver.ts +++ b/ui-ngx/src/app/modules/home/pages/notification/recipient/recipient-table-config.resolver.ts @@ -15,7 +15,6 @@ /// import { - CellActionDescriptor, DateEntityTableColumn, EntityTableColumn, EntityTableConfig @@ -55,7 +54,7 @@ export class RecipientTableConfigResolver { this.config.entityTranslations = entityTypeTranslations.get(EntityType.NOTIFICATION_TARGET); this.config.entityResources = {} as EntityTypeResource; - this.config.addEntity = () => this.editTarget(null, true); + this.config.addEntity = () => this.notificationTargetDialog(null, true); this.config.entitiesFetchFunction = pageLink => this.notificationService.getNotificationTargets(pageLink); @@ -66,17 +65,10 @@ export class RecipientTableConfigResolver { this.config.deleteEntity = id => this.notificationService.deleteNotificationTarget(id.id); - this.config.cellActionDescriptors = this.configureCellActions(); - this.config.defaultSortOrder = {property: 'createdTime', direction: Direction.DESC}; this.config.handleRowClick = ($event, target) => { - $event?.stopPropagation(); - this.editTarget(target).subscribe((res) => { - if (res) { - this.config.updateData(); - } - }); + this.editTarget($event, target); return true; }; @@ -96,11 +88,12 @@ export class RecipientTableConfigResolver { return this.config; } - private configureCellActions(): Array> { - return []; + private editTarget($event: Event, target: NotificationTarget): void { + $event?.stopPropagation(); + this.notificationTargetDialog(target).subscribe(res => res ? this.config.updateData() : null); } - private editTarget(target: NotificationTarget, isAdd = false): Observable { + private notificationTargetDialog(target: NotificationTarget, isAdd = false): Observable { return this.dialog.open(RecipientNotificationDialogComponent, { disableClose: true, diff --git a/ui-ngx/src/app/modules/home/pages/notification/rule/rule-table-config.resolver.ts b/ui-ngx/src/app/modules/home/pages/notification/rule/rule-table-config.resolver.ts index a8fbc3ff65..54f8c860f1 100644 --- a/ui-ngx/src/app/modules/home/pages/notification/rule/rule-table-config.resolver.ts +++ b/ui-ngx/src/app/modules/home/pages/notification/rule/rule-table-config.resolver.ts @@ -55,7 +55,7 @@ export class RuleTableConfigResolver { this.config.entityTranslations = entityTypeTranslations.get(EntityType.NOTIFICATION_RULE); this.config.entityResources = {} as EntityTypeResource; - this.config.addEntity = () => this.editRule(null, null, true); + this.config.addEntity = () => this.notificationRuleDialog(null, true); this.config.entitiesFetchFunction = pageLink => this.notificationService.getNotificationRules(pageLink); @@ -70,11 +70,7 @@ export class RuleTableConfigResolver { this.config.defaultSortOrder = {property: 'createdTime', direction: Direction.DESC}; this.config.handleRowClick = ($event, rule) => { - this.editRule($event, rule).subscribe((res) => { - if (res) { - this.config.updateData(); - } - }); + this.editRule($event, rule); return true; }; @@ -109,12 +105,16 @@ export class RuleTableConfigResolver { name: this.translate.instant('notification.copy-rule'), icon: 'content_copy', isEnabled: () => true, - onAction: ($event, entity) => this.editRule($event, entity, false, true) + onAction: ($event, entity) => this.editRule($event, entity, true) }]; } - private editRule($event: Event, rule: NotificationRule, isAdd = false, isCopy = false): Observable { + private editRule($event: Event, rule: NotificationRule, isCopy = false): void{ $event?.stopPropagation(); + this.notificationRuleDialog(rule, false, isCopy).subscribe(res => res ? this.config.updateData() : null); + } + + private notificationRuleDialog(rule: NotificationRule, isAdd = false, isCopy = false): Observable { return this.dialog.open(RuleNotificationDialogComponent, { disableClose: true, diff --git a/ui-ngx/src/app/modules/home/pages/notification/template/configuration/notification-template-configuration.component.ts b/ui-ngx/src/app/modules/home/pages/notification/template/configuration/notification-template-configuration.component.ts index 31f66f5ea2..d29bbef697 100644 --- a/ui-ngx/src/app/modules/home/pages/notification/template/configuration/notification-template-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/pages/notification/template/configuration/notification-template-configuration.component.ts @@ -95,7 +95,8 @@ export class NotificationTemplateConfigurationComponent implements OnDestroy, Co autofocus: false, branding: false, promotion: false, - relative_urls: false + relative_urls: false, + urlconverter_callback: (url) => url }; private propagateChange = null; diff --git a/ui-ngx/src/app/modules/home/pages/notification/template/template-table-config.resolver.ts b/ui-ngx/src/app/modules/home/pages/notification/template/template-table-config.resolver.ts index 0b40b48eea..e1178da56f 100644 --- a/ui-ngx/src/app/modules/home/pages/notification/template/template-table-config.resolver.ts +++ b/ui-ngx/src/app/modules/home/pages/notification/template/template-table-config.resolver.ts @@ -53,7 +53,7 @@ export class TemplateTableConfigResolver { this.config.entityTranslations = entityTypeTranslations.get(EntityType.NOTIFICATION_TEMPLATE); this.config.entityResources = {} as EntityTypeResource; - this.config.addEntity = () => this.editTemplate(null, null, true); + this.config.addEntity = () => this.notificationTemplateDialog(null, true); this.config.entitiesFetchFunction = pageLink => this.notificationService.getNotificationTemplates(pageLink); @@ -68,11 +68,7 @@ export class TemplateTableConfigResolver { this.config.defaultSortOrder = {property: 'createdTime', direction: Direction.DESC}; this.config.handleRowClick = ($event, template) => { - this.editTemplate($event, template).subscribe((res) => { - if (res) { - this.config.updateData(); - } - }); + this.editTemplate($event, template); return true; }; @@ -94,13 +90,17 @@ export class TemplateTableConfigResolver { name: this.translate.instant('notification.copy-template'), icon: 'content_copy', isEnabled: () => true, - onAction: ($event, entity) => this.editTemplate($event, entity, false, true) + onAction: ($event, entity) => this.editTemplate($event, entity, true) } ]; } - private editTemplate($event: Event, template: NotificationTemplate, isAdd = false, isCopy = false): Observable { + private editTemplate($event: Event, template: NotificationTemplate, isCopy = false) { $event?.stopPropagation(); + this.notificationTemplateDialog(template, false, isCopy).subscribe((res) => res ? this.config.updateData() : null); + } + + private notificationTemplateDialog(template: NotificationTemplate, isAdd = false, isCopy = false): Observable { return this.dialog.open(TemplateNotificationDialogComponent, { disableClose: true, diff --git a/ui-ngx/src/app/shared/components/js-func-module-row.component.html b/ui-ngx/src/app/shared/components/js-func-module-row.component.html index 38456fbda4..7c1650ccbf 100644 --- a/ui-ngx/src/app/shared/components/js-func-module-row.component.html +++ b/ui-ngx/src/app/shared/components/js-func-module-row.component.html @@ -18,6 +18,14 @@
+ + warning + getProviderHelpLink(entity.additionalInfo.providerName) } ], [ diff --git a/ui-ngx/src/app/shared/models/js-function.models.ts b/ui-ngx/src/app/shared/models/js-function.models.ts index 5bfa50de6f..049d8f4b84 100644 --- a/ui-ngx/src/app/shared/models/js-function.models.ts +++ b/ui-ngx/src/app/shared/models/js-function.models.ts @@ -98,7 +98,7 @@ export const loadModuleMarkdownDescription = (http: HttpClient, translate: Trans } else { propDescription += `

const ${propName}: ${type}`; if (type !== 'object') { - propDescription += ` = ${prop}`; + propDescription += ' = ' + (type === 'string' ? `"${handleHtmlSpecialChars(prop)}"` : `${prop}`); } propDescription += '

'; } @@ -133,6 +133,10 @@ export const loadModuleMarkdownDescription = (http: HttpClient, translate: Trans ); } +const handleHtmlSpecialChars = (text: string): string => { + return text.replace(/&/g, '&').replace(//g, '>'); +} + export const loadModuleMarkdownSourceCode = (http: HttpClient, translate: TranslateService, resource: ResourceInfo): Observable => { let sourceCode = `
${resource.title}
${translate.instant('js-func.source-code')}
\n\n`; return loadFunctionModuleSource(http, resource.link).pipe( diff --git a/ui-ngx/src/assets/locale/locale.constant-en_US.json b/ui-ngx/src/assets/locale/locale.constant-en_US.json index fc381fbb87..a584bb453b 100644 --- a/ui-ngx/src/assets/locale/locale.constant-en_US.json +++ b/ui-ngx/src/assets/locale/locale.constant-en_US.json @@ -3339,6 +3339,8 @@ "min-max-value": "Min and max value", "min-value": "Min", "max-value": "Max", + "progress-bar": "Progress bar", + "progress-arrow": "Progress arrow", "warning-scale-color": "Warning scale color", "critical-scale-color": "Critical scale color", "scale-color": "Scale color", @@ -3361,7 +3363,8 @@ "low-critical-state-hint": "Double value indicates a low critical range up to the min value scale.", "filter-color": "Filter color", "colors": "Colors", - "alarm-colors": "Alarm colors" + "alarm-colors": "Alarm colors", + "hook-color": "Hook color" } }, "item": { @@ -3377,6 +3380,7 @@ "no-modules": "No modules configured", "add-module": "Add module", "module-alias": "Alias", + "invalid-module-alias-name": "Invalid alias name", "module-resource": "JS module resource", "not-unique-module-aliases-error": "Modules aliases must be unique!", "show-module-info": "Show module info",